@entelligentsia/forgecli 1.0.21 → 1.0.25

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 (232) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/dist/CHANGELOG-forge-plugin.md +118 -0
  3. package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
  4. package/dist/extensions/forgecli/forge-tools.js +73 -0
  5. package/dist/extensions/forgecli/forge-tools.js.map +1 -1
  6. package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
  7. package/dist/extensions/forgecli/lib/forge-root.js +14 -1
  8. package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
  9. package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +1 -0
  10. package/dist/extensions/forgecli/orchestrators/fix-bug.js +26 -0
  11. package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
  12. package/dist/extensions/forgecli/orchestrators/run-sprint.js +49 -0
  13. package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
  14. package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
  15. package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
  16. package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
  17. package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
  18. package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
  19. package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
  20. package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
  21. package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
  22. package/dist/forge-payload/.schemas/event.schema.json +8 -3
  23. package/dist/forge-payload/.schemas/migrations.json +56 -0
  24. package/dist/forge-payload/integrity.json +3 -3
  25. package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
  26. package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
  27. package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
  28. package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
  29. package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
  30. package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
  31. package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
  32. package/dist/forge-payload/schemas/enum-catalog.json +2 -2
  33. package/dist/forge-payload/schemas/event.schema.json +8 -3
  34. package/dist/forge-payload/schemas/structure-manifest.json +4 -2
  35. package/dist/forge-payload/tools/commit-task.cjs +218 -0
  36. package/dist/forge-payload/tools/store-cli.cjs +6 -1
  37. package/node_modules/@mariozechner/clipboard/package.json +2 -1
  38. package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +3 -0
  39. package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +25 -0
  40. package/package.json +2 -2
  41. package/dist/extensions/forgecli/add-pipeline.d.ts +0 -19
  42. package/dist/extensions/forgecli/add-pipeline.js +0 -143
  43. package/dist/extensions/forgecli/add-pipeline.js.map +0 -1
  44. package/dist/extensions/forgecli/add-task.d.ts +0 -20
  45. package/dist/extensions/forgecli/add-task.js +0 -154
  46. package/dist/extensions/forgecli/add-task.js.map +0 -1
  47. package/dist/extensions/forgecli/approve.d.ts +0 -22
  48. package/dist/extensions/forgecli/approve.js +0 -152
  49. package/dist/extensions/forgecli/approve.js.map +0 -1
  50. package/dist/extensions/forgecli/banner.d.ts +0 -10
  51. package/dist/extensions/forgecli/banner.js +0 -36
  52. package/dist/extensions/forgecli/banner.js.map +0 -1
  53. package/dist/extensions/forgecli/calibrate.d.ts +0 -64
  54. package/dist/extensions/forgecli/calibrate.js +0 -481
  55. package/dist/extensions/forgecli/calibrate.js.map +0 -1
  56. package/dist/extensions/forgecli/collate.d.ts +0 -22
  57. package/dist/extensions/forgecli/collate.js +0 -134
  58. package/dist/extensions/forgecli/collate.js.map +0 -1
  59. package/dist/extensions/forgecli/commit.d.ts +0 -22
  60. package/dist/extensions/forgecli/commit.js +0 -152
  61. package/dist/extensions/forgecli/commit.js.map +0 -1
  62. package/dist/extensions/forgecli/config-command.d.ts +0 -8
  63. package/dist/extensions/forgecli/config-command.js +0 -67
  64. package/dist/extensions/forgecli/config-command.js.map +0 -1
  65. package/dist/extensions/forgecli/config-layer.d.ts +0 -53
  66. package/dist/extensions/forgecli/config-layer.js +0 -72
  67. package/dist/extensions/forgecli/config-layer.js.map +0 -1
  68. package/dist/extensions/forgecli/config-writer.d.ts +0 -16
  69. package/dist/extensions/forgecli/config-writer.js +0 -69
  70. package/dist/extensions/forgecli/config-writer.js.map +0 -1
  71. package/dist/extensions/forgecli/enhance.d.ts +0 -27
  72. package/dist/extensions/forgecli/enhance.js +0 -199
  73. package/dist/extensions/forgecli/enhance.js.map +0 -1
  74. package/dist/extensions/forgecli/fix-bug.d.ts +0 -85
  75. package/dist/extensions/forgecli/fix-bug.js +0 -1580
  76. package/dist/extensions/forgecli/fix-bug.js.map +0 -1
  77. package/dist/extensions/forgecli/forge-header.d.ts +0 -12
  78. package/dist/extensions/forgecli/forge-header.js +0 -114
  79. package/dist/extensions/forgecli/forge-header.js.map +0 -1
  80. package/dist/extensions/forgecli/forge-init.d.ts +0 -26
  81. package/dist/extensions/forgecli/forge-init.js +0 -514
  82. package/dist/extensions/forgecli/forge-init.js.map +0 -1
  83. package/dist/extensions/forgecli/forge-root.d.ts +0 -10
  84. package/dist/extensions/forgecli/forge-root.js +0 -62
  85. package/dist/extensions/forgecli/forge-root.js.map +0 -1
  86. package/dist/extensions/forgecli/forge-update-command.d.ts +0 -100
  87. package/dist/extensions/forgecli/forge-update-command.js +0 -435
  88. package/dist/extensions/forgecli/forge-update-command.js.map +0 -1
  89. package/dist/extensions/forgecli/friction-emit.d.ts +0 -99
  90. package/dist/extensions/forgecli/friction-emit.js +0 -245
  91. package/dist/extensions/forgecli/friction-emit.js.map +0 -1
  92. package/dist/extensions/forgecli/implement.d.ts +0 -22
  93. package/dist/extensions/forgecli/implement.js +0 -170
  94. package/dist/extensions/forgecli/implement.js.map +0 -1
  95. package/dist/extensions/forgecli/init-context.d.ts +0 -99
  96. package/dist/extensions/forgecli/init-context.js +0 -178
  97. package/dist/extensions/forgecli/init-context.js.map +0 -1
  98. package/dist/extensions/forgecli/init-progress.d.ts +0 -39
  99. package/dist/extensions/forgecli/init-progress.js +0 -117
  100. package/dist/extensions/forgecli/init-progress.js.map +0 -1
  101. package/dist/extensions/forgecli/input-router.d.ts +0 -33
  102. package/dist/extensions/forgecli/input-router.js +0 -136
  103. package/dist/extensions/forgecli/input-router.js.map +0 -1
  104. package/dist/extensions/forgecli/lib/halt-advisor.d.ts +0 -59
  105. package/dist/extensions/forgecli/lib/halt-advisor.js +0 -113
  106. package/dist/extensions/forgecli/lib/halt-advisor.js.map +0 -1
  107. package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +0 -46
  108. package/dist/extensions/forgecli/lib/orchestrator-preflight.js +0 -64
  109. package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +0 -1
  110. package/dist/extensions/forgecli/materialize.d.ts +0 -16
  111. package/dist/extensions/forgecli/materialize.js +0 -195
  112. package/dist/extensions/forgecli/materialize.js.map +0 -1
  113. package/dist/extensions/forgecli/migrate.d.ts +0 -22
  114. package/dist/extensions/forgecli/migrate.js +0 -260
  115. package/dist/extensions/forgecli/migrate.js.map +0 -1
  116. package/dist/extensions/forgecli/migration-engine.d.ts +0 -117
  117. package/dist/extensions/forgecli/migration-engine.js +0 -563
  118. package/dist/extensions/forgecli/migration-engine.js.map +0 -1
  119. package/dist/extensions/forgecli/model-registry.d.ts +0 -61
  120. package/dist/extensions/forgecli/model-registry.js +0 -127
  121. package/dist/extensions/forgecli/model-registry.js.map +0 -1
  122. package/dist/extensions/forgecli/model-resolver.d.ts +0 -32
  123. package/dist/extensions/forgecli/model-resolver.js +0 -65
  124. package/dist/extensions/forgecli/model-resolver.js.map +0 -1
  125. package/dist/extensions/forgecli/model-validator.d.ts +0 -29
  126. package/dist/extensions/forgecli/model-validator.js +0 -107
  127. package/dist/extensions/forgecli/model-validator.js.map +0 -1
  128. package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +0 -26
  129. package/dist/extensions/forgecli/orchestrator-status-bar.js +0 -213
  130. package/dist/extensions/forgecli/orchestrator-status-bar.js.map +0 -1
  131. package/dist/extensions/forgecli/plan.d.ts +0 -22
  132. package/dist/extensions/forgecli/plan.js +0 -167
  133. package/dist/extensions/forgecli/plan.js.map +0 -1
  134. package/dist/extensions/forgecli/quiz-agent.d.ts +0 -17
  135. package/dist/extensions/forgecli/quiz-agent.js +0 -98
  136. package/dist/extensions/forgecli/quiz-agent.js.map +0 -1
  137. package/dist/extensions/forgecli/read-command.d.ts +0 -2
  138. package/dist/extensions/forgecli/read-command.js +0 -100
  139. package/dist/extensions/forgecli/read-command.js.map +0 -1
  140. package/dist/extensions/forgecli/regenerate.d.ts +0 -40
  141. package/dist/extensions/forgecli/regenerate.js +0 -438
  142. package/dist/extensions/forgecli/regenerate.js.map +0 -1
  143. package/dist/extensions/forgecli/remove-command.d.ts +0 -17
  144. package/dist/extensions/forgecli/remove-command.js +0 -124
  145. package/dist/extensions/forgecli/remove-command.js.map +0 -1
  146. package/dist/extensions/forgecli/report-bug.d.ts +0 -25
  147. package/dist/extensions/forgecli/report-bug.js +0 -159
  148. package/dist/extensions/forgecli/report-bug.js.map +0 -1
  149. package/dist/extensions/forgecli/retrospective.d.ts +0 -20
  150. package/dist/extensions/forgecli/retrospective.js +0 -126
  151. package/dist/extensions/forgecli/retrospective.js.map +0 -1
  152. package/dist/extensions/forgecli/review-code.d.ts +0 -35
  153. package/dist/extensions/forgecli/review-code.js +0 -196
  154. package/dist/extensions/forgecli/review-code.js.map +0 -1
  155. package/dist/extensions/forgecli/review-plan.d.ts +0 -35
  156. package/dist/extensions/forgecli/review-plan.js +0 -200
  157. package/dist/extensions/forgecli/review-plan.js.map +0 -1
  158. package/dist/extensions/forgecli/run-sprint.d.ts +0 -27
  159. package/dist/extensions/forgecli/run-sprint.js +0 -716
  160. package/dist/extensions/forgecli/run-sprint.js.map +0 -1
  161. package/dist/extensions/forgecli/run-task.d.ts +0 -204
  162. package/dist/extensions/forgecli/run-task.js +0 -1403
  163. package/dist/extensions/forgecli/run-task.js.map +0 -1
  164. package/dist/extensions/forgecli/skill-curation-flag.d.ts +0 -21
  165. package/dist/extensions/forgecli/skill-curation-flag.js +0 -71
  166. package/dist/extensions/forgecli/skill-curation-flag.js.map +0 -1
  167. package/dist/extensions/forgecli/skill-curator-subagent.d.ts +0 -102
  168. package/dist/extensions/forgecli/skill-curator-subagent.js +0 -339
  169. package/dist/extensions/forgecli/skill-curator-subagent.js.map +0 -1
  170. package/dist/extensions/forgecli/skill-retriever.d.ts +0 -84
  171. package/dist/extensions/forgecli/skill-retriever.js +0 -246
  172. package/dist/extensions/forgecli/skill-retriever.js.map +0 -1
  173. package/dist/extensions/forgecli/skill-usage-tracker.d.ts +0 -91
  174. package/dist/extensions/forgecli/skill-usage-tracker.js +0 -224
  175. package/dist/extensions/forgecli/skill-usage-tracker.js.map +0 -1
  176. package/dist/extensions/forgecli/sprint-intake.d.ts +0 -10
  177. package/dist/extensions/forgecli/sprint-intake.js +0 -91
  178. package/dist/extensions/forgecli/sprint-intake.js.map +0 -1
  179. package/dist/extensions/forgecli/sprint-plan.d.ts +0 -14
  180. package/dist/extensions/forgecli/sprint-plan.js +0 -122
  181. package/dist/extensions/forgecli/sprint-plan.js.map +0 -1
  182. package/dist/extensions/forgecli/status-command.d.ts +0 -19
  183. package/dist/extensions/forgecli/status-command.js +0 -140
  184. package/dist/extensions/forgecli/status-command.js.map +0 -1
  185. package/dist/extensions/forgecli/store-error-remediation.d.ts +0 -65
  186. package/dist/extensions/forgecli/store-error-remediation.js +0 -307
  187. package/dist/extensions/forgecli/store-error-remediation.js.map +0 -1
  188. package/dist/extensions/forgecli/store-query.d.ts +0 -22
  189. package/dist/extensions/forgecli/store-query.js +0 -107
  190. package/dist/extensions/forgecli/store-query.js.map +0 -1
  191. package/dist/extensions/forgecli/store-repair.d.ts +0 -17
  192. package/dist/extensions/forgecli/store-repair.js +0 -123
  193. package/dist/extensions/forgecli/store-repair.js.map +0 -1
  194. package/dist/extensions/forgecli/store-resolver.d.ts +0 -56
  195. package/dist/extensions/forgecli/store-resolver.js +0 -263
  196. package/dist/extensions/forgecli/store-resolver.js.map +0 -1
  197. package/dist/extensions/forgecli/store-validator.d.ts +0 -16
  198. package/dist/extensions/forgecli/store-validator.js +0 -32
  199. package/dist/extensions/forgecli/store-validator.js.map +0 -1
  200. package/dist/extensions/forgecli/test-orchestrate.d.ts +0 -2
  201. package/dist/extensions/forgecli/test-orchestrate.js +0 -182
  202. package/dist/extensions/forgecli/test-orchestrate.js.map +0 -1
  203. package/dist/extensions/forgecli/thread-switcher.d.ts +0 -5
  204. package/dist/extensions/forgecli/thread-switcher.js +0 -189
  205. package/dist/extensions/forgecli/thread-switcher.js.map +0 -1
  206. package/dist/extensions/forgecli/transition-guard.d.ts +0 -20
  207. package/dist/extensions/forgecli/transition-guard.js +0 -89
  208. package/dist/extensions/forgecli/transition-guard.js.map +0 -1
  209. package/dist/extensions/forgecli/update-check.d.ts +0 -37
  210. package/dist/extensions/forgecli/update-check.js +0 -185
  211. package/dist/extensions/forgecli/update-check.js.map +0 -1
  212. package/dist/extensions/forgecli/update-tools.d.ts +0 -23
  213. package/dist/extensions/forgecli/update-tools.js +0 -135
  214. package/dist/extensions/forgecli/update-tools.js.map +0 -1
  215. package/dist/extensions/forgecli/validate.d.ts +0 -22
  216. package/dist/extensions/forgecli/validate.js +0 -152
  217. package/dist/extensions/forgecli/validate.js.map +0 -1
  218. package/dist/extensions/forgecli/viewport-events.d.ts +0 -78
  219. package/dist/extensions/forgecli/viewport-events.js +0 -243
  220. package/dist/extensions/forgecli/viewport-events.js.map +0 -1
  221. package/dist/extensions/forgecli/viewport-renderer.d.ts +0 -83
  222. package/dist/extensions/forgecli/viewport-renderer.js +0 -233
  223. package/dist/extensions/forgecli/viewport-renderer.js.map +0 -1
  224. package/dist/extensions/forgecli/viewport-theme.d.ts +0 -11
  225. package/dist/extensions/forgecli/viewport-theme.js +0 -128
  226. package/dist/extensions/forgecli/viewport-theme.js.map +0 -1
  227. package/dist/extensions/forgecli/whats-new-widget.d.ts +0 -26
  228. package/dist/extensions/forgecli/whats-new-widget.js +0 -376
  229. package/dist/extensions/forgecli/whats-new-widget.js.map +0 -1
  230. package/dist/extensions/forgecli/whats-new.d.ts +0 -120
  231. package/dist/extensions/forgecli/whats-new.js +0 -470
  232. package/dist/extensions/forgecli/whats-new.js.map +0 -1
