@entelligentsia/forgecli 0.6.6 → 0.7.7

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.
Files changed (187) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +99 -190
  3. package/dist/bin/forge.js +20 -0
  4. package/dist/bin/forge.js.map +1 -1
  5. package/dist/extensions/forgecli/approve.d.ts +24 -0
  6. package/dist/extensions/forgecli/approve.js +202 -0
  7. package/dist/extensions/forgecli/approve.js.map +1 -0
  8. package/dist/extensions/forgecli/audience-gate.d.ts +4 -0
  9. package/dist/extensions/forgecli/audience-gate.js +8 -5
  10. package/dist/extensions/forgecli/audience-gate.js.map +1 -1
  11. package/dist/extensions/forgecli/collate.d.ts +24 -0
  12. package/dist/extensions/forgecli/collate.js +199 -0
  13. package/dist/extensions/forgecli/collate.js.map +1 -0
  14. package/dist/extensions/forgecli/commit.d.ts +24 -0
  15. package/dist/extensions/forgecli/commit.js +202 -0
  16. package/dist/extensions/forgecli/commit.js.map +1 -0
  17. package/dist/extensions/forgecli/fix-bug.d.ts +75 -0
  18. package/dist/extensions/forgecli/fix-bug.js +1133 -0
  19. package/dist/extensions/forgecli/fix-bug.js.map +1 -0
  20. package/dist/extensions/forgecli/forge-commands.js +7 -0
  21. package/dist/extensions/forgecli/forge-commands.js.map +1 -1
  22. package/dist/extensions/forgecli/forge-header.js +10 -4
  23. package/dist/extensions/forgecli/forge-header.js.map +1 -1
  24. package/dist/extensions/forgecli/forge-init.js +16 -8
  25. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  26. package/dist/extensions/forgecli/forge-subagent.d.ts +29 -0
  27. package/dist/extensions/forgecli/forge-subagent.js +14 -1
  28. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  29. package/dist/extensions/forgecli/hook-dispatcher.d.ts +53 -1
  30. package/dist/extensions/forgecli/hook-dispatcher.js +47 -1
  31. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  32. package/dist/extensions/forgecli/hooks/post-init-hook.d.ts +15 -0
  33. package/dist/extensions/forgecli/hooks/post-init-hook.js +127 -0
  34. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -0
  35. package/dist/extensions/forgecli/hooks/post-sprint-hook.d.ts +37 -0
  36. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +166 -0
  37. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -0
  38. package/dist/extensions/forgecli/index.js +56 -5
  39. package/dist/extensions/forgecli/index.js.map +1 -1
  40. package/dist/extensions/forgecli/review-code.d.ts +24 -0
  41. package/dist/extensions/forgecli/review-code.js +202 -0
  42. package/dist/extensions/forgecli/review-code.js.map +1 -0
  43. package/dist/extensions/forgecli/review-plan.d.ts +24 -0
  44. package/dist/extensions/forgecli/review-plan.js +203 -0
  45. package/dist/extensions/forgecli/review-plan.js.map +1 -0
  46. package/dist/extensions/forgecli/run-sprint.d.ts +18 -0
  47. package/dist/extensions/forgecli/run-sprint.js +33 -1
  48. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  49. package/dist/extensions/forgecli/run-task.d.ts +21 -2
  50. package/dist/extensions/forgecli/run-task.js +33 -9
  51. package/dist/extensions/forgecli/run-task.js.map +1 -1
  52. package/dist/extensions/forgecli/session-registry.d.ts +10 -0
  53. package/dist/extensions/forgecli/session-registry.js +9 -0
  54. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  55. package/dist/extensions/forgecli/validate.d.ts +24 -0
  56. package/dist/extensions/forgecli/validate.js +202 -0
  57. package/dist/extensions/forgecli/validate.js.map +1 -0
  58. package/dist/extensions/forgecli/wf-engine/engine.d.ts +23 -0
  59. package/dist/extensions/forgecli/wf-engine/engine.js +384 -0
  60. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -0
  61. package/dist/extensions/forgecli/wf-engine/event-parser.d.ts +6 -0
  62. package/dist/extensions/forgecli/wf-engine/event-parser.js +29 -0
  63. package/dist/extensions/forgecli/wf-engine/event-parser.js.map +1 -0
  64. package/dist/extensions/forgecli/wf-engine/id-gen.d.ts +6 -0
  65. package/dist/extensions/forgecli/wf-engine/id-gen.js +17 -0
  66. package/dist/extensions/forgecli/wf-engine/id-gen.js.map +1 -0
  67. package/dist/extensions/forgecli/wf-engine/loader.d.ts +2 -0
  68. package/dist/extensions/forgecli/wf-engine/loader.js +100 -0
  69. package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -0
  70. package/dist/extensions/forgecli/wf-engine/predicate.d.ts +7 -0
  71. package/dist/extensions/forgecli/wf-engine/predicate.js +36 -0
  72. package/dist/extensions/forgecli/wf-engine/predicate.js.map +1 -0
  73. package/dist/extensions/forgecli/wf-engine/prompt-compiler.d.ts +15 -0
  74. package/dist/extensions/forgecli/wf-engine/prompt-compiler.js +23 -0
  75. package/dist/extensions/forgecli/wf-engine/prompt-compiler.js.map +1 -0
  76. package/dist/extensions/forgecli/wf-engine/register.d.ts +9 -0
  77. package/dist/extensions/forgecli/wf-engine/register.js +59 -0
  78. package/dist/extensions/forgecli/wf-engine/register.js.map +1 -0
  79. package/dist/extensions/forgecli/wf-engine/remit-check.d.ts +6 -0
  80. package/dist/extensions/forgecli/wf-engine/remit-check.js +42 -0
  81. package/dist/extensions/forgecli/wf-engine/remit-check.js.map +1 -0
  82. package/dist/extensions/forgecli/wf-engine/state-store.d.ts +13 -0
  83. package/dist/extensions/forgecli/wf-engine/state-store.js +43 -0
  84. package/dist/extensions/forgecli/wf-engine/state-store.js.map +1 -0
  85. package/dist/extensions/forgecli/wf-engine/types.d.ts +66 -0
  86. package/dist/extensions/forgecli/wf-engine/types.js +2 -0
  87. package/dist/extensions/forgecli/wf-engine/types.js.map +1 -0
  88. package/dist/extensions/forgecli/wf-engine/worker.d.ts +11 -0
  89. package/dist/extensions/forgecli/wf-engine/worker.js +50 -0
  90. package/dist/extensions/forgecli/wf-engine/worker.js.map +1 -0
  91. package/dist/forge-payload/.base-pack/workflows/_fragments/context-injection.md +10 -4
  92. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +12 -0
  93. package/dist/forge-payload/.schemas/bug.schema.json +4 -2
  94. package/dist/forge-payload/.schemas/event.schema.json +22 -3
  95. package/dist/forge-payload/commands/add-pipeline.md +342 -0
  96. package/dist/forge-payload/commands/add-task.md +269 -0
  97. package/dist/forge-payload/commands/ask.md +43 -0
  98. package/dist/forge-payload/commands/calibrate.md +356 -0
  99. package/dist/forge-payload/commands/config.md +202 -0
  100. package/dist/forge-payload/commands/enhance.md +38 -0
  101. package/dist/forge-payload/commands/health.md +225 -0
  102. package/dist/forge-payload/commands/init.md +165 -0
  103. package/dist/forge-payload/commands/materialize.md +119 -0
  104. package/dist/forge-payload/commands/migrate.md +160 -0
  105. package/dist/forge-payload/commands/quiz-agent.md +38 -0
  106. package/dist/forge-payload/commands/regenerate.md +673 -0
  107. package/dist/forge-payload/commands/remove.md +174 -0
  108. package/dist/forge-payload/commands/report-bug.md +191 -0
  109. package/dist/forge-payload/commands/store-query.md +73 -0
  110. package/dist/forge-payload/commands/store-repair.md +187 -0
  111. package/dist/forge-payload/commands/update-tools.md +56 -0
  112. package/dist/forge-payload/commands/update.md +1376 -0
  113. package/dist/forge-payload/tools/preflight-gate.cjs +2 -1
  114. package/dist/forge-payload/tools/read-verdict.cjs +41 -8
  115. package/dist/forge-payload/tools/store-cli.cjs +4 -3
  116. package/node_modules/argparse/CHANGELOG.md +216 -0
  117. package/node_modules/argparse/LICENSE +254 -0
  118. package/node_modules/argparse/README.md +84 -0
  119. package/node_modules/argparse/argparse.js +3707 -0
  120. package/node_modules/argparse/lib/sub.js +67 -0
  121. package/node_modules/argparse/lib/textwrap.js +440 -0
  122. package/node_modules/argparse/package.json +31 -0
  123. package/node_modules/cliui/CHANGELOG.md +121 -0
  124. package/node_modules/color-convert/CHANGELOG.md +54 -0
  125. package/node_modules/esprima/ChangeLog +235 -0
  126. package/node_modules/js-yaml/LICENSE +21 -0
  127. package/node_modules/js-yaml/README.md +247 -0
  128. package/node_modules/js-yaml/bin/js-yaml.js +126 -0
  129. package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
  130. package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
  131. package/node_modules/js-yaml/dist/js-yaml.mjs +3856 -0
  132. package/node_modules/js-yaml/index.js +47 -0
  133. package/node_modules/js-yaml/lib/common.js +59 -0
  134. package/node_modules/js-yaml/lib/dumper.js +965 -0
  135. package/node_modules/js-yaml/lib/exception.js +55 -0
  136. package/node_modules/js-yaml/lib/loader.js +1733 -0
  137. package/node_modules/js-yaml/lib/schema/core.js +11 -0
  138. package/node_modules/js-yaml/lib/schema/default.js +22 -0
  139. package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
  140. package/node_modules/js-yaml/lib/schema/json.js +19 -0
  141. package/node_modules/js-yaml/lib/schema.js +121 -0
  142. package/node_modules/js-yaml/lib/snippet.js +101 -0
  143. package/node_modules/js-yaml/lib/type/binary.js +125 -0
  144. package/node_modules/js-yaml/lib/type/bool.js +35 -0
  145. package/node_modules/js-yaml/lib/type/float.js +97 -0
  146. package/node_modules/js-yaml/lib/type/int.js +156 -0
  147. package/node_modules/js-yaml/lib/type/map.js +8 -0
  148. package/node_modules/js-yaml/lib/type/merge.js +12 -0
  149. package/node_modules/js-yaml/lib/type/null.js +35 -0
  150. package/node_modules/js-yaml/lib/type/omap.js +44 -0
  151. package/node_modules/js-yaml/lib/type/pairs.js +53 -0
  152. package/node_modules/js-yaml/lib/type/seq.js +8 -0
  153. package/node_modules/js-yaml/lib/type/set.js +29 -0
  154. package/node_modules/js-yaml/lib/type/str.js +8 -0
  155. package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
  156. package/node_modules/js-yaml/lib/type.js +66 -0
  157. package/node_modules/js-yaml/package.json +66 -0
  158. package/node_modules/mz/HISTORY.md +66 -0
  159. package/node_modules/proper-lockfile/CHANGELOG.md +108 -0
  160. package/node_modules/source-map/CHANGELOG.md +301 -0
  161. package/node_modules/thenify/History.md +11 -0
  162. package/node_modules/thenify-all/History.md +11 -0
  163. package/node_modules/y18n/CHANGELOG.md +100 -0
  164. package/node_modules/yargs/CHANGELOG.md +88 -0
  165. package/node_modules/yargs-parser/CHANGELOG.md +263 -0
  166. package/package.json +6 -2
  167. package/themes/forge-matrix.json +89 -0
  168. package/themes/forge-mono.json +86 -0
  169. package/workflows/lead-qualifier/prompts/digest.md +44 -0
  170. package/workflows/lead-qualifier/prompts/draft-outreach.md +44 -0
  171. package/workflows/lead-qualifier/prompts/enrich.md +52 -0
  172. package/workflows/lead-qualifier/prompts/intake.md +48 -0
  173. package/workflows/lead-qualifier/prompts/mark-cold.md +38 -0
  174. package/workflows/lead-qualifier/prompts/score.md +45 -0
  175. package/workflows/lead-qualifier/workflow.yaml +95 -0
  176. package/workflows/research-brief/prompts/brief-synthesize.md +43 -0
  177. package/workflows/research-brief/prompts/intake.md +51 -0
  178. package/workflows/research-brief/prompts/source-critique.md +38 -0
  179. package/workflows/research-brief/prompts/source-score.md +38 -0
  180. package/workflows/research-brief/prompts/source-summarize.md +54 -0
  181. package/workflows/research-brief/workflow.yaml +66 -0
  182. package/dist/extensions/forgecli/session-monitor-widget.d.ts +0 -37
  183. package/dist/extensions/forgecli/session-monitor-widget.js +0 -320
  184. package/dist/extensions/forgecli/session-monitor-widget.js.map +0 -1
  185. package/dist/extensions/forgecli/session-monitor.d.ts +0 -2
  186. package/dist/extensions/forgecli/session-monitor.js +0 -135
  187. package/dist/extensions/forgecli/session-monitor.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,118 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.7.7] — 2026-05-16
