swarm-engine 1.43.0 → 1.54.0

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 (165) hide show
  1. package/README.md +145 -42
  2. package/agents/implementer.md +1 -14
  3. package/agents/orchestrator.md +127 -246
  4. package/agents/reviewer.md +3 -18
  5. package/dist/cli/commands/agents.js +13 -1
  6. package/dist/cli/commands/agents.js.map +1 -1
  7. package/dist/cli/commands/dashboard.d.ts +3 -0
  8. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  9. package/dist/cli/commands/dashboard.js +43 -0
  10. package/dist/cli/commands/dashboard.js.map +1 -0
  11. package/dist/cli/commands/orchestrate.d.ts.map +1 -1
  12. package/dist/cli/commands/orchestrate.js +17 -0
  13. package/dist/cli/commands/orchestrate.js.map +1 -1
  14. package/dist/cli/commands/run.d.ts.map +1 -1
  15. package/dist/cli/commands/run.js +20 -1
  16. package/dist/cli/commands/run.js.map +1 -1
  17. package/dist/cli/commands/status.d.ts +1 -0
  18. package/dist/cli/commands/status.d.ts.map +1 -1
  19. package/dist/cli/commands/status.js +5 -2
  20. package/dist/cli/commands/status.js.map +1 -1
  21. package/dist/cli/commands/usage.d.ts +3 -0
  22. package/dist/cli/commands/usage.d.ts.map +1 -0
  23. package/dist/cli/commands/usage.js +85 -0
  24. package/dist/cli/commands/usage.js.map +1 -0
  25. package/dist/cli/index.js +2 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/core/event-bus.d.ts.map +1 -1
  28. package/dist/core/event-bus.js +4 -1
  29. package/dist/core/event-bus.js.map +1 -1
  30. package/dist/core/types.d.ts +44 -1
  31. package/dist/core/types.d.ts.map +1 -1
  32. package/dist/core/types.js +4 -0
  33. package/dist/core/types.js.map +1 -1
  34. package/dist/hooks/cli.js +4 -1
  35. package/dist/hooks/cli.js.map +1 -1
  36. package/dist/hooks/index.d.ts +9 -0
  37. package/dist/hooks/index.d.ts.map +1 -1
  38. package/dist/hooks/index.js +54 -0
  39. package/dist/hooks/index.js.map +1 -1
  40. package/dist/hooks/transcript-parser.d.ts +68 -0
  41. package/dist/hooks/transcript-parser.d.ts.map +1 -0
  42. package/dist/hooks/transcript-parser.js +163 -0
  43. package/dist/hooks/transcript-parser.js.map +1 -0
  44. package/dist/hooks/usage-logger.d.ts +30 -0
  45. package/dist/hooks/usage-logger.d.ts.map +1 -0
  46. package/dist/hooks/usage-logger.js +67 -0
  47. package/dist/hooks/usage-logger.js.map +1 -0
  48. package/dist/index.d.ts +16 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +10 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/memory/index.js +2 -2
  53. package/dist/memory/index.js.map +1 -1
  54. package/dist/runtime/agent-runner.d.ts +9 -0
  55. package/dist/runtime/agent-runner.d.ts.map +1 -1
  56. package/dist/runtime/agent-runner.js +167 -11
  57. package/dist/runtime/agent-runner.js.map +1 -1
  58. package/dist/runtime/backends/claude.d.ts +30 -0
  59. package/dist/runtime/backends/claude.d.ts.map +1 -1
  60. package/dist/runtime/backends/claude.js +112 -2
  61. package/dist/runtime/backends/claude.js.map +1 -1
  62. package/dist/runtime/backends/codex.d.ts.map +1 -1
  63. package/dist/runtime/backends/codex.js +4 -0
  64. package/dist/runtime/backends/codex.js.map +1 -1
  65. package/dist/runtime/backends/gemini.d.ts.map +1 -1
  66. package/dist/runtime/backends/gemini.js +4 -0
  67. package/dist/runtime/backends/gemini.js.map +1 -1
  68. package/dist/runtime/benefits.d.ts +81 -1
  69. package/dist/runtime/benefits.d.ts.map +1 -1
  70. package/dist/runtime/benefits.js +199 -12
  71. package/dist/runtime/benefits.js.map +1 -1
  72. package/dist/runtime/cache-optimizer.d.ts +7 -3
  73. package/dist/runtime/cache-optimizer.d.ts.map +1 -1
  74. package/dist/runtime/cache-optimizer.js +11 -7
  75. package/dist/runtime/cache-optimizer.js.map +1 -1
  76. package/dist/runtime/compaction.d.ts +6 -1
  77. package/dist/runtime/compaction.d.ts.map +1 -1
  78. package/dist/runtime/compaction.js +39 -2
  79. package/dist/runtime/compaction.js.map +1 -1
  80. package/dist/runtime/cost-model.d.ts.map +1 -1
  81. package/dist/runtime/cost-model.js +20 -17
  82. package/dist/runtime/cost-model.js.map +1 -1
  83. package/dist/runtime/engine.d.ts +2 -0
  84. package/dist/runtime/engine.d.ts.map +1 -1
  85. package/dist/runtime/engine.js +162 -3
  86. package/dist/runtime/engine.js.map +1 -1
  87. package/dist/runtime/graph-discovery.js +2 -2
  88. package/dist/runtime/graph-discovery.js.map +1 -1
  89. package/dist/runtime/graph-trajectory.js +3 -3
  90. package/dist/runtime/graph-trajectory.js.map +1 -1
  91. package/dist/runtime/handoff.d.ts +8 -0
  92. package/dist/runtime/handoff.d.ts.map +1 -0
  93. package/dist/runtime/handoff.js +109 -0
  94. package/dist/runtime/handoff.js.map +1 -0
  95. package/dist/runtime/heuristics.d.ts +2 -1
  96. package/dist/runtime/heuristics.d.ts.map +1 -1
  97. package/dist/runtime/heuristics.js +15 -2
  98. package/dist/runtime/heuristics.js.map +1 -1
  99. package/dist/runtime/lsp.d.ts.map +1 -1
  100. package/dist/runtime/lsp.js +4 -0
  101. package/dist/runtime/lsp.js.map +1 -1
  102. package/dist/runtime/mcp.d.ts +1 -0
  103. package/dist/runtime/mcp.d.ts.map +1 -1
  104. package/dist/runtime/mcp.js +38 -0
  105. package/dist/runtime/mcp.js.map +1 -1
  106. package/dist/runtime/model-router.d.ts +2 -1
  107. package/dist/runtime/model-router.d.ts.map +1 -1
  108. package/dist/runtime/model-router.js +8 -1
  109. package/dist/runtime/model-router.js.map +1 -1
  110. package/dist/runtime/output-summarizer.d.ts +45 -0
  111. package/dist/runtime/output-summarizer.d.ts.map +1 -0
  112. package/dist/runtime/output-summarizer.js +171 -0
  113. package/dist/runtime/output-summarizer.js.map +1 -0
  114. package/dist/runtime/plugins.d.ts +5 -1
  115. package/dist/runtime/plugins.d.ts.map +1 -1
  116. package/dist/runtime/plugins.js +14 -2
  117. package/dist/runtime/plugins.js.map +1 -1
  118. package/dist/runtime/prompt-tier.d.ts +33 -0
  119. package/dist/runtime/prompt-tier.d.ts.map +1 -0
  120. package/dist/runtime/prompt-tier.js +105 -0
  121. package/dist/runtime/prompt-tier.js.map +1 -0
  122. package/dist/runtime/savings-manifest.d.ts +66 -0
  123. package/dist/runtime/savings-manifest.d.ts.map +1 -0
  124. package/dist/runtime/savings-manifest.js +103 -0
  125. package/dist/runtime/savings-manifest.js.map +1 -0
  126. package/dist/runtime/sharing.js +2 -1
  127. package/dist/runtime/sharing.js.map +1 -1
  128. package/dist/runtime/stats.d.ts +2 -0
  129. package/dist/runtime/stats.d.ts.map +1 -1
  130. package/dist/runtime/stats.js +23 -3
  131. package/dist/runtime/stats.js.map +1 -1
  132. package/dist/runtime/violation-tracker.d.ts +31 -0
  133. package/dist/runtime/violation-tracker.d.ts.map +1 -0
  134. package/dist/runtime/violation-tracker.js +125 -0
  135. package/dist/runtime/violation-tracker.js.map +1 -0
  136. package/dist/utils/project-config.d.ts +20 -0
  137. package/dist/utils/project-config.d.ts.map +1 -1
  138. package/dist/utils/project-config.js +46 -1
  139. package/dist/utils/project-config.js.map +1 -1
  140. package/dist/utils/redact.d.ts.map +1 -1
  141. package/dist/utils/redact.js +5 -1
  142. package/dist/utils/redact.js.map +1 -1
  143. package/dist/web/bridge.d.ts +47 -0
  144. package/dist/web/bridge.d.ts.map +1 -0
  145. package/dist/web/bridge.js +267 -0
  146. package/dist/web/bridge.js.map +1 -0
  147. package/dist/web/graph-api.d.ts +19 -0
  148. package/dist/web/graph-api.d.ts.map +1 -0
  149. package/dist/web/graph-api.js +157 -0
  150. package/dist/web/graph-api.js.map +1 -0
  151. package/dist/web/index.d.ts +21 -0
  152. package/dist/web/index.d.ts.map +1 -0
  153. package/dist/web/index.js +38 -0
  154. package/dist/web/index.js.map +1 -0
  155. package/dist/web/public/index.html +1304 -0
  156. package/dist/web/public/public/index.html +1307 -0
  157. package/dist/web/server.d.ts +24 -0
  158. package/dist/web/server.d.ts.map +1 -0
  159. package/dist/web/server.js +113 -0
  160. package/dist/web/server.js.map +1 -0
  161. package/dist/web/tray.d.ts +23 -0
  162. package/dist/web/tray.d.ts.map +1 -0
  163. package/dist/web/tray.js +205 -0
  164. package/dist/web/tray.js.map +1 -0
  165. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export function emptyUsageStats() {
9
9
  turns: 0,
10
10
  toolCalls: 0,
11
11
  durationMs: 0,
12
+ cacheReadInputTokens: 0,
13
+ cacheCreationInputTokens: 0,
12
14
  };