@@ -1,243 +0,0 @@
1
- // viewport-events.ts
2
- //
3
- // Reusable subagent event observer. Wires `runForgeSubagent.onEvent` to:
4
- // 1. Append per-event tail lines (with tree connectors, glyphs, risky tag,
5
- // thinking one-liners, batch markers) into SessionRegistry.
6
- // 2. Maintain cumulative phase token usage and push it to the registry on
7
- // every turn_end — drives the sticky footer in the tail view AND the
8
- // aggregate Σ meter in the chip strip.
9
- // 3. Surface counts (turn / tools / errors) so the orchestrator can render
10
- // its end-of-phase summary.
11
- //
12
- // Used by run-task, fix-bug, and run-sprint (ceremony) so every subagent
13
- // "bubbles" usage up the same way. Top-level viewports read aggregate usage
14
- // via SessionRegistry.getAggregateUsage().
15
- import { getOrchestratorTree } from "./orchestrator-tree.js";
16
- import { extractThinkingOneLiner, extractTurnPreview, argHint as fmtArgHint, RISKY_TAG, readUsage, resultShape, toolGlyph, } from "./viewport-renderer.js";
17
- function extractCompression(result) {
18
- if (!result || typeof result !== "object")
19
- return undefined;
20
- const r = result;
21
- const c = r.details?.compression;
22
- if (!c || typeof c.before !== "number" || typeof c.after !== "number")
23
- return undefined;
24
- return { tool: c.tool ?? "", before: c.before, after: c.after, saved: c.saved ?? 0 };
25
- }
26
- export function attachViewportObserver(opts) {
27
- const { registry, sessionId, phaseRole, displayRole, beginHeader, writeDebug, setStatusVerbose, notify, verboseKeys, afterEach, } = opts;
28
- const role = displayRole ?? phaseRole;
29
- const tree = getOrchestratorTree();
30
- // Helper to resolve the correct active node ID in the OrchestratorTree.
31
- const resolveNodeId = () => {
32
- const exactId = `${sessionId}:${phaseRole}`;
33
- const exactNode = tree.getNode(exactId);
34
- if (exactNode && exactNode.status === "running")
35
- return exactId;
36
- const parentNode = tree.getNode(sessionId);
37
- if (parentNode) {
38
- const prefix = `${sessionId}:${phaseRole}:`;
39
- for (const cid of parentNode.children) {
40
- if (cid.startsWith(prefix)) {
41
- const child = tree.getNode(cid);
42
- if (child && child.status === "running") {
43
- return cid;
44
- }
45
- }
46
- }
47
- }
48
- return exactId;
49
- };
50
- const state = {
51
- turn: 0,
52
- toolCount: 0,
53
- errCount: 0,
54
- lastTool: "",
55
- cumUsage: { input: 0, output: 0, cacheRead: 0 },
56
- cumCompression: { calls: 0, tokensSaved: 0 },
57
- };
58
- // Per-turn tree-connector state.
59
- let toolsThisTurn = 0;
60
- let firstLineOfTurn = true;
61
- let currentTurnPrefixWidth = 0;
62
- const argsByCallId = new Map();
63
- const formatTime = (ms) => {
64
- const d = new Date(ms);
65
- const pad = (n) => String(n).padStart(2, "0");
66
- return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
67
- };
68
- const tailPrefix = () => `[${role} ${formatTime(Date.now())} t${state.turn}]`;
69
- const appendTail = (line, opts) => {
70
- registry.appendTail(sessionId, phaseRole, line, opts);
71
- tree.appendTail(resolveNodeId(), line, opts);
72
- };
73
- const extractErrorSummary = (result) => {
74
- const raw = typeof result === "string"
75
- ? result
76
- : typeof result === "object" && result !== null
77
- ? JSON.stringify(result)
78
- : String(result);
79
- const firstLine = raw.split(/\r?\n/).find((l) => l.trim().length > 0) ?? raw;
80
- return firstLine.length > 160 ? `${firstLine.slice(0, 160)}…` : firstLine;
81
- };
82
- const emitTurnLine = (body, lineOpts) => {
83
- const isFirst = firstLineOfTurn;
84
- const isClosing = lineOpts?.closing === true;
85
- let branch;
86
- if (isFirst && isClosing)
87
- branch = "─";
88
- else if (isFirst)
89
- branch = "╭";
90
- else if (isClosing)
91
- branch = "╰";
92
- else
93
- branch = "│";
94
- let prefix;
95
- if (isFirst) {
96
- prefix = tailPrefix();
97
- currentTurnPrefixWidth = prefix.length;
98
- }
99
- else {
100
- prefix = " ".repeat(currentTurnPrefixWidth);
101
- }
102
- firstLineOfTurn = false;
103
- appendTail(`${prefix} ${branch} ${body}`, lineOpts?.warning ? { warning: true } : undefined);
104
- };
105
- if (beginHeader)
106
- appendTail(`${tailPrefix()} ${beginHeader}`);
107
- const onEvent = (event) => {
108
- switch (event.type) {
109
- case "turn_start": {
110
- state.turn++;
111
- state.lastTool = "";
112
- toolsThisTurn = 0;
113
- firstLineOfTurn = true;
114
- registry.bumpTurn(sessionId);
115
- tree.bumpNodeTurn(resolveNodeId());
116
- break;
117
- }
118
- case "turn_end": {
119
- const e = event;
120
- const delta = readUsage(e.message);
121
- state.cumUsage.input += delta.input;
122
- state.cumUsage.output += delta.output;
123
- state.cumUsage.cacheRead += delta.cacheRead;
124
- registry.setPhaseUsage(sessionId, phaseRole, state.cumUsage);
125
- const nodeId = resolveNodeId();
126
- tree.setNodeUsage(nodeId, state.cumUsage);
127
- // Capture which (provider, model) actually served this turn so
128
- // the per-phase tail-view footer can display it. Cheap; the
129
- // registry no-ops when the value hasn't changed.
130
- const msg = e.message;
131
- if (msg && (msg.provider || msg.model)) {
132
- registry.setPhaseModel(sessionId, phaseRole, {
133
- provider: msg.provider,
134
- model: msg.model,
135
- });
136
- tree.setNodeModel(nodeId, msg.model ?? "", msg.provider ?? "");
137
- }
138
- const closingBodies = [];
139
- const thinking = extractThinkingOneLiner(e.message);
140
- if (thinking)
141
- closingBodies.push(`✱ ${thinking}`);
142
- const preview = extractTurnPreview(e.message);
143
- if (preview) {
144
- registry.setTurnPreview(sessionId, preview);
145
- tree.setTurnPreview(nodeId, preview);
146
- if (setStatusVerbose && verboseKeys?.messageKey) {
147
- setStatusVerbose(verboseKeys.messageKey, ` "${preview}"`);
148
- }
149
- closingBodies.push(`» "${preview}"`);
150
- }
151
- if (toolsThisTurn > 1) {
152
- closingBodies.push(`⇉ batched ${toolsThisTurn} tool calls in turn ${state.turn}`);
153
- }
154
- for (let i = 0; i < closingBodies.length; i++) {
155
- const isLast = i === closingBodies.length - 1;
156
- emitTurnLine(closingBodies[i], { closing: isLast });
157
- }
158
- // Bubble one consolidated event up to the registry so the
159
- // top-level viewport can surface activity from any subagent
160
- // with subagent-identified attribution.
161
- registry.recordTurnEvent({
162
- sessionId,
163
- phaseRole,
164
- displayRole: role,
165
- turn: state.turn,
166
- preview: preview ?? "",
167
- thinking: thinking ?? "",
168
- deltaUsage: { ...delta },
169
- cumUsage: { ...state.cumUsage },
170
- timestamp: Date.now(),
171
- });
172
- break;
173
- }
174
- case "tool_execution_start": {
175
- const e = event;
176
- state.toolCount++;
177
- toolsThisTurn++;
178
- argsByCallId.set(e.toolCallId, e.args);
179
- const hint = fmtArgHint(e.toolName, e.args);
180
- const { glyph, risky } = toolGlyph(e.toolName, e.args);
181
- state.lastTool = `${e.toolName}${hint ? ` ${hint}` : ""}`;
182
- writeDebug?.({
183
- kind: "tool_start",
184
- toolName: e.toolName,
185
- toolCallId: e.toolCallId,
186
- args: e.args,
187
- });
188
- registry.recordToolStart(sessionId, e.toolCallId, e.toolName, e.args);
189
- tree.incrementNodeToolCount(resolveNodeId());
190
- const riskPrefix = risky ? `${RISKY_TAG} ` : "";
191
- emitTurnLine(`${riskPrefix}${glyph} ${e.toolName}${hint ? ` ${hint}` : ""}`, risky ? { warning: true } : undefined);
192
- break;
193
- }
194
- case "tool_execution_end": {
195
- const e = event;
196
- argsByCallId.delete(e.toolCallId);
197
- writeDebug?.({
198
- kind: "tool_end",
199
- toolName: e.toolName,
200
- toolCallId: e.toolCallId,
201
- isError: e.isError,
202
- result: e.result,
203
- });
204
- registry.recordToolEnd(sessionId, e.toolCallId, e.toolName, e.isError, e.result);
205
- const nodeId = resolveNodeId();
206
- if (e.isError) {
207
- state.errCount++;
208
- tree.incrementNodeErrCount(nodeId);
209
- emitTurnLine(`⚠ ${e.toolName} failed: ${extractErrorSummary(e.result)}`, { warning: true });
210
- }
211
- else {
212
- const shape = resultShape(e.toolName, e.result);
213
- const comp = extractCompression(e.result);
214
- const compHint = comp ? ` ⇌${comp.saved}%` : "";
215
- emitTurnLine(`← ${e.toolName} ok${shape ? ` ${shape}` : ""}${compHint}`);
216
- if (comp) {
217
- state.cumCompression.calls++;
218
- state.cumCompression.tokensSaved += comp.before - comp.after;
219
- registry.setPhaseCompression(sessionId, phaseRole, state.cumCompression);
220
- tree.setNodeCompression(nodeId, state.cumCompression);
221
- }
222
- }
223
- break;
224
- }
225
- case "compaction_start": {
226
- const e = event;
227
- notify?.(`◌ ${role}: context compacting (${e.reason})…`, "info");
228
- appendTail(`${tailPrefix()} ◌ compacting (${e.reason})`);
229
- break;
230
- }
231
- case "auto_retry_start": {
232
- const e = event;
233
- const err = e.errorMessage ?? "";
234
- notify?.(`↻ ${role}: model retry ${e.attempt}/${e.maxAttempts}${err ? `\n${err}` : ""}`, "warning");
235
- appendTail(`${tailPrefix()} ↻ retry ${e.attempt}/${e.maxAttempts}${err ? `: ${extractErrorSummary(err)}` : ""}`, { warning: true });
236
- break;
237
- }
238
- }
239
- afterEach?.();
240
- };
241
- return { onEvent, state };
242
- }
243
- //# sourceMappingURL=viewport-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"viewport-events.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-events.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import type { AgentMessage } from "@earendil-works/pi-agent-core";
2
- export declare const RISKY_TAG = "\uD83D\uDD12";
3
- export interface GlyphInfo {
4
- glyph: string;
5
- risky: boolean;
6
- }
7
- export declare function toolGlyph(toolName: string, args: unknown): GlyphInfo;
8
- export declare function argHint(toolName: string, args: unknown, maxLen?: number): string;
9
- /**
10
- * Truncate at a whitespace boundary when possible so we don't slice mid-token
11
- * (e.g. `FORGE_ROOT=$(node -e` cut at the open paren). Appends `…(+Nc)` so the
12
- * user knows there's more.
13
- */
14
- export declare function truncateAtBoundary(s: string, max: number): string;
15
- /**
16
- * Extract a small "shape" hint from a tool result so users see `read ok 247L`
17
- * instead of `read ok`. Defensive: result shapes vary across tools and providers.
18
- */
19
- export declare function resultShape(_toolName: string, result: unknown): string;
20
- /**
21
- * Pull the first sentence (or first 100 chars) from any `thinking` block on an
22
- * assistant message. Returns `undefined` if no thinking content present.
23
- */
24
- export declare function extractThinkingOneLiner(message: AgentMessage | undefined): string | undefined;
25
- export interface UsageDelta {
26
- input: number;
27
- output: number;
28
- cacheRead: number;
29
- }
30
- /** Extract usage from an assistant message; returns zeros if missing. */
31
- export declare function readUsage(message: AgentMessage | undefined): UsageDelta;
32
- /**
33
- * Extract the last assistant-authored text from a turn_end message and
34
- * collapse to a single-line preview (max 120 chars). Returns "" if the
35
- * message has no text content (e.g. all-tool-call turn).
36
- */
37
- export declare function extractTurnPreview(message: unknown): string;
38
- export declare function fmtTokenMeter(u: UsageDelta): string;
39
- /** Format a one-shot phase-completion line for the tail buffer. */
40
- export declare function fmtPhaseSummary(opts: {
41
- role: string;
42
- turns: number;
43
- tools: number;
44
- errors: number;
45
- wallSeconds: number;
46
- usage: UsageDelta;
47
- model?: string;
48
- provider?: string;
49
- compression?: {
50
- calls: number;
51
- tokensSaved: number;
52
- };
53
- }): string;
54
- /**
55
- * Build the sticky footer line shown at the bottom of the tail view.
56
- * Includes cacheRead only when nonzero — most non-Anthropic providers (ollama,
57
- * glm, etc.) return 0 for cache fields and we don't want the noise.
58
- */
59
- export declare function fmtTokenFooter(usage: UsageDelta | undefined, compression?: {
60
- calls: number;
61
- tokensSaved: number;
62
- }): string;
63
- /**
64
- * Compact `(provider) model` label used to annotate token footers so users
65
- * can see which model a phase ran with. Returns "" when neither field is
66
- * populated.
67
- */
68
- export declare function fmtModelLabel(info: {
69
- provider?: string;
70
- model?: string;
71
- } | undefined): string;
72
- /**
73
- * Combine a model label with a token footer, separated by ` · `. Either
74
- * half may be empty — the separator is only inserted when both halves are
75
- * present. Returns "" when both are empty.
76
- */
77
- export declare function fmtModelAndTokenFooter(info: {
78
- provider?: string;
79
- model?: string;
80
- } | undefined, usage: UsageDelta | undefined, compression?: {
81
- calls: number;
82
- tokensSaved: number;
83
- }): string;
@@ -1,233 +0,0 @@
1
- // viewport-renderer.ts
2
- //
3
- // Pure-string helpers for the subagent viewport tail buffer.
4
- // Centralises glyph selection, arg/result shape extraction, thinking one-liners,
5
- // and running-usage formatting so run-task / run-sprint / fix-bug can share
6
- // rendering without diverging.
7
- import path from "node:path";
8
- /** Per-tool glyph. Falls back to a generic arrow when unknown. */
9
- const TOOL_GLYPHS = {
10
- bash: "$",
11
- read: "⌕",
12
- write: "✎",
13
- edit: "✎",
14
- glob: "⌕",
15
- grep: "⌕",
16
- notebookedit: "✎",
17
- };
18
- /** Bash patterns we want users to see flagged even when auto-approved. */
19
- const RISKY_BASH = /\b(rm\s+-rf|git\s+push\s+--force|chmod\s+777|sudo\s|curl\s+[^|]*\|\s*sh\b|npm\s+publish\b)/;
20
- export const RISKY_TAG = "🔒";
21
- export function toolGlyph(toolName, args) {
22
- const a = (args && typeof args === "object" ? args : {});
23
- const lower = toolName.toLowerCase();
24
- let glyph = TOOL_GLYPHS[lower];
25
- if (!glyph) {
26
- if (/store[-_]?cli|forge[-_]?store/i.test(toolName))
27
- glyph = "⚙";
28
- else
29
- glyph = "→";
30
- }
31
- let risky = false;
32
- if (lower === "bash" && typeof a.command === "string" && RISKY_BASH.test(a.command)) {
33
- risky = true;
34
- }
35
- return { glyph, risky };
36
- }
37
- export function argHint(toolName, args, maxLen = 60) {
38
- if (!args || typeof args !== "object")
39
- return "";
40
- const a = args;
41
- const fp = (a.file_path ?? a.path);
42
- if (typeof fp === "string")
43
- return path.basename(fp);
44
- if (typeof a.command === "string")
45
- return truncateAtBoundary(a.command, maxLen);
46
- if (typeof a.pattern === "string")
47
- return truncateAtBoundary(a.pattern, maxLen);
48
- if (typeof a.query === "string")
49
- return truncateAtBoundary(a.query, maxLen);
50
- return "";
51
- }
52
- /**
53
- * Truncate at a whitespace boundary when possible so we don't slice mid-token
54
- * (e.g. `FORGE_ROOT=$(node -e` cut at the open paren). Appends `…(+Nc)` so the
55
- * user knows there's more.
56
- */
57
- export function truncateAtBoundary(s, max) {
58
- if (s.length <= max)
59
- return s;
60
- const head = s.slice(0, max);
61
- const lastSpace = head.lastIndexOf(" ");
62
- const cut = lastSpace > Math.floor(max * 0.6) ? lastSpace : max;
63
- const extra = s.length - cut;
64
- // Strip trailing whitespace before the ellipsis so the body is visually
65
- // clean and downstream string checks (`endsWith` / regex) behave predictably.
66
- return `${s.slice(0, cut).replace(/\s+$/, "")}…(+${extra}c)`;
67
- }
68
- /**
69
- * Extract a small "shape" hint from a tool result so users see `read ok 247L`
70
- * instead of `read ok`. Defensive: result shapes vary across tools and providers.
71
- */
72
- export function resultShape(_toolName, result) {
73
- try {
74
- if (typeof result === "string") {
75
- if (result.length === 0)
76
- return "empty";
77
- const lines = result.split(/\r?\n/).length;
78
- return lines > 1 ? `${lines}L` : `${result.length}c`;
79
- }
80
- if (result && typeof result === "object") {
81
- const r = result;
82
- if (typeof r.stdout === "string") {
83
- const out = r.stdout;
84
- if (out.length === 0)
85
- return "empty";
86
- const lines = out.split(/\r?\n/).length;
87
- return `${lines}L`;
88
- }
89
- if (typeof r.content === "string") {
90
- const lines = r.content.split(/\r?\n/).length;
91
- return `${lines}L`;
92
- }
93
- if (Array.isArray(r.content)) {
94
- let total = 0;
95
- for (const item of r.content) {
96
- const t = item?.text;
97
- if (typeof t === "string")
98
- total += t.split(/\r?\n/).length;
99
- }
100
- if (total > 0)
101
- return `${total}L`;
102
- }
103
- }
104
- }
105
- catch {
106
- // fall through to no hint
107
- }
108
- return "";
109
- }
110
- /**
111
- * Pull the first sentence (or first 100 chars) from any `thinking` block on an
112
- * assistant message. Returns `undefined` if no thinking content present.
113
- */
114
- export function extractThinkingOneLiner(message) {
115
- if (!message || message.role !== "assistant")
116
- return undefined;
117
- const content = message.content;
118
- if (!Array.isArray(content))
119
- return undefined;
120
- for (const block of content) {
121
- const b = block;
122
- if (b?.type !== "thinking" || typeof b.thinking !== "string")
123
- continue;
124
- const text = b.thinking.trim();
125
- if (!text)
126
- continue;
127
- const m = text.match(/^[^\n.!?]+/);
128
- const first = (m ? m[0] : text).trim();
129
- return first.length > 100 ? `${first.slice(0, 100)}…` : first;
130
- }
131
- return undefined;
132
- }
133
- /** Extract usage from an assistant message; returns zeros if missing. */
134
- export function readUsage(message) {
135
- const u = message?.usage;
136
- return {
137
- input: u?.input ?? 0,
138
- output: u?.output ?? 0,
139
- cacheRead: u?.cacheRead ?? 0,
140
- };
141
- }
142
- /**
143
- * Extract the last assistant-authored text from a turn_end message and
144
- * collapse to a single-line preview (max 120 chars). Returns "" if the
145
- * message has no text content (e.g. all-tool-call turn).
146
- */
147
- export function extractTurnPreview(message) {
148
- if (!message || typeof message !== "object")
149
- return "";
150
- const msg = message;
151
- if (msg.role !== "assistant")
152
- return "";
153
- const content = msg.content;
154
- if (!Array.isArray(content))
155
- return "";
156
- for (const c of content) {
157
- if (!c || typeof c !== "object")
158
- continue;
159
- const part = c;
160
- if (part.type === "text" && typeof part.text === "string" && part.text.trim()) {
161
- const flat = part.text.replace(/\s+/g, " ").trim();
162
- return flat.length > 120 ? `${flat.slice(0, 117)}…` : flat;
163
- }
164
- }
165
- return "";
166
- }
167
- export function fmtTokenMeter(u) {
168
- return `↑${humanTokens(u.input)}↓${humanTokens(u.output)}`;
169
- }
170
- function humanTokens(n) {
171
- if (n < 1000)
172
- return String(n);
173
- if (n < 10_000)
174
- return `${(n / 1000).toFixed(1)}k`;
175
- if (n < 1_000_000)
176
- return `${Math.round(n / 1000)}k`;
177
- return `${(n / 1_000_000).toFixed(2)}M`;
178
- }
179
- /** Format a one-shot phase-completion line for the tail buffer. */
180
- export function fmtPhaseSummary(opts) {
181
- const { role, turns, tools, errors, wallSeconds, usage, model, provider, compression } = opts;
182
- const errPart = errors > 0 ? ` err=${errors}` : "";
183
- const modelPart = model ? ` model=${model}${provider ? `/${provider}` : ""}` : "";
184
- const compPart = compression && compression.tokensSaved > 0 ? ` ⇌${humanTokens(compression.tokensSaved)}` : "";
185
- return `▣ ${role}: turns=${turns} tools=${tools}${errPart} ${fmtTokenMeter(usage)}${compPart} wall=${fmtWall(wallSeconds)}${modelPart}`;
186
- }
187
- /**
188
- * Build the sticky footer line shown at the bottom of the tail view.
189
- * Includes cacheRead only when nonzero — most non-Anthropic providers (ollama,
190
- * glm, etc.) return 0 for cache fields and we don't want the noise.
191
- */
192
- export function fmtTokenFooter(usage, compression) {
193
- if (!usage)
194
- return "";
195
- const cache = usage.cacheRead > 0 ? ` ⇪${humanTokens(usage.cacheRead)}` : "";
196
- const comp = compression && compression.tokensSaved > 0 ? ` ⇌${humanTokens(compression.tokensSaved)}` : "";
197
- return `↑${humanTokens(usage.input)} ↓${humanTokens(usage.output)}${cache}${comp}`;
198
- }
199
- /**
200
- * Compact `(provider) model` label used to annotate token footers so users
201
- * can see which model a phase ran with. Returns "" when neither field is
202
- * populated.
203
- */
204
- export function fmtModelLabel(info) {
205
- if (!info)
206
- return "";
207
- const { provider, model } = info;
208
- if (!provider && !model)
209
- return "";
210
- if (provider && model)
211
- return `(${provider}) ${model}`;
212
- return provider ?? model ?? "";
213
- }
214
- /**
215
- * Combine a model label with a token footer, separated by ` · `. Either
216
- * half may be empty — the separator is only inserted when both halves are
217
- * present. Returns "" when both are empty.
218
- */
219
- export function fmtModelAndTokenFooter(info, usage, compression) {
220
- const left = fmtModelLabel(info);
221
- const right = fmtTokenFooter(usage, compression);
222
- if (left && right)
223
- return `${left} · ${right}`;
224
- return left || right;
225
- }
226
- function fmtWall(seconds) {
227
- if (seconds < 60)
228
- return `${seconds}s`;
229
- const m = Math.floor(seconds / 60);
230
- const s = seconds % 60;
231
- return `${m}m${String(s).padStart(2, "0")}s`;
232
- }
233
- //# sourceMappingURL=viewport-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"viewport-renderer.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/viewport-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { Theme } from "@earendil-works/pi-coding-agent";
2
- /**
3
- * Parse one tail line into prefix + body, then colour both halves.
4
- * Returns the line unchanged if no theme is available.
5
- */
6
- export declare function paintTailLine(line: string, theme: Theme | undefined): string;
7
- /**
8
- * Build the sticky token-meter footer. Right-aligned to the viewport width,
9
- * preceded by a thin separator line so it visually anchors to the prompt.
10
- */
11
- export declare function paintFooterLine(text: string, width: number, theme: Theme | undefined): string;