@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,138 @@
|
|
|
1
|
+
# Phase 1 — Collect
|
|
2
|
+
|
|
3
|
+
**Deliverable:** `.forge/config.json` with all required fields.
|
|
4
|
+
|
|
5
|
+
Set `$FORGE_ROOT` to the forge plugin directory (the parent of this file's
|
|
6
|
+
parent directory — the folder containing `meta/` and `init/`).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Pre-flight — Knowledge Base Folder
|
|
11
|
+
|
|
12
|
+
Before Phase 1 begins, ask the user where to create the knowledge base folder:
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Forge will create a folder for architecture docs, sprints, bugs, and features.
|
|
16
|
+
Default name: engineering/
|
|
17
|
+
|
|
18
|
+
Does "engineering" conflict with an existing folder in this project? [n/Y]
|
|
19
|
+
If yes, enter your preferred name (e.g. ai-docs, .forge-kb, docs/ai): ___
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- If the user accepts the default (types `n` or presses Enter): no config write needed.
|
|
23
|
+
`paths.engineering` defaults to `"engineering"` in the schema.
|
|
24
|
+
- If the user provides a custom name: write it immediately:
|
|
25
|
+
```sh
|
|
26
|
+
node "$FORGE_ROOT/tools/manage-config.cjs" set paths.engineering "{chosen_name}"
|
|
27
|
+
```
|
|
28
|
+
Note: folder name must not contain spaces.
|
|
29
|
+
|
|
30
|
+
After this question (and any config write), resolve `KB_PATH` for use in all
|
|
31
|
+
subsequent phases:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Steps (follow in order)
|
|
40
|
+
|
|
41
|
+
### Step 1 — Render phase header
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 1 4 "Collect" north
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 2 — Discovery
|
|
48
|
+
|
|
49
|
+
Read each discovery prompt file below, then analyse the project codebase for
|
|
50
|
+
that topic. Summarise your structured findings for each topic before writing
|
|
51
|
+
anything to disk.
|
|
52
|
+
|
|
53
|
+
| Prompt | File |
|
|
54
|
+
|--------|------|
|
|
55
|
+
| Stack | `$FORGE_ROOT/init/discovery/discover-stack.md` |
|
|
56
|
+
| Processes | `$FORGE_ROOT/init/discovery/discover-processes.md` |
|
|
57
|
+
| Database | `$FORGE_ROOT/init/discovery/discover-database.md` |
|
|
58
|
+
| Routing | `$FORGE_ROOT/init/discovery/discover-routing.md` |
|
|
59
|
+
| Testing | `$FORGE_ROOT/init/discovery/discover-testing.md` |
|
|
60
|
+
|
|
61
|
+
Complete all 5 discovery reads before proceeding to Step 3.
|
|
62
|
+
|
|
63
|
+
### Step 3 — Write config.json
|
|
64
|
+
|
|
65
|
+
Using your discovery findings, write `.forge/config.json` with this structure:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"version": "1",
|
|
70
|
+
"project": { "name": "<project name>", "prefix": "<UPPERCASE_ABBREV>" },
|
|
71
|
+
"stack": { "primary": [...], "test": "<framework>", "build": "<tool>", "lint": "<tool>" },
|
|
72
|
+
"commands": { "test": "<test cmd>", "build": "<build cmd>", "lint": "<lint cmd>" },
|
|
73
|
+
"paths": {
|
|
74
|
+
"engineering": "engineering",
|
|
75
|
+
"store": ".forge/store",
|
|
76
|
+
"workflows": ".forge/workflows",
|
|
77
|
+
"commands": ".claude/commands/<prefix-lowercased>",
|
|
78
|
+
"templates": ".forge/templates"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`<prefix-lowercased>` = the `project.prefix` value you chose, lowercased. For example, if prefix is `HELLO`, write `".claude/commands/hello"`.
|
|
84
|
+
|
|
85
|
+
Write using:
|
|
86
|
+
```sh
|
|
87
|
+
node "$FORGE_ROOT/tools/manage-config.cjs" set <key> <value>
|
|
88
|
+
```
|
|
89
|
+
Or write `.forge/config.json` directly as valid JSON.
|
|
90
|
+
|
|
91
|
+
Write `mode` as `"full"` unconditionally:
|
|
92
|
+
```sh
|
|
93
|
+
node "$FORGE_ROOT/tools/manage-config.cjs" set mode "full"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Step 4 — Self-check
|
|
97
|
+
|
|
98
|
+
Read back `.forge/config.json` and confirm all 8 required keys are present
|
|
99
|
+
and non-empty: `version`, `project.name`, `project.prefix`, `stack`,
|
|
100
|
+
`commands`, `paths.engineering`, `paths.store`, `paths.workflows`.
|
|
101
|
+
|
|
102
|
+
If any key is missing or empty, fix it now before proceeding.
|
|
103
|
+
|
|
104
|
+
### Step 5 — Marketplace Skills
|
|
105
|
+
|
|
106
|
+
Read `$FORGE_ROOT/meta/skill-recommendations.md` for the full mapping.
|
|
107
|
+
|
|
108
|
+
Using the stack discovered above, look up matching skills from the recommendation
|
|
109
|
+
mapping. For each match:
|
|
110
|
+
|
|
111
|
+
1. Run `node "$FORGE_ROOT/tools/list-skills.js"` to get all currently installed skill names.
|
|
112
|
+
2. Split matching skills into two buckets: Already installed / Not yet installed.
|
|
113
|
+
3. Group not-yet-installed matches by confidence: High, Medium, Low.
|
|
114
|
+
4. Present to the user for optional installation.
|
|
115
|
+
5. Write `"installedSkills"` to `.forge/config.json` as the union of installed skills.
|
|
116
|
+
6. Track skipped skills for the Report.
|
|
117
|
+
|
|
118
|
+
**If the user skips or installs none:** proceed without blocking.
|
|
119
|
+
|
|
120
|
+
Write `.forge/init-progress.json`:
|
|
121
|
+
```json
|
|
122
|
+
{ "lastPhase": 1, "timestamp": "<current ISO timestamp>" }
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Verify Phase 1
|
|
128
|
+
|
|
129
|
+
After writing `init-progress.json`, verify the deliverable:
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
node "$FORGE_ROOT/tools/verify-phase.cjs" --phase 1
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- **Exit 0:** Phase 1 complete. Proceed to Phase 2.
|
|
136
|
+
- **Exit 1:** Read the JSON output to identify missing fields. Fix them and
|
|
137
|
+
re-run verify once. If it still fails, halt and surface the JSON error to
|
|
138
|
+
the user.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Phase 2 — Discover
|
|
2
|
+
|
|
3
|
+
**Deliverable:** 7 KB architecture docs + 3 index files + `project-context.json` + calibration baseline.
|
|
4
|
+
|
|
5
|
+
Set `$FORGE_ROOT` and resolve `$KB_PATH` from `.forge/config.json`:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Phase gate — verify Phase 1 foundation
|
|
14
|
+
|
|
15
|
+
Before starting any work, verify Phase 1 completed successfully:
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
node "$FORGE_ROOT/tools/verify-phase.cjs" --phase 1
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
If this exits 1, halt and surface the missing fields. Phase 2 cannot proceed
|
|
22
|
+
without a valid `.forge/config.json`.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Steps (follow in order)
|
|
27
|
+
|
|
28
|
+
### Step 1 — Render phase header
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 2 4 "Discover" oracle
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Step 2 — Scaffold directories
|
|
35
|
+
|
|
36
|
+
Create the directory structure (fast Bash operations):
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
mkdir -p "{KB_PATH}/architecture" "{KB_PATH}/business-domain" \
|
|
40
|
+
"{KB_PATH}/sprints" "{KB_PATH}/bugs" "{KB_PATH}/tools" \
|
|
41
|
+
".forge/store/sprints" ".forge/store/tasks" \
|
|
42
|
+
".forge/store/bugs" ".forge/store/events"
|
|
43
|
+
touch "{KB_PATH}/sprints/.gitkeep" "{KB_PATH}/bugs/.gitkeep" \
|
|
44
|
+
".forge/store/sprints/.gitkeep" ".forge/store/tasks/.gitkeep" \
|
|
45
|
+
".forge/store/bugs/.gitkeep" ".forge/store/events/.gitkeep"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Step 3 — Generate KB documents
|
|
49
|
+
|
|
50
|
+
Read `$FORGE_ROOT/init/generation/generate-kb-doc.md` once (the per-subagent rulebook).
|
|
51
|
+
|
|
52
|
+
Generate all 7 knowledge-base documents. For each document, analyse the
|
|
53
|
+
project codebase for that topic and write to its output path. After writing
|
|
54
|
+
each document, read it back and verify the confidence header is present
|
|
55
|
+
(`<!-- AUTO-GENERATED — confidence: NN% -->`).
|
|
56
|
+
|
|
57
|
+
| Document | Output path | Focus |
|
|
58
|
+
|----------|-------------|-------|
|
|
59
|
+
| stack.md | `{KB_PATH}/architecture/stack.md` | Languages, frameworks, runtime, versions |
|
|
60
|
+
| processes.md | `{KB_PATH}/architecture/processes.md` | Services, build/deploy topology |
|
|
61
|
+
| database.md | `{KB_PATH}/architecture/database.md` | Entities, relationships, field types |
|
|
62
|
+
| routing.md | `{KB_PATH}/architecture/routing.md` | API surface, route groups, auth strategy |
|
|
63
|
+
| deployment.md | `{KB_PATH}/architecture/deployment.md` | Environments, CI/CD, infra targets |
|
|
64
|
+
| entity-model.md | `{KB_PATH}/business-domain/entity-model.md` | Full entity inventory with fields |
|
|
65
|
+
| stack-checklist.md | `{KB_PATH}/stack-checklist.md` | Review checklist items from stack + testing |
|
|
66
|
+
|
|
67
|
+
You may spawn all 7 as parallel subagents in a single Agent tool message for speed.
|
|
68
|
+
Wait for all 7 to return. Retry any that returned FAILED: once.
|
|
69
|
+
Any still failing after one retry: halt and surface the id list.
|
|
70
|
+
|
|
71
|
+
### Step 4 — Create index files (sequential)
|
|
72
|
+
|
|
73
|
+
After all leaf docs are written:
|
|
74
|
+
|
|
75
|
+
1. **`{KB_PATH}/architecture/INDEX.md`** — list and link to the 5 architecture docs
|
|
76
|
+
2. **`{KB_PATH}/business-domain/INDEX.md`** — list and link to entity-model.md
|
|
77
|
+
3. **`{KB_PATH}/MASTER_INDEX.md`** — scaffold linking both INDEX files; include
|
|
78
|
+
`## Domain Entities` section listing discovered entities (one per line)
|
|
79
|
+
|
|
80
|
+
Generate these sequentially — each builds on what's already on disk.
|
|
81
|
+
|
|
82
|
+
### Step 5 — Construct project-context.json
|
|
83
|
+
|
|
84
|
+
After all KB docs and MASTER_INDEX are written, construct `.forge/project-context.json`
|
|
85
|
+
inline (do NOT spawn a subagent for this step).
|
|
86
|
+
|
|
87
|
+
Using the `x-placeholder` annotations from
|
|
88
|
+
`$FORGE_ROOT/schemas/project-context.schema.json` as a guide, map discovered
|
|
89
|
+
facts to schema fields. Required fields: `project.name`, `project.prefix`
|
|
90
|
+
(must be non-empty strings). All array fields must be arrays.
|
|
91
|
+
|
|
92
|
+
Write the JSON to `.forge/project-context.json`.
|
|
93
|
+
|
|
94
|
+
**Structural validation failure halts Phase 2** with a descriptive error:
|
|
95
|
+
```
|
|
96
|
+
× Phase 2 validation failed: project.name is missing or empty.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Step 6 — Write calibration baseline
|
|
100
|
+
|
|
101
|
+
After `project-context.json` is written, compute and write `calibrationBaseline`
|
|
102
|
+
into `.forge/config.json`:
|
|
103
|
+
|
|
104
|
+
1. Read `$FORGE_ROOT/.claude-plugin/plugin.json` → `version`
|
|
105
|
+
2. Hash `{KB_PATH}/MASTER_INDEX.md` (strip blank lines + `<!--` lines, SHA-256)
|
|
106
|
+
3. List done sprint IDs from `.forge/store/sprints/`
|
|
107
|
+
4. Merge into config: `calibrationBaseline: { lastCalibrated, version, masterIndexHash, sprintsCovered }`
|
|
108
|
+
|
|
109
|
+
Write `.forge/init-progress.json`:
|
|
110
|
+
```json
|
|
111
|
+
{ "lastPhase": 2, "timestamp": "<current ISO timestamp>" }
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Verify Phase 2
|
|
117
|
+
|
|
118
|
+
After writing `init-progress.json`, verify the deliverable:
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
node "$FORGE_ROOT/tools/verify-phase.cjs" --phase 2 --kb-path "$KB_PATH"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
- **Exit 0:** Phase 2 complete. Proceed to Phase 3.
|
|
125
|
+
- **Exit 1:** Read the JSON output to identify missing documents. Fix them and
|
|
126
|
+
re-run verify once. If it still fails, halt and surface the JSON error to
|
|
127
|
+
the user.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Phase 3 — Materialize
|
|
2
|
+
|
|
3
|
+
**Deliverable:** `.forge/{personas,skills,workflows,templates}` fully populated.
|
|
4
|
+
|
|
5
|
+
This phase is deterministic and requires no LLM calls.
|
|
6
|
+
|
|
7
|
+
Set `$FORGE_ROOT` and resolve `$KB_PATH`:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Phase gate — verify Phase 1 foundation
|
|
16
|
+
|
|
17
|
+
Before starting any work, verify the Phase 1 foundation:
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
node "$FORGE_ROOT/tools/verify-phase.cjs" --phase 1 --foundation-only
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If this exits 1, halt. `project.name` and `project.prefix` are required by
|
|
24
|
+
`substitute-placeholders.cjs`. Missing them causes a hard failure.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Steps (follow in order)
|
|
29
|
+
|
|
30
|
+
### Step 1 — Render phase header
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 3 4 "Materialize" ember
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Step 2 — Build project brief (first pass)
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
node "$FORGE_ROOT/tools/build-init-context.cjs" \
|
|
40
|
+
--config .forge/config.json \
|
|
41
|
+
--personas .forge/personas \
|
|
42
|
+
--templates .forge/templates \
|
|
43
|
+
--kb "$KB_PATH" \
|
|
44
|
+
--out .forge/init-context.md \
|
|
45
|
+
--json-out .forge/init-context.json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The script prints `〇 Brief written — N personas, M templates, K architecture docs` on success.
|
|
49
|
+
If it exits non-zero, halt and surface the error.
|
|
50
|
+
|
|
51
|
+
Note: `.forge/personas/` and `.forge/templates/` are empty at this point —
|
|
52
|
+
the brief will have stub entries. The full content is produced in Step 3 below.
|
|
53
|
+
|
|
54
|
+
### Step 3 — Substitute placeholders (base-pack materialisation)
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
node "$FORGE_ROOT/tools/substitute-placeholders.cjs" \
|
|
58
|
+
--forge-root "$FORGE_ROOT" \
|
|
59
|
+
--base-pack "$FORGE_ROOT/init/base-pack" \
|
|
60
|
+
--config .forge/config.json \
|
|
61
|
+
--context .forge/project-context.json \
|
|
62
|
+
--out .
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Output directories (managed by the tool's `SUBDIR_OUTPUT_MAP`):
|
|
66
|
+
- `base-pack/commands/` → `.claude/commands/<prefix-lowercased>/`
|
|
67
|
+
- `base-pack/personas/` → `.forge/personas/`
|
|
68
|
+
- `base-pack/skills/` → `.forge/skills/`
|
|
69
|
+
- `base-pack/workflows/` → `.forge/workflows/`
|
|
70
|
+
- `base-pack/templates/` → `.forge/templates/`
|
|
71
|
+
|
|
72
|
+
If `project-context.json` is absent or missing required keys, halt Phase 3:
|
|
73
|
+
```
|
|
74
|
+
× Phase 3 aborted: project-context.json is missing or incomplete.
|
|
75
|
+
Ensure Phase 2 (Discover) completed successfully and try again.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Step 4 — build-overlay.cjs smoke test
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
node "$FORGE_ROOT/tools/build-overlay.cjs" --task INIT-SMOKE-TEST --format json 2>&1
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Expected:** exit 1 with "task not found" error (store not yet seeded). This
|
|
85
|
+
is the passing result — it confirms the binary is functional.
|
|
86
|
+
|
|
87
|
+
Emit a warning when exit code is non-zero (expected):
|
|
88
|
+
```
|
|
89
|
+
⚠ build-overlay smoke-test: task INIT-SMOKE-TEST not found in store (expected — store not yet seeded). Overlay binary is functional.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Phase 3 does NOT halt on this smoke test — result is informational.
|
|
93
|
+
|
|
94
|
+
Write `.forge/init-progress.json`:
|
|
95
|
+
```json
|
|
96
|
+
{ "lastPhase": 3, "timestamp": "<current ISO timestamp>" }
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Verify Phase 3
|
|
102
|
+
|
|
103
|
+
After writing `init-progress.json`, verify the deliverable:
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
node "$FORGE_ROOT/tools/verify-phase.cjs" --phase 3
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **Exit 0:** Phase 3 complete. Proceed to Phase 4.
|
|
110
|
+
- **Exit 1:** Read the JSON output. This usually means `substitute-placeholders.cjs`
|
|
111
|
+
ran against an incomplete config. Fix `.forge/config.json` and run
|
|
112
|
+
`/forge:rebuild`, or delete `.forge/init-progress.json` and restart.
|
|
113
|
+
**This is a hard failure — do not continue with partial Phase 3.**
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Phase 4 — Register
|
|
2
|
+
|
|
3
|
+
**Deliverable:** Versioning, manifest, caches, store entries, agent linking — fully registered.
|
|
4
|
+
|
|
5
|
+
This phase is deterministic and requires no LLM calls. Execute all 11 steps in order.
|
|
6
|
+
|
|
7
|
+
Set `$FORGE_ROOT` and resolve `$KB_PATH`:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
KB_PATH=$(node -e "try{console.log(require('./.forge/config.json').paths.engineering)}catch{console.log('engineering')}")
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Steps (follow in order)
|
|
16
|
+
|
|
17
|
+
### Step 1 — Render phase header
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
node "$FORGE_ROOT/tools/banners.cjs" --phase 4 4 "Register" forge
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Step 2 — Tools registration
|
|
24
|
+
|
|
25
|
+
Read `$FORGE_ROOT/init/generation/generate-tools.md` and follow it.
|
|
26
|
+
|
|
27
|
+
**Input**: `.forge/config.json`
|
|
28
|
+
**Output**: `paths.forgeRoot` written to `.forge/config.json`, schema copies to `.forge/schemas/`
|
|
29
|
+
|
|
30
|
+
### Step 3 — Enhancement substrate (FR-007)
|
|
31
|
+
|
|
32
|
+
Materialize the substrate for post-init hooks:
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
mkdir -p .forge/enhancements/
|
|
36
|
+
cp "$FORGE_ROOT/schemas/project-overlay.schema.json" .forge/schemas/
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Step 4 — structure-versions.json
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
node "$FORGE_ROOT/tools/manage-versions.cjs" init
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Step 5 — generation-manifest.json
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
node "$FORGE_ROOT/tools/generation-manifest.cjs" record-all
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Step 6 — persona-pack.json
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
node "$FORGE_ROOT/tools/build-persona-pack.cjs" \
|
|
55
|
+
--out .forge/cache/persona-pack.json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Step 7 — context-pack.md / context-pack.json
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
node "$FORGE_ROOT/tools/build-context-pack.cjs" \
|
|
62
|
+
--arch-dir "$KB_PATH/architecture" \
|
|
63
|
+
--out-md .forge/cache/context-pack.md \
|
|
64
|
+
--out-json .forge/cache/context-pack.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Step 8 — init-context.json / init-context.md (final rebuild)
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
node "$FORGE_ROOT/tools/build-init-context.cjs" \
|
|
71
|
+
--config .forge/config.json \
|
|
72
|
+
--personas .forge/personas \
|
|
73
|
+
--templates .forge/templates \
|
|
74
|
+
--kb "$KB_PATH" \
|
|
75
|
+
--out .forge/init-context.md \
|
|
76
|
+
--json-out .forge/init-context.json
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Step 9 — Store seed
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
node "$FORGE_ROOT/tools/seed-store.cjs"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Step 10 — Update-check cache
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
node -e "
|
|
89
|
+
const fs = require('fs');
|
|
90
|
+
const pluginPkg = JSON.parse(fs.readFileSync('$FORGE_ROOT/.claude-plugin/plugin.json', 'utf8'));
|
|
91
|
+
const cache = {
|
|
92
|
+
lastChecked: new Date().toISOString(),
|
|
93
|
+
installedVersion: pluginPkg.version,
|
|
94
|
+
latestVersion: pluginPkg.version,
|
|
95
|
+
upToDate: true
|
|
96
|
+
};
|
|
97
|
+
fs.mkdirSync('.forge', { recursive: true });
|
|
98
|
+
fs.writeFileSync('.forge/update-check-cache.json', JSON.stringify(cache, null, 2) + '\n', 'utf8');
|
|
99
|
+
console.log('ノ update-check-cache.json written');
|
|
100
|
+
"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Step 11 — Tomoshibi (refresh-kb-links)
|
|
104
|
+
|
|
105
|
+
Use the Skill tool:
|
|
106
|
+
```
|
|
107
|
+
skill: "forge:refresh-kb-links"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Fallback if unavailable:
|
|
111
|
+
```
|
|
112
|
+
△ Run /forge:refresh-kb-links to wire KB links into your agent instruction files.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 12 — Git hygiene — gitignore transient store paths
|
|
116
|
+
|
|
117
|
+
1. Check whether `.gitignore` exists at project root:
|
|
118
|
+
```sh
|
|
119
|
+
ls .gitignore 2>/dev/null
|
|
120
|
+
```
|
|
121
|
+
If absent, skip this step.
|
|
122
|
+
|
|
123
|
+
2. If `.gitignore` exists, check whether `.forge/store/events/` is already
|
|
124
|
+
ignored (any line containing `.forge/store/events/`, `.forge/store/events`,
|
|
125
|
+
`.forge/store/`, or `.forge/`).
|
|
126
|
+
- Found: emit `〇 .forge/store/events/ already gitignored — skipped.`
|
|
127
|
+
|
|
128
|
+
3. If not already ignored, unconditionally append:
|
|
129
|
+
```
|
|
130
|
+
# Forge — transient agent event logs (one file per phase, do not commit)
|
|
131
|
+
.forge/store/events/
|
|
132
|
+
```
|
|
133
|
+
Emit `〇 Appended .forge/store/events/ to .gitignore.`
|
|
134
|
+
|
|
135
|
+
### Step 13 — Agent instruction file linking
|
|
136
|
+
|
|
137
|
+
Check whether any agent instruction file exists at the project root:
|
|
138
|
+
```sh
|
|
139
|
+
ls CLAUDE.md AGENTS.md CLAUDE.local.md .cursorrules 2>/dev/null
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
If NONE exists, prompt:
|
|
143
|
+
```
|
|
144
|
+
No agent instruction file found. Create a minimal CLAUDE.md with Forge KB links? [Y/n]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
If Y (default), create `CLAUDE.md` with:
|
|
148
|
+
- Project name header
|
|
149
|
+
- Links to `{KB_PATH}/MASTER_INDEX.md`, `{KB_PATH}/architecture/INDEX.md`,
|
|
150
|
+
`{KB_PATH}/business-domain/INDEX.md`
|
|
151
|
+
- Canonical Forge workflow table
|
|
152
|
+
- Footer: `Generated by /forge:init. Run /forge:refresh-kb-links to update.`
|
|
153
|
+
|
|
154
|
+
If one already exists: skip. Do NOT modify existing files.
|
|
155
|
+
|
|
156
|
+
Delete `.forge/init-progress.json` — init is complete:
|
|
157
|
+
```sh
|
|
158
|
+
rm -f .forge/init-progress.json
|
|
159
|
+
```
|
|
@@ -1,38 +1,35 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"generated": "2026-05-
|
|
2
|
+
"version": "1.0.3",
|
|
3
|
+
"generated": "2026-05-28",
|
|
4
4
|
"note": "Tamper-evident only. Authoritative source: /forge:update from remote.",
|
|
5
5
|
"files": {
|
|
6
|
-
"commands/add-pipeline.md": "
|
|
7
|
-
"commands/add-task.md": "
|
|
6
|
+
"commands/add-pipeline.md": "529a2fc01be49815efa2cf1147528827ff1bfc12ce2ac8663b5a3a9781f8682e",
|
|
7
|
+
"commands/add-task.md": "ce3d66fc38e7e0a7592705c559425c6e122f25280b838b631ad44e514bd64e04",
|
|
8
8
|
"commands/ask.md": "df15f0aa68c93d65bfef05adb514c377bfc65617cafcd79534eb9b4149302657",
|
|
9
|
-
"commands/
|
|
10
|
-
"commands/config.md": "
|
|
11
|
-
"commands/enhance.md": "
|
|
12
|
-
"commands/health.md": "
|
|
13
|
-
"commands/init.md": "
|
|
14
|
-
"commands/
|
|
15
|
-
"commands/
|
|
16
|
-
"commands/
|
|
17
|
-
"commands/regenerate.md": "7c14f87b1bb178dd98ebdf0efafb86792c2b8b079bc5052d02a7e618165ec525",
|
|
18
|
-
"commands/remove.md": "de8802ee8ad5db4c4f3d0f526eb8735ab7de1a4b8ad307355d11dac5e1e04fc6",
|
|
9
|
+
"commands/check-agent.md": "f92121cb150d4cf601654e25c28d0c13389039518d05433f1040d727054b127e",
|
|
10
|
+
"commands/config.md": "e67185f98cf0b045890398083991b9d48f32bf0d53bafda1eaca3ce0337ce49c",
|
|
11
|
+
"commands/enhance.md": "d28f6414119e84973809d32900bb7245b51f565aed86112bc7a994bc6941b547",
|
|
12
|
+
"commands/health.md": "29c3e5f9808d996f53a432c4b3aff1c3346d7a40fff54518d8ea2ac2c6ba9d12",
|
|
13
|
+
"commands/init.md": "cf7a70d55f718304820c310465071d3eea9d14a43131623f46b686499f630d4d",
|
|
14
|
+
"commands/rebuild.md": "e6d1e0bc29fd21c4c9109d8f40045b782207dfa6db2d98a9bf8c7254a80f09c6",
|
|
15
|
+
"commands/remove.md": "0ca5ec94d52959afaadd74910bd2c81c9872b71c9cc1ce8b89e5af69c06b304f",
|
|
16
|
+
"commands/repair.md": "22e21614eee31ee630ead3f587b0b948b8c537e54ecef3b65e7d819c55c0ebd4",
|
|
19
17
|
"commands/report-bug.md": "af8a54bf8887b35e5c880898dd45783f6c2e80d3dc031d6479a6be613ac43053",
|
|
20
|
-
"commands/
|
|
21
|
-
"commands/
|
|
22
|
-
"commands/update
|
|
23
|
-
"commands/update.md": "a7317f919e79cab165ab05b477f0f6a919ea12b159ddd6c06bec103cf85c4337",
|
|
18
|
+
"commands/search.md": "befc4ba9f3146e7599308b35b95ec315e16895c0c18c9c2bab7549619d79bf1c",
|
|
19
|
+
"commands/status.md": "2fa82a0b11d493918781aec6d95c39411f84fa923662ff3152b6de0cc830d755",
|
|
20
|
+
"commands/update.md": "a7eac4362a927eae708ee3844ef8d920f3166d1eafde36323d2dd92789fbdec9",
|
|
24
21
|
"agents/store-query-validator.md": "f4c3573edcf6e28809515705362df611806a805c5269404fb17e31433cf3a81c",
|
|
25
|
-
"agents/tomoshibi.md": "
|
|
26
|
-
"hooks/check-update.cjs": "
|
|
22
|
+
"agents/tomoshibi.md": "0c1032df80dfc25a4f482b1276965b5318754d95ccde9f24820846d564e49a27",
|
|
23
|
+
"hooks/check-update.cjs": "9607cc0c51bedcbc123f5ea1d7a492916f29ee1f838846eec64776d5df70bbea",
|
|
27
24
|
"hooks/forge-permissions.cjs": "8de18fe7e6c9ee1751926275a37f4bb68a5a53090d366d2aa44157c106e7857e",
|
|
28
|
-
"hooks/post-init.cjs": "
|
|
29
|
-
"hooks/post-sprint.cjs": "
|
|
30
|
-
"hooks/triage-error.cjs": "
|
|
25
|
+
"hooks/post-init.cjs": "b05d65e7192d126733995989998a0b480604e0cc152887e6d7d0807fba3cf70d",
|
|
26
|
+
"hooks/post-sprint.cjs": "28ddbd2c49d8b746c35d23a90b02362bc684d188159536a971b2d650bb85f3a9",
|
|
27
|
+
"hooks/triage-error.cjs": "e47fcb81fd0f99b8ecc449b38765cdc6929bde2461b5f1727d26bc31f76bfcfa",
|
|
31
28
|
"hooks/validate-write.cjs": "3ec7bbbb2cc19f22c78da5a9e7b5031066f4b669c76a10c9f8a92a1a48fcea0a",
|
|
32
29
|
"schemas/transitions/bug.json": "27b17da42d1cebffbd4f61ab3dcd432a0017aa71997d548ed80d22c2fc3fad6a",
|
|
33
30
|
"schemas/transitions/sprint.json": "2e0a629396e687b0ca88e1814ac3e35d84533a5d55b25237ab67feddce3c9deb",
|
|
34
31
|
"schemas/transitions/task.json": "4c71849747baa0d585756e57c56325ff6219c078178374e60815dff91e25e3e7",
|
|
35
|
-
"schemas/enum-catalog.json": "
|
|
32
|
+
"schemas/enum-catalog.json": "93dc3d1656d9d638c8eaecc14ce66554b63149a4779869e6536cf0e620e5b37b",
|
|
36
33
|
"tools/verify-integrity.cjs": "3ec3c970dd3d7c3001f8f373bcc40556803eadd2fc2afafb14f1c232cba4cc3f"
|
|
37
34
|
}
|
|
38
35
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
## Forge Tool Discipline
|
|
2
|
+
|
|
3
|
+
All forge_* tools wrap local .cjs scripts via direct exec — deterministic, no LLM,
|
|
4
|
+
no agent loop. Use them for all Forge-managed data — never bypass with god tools.
|
|
5
|
+
|
|
6
|
+
### Data boundaries — off-limits to `read`, `cat`, `bash`, `grep`
|
|
7
|
+
|
|
8
|
+
These paths contain Forge-managed data. Never access them with generic tools.
|
|
9
|
+
|
|
10
|
+
| Path | Owned by | Use instead |
|
|
11
|
+
|------|----------|-------------|
|
|
12
|
+
| `.forge/store/**` | Store | `forge_store`, `forge_store_query` |
|
|
13
|
+
| `{paths.engineering}/**/` task/bug/sprint dirs | Artifacts | `forge_artifact read` (covers all 15 artifact types) |
|
|
14
|
+
| `{paths.engineering}/**/INDEX.md` | KB | `forge_store_query` or `forge_collate` |
|
|
15
|
+
| `{paths.engineering}/MASTER_INDEX.md` | KB | `forge_store_query` or `forge_collate` |
|
|
16
|
+
|
|
17
|
+
`{paths.engineering}` is the project's KB folder name from `.forge/config.json`
|
|
18
|
+
(default: `engineering`). Never hardcode it.
|
|
19
|
+
|
|
20
|
+
Source files (`.py`, `.ts`, `.js`, etc.), persona `.md`, workflow `.md`, and
|
|
21
|
+
project config outside `.forge/store/` are fine to `read`/`grep` directly.
|
|
22
|
+
|
|
23
|
+
### Tool routing
|
|
24
|
+
|
|
25
|
+
- **Store CRUD:** call `forge_store` (named tool). Canonical write is 2-positional:
|
|
26
|
+
`{command:"write", args:["<entity>","<json>"]}`. The id lives INSIDE the json
|
|
27
|
+
(e.g. `{"sprintId":"X-S01","title":"...","status":"planning","taskIds":[],"createdAt":"..."}`).
|
|
28
|
+
DO NOT pass id as a separate arg — `["sprint","X-S01","<json>"]` (3-arg) FAILS.
|
|
29
|
+
- Before writing any record, call `forge_store_template` for the canonical shape and
|
|
30
|
+
`forge_store_describe` for required fields, status enums, and FK constraints.
|
|
31
|
+
- Use `forge_store_query` (nlp/query/schema) for lookups instead of grepping `.forge/store/`.
|
|
32
|
+
- Use `forge_collate` to refresh the KB; `forge_validate_store` for integrity checks;
|
|
33
|
+
`forge_config` for project config reads/writes.
|
|
34
|
+
- Use `forge_artifact` to read/write/list phase artifacts (PLAN.md, PROGRESS.md, *-SUMMARY.json).
|
|
35
|
+
Never construct artifact paths manually — the tool resolves them from entity IDs.
|
|
36
|
+
- Use `forge_verify_apply` after applying edits to confirm changes landed on disk.
|
|
37
|
+
If `unchanged` is non-empty, re-apply those edits.
|
|
38
|
+
- Never `bash node "$FORGE_ROOT/tools/store-cli.cjs" ...` — use the named MCP tool instead.
|
|
39
|
+
The tool is schema-validated and shorter.
|
|
40
|
+
- Workflow text saying `forge_store write sprint '<json>'` means: call the MCP tool
|
|
41
|
+
`forge_store` with that 2-positional shape. Not a shell command.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Meta-Template: Sprint Retrospective
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Defines the structure of the sprint retrospective document — metrics,
|
|
6
|
+
learnings, and improvements.
|
|
7
|
+
|
|
8
|
+
## Sections
|
|
9
|
+
|
|
10
|
+
### Required
|
|
11
|
+
- **Sprint Summary** — tasks completed, failed, carried over
|
|
12
|
+
- **Metrics** — plan iterations, code review iterations, time per task
|
|
13
|
+
- **What Went Well** — patterns that worked
|
|
14
|
+
- **What to Improve** — friction points, recurring issues
|
|
15
|
+
- **Knowledge Base Updates** — what was confirmed, added, or removed
|
|
16
|
+
- **Stack Checklist Changes** — items added or pruned
|
|
17
|
+
|
|
18
|
+
### Optional
|
|
19
|
+
- **Workflow Improvements** — proposed edits to workflow files
|
|
20
|
+
- **Bug Pattern Analysis** — recurring root cause categories
|
|
21
|
+
- **Merge Conflicts** — if parallel mode, what conflicted and why
|
|
22
|
+
- **Recommendations for Next Sprint** — scope, focus, mode
|
|
23
|
+
|
|
24
|
+
## Generation Instructions
|
|
25
|
+
- Reference the project's sprint artifact paths for data gathering
|
|
26
|
+
- Reference the project's domain docs and stack checklist
|
|
27
|
+
- Include the project's workflow file paths for proposed edits
|
|
28
|
+
- Reference the project's specific tech debt areas
|