@entelligentsia/forgecli 0.6.6 → 0.7.6

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 (183) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/README.md +28 -1
  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-init.js +16 -8
  23. package/dist/extensions/forgecli/forge-init.js.map +1 -1
  24. package/dist/extensions/forgecli/forge-subagent.d.ts +29 -0
  25. package/dist/extensions/forgecli/forge-subagent.js +14 -1
  26. package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
  27. package/dist/extensions/forgecli/hook-dispatcher.d.ts +53 -1
  28. package/dist/extensions/forgecli/hook-dispatcher.js +47 -1
  29. package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
  30. package/dist/extensions/forgecli/hooks/post-init-hook.d.ts +15 -0
  31. package/dist/extensions/forgecli/hooks/post-init-hook.js +127 -0
  32. package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -0
  33. package/dist/extensions/forgecli/hooks/post-sprint-hook.d.ts +37 -0
  34. package/dist/extensions/forgecli/hooks/post-sprint-hook.js +166 -0
  35. package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -0
  36. package/dist/extensions/forgecli/index.js +47 -0
  37. package/dist/extensions/forgecli/index.js.map +1 -1
  38. package/dist/extensions/forgecli/review-code.d.ts +24 -0
  39. package/dist/extensions/forgecli/review-code.js +202 -0
  40. package/dist/extensions/forgecli/review-code.js.map +1 -0
  41. package/dist/extensions/forgecli/review-plan.d.ts +24 -0
  42. package/dist/extensions/forgecli/review-plan.js +203 -0
  43. package/dist/extensions/forgecli/review-plan.js.map +1 -0
  44. package/dist/extensions/forgecli/run-sprint.d.ts +18 -0
  45. package/dist/extensions/forgecli/run-sprint.js +33 -1
  46. package/dist/extensions/forgecli/run-sprint.js.map +1 -1
  47. package/dist/extensions/forgecli/run-task.d.ts +21 -2
  48. package/dist/extensions/forgecli/run-task.js +33 -9
  49. package/dist/extensions/forgecli/run-task.js.map +1 -1
  50. package/dist/extensions/forgecli/session-registry.d.ts +10 -0
  51. package/dist/extensions/forgecli/session-registry.js +9 -0
  52. package/dist/extensions/forgecli/session-registry.js.map +1 -1
  53. package/dist/extensions/forgecli/validate.d.ts +24 -0
  54. package/dist/extensions/forgecli/validate.js +202 -0
  55. package/dist/extensions/forgecli/validate.js.map +1 -0
  56. package/dist/extensions/forgecli/wf-engine/engine.d.ts +23 -0
  57. package/dist/extensions/forgecli/wf-engine/engine.js +384 -0
  58. package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -0
  59. package/dist/extensions/forgecli/wf-engine/event-parser.d.ts +6 -0
  60. package/dist/extensions/forgecli/wf-engine/event-parser.js +29 -0
  61. package/dist/extensions/forgecli/wf-engine/event-parser.js.map +1 -0
  62. package/dist/extensions/forgecli/wf-engine/id-gen.d.ts +6 -0
  63. package/dist/extensions/forgecli/wf-engine/id-gen.js +17 -0
  64. package/dist/extensions/forgecli/wf-engine/id-gen.js.map +1 -0
  65. package/dist/extensions/forgecli/wf-engine/loader.d.ts +2 -0
  66. package/dist/extensions/forgecli/wf-engine/loader.js +100 -0
  67. package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -0
  68. package/dist/extensions/forgecli/wf-engine/predicate.d.ts +7 -0
  69. package/dist/extensions/forgecli/wf-engine/predicate.js +36 -0
  70. package/dist/extensions/forgecli/wf-engine/predicate.js.map +1 -0
  71. package/dist/extensions/forgecli/wf-engine/prompt-compiler.d.ts +15 -0
  72. package/dist/extensions/forgecli/wf-engine/prompt-compiler.js +23 -0
  73. package/dist/extensions/forgecli/wf-engine/prompt-compiler.js.map +1 -0
  74. package/dist/extensions/forgecli/wf-engine/register.d.ts +9 -0
  75. package/dist/extensions/forgecli/wf-engine/register.js +59 -0
  76. package/dist/extensions/forgecli/wf-engine/register.js.map +1 -0
  77. package/dist/extensions/forgecli/wf-engine/remit-check.d.ts +6 -0
  78. package/dist/extensions/forgecli/wf-engine/remit-check.js +42 -0
  79. package/dist/extensions/forgecli/wf-engine/remit-check.js.map +1 -0
  80. package/dist/extensions/forgecli/wf-engine/state-store.d.ts +13 -0
  81. package/dist/extensions/forgecli/wf-engine/state-store.js +43 -0
  82. package/dist/extensions/forgecli/wf-engine/state-store.js.map +1 -0
  83. package/dist/extensions/forgecli/wf-engine/types.d.ts +66 -0
  84. package/dist/extensions/forgecli/wf-engine/types.js +2 -0
  85. package/dist/extensions/forgecli/wf-engine/types.js.map +1 -0
  86. package/dist/extensions/forgecli/wf-engine/worker.d.ts +11 -0
  87. package/dist/extensions/forgecli/wf-engine/worker.js +50 -0
  88. package/dist/extensions/forgecli/wf-engine/worker.js.map +1 -0
  89. package/dist/forge-payload/.base-pack/workflows/_fragments/context-injection.md +10 -4
  90. package/dist/forge-payload/.base-pack/workflows/fix_bug.md +12 -0
  91. package/dist/forge-payload/.schemas/bug.schema.json +4 -2
  92. package/dist/forge-payload/.schemas/event.schema.json +22 -3
  93. package/dist/forge-payload/commands/add-pipeline.md +342 -0
  94. package/dist/forge-payload/commands/add-task.md +269 -0
  95. package/dist/forge-payload/commands/ask.md +43 -0
  96. package/dist/forge-payload/commands/calibrate.md +356 -0
  97. package/dist/forge-payload/commands/config.md +202 -0
  98. package/dist/forge-payload/commands/enhance.md +38 -0
  99. package/dist/forge-payload/commands/health.md +225 -0
  100. package/dist/forge-payload/commands/init.md +165 -0
  101. package/dist/forge-payload/commands/materialize.md +119 -0
  102. package/dist/forge-payload/commands/migrate.md +160 -0
  103. package/dist/forge-payload/commands/quiz-agent.md +38 -0
  104. package/dist/forge-payload/commands/regenerate.md +673 -0
  105. package/dist/forge-payload/commands/remove.md +174 -0
  106. package/dist/forge-payload/commands/report-bug.md +191 -0
  107. package/dist/forge-payload/commands/store-query.md +73 -0
  108. package/dist/forge-payload/commands/store-repair.md +187 -0
  109. package/dist/forge-payload/commands/update-tools.md +56 -0
  110. package/dist/forge-payload/commands/update.md +1376 -0
  111. package/dist/forge-payload/tools/preflight-gate.cjs +2 -1
  112. package/dist/forge-payload/tools/read-verdict.cjs +41 -8
  113. package/dist/forge-payload/tools/store-cli.cjs +4 -3
  114. package/node_modules/argparse/CHANGELOG.md +216 -0
  115. package/node_modules/argparse/LICENSE +254 -0
  116. package/node_modules/argparse/README.md +84 -0
  117. package/node_modules/argparse/argparse.js +3707 -0
  118. package/node_modules/argparse/lib/sub.js +67 -0
  119. package/node_modules/argparse/lib/textwrap.js +440 -0
  120. package/node_modules/argparse/package.json +31 -0
  121. package/node_modules/cliui/CHANGELOG.md +121 -0
  122. package/node_modules/color-convert/CHANGELOG.md +54 -0
  123. package/node_modules/esprima/ChangeLog +235 -0
  124. package/node_modules/js-yaml/LICENSE +21 -0
  125. package/node_modules/js-yaml/README.md +247 -0
  126. package/node_modules/js-yaml/bin/js-yaml.js +126 -0
  127. package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
  128. package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
  129. package/node_modules/js-yaml/dist/js-yaml.mjs +3856 -0
  130. package/node_modules/js-yaml/index.js +47 -0
  131. package/node_modules/js-yaml/lib/common.js +59 -0
  132. package/node_modules/js-yaml/lib/dumper.js +965 -0
  133. package/node_modules/js-yaml/lib/exception.js +55 -0
  134. package/node_modules/js-yaml/lib/loader.js +1733 -0
  135. package/node_modules/js-yaml/lib/schema/core.js +11 -0
  136. package/node_modules/js-yaml/lib/schema/default.js +22 -0
  137. package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
  138. package/node_modules/js-yaml/lib/schema/json.js +19 -0
  139. package/node_modules/js-yaml/lib/schema.js +121 -0
  140. package/node_modules/js-yaml/lib/snippet.js +101 -0
  141. package/node_modules/js-yaml/lib/type/binary.js +125 -0
  142. package/node_modules/js-yaml/lib/type/bool.js +35 -0
  143. package/node_modules/js-yaml/lib/type/float.js +97 -0
  144. package/node_modules/js-yaml/lib/type/int.js +156 -0
  145. package/node_modules/js-yaml/lib/type/map.js +8 -0
  146. package/node_modules/js-yaml/lib/type/merge.js +12 -0
  147. package/node_modules/js-yaml/lib/type/null.js +35 -0
  148. package/node_modules/js-yaml/lib/type/omap.js +44 -0
  149. package/node_modules/js-yaml/lib/type/pairs.js +53 -0
  150. package/node_modules/js-yaml/lib/type/seq.js +8 -0
  151. package/node_modules/js-yaml/lib/type/set.js +29 -0
  152. package/node_modules/js-yaml/lib/type/str.js +8 -0
  153. package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
  154. package/node_modules/js-yaml/lib/type.js +66 -0
  155. package/node_modules/js-yaml/package.json +66 -0
  156. package/node_modules/mz/HISTORY.md +66 -0
  157. package/node_modules/proper-lockfile/CHANGELOG.md +108 -0
  158. package/node_modules/source-map/CHANGELOG.md +301 -0
  159. package/node_modules/thenify/History.md +11 -0
  160. package/node_modules/thenify-all/History.md +11 -0
  161. package/node_modules/y18n/CHANGELOG.md +100 -0
  162. package/node_modules/yargs/CHANGELOG.md +88 -0
  163. package/node_modules/yargs-parser/CHANGELOG.md +263 -0
  164. package/package.json +6 -2
  165. package/workflows/lead-qualifier/prompts/digest.md +44 -0
  166. package/workflows/lead-qualifier/prompts/draft-outreach.md +44 -0
  167. package/workflows/lead-qualifier/prompts/enrich.md +52 -0
  168. package/workflows/lead-qualifier/prompts/intake.md +48 -0
  169. package/workflows/lead-qualifier/prompts/mark-cold.md +38 -0
  170. package/workflows/lead-qualifier/prompts/score.md +45 -0
  171. package/workflows/lead-qualifier/workflow.yaml +95 -0
  172. package/workflows/research-brief/prompts/brief-synthesize.md +43 -0
  173. package/workflows/research-brief/prompts/intake.md +51 -0
  174. package/workflows/research-brief/prompts/source-critique.md +38 -0
  175. package/workflows/research-brief/prompts/source-score.md +38 -0
  176. package/workflows/research-brief/prompts/source-summarize.md +54 -0
  177. package/workflows/research-brief/workflow.yaml +66 -0
  178. package/dist/extensions/forgecli/session-monitor-widget.d.ts +0 -37
  179. package/dist/extensions/forgecli/session-monitor-widget.js +0 -320
  180. package/dist/extensions/forgecli/session-monitor-widget.js.map +0 -1
  181. package/dist/extensions/forgecli/session-monitor.d.ts +0 -2
  182. package/dist/extensions/forgecli/session-monitor.js +0 -135
  183. package/dist/extensions/forgecli/session-monitor.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import type { ExtensionAPI } from "@entelligentsia/pi-coding-agent";
