@entelligentsia/forgecli 0.21.0 → 1.0.3
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 +44 -0
- package/README.md +31 -33
- package/dist/CHANGELOG-forge-plugin.md +142 -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/audience-gate.js +1 -1
- package/dist/extensions/forgecli/audience-gate.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 -2
- package/dist/extensions/forgecli/fix-bug.js +678 -609
- 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 +94 -197
- 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 +26 -0
- package/dist/extensions/forgecli/forge-subagent.js +42 -18
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +34 -4
- package/dist/extensions/forgecli/forge-tools.js +191 -79
- 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.js +461 -391
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +12 -0
- package/dist/extensions/forgecli/session-registry.js +23 -0
- package/dist/extensions/forgecli/session-registry.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/subagent/caller-context.d.ts +35 -11
- package/dist/extensions/forgecli/subagent/caller-context.js +49 -21
- package/dist/extensions/forgecli/subagent/caller-context.js.map +1 -1
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.d.ts +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js +66 -0
- package/dist/extensions/forgecli/subagent/orchestrator-transcript.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-guard.d.ts +34 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js +139 -0
- package/dist/extensions/forgecli/subagent/phase-guard.js.map +1 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.d.ts +1 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js +22 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js.map +1 -0
- package/dist/extensions/forgecli/thread-switcher.js +2 -2
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/validate.js +17 -2
- package/dist/extensions/forgecli/validate.js.map +1 -1
- package/dist/extensions/forgecli/viewport-events.d.ts +4 -0
- package/dist/extensions/forgecli/viewport-events.js +18 -1
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +12 -2
- package/dist/extensions/forgecli/viewport-renderer.js +8 -6
- package/dist/extensions/forgecli/viewport-renderer.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 +6 -6
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +11 -29
- 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/triage.md +190 -0
- 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 +63 -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 +41 -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-bug-triage.md +210 -0
- 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 +5 -5
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +11 -29
- 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 +25 -8
- package/dist/forge-payload/tools/artifact.cjs +324 -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/node_modules/@entelligentsia/forge-compress/dist/compressor.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/compressor.js +137 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.d.ts +3 -0
- package/node_modules/@entelligentsia/forge-compress/dist/entropy.js +99 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.d.ts +8 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/entity.js +149 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/index.js +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.d.ts +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/markdown.js +92 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.d.ts +7 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/query.js +60 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/forge/validate.js +82 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.d.ts +6 -0
- package/node_modules/@entelligentsia/forge-compress/dist/index.js +5 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.d.ts +1 -0
- package/node_modules/@entelligentsia/forge-compress/dist/progressive.js +108 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.d.ts +4 -0
- package/node_modules/@entelligentsia/forge-compress/dist/strip.js +55 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.d.ts +2 -0
- package/node_modules/@entelligentsia/forge-compress/dist/tokens.js +17 -0
- package/node_modules/@entelligentsia/forge-compress/package.json +45 -0
- package/node_modules/@entelligentsia/forge-compress/src/__tests__/compress.test.ts +409 -0
- package/node_modules/@entelligentsia/forge-compress/src/compressor.ts +147 -0
- package/node_modules/@entelligentsia/forge-compress/src/entropy.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/entity.ts +184 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/index.ts +10 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/markdown.ts +122 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/query.ts +105 -0
- package/node_modules/@entelligentsia/forge-compress/src/forge/validate.ts +86 -0
- package/node_modules/@entelligentsia/forge-compress/src/index.ts +22 -0
- package/node_modules/@entelligentsia/forge-compress/src/progressive.ts +123 -0
- package/node_modules/@entelligentsia/forge-compress/src/strip.ts +58 -0
- package/node_modules/@entelligentsia/forge-compress/src/tokens.ts +19 -0
- package/package.json +10 -15
- 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
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
requirements:
|
|
3
|
+
reasoning: High
|
|
4
|
+
context: Medium
|
|
5
|
+
speed: Medium
|
|
6
|
+
audience: subagent
|
|
7
|
+
phase: triage
|
|
8
|
+
context:
|
|
9
|
+
architecture: false
|
|
10
|
+
prior_summaries: delta
|
|
11
|
+
persona: summary
|
|
12
|
+
master_index: false
|
|
13
|
+
diff_mode: false
|
|
14
|
+
deps:
|
|
15
|
+
personas: [bug-fixer]
|
|
16
|
+
skills: [bug-fixer, generic]
|
|
17
|
+
templates: []
|
|
18
|
+
sub_workflows: []
|
|
19
|
+
kb_docs: [architecture/stack.md]
|
|
20
|
+
config_fields: [commands.test, paths.engineering]
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Bug Triage
|
|
25
|
+
## Iron Laws
|
|
26
|
+
|
|
27
|
+
- Reproduce the bug before deciding anything. A bug without a confirmed
|
|
28
|
+
reproduction has no business going to plan-fix or implement.
|
|
29
|
+
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
30
|
+
line (emoji, name, tagline) to stdout before any other tool use.
|
|
31
|
+
- All store I/O via `forge_store` (or `node "$FORGE_ROOT/tools/store-cli.cjs"`).
|
|
32
|
+
Never edit `.forge/store/*.json` directly.
|
|
33
|
+
- **Triage NEVER writes `bug.status`.** The orchestrator (`meta-fix-bug.md`)
|
|
34
|
+
owns the `reported → triaged` and `triaged → in-progress` transitions.
|
|
35
|
+
Writing `bug.status` from this workflow violates `meta-fix-bug.md
|
|
36
|
+
§ Iron Laws #2` (parallel to `meta-review-plan.md`'s "Supervisor NEVER
|
|
37
|
+
writes entity status" rule).
|
|
38
|
+
- Triage is a **single phase**. Do NOT call `forge_preflight` with any
|
|
39
|
+
other `--phase` value. Do NOT call `forge_store update-status`,
|
|
40
|
+
`set-bug-summary` for any non-triage phase, or `forge_store emit`.
|
|
41
|
+
These are orchestrator-owned or other-phase-owned actions. The
|
|
42
|
+
phase-ownership guard in forge-cli will reject violations at the tool
|
|
43
|
+
layer, but the Iron Law names the rule.
|
|
44
|
+
|
|
45
|
+
## Store-Write Verification
|
|
46
|
+
|
|
47
|
+
<!-- See _fragments/store-write-verification.md for the canonical block content -->
|
|
48
|
+
|
|
49
|
+
## Algorithm
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
0. Pre-flight Gate Check:
|
|
54
|
+
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
55
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase triage --bug {bugId}`
|
|
56
|
+
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed.
|
|
57
|
+
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
58
|
+
- Exit 0 → continue.
|
|
59
|
+
|
|
60
|
+
1. Load Context:
|
|
61
|
+
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
62
|
+
line to stdout before any other tool use.
|
|
63
|
+
- Read the bug record:
|
|
64
|
+
`forge_store({ command:"read", entity:"bug", id:"{bugId}" })`
|
|
65
|
+
- Read business domain docs relevant to the reported symptom.
|
|
66
|
+
- store-cli verbs: `read` | `list` | `write` | `emit` |
|
|
67
|
+
`update-status` | `set-summary` | `set-bug-summary` | `describe` |
|
|
68
|
+
`nlp` | `query` | `delete` — there is no `get`/`set`/`find`. See
|
|
69
|
+
`_fragments/store-cli-verbs.md` for full notes.
|
|
70
|
+
|
|
71
|
+
2. Reproduce:
|
|
72
|
+
- Construct a minimal reproduction: a failing test, a short script,
|
|
73
|
+
or a documented manual sequence that triggers the reported symptom.
|
|
74
|
+
- If reproduction cannot be achieved with the information in the bug
|
|
75
|
+
record, write what was tried in TRIAGE.md, set the route to "B"
|
|
76
|
+
(any uncertainty defaults to Path B), and continue to root-cause
|
|
77
|
+
research with the reporter's narrative as the working hypothesis.
|
|
78
|
+
|
|
79
|
+
3. Root-Cause Research:
|
|
80
|
+
- Read the code paths implicated by the reproduction.
|
|
81
|
+
- Confirm (or revise) the reporter's stated root cause via direct
|
|
82
|
+
inspection of source files and tests.
|
|
83
|
+
- Note collateral damage: which other call sites, schemas, or
|
|
84
|
+
workflows share the defective shape.
|
|
85
|
+
|
|
86
|
+
4. Path A / Path B Eligibility:
|
|
87
|
+
- Apply the criteria in § "Path A / Path B Eligibility" below.
|
|
88
|
+
- Record the route decision and the explicit enumeration of each
|
|
89
|
+
criterion in the findings section of the triage summary.
|
|
90
|
+
|
|
91
|
+
5. Write Triage Artifacts:
|
|
92
|
+
- Write the triage artifact (markdown narrative):
|
|
93
|
+
`forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}",
|
|
94
|
+
artifact:"triage", content:"<markdown>" })`
|
|
95
|
+
- Write the triage-summary sidecar (JSON shape below):
|
|
96
|
+
`forge_artifact({ command:"write", entity:"bug", entityId:"{bugId}",
|
|
97
|
+
artifact:"triage-summary", content:"<JSON>" })`
|
|
98
|
+
|
|
99
|
+
6. Finalize:
|
|
100
|
+
- **No status write.** The orchestrator (`meta-fix-bug.md`) writes the
|
|
101
|
+
`reported → triaged` and `triaged → in-progress` transitions on
|
|
102
|
+
return. Writing `bug.status` from this workflow is forbidden by
|
|
103
|
+
Iron Laws above and is rejected by the phase-ownership guard.
|
|
104
|
+
- **Do NOT emit a phase event yourself.** The orchestrator owns event
|
|
105
|
+
emission — it composes the canonical event from runtime telemetry
|
|
106
|
+
(model, provider, tokens, wall times) plus the SUMMARY you write
|
|
107
|
+
in the next step.
|
|
108
|
+
|
|
109
|
+
7. Emit Summary Sidecar:
|
|
110
|
+
- The JSON written in step 5 MUST have this shape (the `route` field
|
|
111
|
+
is required; allowed values: `"A"` or `"B"`):
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"objective": "Triage FORGE-BUG-NNN — reproduce, locate, decide route.",
|
|
116
|
+
"key_changes": ["<up to 12 bullets, 200 chars each — findings or actions>"],
|
|
117
|
+
"findings": [
|
|
118
|
+
"Root cause: <one line>",
|
|
119
|
+
"Reproduction: <one line>",
|
|
120
|
+
"Route decision: A | B",
|
|
121
|
+
"Rationale: <one line>"
|
|
122
|
+
],
|
|
123
|
+
"verdict": "n/a",
|
|
124
|
+
"written_at": "<current ISO 8601 timestamp>",
|
|
125
|
+
"artifact_ref":"TRIAGE.md",
|
|
126
|
+
"route": "A"
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- Call:
|
|
131
|
+
```
|
|
132
|
+
forge_store({ command:"set-bug-summary", entity:"bug",
|
|
133
|
+
id:"{bugId}", phase:"triage",
|
|
134
|
+
file:"engineering/bugs/{bugDir}/TRIAGE-SUMMARY.json" })
|
|
135
|
+
```
|
|
136
|
+
- If the set-bug-summary call exits non-zero, fix the sidecar JSON
|
|
137
|
+
and retry (up to 3 attempts per the Store-Write Verification rule).
|
|
138
|
+
Do not proceed without a valid summary.
|
|
139
|
+
|
|
140
|
+
> **Field-naming caution — runtime-tested.** The route field is named
|
|
141
|
+
> `route`, never `path`. The bug schema's top-level `path` field is the
|
|
142
|
+
> bug's **artifact directory** (e.g. `engineering/bugs/EMG-BUG-001-...`).
|
|
143
|
+
> Conflating the two caused EMBERGLOW-BUG-001 (v0.44.0 first run) to land
|
|
144
|
+
> its `TRIAGE.md` under `.forge/store/bugs/` instead of `engineering/bugs/`.
|
|
145
|
+
> Triage MUST NOT touch `bug.path` — that field is set at bug creation
|
|
146
|
+
> and never modified by triage.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Path A / Path B Eligibility
|
|
150
|
+
|
|
151
|
+
Path A is **eligible only when ALL** of the following hold. The triage
|
|
152
|
+
summary `findings` array MUST enumerate each criterion explicitly with a
|
|
153
|
+
pass/fail mark, so reviewers can audit the decision:
|
|
154
|
+
|
|
155
|
+
- `bug.severity ∈ {minor}`
|
|
156
|
+
- Fix is contained in a single file
|
|
157
|
+
- Estimated diff ≤ ~20 lines (judgement call; one screen)
|
|
158
|
+
- No schema, API, migration, security, or build-system change
|
|
159
|
+
- A regression test is obvious from the reproduction script (single short
|
|
160
|
+
test case, no new fixtures, no test-harness change)
|
|
161
|
+
|
|
162
|
+
If any criterion fails, the triage subagent MUST select Path B.
|
|
163
|
+
|
|
164
|
+
**Path B is the default.** Any uncertainty resolves to Path B. It runs the
|
|
165
|
+
same plan/review/implement/review/approve/commit shape as
|
|
166
|
+
`meta-orchestrate.md`. Picking Path A under uncertainty is the documented
|
|
167
|
+
failure mode (over-eager short-circuit).
|
|
168
|
+
|
|
169
|
+
## Triage Artifact Contents (TRIAGE.md)
|
|
170
|
+
|
|
171
|
+
The narrative artifact MUST contain:
|
|
172
|
+
|
|
173
|
+
1. **Reported symptom** — one paragraph summarising the bug report.
|
|
174
|
+
2. **Reproduction** — exact steps, commands, or test case that triggers
|
|
175
|
+
the symptom; copy of the failing output.
|
|
176
|
+
3. **Root cause** — one or two paragraphs naming the defective code path,
|
|
177
|
+
schema, or workflow. Cite file paths and line numbers.
|
|
178
|
+
4. **Path A / Path B enumeration** — for each criterion above, mark
|
|
179
|
+
pass/fail with one-line evidence.
|
|
180
|
+
5. **Route decision and rationale** — the chosen route and the
|
|
181
|
+
single-sentence justification.
|
|
182
|
+
6. **Collateral findings** — any related shapes, call sites, or
|
|
183
|
+
workflows that share the defective pattern (filed as follow-ups in
|
|
184
|
+
the commit phase, not fixed here).
|
|
185
|
+
|
|
186
|
+
<!-- See _fragments/generation-instructions.md for Generation Instructions template -->
|
|
187
|
+
## Friction Emit
|
|
188
|
+
|
|
189
|
+
Emit `type:friction` `{workflow:triage, persona:bug-fixer, issue}` per
|
|
190
|
+
`_fragments/friction-emit.md`.
|
|
@@ -36,38 +36,68 @@ deps:
|
|
|
36
36
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
0a. Pre-flight Gate Check:
|
|
40
40
|
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
41
|
-
-
|
|
41
|
+
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
42
|
+
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase validate --{entity_kind} {record_id}`
|
|
42
43
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
43
44
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
44
45
|
- Exit 0 → continue.
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
0b. Pipeline Step Guard (user-invoked state check):
|
|
48
|
+
- If `--force` is present in the invocation arguments, skip this step entirely.
|
|
49
|
+
- If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
|
|
50
|
+
- Read current task state:
|
|
51
|
+
`node "$FORGE_ROOT/tools/store-cli.cjs" read task {record_id} --json`
|
|
52
|
+
- Extract the `status` field from the JSON output.
|
|
53
|
+
- Allowed states for this phase: `implemented`, `review-approved`.
|
|
54
|
+
- If the current status is NOT in the allowed set:
|
|
55
|
+
Print the following and HALT (do not proceed):
|
|
56
|
+
`× Task {record_id} is in state '{status}' — /forge:implement must complete first. To run the full pipeline: /forge:run-task {record_id}`
|
|
57
|
+
|
|
58
|
+
1. Read Review Loop Context:
|
|
59
|
+
- Check the spawning prompt for a `### Review Loop Context` block.
|
|
60
|
+
- If present, extract:
|
|
61
|
+
- `Iteration: N of M` — current attempt number and the configured limit
|
|
62
|
+
- `Is final iteration: true/false`
|
|
63
|
+
- If absent (user-invoked, not orchestrated): treat as iteration 1 of M, where M is
|
|
64
|
+
read from `.forge/config.json` → `maxReviewIterations` (default 3 if field absent).
|
|
65
|
+
- Include `(iteration N of M)` in the opening line of the `VALIDATION_REPORT.md` artifact.
|
|
66
|
+
- If this is the final iteration (`N == M`) and the verdict is `Revision Required`,
|
|
67
|
+
append a `### Next Steps` section to the artifact showing:
|
|
68
|
+
```
|
|
69
|
+
### Next Steps
|
|
70
|
+
- Force-approve (bypass remaining reviews): `/forge:approve --force {task_id}`
|
|
71
|
+
- Increase iteration limit: edit `config.pipelines.{pipeline}.phases[validate].maxIterations`
|
|
72
|
+
- Restart from validation: `/forge:validate {task_id}`
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. Load Context:
|
|
47
76
|
- Read task prompt
|
|
48
77
|
- Read approved PLAN.md
|
|
49
78
|
- Read the implementation
|
|
50
79
|
- Read PROGRESS.md
|
|
51
80
|
|
|
52
|
-
|
|
81
|
+
3. Validation:
|
|
53
82
|
- Execute the "Acceptance Criteria" checklist from the plan
|
|
54
83
|
- Verify that all technical constraints (e.g., performance, security) are met
|
|
55
84
|
- Check for any regressions in related functionality
|
|
56
85
|
- When re-running the test suite, use the **resolved test command** from `commands.test` in `.forge/config.json` (i.e. `` `${commands.test}` ``, e.g. `.venv/bin/python -m pytest`). Template placeholder: {{TEST_COMMAND}}. Do NOT invoke bare `python` / `python3` — the project interpreter is rarely on `$PATH`.
|
|
57
86
|
|
|
58
|
-
|
|
87
|
+
4. Verdict:
|
|
59
88
|
- Write the validation report via:
|
|
60
89
|
`forge_artifact({ command:"write", entity:"{entity_kind}", entityId:"{record_id}", artifact:"validation-report", content:"<markdown>" })`
|
|
61
90
|
The markdown content must use the format:
|
|
62
91
|
**Verdict:** [Approved | Revision Required]
|
|
63
92
|
- If Revision Required: list the failed criteria and required fixes
|
|
64
93
|
- If Approved: confirm the task is validated
|
|
94
|
+
- See step 1 for iteration header and final-iteration Next Steps requirements.
|
|
65
95
|
|
|
66
|
-
|
|
96
|
+
5. Finalize:
|
|
67
97
|
- Update task status via `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status review-approved` (if Approved) or `node "$FORGE_ROOT/tools/store-cli.cjs" update-status task {taskId} status code-revision-required` (if Revision Required)
|
|
68
98
|
- **Do NOT emit a phase event yourself.** The orchestrator owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
69
99
|
|
|
70
|
-
|
|
100
|
+
6. Emit Summary Sidecar:
|
|
71
101
|
- Write the validation summary via:
|
|
72
102
|
`forge_artifact({ command:"write", entity:"{entity_kind}", entityId:"{record_id}", artifact:"validation-summary", content:"<JSON>" })`
|
|
73
103
|
The JSON content must have the following shape:
|
|
@@ -204,11 +204,6 @@
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
},
|
|
208
|
-
"mode": {
|
|
209
|
-
"type": "string",
|
|
210
|
-
"enum": ["full", "fast"],
|
|
211
|
-
"description": "Init mode. 'fast' means scaffolding was generated by /forge:init --fast (stubs present, heavy artifacts deferred to first use). 'full' means all artifacts are generated. Absent on pre-0.12 projects — treated as 'full' by all readers. Flipped to 'full' by /forge:regenerate (default) or /forge:materialize --all."
|
|
212
207
|
}
|
|
213
208
|
},
|
|
214
209
|
"additionalProperties": false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"generated": "2026-05-
|
|
2
|
+
"version": "1.0.2",
|
|
3
|
+
"generated": "2026-05-28",
|
|
4
4
|
"note": "Authoritative enum catalog. Source: build-enum-catalog.cjs. Regenerate via node forge/tools/build-manifest.cjs.",
|
|
5
5
|
"enums": {
|
|
6
6
|
"task.status": [
|
|
@@ -35,34 +35,30 @@
|
|
|
35
35
|
]
|
|
36
36
|
},
|
|
37
37
|
"commandNames": [
|
|
38
|
-
"forge:sprint
|
|
38
|
+
"forge:new-sprint",
|
|
39
39
|
"forge:plan",
|
|
40
40
|
"forge:review-plan",
|
|
41
41
|
"forge:implement",
|
|
42
42
|
"forge:review-code",
|
|
43
43
|
"forge:fix-bug",
|
|
44
|
-
"forge:sprint
|
|
44
|
+
"forge:plan-sprint",
|
|
45
45
|
"forge:run-task",
|
|
46
46
|
"forge:run-sprint",
|
|
47
|
-
"forge:
|
|
48
|
-
"forge:retrospective",
|
|
47
|
+
"forge:retro",
|
|
49
48
|
"forge:approve",
|
|
50
49
|
"forge:commit",
|
|
51
|
-
"forge:
|
|
52
|
-
"forge:quiz-agent",
|
|
50
|
+
"forge:check-agent",
|
|
53
51
|
"forge:validate",
|
|
54
52
|
"forge:init",
|
|
55
53
|
"forge:health",
|
|
56
|
-
"forge:
|
|
54
|
+
"forge:rebuild",
|
|
57
55
|
"forge:update",
|
|
58
56
|
"forge:add-task",
|
|
59
57
|
"forge:add-pipeline",
|
|
60
|
-
"forge:calibrate",
|
|
61
|
-
"forge:materialize",
|
|
62
58
|
"forge:remove",
|
|
63
59
|
"forge:report-bug",
|
|
64
|
-
"forge:
|
|
65
|
-
"forge:
|
|
60
|
+
"forge:search",
|
|
61
|
+
"forge:repair",
|
|
66
62
|
"forge:config",
|
|
67
63
|
"forge:ask",
|
|
68
64
|
"forge:store-custodian",
|
|
@@ -1,4 +1,67 @@
|
|
|
1
1
|
{
|
|
2
|
+
"1.0.2": {
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"date": "2026-05-28",
|
|
5
|
+
"notes": "v1.0.3 — FORGE-BUG-040 (GH-110) fix. /forge:fix-bug now runs each phase as a phase-scoped subagent: triage uses the new triage.md workflow, plan-fix uses plan_task.md (bug-mode), implement uses implement_plan.md (bug-mode). Previously all three pointed at fix_bug.md (orchestrator-only body), causing the triage subagent to execute the entire lifecycle in one phase. Bug schema, transitions, and store layout are unchanged.",
|
|
6
|
+
"target": "workflows:triage,workflows:fix_bug",
|
|
7
|
+
"regenerate": ["workflows:triage", "workflows:fix_bug"],
|
|
8
|
+
"breaking": false,
|
|
9
|
+
"manual": []
|
|
10
|
+
},
|
|
11
|
+
"1.0.1": {
|
|
12
|
+
"version": "1.0.2",
|
|
13
|
+
"date": "2026-05-27",
|
|
14
|
+
"notes": "v1.0.2 — deprecated command cleanup + init bug fixes. Redirect stubs removed (old command names are now unknown). paths.commands uses project prefix. artifact.cjs strips trailing filenames from store path. Deprecated command references replaced across all meta sources.",
|
|
15
|
+
"target": "commands,init:phases,init:sdlc-init,tools:artifact",
|
|
16
|
+
"regenerate": ["commands"],
|
|
17
|
+
"breaking": false,
|
|
18
|
+
"manual": [
|
|
19
|
+
"Deprecated command redirect stubs removed. Old names (sprint-intake, sprint-plan, retrospective, regenerate, store-query, store-repair, quiz-agent, calibrate, update-tools, migrate, materialize) are now unknown commands. See docs/migration/v0-to-v1.md for the mapping.",
|
|
20
|
+
"If your project has .claude/commands/<prefix>/sprint-intake.md, sprint-plan.md, retrospective.md, or quiz-agent.md — these are stale and can be deleted."
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"1.0.0": {
|
|
24
|
+
"version": "1.0.1",
|
|
25
|
+
"date": "2026-05-27",
|
|
26
|
+
"notes": "v1.0.1 — init phase decomposition (FORGE-S26-T17). New shared verify-phase.cjs tool; sdlc-init.md rewritten as thin orchestrator; per-phase prompt files extracted to init/phases/.",
|
|
27
|
+
"target": "tools:verify-phase,init:phases",
|
|
28
|
+
"regenerate": ["tools"],
|
|
29
|
+
"breaking": false,
|
|
30
|
+
"manual": []
|
|
31
|
+
},
|
|
32
|
+
"0.52.1": {
|
|
33
|
+
"version": "1.0.0",
|
|
34
|
+
"date": "2026-05-26",
|
|
35
|
+
"notes": "v1.0.0 — v1.0 DevX Overhaul (FORGE-S26). 7 command renames, 6 command removals, fast-mode dead code removal, health --fix, rebuild --enrich, init --migrate, pipeline step guards, revision loop visibility, post-init welcome, Tomoshibi enhancements, forge:status plugin command, v1.0 documentation restructure.",
|
|
36
|
+
"target": "commands:new-sprint,commands:plan-sprint,commands:retro,commands:rebuild,commands:search,commands:repair,commands:check-agent,commands:calibrate,commands:enhance,commands:migrate,commands:materialize,commands:update-tools,commands:collate,commands:status,workflows:orchestrate_task,workflows:plan_task,workflows:implement_plan,workflows:fix_bug,config:mode",
|
|
37
|
+
"regenerate": ["commands", "workflows", "tools"],
|
|
38
|
+
"breaking": true,
|
|
39
|
+
"manual": [
|
|
40
|
+
"Removed commands: /forge:update-tools, /forge:materialize, /forge:enhance, /forge:calibrate, /forge:migrate, /forge:collate (user surface). Use /forge:update for schema refresh, /forge:rebuild --enrich for enhancement, /forge:health --fix for calibration, /forge:init --migrate for migration.",
|
|
41
|
+
"Renamed commands: /forge:sprint-intake → /forge:new-sprint, /forge:sprint-plan → /forge:plan-sprint, /forge:retrospective → /forge:retro, /forge:regenerate → /forge:rebuild, /forge:store-query → /forge:search, /forge:store-repair → /forge:repair, /forge:quiz-agent → /forge:check-agent. Old names redirect with deprecation notice.",
|
|
42
|
+
"Config: 'mode' field removed from .forge/config.json schema. Remove it manually from existing projects or run /forge:update."
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"0.52.0": {
|
|
46
|
+
"version": "0.52.1",
|
|
47
|
+
"date": "2026-05-26",
|
|
48
|
+
"notes": "fix(tool-discipline): add forge_artifact and forge_verify_apply discipline lines to meta/fragments/tool-discipline.md — fragment was missing two bullet points present in the FORGE_TOOL_DISCIPLINE TypeScript constant, causing subagents to receive incomplete discipline text when the fragment was present.",
|
|
49
|
+
"target": "fragments:tool-discipline",
|
|
50
|
+
"regenerate": [],
|
|
51
|
+
"breaking": false,
|
|
52
|
+
"manual": []
|
|
53
|
+
},
|
|
54
|
+
"0.51.4": {
|
|
55
|
+
"version": "0.52.0",
|
|
56
|
+
"date": "2026-05-26",
|
|
57
|
+
"notes": "New tools: artifact.cjs, verify-apply.cjs; tool-discipline.md canonical fragment; store-cli list/read --no-summaries, --fields, --limit, --count flags.",
|
|
58
|
+
"target": "tools:artifact,tools:verify-apply,tools:store-cli",
|
|
59
|
+
"regenerate": [
|
|
60
|
+
"tools"
|
|
61
|
+
],
|
|
62
|
+
"breaking": false,
|
|
63
|
+
"manual": []
|
|
64
|
+
},
|
|
2
65
|
"0.51.3": {
|
|
3
66
|
"version": "0.51.4",
|
|
4
67
|
"date": "2026-05-26",
|
|
@@ -65,7 +65,7 @@ Permitted fields: `project.name`, `project.prefix` only.
|
|
|
65
65
|
|
|
66
66
|
| Field | Impact |
|
|
67
67
|
|---|---|
|
|
68
|
-
| `project.prefix` | △ Requires regeneration — command folder renames from `.claude/commands/{old_lower}/` to `.claude/commands/{new_lower}/`, and generated workflow slash-command references become stale. Run `/forge:
|
|
68
|
+
| `project.prefix` | △ Requires regeneration — command folder renames from `.claude/commands/{old_lower}/` to `.claude/commands/{new_lower}/`, and generated workflow slash-command references become stale. Run `/forge:rebuild commands workflows` after confirming. |
|
|
69
69
|
|
|
70
70
|
*The prefix is stored as provided but the command namespace is always lowercase.*
|
|
71
71
|
| `project.name` | 〇 No regeneration needed. |
|
|
@@ -106,7 +106,7 @@ remote check — Tomoshibi only knows the locally installed version.
|
|
|
106
106
|
### Workflow or command explanation
|
|
107
107
|
|
|
108
108
|
Triggered by: "how does sprint planning work?", "explain the implement workflow",
|
|
109
|
-
"what does /forge:
|
|
109
|
+
"what does /forge:health --fix do?", etc.
|
|
110
110
|
|
|
111
111
|
Read the relevant file:
|
|
112
112
|
- Workflows: `.forge/workflows/<name>.md`
|
|
@@ -138,6 +138,147 @@ Use the Skill tool:
|
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
141
|
+
### What now?
|
|
142
|
+
|
|
143
|
+
Triggered by (fuzzy, case-insensitive, substring match): "what now", "what should i do", "what's next", "where do i start", "next steps", "get started", "how do i begin"
|
|
144
|
+
|
|
145
|
+
State detection — run in order, stop at first match:
|
|
146
|
+
|
|
147
|
+
**1. No config:**
|
|
148
|
+
|
|
149
|
+
If `HAS_CONFIG` env is false or `manage-config.cjs get project` returns an error:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
灯 No Forge project found here.
|
|
153
|
+
Run /forge:init to create one, then come back and ask again.
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**2. No sprints:**
|
|
157
|
+
|
|
158
|
+
```sh
|
|
159
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" list sprint status=active
|
|
160
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" list sprint status=planning
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
If both are empty:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
灯 Project initialized, no sprints yet.
|
|
167
|
+
Next step: /forge:new-sprint — start your first sprint by describing what you want to build.
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**3. Active sprint — inspect tasks:**
|
|
171
|
+
|
|
172
|
+
```sh
|
|
173
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" list task status=planned
|
|
174
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" list task status=implementing
|
|
175
|
+
node "$FORGE_ROOT/tools/store-cli.cjs" list task status=committed
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Determine sub-state from results:
|
|
179
|
+
|
|
180
|
+
- **All tasks committed** (no planned, no implementing):
|
|
181
|
+
```
|
|
182
|
+
灯 Sprint {id} complete — all tasks committed.
|
|
183
|
+
Next step: /forge:retro — capture lessons learned and close the sprint.
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- **Any tasks implementing** (n implementing, m planned, k committed):
|
|
187
|
+
```
|
|
188
|
+
灯 Sprint {id} in progress — {n} tasks implementing, {m} planned, {k} committed.
|
|
189
|
+
Next step: /forge:run-task {next-planned-task-id} — continue the pipeline.
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
- **All tasks planned** (none started):
|
|
193
|
+
```
|
|
194
|
+
灯 Sprint {id} ready — {n} tasks planned, none started.
|
|
195
|
+
Next step: /forge:run-task {first-task-id} — kick off the first task.
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### Commands
|
|
201
|
+
|
|
202
|
+
Triggered by (fuzzy, case-insensitive, substring match): "commands", "help", "available commands", "what commands", "command list", "what can you do", "list commands", "show commands"
|
|
203
|
+
|
|
204
|
+
Respond with this static reference (no shell commands needed):
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
灯 Forge v1.0 command reference:
|
|
208
|
+
|
|
209
|
+
Tier 1 — Start here:
|
|
210
|
+
/forge:ask Ask anything — this command
|
|
211
|
+
/forge:init Create a new Forge project
|
|
212
|
+
/forge:new-sprint Start a new sprint (intake)
|
|
213
|
+
/forge:status Current sprint and task overview
|
|
214
|
+
/forge:health Project health check and diagnostics
|
|
215
|
+
|
|
216
|
+
Tier 2 — Sprint workflow:
|
|
217
|
+
/forge:plan-sprint Decompose sprint into tasks
|
|
218
|
+
/forge:run-sprint Run all sprint tasks (automated)
|
|
219
|
+
/forge:run-task Run a single task through the pipeline
|
|
220
|
+
/forge:retro Sprint retrospective
|
|
221
|
+
/forge:rebuild Regenerate workflows, personas, commands
|
|
222
|
+
|
|
223
|
+
Tier 3 — Advanced:
|
|
224
|
+
/forge:search Query the task/sprint/bug store
|
|
225
|
+
/forge:repair Repair store integrity issues
|
|
226
|
+
/forge:check-agent Quiz an agent on project knowledge
|
|
227
|
+
/forge:config View or change project configuration
|
|
228
|
+
/forge:update Check for and install Forge updates
|
|
229
|
+
/forge:remove Remove a task or sprint
|
|
230
|
+
/forge:add-task Add a task to an active sprint
|
|
231
|
+
/forge:add-pipeline Register a custom pipeline
|
|
232
|
+
/forge:report-bug File a Forge bug report
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
### KB summary
|
|
238
|
+
|
|
239
|
+
Triggered by (fuzzy, case-insensitive, substring match): "what did you find", "show me", "kb summary", "knowledge base", "what's in the kb", "findings", "what do you know", "show kb", "summarize"
|
|
240
|
+
|
|
241
|
+
**1. No config:**
|
|
242
|
+
|
|
243
|
+
If `HAS_CONFIG` is false:
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
灯 No project config found — KB summary requires an initialized project.
|
|
247
|
+
Run /forge:init first.
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**2. Check calibration baseline:**
|
|
251
|
+
|
|
252
|
+
```sh
|
|
253
|
+
node "$FORGE_ROOT/tools/manage-config.cjs" get calibrationBaseline 2>/dev/null
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
- If absent or null → `calibration_status = "× No baseline — run /forge:health --fix to establish one."`
|
|
257
|
+
- If present → `calibration_status = "〇 Baseline established."`
|
|
258
|
+
|
|
259
|
+
**3. Read KB index:**
|
|
260
|
+
|
|
261
|
+
```sh
|
|
262
|
+
cat "$PROJECT_ROOT/engineering/MASTER_INDEX.md" 2>/dev/null
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**4. Present compact summary:**
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
灯 Knowledge base summary:
|
|
269
|
+
|
|
270
|
+
KB freshness: {calibration_status}
|
|
271
|
+
|
|
272
|
+
Architecture: {n} sections — {list key architecture topics found}
|
|
273
|
+
Business domain: {n} entities — {list key entities found}
|
|
274
|
+
Features: {n} total — {n} active, {n} completed
|
|
275
|
+
Sprints: {n} total — {n} active, {n} completed, {n} abandoned
|
|
276
|
+
|
|
277
|
+
To explore further: /forge:search — query the store directly.
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
141
282
|
### Anything else
|
|
142
283
|
|
|
143
284
|
Ask one clarifying question. Do not guess.
|
|
@@ -149,6 +290,9 @@ Ask one clarifying question. Do not guess.
|
|
|
149
290
|
```
|
|
150
291
|
🏮 灯 Tomoshibi — I can help you with:
|
|
151
292
|
|
|
293
|
+
· What now? — context-aware next step based on your current project state
|
|
294
|
+
· Commands — full Forge v1.0 command reference, tiered by use case
|
|
295
|
+
· KB summary — what's in your knowledge base and how fresh it is
|
|
152
296
|
· Project status — active sprint, open bugs, active features, in-progress tasks
|
|
153
297
|
· Config queries — show or change project.name / project.prefix
|
|
154
298
|
· Version — locally installed Forge version
|
|
@@ -168,14 +312,14 @@ What would you like to know?
|
|
|
168
312
|
|---|---|---|
|
|
169
313
|
| `.forge/config.json` | Yes | `project.name`, `project.prefix` only — with `[Y/n]` confirm |
|
|
170
314
|
| `.forge/store/` | `list`/`read` via `store-cli.cjs` only | **Never** — redirect to workflow commands |
|
|
171
|
-
| `.forge/workflows/`, `.forge/personas/`, `.forge/skills/` | Yes — to explain content | **Never** — redirect to `/forge:
|
|
172
|
-
| `engineering/` KB | Yes — to answer questions | **Never** — redirect to `/forge:
|
|
173
|
-
| `.claude/commands/` | Yes — to explain | **Never** — redirect to `/forge:
|
|
315
|
+
| `.forge/workflows/`, `.forge/personas/`, `.forge/skills/` | Yes — to explain content | **Never** — redirect to `/forge:rebuild` |
|
|
316
|
+
| `engineering/` KB | Yes — to answer questions | **Never** — redirect to `/forge:health --fix` or sprint commands |
|
|
317
|
+
| `.claude/commands/` | Yes — to explain | **Never** — redirect to `/forge:rebuild commands` |
|
|
174
318
|
| `forge/` plugin source | No — internal impl detail | **Never** |
|
|
175
319
|
|
|
176
320
|
Forbidden store operations: `write`, `update-status`, `delete`, `emit`, `purge-events`.
|
|
177
321
|
|
|
178
|
-
Forbidden forge commands to invoke: `/forge:remove`, `/forge:init
|
|
322
|
+
Forbidden forge commands to invoke: `/forge:remove`, `/forge:init` —
|
|
179
323
|
Tomoshibi can *explain* these but never invokes them.
|
|
180
324
|
|
|
181
325
|
## Output rules
|
|
@@ -329,7 +329,7 @@ On success, print next steps:
|
|
|
329
329
|
and fill in any {PLACEHOLDER} sections before running a task.
|
|
330
330
|
2. Assign this pipeline to a task: set "pipeline": "{NAME}" in the task's
|
|
331
331
|
.forge/store/tasks/{TASK_ID}.json, or let the sprint planner auto-assign it.
|
|
332
|
-
3. Run /forge:
|
|
332
|
+
3. Run /forge:rebuild to update the orchestrator's pipeline routing.
|
|
333
333
|
```
|
|
334
334
|
|
|
335
335
|
---
|
|
@@ -48,7 +48,7 @@ If no `--sprint` argument:
|
|
|
48
48
|
- Filter to sprints with status `active` or `planning` (these are the only
|
|
49
49
|
states where adding tasks makes sense).
|
|
50
50
|
- If no active/planning sprints exist:
|
|
51
|
-
> △ No active or planning sprints found. Create a sprint first using sprint
|
|
51
|
+
> △ No active or planning sprints found. Create a sprint first using new-sprint.
|
|
52
52
|
> Exit without making changes.
|
|
53
53
|
- If only one active/planning sprint: auto-select it and tell the user:
|
|
54
54
|
> 〇 Auto-selected sprint: **{SPRINT_ID}** — {title}
|