@entelligentsia/forgecli 1.0.3 → 1.0.14
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 +93 -0
- package/README.md +2 -1
- package/dist/CHANGELOG-forge-plugin.md +250 -0
- package/dist/CHANGELOG-pi.md +94 -0
- package/dist/bin/forge.js +0 -0
- package/dist/extensions/forgecli/config-layer.d.ts +16 -0
- package/dist/extensions/forgecli/config-layer.js +5 -0
- package/dist/extensions/forgecli/config-layer.js.map +1 -1
- package/dist/extensions/forgecli/dashboard/component.d.ts +102 -0
- package/dist/extensions/forgecli/dashboard/component.js +882 -0
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/register.d.ts +2 -0
- package/dist/extensions/forgecli/dashboard/register.js +45 -0
- package/dist/extensions/forgecli/dashboard/register.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/view-model.d.ts +35 -0
- package/dist/extensions/forgecli/dashboard/view-model.js +54 -0
- package/dist/extensions/forgecli/dashboard/view-model.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.js +72 -7
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-artifact-tool.js +27 -4
- package/dist/extensions/forgecli/forge-artifact-tool.js.map +1 -1
- package/dist/extensions/forgecli/forge-cli-schema.json +4 -0
- package/dist/extensions/forgecli/forge-commands.js +1 -0
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init/phase4-register.js +53 -0
- package/dist/extensions/forgecli/forge-init/phase4-register.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.js +6 -4
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.js +2 -2
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/index.js +5 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/lib/halt-advisor.d.ts +54 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js +90 -0
- package/dist/extensions/forgecli/lib/halt-advisor.js.map +1 -0
- package/dist/extensions/forgecli/migration-engine.js +25 -12
- package/dist/extensions/forgecli/migration-engine.js.map +1 -1
- package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +25 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js +183 -0
- package/dist/extensions/forgecli/orchestrator-status-bar.js.map +1 -0
- package/dist/extensions/forgecli/orchestrator-tree.d.ts +96 -0
- package/dist/extensions/forgecli/orchestrator-tree.js +390 -0
- package/dist/extensions/forgecli/orchestrator-tree.js.map +1 -0
- package/dist/extensions/forgecli/project-orientation.js +12 -8
- package/dist/extensions/forgecli/project-orientation.js.map +1 -1
- package/dist/extensions/forgecli/regenerate.d.ts +16 -0
- package/dist/extensions/forgecli/regenerate.js +110 -0
- package/dist/extensions/forgecli/regenerate.js.map +1 -1
- package/dist/extensions/forgecli/run-sprint.js +33 -3
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +32 -0
- package/dist/extensions/forgecli/run-task.js +185 -12
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/subagent/phase-guard.js +15 -5
- package/dist/extensions/forgecli/subagent/phase-guard.js.map +1 -1
- package/dist/extensions/forgecli/subagent/phase-summary-map.d.ts +1 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js +17 -0
- package/dist/extensions/forgecli/subagent/phase-summary-map.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.js +105 -764
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/viewport-events.js +32 -0
- package/dist/extensions/forgecli/viewport-events.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +1 -1
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +1 -1
- package/dist/forge-payload/.base-pack/commands/run-task.md +1 -1
- package/dist/forge-payload/.base-pack/personas/architect.md +1 -1
- package/dist/forge-payload/.base-pack/personas/bug-fixer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/collator.md +3 -3
- package/dist/forge-payload/.base-pack/personas/engineer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/librarian.md +1 -1
- package/dist/forge-payload/.base-pack/personas/orchestrator.md +1 -1
- package/dist/forge-payload/.base-pack/personas/product-manager.md +1 -1
- package/dist/forge-payload/.base-pack/personas/qa-engineer.md +1 -1
- package/dist/forge-payload/.base-pack/personas/supervisor.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/friction-emit.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/progress-reporting.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/store-cli-verbs.md +29 -5
- package/dist/forge-payload/.base-pack/workflows/architect_approve.md +8 -10
- package/dist/forge-payload/.base-pack/workflows/architect_review_sprint_completion.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/architect_sprint_intake.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/architect_sprint_plan.md +5 -5
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -7
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +7 -9
- package/dist/forge-payload/.base-pack/workflows/enhance.md +5 -5
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +9 -9
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +12 -13
- package/dist/forge-payload/.base-pack/workflows/plan_task.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/review_code.md +8 -8
- package/dist/forge-payload/.base-pack/workflows/review_plan.md +8 -8
- package/dist/forge-payload/.base-pack/workflows/sprint_retrospective.md +3 -3
- package/dist/forge-payload/.base-pack/workflows/triage.md +13 -10
- package/dist/forge-payload/.base-pack/workflows/update_implementation.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/update_plan.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/validate_task.md +6 -8
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +490 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-sprint.js +416 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +608 -0
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/.schemas/bug.schema.json +1 -0
- package/dist/forge-payload/.schemas/config.schema.json +2 -3
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +16 -0
- package/dist/forge-payload/.schemas/migrations.json +299 -0
- package/dist/forge-payload/.schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/.schemas/task.schema.json +1 -0
- package/dist/forge-payload/commands/health.md +29 -0
- package/dist/forge-payload/commands/rebuild.md +143 -15
- package/dist/forge-payload/commands/update.md +28 -27
- package/dist/forge-payload/hooks/preflight-session.cjs +99 -0
- package/dist/forge-payload/init/phases/phase-3-materialize.md +18 -5
- package/dist/forge-payload/integrity.json +7 -6
- package/dist/forge-payload/meta/fragments/tool-discipline.md +1 -1
- package/dist/forge-payload/meta/personas/meta-architect.md +1 -1
- package/dist/forge-payload/meta/personas/meta-bug-fixer.md +1 -1
- package/dist/forge-payload/meta/personas/meta-collator.md +7 -7
- package/dist/forge-payload/meta/personas/meta-engineer.md +1 -1
- package/dist/forge-payload/meta/personas/meta-orchestrator.md +1 -1
- package/dist/forge-payload/meta/personas/meta-supervisor.md +1 -1
- package/dist/forge-payload/meta/tool-specs/store-cli.spec.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/friction-emit.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/iron-laws.md +1 -1
- package/dist/forge-payload/meta/workflows/_fragments/progress-reporting.md +2 -2
- package/dist/forge-payload/meta/workflows/_fragments/store-cli-verbs.md +29 -5
- package/dist/forge-payload/meta/workflows/meta-approve.md +8 -10
- package/dist/forge-payload/meta/workflows/meta-bug-triage.md +13 -10
- package/dist/forge-payload/meta/workflows/meta-collate.md +6 -8
- package/dist/forge-payload/meta/workflows/meta-commit.md +7 -9
- package/dist/forge-payload/meta/workflows/meta-enhance.md +5 -5
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +35 -11
- package/dist/forge-payload/meta/workflows/meta-implement.md +18 -9
- package/dist/forge-payload/meta/workflows/meta-migrate.md +13 -14
- package/dist/forge-payload/meta/workflows/meta-new-sprint.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +175 -82
- package/dist/forge-payload/meta/workflows/meta-plan-sprint.md +6 -6
- package/dist/forge-payload/meta/workflows/meta-plan-task.md +12 -6
- package/dist/forge-payload/meta/workflows/meta-retro.md +4 -4
- package/dist/forge-payload/meta/workflows/meta-retrospective.md +4 -4
- package/dist/forge-payload/meta/workflows/meta-review-implementation.md +8 -8
- package/dist/forge-payload/meta/workflows/meta-review-plan.md +8 -8
- package/dist/forge-payload/meta/workflows/meta-review-sprint-completion.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-sprint-intake.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-sprint-plan.md +6 -6
- package/dist/forge-payload/meta/workflows/meta-update-implementation.md +2 -2
- package/dist/forge-payload/meta/workflows/meta-update-plan.md +2 -2
- package/dist/forge-payload/meta/workflows/meta-validate.md +6 -8
- package/dist/forge-payload/schemas/_defs/locator.schema.json +13 -0
- package/dist/forge-payload/schemas/bug.schema.json +1 -0
- package/dist/forge-payload/schemas/config.schema.json +2 -3
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +16 -0
- package/dist/forge-payload/schemas/sprint.schema.json +1 -0
- package/dist/forge-payload/schemas/structure-manifest.json +76 -73
- package/dist/forge-payload/schemas/task.schema.json +1 -0
- package/dist/forge-payload/skills/refresh-kb-links/SKILL.md +14 -7
- package/dist/forge-payload/tools/artifact-store.cjs +242 -0
- package/dist/forge-payload/tools/artifact.cjs +60 -120
- package/dist/forge-payload/tools/banners.cjs +29 -10
- package/dist/forge-payload/tools/check-structure.cjs +88 -7
- package/dist/forge-payload/tools/collate.cjs +16 -2
- package/dist/forge-payload/tools/lib/artifact-kinds.cjs +95 -0
- package/dist/forge-payload/tools/lib/store-nlp.cjs +6 -0
- package/dist/forge-payload/tools/lib/store-query-exec.cjs +39 -5
- package/dist/forge-payload/tools/lib/suggest.cjs +2 -1
- package/dist/forge-payload/tools/manage-config.cjs +5 -7
- package/dist/forge-payload/tools/parse-gates.cjs +73 -1
- package/dist/forge-payload/tools/postflight-gate.cjs +252 -0
- package/dist/forge-payload/tools/preflight-gate.cjs +102 -5
- package/dist/forge-payload/tools/store-cli.cjs +50 -15
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -4
- package/dist/forge-payload/tools/verify-phase.cjs +17 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts +5 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +81 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +19 -24
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +14 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +22 -8
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +374 -122
- 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 +424 -232
- package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js +38 -2
- package/node_modules/@earendil-works/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js +21 -12
- package/node_modules/@earendil-works/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/azure-openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google-vertex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js +5 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/google.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +3 -4
- package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.js +2 -3
- package/node_modules/@earendil-works/pi-ai/dist/providers/mistral.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 +159 -78
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js +16 -11
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js +4 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js +6 -10
- package/node_modules/@earendil-works/pi-ai/dist/providers/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/stream.js +14 -2
- package/node_modules/@earendil-works/pi-ai/dist/stream.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +14 -4
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js +34 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/abort-signals.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts +9 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js +8 -7
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/device-code.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts +10 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js +179 -79
- package/node_modules/@earendil-works/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +94 -0
- package/node_modules/@earendil-works/pi-coding-agent/README.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js +27 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js +15 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/config.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session-services.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +5 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +28 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +18 -24
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +8 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +7 -5
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js +65 -13
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts +9 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js +134 -11
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/resolve-config-value.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js +10 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts +6 -7
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +75 -28
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +14 -9
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.js +0 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/system-prompt.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 +7 -10
- 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/find.d.ts.map +1 -1
- 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.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 -7
- 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/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/read.js +6 -7
- 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/render-utils.d.ts +5 -2
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.js +17 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/render-utils.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 +5 -6
- 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/index.d.ts +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +69 -16
- package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js +118 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/migrations.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +1 -3
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +2 -4
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +59 -6
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/theme/theme.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 +3 -1
- 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/modes/rpc/rpc-types.d.ts +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js +13 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/deprecation.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts +3 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js +7 -0
- package/node_modules/@earendil-works/pi-coding-agent/dist/utils/json.js.map +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +13 -10
- package/node_modules/@earendil-works/pi-coding-agent/docs/development.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +12 -6
- package/node_modules/@earendil-works/pi-coding-agent/docs/models.md +25 -12
- package/node_modules/@earendil-works/pi-coding-agent/docs/providers.md +13 -5
- package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +2 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sdk.md +6 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/session-format.md +1 -1
- package/node_modules/@earendil-works/pi-coding-agent/docs/sessions.md +8 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +7 -3
- package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +2 -0
- package/node_modules/@earendil-works/pi-coding-agent/docs/tui.md +2 -2
- package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +9 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/README.md +1 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/index.ts +1 -1
- 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/index.ts +54 -3
- 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/git-merge-and-resolve.ts +115 -0
- package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/input-transform-streaming.ts +39 -0
- 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 +443 -61
- package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
- package/node_modules/@earendil-works/pi-tui/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +24 -83
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js +7 -55
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +7 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +12 -2
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +1 -1
- 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 +34 -7
- 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 +33 -10
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +172 -37
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +6 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js +27 -15
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts +25 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js +96 -0
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +1 -0
- package/node_modules/@earendil-works/pi-tui/package.json +2 -2
- package/node_modules/@entelligentsia/forge-compress/LICENSE +21 -0
- package/node_modules/@entelligentsia/forge-compress/README.md +85 -0
- package/node_modules/@mariozechner/clipboard/Cargo.toml +3 -3
- package/node_modules/@mariozechner/clipboard/index.d.ts +34 -20
- package/node_modules/@mariozechner/clipboard/index.js +546 -257
- package/node_modules/@mariozechner/clipboard/package.json +5 -6
- package/node_modules/@mariozechner/clipboard/package.json.prepack-backup +14 -14
- package/node_modules/@mariozechner/clipboard/src/lib.rs +4 -9
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/clipboard.linux-x64-gnu.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-gnu/package.json +2 -2
- package/package.json +7 -7
- package/dist/bin/forgecli.d.ts +0 -2
- package/dist/bin/forgecli.js +0 -6
- package/dist/bin/forgecli.js.map +0 -1
- package/dist/extensions/forgecli/config-tui/index.d.ts +0 -5
- package/dist/extensions/forgecli/config-tui/index.js +0 -5
- package/dist/extensions/forgecli/config-tui/index.js.map +0 -1
- package/dist/extensions/forgecli/loaders/persona-skill-loader.d.ts +0 -45
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js +0 -227
- package/dist/extensions/forgecli/loaders/persona-skill-loader.js.map +0 -1
- package/dist/extensions/forgecli/loaders/template-render.d.ts +0 -20
- package/dist/extensions/forgecli/loaders/template-render.js +0 -85
- package/dist/extensions/forgecli/loaders/template-render.js.map +0 -1
- package/dist/extensions/forgecli/loaders/workflow-loader.d.ts +0 -41
- package/dist/extensions/forgecli/loaders/workflow-loader.js +0 -164
- package/dist/extensions/forgecli/loaders/workflow-loader.js.map +0 -1
- package/dist/forge-payload/.base-pack/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/.base-pack/commands/retrospective.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-intake.md +0 -6
- package/dist/forge-payload/.base-pack/commands/sprint-plan.md +0 -6
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +0 -446
- package/dist/forge-payload/.base-pack/workflows/orchestrate_task.md +0 -934
- package/dist/forge-payload/.base-pack/workflows/run_sprint.md +0 -225
- package/dist/forge-payload/commands/calibrate.md +0 -10
- package/dist/forge-payload/commands/materialize.md +0 -119
- package/dist/forge-payload/commands/migrate.md +0 -12
- package/dist/forge-payload/commands/quiz-agent.md +0 -6
- package/dist/forge-payload/commands/regenerate.md +0 -6
- package/dist/forge-payload/commands/store-query.md +0 -6
- package/dist/forge-payload/commands/store-repair.md +0 -6
- package/dist/forge-payload/commands/update-tools.md +0 -10
- package/dist/forge-payload/meta/templates/meta-retrospective.md +0 -28
- package/dist/forge-payload/tools/prompts/sprint-plan-prompt.md +0 -70
- package/dist/forge-payload/tools/schemas/task-list.schema.json +0 -53
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts +0 -4
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +0 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts +0 -20
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +0 -92
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts +0 -18
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +0 -42
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts +0 -10
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +0 -31
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts +0 -30
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +0 -170
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts +0 -26
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +0 -90
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js.map +0 -1
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +0 -3
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/clipboard.linux-x64-musl.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +0 -25
|
@@ -42,7 +42,7 @@ fields (`model`, `provider`, `eventId`, timestamps, token counts) are
|
|
|
42
42
|
at drain time.
|
|
43
43
|
|
|
44
44
|
```sh
|
|
45
|
-
node
|
|
45
|
+
node .forge/tools/friction-emit.cjs \
|
|
46
46
|
--workflow {workflow-key} \
|
|
47
47
|
--persona {persona-noun} \
|
|
48
48
|
--issue skill_unused \
|
|
@@ -21,7 +21,7 @@ An Iron Laws section MUST contain exactly these three bullets in this order:
|
|
|
21
21
|
|
|
22
22
|
- {WORKFLOW_SPECIFIC_LAW}
|
|
23
23
|
- Read `.forge/personas/{persona}.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
24
|
-
- All store I/O via `forge_store` (or `node
|
|
24
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
### Slot definitions
|
|
@@ -25,7 +25,7 @@ orchestrator monitors in real time.
|
|
|
25
25
|
**Writing entries:** Use `store-cli progress`:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
node
|
|
28
|
+
node .forge/tools/store-cli.cjs progress {sprintId} {agentName} {bannerKey} {status} "detail text"
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
**Monitoring:** The orchestrator starts a Monitor on the progress log before
|
|
@@ -34,5 +34,5 @@ spawning each subagent and stops it after the subagent returns.
|
|
|
34
34
|
**Clearing:** The orchestrator clears the progress log at task start:
|
|
35
35
|
|
|
36
36
|
```
|
|
37
|
-
node
|
|
37
|
+
node .forge/tools/store-cli.cjs progress-clear {sprintId}
|
|
38
38
|
```
|
|
@@ -28,20 +28,44 @@ Notes for subagents:
|
|
|
28
28
|
Do not `write` a task back with a new `status` field; the FSM is enforced
|
|
29
29
|
by `update-status`. Syntax requires the field keyword `status` as the third
|
|
30
30
|
argument — four args total:
|
|
31
|
-
`node
|
|
31
|
+
`node .forge/tools/store-cli.cjs update-status task {taskId} status {value}`
|
|
32
32
|
The three-arg form `update-status task {taskId} {value}` is WRONG and will
|
|
33
33
|
error. Always include `status` between the id and the value.
|
|
34
34
|
- **`emit`** appends an event. There is no `append-event` / `add-event`.
|
|
35
|
-
- **`set-summary
|
|
36
|
-
|
|
35
|
+
- **`set-summary <id> <phase>`** / **`set-bug-summary <id> <phase>`** link a
|
|
36
|
+
phase summary onto the entity record. The JSON-file argument is **optional**:
|
|
37
|
+
when omitted, the sidecar is auto-resolved from the record's `path` plus the
|
|
38
|
+
canonical phase→filename map (so `set-summary {taskId} validation` just works).
|
|
39
|
+
Never pass a hand-built `engineering/sprints/.../…-SUMMARY.json` path. Do not
|
|
40
|
+
inline summaries into the entity via `write`.
|
|
41
|
+
- **`forge_store` tool shape (not CLI flags).** The tool has exactly two
|
|
42
|
+
fields: `command` (string) and `args` (positional string array). There is
|
|
43
|
+
NO `entity` / `id` / `phase` named field — passing them silently drops them.
|
|
44
|
+
The summary call is `forge_store({ command:"set-summary", args:["<id>", "<phase>"] })`
|
|
45
|
+
where `args[0]` is the record id and `args[1]` is the LITERAL phase key
|
|
46
|
+
(`plan`, `review_plan`, `implementation`, `code_review`, `validation`,
|
|
47
|
+
`triage`, `approve`). `args[1]` is NEVER the record id and NEVER a path —
|
|
48
|
+
putting the id in both slots is the canonical failure and the phase-ownership
|
|
49
|
+
guard rejects it with `expected summary key '<phase>'`.
|
|
37
50
|
- **Artifact I/O:** Use `forge_artifact` for ALL phase artifact reads and writes
|
|
38
51
|
(PLAN.md, PROGRESS.md, *-SUMMARY.json, CODE_REVIEW.md, etc.). Never construct
|
|
39
52
|
artifact file paths manually — the tool resolves paths from entity IDs and
|
|
40
53
|
validates JSON summary schemas on write. After writing a summary JSON via
|
|
41
|
-
`forge_artifact`, link it to the store record via `forge_store set-summary
|
|
54
|
+
`forge_artifact`, link it to the store record via `forge_store set-summary {id} {phase}` (no path).
|
|
42
55
|
Example: `forge_artifact({ command:"write", entity:"task", entityId:"{taskId}", artifact:"progress", content:"..." })`
|
|
56
|
+
- **Artifact addressing (canonical) — never reconstruct a path.** Address an
|
|
57
|
+
artifact by `(entity, entityId, kind)` via `forge_artifact`, or read the
|
|
58
|
+
entity's `path` field from the store record. The on-disk directory is owned by
|
|
59
|
+
the record's `path`, NOT by any id template. Token glossary:
|
|
60
|
+
- `{sprintId}` / `{taskId}` / `{bugId}` — the **store record filenames**
|
|
61
|
+
(`.forge/store/<kind>s/<id>.json`); deterministic and safe to use as IDs.
|
|
62
|
+
- `{sprint}` / `{task}` / `{bug}` — runtime path-template substitutions used by
|
|
63
|
+
the **preflight gate**, derived from the record's `path` (not the bare ID).
|
|
64
|
+
- The engineering artifact directory always comes from `record.path`.
|
|
65
|
+
These spellings are parsed literally by tools (`preflight-gate.cjs`,
|
|
66
|
+
`collate.cjs`) — do not invent new spellings or rename them in prose.
|
|
43
67
|
- If you need a verb not on this list, run
|
|
44
|
-
`node
|
|
68
|
+
`node .forge/tools/store-cli.cjs --help` before improvising.
|
|
45
69
|
- If you supply an unknown verb, entity type, enum value, or field name,
|
|
46
70
|
store-cli appends a **Did you mean?** suggestion to the error message.
|
|
47
71
|
Suggestions use Levenshtein distance (≤ 2) and a curated drift map for
|
|
@@ -31,7 +31,7 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
31
31
|
|
|
32
32
|
- Approve only when the implementation is consistent with the project's architecture and the deployment posture is understood. Architectural sign-off is not a rubber stamp — it is the last point at which cross-cutting concerns can be caught cheaply.
|
|
33
33
|
- Read `.forge/personas/architect.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
34
|
-
- All store I/O via `forge_store` (or `node
|
|
34
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
35
35
|
|
|
36
36
|
## Store-Write Verification
|
|
37
37
|
|
|
@@ -42,9 +42,8 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
0a. Pre-flight Gate Check:
|
|
45
|
-
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
46
45
|
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
47
|
-
- Run: `node
|
|
46
|
+
- Run: `node .forge/tools/preflight-gate.cjs --phase approve --{entity_kind} {record_id}`
|
|
48
47
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
49
48
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
50
49
|
- Exit 0 → continue.
|
|
@@ -53,7 +52,7 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
53
52
|
- If `--force` is present in the invocation arguments, skip this step entirely.
|
|
54
53
|
- If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
|
|
55
54
|
- Read current task state:
|
|
56
|
-
`node
|
|
55
|
+
`node .forge/tools/store-cli.cjs read task {record_id} --json`
|
|
57
56
|
- Extract the `status` field from the JSON output.
|
|
58
57
|
- Allowed states for this phase: `review-approved`.
|
|
59
58
|
- If the current status is NOT in the allowed set:
|
|
@@ -86,7 +85,7 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
86
85
|
|
|
87
86
|
4. Finalize:
|
|
88
87
|
- Transitions:
|
|
89
|
-
- **Task mode** — Update status: `node
|
|
88
|
+
- **Task mode** — Update status: `node .forge/tools/store-cli.cjs update-status task {taskId} status approved`. The status IS the verdict signal for task-mode commit gate (`STATUS_SOURCE` in `read-verdict.cjs`).
|
|
90
89
|
- **Bug mode** — NO status write. The bug remains `in-progress`. The verdict signal travels through `summaries.approve.verdict` written in step 5 below (read by `read-verdict.cjs § BUG_PHASE_VERDICT_SOURCE`). Writing `bug.status` here — especially writing `approved` or `verified` — violates `meta-fix-bug.md § Iron Laws #2` and is the trap that produced the FORGE-BUG-002 regression.
|
|
91
90
|
- **Do NOT emit a phase event yourself.** The orchestrator (or kickoff handler) owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
92
91
|
|
|
@@ -103,15 +102,14 @@ The Architect gives final sign-off on a completed task after Supervisor approval
|
|
|
103
102
|
"artifact_ref":"ARCHITECT_APPROVAL.md"
|
|
104
103
|
}
|
|
105
104
|
```
|
|
106
|
-
- Call (task mode) — optional for tasks, since `task.status` is the canonical signal
|
|
105
|
+
- Call (task mode) — optional for tasks, since `task.status` is the canonical signal.
|
|
106
|
+
The sidecar path is auto-resolved from the record's `path` — never pass it:
|
|
107
107
|
```
|
|
108
|
-
node
|
|
109
|
-
engineering/sprints/{sprint}/{task}/APPROVE-SUMMARY.json
|
|
108
|
+
node .forge/tools/store-cli.cjs set-summary {taskId} approve
|
|
110
109
|
```
|
|
111
110
|
Or (bug mode) — REQUIRED for bugs, this is the canonical verdict signal:
|
|
112
111
|
```
|
|
113
|
-
node
|
|
114
|
-
engineering/bugs/{bugDir}/APPROVE-SUMMARY.json
|
|
112
|
+
node .forge/tools/store-cli.cjs set-bug-summary {bugId} approve
|
|
115
113
|
```
|
|
116
114
|
- In bug mode, if the set-bug-summary call exits non-zero, fix the sidecar JSON and retry. Do not return without a valid summary — the downstream commit gate has no other way to read the approval verdict.
|
|
117
115
|
```
|
|
@@ -37,7 +37,7 @@ and the only phase that records the route decision read by the orchestrator
|
|
|
37
37
|
reproduction has no business going to plan-fix or implement.
|
|
38
38
|
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
39
39
|
line (emoji, name, tagline) to stdout before any other tool use.
|
|
40
|
-
- All store I/O via `forge_store` (or `node
|
|
40
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`).
|
|
41
41
|
Never edit `.forge/store/*.json` directly.
|
|
42
42
|
- **Triage NEVER writes `bug.status`.** The orchestrator (`meta-fix-bug.md`)
|
|
43
43
|
owns the `reported → triaged` and `triaged → in-progress` transitions.
|
|
@@ -60,8 +60,7 @@ and the only phase that records the route decision read by the orchestrator
|
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
0. Pre-flight Gate Check:
|
|
63
|
-
-
|
|
64
|
-
- Run: `node "$FORGE_ROOT/tools/preflight-gate.cjs" --phase triage --bug {bugId}`
|
|
63
|
+
- Run: `node .forge/tools/preflight-gate.cjs --phase triage --bug {bugId}`
|
|
65
64
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed.
|
|
66
65
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
67
66
|
- Exit 0 → continue.
|
|
@@ -70,7 +69,7 @@ and the only phase that records the route decision read by the orchestrator
|
|
|
70
69
|
- Read `.forge/personas/bug-fixer.md` first; print the persona identity
|
|
71
70
|
line to stdout before any other tool use.
|
|
72
71
|
- Read the bug record:
|
|
73
|
-
`forge_store({ command:"read",
|
|
72
|
+
`forge_store({ command:"read", args:["bug", "{bugId}"] })`
|
|
74
73
|
- Read business domain docs relevant to the reported symptom.
|
|
75
74
|
- store-cli verbs: `read` | `list` | `write` | `emit` |
|
|
76
75
|
`update-status` | `set-summary` | `set-bug-summary` | `describe` |
|
|
@@ -138,13 +137,17 @@ and the only phase that records the route decision read by the orchestrator
|
|
|
138
137
|
|
|
139
138
|
- Call:
|
|
140
139
|
```
|
|
141
|
-
forge_store({ command:"set-bug-summary",
|
|
142
|
-
|
|
143
|
-
file:"engineering/bugs/{bugDir}/TRIAGE-SUMMARY.json" })
|
|
140
|
+
forge_store({ command:"set-bug-summary", args:["{bugId}", "triage"] })
|
|
141
|
+
// sidecar path auto-resolved from the bug record's `path` — never pass it
|
|
144
142
|
```
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
143
|
+
`forge_store` has only `command` + `args` (positional) — no
|
|
144
|
+
`entity`/`id`/`phase` field. `args[0]` is the bug id, `args[1]` is the
|
|
145
|
+
LITERAL phase key `triage` (never the bug id, never a path). See
|
|
146
|
+
`_fragments/store-cli-verbs.md`.
|
|
147
|
+
- If the set-bug-summary call exits non-zero (phase-ownership guard:
|
|
148
|
+
`expected summary key 'triage'`), `args[1]` was wrong — set it to `triage`
|
|
149
|
+
and retry (up to 3 attempts per the Store-Write Verification rule). Do not
|
|
150
|
+
proceed without a valid summary.
|
|
148
151
|
|
|
149
152
|
> **Field-naming caution — runtime-tested.** The route field is named
|
|
150
153
|
> `route`, never `path`. The bug schema's top-level `path` field is the
|
|
@@ -23,7 +23,7 @@ Regenerate markdown views from the JSON store. This is a deterministic operation
|
|
|
23
23
|
|
|
24
24
|
- Collation is a read-and-rewrite of generated markdown. Do not mutate any JSON record under `.forge/store/`; the store is the source of truth and collation flows downstream from it.
|
|
25
25
|
- Read `.forge/personas/collator.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
26
|
-
- All store reads via `forge_store` (or `node
|
|
26
|
+
- All store reads via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
27
27
|
- Do NOT call `set-summary` or `set-bug-summary` from within collation. The collator writes markdown views and a `WRITEBACK-SUMMARY.json` disk file only. Calling `set-summary` mutates the JSON store and violates Iron Law 1 (the store is the source of truth; collation flows downstream from it, not into it). The orchestrator reads `WRITEBACK-SUMMARY.json` directly — no store write is needed.
|
|
28
28
|
|
|
29
29
|
<!-- See _fragments/store-write-verification.md — NOTE: this file uses an intentionally modified
|
|
@@ -46,8 +46,7 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
46
46
|
|
|
47
47
|
```
|
|
48
48
|
1. Preferred: Run Plugin Tool
|
|
49
|
-
-
|
|
50
|
-
- Run: `node "$FORGE_ROOT/tools/collate.cjs" [SPRINT_ID]`
|
|
49
|
+
- Run: `node .forge/tools/collate.cjs [SPRINT_ID]`
|
|
51
50
|
- If tool succeeds, proceed to Finalize
|
|
52
51
|
|
|
53
52
|
2. Fallback: Manual Collation
|
|
@@ -61,9 +60,8 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
61
60
|
- Rebuild the architecture context pack so orchestrators have a fresh summary
|
|
62
61
|
after any KB updates (architecture docs may have changed during the sprint):
|
|
63
62
|
```
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
node "$FORGE_ROOT/tools/build-context-pack.cjs" \
|
|
63
|
+
ENGINEERING=$(node .forge/tools/manage-config.cjs get paths.engineering 2>/dev/null || echo engineering)
|
|
64
|
+
node .forge/tools/build-context-pack.cjs \
|
|
67
65
|
--arch-dir "$ENGINEERING/architecture" \
|
|
68
66
|
--out-md .forge/cache/context-pack.md \
|
|
69
67
|
--out-json .forge/cache/context-pack.json
|
|
@@ -72,7 +70,7 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
72
70
|
|
|
73
71
|
4. Finalize:
|
|
74
72
|
- **Do NOT emit a phase event yourself.** The orchestrator (or kickoff handler) owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
75
|
-
- Write `WRITEBACK-SUMMARY.json` to the sprint directory (`engineering/sprints/{sprintId}/`
|
|
73
|
+
- Write `WRITEBACK-SUMMARY.json` to the sprint's artifact directory — use the sprint record's `path` field (read it from the store), not a reconstructed `engineering/sprints/{sprintId}/` template — with the following shape:
|
|
76
74
|
```json
|
|
77
75
|
{
|
|
78
76
|
"objective": "<one sentence — what views were regenerated>",
|
|
@@ -101,5 +99,5 @@ Never set `FORGE_SKIP_WRITE_VALIDATION=1` — operator-only emergency switch.
|
|
|
101
99
|
(Claude Code only); on any other runtime treat as unavailable and proceed.
|
|
102
100
|
Do NOT shell out to a `cost-cli.cjs` — there is no such tool.
|
|
103
101
|
2. Parse: `inputTokens`, `outputTokens`, `cacheReadTokens`, `cacheWriteTokens`, `estimatedCostUSD`.
|
|
104
|
-
3. Write the usage sidecar via `node
|
|
102
|
+
3. Write the usage sidecar via `node .forge/tools/store-cli.cjs emit {sprintId} '{sidecar-json}' --sidecar`.
|
|
105
103
|
- **Event Emission:** Ensure the "complete" event includes the `eventId` passed by the orchestrator.
|
|
@@ -31,7 +31,7 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
31
31
|
|
|
32
32
|
- Commit only the artifacts produced for this task; do not sweep unrelated working-tree changes into the commit. The commit boundary mirrors the task boundary.
|
|
33
33
|
- Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
34
|
-
- All store I/O via `forge_store` (or `node
|
|
34
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
35
35
|
|
|
36
36
|
## Store-Write Verification
|
|
37
37
|
|
|
@@ -42,9 +42,8 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
0a. Pre-flight Gate Check:
|
|
45
|
-
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
46
45
|
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
47
|
-
- Run: `node
|
|
46
|
+
- Run: `node .forge/tools/preflight-gate.cjs --phase commit --{entity_kind} {record_id}`
|
|
48
47
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
49
48
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
50
49
|
- Exit 0 → continue.
|
|
@@ -53,7 +52,7 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
53
52
|
- If `--force` is present in the invocation arguments, skip this step entirely.
|
|
54
53
|
- If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
|
|
55
54
|
- Read current task state:
|
|
56
|
-
`node
|
|
55
|
+
`node .forge/tools/store-cli.cjs read task {record_id} --json`
|
|
57
56
|
- Extract the `status` field from the JSON output.
|
|
58
57
|
- Allowed states for this phase: `approved`.
|
|
59
58
|
- If the current status is NOT in the allowed set:
|
|
@@ -62,9 +61,8 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
62
61
|
|
|
63
62
|
1. Load Context:
|
|
64
63
|
- Read the record manifest (task or bug, per entity_kind).
|
|
65
|
-
- Read ARCHITECT_APPROVAL.md
|
|
66
|
-
|
|
67
|
-
- Bug mode: `engineering/bugs/{bugDir}/ARCHITECT_APPROVAL.md`
|
|
64
|
+
- Read ARCHITECT_APPROVAL.md by kind — never construct the path:
|
|
65
|
+
`forge_artifact({ command:"read", entity:"{entity_kind}", entityId:"{record_id}", artifact:"architect-approval" })`
|
|
68
66
|
|
|
69
67
|
2. Staging:
|
|
70
68
|
- Stage all record-related artifacts and the code changes:
|
|
@@ -80,8 +78,8 @@ Seal a completed and approved task by committing its artifacts to the VCS and up
|
|
|
80
78
|
|
|
81
79
|
4. Store Finalization:
|
|
82
80
|
- Transitions:
|
|
83
|
-
- **Task mode** — `approved → committed` (terminal): `node
|
|
84
|
-
- **Bug mode** — `in-progress → fixed` (terminal): `node
|
|
81
|
+
- **Task mode** — `approved → committed` (terminal): `node .forge/tools/store-cli.cjs update-status task {taskId} status committed`
|
|
82
|
+
- **Bug mode** — `in-progress → fixed` (terminal): `node .forge/tools/store-cli.cjs update-status bug {bugId} status fixed`. This is the ONLY phase in the bug pipeline that writes `bug.status` post-triage (see `meta-fix-bug.md § Iron Laws #2`). Do NOT write `approved` or `verified` — those values are vestigial enum members slated for removal.
|
|
85
83
|
|
|
86
84
|
5. Finalize:
|
|
87
85
|
- **Do NOT emit a phase event yourself.** The orchestrator owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
@@ -10,7 +10,7 @@ deps:
|
|
|
10
10
|
templates: []
|
|
11
11
|
sub_workflows: []
|
|
12
12
|
kb_docs: []
|
|
13
|
-
config_fields: [paths.engineering
|
|
13
|
+
config_fields: [paths.engineering]
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Meta-Workflow: Enhancement Agent
|
|
@@ -20,7 +20,7 @@ deps:
|
|
|
20
20
|
|
|
21
21
|
- Orchestrator-only: this workflow runs with full tool access in the orchestrator session. NEVER delegate it to a subagent.
|
|
22
22
|
- Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
23
|
-
- All store I/O via `forge_store` (or `node
|
|
23
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
24
24
|
- Phase 1 only touches `{{KEY}}` token text; never rewrite persona prose, algorithm steps, or role definitions.
|
|
25
25
|
|
|
26
26
|
<!-- See _fragments/store-write-verification.md — NOTE: this file uses an intentionally abbreviated
|
|
@@ -140,7 +140,7 @@ Invoked by T09 post-init hook (`--auto`) or manually via `/forge:rebuild --enric
|
|
|
140
140
|
|
|
141
141
|
2. **Skip runtime passthrough keys** — keys used at runtime (e.g., `{{TASK_ID}}`, `{{SPRINT_ID}}`,
|
|
142
142
|
`{{ARGUMENTS}}`) are intentional and must not be substituted. Read
|
|
143
|
-
|
|
143
|
+
`.forge/tools/substitute-placeholders.cjs` to identify the RUNTIME_PASSTHROUGH_KEYS list.
|
|
144
144
|
Exclude them from the fill candidates.
|
|
145
145
|
|
|
146
146
|
3. **Derive values from codebase signals** — for each remaining `{{KEY}}`, attempt to derive a
|
|
@@ -172,7 +172,7 @@ Invoked by T09 post-init hook (`--auto`) or manually via `/forge:rebuild --enric
|
|
|
172
172
|
|
|
173
173
|
6. **Snapshot gate** — if at least one fill was applied:
|
|
174
174
|
```sh
|
|
175
|
-
node
|
|
175
|
+
node .forge/tools/manage-versions.cjs add-snapshot \
|
|
176
176
|
--source post-init \
|
|
177
177
|
--enhanced-elements "<comma-separated list of relative .forge/ paths that were modified>"
|
|
178
178
|
```
|
|
@@ -180,7 +180,7 @@ Invoked by T09 post-init hook (`--auto`) or manually via `/forge:rebuild --enric
|
|
|
180
180
|
|
|
181
181
|
7. **Emit enhancement event** to the store:
|
|
182
182
|
```sh
|
|
183
|
-
node
|
|
183
|
+
node .forge/tools/store-cli.cjs emit enhancement '{
|
|
184
184
|
"eventId": "<ISO timestamp slug>_enhance_phase1",
|
|
185
185
|
"taskId": "enhancement",
|
|
186
186
|
"sprintId": "enhancement",
|
|
@@ -138,7 +138,13 @@ Differences are confined to the **triage** step and the **path branch**.
|
|
|
138
138
|
|
|
139
139
|
```
|
|
140
140
|
1. Pre-loop setup (mirrors meta-orchestrate.md):
|
|
141
|
-
-
|
|
141
|
+
- Session Preflight (see `meta-orchestrate.md § Session Preflight`):
|
|
142
|
+
Read `.forge/cache/preflight-status.json` if present and fresh; otherwise
|
|
143
|
+
run `node .forge/tools/forge-preflight.cjs --bug {bugId}` and read
|
|
144
|
+
its stdout. Use `blob.forgeRoot` as FORGE_ROOT for the remainder of the
|
|
145
|
+
run — do not re-derive it. Branch on `blob.ok`: ok:true → proceed;
|
|
146
|
+
ok:false → halt (fast-fail-safe), emit escalation event, instruct operator
|
|
147
|
+
to fix the surfaced preflight warning before re-running.
|
|
142
148
|
- Detect execution cluster from ANTHROPIC_DEFAULT_*_MODEL env vars.
|
|
143
149
|
- Clear progress log: store-cli progress-clear bugs
|
|
144
150
|
- Read bug record. If status ∈ {blocked, escalated, fixed, abandoned}:
|
|
@@ -159,6 +165,12 @@ Differences are confined to the **triage** step and the **path branch**.
|
|
|
159
165
|
- On return, orchestrator transitions status:
|
|
160
166
|
store-cli update-status bug {bugId} status triaged
|
|
161
167
|
store-cli update-status bug {bugId} status in-progress
|
|
168
|
+
# Digest-compliance note (FORGE-S27-T05): update-status is already silent on
|
|
169
|
+
# success (no stdout on the success path). The two-step triaged→in-progress
|
|
170
|
+
# transition is a required state-machine contract per Iron Law 2 — only triage
|
|
171
|
+
# and commit own bug.status writes. Collapsing these two writes into one would
|
|
172
|
+
# be a behavioral violation. This is not LLM-hand-run glue; it executes as a
|
|
173
|
+
# direct tool call after the triage subagent returns.
|
|
162
174
|
- Read summaries.triage.route. If neither "A" nor "B": escalate
|
|
163
175
|
(verdict_malformed). Do not guess.
|
|
164
176
|
|
|
@@ -171,12 +183,22 @@ Differences are confined to the **triage** step and the **path branch**.
|
|
|
171
183
|
- Resolve model (cluster + ROLE_TIER).
|
|
172
184
|
- Compute eventId, agent_name, banner_name (from PERSONA_MAP /
|
|
173
185
|
BANNER_MAP below).
|
|
174
|
-
- Announce phase:
|
|
186
|
+
- Announce phase:
|
|
187
|
+
run_bash(f'node .forge/tools/banners.cjs --badge {banner_name} --quiet')
|
|
188
|
+
# Digest-compliance note (FORGE-S27-T05): --quiet makes banners.cjs emit
|
|
189
|
+
# zero stdout (unconditional; no isTTY branch). The badge is fully
|
|
190
|
+
# suppressed during the automated run_bash call — it does not enter the
|
|
191
|
+
# LLM context window. Mirrors meta-orchestrate.md:399–411 treatment.
|
|
192
|
+
print(f" → {bugId} [{display_model}]\n")
|
|
175
193
|
- Start progress Monitor on .forge/store/events/bugs/progress.log.
|
|
176
194
|
- Preflight gate: preflight-gate.cjs --phase {role} --bug {bugId}
|
|
177
|
-
Exit 1
|
|
178
|
-
|
|
179
|
-
|
|
195
|
+
Exit 1 → structured JSON on stdout ({ phase, reasonCode, detail, remediation });
|
|
196
|
+
parse and render it exactly as meta-orchestrate.md § Execution Algorithm
|
|
197
|
+
does for tasks (safe_parse_json(stdout) → format reason + remediation).
|
|
198
|
+
Exit 2 → escalate (misconfiguration). In both cases:
|
|
199
|
+
see meta-orchestrate.md § Escalation Procedure with bug_id substituted
|
|
200
|
+
for task_id. Update bug.status to "escalated" only if it is currently
|
|
201
|
+
"in-progress" (do not downgrade other states).
|
|
180
202
|
- Compose role-block, architecture-block, summary-block, overlay (via
|
|
181
203
|
build-overlay.cjs --bug {bugId}).
|
|
182
204
|
- Spawn subagent via Agent tool. Subagent prompt passes:
|
|
@@ -209,10 +231,12 @@ Differences are confined to the **triage** step and the **path branch**.
|
|
|
209
231
|
phase that writes bug.status post-triage.
|
|
210
232
|
|
|
211
233
|
6. Finalize (collator, housekeeping):
|
|
212
|
-
-
|
|
213
|
-
|
|
214
|
-
INDEX.md
|
|
215
|
-
|
|
234
|
+
- Run `node .forge/tools/collate.cjs {bugId} --purge-events`.
|
|
235
|
+
# Note (FORGE-S27-T05): collate.cjs --purge-events already handles cost
|
|
236
|
+
# aggregation and embeds the "## Cost" section into the bug's INDEX.md
|
|
237
|
+
# automatically (see collate.cjs buildBugIndex). Do NOT attempt a separate
|
|
238
|
+
# cost-aggregation round-trip before calling collate — it is redundant and
|
|
239
|
+
# may produce a duplicate section. The collate call is the single step.
|
|
216
240
|
Collate purges only this bug's events from the shared bugs/ dir
|
|
217
241
|
(filtered by bugId reference) — it does NOT purge other bugs' events.
|
|
218
242
|
- Run preflight finalize gate: preflight-gate.cjs --phase finalize --bug {bugId}.
|
|
@@ -282,7 +306,7 @@ differences are:
|
|
|
282
306
|
```
|
|
283
307
|
# --- Materialize project overlay (replaces MASTER_INDEX.md read in subagent) ---
|
|
284
308
|
overlay_result = run_bash(
|
|
285
|
-
f'node
|
|
309
|
+
f'node .forge/tools/build-overlay.cjs --bug {bug_id} --format md'
|
|
286
310
|
)
|
|
287
311
|
bug_overlay_md = overlay_result.stdout if overlay_result.exit_code == 0 else ""
|
|
288
312
|
|
|
@@ -461,7 +485,7 @@ or is redundant with another skill — emit a `friction` event so
|
|
|
461
485
|
| `skill_stale` | A skill's guidance contradicts current architecture / supersedes its own advice. |
|
|
462
486
|
| `skill_redundant` | Two skills provided overlapping or conflicting guidance for the same decision. |
|
|
463
487
|
|
|
464
|
-
**Recording friction (subagent side):** call `node
|
|
488
|
+
**Recording friction (subagent side):** call `node .forge/tools/friction-emit.cjs` `--workflow {workflow} --persona {persona-noun} --issue {token} [--subkind {token}] [--evidence '{...}']`. The tool appends one judgement-only record to `.forge/cache/FRICTION-{workflow}.jsonl`. The orchestrator drains the file at phase-end, stamps runtime attribution (model, provider, usage, wall times, eventId) onto each record, and emits the events via `store-cli emit` as event type `"friction"`. The schema enforces `{workflow, persona, issue}` as required when `type === "friction"`; `subkind` is the frozen enum `skill_unused|skill_failed|skill_missing|skill_stale|skill_redundant` or experimental `^x_[a-z_]+$`. Emit one record per distinct friction signal — do not coalesce.
|
|
465
489
|
|
|
466
490
|
## Progress Reporting
|
|
467
491
|
|
|
@@ -31,9 +31,8 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
0a. Pre-flight Gate Check:
|
|
34
|
-
- Resolve FORGE_ROOT (`node -e "console.log(require('./.forge/config.json').paths.forgeRoot)"`).
|
|
35
34
|
- **Entity-mode resolution:** read the kickoff arguments. `--task {id}` → `entity_kind = "task"`, `record_id = {id}`. `--bug {id}` → `entity_kind = "bug"`, `record_id = {id}`. All store-cli calls below substitute `{entity_kind}` and `{record_id}` for the literal "task"/{taskId} placeholders.
|
|
36
|
-
- Run: `node
|
|
35
|
+
- Run: `node .forge/tools/preflight-gate.cjs --phase implement --{entity_kind} {record_id}`
|
|
37
36
|
- Exit 1 (gate failed) → print stderr and HALT. Do not proceed; do not attempt to produce the artifact.
|
|
38
37
|
- Exit 2 (misconfiguration) → print stderr and HALT.
|
|
39
38
|
- Exit 0 → continue.
|
|
@@ -42,7 +41,7 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
42
41
|
- If `--force` is present in the invocation arguments, skip this step entirely.
|
|
43
42
|
- If `entity_kind == "bug"`, skip this step entirely (bug state is managed by meta-fix-bug.md).
|
|
44
43
|
- Read current task state:
|
|
45
|
-
`node
|
|
44
|
+
`node .forge/tools/store-cli.cjs read task {record_id} --json`
|
|
46
45
|
- Extract the `status` field from the JSON output.
|
|
47
46
|
- Allowed states for this phase: `plan-approved`.
|
|
48
47
|
- If the current status is NOT in the allowed set:
|
|
@@ -83,10 +82,10 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
83
82
|
- Out-of-band escapes (any state): `plan-revision-required`, `code-revision-required`, `blocked`, `escalated`, `abandoned`
|
|
84
83
|
Update status — check current state first:
|
|
85
84
|
- If predecessor is `planned` or `implementing`:
|
|
86
|
-
`node
|
|
85
|
+
`node .forge/tools/store-cli.cjs update-status task {taskId} status implemented`
|
|
87
86
|
- If predecessor is `plan-approved` (two-step mandatory — FSM forbids skipping `implementing`):
|
|
88
|
-
`node
|
|
89
|
-
`node
|
|
87
|
+
`node .forge/tools/store-cli.cjs update-status task {taskId} status implementing`
|
|
88
|
+
`node .forge/tools/store-cli.cjs update-status task {taskId} status implemented`
|
|
90
89
|
- **Bug mode** — NO status write. The bug remains `in-progress` until the commit phase transitions it to `fixed`. Writing `bug.status` here violates `meta-fix-bug.md § Iron Laws #2`.
|
|
91
90
|
- **Do NOT emit a phase event yourself.** The orchestrator owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
92
91
|
|
|
@@ -96,9 +95,19 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
96
95
|
JSON shape: `{"objective":"<one sentence>", "key_changes":["<up to 12 bullets>"], "verdict":"n/a", "written_at":"<ISO 8601>", "artifact_ref":"PROGRESS.md"}`
|
|
97
96
|
The tool validates required fields automatically — fix and retry if it rejects.
|
|
98
97
|
- Then link sidecar to store (task mode):
|
|
99
|
-
`forge_store({ command:"set-summary", args:["{taskId}", "implementation"
|
|
98
|
+
`forge_store({ command:"set-summary", args:["{taskId}", "implementation"] })`
|
|
100
99
|
Or (bug mode):
|
|
101
|
-
`forge_store({ command:"set-bug-summary", args:["{bugId}", "implementation"
|
|
100
|
+
`forge_store({ command:"set-bug-summary", args:["{bugId}", "implementation"] })`
|
|
101
|
+
The sidecar path is auto-resolved from the record's `path` — never pass it.
|
|
102
|
+
|
|
103
|
+
8. Post-Phase Output Guard: the `outputs` block below is the authoritative enforcer.
|
|
104
|
+
You MUST satisfy it before returning. If PROGRESS.md is missing or too small,
|
|
105
|
+
re-run the relevant step before emitting the complete event.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
```outputs phase=implement
|
|
109
|
+
artifact {engineering}/{sprint}/{task}/PROGRESS.md min=200
|
|
110
|
+
require summaries.implementation.verdict == n/a
|
|
102
111
|
```
|
|
103
112
|
|
|
104
113
|
<!-- See _fragments/iron-laws.md for Iron Laws section structure guidance -->
|
|
@@ -106,7 +115,7 @@ The Engineer implements the approved plan: write code, run tests, verify, and do
|
|
|
106
115
|
|
|
107
116
|
- Follow the Algorithm step by step. Execute the approved PLAN.md exactly; do not invent scope or skip steps without updating the plan first.
|
|
108
117
|
- Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
109
|
-
- All store I/O via `forge_store` (or `node
|
|
118
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
110
119
|
- Run the full test suite before declaring the task implemented. Silent continuation past test failures is never acceptable.
|
|
111
120
|
|
|
112
121
|
## Store-Write Verification
|
|
@@ -35,15 +35,18 @@ or when `.forge/structure-versions.json` is absent (pre-T05 install detected).
|
|
|
35
35
|
|
|
36
36
|
- Migration operations are reversible and user-confirmed before any destructive writes. Do not skip the Phase 2 confirmation gate — proceed only after the user explicitly accepts the migration plan.
|
|
37
37
|
- Read `.forge/personas/engineer.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
38
|
-
- All store I/O via `forge_store` (or `node
|
|
38
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
39
39
|
|
|
40
40
|
## Pre-conditions
|
|
41
41
|
|
|
42
42
|
- `/forge:init` has run: `.forge/config.json` exists and is readable.
|
|
43
43
|
- `.forge/structure-versions.json` is absent OR `--structural` was passed.
|
|
44
|
-
- The Forge plugin root is resolvable
|
|
44
|
+
- The Forge plugin root is resolvable. Migration reads plugin source
|
|
45
|
+
(`$FORGE_ROOT/init/base-pack`, `$FORGE_ROOT/.claude-plugin/plugin.json`)
|
|
46
|
+
that is not vendored into `.forge/`, so resolve the active plugin install
|
|
47
|
+
root from `CLAUDE_PLUGIN_ROOT` (this workflow runs plugin-side):
|
|
45
48
|
```sh
|
|
46
|
-
export FORGE_ROOT
|
|
49
|
+
export FORGE_ROOT="${CLAUDE_PLUGIN_ROOT}"
|
|
47
50
|
```
|
|
48
51
|
|
|
49
52
|
---
|
|
@@ -58,7 +61,7 @@ Check that `.forge/config.json` exists. If it does not, stop:
|
|
|
58
61
|
|
|
59
62
|
> "Forge has not been initialised in this project. Run `/forge:init` first."
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
Resolve `FORGE_ROOT` from `${CLAUDE_PLUGIN_ROOT}` (the active plugin install root).
|
|
62
65
|
|
|
63
66
|
**0b. Detect install generation.**
|
|
64
67
|
|
|
@@ -273,8 +276,7 @@ Write `.forge/project-context.json` with the synthesised content.
|
|
|
273
276
|
|
|
274
277
|
Validate via the store tool:
|
|
275
278
|
```sh
|
|
276
|
-
|
|
277
|
-
node "$FORGE_ROOT/tools/validate-store.cjs" --dry-run
|
|
279
|
+
node .forge/tools/validate-store.cjs --dry-run
|
|
278
280
|
```
|
|
279
281
|
|
|
280
282
|
If this exits non-zero, report the validation errors to the user and HALT. Do
|
|
@@ -284,7 +286,7 @@ NOT remove the sentinel — the user can fix the issue and re-run.
|
|
|
284
286
|
|
|
285
287
|
```sh
|
|
286
288
|
export FORGE_ROOT
|
|
287
|
-
node
|
|
289
|
+
node .forge/tools/substitute-placeholders.cjs \
|
|
288
290
|
--forge-root "$FORGE_ROOT" \
|
|
289
291
|
--base-pack "$FORGE_ROOT/init/base-pack" \
|
|
290
292
|
--config ".forge/config.json" \
|
|
@@ -302,8 +304,7 @@ user. Do NOT remove the sentinel (preserves ability to re-run after fixing).
|
|
|
302
304
|
#### Step 3d — Register snapshot (T05)
|
|
303
305
|
|
|
304
306
|
```sh
|
|
305
|
-
|
|
306
|
-
node "$FORGE_ROOT/tools/manage-versions.cjs" init
|
|
307
|
+
node .forge/tools/manage-versions.cjs init
|
|
307
308
|
```
|
|
308
309
|
|
|
309
310
|
`manage-versions init` is idempotent. Since `.forge/structure-versions.json`
|
|
@@ -347,9 +348,8 @@ rm .forge/archive/pre-migration/.migration-in-progress
|
|
|
347
348
|
**Verification (CLI-accessible only — do NOT invoke `/forge:health` here):**
|
|
348
349
|
|
|
349
350
|
```sh
|
|
350
|
-
export FORGE_ROOT
|
|
351
351
|
# 1. Validate the store
|
|
352
|
-
node
|
|
352
|
+
node .forge/tools/validate-store.cjs --dry-run
|
|
353
353
|
|
|
354
354
|
# 2. Verify substitution outputs are non-empty
|
|
355
355
|
ls .forge/personas/*.md .forge/skills/*.md .forge/workflows/*.md .forge/templates/*.md
|
|
@@ -375,9 +375,8 @@ Read that file and extract the `sprintId` field. If no sprint files exist, use
|
|
|
375
375
|
`"migration"` as the `sprintId` placeholder.
|
|
376
376
|
|
|
377
377
|
```sh
|
|
378
|
-
export FORGE_ROOT
|
|
379
378
|
MIGRATION_END=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
380
|
-
node
|
|
379
|
+
node .forge/tools/store-cli.cjs emit "{projectSprintId}" '{
|
|
381
380
|
"eventId": "migration-'"$(date -u +%Y%m%dT%H%M%SZ)"'",
|
|
382
381
|
"taskId": "migration",
|
|
383
382
|
"sprintId": "{projectSprintId}",
|
|
@@ -467,7 +466,7 @@ cd .forge && md5sum -c archive/pre-migration/MANIFEST.md5 2>/dev/null | grep -v
|
|
|
467
466
|
- **Workflow Structure:** The generated `migrate_structural.md` must follow the strict multi-phase Algorithm block format (Phase 0 pre-flight → Phase 1 read/extract → Phase 2 confirmation gate → Phase 3 write → Phase 4 verify/emit → Rollback Procedure → Error Handling).
|
|
468
467
|
- **Context Isolation:** Forbid inline execution of archival or substitution operations; use `forge_store` reads and structured `node` invocations for all store interactions.
|
|
469
468
|
- **Project Specifics:**
|
|
470
|
-
- Reference the project's `paths.engineering`
|
|
469
|
+
- Reference the project's `paths.engineering` from `.forge/config.json` for path resolutions; resolve the plugin root from `${CLAUDE_PLUGIN_ROOT}` (not `config.paths.forgeRoot`, which is retired).
|
|
471
470
|
- Include the project's migration path docs in the Error Handling table (e.g., expected schema files, archive paths).
|
|
472
471
|
- **Token Reporting:** See `_fragments/finalize.md` — wire via `file_ref:`. Token reporting is diagnostic only (migration is not an orchestrated phase — it emits its own record via `store-cli emit` in Phase 4).
|
|
473
472
|
- **Event Emission:** Migration emits its own completion event directly via `store-cli emit` in Phase 4 (orchestrator-exception; this is not a task phase). The "do NOT emit yourself" rule does not apply here.
|
|
@@ -23,7 +23,7 @@ Capture sprint requirements via a structured interview and document them for pla
|
|
|
23
23
|
|
|
24
24
|
- Capture requirements accurately; do not editorialize or pre-select options on the user's behalf. The product manager documents what the user says, not what the agent thinks is best.
|
|
25
25
|
- Read `.forge/personas/product-manager.md` first; print the persona identity line (emoji, name, tagline) to stdout before any other tool use.
|
|
26
|
-
- All store I/O via `forge_store` (or `node
|
|
26
|
+
- All store I/O via `forge_store` (or `node .forge/tools/store-cli.cjs`). Never edit `.forge/store/*.json` directly.
|
|
27
27
|
|
|
28
28
|
## Algorithm
|
|
29
29
|
|
|
@@ -56,7 +56,7 @@ Capture sprint requirements via a structured interview and document them for pla
|
|
|
56
56
|
- Ensure all deliverables are measurable and testable
|
|
57
57
|
|
|
58
58
|
5. Finalize:
|
|
59
|
-
- Update sprint status via `node
|
|
59
|
+
- Update sprint status via `node .forge/tools/store-cli.cjs update-status sprint {sprintId} status planning`
|
|
60
60
|
- **Do NOT emit a phase event yourself.** The orchestrator (or kickoff handler) owns event emission — it composes the canonical event from runtime telemetry (model, provider, tokens, wall times) plus the SUMMARY you write in the next step. Subagents that call `store-cli emit` for phase events hallucinate runtime facts (see Plan 11 / Slice 2). Write the SUMMARY and return.
|
|
61
61
|
```
|
|
62
62
|
|
|
@@ -79,6 +79,6 @@ Capture sprint requirements via a structured interview and document them for pla
|
|
|
79
79
|
- Set token fields to `null`: `"inputTokens": null, "outputTokens": null, "estimatedCostUSD": null`.
|
|
80
80
|
- Add `"source": "missing"` to sidecar JSON.
|
|
81
81
|
- Log: "Token data unavailable (cost probe failed). Backfill later via estimate-usage.cjs."
|
|
82
|
-
4. Write the usage sidecar via `node
|
|
82
|
+
4. Write the usage sidecar via `node .forge/tools/store-cli.cjs emit {sprintId} '{sidecar-json}' --sidecar`.
|
|
83
83
|
5. **NEVER skip sidecar write.** Always emit (reported or placeholder with nulls).
|
|
84
84
|
- **Event Emission:** Ensure the "complete" event includes the `eventId` passed by the orchestrator.
|