@devtrack-solution/codesdd 1.2.2 → 1.2.4-rc3
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/.sdd/skills/curated/api-clean-flask-langgraph/SKILL.md +17 -17
- package/.sdd/skills/curated/devtrack-api/SKILL.md +170 -31
- package/.sdd/skills/curated/devtrack-api/agents/claude-code.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/codex.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/cursor.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/gemini.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/kimi.yaml +8 -0
- package/.sdd/skills/curated/devtrack-api/agents/openai.yaml +4 -2
- package/.sdd/skills/curated/devtrack-api/agents/opencode.yaml +10 -0
- package/.sdd/skills/curated/devtrack-api/references/application-presentation.md +2 -2
- package/.sdd/skills/curated/devtrack-api/references/architecture-governance.md +8 -7
- package/.sdd/skills/curated/devtrack-api/references/consumer-sync-policy.md +93 -0
- package/.sdd/skills/curated/devtrack-api/references/contract-pack.yaml +372 -0
- package/.sdd/skills/curated/devtrack-api/references/domain-modeling.md +13 -13
- package/.sdd/skills/curated/devtrack-api/references/field-validation-protocol.md +95 -0
- package/.sdd/skills/curated/devtrack-api/references/foundation-layout.md +294 -0
- package/.sdd/skills/curated/devtrack-api/references/implementation-checklist.md +5 -5
- package/.sdd/skills/curated/devtrack-api/references/imports-lint.md +4 -0
- package/.sdd/skills/curated/devtrack-api/references/portable-agent-contract.md +41 -0
- package/.sdd/skills/curated/devtrack-api/references/testing-validation.md +2 -2
- package/.sdd/skills/curated/devtrack-api/references/typeorm-infrastructure.md +7 -9
- package/LICENSE +1 -1
- package/README.md +399 -53
- package/bin/codesdd.js +3 -2
- package/dist/applications/sdd/index.d.ts +16 -0
- package/dist/applications/sdd/index.js +16 -0
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +11 -558
- package/dist/cli/program.d.ts +14 -0
- package/dist/cli/program.js +645 -0
- package/dist/commands/change.js +5 -5
- package/dist/commands/completion.d.ts +1 -1
- package/dist/commands/completion.js +9 -2
- package/dist/commands/config.js +320 -20
- package/dist/commands/feedback.js +1 -1
- package/dist/commands/schema.d.ts +63 -0
- package/dist/commands/schema.js +12 -12
- package/dist/commands/sdd/backlog.d.ts +3 -0
- package/dist/commands/sdd/backlog.js +54 -0
- package/dist/commands/sdd/execution.js +489 -28
- package/dist/commands/sdd/plugin.d.ts +3 -0
- package/dist/commands/sdd/plugin.js +158 -0
- package/dist/commands/sdd/shared.d.ts +1 -0
- package/dist/commands/sdd/shared.js +11 -22
- package/dist/commands/sdd/skills.js +7 -0
- package/dist/commands/sdd.js +107 -15
- package/dist/commands/spec.js +9 -9
- package/dist/commands/validate.js +6 -6
- package/dist/commands/workflow/instructions.js +6 -6
- package/dist/commands/workflow/new-change.js +3 -3
- package/dist/commands/workflow/shared.d.ts +1 -1
- package/dist/commands/workflow/shared.js +4 -4
- package/dist/core/archive.js +15 -5
- package/dist/core/artifact-graph/instruction-loader.d.ts +1 -1
- package/dist/core/artifact-graph/instruction-loader.js +3 -3
- package/dist/core/artifact-graph/resolver.d.ts +4 -4
- package/dist/core/artifact-graph/resolver.js +6 -6
- package/dist/core/branding.js +3 -3
- package/dist/core/cli/command-matrix.js +19 -1
- package/dist/core/cli-command-quality.d.ts +27 -0
- package/dist/core/cli-command-quality.js +180 -0
- package/dist/core/command-generation/adapters/costrict.d.ts +1 -1
- package/dist/core/command-generation/adapters/costrict.js +2 -2
- package/dist/core/command-generation/types.d.ts +1 -1
- package/dist/core/completions/command-registry.d.ts +1 -1
- package/dist/core/completions/command-registry.js +200 -12
- package/dist/core/completions/completion-provider.d.ts +14 -1
- package/dist/core/completions/completion-provider.js +29 -1
- package/dist/core/completions/generators/bash-generator.d.ts +1 -1
- package/dist/core/completions/generators/bash-generator.js +20 -12
- package/dist/core/completions/generators/fish-generator.d.ts +9 -1
- package/dist/core/completions/generators/fish-generator.js +39 -25
- package/dist/core/completions/generators/powershell-generator.d.ts +1 -1
- package/dist/core/completions/generators/powershell-generator.js +21 -11
- package/dist/core/completions/generators/zsh-generator.d.ts +3 -6
- package/dist/core/completions/generators/zsh-generator.js +21 -42
- package/dist/core/completions/installers/bash-installer.js +6 -6
- package/dist/core/completions/installers/fish-installer.js +1 -1
- package/dist/core/completions/installers/powershell-installer.js +14 -14
- package/dist/core/completions/installers/zsh-installer.d.ts +7 -1
- package/dist/core/completions/installers/zsh-installer.js +36 -8
- package/dist/core/completions/templates/bash-templates.d.ts +1 -1
- package/dist/core/completions/templates/bash-templates.js +12 -6
- package/dist/core/completions/templates/fish-templates.d.ts +2 -2
- package/dist/core/completions/templates/fish-templates.js +20 -9
- package/dist/core/completions/templates/powershell-templates.d.ts +1 -1
- package/dist/core/completions/templates/powershell-templates.js +13 -4
- package/dist/core/completions/templates/zsh-templates.d.ts +1 -1
- package/dist/core/completions/templates/zsh-templates.js +18 -9
- package/dist/core/config-schema.d.ts +20 -1
- package/dist/core/config-schema.js +70 -2
- package/dist/core/config.d.ts +3 -3
- package/dist/core/config.js +4 -4
- package/dist/core/global-config.d.ts +57 -12
- package/dist/core/global-config.js +344 -27
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/init.d.ts +6 -1
- package/dist/core/init.js +99 -77
- package/dist/core/legacy-cleanup.d.ts +17 -17
- package/dist/core/legacy-cleanup.js +96 -79
- package/dist/core/list.js +18 -4
- package/dist/core/migration.d.ts +3 -1
- package/dist/core/migration.js +7 -8
- package/dist/core/parsers/change-parser.js +1 -1
- package/dist/core/parsers/markdown-parser.js +2 -2
- package/dist/core/profile-sync-drift.d.ts +1 -1
- package/dist/core/profile-sync-drift.js +13 -13
- package/dist/core/project-config.d.ts +4 -4
- package/dist/core/project-config.js +11 -11
- package/dist/core/schemas/change.schema.d.ts +1 -1
- package/dist/core/schemas/change.schema.js +1 -1
- package/dist/core/schemas/spec.schema.d.ts +1 -1
- package/dist/core/schemas/spec.schema.js +1 -1
- package/dist/core/sdd/adr.js +23 -1
- package/dist/core/sdd/agent-binding.d.ts +346 -0
- package/dist/core/sdd/agent-binding.js +343 -0
- package/dist/core/sdd/agent-runtime-contract.d.ts +204 -0
- package/dist/core/sdd/agent-runtime-contract.js +200 -0
- package/dist/core/sdd/backlog-cli.d.ts +16 -0
- package/dist/core/sdd/backlog-cli.js +146 -0
- package/dist/core/sdd/backlog-conflict-policy.d.ts +58 -0
- package/dist/core/sdd/backlog-conflict-policy.js +230 -0
- package/dist/core/sdd/backlog-projection.d.ts +8 -0
- package/dist/core/sdd/backlog-projection.js +89 -0
- package/dist/core/sdd/backlog-provider-contract.d.ts +252 -0
- package/dist/core/sdd/backlog-provider-contract.js +158 -0
- package/dist/core/sdd/bootstrap.js +2 -2
- package/dist/core/sdd/check.d.ts +44 -0
- package/dist/core/sdd/check.js +62 -24
- package/dist/core/sdd/contract.d.ts +13 -0
- package/dist/core/sdd/contract.js +36 -0
- package/dist/core/sdd/coordination/coordination-adapters.d.ts +53 -8
- package/dist/core/sdd/coordination/coordination-adapters.js +182 -16
- package/dist/core/sdd/coordination/index.d.ts +1 -0
- package/dist/core/sdd/coordination/index.js +1 -0
- package/dist/core/sdd/coordination/redis-runtime.d.ts +131 -0
- package/dist/core/sdd/coordination/redis-runtime.js +698 -0
- package/dist/core/sdd/deepagent-contracts.d.ts +370 -0
- package/dist/core/sdd/deepagent-contracts.js +235 -0
- package/dist/core/sdd/deepagents/adr-governor.d.ts +2 -0
- package/dist/core/sdd/deepagents/adr-governor.js +30 -0
- package/dist/core/sdd/deepagents/backend.d.ts +63 -0
- package/dist/core/sdd/deepagents/backend.js +174 -0
- package/dist/core/sdd/deepagents/codesdd-tools.d.ts +39 -0
- package/dist/core/sdd/deepagents/codesdd-tools.js +83 -0
- package/dist/core/sdd/deepagents/evidence-mapper.d.ts +86 -0
- package/dist/core/sdd/deepagents/evidence-mapper.js +178 -0
- package/dist/core/sdd/deepagents/model-provider.d.ts +53 -0
- package/dist/core/sdd/deepagents/model-provider.js +379 -0
- package/dist/core/sdd/deepagents/policy-enforcement.d.ts +30 -0
- package/dist/core/sdd/deepagents/policy-enforcement.js +90 -0
- package/dist/core/sdd/deepagents/policy.d.ts +75 -0
- package/dist/core/sdd/deepagents/policy.js +358 -0
- package/dist/core/sdd/deepagents/quality-witness.d.ts +3 -0
- package/dist/core/sdd/deepagents/quality-witness.js +77 -0
- package/dist/core/sdd/deepagents/reversa-subagents.d.ts +75 -0
- package/dist/core/sdd/deepagents/reversa-subagents.js +182 -0
- package/dist/core/sdd/deepagents/runtime-factory.d.ts +90 -0
- package/dist/core/sdd/deepagents/runtime-factory.js +231 -0
- package/dist/core/sdd/deepagents/runtime-loader.d.ts +16 -0
- package/dist/core/sdd/deepagents/runtime-loader.js +65 -0
- package/dist/core/sdd/default-bootstrap-files.d.ts +3 -3
- package/dist/core/sdd/default-bootstrap-files.js +50 -10
- package/dist/core/sdd/default-skills.d.ts +30 -0
- package/dist/core/sdd/default-skills.js +288 -8
- package/dist/core/sdd/devtrack-api-appliance.d.ts +91 -0
- package/dist/core/sdd/devtrack-api-appliance.js +280 -0
- package/dist/core/sdd/devtrack-api-architecture.d.ts +31 -0
- package/dist/core/sdd/devtrack-api-architecture.js +608 -0
- package/dist/core/sdd/devtrack-api-import-boundary.d.ts +19 -0
- package/dist/core/sdd/devtrack-api-import-boundary.js +32 -0
- package/dist/core/sdd/diagnose.d.ts +59 -0
- package/dist/core/sdd/diagnose.js +37 -37
- package/dist/core/sdd/docs-sync.js +54 -20
- package/dist/core/sdd/domain/capability-diff.d.ts +63 -0
- package/dist/core/sdd/domain/capability-diff.js +200 -0
- package/dist/core/sdd/domain/change-safety-guardrails.d.ts +74 -0
- package/dist/core/sdd/domain/change-safety-guardrails.js +333 -0
- package/dist/core/sdd/domain/post-active-validation.d.ts +7 -0
- package/dist/core/sdd/domain/post-active-validation.js +61 -0
- package/dist/core/sdd/domain/semantic-intent-classifier.d.ts +29 -0
- package/dist/core/sdd/domain/semantic-intent-classifier.js +117 -0
- package/dist/core/sdd/domain/transition-engine.js +1 -0
- package/dist/core/sdd/entity-reference.d.ts +5 -0
- package/dist/core/sdd/entity-reference.js +22 -0
- package/dist/core/sdd/foundation-artifact-map-validator.d.ts +16 -0
- package/dist/core/sdd/foundation-artifact-map-validator.js +71 -0
- package/dist/core/sdd/foundation-layer-manifest.d.ts +24 -0
- package/dist/core/sdd/foundation-layer-manifest.js +117 -0
- package/dist/core/sdd/governance-backfill.d.ts +31 -0
- package/dist/core/sdd/governance-backfill.js +359 -0
- package/dist/core/sdd/governance-parser.d.ts +21 -0
- package/dist/core/sdd/governance-parser.js +91 -0
- package/dist/core/sdd/governance-schemas.d.ts +245 -0
- package/dist/core/sdd/governance-schemas.js +143 -0
- package/dist/core/sdd/{import-openspec.d.ts → import-legacy-spec.d.ts} +7 -7
- package/dist/core/sdd/{import-openspec.js → import-legacy-spec.js} +21 -29
- package/dist/core/sdd/init.d.ts +3 -0
- package/dist/core/sdd/init.js +6 -3
- package/dist/core/sdd/intent-guard.d.ts +22 -0
- package/dist/core/sdd/intent-guard.js +67 -0
- package/dist/core/sdd/json-schema.js +108 -6
- package/dist/core/sdd/knowledge-graph.d.ts +45 -0
- package/dist/core/sdd/knowledge-graph.js +288 -0
- package/dist/core/sdd/legacy-operations.js +507 -44
- package/dist/core/sdd/lenses.d.ts +1 -0
- package/dist/core/sdd/lenses.js +29 -1
- package/dist/core/sdd/migrate-workspace.js +95 -2
- package/dist/core/sdd/migrate.d.ts +1 -1
- package/dist/core/sdd/migrate.js +36 -2
- package/dist/core/sdd/package-security-gates.d.ts +21 -0
- package/dist/core/sdd/package-security-gates.js +119 -0
- package/dist/core/sdd/package-structure-gate.d.ts +83 -0
- package/dist/core/sdd/package-structure-gate.js +357 -0
- package/dist/core/sdd/parallel-feat-automation.d.ts +330 -0
- package/dist/core/sdd/parallel-feat-automation.js +424 -0
- package/dist/core/sdd/plugin-broker.d.ts +777 -0
- package/dist/core/sdd/plugin-broker.js +492 -0
- package/dist/core/sdd/plugin-certification.d.ts +79 -0
- package/dist/core/sdd/plugin-certification.js +453 -0
- package/dist/core/sdd/plugin-cli.d.ts +139 -0
- package/dist/core/sdd/plugin-cli.js +265 -0
- package/dist/core/sdd/plugin-evidence.d.ts +348 -0
- package/dist/core/sdd/plugin-evidence.js +307 -0
- package/dist/core/sdd/plugin-manifest.d.ts +232 -0
- package/dist/core/sdd/plugin-manifest.js +225 -0
- package/dist/core/sdd/plugin-policy-pack.d.ts +88 -0
- package/dist/core/sdd/plugin-policy-pack.js +236 -0
- package/dist/core/sdd/plugin-policy.d.ts +68 -0
- package/dist/core/sdd/plugin-policy.js +212 -0
- package/dist/core/sdd/plugin-registry.d.ts +447 -0
- package/dist/core/sdd/plugin-registry.js +138 -0
- package/dist/core/sdd/plugin-sdk-contract.d.ts +363 -0
- package/dist/core/sdd/plugin-sdk-contract.js +268 -0
- package/dist/core/sdd/plugin-skill-binding.d.ts +151 -0
- package/dist/core/sdd/plugin-skill-binding.js +339 -0
- package/dist/core/sdd/quality-artifact-manifest-validator.d.ts +28 -0
- package/dist/core/sdd/quality-artifact-manifest-validator.js +167 -0
- package/dist/core/sdd/quality-evidence-renderer.d.ts +65 -0
- package/dist/core/sdd/quality-evidence-renderer.js +218 -0
- package/dist/core/sdd/quality-scenario-runner.d.ts +42 -0
- package/dist/core/sdd/quality-scenario-runner.js +613 -0
- package/dist/core/sdd/quality-validation.d.ts +620 -0
- package/dist/core/sdd/quality-validation.js +239 -0
- package/dist/core/sdd/release-readiness.d.ts +19 -0
- package/dist/core/sdd/release-readiness.js +472 -0
- package/dist/core/sdd/resolve-project-root.d.ts +2 -2
- package/dist/core/sdd/resolve-project-root.js +11 -5
- package/dist/core/sdd/runtime-boundary-contract.d.ts +45 -0
- package/dist/core/sdd/runtime-boundary-contract.js +90 -0
- package/dist/core/sdd/sanitize.d.ts +30 -1
- package/dist/core/sdd/sanitize.js +23 -23
- package/dist/core/sdd/sdk-agent-plugin-quality-gates.d.ts +150 -0
- package/dist/core/sdd/sdk-agent-plugin-quality-gates.js +258 -0
- package/dist/core/sdd/services/agent-run.service.d.ts +97 -0
- package/dist/core/sdd/services/agent-run.service.js +261 -0
- package/dist/core/sdd/services/breakdown.service.js +2 -1
- package/dist/core/sdd/services/capability-diff.service.d.ts +18 -0
- package/dist/core/sdd/services/capability-diff.service.js +26 -0
- package/dist/core/sdd/services/change-safety-preflight.service.d.ts +17 -0
- package/dist/core/sdd/services/change-safety-preflight.service.js +17 -0
- package/dist/core/sdd/services/context.service.d.ts +43 -340
- package/dist/core/sdd/services/context.service.js +341 -25
- package/dist/core/sdd/services/debate.service.js +15 -2
- package/dist/core/sdd/services/feature-lint.service.d.ts +22 -0
- package/dist/core/sdd/services/feature-lint.service.js +105 -5
- package/dist/core/sdd/services/finalize.service.d.ts +105 -0
- package/dist/core/sdd/services/finalize.service.js +499 -38
- package/dist/core/sdd/services/frontend-gap.service.js +22 -7
- package/dist/core/sdd/services/frontend-impact.service.d.ts +1 -1
- package/dist/core/sdd/services/governance-control-plane-runtime-adapters.d.ts +17 -0
- package/dist/core/sdd/services/governance-control-plane-runtime-adapters.js +38 -0
- package/dist/core/sdd/services/governance-control-plane.service.d.ts +66 -0
- package/dist/core/sdd/services/governance-control-plane.service.js +134 -0
- package/dist/core/sdd/services/ingest-deposito.service.js +1 -1
- package/dist/core/sdd/services/legacy-capability.service.d.ts +10 -7
- package/dist/core/sdd/services/legacy-capability.service.js +38 -21
- package/dist/core/sdd/services/mcp-runtime.service.d.ts +123 -8
- package/dist/core/sdd/services/mcp-runtime.service.js +1085 -33
- package/dist/core/sdd/services/onboard.service.js +2 -1
- package/dist/core/sdd/services/rebuild.service.js +6 -1
- package/dist/core/sdd/services/semantic-intent-classifier.service.d.ts +6 -0
- package/dist/core/sdd/services/semantic-intent-classifier.service.js +7 -0
- package/dist/core/sdd/services/skills-sync.service.d.ts +17 -5
- package/dist/core/sdd/services/skills-sync.service.js +55 -2
- package/dist/core/sdd/services/start.service.js +6 -4
- package/dist/core/sdd/skill-bundles-curation-schema.d.ts +66 -0
- package/dist/core/sdd/skill-bundles-curation-schema.js +52 -0
- package/dist/core/sdd/skill-evidence.d.ts +19 -0
- package/dist/core/sdd/skill-evidence.js +38 -0
- package/dist/core/sdd/skill-policy-pool.d.ts +46 -0
- package/dist/core/sdd/skill-policy-pool.js +185 -0
- package/dist/core/sdd/state.d.ts +23 -0
- package/dist/core/sdd/state.js +313 -66
- package/dist/core/sdd/store/sdd-stores.js +2 -2
- package/dist/core/sdd/structural-health.d.ts +55 -55
- package/dist/core/sdd/types.d.ts +60 -19
- package/dist/core/sdd/types.js +21 -0
- package/dist/core/sdd/upgrade-to-codesdd.d.ts +45 -0
- package/dist/core/sdd/upgrade-to-codesdd.js +179 -0
- package/dist/core/sdd/views.js +17 -0
- package/dist/core/sdd/workspace-schemas.d.ts +670 -19
- package/dist/core/sdd/workspace-schemas.js +285 -5
- package/dist/core/sdd/write-manifest.js +22 -4
- package/dist/core/shared/skill-generation.d.ts +1 -1
- package/dist/core/shared/skill-generation.js +15 -15
- package/dist/core/shared/tool-detection.d.ts +3 -3
- package/dist/core/shared/tool-detection.js +14 -14
- package/dist/core/specs-apply.js +6 -6
- package/dist/core/templates/index.d.ts +1 -1
- package/dist/core/templates/index.js +1 -1
- package/dist/core/templates/workflows/apply-change.js +14 -14
- package/dist/core/templates/workflows/archive-change.js +32 -32
- package/dist/core/templates/workflows/bulk-archive-change.js +25 -25
- package/dist/core/templates/workflows/continue-change.js +12 -12
- package/dist/core/templates/workflows/explore.js +29 -29
- package/dist/core/templates/workflows/feedback.js +6 -6
- package/dist/core/templates/workflows/ff-change.js +24 -24
- package/dist/core/templates/workflows/new-change.js +20 -20
- package/dist/core/templates/workflows/onboard.js +33 -33
- package/dist/core/templates/workflows/propose.js +23 -23
- package/dist/core/templates/workflows/sdd.js +8 -8
- package/dist/core/templates/workflows/sync-specs.js +19 -19
- package/dist/core/templates/workflows/verify-change.js +17 -17
- package/dist/core/update.d.ts +2 -2
- package/dist/core/update.js +16 -15
- package/dist/core/validation/constants.d.ts +1 -1
- package/dist/core/validation/constants.js +1 -1
- package/dist/core/view.js +11 -11
- package/dist/domains/sdd/index.d.ts +6 -0
- package/dist/domains/sdd/index.js +6 -0
- package/dist/infrastructures/sdd/index.d.ts +7 -0
- package/dist/infrastructures/sdd/index.js +6 -0
- package/dist/presentations/cli/sdd/index.d.ts +3 -0
- package/dist/presentations/cli/sdd/index.js +3 -0
- package/dist/shared/sdd/index.d.ts +3 -0
- package/dist/shared/sdd/index.js +2 -0
- package/dist/telemetry/config.d.ts +2 -1
- package/dist/telemetry/config.js +17 -8
- package/dist/telemetry/index.d.ts +10 -2
- package/dist/telemetry/index.js +40 -7
- package/dist/ui/ascii-patterns.d.ts +2 -2
- package/dist/ui/ascii-patterns.js +2 -2
- package/dist/ui/welcome-screen.js +2 -2
- package/dist/utils/change-metadata.d.ts +4 -4
- package/dist/utils/change-metadata.js +6 -6
- package/dist/utils/change-utils.d.ts +3 -3
- package/dist/utils/change-utils.js +5 -5
- package/dist/utils/file-system.js +1 -1
- package/dist/utils/interactive.js +1 -1
- package/dist/utils/item-discovery.js +4 -4
- package/dist/utils/legacy-spec-compat.d.ts +2 -0
- package/dist/utils/legacy-spec-compat.js +2 -0
- package/dist/utils/shell-detection.d.ts +1 -0
- package/dist/utils/shell-detection.js +16 -0
- package/package.json +34 -21
- package/schemas/sdd/1-spec.schema.json +1 -1
- package/schemas/sdd/2-plan.schema.json +280 -3
- package/schemas/sdd/3-tasks.schema.json +73 -1
- package/schemas/sdd/4-changelog.schema.json +1 -1
- package/schemas/sdd/5-quality.schema.json +701 -5
- package/schemas/sdd/adr.schema.json +148 -0
- package/schemas/sdd/agent-binding-adapter.schema.json +210 -0
- package/schemas/sdd/agent-binding-resolution.schema.json +338 -0
- package/schemas/sdd/agent-runtime-command-plan.schema.json +212 -0
- package/schemas/sdd/agent-runtime-opencode-run-evidence.schema.json +270 -0
- package/schemas/sdd/backlog-projection-plan.schema.json +180 -0
- package/schemas/sdd/backlog-provider-contract.schema.json +260 -0
- package/schemas/sdd/codesdd-plugin.schema.json +645 -0
- package/schemas/sdd/debate.schema.json +244 -0
- package/schemas/sdd/deepagent-decision-evidence.schema.json +58 -0
- package/schemas/sdd/deepagent-env-contract.schema.json +143 -0
- package/schemas/sdd/deepagent-quality-evidence.schema.json +108 -0
- package/schemas/sdd/deepagent-run-evidence.schema.json +192 -0
- package/schemas/sdd/deepagent-run-plan.schema.json +197 -0
- package/schemas/sdd/deepagent-run-request.schema.json +637 -0
- package/schemas/sdd/deepagent-subagent-evidence.schema.json +110 -0
- package/schemas/sdd/deepagent-tool-call-evidence.schema.json +78 -0
- package/schemas/sdd/discarded.schema.json +127 -0
- package/schemas/sdd/epic.schema.json +147 -0
- package/schemas/sdd/insight.schema.json +136 -0
- package/schemas/sdd/parallel-feat-automation-plan.schema.json +304 -0
- package/schemas/sdd/parallel-feat-automation-request.schema.json +109 -0
- package/schemas/sdd/parallel-feat-scheduler-request.schema.json +116 -0
- package/schemas/sdd/parallel-feat-scheduler-result.schema.json +404 -0
- package/schemas/sdd/plugin-artifact-manifest.schema.json +259 -0
- package/schemas/sdd/plugin-artifact-map.schema.json +223 -0
- package/schemas/sdd/plugin-compliance-index.schema.json +136 -0
- package/schemas/sdd/plugin-dry-run-plan.schema.json +260 -0
- package/schemas/sdd/plugin-evidence-manifest.schema.json +678 -0
- package/schemas/sdd/plugin-language-runtime.schema.json +103 -0
- package/schemas/sdd/plugin-package-governance.schema.json +74 -0
- package/schemas/sdd/plugin-policy-evaluation.schema.json +92 -0
- package/schemas/sdd/plugin-policy-pack-evaluation.schema.json +94 -0
- package/schemas/sdd/plugin-policy-pack.schema.json +196 -0
- package/schemas/sdd/plugin-registry.schema.json +729 -0
- package/schemas/sdd/plugin-rollback-manifest.schema.json +87 -0
- package/schemas/sdd/plugin-runtime-invocation-plan.schema.json +954 -0
- package/schemas/sdd/plugin-skill-binding-resolution.schema.json +305 -0
- package/schemas/sdd/plugin-skill-binding.schema.json +88 -0
- package/schemas/sdd/plugin-validation-manifest.schema.json +123 -0
- package/schemas/sdd/quality-architecture-schema.schema.json +216 -0
- package/schemas/sdd/quality-evidence-bundle.schema.json +1337 -0
- package/schemas/sdd/quality-run.schema.json +197 -0
- package/schemas/sdd/quality-scenario.schema.json +252 -0
- package/schemas/sdd/sdk-agent-plugin-quality-gate-input.schema.json +168 -0
- package/schemas/sdd/sdk-agent-plugin-quality-gate-report.schema.json +160 -0
- package/schemas/sdd/workspace-catalog.schema.json +13232 -35
- package/schemas/spec-driven/schema.yaml +4 -4
- package/schemas/spec-driven/templates/proposal.md +1 -1
- package/dist/utils/openspec-compat.d.ts +0 -2
- package/dist/utils/openspec-compat.js +0 -2
package/dist/core/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Init Command
|
|
3
3
|
*
|
|
4
|
-
* Sets up
|
|
4
|
+
* Sets up CodeSDD with Agent Skills and /opsx:* slash commands.
|
|
5
5
|
* This is the unified setup command that replaces both the old init and experimental commands.
|
|
6
6
|
*/
|
|
7
7
|
import path from 'path';
|
|
@@ -11,7 +11,7 @@ import * as fs from 'fs';
|
|
|
11
11
|
import { createRequire } from 'module';
|
|
12
12
|
import { FileSystemUtils } from '../utils/file-system.js';
|
|
13
13
|
import { transformToHyphenCommands } from '../utils/command-references.js';
|
|
14
|
-
import { AI_TOOLS,
|
|
14
|
+
import { AI_TOOLS, LEGACY_SPEC_DIR_NAME, } from './config.js';
|
|
15
15
|
import { isInteractive } from '../utils/interactive.js';
|
|
16
16
|
import { generateCommands, CommandAdapterRegistry, } from './command-generation/index.js';
|
|
17
17
|
import { CLI_ISSUES_URL, CLI_NAME, CLI_PRODUCT_NAME, CLI_REPOSITORY_URL } from './branding.js';
|
|
@@ -21,24 +21,25 @@ import { getGlobalConfig } from './global-config.js';
|
|
|
21
21
|
import { getProfileWorkflows, ALL_WORKFLOWS } from './profiles.js';
|
|
22
22
|
import { getAvailableTools } from './available-tools.js';
|
|
23
23
|
import { migrateIfNeeded } from './migration.js';
|
|
24
|
+
import { resolveLegacySpecLiveRoot } from './sdd/services/legacy-capability.service.js';
|
|
24
25
|
const require = createRequire(import.meta.url);
|
|
25
|
-
const { version:
|
|
26
|
+
const { version: CODESDD_VERSION } = require('../../package.json');
|
|
26
27
|
// -----------------------------------------------------------------------------
|
|
27
28
|
// Constants
|
|
28
29
|
// -----------------------------------------------------------------------------
|
|
29
30
|
const WORKFLOW_TO_SKILL_DIR = {
|
|
30
|
-
'explore': '
|
|
31
|
-
'new': '
|
|
32
|
-
'continue': '
|
|
33
|
-
'apply': '
|
|
34
|
-
'ff': '
|
|
35
|
-
'sync': '
|
|
36
|
-
'archive': '
|
|
37
|
-
'bulk-archive': '
|
|
38
|
-
'verify': '
|
|
39
|
-
'onboard': '
|
|
40
|
-
'propose': '
|
|
41
|
-
'sdd': '
|
|
31
|
+
'explore': 'codesdd-explore',
|
|
32
|
+
'new': 'codesdd-new-change',
|
|
33
|
+
'continue': 'codesdd-continue-change',
|
|
34
|
+
'apply': 'codesdd-apply-change',
|
|
35
|
+
'ff': 'codesdd-ff-change',
|
|
36
|
+
'sync': 'codesdd-sync-specs',
|
|
37
|
+
'archive': 'codesdd-archive-change',
|
|
38
|
+
'bulk-archive': 'codesdd-bulk-archive-change',
|
|
39
|
+
'verify': 'codesdd-verify-change',
|
|
40
|
+
'onboard': 'codesdd-onboard',
|
|
41
|
+
'propose': 'codesdd-propose',
|
|
42
|
+
'sdd': 'codesdd-sdd',
|
|
42
43
|
};
|
|
43
44
|
// -----------------------------------------------------------------------------
|
|
44
45
|
// Init Command Class
|
|
@@ -48,25 +49,28 @@ export class InitCommand {
|
|
|
48
49
|
force;
|
|
49
50
|
interactiveOption;
|
|
50
51
|
profileOverride;
|
|
52
|
+
allowNoToolsFallback;
|
|
53
|
+
silent;
|
|
51
54
|
constructor(options = {}) {
|
|
52
55
|
this.toolsArg = options.tools;
|
|
53
56
|
this.force = options.force ?? false;
|
|
54
57
|
this.interactiveOption = options.interactive;
|
|
55
58
|
this.profileOverride = options.profile;
|
|
59
|
+
this.allowNoToolsFallback = options.allowNoToolsFallback ?? false;
|
|
60
|
+
this.silent = options.silent ?? false;
|
|
56
61
|
}
|
|
57
62
|
async execute(targetPath) {
|
|
58
63
|
const projectPath = path.resolve(targetPath);
|
|
59
|
-
const
|
|
60
|
-
const openspecPath = path.join(projectPath, openspecDir);
|
|
64
|
+
const codesddPath = resolveLegacySpecLiveRoot(projectPath);
|
|
61
65
|
// Validation happens silently in the background
|
|
62
|
-
const extendMode = await this.validate(projectPath,
|
|
66
|
+
const extendMode = await this.validate(projectPath, codesddPath);
|
|
63
67
|
// Check for legacy artifacts and handle cleanup
|
|
64
68
|
await this.handleLegacyCleanup(projectPath, extendMode);
|
|
65
69
|
// Detect available tools in the project (task 7.1)
|
|
66
70
|
const detectedTools = getAvailableTools(projectPath);
|
|
67
71
|
// Migration check: migrate existing projects to profile system (task 7.3)
|
|
68
72
|
if (extendMode) {
|
|
69
|
-
migrateIfNeeded(projectPath, detectedTools);
|
|
73
|
+
migrateIfNeeded(projectPath, detectedTools, { silent: this.silent });
|
|
70
74
|
}
|
|
71
75
|
// Show animated welcome screen (interactive mode only)
|
|
72
76
|
const canPrompt = this.canPromptInteractively();
|
|
@@ -84,19 +88,19 @@ export class InitCommand {
|
|
|
84
88
|
// Validate selected tools
|
|
85
89
|
const validatedTools = this.validateTools(selectedToolIds, toolStates);
|
|
86
90
|
// Create directory structure
|
|
87
|
-
await this.createDirectoryStructure(
|
|
91
|
+
await this.createDirectoryStructure(codesddPath, extendMode);
|
|
88
92
|
// Generate skills and commands for each tool
|
|
89
93
|
const results = await this.generateSkillsAndCommands(projectPath, validatedTools);
|
|
90
|
-
// Preserve an existing legacy
|
|
91
|
-
const configStatus = await this.createConfig(
|
|
94
|
+
// Preserve an existing legacy CodeSDD config, but do not create one for new CodeSDD projects.
|
|
95
|
+
const configStatus = await this.createConfig(codesddPath, extendMode);
|
|
92
96
|
// Display success message
|
|
93
97
|
this.displaySuccessMessage(projectPath, validatedTools, results, configStatus);
|
|
94
98
|
}
|
|
95
99
|
// ═══════════════════════════════════════════════════════════
|
|
96
100
|
// VALIDATION & SETUP
|
|
97
101
|
// ═══════════════════════════════════════════════════════════
|
|
98
|
-
async validate(projectPath,
|
|
99
|
-
const extendMode = await FileSystemUtils.directoryExists(
|
|
102
|
+
async validate(projectPath, codesddPath) {
|
|
103
|
+
const extendMode = await FileSystemUtils.directoryExists(codesddPath);
|
|
100
104
|
// Check write permissions
|
|
101
105
|
if (!(await FileSystemUtils.ensureWritePermissions(projectPath))) {
|
|
102
106
|
throw new Error(`Insufficient permissions to write to ${projectPath}`);
|
|
@@ -110,6 +114,16 @@ export class InitCommand {
|
|
|
110
114
|
return false;
|
|
111
115
|
return isInteractive({ interactive: this.interactiveOption });
|
|
112
116
|
}
|
|
117
|
+
log(message) {
|
|
118
|
+
if (!this.silent) {
|
|
119
|
+
if (typeof message === 'undefined') {
|
|
120
|
+
console.log();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log(message);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
113
127
|
resolveProfileOverride() {
|
|
114
128
|
if (this.profileOverride === undefined) {
|
|
115
129
|
return undefined;
|
|
@@ -129,13 +143,13 @@ export class InitCommand {
|
|
|
129
143
|
return; // No legacy artifacts found
|
|
130
144
|
}
|
|
131
145
|
// Show what was detected
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
146
|
+
this.log();
|
|
147
|
+
this.log(formatDetectionSummary(detection));
|
|
148
|
+
this.log();
|
|
135
149
|
const canPrompt = this.canPromptInteractively();
|
|
136
150
|
if (this.force || !canPrompt) {
|
|
137
151
|
// --force flag or non-interactive mode: proceed with cleanup automatically.
|
|
138
|
-
// Legacy slash commands are 100%
|
|
152
|
+
// Legacy slash commands are 100% CodeSDD-managed, and config file cleanup
|
|
139
153
|
// only removes markers (never deletes files), so auto-cleanup is safe.
|
|
140
154
|
await this.performLegacyCleanup(projectPath, detection);
|
|
141
155
|
return;
|
|
@@ -147,22 +161,22 @@ export class InitCommand {
|
|
|
147
161
|
default: true,
|
|
148
162
|
});
|
|
149
163
|
if (!shouldCleanup) {
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
this.log(chalk.dim('Initialization cancelled.'));
|
|
165
|
+
this.log(chalk.dim('Run with --force to skip this prompt, or manually remove legacy files.'));
|
|
152
166
|
process.exit(0);
|
|
153
167
|
}
|
|
154
168
|
await this.performLegacyCleanup(projectPath, detection);
|
|
155
169
|
}
|
|
156
170
|
async performLegacyCleanup(projectPath, detection) {
|
|
157
|
-
const spinner = ora('Cleaning up legacy files...').start();
|
|
171
|
+
const spinner = this.silent ? null : ora('Cleaning up legacy files...').start();
|
|
158
172
|
const result = await cleanupLegacyArtifacts(projectPath, detection);
|
|
159
|
-
spinner
|
|
173
|
+
spinner?.succeed('Legacy files cleaned up');
|
|
160
174
|
const summary = formatCleanupSummary(result);
|
|
161
|
-
if (summary) {
|
|
162
|
-
|
|
163
|
-
|
|
175
|
+
if (summary && !this.silent) {
|
|
176
|
+
this.log();
|
|
177
|
+
this.log(summary);
|
|
164
178
|
}
|
|
165
|
-
|
|
179
|
+
this.log();
|
|
166
180
|
}
|
|
167
181
|
// ═══════════════════════════════════════════════════════════
|
|
168
182
|
// TOOL SELECTION
|
|
@@ -185,6 +199,9 @@ export class InitCommand {
|
|
|
185
199
|
if (detectedToolIds.size > 0) {
|
|
186
200
|
return [...detectedToolIds];
|
|
187
201
|
}
|
|
202
|
+
if (this.allowNoToolsFallback) {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
188
205
|
throw new Error(`No tools detected and no --tools flag provided. Valid tools:\n ${validTools.join('\n ')}\n\nUse --tools all, --tools none, or --tools claude,cursor,...`);
|
|
189
206
|
}
|
|
190
207
|
if (validTools.length === 0) {
|
|
@@ -223,7 +240,7 @@ export class InitCommand {
|
|
|
223
240
|
.filter((toolId) => configuredToolIds.has(toolId))
|
|
224
241
|
.map((toolId) => AI_TOOLS.find((t) => t.value === toolId)?.name || toolId);
|
|
225
242
|
if (configuredNames.length > 0) {
|
|
226
|
-
|
|
243
|
+
this.log(`CodeSDD configured: ${configuredNames.join(', ')} (pre-selected)`);
|
|
227
244
|
}
|
|
228
245
|
const detectedOnlyNames = detectedTools
|
|
229
246
|
.filter((tool) => !configuredToolIds.has(tool.value))
|
|
@@ -232,7 +249,7 @@ export class InitCommand {
|
|
|
232
249
|
const detectionLabel = shouldPreselectDetected
|
|
233
250
|
? 'pre-selected for first-time setup'
|
|
234
251
|
: 'not pre-selected';
|
|
235
|
-
|
|
252
|
+
this.log(`Detected tool directories: ${detectedOnlyNames.join(', ')} (${detectionLabel})`);
|
|
236
253
|
}
|
|
237
254
|
const selectedTools = await searchableMultiSelect({
|
|
238
255
|
message: `Select tools to set up (${validTools.length} available)`,
|
|
@@ -312,18 +329,18 @@ export class InitCommand {
|
|
|
312
329
|
// ═══════════════════════════════════════════════════════════
|
|
313
330
|
// DIRECTORY STRUCTURE
|
|
314
331
|
// ═══════════════════════════════════════════════════════════
|
|
315
|
-
async createDirectoryStructure(
|
|
332
|
+
async createDirectoryStructure(codesddPath, extendMode) {
|
|
316
333
|
if (!extendMode) {
|
|
317
|
-
// New
|
|
334
|
+
// New CodeSDD installs are .sdd-native. Keep legacy-spec/ only as a legacy
|
|
318
335
|
// compatibility surface when it already exists in the target project.
|
|
319
336
|
return;
|
|
320
337
|
}
|
|
321
338
|
// In extend mode, just ensure legacy directories exist without spinner.
|
|
322
339
|
const directories = [
|
|
323
|
-
|
|
324
|
-
path.join(
|
|
325
|
-
path.join(
|
|
326
|
-
path.join(
|
|
340
|
+
codesddPath,
|
|
341
|
+
path.join(codesddPath, 'specs'),
|
|
342
|
+
path.join(codesddPath, 'changes'),
|
|
343
|
+
path.join(codesddPath, 'changes', 'archive'),
|
|
327
344
|
];
|
|
328
345
|
for (const dir of directories) {
|
|
329
346
|
await FileSystemUtils.createDirectory(dir);
|
|
@@ -349,7 +366,7 @@ export class InitCommand {
|
|
|
349
366
|
const shouldGenerateCommands = delivery !== 'skills';
|
|
350
367
|
const skillTemplates = shouldGenerateSkills ? getSkillTemplates(workflows) : [];
|
|
351
368
|
const commandContents = shouldGenerateCommands ? getCommandContents(workflows) : [];
|
|
352
|
-
const useSpinner = tools.length === 1;
|
|
369
|
+
const useSpinner = !this.silent && tools.length === 1;
|
|
353
370
|
const toolResults = await Promise.all(tools.map(async (tool) => {
|
|
354
371
|
const spinner = useSpinner ? ora(`Setting up ${tool.name}...`).start() : null;
|
|
355
372
|
try {
|
|
@@ -359,7 +376,7 @@ export class InitCommand {
|
|
|
359
376
|
const skillDir = path.join(skillsDir, dirName);
|
|
360
377
|
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
361
378
|
const transformer = tool.value === 'opencode' ? transformToHyphenCommands : undefined;
|
|
362
|
-
const skillContent = generateSkillContent(template,
|
|
379
|
+
const skillContent = generateSkillContent(template, CODESDD_VERSION, transformer);
|
|
363
380
|
await FileSystemUtils.writeFile(skillFile, skillContent);
|
|
364
381
|
}));
|
|
365
382
|
}
|
|
@@ -437,9 +454,9 @@ export class InitCommand {
|
|
|
437
454
|
// ═══════════════════════════════════════════════════════════
|
|
438
455
|
// CONFIG FILE
|
|
439
456
|
// ═══════════════════════════════════════════════════════════
|
|
440
|
-
async createConfig(
|
|
441
|
-
const configPath = path.join(
|
|
442
|
-
const configYmlPath = path.join(
|
|
457
|
+
async createConfig(codesddPath, _extendMode) {
|
|
458
|
+
const configPath = path.join(codesddPath, 'config.yaml');
|
|
459
|
+
const configYmlPath = path.join(codesddPath, 'config.yml');
|
|
443
460
|
const configYamlExists = fs.existsSync(configPath);
|
|
444
461
|
const configYmlExists = fs.existsSync(configYmlPath);
|
|
445
462
|
if (configYamlExists || configYmlExists) {
|
|
@@ -451,15 +468,18 @@ export class InitCommand {
|
|
|
451
468
|
// UI & OUTPUT
|
|
452
469
|
// ═══════════════════════════════════════════════════════════
|
|
453
470
|
displaySuccessMessage(projectPath, tools, results, configStatus) {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
471
|
+
if (this.silent) {
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
this.log();
|
|
475
|
+
this.log(chalk.bold(`${CLI_PRODUCT_NAME} Setup Complete`));
|
|
476
|
+
this.log();
|
|
457
477
|
// Show created vs refreshed tools
|
|
458
478
|
if (results.createdTools.length > 0) {
|
|
459
|
-
|
|
479
|
+
this.log(`Created: ${results.createdTools.map((t) => t.name).join(', ')}`);
|
|
460
480
|
}
|
|
461
481
|
if (results.refreshedTools.length > 0) {
|
|
462
|
-
|
|
482
|
+
this.log(`Refreshed: ${results.refreshedTools.map((t) => t.name).join(', ')}`);
|
|
463
483
|
}
|
|
464
484
|
// Show counts (respecting profile filter)
|
|
465
485
|
const successfulTools = [...results.createdTools, ...results.refreshedTools];
|
|
@@ -472,66 +492,68 @@ export class InitCommand {
|
|
|
472
492
|
const skillCount = delivery !== 'commands' ? getSkillTemplates(workflows).length : 0;
|
|
473
493
|
const commandCount = delivery !== 'skills' ? getCommandContents(workflows).length : 0;
|
|
474
494
|
if (skillCount > 0 && commandCount > 0) {
|
|
475
|
-
|
|
495
|
+
this.log(`${skillCount} skills and ${commandCount} commands in ${toolDirs}/`);
|
|
476
496
|
}
|
|
477
497
|
else if (skillCount > 0) {
|
|
478
|
-
|
|
498
|
+
this.log(`${skillCount} skills in ${toolDirs}/`);
|
|
479
499
|
}
|
|
480
500
|
else if (commandCount > 0) {
|
|
481
|
-
|
|
501
|
+
this.log(`${commandCount} commands in ${toolDirs}/`);
|
|
482
502
|
}
|
|
483
503
|
}
|
|
484
504
|
// Show failures
|
|
485
505
|
if (results.failedTools.length > 0) {
|
|
486
|
-
|
|
506
|
+
this.log(chalk.red(`Failed: ${results.failedTools.map((f) => `${f.name} (${f.error.message})`).join(', ')}`));
|
|
487
507
|
}
|
|
488
508
|
// Show skipped commands
|
|
489
509
|
if (results.commandsSkipped.length > 0) {
|
|
490
|
-
|
|
510
|
+
this.log(chalk.dim(`Commands skipped for: ${results.commandsSkipped.join(', ')} (no adapter)`));
|
|
491
511
|
}
|
|
492
512
|
if (results.removedCommandCount > 0) {
|
|
493
|
-
|
|
513
|
+
this.log(chalk.dim(`Removed: ${results.removedCommandCount} command files (delivery: skills)`));
|
|
494
514
|
}
|
|
495
515
|
if (results.removedSkillCount > 0) {
|
|
496
|
-
|
|
516
|
+
this.log(chalk.dim(`Removed: ${results.removedSkillCount} skill directories (delivery: commands)`));
|
|
497
517
|
}
|
|
498
518
|
// Config status
|
|
499
519
|
if (configStatus === 'exists') {
|
|
500
520
|
// Show actual filename (config.yaml or config.yml)
|
|
501
|
-
const
|
|
502
|
-
const
|
|
521
|
+
const configRoot = resolveLegacySpecLiveRoot(projectPath);
|
|
522
|
+
const configRootDisplay = path.relative(projectPath, configRoot) || LEGACY_SPEC_DIR_NAME;
|
|
523
|
+
const configYaml = path.join(configRoot, 'config.yaml');
|
|
524
|
+
const configYml = path.join(configRoot, 'config.yml');
|
|
503
525
|
const configName = fs.existsSync(configYaml) ? 'config.yaml' : fs.existsSync(configYml) ? 'config.yml' : 'config.yaml';
|
|
504
|
-
|
|
526
|
+
this.log(`Legacy config: ${configRootDisplay}/${configName} (exists)`);
|
|
505
527
|
}
|
|
506
528
|
else {
|
|
507
|
-
|
|
529
|
+
this.log(chalk.dim(`Project config: not created (SDD uses .sdd/config.yaml)`));
|
|
508
530
|
}
|
|
509
531
|
// Getting started (task 7.6: show propose if in profile)
|
|
510
532
|
const globalCfg = getGlobalConfig();
|
|
511
533
|
const activeProfile = this.profileOverride ?? globalCfg.profile ?? 'core';
|
|
512
534
|
const activeWorkflows = [...getProfileWorkflows(activeProfile, globalCfg.workflows)];
|
|
513
|
-
|
|
535
|
+
this.log();
|
|
514
536
|
if (activeWorkflows.includes('propose')) {
|
|
515
|
-
|
|
516
|
-
|
|
537
|
+
this.log(chalk.bold('Getting started:'));
|
|
538
|
+
this.log(' Start your first change: /opsx:propose "your idea"');
|
|
517
539
|
}
|
|
518
540
|
else if (activeWorkflows.includes('new')) {
|
|
519
|
-
|
|
520
|
-
|
|
541
|
+
this.log(chalk.bold('Getting started:'));
|
|
542
|
+
this.log(' Start your first change: /opsx:new "your idea"');
|
|
521
543
|
}
|
|
522
544
|
else {
|
|
523
|
-
|
|
545
|
+
this.log(`Done. Run '${CLI_NAME} config profile' to configure your workflows.`);
|
|
524
546
|
}
|
|
525
547
|
// Links
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
548
|
+
this.log();
|
|
549
|
+
this.log(`Learn more: ${chalk.cyan(CLI_REPOSITORY_URL)}`);
|
|
550
|
+
this.log(`Feedback: ${chalk.cyan(CLI_ISSUES_URL)}`);
|
|
529
551
|
// Restart instruction if any tools were configured
|
|
530
552
|
if (results.createdTools.length > 0 || results.refreshedTools.length > 0) {
|
|
531
|
-
|
|
532
|
-
|
|
553
|
+
this.log();
|
|
554
|
+
this.log(chalk.white('Restart your IDE for slash commands to take effect.'));
|
|
533
555
|
}
|
|
534
|
-
|
|
556
|
+
this.log();
|
|
535
557
|
}
|
|
536
558
|
async removeSkillDirs(skillsDir) {
|
|
537
559
|
let removed = 0;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Legacy cleanup module for detecting and removing
|
|
2
|
+
* Legacy cleanup module for detecting and removing CodeSDD artifacts
|
|
3
3
|
* from previous init versions during the migration to the skill-based workflow.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Legacy config file names from the old ToolRegistry.
|
|
7
|
-
* These were config files created at project root with
|
|
7
|
+
* These were config files created at project root with CodeSDD markers.
|
|
8
8
|
*/
|
|
9
9
|
export declare const LEGACY_CONFIG_FILES: readonly ["CLAUDE.md", "CLINE.md", "CODEBUDDY.md", "COSTRICT.md", "QODER.md", "IFLOW.md", "AGENTS.md", "QWEN.md"];
|
|
10
10
|
/**
|
|
@@ -25,7 +25,7 @@ export interface LegacySlashCommandPattern {
|
|
|
25
25
|
* Result of legacy artifact detection
|
|
26
26
|
*/
|
|
27
27
|
export interface LegacyDetectionResult {
|
|
28
|
-
/** Config files with
|
|
28
|
+
/** Config files with CodeSDD markers detected */
|
|
29
29
|
configFiles: string[];
|
|
30
30
|
/** Config files to update (remove markers only, never delete) */
|
|
31
31
|
configFilesToUpdate: string[];
|
|
@@ -33,24 +33,24 @@ export interface LegacyDetectionResult {
|
|
|
33
33
|
slashCommandDirs: string[];
|
|
34
34
|
/** Legacy slash command files found (for file-based tools) */
|
|
35
35
|
slashCommandFiles: string[];
|
|
36
|
-
/** Whether
|
|
36
|
+
/** Whether legacy-spec/AGENTS.md exists */
|
|
37
37
|
hasOpenspecAgents: boolean;
|
|
38
|
-
/** Whether
|
|
38
|
+
/** Whether legacy-spec/project.md exists (preserved, migration hint only) */
|
|
39
39
|
hasProjectMd: boolean;
|
|
40
|
-
/** Whether root AGENTS.md has
|
|
40
|
+
/** Whether root AGENTS.md has CodeSDD markers */
|
|
41
41
|
hasRootAgentsWithMarkers: boolean;
|
|
42
42
|
/** Whether any legacy artifacts were found */
|
|
43
43
|
hasLegacyArtifacts: boolean;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
|
-
* Detects all legacy
|
|
46
|
+
* Detects all legacy CodeSDD artifacts in a project.
|
|
47
47
|
*
|
|
48
48
|
* @param projectPath - The root path of the project
|
|
49
49
|
* @returns Detection result with all found legacy artifacts
|
|
50
50
|
*/
|
|
51
51
|
export declare function detectLegacyArtifacts(projectPath: string): Promise<LegacyDetectionResult>;
|
|
52
52
|
/**
|
|
53
|
-
* Detects legacy config files with
|
|
53
|
+
* Detects legacy config files with CodeSDD markers.
|
|
54
54
|
* All config files with markers are candidates for update (marker removal only).
|
|
55
55
|
* Config files are NEVER deleted - they belong to the user's project root.
|
|
56
56
|
*
|
|
@@ -72,7 +72,7 @@ export declare function detectLegacySlashCommands(projectPath: string): Promise<
|
|
|
72
72
|
files: string[];
|
|
73
73
|
}>;
|
|
74
74
|
/**
|
|
75
|
-
* Detects legacy
|
|
75
|
+
* Detects legacy CodeSDD structure files (AGENTS.md and project.md).
|
|
76
76
|
*
|
|
77
77
|
* @param projectPath - The root path of the project
|
|
78
78
|
* @returns Object with detection results for structure files
|
|
@@ -83,25 +83,25 @@ export declare function detectLegacyStructureFiles(projectPath: string): Promise
|
|
|
83
83
|
hasRootAgentsWithMarkers: boolean;
|
|
84
84
|
}>;
|
|
85
85
|
/**
|
|
86
|
-
* Checks if content contains
|
|
86
|
+
* Checks if content contains CodeSDD markers.
|
|
87
87
|
*
|
|
88
88
|
* @param content - File content to check
|
|
89
89
|
* @returns True if both start and end markers are present
|
|
90
90
|
*/
|
|
91
|
-
export declare function
|
|
91
|
+
export declare function hasCodeSDDMarkers(content: string): boolean;
|
|
92
92
|
/**
|
|
93
|
-
* Checks if file content is 100%
|
|
93
|
+
* Checks if file content is 100% CodeSDD content (only markers and whitespace outside).
|
|
94
94
|
*
|
|
95
95
|
* @param content - File content to check
|
|
96
96
|
* @returns True if content outside markers is only whitespace
|
|
97
97
|
*/
|
|
98
|
-
export declare function
|
|
98
|
+
export declare function isOnlyCodeSDDContent(content: string): boolean;
|
|
99
99
|
/**
|
|
100
|
-
* Removes the
|
|
100
|
+
* Removes the CodeSDD marker block from file content.
|
|
101
101
|
* Only removes markers that are on their own lines (ignores inline mentions).
|
|
102
102
|
* Cleans up double blank lines that may result from removal.
|
|
103
103
|
*
|
|
104
|
-
* @param content - File content with
|
|
104
|
+
* @param content - File content with CodeSDD markers
|
|
105
105
|
* @returns Content with marker block removed
|
|
106
106
|
*/
|
|
107
107
|
export declare function removeMarkerBlock(content: string): string;
|
|
@@ -121,8 +121,8 @@ export interface CleanupResult {
|
|
|
121
121
|
errors: string[];
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
|
-
* Cleans up legacy
|
|
125
|
-
* Preserves
|
|
124
|
+
* Cleans up legacy CodeSDD artifacts from a project.
|
|
125
|
+
* Preserves legacy-spec/project.md (shows migration hint instead of deleting).
|
|
126
126
|
*
|
|
127
127
|
* @param projectPath - The root path of the project
|
|
128
128
|
* @param detection - Detection result from detectLegacyArtifacts
|