ai-spector 0.8.47 → 0.8.49
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 +95 -90
- package/README.vi.md +34 -11
- package/dist/cli.js +93 -11
- package/dist/cli.js.map +1 -1
- package/dist/core/comments/inbox.d.ts +2 -0
- package/dist/core/comments/inbox.d.ts.map +1 -1
- package/dist/core/comments/inbox.js +4 -1
- package/dist/core/comments/inbox.js.map +1 -1
- package/dist/core/comments/storage.d.ts +3 -0
- package/dist/core/comments/storage.d.ts.map +1 -1
- package/dist/core/comments/storage.js +12 -3
- package/dist/core/comments/storage.js.map +1 -1
- package/dist/core/comments/types.d.ts +6 -0
- package/dist/core/comments/types.d.ts.map +1 -1
- package/dist/core/config/docflow-paths.d.ts +23 -0
- package/dist/core/config/docflow-paths.d.ts.map +1 -0
- package/dist/core/config/docflow-paths.js +64 -0
- package/dist/core/config/docflow-paths.js.map +1 -0
- package/dist/core/config/load.d.ts +3 -1
- package/dist/core/config/load.d.ts.map +1 -1
- package/dist/core/config/load.js +4 -2
- package/dist/core/config/load.js.map +1 -1
- package/dist/core/config/types.d.ts +3 -3
- package/dist/core/config/types.d.ts.map +1 -1
- package/dist/core/course/catalog.d.ts +20 -0
- package/dist/core/course/catalog.d.ts.map +1 -0
- package/dist/core/course/catalog.js +117 -0
- package/dist/core/course/catalog.js.map +1 -0
- package/dist/core/course/html-shell.d.ts +11 -0
- package/dist/core/course/html-shell.d.ts.map +1 -0
- package/dist/core/course/html-shell.js +175 -0
- package/dist/core/course/html-shell.js.map +1 -0
- package/dist/core/course/render.d.ts +4 -0
- package/dist/core/course/render.d.ts.map +1 -0
- package/dist/core/course/render.js +58 -0
- package/dist/core/course/render.js.map +1 -0
- package/dist/core/course/sections.d.ts +5 -0
- package/dist/core/course/sections.d.ts.map +1 -0
- package/dist/core/course/sections.js +25 -0
- package/dist/core/course/sections.js.map +1 -0
- package/dist/core/course/serve.d.ts +16 -0
- package/dist/core/course/serve.d.ts.map +1 -0
- package/dist/core/course/serve.js +81 -0
- package/dist/core/course/serve.js.map +1 -0
- package/dist/core/index/docs-config.d.ts.map +1 -1
- package/dist/core/index/docs-config.js +2 -1
- package/dist/core/index/docs-config.js.map +1 -1
- package/dist/core/operations/check.d.ts.map +1 -1
- package/dist/core/operations/check.js +2 -1
- package/dist/core/operations/check.js.map +1 -1
- package/dist/core/operations/comments.d.ts +12 -4
- package/dist/core/operations/comments.d.ts.map +1 -1
- package/dist/core/operations/comments.js +13 -2
- package/dist/core/operations/comments.js.map +1 -1
- package/dist/core/operations/context.d.ts +8 -0
- package/dist/core/operations/context.d.ts.map +1 -1
- package/dist/core/operations/context.js +19 -3
- package/dist/core/operations/context.js.map +1 -1
- package/dist/core/operations/course.d.ts +2 -0
- package/dist/core/operations/course.d.ts.map +1 -0
- package/dist/core/operations/course.js +2 -0
- package/dist/core/operations/course.js.map +1 -0
- package/dist/core/operations/extracted.d.ts +12 -0
- package/dist/core/operations/extracted.d.ts.map +1 -1
- package/dist/core/operations/extracted.js +36 -7
- package/dist/core/operations/extracted.js.map +1 -1
- package/dist/core/operations/prototype.js +4 -4
- package/dist/core/operations/review.d.ts +54 -1
- package/dist/core/operations/review.d.ts.map +1 -1
- package/dist/core/operations/review.js +119 -10
- package/dist/core/operations/review.js.map +1 -1
- package/dist/core/operations/setup.d.ts.map +1 -1
- package/dist/core/operations/setup.js +2 -1
- package/dist/core/operations/setup.js.map +1 -1
- package/dist/core/operations/task.d.ts +7 -0
- package/dist/core/operations/task.d.ts.map +1 -1
- package/dist/core/operations/task.js +25 -4
- package/dist/core/operations/task.js.map +1 -1
- package/dist/core/operations/template.d.ts.map +1 -1
- package/dist/core/operations/template.js +18 -17
- package/dist/core/operations/template.js.map +1 -1
- package/dist/core/operations/workflow-route.d.ts +7 -0
- package/dist/core/operations/workflow-route.d.ts.map +1 -0
- package/dist/core/operations/workflow-route.js +47 -0
- package/dist/core/operations/workflow-route.js.map +1 -0
- package/dist/core/operations/workflow-status.d.ts +6 -0
- package/dist/core/operations/workflow-status.d.ts.map +1 -0
- package/dist/core/operations/workflow-status.js +12 -0
- package/dist/core/operations/workflow-status.js.map +1 -0
- package/dist/core/prototype/config.d.ts.map +1 -1
- package/dist/core/prototype/config.js +6 -5
- package/dist/core/prototype/config.js.map +1 -1
- package/dist/core/readiness/config.d.ts +1 -1
- package/dist/core/readiness/config.d.ts.map +1 -1
- package/dist/core/readiness/config.js +13 -12
- package/dist/core/readiness/config.js.map +1 -1
- package/dist/core/readiness/criteria-path.d.ts.map +1 -1
- package/dist/core/readiness/criteria-path.js +4 -4
- package/dist/core/readiness/criteria-path.js.map +1 -1
- package/dist/core/readiness/custom-checklists.d.ts +35 -0
- package/dist/core/readiness/custom-checklists.d.ts.map +1 -0
- package/dist/core/readiness/custom-checklists.js +176 -0
- package/dist/core/readiness/custom-checklists.js.map +1 -0
- package/dist/core/readiness/output-checklist.d.ts +9 -0
- package/dist/core/readiness/output-checklist.d.ts.map +1 -1
- package/dist/core/readiness/output-checklist.js +16 -14
- package/dist/core/readiness/output-checklist.js.map +1 -1
- package/dist/core/readiness/profiles.d.ts +4 -1
- package/dist/core/readiness/profiles.d.ts.map +1 -1
- package/dist/core/readiness/profiles.js +33 -25
- package/dist/core/readiness/profiles.js.map +1 -1
- package/dist/core/readiness/resolve.js +2 -2
- package/dist/core/readiness/resolve.js.map +1 -1
- package/dist/core/readiness/scan-docs.d.ts.map +1 -1
- package/dist/core/readiness/scan-docs.js +3 -3
- package/dist/core/readiness/scan-docs.js.map +1 -1
- package/dist/core/readiness/standards-align.js +1 -1
- package/dist/core/readiness/standards-align.js.map +1 -1
- package/dist/core/readiness/types.d.ts +2 -0
- package/dist/core/readiness/types.d.ts.map +1 -1
- package/dist/core/reviews/doc-type.d.ts +3 -0
- package/dist/core/reviews/doc-type.d.ts.map +1 -0
- package/dist/core/reviews/doc-type.js +17 -0
- package/dist/core/reviews/doc-type.js.map +1 -0
- package/dist/core/reviews/errors.d.ts +31 -0
- package/dist/core/reviews/errors.d.ts.map +1 -0
- package/dist/core/reviews/errors.js +80 -0
- package/dist/core/reviews/errors.js.map +1 -0
- package/dist/core/reviews/paths.d.ts +1 -0
- package/dist/core/reviews/paths.d.ts.map +1 -1
- package/dist/core/reviews/paths.js +1 -0
- package/dist/core/reviews/paths.js.map +1 -1
- package/dist/core/reviews/session.d.ts +10 -0
- package/dist/core/reviews/session.d.ts.map +1 -0
- package/dist/core/reviews/session.js +109 -0
- package/dist/core/reviews/session.js.map +1 -0
- package/dist/core/reviews/types.d.ts +19 -0
- package/dist/core/reviews/types.d.ts.map +1 -1
- package/dist/core/reviews/types.js.map +1 -1
- package/dist/core/reviews/workflow-guidance.d.ts +15 -0
- package/dist/core/reviews/workflow-guidance.d.ts.map +1 -0
- package/dist/core/reviews/workflow-guidance.js +100 -0
- package/dist/core/reviews/workflow-guidance.js.map +1 -0
- package/dist/core/template/pack-readiness.js +2 -2
- package/dist/core/template/pack-readiness.js.map +1 -1
- package/dist/core/util/audit-actor.d.ts +29 -0
- package/dist/core/util/audit-actor.d.ts.map +1 -0
- package/dist/core/util/audit-actor.js +80 -0
- package/dist/core/util/audit-actor.js.map +1 -0
- package/dist/core/util/git-user.d.ts +3 -0
- package/dist/core/util/git-user.d.ts.map +1 -0
- package/dist/core/util/git-user.js +3 -0
- package/dist/core/util/git-user.js.map +1 -0
- package/dist/core/workflow/active-worker.d.ts +48 -0
- package/dist/core/workflow/active-worker.d.ts.map +1 -0
- package/dist/core/workflow/active-worker.js +173 -0
- package/dist/core/workflow/active-worker.js.map +1 -0
- package/dist/core/workflow/guidance.d.ts +33 -0
- package/dist/core/workflow/guidance.d.ts.map +1 -0
- package/dist/core/workflow/guidance.js +236 -0
- package/dist/core/workflow/guidance.js.map +1 -0
- package/dist/core/workflow/route-intent.d.ts +53 -0
- package/dist/core/workflow/route-intent.d.ts.map +1 -0
- package/dist/core/workflow/route-intent.js +251 -0
- package/dist/core/workflow/route-intent.js.map +1 -0
- package/dist/interfaces/cli/format/comments.d.ts.map +1 -1
- package/dist/interfaces/cli/format/comments.js +4 -2
- package/dist/interfaces/cli/format/comments.js.map +1 -1
- package/dist/interfaces/cli/format/context.d.ts.map +1 -1
- package/dist/interfaces/cli/format/context.js +4 -1
- package/dist/interfaces/cli/format/context.js.map +1 -1
- package/dist/interfaces/cli/format/extracted.d.ts.map +1 -1
- package/dist/interfaces/cli/format/extracted.js +4 -1
- package/dist/interfaces/cli/format/extracted.js.map +1 -1
- package/dist/interfaces/cli/format/reviews.d.ts +3 -1
- package/dist/interfaces/cli/format/reviews.d.ts.map +1 -1
- package/dist/interfaces/cli/format/reviews.js +17 -2
- package/dist/interfaces/cli/format/reviews.js.map +1 -1
- package/dist/interfaces/mcp/format-tool-error.d.ts +11 -0
- package/dist/interfaces/mcp/format-tool-error.d.ts.map +1 -0
- package/dist/interfaces/mcp/format-tool-error.js +21 -0
- package/dist/interfaces/mcp/format-tool-error.js.map +1 -0
- package/dist/interfaces/mcp/schemas.d.ts +109 -36
- package/dist/interfaces/mcp/schemas.d.ts.map +1 -1
- package/dist/interfaces/mcp/schemas.js +48 -6
- package/dist/interfaces/mcp/schemas.js.map +1 -1
- package/dist/interfaces/mcp/server.js +88 -20
- package/dist/interfaces/mcp/server.js.map +1 -1
- package/dist/interfaces/mcp/tool-descriptions.d.ts +21 -0
- package/dist/interfaces/mcp/tool-descriptions.d.ts.map +1 -0
- package/dist/interfaces/mcp/tool-descriptions.js +88 -0
- package/dist/interfaces/mcp/tool-descriptions.js.map +1 -0
- package/dist/interfaces/mcp/tools/comments.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/comments.js +3 -1
- package/dist/interfaces/mcp/tools/comments.js.map +1 -1
- package/dist/interfaces/mcp/tools/context.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/context.js +6 -2
- package/dist/interfaces/mcp/tools/context.js.map +1 -1
- package/dist/interfaces/mcp/tools/extracted.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/extracted.js +4 -0
- package/dist/interfaces/mcp/tools/extracted.js.map +1 -1
- package/dist/interfaces/mcp/tools/readiness.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/readiness.js +1 -0
- package/dist/interfaces/mcp/tools/readiness.js.map +1 -1
- package/dist/interfaces/mcp/tools/resolve-task.d.ts +8 -2
- package/dist/interfaces/mcp/tools/resolve-task.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/resolve-task.js +5 -1
- package/dist/interfaces/mcp/tools/resolve-task.js.map +1 -1
- package/dist/interfaces/mcp/tools/reviews.d.ts +3 -1
- package/dist/interfaces/mcp/tools/reviews.d.ts.map +1 -1
- package/dist/interfaces/mcp/tools/reviews.js +22 -3
- 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 +3 -0
- package/dist/interfaces/mcp/tools/task.js.map +1 -1
- package/dist/interfaces/mcp/tools/workflow-route.d.ts +4 -0
- package/dist/interfaces/mcp/tools/workflow-route.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/workflow-route.js +5 -0
- package/dist/interfaces/mcp/tools/workflow-route.js.map +1 -0
- package/dist/interfaces/mcp/tools/workflow-status.d.ts +4 -0
- package/dist/interfaces/mcp/tools/workflow-status.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/workflow-status.js +5 -0
- package/dist/interfaces/mcp/tools/workflow-status.js.map +1 -0
- package/dist/interfaces/sdk/index.d.ts +19 -3
- package/dist/interfaces/sdk/index.d.ts.map +1 -1
- package/dist/interfaces/sdk/index.js +9 -1
- package/dist/interfaces/sdk/index.js.map +1 -1
- package/docs/course/00-overview.md +38 -0
- package/docs/course/01-get-started/01-prerequisites-and-init.md +82 -0
- package/docs/course/01-get-started/02-setup-and-skills.md +50 -0
- package/docs/course/01-get-started/README.md +10 -0
- package/docs/course/02-chat-basics/01-how-chat-works.md +48 -0
- package/docs/course/02-chat-basics/02-workspace-and-tasks.md +55 -0
- package/docs/course/02-chat-basics/README.md +10 -0
- package/docs/course/03-graph/01-sources-and-analyze.md +44 -0
- package/docs/course/03-graph/02-validate-index-explore.md +57 -0
- package/docs/course/03-graph/README.md +10 -0
- package/docs/course/04-generate/01-generate-srs.md +63 -0
- package/docs/course/04-generate/02-basic-design.md +44 -0
- package/docs/course/04-generate/README.md +12 -0
- package/docs/course/05-prototype/01-translations.md +26 -0
- package/docs/course/05-prototype/02-build-prototype.md +54 -0
- package/docs/course/05-prototype/README.md +10 -0
- package/docs/course/06-review/01-review-comments-changes.md +55 -0
- package/docs/course/06-review/README.md +9 -0
- package/docs/course/07-advanced/01-custom-templates.md +30 -0
- package/docs/course/07-advanced/02-search-and-editors.md +36 -0
- package/docs/course/07-advanced/README.md +10 -0
- package/docs/course/README.md +45 -0
- package/package.json +4 -1
- package/scaffold/.ai-spector/.docflow/config/{dag.srs.graph-seeds.json → doc-types/srs/dag.graph-seeds.json} +1 -1
- package/scaffold/.ai-spector/.docflow/config/readiness/profiles/general.json +7 -0
- package/scaffold/.ai-spector/.docflow/config/review-checklists/README.md +59 -0
- package/scaffold/.ai-spector/.docflow/config/review-checklists/srs/_all/security-gates.json.example +19 -0
- package/scaffold/.ai-spector/.docflow/config/{index.docs.json → workspace/index.docs.json} +1 -1
- package/scaffold/claude/.claude/skills/ai-spector-generate-srs/skill.md +2 -2
- package/scaffold/cocoindex/flow.py +1 -1
- package/scaffold/cursor/ACTIVE-WORKER.md +46 -0
- package/scaffold/cursor/WORKFLOW.md +44 -4
- package/scaffold/cursor/commands/generate-srs.md +32 -0
- package/scaffold/cursor/commands/resolve-comments.md +31 -0
- package/scaffold/cursor/commands/review.md +35 -0
- package/scaffold/cursor/rules/ai-spector-routing.mdc +85 -0
- package/scaffold/cursor/skills/README.md +17 -13
- package/scaffold/cursor/skills/_skill-router.md +39 -8
- package/scaffold/cursor/skills/ai-spector/SKILL.md +8 -2
- package/scaffold/cursor/skills/ai-spector/references/clarify.md +1 -1
- package/scaffold/cursor/skills/ai-spector/references/context-readiness.md +15 -14
- package/scaffold/cursor/skills/ai-spector/references/extract-specs.md +3 -0
- package/scaffold/cursor/skills/ai-spector/references/generate-workflow.md +3 -3
- package/scaffold/cursor/skills/ai-spector/references/language-picker.md +3 -3
- package/scaffold/cursor/skills/ai-spector/references/plan-and-briefing.md +1 -1
- package/scaffold/cursor/skills/ai-spector/references/prerequisites.md +1 -1
- package/scaffold/cursor/skills/ai-spector/references/project-conventions.md +9 -3
- package/scaffold/cursor/skills/ai-spector/references/workspace-check.md +1 -1
- package/scaffold/cursor/skills/ai-spector-check/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-generate/SKILL.md +4 -0
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-generate-basic-design/references/runbook.md +1 -1
- package/scaffold/cursor/skills/ai-spector-generate-prototype/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/auth-picker.md +6 -6
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/runbook.md +9 -9
- package/scaffold/cursor/skills/ai-spector-generate-prototype/references/stack-picker.md +4 -4
- package/scaffold/cursor/skills/ai-spector-generate-srs/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-generate-srs/references/runbook.md +3 -3
- package/scaffold/cursor/skills/ai-spector-graph/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-resolve-comments/SKILL.md +13 -5
- package/scaffold/cursor/skills/ai-spector-resolve-task/SKILL.md +11 -3
- package/scaffold/cursor/skills/ai-spector-review/SKILL.md +20 -10
- package/scaffold/cursor/skills/ai-spector-review/references/custom-checklists.md +139 -0
- package/scaffold/cursor/skills/ai-spector-review/references/readiness-compliance.md +82 -0
- package/scaffold/cursor/skills/ai-spector-review/references/runbook.md +56 -3
- package/scaffold/cursor/skills/ai-spector-search/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-setup/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-setup/references/cli-setup.md +9 -3
- package/scaffold/cursor/skills/ai-spector-setup/references/runbook.md +3 -1
- package/scaffold/cursor/skills/ai-spector-task/SKILL.md +6 -0
- package/scaffold/cursor/skills/ai-spector-template-import/references/pack-gap-matrix.md +3 -3
- package/scaffold/cursor/skills/ai-spector-template-import/references/readiness-setup.md +2 -2
- package/scaffold/cursor/skills/ai-spector-template-import/references/skill-outline.md +9 -9
- package/scaffold/cursor/subagents/README.md +53 -0
- package/scaffold/cursor/subagents/doc-review.md +45 -0
- package/scaffold/cursor/subagents/generate-basic-design.md +28 -0
- package/scaffold/cursor/subagents/generate-prototype.md +31 -0
- package/scaffold/cursor/subagents/generate-srs.md +44 -0
- package/scaffold/cursor/subagents/graph-ops.md +34 -0
- package/scaffold/cursor/subagents/resolve-comments.md +38 -0
- package/scaffold/cursor/subagents/resolve-task.md +40 -0
- package/scaffold/cursor/subagents/search.md +25 -0
- package/scaffold/cursor/subagents/setup-check.md +25 -0
- package/scaffold/cursor/subagents/spec-queue.md +34 -0
- package/scaffold/cursor/subagents/task-router.md +39 -0
- package/scaffold/prototype/README.md +2 -2
- package/scaffold/cursor/rules/ai-spector-generate-task.mdc +0 -43
- package/scaffold/cursor/rules/ai-spector-resolve-task.mdc +0 -29
- /package/scaffold/.ai-spector/.docflow/config/{completeness-rules.basic-design.json → doc-types/basic-design/completeness-rules.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{dag.basic-design.graph-seeds.json → doc-types/basic-design/dag.graph-seeds.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{dag.basic-design.json → doc-types/basic-design/dag.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{completeness-rules.detail-design.json → doc-types/detail-design/completeness-rules.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{dag.detail-design.json → doc-types/detail-design/dag.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{completeness-rules.srs.json → doc-types/srs/completeness-rules.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{dag.srs.json → doc-types/srs/dag.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{readiness-criteria.srs.json → doc-types/srs/readiness-criteria.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{prototype.config.json → prototype/config.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{readiness-profiles → readiness/profiles}/arc42.json +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{readiness-profiles → readiness/profiles}/regulated.json +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{data-source.json → workspace/data-source.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{language.json → workspace/language.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{workspace.rules.json → workspace/rules.json} +0 -0
- /package/scaffold/.ai-spector/.docflow/config/{workflow.dependencies.json → workspace/workflow.dependencies.json} +0 -0
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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
|
|
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** — an orchestrator routes to specialized workers that run `ai-spector` MCP tools. You rarely touch the terminal.
|
|
4
4
|
|
|
5
5
|
**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
6
|
|
|
7
|
-
**
|
|
7
|
+
**Learn:** `npx ai-spector course serve --open` · [Course](docs/course/README.md) *(13 lessons, ~10 min each)*
|
|
8
8
|
|
|
9
9
|
**Tiếng Việt:** [README.vi.md](README.vi.md)
|
|
10
10
|
|
|
@@ -19,21 +19,29 @@ Documentation workflow in **Cursor** or **Claude Code**: traceability graph, SRS
|
|
|
19
19
|
| Node.js ≥ 20 | `node --version` |
|
|
20
20
|
| Git repository | `git status` |
|
|
21
21
|
| Cursor and/or Claude Code | IDE open in project root |
|
|
22
|
-
| Python ≥ 3.11 *(optional)* |
|
|
22
|
+
| Python ≥ 3.11 *(optional)* | CocoIndex semantic search |
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
### Step 1 — Install & scaffold *(CLI)*
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Run once at your project root. **Install the package first**, then run the init wizard.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
**Internal registry** (Verdaccio — no `npm login` required):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
31
|
+
npm install ai-spector --registry http://10.101.0.239:4873
|
|
32
|
+
npx ai-spector init
|
|
32
33
|
```
|
|
33
34
|
|
|
34
|
-
|
|
35
|
+
**Public npm:**
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
```bash
|
|
38
|
+
npm install ai-spector
|
|
39
|
+
npx ai-spector init
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The init wizard prompts for editor (Cursor, Claude Code, or both), languages, git hook, and optional CocoIndex.
|
|
43
|
+
|
|
44
|
+
Creates:
|
|
37
45
|
|
|
38
46
|
- `.ai-spector/` — config, graph, templates
|
|
39
47
|
- `docs/data-source/`, `docs/srs/`, `docs/basic-design/`
|
|
@@ -41,129 +49,124 @@ This creates:
|
|
|
41
49
|
- **Claude Code:** `CLAUDE.md` + `.claude/skills/` + `.mcp.json`
|
|
42
50
|
- Pre-commit hook (when git is available)
|
|
43
51
|
|
|
44
|
-
---
|
|
45
|
-
|
|
46
52
|
### Step 2 — Finish setup in chat
|
|
47
53
|
|
|
48
|
-
Open the project in **Cursor** or **Claude Code** and say:
|
|
49
|
-
|
|
50
54
|
```text
|
|
51
55
|
setup ai-spector project
|
|
52
56
|
```
|
|
53
57
|
|
|
54
|
-
The agent installs the npm dependency (if needed), verifies the checklist,
|
|
55
|
-
|
|
56
|
-
---
|
|
58
|
+
The agent installs the npm dependency (if needed), verifies the checklist, and reminds you of any manual steps.
|
|
57
59
|
|
|
58
60
|
### Step 3 — Enable the agent *(manual, one-time)*
|
|
59
61
|
|
|
60
|
-
**Cursor**
|
|
61
|
-
|
|
62
|
-
1. **Settings → Rules → Agent Skills** — enable **all** folders under `.cursor/skills/` (see `.cursor/skills/README.md`)
|
|
63
|
-
2. **Reload MCP** — `.cursor/mcp.json` registers the `ai-spector` MCP server
|
|
64
|
-
|
|
65
|
-
**Claude Code**
|
|
62
|
+
**Cursor:** Settings → Rules → **Agent Skills** — enable **all** folders under `.cursor/skills/`. Reload MCP (`.cursor/mcp.json`).
|
|
66
63
|
|
|
67
|
-
|
|
68
|
-
2. **Reload MCP** — `.mcp.json` registers the `ai-spector` MCP server
|
|
69
|
-
|
|
70
|
-
---
|
|
64
|
+
**Claude Code:** Skills load from `.claude/skills/`. Reload MCP (`.mcp.json`).
|
|
71
65
|
|
|
72
66
|
### Step 4 — Add source material
|
|
73
67
|
|
|
74
|
-
Drop requirements
|
|
75
|
-
|
|
76
|
-
---
|
|
68
|
+
Drop requirements into `docs/data-source/` (`.md`, `.txt`, `.pdf`).
|
|
77
69
|
|
|
78
70
|
### Step 5 — Start the pipeline
|
|
79
71
|
|
|
80
|
-
In chat:
|
|
81
|
-
|
|
82
72
|
```text
|
|
83
73
|
analyze my data source
|
|
84
74
|
```
|
|
85
75
|
|
|
86
|
-
|
|
76
|
+
Continue in chat — see [Workflow](#workflow) below.
|
|
87
77
|
|
|
88
78
|
---
|
|
89
79
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Enables `docs_search` and `graph_query_fuzzy` MCP tools. Requires Python ≥ 3.11.
|
|
93
|
-
|
|
94
|
-
In chat:
|
|
80
|
+
## Workflow
|
|
95
81
|
|
|
96
|
-
|
|
97
|
-
enable CocoIndex for this project
|
|
98
|
-
```
|
|
82
|
+
After `init`, see `.cursor/WORKFLOW.md` (Cursor) or `CLAUDE.md` (Claude Code) for the full skill map.
|
|
99
83
|
|
|
100
|
-
|
|
84
|
+
### How chat routing works
|
|
101
85
|
|
|
102
|
-
|
|
86
|
+
| Layer | Role |
|
|
87
|
+
|-------|------|
|
|
88
|
+
| **Orchestrator** | Classifies your message, asks clarifying questions, spawns a worker |
|
|
89
|
+
| **Worker** | One job (analyze, generate SRS, review docs, …) with a saved task state |
|
|
103
90
|
|
|
104
|
-
|
|
91
|
+
Say what you want in natural language — same in Cursor and Claude Code. If intent is unclear (especially **“approve”**), the agent asks once before acting.
|
|
105
92
|
|
|
106
|
-
|
|
93
|
+
### First run
|
|
107
94
|
|
|
108
95
|
```text
|
|
109
|
-
|
|
110
|
-
|
|
96
|
+
analyze the data source
|
|
97
|
+
validate the graph
|
|
98
|
+
generate the SRS
|
|
111
99
|
```
|
|
112
100
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Workflow
|
|
118
|
-
|
|
119
|
-
See `.cursor/WORKFLOW.md` (Cursor) or `CLAUDE.md` (Claude Code) after `init`.
|
|
101
|
+
Generation is **gated**: workspace check → clarifying questions → plan table → your **yes, go ahead** → waves of writing → optional **SPEC-NNN** approval → index.
|
|
120
102
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Say in chat:
|
|
103
|
+
Then as needed:
|
|
124
104
|
|
|
125
105
|
```text
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
106
|
+
generate basic design
|
|
107
|
+
generate prototype
|
|
108
|
+
refresh the index
|
|
109
|
+
review documents
|
|
130
110
|
```
|
|
131
111
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
**Prototype** — static HTML (default) or SPA (React/Vue/etc. built to static files in `prototype/dist/`). Say **“generate prototype”** or **“generate HTML prototype”** for plain HTML; **“generate prototype with Vue”** (or React) for SPA. If no theme is saved, the agent recommends 3 themes, opens previews, and waits for you to pick. Or name one upfront: **“prototype with stripe theme”**.
|
|
135
|
-
|
|
136
|
-
Then: **“generate prototype for all screens”**. For SPA, run the framework build and `npx ai-spector prototype sync`.
|
|
112
|
+
**Prototype** — static HTML (default) or SPA (React/Vue → `prototype/dist/`). Say **“generate prototype”** or **“generate prototype with Vue”**. For themes: **“help me pick a theme”** or **“prototype with stripe theme”**. SPA: run framework build, then `npx ai-spector prototype sync`.
|
|
137
113
|
|
|
138
114
|
### Day to day
|
|
139
115
|
|
|
140
116
|
| When | Say (examples) |
|
|
141
117
|
|------|----------------|
|
|
142
|
-
| New or changed
|
|
143
|
-
| Check graph | “validate the graph” |
|
|
144
|
-
| Regenerate docs | “generate SRS”, “generate basic design
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
| After doc edits | “re-index the graph” |
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
118
|
+
| New or changed sources | “analyze data source” |
|
|
119
|
+
| Check graph | “validate the graph”, “graph report” |
|
|
120
|
+
| Regenerate docs | “generate SRS”, “generate basic design” |
|
|
121
|
+
| Pause / resume work | “active tasks”, “resume my SRS”, “pause task” |
|
|
122
|
+
| One feature or section | “I want to add login with Google”, “update the auth section” |
|
|
123
|
+
| After doc edits | “refresh the index”, “re-index the graph” |
|
|
124
|
+
| Document sign-off | “review documents”, “approve srs/01-overview”, “what needs review” |
|
|
125
|
+
| Comment threads | “resolve comments”, “show open comments” |
|
|
126
|
+
| Impact / what to redo | “what’s the impact of my changes” |
|
|
127
|
+
| Prototype | “generate prototype”, “prototype with stripe theme” |
|
|
128
|
+
| Multi-language | “add language vi”, “resolve translations” — [course](docs/course/05-prototype/01-translations.md) |
|
|
129
|
+
| Custom templates | “set up template pack”, `generate <pack-name>` — [course](docs/course/07-advanced/01-custom-templates.md) |
|
|
130
|
+
| Semantic search *(CocoIndex)* | “find all mentions of rate limiting” |
|
|
131
|
+
| Explore graph | “show the graph”, `npx ai-spector graph visualize --open` |
|
|
132
|
+
| Check workspace | “check my workspace”, “why did pre-commit block me” |
|
|
153
133
|
|
|
154
134
|
### Typical path
|
|
155
135
|
|
|
156
136
|
```text
|
|
157
|
-
docs/data-source/ → analyze → validate
|
|
158
|
-
|
|
159
|
-
|
|
137
|
+
docs/data-source/ → analyze → validate
|
|
138
|
+
→ generate SRS (clarify → plan → waves → specs) → index
|
|
139
|
+
→ basic design → prototype → review documents
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Optional — CocoIndex
|
|
145
|
+
|
|
146
|
+
Enables semantic search MCP tools (`docs_search`, `graph_query_fuzzy`). Requires Python ≥ 3.11.
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
enable CocoIndex for this project
|
|
160
150
|
```
|
|
161
151
|
|
|
152
|
+
See [docs/setup-guide.md](docs/setup-guide.md) for Postgres / embedding options.
|
|
153
|
+
|
|
162
154
|
---
|
|
163
155
|
|
|
164
|
-
## CLI (
|
|
156
|
+
## CLI *(scripts & debugging)*
|
|
157
|
+
|
|
158
|
+
Most users stay in chat. Useful commands:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx ai-spector course serve --open # interactive course in browser
|
|
162
|
+
npx ai-spector setup --check
|
|
163
|
+
npx ai-spector graph validate
|
|
164
|
+
npx ai-spector graph visualize --open
|
|
165
|
+
npx ai-spector graph impact --git
|
|
166
|
+
npx ai-spector prototype validate --strict
|
|
167
|
+
```
|
|
165
168
|
|
|
166
|
-
|
|
169
|
+
Full list: `npx ai-spector --help`.
|
|
167
170
|
|
|
168
171
|
---
|
|
169
172
|
|
|
@@ -172,19 +175,21 @@ For scripts or debugging only: `npx ai-spector index`, `graph validate`, `graph
|
|
|
172
175
|
| Issue | Fix |
|
|
173
176
|
|-------|-----|
|
|
174
177
|
| MCP tools unavailable | Reload MCP; confirm `.cursor/mcp.json` or `.mcp.json` has `ai-spector` server |
|
|
175
|
-
| Setup incomplete |
|
|
176
|
-
| Skills not routing (Cursor) | Re-enable all folders under `.cursor/skills/`
|
|
177
|
-
| Validate errors after edits |
|
|
178
|
-
| Pre-commit hook missing |
|
|
178
|
+
| Setup incomplete | **“check ai-spector setup”** |
|
|
179
|
+
| Skills not routing (Cursor) | Re-enable all folders under `.cursor/skills/` |
|
|
180
|
+
| Validate errors after edits | **“re-index the graph”** |
|
|
181
|
+
| Pre-commit hook missing | **“install ai-spector git hook”** |
|
|
179
182
|
| Agent stuck on CLI error | `.cursor/skills/ai-spector/references/cli-failures.md` |
|
|
180
183
|
|
|
184
|
+
After upgrading: reload MCP; in chat **“sync ai-spector cursor skills”** if scaffold skills changed.
|
|
185
|
+
|
|
181
186
|
---
|
|
182
187
|
|
|
183
188
|
## Node SDK
|
|
184
189
|
|
|
185
|
-
For
|
|
190
|
+
For scripts, CI, or custom backends:
|
|
186
191
|
|
|
187
|
-
- **[SDK guide](docs/sdk.md)** — install, entry points,
|
|
192
|
+
- **[SDK guide](docs/plan/sdk.md)** — install, entry points, API reference
|
|
188
193
|
|
|
189
194
|
```bash
|
|
190
195
|
npm install ai-spector
|
|
@@ -198,10 +203,10 @@ import { runIndex, runGraphImpact, validateGraph } from "ai-spector";
|
|
|
198
203
|
|
|
199
204
|
## Web / graph SDK
|
|
200
205
|
|
|
201
|
-
For
|
|
206
|
+
For browser dashboards (read-only graph UI): npm package **`ai-spector-graph`**.
|
|
202
207
|
|
|
203
|
-
- **[Integration guide](docs/ai-spector-graph-integration-guide.md)**
|
|
204
|
-
- **[API reference](docs/ai-spector-graph.md)**
|
|
208
|
+
- **[Integration guide](docs/ai-spector-graph-integration-guide.md)**
|
|
209
|
+
- **[API reference](docs/ai-spector-graph.md)**
|
|
205
210
|
|
|
206
211
|
```bash
|
|
207
212
|
npm install ai-spector-graph
|
package/README.vi.md
CHANGED
|
@@ -4,7 +4,7 @@ Công cụ làm tài liệu phần mềm trên **Cursor** hoặc **Claude Code**
|
|
|
4
4
|
|
|
5
5
|
**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
6
|
|
|
7
|
-
Hướng dẫn
|
|
7
|
+
Hướng dẫn từng bước: `npx ai-spector course serve --open` · [Khóa học](docs/course/README.md)
|
|
8
8
|
|
|
9
9
|
**English:** [README.md](README.md)
|
|
10
10
|
|
|
@@ -23,15 +23,25 @@ Hướng dẫn chi tiết: [docs/setup-guide.md](docs/setup-guide.md)
|
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
### Bước 1 —
|
|
26
|
+
### Bước 1 — Cài gói & khởi tạo *(CLI)*
|
|
27
27
|
|
|
28
|
-
Chạy một lần ở thư mục gốc project. **
|
|
28
|
+
Chạy một lần ở thư mục gốc project. **Cài gói trước**, rồi chạy wizard init.
|
|
29
|
+
|
|
30
|
+
**Registry nội bộ** (Verdaccio — **không cần** `npm login`):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install ai-spector --registry http://10.101.0.239:4873
|
|
34
|
+
npx ai-spector init
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**npm công khai:**
|
|
29
38
|
|
|
30
39
|
```bash
|
|
31
|
-
|
|
40
|
+
npm install ai-spector
|
|
41
|
+
npx ai-spector init
|
|
32
42
|
```
|
|
33
43
|
|
|
34
|
-
|
|
44
|
+
Wizard init sẽ hỏi: Cursor, Claude Code hay cả hai; ngôn ngữ; git hook; CocoIndex (tùy chọn).
|
|
35
45
|
|
|
36
46
|
Sau khi chạy xong sẽ có:
|
|
37
47
|
|
|
@@ -145,11 +155,15 @@ Sau đó: **“generate prototype for all screens”**. Với SPA, chạy build
|
|
|
145
155
|
| Prototype (HTML hoặc SPA) | “generate prototype”, “generate prototype with Vue”, “prototype with stripe theme” |
|
|
146
156
|
| Chọn theme | “help me pick a prototype theme”, “show me theme options” |
|
|
147
157
|
| Vừa sửa tài liệu xong | “re-index the graph” |
|
|
148
|
-
| Đồng bộ đa ngôn ngữ | “add language vi”, “resolve translations
|
|
149
|
-
| Template tùy chỉnh | “set up template pack”,
|
|
158
|
+
| Đồng bộ đa ngôn ngữ | “add language vi”, “resolve translations” — [Translations](docs/course/05-prototype/01-translations.md) |
|
|
159
|
+
| Template tùy chỉnh | “set up template pack”, `generate <pack-name>` — [Custom templates](docs/course/07-advanced/01-custom-templates.md) |
|
|
150
160
|
| Xem phần nào bị ảnh hưởng | “what’s the impact of my changes” |
|
|
151
|
-
| Xử lý comment | “resolve comments” |
|
|
152
|
-
|
|
|
161
|
+
| Xử lý comment | “resolve comments”, “show open comments” |
|
|
162
|
+
| Duyệt / phê duyệt tài liệu | “review documents”, “approve srs/01-overview” |
|
|
163
|
+
| Tạm dừng / tiếp tục task | “active tasks”, “resume my SRS” |
|
|
164
|
+
| Thêm / sửa một phần nhỏ | “I want to add login with Google” |
|
|
165
|
+
| Xem sơ đồ trực quan | “show the graph”, `npx ai-spector graph visualize --open` |
|
|
166
|
+
| Kiểm tra workspace | “check my workspace” |
|
|
153
167
|
|
|
154
168
|
### Quy trình thường gặp
|
|
155
169
|
|
|
@@ -163,7 +177,16 @@ docs/data-source/ → analyze → validate graph → generate SRS → in
|
|
|
163
177
|
|
|
164
178
|
## CLI (nếu cần)
|
|
165
179
|
|
|
166
|
-
|
|
180
|
+
Chủ yếu dùng chat. Một số lệnh hữu ích:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
npx ai-spector course serve --open
|
|
184
|
+
npx ai-spector setup --check
|
|
185
|
+
npx ai-spector graph validate
|
|
186
|
+
npx ai-spector graph visualize --open
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Đầy đủ: `npx ai-spector --help`
|
|
167
190
|
|
|
168
191
|
---
|
|
169
192
|
|
|
@@ -184,7 +207,7 @@ Chỉ dùng khi viết script hoặc debug: `npx ai-spector index`, `graph valid
|
|
|
184
207
|
|
|
185
208
|
Dùng khi bạn viết **script, CI, hoặc backend tùy chỉnh** — cùng các thao tác typed như CLI và MCP:
|
|
186
209
|
|
|
187
|
-
- **[Hướng dẫn SDK](docs/sdk.md)** — cài đặt, entry points, ví dụ, tham chiếu API
|
|
210
|
+
- **[Hướng dẫn SDK](docs/plan/sdk.md)** — cài đặt, entry points, ví dụ, tham chiếu API
|
|
188
211
|
|
|
189
212
|
```bash
|
|
190
213
|
npm install ai-spector
|
package/dist/cli.js
CHANGED
|
@@ -38,13 +38,14 @@ import { runGraphVisualize } from "./core/operations/graph-visualize.js";
|
|
|
38
38
|
import { runIndex } from "./core/operations/index.js";
|
|
39
39
|
import { runCommentsInbox, runCommentsList, runCommentsPlan, runCommentsResolve, runCommentsShow, } from "./core/operations/comments.js";
|
|
40
40
|
import { runProvenanceLink } from "./core/graph/provenance.js";
|
|
41
|
-
import { runApprove, runReviewStatus, runReviewQueue, runReviewCheck, runReviewReject, runReviewList, runReviewMigrate, } from "./core/operations/review.js";
|
|
42
|
-
import { formatApproveResult, formatReviewStatus, formatReviewQueue, formatReviewCheck, formatReviewReject, formatReviewList, formatReviewMigrate, } from "./interfaces/cli/format/reviews.js";
|
|
41
|
+
import { runApprove, runReviewStatus, runReviewQueue, runReviewCheck, runReviewReject, runReviewList, runReviewMigrate, runReviewSessionStart, runReviewSessionAckReview, } from "./core/operations/review.js";
|
|
42
|
+
import { formatApproveResult, formatReviewStatus, formatReviewQueue, formatReviewCheck, formatReviewReject, formatReviewList, formatReviewMigrate, formatReviewSessionStart, formatReviewSessionAckReview, } from "./interfaces/cli/format/reviews.js";
|
|
43
43
|
import { registerTemplateCommand } from "./core/operations/template.js";
|
|
44
44
|
import { registerReadinessCommand } from "./core/operations/readiness.js";
|
|
45
45
|
import { runCocoindexSetup, runCocoindexSearch, runGraphQueryFuzzy } from "./core/operations/cocoindex.js";
|
|
46
46
|
import { formatCocoindexSetup, formatCocoindexSearch, formatCocoindexStats, formatGraphQueryFuzzy, } from "./interfaces/cli/format/cocoindex.js";
|
|
47
47
|
import { runPrototypeInstallPreviews, runPrototypeManifest, runPrototypePreview, runPrototypeSetup, runPrototypeStack, runPrototypeSync, runPrototypeThemes, runPrototypeValidate, runPrototypeAuth, } from "./core/operations/prototype.js";
|
|
48
|
+
import { runCourseServe, formatCourseServeStarted } from "./core/operations/course.js";
|
|
48
49
|
const program = new Command();
|
|
49
50
|
const require = createRequire(import.meta.url);
|
|
50
51
|
const packageJson = require("../package.json");
|
|
@@ -171,7 +172,9 @@ context
|
|
|
171
172
|
.option("--scope <scope>", "DAG node / section this informs (e.g. srs.use-cases)")
|
|
172
173
|
.option("--source <source>", "user | inferred | data-source", "user")
|
|
173
174
|
.option("--refs <paths>", "Comma-separated source files that make this stale on change")
|
|
174
|
-
.option("--by <
|
|
175
|
+
.option("--by <email>", "Answerer email override (default: git user.email)")
|
|
176
|
+
.option("--username <name>", "Answerer name override (default: git user.name)")
|
|
177
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
175
178
|
.option("--json", "JSON output")
|
|
176
179
|
.action(async (docType, question, opts) => {
|
|
177
180
|
const result = await runContextRecord({
|
|
@@ -185,6 +188,8 @@ context
|
|
|
185
188
|
? opts.refs.split(",").map((s) => s.trim()).filter(Boolean)
|
|
186
189
|
: undefined,
|
|
187
190
|
answeredBy: opts.by,
|
|
191
|
+
answeredByUsername: opts.username,
|
|
192
|
+
role: opts.role,
|
|
188
193
|
});
|
|
189
194
|
if (opts.json)
|
|
190
195
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -195,7 +200,9 @@ context
|
|
|
195
200
|
.command("resolve <docType> <id> <answer>")
|
|
196
201
|
.description("Answer an open/stale entry by id (e.g. Q-001)")
|
|
197
202
|
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
198
|
-
.option("--by <
|
|
203
|
+
.option("--by <email>", "Answerer email override (default: git user.email)")
|
|
204
|
+
.option("--username <name>", "Answerer name override (default: git user.name)")
|
|
205
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
199
206
|
.option("--json", "JSON output")
|
|
200
207
|
.action(async (docType, id, answer, opts) => {
|
|
201
208
|
const result = await runContextResolve({
|
|
@@ -204,6 +211,8 @@ context
|
|
|
204
211
|
id,
|
|
205
212
|
answer,
|
|
206
213
|
answeredBy: opts.by,
|
|
214
|
+
answeredByUsername: opts.username,
|
|
215
|
+
role: opts.role,
|
|
207
216
|
});
|
|
208
217
|
if (opts.json)
|
|
209
218
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -235,7 +244,9 @@ spec
|
|
|
235
244
|
.command("approve <docType> <id>")
|
|
236
245
|
.description("Approve a pending spec; merges its graph patch (if any) into the graph")
|
|
237
246
|
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
238
|
-
.option("--by <
|
|
247
|
+
.option("--by <email>", "Reviewer email override (default: git user.email)")
|
|
248
|
+
.option("--username <name>", "Reviewer name override (default: git user.name)")
|
|
249
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
239
250
|
.option("--note <note>", "Review note")
|
|
240
251
|
.option("--skip-merge", "Approve without merging the graph patch")
|
|
241
252
|
.option("--json", "JSON output")
|
|
@@ -245,6 +256,8 @@ spec
|
|
|
245
256
|
docType,
|
|
246
257
|
id,
|
|
247
258
|
by: opts.by,
|
|
259
|
+
username: opts.username,
|
|
260
|
+
role: opts.role,
|
|
248
261
|
note: opts.note,
|
|
249
262
|
skipMerge: opts.skipMerge,
|
|
250
263
|
});
|
|
@@ -257,7 +270,9 @@ spec
|
|
|
257
270
|
.command("reject <docType> <id>")
|
|
258
271
|
.description("Reject a pending spec (kept for audit, never merged)")
|
|
259
272
|
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
260
|
-
.option("--by <
|
|
273
|
+
.option("--by <email>", "Reviewer email override (default: git user.email)")
|
|
274
|
+
.option("--username <name>", "Reviewer name override (default: git user.name)")
|
|
275
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
261
276
|
.option("--note <note>", "Why the spec was rejected")
|
|
262
277
|
.option("--json", "JSON output")
|
|
263
278
|
.action(async (docType, id, opts) => {
|
|
@@ -266,6 +281,8 @@ spec
|
|
|
266
281
|
docType,
|
|
267
282
|
id,
|
|
268
283
|
by: opts.by,
|
|
284
|
+
username: opts.username,
|
|
285
|
+
role: opts.role,
|
|
269
286
|
note: opts.note,
|
|
270
287
|
});
|
|
271
288
|
if (opts.json)
|
|
@@ -395,6 +412,9 @@ task
|
|
|
395
412
|
.command("approve <taskId>")
|
|
396
413
|
.description("Approve the task plan and advance to the next step")
|
|
397
414
|
.option("-C, --cwd <path>", "Project root", process.cwd())
|
|
415
|
+
.option("--by <email>", "Approver email override (default: git user.email)")
|
|
416
|
+
.option("--username <name>", "Approver name override (default: git user.name)")
|
|
417
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
398
418
|
.option("--plan <json>", "Plan JSON (StoredPlan) if not already set on task")
|
|
399
419
|
.option("--json", "JSON output")
|
|
400
420
|
.action(async (taskId, opts) => {
|
|
@@ -402,6 +422,9 @@ task
|
|
|
402
422
|
root: resolve(opts.cwd ?? process.cwd()),
|
|
403
423
|
taskId,
|
|
404
424
|
plan: opts.plan ? JSON.parse(opts.plan) : undefined,
|
|
425
|
+
by: opts.by,
|
|
426
|
+
username: opts.username,
|
|
427
|
+
role: opts.role,
|
|
405
428
|
});
|
|
406
429
|
if (opts.json)
|
|
407
430
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -898,7 +921,9 @@ comments
|
|
|
898
921
|
.command("resolve <threadId>")
|
|
899
922
|
.description("Mark thread resolved in meta_data.json and append events.jsonl")
|
|
900
923
|
.requiredOption("--file <path>", "Logical file path (e.g. srs/04-features/auth)")
|
|
901
|
-
.option("--by <
|
|
924
|
+
.option("--by <email>", "Resolver email override (default: git user.email)")
|
|
925
|
+
.option("--username <name>", "Resolver name override (default: git user.name)")
|
|
926
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
902
927
|
.option("--commit-sha <sha>", "resolvedInCommitSha (defaults to git HEAD)")
|
|
903
928
|
.option("--expected-version <n>", "Optimistic lock on meta_data.json version")
|
|
904
929
|
.option("--dry-run", "Preview resolve without writing files")
|
|
@@ -909,6 +934,8 @@ comments
|
|
|
909
934
|
threadId,
|
|
910
935
|
filePath: opts.file,
|
|
911
936
|
resolvedBy: opts.by,
|
|
937
|
+
resolvedByUsername: opts.username,
|
|
938
|
+
role: opts.role,
|
|
912
939
|
commitSha: opts.commitSha,
|
|
913
940
|
expectedVersion: opts.expectedVersion != null ? Number(opts.expectedVersion) : undefined,
|
|
914
941
|
dryRun: opts.dryRun,
|
|
@@ -925,10 +952,18 @@ const review = program
|
|
|
925
952
|
review
|
|
926
953
|
.command("approve <logicalPath>")
|
|
927
954
|
.description("Mark document as internally approved and move to client review queue")
|
|
928
|
-
.option("--by <
|
|
955
|
+
.option("--by <email>", "Reviewer email override (default: git user.email)")
|
|
956
|
+
.option("--username <name>", "Reviewer name override (default: git user.name)")
|
|
957
|
+
.option("--role <role>", "Actor role: user | client (default: user)")
|
|
929
958
|
.option("--json", "JSON output for agents")
|
|
930
959
|
.action(async (logicalPath, opts, cmd) => {
|
|
931
|
-
const result = await runApprove({
|
|
960
|
+
const result = await runApprove({
|
|
961
|
+
root: projectRootOpt(cmd),
|
|
962
|
+
logicalPath,
|
|
963
|
+
by: opts.by,
|
|
964
|
+
username: opts.username,
|
|
965
|
+
role: opts.role,
|
|
966
|
+
});
|
|
932
967
|
if (opts.json)
|
|
933
968
|
console.log(JSON.stringify(result, null, 2));
|
|
934
969
|
else
|
|
@@ -1024,6 +1059,32 @@ review
|
|
|
1024
1059
|
else
|
|
1025
1060
|
console.log(formatReviewMigrate(result));
|
|
1026
1061
|
});
|
|
1062
|
+
const reviewSession = review.command("session").description("Persisted review session gate for sign-off");
|
|
1063
|
+
reviewSession
|
|
1064
|
+
.command("start")
|
|
1065
|
+
.description("Start or reset the review session (.session.json)")
|
|
1066
|
+
.option("--json", "JSON output for agents")
|
|
1067
|
+
.action(async (opts, cmd) => {
|
|
1068
|
+
const result = await runReviewSessionStart({ root: projectRootOpt(cmd) });
|
|
1069
|
+
if (opts.json)
|
|
1070
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1071
|
+
else
|
|
1072
|
+
console.log(formatReviewSessionStart(result));
|
|
1073
|
+
});
|
|
1074
|
+
reviewSession
|
|
1075
|
+
.command("ack <logicalPath>")
|
|
1076
|
+
.description("Acknowledge review summary written — unlocks review approve")
|
|
1077
|
+
.option("--json", "JSON output for agents")
|
|
1078
|
+
.action(async (logicalPath, opts, cmd) => {
|
|
1079
|
+
const result = await runReviewSessionAckReview({
|
|
1080
|
+
root: projectRootOpt(cmd),
|
|
1081
|
+
logicalPath,
|
|
1082
|
+
});
|
|
1083
|
+
if (opts.json)
|
|
1084
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1085
|
+
else
|
|
1086
|
+
console.log(formatReviewSessionAckReview(result));
|
|
1087
|
+
});
|
|
1027
1088
|
const prototype = program
|
|
1028
1089
|
.command("prototype")
|
|
1029
1090
|
.description("HTML prototype workspace: themes, manifest, validation (static files under prototype/src/)");
|
|
@@ -1065,10 +1126,10 @@ prototype
|
|
|
1065
1126
|
});
|
|
1066
1127
|
prototype
|
|
1067
1128
|
.command("auth")
|
|
1068
|
-
.description("Configure HTTP basic auth (credentials in prototype
|
|
1129
|
+
.description("Configure HTTP basic auth (credentials in prototype/config.json, .htpasswd under prototype/)")
|
|
1069
1130
|
.option("--username <name>", "Basic auth username")
|
|
1070
1131
|
.option("--password <secret>", "Basic auth password")
|
|
1071
|
-
.option("--from-config", "Regenerate .htpasswd from stored prototype
|
|
1132
|
+
.option("--from-config", "Regenerate .htpasswd from stored prototype/config.json basicAuth")
|
|
1072
1133
|
.action(async (opts, cmd) => {
|
|
1073
1134
|
await runPrototypeAuth({
|
|
1074
1135
|
root: projectRootOpt(cmd),
|
|
@@ -1164,6 +1225,27 @@ graph
|
|
|
1164
1225
|
});
|
|
1165
1226
|
registerTemplateCommand(program);
|
|
1166
1227
|
registerReadinessCommand(program);
|
|
1228
|
+
const course = program
|
|
1229
|
+
.command("course")
|
|
1230
|
+
.description("Browse the step-by-step AI Spector course in your browser");
|
|
1231
|
+
course
|
|
1232
|
+
.command("serve")
|
|
1233
|
+
.description("Start a local web server for the interactive course")
|
|
1234
|
+
.option("--port <number>", "Port (default: 4177)", (v) => Number(v), 4177)
|
|
1235
|
+
.option("--host <host>", "Host (default: 127.0.0.1)", "127.0.0.1")
|
|
1236
|
+
.option("--open", "Open the course in your default browser")
|
|
1237
|
+
.action(async (opts, cmd) => {
|
|
1238
|
+
const result = await runCourseServe({
|
|
1239
|
+
projectRoot: projectRootOpt(cmd),
|
|
1240
|
+
host: opts.host,
|
|
1241
|
+
port: opts.port,
|
|
1242
|
+
open: opts.open,
|
|
1243
|
+
});
|
|
1244
|
+
console.log(formatCourseServeStarted(result));
|
|
1245
|
+
await new Promise(() => {
|
|
1246
|
+
/* keep process alive until Ctrl+C */
|
|
1247
|
+
});
|
|
1248
|
+
});
|
|
1167
1249
|
// ── CocoIndex ──────────────────────────────────────────────────────────────────
|
|
1168
1250
|
const cocoindex = program
|
|
1169
1251
|
.command("cocoindex")
|