ai-spector 0.8.97 → 0.9.1
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.
- package/README.md +49 -16
- package/README.vi.md +59 -9
- package/dist/cli.js +13 -297
- package/dist/cli.js.map +1 -1
- package/dist/core/comments/paths.d.ts +2 -0
- package/dist/core/comments/paths.d.ts.map +1 -1
- package/dist/core/comments/paths.js +6 -0
- package/dist/core/comments/paths.js.map +1 -1
- package/dist/core/comments/storage.d.ts.map +1 -1
- package/dist/core/comments/storage.js +3 -32
- package/dist/core/comments/storage.js.map +1 -1
- package/dist/core/config/load.d.ts.map +1 -1
- package/dist/core/config/load.js +104 -15
- package/dist/core/config/load.js.map +1 -1
- package/dist/core/docops/capabilities.d.ts +1 -16
- package/dist/core/docops/capabilities.d.ts.map +1 -1
- package/dist/core/docops/capabilities.js +1 -41
- package/dist/core/docops/capabilities.js.map +1 -1
- package/dist/core/docops/config.d.ts +0 -2
- package/dist/core/docops/config.d.ts.map +1 -1
- package/dist/core/docops/config.js +9 -29
- package/dist/core/docops/config.js.map +1 -1
- package/dist/core/docops/migrate.d.ts +10 -0
- package/dist/core/docops/migrate.d.ts.map +1 -1
- package/dist/core/docops/migrate.js +27 -0
- package/dist/core/docops/migrate.js.map +1 -1
- package/dist/core/docops/paths.d.ts +0 -2
- package/dist/core/docops/paths.d.ts.map +1 -1
- package/dist/core/docops/paths.js +0 -5
- package/dist/core/docops/paths.js.map +1 -1
- package/dist/core/engine/gate-mcp.d.ts +6 -0
- package/dist/core/engine/gate-mcp.d.ts.map +1 -0
- package/dist/core/engine/gate-mcp.js +49 -0
- package/dist/core/engine/gate-mcp.js.map +1 -0
- package/dist/core/engine/gate.d.ts +9 -0
- package/dist/core/engine/gate.d.ts.map +1 -0
- package/dist/core/engine/gate.js +17 -0
- package/dist/core/engine/gate.js.map +1 -0
- package/dist/core/engine/load.d.ts +5 -0
- package/dist/core/engine/load.d.ts.map +1 -0
- package/dist/core/engine/load.js +38 -0
- package/dist/core/engine/load.js.map +1 -0
- package/dist/core/engine/paths.d.ts +11 -0
- package/dist/core/engine/paths.d.ts.map +1 -0
- package/dist/core/engine/paths.js +11 -0
- package/dist/core/engine/paths.js.map +1 -0
- package/dist/core/engine/types.d.ts +32 -0
- package/dist/core/engine/types.d.ts.map +1 -0
- package/dist/core/engine/types.js +2 -0
- package/dist/core/engine/types.js.map +1 -0
- package/dist/core/operations/check.d.ts.map +1 -1
- package/dist/core/operations/check.js +167 -65
- package/dist/core/operations/check.js.map +1 -1
- package/dist/core/operations/contract-cli.d.ts +4 -0
- package/dist/core/operations/contract-cli.d.ts.map +1 -0
- package/dist/core/operations/contract-cli.js +435 -0
- package/dist/core/operations/contract-cli.js.map +1 -0
- package/dist/core/operations/contract.d.ts +56 -0
- package/dist/core/operations/contract.d.ts.map +1 -0
- package/dist/core/operations/contract.js +240 -0
- package/dist/core/operations/contract.js.map +1 -0
- package/dist/core/operations/docops.d.ts +1 -0
- package/dist/core/operations/docops.d.ts.map +1 -1
- package/dist/core/operations/docops.js +17 -1
- package/dist/core/operations/docops.js.map +1 -1
- package/dist/core/operations/init.d.ts.map +1 -1
- package/dist/core/operations/init.js +6 -12
- package/dist/core/operations/init.js.map +1 -1
- package/dist/core/operations/sync-claude.d.ts.map +1 -1
- package/dist/core/operations/sync-claude.js +8 -3
- package/dist/core/operations/sync-claude.js.map +1 -1
- package/dist/core/operations/sync-cursor.d.ts.map +1 -1
- package/dist/core/operations/sync-cursor.js +8 -3
- package/dist/core/operations/sync-cursor.js.map +1 -1
- package/dist/core/operations/task.d.ts +1 -0
- package/dist/core/operations/task.d.ts.map +1 -1
- package/dist/core/operations/task.js +1 -0
- package/dist/core/operations/task.js.map +1 -1
- package/dist/core/operations/work.d.ts +44 -0
- package/dist/core/operations/work.d.ts.map +1 -0
- package/dist/core/operations/work.js +356 -0
- package/dist/core/operations/work.js.map +1 -0
- package/dist/core/reviews/paths.d.ts +3 -2
- package/dist/core/reviews/paths.d.ts.map +1 -1
- package/dist/core/reviews/paths.js +2 -7
- package/dist/core/reviews/paths.js.map +1 -1
- package/dist/core/reviews/storage.d.ts.map +1 -1
- package/dist/core/reviews/storage.js +12 -35
- package/dist/core/reviews/storage.js.map +1 -1
- package/dist/core/scaffold/claude-from-cursor.d.ts.map +1 -1
- package/dist/core/scaffold/claude-from-cursor.js +23 -19
- package/dist/core/scaffold/claude-from-cursor.js.map +1 -1
- package/dist/core/upgrade/checklist.json +12 -17
- package/dist/core/upgrade/detect.d.ts.map +1 -1
- package/dist/core/upgrade/detect.js +8 -8
- package/dist/core/upgrade/detect.js.map +1 -1
- package/dist/core/upgrade/scan.d.ts.map +1 -1
- package/dist/core/upgrade/scan.js +9 -3
- package/dist/core/upgrade/scan.js.map +1 -1
- package/dist/core/upgrade/stamp.d.ts +2 -0
- package/dist/core/upgrade/stamp.d.ts.map +1 -1
- package/dist/core/upgrade/stamp.js +17 -9
- package/dist/core/upgrade/stamp.js.map +1 -1
- package/dist/interfaces/mcp/assert-tool-allowed.d.ts +2 -0
- package/dist/interfaces/mcp/assert-tool-allowed.d.ts.map +1 -0
- package/dist/interfaces/mcp/assert-tool-allowed.js +13 -0
- package/dist/interfaces/mcp/assert-tool-allowed.js.map +1 -0
- package/dist/interfaces/mcp/format-tool-error.d.ts.map +1 -1
- package/dist/interfaces/mcp/format-tool-error.js +7 -0
- package/dist/interfaces/mcp/format-tool-error.js.map +1 -1
- package/dist/interfaces/mcp/mcp-precondition.d.ts +19 -0
- package/dist/interfaces/mcp/mcp-precondition.d.ts.map +1 -0
- package/dist/interfaces/mcp/mcp-precondition.js +28 -0
- package/dist/interfaces/mcp/mcp-precondition.js.map +1 -0
- package/dist/interfaces/mcp/schemas.d.ts +164 -21
- package/dist/interfaces/mcp/schemas.d.ts.map +1 -1
- package/dist/interfaces/mcp/schemas.js +99 -0
- package/dist/interfaces/mcp/schemas.js.map +1 -1
- package/dist/interfaces/mcp/server.js +184 -17
- package/dist/interfaces/mcp/server.js.map +1 -1
- package/dist/interfaces/mcp/tool-names.d.ts +1 -1
- package/dist/interfaces/mcp/tool-names.d.ts.map +1 -1
- package/dist/interfaces/mcp/tool-names.js +14 -0
- package/dist/interfaces/mcp/tool-names.js.map +1 -1
- package/dist/interfaces/mcp/tools/cocoindex.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/cocoindex.js +3 -0
- package/dist/interfaces/mcp/tools/cocoindex.js.map +1 -1
- package/dist/interfaces/mcp/tools/comments.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/comments.js +10 -0
- package/dist/interfaces/mcp/tools/comments.js.map +1 -1
- package/dist/interfaces/mcp/tools/contract.d.ts +7 -0
- package/dist/interfaces/mcp/tools/contract.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/contract.js +14 -0
- package/dist/interfaces/mcp/tools/contract.js.map +1 -0
- package/dist/interfaces/mcp/tools/graph.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/graph.js +6 -0
- package/dist/interfaces/mcp/tools/graph.js.map +1 -1
- package/dist/interfaces/mcp/tools/index.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/index.js +2 -0
- package/dist/interfaces/mcp/tools/index.js.map +1 -1
- package/dist/interfaces/mcp/tools/reviews.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/reviews.js +17 -0
- package/dist/interfaces/mcp/tools/reviews.js.map +1 -1
- package/dist/interfaces/mcp/tools/task.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/task.js +20 -0
- package/dist/interfaces/mcp/tools/task.js.map +1 -1
- package/dist/interfaces/mcp/tools/work.d.ts +14 -0
- package/dist/interfaces/mcp/tools/work.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/work.js +77 -0
- package/dist/interfaces/mcp/tools/work.js.map +1 -0
- package/package.json +1 -1
- package/scaffold/claude/.claude/skills/_skill-router.md +58 -79
- package/scaffold/claude/.claude/skills/ai-spector/references/runbook.md +383 -0
- package/scaffold/claude/.claude/skills/ai-spector/skill.md +53 -84
- package/scaffold/claude/.claude/skills/ai-spector-contract/references/runbook.md +195 -0
- package/scaffold/claude/.claude/skills/ai-spector-contract/skill.md +44 -0
- package/scaffold/claude/.claude/skills/ai-spector-generate/references/runbook.md +271 -0
- package/scaffold/claude/.claude/skills/ai-spector-generate/skill.md +44 -32
- package/scaffold/claude/.claude/skills/ai-spector-graph/references/search.md +86 -0
- package/scaffold/claude/.claude/skills/ai-spector-graph/skill.md +18 -12
- package/scaffold/claude/CLAUDE.md +23 -19
- package/scaffold/claude/WORKFLOW.md +37 -50
- package/scaffold/cursor/WORKFLOW.md +37 -49
- package/scaffold/cursor/skills/_skill-router.md +58 -79
- package/scaffold/cursor/skills/ai-spector/SKILL.md +59 -84
- package/scaffold/cursor/skills/ai-spector/references/runbook.md +383 -0
- package/scaffold/cursor/skills/ai-spector-contract/SKILL.md +52 -0
- package/scaffold/cursor/skills/ai-spector-contract/references/runbook.md +195 -0
- package/scaffold/cursor/skills/ai-spector-generate/SKILL.md +52 -32
- package/scaffold/cursor/skills/ai-spector-generate/references/runbook.md +271 -0
- package/scaffold/cursor/skills/ai-spector-graph/SKILL.md +19 -12
- package/scaffold/cursor/skills/ai-spector-graph/references/search.md +86 -0
- package/scaffold/claude/.claude/skills/ai-spector-adopt/references/runbook.md +0 -242
- package/scaffold/claude/.claude/skills/ai-spector-adopt/skill.md +0 -28
- package/scaffold/claude/.claude/skills/ai-spector-check/skill.md +0 -34
- package/scaffold/claude/.claude/skills/ai-spector-course/references/course-guide.md +0 -69
- package/scaffold/claude/.claude/skills/ai-spector-course/skill.md +0 -57
- package/scaffold/claude/.claude/skills/ai-spector-docops/references/runbook.md +0 -168
- package/scaffold/claude/.claude/skills/ai-spector-docops/skill.md +0 -32
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/bd-context/api-detail.md +0 -27
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/bd-context/api-list.md +0 -26
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/bd-context/db-design.md +0 -22
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/bd-context/screen-detail.md +0 -26
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/bd-context/screen-list.md +0 -27
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/references/runbook.md +0 -114
- package/scaffold/claude/.claude/skills/ai-spector-generate-basic-design/skill.md +0 -87
- package/scaffold/claude/.claude/skills/ai-spector-generate-detail-design/references/dd-context/common-chapters.md +0 -20
- package/scaffold/claude/.claude/skills/ai-spector-generate-detail-design/references/dd-context/feature-detail.md +0 -22
- package/scaffold/claude/.claude/skills/ai-spector-generate-detail-design/references/dd-context/feature-list.md +0 -17
- package/scaffold/claude/.claude/skills/ai-spector-generate-detail-design/references/runbook.md +0 -68
- package/scaffold/claude/.claude/skills/ai-spector-generate-detail-design/skill.md +0 -81
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/auth-picker.md +0 -61
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/prototype-graph-context.md +0 -115
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/runbook.md +0 -381
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/spa-prototype.md +0 -83
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/stack-picker.md +0 -135
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/references/theme-picker.md +0 -120
- package/scaffold/claude/.claude/skills/ai-spector-generate-prototype/skill.md +0 -32
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/runbook.md +0 -107
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/data-requirements.md +0 -10
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/external-interfaces.md +0 -10
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/feature-detail.md +0 -20
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/introduction.md +0 -12
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/overall-description.md +0 -11
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/quality-attributes.md +0 -11
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/references/srs-context/use-case-detail.md +0 -26
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/skill.md +0 -99
- package/scaffold/claude/.claude/skills/ai-spector-lang-status/skill.md +0 -127
- package/scaffold/claude/.claude/skills/ai-spector-resolve-comments/references/runbook.md +0 -180
- package/scaffold/claude/.claude/skills/ai-spector-resolve-comments/skill.md +0 -32
- package/scaffold/claude/.claude/skills/ai-spector-resolve-prototype-comments/references/runbook.md +0 -122
- package/scaffold/claude/.claude/skills/ai-spector-resolve-prototype-comments/skill.md +0 -34
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/references/resolve-execute.md +0 -55
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/references/resolve-full.md +0 -36
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/references/resolve-standard.md +0 -51
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/references/runbook.md +0 -195
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/references/tier-router.md +0 -62
- package/scaffold/claude/.claude/skills/ai-spector-resolve-task/skill.md +0 -76
- package/scaffold/claude/.claude/skills/ai-spector-resolve-translation/references/runbook.md +0 -167
- package/scaffold/claude/.claude/skills/ai-spector-resolve-translation/skill.md +0 -32
- package/scaffold/claude/.claude/skills/ai-spector-review/references/custom-checklists.md +0 -139
- package/scaffold/claude/.claude/skills/ai-spector-review/references/readiness-compliance.md +0 -82
- package/scaffold/claude/.claude/skills/ai-spector-review/references/runbook.md +0 -407
- package/scaffold/claude/.claude/skills/ai-spector-review/skill.md +0 -46
- package/scaffold/claude/.claude/skills/ai-spector-search/skill.md +0 -151
- package/scaffold/claude/.claude/skills/ai-spector-setup/references/cli-setup.md +0 -72
- package/scaffold/claude/.claude/skills/ai-spector-setup/references/runbook.md +0 -155
- package/scaffold/claude/.claude/skills/ai-spector-setup/skill.md +0 -37
- package/scaffold/claude/.claude/skills/ai-spector-sync-audit/skill.md +0 -29
- package/scaffold/claude/.claude/skills/ai-spector-task/references/runbook.md +0 -103
- package/scaffold/claude/.claude/skills/ai-spector-task/skill.md +0 -34
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/import-aspects.md +0 -79
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/import-clarify.md +0 -60
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/pack-gap-matrix.md +0 -39
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/readiness-setup.md +0 -88
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/runbook.md +0 -117
- package/scaffold/claude/.claude/skills/ai-spector-template-import/references/skill-outline.md +0 -301
- package/scaffold/claude/.claude/skills/ai-spector-template-import/skill.md +0 -42
- package/scaffold/claude/.claude/skills/ai-spector-upgrade/references/runbook.md +0 -137
- package/scaffold/claude/.claude/skills/ai-spector-upgrade/skill.md +0 -24
- package/scaffold/cursor/skills/ai-spector-adopt/SKILL.md +0 -32
- package/scaffold/cursor/skills/ai-spector-adopt/references/runbook.md +0 -242
- package/scaffold/cursor/skills/ai-spector-check/SKILL.md +0 -34
- package/scaffold/cursor/skills/ai-spector-course/SKILL.md +0 -57
- package/scaffold/cursor/skills/ai-spector-course/references/course-guide.md +0 -69
- package/scaffold/cursor/skills/ai-spector-docops/SKILL.md +0 -36
- package/scaffold/cursor/skills/ai-spector-docops/references/runbook.md +0 -168
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/SKILL.md +0 -90
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/bd-context/api-detail.md +0 -27
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/bd-context/api-list.md +0 -26
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/bd-context/db-design.md +0 -22
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/bd-context/screen-detail.md +0 -26
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/bd-context/screen-list.md +0 -27
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/runbook.md +0 -114
- package/scaffold/cursor/skills/ai-spector-generate-detail-design/SKILL.md +0 -84
- package/scaffold/cursor/skills/ai-spector-generate-detail-design/references/dd-context/common-chapters.md +0 -20
- package/scaffold/cursor/skills/ai-spector-generate-detail-design/references/dd-context/feature-detail.md +0 -22
- package/scaffold/cursor/skills/ai-spector-generate-detail-design/references/dd-context/feature-list.md +0 -17
- package/scaffold/cursor/skills/ai-spector-generate-detail-design/references/runbook.md +0 -68
- package/scaffold/cursor/skills/ai-spector-generate-prototype/SKILL.md +0 -34
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/auth-picker.md +0 -61
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/prototype-graph-context.md +0 -115
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/runbook.md +0 -381
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/spa-prototype.md +0 -83
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/stack-picker.md +0 -135
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/theme-picker.md +0 -120
- package/scaffold/cursor/skills/ai-spector-generate-srs/SKILL.md +0 -102
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/runbook.md +0 -107
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/data-requirements.md +0 -10
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/external-interfaces.md +0 -10
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/feature-detail.md +0 -20
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/introduction.md +0 -12
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/overall-description.md +0 -11
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/quality-attributes.md +0 -11
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/srs-context/use-case-detail.md +0 -26
- package/scaffold/cursor/skills/ai-spector-lang-status/SKILL.md +0 -132
- package/scaffold/cursor/skills/ai-spector-resolve-comments/SKILL.md +0 -34
- package/scaffold/cursor/skills/ai-spector-resolve-comments/references/runbook.md +0 -180
- package/scaffold/cursor/skills/ai-spector-resolve-prototype-comments/SKILL.md +0 -37
- package/scaffold/cursor/skills/ai-spector-resolve-prototype-comments/references/runbook.md +0 -122
- package/scaffold/cursor/skills/ai-spector-resolve-task/SKILL.md +0 -80
- package/scaffold/cursor/skills/ai-spector-resolve-task/references/resolve-execute.md +0 -55
- package/scaffold/cursor/skills/ai-spector-resolve-task/references/resolve-full.md +0 -36
- package/scaffold/cursor/skills/ai-spector-resolve-task/references/resolve-standard.md +0 -51
- package/scaffold/cursor/skills/ai-spector-resolve-task/references/runbook.md +0 -195
- package/scaffold/cursor/skills/ai-spector-resolve-task/references/tier-router.md +0 -62
- package/scaffold/cursor/skills/ai-spector-resolve-translation/SKILL.md +0 -37
- package/scaffold/cursor/skills/ai-spector-resolve-translation/references/runbook.md +0 -167
- package/scaffold/cursor/skills/ai-spector-review/SKILL.md +0 -50
- package/scaffold/cursor/skills/ai-spector-review/references/custom-checklists.md +0 -139
- package/scaffold/cursor/skills/ai-spector-review/references/readiness-compliance.md +0 -82
- package/scaffold/cursor/skills/ai-spector-review/references/runbook.md +0 -407
- package/scaffold/cursor/skills/ai-spector-search/SKILL.md +0 -154
- package/scaffold/cursor/skills/ai-spector-setup/SKILL.md +0 -41
- package/scaffold/cursor/skills/ai-spector-setup/references/cli-setup.md +0 -72
- package/scaffold/cursor/skills/ai-spector-setup/references/runbook.md +0 -155
- package/scaffold/cursor/skills/ai-spector-sync-audit/SKILL.md +0 -34
- package/scaffold/cursor/skills/ai-spector-task/SKILL.md +0 -36
- package/scaffold/cursor/skills/ai-spector-task/references/runbook.md +0 -103
- package/scaffold/cursor/skills/ai-spector-template-import/SKILL.md +0 -45
- package/scaffold/cursor/skills/ai-spector-template-import/references/import-aspects.md +0 -79
- package/scaffold/cursor/skills/ai-spector-template-import/references/import-clarify.md +0 -60
- package/scaffold/cursor/skills/ai-spector-template-import/references/pack-gap-matrix.md +0 -39
- package/scaffold/cursor/skills/ai-spector-template-import/references/readiness-setup.md +0 -88
- package/scaffold/cursor/skills/ai-spector-template-import/references/runbook.md +0 -117
- package/scaffold/cursor/skills/ai-spector-template-import/references/skill-outline.md +0 -301
- package/scaffold/cursor/skills/ai-spector-upgrade/SKILL.md +0 -29
- package/scaffold/cursor/skills/ai-spector-upgrade/references/runbook.md +0 -137
- /package/scaffold/claude/.claude/skills/{ai-spector-sync-audit/references/runbook.md → ai-spector-graph/references/sync-audit.md} +0 -0
- /package/scaffold/cursor/skills/{ai-spector-sync-audit/references/runbook.md → ai-spector-graph/references/sync-audit.md} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# AI Spector
|
|
2
2
|
|
|
3
|
-
Documentation workflow in **Cursor** or **Claude Code**: traceability graph, SRS, basic design, and UI prototypes (static HTML or SPA). **Describe what you need in chat** — the agent matches
|
|
3
|
+
Documentation workflow in **Cursor** or **Claude Code**: traceability graph, SRS, basic design, and UI prototypes (static HTML or SPA). **Describe what you need in chat** — the agent matches one of **4 skills**, reads its runbook, and runs `ai-spector` MCP tools. You rarely touch the terminal.
|
|
4
|
+
|
|
5
|
+
**Kari Writer** owns the `.docops/` contract only (no agent skills). ai-spector is an optional local tool that implements that contract via git files.
|
|
4
6
|
|
|
5
7
|
**Needs:** Node 20+, Git, [Cursor](https://cursor.com) and/or [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Python 3.11+ *(optional — CocoIndex semantic search)*.
|
|
6
8
|
|
|
@@ -43,16 +45,27 @@ The init wizard prompts for editor (Cursor, Claude Code, or both), languages, gi
|
|
|
43
45
|
|
|
44
46
|
Creates:
|
|
45
47
|
|
|
46
|
-
- `.ai-spector/` — config, graph, templates
|
|
47
48
|
- `.docops/` — Writer contract (`docops.config.json`, comments, review-queue, prototype metadata)
|
|
49
|
+
- `.ai-spector/` — engine store (`engine.json`, graph, registry, work sessions)
|
|
48
50
|
- `docs/data-source/`, `docs/srs/`, `docs/basic-design/`
|
|
49
|
-
- **Cursor:** `.cursor/` — skills
|
|
50
|
-
- **Claude Code:** `CLAUDE.md` + `.claude/skills/` + `.mcp.json`
|
|
51
|
+
- **Cursor:** `.cursor/` — **4 skills**, rules, `mcp.json`
|
|
52
|
+
- **Claude Code:** `CLAUDE.md` + `.claude/skills/` (4 skills) + `.mcp.json`
|
|
51
53
|
- Pre-commit hook (when git is available)
|
|
52
54
|
|
|
53
|
-
|
|
55
|
+
No `docflow.config.json` — fresh `init` writes the two-config model below.
|
|
56
|
+
|
|
57
|
+
### Configuration (2 files)
|
|
58
|
+
|
|
59
|
+
| File | Owner | Purpose |
|
|
60
|
+
|------|-------|---------|
|
|
61
|
+
| `.docops/docops.config.json` | **Writer contract** (shared) | Languages, doc layers, paths, **capabilities** |
|
|
62
|
+
| `.ai-spector/engine.json` | ai-spector engine (local only) | Graph/task artifact paths, readiness, CocoIndex, `scaffoldVersion` |
|
|
54
63
|
|
|
55
|
-
**
|
|
64
|
+
**Writer** defines the contract schema (`kari-writer/contracts/CONTRACT.md` in the docs-ops meta-repo). It ships **no agent skills**. **Capabilities** in `docops.config.json` gate Writer web UI, ai-spector CLI/MCP, skill install, and `check` rules.
|
|
65
|
+
|
|
66
|
+
**`.docops/guide/`** is for human tool authors only — agents and skills must **not** load or link to it at runtime.
|
|
67
|
+
|
|
68
|
+
**Docops CLI** (Writer contract bootstrap — no full ai-spector scaffold):
|
|
56
69
|
|
|
57
70
|
```bash
|
|
58
71
|
npx ai-spector docops status # human-readable layout + readiness
|
|
@@ -64,13 +77,18 @@ npx ai-spector docops init --force # fill gaps when config already exists
|
|
|
64
77
|
|
|
65
78
|
npx ai-spector docops migrate --dry-run # preview legacy → .docops/ migration
|
|
66
79
|
npx ai-spector docops migrate # migrate layout + copy templates
|
|
80
|
+
npx ai-spector docops migrate --from-docflow # split docflow.config.json → contract + engine
|
|
67
81
|
npx ai-spector docops migrate --templates-only # copy templates only
|
|
68
82
|
npx ai-spector docops migrate --repair # fill gaps without overwriting existing files
|
|
69
83
|
```
|
|
70
84
|
|
|
71
|
-
|
|
85
|
+
Upgrade from a legacy project that still has `docflow.config.json`:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx ai-spector docops migrate --from-docflow
|
|
89
|
+
```
|
|
72
90
|
|
|
73
|
-
|
|
91
|
+
Then run `npx ai-spector upgrade apply` to sync the 4-skill scaffold. Full migration steps: [`kari-writer/contracts/MIGRATION.md`](../../kari-writer/contracts/MIGRATION.md) in the docs-ops meta-repo.
|
|
74
92
|
|
|
75
93
|
### Upgrade (guided workflow)
|
|
76
94
|
|
|
@@ -86,7 +104,7 @@ npx ai-spector upgrade apply --auto
|
|
|
86
104
|
npx ai-spector upgrade validate
|
|
87
105
|
```
|
|
88
106
|
|
|
89
|
-
The upgrade workflow scans a package checklist, syncs scaffold, backfills config, and stamps `scaffoldVersion` in `
|
|
107
|
+
The upgrade workflow scans a package checklist, syncs the **4-skill** scaffold, backfills config, and stamps `scaffoldVersion` in `engine.json` when complete.
|
|
90
108
|
|
|
91
109
|
Legacy skills-only refresh:
|
|
92
110
|
|
|
@@ -115,7 +133,16 @@ The agent installs the npm dependency (if needed), verifies the checklist, and r
|
|
|
115
133
|
|
|
116
134
|
### Step 3 — Enable the agent *(manual, one-time)*
|
|
117
135
|
|
|
118
|
-
|
|
136
|
+
Enable the **4 skills** (not the retired 23-skill bundle):
|
|
137
|
+
|
|
138
|
+
| Skill | Role |
|
|
139
|
+
|-------|------|
|
|
140
|
+
| `ai-spector` | Setup, upgrade, adopt, check, work sessions |
|
|
141
|
+
| `ai-spector-generate` | SRS, basic/detail design, prototype, template import |
|
|
142
|
+
| `ai-spector-graph` | Analyze, index, validate, impact, search, sync audit |
|
|
143
|
+
| `ai-spector-contract` | Review sign-off, comments, prototype comments, translation |
|
|
144
|
+
|
|
145
|
+
**Cursor:** Settings → Rules → **Agent Skills** — enable all four folders under `.cursor/skills/`. Reload MCP (`.cursor/mcp.json`).
|
|
119
146
|
|
|
120
147
|
**Claude Code:** Skills load from `.claude/skills/`. Reload MCP (`.mcp.json`).
|
|
121
148
|
|
|
@@ -135,14 +162,14 @@ Continue in chat — see [Workflow](#workflow) below.
|
|
|
135
162
|
|
|
136
163
|
## Workflow
|
|
137
164
|
|
|
138
|
-
After `init`, see `.cursor/WORKFLOW.md` (Cursor) or `CLAUDE.md` (Claude Code) for the
|
|
165
|
+
After `init`, see `.cursor/WORKFLOW.md` (Cursor) or `CLAUDE.md` (Claude Code) for the 4-skill map.
|
|
139
166
|
|
|
140
167
|
### How chat routing works
|
|
141
168
|
|
|
142
169
|
| Piece | Role |
|
|
143
170
|
|-------|------|
|
|
144
|
-
| **Routing** | `_skill-router.md` + `ai-spector-routing.mdc` classify your message; `workflow_route` when ambiguous |
|
|
145
|
-
| **Skill** | One
|
|
171
|
+
| **Routing** | `_skill-router.md` + `ai-spector-routing.mdc` classify your message → one of 4 skills; `workflow_route` when ambiguous |
|
|
172
|
+
| **Skill** | One of four workflows (setup/work, generate, graph, contract) with a runbook under `references/` |
|
|
146
173
|
|
|
147
174
|
Say what you want in natural language — same in Cursor and Claude Code. The agent reads the matching skill and follows its runbook. If intent is unclear (especially **“approve”**), it asks once before acting.
|
|
148
175
|
|
|
@@ -174,7 +201,7 @@ review documents
|
|
|
174
201
|
| New or changed sources | “analyze data source” |
|
|
175
202
|
| Check graph | “validate the graph”, “graph report” |
|
|
176
203
|
| Regenerate docs | “generate SRS”, “generate basic design” |
|
|
177
|
-
| Pause / resume work | “active
|
|
204
|
+
| Pause / resume work | “active work”, “resume my SRS”, “pause work” |
|
|
178
205
|
| One feature or section | “I want to add login with Google”, “update the auth section” |
|
|
179
206
|
| After doc edits | “refresh the index”, “re-index the graph” |
|
|
180
207
|
| Document sign-off | “review documents”, “approve srs/01-overview”, “what needs review” |
|
|
@@ -218,7 +245,11 @@ npx ai-spector course serve --open # interactive course in browser
|
|
|
218
245
|
npx ai-spector setup --check
|
|
219
246
|
npx ai-spector docops status # assess .docops/ layout and Writer readiness
|
|
220
247
|
npx ai-spector docops init --lang en # scaffold Writer-ready .docops/ contract
|
|
221
|
-
npx ai-spector docops migrate
|
|
248
|
+
npx ai-spector docops migrate --from-docflow # split legacy docflow.config.json
|
|
249
|
+
npx ai-spector work list # active/paused work sessions (replaces task)
|
|
250
|
+
npx ai-spector work resume <workId>
|
|
251
|
+
npx ai-spector contract review queue # sign-off queue (capability: review)
|
|
252
|
+
npx ai-spector contract comments inbox # open comment threads (capability: comments)
|
|
222
253
|
npx ai-spector graph validate
|
|
223
254
|
npx ai-spector graph visualize --open
|
|
224
255
|
npx ai-spector graph impact --git
|
|
@@ -226,6 +257,8 @@ npx ai-spector sync audit --fail-on-drift # CI: design-layer drift since basel
|
|
|
226
257
|
npx ai-spector prototype validate --strict
|
|
227
258
|
```
|
|
228
259
|
|
|
260
|
+
MCP tools are grouped: `work_*` (session lifecycle), `contract_review` / `contract_comments` / `contract_prototype` / `contract_translate` (Writer contract ops). Legacy `task_*` and flat review/comments tools remain as deprecation wrappers for one release.
|
|
261
|
+
|
|
229
262
|
Full list: `npx ai-spector --help`.
|
|
230
263
|
|
|
231
264
|
---
|
|
@@ -236,7 +269,7 @@ Full list: `npx ai-spector --help`.
|
|
|
236
269
|
|-------|-----|
|
|
237
270
|
| MCP tools unavailable | Reload MCP; confirm `.cursor/mcp.json` or `.mcp.json` has `ai-spector` server |
|
|
238
271
|
| Setup incomplete | **“check ai-spector setup”** |
|
|
239
|
-
| Skills not routing (Cursor) | Re-enable all folders under `.cursor/skills/` |
|
|
272
|
+
| Skills not routing (Cursor) | Re-enable all **4** skill folders under `.cursor/skills/` |
|
|
240
273
|
| Validate errors after edits | **“re-index the graph”** |
|
|
241
274
|
| Pre-commit hook missing | **“install ai-spector git hook”** |
|
|
242
275
|
| Agent stuck on CLI error | `.cursor/skills/ai-spector/references/cli-failures.md` |
|
package/README.vi.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# AI Spector
|
|
2
2
|
|
|
3
|
-
Công cụ làm tài liệu phần mềm trên **Cursor** hoặc **Claude Code**: sơ đồ liên kết, SRS, basic design và prototype UI (HTML tĩnh hoặc SPA build ra file tĩnh). **Bạn chỉ cần nói trong chat** — agent
|
|
3
|
+
Công cụ làm tài liệu phần mềm trên **Cursor** hoặc **Claude Code**: sơ đồ liên kết, SRS, basic design và prototype UI (HTML tĩnh hoặc SPA build ra file tĩnh). **Bạn chỉ cần nói trong chat** — agent chọn một trong **4 skills**, đọc runbook và chạy MCP `ai-spector`. Thường bạn không cần gõ lệnh terminal.
|
|
4
|
+
|
|
5
|
+
**Kari Writer** chỉ sở hữu contract `.docops/` (không có agent skills). ai-spector là công cụ local tùy chọn triển khai contract qua file git.
|
|
4
6
|
|
|
5
7
|
**Cần có:** Node 20+, Git, [Cursor](https://cursor.com) và/hoặc [Claude Code](https://docs.anthropic.com/en/docs/claude-code), Python 3.11+ *(không bắt buộc — dùng cho tìm kiếm thông minh với CocoIndex)*.
|
|
6
8
|
|
|
@@ -45,15 +47,46 @@ Wizard init sẽ hỏi: Cursor, Claude Code hay cả hai; ngôn ngữ; git hook;
|
|
|
45
47
|
|
|
46
48
|
Sau khi chạy xong sẽ có:
|
|
47
49
|
|
|
48
|
-
- `.
|
|
50
|
+
- `.docops/` — contract Writer (`docops.config.json`, comments, review-queue, prototype)
|
|
51
|
+
- `.ai-spector/` — engine (`engine.json`, graph, registry, work sessions)
|
|
49
52
|
- `docs/data-source/`, `docs/srs/`, `docs/basic-design/`
|
|
50
|
-
- **Cursor:** `.cursor/` — skills
|
|
51
|
-
- **Claude Code:** `CLAUDE.md` + `.claude/skills/` + `.mcp.json`
|
|
53
|
+
- **Cursor:** `.cursor/` — **4 skills**, rules, `mcp.json`
|
|
54
|
+
- **Claude Code:** `CLAUDE.md` + `.claude/skills/` (4 skills) + `.mcp.json`
|
|
52
55
|
- Hook git trước khi commit *(nếu project có git)*
|
|
53
56
|
|
|
57
|
+
Không còn `docflow.config.json` — `init` mới tạo mô hình 2 file cấu hình.
|
|
58
|
+
|
|
59
|
+
### Cấu hình (2 file)
|
|
60
|
+
|
|
61
|
+
| File | Sở hữu | Mục đích |
|
|
62
|
+
|------|--------|----------|
|
|
63
|
+
| `.docops/docops.config.json` | **Contract Writer** (dùng chung) | Ngôn ngữ, lớp tài liệu, đường dẫn, **capabilities** |
|
|
64
|
+
| `.ai-spector/engine.json` | Engine ai-spector (local) | Đường dẫn graph/task, readiness, CocoIndex, `scaffoldVersion` |
|
|
65
|
+
|
|
66
|
+
**Writer** định nghĩa schema contract (`kari-writer/contracts/CONTRACT.md`). **Không** ship agent skills. **Capabilities** trong `docops.config.json` điều khiển Writer web, CLI/MCP ai-spector, skills và quy tắc `check`.
|
|
67
|
+
|
|
68
|
+
**`.docops/guide/`** dành cho người viết công cụ local — agent và skills **không** được đọc hoặc link tới thư mục này lúc chạy.
|
|
69
|
+
|
|
70
|
+
**Docops CLI** (bootstrap contract Writer):
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx ai-spector docops status
|
|
74
|
+
npx ai-spector docops init --lang en
|
|
75
|
+
npx ai-spector docops migrate --from-docflow # tách docflow.config.json → contract + engine
|
|
76
|
+
npx ai-spector docops migrate --dry-run
|
|
77
|
+
npx ai-spector docops migrate --repair
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Nâng cấp project còn `docflow.config.json`:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx ai-spector docops migrate --from-docflow
|
|
84
|
+
npx ai-spector upgrade apply # đồng bộ scaffold 4 skills
|
|
85
|
+
```
|
|
86
|
+
|
|
54
87
|
### Nâng cấp (cập nhật skills & rules)
|
|
55
88
|
|
|
56
|
-
Sau khi cài phiên bản `ai-spector` mới, refresh scaffold từ gói. Chỉ cập nhật skills và rules — **không** ghi đè `.ai-spector/`, graph, hay `docs/`.
|
|
89
|
+
Sau khi cài phiên bản `ai-spector` mới, refresh scaffold **4 skills** từ gói. Chỉ cập nhật skills và rules — **không** ghi đè `.ai-spector/`, graph, hay `docs/`.
|
|
57
90
|
|
|
58
91
|
```bash
|
|
59
92
|
npm install ai-spector@latest # npm công khai; thêm --registry … cho Verdaccio
|
|
@@ -86,9 +119,18 @@ Agent sẽ cài gói npm (nếu thiếu), kiểm tra xem còn thiếu gì, hỏi
|
|
|
86
119
|
|
|
87
120
|
### Bước 3 — Bật skills *(làm tay một lần)*
|
|
88
121
|
|
|
122
|
+
Bật **4 skills** (không phải bộ 23 skills cũ):
|
|
123
|
+
|
|
124
|
+
| Skill | Vai trò |
|
|
125
|
+
|-------|---------|
|
|
126
|
+
| `ai-spector` | Setup, upgrade, adopt, check, work sessions |
|
|
127
|
+
| `ai-spector-generate` | SRS, basic/detail design, prototype, import template |
|
|
128
|
+
| `ai-spector-graph` | Analyze, index, validate, impact, search, sync audit |
|
|
129
|
+
| `ai-spector-contract` | Duyệt tài liệu, comments, prototype comments, dịch |
|
|
130
|
+
|
|
89
131
|
**Cursor**
|
|
90
132
|
|
|
91
|
-
1. Vào **Settings → Rules → Agent Skills** — bật **
|
|
133
|
+
1. Vào **Settings → Rules → Agent Skills** — bật **4** thư mục trong `.cursor/skills/`
|
|
92
134
|
2. **Reload MCP** — file `.cursor/mcp.json` đã cấu hình sẵn server `ai-spector`
|
|
93
135
|
|
|
94
136
|
**Claude Code**
|
|
@@ -147,7 +189,7 @@ Hoặc chạy `npx ai-spector sync-cursor` / `sync-claude` — xem [Nâng cấp]
|
|
|
147
189
|
|
|
148
190
|
## Quy trình làm việc
|
|
149
191
|
|
|
150
|
-
Sau khi `init`, xem
|
|
192
|
+
Sau khi `init`, xem `.cursor/WORKFLOW.md` (Cursor) hoặc `CLAUDE.md` (Claude Code) — bản đồ **4 skills**.
|
|
151
193
|
|
|
152
194
|
### Lần đầu chạy
|
|
153
195
|
|
|
@@ -181,7 +223,7 @@ Sau đó: **“generate prototype for all screens”**. Với SPA, chạy build
|
|
|
181
223
|
| Xem phần nào bị ảnh hưởng | “what’s the impact of my changes” |
|
|
182
224
|
| Xử lý comment | “resolve comments”, “show open comments” |
|
|
183
225
|
| Duyệt / phê duyệt tài liệu | “review documents”, “approve srs/01-overview” |
|
|
184
|
-
| Tạm dừng / tiếp tục
|
|
226
|
+
| Tạm dừng / tiếp tục work | “active work”, “resume my SRS”, “pause work” |
|
|
185
227
|
| Thêm / sửa một phần nhỏ | “I want to add login with Google” |
|
|
186
228
|
| Xem sơ đồ trực quan | “show the graph”, `npx ai-spector graph visualize --open` |
|
|
187
229
|
| Kiểm tra workspace | “check my workspace” |
|
|
@@ -203,10 +245,18 @@ Chủ yếu dùng chat. Một số lệnh hữu ích:
|
|
|
203
245
|
```bash
|
|
204
246
|
npx ai-spector course serve --open
|
|
205
247
|
npx ai-spector setup --check
|
|
248
|
+
npx ai-spector docops status
|
|
249
|
+
npx ai-spector docops migrate --from-docflow
|
|
250
|
+
npx ai-spector work list # work sessions (thay task)
|
|
251
|
+
npx ai-spector work resume <workId>
|
|
252
|
+
npx ai-spector contract review queue
|
|
253
|
+
npx ai-spector contract comments inbox
|
|
206
254
|
npx ai-spector graph validate
|
|
207
255
|
npx ai-spector graph visualize --open
|
|
208
256
|
```
|
|
209
257
|
|
|
258
|
+
MCP nhóm theo `work_*` và `contract_*` (review, comments, prototype, translate). Lệnh `task_*` cũ còn wrapper deprecation một phiên bản.
|
|
259
|
+
|
|
210
260
|
Đầy đủ: `npx ai-spector --help`
|
|
211
261
|
|
|
212
262
|
---
|
|
@@ -217,7 +267,7 @@ npx ai-spector graph visualize --open
|
|
|
217
267
|
|-----|------------|
|
|
218
268
|
| MCP không chạy | Reload MCP; kiểm tra `.cursor/mcp.json` hoặc `.mcp.json` có server `ai-spector` |
|
|
219
269
|
| Setup chưa xong | Trong chat: **“check ai-spector setup”** |
|
|
220
|
-
| Agent không hiểu lệnh (Cursor) | Bật lại
|
|
270
|
+
| Agent không hiểu lệnh (Cursor) | Bật lại **4** thư mục skill trong `.cursor/skills/` ở Settings → Rules |
|
|
221
271
|
| Validate báo lỗi sau khi sửa | Trong chat: **“re-index the graph”** |
|
|
222
272
|
| Thiếu hook git | Trong chat: **“install ai-spector git hook”** |
|
|
223
273
|
| Agent bị kẹt vì lỗi CLI | Xem `.cursor/skills/ai-spector/references/cli-failures.md` |
|
package/dist/cli.js
CHANGED
|
@@ -22,8 +22,8 @@ import { runContextList, runContextRecord, runContextResolve, } from "./core/ope
|
|
|
22
22
|
import { formatContextList, formatContextRecord, formatContextResolve, } from "./interfaces/cli/format/context.js";
|
|
23
23
|
import { runSpecList, runSpecApprove, runSpecReject, } from "./core/operations/extracted.js";
|
|
24
24
|
import { formatSpecList, formatSpecApprove, formatSpecReject, } from "./interfaces/cli/format/extracted.js";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
25
|
+
import { registerWorkCommands, registerTaskCommands } from "./core/operations/work.js";
|
|
26
|
+
import { registerContractCommands } from "./core/operations/contract-cli.js";
|
|
27
27
|
import { buildClaudeScaffoldFromCursor } from "./core/scaffold/claude-from-cursor.js";
|
|
28
28
|
import { runSyncClaude } from "./core/operations/sync-claude.js";
|
|
29
29
|
import { runSyncCursor } from "./core/operations/sync-cursor.js";
|
|
@@ -308,302 +308,16 @@ spec
|
|
|
308
308
|
else
|
|
309
309
|
console.log(formatSpecReject(result));
|
|
310
310
|
});
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
.
|
|
317
|
-
.
|
|
318
|
-
.
|
|
319
|
-
.
|
|
320
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
321
|
-
.option("--doc-type <type>", "Doc type for generate workflows (e.g. srs)")
|
|
322
|
-
.option("--force", "Replace existing active task in the same slot")
|
|
323
|
-
.option("--json", "JSON output")
|
|
324
|
-
.action(async (opts) => {
|
|
325
|
-
const result = await runTaskCreate({
|
|
326
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
327
|
-
kind: opts.kind,
|
|
328
|
-
workflow: opts.workflow,
|
|
329
|
-
trigger: opts.trigger,
|
|
330
|
-
docType: opts.docType,
|
|
331
|
-
force: opts.force,
|
|
332
|
-
});
|
|
333
|
-
if (opts.json)
|
|
334
|
-
console.log(JSON.stringify(result, null, 2));
|
|
335
|
-
else
|
|
336
|
-
console.log(formatTaskCreate(result));
|
|
337
|
-
});
|
|
338
|
-
task
|
|
339
|
-
.command("list")
|
|
340
|
-
.description("List tasks")
|
|
341
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
342
|
-
.option("-s, --status <status>", "Filter by status (comma-separated)")
|
|
343
|
-
.option("-k, --kind <kind>", "generate | resolve | import")
|
|
344
|
-
.option("-w, --workflow <workflow>", "Workflow id filter")
|
|
345
|
-
.option("--recent", "Only tasks in index.recent")
|
|
346
|
-
.option("--bootstrap-trigger <text>", "Create task if workflow slot is empty (requires -k and -w)")
|
|
347
|
-
.option("--doc-type <type>", "Doc type when bootstrapping a generate task")
|
|
348
|
-
.option("--force", "Replace existing active task when bootstrapping")
|
|
349
|
-
.option("--json", "JSON output")
|
|
350
|
-
.action(async (opts) => {
|
|
351
|
-
const status = opts.status
|
|
352
|
-
? opts.status.split(",").map((s) => s.trim())
|
|
353
|
-
: undefined;
|
|
354
|
-
const bootstrapTrigger = opts.bootstrapTrigger;
|
|
355
|
-
if (bootstrapTrigger && (!opts.kind || !opts.workflow)) {
|
|
356
|
-
throw new Error("--bootstrap-trigger requires -k/--kind and -w/--workflow");
|
|
357
|
-
}
|
|
358
|
-
const result = await runTaskList({
|
|
359
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
360
|
-
status: status?.length === 1 ? status[0] : status,
|
|
361
|
-
kind: opts.kind,
|
|
362
|
-
workflow: opts.workflow,
|
|
363
|
-
recentOnly: opts.recent,
|
|
364
|
-
bootstrap: bootstrapTrigger
|
|
365
|
-
? {
|
|
366
|
-
kind: opts.kind,
|
|
367
|
-
workflow: opts.workflow,
|
|
368
|
-
trigger: bootstrapTrigger,
|
|
369
|
-
docType: opts.docType,
|
|
370
|
-
force: Boolean(opts.force),
|
|
371
|
-
}
|
|
372
|
-
: undefined,
|
|
373
|
-
});
|
|
374
|
-
if (opts.json)
|
|
375
|
-
console.log(JSON.stringify(result, null, 2));
|
|
376
|
-
else
|
|
377
|
-
console.log(formatTaskList(result));
|
|
378
|
-
});
|
|
379
|
-
task
|
|
380
|
-
.command("status")
|
|
381
|
-
.description("Show active workflow task slots (generate / resolve / import)")
|
|
382
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
383
|
-
.option("--json", "JSON output")
|
|
384
|
-
.action(async (opts) => {
|
|
385
|
-
const result = await runTaskStatus({
|
|
386
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
387
|
-
});
|
|
388
|
-
if (opts.json)
|
|
389
|
-
console.log(JSON.stringify(result, null, 2));
|
|
390
|
-
else
|
|
391
|
-
console.log(formatTaskStatus(result));
|
|
392
|
-
});
|
|
393
|
-
task
|
|
394
|
-
.command("get <taskId>")
|
|
395
|
-
.description("Get full task state")
|
|
396
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
397
|
-
.option("--json", "JSON output")
|
|
398
|
-
.action(async (taskId, opts) => {
|
|
399
|
-
const result = await runTaskGet({
|
|
400
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
401
|
-
taskId,
|
|
402
|
-
});
|
|
403
|
-
if (opts.json)
|
|
404
|
-
console.log(JSON.stringify(result, null, 2));
|
|
405
|
-
else
|
|
406
|
-
console.log(formatTaskGet(result));
|
|
407
|
-
});
|
|
408
|
-
task
|
|
409
|
-
.command("update <taskId>")
|
|
410
|
-
.description("Patch task state (pass --patch as JSON)")
|
|
411
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
412
|
-
.option("--patch <json>", "JSON patch object (TaskUpdatePatch)")
|
|
413
|
-
.option("--json", "JSON output")
|
|
414
|
-
.action(async (taskId, opts) => {
|
|
415
|
-
if (!opts.patch) {
|
|
416
|
-
throw new Error("--patch is required (JSON object)");
|
|
417
|
-
}
|
|
418
|
-
const patch = JSON.parse(opts.patch);
|
|
419
|
-
const result = await runTaskUpdate({
|
|
420
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
421
|
-
taskId,
|
|
422
|
-
patch,
|
|
423
|
-
});
|
|
424
|
-
if (opts.json)
|
|
425
|
-
console.log(JSON.stringify(result, null, 2));
|
|
426
|
-
else
|
|
427
|
-
console.log(formatTaskUpdate(result));
|
|
428
|
-
});
|
|
429
|
-
task
|
|
430
|
-
.command("approve <taskId>")
|
|
431
|
-
.description("Approve the task plan and advance to the next step")
|
|
432
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
433
|
-
.option("--by <email>", "Approver email override (default: git user.email)")
|
|
434
|
-
.option("--username <name>", "Approver name override (default: git user.name)")
|
|
435
|
-
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
436
|
-
.option("--plan <json>", "Plan JSON (StoredPlan) if not already set on task")
|
|
437
|
-
.option("--json", "JSON output")
|
|
438
|
-
.action(async (taskId, opts) => {
|
|
439
|
-
const result = await runTaskApprovePlan({
|
|
440
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
441
|
-
taskId,
|
|
442
|
-
plan: opts.plan ? JSON.parse(opts.plan) : undefined,
|
|
443
|
-
by: opts.by,
|
|
444
|
-
username: opts.username,
|
|
445
|
-
role: opts.role,
|
|
446
|
-
});
|
|
447
|
-
if (opts.json)
|
|
448
|
-
console.log(JSON.stringify(result, null, 2));
|
|
449
|
-
else
|
|
450
|
-
console.log(formatTaskSimple("Approved plan for", result));
|
|
451
|
-
});
|
|
452
|
-
task
|
|
453
|
-
.command("approve-import-plan <taskId>")
|
|
454
|
-
.description("Import task: approve manifest plan after user yes (not task approve)")
|
|
455
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
456
|
-
.option("--plan <json>", "ImportPlan JSON (StoredPlan kind import) if not already on task")
|
|
457
|
-
.option("--json", "JSON output")
|
|
458
|
-
.action(async (taskId, opts) => {
|
|
459
|
-
const result = await runTaskApproveImportPlan({
|
|
460
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
461
|
-
taskId,
|
|
462
|
-
plan: opts.plan ? JSON.parse(opts.plan) : undefined,
|
|
463
|
-
});
|
|
464
|
-
if (opts.json)
|
|
465
|
-
console.log(JSON.stringify(result, null, 2));
|
|
466
|
-
else
|
|
467
|
-
console.log(formatTaskSimple("Approved import manifest plan for", result));
|
|
468
|
-
});
|
|
469
|
-
task
|
|
470
|
-
.command("approve-adopt-plan <taskId>")
|
|
471
|
-
.description("Adopt task: approve migration move plan after user yes (not task approve)")
|
|
472
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
473
|
-
.option("--by <email>", "Approver identity")
|
|
474
|
-
.option("--plan <json>", "AdoptPlanSummary JSON (StoredPlan kind adopt) if not already on task")
|
|
475
|
-
.option("--json", "JSON output")
|
|
476
|
-
.action(async (taskId, opts) => {
|
|
477
|
-
const result = await runTaskApproveAdoptPlan({
|
|
478
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
479
|
-
taskId,
|
|
480
|
-
plan: opts.plan ? JSON.parse(opts.plan) : undefined,
|
|
481
|
-
by: opts.by,
|
|
482
|
-
});
|
|
483
|
-
if (opts.json)
|
|
484
|
-
console.log(JSON.stringify(result, null, 2));
|
|
485
|
-
else
|
|
486
|
-
console.log(formatTaskSimple("Approved adopt migration plan for", result));
|
|
487
|
-
});
|
|
488
|
-
task
|
|
489
|
-
.command("approve-pack-design <taskId>")
|
|
490
|
-
.description("Import task: record approved pack design spec path after user yes")
|
|
491
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
492
|
-
.requiredOption("--design-spec <path>", "Relative path to approved pack design spec (e.g. docs/superpowers/specs/…-pack-design.md)")
|
|
493
|
-
.option("--json", "JSON output")
|
|
494
|
-
.action(async (taskId, opts) => {
|
|
495
|
-
const result = await runTaskApprovePackDesign({
|
|
496
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
497
|
-
taskId,
|
|
498
|
-
designSpecPath: opts.designSpec,
|
|
499
|
-
});
|
|
500
|
-
if (opts.json)
|
|
501
|
-
console.log(JSON.stringify(result, null, 2));
|
|
502
|
-
else
|
|
503
|
-
console.log(formatTaskSimple("Approved pack design spec for", result));
|
|
504
|
-
});
|
|
505
|
-
task
|
|
506
|
-
.command("pause <taskId>")
|
|
507
|
-
.description("Pause a task")
|
|
508
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
509
|
-
.option("--json", "JSON output")
|
|
510
|
-
.action(async (taskId, opts) => {
|
|
511
|
-
const result = await runTaskPause({
|
|
512
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
513
|
-
taskId,
|
|
514
|
-
});
|
|
515
|
-
if (opts.json)
|
|
516
|
-
console.log(JSON.stringify(result, null, 2));
|
|
517
|
-
else
|
|
518
|
-
console.log(formatTaskSimple("Paused", result));
|
|
519
|
-
});
|
|
520
|
-
task
|
|
521
|
-
.command("resume <taskId>")
|
|
522
|
-
.description("Resume a paused task (validates workspace and drift)")
|
|
523
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
524
|
-
.option("--json", "JSON output")
|
|
525
|
-
.action(async (taskId, opts) => {
|
|
526
|
-
const result = await runTaskResume({
|
|
527
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
528
|
-
taskId,
|
|
529
|
-
});
|
|
530
|
-
if (opts.json)
|
|
531
|
-
console.log(JSON.stringify(result, null, 2));
|
|
532
|
-
else {
|
|
533
|
-
const lines = [
|
|
534
|
-
`Resume ${result.task.id} — canContinue: ${result.canContinue}`,
|
|
535
|
-
` workspace: ${result.workspaceOk ? "ok" : "errors"}`,
|
|
536
|
-
` drift: ${result.drift.length} file(s)`,
|
|
537
|
-
` stale: ${result.staleContextIds.join(", ") || "none"}`,
|
|
538
|
-
` next: ${result.suggestedNext}`,
|
|
539
|
-
];
|
|
540
|
-
if (result.drift.length > 0) {
|
|
541
|
-
for (const d of result.drift) {
|
|
542
|
-
lines.push(` ${d.kind}: ${d.path}`);
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
console.log(lines.join("\n"));
|
|
546
|
-
}
|
|
547
|
-
});
|
|
548
|
-
task
|
|
549
|
-
.command("complete <taskId>")
|
|
550
|
-
.description("Mark a task complete")
|
|
551
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
552
|
-
.option("--summary <text>", "Completion summary")
|
|
553
|
-
.option("--json", "JSON output")
|
|
554
|
-
.action(async (taskId, opts) => {
|
|
555
|
-
const result = await runTaskComplete({
|
|
556
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
557
|
-
taskId,
|
|
558
|
-
summary: opts.summary,
|
|
559
|
-
});
|
|
560
|
-
if (opts.json)
|
|
561
|
-
console.log(JSON.stringify(result, null, 2));
|
|
562
|
-
else
|
|
563
|
-
console.log(formatTaskSimple("Completed", result));
|
|
564
|
-
});
|
|
565
|
-
task
|
|
566
|
-
.command("record-wave <taskId> <waveId>")
|
|
567
|
-
.description("Record generate wave progress (e.g. wave-1 done with artifacts)")
|
|
568
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
569
|
-
.option("-s, --status <status>", "done | in-progress | blocked", "done")
|
|
570
|
-
.option("--artifacts <paths>", "Comma-separated doc paths written this wave")
|
|
571
|
-
.option("--blocker <text>", "Blocker message when status is blocked")
|
|
572
|
-
.option("--json", "JSON output")
|
|
573
|
-
.action(async (taskId, waveId, opts) => {
|
|
574
|
-
const result = await recordGenerateWaveProgress({
|
|
575
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
576
|
-
taskId,
|
|
577
|
-
waveId,
|
|
578
|
-
status: opts.status,
|
|
579
|
-
artifacts: opts.artifacts
|
|
580
|
-
? opts.artifacts.split(",").map((p) => p.trim()).filter(Boolean)
|
|
581
|
-
: undefined,
|
|
582
|
-
blocker: opts.blocker ?? null,
|
|
583
|
-
});
|
|
584
|
-
if (opts.json)
|
|
585
|
-
console.log(JSON.stringify(result, null, 2));
|
|
586
|
-
else
|
|
587
|
-
console.log(formatTaskUpdate(result));
|
|
588
|
-
});
|
|
589
|
-
task
|
|
590
|
-
.command("abandon <taskId>")
|
|
591
|
-
.description("Abandon a task")
|
|
592
|
-
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
593
|
-
.option("--reason <text>", "Why the task was abandoned")
|
|
594
|
-
.option("--json", "JSON output")
|
|
595
|
-
.action(async (taskId, opts) => {
|
|
596
|
-
const result = await runTaskAbandon({
|
|
597
|
-
root: resolve(opts.cwd ?? process.cwd()),
|
|
598
|
-
taskId,
|
|
599
|
-
reason: opts.reason,
|
|
600
|
-
});
|
|
601
|
-
if (opts.json)
|
|
602
|
-
console.log(JSON.stringify(result, null, 2));
|
|
603
|
-
else
|
|
604
|
-
console.log(formatTaskSimple("Abandoned", result));
|
|
311
|
+
registerWorkCommands(program);
|
|
312
|
+
registerTaskCommands(program);
|
|
313
|
+
registerContractCommands(program);
|
|
314
|
+
const LANG_DEPRECATION_WARNING = "[deprecated] lang — use `npx ai-spector contract translate` for queue operations; language config remains here for now\n";
|
|
315
|
+
const lang = program
|
|
316
|
+
.command("lang")
|
|
317
|
+
.description("Manage project languages (deprecated — prefer contract translate for queue)")
|
|
318
|
+
.hook("preAction", () => {
|
|
319
|
+
process.stderr.write(LANG_DEPRECATION_WARNING);
|
|
605
320
|
});
|
|
606
|
-
const lang = program.command("lang").description("Manage project languages");
|
|
607
321
|
lang
|
|
608
322
|
.command("add <code>")
|
|
609
323
|
.description("Add a language to the project (e.g. jp, vi)")
|
|
@@ -1514,12 +1228,14 @@ docops
|
|
|
1514
1228
|
.option("--dry-run", "Print planned actions without writing files")
|
|
1515
1229
|
.option("--repair", "Fill gaps in existing .docops/ without overwriting")
|
|
1516
1230
|
.option("--templates-only", "Copy templates only")
|
|
1231
|
+
.option("--from-docflow", "Split legacy docflow.config.json into docops.config.json + engine.json")
|
|
1517
1232
|
.action(async (opts, cmd) => {
|
|
1518
1233
|
await runDocopsMigrate({
|
|
1519
1234
|
root: projectRootOpt(cmd),
|
|
1520
1235
|
dryRun: opts.dryRun,
|
|
1521
1236
|
repair: opts.repair,
|
|
1522
1237
|
templatesOnly: opts.templatesOnly,
|
|
1238
|
+
fromDocflow: opts.fromDocflow,
|
|
1523
1239
|
});
|
|
1524
1240
|
});
|
|
1525
1241
|
const reviewSession = review.command("session").description("Persisted review session gate for sign-off");
|