@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.
- package/CHANGELOG.md +112 -0
- package/README.md +99 -190
- package/dist/bin/forge.js +20 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/extensions/forgecli/approve.d.ts +24 -0
- package/dist/extensions/forgecli/approve.js +202 -0
- package/dist/extensions/forgecli/approve.js.map +1 -0
- package/dist/extensions/forgecli/audience-gate.d.ts +4 -0
- package/dist/extensions/forgecli/audience-gate.js +8 -5
- package/dist/extensions/forgecli/audience-gate.js.map +1 -1
- package/dist/extensions/forgecli/collate.d.ts +24 -0
- package/dist/extensions/forgecli/collate.js +199 -0
- package/dist/extensions/forgecli/collate.js.map +1 -0
- package/dist/extensions/forgecli/commit.d.ts +24 -0
- package/dist/extensions/forgecli/commit.js +202 -0
- package/dist/extensions/forgecli/commit.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +75 -0
- package/dist/extensions/forgecli/fix-bug.js +1133 -0
- package/dist/extensions/forgecli/fix-bug.js.map +1 -0
- package/dist/extensions/forgecli/forge-commands.js +7 -0
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-header.js +10 -4
- package/dist/extensions/forgecli/forge-header.js.map +1 -1
- package/dist/extensions/forgecli/forge-init.js +16 -8
- package/dist/extensions/forgecli/forge-init.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +29 -0
- package/dist/extensions/forgecli/forge-subagent.js +14 -1
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +53 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +47 -1
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-init-hook.d.ts +15 -0
- package/dist/extensions/forgecli/hooks/post-init-hook.js +127 -0
- package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.d.ts +37 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js +166 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -0
- package/dist/extensions/forgecli/index.js +56 -5
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/review-code.d.ts +24 -0
- package/dist/extensions/forgecli/review-code.js +202 -0
- package/dist/extensions/forgecli/review-code.js.map +1 -0
- package/dist/extensions/forgecli/review-plan.d.ts +24 -0
- package/dist/extensions/forgecli/review-plan.js +203 -0
- package/dist/extensions/forgecli/review-plan.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.d.ts +18 -0
- package/dist/extensions/forgecli/run-sprint.js +33 -1
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +21 -2
- package/dist/extensions/forgecli/run-task.js +33 -9
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +10 -0
- package/dist/extensions/forgecli/session-registry.js +9 -0
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/validate.d.ts +24 -0
- package/dist/extensions/forgecli/validate.js +202 -0
- package/dist/extensions/forgecli/validate.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/engine.d.ts +23 -0
- package/dist/extensions/forgecli/wf-engine/engine.js +384 -0
- package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.js +29 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.js +17 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/loader.d.ts +2 -0
- package/dist/extensions/forgecli/wf-engine/loader.js +100 -0
- package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/predicate.d.ts +7 -0
- package/dist/extensions/forgecli/wf-engine/predicate.js +36 -0
- package/dist/extensions/forgecli/wf-engine/predicate.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.d.ts +15 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.js +23 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/register.d.ts +9 -0
- package/dist/extensions/forgecli/wf-engine/register.js +59 -0
- package/dist/extensions/forgecli/wf-engine/register.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.js +42 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/state-store.d.ts +13 -0
- package/dist/extensions/forgecli/wf-engine/state-store.js +43 -0
- package/dist/extensions/forgecli/wf-engine/state-store.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/types.d.ts +66 -0
- package/dist/extensions/forgecli/wf-engine/types.js +2 -0
- package/dist/extensions/forgecli/wf-engine/types.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/worker.d.ts +11 -0
- package/dist/extensions/forgecli/wf-engine/worker.js +50 -0
- package/dist/extensions/forgecli/wf-engine/worker.js.map +1 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/context-injection.md +10 -4
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +12 -0
- package/dist/forge-payload/.schemas/bug.schema.json +4 -2
- package/dist/forge-payload/.schemas/event.schema.json +22 -3
- package/dist/forge-payload/commands/add-pipeline.md +342 -0
- package/dist/forge-payload/commands/add-task.md +269 -0
- package/dist/forge-payload/commands/ask.md +43 -0
- package/dist/forge-payload/commands/calibrate.md +356 -0
- package/dist/forge-payload/commands/config.md +202 -0
- package/dist/forge-payload/commands/enhance.md +38 -0
- package/dist/forge-payload/commands/health.md +225 -0
- package/dist/forge-payload/commands/init.md +165 -0
- package/dist/forge-payload/commands/materialize.md +119 -0
- package/dist/forge-payload/commands/migrate.md +160 -0
- package/dist/forge-payload/commands/quiz-agent.md +38 -0
- package/dist/forge-payload/commands/regenerate.md +673 -0
- package/dist/forge-payload/commands/remove.md +174 -0
- package/dist/forge-payload/commands/report-bug.md +191 -0
- package/dist/forge-payload/commands/store-query.md +73 -0
- package/dist/forge-payload/commands/store-repair.md +187 -0
- package/dist/forge-payload/commands/update-tools.md +56 -0
- package/dist/forge-payload/commands/update.md +1376 -0
- package/dist/forge-payload/tools/preflight-gate.cjs +2 -1
- package/dist/forge-payload/tools/read-verdict.cjs +41 -8
- package/dist/forge-payload/tools/store-cli.cjs +4 -3
- package/node_modules/argparse/CHANGELOG.md +216 -0
- package/node_modules/argparse/LICENSE +254 -0
- package/node_modules/argparse/README.md +84 -0
- package/node_modules/argparse/argparse.js +3707 -0
- package/node_modules/argparse/lib/sub.js +67 -0
- package/node_modules/argparse/lib/textwrap.js +440 -0
- package/node_modules/argparse/package.json +31 -0
- package/node_modules/cliui/CHANGELOG.md +121 -0
- package/node_modules/color-convert/CHANGELOG.md +54 -0
- package/node_modules/esprima/ChangeLog +235 -0
- package/node_modules/js-yaml/LICENSE +21 -0
- package/node_modules/js-yaml/README.md +247 -0
- package/node_modules/js-yaml/bin/js-yaml.js +126 -0
- package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
- package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
- package/node_modules/js-yaml/dist/js-yaml.mjs +3856 -0
- package/node_modules/js-yaml/index.js +47 -0
- package/node_modules/js-yaml/lib/common.js +59 -0
- package/node_modules/js-yaml/lib/dumper.js +965 -0
- package/node_modules/js-yaml/lib/exception.js +55 -0
- package/node_modules/js-yaml/lib/loader.js +1733 -0
- package/node_modules/js-yaml/lib/schema/core.js +11 -0
- package/node_modules/js-yaml/lib/schema/default.js +22 -0
- package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
- package/node_modules/js-yaml/lib/schema/json.js +19 -0
- package/node_modules/js-yaml/lib/schema.js +121 -0
- package/node_modules/js-yaml/lib/snippet.js +101 -0
- package/node_modules/js-yaml/lib/type/binary.js +125 -0
- package/node_modules/js-yaml/lib/type/bool.js +35 -0
- package/node_modules/js-yaml/lib/type/float.js +97 -0
- package/node_modules/js-yaml/lib/type/int.js +156 -0
- package/node_modules/js-yaml/lib/type/map.js +8 -0
- package/node_modules/js-yaml/lib/type/merge.js +12 -0
- package/node_modules/js-yaml/lib/type/null.js +35 -0
- package/node_modules/js-yaml/lib/type/omap.js +44 -0
- package/node_modules/js-yaml/lib/type/pairs.js +53 -0
- package/node_modules/js-yaml/lib/type/seq.js +8 -0
- package/node_modules/js-yaml/lib/type/set.js +29 -0
- package/node_modules/js-yaml/lib/type/str.js +8 -0
- package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
- package/node_modules/js-yaml/lib/type.js +66 -0
- package/node_modules/js-yaml/package.json +66 -0
- package/node_modules/mz/HISTORY.md +66 -0
- package/node_modules/proper-lockfile/CHANGELOG.md +108 -0
- package/node_modules/source-map/CHANGELOG.md +301 -0
- package/node_modules/thenify/History.md +11 -0
- package/node_modules/thenify-all/History.md +11 -0
- package/node_modules/y18n/CHANGELOG.md +100 -0
- package/node_modules/yargs/CHANGELOG.md +88 -0
- package/node_modules/yargs-parser/CHANGELOG.md +263 -0
- package/package.json +6 -2
- package/themes/forge-matrix.json +89 -0
- package/themes/forge-mono.json +86 -0
- package/workflows/lead-qualifier/prompts/digest.md +44 -0
- package/workflows/lead-qualifier/prompts/draft-outreach.md +44 -0
- package/workflows/lead-qualifier/prompts/enrich.md +52 -0
- package/workflows/lead-qualifier/prompts/intake.md +48 -0
- package/workflows/lead-qualifier/prompts/mark-cold.md +38 -0
- package/workflows/lead-qualifier/prompts/score.md +45 -0
- package/workflows/lead-qualifier/workflow.yaml +95 -0
- package/workflows/research-brief/prompts/brief-synthesize.md +43 -0
- package/workflows/research-brief/prompts/intake.md +51 -0
- package/workflows/research-brief/prompts/source-critique.md +38 -0
- package/workflows/research-brief/prompts/source-score.md +38 -0
- package/workflows/research-brief/prompts/source-summarize.md +54 -0
- package/workflows/research-brief/workflow.yaml +66 -0
- package/dist/extensions/forgecli/session-monitor-widget.d.ts +0 -37
- package/dist/extensions/forgecli/session-monitor-widget.js +0 -320
- package/dist/extensions/forgecli/session-monitor-widget.js.map +0 -1
- package/dist/extensions/forgecli/session-monitor.d.ts +0 -2
- package/dist/extensions/forgecli/session-monitor.js +0 -135
- 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
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Entelligentsia/forge-cli/main/.github/hero.png" alt="forge-cli — engineering software" width="100%"/>
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
Bundled pi runtime: pinned in `package.json`.
|
|
5
|
+
<br>
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Requires Node 20+.
|
|
15
|
-
|
|
16
|
-
## Quick start
|
|
7
|
+
[](https://www.npmjs.com/package/@entelligentsia/forgecli)
|
|
8
|
+
[](#)
|
|
9
|
+
[](#)
|
|
10
|
+
[](https://github.com/Entelligentsia/forge)
|
|
11
|
+
[](https://www.npmjs.com/package/@earendil-works/pi-coding-agent)
|
|
17
12
|
|
|
18
|
-
|
|
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
|
-
|
|
15
|
+
> **engineering software** — a coding harness for agents.
|
|
16
|
+
> Three aliases: `forge` · `forgecli` · `4ge`.
|
|
25
17
|
|
|
26
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
26
|
+
## Install
|
|
36
27
|
|
|
37
|
-
```
|
|
38
|
-
|
|
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
|
-
|
|
32
|
+
Node 20 or higher.
|
|
46
33
|
|
|
47
|
-
##
|
|
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
|
-
|
|
53
|
-
forge
|
|
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
|
-
|
|
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
|
-
|
|
44
|
+
## Try it on the playground
|
|
81
45
|
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
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 project — Python · Click · 21 lines
|
|
51
|
+
forge
|
|
52
|
+
> /forge:init
|
|
104
53
|
```
|
|
105
54
|
|
|
106
|
-
|
|
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
|
-
|
|
57
|
+
## What `/forge:init` does
|
|
109
58
|
|
|
110
59
|
```
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
96
|
+
## Where to go next
|
|
174
97
|
|
|
175
|
-
|
|
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
|
-
|
|
178
|
-
node scripts/verify-publish.cjs --version <VERSION>
|
|
179
|
-
```
|
|
102
|
+
## Roadmap
|
|
180
103
|
|
|
181
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
124
|
+
## License
|
|
197
125
|
|
|
198
|
-
|
|
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
|
-
|
|
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
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
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) {
|
package/dist/bin/forge.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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;
|