@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
|
@@ -0,0 +1,664 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rebuild
|
|
3
|
+
description: Use when the engineering knowledge base has been enriched by sprints and you want to refresh the generated workflows, templates, tools, or knowledge-base docs. Use --enrich to run the enhancement agent (KB enrichment + drift detection).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /forge:rebuild
|
|
7
|
+
|
|
8
|
+
Re-run generation phases using the current state of the project. Use `--enrich` to run the enhancement agent (replaces the removed `forge:enhance` command).
|
|
9
|
+
|
|
10
|
+
## Locate the Forge plugin
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Read `.forge/config.json`. If it does not exist, stop and tell the user to run
|
|
17
|
+
`/forge:init` first.
|
|
18
|
+
|
|
19
|
+
Resolve tools from the plugin:
|
|
20
|
+
```
|
|
21
|
+
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
All tool invocations in this command use `node "$FORGE_ROOT/tools/<tool>.cjs"`.
|
|
25
|
+
|
|
26
|
+
## Hero
|
|
27
|
+
|
|
28
|
+
Open the run with the forge hero + a one-line subtitle (parses
|
|
29
|
+
`$ARGUMENTS` to mention the target):
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
node "$FORGE_ROOT/tools/banners.cjs" forge
|
|
33
|
+
node "$FORGE_ROOT/tools/banners.cjs" --subtitle "Re-running generation against current meta-definitions ($ARGUMENTS or full)"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Each category section below opens with a `banners.cjs --badge {key}` call
|
|
37
|
+
before its "Generating ..." line. The badge map:
|
|
38
|
+
|
|
39
|
+
| Category | Banner key |
|
|
40
|
+
|----------|-----------|
|
|
41
|
+
| personas | `bloom` |
|
|
42
|
+
| skills | `tide` |
|
|
43
|
+
| templates | `drift` |
|
|
44
|
+
| workflows | `ember` |
|
|
45
|
+
| commands | `lumen` |
|
|
46
|
+
| knowledge-base | `oracle` |
|
|
47
|
+
|
|
48
|
+
`banners.cjs` strips ANSI in `NO_COLOR` / non-tty / `--plain` contexts.
|
|
49
|
+
|
|
50
|
+
## Arguments
|
|
51
|
+
|
|
52
|
+
$ARGUMENTS
|
|
53
|
+
|
|
54
|
+
Parse the argument to identify the target category and optional sub-target.
|
|
55
|
+
Sub-targets may be passed either as a second positional argument or embedded
|
|
56
|
+
with a colon delimiter (both forms are equivalent).
|
|
57
|
+
|
|
58
|
+
> **Category scope enforcement**: If this workflow (or any subagent it spawns)
|
|
59
|
+
> calls `substitute-placeholders.cjs` directly to re-materialise base-pack
|
|
60
|
+
> files, it MUST pass `--category <parsed-category>` to restrict writes to the
|
|
61
|
+
> requested namespace. Without this flag the tool overwrites all five output
|
|
62
|
+
> directories (personas, skills, workflows, templates, commands), silently
|
|
63
|
+
> discarding any regenerated content in non-targeted categories.
|
|
64
|
+
>
|
|
65
|
+
> Example:
|
|
66
|
+
> ```sh
|
|
67
|
+
> node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
|
|
68
|
+
> --base-pack "$FORGE_ROOT/init/base-pack" \
|
|
69
|
+
> --config ".forge/config.json" \
|
|
70
|
+
> --category "personas" \
|
|
71
|
+
> --out "."
|
|
72
|
+
> ```
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
/forge:rebuild # workflows + commands + templates + personas (default)
|
|
76
|
+
/forge:rebuild --enrich # run enhancement agent (KB enrichment + drift detection)
|
|
77
|
+
/forge:rebuild personas # .forge/personas/ — all persona files
|
|
78
|
+
/forge:rebuild personas engineer # single persona file only
|
|
79
|
+
/forge:rebuild personas:engineer # same — colon form (from migration entries)
|
|
80
|
+
/forge:rebuild skills # .forge/skills/ role-specific skills
|
|
81
|
+
/forge:rebuild skills engineer # single skill file only
|
|
82
|
+
/forge:rebuild skills:engineer # same — colon form (from migration entries)
|
|
83
|
+
/forge:rebuild workflows # full workflow rebuild
|
|
84
|
+
/forge:rebuild workflows plan_task # single workflow file only
|
|
85
|
+
/forge:rebuild workflows:plan_task # same — colon form (from migration entries)
|
|
86
|
+
/forge:rebuild workflows sprint_plan # single workflow file only
|
|
87
|
+
/forge:rebuild commands # .claude/commands/ slash command wrappers
|
|
88
|
+
/forge:rebuild templates # document templates only
|
|
89
|
+
/forge:rebuild templates PLAN_TEMPLATE # single template file only
|
|
90
|
+
/forge:rebuild templates:PLAN_TEMPLATE # same — colon form (from migration entries)
|
|
91
|
+
/forge:rebuild knowledge-base # all three sub-targets (merge mode)
|
|
92
|
+
/forge:rebuild knowledge-base architecture
|
|
93
|
+
/forge:rebuild knowledge-base:architecture # colon form (from migration entries)
|
|
94
|
+
/forge:rebuild knowledge-base business-domain
|
|
95
|
+
/forge:rebuild knowledge-base stack-checklist
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
When parsing the argument, split on `:` first: if the argument is
|
|
99
|
+
`"workflows:plan_task"`, treat it as category=`workflows`,
|
|
100
|
+
sub-target=`plan_task`. If no `:` is present, the second positional word
|
|
101
|
+
(if any) is the sub-target. The sub-target is always optional.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Category: `personas` — full rebuild or single file
|
|
106
|
+
|
|
107
|
+
Re-generate `.forge/personas/` from the meta-persona definitions and the current knowledge base.
|
|
108
|
+
|
|
109
|
+
**If a sub-target is provided** (e.g. `/forge:rebuild personas engineer`
|
|
110
|
+
or the colon form `personas:engineer`), regenerate only the single persona
|
|
111
|
+
file `.forge/personas/<sub-target>.md` from `$FORGE_ROOT/meta/personas/meta-<sub-target>.md`.
|
|
112
|
+
|
|
113
|
+
Before writing, check the file for manual modifications (mirrors the workflows
|
|
114
|
+
and templates pre-write guard — FORGE-BUG-037 / forge#106):
|
|
115
|
+
```sh
|
|
116
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<sub-target>.md
|
|
117
|
+
```
|
|
118
|
+
For exit 1 (modified): warn `△ .forge/personas/<sub-target>.md has been manually
|
|
119
|
+
modified (likely by /forge:enhance). Overwriting will discard your changes.
|
|
120
|
+
Proceed? (yes / no / show diff)`. Collect the answer before proceeding. On
|
|
121
|
+
`no` or `show diff` rejecting overwrite, skip this file and exit cleanly.
|
|
122
|
+
On exit 2 (untracked) or exit 3 (missing): proceed without prompting.
|
|
123
|
+
|
|
124
|
+
Then remove any existing manifest entry for this specific file (handles rename case):
|
|
125
|
+
```sh
|
|
126
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/personas/<sub-target>.md 2>/dev/null || true
|
|
127
|
+
```
|
|
128
|
+
Generate the single file (no fan-out needed for one file). All manifest and hash
|
|
129
|
+
steps below apply to that single file.
|
|
130
|
+
|
|
131
|
+
**If no sub-target** — full rebuild, fanned out in parallel:
|
|
132
|
+
|
|
133
|
+
1. Build the project brief:
|
|
134
|
+
```sh
|
|
135
|
+
node "$FORGE_ROOT/tools/build-init-context.cjs" \
|
|
136
|
+
--config .forge/config.json --personas .forge/personas \
|
|
137
|
+
--templates .forge/templates --kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
|
|
138
|
+
--out .forge/init-context.md --json-out .forge/init-context.json
|
|
139
|
+
```
|
|
140
|
+
2. Enumerate `$FORGE_ROOT/meta/personas/meta-*.md` (exclude README.md).
|
|
141
|
+
Let `M_total` = the enumerated count.
|
|
142
|
+
|
|
143
|
+
3. Render the personas badge, then emit the count:
|
|
144
|
+
```sh
|
|
145
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge bloom
|
|
146
|
+
```
|
|
147
|
+
Then emit: `Generating personas (<N> files in parallel)...`
|
|
148
|
+
4. Check each enumerated file for manual modifications
|
|
149
|
+
before any clearing or regeneration (mirrors the workflows + templates
|
|
150
|
+
pre-write guard — FORGE-BUG-037 / forge#106):
|
|
151
|
+
```sh
|
|
152
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/personas/<role>.md
|
|
153
|
+
```
|
|
154
|
+
For any exit 1 (modified): warn `△ .forge/personas/<role>.md has been manually
|
|
155
|
+
modified (likely by /forge:enhance). Overwriting will discard your changes.
|
|
156
|
+
Proceed? (yes / no / show diff)`. Collect answers before proceeding. Files
|
|
157
|
+
the user declines are removed from the regeneration set for this run. Exit
|
|
158
|
+
2 (untracked) and exit 3 (missing) require no prompt.
|
|
159
|
+
5. Clear stale entries:
|
|
160
|
+
```sh
|
|
161
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/personas/
|
|
162
|
+
```
|
|
163
|
+
6. **Spawn the persona subagents in a SINGLE Agent tool message** using
|
|
164
|
+
`$FORGE_ROOT/init/generation/generate-persona.md` as the per-subagent rulebook
|
|
165
|
+
(same fan-out pattern as `/forge:init` Phase 4). Spawn one per entry.
|
|
166
|
+
7. Collect results. For each `done:` result → emit ` 〇 <filename>.md`.
|
|
167
|
+
Retry failures once. Any still failing: surface the id list.
|
|
168
|
+
8. **Replay user enhancements** (forge#107 / Approach A — layer 3 of the composition
|
|
169
|
+
contract declared at `manage-versions.cjs:13`). After fresh base-pack content
|
|
170
|
+
is written, restore any user-enhanced files captured by `/forge:enhance` Phase 2
|
|
171
|
+
snapshots:
|
|
172
|
+
```sh
|
|
173
|
+
node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target personas
|
|
174
|
+
```
|
|
175
|
+
The tool walks all snapshots in `.forge/structure-versions.json`, finds enhanced
|
|
176
|
+
elements whose normalized path starts with `personas/`, and copies them from
|
|
177
|
+
the archive back over the freshly-generated content. Later snapshots win on
|
|
178
|
+
file collision. Files not captured by any snapshot remain at the fresh
|
|
179
|
+
base-pack version.
|
|
180
|
+
9. Re-record manifest hashes for the (now restored) files so subsequent
|
|
181
|
+
`generation-manifest check` calls reflect current on-disk content:
|
|
182
|
+
```sh
|
|
183
|
+
for each <role> in the full set:
|
|
184
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/personas/<role>.md
|
|
185
|
+
```
|
|
186
|
+
10. Emit ` 〇 personas — <N> files written`.
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Category: `skills` — full rebuild or single file
|
|
191
|
+
|
|
192
|
+
Re-generate `.forge/skills/` from the meta-skill templates and project config.
|
|
193
|
+
|
|
194
|
+
**If a sub-target is provided** (e.g. `/forge:rebuild skills engineer`
|
|
195
|
+
or the colon form `skills:engineer`), regenerate only the single skill file
|
|
196
|
+
`.forge/skills/<sub-target>-skills.md` from
|
|
197
|
+
`$FORGE_ROOT/meta/skills/meta-<sub-target>-skills.md`.
|
|
198
|
+
|
|
199
|
+
Before writing, check the file for manual modifications (mirrors the workflows
|
|
200
|
+
and templates pre-write guard — FORGE-BUG-037 / forge#106):
|
|
201
|
+
```sh
|
|
202
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<sub-target>-skills.md
|
|
203
|
+
```
|
|
204
|
+
For exit 1 (modified): warn `△ .forge/skills/<sub-target>-skills.md has been
|
|
205
|
+
manually modified (likely by /forge:enhance). Overwriting will discard your
|
|
206
|
+
changes. Proceed? (yes / no / show diff)`. Collect the answer before
|
|
207
|
+
proceeding. On `no` or `show diff` rejecting overwrite, skip this file and
|
|
208
|
+
exit cleanly. On exit 2 (untracked) or exit 3 (missing): proceed without
|
|
209
|
+
prompting.
|
|
210
|
+
|
|
211
|
+
Then remove any existing manifest entry for this specific file:
|
|
212
|
+
```sh
|
|
213
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/skills/<sub-target>-skills.md 2>/dev/null || true
|
|
214
|
+
```
|
|
215
|
+
Generate the single file (no fan-out needed). All manifest and hash steps below
|
|
216
|
+
apply to that single file.
|
|
217
|
+
|
|
218
|
+
**If no sub-target** — full rebuild, fanned out in parallel:
|
|
219
|
+
|
|
220
|
+
1. Build the project brief (same command as in `personas` above).
|
|
221
|
+
2. Enumerate `$FORGE_ROOT/meta/skills/meta-*-skills.md`. Let `M_total` =
|
|
222
|
+
the enumerated count.
|
|
223
|
+
|
|
224
|
+
3. Render the skills badge, then emit the count:
|
|
225
|
+
```sh
|
|
226
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge tide
|
|
227
|
+
```
|
|
228
|
+
Then emit: `Generating skills (<N> files in parallel)...`
|
|
229
|
+
4. Check each enumerated file for manual modifications before any clearing
|
|
230
|
+
or regeneration (mirrors the workflows + templates pre-write guard —
|
|
231
|
+
FORGE-BUG-037 / forge#106):
|
|
232
|
+
```sh
|
|
233
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/skills/<role>-skills.md
|
|
234
|
+
```
|
|
235
|
+
For any exit 1 (modified): warn `△ .forge/skills/<role>-skills.md has been
|
|
236
|
+
manually modified (likely by /forge:enhance). Overwriting will discard your
|
|
237
|
+
changes. Proceed? (yes / no / show diff)`. Collect answers before proceeding.
|
|
238
|
+
Files the user declines are removed from the regeneration set for this run.
|
|
239
|
+
Exit 2 (untracked) and exit 3 (missing) require no prompt.
|
|
240
|
+
5. Clear stale entries:
|
|
241
|
+
```sh
|
|
242
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/skills/
|
|
243
|
+
```
|
|
244
|
+
6. **Spawn the skill subagents in a SINGLE Agent tool message** using
|
|
245
|
+
`$FORGE_ROOT/init/generation/generate-skill.md` as the per-subagent rulebook.
|
|
246
|
+
7. Collect results. Retry failures once. Any still failing: surface the id list.
|
|
247
|
+
8. **Replay user enhancements** (forge#107 / Approach A):
|
|
248
|
+
```sh
|
|
249
|
+
node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target skills
|
|
250
|
+
```
|
|
251
|
+
Walks snapshots; restores any enhanced `skills/<role>-skills.md` files from
|
|
252
|
+
the archive over the freshly-generated content. Later snapshots win on
|
|
253
|
+
collision.
|
|
254
|
+
9. Re-record manifest hashes for the (now restored) files:
|
|
255
|
+
```sh
|
|
256
|
+
for each <role> in the full set:
|
|
257
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/skills/<role>-skills.md
|
|
258
|
+
```
|
|
259
|
+
10. For each completed file, check manifest (warn on modified), emit ` 〇 <filename>.md`.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Category: `workflows` — full rebuild or single file
|
|
264
|
+
|
|
265
|
+
Re-generate `.forge/workflows/` from the meta-workflow definitions and the
|
|
266
|
+
current knowledge base. Covers both atomic workflows and orchestration.
|
|
267
|
+
|
|
268
|
+
**If a sub-target is provided** (e.g. `/forge:rebuild workflows plan_task`
|
|
269
|
+
or the colon form `workflows:plan_task`), regenerate only the single workflow
|
|
270
|
+
file `.forge/workflows/<sub-target>.md`.
|
|
271
|
+
|
|
272
|
+
**Special case — `_fragments` sub-target (directory fan-out):**
|
|
273
|
+
|
|
274
|
+
`_fragments` is a directory in `$FORGE_ROOT/meta/workflows/_fragments/`, not a
|
|
275
|
+
single file. When the sub-target is `_fragments` (or when
|
|
276
|
+
`$FORGE_ROOT/meta/workflows/<sub-target>` resolves to a directory rather than a
|
|
277
|
+
file), use directory fan-out mode instead of single-file mode:
|
|
278
|
+
|
|
279
|
+
1. Enumerate all `.md` files in `$FORGE_ROOT/meta/workflows/_fragments/`.
|
|
280
|
+
2. Ensure `.forge/workflows/_fragments/` directory exists (create if absent).
|
|
281
|
+
3. For each fragment file, copy verbatim (no placeholder substitution) to
|
|
282
|
+
`.forge/workflows/_fragments/<filename>`.
|
|
283
|
+
4. Record a manifest hash for each copied file:
|
|
284
|
+
```sh
|
|
285
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/_fragments/<filename>
|
|
286
|
+
```
|
|
287
|
+
5. Emit `〇 workflows:_fragments — N fragment files copied`.
|
|
288
|
+
|
|
289
|
+
> **Note:** When invoked as `/forge:rebuild workflows:_fragments`, this command
|
|
290
|
+
> fans out to copy all fragment files (currently four: `context-injection.md`,
|
|
291
|
+
> `progress-reporting.md`, `event-emission-schema.md`, `finalize.md`). Verify the
|
|
292
|
+
> result with `ls .forge/workflows/_fragments/`.
|
|
293
|
+
|
|
294
|
+
For all other sub-targets (non-directory), continue with the standard single-file
|
|
295
|
+
path below.
|
|
296
|
+
|
|
297
|
+
Before writing, remove any existing manifest entry for this specific file:
|
|
298
|
+
```sh
|
|
299
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/workflows/<sub-target>.md 2>/dev/null || true
|
|
300
|
+
```
|
|
301
|
+
Generate the single file (no fan-out needed). Check manifest (warn on modified),
|
|
302
|
+
write, record hash.
|
|
303
|
+
|
|
304
|
+
**If no sub-target** — full rebuild using the same parallel fan-out as `/forge:init` Phase 7:
|
|
305
|
+
|
|
306
|
+
1. Build the project brief:
|
|
307
|
+
```sh
|
|
308
|
+
node "$FORGE_ROOT/tools/build-init-context.cjs" \
|
|
309
|
+
--config .forge/config.json --personas .forge/personas \
|
|
310
|
+
--templates .forge/templates \
|
|
311
|
+
--kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
|
|
312
|
+
--out .forge/init-context.md --json-out .forge/init-context.json
|
|
313
|
+
```
|
|
314
|
+
2. Read `$FORGE_ROOT/init/workflow-gen-plan.json` (16-entry fan-out table).
|
|
315
|
+
Let `M_total` = the entry count.
|
|
316
|
+
|
|
317
|
+
3. Render the workflows badge, then emit the count:
|
|
318
|
+
```sh
|
|
319
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge ember
|
|
320
|
+
```
|
|
321
|
+
Then emit: `Generating workflows (<N> atomic + orchestration, parallel)...`
|
|
322
|
+
4. Check each file for manual modifications before any clearing:
|
|
323
|
+
```sh
|
|
324
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" check .forge/workflows/{filename}.md
|
|
325
|
+
```
|
|
326
|
+
For any exit 1 (modified): warn `△ .forge/workflows/{filename}.md has been manually
|
|
327
|
+
modified. Overwriting may discard manual edits not captured in any /forge:enhance snapshot. Edits captured by snapshots will be restored automatically via `manage-versions replay` after regeneration. Proceed? (yes / no / show diff)`
|
|
328
|
+
Collect answers before proceeding.
|
|
329
|
+
5. Clear stale entries:
|
|
330
|
+
```sh
|
|
331
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/workflows/
|
|
332
|
+
```
|
|
333
|
+
6. **Spawn the atomic workflow subagents in a SINGLE Agent tool message** using
|
|
334
|
+
`$FORGE_ROOT/init/generation/generate-workflows.md` as the per-subagent rulebook
|
|
335
|
+
(same fan-out pattern as `/forge:init` Phase 7d). Spawn one per entry.
|
|
336
|
+
7. Collect results. Retry failures once in a single Agent call.
|
|
337
|
+
8. Spawn orchestration subagent:
|
|
338
|
+
```
|
|
339
|
+
Read $FORGE_ROOT/init/generation/generate-orchestration.md and follow it.
|
|
340
|
+
FORGE_ROOT: {FORGE_ROOT}
|
|
341
|
+
Input: $FORGE_ROOT/meta/workflows/meta-orchestrate.md + .forge/workflows/
|
|
342
|
+
Output: .forge/workflows/orchestrate_task.md and .forge/workflows/run_sprint.md
|
|
343
|
+
```
|
|
344
|
+
9. **Replay user enhancements** (forge#107 / Approach A):
|
|
345
|
+
```sh
|
|
346
|
+
node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target workflows
|
|
347
|
+
```
|
|
348
|
+
Walks snapshots; restores enhanced `workflows/<name>.md` files. Later
|
|
349
|
+
snapshots win on collision.
|
|
350
|
+
10. For each written file: record hash `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/workflows/{filename}.md`
|
|
351
|
+
(this runs AFTER replay so the recorded hash reflects the restored content).
|
|
352
|
+
11. Emit ` 〇 workflows — <N> files written`.
|
|
353
|
+
|
|
354
|
+
**Do NOT touch:** `.claude/commands/`, `.forge/config.json`, or any knowledge base file.
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Category: `commands` — full rebuild
|
|
359
|
+
|
|
360
|
+
Re-generate `.claude/commands/` slash command wrappers from the current
|
|
361
|
+
`.forge/workflows/`. This is a thin generation step — each command file
|
|
362
|
+
is just a wrapper that loads its workflow and passes arguments.
|
|
363
|
+
|
|
364
|
+
Run this when:
|
|
365
|
+
- Workflow files have been renamed (e.g. after a 0.5.0 upgrade)
|
|
366
|
+
- A new workflow was added and its command wrapper is missing
|
|
367
|
+
- A command wrapper is pointing at a workflow that no longer exists
|
|
368
|
+
|
|
369
|
+
1. Read `.forge/config.json` for paths
|
|
370
|
+
2. Enumerate `.forge/workflows/` to know what workflow files currently exist
|
|
371
|
+
3. Render the commands badge, then emit the count:
|
|
372
|
+
```sh
|
|
373
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge lumen
|
|
374
|
+
```
|
|
375
|
+
Then emit: `Generating commands (<N> files)...`
|
|
376
|
+
4. Clear stale entries for this namespace:
|
|
377
|
+
```sh
|
|
378
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .claude/commands/
|
|
379
|
+
```
|
|
380
|
+
5. Re-generate `.claude/commands/` following
|
|
381
|
+
`$FORGE_ROOT/init/generation/generate-commands.md`
|
|
382
|
+
The idempotency check will overwrite any command that references a
|
|
383
|
+
missing or renamed workflow, and skip any that are already correct.
|
|
384
|
+
6. For each file being written:
|
|
385
|
+
- Emit: ` ⋯ <filename>.md...`
|
|
386
|
+
- Write the file
|
|
387
|
+
- Record hash: `node "$FORGE_ROOT/tools/generation-manifest.cjs" record .claude/commands/{filename}.md`
|
|
388
|
+
- Emit: ` 〇 <filename>.md`
|
|
389
|
+
|
|
390
|
+
**DO NOT** touch any `.claude/commands/` file that is not in the output list
|
|
391
|
+
in `generate-commands.md`. Custom commands (`supervisor-code.md`, project-specific
|
|
392
|
+
wrappers, etc.) must never be written, overwritten, or deleted by this step.
|
|
393
|
+
Retired Forge command files (`engineer.md`, `supervisor.md`) are cleaned up
|
|
394
|
+
separately by Step 5b-pre in `/forge:update` — not here.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Category: `templates` — full rebuild or single file
|
|
399
|
+
|
|
400
|
+
Re-generate `.forge/templates/` from the meta-template definitions and the
|
|
401
|
+
current knowledge base.
|
|
402
|
+
|
|
403
|
+
**If a sub-target is provided** (e.g. `/forge:rebuild templates PLAN_TEMPLATE`
|
|
404
|
+
or the colon form `templates:PLAN_TEMPLATE`), regenerate only the single template
|
|
405
|
+
file `.forge/templates/<sub-target>.md`. Determine the source meta file from
|
|
406
|
+
`$FORGE_ROOT/init/generation/generate-template.md`'s filename mapping (e.g.
|
|
407
|
+
`PLAN_TEMPLATE` → `meta-plan.md`).
|
|
408
|
+
|
|
409
|
+
Before writing, remove any existing manifest entry:
|
|
410
|
+
```sh
|
|
411
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" remove .forge/templates/<sub-target>.md 2>/dev/null || true
|
|
412
|
+
```
|
|
413
|
+
Generate the single file (no fan-out needed). Record hash after writing.
|
|
414
|
+
|
|
415
|
+
**If no sub-target** — full rebuild, fanned out in parallel:
|
|
416
|
+
|
|
417
|
+
1. Build the project brief (same command as in `personas` above).
|
|
418
|
+
2. Enumerate `$FORGE_ROOT/meta/templates/meta-*.md`. Let `M_total` =
|
|
419
|
+
the enumerated count.
|
|
420
|
+
|
|
421
|
+
3. Render the templates badge, then emit the count:
|
|
422
|
+
```sh
|
|
423
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge drift
|
|
424
|
+
```
|
|
425
|
+
Then emit: `Generating templates (<N> files in parallel)...`
|
|
426
|
+
4. Check each (filtered) file for manual modifications (warn on modified, same pattern as workflows).
|
|
427
|
+
5. Clear stale entries:
|
|
428
|
+
```sh
|
|
429
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" clear-namespace .forge/templates/
|
|
430
|
+
```
|
|
431
|
+
6. **Spawn the template subagents in a SINGLE Agent tool message** using
|
|
432
|
+
`$FORGE_ROOT/init/generation/generate-template.md` as the per-subagent rulebook.
|
|
433
|
+
7. Collect results. Retry failures once. Any still failing: surface the id list.
|
|
434
|
+
8. **Replay user enhancements** (forge#107 / Approach A):
|
|
435
|
+
```sh
|
|
436
|
+
node "$FORGE_ROOT/tools/manage-versions.cjs" replay --target templates
|
|
437
|
+
```
|
|
438
|
+
Walks snapshots; restores enhanced `templates/<STEM>.md` files. Later
|
|
439
|
+
snapshots win on collision.
|
|
440
|
+
9. For each written file: record hash, emit ` 〇 <filename>.md` (hash reflects
|
|
441
|
+
post-replay content).
|
|
442
|
+
10. Re-record the one-shot init artifact not regenerated from a meta file:
|
|
443
|
+
```sh
|
|
444
|
+
if [ -f ".forge/templates/CUSTOM_COMMAND_TEMPLATE.md" ]; then
|
|
445
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record .forge/templates/CUSTOM_COMMAND_TEMPLATE.md
|
|
446
|
+
fi
|
|
447
|
+
```
|
|
448
|
+
Emit `〇 templates — <N> files written`.
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Category: `knowledge-base` — merge mode
|
|
453
|
+
|
|
454
|
+
**This is not a full rebuild.** The knowledge base accumulates writeback from
|
|
455
|
+
every sprint. Overwriting it from scratch destroys that accumulated knowledge.
|
|
456
|
+
|
|
457
|
+
Render the knowledge-base badge, then emit the status line:
|
|
458
|
+
|
|
459
|
+
```sh
|
|
460
|
+
node "$FORGE_ROOT/tools/banners.cjs" --badge oracle
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
Then emit: `Generating knowledge-base...`
|
|
464
|
+
|
|
465
|
+
Instead: re-run the relevant discovery prompts scoped to what has changed,
|
|
466
|
+
compute a delta against the existing docs, and merge only new content in.
|
|
467
|
+
|
|
468
|
+
**Per sub-target, emit merge-level status lines (not per-file):**
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
⋯ merging <sub-target> docs...
|
|
472
|
+
〇 <sub-target> — N additions
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
**Merge rule (applies to all sub-targets):**
|
|
476
|
+
- Additive only — never remove or overwrite existing sections or entries.
|
|
477
|
+
- `[?]` markers from prior generation may be updated if the re-scan can now
|
|
478
|
+
confirm or correct them.
|
|
479
|
+
- If the re-scan detects something that contradicts existing content, flag it
|
|
480
|
+
as a `[CONFLICT]` comment for human review — do not resolve it silently.
|
|
481
|
+
- Show all proposed additions as a diff and prompt before writing.
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
### Sub-target: `architecture`
|
|
486
|
+
|
|
487
|
+
**Trigger:** new subsystems, services, or integrations have been added to the
|
|
488
|
+
codebase since the architecture docs were last written.
|
|
489
|
+
|
|
490
|
+
**Re-run discovery (in parallel):**
|
|
491
|
+
- `$FORGE_ROOT/init/discovery/discover-stack.md`
|
|
492
|
+
- `$FORGE_ROOT/init/discovery/discover-processes.md`
|
|
493
|
+
- `$FORGE_ROOT/init/discovery/discover-routing.md`
|
|
494
|
+
|
|
495
|
+
**Read existing docs:**
|
|
496
|
+
- `engineering/architecture/*.md`
|
|
497
|
+
|
|
498
|
+
**Merge into:**
|
|
499
|
+
|
|
500
|
+
| Discovery output | Target doc | Merge action |
|
|
501
|
+
|-----------------|-----------|-------------|
|
|
502
|
+
| New framework or runtime | `stack.md` | Append to technology inventory |
|
|
503
|
+
| New service or process | `processes.md` | Append new service section |
|
|
504
|
+
| New API route group | `routing.md` | Append route group |
|
|
505
|
+
| New deployment target | `deployment.md` | Append environment section |
|
|
506
|
+
| Any new sub-system with no existing doc | Create new sub-doc + link from `INDEX.md` |
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
### Sub-target: `business-domain`
|
|
511
|
+
|
|
512
|
+
**Trigger:** new ORM models, schema tables, or domain types have been added
|
|
513
|
+
to the codebase. `forge:health` will flag these as orphaned entities.
|
|
514
|
+
|
|
515
|
+
**Re-run discovery:**
|
|
516
|
+
- `$FORGE_ROOT/init/discovery/discover-database.md`
|
|
517
|
+
|
|
518
|
+
**Read existing doc:**
|
|
519
|
+
- `engineering/business-domain/entity-model.md`
|
|
520
|
+
|
|
521
|
+
**Merge into `entity-model.md`:**
|
|
522
|
+
- Entities present in discovery output but absent from the doc → append new
|
|
523
|
+
entity sections with fields and relationships.
|
|
524
|
+
- New fields on an existing entity → add within the existing entity section,
|
|
525
|
+
marked `[NEW]` for team review.
|
|
526
|
+
- Entities no longer found in the codebase → flag with `[NOT FOUND IN SCAN]`
|
|
527
|
+
comment but do not remove (may be soft-deleted, feature-flagged, or in a
|
|
528
|
+
migration).
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
### Sub-target: `stack-checklist`
|
|
533
|
+
|
|
534
|
+
**Trigger:** new libraries or frameworks have been adopted mid-project that
|
|
535
|
+
are not yet represented in review checklist items.
|
|
536
|
+
|
|
537
|
+
**Re-run discovery:**
|
|
538
|
+
- `$FORGE_ROOT/init/discovery/discover-stack.md`
|
|
539
|
+
- `$FORGE_ROOT/init/discovery/discover-testing.md`
|
|
540
|
+
|
|
541
|
+
**Read existing doc:**
|
|
542
|
+
- `engineering/stack-checklist.md`
|
|
543
|
+
|
|
544
|
+
**Merge into `stack-checklist.md`:**
|
|
545
|
+
- Libraries detected but not yet in the checklist → append new checklist items.
|
|
546
|
+
- Never remove or modify existing items (they encode accumulated review knowledge).
|
|
547
|
+
|
|
548
|
+
---
|
|
549
|
+
|
|
550
|
+
## Default (no argument)
|
|
551
|
+
|
|
552
|
+
Run all five categories respecting dependencies — with maximum parallelism:
|
|
553
|
+
|
|
554
|
+
1. **Build brief** (once, synchronous):
|
|
555
|
+
```sh
|
|
556
|
+
node "$FORGE_ROOT/tools/build-init-context.cjs" \
|
|
557
|
+
--config .forge/config.json --personas .forge/personas \
|
|
558
|
+
--templates .forge/templates \
|
|
559
|
+
--kb "$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)" \
|
|
560
|
+
--out .forge/init-context.md --json-out .forge/init-context.json
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
2. **Personas + Templates in parallel** (both need only KB, not each other):
|
|
564
|
+
Spawn persona fan-out and template fan-out in a **SINGLE Agent tool message**
|
|
565
|
+
(all persona subagents + all template subagents together). Wait for all to return.
|
|
566
|
+
|
|
567
|
+
3. **Skills + Workflows in parallel** (skills need personas; workflows need personas + templates — both now ready):
|
|
568
|
+
Spawn skill fan-out and workflow fan-out (16 atomic) in a **SINGLE Agent tool message**.
|
|
569
|
+
Wait for all to return.
|
|
570
|
+
|
|
571
|
+
4. **Orchestration + Commands in parallel** (both need workflows — now ready):
|
|
572
|
+
Spawn orchestration and commands subagents in a **SINGLE Agent tool message**.
|
|
573
|
+
Wait for both.
|
|
574
|
+
|
|
575
|
+
This runs in 4 serial steps instead of 5 sequential category passes, with all
|
|
576
|
+
fan-outs parallelised within each step.
|
|
577
|
+
|
|
578
|
+
## Flag: `--enrich`
|
|
579
|
+
|
|
580
|
+
When `$ARGUMENTS` contains `--enrich`, run the enhancement workflow instead of regeneration.
|
|
581
|
+
This is the v1.0 replacement for the removed `/forge:enhance` command.
|
|
582
|
+
|
|
583
|
+
```
|
|
584
|
+
FORGE_ROOT: !`echo "${CLAUDE_PLUGIN_ROOT}"`
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
1. Check that `$FORGE_ROOT/meta/workflows/meta-enhance.md` exists. If absent:
|
|
588
|
+
|
|
589
|
+
> △ meta-enhance.md not found — your installed Forge version may predate the enhancement agent. Run `/forge:update` to upgrade.
|
|
590
|
+
|
|
591
|
+
Exit.
|
|
592
|
+
|
|
593
|
+
2. Pass `$ARGUMENTS` (minus the `--enrich` flag) through to the enhancement workflow so any phase flags (`--phase 1`, `--phase 2`, `--phase 3`, `--auto`) are forwarded:
|
|
594
|
+
|
|
595
|
+
Read `$FORGE_ROOT/meta/workflows/meta-enhance.md` and follow it with the forwarded arguments.
|
|
596
|
+
|
|
597
|
+
If no phase flag is provided with `--enrich`, the enhancement workflow defaults to `--phase 3` (drift detection).
|
|
598
|
+
|
|
599
|
+
3. Do NOT run any regeneration steps from the categories above — `--enrich` is a standalone mode.
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## On error
|
|
604
|
+
|
|
605
|
+
If any step above fails unexpectedly, describe what went wrong and ask:
|
|
606
|
+
|
|
607
|
+
> "This looks like a Forge bug. Would you like to file a report to help improve it? Run `/forge:report-bug` — I'll pre-fill the report from this conversation."
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## Post-regeneration persona pack
|
|
612
|
+
|
|
613
|
+
Rebuild the compact persona/skill reference pack at
|
|
614
|
+
`.forge/cache/persona-pack.json`. This is consumed by `meta-orchestrate` and
|
|
615
|
+
`meta-fix-bug` to inject persona references (not verbatim prose) into
|
|
616
|
+
subagent prompts when `FORGE_PROMPT_MODE=reference` (the default).
|
|
617
|
+
|
|
618
|
+
The pack compiles YAML frontmatter from `$FORGE_ROOT/meta/personas/meta-*.md`
|
|
619
|
+
and `$FORGE_ROOT/meta/skills/meta-*.md`. It is safe to rebuild on every
|
|
620
|
+
regenerate run (cost: ~50ms, 16 files).
|
|
621
|
+
|
|
622
|
+
```sh
|
|
623
|
+
node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
|
|
624
|
+
--out .forge/cache/persona-pack.json
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
- Exit 0: emit `〇 persona pack refreshed`
|
|
628
|
+
- Exit 1: surface the stderr message (it includes the offending file path
|
|
629
|
+
for missing-frontmatter or malformed-YAML errors) and advise the user
|
|
630
|
+
to file a bug if the error is unexpected.
|
|
631
|
+
|
|
632
|
+
## Post-regeneration context pack
|
|
633
|
+
|
|
634
|
+
Rebuild the architecture context pack at `.forge/cache/context-pack.md` and
|
|
635
|
+
`.forge/cache/context-pack.json`. This is injected into subagent prompts by
|
|
636
|
+
`meta-orchestrate` and `meta-fix-bug` to reduce per-phase architecture doc reads.
|
|
637
|
+
|
|
638
|
+
The pack summarises `engineering/architecture/*.md` (skips `*.draft.md`). If
|
|
639
|
+
the existing pack has `manual: true` in its frontmatter, the builder skips
|
|
640
|
+
and leaves it intact.
|
|
641
|
+
|
|
642
|
+
```sh
|
|
643
|
+
ENGINEERING=$(node "$FORGE_ROOT/tools/manage-config.cjs" get paths.engineering 2>/dev/null || echo engineering)
|
|
644
|
+
node "$FORGE_ROOT/tools/build-context-pack.cjs" \
|
|
645
|
+
--arch-dir "$ENGINEERING/architecture" \
|
|
646
|
+
--out-md .forge/cache/context-pack.md \
|
|
647
|
+
--out-json .forge/cache/context-pack.json
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
- Exit 0: emit `〇 context pack refreshed`
|
|
651
|
+
- Exit 1: surface the stderr message — most likely the architecture directory
|
|
652
|
+
does not exist yet (run after the knowledge-base category is populated).
|
|
653
|
+
This is non-fatal for regenerate: emit a warning and continue.
|
|
654
|
+
|
|
655
|
+
## Post-regeneration verification
|
|
656
|
+
|
|
657
|
+
After all requested targets have been regenerated, verify structural completeness:
|
|
658
|
+
|
|
659
|
+
```sh
|
|
660
|
+
node "$FORGE_ROOT/tools/check-structure.cjs" --path .
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
- If exit 0: emit `〇 All expected generated files are present.`
|
|
664
|
+
- If exit 1: list the missing files by namespace and suggest running `/forge:rebuild <namespace>` for the affected category or categories.
|