@ngocsangairvds/vsaf 3.1.13 → 3.1.15
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/assets/templates/CLAUDE.md +1 -1
- package/bin/vsaf.js +6 -30
- package/package.json +2 -3
- package/src/global.js +7 -48
- package/src/project.js +12 -18
- package/src/status.js +2 -2
- package/src/utils.js +5 -14
- package/src/workflow.js +2 -36
- package/{.claude → tools}/skills/vsaf-build/SKILL.md +3 -3
- package/{.claude → tools}/skills/vsaf-discover/SKILL.md +10 -10
- package/{.claude → tools}/skills/vsaf-doc-prd/SKILL.md +3 -3
- package/{.claude → tools}/skills/vsaf-doc-srs/SKILL.md +9 -9
- package/{.claude → tools}/skills/vsaf-docs/SKILL.md +1 -1
- package/{.claude → tools}/skills/vsaf-onboard/SKILL.md +2 -2
- package/{.claude → tools}/skills/vsaf-plan/SKILL.md +1 -1
- package/{.claude → tools}/skills/vsaf-retro/SKILL.md +1 -1
- package/{.claude → tools}/skills/vsaf-ship/SKILL.md +3 -3
- package/{.claude → tools}/skills/vsaf-sprint/SKILL.md +3 -3
- package/{.claude → tools}/skills/vsaf-test/SKILL.md +7 -7
- package/.claude/skills/graphify/.graphify_version +0 -1
- package/.claude/skills/graphify/SKILL.md +0 -4
- /package/{_bmad → tools/bmad}/_config/agent-manifest.csv +0 -0
- /package/{_bmad → tools/bmad}/_config/bmad-help.csv +0 -0
- /package/{_bmad → tools/bmad}/_config/files-manifest.csv +0 -0
- /package/{_bmad → tools/bmad}/_config/manifest.yaml +0 -0
- /package/{_bmad → tools/bmad}/_config/skill-manifest.csv +0 -0
- /package/{_bmad → tools/bmad}/bmm/1-analysis/bmad-document-project/templates/srs-feature-template.md +0 -0
- /package/{_bmad → tools/bmad}/bmm/1-analysis/bmad-document-project/templates/srs-system-template.md +0 -0
- /package/{_bmad → tools/bmad}/bmm/config.yaml +0 -0
- /package/{_bmad → tools/bmad}/bmm/module-help.csv +0 -0
- /package/{_bmad → tools/bmad}/core/config.yaml +0 -0
- /package/{_bmad → tools/bmad}/core/module-help.csv +0 -0
- /package/{.claude → tools}/skills/bmad-advanced-elicitation/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-advanced-elicitation/methods.csv +0 -0
- /package/{.claude → tools}/skills/bmad-agent-analyst/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-analyst/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-agent-architect/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-architect/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-agent-dev/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-dev/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-agent-pm/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-pm/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/explain-concept.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/mermaid-gen.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/validate-doc.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-tech-writer/write-document.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-ux-designer/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-agent-ux-designer/bmad-skill-manifest.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/brain-methods.csv +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-01-session-setup.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-01b-continue.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-02a-user-selected.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-02c-random-selection.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-03-technique-execution.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/steps/step-04-idea-organization.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/template.md +0 -0
- /package/{.claude → tools}/skills/bmad-brainstorming/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-check-implementation-readiness/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/generate-trail.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/step-01-orientation.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/step-02-walkthrough.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/step-03-detail-pass.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/step-04-testing.md +0 -0
- /package/{.claude → tools}/skills/bmad-checkpoint-preview/step-05-wrapup.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/steps/step-01-gather-context.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/steps/step-02-review.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/steps/step-03-triage.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/steps/step-04-present.md +0 -0
- /package/{.claude → tools}/skills/bmad-code-review/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-correct-course/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-correct-course/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-correct-course/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/architecture-decision-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/data/domain-complexity.csv +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/data/project-types.csv +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-01b-continue.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-02-context.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-03-starter.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-04-decisions.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-05-patterns.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-06-structure.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-07-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/steps/step-08-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-architecture/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-epics-and-stories/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/data/domain-complexity.csv +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/data/prd-purpose.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/data/project-types.csv +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-01b-continue.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-02-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-02b-vision.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-03-success.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-04-journeys.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-05-domain.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-06-innovation.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-07-project-type.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-08-scoping.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-09-functional.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-11-polish.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/steps-c/step-12-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/templates/prd-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-prd/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-story/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-story/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-story/discover-inputs.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-story/template.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-story/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-01b-continue.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-02-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-03-core-experience.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-05-inspiration.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-06-design-system.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-09-design-directions.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/steps/step-14-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/ux-design-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-create-ux-design/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-dev-story/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-dev-story/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-dev-story/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/agents/distillate-compressor.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/agents/round-trip-reconstructor.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/resources/compression-rules.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/resources/distillate-format-reference.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/resources/splitting-strategy.md +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/scripts/analyze_sources.py +0 -0
- /package/{.claude → tools}/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/documentation-requirements.csv +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/instructions.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/templates/deep-dive-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/templates/index-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/templates/project-overview-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/templates/project-scan-report-schema.json +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/templates/source-tree-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/workflows/deep-dive-instructions.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/workflows/deep-dive-workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/workflows/full-scan-instructions.md +0 -0
- /package/{.claude → tools}/skills/bmad-document-project/workflows/full-scan-workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/research.template.md +0 -0
- /package/{.claude → tools}/skills/bmad-domain-research/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/data/prd-purpose.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/steps-e/step-e-01-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/steps-e/step-e-02-review.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/steps-e/step-e-03-edit.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/steps-e/step-e-04-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-edit-prd/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-editorial-review-prose/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-editorial-review-structure/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/project-context-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/steps/step-01-discover.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/steps/step-02-generate.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/steps/step-03-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-generate-project-context/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-help/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-index-docs/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/research.template.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-02-customer-behavior.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-03-customer-pain-points.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-04-customer-decisions.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-05-competitive-analysis.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/steps/step-06-research-completion.md +0 -0
- /package/{.claude → tools}/skills/bmad-market-research/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-party-mode/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/agents/artifact-analyzer.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/agents/web-researcher.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/assets/prfaq-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/bmad-manifest.json +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/references/customer-faq.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/references/internal-faq.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/references/press-release.md +0 -0
- /package/{.claude → tools}/skills/bmad-prfaq/references/verdict.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/agents/artifact-analyzer.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/agents/opportunity-reviewer.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/agents/skeptic-reviewer.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/agents/web-researcher.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/bmad-manifest.json +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/prompts/contextual-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/prompts/draft-and-review.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/prompts/finalize.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/prompts/guided-elicitation.md +0 -0
- /package/{.claude → tools}/skills/bmad-product-brief/resources/brief-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-qa-generate-e2e-tests/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-qa-generate-e2e-tests/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-qa-generate-e2e-tests/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/compile-epic-context.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/spec-template.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-01-clarify-and-route.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-02-plan.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-03-implement.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-04-review.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-05-present.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/step-oneshot.md +0 -0
- /package/{.claude → tools}/skills/bmad-quick-dev/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-retrospective/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-retrospective/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-review-adversarial-general/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-review-edge-case-hunter/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-shard-doc/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-planning/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-planning/checklist.md +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-planning/sprint-status-template.yaml +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-planning/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-status/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-sprint-status/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/research.template.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-01-init.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -0
- /package/{.claude → tools}/skills/bmad-technical-research/workflow.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/SKILL.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/data/domain-complexity.csv +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/data/prd-purpose.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/data/project-types.csv +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -0
- /package/{.claude → tools}/skills/bmad-validate-prd/workflow.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-cli/SKILL.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-debugging/SKILL.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-exploring/SKILL.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-guide/SKILL.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-impact-analysis/SKILL.md +0 -0
- /package/{.claude → tools}/skills/gitnexus/gitnexus-refactoring/SKILL.md +0 -0
- /package/{.claude → tools}/skills/vsaf-doc/SKILL.md +0 -0
|
@@ -22,7 +22,7 @@ VSAF is a meta-framework for AI-driven SDLC — not an application. It has no so
|
|
|
22
22
|
| Code Intelligence | GitNexus (MCP) | Impact analysis, call graph, blast radius |
|
|
23
23
|
| Implementation | Superpowers, Claude Code | Brainstorm, TDD execution, code review |
|
|
24
24
|
|
|
25
|
-
Key directories: `.claude/` (settings + skills),
|
|
25
|
+
Key directories: `.claude/` (settings + skills), `.vsaf/_bmad/` (BMAD workspace), `.vsaf/docs/` (artifacts), `.gitnexus/` (knowledge graph index).
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
package/bin/vsaf.js
CHANGED
|
@@ -104,36 +104,12 @@ function printInstallHint() {
|
|
|
104
104
|
|
|
105
105
|
console.log(`\n Detected OS: \x1b[36m${platform}\x1b[0m\n`);
|
|
106
106
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m\n`);
|
|
114
|
-
console.log(` \x1b[1mOption 2: Setup script (CMD)\x1b[0m`);
|
|
115
|
-
console.log(` \x1b[32mscripts\\setup-vsaf.bat\x1b[0m\n`);
|
|
116
|
-
console.log(` \x1b[1mOption 3: WSL (Windows Subsystem for Linux)\x1b[0m`);
|
|
117
|
-
console.log(` \x1b[90mRun inside WSL terminal for full Linux compatibility:\x1b[0m`);
|
|
118
|
-
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m`);
|
|
119
|
-
console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
|
|
120
|
-
console.log(` \x1b[1mOption 4: Git Bash\x1b[0m`);
|
|
121
|
-
console.log(` \x1b[90mIf you have Git for Windows installed:\x1b[0m`);
|
|
122
|
-
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m`);
|
|
123
|
-
console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
|
|
124
|
-
} else if (platform === 'macos') {
|
|
125
|
-
console.log(` \x1b[1m\x1b[33m[macOS]\x1b[0m Recommended installation methods:\n`);
|
|
126
|
-
console.log(` \x1b[1mOption 1: npm global install\x1b[0m`);
|
|
127
|
-
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m\n`);
|
|
128
|
-
console.log(` \x1b[1mOption 2: Setup script\x1b[0m`);
|
|
129
|
-
console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
|
|
130
|
-
} else {
|
|
131
|
-
console.log(` \x1b[1m\x1b[33m[Linux]\x1b[0m Recommended installation methods:\n`);
|
|
132
|
-
console.log(` \x1b[1mOption 1: npm global install\x1b[0m`);
|
|
133
|
-
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m\n`);
|
|
134
|
-
console.log(` \x1b[1mOption 2: Setup script\x1b[0m`);
|
|
135
|
-
console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
|
|
136
|
-
}
|
|
107
|
+
const label = platform === 'macos' ? 'macOS' : 'Linux';
|
|
108
|
+
console.log(` \x1b[1m\x1b[33m[${label}]\x1b[0m Recommended installation methods:\n`);
|
|
109
|
+
console.log(` \x1b[1mOption 1: npm global install\x1b[0m`);
|
|
110
|
+
console.log(` \x1b[32mnpm install -g ${pkg}\x1b[0m\n`);
|
|
111
|
+
console.log(` \x1b[1mOption 2: Setup script\x1b[0m`);
|
|
112
|
+
console.log(` \x1b[32mbash scripts/setup-vsaf.sh\x1b[0m\n`);
|
|
137
113
|
|
|
138
114
|
console.log(` After installation, you can use:\n`);
|
|
139
115
|
console.log(` \x1b[36mvsaf status\x1b[0m # check installation`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngocsangairvds/vsaf",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.15",
|
|
4
4
|
"description": "VSAF — Agentic AI SDLC Framework. 3 integrated tools: BMAD, GitNexus, Superpowers. 2-layer review.",
|
|
5
5
|
"keywords": ["claude", "claude-code", "ai", "sdlc", "framework", "bmad", "gitnexus", "superpowers"],
|
|
6
6
|
"bin": {
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"bin/",
|
|
17
17
|
"src/",
|
|
18
|
-
"
|
|
19
|
-
"_bmad/",
|
|
18
|
+
"tools/",
|
|
20
19
|
"assets/"
|
|
21
20
|
],
|
|
22
21
|
"license": "MIT"
|
package/src/global.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const fs = require('fs');
|
|
4
|
-
const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME
|
|
4
|
+
const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME } = require('./utils');
|
|
5
5
|
|
|
6
6
|
const PKG_ROOT = path.join(__dirname, '..');
|
|
7
|
-
const SKILLS_SRC = path.join(PKG_ROOT, '
|
|
7
|
+
const SKILLS_SRC = path.join(PKG_ROOT, 'tools', 'skills');
|
|
8
8
|
const SKILLS_DST = path.join(CLAUDE_HOME, 'skills');
|
|
9
9
|
|
|
10
10
|
async function installGlobal() {
|
|
@@ -14,7 +14,6 @@ async function installGlobal() {
|
|
|
14
14
|
|
|
15
15
|
installSkills();
|
|
16
16
|
installBinary('gitnexus', () => exec('npm install -g gitnexus'));
|
|
17
|
-
if (isWindows) ensureLadybugDbWindows();
|
|
18
17
|
setupGitnexusMcp();
|
|
19
18
|
|
|
20
19
|
console.log('\n\x1b[32m\x1b[1m✓ Global infra ready.\x1b[0m\n');
|
|
@@ -33,22 +32,16 @@ function installSkills() {
|
|
|
33
32
|
fs.mkdirSync(SKILLS_DST, { recursive: true });
|
|
34
33
|
|
|
35
34
|
let installed = 0;
|
|
36
|
-
let skipped = 0;
|
|
37
35
|
|
|
38
36
|
for (const entry of fs.readdirSync(SKILLS_SRC, { withFileTypes: true })) {
|
|
39
37
|
const src = path.join(SKILLS_SRC, entry.name);
|
|
40
38
|
const dst = path.join(SKILLS_DST, entry.name);
|
|
41
39
|
|
|
42
|
-
if (fs.existsSync(dst)) {
|
|
43
|
-
skipped++;
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
40
|
entry.isDirectory() ? copyDir(src, dst) : copyFile(src, dst);
|
|
48
41
|
installed++;
|
|
49
42
|
}
|
|
50
43
|
|
|
51
|
-
ok(`${installed} skill(s) installed
|
|
44
|
+
ok(`${installed} skill(s) installed/updated`);
|
|
52
45
|
}
|
|
53
46
|
|
|
54
47
|
// ── Binary helpers ───────────────────────────────────────────────────────────
|
|
@@ -62,33 +55,6 @@ function installBinary(name, installFn) {
|
|
|
62
55
|
: warn(`${name} install failed — run manually`);
|
|
63
56
|
}
|
|
64
57
|
|
|
65
|
-
function ensureLadybugDbWindows() {
|
|
66
|
-
step('LadybugDB native binding (Windows)');
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const npmRoot = require('child_process')
|
|
70
|
-
.execSync('npm root -g', { encoding: 'utf8', shell: true }).trim();
|
|
71
|
-
const nativePath = path.join(npmRoot, 'gitnexus', 'node_modules', '@ladybugdb', 'core', 'lbugjs.node');
|
|
72
|
-
if (fs.existsSync(nativePath)) {
|
|
73
|
-
ok('LadybugDB native binding present (lbugjs.node)');
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
warn('LadybugDB native binding missing — installing @ladybugdb/core-win32-x64...');
|
|
77
|
-
const gitnexusDir = path.join(npmRoot, 'gitnexus');
|
|
78
|
-
if (exec('npm install @ladybugdb/core-win32-x64 --no-save', { cwd: gitnexusDir })) {
|
|
79
|
-
ok('LadybugDB native binding installed');
|
|
80
|
-
} else {
|
|
81
|
-
warn('Could not install LadybugDB binding. Run manually:');
|
|
82
|
-
warn(' cd "' + gitnexusDir + '"');
|
|
83
|
-
warn(' npm install @ladybugdb/core-win32-x64 --no-save');
|
|
84
|
-
}
|
|
85
|
-
} catch {
|
|
86
|
-
warn('Could not verify LadybugDB binding — if gitnexus analyze fails at 60%, run:');
|
|
87
|
-
info(' npm root -g (find global node_modules path)');
|
|
88
|
-
info(' cd <path>\\gitnexus && npm install @ladybugdb/core-win32-x64 --no-save');
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
58
|
function setupGitnexusMcp() {
|
|
93
59
|
step('GitNexus MCP');
|
|
94
60
|
if (!hasCommand('claude')) {
|
|
@@ -96,17 +62,10 @@ function setupGitnexusMcp() {
|
|
|
96
62
|
return;
|
|
97
63
|
}
|
|
98
64
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
: warn('MCP setup failed — run manually: claude mcp add gitnexus -- cmd /c npx -y gitnexus@latest mcp');
|
|
104
|
-
} else {
|
|
105
|
-
info('Configuring GitNexus MCP...');
|
|
106
|
-
exec('claude mcp add gitnexus -- npx -y gitnexus@latest mcp')
|
|
107
|
-
? ok('GitNexus MCP configured')
|
|
108
|
-
: warn('MCP setup failed — run manually: claude mcp add gitnexus -- npx -y gitnexus@latest mcp');
|
|
109
|
-
}
|
|
65
|
+
info('Configuring GitNexus MCP...');
|
|
66
|
+
exec('claude mcp add gitnexus -- npx -y gitnexus@latest mcp')
|
|
67
|
+
? ok('GitNexus MCP configured')
|
|
68
|
+
: warn('MCP setup failed — run manually: claude mcp add gitnexus -- npx -y gitnexus@latest mcp');
|
|
110
69
|
}
|
|
111
70
|
|
|
112
71
|
module.exports = { installGlobal };
|
package/src/project.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const fs = require('fs');
|
|
4
|
-
const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile
|
|
4
|
+
const { ok, info, warn, step, hasCommand, exec, copyDir, copyFile } = require('./utils');
|
|
5
5
|
|
|
6
6
|
const PKG_ROOT = path.join(__dirname, '..');
|
|
7
7
|
const TEMPLATES = path.join(PKG_ROOT, 'assets', 'templates');
|
|
8
|
-
const SKILLS_SRC = path.join(PKG_ROOT, '
|
|
9
|
-
const BMAD_SRC = path.join(PKG_ROOT, '
|
|
8
|
+
const SKILLS_SRC = path.join(PKG_ROOT, 'tools', 'skills');
|
|
9
|
+
const BMAD_SRC = path.join(PKG_ROOT, 'tools', 'bmad');
|
|
10
10
|
const CWD = process.cwd();
|
|
11
11
|
|
|
12
12
|
async function installProject() {
|
|
@@ -49,7 +49,7 @@ function scaffoldFiles() {
|
|
|
49
49
|
ok(`${dst} — already exists, skipped`);
|
|
50
50
|
} else {
|
|
51
51
|
copyFile(src, dstAbs);
|
|
52
|
-
if (chmod
|
|
52
|
+
if (chmod) fs.chmodSync(dstAbs, chmod);
|
|
53
53
|
ok(`${dst} — created`);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -60,7 +60,7 @@ function scaffoldFiles() {
|
|
|
60
60
|
function scaffoldBmadWorkspace() {
|
|
61
61
|
step('BMAD workspace');
|
|
62
62
|
|
|
63
|
-
const bmadDst = path.join(CWD, '_bmad');
|
|
63
|
+
const bmadDst = path.join(CWD, '.vsaf', '_bmad');
|
|
64
64
|
if (!fs.existsSync(BMAD_SRC)) {
|
|
65
65
|
warn('Packaged _bmad not found — skipping BMAD workspace scaffold');
|
|
66
66
|
} else if (fs.existsSync(bmadDst)) {
|
|
@@ -71,11 +71,11 @@ function scaffoldBmadWorkspace() {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
const outputDirs = [
|
|
74
|
-
path.join(CWD, '
|
|
75
|
-
path.join(CWD, '
|
|
76
|
-
path.join(CWD, '
|
|
77
|
-
path.join(CWD, '
|
|
78
|
-
path.join(CWD, '
|
|
74
|
+
path.join(CWD, '.vsaf', 'docs'),
|
|
75
|
+
path.join(CWD, '.vsaf', 'docs', 'srs'),
|
|
76
|
+
path.join(CWD, '.vsaf', 'docs', 'testcases'),
|
|
77
|
+
path.join(CWD, '.vsaf', 'docs', 'planning-artifacts'),
|
|
78
|
+
path.join(CWD, '.vsaf', 'docs', 'implementation-artifacts'),
|
|
79
79
|
];
|
|
80
80
|
|
|
81
81
|
let created = 0;
|
|
@@ -116,7 +116,6 @@ function syncLocalBmadSkills() {
|
|
|
116
116
|
];
|
|
117
117
|
|
|
118
118
|
let installed = 0;
|
|
119
|
-
let skipped = 0;
|
|
120
119
|
|
|
121
120
|
for (const targetRoot of targets) {
|
|
122
121
|
fs.mkdirSync(targetRoot, { recursive: true });
|
|
@@ -125,23 +124,18 @@ function syncLocalBmadSkills() {
|
|
|
125
124
|
const src = path.join(SKILLS_SRC, entry.name);
|
|
126
125
|
const dst = path.join(targetRoot, entry.name);
|
|
127
126
|
|
|
128
|
-
if (fs.existsSync(dst)) {
|
|
129
|
-
skipped++;
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
127
|
entry.isDirectory() ? copyDir(src, dst) : copyFile(src, dst);
|
|
134
128
|
installed++;
|
|
135
129
|
}
|
|
136
130
|
}
|
|
137
131
|
|
|
138
|
-
ok(`${installed} BMAD skill
|
|
132
|
+
ok(`${installed} BMAD skill(s) installed/updated`);
|
|
139
133
|
}
|
|
140
134
|
|
|
141
135
|
function initGitNexus() {
|
|
142
136
|
step('GitNexus');
|
|
143
137
|
if (!hasCommand('gitnexus')) { warn('gitnexus not found — run: vsaf global'); return; }
|
|
144
|
-
const analyzeCmd = 'gitnexus analyze';
|
|
138
|
+
const analyzeCmd = 'gitnexus analyze --skip-git';
|
|
145
139
|
info('Indexing repository (gitnexus analyze)...');
|
|
146
140
|
exec(analyzeCmd, { cwd: CWD }) ? ok('Repository indexed') : warn('gitnexus analyze failed — run manually');
|
|
147
141
|
}
|
package/src/status.js
CHANGED
|
@@ -15,8 +15,8 @@ async function showStatus() {
|
|
|
15
15
|
console.log('\n\x1b[1mProject (current repo)\x1b[0m');
|
|
16
16
|
checkPath('.claude/settings.json', 'Project settings');
|
|
17
17
|
checkPath('CLAUDE.md', 'Workflow rules');
|
|
18
|
-
checkPath('_bmad',
|
|
19
|
-
checkPath('docs
|
|
18
|
+
checkPath('.vsaf/_bmad', 'BMAD workspace');
|
|
19
|
+
checkPath('.vsaf/docs', 'Project artifact folder');
|
|
20
20
|
checkProjectSkillDir('.claude/skills', 'Project BMAD skills (.claude)');
|
|
21
21
|
checkProjectSkillDir('.codex/skills', 'Project BMAD skills (.codex)');
|
|
22
22
|
checkPath('.gitnexus', 'GitNexus index');
|
package/src/utils.js
CHANGED
|
@@ -11,22 +11,14 @@ const info = (msg) => console.log(` \x1b[36m→\x1b[0m ${msg}`);
|
|
|
11
11
|
const warn = (msg) => console.log(` \x1b[33m!\x1b[0m ${msg}`);
|
|
12
12
|
const step = (msg) => console.log(`\n\x1b[1m${msg}\x1b[0m`);
|
|
13
13
|
|
|
14
|
-
const isWindows = process.platform === 'win32';
|
|
15
|
-
|
|
16
14
|
function hasCommand(cmd) {
|
|
17
|
-
// Try --version first (works on most CLIs
|
|
18
|
-
const versionCheck = spawnSync(cmd, ['--version'], { stdio: 'ignore', shell:
|
|
15
|
+
// Try --version first (works on most CLIs)
|
|
16
|
+
const versionCheck = spawnSync(cmd, ['--version'], { stdio: 'ignore', shell: false });
|
|
19
17
|
if (versionCheck.status === 0) return true;
|
|
20
18
|
|
|
21
19
|
// Fallback: check if command exists on PATH
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const whereCheck = spawnSync(`where "${cmd}"`, { stdio: 'ignore', shell: true });
|
|
25
|
-
return whereCheck.status === 0;
|
|
26
|
-
} else {
|
|
27
|
-
const pathCheck = spawnSync('sh', ['-c', `command -v "${cmd}"`], { stdio: 'ignore', shell: false });
|
|
28
|
-
return pathCheck.status === 0;
|
|
29
|
-
}
|
|
20
|
+
const pathCheck = spawnSync('sh', ['-c', `command -v "${cmd}"`], { stdio: 'ignore', shell: false });
|
|
21
|
+
return pathCheck.status === 0;
|
|
30
22
|
}
|
|
31
23
|
|
|
32
24
|
function exec(cmd, opts = {}) {
|
|
@@ -62,9 +54,8 @@ function hasGitCommits() {
|
|
|
62
54
|
}
|
|
63
55
|
|
|
64
56
|
function getPlatform() {
|
|
65
|
-
if (process.platform === 'win32') return 'windows';
|
|
66
57
|
if (process.platform === 'darwin') return 'macos';
|
|
67
58
|
return 'linux';
|
|
68
59
|
}
|
|
69
60
|
|
|
70
|
-
module.exports = { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME,
|
|
61
|
+
module.exports = { ok, info, warn, step, hasCommand, exec, copyDir, copyFile, CLAUDE_HOME, getPlatform, hasGitCommits };
|
package/src/workflow.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const fs = require('fs');
|
|
5
|
-
const { ok, info, warn, step, hasCommand, exec,
|
|
5
|
+
const { ok, info, warn, step, hasCommand, exec, hasGitCommits } = require('./utils');
|
|
6
6
|
|
|
7
7
|
function preflightCheck() {
|
|
8
8
|
// Check: is this a git repo?
|
|
@@ -22,24 +22,6 @@ function preflightCheck() {
|
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
// Check (Windows): is LadybugDB native binding present?
|
|
26
|
-
if (isWindows) {
|
|
27
|
-
try {
|
|
28
|
-
const npmRoot = require('child_process')
|
|
29
|
-
.execSync('npm root -g', { encoding: 'utf8', shell: true }).trim();
|
|
30
|
-
const lbugNode = path.join(npmRoot, 'gitnexus', 'node_modules', '@ladybugdb', 'core', 'lbugjs.node');
|
|
31
|
-
if (!fs.existsSync(lbugNode)) {
|
|
32
|
-
warn('LadybugDB native binding missing (lbugjs.node).');
|
|
33
|
-
warn('gitnexus analyze will fail at 60% without it.');
|
|
34
|
-
info('Fix: run this in CMD:');
|
|
35
|
-
info(' cd "' + path.join(npmRoot, 'gitnexus') + '"');
|
|
36
|
-
info(' npm install @ladybugdb/core-win32-x64 --no-save');
|
|
37
|
-
info('Then retry: vsaf index');
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
} catch { /* can't check, proceed anyway */ }
|
|
41
|
-
}
|
|
42
|
-
|
|
43
25
|
return true;
|
|
44
26
|
}
|
|
45
27
|
|
|
@@ -116,23 +98,7 @@ function runServe() {
|
|
|
116
98
|
}
|
|
117
99
|
|
|
118
100
|
function printAnalyzeHint() {
|
|
119
|
-
|
|
120
|
-
warn('Windows troubleshooting:');
|
|
121
|
-
warn('');
|
|
122
|
-
warn(' [Most common] PowerShell blocks npm global scripts (.ps1).');
|
|
123
|
-
warn(' Use CMD instead of PowerShell, or prefix with cmd /c:');
|
|
124
|
-
warn('');
|
|
125
|
-
warn(' cmd /c gitnexus analyze');
|
|
126
|
-
warn('');
|
|
127
|
-
info(' Other options:');
|
|
128
|
-
info(' - Run via npx: npx gitnexus analyze');
|
|
129
|
-
info(' - Use Git Bash: bash -c "gitnexus analyze"');
|
|
130
|
-
info(' - Use WSL: wsl -- bash -c "cd $(wslpath -a .) && gitnexus analyze"');
|
|
131
|
-
info(' - Or fix PowerShell permanently (Admin):');
|
|
132
|
-
info(' Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned');
|
|
133
|
-
} else {
|
|
134
|
-
info('Try running manually: gitnexus analyze --verbose');
|
|
135
|
-
}
|
|
101
|
+
info('Try running manually: gitnexus analyze --verbose');
|
|
136
102
|
}
|
|
137
103
|
|
|
138
104
|
module.exports = { runIndex, runReview, runClean, runServe };
|
|
@@ -34,9 +34,9 @@ Implement code strictly following PRD, SRS, and testcases, one task at a time, w
|
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
### Step 1 — Read PRD + SRS + testcase (mandatory — must read all 3 fully)
|
|
37
|
-
- Read the PRD file in
|
|
38
|
-
- Read the SRS file in
|
|
39
|
-
- Read the testcase file in
|
|
37
|
+
- Read the PRD file in `.vsaf/docs/planning-artifacts/` — understand WHY and WHAT
|
|
38
|
+
- Read the SRS file in `.vsaf/docs/srs/` — understand HOW, FRs/NFRs
|
|
39
|
+
- Read the testcase file in `.vsaf/docs/testcases/` — understand acceptance criteria
|
|
40
40
|
- Confirm FR/NFR → testcase mapping before starting
|
|
41
41
|
- If a gap is found (FR/NFR without testcase, or testcase contradicts SRS): NOTIFY USER before continuing
|
|
42
42
|
- **Do NOT start coding without having read all 3 documents**
|
|
@@ -21,14 +21,14 @@ Thoroughly understand the domain, market, user needs, and technical feasibility
|
|
|
21
21
|
### Step 1 — Domain Research
|
|
22
22
|
- Use skill `bmad-domain-research` to deep dive into the domain/industry
|
|
23
23
|
- Output: terminology, business rules, regulatory constraints, domain patterns
|
|
24
|
-
- Save to
|
|
24
|
+
- Save to `.vsaf/docs/planning-artifacts/domain-research-[topic].md`
|
|
25
25
|
|
|
26
26
|
### Step 2 — Market Research
|
|
27
27
|
- Use skill `bmad-market-research` to analyze:
|
|
28
28
|
- Competition landscape: who is doing what, strengths/weaknesses
|
|
29
29
|
- Customer needs: pain points, underserved segments
|
|
30
30
|
- Market trends: which directions are growing
|
|
31
|
-
- Save to
|
|
31
|
+
- Save to `.vsaf/docs/planning-artifacts/market-research-[topic].md`
|
|
32
32
|
|
|
33
33
|
### Step 3 — Technical Feasibility
|
|
34
34
|
- Use skill `bmad-technical-research` to assess:
|
|
@@ -36,12 +36,12 @@ Thoroughly understand the domain, market, user needs, and technical feasibility
|
|
|
36
36
|
- Integration constraints
|
|
37
37
|
- Performance/scale requirements
|
|
38
38
|
- Build vs buy decisions
|
|
39
|
-
- Save to
|
|
39
|
+
- Save to `.vsaf/docs/planning-artifacts/tech-research-[topic].md`
|
|
40
40
|
|
|
41
41
|
### Step 4 — Product Brief
|
|
42
42
|
- Use skill `bmad-product-brief` to synthesize findings into a product brief
|
|
43
43
|
- Product brief = summary of: what problem, for whom, what solution, why now
|
|
44
|
-
- Save to
|
|
44
|
+
- Save to `.vsaf/docs/planning-artifacts/product-brief-[name].md`
|
|
45
45
|
|
|
46
46
|
### Step 5 — PRFAQ Challenge (Working Backwards)
|
|
47
47
|
- Use skill `bmad-prfaq` to stress-test the product concept
|
|
@@ -55,7 +55,7 @@ Thoroughly understand the domain, market, user needs, and technical feasibility
|
|
|
55
55
|
- PRD includes: vision, goals, FRs, NFRs, epics, user stories, success metrics
|
|
56
56
|
- After creation: use skill `bmad-validate-prd` to validate the PRD meets standards
|
|
57
57
|
- If validation FAILs: John will use `bmad-edit-prd` to fix issues immediately
|
|
58
|
-
- Save to
|
|
58
|
+
- Save to `.vsaf/docs/planning-artifacts/prd-[name].md`
|
|
59
59
|
|
|
60
60
|
### Step 7 — Multi-agent Review (Party Mode)
|
|
61
61
|
- Use skill `bmad-party-mode` to organize a roundtable:
|
|
@@ -69,11 +69,11 @@ Thoroughly understand the domain, market, user needs, and technical feasibility
|
|
|
69
69
|
## Discovery Complete: [product/domain]
|
|
70
70
|
|
|
71
71
|
### Research artifacts
|
|
72
|
-
- Domain research: docs/
|
|
73
|
-
- Market research: docs/
|
|
74
|
-
- Tech research: docs/
|
|
75
|
-
- Product brief: docs/
|
|
76
|
-
- PRD: docs/
|
|
72
|
+
- Domain research: .vsaf/docs/planning-artifacts/domain-research-[topic].md
|
|
73
|
+
- Market research: .vsaf/docs/planning-artifacts/market-research-[topic].md
|
|
74
|
+
- Tech research: .vsaf/docs/planning-artifacts/tech-research-[topic].md
|
|
75
|
+
- Product brief: .vsaf/docs/planning-artifacts/product-brief-[name].md
|
|
76
|
+
- PRD: .vsaf/docs/planning-artifacts/prd-[name].md
|
|
77
77
|
|
|
78
78
|
### Key findings
|
|
79
79
|
- [3-5 bullet point summary]
|
|
@@ -14,7 +14,7 @@ Must have run `/vsaf-plan` and have its output before running this skill.
|
|
|
14
14
|
## Steps
|
|
15
15
|
|
|
16
16
|
### Step 0 — Determine mode: Create or Edit
|
|
17
|
-
- Check if a PRD already exists in
|
|
17
|
+
- Check if a PRD already exists in `.vsaf/docs/planning-artifacts/` for this feature
|
|
18
18
|
- **If none exists** → Mode: CREATE (create from scratch)
|
|
19
19
|
- **If one exists** → Mode: EDIT (edit based on feedback/changes)
|
|
20
20
|
- Ask user: "A PRD already exists. Do you want to create a new one from scratch or edit the existing one?"
|
|
@@ -25,7 +25,7 @@ Must have run `/vsaf-plan` and have its output before running this skill.
|
|
|
25
25
|
- Use skill `bmad-agent-pm` (John) to guide the PRD creation process from `/vsaf-plan` output
|
|
26
26
|
- John will call skill `bmad-create-prd` to generate a standard PRD
|
|
27
27
|
- PRD must include: vision, goals, FRs, NFRs, epics, user stories, success metrics, scope, out-of-scope, assumptions
|
|
28
|
-
- Save to
|
|
28
|
+
- Save to `.vsaf/docs/planning-artifacts/prd-[feature].md`
|
|
29
29
|
|
|
30
30
|
#### Mode EDIT:
|
|
31
31
|
- Use skill `bmad-edit-prd` to edit the existing PRD
|
|
@@ -43,7 +43,7 @@ Must have run `/vsaf-plan` and have its output before running this skill.
|
|
|
43
43
|
## PRD Created/Updated
|
|
44
44
|
|
|
45
45
|
### File
|
|
46
|
-
- docs/
|
|
46
|
+
- .vsaf/docs/planning-artifacts/prd-[feature].md
|
|
47
47
|
- Mode: [CREATE / EDIT]
|
|
48
48
|
- Validation: [PASS / FAIL — details if fail]
|
|
49
49
|
|
|
@@ -15,9 +15,9 @@ Analyze the PRD and write a feature-level SRS following a standard template —
|
|
|
15
15
|
|
|
16
16
|
## Configuration
|
|
17
17
|
```yaml
|
|
18
|
-
outputDir: docs/
|
|
19
|
-
featureTemplate: _bmad/bmm/1-analysis/bmad-document-project/templates/srs-feature-template.md
|
|
20
|
-
systemTemplate: _bmad/bmm/1-analysis/bmad-document-project/templates/srs-system-template.md
|
|
18
|
+
outputDir: .vsaf/docs/srs
|
|
19
|
+
featureTemplate: .vsaf/_bmad/bmm/1-analysis/bmad-document-project/templates/srs-feature-template.md
|
|
20
|
+
systemTemplate: .vsaf/_bmad/bmm/1-analysis/bmad-document-project/templates/srs-system-template.md
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
@@ -27,7 +27,7 @@ systemTemplate: _bmad/bmm/1-analysis/bmad-document-project/templates/srs-system-
|
|
|
27
27
|
Before starting, check if the user has provided sufficient information:
|
|
28
28
|
|
|
29
29
|
**Required:**
|
|
30
|
-
- [ ] PRD document (file path or content) — typically at
|
|
30
|
+
- [ ] PRD document (file path or content) — typically at `.vsaf/docs/planning-artifacts/prd-[feature].md`
|
|
31
31
|
- [ ] Figma link (URL figma.com/design/...) — if available
|
|
32
32
|
|
|
33
33
|
If PRD is missing, **stop immediately** and request from the user:
|
|
@@ -48,7 +48,7 @@ Only continue when the PRD is available.
|
|
|
48
48
|
---
|
|
49
49
|
|
|
50
50
|
### Step 1 — Determine mode: Create or Edit
|
|
51
|
-
- Check if an SRS already exists in
|
|
51
|
+
- Check if an SRS already exists in `.vsaf/docs/srs/` for this feature
|
|
52
52
|
- **If none exists** → Mode: CREATE
|
|
53
53
|
- **If one exists** → Mode: EDIT
|
|
54
54
|
- Ask user: "An SRS already exists. Do you want to create a new one from scratch or edit the existing one?"
|
|
@@ -104,7 +104,7 @@ After this step, output a **"Gap Analysis Report"** and ask the user if they wan
|
|
|
104
104
|
|
|
105
105
|
### Step 4 — Write SRS following the Feature Template
|
|
106
106
|
|
|
107
|
-
Read the template at
|
|
107
|
+
Read the template at `.vsaf/_bmad/bmm/1-analysis/bmad-document-project/templates/srs-feature-template.md` and write the SRS **strictly following the template structure**, including all 12 sections (0-11):
|
|
108
108
|
|
|
109
109
|
0. **Preamble** — Document information, change log table, approval table
|
|
110
110
|
1. **Introduction** — Objectives, scope, reference documents
|
|
@@ -140,14 +140,14 @@ Read the template at `_bmad/bmm/1-analysis/bmad-document-project/templates/srs-f
|
|
|
140
140
|
---
|
|
141
141
|
|
|
142
142
|
### Step 6 — Save SRS file
|
|
143
|
-
Save the SRS document to:
|
|
143
|
+
Save the SRS document to: `.vsaf/docs/srs/SRS-[project-name]-[FR-ID]-[feature-name]-v1.0.md`
|
|
144
144
|
|
|
145
145
|
### Step 7 — Output to user
|
|
146
146
|
```
|
|
147
147
|
## SRS Created/Updated
|
|
148
148
|
|
|
149
149
|
### File
|
|
150
|
-
- docs/
|
|
150
|
+
- .vsaf/docs/srs/SRS-[project-name]-[FR-ID]-[feature-name]-v1.0.md
|
|
151
151
|
- Mode: [CREATE / EDIT]
|
|
152
152
|
- Use Cases written: [N]
|
|
153
153
|
- Validation: [PASS / FAIL — details if fail]
|
|
@@ -159,7 +159,7 @@ Save the SRS document to: `docs/project/srs/SRS-[project-name]-[FR-ID]-[feature-
|
|
|
159
159
|
- [SRS sections still containing {{...}} that need additional input]
|
|
160
160
|
|
|
161
161
|
## Next step
|
|
162
|
-
Run /vsaf-test docs/
|
|
162
|
+
Run /vsaf-test .vsaf/docs/srs/SRS-[...].md to generate testcases
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
## Notes
|
|
@@ -29,7 +29,7 @@ Ensure documentation is always up to date and AI agents have sufficient context.
|
|
|
29
29
|
### Step 2 — Generate project documentation
|
|
30
30
|
- Use skill `bmad-document-project` to generate/update project docs
|
|
31
31
|
- Output: architecture description, module breakdown, API endpoints, data flows
|
|
32
|
-
- Save to
|
|
32
|
+
- Save to `.vsaf/docs/`
|
|
33
33
|
|
|
34
34
|
### Step 3 — Generate project context for AI
|
|
35
35
|
- Use skill `bmad-generate-project-context` to create `project-context.md`
|
|
@@ -38,8 +38,8 @@ Build a full mental model of the project before touching any code.
|
|
|
38
38
|
- Identify: hot symbols (many callers), risk areas (high fan-out)
|
|
39
39
|
|
|
40
40
|
### Step 7 — Read project documentation + synthesize
|
|
41
|
-
- Read
|
|
42
|
-
- Read
|
|
41
|
+
- Read `.vsaf/docs/planning-artifacts/` to find PRDs, ADRs, architecture docs
|
|
42
|
+
- Read `.vsaf/docs/srs/` to find existing SRS documents
|
|
43
43
|
- Synthesize all findings into a project overview
|
|
44
44
|
|
|
45
45
|
### Step 8 — Output to user
|
|
@@ -33,7 +33,7 @@ Fully understand the requirement, analyze impact, and determine the implementati
|
|
|
33
33
|
- Use skill `bmad-agent-architect` to propose an architecture approach
|
|
34
34
|
- Compare alternatives, choose the most suitable approach
|
|
35
35
|
- **If risk is HIGH or > 3 modules**: use skill `bmad-create-architecture` to create a formal ADR (Architecture Decision Record)
|
|
36
|
-
- Save to
|
|
36
|
+
- Save to `.vsaf/docs/planning-artifacts/adr-[feature].md`
|
|
37
37
|
|
|
38
38
|
### Step 4 — Dual Brainstorm
|
|
39
39
|
|
|
@@ -91,4 +91,4 @@ Date: [YYYY-MM-DD]
|
|
|
91
91
|
- Retro must be data-backed — do not accept "I feel like..." without evidence
|
|
92
92
|
- If GitNexus index is stale: run `vsaf index` before the retro
|
|
93
93
|
- Action items must be actionable and have an owner — do not write vague "improve testing"
|
|
94
|
-
- Save retro output to
|
|
94
|
+
- Save retro output to `.vsaf/docs/implementation-artifacts/retro-[sprint].md` to track historical data
|
|
@@ -10,7 +10,7 @@ Multi-layer review, verify scope, validate architecture, push PR. Ensure code ha
|
|
|
10
10
|
|
|
11
11
|
## Prerequisites
|
|
12
12
|
- Have run `/vsaf-build` with PRD + SRS + testcase
|
|
13
|
-
- Have run `/vsaf-test run` — results file exists at
|
|
13
|
+
- Have run `/vsaf-test run` — results file exists at `.vsaf/docs/testcases/[feature]-results.md`
|
|
14
14
|
- Ship gate from `/vsaf-test run` = PASS
|
|
15
15
|
- No failing tests
|
|
16
16
|
|
|
@@ -78,7 +78,7 @@ git push origin feature/<name>
|
|
|
78
78
|
```
|
|
79
79
|
PR description must include:
|
|
80
80
|
- Impact summary (from GitNexus detect_changes)
|
|
81
|
-
- Test results file path:
|
|
81
|
+
- Test results file path: `.vsaf/docs/testcases/[feature]-results.md`
|
|
82
82
|
- Adversarial triage: MUST FIX: 0, SHOULD FIX: N, NOTED: N
|
|
83
83
|
- Shape check result
|
|
84
84
|
|
|
@@ -98,7 +98,7 @@ PR description must include:
|
|
|
98
98
|
### PR
|
|
99
99
|
- Branch: feature/[name]
|
|
100
100
|
- PR: [link]
|
|
101
|
-
- Test results: docs/
|
|
101
|
+
- Test results: .vsaf/docs/testcases/[feature]-results.md
|
|
102
102
|
|
|
103
103
|
## Next step
|
|
104
104
|
- Run /vsaf-retro if this is the end of a sprint/epic
|
|
@@ -33,7 +33,7 @@ Manage backlog and sprints for the project — break PRD/SRS into stories, creat
|
|
|
33
33
|
- Prioritize stories (MoSCoW or WSJF)
|
|
34
34
|
- Assign stories to sprint based on capacity
|
|
35
35
|
- Identify dependencies between stories
|
|
36
|
-
- Save sprint plan to
|
|
36
|
+
- Save sprint plan to `.vsaf/docs/planning-artifacts/sprint-plan.md`
|
|
37
37
|
|
|
38
38
|
#### Step 3 — Output
|
|
39
39
|
```
|
|
@@ -94,12 +94,12 @@ Or: /vsaf-plan <story description> to start the first feature
|
|
|
94
94
|
#### Step 1 — Create story file
|
|
95
95
|
- Use skill `bmad-create-story` with story ID from the sprint plan
|
|
96
96
|
- Story file includes: full context, acceptance criteria, technical notes, dependencies
|
|
97
|
-
- Save to
|
|
97
|
+
- Save to `.vsaf/docs/planning-artifacts/stories/story-[id].md`
|
|
98
98
|
|
|
99
99
|
#### Step 2 — Output
|
|
100
100
|
```
|
|
101
101
|
## Story Created: [story title]
|
|
102
|
-
- File: docs/
|
|
102
|
+
- File: .vsaf/docs/planning-artifacts/stories/story-[id].md
|
|
103
103
|
|
|
104
104
|
### Next step
|
|
105
105
|
Run /vsaf-plan <story description> to plan implementation
|