chore: initialize EverOS 1.0.0

md-first memory extraction framework for AI agents.

Markdown is the single source of truth; SQLite holds state and LanceDB
provides the rebuildable vector + BM25 + scalar index. The codebase follows
a single-direction DDD layering (entrypoints -> service -> memory -> infra,
with component / core / config cross-cutting) enforced by import-linter.

Engineering surface:
- Coding conventions in .claude/rules/ (path-scoped) and workflows in
  .claude/skills/ (/commit, /new-branch, /pr).
- GitHub Actions CI runs make lint + test + integration; pre-commit mirrors
  the gates locally (ruff, hygiene hooks, gitlint commit-msg).
- Commit messages follow Conventional Commits, enforced by gitlint.
- make lint also enforces datetime two-zone discipline and OpenAPI drift.
This commit is contained in:
Elliot Chen
2026-06-05 22:35:51 +08:00
commit 518b8eca85
636 changed files with 160553 additions and 0 deletions

54
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@ -0,0 +1,54 @@
name: Bug report
description: Report a reproducible problem in EverOS
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: Thanks for helping improve EverOS. Clear reproduction steps make bugs much faster to fix.
- type: dropdown
id: area
attributes:
label: Area
options:
- methods/EverCore
- methods/HyperMem
- benchmarks/EverMemBench
- benchmarks/EvoAgentBench
- use-cases
- documentation
- other
validations:
required: true
- type: textarea
id: problem
attributes:
label: What happened?
description: Describe the bug and the behavior you expected.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
placeholder: |
1. Go to ...
2. Run ...
3. See ...
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
placeholder: |
OS:
Python:
Node:
Docker:
Commit:
- type: textarea
id: logs
attributes:
label: Logs or screenshots
render: shell

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: EverOS Discussions
url: https://github.com/EverMind-AI/EverOS/discussions
about: Ask questions, share ideas, and discuss roadmap topics.

22
.github/ISSUE_TEMPLATE/docs.yml vendored Normal file
View File

@ -0,0 +1,22 @@
name: Documentation issue
description: Report unclear, missing, or outdated documentation
title: "[Docs]: "
labels: ["documentation"]
body:
- type: input
id: page
attributes:
label: Page or file
placeholder: README.md, methods/EverCore/docs/...
validations:
required: true
- type: textarea
id: issue
attributes:
label: What should be improved?
validations:
required: true
- type: textarea
id: suggestion
attributes:
label: Suggested wording or structure

View File

@ -0,0 +1,40 @@
name: Feature request
description: Suggest an improvement or new capability
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: dropdown
id: area
attributes:
label: Area
options:
- architecture methods
- benchmarks
- use cases
- developer experience
- documentation
- other
validations:
required: true
- type: textarea
id: problem
attributes:
label: Problem or opportunity
description: What user need, research gap, or workflow pain does this address?
validations:
required: true
- type: textarea
id: proposal
attributes:
label: Proposed solution
description: Describe the change you would like to see.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
- type: textarea
id: context
attributes:
label: Additional context

37
.github/ISSUE_TEMPLATE/use_case.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: Use-case proposal
description: Propose an app, demo, or integration for use-cases/
title: "[Use Case]: "
labels: ["use case"]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: What does the use case demonstrate?
validations:
required: true
- type: textarea
id: memory
attributes:
label: Memory behavior
description: What should the agent remember, retrieve, or evolve over time?
validations:
required: true
- type: textarea
id: stack
attributes:
label: Stack and dependencies
description: List frameworks, services, models, or external APIs.
- type: textarea
id: run
attributes:
label: Run path
description: How should a new developer run or inspect it?
- type: checkboxes
id: checklist
attributes:
label: Contribution checklist
options:
- label: I can include a README with setup instructions.
- label: I can avoid committing secrets, generated output, dependency folders, and image files.
- label: I can include `.env.example` if configuration is needed.

37
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,37 @@
## Summary
<!-- What changed, and why? -->
## Area
<!-- Mark the relevant option with an x. -->
- [ ] Architecture method
- [ ] Benchmark
- [ ] Use case
- [ ] Documentation
- [ ] Developer experience
- [ ] CI, build, or release
## Verification
<!-- List commands run, manual checks, screenshots, or reasons verification was not needed. -->
```text
```
## Checklist
- [ ] I kept the change scoped to the relevant area.
- [ ] I updated docs, examples, or setup notes when behavior changed.
- [ ] I added or updated tests when the change affects behavior.
- [ ] I did not commit secrets, `.env` files, dependency folders, or generated output.
- [ ] Active relative links in Markdown files resolve.
## Notes for Reviewers
<!-- Anything reviewers should pay special attention to? -->
By submitting this pull request, I agree that my contribution is licensed under
the Apache License 2.0.

