@entelligentsia/forgecli 1.0.21 → 1.0.36
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 +346 -0
- package/README.md +2 -0
- package/dist/CHANGELOG-forge-plugin.md +281 -0
- package/dist/bin/argv.d.ts +2 -2
- package/dist/bin/argv.js +25 -0
- package/dist/bin/argv.js.map +1 -1
- package/dist/bin/forge.js +12 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/bin/init.d.ts +23 -0
- package/dist/bin/init.js +123 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/uninstall.d.ts +20 -0
- package/dist/bin/uninstall.js +141 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.js +10 -7
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
- package/dist/extensions/forgecli/forge-tools.js +73 -0
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
- package/dist/extensions/forgecli/lib/forge-root.js +14 -1
- package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -92
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1695
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +97 -270
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
- package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
- package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
- package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
- package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
- package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
- package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
- package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
- package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
- package/dist/forge-payload/.base-pack/commands/init.md +278 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
- package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
- package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +8 -3
- package/dist/forge-payload/.schemas/migrations.json +141 -0
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +3 -3
- package/dist/forge-payload/commands/ask.md +1 -1
- package/dist/forge-payload/commands/check-agent.md +1 -1
- package/dist/forge-payload/commands/config.md +1 -1
- package/dist/forge-payload/commands/health.md +1 -1
- package/dist/forge-payload/commands/init.md +62 -7
- package/dist/forge-payload/commands/rebuild.md +3 -3
- package/dist/forge-payload/commands/remove.md +1 -1
- package/dist/forge-payload/commands/repair.md +1 -1
- package/dist/forge-payload/commands/report-bug.md +1 -1
- package/dist/forge-payload/commands/status.md +1 -1
- package/dist/forge-payload/commands/update.md +3 -3
- package/dist/forge-payload/hooks/lib/common.cjs +228 -0
- package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
- package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
- package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
- package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
- package/dist/forge-payload/init/discovery/discover-database.md +32 -0
- package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
- package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
- package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
- package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
- package/dist/forge-payload/init/generation/generate-commands.md +171 -0
- package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
- package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
- package/dist/forge-payload/init/generation/generate-persona.md +73 -0
- package/dist/forge-payload/init/generation/generate-personas.md +54 -0
- package/dist/forge-payload/init/generation/generate-skill.md +66 -0
- package/dist/forge-payload/init/generation/generate-skills.md +36 -0
- package/dist/forge-payload/init/generation/generate-template.md +60 -0
- package/dist/forge-payload/init/generation/generate-templates.md +39 -0
- package/dist/forge-payload/init/generation/generate-tools.md +133 -0
- package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
- package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
- package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
- package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
- package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
- package/dist/forge-payload/integrity.json +16 -16
- package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
- package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +8 -3
- package/dist/forge-payload/schemas/structure-manifest.json +5 -12
- package/dist/forge-payload/tools/commit-task.cjs +218 -0
- package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
- package/dist/forge-payload/tools/lib/paths.cjs +12 -11
- package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
- package/dist/forge-payload/tools/query-logger.cjs +34 -0
- package/dist/forge-payload/tools/store-cli.cjs +6 -1
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
- package/package.json +2 -2
package/dist/bin/argv.js
CHANGED
|
@@ -155,6 +155,31 @@ export function parseForgeArgv(argv) {
|
|
|
155
155
|
subcommandArgs: argv.slice(i + 1),
|
|
156
156
|
};
|
|
157
157
|
}
|
|
158
|
+
// ── `forge init` — deterministic bootstrap (FORGE-S31-T02) ─────────
|
|
159
|
+
// Bootstraps a Claude Code project from the bundled forge-payload.
|
|
160
|
+
// Subcommand args (["claude", "[dir]", ...flags]) are forwarded to
|
|
161
|
+
// init.ts for further parsing. Only matches the first bare token,
|
|
162
|
+
// no flags collected yet.
|
|
163
|
+
if (token === "init" && piArgv.length === 0) {
|
|
164
|
+
return {
|
|
165
|
+
forgeAction: "init",
|
|
166
|
+
piArgv: [],
|
|
167
|
+
env,
|
|
168
|
+
subcommandArgs: argv.slice(i + 1),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// ── `forge uninstall` — deterministic reverse of `init` ─────────────
|
|
172
|
+
// Removes the Forge scaffold a prior `init claude` placed in a project.
|
|
173
|
+
// Subcommand args (["claude", "[dir]", "--purge", "--yes"]) forwarded to
|
|
174
|
+
// uninstall.ts. Only matches the first bare token, no flags collected yet.
|
|
175
|
+
if (token === "uninstall" && piArgv.length === 0) {
|
|
176
|
+
return {
|
|
177
|
+
forgeAction: "uninstall",
|
|
178
|
+
piArgv: [],
|
|
179
|
+
env,
|
|
180
|
+
subcommandArgs: argv.slice(i + 1),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
158
183
|
// ── Fast-path subcommand (forge store, forge collate, etc.) ──────────
|
|
159
184
|
// Only matches the FIRST bare token, and only when no flags have
|
|
160
185
|
// been collected yet (so `forge --cwd /tmp store ...` still treats
|
package/dist/bin/argv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/bin/argv.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,8CAA8C;AAC9C,EAAE;AACF,qBAAqB;AACrB,yDAAyD;AACzD,sDAAsD;AACtD,iEAAiE;AACjE,mEAAmE;AACnE,EAAE;AACF,wCAAwC;AACxC,mEAAmE;AACnE,mEAAmE;AACnE,EAAE;AACF,6CAA6C;AAC7C,oEAAoE;AACpE,sEAAsE;AACtE,gDAAgD;
|
|
1
|
+
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/bin/argv.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/forge.js
CHANGED
|
@@ -14,6 +14,8 @@ import { isParseError, parseForgeArgv } from "./argv.js";
|
|
|
14
14
|
import { runConfig } from "./config.js";
|
|
15
15
|
import { runDoctor } from "./doctor.js";
|
|
16
16
|
import { applyForgeOwnedEnvDefaults } from "./env-defaults.js";
|
|
17
|
+
import { runInit } from "./init.js";
|
|
18
|
+
import { runUninstall } from "./uninstall.js";
|
|
17
19
|
import { runUpdate } from "./update-cli.js";
|
|
18
20
|
// ---------------------------------------------------------------------------
|
|
19
21
|
// Version information (resolved at startup from package.json files)
|
|
@@ -64,6 +66,8 @@ Subcommands:
|
|
|
64
66
|
doctor [--json] Preflight check — pi auth, model availability, settings
|
|
65
67
|
update [--check] [--yes] [--version <spec>] Guided upgrade (npm i -g)
|
|
66
68
|
config show [--resolved] [--json] Model routing config inspector
|
|
69
|
+
init claude [dir] Bootstrap a Claude Code project from the bundled forge-payload
|
|
70
|
+
uninstall claude [dir] [--purge] [--yes] Remove the Forge scaffold (--purge also removes config + store)
|
|
67
71
|
|
|
68
72
|
Slash commands (inside a Forge project):
|
|
69
73
|
/forge:init Bootstrap a new Forge SDLC project
|
|
@@ -113,6 +117,14 @@ async function run() {
|
|
|
113
117
|
const exitCode = await runConfig(parsed.subcommandArgs ?? []);
|
|
114
118
|
process.exit(exitCode);
|
|
115
119
|
}
|
|
120
|
+
if (parsed.forgeAction === "init") {
|
|
121
|
+
const exitCode = await runInit(parsed.subcommandArgs ?? []);
|
|
122
|
+
process.exit(exitCode);
|
|
123
|
+
}
|
|
124
|
+
if (parsed.forgeAction === "uninstall") {
|
|
125
|
+
const exitCode = await runUninstall(parsed.subcommandArgs ?? []);
|
|
126
|
+
process.exit(exitCode);
|
|
127
|
+
}
|
|
116
128
|
// Apply forge env overrides
|
|
117
129
|
Object.assign(process.env, parsed.env);
|
|
118
130
|
applyForgeOwnedEnvDefaults();
|
package/dist/bin/forge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge.js","sourceRoot":"","sources":["../../src/bin/forge.ts"],"names":[],"mappings":";AAEA,+CAA+C;AAC/C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACvD,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,EACN,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,wDAAwD;AACxD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEzD,KAAK,UAAU,YAAY;IAC1B,MAAM,eAAe,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,cAAc,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,4BAA4B,eAAe,kBAAkB,cAAc,QAAQ,SAAS,KAAK,CACjG,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB
|
|
1
|
+
{"version":3,"file":"forge.js","sourceRoot":"","sources":["../../src/bin/forge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface InitArgs {
|
|
2
|
+
platform: "claude";
|
|
3
|
+
dir: string;
|
|
4
|
+
}
|
|
5
|
+
export interface InitArgsError {
|
|
6
|
+
error: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parse subcommand args for `forge init`.
|
|
10
|
+
*
|
|
11
|
+
* Expected forms:
|
|
12
|
+
* forge init claude → dir = process.cwd()
|
|
13
|
+
* forge init claude <dir> → dir = <dir>
|
|
14
|
+
* forge init → error: platform required
|
|
15
|
+
* forge init <other> → error: unknown platform
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseInitArgs(args: readonly string[]): InitArgs | InitArgsError;
|
|
18
|
+
/**
|
|
19
|
+
* Entry point invoked from bin/forge.ts.
|
|
20
|
+
*
|
|
21
|
+
* Returns exit code: 0 on success, 1 on bootstrap error.
|
|
22
|
+
*/
|
|
23
|
+
export declare function runInit(args: readonly string[]): Promise<number>;
|
package/dist/bin/init.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// forge init — deterministic Claude Code project bootstrap (FORGE-S31-T02).
|
|
2
|
+
//
|
|
3
|
+
// `4ge init claude [dir]` scaffolds a Claude Code project from the bundled
|
|
4
|
+
// forge-payload in seconds: zero LLM tokens, zero network, pure fs.
|
|
5
|
+
//
|
|
6
|
+
// Structural convention: follows runDoctor / runUpdate / runConfig.
|
|
7
|
+
// - parseInitArgs(args): pure arg parser
|
|
8
|
+
// - runInit(args): async entry point, returns exit code
|
|
9
|
+
//
|
|
10
|
+
// Iron-Law boundary (IL6): no shell-string interpolation. If shell-outs are
|
|
11
|
+
// ever added they MUST use argv-array spawn, not execSync with a string.
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { fileURLToPath } from "node:url";
|
|
14
|
+
import { bootstrapClaudeProject } from "../extensions/forgecli/claude-bootstrap/bootstrap.js";
|
|
15
|
+
// ── Payload root resolution (same logic as forge-init.ts) ─────────────────────
|
|
16
|
+
const _BIN_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
// dist/bin/init.js → dist/ → <pkg-root>/
|
|
18
|
+
const _DIST_DIR = path.resolve(_BIN_DIR, "..");
|
|
19
|
+
const _PKG_ROOT = path.resolve(_DIST_DIR, "..");
|
|
20
|
+
function getBundledPayloadRoot() {
|
|
21
|
+
return path.join(_PKG_ROOT, "dist", "forge-payload");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse subcommand args for `forge init`.
|
|
25
|
+
*
|
|
26
|
+
* Expected forms:
|
|
27
|
+
* forge init claude → dir = process.cwd()
|
|
28
|
+
* forge init claude <dir> → dir = <dir>
|
|
29
|
+
* forge init → error: platform required
|
|
30
|
+
* forge init <other> → error: unknown platform
|
|
31
|
+
*/
|
|
32
|
+
export function parseInitArgs(args) {
|
|
33
|
+
if (args.length === 0) {
|
|
34
|
+
return {
|
|
35
|
+
error: "forge init: platform argument required.\n" +
|
|
36
|
+
"Usage: forge init claude [dir]\n" +
|
|
37
|
+
" claude Bootstrap a Claude Code (.claude/) project",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const platform = args[0];
|
|
41
|
+
if (platform !== "claude") {
|
|
42
|
+
return {
|
|
43
|
+
error: `forge init: unknown platform '${platform}'.\n` +
|
|
44
|
+
"Supported platforms: claude\n" +
|
|
45
|
+
"Usage: forge init claude [dir]",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Optional dir arg — defaults to cwd
|
|
49
|
+
const dir = args[1] ? path.resolve(args[1]) : process.cwd();
|
|
50
|
+
return { platform: "claude", dir };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Entry point invoked from bin/forge.ts.
|
|
54
|
+
*
|
|
55
|
+
* Returns exit code: 0 on success, 1 on bootstrap error.
|
|
56
|
+
*/
|
|
57
|
+
export async function runInit(args) {
|
|
58
|
+
const parsed = parseInitArgs(args);
|
|
59
|
+
if ("error" in parsed) {
|
|
60
|
+
process.stderr.write(`${parsed.error}\n`);
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
const { dir } = parsed;
|
|
64
|
+
const payloadRoot = getBundledPayloadRoot();
|
|
65
|
+
process.stdout.write(`forge init claude — bootstrapping ${dir}\n`);
|
|
66
|
+
let result;
|
|
67
|
+
try {
|
|
68
|
+
result = bootstrapClaudeProject({ dir, payloadRoot });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const e = err;
|
|
72
|
+
process.stderr.write(`forge init: bootstrap failed: ${e.message ?? String(err)}\n`);
|
|
73
|
+
return 1;
|
|
74
|
+
}
|
|
75
|
+
if (!result.ok) {
|
|
76
|
+
for (const w of result.warnings) {
|
|
77
|
+
process.stderr.write(` ✗ ${w}\n`);
|
|
78
|
+
}
|
|
79
|
+
process.stderr.write("forge init: bootstrap failed — see warnings above.\n");
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
// Print success summary
|
|
83
|
+
if (result.created.length > 0) {
|
|
84
|
+
process.stdout.write(`\nCreated (${result.created.length}):\n`);
|
|
85
|
+
for (const p of result.created) {
|
|
86
|
+
process.stdout.write(` + ${p}\n`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (result.skipped.length > 0) {
|
|
90
|
+
process.stdout.write(`\nAlready present (${result.skipped.length}):\n`);
|
|
91
|
+
process.stdout.write(` ○ ${result.skipped.length} paths verified unchanged\n`);
|
|
92
|
+
}
|
|
93
|
+
if (result.warnings.length > 0) {
|
|
94
|
+
process.stdout.write(`\nWarnings:\n`);
|
|
95
|
+
for (const w of result.warnings) {
|
|
96
|
+
process.stdout.write(` △ ${w}\n`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Hand-off message (FORGE-S31-T03): names /forge:init, lists 7 hooks, mentions one-time approval prompt.
|
|
100
|
+
// Prepend preflight warning if Claude Code was not found.
|
|
101
|
+
const claudeUnavailableWarning = result.preflight.claudeAvailable
|
|
102
|
+
? ""
|
|
103
|
+
: " Warning: Claude Code not found on PATH — install before opening this project.\n\n";
|
|
104
|
+
process.stdout.write(`\n✓ forge init complete — project bootstrapped in ${dir}\n` +
|
|
105
|
+
`\nNext step:\n` +
|
|
106
|
+
`${claudeUnavailableWarning}` +
|
|
107
|
+
` Open Claude Code in ${dir} and run: /forge:init\n` +
|
|
108
|
+
`\nWhat to expect:\n` +
|
|
109
|
+
` Claude Code will ask you to approve 7 project hooks (one-time prompt).\n` +
|
|
110
|
+
` Approve them — they are scoped to this project only.\n` +
|
|
111
|
+
`\n Hooks registered:\n` +
|
|
112
|
+
` • check-update (SessionStart)\n` +
|
|
113
|
+
` • preflight-session (SessionStart)\n` +
|
|
114
|
+
` • validate-write (PreToolUse — Write/Edit/MultiEdit)\n` +
|
|
115
|
+
` • triage-error (PostToolUse — Bash)\n` +
|
|
116
|
+
` • query-logger (PostToolUse — Bash)\n` +
|
|
117
|
+
` • post-init (PostToolUse — Bash)\n` +
|
|
118
|
+
` • post-sprint (PostToolUse — Bash)\n` +
|
|
119
|
+
`\n After approval, /forge:init runs discovery, KB generation,\n` +
|
|
120
|
+
` and project configuration. Zero tokens until you open Claude Code.\n`);
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface UninstallArgs {
|
|
2
|
+
platform: "claude";
|
|
3
|
+
dir: string;
|
|
4
|
+
purge: boolean;
|
|
5
|
+
yes: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface UninstallArgsError {
|
|
8
|
+
error: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse subcommand args for `forge uninstall`.
|
|
12
|
+
*
|
|
13
|
+
* Expected forms:
|
|
14
|
+
* forge uninstall claude → dir = cwd
|
|
15
|
+
* forge uninstall claude <dir> → dir = <dir>
|
|
16
|
+
* forge uninstall claude [dir] --purge → also remove config + store
|
|
17
|
+
* forge uninstall claude [dir] --yes|-y → skip the [y/N] confirm
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseUninstallArgs(args: readonly string[]): UninstallArgs | UninstallArgsError;
|
|
20
|
+
export declare function runUninstall(args: readonly string[]): Promise<number>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// forge uninstall — deterministic reverse of `4ge init claude` (counterpart to init.ts).
|
|
2
|
+
//
|
|
3
|
+
// `4ge uninstall claude [dir] [--purge] [--yes]` removes the Forge scaffold a
|
|
4
|
+
// prior `4ge init claude` placed in a project. By default it preserves user
|
|
5
|
+
// data (.forge/config.json, .forge/store/**, the KB folder); --purge also
|
|
6
|
+
// removes the config + store. A [y/N] confirmation guards the destructive op
|
|
7
|
+
// unless --yes / -y or FORGE_NON_INTERACTIVE=1.
|
|
8
|
+
//
|
|
9
|
+
// Structural convention mirrors init.ts / update-cli.ts:
|
|
10
|
+
// - parseUninstallArgs(args): pure arg parser
|
|
11
|
+
// - runUninstall(args): async entry point, returns exit code
|
|
12
|
+
//
|
|
13
|
+
// Iron-Law boundary (IL6): no shell-string interpolation; pure fs in the core.
|
|
14
|
+
import * as path from "node:path";
|
|
15
|
+
import * as readline from "node:readline";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
import { uninstallClaudeProject } from "../extensions/forgecli/claude-bootstrap/uninstall.js";
|
|
18
|
+
// ── Payload root resolution (same logic as init.ts) ───────────────────────────
|
|
19
|
+
const _BIN_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
20
|
+
const _DIST_DIR = path.resolve(_BIN_DIR, "..");
|
|
21
|
+
const _PKG_ROOT = path.resolve(_DIST_DIR, "..");
|
|
22
|
+
function getBundledPayloadRoot() {
|
|
23
|
+
return path.join(_PKG_ROOT, "dist", "forge-payload");
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parse subcommand args for `forge uninstall`.
|
|
27
|
+
*
|
|
28
|
+
* Expected forms:
|
|
29
|
+
* forge uninstall claude → dir = cwd
|
|
30
|
+
* forge uninstall claude <dir> → dir = <dir>
|
|
31
|
+
* forge uninstall claude [dir] --purge → also remove config + store
|
|
32
|
+
* forge uninstall claude [dir] --yes|-y → skip the [y/N] confirm
|
|
33
|
+
*/
|
|
34
|
+
export function parseUninstallArgs(args) {
|
|
35
|
+
if (args.length === 0) {
|
|
36
|
+
return {
|
|
37
|
+
error: "forge uninstall: platform argument required.\n" +
|
|
38
|
+
"Usage: forge uninstall claude [dir] [--purge] [--yes]\n" +
|
|
39
|
+
" claude Remove the Forge scaffold from a Claude Code (.claude/) project",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const platform = args[0];
|
|
43
|
+
if (platform !== "claude") {
|
|
44
|
+
return {
|
|
45
|
+
error: `forge uninstall: unknown platform '${platform}'.\n` +
|
|
46
|
+
"Supported platforms: claude\n" +
|
|
47
|
+
"Usage: forge uninstall claude [dir] [--purge] [--yes]",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
let dir;
|
|
51
|
+
let purge = false;
|
|
52
|
+
let yes = false;
|
|
53
|
+
for (const t of args.slice(1)) {
|
|
54
|
+
if (t === "--purge") {
|
|
55
|
+
purge = true;
|
|
56
|
+
}
|
|
57
|
+
else if (t === "--yes" || t === "-y") {
|
|
58
|
+
yes = true;
|
|
59
|
+
}
|
|
60
|
+
else if (t.startsWith("-")) {
|
|
61
|
+
return {
|
|
62
|
+
error: `forge uninstall: unknown option ${t}. Valid options: --purge, --yes`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
else if (dir === undefined) {
|
|
66
|
+
dir = path.resolve(t);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return { error: `forge uninstall: unexpected extra argument '${t}'.` };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return { platform: "claude", dir: dir ?? process.cwd(), purge, yes };
|
|
73
|
+
}
|
|
74
|
+
// ── Confirmation prompt (mirrors update-cli.ts) ───────────────────────────────
|
|
75
|
+
async function askConfirm(question) {
|
|
76
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
77
|
+
return new Promise((resolve) => {
|
|
78
|
+
rl.question(`${question} [y/N] `, (answer) => {
|
|
79
|
+
rl.close();
|
|
80
|
+
resolve(/^y(es)?$/i.test(answer.trim()));
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// ── Entry point ───────────────────────────────────────────────────────────────
|
|
85
|
+
export async function runUninstall(args) {
|
|
86
|
+
const parsed = parseUninstallArgs(args);
|
|
87
|
+
if ("error" in parsed) {
|
|
88
|
+
process.stderr.write(`${parsed.error}\n`);
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
const { dir, purge, yes } = parsed;
|
|
92
|
+
const payloadRoot = getBundledPayloadRoot();
|
|
93
|
+
// Confirmation gate (skipped by --yes / -y / FORGE_NON_INTERACTIVE=1).
|
|
94
|
+
const autoYes = yes || process.env.FORGE_NON_INTERACTIVE === "1";
|
|
95
|
+
if (!autoYes) {
|
|
96
|
+
const scope = purge
|
|
97
|
+
? "the Forge scaffold AND your .forge/config.json + .forge/store/** (sprints, tasks, bugs, events)"
|
|
98
|
+
: "the Forge scaffold (config.json, store, and the KB folder are preserved)";
|
|
99
|
+
process.stdout.write(`forge uninstall claude — this will remove ${scope} from:\n ${dir}\n`);
|
|
100
|
+
const proceed = await askConfirm("Proceed?");
|
|
101
|
+
if (!proceed) {
|
|
102
|
+
process.stdout.write("forge uninstall: aborted — nothing was removed.\n");
|
|
103
|
+
return 0;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
let result;
|
|
107
|
+
try {
|
|
108
|
+
result = uninstallClaudeProject({ dir, payloadRoot, purge });
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const e = err;
|
|
112
|
+
process.stderr.write(`forge uninstall: failed: ${e.message ?? String(err)}\n`);
|
|
113
|
+
return 1;
|
|
114
|
+
}
|
|
115
|
+
if (!result.bootstrapped) {
|
|
116
|
+
for (const w of result.warnings)
|
|
117
|
+
process.stderr.write(` ✗ ${w}\n`);
|
|
118
|
+
return 1;
|
|
119
|
+
}
|
|
120
|
+
if (result.removed.length > 0) {
|
|
121
|
+
process.stdout.write(`\nRemoved (${result.removed.length}):\n`);
|
|
122
|
+
for (const p of result.removed)
|
|
123
|
+
process.stdout.write(` - ${p}\n`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
process.stdout.write("\nNothing to remove — project already clean of the Forge scaffold.\n");
|
|
127
|
+
}
|
|
128
|
+
if (result.kept.length > 0) {
|
|
129
|
+
process.stdout.write(`\nPreserved (user data — use --purge to remove):\n`);
|
|
130
|
+
for (const p of result.kept)
|
|
131
|
+
process.stdout.write(` ○ ${p}\n`);
|
|
132
|
+
}
|
|
133
|
+
if (result.warnings.length > 0) {
|
|
134
|
+
process.stdout.write(`\nWarnings:\n`);
|
|
135
|
+
for (const w of result.warnings)
|
|
136
|
+
process.stdout.write(` △ ${w}\n`);
|
|
137
|
+
}
|
|
138
|
+
process.stdout.write(`\n✓ forge uninstall complete — ${dir}\n`);
|
|
139
|
+
return result.ok ? 0 : 1;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/bin/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface BootstrapOptions {
|
|
2
|
+
/** Target project root (absolute path). */
|
|
3
|
+
dir: string;
|
|
4
|
+
/** Absolute path to the dist/forge-payload/ directory. */
|
|
5
|
+
payloadRoot: string;
|
|
6
|
+
}
|
|
7
|
+
/** Preflight check results (Step 9). */
|
|
8
|
+
export interface BootstrapPreflight {
|
|
9
|
+
/** True if the claude binary was found on PATH and responded to --version. */
|
|
10
|
+
claudeAvailable: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Always false in T03 — no reliable offline check for workflow-tool support.
|
|
13
|
+
* Confirmed at runtime on first /forge:init.
|
|
14
|
+
*/
|
|
15
|
+
workflowToolChecked: boolean;
|
|
16
|
+
/** Non-fatal preflight warnings. */
|
|
17
|
+
warnings: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface BootstrapResult {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
/** Paths created this run (dirs and files). */
|
|
22
|
+
created: string[];
|
|
23
|
+
/** Paths already present and unchanged (idempotent skip). */
|
|
24
|
+
skipped: string[];
|
|
25
|
+
/** Non-fatal issues encountered. */
|
|
26
|
+
warnings: string[];
|
|
27
|
+
/** Preflight check results (Step 9, FORGE-S31-T03). */
|
|
28
|
+
preflight: BootstrapPreflight;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Bootstrap a Claude Code project from the bundled forge-payload.
|
|
32
|
+
*
|
|
33
|
+
* This function is deterministic and idempotent:
|
|
34
|
+
* - Running against a fresh dir scaffolds everything.
|
|
35
|
+
* - Running against a partially-bootstrapped dir repairs only missing items.
|
|
36
|
+
* - Running against a fully-bootstrapped dir is a no-op (byte-identical).
|
|
37
|
+
*
|
|
38
|
+
* .forge/config.json and .forge/store/** are never touched.
|
|
39
|
+
*/
|
|
40
|
+
export declare function bootstrapClaudeProject(opts: BootstrapOptions): BootstrapResult;
|