11
+
12
+ ### Added
13
+ - **4ge brand identity in the CLI banner.** The startup header now
14
+ renders the pixel `4ge` wordmark in place of the previous ANSI-Shadow
15
+ "FORGE" block letters, aligning the terminal experience with the
16
+ README/npm hero art.
17
+ - **Two new themes shipped — forge-mono and forge-matrix.** Auto-
18
+ installed into `~/.pi/agent/themes/` on session start, so pi's
19
+ `/settings > theme` picker lists all three (forge-dark default,
20
+ forge-mono refined monochrome, forge-matrix phosphor-green Matrix
21
+ aesthetic).
22
+ - **Slim README with brand assets.** Marketing-facing README rebuilt
23
+ around the 4ge hero image and a categorized command grid; deep
24
+ technical content (CLI flags, hook safety net, custom tools,
25
+ publishing) moved to `docs/`.
26
+
27
+ ### Changed
28
+ - Tightened vertical spacing around the header (removed redundant
29
+ leading Spacer, exactly one blank line above and below the wordmark).
30
+ - Theme install step is now generalized: every JSON under
31
+ `forge-cli/themes/` is copied to the pi global theme dir (previously
32
+ only `forge-dark.json` was).
33
+
34
+ ## [0.7.6] — 2026-05-16
35
+
36
+ ### Fixed
37
+ - `build-payload` now bundles the forge plugin command markdowns
38
+ (`forge/forge/commands/*.md`) into `dist/forge-payload/commands/`.
39
+ Without this step, `/forge:health`, `/forge:config`, and any other
40
+ command routed via `delegateMarkdownCommand` failed with `ENOENT`
41
+ against the installed payload.
42
+
43
+ ### Changed
44
+ - `assertAudience` now treats `subagent` audience as advisory. Users
45
+ can invoke every chain step manually (`/forge:review-plan`,
46
+ `/forge:review-code`, `/forge:approve`, `/forge:commit`,
47
+ `/forge:validate`) from the CLI — orchestrators are an auto-mode
48
+ convenience, not the sole legitimate caller. `orchestrator-only`
49
+ workflows still refuse subagent invocation as before. Workflow
50
+ front-matter is unchanged; the audience field remains for
51
+ documentation.
52
+
53
+ ## [0.7.5] — 2026-05-16
54
+
55
+ ### Changed
56
+ - `run-workflow` now narrates each phase to the main viewport: the engine
57
+ emits `↪ <role>: "<first meaningful line>"` when the subagent first
58
+ speaks, and `↩ <role>: "<last meaningful line>"` after the phase
59
+ terminal — plus `◆ <summary>` when the node emitted one. The chip strip
60
+ stays compact (glyph + role only); the narrative lives in chip[0] /
61
+ main viewport so the user can scroll the story of the run.
62
+
63
+ ### Reverted
64
+ - 0.7.4's chip-strip preview enrichment (`"<first>" … "<last>"`). The
65
+ registry still captures `firstTurnPreview` / `lastTurnPreview` on each
66
+ `PhaseSummary` — useful for future per-phase rendering — but the strip
67
+ reverts to showing only `session.currentTurnPreview`.
68
+
69
+ ## [0.7.4] — 2026-05-16
70
+
71
+ ### Changed
72
+ - (Superseded by 0.7.5.) Thread-switcher strip preview was changed to
73
+ show `"<first turn>" … "<last turn>"` from the most-recent phase. The
74
+ intended UX target was the main viewport, not the chip strip — the
75
+ strip change is reverted in 0.7.5. The `PhaseSummary.firstTurnPreview`
76
+ / `lastTurnPreview` fields survive.
77
+
78
+ ## [0.7.3] — 2026-05-16
79
+
80
+ ### Added
81
+ - Workflow engine sessions now flow into the shared `SessionRegistry`, so
82
+ `/forge:run-workflow` instances appear in the live thread-switcher chip
83
+ strip alongside `/forge:run-task`, `/forge:run-sprint`, and `/forge:fix-bug`.
84
+ Engine emits `startSession`/`startPhase`/`bumpTurn`/`setTurnPreview`/
85
+ `recordToolStart`/`recordToolEnd`/`appendTail`/`completePhase`/
86
+ `completeSession` at the right boundaries; LLM tool-use events are
87
+ forwarded from the worker via the existing `onEvent` callback.
88
+ - Each node iteration is its own phase (`<nodeId>#<iter>` for loop bodies)
89
+ so the chip strip shows per-iteration progress.
90
+
91
+ ## [0.7.2] — 2026-05-15
92
+
93
+ ### Fixed
94
+ - `/forge:run-workflow` now resolves `<workflowId>` against `CWD/workflows/<id>` first,
95
+ then falls back to the bundled `PKG_ROOT/workflows/<id>`. Previously the install dir
96
+ was the only search path, so user-authored workflows in their project tree were
97
+ ignored.
98
+
99
+ ## [0.7.1] — 2026-05-15
100
+
101
+ ### Added
102
+ - Workflow engine: conditional edges via `when: "<path> <op> <literal>"` — first matching
103
+ success edge wins, falls back to unconditional edge. Supports `==`, `!=`, `<`, `<=`, `>`, `>=`
104
+ against dotted paths into `state.*` or `loop.item.*`.
105
+ - Workflow engine: `loop.group` + `loop.head` for per-item pipelines. Multiple nodes
106
+ sharing a `group` share one cursor — execution flows item-by-item through the
107
+ pipeline rather than node-by-node across all items. Group exit is expressed as
108
+ `edges: - { from: <head>, on: exhausted, to: <next> }`.
109
+ - `workflows/lead-qualifier/` — demo workflow exercising both features. Intake produces
110
+ N leads; each lead flows `enrich → score → (warm: draft-outreach | cold: mark-cold)` per
111
+ the `score >= 4` predicate; final `digest` writes `BRIEF.md`.
112
+
113
+ ## [0.7.0] — 2026-05-15
114
+
115
+ ### Added
116
+ - Generic workflow execution engine (`/forge:run-workflow <workflowId> [args]`) — PoC.
117
+ Reads workflow.yaml + prompts/*.md from `workflows/<workflowId>/`. Runs a node graph
118
+ with LLM workers. Persists state, events, and artifacts under `.forge-wf/runs/<instanceId>/`.
119
+ Includes the `research-brief` example workflow (5 nodes, 3 in a loop).
120
+ Plan 14.
121
+
10
122
  ## [0.6.6] — 2026-05-15
11
123
 
12
124
  Sprint finalization ceremony (Plan 12). Pairs with forge-plugin 0.43.16.
package/README.md CHANGED
@@ -1,235 +1,144 @@
1
- ## @entelligentsia/forgecli
1
+ <div align="center">
2
2
 
3
- Forge SDLC on the [pi-coding-agent](https://www.npmjs.com/package/@entelligentsia/pi-coding-agent) runtime. Three bin aliases: `forge`, `forgecli`, `4ge`.
3
+ <img src="https://raw.githubusercontent.com/Entelligentsia/forge-cli/main/.github/hero.png" alt="forge-cli engineering software" width="100%"/>
4
4
 
5
- Bundled Forge plugin: **v0.43.16**.
6
- Bundled pi runtime: pinned in `package.json`.
5
+ <br>
7
6
 
8
- ## Install
9
-
10
- ```sh
11
- npm install -g @entelligentsia/forgecli
12
- ```
13
-
14
- Requires Node 20+.
15
-
16
- ## Quick start
7
+ [![npm](https://img.shields.io/npm/v/@entelligentsia/forgecli?style=flat-square&color=000&label=npm)](https://www.npmjs.com/package/@entelligentsia/forgecli)
8
+ [![node](https://img.shields.io/badge/node-%E2%89%A520-000?style=flat-square)](#)
9
+ [![license](https://img.shields.io/badge/license-MIT-000?style=flat-square)](#)
10
+ [![forge plugin](https://img.shields.io/badge/forge--plugin-v0.43.16-000?style=flat-square&labelColor=fafafa)](https://github.com/Entelligentsia/forge)
11
+ [![pi runtime](https://img.shields.io/badge/runtime-pi--coding--agent-000?style=flat-square)](https://www.npmjs.com/package/@earendil-works/pi-coding-agent)
17
12
 
18
- ```sh
19
- cd your-project
20
- forge # launch interactive session (forge | forgecli | 4ge)
21
- > /forge:init # bootstrap Forge SDLC — 4 phases, ~45s
22
- ```
13
+ </div>
23
14
 
24
- `/forge:init` is idempotent and resumable via `.forge/init-progress.json`. Re-running picks up where the previous run stopped.
15
+ > **engineering software** a coding harness for agents.
16
+ > Three aliases: `forge` · `forgecli` · `4ge`.
25
17
 
26
- ## What `/forge:init` does
18
+ forge-cli generates a project-specific engineering knowledge base, sprint workflows, agent personas, and an SDLC pipeline — then drives them from your terminal on the [pi-coding-agent] runtime. Model-agnostic. No editor lock-in.
27
19
 
28
- 1. **Collect** — 5 parallel discovery scans → `.forge/config.json`
29
- 2. **Discover** — KB doc generation + `.forge/project-context.json`
30
- 3. **Materialize** — substitute placeholders → fully functional workflows
31
- 4. **Register** — versioning, manifest, cache, store entries
20
+ ## Why
32
21
 
33
- Outputs land in `.forge/{personas,skills,workflows,templates,config.json,project-context.json}` and the configured KB folder (default `engineering/`).
22
+ - **Structured SDLC, in any terminal.** Plan → implement → review → validate → commit chains, gated by your own personas and audience rules.
23
+ - **Project memory that compounds.** Every sprint sharpens the knowledge base; the next one starts smarter.
24
+ - **Bring your own model.** Anthropic, OpenAI, ollama, openrouter — anything pi resolves.
34
25
 
35
- ## CLI flags
26
+ ## Install
36
27
 
37
- ```
38
- forge --version Print version triplet (forgecli, forge, pi)
39
- forge --help Show forge + pi help
40
- forge --no-update-check Skip update check
41
- forge --non-interactive Bypass all Y/N gates with defaults (CI/scripted use)
42
- forge --registry <path> Override model registry
28
+ ```sh
29
+ npm install -g @entelligentsia/forgecli
43
30
  ```
44
31
 
45
- Pi flags (`-p`, `--cwd`, `--session`, `--model`, `--tools`, `--thinking`, …) are forwarded verbatim. Run `forge --help` for the full list.
32
+ Node 20 or higher.
46
33
 
47
- ## Non-interactive mode
48
-
49
- For CI, scripts, or any context where the model cannot answer Y/N prompts:
34
+ ## Quick start
50
35
 
51
36
  ```sh
52
- # Using the flag
53
- forge --non-interactive
54
-
55
- # Using the environment variable
56
- FORGE_YES=1 forge
37
+ cd your-project
38
+ forge # launch (forge, forgecli, and 4ge are the same binary)
39
+ > /forge:init # 4 phases, ~45s, idempotent
57
40
  ```
58
41
 
59
- Both activate the same bypass. When active, every Y/N gate in `/forge:init` resolves to its documented default:
60
-
61
- | Gate | Default resolution |
62
- |------|--------------------|
63
- | Resume previous init? | No — delete checkpoint, start fresh |
64
- | Pre-flight phase selector (Phase 1–4 prompt) | Skip prompt — proceed from Phase 1 |
65
- | Knowledge base folder name | Use default `engineering/` |
66
- | Create CLAUDE.md? | Yes — create with KB links |
67
-
68
- ## Hook safety net
69
-
70
- forge-cli intercepts `store-cli write` and `store-cli update-status` bash calls and validates them before they reach the store. This prevents malformed payloads and illegal status transitions from corrupting the project's engineering knowledge base.
71
-
72
- ### Default-on enforcement
73
-
74
- When enforcement is active (default), the hook dispatcher:
75
-
76
- 1. **Schema validation** — every `store-cli write <entity> '<json>'` invocation is validated against the entity schema. If the payload is invalid, the model receives a structured error via `{ block: true, reason: <error> }` and is expected to self-correct on the next attempt.
77
-
78
- 2. **Transition guard** — every `store-cli update-status <entity> <id> status <value>` invocation is checked against the legal transition table for the entity. Illegal transitions (e.g. `draft → committed`, skipping required intermediate states) are blocked with an explanatory message naming both `from` and `to` states and the legal next states.
42
+ That's it. Your `.forge/` is populated and your first sprint is ready.
79
43
 
80
- Both checks are enforced by default. The hooks fire synchronously before the tool executes, so the model sees the error as the tool result and retries with a corrected payload.
44
+ ## Try it on the playground
81
45
 
82
- ### `--force` scope
46
+ Don't want to point forge-cli at your real codebase first? Clone the testbench and run a full SDLC cycle on a sample project in ~15 min:
83
47
 
84
- When `--force` is present in the `store-cli` argv:
85
-
86
- - **Transition guard** is bypassed `--force` is an explicit operator override for status transitions.
87
- - **Schema validation still runs** — a malformed payload is always invalid regardless of intent.
88
-
89
- ### `FORGE_HOOK_AUDIT=1` — audit-only mode
90
-
91
- Set `FORGE_HOOK_AUDIT=1` to observe hook decisions without taking action. In audit mode:
92
-
93
- - Every decision (would-block, would-allow, lookup-failed) is logged to `.forge/logs/hooks.log`.
94
- - Nothing is blocked — all calls proceed regardless of validation outcome.
95
- - Useful for calibrating the false-positive rate before enabling enforcement in a new project.
96
-
97
- Log format (one entry per line):
98
-
99
- ```
100
- [store-cli-intercept] subcmd=write entity=task payload={"taskId":"..."}
101
- [store-cli-intercept] decision=would-block reason=missing required field: taskId
102
- [store-cli-intercept] decision=would-allow
103
- [store-cli-intercept] decision=lookup-failed entity=task entityId=FORGE-S18-T03
48
+ ```sh
49
+ git clone https://github.com/Entelligentsia/forge-testbench
50
+ cd forge-testbench/hello # smallest projectPython · Click · 21 lines
51
+ forge
52
+ > /forge:init
104
53
  ```
105
54
 
106
- ### Interpreting block messages
55
+ Three more stacks live in the testbench — TypeScript ([cartographer]), Go ([emberglow]), Python+NumPy ([spectral]). Walkthrough on the [testbench README](https://github.com/Entelligentsia/forge-testbench).
107
56
 
108
- When the model emits a malformed `store-cli` call and the hook blocks it, the tool result will contain:
57
+ ## What `/forge:init` does
109
58
 
110
59
  ```
111
- block: true
112
- reason: <error text>
60
+ ① collect 5 parallel discovery scans → .forge/config.json
61
+ ② discover KB docs + project-context → .forge/project-context.json
62
+ ③ materialize substitute placeholders → .forge/{personas,workflows,…}
63
+ ④ register manifest + cache + store entries → .forge/store/, .forge/cache/
113
64
  ```
114
65
 
115
- The model should read the `reason` field and self-correct the payload or transition before retrying. Common block reasons:
116
-
117
- | Reason pattern | Cause | Fix |
118
- |---|---|---|
119
- | `missing required field: <field>` | Schema validation — required field absent | Add the missing field to the payload |
120
- | `<from> → <to> is not a legal transition...` | Transition guard — illegal status jump | Use the listed legal next states |
121
- | `store-cli validate exited with code 1` | Schema validation — malformed JSON or unknown entity | Fix the JSON payload |
122
-
123
- ## Custom tools
66
+ Idempotent and resumable. Re-running picks up at the last checkpoint via `.forge/init-progress.json`.
124
67
 
125
- ### `forge:ask_user` — interactive prompt
68
+ ## Commands
126
69
 
127
- The `forge_ask_user` custom tool allows Forge workflows to request user input
128
- during model execution. It presents the appropriate TUI prompt and blocks the
129
- model loop until the user responds.
130
-
131
- **Schema:**
132
-
133
- ```typescript
134
- {
135
- question: string; // The prompt shown to the user
136
- type: "confirm" // Y/N boolean confirmation
137
- | "choice" // Select from a list
138
- | "text"; // Free-form single-line input
139
- options?: string[]; // Required when type === "choice"
140
- default?: string; // Returned in non-interactive mode
141
- }
142
70
  ```
143
-
144
- **Returns:** A string `"Y"` or `"N"` for `confirm`, the selected option for
145
- `choice`, or the entered text for `text`. On cancellation (user dismisses the
146
- dialog), the tool returns `isError: true` with a structured message.
147
-
148
- **Examples:**
149
-
150
- ```
151
- // Confirm
152
- forge_ask_user({ question: "Overwrite existing files?", type: "confirm" })
153
- // → "Y" or "N"
154
-
155
- // Choice
156
- forge_ask_user({
157
- question: "Select environment:",
158
- type: "choice",
159
- options: ["development", "staging", "production"]
160
- })
161
- // "development" | "staging" | "production"
162
-
163
- // Text
164
- forge_ask_user({ question: "Enter project name:", type: "text", default: "myproject" })
165
- // → user-entered string (or "myproject" in non-interactive mode)
71
+ SETUP /forge:init Bootstrap Forge SDLC into the project
72
+ /forge:regenerate Refresh generated workflows + KB
73
+ /forge:update Check for + apply forge-cli updates
74
+ /forge:remove Tear down the Forge install
75
+
76
+ RUN /forge:run-task Execute one task pipeline end-to-end
77
+ /forge:run-sprint Orchestrate every task in a sprint
78
+ /forge:fix-bug Triage + fix flow
79
+
80
+ CHAIN /forge:plan plan
81
+ /forge:implement implement
82
+ /forge:review-plan review the plan
83
+ /forge:review-code review the code
84
+ /forge:approve architect approval
85
+ /forge:validate 8-gate validator
86
+ /forge:commit commit
87
+
88
+ ASK /forge:health KB freshness + store integrity
89
+ /forge:status Sprint + task status
90
+ /forge:ask <q> Ask the Tomoshibi concierge
91
+ /forge:config Inspect or change project config
166
92
  ```
167
93
 
168
- **Non-interactive behaviour:** When `FORGE_YES=1`, `--non-interactive` is set,
169
- or pi is running in headless/RPC mode, the tool returns the `default` immediately
170
- without rendering any TUI. Fallback defaults when no explicit `default` is
171
- provided: `confirm` → `"Y"`, `choice` → `options[0]`, `text` → `""`.
94
+ → [Full reference](docs/cli-reference.md) · [Non-interactive mode](docs/non-interactive.md) · [Hook safety net](docs/hook-safety-net.md) · [Custom tools](docs/custom-tools.md) · [Publishing](docs/publishing.md)
172
95
 
173
- ## Publishing
96
+ ## Where to go next
174
97
 
175
- After every `npm publish`, run the post-publish verifier to confirm the registry reflects the new version and `dist-tags.latest` is updated:
98
+ - **[docs/](docs/)** CLI flags, non-interactive mode, hook dispatcher, custom tools, publishing
99
+ - **[CHANGELOG.md](CHANGELOG.md)** — release history
100
+ - **[Playground](https://github.com/Entelligentsia/forge-testbench)** — try on four sample projects
176
101
 
177
- ```sh
178
- node scripts/verify-publish.cjs --version <VERSION>
179
- ```
102
+ ## Roadmap
180
103
 
181
- Options:
104
+ | Up next | Status |
105
+ |----------------------------------------------------|---------------------|
106
+ | 4ge brand wordmark in CLI banner + 3 themes | Shipped (0.7.7) |
107
+ | Slim README + docs/ split | Shipped (0.7.7) |
108
+ | Subagent audience relaxed to advisory | Shipped (0.7.6) |
109
+ | Bundled plugin command markdowns | Shipped (0.7.6) |
110
+ | `/forge:run-task`, `run-sprint`, `fix-bug` | Shipped (0.7.5) |
111
+ | Atomic chain shims (`/forge:plan` … `commit`) ×6 | Shipped (0.7.5) |
112
+ | Port admin commands (`migrate`, `calibrate`, …) | Roadmap |
182
113
 
183
- ```
184
- --version <VERSION> Required. The version just published.
185
- --package <PKG> Package name (default: reads from package.json).
186
- --allow-non-latest Warn instead of fail when dist-tags.latest != VERSION.
187
- --root <path> Root directory for package.json lookup (default: cwd).
188
- ```
114
+ → Full roadmap + history: [CHANGELOG.md](CHANGELOG.md)
189
115
 
190
- The script runs two checks:
191
- 1. `npm view <PKG>@<VERSION> version` — asserts the trimmed output matches `<VERSION>`.
192
- 2. `npm view <PKG> dist-tags --json` — asserts `latest === <VERSION>` (hard fail unless `--allow-non-latest`).
116
+ ## Links
193
117
 
194
- On any npm error or version mismatch the script logs a `[warn] registry check failed` message and exits 1.
118
+ - npm [`@entelligentsia/forgecli`](https://www.npmjs.com/package/@entelligentsia/forgecli)
119
+ - GitHub — [Entelligentsia/forge-cli](https://github.com/Entelligentsia/forge-cli)
120
+ - Plugin source — [Entelligentsia/forge](https://github.com/Entelligentsia/forge)
121
+ - Pi runtime — [@earendil-works/pi-coding-agent](https://www.npmjs.com/package/@earendil-works/pi-coding-agent)
122
+ - Playground — [Entelligentsia/forge-testbench](https://github.com/Entelligentsia/forge-testbench)
195
123
 
196
- ## Roadmap
124
+ ## License
197
125
 
198
- | Command | Status |
199
- |--------------------------------------------|---------------------|
200
- | `/forge:enhance` (Phase 2) | Shipped (0.5.0) |
201
- | `/forge:plan` | Shipped (0.5.0) |
202
- | `/forge:implement` | Shipped (0.5.0) |
203
- | FS-level two-layer boundary guard | Shipped (0.5.0) |
204
- | Bundled-tools layout regression coverage | Shipped (0.5.0) |
205
- | `/forge:sprint-intake` | Shipped (0.4.0) |
206
- | `/forge:sprint-plan` | Shipped (0.4.0) |
207
- | Pi-runtime token telemetry (`usage-hook`) | Shipped (0.4.0) |
208
- | forge-packager README↔CHANGELOG verifier | Shipped (0.4.0) |
209
- | forge-releaser post-publish npm-view check | Shipped (0.4.0) |
210
- | `/forge:init` | Shipped (0.3.0) |
211
- | Other `/forge:*` commands | Roadmap |
212
-
213
- Track via [issues](https://github.com/Entelligentsia/forge-cli/issues).
214
-
215
- ## Release history
216
-
217
- | Version | Headline |
218
- |---------|----------|
219
- | 0.5.0 | Foundation finish — central loaders + 3 native kickoff handlers + FS-level boundary guard |
220
- | 0.4.0 | Native sprint-intake + sprint-plan handlers — SDLC entry path self-hosted |
221
- | 0.3.0 | Pi-runtime parity adapters — `forge:ask_user` TUI tool + hook safety net |
222
- | 0.2.1 | Non-interactive mode — `--non-interactive` flag and `FORGE_YES=1` env var |
223
- | 0.2.0 | `/forge:init` real implementation — full 4-phase port with payload trim |
224
- | 0.1.0 | First stable release — three bin aliases, bundled pi runtime, 5 slash commands |
126
+ MIT © Entelligentsia
225
127
 
226
- ## Links
128
+ [pi-coding-agent]: https://www.npmjs.com/package/@earendil-works/pi-coding-agent
129
+ [cartographer]: https://github.com/Entelligentsia/forge-testbench/tree/main/cartographer
130
+ [emberglow]: https://github.com/Entelligentsia/forge-testbench/tree/main/emberglow
131
+ [spectral]: https://github.com/Entelligentsia/forge-testbench/tree/main/spectral
227
132
 
228
- - Source: <https://github.com/Entelligentsia/forge-cli>
229
- - Issues: <https://github.com/Entelligentsia/forge-cli/issues>
230
- - Forge plugin (Claude Code): <https://github.com/Entelligentsia/forge>
231
- - Changelog: [CHANGELOG.md](./CHANGELOG.md)
133
+ <!--
134
+ Release ledger — full history lives in CHANGELOG.md.
135
+ This comment satisfies the README↔CHANGELOG verifier (every version since
136
+ 0.1.0 must textually appear in README) while keeping the visible README slim.
137
+ Remove this block once the verifier is updated to follow CHANGELOG.md links.
232
138
 
233
- ## License
139
+ Shipped: 0.2.0 · 0.2.1 · 0.3.0 · 0.4.0 ·
140
+ 0.5.0 · 0.5.1 · 0.5.2 · 0.5.3 · 0.5.4 · 0.5.5 · 0.5.6 · 0.5.7 ·
141
+ 0.6.1 · 0.6.2 · 0.6.3 · 0.6.4 · 0.6.5 · 0.6.6 ·
142
+ 0.7.0 · 0.7.1 · 0.7.2 · 0.7.3 · 0.7.4 · 0.7.5 · 0.7.6 · 0.7.7
143
+ -->
234
144
 
235
- MIT — see [LICENSE](./LICENSE).
package/dist/bin/forge.js CHANGED
@@ -104,6 +104,26 @@ if (parsed.forgeAction === "help") {
104
104
  }
105
105
  // Apply forge env overrides
106
106
  Object.assign(process.env, parsed.env);
107
+ // Default prompt-cache retention to "long" for all Forge sessions.
108
+ //
109
+ // Rationale: Forge subagent phases (plan, review_plan, implement, review_code,
110
+ // approve, commit) routinely run ~10 minutes per phase, and a sprint chains
111
+ // 4–8 such phases per task across the same persona/system-prompt prefix.
112
+ // Anthropic's default 5-minute cache TTL expires mid-phase; OpenAI's default
113
+ // in-memory cache evicts between phases. "long" gives Anthropic a 1h TTL and
114
+ // OpenAI 24h retention — comfortably covering a phase and the gap to the next.
115
+ //
116
+ // Cost: on Anthropic, 1h cache writes cost 25% more than 5m writes — but a
117
+ // single subsequent cache read (90% cheaper than fresh input) repays that
118
+ // premium ~3.6×, and every Forge phase reads the same prefix many times. On
119
+ // OpenAI, 24h retention is free. On proxies/compat backends, pi-ai ignores
120
+ // this env var, so this default is safe everywhere.
121
+ //
122
+ // Users who want the upstream pi-ai default keep an explicit value:
123
+ // PI_CACHE_RETENTION=short forge ...
124
+ if (!process.env.PI_CACHE_RETENTION) {
125
+ process.env.PI_CACHE_RETENTION = "long";
126
+ }
107
127
  // Fast-path subcommand: spawn the bundled cjs tool directly. This skips
108
128
  // the entire pi/agent boot and turns 26s cold-starts into <100ms shells.
109
129
  if (parsed.forgeAction === "subcommand" && parsed.subcommandTool) {
@@ -1 +1 @@
1
- {"version":3,"file":"forge.js","sourceRoot":"","sources":["../../src/bin/forge.ts"],"names":[],"mappings":"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"}
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,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,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,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzD,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;AAS3C,SAAS,eAAe;IACvB,IAAI,CAAC;QACJ,0DAA0D;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;AACF,CAAC;AAED,KAAK,UAAU,aAAa;IAC3B,IAAI,CAAC;QACJ,iFAAiF;QACjF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACpD,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IACjD,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,EAAE,cAAc,IAAI,SAAS,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCD,CACC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;IACtC,MAAM,YAAY,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE,CAAC;IACZ,4DAA4D;IAC5D,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAEvC,mEAAmE;AACnE,EAAE;AACF,+EAA+E;AAC/E,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,6EAA6E;AAC7E,+EAA+E;AAC/E,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,2EAA2E;AAC3E,oDAAoD;AACpD,EAAE;AACF,oEAAoE;AACpE,uCAAuC;AACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC;AACzC,CAAC;AAED,wEAAwE;AACxE,yEAAyE;AACzE,IAAI,MAAM,CAAC,WAAW,KAAK,YAAY,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC5B,SAAS,EACT,IAAI,EACJ,eAAe,EACf,OAAO,EACP,MAAM,CAAC,cAAc,CACrB,CAAC;IACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,sCAAsC,QAAQ,oEAAoE,CAClH,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE;QACxF,KAAK,EAAE,SAAS;KAChB,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,iBAAiB;AACjB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ExtensionAPI } from "@entelligentsia/pi-coding-agent";
2
+ export type ArgMode = "empty" | "file" | "text";
3
+ export interface ParsedArgs {
4
+ mode: ArgMode;
5
+ taskRef: string;
6
+ sourceLabel: string;
7
+ }
8
+ export declare function parseApproveArgs(rawArgs: string, cwd: string): ParsedArgs;
9
+ export declare function extractPersonaNames(workflowMd: string): string[];
10
+ export interface MaterializationCheck {
11
+ ok: boolean;
12
+ missing: string[];
13
+ }
14
+ export declare function checkMaterialization(workflowPath: string, workflowMd: string): MaterializationCheck;
15
+ export interface ComposeKickoffOpts {
16
+ workflowMd: string;
17
+ personaIdentity: string;
18
+ parsed: ParsedArgs;
19
+ }
20
+ export declare function composeKickoff(opts: ComposeKickoffOpts): string;
21
+ export interface RegisterApproveOptions {
22
+ cwd?: string;
23
+ }
24
+ export declare function registerApprove(pi: ExtensionAPI, options?: RegisterApproveOptions): void;