20
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,20 @@
version: 2
updates:
# GitHub Actions
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
groups:
actions:
patterns: ["*"]
# Python dependencies (pip/uv) at the project root
- package-ecosystem: pip
directory: /
schedule:
interval: weekly
groups:
python-deps:
patterns: ["*"]

42
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,42 @@
name: CI
on:
push:
branches: [main, dev, master]
pull_request:
# Cancel superseded runs on the same ref to save CI minutes.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
ci:
name: lint + test + integration
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
cache-dependency-glob: uv.lock
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies (frozen)
run: make install-deps
- name: Lint (ruff + import-linter + datetime + openapi drift)
run: make lint
- name: Unit tests
run: make test
- name: Integration tests
run: make integration

137
.github/workflows/docs.yml vendored Normal file
View File

@ -0,0 +1,137 @@
name: Docs
on:
pull_request:
paths:
- "**/*.md"
- ".github/ISSUE_TEMPLATE/**"
- ".github/PULL_REQUEST_TEMPLATE.md"
- ".github/workflows/docs.yml"
push:
branches: [main]
paths:
- "**/*.md"
- ".github/ISSUE_TEMPLATE/**"
- ".github/PULL_REQUEST_TEMPLATE.md"
- ".github/workflows/docs.yml"
permissions:
contents: read
concurrency:
group: docs-${{ github.ref }}
cancel-in-progress: true
jobs:
links:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Validate active relative Markdown links
run: |
python3 - <<'PY'
from pathlib import Path
import re
import sys
# Validate every Markdown file in the documentation surface. Globbing
# (rather than a hand-maintained list) means new docs are covered
# automatically and phantom links cannot slip in. Skip vendored trees.
skip_dirs = {".git", "node_modules", ".venv", ".uv-cache"}
files = sorted(
p
for p in Path(".").rglob("*.md")
if not any(part in skip_dirs for part in p.parts)
)
missing = []
for path in files:
if not path.exists():
continue
text = path.read_text()
active = re.sub(r"<!--.*?-->", "", text, flags=re.S)
for raw in re.findall(r"\[[^\]]*\]\(([^)]+)\)", active):
link = raw.split("#", 1)[0]
if not link or link.startswith(("http://", "https://", "mailto:")):
continue
target = (path.parent / link).resolve()
try:
target.relative_to(Path.cwd().resolve())
except ValueError:
missing.append((path, raw, "outside repository"))
continue
if not target.exists():
missing.append((path, raw, "missing"))
if missing:
for path, raw, reason in missing:
print(f"{path}: {raw} -> {reason}")
sys.exit(1)
print("Active relative Markdown links resolve.")
PY
- name: Validate use-case banner links
run: |
python3 - <<'PY'
from pathlib import Path
import re
import sys
files = {
Path("README.md"): "## Use Cases",
Path("use-cases/README.md"): "## Use Case Catalogue",
}
failures = []
warnings = []
primary_link_pattern = re.compile(
r"^\[(?:Code|Plugin|Live Demo|Learn more)\]\(([^)]+)\)",
flags=re.M,
)
for path, heading in files.items():
text = path.read_text()
start = text.find(heading)
if start == -1:
failures.append(f"{path}: missing {heading}")
continue
table_start = text.find("<table>", start)
table_end = text.find("</table>", table_start)
if table_start == -1 or table_end == -1:
failures.append(f"{path}: missing use-case table")
continue
table = text[table_start:table_end]
cells = re.findall(r"<td[^>]*>(.*?)</td>", table, flags=re.S)
for index, cell in enumerate(cells, start=1):
title_match = re.search(r"####\s+(.+)", cell)
title = title_match.group(1).strip() if title_match else f"use case {index}"
banner_match = re.search(r"\[!\[[^\]]*\]\([^)]+\)\]\(([^)]+)\)", cell)
primary_match = primary_link_pattern.search(cell)
if not banner_match and primary_match:
warnings.append(f"{path}: {title}: primary link has no linked banner")
elif banner_match and not primary_match:
failures.append(f"{path}: {title}: missing primary link")
elif banner_match and primary_match and banner_match.group(1) != primary_match.group(1):
failures.append(
f"{path}: {title}: banner link {banner_match.group(1)} "
f"does not match primary link {primary_match.group(1)}"
)
if warnings:
print("\n".join(f"warning: {warning}" for warning in warnings))
if failures:
print("\n".join(failures))
sys.exit(1)
print("Use-case banner links match primary links.")
PY
- name: Validate issue template YAML
run: |
ruby -e 'require "yaml"; Dir[".github/ISSUE_TEMPLATE/*.yml"].sort.each { |p| YAML.load_file(p); puts "YAML ok: #{p}" }'