@entelligentsia/forgecli 0.20.3 → 1.0.2
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/CHANGELOG.md +40 -0
- package/README.md +31 -33
- package/dist/CHANGELOG-forge-plugin.md +118 -0
- package/dist/CHANGELOG-pi.md +24 -1
- package/dist/bin/forgecli.d.ts +2 -0
- package/dist/bin/forgecli.js +6 -0
- package/dist/bin/forgecli.js.map +1 -0
- package/dist/extensions/forgecli/add-pipeline.js +1 -1
- package/dist/extensions/forgecli/add-pipeline.js.map +1 -1
- package/dist/extensions/forgecli/add-task.js +1 -1
- package/dist/extensions/forgecli/add-task.js.map +1 -1
- package/dist/extensions/forgecli/approve.js +17 -2
- package/dist/extensions/forgecli/approve.js.map +1 -1
- package/dist/extensions/forgecli/calibrate.js +11 -8
- package/dist/extensions/forgecli/calibrate.js.map +1 -1
- package/dist/extensions/forgecli/collate.js +1 -1
- package/dist/extensions/forgecli/collate.js.map +1 -1
- package/dist/extensions/forgecli/commit.js +17 -2
- package/dist/extensions/forgecli/commit.js.map +1 -1
- package/dist/extensions/forgecli/enhance.js +1 -1
- package/dist/extensions/forgecli/enhance.js.map +1 -1
- package/dist/extensions/forgecli/fix-bug.d.ts +1 -1
- package/dist/extensions/forgecli/fix-bug.js +14 -6
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.d.ts +6 -8
- package/dist/extensions/forgecli/forge-artifact-tool.js +80 -195
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-commands.js +57 -18
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/phase4-register.js +6 -7
- package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/run-phases.d.ts +4 -0
- package/dist/extensions/forgecli/forge-init/run-phases.js +304 -0
- package/dist/extensions/forgecli/forge-init/run-phases.js.map +1 -0
- package/dist/extensions/forgecli/forge-init/verifiers.d.ts +14 -5
- package/dist/extensions/forgecli/forge-init/verifiers.js +79 -62
- package/dist/extensions/forgecli/forge-init/verifiers.js.map +1 -1
- package/dist/extensions/forgecli/forge-init.js +131 -76
- package/dist/extensions/forgecli/forge-init.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +9 -0
- package/dist/extensions/forgecli/forge-subagent.js +11 -6
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +28 -4
- package/dist/extensions/forgecli/forge-tools.js +122 -73
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/health-check.js +3 -3
- package/dist/extensions/forgecli/health-check.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +1 -1
- package/dist/extensions/forgecli/hooks/check-update.d.ts +8 -0
- package/dist/extensions/forgecli/hooks/check-update.js +29 -1
- package/dist/extensions/forgecli/hooks/check-update.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-init-hook.js +6 -6
- package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js +6 -6
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -1
- package/dist/extensions/forgecli/hooks/triage-error.js +1 -0
- package/dist/extensions/forgecli/hooks/triage-error.js.map +1 -1
- package/dist/extensions/forgecli/implement.js +20 -2
- package/dist/extensions/forgecli/implement.js.map +1 -1
- package/dist/extensions/forgecli/index.js +39 -32
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/lib/pipeline-guard.d.ts +41 -0
- package/dist/extensions/forgecli/lib/pipeline-guard.js +100 -0
- package/dist/extensions/forgecli/lib/pipeline-guard.js.map +1 -0
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js +2 -2
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +1 -1
- package/dist/extensions/forgecli/migrate.d.ts +3 -0
- package/dist/extensions/forgecli/migrate.js +4 -2
- package/dist/extensions/forgecli/migrate.js.map +1 -1
- package/dist/extensions/forgecli/plan.js +21 -2
- package/dist/extensions/forgecli/plan.js.map +1 -1
- package/dist/extensions/forgecli/quiz-agent.js +7 -7
- package/dist/extensions/forgecli/quiz-agent.js.map +1 -1
- package/dist/extensions/forgecli/regenerate.js +49 -18
- package/dist/extensions/forgecli/regenerate.js.map +1 -1
- package/dist/extensions/forgecli/remove-command.js +1 -1
- package/dist/extensions/forgecli/remove-command.js.map +1 -1
- package/dist/extensions/forgecli/report-bug.js +1 -1
- package/dist/extensions/forgecli/report-bug.js.map +1 -1
- package/dist/extensions/forgecli/retrospective.js +9 -9
- package/dist/extensions/forgecli/retrospective.js.map +1 -1
- package/dist/extensions/forgecli/review-code.d.ts +13 -0
- package/dist/extensions/forgecli/review-code.js +62 -3
- package/dist/extensions/forgecli/review-code.js.map +1 -1
- package/dist/extensions/forgecli/review-plan.d.ts +13 -0
- package/dist/extensions/forgecli/review-plan.js +65 -3
- package/dist/extensions/forgecli/review-plan.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +2 -1
- package/dist/extensions/forgecli/run-task.js +48 -4
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/skill-curator-subagent.d.ts +2 -1
- package/dist/extensions/forgecli/skill-curator-subagent.js +2 -1
- package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -1
- package/dist/extensions/forgecli/sprint-intake.js +6 -6
- package/dist/extensions/forgecli/sprint-intake.js.map +1 -1
- package/dist/extensions/forgecli/sprint-plan.js +9 -9
- package/dist/extensions/forgecli/sprint-plan.js.map +1 -1
- package/dist/extensions/forgecli/status-command.js +1 -1
- package/dist/extensions/forgecli/status-command.js.map +1 -1
- package/dist/extensions/forgecli/store-query.js +11 -11
- package/dist/extensions/forgecli/store-query.js.map +1 -1
- package/dist/extensions/forgecli/store-repair.js +7 -7
- package/dist/extensions/forgecli/store-repair.js.map +1 -1
- package/dist/extensions/forgecli/validate.js +17 -2
- package/dist/extensions/forgecli/validate.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/check-agent.md +22 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +22 -0
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +22 -0
- package/dist/forge-payload/.base-pack/commands/quiz-agent.md +2 -18
- package/dist/forge-payload/.base-pack/commands/retro.md +22 -0
- package/dist/forge-payload/.base-pack/commands/retrospective.md +2 -18
- package/dist/forge-payload/.base-pack/commands/sprint-intake.md +2 -18
- package/dist/forge-payload/.base-pack/commands/sprint-plan.md +2 -18
- package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/generation-instructions.md +4 -4
- package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +13 -1
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +12 -1
- package/dist/forge-payload/.base-pack/workflows/enhance.md +40 -10
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +14 -2
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +20 -4
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +14 -2
- package/dist/forge-payload/.base-pack/workflows/review_code.md +37 -7
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +36 -6
- package/dist/forge-payload/.base-pack/workflows/run_sprint.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +37 -7
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/config.schema.json +0 -5
- package/dist/forge-payload/.schemas/enum-catalog.json +9 -13
- package/dist/forge-payload/.schemas/migrations.json +65 -0
- package/dist/forge-payload/agents/tomoshibi.md +150 -6
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +1 -1
- package/dist/forge-payload/commands/calibrate.md +4 -350
- package/dist/forge-payload/commands/check-agent.md +38 -0
- package/dist/forge-payload/commands/config.md +3 -113
- package/dist/forge-payload/commands/enhance.md +5 -32
- package/dist/forge-payload/commands/health.md +155 -13
- package/dist/forge-payload/commands/init.md +25 -31
- package/dist/forge-payload/commands/migrate.md +6 -154
- package/dist/forge-payload/commands/quiz-agent.md +2 -34
- package/dist/forge-payload/commands/rebuild.md +664 -0
- package/dist/forge-payload/commands/regenerate.md +2 -774
- package/dist/forge-payload/commands/remove.md +10 -13
- package/dist/forge-payload/commands/repair.md +187 -0
- package/dist/forge-payload/commands/search.md +73 -0
- package/dist/forge-payload/commands/status.md +105 -0
- package/dist/forge-payload/commands/store-query.md +2 -69
- package/dist/forge-payload/commands/store-repair.md +2 -183
- package/dist/forge-payload/commands/update-tools.md +4 -50
- package/dist/forge-payload/commands/update.md +64 -58
- package/dist/forge-payload/hooks/check-update.cjs +1 -1
- package/dist/forge-payload/hooks/post-init.cjs +2 -2
- package/dist/forge-payload/hooks/post-sprint.cjs +2 -2
- package/dist/forge-payload/hooks/triage-error.cjs +11 -10
- package/dist/forge-payload/init/phases/phase-1-collect.md +138 -0
- package/dist/forge-payload/init/phases/phase-2-discover.md +127 -0
- package/dist/forge-payload/init/phases/phase-3-materialize.md +113 -0
- package/dist/forge-payload/init/phases/phase-4-register.md +159 -0
- package/dist/forge-payload/integrity.json +21 -24
- package/dist/forge-payload/meta/fragments/tool-discipline.md +22 -0
- package/dist/forge-payload/meta/templates/meta-retro.md +28 -0
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +2 -2
- package/dist/forge-payload/meta/workflows/_fragments/generation-instructions.md +4 -4
- package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-approve.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-check-agent.md +138 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +12 -1
- package/dist/forge-payload/meta/workflows/meta-enhance.md +39 -9
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-implement.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-migrate.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-new-sprint.md +84 -0
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +20 -4
- package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +152 -0
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +13 -1
- package/dist/forge-payload/meta/workflows/meta-retro.md +73 -0
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +37 -7
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +36 -6
- package/dist/forge-payload/meta/workflows/meta-validate.md +37 -7
- package/dist/forge-payload/schemas/config.schema.json +0 -5
- package/dist/forge-payload/schemas/enum-catalog.json +9 -13
- package/dist/forge-payload/schemas/structure-manifest.json +6 -8
- package/dist/forge-payload/tools/artifact.cjs +295 -0
- package/dist/forge-payload/tools/banners.cjs +3 -4
- package/dist/forge-payload/tools/build-context-pack.cjs +1 -1
- package/dist/forge-payload/tools/check-structure.cjs +8 -3
- package/dist/forge-payload/tools/store-cli.cjs +67 -7
- package/dist/forge-payload/tools/substitute-placeholders.cjs +1 -1
- package/dist/forge-payload/tools/verify-apply.cjs +75 -0
- package/dist/forge-payload/tools/verify-phase.cjs +259 -0
- package/node_modules/@earendil-works/pi-agent-core/package.json +2 -2
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +0 -17
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +21 -38
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js +5 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +5 -2
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +24 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/file-processor.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js +52 -22
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/output-guard.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js +16 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js +45 -50
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js +43 -81
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js +27 -12
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js +2 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js +3 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js +5 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js +37 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/path-utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +9 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js +20 -35
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +64 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +15 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts +3 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js +14 -8
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/clipboard-native.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts +30 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js +124 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-core.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js +31 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize-worker.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts +7 -27
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js +75 -115
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/image-resize.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +12 -14
- package/node_modules/@earendil-works/pi-coding-agent/package.json +5 -5
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +3 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +53 -0
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +4 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +2 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +13 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/package.json +6 -6
- package/dist/extensions/forgecli/forge-init/phase-descriptors.d.ts +0 -72
- package/dist/extensions/forgecli/forge-init/phase-descriptors.js +0 -359
- package/dist/extensions/forgecli/forge-init/phase-descriptors.js.map +0 -1
- package/dist/extensions/forgecli/forge-init/prompts.d.ts +0 -10
- package/dist/extensions/forgecli/forge-init/prompts.js +0 -91
- package/dist/extensions/forgecli/forge-init/prompts.js.map +0 -1
- package/dist/extensions/forgecli/lib/store-error-remediation.d.ts +0 -65
- package/dist/extensions/forgecli/lib/store-error-remediation.js +0 -298
- package/dist/extensions/forgecli/lib/store-error-remediation.js.map +0 -1
- package/dist/forge-payload/hooks/check-update.js +0 -378
- package/dist/forge-payload/hooks/forge-permissions.js +0 -164
- package/dist/forge-payload/hooks/triage-error.js +0 -77
- package/dist/forge-payload/hooks/validate-write.js +0 -250
|
@@ -1,153 +1,58 @@
|
|
|
1
|
-
// forge-artifact-tool.ts —
|
|
1
|
+
// forge-artifact-tool.ts — thin runCjs shim delegating to plugin artifact.cjs.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// All logic (artifact catalog, path resolution, summary JSON validation) lives
|
|
4
|
+
// in forge/forge/tools/artifact.cjs as the canonical plugin-side implementation.
|
|
5
|
+
// This module is a lightweight wrapper that dispatches read/write/list calls via
|
|
6
|
+
// runCjs to the plugin tool, keeping forge-cli in sync automatically whenever
|
|
7
|
+
// the plugin is updated.
|
|
6
8
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// derivable from the ID alone.
|
|
12
|
-
import { execFileSync } from "node:child_process";
|
|
9
|
+
// Content-passing strategy for write:
|
|
10
|
+
// - Inline (<64KB): content is passed as the 4th positional argv argument.
|
|
11
|
+
// - Large (>=64KB): content is written to a temp file and passed as @<path>.
|
|
12
|
+
// artifact.cjs recognises the @-prefix convention and reads from the file.
|
|
13
13
|
import * as fs from "node:fs";
|
|
14
|
+
import * as os from "node:os";
|
|
14
15
|
import * as path from "node:path";
|
|
15
16
|
import { Type } from "typebox";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"plan
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"review-
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
function validateSummaryJson(content) {
|
|
45
|
-
let obj;
|
|
46
|
-
try {
|
|
47
|
-
obj = JSON.parse(content);
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
return `Invalid JSON: ${e.message}`;
|
|
51
|
-
}
|
|
52
|
-
const missing = SUMMARY_REQUIRED.filter((f) => !(f in obj));
|
|
53
|
-
if (missing.length > 0)
|
|
54
|
-
return `Missing required fields: ${missing.join(", ")}`;
|
|
55
|
-
if (typeof obj.objective !== "string")
|
|
56
|
-
return `"objective" must be a string`;
|
|
57
|
-
if (!Array.isArray(obj.key_changes))
|
|
58
|
-
return `"key_changes" must be an array`;
|
|
59
|
-
if (typeof obj.verdict !== "string")
|
|
60
|
-
return `"verdict" must be a string`;
|
|
61
|
-
if (typeof obj.written_at !== "string")
|
|
62
|
-
return `"written_at" must be a string`;
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
// ── Entity path resolution ──────────────────────────────────────────────────
|
|
66
|
-
/**
|
|
67
|
-
* Test override for readStorePath — allows unit tests to inject a mock
|
|
68
|
-
* without touching node:child_process. Reset to {} after each test.
|
|
69
|
-
*/
|
|
70
|
-
export const _testOverrides = {};
|
|
71
|
-
/** Read a store record via store-cli and return its `path` field, or null on failure. */
|
|
72
|
-
function readStorePath(entity, entityId, toolDir, projectRoot) {
|
|
73
|
-
// Test injection: if a mock is set, use it directly.
|
|
74
|
-
if (_testOverrides.readStorePath) {
|
|
75
|
-
return _testOverrides.readStorePath(entity, entityId, toolDir, projectRoot);
|
|
76
|
-
}
|
|
77
|
-
const cliPath = path.join(toolDir, "store-cli.cjs");
|
|
78
|
-
try {
|
|
79
|
-
const result = execFileSync("node", [cliPath, "read", entity, entityId, "--json"], {
|
|
80
|
-
cwd: projectRoot,
|
|
81
|
-
encoding: "utf8",
|
|
82
|
-
timeout: 10_000,
|
|
83
|
-
});
|
|
84
|
-
const record = JSON.parse(result);
|
|
85
|
-
if (typeof record.path === "string" && record.path.length > 0) {
|
|
86
|
-
return record.path;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// Store unavailable or record not found — fall through to ID-only resolution.
|
|
91
|
-
}
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Resolve entity directory using the store record's `path` field when available,
|
|
96
|
-
* falling back to ID-only construction for tasks (sprint dir derived from
|
|
97
|
-
* sprint record path or sprint ID) and sprints/bugs (direct ID).
|
|
98
|
-
*
|
|
99
|
-
* forge-cli#33: the store record is the canonical source for entity directory
|
|
100
|
-
* paths — slug-suffixed directories like `BUG-001-sprint-runner-context-accumulation`
|
|
101
|
-
* cannot be derived from the entity ID alone.
|
|
102
|
-
*/
|
|
103
|
-
function resolveEntityDir(entity, entityId, engineeringPath, toolDir, projectRoot) {
|
|
104
|
-
switch (entity) {
|
|
105
|
-
case "bug": {
|
|
106
|
-
// Read bug record's path field — canonical source for slug-suffixed dirs.
|
|
107
|
-
const storePath = readStorePath("bug", entityId, toolDir, projectRoot);
|
|
108
|
-
if (storePath)
|
|
109
|
-
return storePath;
|
|
110
|
-
// Fallback: ID-only construction.
|
|
111
|
-
return path.join(engineeringPath, "bugs", entityId);
|
|
112
|
-
}
|
|
113
|
-
case "sprint": {
|
|
114
|
-
const storePath = readStorePath("sprint", entityId, toolDir, projectRoot);
|
|
115
|
-
if (storePath)
|
|
116
|
-
return storePath;
|
|
117
|
-
return path.join(engineeringPath, "sprints", entityId);
|
|
118
|
-
}
|
|
119
|
-
case "task": {
|
|
120
|
-
// For tasks, the path includes the sprint directory (which may have
|
|
121
|
-
// a slug suffix). Read the task record's path field.
|
|
122
|
-
const storePath = readStorePath("task", entityId, toolDir, projectRoot);
|
|
123
|
-
if (storePath)
|
|
124
|
-
return storePath;
|
|
125
|
-
// Fallback: derive from sprint prefix. Try sprint record for slug.
|
|
126
|
-
const match = entityId.match(/^(.+-S\d+)-T\d+$/);
|
|
127
|
-
if (!match)
|
|
128
|
-
return null;
|
|
129
|
-
const sprintId = match[1];
|
|
130
|
-
const sprintPath = readStorePath("sprint", sprintId, toolDir, projectRoot);
|
|
131
|
-
if (sprintPath) {
|
|
132
|
-
return path.join(sprintPath, entityId);
|
|
133
|
-
}
|
|
134
|
-
// Last resort: ID-only construction.
|
|
135
|
-
return path.join(engineeringPath, "sprints", sprintId, entityId);
|
|
136
|
-
}
|
|
137
|
-
default:
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
17
|
+
import { runCjs as defaultRunCjs } from "./forge-tools.js";
|
|
18
|
+
// ── Artifact name list (for parameter description only — logic lives in plugin) ──
|
|
19
|
+
const ARTIFACT_NAMES = [
|
|
20
|
+
"plan",
|
|
21
|
+
"plan-review",
|
|
22
|
+
"progress",
|
|
23
|
+
"code-review",
|
|
24
|
+
"validation-report",
|
|
25
|
+
"architect-approval",
|
|
26
|
+
"triage",
|
|
27
|
+
"bug-report",
|
|
28
|
+
"index",
|
|
29
|
+
"cost-report",
|
|
30
|
+
"timesheet",
|
|
31
|
+
"plan-summary",
|
|
32
|
+
"review-plan-summary",
|
|
33
|
+
"implementation-summary",
|
|
34
|
+
"review-code-summary",
|
|
35
|
+
"review-impl-summary",
|
|
36
|
+
"validation-summary",
|
|
37
|
+
"approve-summary",
|
|
38
|
+
"commit-summary",
|
|
39
|
+
"triage-summary",
|
|
40
|
+
"writeback-summary",
|
|
41
|
+
"collation-summary",
|
|
42
|
+
].sort();
|
|
43
|
+
const ARTIFACT_NAME_LIST = ARTIFACT_NAMES.join(", ");
|
|
44
|
+
const INLINE_CONTENT_LIMIT = 64 * 1024; // 64KB
|
|
141
45
|
// ── Tool builder ────────────────────────────────────────────────────────────
|
|
142
|
-
export function buildForgeArtifact(projectRoot,
|
|
143
|
-
const
|
|
46
|
+
export function buildForgeArtifact(projectRoot, _engineeringPath, toolDir, _runCjsOverride) {
|
|
47
|
+
const toolPath = path.join(toolDir, "artifact.cjs");
|
|
48
|
+
const runCjs = _runCjsOverride ?? defaultRunCjs;
|
|
144
49
|
return {
|
|
145
50
|
name: "forge_artifact",
|
|
146
51
|
label: "Forge Artifact",
|
|
147
52
|
description: "Read, write, or list phase artifacts (PLAN.md, PROGRESS.md, *-SUMMARY.json, etc.) " +
|
|
148
53
|
"for a task, bug, or sprint. Resolves paths automatically from entity ID — never " +
|
|
149
54
|
"construct artifact paths manually.\n\n" +
|
|
150
|
-
`Known artifacts: ${
|
|
55
|
+
`Known artifacts: ${ARTIFACT_NAME_LIST}.\n\n` +
|
|
151
56
|
"JSON summary artifacts are validated on write (objective, key_changes, verdict, written_at required). " +
|
|
152
57
|
"Use 'list' to see which artifacts already exist for an entity.",
|
|
153
58
|
promptSnippet: "Use forge_artifact to read/write phase outputs (PLAN.md, PROGRESS.md, *-SUMMARY.json). " +
|
|
@@ -163,82 +68,62 @@ export function buildForgeArtifact(projectRoot, engineeringPath, toolDir) {
|
|
|
163
68
|
description: "Entity ID (e.g. HELLO-S99-T02, HELLO-B01-shout-flag, HELLO-S99).",
|
|
164
69
|
}),
|
|
165
70
|
artifact: Type.Optional(Type.String({
|
|
166
|
-
description: `Artifact name (required for read/write). One of: ${
|
|
71
|
+
description: `Artifact name (required for read/write). One of: ${ARTIFACT_NAME_LIST}.`,
|
|
167
72
|
})),
|
|
168
73
|
content: Type.Optional(Type.String({
|
|
169
74
|
description: "Content to write (required for write command).",
|
|
170
75
|
})),
|
|
171
76
|
}),
|
|
172
|
-
async execute(_toolCallId, _params) {
|
|
77
|
+
async execute(_toolCallId, _params, signal) {
|
|
173
78
|
const params = _params;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return okResult(`No artifacts found — directory does not exist: ${entityDir}/`);
|
|
79
|
+
let tmpFile = null;
|
|
80
|
+
try {
|
|
81
|
+
const argv = [params.command, params.entity, params.entityId];
|
|
82
|
+
if (params.command !== "list") {
|
|
83
|
+
if (!params.artifact) {
|
|
84
|
+
return errResult(`"artifact" is required for ${params.command}. Known: ${ARTIFACT_NAME_LIST}`);
|
|
85
|
+
}
|
|
86
|
+
argv.push(params.artifact);
|
|
183
87
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
189
|
-
if (
|
|
190
|
-
|
|
88
|
+
if (params.command === "write") {
|
|
89
|
+
if (!params.content) {
|
|
90
|
+
return errResult(`"content" is required for write.`);
|
|
91
|
+
}
|
|
92
|
+
const bytes = Buffer.byteLength(params.content, "utf8");
|
|
93
|
+
if (bytes >= INLINE_CONTENT_LIMIT) {
|
|
94
|
+
// Write to a temp file and pass @<path>
|
|
95
|
+
tmpFile = path.join(os.tmpdir(), `forge-artifact-${Date.now()}-${process.pid}.tmp`);
|
|
96
|
+
fs.writeFileSync(tmpFile, params.content, "utf8");
|
|
97
|
+
argv.push(`@${tmpFile}`);
|
|
191
98
|
}
|
|
192
99
|
else {
|
|
193
|
-
|
|
100
|
+
argv.push(params.content);
|
|
194
101
|
}
|
|
195
102
|
}
|
|
196
|
-
const
|
|
197
|
-
if (
|
|
198
|
-
|
|
199
|
-
if (other.length > 0)
|
|
200
|
-
lines.push(...other);
|
|
201
|
-
if (known.length === 0 && other.length === 0)
|
|
202
|
-
lines.push(" (empty)");
|
|
203
|
-
return okResult(lines.join("\n"));
|
|
204
|
-
}
|
|
205
|
-
if (!params.artifact) {
|
|
206
|
-
return errResult(`"artifact" is required for ${params.command}. Known: ${artifactNameList}`);
|
|
207
|
-
}
|
|
208
|
-
const catalogEntry = ARTIFACT_CATALOG[params.artifact];
|
|
209
|
-
if (!catalogEntry) {
|
|
210
|
-
const suggestions = ARTIFACT_NAMES.filter((n) => n.includes(params.artifact.toLowerCase()));
|
|
211
|
-
return errResult(`Unknown artifact "${params.artifact}". Known: ${artifactNameList}.` +
|
|
212
|
-
(suggestions.length > 0 ? ` Did you mean: ${suggestions.join(", ")}?` : ""));
|
|
213
|
-
}
|
|
214
|
-
const filePath = path.join(absDir, catalogEntry.filename);
|
|
215
|
-
if (params.command === "read") {
|
|
216
|
-
if (!fs.existsSync(filePath)) {
|
|
217
|
-
return errResult(`Artifact not found: ${path.join(entityDir, catalogEntry.filename)}`);
|
|
103
|
+
const { stdout, stderr } = await runCjs(toolPath, argv, signal, 10_000, projectRoot);
|
|
104
|
+
if (stderr && stderr.trim()) {
|
|
105
|
+
return errResult(stderr.trim());
|
|
218
106
|
}
|
|
219
|
-
|
|
220
|
-
return okResult(content);
|
|
107
|
+
return okResult(stdout.trim() || "OK");
|
|
221
108
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
109
|
+
catch (err) {
|
|
110
|
+
const e = err;
|
|
111
|
+
return errResult(`forge_artifact failed: ${e.message ?? "unknown error"}`);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
if (tmpFile) {
|
|
115
|
+
try {
|
|
116
|
+
fs.unlinkSync(tmpFile);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* best-effort cleanup */
|
|
231
120
|
}
|
|
232
121
|
}
|
|
233
|
-
fs.mkdirSync(absDir, { recursive: true });
|
|
234
|
-
fs.writeFileSync(filePath, params.content, "utf8");
|
|
235
|
-
return okResult(`Wrote ${Buffer.byteLength(params.content, "utf8")} bytes to ${path.join(entityDir, catalogEntry.filename)}`);
|
|
236
122
|
}
|
|
237
|
-
return errResult(`Unknown command: ${params.command}`);
|
|
238
123
|
},
|
|
239
124
|
};
|
|
240
125
|
}
|
|
241
|
-
// ── Result helpers
|
|
126
|
+
// ── Result helpers ────────────────────────────────────────────────────────────
|
|
242
127
|
function okResult(text) {
|
|
243
128
|
return {
|
|
244
129
|
content: [{ type: "text", text: text || "OK" }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-artifact-tool.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/forge-artifact-tool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"forge-artifact-tool.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/forge-artifact-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ import * as fsSync from "node:fs";
|
|
|
22
22
|
import { promises as fs } from "node:fs";
|
|
23
23
|
import * as path from "node:path";
|
|
24
24
|
import { fileURLToPath } from "node:url";
|
|
25
|
+
// FORGE-S26-T11: registerCalibrate imported to power `forge:health --fix`
|
|
26
|
+
import { registerCalibrate } from "./calibrate.js";
|
|
25
27
|
import { runRefreshKbLinks } from "./refresh-kb-links.js";
|
|
26
28
|
// Resolve the package root for bundle path resolution
|
|
27
29
|
const _PKG_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
|
|
@@ -85,11 +87,49 @@ export function registerForgeCommands(pi, options) {
|
|
|
85
87
|
return { systemPrompt: cachedTomoshibiPrompt };
|
|
86
88
|
});
|
|
87
89
|
// ── /forge:health ─────────────────────────────────────────────────────────
|
|
90
|
+
// FORGE-S26-T11: `--fix` flag detected here; dispatches to calibrate behavior.
|
|
91
|
+
// Without `--fix`, delegates to the plugin's health.md workflow (unchanged).
|
|
92
|
+
//
|
|
93
|
+
// Implementation note: we register a temporary "forge:calibrate-internal"
|
|
94
|
+
// handler backed by registerCalibrate so we can invoke its logic without
|
|
95
|
+
// re-routing through a second pi.registerCommand call. The calibrate handler
|
|
96
|
+
// is invoked via pi.registerCommand with a synthetic name; the outer health
|
|
97
|
+
// handler strips `--fix` and forwards remaining args to it.
|
|
98
|
+
//
|
|
99
|
+
// Simpler approach: registerCalibrate registers on "forge:calibrate" — since
|
|
100
|
+
// that name was redirected to a deprecation stub, we instead delegate directly
|
|
101
|
+
// by constructing a synthetic pi wrapper that only captures the "forge:calibrate"
|
|
102
|
+
// registration and calling it inline.
|
|
88
103
|
pi.registerCommand("forge:health", {
|
|
89
|
-
description: "Assess the project's SDLC knowledge base — config, KB freshness, store integrity"
|
|
104
|
+
description: "Assess the project's SDLC knowledge base — config, KB freshness, store integrity. " +
|
|
105
|
+
"--fix: run drift detection + patch application (former /forge:calibrate behavior).",
|
|
90
106
|
async handler(args, ctx) {
|
|
91
107
|
if (!forgeRoot)
|
|
92
108
|
return outsideProjectNoOp("health", ctx);
|
|
109
|
+
const parts = (args ?? "").trim().split(/\s+/).filter(Boolean);
|
|
110
|
+
const hasFix = parts.includes("--fix");
|
|
111
|
+
if (hasFix) {
|
|
112
|
+
// --fix: delegate to calibrate behavior. Strip --fix from args,
|
|
113
|
+
// pass remainder (e.g. --path <dir>) to calibrate handler.
|
|
114
|
+
const calibrateArgs = parts.filter((p) => p !== "--fix").join(" ");
|
|
115
|
+
// Build a thin synthetic pi wrapper to capture the calibrate handler
|
|
116
|
+
let calibrateHandler;
|
|
117
|
+
const syntheticPi = {
|
|
118
|
+
...pi,
|
|
119
|
+
registerCommand: (name, def) => {
|
|
120
|
+
if (name === "forge:calibrate")
|
|
121
|
+
calibrateHandler = def.handler;
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
registerCalibrate(syntheticPi);
|
|
125
|
+
if (calibrateHandler) {
|
|
126
|
+
await calibrateHandler(calibrateArgs, ctx);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
ctx.ui.notify("× forge:health --fix — calibrate handler unavailable", "error");
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
93
133
|
await delegateMarkdownCommand(pi, forgeRoot, "health", args, ctx);
|
|
94
134
|
},
|
|
95
135
|
});
|
|
@@ -116,6 +156,10 @@ export function registerForgeCommands(pi, options) {
|
|
|
116
156
|
// /forge:status — native v0 handler registered in index.ts via
|
|
117
157
|
// registerStatusCommand (FORGE-S23-T10). Removed delegateMarkdownCommand
|
|
118
158
|
// stub. forge:status stays in EXPLICITLY_REGISTERED_NAMES below.
|
|
159
|
+
// ── v1.0 removed command stubs (FORGE-S26-T10) ───────────────────────────
|
|
160
|
+
// Commands removed in v1.0 emit a deprecation error with migration guidance.
|
|
161
|
+
// Deprecated rename/removal redirects fully removed — old names are now
|
|
162
|
+
// unknown commands. See docs/migration/v0-to-v1.md for the mapping.
|
|
119
163
|
}
|
|
120
164
|
// ── Phase G: registerAllForgeCommands (FORGE-S17-T02) ─────────────────────
|
|
121
165
|
// Enumerate every *.md under dist/forge-payload/.base-pack/commands/ at
|
|
@@ -162,11 +206,16 @@ const EXPLICITLY_REGISTERED_NAMES = new Set([
|
|
|
162
206
|
"forge:status",
|
|
163
207
|
"forge:update",
|
|
164
208
|
"forge:refresh-kb-links",
|
|
165
|
-
|
|
209
|
+
// v1.0 renames — new names registered in their respective handler files
|
|
210
|
+
"forge:new-sprint", // FORGE-S19-T01 → renamed from forge:sprint-intake (FORGE-S26-T10)
|
|
211
|
+
"forge:plan-sprint", // FORGE-S19-T02 → renamed from forge:sprint-plan (FORGE-S26-T10)
|
|
212
|
+
"forge:retro", // FORGE-S23-T06 → renamed from forge:retrospective (FORGE-S26-T10)
|
|
213
|
+
"forge:rebuild", // regenerate.ts → renamed from forge:regenerate (FORGE-S26-T10)
|
|
214
|
+
"forge:search", // FORGE-S23-T10 → renamed from forge:store-query (FORGE-S26-T10)
|
|
215
|
+
"forge:repair", // FORGE-S23-T11 → renamed from forge:store-repair (FORGE-S26-T10)
|
|
216
|
+
"forge:check-agent", // FORGE-S23-T11 → renamed from forge:quiz-agent (FORGE-S26-T10)
|
|
166
217
|
"forge:plan", // FORGE-S20-T05: real handler registered in plan.ts
|
|
167
218
|
"forge:implement", // FORGE-S20-T06: real handler registered in implement.ts
|
|
168
|
-
"forge:sprint-intake", // FORGE-S19-T01: real handler registered in sprint-intake.ts
|
|
169
|
-
"forge:sprint-plan", // FORGE-S19-T02: real handler registered in sprint-plan.ts
|
|
170
219
|
"forge:read", // Real handler registered in index.ts
|
|
171
220
|
"forge:run-task", // FORGE-S21-T02: real handler registered in run-task.ts
|
|
172
221
|
"forge:run-sprint", // FORGE-S21-T03: real handler registered in run-sprint.ts
|
|
@@ -176,21 +225,12 @@ const EXPLICITLY_REGISTERED_NAMES = new Set([
|
|
|
176
225
|
"forge:approve", // FORGE-S21-T10: real kickoff shim registered in approve.ts
|
|
177
226
|
"forge:commit", // FORGE-S21-T10: real kickoff shim registered in commit.ts
|
|
178
227
|
"forge:validate", // FORGE-S21-T10: real kickoff shim registered in validate.ts
|
|
179
|
-
"forge:collate", // FORGE-S21-T10:
|
|
228
|
+
"forge:collate", // FORGE-S21-T10: internal kickoff shim registered in collate.ts (not user-facing in v1.0)
|
|
180
229
|
"forge:threads", // Thread-switcher chip strip; registered in thread-switcher.ts
|
|
181
|
-
"forge:regenerate", // Native handler registered in regenerate.ts — re-materialize .forge/ from bundled payload
|
|
182
|
-
"forge:retrospective", // FORGE-S23-T06: real kickoff shim registered in retrospective.ts
|
|
183
|
-
"forge:calibrate", // FORGE-S23-T08: real orchestrator handler registered in calibrate.ts
|
|
184
|
-
"forge:materialize", // FORGE-S23-T09: Atomic handler registered in materialize.ts
|
|
185
|
-
"forge:migrate", // FORGE-S23-T09: Hybrid handler registered in migrate.ts
|
|
186
|
-
"forge:update-tools", // FORGE-S23-T10: Atomic handler registered in update-tools.ts
|
|
187
|
-
"forge:store-query", // FORGE-S23-T10: Atomic handler registered in store-query.ts
|
|
188
230
|
"forge:add-task", // FORGE-S23-T11: Kickoff shim registered in add-task.ts
|
|
189
231
|
"forge:add-pipeline", // FORGE-S23-T11: Kickoff shim registered in add-pipeline.ts
|
|
190
|
-
"forge:quiz-agent", // FORGE-S23-T11: Kickoff shim registered in quiz-agent.ts
|
|
191
232
|
"forge:remove", // FORGE-S23-T11: Kickoff shim registered in remove-command.ts
|
|
192
233
|
"forge:report-bug", // FORGE-S23-T11: Kickoff shim registered in report-bug.ts
|
|
193
|
-
"forge:store-repair", // FORGE-S23-T11: Kickoff shim registered in store-repair.ts
|
|
194
234
|
]);
|
|
195
235
|
// Alias for backwards-compat with tests that reference REAL_HANDLERS directly.
|
|
196
236
|
// Will be removed after all test references are updated.
|
|
@@ -261,10 +301,9 @@ export function registerAllForgeCommands(pi, options) {
|
|
|
261
301
|
}
|
|
262
302
|
},
|
|
263
303
|
});
|
|
264
|
-
// /forge:enhance:
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
// so the auto-stub loop above skips it.
|
|
304
|
+
// /forge:enhance: REMOVED in v1.0 (FORGE-S26-T10). Deprecation stub registered
|
|
305
|
+
// in registerForgeCommands. EXPLICITLY_REGISTERED_NAMES still lists "forge:enhance"
|
|
306
|
+
// so the auto-stub loop above skips it (the stub is handled separately).
|
|
268
307
|
//
|
|
269
308
|
// /forge:plan: real native kickoff handler is registered in index.ts via
|
|
270
309
|
// registerPlan(pi) — FORGE-S20-T05. EXPLICITLY_REGISTERED_NAMES lists
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-commands.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/forge-commands.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,4DAA4D;AAC5D,iEAAiE;AACjE,sEAAsE;AACtE,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,wCAAwC;AACxC,iEAAiE;AACjE,wDAAwD;AACxD,EAAE;AACF,mEAAmE;AACnE,iEAAiE;AACjE,wEAAwE;AACxE,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,sEAAsE;AACtE,oDAAoD;AAEpD,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"forge-commands.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/forge-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
// forge-init/phase4-register.ts — Phase 4 Register
|
|
1
|
+
// forge-init/phase4-register.ts — Phase 4 Register (FORGE-S25-T24, B-5)
|
|
2
2
|
//
|
|
3
|
-
// Encapsulates Steps 4-1 through 4-11 from the
|
|
4
|
-
// Phase 4 is heterogeneous (11 deterministic FS/tool/git steps, no LLM dispatch)
|
|
5
|
-
// is
|
|
6
|
-
// standalone async function.
|
|
3
|
+
// Encapsulates Steps 4-1 through 4-11 from the init pipeline.
|
|
4
|
+
// Phase 4 is heterogeneous (11 deterministic FS/tool/git steps, no LLM dispatch)
|
|
5
|
+
// and is extracted as a standalone async function.
|
|
7
6
|
//
|
|
8
7
|
// Key contract:
|
|
9
8
|
// - Returns `Phase4Result { kbPathFinal }` on success — caller reads kbPathFinal for
|
|
@@ -119,8 +118,8 @@ async function linkAgentInstructionFile(cwd, kbPath, projectName, ctx) {
|
|
|
119
118
|
`| /forge:fix-bug | Triage, diagnose, and fix a bug |`,
|
|
120
119
|
`| /forge:run-task | Full plan-implement-review-commit pipeline |`,
|
|
121
120
|
`| /forge:run-sprint | Execute all tasks in a sprint |`,
|
|
122
|
-
`| /forge:sprint
|
|
123
|
-
`| /forge:sprint
|
|
121
|
+
`| /forge:plan-sprint | Decompose sprint requirements into tasks |`,
|
|
122
|
+
`| /forge:new-sprint | Elicit and structure requirements for a new sprint |`,
|
|
124
123
|
``,
|
|
125
124
|
`---`,
|
|
126
125
|
`_Generated by /forge:init. Run /forge:refresh-kb-links to update._`,
|