13
15
  }
14
16
  /**
@@ -25,6 +27,8 @@ export function mergeUsageStats(a, b) {
25
27
  turns: a.turns + b.turns,
26
28
  toolCalls: a.toolCalls + b.toolCalls,
27
29
  durationMs: a.durationMs + b.durationMs,
30
+ cacheReadInputTokens: (a.cacheReadInputTokens ?? 0) + (b.cacheReadInputTokens ?? 0),
31
+ cacheCreationInputTokens: (a.cacheCreationInputTokens ?? 0) + (b.cacheCreationInputTokens ?? 0),
28
32
  };
29
33
  }
30
34
  export function generateId() {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAgQpC,sEAAsE;AAEtE,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,CAAa,EAAE,CAAa;IAC1D,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;QAC7C,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;QAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;QACpC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAmTpC,sEAAsE;AAEtE,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,oBAAoB,EAAE,CAAC;QACvB,wBAAwB,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,CAAa,EAAE,CAAa;IAC1D,OAAO;QACL,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,YAAY,EAAE,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;QAC7C,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;QAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;QAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;QACpC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;QACvC,oBAAoB,EAAE,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC;QACnF,wBAAwB,EAAE,CAAC,CAAC,CAAC,wBAAwB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,IAAI,CAAC,CAAC;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
package/dist/hooks/cli.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * "command": "node <swarm-engine-dir>/dist/hooks/cli.js start"
8
8
  * "command": "node <swarm-engine-dir>/dist/hooks/cli.js stop"
9
9
  */
