campfire-cli 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- campfire_cli-0.1.0/.github/workflows/ci.yml +28 -0
- campfire_cli-0.1.0/.github/workflows/release.yml +19 -0
- campfire_cli-0.1.0/.gitignore +16 -0
- campfire_cli-0.1.0/AGENTS.md +3 -0
- campfire_cli-0.1.0/ARCHITECTURE.md +166 -0
- campfire_cli-0.1.0/COMMAND.md +46 -0
- campfire_cli-0.1.0/DECISIONS.md +7 -0
- campfire_cli-0.1.0/LICENSE +21 -0
- campfire_cli-0.1.0/PKG-INFO +141 -0
- campfire_cli-0.1.0/README.md +126 -0
- campfire_cli-0.1.0/SPEC.md +86 -0
- campfire_cli-0.1.0/alembic/SPEC.md +3 -0
- campfire_cli-0.1.0/alembic/env.py +37 -0
- campfire_cli-0.1.0/alembic/script.py.mako +22 -0
- campfire_cli-0.1.0/alembic/versions/001_initial_schema.py +81 -0
- campfire_cli-0.1.0/alembic.ini +37 -0
- campfire_cli-0.1.0/pyproject.toml +54 -0
- campfire_cli-0.1.0/scripts/SPEC.md +3 -0
- campfire_cli-0.1.0/src/campfire_cli/__init__.py +3 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/env.py +37 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/script.py.mako +22 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/001_initial_schema.py +81 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/002_workspace_project_registry.py +47 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/003_unified_workspace_state.py +113 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/004_restructure_workspace_domain.py +23 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/005_decision_channel.py +71 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/006_workspace_topology_index.py +61 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/007_workspace_adoption.py +38 -0
- campfire_cli-0.1.0/src/campfire_cli/alembic/versions/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/SPEC.md +12 -0
- campfire_cli-0.1.0/src/campfire_cli/app/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/SPEC.md +3 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/cli/base_cli.py +37 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/repository/base_repository.py +17 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/schema/base_schema.py +18 -0
- campfire_cli-0.1.0/src/campfire_cli/app/base/service/base_service.py +129 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/SPEC.md +16 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/cli/decision_cli.py +112 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/repository/decision_repository.py +199 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/schema/decision_schema.py +56 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/service/decision_projection_service.py +151 -0
- campfire_cli-0.1.0/src/campfire_cli/app/decision/service/decision_service.py +124 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/SPEC.md +51 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/cli/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/cli/document_cli.py +63 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/cli/profile_cli.py +65 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/cli/type_cli.py +49 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/repository/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/repository/document_profile_repository.py +17 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/repository/document_type_repository.py +17 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/document_profile_service.py +66 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/document_rule_service.py +316 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/document_scanner.py +38 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/document_service.py +139 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/document_type_service.py +28 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/frontmatter_apply.py +98 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/frontmatter_formatter.py +104 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/frontmatter_plan.py +75 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/profile_registry.py +166 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/type_apply.py +185 -0
- campfire_cli-0.1.0/src/campfire_cli/app/document/service/type_plan.py +80 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/SPEC.md +22 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/cli/maintenance_cli.py +103 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/repository/maintenance_repository.py +115 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/schema/maintenance_schema.py +109 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/archive_service.py +255 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/link_service.py +91 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/maintenance_protocol.py +25 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/maintenance_service.py +461 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/moc_service.py +310 -0
- campfire_cli-0.1.0/src/campfire_cli/app/maintenance/service/plan_service.py +411 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/SPEC.md +3 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/cli/skill_cli.py +44 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/repository/skill_repository.py +33 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/schema/skill_schema.py +18 -0
- campfire_cli-0.1.0/src/campfire_cli/app/skill/service/skill_service.py +146 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/SPEC.md +25 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/adoption_cli.py +83 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/config_cli.py +30 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/domain_cli.py +101 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/project_cli.py +135 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/restructure_cli.py +133 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/space_cli.py +65 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/cli/workspace_cli.py +145 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/repository/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/repository/adoption_repository.py +55 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/repository/manifest_repository.py +38 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/repository/restructure_repository.py +93 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/repository/workspace_repository.py +125 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/schema/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/schema/adoption_schema.py +47 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/schema/restructure_schema.py +64 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/schema/workspace_schema.py +225 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/adoption_protocol.py +11 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/adoption_service.py +364 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/config_service.py +189 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/domain_restructure_service.py +316 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/project_service.py +389 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/restructure_protocol.py +19 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/restructure_service.py +392 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/restructure_verifier.py +83 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/structure_service.py +494 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/workspace_protocol.py +24 -0
- campfire_cli-0.1.0/src/campfire_cli/app/workspace/service/workspace_service.py +304 -0
- campfire_cli-0.1.0/src/campfire_cli/common/SPEC.md +12 -0
- campfire_cli-0.1.0/src/campfire_cli/common/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/common/database/__init__.py +4 -0
- campfire_cli-0.1.0/src/campfire_cli/common/database/migrations.py +18 -0
- campfire_cli-0.1.0/src/campfire_cli/common/database/models.py +215 -0
- campfire_cli-0.1.0/src/campfire_cli/common/database/session.py +30 -0
- campfire_cli-0.1.0/src/campfire_cli/common/documents/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/common/documents/document_types.py +119 -0
- campfire_cli-0.1.0/src/campfire_cli/common/documents/frontmatter_schema.py +42 -0
- campfire_cli-0.1.0/src/campfire_cli/common/documents/markdown.py +66 -0
- campfire_cli-0.1.0/src/campfire_cli/common/exceptions/__init__.py +7 -0
- campfire_cli-0.1.0/src/campfire_cli/common/exceptions/base.py +19 -0
- campfire_cli-0.1.0/src/campfire_cli/common/filesystem/__init__.py +6 -0
- campfire_cli-0.1.0/src/campfire_cli/common/filesystem/atomic.py +30 -0
- campfire_cli-0.1.0/src/campfire_cli/common/filesystem/locking.py +55 -0
- campfire_cli-0.1.0/src/campfire_cli/common/governance/__init__.py +13 -0
- campfire_cli-0.1.0/src/campfire_cli/common/governance/issues.py +38 -0
- campfire_cli-0.1.0/src/campfire_cli/common/governance/locking.py +31 -0
- campfire_cli-0.1.0/src/campfire_cli/common/governance/snapshots.py +26 -0
- campfire_cli-0.1.0/src/campfire_cli/common/hashing.py +10 -0
- campfire_cli-0.1.0/src/campfire_cli/common/reports/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/common/reports/json_report.py +8 -0
- campfire_cli-0.1.0/src/campfire_cli/common/reports/markdown_report.py +29 -0
- campfire_cli-0.1.0/src/campfire_cli/config/SPEC.md +5 -0
- campfire_cli-0.1.0/src/campfire_cli/config/defaults.py +64 -0
- campfire_cli-0.1.0/src/campfire_cli/config/settings.py +50 -0
- campfire_cli-0.1.0/src/campfire_cli/container.py +130 -0
- campfire_cli-0.1.0/src/campfire_cli/main.py +133 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases/Agent/346/211/247/350/241/214/345/267/245/344/275/234/345/217/260.base +35 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases/SPEC.md +3 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases//344/273/273/345/212/241/345/267/245/344/275/234/345/217/260.base +49 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases//345/206/263/347/255/226/345/267/245/344/275/234/345/217/260.base +40 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases//345/276/205/345/275/222/346/241/243/346/226/207/346/241/243.base +28 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/bases//351/241/271/347/233/256/346/226/207/346/241/243.base +35 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/defaults/__init__.py +1 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/defaults/config.yml +458 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/SPEC.md +3 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-context-bootstrap/SKILL.md +62 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-context-bootstrap/agents/openai.yaml +3 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-conversation-router/SKILL.md +53 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-conversation-router/agents/openai.yaml +3 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-conversation-router/references/inbox-handoff.md +19 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-conversation-router/references/learning-intake.md +31 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-conversation-router/references/task-intake.md +28 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-document-capture/SKILL.md +109 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-inbox-triage/SKILL.md +23 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-weekly-report-writing/SKILL.md +21 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-weekly-report-writing/agents/openai.yaml +3 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-workspace-adoption/SKILL.md +42 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-workspace-maintenance/SKILL.md +74 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-workspace-maintenance/references//344/273/273/345/212/241/346/255/243/346/226/207/347/273/223/346/236/204.md +23 -0
- campfire_cli-0.1.0/src/campfire_cli/resources/skills/campfire-workspace-restructure/SKILL.md +52 -0
- campfire_cli-0.1.0/tests/SPEC.md +5 -0
- campfire_cli-0.1.0/tests/conftest.py +33 -0
- campfire_cli-0.1.0/tests/integration/test_cli.py +2099 -0
- campfire_cli-0.1.0/tests/unit/test_atomic_write.py +11 -0
- campfire_cli-0.1.0/tests/unit/test_common_governance.py +511 -0
- campfire_cli-0.1.0/tests/unit/test_config.py +29 -0
- campfire_cli-0.1.0/tests/unit/test_frontmatter.py +7 -0
- campfire_cli-0.1.0/tests/unit/test_repository_boundaries.py +14 -0
- campfire_cli-0.1.0/uv.lock +674 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
strategy:
|
|
11
|
+
fail-fast: false
|
|
12
|
+
matrix:
|
|
13
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
env:
|
|
16
|
+
PYTHONUTF8: "1"
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: astral-sh/setup-uv@v5
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
cache-dependency-glob: "uv.lock"
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: uv sync --frozen
|
|
25
|
+
- name: Lint
|
|
26
|
+
run: uv run ruff check src tests
|
|
27
|
+
- name: Test
|
|
28
|
+
run: uv run pytest -q
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
id-token: write
|
|
12
|
+
contents: read
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: astral-sh/setup-uv@v5
|
|
16
|
+
- name: Build
|
|
17
|
+
run: uv build
|
|
18
|
+
- name: Publish to PyPI
|
|
19
|
+
run: uv publish
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Campfire Architecture
|
|
2
|
+
|
|
3
|
+
本文固化 Campfire 的产品目标、业务模型、架构边界与长期不变量。实现细节可以演进,但不能在未记录决策的情况下偏离本文。
|
|
4
|
+
|
|
5
|
+
## 1. 产品定位
|
|
6
|
+
|
|
7
|
+
Campfire 是一个面向工作与学习场景的、本地优先的人机协作 CLI。它让人类和多个 Agent 围绕同一份可持续积累的上下文协作,并把口头要求、临时笔记、任务进度、项目资料和长期知识沉淀为可检索、可交接、可审计的工作空间。
|
|
8
|
+
|
|
9
|
+
Campfire 不把聊天记录当作长期事实来源,也不绑定 Obsidian、某一种 Agent 或某一个 Workspace。Obsidian Vault 是当前首个 Markdown 存储适配器,而不是产品边界。
|
|
10
|
+
|
|
11
|
+
Campfire 当前不负责 Agent 调度、实时消息推送或替代 Jira/Notion;它提供这些系统和不同 Agent 会话都可以共同读写的持久协作协议。
|
|
12
|
+
|
|
13
|
+
## 2. 核心业务对象
|
|
14
|
+
|
|
15
|
+
- **Workspace**:人和 Agent 共享的上下文边界;一个 Workspace 可对应一个 Markdown Vault。
|
|
16
|
+
- **Space**:Workspace 下的顶级内容容器,例如知识、工作;由 `_空间.md` 声明。
|
|
17
|
+
- **Domain**:Space 内可任意嵌套的内容边界;由 `_领域.md` 声明并拥有自动 MOC。
|
|
18
|
+
- **Project**:Workspace 连接的外部工作资源,关联代码仓库、本地路径和一个项目根 Domain。
|
|
19
|
+
- **Participant**:参与协作的人类或 Agent。
|
|
20
|
+
- **Document**:知识、项目、决策、计划、问题、记录等持久内容。
|
|
21
|
+
- **Task Channel**:围绕一项任务持续记录负责人、状态、进展、阻塞、交接、结果和验收的异步协作通道。
|
|
22
|
+
- **Inbox Item**:尚未完成归属、类型或意图判断的输入,以及需要人类确认的问题。
|
|
23
|
+
- **Decision**:人类或高级 Agent 必须回答的持久判断;以当前状态和追加事件跨会话传递。
|
|
24
|
+
- **Generated View**:由事实数据生成的 MOC、Base、报告和索引,不由人手重复维护。
|
|
25
|
+
|
|
26
|
+
## 3. 业务架构
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
工作与学习场景
|
|
30
|
+
收件箱 ──> Space ──> Domain 树 ──> 文档
|
|
31
|
+
│ │
|
|
32
|
+
└──── 待人确认 <─────┘
|
|
33
|
+
|
|
34
|
+
人机协作协议
|
|
35
|
+
提出意图 -> 分派 -> 认领 -> 执行 -> 阻塞/待确认 -> 提交结果 -> 验收 -> 完成
|
|
36
|
+
│ │
|
|
37
|
+
└──────── 交接 ──────────┘
|
|
38
|
+
|
|
39
|
+
治理能力
|
|
40
|
+
Schema + 命名 + 生命周期 + 计划/审批/执行 + 链接 + 归档 + 审计
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Task Channel 借鉴 Go 的原则:**Do not communicate by sharing memory; instead, share memory by communicating.** 多个参与者不依赖各自会话中的隐式记忆,而是通过明确的任务状态与事件共享上下文。它是持久异步 Channel,不承诺实时唤醒;外部 Agent 运行时可在其上增加通知和调度。
|
|
44
|
+
|
|
45
|
+
## 4. 系统架构
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
人类 / Codex / Claude Code / 其他 Agent
|
|
49
|
+
│
|
|
50
|
+
全局 Skill + campfire CLI
|
|
51
|
+
│
|
|
52
|
+
┌─────────┴─────────┐
|
|
53
|
+
│ Application Apps │
|
|
54
|
+
│ workspace │
|
|
55
|
+
│ space / domain │
|
|
56
|
+
│ restructure │
|
|
57
|
+
│ document │
|
|
58
|
+
│ maintenance │
|
|
59
|
+
│ skill / base │
|
|
60
|
+
└─────────┬─────────┘
|
|
61
|
+
│
|
|
62
|
+
Common 治理与原子能力
|
|
63
|
+
schema / documents / links /
|
|
64
|
+
filesystem / database / reports
|
|
65
|
+
│
|
|
66
|
+
┌───────────┴───────────┐
|
|
67
|
+
Markdown Workspace Adapter 用户级状态
|
|
68
|
+
文档事实、任务、知识、项目 ~/.campfire/
|
|
69
|
+
campfire.db + config.yml
|
|
70
|
+
batches/reports/locks
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Decision 以 SQLite 当前快照和追加事件为 SSOT。全部状态在 `_协作/decisions/` 生成只读 Markdown 投影,并由统一的决策工作台按 pending、answered、closed、cancelled 展示。Notification 与未来 Task Channel 只通过稳定 Decision id 和事件联动,不反向拥有 Decision 状态。
|
|
74
|
+
|
|
75
|
+
`app/` 按可独立理解的业务能力组织,CLI 只做参数和输出适配,Service 承担业务流程,Repository 负责外部读写。`common/` 只放跨业务复用、无独立业务流程的原子能力;不能为了“复用”把业务编排下沉到 common。
|
|
76
|
+
|
|
77
|
+
配置采用两层模型:包内 `resources/defaults/config.yml` 保存完整默认契约,用户级 `~/.campfire/config.yml` 只保存覆盖项。Mapping 递归合并,scalar 和 list 整体替换;配置不按 Workspace 复制,运行状态不写回 YAML。
|
|
78
|
+
|
|
79
|
+
Document App 是所有面向用户和 Agent 的文档命令入口;Profile、类型命名、Frontmatter 和文档规则是其内部能力。Maintenance 只编排跨文档批量维护,Workspace 的 Restructure 用例只处理存量结构重构;两者调用 Document Service,不再从 `common/` 获取文档业务流程。
|
|
80
|
+
|
|
81
|
+
Frontmatter 规则采用声明式 Profile:`base` 是最小公共契约,`knowledge`、`project-doc`、`task` 只允许一层继承。Profile Loader 将配置编译为完整 EffectiveProfile,Resolver 根据文档类型和领域上下文选择 Profile,Validator 与 Formatter 共同消费该结果。字段规则不使用每种文档一个 Python 子类,也不在 Skill 中复制。
|
|
82
|
+
|
|
83
|
+
## 5. SSOT 与派生数据
|
|
84
|
+
|
|
85
|
+
| 数据 | 唯一事实来源 | 派生或运行副本 |
|
|
86
|
+
| --- | --- | --- |
|
|
87
|
+
| 正文、知识、项目、任务 | Workspace 中的 Markdown | SQLite 索引、MOC、Base、报告 |
|
|
88
|
+
| Space、Domain 结构 | Workspace 中的 `_空间.md`、`_领域.md` | CLI 发现结果、MOC |
|
|
89
|
+
| 治理规则 | 包内 `config.yml` + `~/.campfire/config.yml` 覆盖 | 校验结果与执行计划 |
|
|
90
|
+
| Workspace、Project 注册关系 | `~/.campfire/campfire.db` | JSON 导入导出备份 |
|
|
91
|
+
| Campfire Skills | Python 包内 `resources/skills/` | 全局 Agent Skill 目录 |
|
|
92
|
+
| 文档索引、结构重构和维护状态 | `~/.campfire/campfire.db`,按 `workspace_id` 隔离 | JSON 当前快照、有限变更日志 |
|
|
93
|
+
|
|
94
|
+
SQLite 中的 Workspace 与 Project 注册数据是结构化事实,文档索引可以从 Markdown 重建;SQLite 不是知识内容的 SSOT。工具状态不写入 Workspace,因而一个 Campfire 安装可以管理多个 Workspace。
|
|
95
|
+
|
|
96
|
+
### 设备本地与跨设备边界
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
随 Workspace 同步
|
|
100
|
+
稳定 Workspace 身份
|
|
101
|
+
Space / Domain 声明
|
|
102
|
+
Project id / 名称 / 文档 Domain / Git remote
|
|
103
|
+
治理契约版本
|
|
104
|
+
│
|
|
105
|
+
▼ 新设备 attach
|
|
106
|
+
每台设备独立维护
|
|
107
|
+
Project local_path
|
|
108
|
+
SQLite 索引与运行记录
|
|
109
|
+
Decision 与事件
|
|
110
|
+
Skills 安装路径、锁、缓存和报告
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Project 的逻辑身份可以跨设备保持一致,但 `local_path` 是机器绑定:同一个 Project 在不同电脑上可以位于不同目录,也可以在某台电脑上尚未克隆。新设备通过稳定 Project id 和 `git_remote_url` 识别代码仓库,自动探测失败时由用户或 Agent 在本机显式绑定路径。
|
|
114
|
+
|
|
115
|
+
可移植元数据由 Vault 根目录唯一的 `.campfire.yaml` 承载并随 Git 或文件同步;不得提交 `campfire.db` 来共享状态。Manifest 使用稳定的 `workspace.id`,保存 Workspace 名称、治理版本,以及 Project 的 id、名称、文档领域、Git remote、默认分支和状态,明确禁止 `local_path`。现有 `_空间.md` 与 `_领域.md` 继续分别承载 Space 和 Domain 事实,避免在 Manifest 重复维护。Decision 当前保持本地,不属于该 Manifest。
|
|
116
|
+
|
|
117
|
+
新设备执行 `campfire setup --workspace <vault>`:读取 Manifest、注册本机路径、恢复 Project 逻辑元数据、同步类型/Profile/Skills/Bases 并执行健康检查。无法自动确定的项目源码路径显示为 `unbound_projects`,再用 `campfire workspace project bind` 完成本机绑定。整个流程可重复执行。
|
|
118
|
+
|
|
119
|
+
### 领域结构重构
|
|
120
|
+
|
|
121
|
+
Domain 的机器身份、显示名称和物理位置是三个独立维度:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
domain_id 稳定身份,普通重命名和移动不改变
|
|
125
|
+
name 人类可读名称,通过 domain rename 修改
|
|
126
|
+
path Workspace 内物理位置,通过 domain move 或显式目录重命名修改
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`domain rename`、`domain move` 和高风险的 `domain rekey` 是领域级事务,不应拆成大量逐文件迁移。路径变化必须联动 `_领域.md`、Project `document_domain`、`.campfire.yaml` 和路径引用;`rekey` 必须联动直接子领域的 `parent_domain`。所有命令默认预览,显式 `--confirm` 后执行。
|
|
130
|
+
|
|
131
|
+
SQLite 中的 `spaces`、`domains` 与 `documents` 是本机查询投影,不是新的事实源。`setup`、`maintenance check` 和领域重构会自动从 `.campfire.yaml`、`_空间.md`、`_领域.md` 与内容文档刷新这些表;`workspace rebuild --confirm` 只提供低频的完整恢复入口。
|
|
132
|
+
|
|
133
|
+
### 存量文件夹接管
|
|
134
|
+
|
|
135
|
+
Adoption 是首次接管边界,不属于日常 Maintenance。外部目录只读并复制到 `_收件箱/待接管/<batch>`,Vault 内目录原地冻结事实;两者随后通过同一份计划建立一个粗粒度 Domain。CLI 负责文件清单、哈希、软链接与冲突保护、声明、MOC、Project/Manifest 联动和索引;Agent 负责阅读正文、选择目标 Space/Domain,并在接管后继续生成格式治理或子领域重构计划。
|
|
136
|
+
|
|
137
|
+
## 6. 本地 Web 工作台
|
|
138
|
+
|
|
139
|
+
Campfire 可以提供由 CLI 启动的单进程本地 HTTP 服务和浏览器工作台。CLI 与 HTTP 是同级交付适配器,必须复用同一个 Application Service、Repository、事务和审计逻辑;前端不得直接访问 SQLite,也不得复制 Decision 状态机。
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
Agent / Terminal ──> CLI Adapter ──┐
|
|
143
|
+
├── Application Service ──> Repository
|
|
144
|
+
Human / Browser ──> HTTP Adapter ──┘ │
|
|
145
|
+
├── SQLite
|
|
146
|
+
└── Vault
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
第一期 Web UI 只处理 Decision:查看 pending、answered、closed、cancelled,阅读问题、证据、建议、关联文档与来源 Session,并执行 answer 或 cancel。用户回答后仍由原 Agent 消费答案并调用 close。Obsidian Base 继续作为只读快速视图,不承担状态写入。
|
|
150
|
+
|
|
151
|
+
本地服务默认只监听 `127.0.0.1`,不内置账号、云同步、远程调度或多服务器部署。前端源码独立构建,静态产物随 Python wheel 发布;最终用户不需要 Node.js。
|
|
152
|
+
|
|
153
|
+
## 7. 稳定不变量
|
|
154
|
+
|
|
155
|
+
1. 人类和 Agent 使用同一套 CLI 契约,不维护两套规则。
|
|
156
|
+
2. 写操作默认先计划、再确认、再执行;执行前复核并发变更。
|
|
157
|
+
3. 规则集中在配置契约和规则引擎,Skill、模板、CLI 不复制枚举定义。
|
|
158
|
+
4. MOC、Base、关系和报告能生成就不手工维护。
|
|
159
|
+
5. 有歧义的分类和结构重构进入待确认,不由 Agent 擅自决定。
|
|
160
|
+
6. Markdown 内容可脱离 Campfire 阅读和迁移;SQLite 丢失后可以重建。
|
|
161
|
+
7. 只有一个用户级 SQLite;所有 Workspace 业务表必须携带 `workspace_id`,Repository 查询不得越界。
|
|
162
|
+
8. 正式文档必须归入 Domain;Space 不直接替代 Domain,系统区域不伪装成 Space。
|
|
163
|
+
|
|
164
|
+
## 8. 演进方向
|
|
165
|
+
|
|
166
|
+
当前版本先稳定 Workspace 注册、存量结构重构、增量维护、归档、Skill 与治理视图。下一阶段围绕 Task Channel 补齐任务创建、进度事件、交接、待确认和验收协议,再连接工作日志、周报与绩效证据。只有出现真实用例时才新增模块,避免为未来能力预建空架构。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Campfire 稳定命令
|
|
2
|
+
|
|
3
|
+
人类与 Agent 先用 `campfire tree` 发现命令,再用任意层级的 `-h` 渐进加载参数。
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
campfire setup --workspace <vault-path> --default
|
|
7
|
+
campfire workspace resolve
|
|
8
|
+
campfire workspace rebuild
|
|
9
|
+
campfire workspace rebuild --confirm
|
|
10
|
+
campfire workspace adopt inventory --source <folder> --batch <id> [--confirm]
|
|
11
|
+
campfire workspace adopt plan --batch <id> --target-path <path> --domain-id <id> --name <name> --space <id> --type <type> --governance <policy> [--parent-domain <id>] [--project <id>]
|
|
12
|
+
campfire workspace adopt apply --batch <id> [--confirm]
|
|
13
|
+
campfire workspace adopt verify --batch <id>
|
|
14
|
+
campfire workspace attach --path <vault-path> --default
|
|
15
|
+
campfire workspace project bind --id <project-id> --local-path <repository-path>
|
|
16
|
+
campfire workspace space list
|
|
17
|
+
campfire workspace space check
|
|
18
|
+
campfire workspace space check --space <space-id>
|
|
19
|
+
campfire workspace config check
|
|
20
|
+
campfire workspace domain list
|
|
21
|
+
campfire workspace domain check
|
|
22
|
+
campfire workspace restructure inventory --scope <path> --batch <id>
|
|
23
|
+
campfire workspace restructure plan --batch <id>
|
|
24
|
+
campfire workspace restructure domain rename --domain <id> --name <name> [--rename-directory|--target-path <path>] [--project-name <name>] [--confirm]
|
|
25
|
+
campfire workspace restructure domain move --domain <id> --target-path <path> [--parent-domain <id>] [--confirm]
|
|
26
|
+
campfire workspace restructure domain rekey --domain <id> --new-id <id> [--confirm]
|
|
27
|
+
campfire workspace project resolve --path "$PWD"
|
|
28
|
+
campfire document inspect --path <file>
|
|
29
|
+
campfire document type list
|
|
30
|
+
campfire document profile list
|
|
31
|
+
campfire decision create --key <key> --question <question> --source-type <source>
|
|
32
|
+
campfire decision list --status pending
|
|
33
|
+
campfire decision show <decision-id>
|
|
34
|
+
campfire decision answer <decision-id> --answer <answer> --answered-by <actor>
|
|
35
|
+
campfire decision close <decision-id>
|
|
36
|
+
campfire decision sync
|
|
37
|
+
campfire maintenance check --summary
|
|
38
|
+
campfire maintenance plan --id <plan-id> --scope <path> [--spec <yaml-or-json>]
|
|
39
|
+
campfire maintenance show --plan <plan-id>
|
|
40
|
+
campfire maintenance apply --plan <plan-id>
|
|
41
|
+
campfire maintenance apply --plan <plan-id> --confirm
|
|
42
|
+
campfire maintenance verify --plan <plan-id>
|
|
43
|
+
campfire maintenance sync --scope <path> --dry-run
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Space、Domain、Project 的 `create`、存量目录的 `space/domain adopt`,以及文档重构、归档写操作默认先预览;审查通过后才追加 `--confirm`。`adopt` 只新增声明文件和必要 MOC,不移动已有内容。具体参数以对应命令的 `-h` 为准,避免在文档中维护第二份参数目录。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Decisions
|
|
2
|
+
|
|
3
|
+
- 2026-09-11 — Decision: 产品名使用 Campfire,Python 分发包和源码包分别使用 `campfire-cli` 与 `campfire_cli`,唯一命令入口使用 `campfire`。Why: 项目语义完整且日常调用简短。Impact: 人类和自动化统一调用 `campfire`。
|
|
4
|
+
- 2026-09-11 — Decision: CLI 源码独立维护在 `dev-lab/apps/campfire-cli`。Why: 解耦工具发布周期与 Workspace 内容。Impact: Agent 通过安装后的 CLI 操作任意 Workspace。
|
|
5
|
+
- 2026-09-12 — Decision: 产品命名为 Campfire,顶层对象从 Vault 提升为 Workspace,CLI 为 `campfire`。Why: 产品服务于人和多个 Agent 围绕共享上下文协作,而非只做 Obsidian 文档治理。Impact: 不保留 `vg`、`vault-governance` 或 Vault 内状态目录的兼容入口。
|
|
6
|
+
- 2026-09-12 — Decision: 运行状态统一位于用户级 `~/.campfire/workspaces/<id>/`。Why: 支持多个 Workspace 并使 CLI 与内容存储解耦。Impact: Markdown 是内容 SSOT,SQLite 是可重建索引。
|
|
7
|
+
- 2026-09-11 — Decision: SQLite 保存当前状态,Markdown 保持内容事实来源,JSON 只保存配置、当前关键快照和有限变更。Why: 同时获得查询能力、可移植性和 Git 可审查性。Impact: 活动数据库不提交 Git。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kepler452Byte
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: campfire-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Local-first shared context and governance CLI for humans and agents
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: alembic>=1.13
|
|
9
|
+
Requires-Dist: pydantic-settings>=2.2
|
|
10
|
+
Requires-Dist: pydantic>=2.7
|
|
11
|
+
Requires-Dist: pyyaml>=6.0
|
|
12
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
13
|
+
Requires-Dist: typer>=0.12
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
# Campfire
|
|
17
|
+
|
|
18
|
+
`campfire` 是面向工作与学习场景的本地优先人机协作 CLI。它让人类和多个 Agent 围绕持久共享上下文协作,并把一次性 Workspace 结构重构与后续增量维护分开。
|
|
19
|
+
|
|
20
|
+
产品目标、业务对象、SSOT 与模块边界见 [ARCHITECTURE.md](ARCHITECTURE.md)。Markdown/Obsidian Vault 是当前首个存储适配器,Workspace 才是面向用户的顶层概念。
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uv sync
|
|
24
|
+
uv run campfire --help
|
|
25
|
+
uv run campfire setup --workspace /path/to/vault --default
|
|
26
|
+
uv run campfire workspace list
|
|
27
|
+
uv run campfire --workspace personal maintenance check
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Vault 根目录的 `.campfire.yaml` 是可跨设备同步的 Workspace/Project 元数据事实源;它不保存任何设备绝对路径。CLI 通过本机唯一的 `~/.campfire/campfire.db` 管理路径绑定、Decision、文档索引和运行状态。各 Workspace 的配置、批次和报告保存在 `~/.campfire/workspaces/<id>/`,不会向 Workspace 写入工具状态目录。可用 `CAMPFIRE_HOME` 覆盖用户级根目录。
|
|
31
|
+
|
|
32
|
+
## 安装与调用
|
|
33
|
+
|
|
34
|
+
开发机安装:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uv tool install --editable /path/to/campfire-cli
|
|
38
|
+
campfire version
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
安装全局 Agent Skill(同步到 `~/.claude/skills` 与 `~/.agents/skills`):
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
campfire skill list # 查看包内 SSOT Skill 与全局同步状态
|
|
45
|
+
campfire skill sync # 确定性同步托管 Skill 到全局目录
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`skill` 命令不依赖已注册 Workspace,可在 `setup` 之前使用;`campfire setup` 初始化
|
|
49
|
+
Workspace 时也会自动执行一次同步。可用 `CAMPFIRE_SKILL_TARGETS`(路径分隔符分隔的
|
|
50
|
+
列表)覆盖同步目标。
|
|
51
|
+
|
|
52
|
+
人类和 Agent 使用同一条链路:全局 Skill 先调用 `campfire workspace resolve`,再读取目标 Workspace 的 `AGENTS.md`,并使用 Workspace id 调用 `campfire`。不修改原始笔记的检查可以直接执行(会刷新 SQLite 当前状态和 current 报告);`campfire workspace restructure apply`、
|
|
53
|
+
`maintenance apply` 和 `maintenance archive apply` 必须先审查计划,并使用命令要求的显式确认参数。
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
campfire workspace add --id personal --path /path/to/vault --default
|
|
57
|
+
campfire workspace create --id new-vault --path /new/path --default
|
|
58
|
+
campfire setup --workspace /path/to/existing-vault --default
|
|
59
|
+
campfire workspace attach --path /path/to/existing-vault --default
|
|
60
|
+
campfire workspace project bind --id example --local-path /path/to/repository
|
|
61
|
+
campfire workspace space list --workspace personal
|
|
62
|
+
campfire workspace domain list --workspace personal
|
|
63
|
+
campfire workspace domain check --workspace personal
|
|
64
|
+
campfire workspace space create --id research --name "研究" --path myresearch --type research
|
|
65
|
+
campfire workspace space create --id research --name "研究" --path myresearch --type research --confirm
|
|
66
|
+
campfire workspace space adopt --id research --name "研究" --path myresearch --type research
|
|
67
|
+
campfire workspace config check --workspace personal
|
|
68
|
+
campfire workspace domain create --id distributed-systems --name "分布式系统" --path "knowledge/分布式系统" --space knowledge --type knowledge-domain --governance knowledge-docs
|
|
69
|
+
campfire workspace domain create --id distributed-systems --name "分布式系统" --path "knowledge/分布式系统" --space knowledge --type knowledge-domain --governance knowledge-docs --confirm
|
|
70
|
+
campfire workspace domain adopt --id meetings --name "会议记录" --path "mywork/会议记录" --space work --type work-domain --governance work-docs
|
|
71
|
+
campfire workspace domain adopt --id meetings --name "会议记录" --path "mywork/会议记录" --space work --type work-domain --governance work-docs --confirm
|
|
72
|
+
campfire workspace project add --id example --workspace personal --name "Example" --document-domain "work/example" --local-path /path/to/repository
|
|
73
|
+
campfire workspace project list --workspace personal
|
|
74
|
+
campfire --workspace personal document profile list
|
|
75
|
+
campfire --workspace personal document profile show task
|
|
76
|
+
campfire --workspace personal document profile resolve --path "work/example/任务-示例.md"
|
|
77
|
+
campfire --workspace personal document type list
|
|
78
|
+
campfire --workspace personal document check --path "knowledge/example/知识-示例.md"
|
|
79
|
+
campfire --workspace personal document format --path "knowledge/example/知识-示例.md"
|
|
80
|
+
campfire --workspace personal document format --path "knowledge/example/知识-示例.md" --confirm
|
|
81
|
+
campfire --workspace personal decision create --key example-decision --question "需要确认什么?" --source-type agent
|
|
82
|
+
campfire --workspace personal decision list --status pending
|
|
83
|
+
campfire --workspace personal decision show <decision-id>
|
|
84
|
+
campfire --workspace personal decision answer <decision-id> --answer "确认内容" --answered-by user
|
|
85
|
+
campfire --workspace personal decision close <decision-id>
|
|
86
|
+
campfire workspace export --output campfire-registry-backup.json
|
|
87
|
+
campfire workspace import --input campfire-registry-backup.json
|
|
88
|
+
campfire workspace import --input campfire-registry-backup.json --confirm
|
|
89
|
+
campfire workspace resolve
|
|
90
|
+
campfire workspace rebuild --confirm
|
|
91
|
+
campfire workspace adopt inventory --source /path/to/folder --batch notes-001
|
|
92
|
+
campfire workspace adopt inventory --source /path/to/folder --batch notes-001 --confirm
|
|
93
|
+
campfire workspace adopt plan --batch notes-001 --target-path "mynote/新领域" --domain-id knowledge-new --name "新领域" --space knowledge --type knowledge-domain --governance knowledge-docs
|
|
94
|
+
campfire workspace adopt apply --batch notes-001 --confirm
|
|
95
|
+
campfire workspace adopt verify --batch notes-001
|
|
96
|
+
campfire tree
|
|
97
|
+
campfire --workspace personal maintenance check
|
|
98
|
+
campfire --workspace personal maintenance check --summary
|
|
99
|
+
campfire --workspace personal maintenance plan --id <plan-id>
|
|
100
|
+
campfire --workspace personal maintenance apply --plan <plan-id> --confirm
|
|
101
|
+
campfire --workspace personal maintenance sync --dry-run
|
|
102
|
+
campfire --workspace personal maintenance sync --scope "work/example"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`maintenance check` 统一负责正式文档 Schema 与枚举校验,并从当前 `_空间.md`、`_领域.md` 刷新 SQLite 中可重建的 Space、Domain 和 Document 索引;结构声明本身由 `workspace space/domain check` 校验。`maintenance sync` 只因领域结构、MOC、路径或并发安全问题阻塞。单篇文档的元数据问题会继续出现在检查报告中,但不会阻止其他领域刷新生成视图。`sync` 和 `run` 可用 `--scope` 限定同步领域。索引损坏或被删除时使用 `workspace rebuild --confirm` 从 Manifest 和 Markdown SSOT 完整恢复。
|
|
106
|
+
|
|
107
|
+
`workspace adopt` 负责首次接管已有文件夹。Vault 外来源先按哈希复制到 `_收件箱/待接管/<batch>`,原目录始终保留;Vault 内来源原地盘点。计划一次建立一个粗粒度 Domain,应用后自动生成声明与 MOC 并刷新索引。文档语义和子领域拆分仍由 Agent 通过 Maintenance/Restructure 的审批计划完成。
|
|
108
|
+
|
|
109
|
+
所有受管内容文档都使用 `base` 或 `base → knowledge/project-doc/task` 的一层配置继承;`human-request` 等没有专属字段的类型直接使用 `base`。`_空间.md`、`_领域.md` 是 Workspace 声明,不是内容文档。`document profile show` 展示编译后的完整规则,`document profile resolve` 展示指定文档最终使用的 Profile。Formatter 只按有效 Profile 排序并保留值;不允许字段由 Validator 报告,不会被自动删除。
|
|
110
|
+
|
|
111
|
+
Decision 的当前状态和追加事件位于全局 SQLite。全部状态自动投影到 `_协作/decisions/`,并统一显示在 `治理视图/决策工作台.base` 的不同状态视图中。投影不是事实源,不接受手工更新。
|
|
112
|
+
|
|
113
|
+
跨目录重构或显式修改 Frontmatter 时,先冻结范围,再传入 YAML/JSON 意图规格:
|
|
114
|
+
|
|
115
|
+
```yaml
|
|
116
|
+
operations:
|
|
117
|
+
- source: work/old-project/技术-架构.md
|
|
118
|
+
target: work/new-project/platform/技术-架构.md
|
|
119
|
+
frontmatter:
|
|
120
|
+
project: new-project
|
|
121
|
+
domain: platform
|
|
122
|
+
reason: 文档实际描述新项目的平台实现
|
|
123
|
+
approved: false
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
campfire --workspace /path/to/vault workspace restructure inventory --scope work --batch move-001
|
|
128
|
+
campfire --workspace /path/to/vault workspace restructure plan --batch move-001 --spec restructure.yaml
|
|
129
|
+
# 审查批次 plan.json,将确定项目 approved 改为 true
|
|
130
|
+
campfire --workspace /path/to/vault workspace restructure apply --batch move-001
|
|
131
|
+
campfire --workspace /path/to/vault workspace restructure apply --batch move-001 --confirm
|
|
132
|
+
campfire --workspace /path/to/vault workspace restructure verify --batch move-001
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
领域名称、路径和稳定身份分别使用 `domain rename`、`domain move` 和高风险的 `domain rekey`。领域级命令会联动领域声明、子领域关系、Project、`.campfire.yaml` 和路径引用,默认只预览,追加 `--confirm` 才执行。
|
|
136
|
+
|
|
137
|
+
Workspace Restructure、Maintenance、Archive 写入前会在治理锁内复核内容哈希;检测到其他会话修改时返回
|
|
138
|
+
`concurrent-change` 或 `source-hash-changed`,不会覆盖新内容。文档、任务状态和 Skill 模板枚举由
|
|
139
|
+
同一个治理规则引擎按照有效 `config.yml` 中的 `frontmatter_schema` 校验。
|
|
140
|
+
|
|
141
|
+
产品默认契约位于包内 `resources/defaults/config.yml`,用户只在 `~/.campfire/config.yml` 写需要覆盖的配置。首次初始化会创建最小用户配置;修改后运行 `campfire workspace config check` 验证完整有效配置。`.campfire.yaml` 是便携元数据 SSOT;本机 SQLite 是设备路径、Decision、索引和运行状态的 SSOT。`workspace export/import` 只用于本机注册库备份,不承担跨设备同步。
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Campfire
|
|
2
|
+
|
|
3
|
+
`campfire` 是面向工作与学习场景的本地优先人机协作 CLI。它让人类和多个 Agent 围绕持久共享上下文协作,并把一次性 Workspace 结构重构与后续增量维护分开。
|
|
4
|
+
|
|
5
|
+
产品目标、业务对象、SSOT 与模块边界见 [ARCHITECTURE.md](ARCHITECTURE.md)。Markdown/Obsidian Vault 是当前首个存储适配器,Workspace 才是面向用户的顶层概念。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv sync
|
|
9
|
+
uv run campfire --help
|
|
10
|
+
uv run campfire setup --workspace /path/to/vault --default
|
|
11
|
+
uv run campfire workspace list
|
|
12
|
+
uv run campfire --workspace personal maintenance check
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Vault 根目录的 `.campfire.yaml` 是可跨设备同步的 Workspace/Project 元数据事实源;它不保存任何设备绝对路径。CLI 通过本机唯一的 `~/.campfire/campfire.db` 管理路径绑定、Decision、文档索引和运行状态。各 Workspace 的配置、批次和报告保存在 `~/.campfire/workspaces/<id>/`,不会向 Workspace 写入工具状态目录。可用 `CAMPFIRE_HOME` 覆盖用户级根目录。
|
|
16
|
+
|
|
17
|
+
## 安装与调用
|
|
18
|
+
|
|
19
|
+
开发机安装:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
uv tool install --editable /path/to/campfire-cli
|
|
23
|
+
campfire version
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
安装全局 Agent Skill(同步到 `~/.claude/skills` 与 `~/.agents/skills`):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
campfire skill list # 查看包内 SSOT Skill 与全局同步状态
|
|
30
|
+
campfire skill sync # 确定性同步托管 Skill 到全局目录
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`skill` 命令不依赖已注册 Workspace,可在 `setup` 之前使用;`campfire setup` 初始化
|
|
34
|
+
Workspace 时也会自动执行一次同步。可用 `CAMPFIRE_SKILL_TARGETS`(路径分隔符分隔的
|
|
35
|
+
列表)覆盖同步目标。
|
|
36
|
+
|
|
37
|
+
人类和 Agent 使用同一条链路:全局 Skill 先调用 `campfire workspace resolve`,再读取目标 Workspace 的 `AGENTS.md`,并使用 Workspace id 调用 `campfire`。不修改原始笔记的检查可以直接执行(会刷新 SQLite 当前状态和 current 报告);`campfire workspace restructure apply`、
|
|
38
|
+
`maintenance apply` 和 `maintenance archive apply` 必须先审查计划,并使用命令要求的显式确认参数。
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
campfire workspace add --id personal --path /path/to/vault --default
|
|
42
|
+
campfire workspace create --id new-vault --path /new/path --default
|
|
43
|
+
campfire setup --workspace /path/to/existing-vault --default
|
|
44
|
+
campfire workspace attach --path /path/to/existing-vault --default
|
|
45
|
+
campfire workspace project bind --id example --local-path /path/to/repository
|
|
46
|
+
campfire workspace space list --workspace personal
|
|
47
|
+
campfire workspace domain list --workspace personal
|
|
48
|
+
campfire workspace domain check --workspace personal
|
|
49
|
+
campfire workspace space create --id research --name "研究" --path myresearch --type research
|
|
50
|
+
campfire workspace space create --id research --name "研究" --path myresearch --type research --confirm
|
|
51
|
+
campfire workspace space adopt --id research --name "研究" --path myresearch --type research
|
|
52
|
+
campfire workspace config check --workspace personal
|
|
53
|
+
campfire workspace domain create --id distributed-systems --name "分布式系统" --path "knowledge/分布式系统" --space knowledge --type knowledge-domain --governance knowledge-docs
|
|
54
|
+
campfire workspace domain create --id distributed-systems --name "分布式系统" --path "knowledge/分布式系统" --space knowledge --type knowledge-domain --governance knowledge-docs --confirm
|
|
55
|
+
campfire workspace domain adopt --id meetings --name "会议记录" --path "mywork/会议记录" --space work --type work-domain --governance work-docs
|
|
56
|
+
campfire workspace domain adopt --id meetings --name "会议记录" --path "mywork/会议记录" --space work --type work-domain --governance work-docs --confirm
|
|
57
|
+
campfire workspace project add --id example --workspace personal --name "Example" --document-domain "work/example" --local-path /path/to/repository
|
|
58
|
+
campfire workspace project list --workspace personal
|
|
59
|
+
campfire --workspace personal document profile list
|
|
60
|
+
campfire --workspace personal document profile show task
|
|
61
|
+
campfire --workspace personal document profile resolve --path "work/example/任务-示例.md"
|
|
62
|
+
campfire --workspace personal document type list
|
|
63
|
+
campfire --workspace personal document check --path "knowledge/example/知识-示例.md"
|
|
64
|
+
campfire --workspace personal document format --path "knowledge/example/知识-示例.md"
|
|
65
|
+
campfire --workspace personal document format --path "knowledge/example/知识-示例.md" --confirm
|
|
66
|
+
campfire --workspace personal decision create --key example-decision --question "需要确认什么?" --source-type agent
|
|
67
|
+
campfire --workspace personal decision list --status pending
|
|
68
|
+
campfire --workspace personal decision show <decision-id>
|
|
69
|
+
campfire --workspace personal decision answer <decision-id> --answer "确认内容" --answered-by user
|
|
70
|
+
campfire --workspace personal decision close <decision-id>
|
|
71
|
+
campfire workspace export --output campfire-registry-backup.json
|
|
72
|
+
campfire workspace import --input campfire-registry-backup.json
|
|
73
|
+
campfire workspace import --input campfire-registry-backup.json --confirm
|
|
74
|
+
campfire workspace resolve
|
|
75
|
+
campfire workspace rebuild --confirm
|
|
76
|
+
campfire workspace adopt inventory --source /path/to/folder --batch notes-001
|
|
77
|
+
campfire workspace adopt inventory --source /path/to/folder --batch notes-001 --confirm
|
|
78
|
+
campfire workspace adopt plan --batch notes-001 --target-path "mynote/新领域" --domain-id knowledge-new --name "新领域" --space knowledge --type knowledge-domain --governance knowledge-docs
|
|
79
|
+
campfire workspace adopt apply --batch notes-001 --confirm
|
|
80
|
+
campfire workspace adopt verify --batch notes-001
|
|
81
|
+
campfire tree
|
|
82
|
+
campfire --workspace personal maintenance check
|
|
83
|
+
campfire --workspace personal maintenance check --summary
|
|
84
|
+
campfire --workspace personal maintenance plan --id <plan-id>
|
|
85
|
+
campfire --workspace personal maintenance apply --plan <plan-id> --confirm
|
|
86
|
+
campfire --workspace personal maintenance sync --dry-run
|
|
87
|
+
campfire --workspace personal maintenance sync --scope "work/example"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`maintenance check` 统一负责正式文档 Schema 与枚举校验,并从当前 `_空间.md`、`_领域.md` 刷新 SQLite 中可重建的 Space、Domain 和 Document 索引;结构声明本身由 `workspace space/domain check` 校验。`maintenance sync` 只因领域结构、MOC、路径或并发安全问题阻塞。单篇文档的元数据问题会继续出现在检查报告中,但不会阻止其他领域刷新生成视图。`sync` 和 `run` 可用 `--scope` 限定同步领域。索引损坏或被删除时使用 `workspace rebuild --confirm` 从 Manifest 和 Markdown SSOT 完整恢复。
|
|
91
|
+
|
|
92
|
+
`workspace adopt` 负责首次接管已有文件夹。Vault 外来源先按哈希复制到 `_收件箱/待接管/<batch>`,原目录始终保留;Vault 内来源原地盘点。计划一次建立一个粗粒度 Domain,应用后自动生成声明与 MOC 并刷新索引。文档语义和子领域拆分仍由 Agent 通过 Maintenance/Restructure 的审批计划完成。
|
|
93
|
+
|
|
94
|
+
所有受管内容文档都使用 `base` 或 `base → knowledge/project-doc/task` 的一层配置继承;`human-request` 等没有专属字段的类型直接使用 `base`。`_空间.md`、`_领域.md` 是 Workspace 声明,不是内容文档。`document profile show` 展示编译后的完整规则,`document profile resolve` 展示指定文档最终使用的 Profile。Formatter 只按有效 Profile 排序并保留值;不允许字段由 Validator 报告,不会被自动删除。
|
|
95
|
+
|
|
96
|
+
Decision 的当前状态和追加事件位于全局 SQLite。全部状态自动投影到 `_协作/decisions/`,并统一显示在 `治理视图/决策工作台.base` 的不同状态视图中。投影不是事实源,不接受手工更新。
|
|
97
|
+
|
|
98
|
+
跨目录重构或显式修改 Frontmatter 时,先冻结范围,再传入 YAML/JSON 意图规格:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
operations:
|
|
102
|
+
- source: work/old-project/技术-架构.md
|
|
103
|
+
target: work/new-project/platform/技术-架构.md
|
|
104
|
+
frontmatter:
|
|
105
|
+
project: new-project
|
|
106
|
+
domain: platform
|
|
107
|
+
reason: 文档实际描述新项目的平台实现
|
|
108
|
+
approved: false
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
campfire --workspace /path/to/vault workspace restructure inventory --scope work --batch move-001
|
|
113
|
+
campfire --workspace /path/to/vault workspace restructure plan --batch move-001 --spec restructure.yaml
|
|
114
|
+
# 审查批次 plan.json,将确定项目 approved 改为 true
|
|
115
|
+
campfire --workspace /path/to/vault workspace restructure apply --batch move-001
|
|
116
|
+
campfire --workspace /path/to/vault workspace restructure apply --batch move-001 --confirm
|
|
117
|
+
campfire --workspace /path/to/vault workspace restructure verify --batch move-001
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
领域名称、路径和稳定身份分别使用 `domain rename`、`domain move` 和高风险的 `domain rekey`。领域级命令会联动领域声明、子领域关系、Project、`.campfire.yaml` 和路径引用,默认只预览,追加 `--confirm` 才执行。
|
|
121
|
+
|
|
122
|
+
Workspace Restructure、Maintenance、Archive 写入前会在治理锁内复核内容哈希;检测到其他会话修改时返回
|
|
123
|
+
`concurrent-change` 或 `source-hash-changed`,不会覆盖新内容。文档、任务状态和 Skill 模板枚举由
|
|
124
|
+
同一个治理规则引擎按照有效 `config.yml` 中的 `frontmatter_schema` 校验。
|
|
125
|
+
|
|
126
|
+
产品默认契约位于包内 `resources/defaults/config.yml`,用户只在 `~/.campfire/config.yml` 写需要覆盖的配置。首次初始化会创建最小用户配置;修改后运行 `campfire workspace config check` 验证完整有效配置。`.campfire.yaml` 是便携元数据 SSOT;本机 SQLite 是设备路径、Decision、索引和运行状态的 SSOT。`workspace export/import` 只用于本机注册库备份,不承担跨设备同步。
|