campfire-cli 0.1.8__tar.gz → 0.1.10__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.8 → campfire_cli-0.1.10}/ARCHITECTURE.md +7 -6
- campfire_cli-0.1.10/COMMAND.md +49 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/PKG-INFO +13 -13
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/README.md +12 -12
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/SPEC.md +4 -2
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/pyproject.toml +1 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/__init__.py +1 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/cli/document_cli.py +10 -4
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/schema/document_schema.py +3 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_apply_service.py +113 -57
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_move_service.py +14 -58
- campfire_cli-0.1.10/src/campfire_cli/app/document/service/document_relocation.py +59 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_service.py +12 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/service/maintenance_service.py +17 -3
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/SPEC.md +6 -6
- campfire_cli-0.1.10/src/campfire_cli/app/workspace/cli/config_cli.py +25 -0
- campfire_cli-0.1.10/src/campfire_cli/app/workspace/cli/domain_cli.py +181 -0
- campfire_cli-0.1.10/src/campfire_cli/app/workspace/cli/project_cli.py +189 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/cli/restructure_cli.py +16 -13
- campfire_cli-0.1.10/src/campfire_cli/app/workspace/cli/space_cli.py +60 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/cli/workspace_cli.py +12 -4
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/schema/restructure_schema.py +37 -2
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/adoption_service.py +29 -21
- campfire_cli-0.1.10/src/campfire_cli/app/workspace/service/domain_restructure_service.py +760 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/project_service.py +2 -4
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/restructure_service.py +102 -15
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/structure_service.py +16 -20
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/workspace_service.py +2 -6
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/agent_hints.py +9 -7
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/documents/domain_context.py +18 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/filesystem/change_set.py +9 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/container.py +1 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/main.py +7 -7
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/defaults/config.yml +3 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/SPEC.md +8 -4
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-context-bootstrap/SKILL.md +6 -4
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-document-capture/SKILL.md +5 -3
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-task-management/SKILL.md +4 -9
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-workspace-adoption/SKILL.md +2 -2
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-workspace-maintenance/SKILL.md +13 -8
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-workspace-restructure/SKILL.md +10 -6
- campfire_cli-0.1.10/src/campfire_cli/resources/skills/campfire-workspace-restructure/references/restructure-spec.md +21 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/conftest.py +2 -1
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/integration/test_cli.py +1058 -177
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/perf/test_resolve_subprocess_count.py +5 -5
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_document_apply.py +285 -23
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_file_change_executor.py +31 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/uv.lock +1 -1
- campfire_cli-0.1.8/COMMAND.md +0 -44
- campfire_cli-0.1.8/src/campfire_cli/app/workspace/cli/config_cli.py +0 -31
- campfire_cli-0.1.8/src/campfire_cli/app/workspace/cli/domain_cli.py +0 -177
- campfire_cli-0.1.8/src/campfire_cli/app/workspace/cli/project_cli.py +0 -136
- campfire_cli-0.1.8/src/campfire_cli/app/workspace/cli/space_cli.py +0 -66
- campfire_cli-0.1.8/src/campfire_cli/app/workspace/service/domain_restructure_service.py +0 -365
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/.github/workflows/ci.yml +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/.github/workflows/release.yml +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/.gitignore +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/AGENTS.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/DECISIONS.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/LICENSE +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/alembic/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/alembic/env.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/alembic/script.py.mako +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/alembic/versions/001_initial_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/alembic.ini +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/scripts/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/env.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/script.py.mako +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/001_initial_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/002_workspace_project_registry.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/003_unified_workspace_state.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/004_restructure_workspace_domain.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/005_decision_channel.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/006_workspace_topology_index.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/007_workspace_adoption.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/008_remove_adoption_batches.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/alembic/versions/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/cli/base_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/repository/base_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/schema/base_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/schema/operation_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/base/service/base_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/cli/decision_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/repository/decision_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/schema/decision_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/service/decision_projection_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/decision/service/decision_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/cli/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/cli/profile_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/cli/type_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/repository/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/repository/document_profile_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/repository/document_type_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/schema/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_profile_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_rule_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_scanner.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/document_type_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/frontmatter_apply.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/frontmatter_formatter.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/frontmatter_plan.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/kanban_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/profile_registry.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/type_apply.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/service/type_plan.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/cli/maintenance_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/repository/maintenance_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/schema/maintenance_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/service/archive_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/service/link_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/service/maintenance_protocol.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/maintenance/service/moc_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/cli/skill_cli.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/repository/skill_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/schema/skill_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/skill/service/skill_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/cli/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/repository/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/repository/manifest_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/repository/restructure_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/repository/workspace_repository.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/schema/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/schema/adoption_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/schema/workspace_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/config_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/restructure_protocol.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/restructure_verifier.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/workspace/service/workspace_protocol.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/database/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/database/migrations.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/database/models.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/database/session.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/documents/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/documents/document_types.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/documents/frontmatter_schema.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/documents/markdown.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/exceptions/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/exceptions/base.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/filesystem/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/filesystem/atomic.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/filesystem/cwd.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/filesystem/locking.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/governance/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/governance/issues.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/governance/locking.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/governance/snapshots.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/hashing.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/package_version.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/reports/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/reports/json_report.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/common/reports/markdown_report.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/config/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/config/defaults.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/config/settings.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases/Agent/346/211/247/350/241/214/345/267/245/344/275/234/345/217/260.base" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases//344/273/273/345/212/241/345/267/245/344/275/234/345/217/260.base" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases//345/206/263/347/255/226/345/267/245/344/275/234/345/217/260.base" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases//345/276/205/345/275/222/346/241/243/346/226/207/346/241/243.base" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/bases//351/241/271/347/233/256/346/226/207/346/241/243.base" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/defaults/__init__.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-context-bootstrap/agents/openai.yaml +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-conversation-router/SKILL.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-conversation-router/agents/openai.yaml +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-conversation-router/references/inbox-handoff.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-conversation-router/references/learning-intake.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-conversation-router/references/task-intake.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-inbox-triage/SKILL.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-kanban-board/SKILL.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-weekly-report-writing/SKILL.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/resources/skills/campfire-weekly-report-writing/agents/openai.yaml +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/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" +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/SPEC.md +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/perf/test_read_counts.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_agent_hints.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_atomic_write.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_common_governance.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_config.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_domain_context.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_frontmatter.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_kanban_service.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_migrations.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_package_version.py +0 -0
- {campfire_cli-0.1.8 → campfire_cli-0.1.10}/tests/unit/test_repository_boundaries.py +0 -0
|
@@ -97,7 +97,7 @@ Campfire 不是“Markdown 版 kubectl”,而是面向人机协作场景组合
|
|
|
97
97
|
| --- | --- | --- |
|
|
98
98
|
| 语义原子性 | 一条命令只表达一个可以用一句话说清的用户意图 | `document move` 表达“在已声明 Domain 之间正确移动一篇文档” |
|
|
99
99
|
| 一致性原子性 | 为保持该意图不变量而必须一起变更的事实,属于同一个变更集;整体成功或恢复到执行前 | 移动文档时同步修复可确定解析的引用 |
|
|
100
|
-
| 可组合原子性 |
|
|
100
|
+
| 可组合原子性 | 不相关的派生治理不隐式执行;只有实际写入成功的结果用结构化 `follow_up` 声明必要步骤,由 Skill 决定组合顺序 | `document apply` 预览时 `follow_up` 为空,写入后只在必要时返回一个 scoped `maintenance sync` |
|
|
101
101
|
|
|
102
102
|
命令副作用按下列边界分类:
|
|
103
103
|
|
|
@@ -118,16 +118,17 @@ Campfire 不是“Markdown 版 kubectl”,而是面向人机协作场景组合
|
|
|
118
118
|
命令设计遵循以下约束:
|
|
119
119
|
|
|
120
120
|
1. **对象域优先**:公共入口采用 `campfire <object-domain> <verb>`,例如 `document apply`、`maintenance check`;动词在所属业务对象内保持单义,不为同一行为保留多个别名。
|
|
121
|
-
2. **意图原子、派生显式**:`document apply`
|
|
121
|
+
2. **意图原子、派生显式**:`document apply` 创建或更新文档,并在显式类型变化时将类型、文件名前缀和确定性引用作为同一变更提交;`document move` 原子完成单文档跨 Domain 移动、目标 Profile 对齐和确定性引用修复。命令只在 MOC、关系页或索引可能变化时返回零或一个可直接执行的最小 scope `maintenance sync`。
|
|
122
122
|
3. **契约声明式,变更显式**:Profile 是字段、类型、枚举、顺序和条件必填的 SSOT。Agent 提交业务值,CLI 解析有效 Profile 并拒绝猜测;已有文档只修改明确给出的字段或正文操作。
|
|
123
123
|
4. **写入先证明安全**:写命令默认预览,显式确认后才提交;提交时在锁内复核快照或期望哈希,多文件变更作为一个 ChangeSet 执行,失败回滚,避免静默覆盖和部分写入。
|
|
124
124
|
5. **人类与 Agent 共用一个契约**:命令和结果只有一套语义。JSON 状态、issues、missing fields 与 follow-up 供 Agent 稳定消费,`tree` 和分层 `-h` 供人类与 Agent 渐进发现,不维护第二套参数目录。
|
|
125
125
|
6. **语义与机制分层**:人类决定高风险取舍,Agent 理解正文和业务语义,Skill 规定加载时机、事实门禁与 SOP,CLI 只执行可确定验证的治理机制。歧义进入 Decision,不为“自动化成功”而猜测。
|
|
126
126
|
7. **聚合入口是少数例外**:`setup` 和 `upgrade` 可以编排多个服务,因为它们表达完整安装生命周期;日常内容治理保持原子能力,避免重新出现 `maintenance run` 一类不可审查的聚合入口。
|
|
127
|
+
8. **参数最小充分、黄金路径唯一**:调用方只提交 CLI 无法可靠推导的事实。已受管的 Workspace、Space、Domain 和 Project 优先使用稳定 id,路径只用于外部输入、未接管来源、显式物理位置或尚无稳定 id 的文档;同一事实不得同时要求 id、完整路径和父级关系。一个常规意图只保留一个公共入口,不用互斥模式参数、兼容别名或要求 Agent 手工拼装底层步骤来表达同一行为。
|
|
127
128
|
|
|
128
129
|
横切关注点与业务 SOP 不使用同一种复用手段。哈希复核、写锁、原子替换和失败恢复由显式 ChangeSet Executor 复用;写命令返回的 `follow_up` 由 Skill 消费。不为了复用 Maintenance 而引入 AOP 切面、命令总线、全局钩子或隐式中间件。
|
|
129
130
|
|
|
130
|
-
因此,`document apply` 的准确含义是“对一个 Markdown 文档应用经 Profile
|
|
131
|
+
因此,`document apply` 的准确含义是“对一个 Markdown 文档应用经 Profile 校验的显式意图”,不是“把完整声明持续调谐到某个服务端状态”。创建时文件名可省略类型前缀;显式变更类型时,CLI 负责同步类型、前缀和可确定引用。用户或 Agent 可以直接 edit 唯一路径下的已有正文;只有新建文档、修改 Frontmatter/类型/归属或需要派生治理时才进入 CLI 工作流。
|
|
131
132
|
|
|
132
133
|
## 5. SSOT 与派生数据
|
|
133
134
|
|
|
@@ -163,7 +164,7 @@ Project 的逻辑身份可以跨设备保持一致,但 `local_path` 是机器
|
|
|
163
164
|
|
|
164
165
|
可移植元数据由 Vault 根目录唯一的 `.campfire.yaml` 承载并随 Git 或文件同步;不得提交 `campfire.db` 来共享状态。Manifest 使用稳定的 `workspace.id`,保存 Workspace 名称、治理版本,以及 Project 的 id、名称、文档领域、Git remote、默认分支和状态,明确禁止 `local_path`。现有 `_空间.md` 与 `_领域.md` 继续分别承载 Space 和 Domain 事实,避免在 Manifest 重复维护。Decision 当前保持本地,不属于该 Manifest。
|
|
165
166
|
|
|
166
|
-
新设备执行 `campfire setup --
|
|
167
|
+
新设备执行 `campfire setup --path <vault>`:读取 Manifest、注册本机路径、恢复 Project 逻辑元数据、同步类型/Profile/Skills/Bases 并执行健康检查。已注册 Workspace 只通过根级 `campfire --workspace <id> ...` 显式选择。无法自动确定的项目源码路径显示为 `unbound_projects`,再用 `campfire workspace project bind` 完成本机绑定。整个流程可重复执行。
|
|
167
168
|
|
|
168
169
|
### 领域结构重构
|
|
169
170
|
|
|
@@ -172,10 +173,10 @@ Domain 的机器身份、显示名称和物理位置是三个独立维度:
|
|
|
172
173
|
```text
|
|
173
174
|
domain_id 稳定身份,普通重命名和移动不改变
|
|
174
175
|
name 人类可读名称,通过 domain rename 修改
|
|
175
|
-
path Workspace 内物理位置,通过 domain move
|
|
176
|
+
path Workspace 内物理位置,通过 domain move 修改
|
|
176
177
|
```
|
|
177
178
|
|
|
178
|
-
`domain rename`、`domain move` 和高风险的 `domain rekey`
|
|
179
|
+
`domain rename`、`domain move`、`domain merge`、`domain delete` 和高风险的 `domain rekey` 是领域级意图原子事务,不应拆成大量逐文件迁移。路径变化必须联动 `_领域.md`、Project `document_domain`、`.campfire.yaml` 和路径引用;`rekey` 必须联动直接子领域的 `parent_domain`。`merge` 把源 Domain 的受管内容迁入目标 Domain,并在不变量满足时移除源 Domain;`delete` 只删除没有内容、附件、子 Domain 或 Project 绑定的逻辑空 Domain。它们不是跨业务聚合入口,内部必须复用同一 ChangeSet、快照复核和失败恢复边界。所有命令默认预览,显式 `--confirm` 后执行。
|
|
179
180
|
|
|
180
181
|
SQLite 中的 `spaces`、`domains` 与 `documents` 是本机查询投影,不是新的事实源。`setup`、`maintenance check` 和领域重构会自动从 `.campfire.yaml`、`_空间.md`、`_领域.md` 与内容文档刷新这些表;`workspace rebuild --confirm` 只提供低频的完整恢复入口。
|
|
181
182
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Campfire 稳定命令
|
|
2
|
+
|
|
3
|
+
人类与 Agent 先用 `campfire tree` 发现命令,再用任意层级的 `-h` 渐进加载参数。
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
campfire setup --path <vault-path> [--id <workspace-id>] --default
|
|
7
|
+
campfire upgrade
|
|
8
|
+
campfire skill sync
|
|
9
|
+
campfire base sync
|
|
10
|
+
campfire workspace resolve
|
|
11
|
+
campfire workspace rebuild
|
|
12
|
+
campfire workspace rebuild --confirm
|
|
13
|
+
campfire workspace project bind --id <project-id> --local-path <repository-path>
|
|
14
|
+
campfire workspace space list
|
|
15
|
+
campfire workspace space check
|
|
16
|
+
campfire workspace space check --space <space-id>
|
|
17
|
+
campfire workspace config check
|
|
18
|
+
campfire workspace domain list
|
|
19
|
+
campfire workspace domain check
|
|
20
|
+
campfire workspace domain create --id <id> --name <name> --path <workspace-relative-path> --type <type> [--governance <policy>] [--project <id>] [--confirm]
|
|
21
|
+
campfire workspace domain adopt --source <folder> --id <id> --name <name> --type <type> [--target-path <path>] [--governance <policy>] [--project <id>] [--confirm]
|
|
22
|
+
campfire workspace domain rename --domain <id> --name <name> [--confirm]
|
|
23
|
+
campfire workspace domain move --domain <id> --target <space-or-domain-id> [--confirm]
|
|
24
|
+
campfire workspace domain merge --source <id> --target <id> [--confirm]
|
|
25
|
+
campfire workspace domain delete --domain <id> [--confirm]
|
|
26
|
+
campfire workspace domain rekey --domain <id> --new-id <id> [--confirm]
|
|
27
|
+
campfire workspace restructure inventory --scope <path> --batch <id>
|
|
28
|
+
campfire workspace restructure plan --batch <id>
|
|
29
|
+
campfire workspace project resolve --path "$PWD"
|
|
30
|
+
campfire document apply --path <workspace-relative-markdown> --type <type> --set <field=value> [--body-file <path>] [--confirm]
|
|
31
|
+
campfire document move --path <source> --domain <target-domain-id> [--name <filename>] [--set <field=value>] [--unset <field>] [--expected-hash <sha256>] [--confirm]
|
|
32
|
+
campfire document inspect --path <file>
|
|
33
|
+
campfire document type list
|
|
34
|
+
campfire document profile list
|
|
35
|
+
campfire decision create --key <key> --question <question> --source-type <source>
|
|
36
|
+
campfire decision list --status pending
|
|
37
|
+
campfire decision show <decision-id>
|
|
38
|
+
campfire decision answer <decision-id> --answer <answer> --answered-by <actor>
|
|
39
|
+
campfire decision close <decision-id>
|
|
40
|
+
campfire decision sync
|
|
41
|
+
campfire maintenance check --summary
|
|
42
|
+
campfire maintenance sync --scope <path> [--dry-run]
|
|
43
|
+
campfire maintenance archive check [--scope <path>]
|
|
44
|
+
campfire maintenance archive apply [--scope <path>] --confirm
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Space、Domain、Project 的 `create`/`adopt`,以及文档移动、重构、归档写操作默认先预览;审查通过后才追加 `--confirm`。已注册 Workspace 只通过根级 `campfire --workspace <id> ...` 选择;已声明 Space、Domain 和 Project 使用稳定 ID,CLI 自行推导路径和父子关系。路径参数只用于新位置、具体文件、外部输入和显式扫描范围。
|
|
48
|
+
|
|
49
|
+
`document apply` 可新建、更新、为已有正文补齐 Frontmatter,或通过显式 `--type` 原子转换文档类型。创建和类型转换时,CLI 根据文档类型推导文件名前缀,并在结果的 `target` 中返回最终路径;调用方只提交标题或现有路径,不手工同步类型与前缀。`document move` 可在任意已声明 Domain 之间移动单篇文档并对齐可确定的 `domain`/`project`。目标 Profile 缺少语义字段时返回 `missing_fields`,调用方补齐明确业务值。只有实际写入成功的结果才可返回零或一个、且可直接执行的 scoped `maintenance sync` follow-up;Domain 内部路径会归一化为对应 Domain,预览、阻塞或无派生影响时返回空列表。具体参数以对应命令的 `-h` 为准。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: campfire-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: Local-first shared context and governance CLI for humans and agents
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -49,7 +49,7 @@ uv tool install --editable /path/to/campfire-cli
|
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
51
|
# 1. 接入已有 Vault(目录已存在,含或不含 .campfire.yaml)
|
|
52
|
-
campfire setup --
|
|
52
|
+
campfire setup --path /path/to/vault --default
|
|
53
53
|
|
|
54
54
|
# 2. 或者从零创建新 Workspace(初始化目录结构并注册)
|
|
55
55
|
campfire workspace create --id personal --path /path/to/vault --default
|
|
@@ -59,7 +59,7 @@ campfire maintenance check --summary
|
|
|
59
59
|
campfire maintenance sync --dry-run
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
不指定 `--
|
|
62
|
+
不指定 `--path` 运行 `campfire setup` 是降级执行而不是报错:仍会同步全局 Skill 与提示词路标,输出接入引导,并显式列出被跳过的 Manifest 相关步骤。
|
|
63
63
|
|
|
64
64
|
`setup` 与 `skill sync` 会向 `~/.claude/CLAUDE.md`、`~/.agents/AGENTS.md` 注入幂等的 campfire 路标块(带注释标记、不触碰块外内容;`CAMPFIRE_AGENT_HINT_PATH` 可覆盖目标),并把托管 Skill 同步到 `~/.claude/skills`、`~/.agents/skills`(`CAMPFIRE_SKILL_TARGETS` 可覆盖)。Agent 冷启动时由此知道本机装有 campfire。
|
|
65
65
|
|
|
@@ -79,7 +79,7 @@ Workspace ── Space ── Domain 树 ── 文档
|
|
|
79
79
|
| Decision | 需要人类或高级 Agent 回答的持久判断 | 全局 SQLite,投影到 `_协作/decisions/` |
|
|
80
80
|
| Generated View | MOC、相关文档页、Base、报告 | 派生数据,能生成就不手工维护 |
|
|
81
81
|
|
|
82
|
-
设备边界:`.campfire.yaml` 只保存可跨设备同步的稳定身份与逻辑关联(Project id、Git remote、文档 Domain 等),禁止本机绝对路径;新设备执行 `campfire setup --
|
|
82
|
+
设备边界:`.campfire.yaml` 只保存可跨设备同步的稳定身份与逻辑关联(Project id、Git remote、文档 Domain 等),禁止本机绝对路径;新设备执行 `campfire setup --path <vault>` 即可恢复。本机路径绑定、索引、Decision、锁与报告都在 `~/.campfire/`(可用 `CAMPFIRE_HOME` 覆盖),按 Workspace 隔离。
|
|
83
83
|
|
|
84
84
|
## 常用命令
|
|
85
85
|
|
|
@@ -94,7 +94,7 @@ campfire maintenance sync [--dry-run] [--scope] # 刷新 MOC 与相关文档页
|
|
|
94
94
|
campfire maintenance archive check / apply # 归档候选检查与执行
|
|
95
95
|
|
|
96
96
|
campfire document inspect / check / format # 单篇文档查看、校验、格式化
|
|
97
|
-
campfire document apply / move #
|
|
97
|
+
campfire document apply / move # 创建更新、类型转换、跨 Domain 移动
|
|
98
98
|
campfire document profile list / show / resolve # Frontmatter Profile 规则
|
|
99
99
|
campfire document type list # 文档类型与前缀
|
|
100
100
|
|
|
@@ -106,9 +106,9 @@ campfire decision create / list / answer / close # 持久决策通道
|
|
|
106
106
|
```bash
|
|
107
107
|
campfire workspace space create --id research --name "研究" --path myresearch --type research
|
|
108
108
|
campfire workspace domain create --id wiki --name "Wiki" --path "mywork/项目/wiki" \
|
|
109
|
-
--
|
|
110
|
-
campfire workspace project adopt --id example
|
|
111
|
-
--name "Example" --
|
|
109
|
+
--type knowledge-domain --confirm
|
|
110
|
+
campfire --workspace personal workspace project adopt --id example \
|
|
111
|
+
--name "Example" --domain project-example --local-path /path/to/repo
|
|
112
112
|
campfire workspace rebuild --confirm # 索引损坏时从 SSOT 完整恢复
|
|
113
113
|
```
|
|
114
114
|
|
|
@@ -118,12 +118,12 @@ campfire workspace rebuild --confirm # 索引损坏时从 SSOT 完
|
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
120
|
campfire workspace domain adopt --source /path/to/folder --target-path "mynote/新领域" \
|
|
121
|
-
--id knowledge-new --name "新领域"
|
|
121
|
+
--id knowledge-new --name "新领域" \
|
|
122
122
|
--type knowledge-domain --governance knowledge-docs
|
|
123
123
|
# 审查同一份结构化计划后,对相同命令追加 --confirm
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
单篇文档在已声明 Domain 之间移动使用 `document move
|
|
126
|
+
单篇文档在已声明 Domain 之间移动使用 `document move --path <source> --domain <target-domain-id> [--name <filename>]`。常见 Domain 调整直接使用 `domain move/merge/delete`;只有批量文档映射、领域拆分或 Frontmatter Patch 才进入持久批次:
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
129
|
campfire workspace restructure inventory --scope work --batch move-001
|
|
@@ -132,19 +132,19 @@ campfire workspace restructure apply --batch move-001 --confirm
|
|
|
132
132
|
campfire workspace restructure verify --batch move-001
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
领域三个维度独立演进:`domain rename`(显示名)、`domain move
|
|
135
|
+
领域三个维度独立演进:`domain rename`(显示名)、`domain move --target <space-or-domain-id>`(物理位置)、`domain rekey`(稳定身份,高风险)。领域合并和逻辑空领域删除分别使用 `domain merge`、`domain delete`;领域级命令联动 `_领域.md`、子领域、Project、`.campfire.yaml` 与路径引用。
|
|
136
136
|
|
|
137
137
|
## 治理模型
|
|
138
138
|
|
|
139
139
|
- **校验分工**:`maintenance check` 统一负责正式文档的 Schema 与枚举校验,并刷新可重建索引;结构声明由 `workspace space/domain check` 校验;`maintenance sync` 只因结构、MOC、路径或并发安全问题阻塞,单篇文档问题不阻止其他领域刷新。
|
|
140
140
|
- **Frontmatter Profile**:声明式一层继承(`base` 或 `base → knowledge/project-doc/task`),`document profile show` 展示编译后的完整规则;Formatter 只按有效 Profile 排序并保留值,不允许字段由 Validator 报告、不自动删除。
|
|
141
141
|
- **并发与提交安全**:写入前在治理锁内复核内容哈希,外部变化返回 `concurrent-change` / `source-hash-changed`,拒绝覆盖;多文件写入和路径移动经同一 ChangeSet 提交,失败恢复到执行前。
|
|
142
|
-
-
|
|
142
|
+
- **按需后续治理**:写入命令只在实际写入成功且派生内容可能变化时返回零或一个、且可直接执行的最小 scope `maintenance sync`;预览和阻塞结果的 `follow_up` 为空。位于 Domain 内部的 scope 由 CLI 归一化为有效 Domain。Skill 消费该结果,没有 follow-up 就结束,不固定追加 dry-run 或全量 check。
|
|
143
143
|
- **配置两层模型**:产品默认契约在包内 `resources/defaults/config.yml`(SSOT),用户只在 `~/.campfire/config.yml` 写覆盖项;Mapping 递归合并,`campfire workspace config check` 验证有效配置。
|
|
144
144
|
|
|
145
145
|
## Agent 协作
|
|
146
146
|
|
|
147
|
-
全局 Skill(`campfire skill list` 查看托管清单,`campfire skill sync` 手动同步)定义了 Agent
|
|
147
|
+
全局 Skill(`campfire skill list` 查看托管清单,`campfire skill sync` 手动同步)定义了 Agent 的标准工作流:已给出唯一文件路径的正文读取或小改直接使用文件工具;新建文档、修改 Frontmatter/类型/归属或执行结构治理时才加载 bootstrap,并使用 `document apply/move` 等原子命令。批量结构调整用 `workspace restructure`,归档用 `maintenance archive`。有歧义的分类和重构进入 Decision,不由 Agent 擅自决定。
|
|
148
148
|
|
|
149
149
|
## 许可
|
|
150
150
|
|
|
@@ -33,7 +33,7 @@ uv tool install --editable /path/to/campfire-cli
|
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
# 1. 接入已有 Vault(目录已存在,含或不含 .campfire.yaml)
|
|
36
|
-
campfire setup --
|
|
36
|
+
campfire setup --path /path/to/vault --default
|
|
37
37
|
|
|
38
38
|
# 2. 或者从零创建新 Workspace(初始化目录结构并注册)
|
|
39
39
|
campfire workspace create --id personal --path /path/to/vault --default
|
|
@@ -43,7 +43,7 @@ campfire maintenance check --summary
|
|
|
43
43
|
campfire maintenance sync --dry-run
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
不指定 `--
|
|
46
|
+
不指定 `--path` 运行 `campfire setup` 是降级执行而不是报错:仍会同步全局 Skill 与提示词路标,输出接入引导,并显式列出被跳过的 Manifest 相关步骤。
|
|
47
47
|
|
|
48
48
|
`setup` 与 `skill sync` 会向 `~/.claude/CLAUDE.md`、`~/.agents/AGENTS.md` 注入幂等的 campfire 路标块(带注释标记、不触碰块外内容;`CAMPFIRE_AGENT_HINT_PATH` 可覆盖目标),并把托管 Skill 同步到 `~/.claude/skills`、`~/.agents/skills`(`CAMPFIRE_SKILL_TARGETS` 可覆盖)。Agent 冷启动时由此知道本机装有 campfire。
|
|
49
49
|
|
|
@@ -63,7 +63,7 @@ Workspace ── Space ── Domain 树 ── 文档
|
|
|
63
63
|
| Decision | 需要人类或高级 Agent 回答的持久判断 | 全局 SQLite,投影到 `_协作/decisions/` |
|
|
64
64
|
| Generated View | MOC、相关文档页、Base、报告 | 派生数据,能生成就不手工维护 |
|
|
65
65
|
|
|
66
|
-
设备边界:`.campfire.yaml` 只保存可跨设备同步的稳定身份与逻辑关联(Project id、Git remote、文档 Domain 等),禁止本机绝对路径;新设备执行 `campfire setup --
|
|
66
|
+
设备边界:`.campfire.yaml` 只保存可跨设备同步的稳定身份与逻辑关联(Project id、Git remote、文档 Domain 等),禁止本机绝对路径;新设备执行 `campfire setup --path <vault>` 即可恢复。本机路径绑定、索引、Decision、锁与报告都在 `~/.campfire/`(可用 `CAMPFIRE_HOME` 覆盖),按 Workspace 隔离。
|
|
67
67
|
|
|
68
68
|
## 常用命令
|
|
69
69
|
|
|
@@ -78,7 +78,7 @@ campfire maintenance sync [--dry-run] [--scope] # 刷新 MOC 与相关文档页
|
|
|
78
78
|
campfire maintenance archive check / apply # 归档候选检查与执行
|
|
79
79
|
|
|
80
80
|
campfire document inspect / check / format # 单篇文档查看、校验、格式化
|
|
81
|
-
campfire document apply / move #
|
|
81
|
+
campfire document apply / move # 创建更新、类型转换、跨 Domain 移动
|
|
82
82
|
campfire document profile list / show / resolve # Frontmatter Profile 规则
|
|
83
83
|
campfire document type list # 文档类型与前缀
|
|
84
84
|
|
|
@@ -90,9 +90,9 @@ campfire decision create / list / answer / close # 持久决策通道
|
|
|
90
90
|
```bash
|
|
91
91
|
campfire workspace space create --id research --name "研究" --path myresearch --type research
|
|
92
92
|
campfire workspace domain create --id wiki --name "Wiki" --path "mywork/项目/wiki" \
|
|
93
|
-
--
|
|
94
|
-
campfire workspace project adopt --id example
|
|
95
|
-
--name "Example" --
|
|
93
|
+
--type knowledge-domain --confirm
|
|
94
|
+
campfire --workspace personal workspace project adopt --id example \
|
|
95
|
+
--name "Example" --domain project-example --local-path /path/to/repo
|
|
96
96
|
campfire workspace rebuild --confirm # 索引损坏时从 SSOT 完整恢复
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -102,12 +102,12 @@ campfire workspace rebuild --confirm # 索引损坏时从 SSOT 完
|
|
|
102
102
|
|
|
103
103
|
```bash
|
|
104
104
|
campfire workspace domain adopt --source /path/to/folder --target-path "mynote/新领域" \
|
|
105
|
-
--id knowledge-new --name "新领域"
|
|
105
|
+
--id knowledge-new --name "新领域" \
|
|
106
106
|
--type knowledge-domain --governance knowledge-docs
|
|
107
107
|
# 审查同一份结构化计划后,对相同命令追加 --confirm
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
单篇文档在已声明 Domain 之间移动使用 `document move
|
|
110
|
+
单篇文档在已声明 Domain 之间移动使用 `document move --path <source> --domain <target-domain-id> [--name <filename>]`。常见 Domain 调整直接使用 `domain move/merge/delete`;只有批量文档映射、领域拆分或 Frontmatter Patch 才进入持久批次:
|
|
111
111
|
|
|
112
112
|
```bash
|
|
113
113
|
campfire workspace restructure inventory --scope work --batch move-001
|
|
@@ -116,19 +116,19 @@ campfire workspace restructure apply --batch move-001 --confirm
|
|
|
116
116
|
campfire workspace restructure verify --batch move-001
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
领域三个维度独立演进:`domain rename`(显示名)、`domain move
|
|
119
|
+
领域三个维度独立演进:`domain rename`(显示名)、`domain move --target <space-or-domain-id>`(物理位置)、`domain rekey`(稳定身份,高风险)。领域合并和逻辑空领域删除分别使用 `domain merge`、`domain delete`;领域级命令联动 `_领域.md`、子领域、Project、`.campfire.yaml` 与路径引用。
|
|
120
120
|
|
|
121
121
|
## 治理模型
|
|
122
122
|
|
|
123
123
|
- **校验分工**:`maintenance check` 统一负责正式文档的 Schema 与枚举校验,并刷新可重建索引;结构声明由 `workspace space/domain check` 校验;`maintenance sync` 只因结构、MOC、路径或并发安全问题阻塞,单篇文档问题不阻止其他领域刷新。
|
|
124
124
|
- **Frontmatter Profile**:声明式一层继承(`base` 或 `base → knowledge/project-doc/task`),`document profile show` 展示编译后的完整规则;Formatter 只按有效 Profile 排序并保留值,不允许字段由 Validator 报告、不自动删除。
|
|
125
125
|
- **并发与提交安全**:写入前在治理锁内复核内容哈希,外部变化返回 `concurrent-change` / `source-hash-changed`,拒绝覆盖;多文件写入和路径移动经同一 ChangeSet 提交,失败恢复到执行前。
|
|
126
|
-
-
|
|
126
|
+
- **按需后续治理**:写入命令只在实际写入成功且派生内容可能变化时返回零或一个、且可直接执行的最小 scope `maintenance sync`;预览和阻塞结果的 `follow_up` 为空。位于 Domain 内部的 scope 由 CLI 归一化为有效 Domain。Skill 消费该结果,没有 follow-up 就结束,不固定追加 dry-run 或全量 check。
|
|
127
127
|
- **配置两层模型**:产品默认契约在包内 `resources/defaults/config.yml`(SSOT),用户只在 `~/.campfire/config.yml` 写覆盖项;Mapping 递归合并,`campfire workspace config check` 验证有效配置。
|
|
128
128
|
|
|
129
129
|
## Agent 协作
|
|
130
130
|
|
|
131
|
-
全局 Skill(`campfire skill list` 查看托管清单,`campfire skill sync` 手动同步)定义了 Agent
|
|
131
|
+
全局 Skill(`campfire skill list` 查看托管清单,`campfire skill sync` 手动同步)定义了 Agent 的标准工作流:已给出唯一文件路径的正文读取或小改直接使用文件工具;新建文档、修改 Frontmatter/类型/归属或执行结构治理时才加载 bootstrap,并使用 `document apply/move` 等原子命令。批量结构调整用 `workspace restructure`,归档用 `maintenance archive`。有歧义的分类和重构进入 Decision,不由 Agent 擅自决定。
|
|
132
132
|
|
|
133
133
|
## 许可
|
|
134
134
|
|
|
@@ -96,16 +96,18 @@ Campfire 使用语义化版本:
|
|
|
96
96
|
|
|
97
97
|
- `domain_id`、`name` 和 `path` 分别表示稳定身份、显示名称和物理位置,不得隐式绑定。
|
|
98
98
|
- 普通 rename 和 move 不得改变 `domain_id`;只有显式 `domain rekey` 可以修改稳定身份。
|
|
99
|
-
-
|
|
99
|
+
- 修改领域名称不得修改 Project 名称;Project 展示名称只能由 `workspace project update --name` 显式修改。
|
|
100
100
|
- 领域路径变化必须同步 Project `document_domain`、`.campfire.yaml` 和路径引用。
|
|
101
101
|
- `rekey` 必须同步直接子领域的 `parent_domain`。
|
|
102
|
+
- `move` 的目标必须使用 Space 或 Domain 稳定 id;`merge` 和 `delete` 不得退化为 Agent 手工移动、删除声明与清理索引。
|
|
103
|
+
- 已受管对象使用稳定 id,路径参数只用于新位置、具体文件、外部输入与扫描范围;不得同时要求可推导的 id、路径和父级关系。
|
|
102
104
|
- 领域级写入默认只预览,只有显式 `--confirm` 才执行。
|
|
103
105
|
|
|
104
106
|
## Workspace 索引
|
|
105
107
|
|
|
106
108
|
- SQLite `spaces`、`domains`、`documents` 只允许作为可重建本机投影,不得反向覆盖 Markdown SSOT。
|
|
107
109
|
- `setup` 与 `maintenance check` 必须自动刷新完整拓扑和文档索引。
|
|
108
|
-
-
|
|
110
|
+
- 写命令只在实际写入成功且派生状态可能变化时返回零或一个可直接执行的 scoped `maintenance sync` follow-up;Domain 内部路径必须归一化为对应 Domain,预览和阻塞结果必须返回空列表;
|
|
109
111
|
调用方只执行实际返回的 follow-up,不固定追加 check 或全量扫描。
|
|
110
112
|
- `workspace rebuild` 默认只预览;`--confirm` 后从 Manifest 和 Markdown 完整替换派生索引。
|
|
111
113
|
|
{campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/cli/document_cli.py
RENAMED
|
@@ -102,7 +102,11 @@ def apply_document(
|
|
|
102
102
|
expected_hash: str | None = typer.Option(None, "--expected-hash"),
|
|
103
103
|
confirm: bool = typer.Option(False, "--confirm"),
|
|
104
104
|
) -> None:
|
|
105
|
-
"""预览或应用一篇 Profile
|
|
105
|
+
"""预览或应用一篇 Profile 合法文档的创建、补丁与显式类型变更。
|
|
106
|
+
|
|
107
|
+
创建时文件名可省略类型前缀;CLI 根据 --type 返回并写入最终 target。
|
|
108
|
+
已有文档的 --type 发生变化时,同一原子操作同步文件名和引用。
|
|
109
|
+
"""
|
|
106
110
|
body = body_file.read_text(encoding="utf-8") if body_file else None
|
|
107
111
|
invoke(
|
|
108
112
|
lambda: service(ctx).apply(
|
|
@@ -123,8 +127,9 @@ def apply_document(
|
|
|
123
127
|
@document_cli.command("move")
|
|
124
128
|
def move_document(
|
|
125
129
|
ctx: typer.Context,
|
|
126
|
-
source: str = typer.Option(..., "--
|
|
127
|
-
|
|
130
|
+
source: str = typer.Option(..., "--path", help="源文档的 Workspace 相对路径"),
|
|
131
|
+
target_domain: str = typer.Option(..., "--domain", help="目标 Domain 的稳定 id"),
|
|
132
|
+
name: str | None = typer.Option(None, "--name", help="可选的新文件名;省略时保持原文件名"),
|
|
128
133
|
set_values: list[str] | None = typer.Option(None, "--set"),
|
|
129
134
|
unset_fields: list[str] | None = typer.Option(None, "--unset"),
|
|
130
135
|
expected_hash: str | None = typer.Option(None, "--expected-hash"),
|
|
@@ -134,7 +139,8 @@ def move_document(
|
|
|
134
139
|
invoke(
|
|
135
140
|
lambda: service(ctx).move(
|
|
136
141
|
source,
|
|
137
|
-
|
|
142
|
+
target_domain,
|
|
143
|
+
name=name,
|
|
138
144
|
values=parse_values(set_values or []),
|
|
139
145
|
unset_fields=tuple(unset_fields or []),
|
|
140
146
|
expected_hash=expected_hash,
|
{campfire_cli-0.1.8 → campfire_cli-0.1.10}/src/campfire_cli/app/document/schema/document_schema.py
RENAMED
|
@@ -21,11 +21,13 @@ class DocumentApplyRequest(BaseModel):
|
|
|
21
21
|
class DocumentApplyResult(BaseModel):
|
|
22
22
|
status: Literal["planned", "needs-input", "blocked", "applied"]
|
|
23
23
|
workspace_id: str
|
|
24
|
-
action: Literal["create", "update"]
|
|
24
|
+
action: Literal["create", "update", "retype"]
|
|
25
25
|
path: str
|
|
26
|
+
target: str
|
|
26
27
|
profile: str
|
|
27
28
|
expected_hash: str
|
|
28
29
|
write_performed: bool = False
|
|
30
|
+
updated_references: list[str] = Field(default_factory=list)
|
|
29
31
|
issues: list[dict[str, Any]] = Field(default_factory=list)
|
|
30
32
|
missing_fields: list[str] = Field(default_factory=list)
|
|
31
33
|
follow_up: list[CommandFollowUp] = Field(default_factory=list)
|