10
- import { onAgentStart, onAgentStop, parseHookInput } from './index.js';
10
+ import { onAgentStart, onAgentStop, onOrchestratorStop, parseHookInput } from './index.js';
11
11
  async function main() {
12
12
  const mode = process.argv[2] ?? 'start';
13
13
  // Read JSON from stdin
@@ -22,6 +22,9 @@ async function main() {
22
22
  else if (mode === 'stop') {
23
23
  onAgentStop(input);
24
24
  }
25
+ else if (mode === 'orchestrator-stop') {
26
+ onOrchestratorStop(input);
27
+ }
25
28
  // Return empty JSON (hook success)
26
29
  console.log('{}');
27
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/hooks/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEvE,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAExC,uBAAuB;IACvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;AAC5D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/hooks/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3F,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAExC,uBAAuB;IACvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,WAAW,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACxC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;AAC5D,CAAC,CAAC,CAAC"}
@@ -5,6 +5,9 @@ export interface HookInput {
5
5
  team_name?: string;
6
6
  hook_event_name?: string;
7
7
  tool_name?: string;
8
+ agent_transcript_path?: string;
9
+ transcript_path?: string;
10
+ session_id?: string;
8
11
  [key: string]: unknown;
9
12
  }
10
13
  /**
@@ -14,8 +17,14 @@ export interface HookInput {
14
17
  export declare function onAgentStart(input: HookInput): void;
15
18
  /**
16
19
  * Handle SubagentStop event.
20
+ * Resets terminal title, then parses the agent's transcript for real usage data.
17
21
  */
18
22
  export declare function onAgentStop(input: HookInput): void;
23
+ /**
24
+ * Handle the orchestrator's own session Stop event.
25
+ * Parses the parent session's transcript and prints an orchestration-level summary.
26
+ */
27
+ export declare function onOrchestratorStop(input: HookInput): void;
19
28
  /**
20
29
  * Parse hook input from stdin JSON.
21
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAoCnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAMzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAoCnD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAyBlD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CA8BzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAMzD"}
@@ -1,4 +1,6 @@
1
1
  import { Logger } from '../utils/logger.js';
2
+ import { parseTranscript, enrichWithSavings } from './transcript-parser.js';
3
+ import { logAgentUsage, getRecentUsage, formatUsageSummary } from './usage-logger.js';
2
4
  const logger = new Logger('hooks', 'info');
3
5
  /**
4
6
  * Handle SubagentStart event.
@@ -39,10 +41,62 @@ export function onAgentStart(input) {
39
41
  }
40
42
  /**
41
43
  * Handle SubagentStop event.
44
+ * Resets terminal title, then parses the agent's transcript for real usage data.
42
45
  */
43
46
  export function onAgentStop(input) {
44
47
  // Reset terminal title
45
48
  process.stdout.write(`\x1b]0;\x07`);
49
+ // Parse transcript and log real token usage
50
+ const transcriptPath = input.agent_transcript_path;
51
+ if (transcriptPath) {
52
+ let usage = parseTranscript(transcriptPath, input.agent_type ?? undefined, input.agent_id ?? undefined);
53
+ if (usage) {
54
+ usage.sessionId = input.session_id ?? '';
55
+ // Enrich with savings manifest data
56
+ usage = enrichWithSavings(usage);
57
+ logAgentUsage(usage);
58
+ // Print brief usage line to terminal
59
+ const cliff = usage.cacheCliffs.length > 0 ? ` [${usage.cacheCliffs.length} cache cliffs]` : '';
60
+ const cacheStr = `cache: ${(usage.cacheHitRatio * 100).toFixed(0)}%`;
61
+ let line = ` ${usage.agentType}: ${usage.totalTokens.toLocaleString()} tok, ${usage.turnCount} turns, ${cacheStr}, ~$${usage.estimatedCostUsd.toFixed(4)}${cliff}`;
62
+ if (usage.totalSavingsEstimate && usage.totalSavingsEstimate > 0) {
63
+ line += ` | saved ~${usage.totalSavingsEstimate.toLocaleString()} tok`;
64
+ }
65
+ console.log(line);
66
+ }
67
+ }
68
+ }
69
+ /**
70
+ * Handle the orchestrator's own session Stop event.
71
+ * Parses the parent session's transcript and prints an orchestration-level summary.
72
+ */
73
+ export function onOrchestratorStop(input) {
74
+ const transcriptPath = input.transcript_path;
75
+ if (!transcriptPath)
76
+ return;
77
+ const usage = parseTranscript(transcriptPath, 'orchestrator', 'main');
78
+ if (usage) {
79
+ usage.sessionId = input.session_id ?? '';
80
+ logAgentUsage(usage);
81
+ // Print orchestration-level summary
82
+ const recent = getRecentUsage(20);
83
+ console.log();
84
+ console.log(' \u2500\u2500 Orchestration Token Usage (measured) \u2500\u2500');
85
+ console.log(` ${formatUsageSummary(recent).split('\n').join('\n ')}`);
86
+ // Aggregate savings from all agents in this orchestration
87
+ const totalActual = recent.reduce((s, e) => s + (e.totalTokens || 0), 0);
88
+ const totalSavings = recent.reduce((s, e) => s + (e.totalSavingsEstimate || 0), 0);
89
+ const totalNaive = totalActual + totalSavings;
90
+ if (totalSavings > 0) {
91
+ const pct = Math.round((totalSavings / totalNaive) * 100);
92
+ console.log();
93
+ console.log(' \u2500\u2500 Token Savings (measured vs theoretical-max) \u2500\u2500');
94
+ console.log(` Actual: ${totalActual.toLocaleString()} tokens`);
95
+ console.log(` Without optimizations: ~${totalNaive.toLocaleString()} tokens`);
96
+ console.log(` Saved: ~${totalSavings.toLocaleString()} tokens (${pct}%)`);
97
+ }
98
+ console.log();
99
+ }
46
100
  }
47
101
  /**
48
102
  * Parse hook input from stdin JSON.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAY3C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,kFAAkF;IAClF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC;IAE7D,wDAAwD;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC;IAErD,8DAA8D;IAC9D,MAAM,MAAM,GAA2B;QACrC,UAAU,EAAE,UAAU,EAAE,OAAO;QAC/B,WAAW,EAAE,UAAU,EAAE,QAAQ;QACjC,QAAQ,EAAE,UAAU,EAAE,SAAS;QAC/B,MAAM,EAAE,UAAU,EAAE,UAAU;QAC9B,QAAQ,EAAE,UAAU,EAAE,MAAM;QAC5B,OAAO,EAAE,UAAU,EAAE,OAAO;QAC5B,iBAAiB,EAAE,UAAU,EAAE,MAAM;QACrC,UAAU,EAAE,UAAU,EAAE,QAAQ;QAChC,SAAS,EAAE,UAAU,EAAE,OAAO;QAC9B,QAAQ,EAAE,UAAU,EAAE,OAAO;QAC7B,QAAQ,EAAE,UAAU,EAAE,QAAQ;QAC9B,SAAS,EAAE,UAAU,EAAE,UAAU;QACjC,UAAU,EAAE,UAAU,EAAE,UAAU;QAClC,UAAU,EAAE,UAAU,EAAE,QAAQ;QAChC,YAAY,EAAE,UAAU,EAAE,SAAS;KACpC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC;IAEvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,uBAAuB;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export interface TurnUsage {
2
+ turnIndex: number;
3
+ timestamp: string;
4
+ inputTokens: number;
5
+ outputTokens: number;
6
+ cacheReadInputTokens: number;
7
+ cacheCreationInputTokens: number;
8
+ }
9
+ export interface CacheCliff {
10
+ afterTurn: number;
11
+ gapMs: number;
12
+ /** Input tokens on the turn after the gap (paid full price, cache likely expired) */
13
+ tokensAtRisk: number;
14
+ }
15
+ export interface SavingsBreakdown {
16
+ toolSearchSaved: number;
17
+ promptDietSaved: number;
18
+ contextFilteringSaved: number;
19
+ compactionSaved: number;
20
+ }
21
+ export interface TranscriptUsage {
22
+ sessionId: string;
23
+ agentType: string;
24
+ agentId: string;
25
+ turns: TurnUsage[];
26
+ totalInputTokens: number;
27
+ totalOutputTokens: number;
28
+ totalCacheReadTokens: number;
29
+ totalCacheCreationTokens: number;
30
+ totalTokens: number;
31
+ turnCount: number;
32
+ /** Estimated cost using Opus 4.6 pricing ($5/$25 input/output, $0.30 cache read) */
33
+ estimatedCostUsd: number;
34
+ /** Idle gaps > 5 minutes between consecutive turns (cache likely expired) */
35
+ cacheCliffs: CacheCliff[];
36
+ /** Duration from first to last turn in ms */
37
+ durationMs: number;
38
+ /** Cache hit ratio: cacheRead / (cacheRead + input) */
39
+ cacheHitRatio: number;
40
+ /** Theoretical tokens WITHOUT swarm optimizations (from savings manifest) */
41
+ naiveTokensEstimate?: number;
42
+ /** Tokens saved per turn by swarm optimizations */
43
+ savedPerTurn?: number;
44
+ /** Total estimated savings (savedPerTurn x turns) */
45
+ totalSavingsEstimate?: number;
46
+ /** Savings breakdown by optimization type */
47
+ savingsBreakdown?: SavingsBreakdown;
48
+ }
49
+ /**
50
+ * Parse a Claude Code JSONL transcript file and extract structured usage data.
51
+ *
52
+ * Claude Code JSONL format (from real transcripts):
53
+ * - Each line is a JSON object with `type` ("user" | "assistant" | "progress")
54
+ * - Assistant messages have `message.usage` with snake_case token fields:
55
+ * `input_tokens`, `output_tokens`, `cache_read_input_tokens`, `cache_creation_input_tokens`
56
+ * - Timestamps live at the top-level `timestamp` field as ISO strings
57
+ */
58
+ export declare function parseTranscript(transcriptPath: string, agentType?: string, agentId?: string): TranscriptUsage | null;
59
+ /**
60
+ * Parse transcript content directly (for testing without filesystem).
61
+ */
62
+ export declare function parseTranscriptContent(content: string, agentType?: string, agentId?: string): TranscriptUsage | null;
63
+ /**
64
+ * Enrich a TranscriptUsage with savings data from a savings manifest.
65
+ * Looks up the matching agent entry and multiplies per-turn savings by actual turns.
66
+ */
67
+ export declare function enrichWithSavings(usage: TranscriptUsage, cwd?: string): TranscriptUsage;
68
+ //# sourceMappingURL=transcript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-parser.d.ts","sourceRoot":"","sources":["../../src/hooks/transcript-parser.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,gBAAgB,EAAE,MAAM,CAAC;IACzB,6EAA6E;IAC7E,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAQD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAOpH;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA0FpH;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,eAAe,CA0BvF"}
@@ -0,0 +1,163 @@
1
+ import { readFileSync, readdirSync } from 'fs';
2
+ import { join } from 'path';
3
+ // Opus 4.6 pricing per token
4
+ const INPUT_RATE = 5.0 / 1_000_000;
5
+ const OUTPUT_RATE = 25.0 / 1_000_000;
6
+ const CACHE_READ_RATE = 0.3 / 1_000_000;
7
+ const CACHE_TTL_MS = 5 * 60 * 1000;
8
+ /**
9
+ * Parse a Claude Code JSONL transcript file and extract structured usage data.
10
+ *
11
+ * Claude Code JSONL format (from real transcripts):
12
+ * - Each line is a JSON object with `type` ("user" | "assistant" | "progress")
13
+ * - Assistant messages have `message.usage` with snake_case token fields:
14
+ * `input_tokens`, `output_tokens`, `cache_read_input_tokens`, `cache_creation_input_tokens`
15
+ * - Timestamps live at the top-level `timestamp` field as ISO strings
16
+ */
17
+ export function parseTranscript(transcriptPath, agentType, agentId) {
18
+ try {
19
+ const content = readFileSync(transcriptPath, 'utf-8');
20
+ return parseTranscriptContent(content, agentType, agentId);
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ /**
27
+ * Parse transcript content directly (for testing without filesystem).
28
+ */
29
+ export function parseTranscriptContent(content, agentType, agentId) {
30
+ try {
31
+ const lines = content.split('\n').filter((l) => l.trim());
32
+ const turns = [];
33
+ let turnIndex = 0;
34
+ for (const line of lines) {
35
+ try {
36
+ const msg = JSON.parse(line);
37
+ // Only assistant messages carry usage data in Claude Code transcripts
38
+ if (msg.type !== 'assistant')
39
+ continue;
40
+ const usage = msg.message?.usage;
41
+ if (!usage)
42
+ continue;
43
+ const inputTokens = usage.input_tokens ?? 0;
44
+ const outputTokens = usage.output_tokens ?? 0;
45
+ // Skip messages with zero tokens (shouldn't count as turns)
46
+ if (inputTokens === 0 && outputTokens === 0)
47
+ continue;
48
+ const timestamp = msg.timestamp ?? new Date().toISOString();
49
+ turns.push({
50
+ turnIndex,
51
+ timestamp: typeof timestamp === 'string' ? timestamp : new Date(timestamp).toISOString(),
52
+ inputTokens,
53
+ outputTokens,
54
+ cacheReadInputTokens: usage.cache_read_input_tokens ?? 0,
55
+ cacheCreationInputTokens: usage.cache_creation_input_tokens ?? 0,
56
+ });
57
+ turnIndex++;
58
+ }
59
+ catch {
60
+ // Skip unparseable lines
61
+ }
62
+ }
63
+ if (turns.length === 0)
64
+ return null;
65
+ // Aggregate totals
66
+ const totalInput = turns.reduce((s, t) => s + t.inputTokens, 0);
67
+ const totalOutput = turns.reduce((s, t) => s + t.outputTokens, 0);
68
+ const totalCacheRead = turns.reduce((s, t) => s + t.cacheReadInputTokens, 0);
69
+ const totalCacheCreation = turns.reduce((s, t) => s + t.cacheCreationInputTokens, 0);
70
+ // Detect cache cliffs (idle gaps > 5 min between consecutive turns)
71
+ const cacheCliffs = [];
72
+ for (let i = 1; i < turns.length; i++) {
73
+ const prevTime = new Date(turns[i - 1].timestamp).getTime();
74
+ const currTime = new Date(turns[i].timestamp).getTime();
75
+ const gap = currTime - prevTime;
76
+ if (gap > CACHE_TTL_MS) {
77
+ cacheCliffs.push({
78
+ afterTurn: i - 1,
79
+ gapMs: gap,
80
+ tokensAtRisk: turns[i].inputTokens,
81
+ });
82
+ }
83
+ }
84
+ // Duration from first to last turn
85
+ const firstTime = new Date(turns[0].timestamp).getTime();
86
+ const lastTime = new Date(turns[turns.length - 1].timestamp).getTime();
87
+ // Cost estimate
88
+ const estimatedCost = totalInput * INPUT_RATE + totalOutput * OUTPUT_RATE + totalCacheRead * CACHE_READ_RATE;
89
+ // Cache hit ratio
90
+ const totalInputIncludingCache = totalCacheRead + totalInput;
91
+ const cacheHitRatio = totalInputIncludingCache > 0 ? totalCacheRead / totalInputIncludingCache : 0;
92
+ return {
93
+ sessionId: '',
94
+ agentType: agentType ?? 'unknown',
95
+ agentId: agentId ?? 'unknown',
96
+ turns,
97
+ totalInputTokens: totalInput,
98
+ totalOutputTokens: totalOutput,
99
+ totalCacheReadTokens: totalCacheRead,
100
+ totalCacheCreationTokens: totalCacheCreation,
101
+ totalTokens: totalInput + totalOutput,
102
+ turnCount: turns.length,
103
+ estimatedCostUsd: Math.round(estimatedCost * 10000) / 10000,
104
+ cacheCliffs,
105
+ durationMs: lastTime - firstTime,
106
+ cacheHitRatio: Math.round(cacheHitRatio * 1000) / 1000,
107
+ };
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ /**
114
+ * Find the most recent savings manifest in the .swarm directory.
115
+ * Inlined here to avoid circular dependency with runtime modules — hooks must
116
+ * be loadable independently of the engine runtime.
117
+ */
118
+ function findLatestManifestLocal(cwd) {
119
+ const dir = join(cwd, '.swarm');
120
+ try {
121
+ const files = readdirSync(dir)
122
+ .filter((f) => f.startsWith('savings-manifest-') && f.endsWith('.json'))
123
+ .sort()
124
+ .reverse();
125
+ if (files.length === 0)
126
+ return null;
127
+ return JSON.parse(readFileSync(join(dir, files[0]), 'utf-8'));
128
+ }
129
+ catch {
130
+ return null;
131
+ }
132
+ }
133
+ /**
134
+ * Enrich a TranscriptUsage with savings data from a savings manifest.
135
+ * Looks up the matching agent entry and multiplies per-turn savings by actual turns.
136
+ */
137
+ export function enrichWithSavings(usage, cwd) {
138
+ try {
139
+ const manifest = findLatestManifestLocal(cwd || process.cwd());
140
+ if (!manifest || !manifest.agents)
141
+ return usage;
142
+ // Find matching agent: prefer agentId match, fall back to agentType
143
+ const entry = manifest.agents.find((a) => a.agentId === usage.agentId) ||
144
+ manifest.agents.find((a) => a.agentType === usage.agentType);
145
+ if (!entry)
146
+ return usage;
147
+ const turns = usage.turnCount;
148
+ usage.naiveTokensEstimate = entry.naiveTokensPerTurn * turns;
149
+ usage.savedPerTurn = entry.savedPerTurn;
150
+ usage.totalSavingsEstimate = entry.savedPerTurn * turns;
151
+ usage.savingsBreakdown = {
152
+ toolSearchSaved: entry.optimizations.toolSearchSaved * turns,
153
+ promptDietSaved: entry.optimizations.promptDietSaved * turns,
154
+ contextFilteringSaved: entry.optimizations.contextFilteringSaved * turns,
155
+ compactionSaved: entry.optimizations.compactionSaved * turns,
156
+ };
157
+ return usage;
158
+ }
159
+ catch {
160
+ return usage;
161
+ }
162
+ }
163
+ //# sourceMappingURL=transcript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-parser.js","sourceRoot":"","sources":["../../src/hooks/transcript-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { TranscriptUsage } from './transcript-parser.js';
2
+ export interface UsageLogEntry {
3
+ timestamp: string;
4
+ agentType: string;
5
+ agentId: string;
6
+ turns: number;
7
+ inputTokens: number;
8
+ outputTokens: number;
9
+ cacheReadTokens: number;
10
+ cacheCreationTokens: number;
11
+ totalTokens: number;
12
+ estimatedCostUsd: number;
13
+ cacheHitRatio: number;
14
+ cacheCliffs: number;
15
+ durationMs: number;
16
+ naiveTokensEstimate?: number | null;
17
+ totalSavingsEstimate?: number | null;
18
+ savingsBreakdown?: {
19
+ toolSearchSaved: number;
20
+ promptDietSaved: number;
21
+ contextFilteringSaved: number;
22
+ compactionSaved: number;
23
+ } | null;
24
+ }
25
+ export declare function logAgentUsage(usage: TranscriptUsage): void;
26
+ /** Read recent usage entries (last N) */
27
+ export declare function getRecentUsage(limit?: number): UsageLogEntry[];
28
+ /** Summarize usage entries for display */
29
+ export declare function formatUsageSummary(entries: UsageLogEntry[]): string;
30
+ //# sourceMappingURL=usage-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-logger.d.ts","sourceRoot":"","sources":["../../src/hooks/usage-logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,EAAE;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,eAAe,EAAE,MAAM,CAAC;KACzB,GAAG,IAAI,CAAC;CACV;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CA8B1D;AAED,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,aAAa,EAAE,CAQlE;AAED,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAkBnE"}
@@ -0,0 +1,67 @@
1
+ import { appendFileSync, mkdirSync, existsSync, writeFileSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ function usageLogDir() {
5
+ return join(homedir(), '.swarm', 'data');
6
+ }
7
+ function usageLogFile() {
8
+ return join(usageLogDir(), 'agent-usage.jsonl');
9
+ }
10
+ export function logAgentUsage(usage) {
11
+ if (!existsSync(usageLogDir())) {
12
+ mkdirSync(usageLogDir(), { recursive: true, mode: 0o700 });
13
+ }
14
+ // Create with restrictive permissions if new
15
+ if (!existsSync(usageLogFile())) {
16
+ writeFileSync(usageLogFile(), '', { mode: 0o600 });
17
+ }
18
+ const entry = {
19
+ timestamp: new Date().toISOString(),
20
+ agentType: usage.agentType,
21
+ agentId: usage.agentId,
22
+ turns: usage.turnCount,
23
+ inputTokens: usage.totalInputTokens,
24
+ outputTokens: usage.totalOutputTokens,
25
+ cacheReadTokens: usage.totalCacheReadTokens,
26
+ cacheCreationTokens: usage.totalCacheCreationTokens,
27
+ totalTokens: usage.totalTokens,
28
+ estimatedCostUsd: usage.estimatedCostUsd,
29
+ cacheHitRatio: usage.cacheHitRatio,
30
+ cacheCliffs: usage.cacheCliffs.length,
31
+ durationMs: usage.durationMs,
32
+ naiveTokensEstimate: usage.naiveTokensEstimate ?? null,
33
+ totalSavingsEstimate: usage.totalSavingsEstimate ?? null,
34
+ savingsBreakdown: usage.savingsBreakdown ?? null,
35
+ };
36
+ appendFileSync(usageLogFile(), JSON.stringify(entry) + '\n');
37
+ }
38
+ /** Read recent usage entries (last N) */
39
+ export function getRecentUsage(limit = 50) {
40
+ try {
41
+ const content = readFileSync(usageLogFile(), 'utf-8');
42
+ const lines = content.split('\n').filter((l) => l.trim());
43
+ return lines.slice(-limit).map((l) => JSON.parse(l));
44
+ }
45
+ catch {
46
+ return [];
47
+ }
48
+ }
49
+ /** Summarize usage entries for display */
50
+ export function formatUsageSummary(entries) {
51
+ if (entries.length === 0)
52
+ return 'No usage data recorded yet.';
53
+ const totalTokens = entries.reduce((s, e) => s + (e.totalTokens || 0), 0);
54
+ const totalCost = entries.reduce((s, e) => s + (e.estimatedCostUsd || 0), 0);
55
+ const totalCliffs = entries.reduce((s, e) => s + (e.cacheCliffs || 0), 0);
56
+ const avgCacheHit = entries.reduce((s, e) => s + (e.cacheHitRatio || 0), 0) / entries.length;
57
+ const lines = [];
58
+ lines.push(`Agents: ${entries.length}`);
59
+ lines.push(`Total tokens: ${totalTokens.toLocaleString()}`);
60
+ lines.push(`Estimated cost: $${totalCost.toFixed(4)}`);
61
+ lines.push(`Avg cache hit ratio: ${(avgCacheHit * 100).toFixed(1)}%`);
62
+ if (totalCliffs > 0) {
63
+ lines.push(`Cache cliffs (>5min idle): ${totalCliffs}`);
64
+ }
65
+ return lines.join('\n');
66
+ }
67
+ //# sourceMappingURL=usage-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-logger.js","sourceRoot":"","sources":["../../src/hooks/usage-logger.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -44,7 +44,11 @@ export { PatternRegistry } from './core/patterns.js';
44
44
  export { saveCheckpoint, loadCheckpoint, listCheckpoints } from './core/checkpoint.js';
45
45
  export * from './core/types.js';
46
46
  export { generatePlugin } from './plugin/index.js';
47
- export { onAgentStart, onAgentStop, parseHookInput } from './hooks/index.js';
47
+ export { onAgentStart, onAgentStop, onOrchestratorStop, parseHookInput } from './hooks/index.js';
48
+ export { parseTranscript, parseTranscriptContent, enrichWithSavings } from './hooks/transcript-parser.js';
49
+ export type { TranscriptUsage, TurnUsage, CacheCliff, SavingsBreakdown } from './hooks/transcript-parser.js';
50
+ export { logAgentUsage, getRecentUsage, formatUsageSummary } from './hooks/usage-logger.js';
51
+ export type { UsageLogEntry } from './hooks/usage-logger.js';
48
52
  /**
49
53
  * Registry of pluggable execution backends. Backends route agent tasks to
50
54
  * different AI providers: Claude Code (Agent SDK), OpenAI Codex CLI, Google
@@ -88,6 +92,8 @@ export type { ProjectConfig } from './utils/project-config.js';
88
92
  export { estimateTokens } from './utils/tokens.js';
89
93
  export { StatsCollector } from './runtime/stats.js';
90
94
  export type { AgentStats } from './runtime/stats.js';
95
+ export { ViolationTracker } from './runtime/violation-tracker.js';
96
+ export type { ViolationType, Violation, ViolationHotSpot } from './runtime/violation-tracker.js';
91
97
  /**
92
98
  * UCB1-based model router that tracks success rates per model per task type
93
99
  * and recommends the statistically optimal model for each new task.
@@ -196,8 +202,14 @@ export { RepoMapGenerator } from './runtime/repo-map.js';
196
202
  /** Structured handoff parser — parses and generates inter-agent handoff documents */
197
203
  export { HandoffParser } from './runtime/structured-handoff.js';
198
204
  export type { StructuredHandoff } from './runtime/structured-handoff.js';
205
+ /** Context-exhaustion handoff — structured state transfer when an agent hits the context window limit */
206
+ export { isContextExhaustion, buildHandoffPacket, formatHandoffPrompt } from './runtime/handoff.js';
207
+ export type { HandoffPacket } from './core/types.js';
199
208
  /** Verbatim compaction — replaces re-retrievable content with compact references */
200
209
  export { VerbatimCompactor } from './runtime/compactor.js';
210
+ /** PostToolUse hook that injects compact summaries after verbose Bash output */
211
+ export { createOutputSummarizerHook, summarizeOutput, formatSummaryContext } from './runtime/output-summarizer.js';
212
+ export type { OutputSummary } from './runtime/output-summarizer.js';
201
213
  export type { CompactReference, CompactionResult } from './runtime/compactor.js';
202
214
  /** Structured JSON output schemas per agent type */
203
215
  export { getOutputSchema, listOutputSchemas } from './runtime/output-schemas.js';
@@ -211,4 +223,7 @@ export type { CompressionGuideline, TrajectoryPair, FailureAnalysis } from './ru
211
223
  /** Benefits summary — aggregates optimization metrics into user-facing value report */
212
224
  export { BenefitsCollector, formatBenefitsSummary, formatBenefitsTable } from './runtime/benefits.js';
213
225
  export type { BenefitsSummary, TokenSavings, GraphBenefits, MLBenefits, AdaptiveBenefits } from './runtime/benefits.js';
226
+ /** Savings manifest — bridges engine-side optimization data to transcript-side usage reporting */
227
+ export { writeSavingsManifest, readSavingsManifest, findLatestManifest, appendAgentToManifest, pruneManifests, calculateNaiveTokensPerTurn, } from './runtime/savings-manifest.js';
228
+ export type { SavingsManifest, AgentSavingsEntry } from './runtime/savings-manifest.js';
214
229
  //# sourceMappingURL=index.d.ts.map