claude-ide-bridge 2.34.0 → 2.42.2

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 (170) hide show
  1. package/README.md +28 -5
  2. package/dist/activityLog.d.ts +19 -3
  3. package/dist/activityLog.js +63 -65
  4. package/dist/activityLog.js.map +1 -1
  5. package/dist/automation.d.ts +23 -94
  6. package/dist/automation.js +270 -1797
  7. package/dist/automation.js.map +1 -1
  8. package/dist/bridge.d.ts +3 -0
  9. package/dist/bridge.js +122 -3
  10. package/dist/bridge.js.map +1 -1
  11. package/dist/claudeDriver.d.ts +47 -0
  12. package/dist/claudeDriver.js +58 -2
  13. package/dist/claudeDriver.js.map +1 -1
  14. package/dist/claudeMdPatch.d.ts +29 -0
  15. package/dist/claudeMdPatch.js +164 -0
  16. package/dist/claudeMdPatch.js.map +1 -0
  17. package/dist/claudeOrchestrator.js +12 -3
  18. package/dist/claudeOrchestrator.js.map +1 -1
  19. package/dist/commands/task.d.ts +14 -0
  20. package/dist/commands/task.js +289 -0
  21. package/dist/commands/task.js.map +1 -0
  22. package/dist/commands/tokenEfficiency.d.ts +9 -0
  23. package/dist/commands/tokenEfficiency.js +211 -0
  24. package/dist/commands/tokenEfficiency.js.map +1 -0
  25. package/dist/commands/tools.d.ts +28 -0
  26. package/dist/commands/tools.js +326 -0
  27. package/dist/commands/tools.js.map +1 -0
  28. package/dist/dashboard.js +40 -0
  29. package/dist/dashboard.js.map +1 -1
  30. package/dist/errors.d.ts +1 -0
  31. package/dist/errors.js +1 -0
  32. package/dist/errors.js.map +1 -1
  33. package/dist/extensionClient.d.ts +5 -12
  34. package/dist/extensionClient.js +20 -26
  35. package/dist/extensionClient.js.map +1 -1
  36. package/dist/fp/activityAnalytics.d.ts +39 -0
  37. package/dist/fp/activityAnalytics.js +122 -0
  38. package/dist/fp/activityAnalytics.js.map +1 -0
  39. package/dist/fp/async.d.ts +48 -0
  40. package/dist/fp/async.js +60 -0
  41. package/dist/fp/async.js.map +1 -0
  42. package/dist/fp/automationInterpreter.d.ts +37 -0
  43. package/dist/fp/automationInterpreter.js +523 -0
  44. package/dist/fp/automationInterpreter.js.map +1 -0
  45. package/dist/fp/automationProgram.d.ts +89 -0
  46. package/dist/fp/automationProgram.js +29 -0
  47. package/dist/fp/automationProgram.js.map +1 -0
  48. package/dist/fp/automationState.d.ts +135 -0
  49. package/dist/fp/automationState.js +206 -0
  50. package/dist/fp/automationState.js.map +1 -0
  51. package/dist/fp/automationUtils.d.ts +27 -0
  52. package/dist/fp/automationUtils.js +48 -0
  53. package/dist/fp/automationUtils.js.map +1 -0
  54. package/dist/fp/brandedTypes.d.ts +32 -0
  55. package/dist/fp/brandedTypes.js +41 -0
  56. package/dist/fp/brandedTypes.js.map +1 -0
  57. package/dist/fp/commandDescription.d.ts +18 -0
  58. package/dist/fp/commandDescription.js +125 -0
  59. package/dist/fp/commandDescription.js.map +1 -0
  60. package/dist/fp/extensionSnapshot.d.ts +10 -0
  61. package/dist/fp/extensionSnapshot.js +14 -0
  62. package/dist/fp/extensionSnapshot.js.map +1 -0
  63. package/dist/fp/index.d.ts +8 -0
  64. package/dist/fp/index.js +9 -0
  65. package/dist/fp/index.js.map +1 -0
  66. package/dist/fp/interpreterContext.d.ts +69 -0
  67. package/dist/fp/interpreterContext.js +56 -0
  68. package/dist/fp/interpreterContext.js.map +1 -0
  69. package/dist/fp/policyParser.d.ts +16 -0
  70. package/dist/fp/policyParser.js +334 -0
  71. package/dist/fp/policyParser.js.map +1 -0
  72. package/dist/fp/result.d.ts +38 -0
  73. package/dist/fp/result.js +57 -0
  74. package/dist/fp/result.js.map +1 -0
  75. package/dist/fp/tokenBucket.d.ts +27 -0
  76. package/dist/fp/tokenBucket.js +36 -0
  77. package/dist/fp/tokenBucket.js.map +1 -0
  78. package/dist/index.d.ts +1 -1
  79. package/dist/index.js +103 -57
  80. package/dist/index.js.map +1 -1
  81. package/dist/oauth.js +9 -34
  82. package/dist/oauth.js.map +1 -1
  83. package/dist/prompts.js +123 -0
  84. package/dist/prompts.js.map +1 -1
  85. package/dist/quickTaskPresets.d.ts +64 -0
  86. package/dist/quickTaskPresets.js +156 -0
  87. package/dist/quickTaskPresets.js.map +1 -0
  88. package/dist/server.d.ts +9 -0
  89. package/dist/server.js +47 -0
  90. package/dist/server.js.map +1 -1
  91. package/dist/streamableHttp.js +6 -0
  92. package/dist/streamableHttp.js.map +1 -1
  93. package/dist/tools/activityLog.js +2 -2
  94. package/dist/tools/activityLog.js.map +1 -1
  95. package/dist/tools/auditDependencies.js +1 -1
  96. package/dist/tools/auditDependencies.js.map +1 -1
  97. package/dist/tools/batchLsp.d.ts +57 -0
  98. package/dist/tools/batchLsp.js +79 -13
  99. package/dist/tools/batchLsp.js.map +1 -1
  100. package/dist/tools/bridgeStatus.js +3 -5
  101. package/dist/tools/bridgeStatus.js.map +1 -1
  102. package/dist/tools/explainDiagnostic.d.ts +137 -0
  103. package/dist/tools/explainDiagnostic.js +230 -0
  104. package/dist/tools/explainDiagnostic.js.map +1 -0
  105. package/dist/tools/formatAndSave.d.ts +0 -23
  106. package/dist/tools/formatAndSave.js +22 -5
  107. package/dist/tools/formatAndSave.js.map +1 -1
  108. package/dist/tools/getAnalyticsReport.js +8 -0
  109. package/dist/tools/getAnalyticsReport.js.map +1 -1
  110. package/dist/tools/getClaudeTaskStatus.js +2 -2
  111. package/dist/tools/getClaudeTaskStatus.js.map +1 -1
  112. package/dist/tools/getDiagnostics.js +17 -3
  113. package/dist/tools/getDiagnostics.js.map +1 -1
  114. package/dist/tools/getDiffFromHandoff.d.ts +89 -0
  115. package/dist/tools/getDiffFromHandoff.js +163 -0
  116. package/dist/tools/getDiffFromHandoff.js.map +1 -0
  117. package/dist/tools/github/pr.js +1 -1
  118. package/dist/tools/github/pr.js.map +1 -1
  119. package/dist/tools/handoffNote.js +91 -6
  120. package/dist/tools/handoffNote.js.map +1 -1
  121. package/dist/tools/httpClient.js +1 -1
  122. package/dist/tools/httpClient.js.map +1 -1
  123. package/dist/tools/index.d.ts +1 -1
  124. package/dist/tools/index.js +83 -10
  125. package/dist/tools/index.js.map +1 -1
  126. package/dist/tools/jumpToFirstError.d.ts +0 -7
  127. package/dist/tools/jumpToFirstError.js +6 -6
  128. package/dist/tools/jumpToFirstError.js.map +1 -1
  129. package/dist/tools/launchQuickTask.d.ts +76 -0
  130. package/dist/tools/launchQuickTask.js +170 -0
  131. package/dist/tools/launchQuickTask.js.map +1 -0
  132. package/dist/tools/listClaudeTasks.js +2 -2
  133. package/dist/tools/listClaudeTasks.js.map +1 -1
  134. package/dist/tools/openFile.js +2 -2
  135. package/dist/tools/openFile.js.map +1 -1
  136. package/dist/tools/performanceReport.d.ts +133 -0
  137. package/dist/tools/performanceReport.js +218 -0
  138. package/dist/tools/performanceReport.js.map +1 -0
  139. package/dist/tools/previewEdit.d.ts +107 -0
  140. package/dist/tools/previewEdit.js +270 -0
  141. package/dist/tools/previewEdit.js.map +1 -0
  142. package/dist/tools/runClaudeTask.js +7 -7
  143. package/dist/tools/runClaudeTask.js.map +1 -1
  144. package/dist/tools/runCommand.js +8 -141
  145. package/dist/tools/runCommand.js.map +1 -1
  146. package/dist/tools/runTests.js +16 -3
  147. package/dist/tools/runTests.js.map +1 -1
  148. package/dist/tools/searchAndReplace.js +1 -1
  149. package/dist/tools/searchAndReplace.js.map +1 -1
  150. package/dist/tools/spawnWorkspace.d.ts +103 -0
  151. package/dist/tools/spawnWorkspace.js +268 -0
  152. package/dist/tools/spawnWorkspace.js.map +1 -0
  153. package/dist/tools/terminal.js +1 -1
  154. package/dist/tools/terminal.js.map +1 -1
  155. package/dist/tools/testTraceToSource.d.ts +80 -0
  156. package/dist/tools/testTraceToSource.js +206 -0
  157. package/dist/tools/testTraceToSource.js.map +1 -0
  158. package/dist/tools/transaction.d.ts +243 -0
  159. package/dist/tools/transaction.js +309 -0
  160. package/dist/tools/transaction.js.map +1 -0
  161. package/dist/tools/utils.d.ts +2 -1
  162. package/dist/tools/utils.js.map +1 -1
  163. package/dist/tools/watchDiagnostics.js +29 -13
  164. package/dist/tools/watchDiagnostics.js.map +1 -1
  165. package/dist/transport.d.ts +7 -0
  166. package/dist/transport.js +25 -8
  167. package/dist/transport.js.map +1 -1
  168. package/package.json +2 -1
  169. package/templates/managed-agent/code-review-agent.md +50 -0
  170. package/templates/managed-agent/managed-agent-mcp.json +102 -0
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![Docker](https://img.shields.io/badge/docker-ghcr.io%2FOolab--labs%2Fclaude--ide--bridge-blue)](https://github.com/Oolab-labs/claude-ide-bridge/pkgs/container/claude-ide-bridge)
6
6
  [![License: MIT](https://img.shields.io/npm/l/claude-ide-bridge)](https://opensource.org/licenses/MIT)
7
7
 
8
- **MCP bridge giving Claude Code IDE superpowers: 137 tools for LSP, debugging, git, GitHub, terminals, and more.**
8
+ **MCP bridge giving Claude Code IDE superpowers: 141 tools for LSP, debugging, git, GitHub, terminals, and more.**
9
9
 
10
10
  A WebSocket bridge between Claude Code CLI and your VS Code extension. Claude sees what your IDE sees — live diagnostics, go-to-definition, call hierarchies, hover types, breakpoints, debugger state — and can act on it: edit files, run tests, commit, open PRs, all without you copy-pasting anything.
11
11
 
@@ -15,6 +15,8 @@ Works locally, over SSH, in Docker, and on a VPS. Extension is optional — head
15
15
  Claude Code ──── bridge ──── VS Code extension ──── your editor state
16
16
  ```
17
17
 
18
+ > **See it work in 5 minutes:** save a broken file, Claude notices, diagnoses, proposes a fix — no prompt typed. [Self-healing quickstart →](./docs/self-healing-quickstart.md)
19
+
18
20
  ## Quick Start
19
21
 
20
22
  **Prerequisites:** [Claude Code CLI](https://claude.ai/code), Node.js ≥ 20
@@ -73,7 +75,7 @@ Or search **Claude IDE Bridge** in the VS Code / Cursor / Windsurf marketplace.
73
75
 
74
76
  The bridge starts in **slim mode** by default — 56 IDE-exclusive tools covering LSP, debugging, refactoring, and editor state. These are capabilities Claude does not have natively, so slim mode adds signal without duplicating built-in file/shell tools.
75
77
 
76
- Add `--full` to unlock all 137 tools, including git, GitHub, terminal, file tree, and orchestration:
78
+ Add `--full` to unlock all 141 tools, including git, GitHub, terminal, file tree, and orchestration:
77
79
 
78
80
  ```bash
79
81
  claude-ide-bridge --full --watch
@@ -133,7 +135,7 @@ Claude calls `refactorAnalyze` (checks blast radius and risk), `refactorPreview`
133
135
  Standard setup. Extension connects automatically. Full LSP, debugger, and editor state available.
134
136
 
135
137
  ### Remote SSH
136
- VS Code Remote-SSH and Cursor SSH load the extension on the VPS side (`extensionKind: ["workspace"]`). Start the bridge on the remote machine. All 137 tools work over SSH.
138
+ VS Code Remote-SSH and Cursor SSH load the extension on the VPS side (`extensionKind: ["workspace"]`). Start the bridge on the remote machine. All 141 tools work over SSH.
137
139
 
138
140
  ```bash
139
141
  # On the remote machine
@@ -165,6 +167,24 @@ docker compose up
165
167
 
166
168
  Headless image includes `typescript-language-server` and `universal-ctags` for LSP and symbol search without VS Code. See [documents/headless-quickstart.md](documents/headless-quickstart.md).
167
169
 
170
+ ### Launch tasks from a terminal (headless parity)
171
+
172
+ The sidebar's quick-task buttons also work from the CLI — same context-gathering, same prompt-building, same dispatch path:
173
+
174
+ ```bash
175
+ # 7 presets: fixErrors · refactorFile · addTests · explainCode · optimizePerf · runTests · resumeLastCancelled
176
+ claude-ide-bridge quick-task fix-errors
177
+ claude-ide-bridge quick-task add-tests --json
178
+
179
+ # free-form description (Claude gathers its own context)
180
+ claude-ide-bridge start-task "Refactor the auth module for clarity, keep behaviour identical"
181
+
182
+ # resume prior session from handoff note
183
+ claude-ide-bridge continue-handoff
184
+ ```
185
+
186
+ Requires `--claude-driver subprocess` on the running bridge. All three subcommands accept `--json`, `--port`, `--source`. Enforces a 5s bridge-global cooldown per preset (shared with the sidebar).
187
+
168
188
  ---
169
189
 
170
190
  ## Automation Hooks
@@ -245,7 +265,7 @@ claude-ide-bridge install claude-mem
245
265
  |---|---|
246
266
  | `claude-ide-bridge init` | One-command setup: install extension + write CLAUDE.md + register MCP server |
247
267
  | `claude-ide-bridge --watch` | Start bridge with auto-restart on crash (2s → 30s backoff) |
248
- | `claude-ide-bridge --full` | Enable all 137 tools (default: 56 slim tools) |
268
+ | `claude-ide-bridge --full` | Enable all 141 tools (default: 56 slim tools) |
249
269
  | `claude-ide-bridge install-extension` | Install companion VS Code extension |
250
270
  | `claude-ide-bridge gen-claude-md --write` | Add bridge section to existing CLAUDE.md |
251
271
  | `claude-ide-bridge print-token` | Print auth token from active lock file |
@@ -253,6 +273,9 @@ claude-ide-bridge install claude-mem
253
273
  | `claude-ide-bridge marketplace list` | List available companion servers |
254
274
  | `claude-ide-bridge install <companion>` | Install companion into Claude Desktop config |
255
275
  | `claude-ide-bridge notify <Event>` | Post a hook event to a running bridge (for CC hook wiring) |
276
+ | `claude-ide-bridge quick-task <preset>` | Launch a context-aware Claude task from a preset (headless parity with the sidebar) |
277
+ | `claude-ide-bridge start-task "<description>"` | Enqueue a free-form Claude task with workspace context |
278
+ | `claude-ide-bridge continue-handoff` | Resume prior session using the stored handoff note |
256
279
  | `claude-ide-bridge start-all` | Launch tmux session with bridge + extension watcher |
257
280
 
258
281
  **Key flags:**
@@ -281,7 +304,7 @@ claude-ide-bridge install claude-mem
281
304
  | File | Description |
282
305
  |---|---|
283
306
  | [ARCHITECTURE.md](ARCHITECTURE.md) | System topology, request lifecycle, component map, design decisions |
284
- | [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference — all 137 tools with parameters and examples |
307
+ | [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference — all 141 tools with parameters and examples |
285
308
  | [documents/prompts-reference.md](documents/prompts-reference.md) | All MCP prompts (31 prompts, 12 plugin skills, 4 subagents) |
286
309
  | [docs/automation.md](docs/automation.md) | Automation hooks reference — all 18 events, policy schema, condition filters |
287
310
  | [docs/troubleshooting.md](docs/troubleshooting.md) | Diagnostics, common errors, and fixes |
@@ -9,6 +9,7 @@ export declare class ActivityLog {
9
9
  private maxEntries;
10
10
  private persistPath;
11
11
  private readonly listeners;
12
+ private rateLimitRejections;
12
13
  /**
13
14
  * Per-tool bounded ring of duration samples used for percentile computation.
14
15
  * Capped at MAX_DURATION_SAMPLES per tool to bound memory.
@@ -40,7 +41,11 @@ export declare class ActivityLog {
40
41
  status?: string;
41
42
  last?: number;
42
43
  }): ActivityEntry[];
43
- toPrometheus(): string;
44
+ toPrometheus(extras?: {
45
+ activeToolCalls?: number;
46
+ rateLimitRejected?: number;
47
+ extensionDisconnects?: number;
48
+ }): string;
44
49
  stats(): Record<string, {
45
50
  count: number;
46
51
  avgDurationMs: number;
@@ -56,8 +61,19 @@ export declare class ActivityLog {
56
61
  p99: number;
57
62
  sampleCount: number;
58
63
  }>;
59
- /** Nearest-rank percentile from a pre-sorted array. */
60
- private _percentileValue;
64
+ /** Increment the rate-limit rejection counter. */
65
+ recordRateLimitRejection(): void;
66
+ /** Return total rate-limit rejections recorded since startup. */
67
+ getRateLimitRejections(): number;
68
+ /**
69
+ * Per-tool stats within a sliding time window (reverse scan stops outside cutoff).
70
+ * Returns Record<tool, {count, errors, avgDurationMs}>.
71
+ */
72
+ windowedStats(windowMs: number): Record<string, {
73
+ count: number;
74
+ errors: number;
75
+ avgDurationMs: number;
76
+ }>;
61
77
  /**
62
78
  * Tool-pair co-occurrence within a sliding time window.
63
79
  * Counts how many times tool B was called within `windowMs` after tool A,
@@ -1,5 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { computeCoOccurrence, computePercentiles, computeStats, computeWindowedStats, } from "./fp/activityAnalytics.js";
3
4
  function escapeLabelValue(s) {
4
5
  return s.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
5
6
  }
@@ -16,6 +17,7 @@ export class ActivityLog {
16
17
  maxEntries;
17
18
  persistPath;
18
19
  listeners = new Set();
20
+ rateLimitRejections = 0;
19
21
  /**
20
22
  * Per-tool bounded ring of duration samples used for percentile computation.
21
23
  * Capped at MAX_DURATION_SAMPLES per tool to bound memory.
@@ -95,7 +97,7 @@ export class ActivityLog {
95
97
  try {
96
98
  const stat = await fs.promises.stat(persistPath);
97
99
  if (stat.size > MAX_PERSIST_BYTES) {
98
- this._rotateDisk();
100
+ await this._rotateDisk();
99
101
  }
100
102
  }
101
103
  catch (err) {
@@ -119,11 +121,11 @@ export class ActivityLog {
119
121
  }
120
122
  })();
121
123
  }
122
- _rotateDisk() {
124
+ async _rotateDisk() {
123
125
  if (!this.persistPath)
124
126
  return;
125
127
  try {
126
- const raw = fs.readFileSync(this.persistPath, "utf8");
128
+ const raw = await fs.promises.readFile(this.persistPath, "utf8");
127
129
  let lines = raw.split("\n").filter((l) => l.trim());
128
130
  // Step 1: trim by line count
129
131
  if (lines.length > MAX_PERSIST_LINES) {
@@ -136,7 +138,9 @@ export class ActivityLog {
136
138
  lines.length > 1) {
137
139
  lines = lines.slice(-Math.max(1, Math.floor(lines.length / 2)));
138
140
  }
139
- fs.writeFileSync(this.persistPath, `${lines.join("\n")}\n`);
141
+ await fs.promises.writeFile(this.persistPath, `${lines.join("\n")}\n`, {
142
+ mode: 0o600,
143
+ });
140
144
  }
141
145
  catch (err) {
142
146
  process.stderr.write(`[activityLog] Rotation failed: ${err instanceof Error ? err.message : String(err)}\n`);
@@ -228,8 +232,9 @@ export class ActivityLog {
228
232
  const last = Math.min(opts?.last ?? 50, 200);
229
233
  return result.slice(-last);
230
234
  }
231
- toPrometheus() {
235
+ toPrometheus(extras) {
232
236
  const s = this.stats();
237
+ const p = this.percentiles();
233
238
  const lines = [];
234
239
  lines.push("# HELP bridge_tool_calls_total Total tool calls by tool name and status");
235
240
  lines.push("# TYPE bridge_tool_calls_total counter");
@@ -244,55 +249,71 @@ export class ActivityLog {
244
249
  const t = escapeLabelValue(tool);
245
250
  lines.push(`bridge_tool_duration_ms_avg{tool="${t}"} ${data.avgDurationMs}`);
246
251
  }
252
+ // Per-tool latency percentiles
253
+ if (Object.keys(p).length > 0) {
254
+ lines.push("# HELP bridge_tool_duration_p50_ms p50 latency per tool (ms)");
255
+ lines.push("# TYPE bridge_tool_duration_p50_ms gauge");
256
+ for (const [tool, data] of Object.entries(p)) {
257
+ const t = escapeLabelValue(tool);
258
+ lines.push(`bridge_tool_duration_p50_ms{tool="${t}"} ${data.p50}`);
259
+ }
260
+ lines.push("# HELP bridge_tool_duration_p95_ms p95 latency per tool (ms)");
261
+ lines.push("# TYPE bridge_tool_duration_p95_ms gauge");
262
+ for (const [tool, data] of Object.entries(p)) {
263
+ const t = escapeLabelValue(tool);
264
+ lines.push(`bridge_tool_duration_p95_ms{tool="${t}"} ${data.p95}`);
265
+ }
266
+ lines.push("# HELP bridge_tool_duration_p99_ms p99 latency per tool (ms)");
267
+ lines.push("# TYPE bridge_tool_duration_p99_ms gauge");
268
+ for (const [tool, data] of Object.entries(p)) {
269
+ const t = escapeLabelValue(tool);
270
+ lines.push(`bridge_tool_duration_p99_ms{tool="${t}"} ${data.p99}`);
271
+ }
272
+ }
247
273
  lines.push("# HELP bridge_uptime_seconds Process uptime in seconds");
248
274
  lines.push("# TYPE bridge_uptime_seconds gauge");
249
275
  lines.push(`bridge_uptime_seconds ${Math.floor(process.uptime())}`);
276
+ if (extras?.activeToolCalls !== undefined) {
277
+ lines.push("# HELP bridge_active_tool_calls Currently executing tool calls");
278
+ lines.push("# TYPE bridge_active_tool_calls gauge");
279
+ lines.push(`bridge_active_tool_calls ${extras.activeToolCalls}`);
280
+ }
281
+ if (extras?.rateLimitRejected !== undefined) {
282
+ lines.push("# HELP bridge_rate_limit_rejected_total Total rate-limit rejections");
283
+ lines.push("# TYPE bridge_rate_limit_rejected_total counter");
284
+ lines.push(`bridge_rate_limit_rejected_total ${extras.rateLimitRejected}`);
285
+ }
286
+ if (extras?.extensionDisconnects !== undefined) {
287
+ lines.push("# HELP bridge_extension_disconnects_total Total extension disconnects");
288
+ lines.push("# TYPE bridge_extension_disconnects_total counter");
289
+ lines.push(`bridge_extension_disconnects_total ${extras.extensionDisconnects}`);
290
+ }
250
291
  return `${lines.join("\n")}\n`;
251
292
  }
252
293
  stats() {
253
- const map = new Map();
254
- for (const entry of this.entries) {
255
- const s = map.get(entry.tool) ?? { count: 0, totalMs: 0, errors: 0 };
256
- s.count++;
257
- s.totalMs += entry.durationMs;
258
- if (entry.status === "error")
259
- s.errors++;
260
- map.set(entry.tool, s);
261
- }
262
- const result = {};
263
- for (const [tool, s] of map) {
264
- result[tool] = {
265
- count: s.count,
266
- avgDurationMs: Math.round(s.totalMs / s.count),
267
- errors: s.errors,
268
- };
269
- }
270
- return result;
294
+ return computeStats(this.entries);
271
295
  }
272
296
  /**
273
297
  * Per-tool percentiles (p50/p95/p99) computed from the bounded duration
274
298
  * sample buffer. Returns null for any tool with fewer than 2 samples.
275
299
  */
276
300
  percentiles() {
277
- const result = {};
278
- for (const [tool, raw] of this.durationSamples) {
279
- if (raw.length < 2)
280
- continue;
281
- const sorted = [...raw].sort((a, b) => a - b);
282
- const n = sorted.length;
283
- result[tool] = {
284
- p50: this._percentileValue(sorted, 50),
285
- p95: this._percentileValue(sorted, 95),
286
- p99: this._percentileValue(sorted, 99),
287
- sampleCount: n,
288
- };
289
- }
290
- return result;
301
+ return computePercentiles(this.durationSamples);
302
+ }
303
+ /** Increment the rate-limit rejection counter. */
304
+ recordRateLimitRejection() {
305
+ this.rateLimitRejections++;
306
+ }
307
+ /** Return total rate-limit rejections recorded since startup. */
308
+ getRateLimitRejections() {
309
+ return this.rateLimitRejections;
291
310
  }
292
- /** Nearest-rank percentile from a pre-sorted array. */
293
- _percentileValue(sorted, pct) {
294
- const idx = Math.ceil((pct / 100) * sorted.length) - 1;
295
- return Math.round(sorted[Math.max(0, idx)] ?? 0);
311
+ /**
312
+ * Per-tool stats within a sliding time window (reverse scan stops outside cutoff).
313
+ * Returns Record<tool, {count, errors, avgDurationMs}>.
314
+ */
315
+ windowedStats(windowMs) {
316
+ return computeWindowedStats(this.entries, windowMs, Date.now());
296
317
  }
297
318
  /**
298
319
  * Tool-pair co-occurrence within a sliding time window.
@@ -301,30 +322,7 @@ export class ActivityLog {
301
322
  * alphabetically) to avoid double-counting. Returns sorted by count desc.
302
323
  */
303
324
  coOccurrence(windowMs = DEFAULT_CO_OCCURRENCE_WINDOW_MS) {
304
- const counts = new Map();
305
- // entries are chronological; use two-pointer sliding window
306
- const n = this.entries.length;
307
- for (let i = 0; i < n; i++) {
308
- const a = this.entries[i];
309
- if (!a)
310
- continue;
311
- const tA = new Date(a.timestamp).getTime();
312
- for (let j = i + 1; j < n; j++) {
313
- const b = this.entries[j];
314
- if (!b)
315
- continue;
316
- const tB = new Date(b.timestamp).getTime();
317
- if (tB - tA > windowMs)
318
- break; // sorted chronologically — safe to break
319
- if (a.tool === b.tool)
320
- continue; // skip self-pairs
321
- const key = a.tool < b.tool ? `${a.tool}|${b.tool}` : `${b.tool}|${a.tool}`;
322
- counts.set(key, (counts.get(key) ?? 0) + 1);
323
- }
324
- }
325
- return [...counts.entries()]
326
- .map(([pair, count]) => ({ pair, count }))
327
- .sort((a, b) => b.count - a.count);
325
+ return computeCoOccurrence(this.entries, windowMs);
328
326
  }
329
327
  }
330
328
  //# sourceMappingURL=activityLog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"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"}
@@ -402,104 +402,38 @@ export declare function loadPolicy(filePath: string): AutomationPolicy;
402
402
  export declare function checkCcHookWiring(): Record<string, boolean>;
403
403
  export declare class AutomationHooks {
404
404
  private readonly policy;
405
- private readonly orchestrator;
406
405
  private readonly log;
407
- private readonly extensionClient?;
408
- private readonly workspace?;
409
- /** Last trigger time per "trigger key" (e.g. "diagnostics:/path/to/file"). */
410
- private lastTrigger;
411
- /**
412
- * Active task IDs per file for the diagnostics handler.
413
- * Kept separate from activeSaveTasks so a running save task does not suppress
414
- * the diagnostics trigger (and vice-versa) for the same file.
415
- */
416
- private activeDiagnosticsTasks;
417
- /** Active task IDs per file for the file-saved handler. */
418
- private activeSaveTasks;
419
- /** Active task IDs per file for the file-changed handler. */
420
- private activeFileChangedTasks;
421
- /** Active task ID for the test-run handler (workspace-global). */
422
- private activeTestRunTaskId;
423
- /** Active task ID for the test-pass-after-failure handler (workspace-global). */
424
- private activeTestPassAfterFailureTaskId;
425
- /**
426
- * Per-runner last outcome — used to detect fail→pass transitions.
427
- * Key: runner name (e.g. "vitest", "jest"). Value: "pass" | "fail".
428
- * Stored separately per runner so a vitest pass doesn't incorrectly trigger
429
- * when a jest run was the one that previously failed.
406
+ /** Compiled AST for the functional interpreter. Null if parse failed. */
407
+ private _programAST;
408
+ /** Backend instance for the functional interpreter. */
409
+ private _interpreterBackend;
410
+ /**
411
+ * Pure-value state holding cooldown timestamps, diagnostic error counts, and
412
+ * test outcomes. Mutations go through the pure-function helpers from
413
+ * `src/fp/automationState.ts`; the class re-assigns `_automationState` on
414
+ * each "write" to maintain immutability semantics at the value level.
430
415
  */
431
- private lastTestOutcomeByRunner;
432
- /** Active task ID for the git-commit handler (workspace-global). */
433
- private activeGitCommitTaskId;
434
- /** Active task ID for the git-push handler (workspace-global). */
435
- private activeGitPushTaskId;
436
- /** Active task ID for the git-pull handler (workspace-global). */
437
- private activeGitPullTaskId;
438
- /** Active task ID for the branch-checkout handler (workspace-global). */
439
- private activeBranchCheckoutTaskId;
440
- /** Active task ID for the pull-request handler (workspace-global). */
441
- private activePullRequestTaskId;
442
- /** Active task ID for the task-created handler (workspace-global). */
443
- private activeTaskCreatedTaskId;
444
- /** Active task ID for the permission-denied handler (workspace-global). */
445
- private activePermissionDeniedTaskId;
446
- /** Active task IDs per file for the diagnostics-cleared handler. */
447
- private activeDiagnosticsClearedTasks;
416
+ private _automationState;
448
417
  /** Tracks previous error count per normalized file path for zero-transition detection. */
449
418
  private prevDiagnosticErrors;
450
- /** Latest diagnostics by file — used by _evaluateWhen() for conditional hooks. */
451
- private latestDiagnosticsByFile;
452
- /** Last test runner outcome per runner name — used by _evaluateWhen(). */
453
- private lastTestRunnerStatusByRunner;
454
- /** Active task ID for the task-success handler (workspace-global). */
455
- private activeTaskSuccessTaskId;
456
- /** Active task ID for the debug-session-end handler (workspace-global). */
457
- private activeDebugSessionEndTaskId;
458
- /** Active task ID for the debug-session-start handler (workspace-global). */
459
- private activeDebugSessionStartTaskId;
460
- /** Active task ID for the post-compact handler (workspace-global). */
461
- private activePostCompactTaskId;
462
- /** Active task ID for the pre-compact handler (workspace-global). */
463
- private activePreCompactTaskId;
464
- /** Active task ID for the instructions-loaded handler (workspace-global). */
465
- private activeInstructionsLoadedTaskId;
466
- /**
467
- * Rolling window of task enqueue timestamps for maxTasksPerHour enforcement.
468
- * Entries older than 60 minutes are pruned on each enqueue.
469
- */
470
- private taskTimestamps;
471
- private _lastFiredAt;
472
- constructor(policy: AutomationPolicy, orchestrator: ClaudeOrchestrator, log: (msg: string) => void, extensionClient?: ExtensionClient | undefined, workspace?: string | undefined);
473
419
  /**
474
- * Central enqueue for all automation-triggered tasks.
475
- * Applies defaultModel (Haiku by default) and enforces maxTasksPerHour.
476
- * Throws with the same "Task queue is full" message on rate-limit breach so
477
- * callers can handle it identically.
420
+ * Per-runner last outcome used to detect fail→pass transitions for onTestPassAfterFailure.
421
+ * Key: runner name. Value: "pass" | "fail".
478
422
  */
479
- private _enqueueAutomationTask;
480
- /**
481
- * Poll a task until it reaches a terminal state. If the task ends with
482
- * status "error" and retries remain, re-enqueue after `retryDelayMs`.
483
- */
484
- private _watchForRetry;
485
- /**
486
- * Resolve a named prompt, substituting any `{{placeholder}}` tokens in
487
- * `promptArgs` values with sanitized event data before calling `getPrompt()`.
488
- *
489
- * Returns the resolved user-message text, or `null` if the prompt is unknown
490
- * or has missing required arguments.
491
- */
492
- private _resolveNamedPrompt;
423
+ private lastTestOutcomeByRunner;
424
+ private _lastFiredAt;
425
+ /** Last interpreter run promise allows tests to await completion. */
426
+ private _lastRunPromise;
427
+ constructor(policy: AutomationPolicy, orchestrator: ClaudeOrchestrator, log: (msg: string) => void, _extensionClient?: ExtensionClient, _workspace?: string);
428
+ private _runInterpreter;
493
429
  /**
494
- * Evaluate the optional `when` condition block on a hook.
495
- * Called after _matchesCondition() succeeds and before cooldown checks.
496
- * Returns true if all specified conditions pass (or no `when` block present).
430
+ * Returns a Promise that resolves once all in-flight interpreter runs finish.
431
+ * Useful in tests to await async side-effects before asserting on task counts.
497
432
  */
498
- private _evaluateWhen;
499
- private _matchesCondition;
433
+ flush(): Promise<void>;
434
+ /** Tear down the instance: nulls interpreter references. */
435
+ destroy(): void;
500
436
  handleDiagnosticsChanged(file: string, diagnostics: Diagnostic[]): void;
501
- /** Prune lastTrigger entries older than LAST_TRIGGER_MAX_AGE_MS to prevent unbounded growth. */
502
- private _pruneLastTrigger;
503
437
  /**
504
438
  * Called when Claude Code fires a CwdChanged hook (Claude Code 2.1.83+).
505
439
  * Fires when CC's working directory changes — useful for re-snapshotting workspace context.
@@ -533,11 +467,6 @@ export declare class AutomationHooks {
533
467
  * Triggers an automation task when tests fail (or on every run if onFailureOnly is false).
534
468
  */
535
469
  handleTestRun(result: TestRunResult): void;
536
- /**
537
- * Internal — fires onTestPassAfterFailure when a specific runner transitions
538
- * from failing → passing. Called from handleTestRun after outcome state update.
539
- */
540
- private _handleTestPassAfterFailure;
541
470
  /**
542
471
  * Called after a successful gitCommit tool call.
543
472
  * Fires the onGitCommit automation hook if configured.