2
- export declare function registerSessionMonitor(pi: ExtensionAPI): void;
@@ -1,135 +0,0 @@
1
- // session-monitor.ts — register /forge:sessions slash command and Ctrl+Shift+S
2
- // shortcut that toggle the session-monitor widget below the input swimline.
3
- //
4
- // Focus model: pi keeps keyboard focus on the editor when an extension widget
5
- // is mounted via setWidget(). To route arrow keys / Tab / Esc to the widget
6
- // while it is open, we install a ctx.ui.onTerminalInput handler that consumes
7
- // those keys and forwards them to the widget's handleInput. Letter keys and
8
- // Enter pass through to the editor so the user can still type and submit
9
- // prompts while monitoring sessions.
10
- import { Key } from "@entelligentsia/pi-tui";
11
- import { buildSessionMonitorWidget, } from "./session-monitor-widget.js";
12
- const WIDGET_KEY = "forge-sessions";
13
- // Process-global state. The slash command and the shortcut share one toggle
14
- // state; pi only paints one widget per key at a time.
15
- let isOpen = false;
16
- let widgetRef;
17
- let unsubscribeInput;
18
- // Keys that should always route to the widget while it is open.
19
- function isWidgetKey(data) {
20
- if (data === "")
21
- return true; // bare Esc
22
- if (data === "\t")
23
- return true; // Tab
24
- if (data === "" || data === "OA")
25
- return true; // up
26
- if (data === "" || data === "OB")
27
- return true; // down
28
- if (data === "" || data === "OC")
29
- return true; // right
30
- if (data === "" || data === "OD")
31
- return true; // left
32
- if (data === "" || data === "")
33
- return true; // Home / End
34
- if (data === "[5~" || data === "[6~")
35
- return true; // PgUp / PgDn
36
- return false;
37
- }
38
- function closeWidget(ctx) {
39
- unsubscribeInput?.();
40
- unsubscribeInput = undefined;
41
- widgetRef = undefined;
42
- ctx.ui.setWidget(WIDGET_KEY, undefined);
43
- isOpen = false;
44
- }
45
- function toggle(ctx) {
46
- if (isOpen) {
47
- closeWidget(ctx);
48
- ctx.ui.notify("forge:sessions closed", "info");
49
- return;
50
- }
51
- ctx.ui.notify("forge:sessions opening…", "info");
52
- if (process.env.FORGE_SESSIONS_PROBE === "1") {
53
- // Plain string[] form — confirms whether widgets render at all in this
54
- // pi build. Set FORGE_SESSIONS_PROBE=1 before launching forge to use.
55
- ctx.ui.setWidget(WIDGET_KEY, [
56
- "── Forge Sessions (probe) ──────────────────────────",
57
- " This is the string[] form of setWidget.",
58
- " If you see this, widgets render.",
59
- " Press /forge:sessions again to close.",
60
- ], { placement: "belowEditor" });
61
- isOpen = true;
62
- return;
63
- }
64
- try {
65
- const factory = buildSessionMonitorWidget({
66
- requestRender: () => {
67
- // pi re-renders widgets on its own tick when they emit lines from
68
- // render(); the SessionRegistry "change" listener calls
69
- // invalidate() on the SelectLists inside the widget.
70
- },
71
- onClose: () => {
72
- closeWidget(ctx);
73
- },
74
- onMount: (w) => {
75
- widgetRef = w;
76
- },
77
- });
78
- ctx.ui.setWidget(WIDGET_KEY, factory, { placement: "belowEditor" });
79
- isOpen = true;
80
- // Install raw input interceptor so arrow keys / Tab / Esc reach the
81
- // widget instead of the editor. Letter keys & Enter pass through.
82
- unsubscribeInput = ctx.ui.onTerminalInput((data) => {
83
- if (!widgetRef || !isOpen)
84
- return undefined;
85
- if (!isWidgetKey(data))
86
- return undefined;
87
- try {
88
- widgetRef.handleInput(data);
89
- }
90
- catch (err) {
91
- const e = err;
92
- process.stderr.write(`[forge:sessions] widget.handleInput threw: ${e.message ?? "unknown"}\n`);
93
- }
94
- return { consume: true };
95
- });
96
- }
97
- catch (err) {
98
- const e = err;
99
- ctx.ui.notify(`forge:sessions failed to mount: ${e.message ?? "unknown"}\n${e.stack ?? ""}`, "error");
100
- isOpen = false;
101
- }
102
- }
103
- export function registerSessionMonitor(pi) {
104
- process.stderr.write("[forge:sessions] registerSessionMonitor: registering command + shortcut\n");
105
- pi.registerCommand("forge:sessions", {
106
- description: "Toggle the Forge session monitor: live list of run-task subagent sessions " +
107
- "with per-event details. Below the input. Shortcut: Ctrl+Shift+S. " +
108
- "While open: ↑↓ navigate, Tab/→ switch panes, Esc closes.",
109
- async handler(_args, ctx) {
110
- process.stderr.write("[forge:sessions] command handler invoked\n");
111
- try {
112
- toggle(ctx);
113
- }
114
- catch (err) {
115
- const e = err;
116
- process.stderr.write(`[forge:sessions] handler threw: ${e.message ?? "unknown"}\n${e.stack ?? ""}\n`);
117
- try {
118
- ctx.ui.notify(`forge:sessions handler threw: ${e.message ?? "unknown"}`, "error");
119
- }
120
- catch {
121
- /* notify itself failed; stderr line above is the durable trace */
122
- }
123
- }
124
- },
125
- });
126
- // Ctrl+L is reserved by pi (terminal clear). Use Ctrl+Shift+S — unbound by
127
- // default in pi and unlikely to clash with shell/terminal muscle memory.
128
- pi.registerShortcut(Key.ctrlShift("s"), {
129
- description: "Toggle Forge session monitor",
130
- handler: (ctx) => {
131
- toggle(ctx);
132
- },
133
- });
134
- }
135
- //# sourceMappingURL=session-monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-monitor.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/session-monitor.ts"],"names":[],"mappings":"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"}