@r3b1s/pi-repair-layer 0.2.0 → 0.3.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 (76) hide show
  1. package/README.md +159 -293
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/{index.ts → dist/index.js} +2 -1
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/core.d.ts +8 -0
  7. package/dist/src/core.d.ts.map +1 -0
  8. package/dist/src/core.js +7 -0
  9. package/dist/src/core.js.map +1 -0
  10. package/dist/src/envelope.d.ts +21 -0
  11. package/dist/src/envelope.d.ts.map +1 -0
  12. package/dist/src/envelope.js +158 -0
  13. package/dist/src/envelope.js.map +1 -0
  14. package/dist/src/grammar-recovery.d.ts +105 -0
  15. package/dist/src/grammar-recovery.d.ts.map +1 -0
  16. package/dist/src/grammar-recovery.js +1052 -0
  17. package/dist/src/grammar-recovery.js.map +1 -0
  18. package/dist/src/grammar.d.ts +2 -0
  19. package/dist/src/grammar.d.ts.map +1 -0
  20. package/dist/src/grammar.js +2 -0
  21. package/dist/src/grammar.js.map +1 -0
  22. package/dist/src/index.d.ts +36 -0
  23. package/dist/src/index.d.ts.map +1 -0
  24. package/dist/src/index.js +558 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/lifecycle.d.ts +34 -0
  27. package/dist/src/lifecycle.d.ts.map +1 -0
  28. package/dist/src/lifecycle.js +133 -0
  29. package/dist/src/lifecycle.js.map +1 -0
  30. package/dist/src/pi.d.ts +19 -0
  31. package/dist/src/pi.d.ts.map +1 -0
  32. package/dist/src/pi.js +38 -0
  33. package/dist/src/pi.js.map +1 -0
  34. package/dist/src/pipeline.d.ts +10 -0
  35. package/dist/src/pipeline.d.ts.map +1 -0
  36. package/dist/src/pipeline.js +166 -0
  37. package/dist/src/pipeline.js.map +1 -0
  38. package/dist/src/policy.d.ts +16 -0
  39. package/dist/src/policy.d.ts.map +1 -0
  40. package/dist/src/policy.js +31 -0
  41. package/dist/src/policy.js.map +1 -0
  42. package/dist/src/preprocess.d.ts +37 -0
  43. package/dist/src/preprocess.d.ts.map +1 -0
  44. package/dist/src/preprocess.js +216 -0
  45. package/dist/src/preprocess.js.map +1 -0
  46. package/dist/src/repair-engine.d.ts +91 -0
  47. package/dist/src/repair-engine.d.ts.map +1 -0
  48. package/dist/src/repair-engine.js +457 -0
  49. package/dist/src/repair-engine.js.map +1 -0
  50. package/dist/src/settings.d.ts +38 -0
  51. package/dist/src/settings.d.ts.map +1 -0
  52. package/dist/src/settings.js +87 -0
  53. package/dist/src/settings.js.map +1 -0
  54. package/dist/src/tables.d.ts +16 -0
  55. package/dist/src/tables.d.ts.map +1 -0
  56. package/dist/src/tables.js +302 -0
  57. package/dist/src/tables.js.map +1 -0
  58. package/dist/src/types.d.ts +52 -0
  59. package/dist/src/types.d.ts.map +1 -0
  60. package/dist/src/types.js +2 -0
  61. package/dist/src/types.js.map +1 -0
  62. package/dist/src/value-strips.d.ts +52 -0
  63. package/dist/src/value-strips.d.ts.map +1 -0
  64. package/dist/src/value-strips.js +191 -0
  65. package/dist/src/value-strips.js.map +1 -0
  66. package/docs/how-it-works.md +227 -0
  67. package/docs/operations.md +141 -0
  68. package/docs/research.md +247 -0
  69. package/docs/tool-owner-integration.md +327 -0
  70. package/package.json +31 -6
  71. package/src/grammar-recovery.ts +0 -1269
  72. package/src/index.ts +0 -621
  73. package/src/repair-engine.ts +0 -498
  74. package/src/settings.ts +0 -95
  75. package/src/tables.ts +0 -184
  76. package/src/value-strips.ts +0 -218
@@ -0,0 +1,558 @@
1
+ /**
2
+ * pi-repair-layer — tool-input repair for pi's built-in tools.
3
+ *
4
+ * Why this hooks where it does: pi's agent loop runs
5
+ *
6
+ * tool.prepareArguments(raw) -> validateToolArguments(...) -> tool_call event -> execute
7
+ *
8
+ * A validation failure short-circuits to an error result before the
9
+ * `tool_call` extension event ever fires, so event handlers can never see
10
+ * (let alone repair) malformed input. The only pre-validation seam is
11
+ * `prepareArguments`, which extensions reach by overriding a built-in tool
12
+ * with `pi.registerTool({ same name })`. Each override spreads the original
13
+ * tool definition — renderers, prompt metadata, execution — and replaces only
14
+ * `prepareArguments` (chaining the tool's own shim first) plus thin wrappers
15
+ * around `execute` and `renderResult`.
16
+ *
17
+ * Feedback paths per repaired call:
18
+ * - Model: `<repair_note>` lines prepended to the tool result content, seen
19
+ * on the very next inference step of the same agent turn.
20
+ * - User: a `🔨 ✓ input repaired (...)` line appended to the tool row in the
21
+ * TUI (plus the note text if enabled) — toggle both via /repair-settings.
22
+ * - Telemetry: local-only JSONL, summarized by /repair-stats.
23
+ *
24
+ * Unrepairable input (still invalid after repairs) raises a model-readable
25
+ * retry message instead of passing through, because pi's Value.Convert would
26
+ * otherwise coerce it into garbage (null -> "null") and execute it anyway.
27
+ *
28
+ * Env:
29
+ * PI_TOOL_REPAIR_LOG=1 log repair decisions to stderr
30
+ * PI_TOOL_REPAIR_TELEMETRY=off disable telemetry (or =<path> to relocate it)
31
+ * PI_TOOL_REPAIR_PASSTHROUGH=1 on unrepairable input, defer to pi's native
32
+ * validation instead of raising the retry error
33
+ */
34
+ import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
35
+ import { dirname, join } from "node:path";
36
+ import { createBashToolDefinition, createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, getAgentDir, } from "@earendil-works/pi-coding-agent";
37
+ import { wrapTextWithAnsi } from "@earendil-works/pi-tui";
38
+ import { modelLeaksGrammar, recoverGrammarLeaks, } from "./grammar-recovery.js";
39
+ import { attachRepairNotes, RepairLifecycle, } from "./lifecycle.js";
40
+ import { runRepairPipeline } from "./pipeline.js";
41
+ import { loadDisplaySettings, saveDisplaySettings, } from "./settings.js";
42
+ import { PIPELINE_PREPROCESSORS, REPAIR_CONFIGS } from "./tables.js";
43
+ const BUILTIN_FACTORIES = {
44
+ read: createReadToolDefinition,
45
+ bash: createBashToolDefinition,
46
+ edit: createEditToolDefinition,
47
+ write: createWriteToolDefinition,
48
+ grep: createGrepToolDefinition,
49
+ find: createFindToolDefinition,
50
+ ls: createLsToolDefinition,
51
+ };
52
+ const REPAIR_ENTRY_TYPE = "tool-repair";
53
+ function telemetryPath() {
54
+ const override = process.env.PI_TOOL_REPAIR_TELEMETRY;
55
+ if (override === "off" || override === "0" || override === "false")
56
+ return undefined;
57
+ if (override)
58
+ return override;
59
+ return join(getAgentDir(), "tool-repair", "telemetry.jsonl");
60
+ }
61
+ function diagnosticsEnabled() {
62
+ const value = process.env.PI_TOOL_REPAIR_LOG;
63
+ return (value !== undefined && value !== "" && value !== "0" && value !== "false");
64
+ }
65
+ function passthroughEnabled() {
66
+ const value = process.env.PI_TOOL_REPAIR_PASSTHROUGH;
67
+ return (value !== undefined && value !== "" && value !== "0" && value !== "false");
68
+ }
69
+ /**
70
+ * Wraps the built-in result component and appends the repair indicator lines.
71
+ * The inner component is threaded back through `context.lastComponent` on
72
+ * re-renders because built-in renderers reuse it (`lastComponent ?? new Text`)
73
+ * without instanceof checks.
74
+ */
75
+ class RepairIndicatorComponent {
76
+ inner;
77
+ info;
78
+ theme;
79
+ settings;
80
+ render(width) {
81
+ const lines = this.inner?.render(width) ?? [];
82
+ if (!this.info || !this.settings?.showIndicator)
83
+ return lines;
84
+ const muted = (text) => {
85
+ try {
86
+ return this.theme?.fg ? this.theme.fg("muted", text) : text;
87
+ }
88
+ catch {
89
+ return text;
90
+ }
91
+ };
92
+ const added = wrapTextWithAnsi(muted(`🔨 ✓ input repaired (${this.info.rules.join(", ")})`), width);
93
+ if (this.settings.showNotes) {
94
+ for (const note of this.info.notes) {
95
+ added.push(...wrapTextWithAnsi(muted(` ↳ ${note}`), width));
96
+ }
97
+ }
98
+ return [...lines, ...added];
99
+ }
100
+ }
101
+ export default function toolRepairExtension(pi) {
102
+ let currentModelId;
103
+ let registeredCwd;
104
+ const displaySettings = loadDisplaySettings();
105
+ const lifecycle = new RepairLifecycle();
106
+ const repairInfoByCallId = new Map();
107
+ const stashRepair = (tool, args, rules, notes, stages, fingerprint) => {
108
+ lifecycle.enqueue(tool, args, {
109
+ rules,
110
+ notes,
111
+ stages,
112
+ profile: displaySettings.policyProfile,
113
+ model: currentModelId,
114
+ outcome: "repaired",
115
+ fingerprint,
116
+ });
117
+ };
118
+ const logTelemetry = (record) => {
119
+ const path = telemetryPath();
120
+ if (!path)
121
+ return;
122
+ try {
123
+ mkdirSync(dirname(path), { recursive: true });
124
+ appendFileSync(path, `${JSON.stringify(record)}\n`);
125
+ }
126
+ catch {
127
+ // Telemetry must never break tool execution.
128
+ }
129
+ };
130
+ const diag = (tool, result) => {
131
+ if (!diagnosticsEnabled())
132
+ return;
133
+ const rules = result.changes.length > 0
134
+ ? [...new Set(result.changes.map((change) => change.ruleId))].join(",")
135
+ : "none";
136
+ process.stderr.write(`[pi-repair] tool=${tool} outcome=${result.outcome} rules=${rules}${result.issueSummary ? ` issues=${result.issueSummary}` : ""}\n`);
137
+ };
138
+ const registerOverrides = (cwd) => {
139
+ if (registeredCwd === cwd)
140
+ return;
141
+ registeredCwd = cwd;
142
+ for (const [name, factory] of Object.entries(BUILTIN_FACTORIES)) {
143
+ const original = factory(cwd);
144
+ const config = REPAIR_CONFIGS[name];
145
+ const originalPrepare = original.prepareArguments;
146
+ const originalRenderResult = original.renderResult?.bind(original);
147
+ pi.registerTool({
148
+ ...original,
149
+ prepareArguments(raw) {
150
+ const result = runRepairPipeline({
151
+ input: raw,
152
+ config: {
153
+ toolName: name,
154
+ schema: original.parameters,
155
+ policy: displaySettings.policyProfile,
156
+ modelId: currentModelId,
157
+ ownerPrepareArguments: originalPrepare,
158
+ preprocessors: PIPELINE_PREPROCESSORS[name],
159
+ legacyConfig: config,
160
+ onObservation(observation) {
161
+ logTelemetry({
162
+ ts: new Date().toISOString(),
163
+ tool: name,
164
+ model: currentModelId,
165
+ outcome: "observed",
166
+ rules: [observation.ruleId],
167
+ channel: "tool",
168
+ profile: displaySettings.policyProfile,
169
+ stages: [observation.stage],
170
+ observation: true,
171
+ });
172
+ },
173
+ },
174
+ });
175
+ if (result.outcome === "valid")
176
+ return result.args;
177
+ diag(name, result);
178
+ const rules = [
179
+ ...new Set(result.changes.map((change) => change.ruleId)),
180
+ ];
181
+ const notes = result.changes.map((change) => change.note);
182
+ const stages = [
183
+ ...new Set(result.changes.map((change) => change.stage)),
184
+ ];
185
+ logTelemetry({
186
+ ts: new Date().toISOString(),
187
+ tool: name,
188
+ model: currentModelId,
189
+ outcome: result.outcome,
190
+ rules,
191
+ issues: result.issueSummary,
192
+ fingerprint: result.fingerprint,
193
+ profile: result.policy,
194
+ stages,
195
+ });
196
+ if (result.outcome === "repaired") {
197
+ stashRepair(name, result.args, rules, notes, stages, result.fingerprint);
198
+ return result.args;
199
+ }
200
+ // Unrepairable. Raise a model-readable retry error: pi's loop turns
201
+ // it into an error tool result. Passing the input through instead
202
+ // would let Value.Convert coerce it (null -> "null") and execute.
203
+ if (result.retryMessage && !passthroughEnabled()) {
204
+ throw new Error(result.retryMessage);
205
+ }
206
+ return raw;
207
+ },
208
+ ...(originalRenderResult
209
+ ? {
210
+ renderResult(result, options, theme, context) {
211
+ const info = repairInfoByCallId.get(context.toolCallId);
212
+ const last = context.lastComponent;
213
+ const wrapper = last instanceof RepairIndicatorComponent
214
+ ? last
215
+ : info
216
+ ? new RepairIndicatorComponent()
217
+ : undefined;
218
+ if (!wrapper)
219
+ return originalRenderResult(result, options, theme, context);
220
+ wrapper.inner = originalRenderResult(result, options, theme, {
221
+ ...context,
222
+ lastComponent: wrapper.inner,
223
+ });
224
+ wrapper.info = info;
225
+ wrapper.theme = theme;
226
+ wrapper.settings = displaySettings;
227
+ return wrapper;
228
+ },
229
+ }
230
+ : {}),
231
+ });
232
+ }
233
+ };
234
+ pi.on("session_start", async (_event, ctx) => {
235
+ currentModelId = ctx.model?.id;
236
+ registerOverrides(ctx.cwd);
237
+ // Restore indicators for repairs recorded earlier in this session
238
+ // (survives /reload and session resume).
239
+ try {
240
+ for (const entry of ctx.sessionManager.getEntries()) {
241
+ const e = entry;
242
+ if (e.type === "custom" &&
243
+ e.customType === REPAIR_ENTRY_TYPE &&
244
+ typeof e.data?.toolCallId === "string") {
245
+ repairInfoByCallId.set(e.data.toolCallId, {
246
+ rules: Array.isArray(e.data.rules) ? e.data.rules : [],
247
+ notes: [],
248
+ stages: Array.isArray(e.data.stages) ? e.data.stages : [],
249
+ profile: typeof e.data.profile === "string" ? e.data.profile : undefined,
250
+ model: typeof e.data.model === "string" ? e.data.model : undefined,
251
+ outcome: e.data.outcome === "repaired" || e.data.outcome === "recovered"
252
+ ? e.data.outcome
253
+ : undefined,
254
+ fingerprint: typeof e.data.fingerprint === "string"
255
+ ? e.data.fingerprint
256
+ : undefined,
257
+ });
258
+ }
259
+ }
260
+ }
261
+ catch {
262
+ // Older pi versions may not expose entries here; indicators just start fresh.
263
+ }
264
+ });
265
+ pi.on("model_select", async (event, ctx) => {
266
+ currentModelId =
267
+ event.model?.id ??
268
+ ctx.model?.id ??
269
+ currentModelId;
270
+ });
271
+ pi.on("tool_call", async (event) => {
272
+ const repair = lifecycle.correlate(event.toolName, event.input, event.toolCallId);
273
+ if (!repair)
274
+ return undefined;
275
+ repairInfoByCallId.set(event.toolCallId, repair);
276
+ try {
277
+ pi.appendEntry(REPAIR_ENTRY_TYPE, {
278
+ toolCallId: event.toolCallId,
279
+ tool: event.toolName,
280
+ rules: repair.rules,
281
+ stages: repair.stages,
282
+ profile: repair.profile,
283
+ model: repair.model,
284
+ outcome: repair.outcome,
285
+ fingerprint: repair.fingerprint,
286
+ });
287
+ }
288
+ catch {
289
+ // Persistence is best-effort and intentionally excludes values/notes.
290
+ }
291
+ return undefined;
292
+ });
293
+ pi.on("tool_result", async (event) => {
294
+ const repair = lifecycle.take(event.toolCallId);
295
+ if (!repair || repair.notes.length === 0)
296
+ return undefined;
297
+ return {
298
+ content: attachRepairNotes(event.content, repair.notes),
299
+ };
300
+ });
301
+ pi.on("session_shutdown", async () => {
302
+ lifecycle.clear();
303
+ repairInfoByCallId.clear();
304
+ });
305
+ const safeGetActiveTools = () => {
306
+ try {
307
+ return (pi.getActiveTools?.() ?? []);
308
+ }
309
+ catch {
310
+ return [];
311
+ }
312
+ };
313
+ // Grammar-leak recovery: on message_end, strip tool-call grammar the model
314
+ // printed as text and — in recover mode — promote it to real toolCalls that
315
+ // execute the same turn (docs/research.md Claim 4). Promotion is gated on
316
+ // stopReason "stop" (Claim 7); stripping is allowed on any stopReason.
317
+ pi.on("message_end", async (event, _ctx) => {
318
+ const mode = displaySettings.grammarRecovery;
319
+ if (mode === "off")
320
+ return undefined;
321
+ const message = event
322
+ .message;
323
+ if (message?.role !== "assistant")
324
+ return undefined;
325
+ if (!modelLeaksGrammar(currentModelId))
326
+ return undefined;
327
+ const allowed = displaySettings.grammarAllowedTools;
328
+ const knownTools = new Set(allowed.length > 0 ? allowed : safeGetActiveTools());
329
+ const result = recoverGrammarLeaks(message, {
330
+ mode,
331
+ knownTools,
332
+ requireKnownTool: true,
333
+ unknownToolText: displaySettings.unknownGrammarText,
334
+ });
335
+ if (!result.changed) {
336
+ if (result.observed) {
337
+ logTelemetry({
338
+ ts: new Date().toISOString(),
339
+ model: currentModelId,
340
+ outcome: "observed",
341
+ rules: ["grammarObserve"],
342
+ channel: "message",
343
+ grammar: result.detectedGrammars.join(",") || undefined,
344
+ profile: displaySettings.policyProfile,
345
+ stages: ["grammar"],
346
+ observation: true,
347
+ });
348
+ }
349
+ return undefined;
350
+ }
351
+ if (result.promoted) {
352
+ // Tool-keyed telemetry plus direct call-ID association lets the global
353
+ // result hook annotate built-in and cooperating custom-tool calls.
354
+ for (const [index, call] of result.recoveredCalls.entries()) {
355
+ const note = `Recovered a leaked ${call.grammar} tool call for "${call.name}" that the model printed as text instead of emitting a real tool call. Emit a proper tool call next time.`;
356
+ const callId = result.promotedCallIds[index];
357
+ if (callId) {
358
+ const feedback = {
359
+ rules: [`grammarRecovery:${call.grammar}`],
360
+ notes: [note],
361
+ stages: ["grammar"],
362
+ profile: displaySettings.policyProfile,
363
+ model: currentModelId,
364
+ outcome: "recovered",
365
+ };
366
+ lifecycle.associate(callId, feedback);
367
+ repairInfoByCallId.set(callId, feedback);
368
+ try {
369
+ pi.appendEntry(REPAIR_ENTRY_TYPE, {
370
+ toolCallId: callId,
371
+ tool: call.name,
372
+ rules: feedback.rules,
373
+ stages: feedback.stages,
374
+ profile: feedback.profile,
375
+ model: feedback.model,
376
+ outcome: feedback.outcome,
377
+ });
378
+ }
379
+ catch {
380
+ // Persistence is best-effort and intentionally excludes values/notes.
381
+ }
382
+ }
383
+ logTelemetry({
384
+ ts: new Date().toISOString(),
385
+ tool: call.name,
386
+ model: currentModelId,
387
+ outcome: "recovered",
388
+ rules: [`grammarRecovery:${call.grammar}`],
389
+ grammar: call.grammar,
390
+ profile: displaySettings.policyProfile,
391
+ stages: ["grammar"],
392
+ });
393
+ }
394
+ }
395
+ else {
396
+ // Strip-only: no tool to key on. One message-channel event naming the
397
+ // grammar families that were stripped.
398
+ logTelemetry({
399
+ ts: new Date().toISOString(),
400
+ model: currentModelId,
401
+ outcome: "stripped",
402
+ rules: ["grammarStrip"],
403
+ channel: "message",
404
+ grammar: result.strippedGrammars.length > 0
405
+ ? result.strippedGrammars.join(",")
406
+ : undefined,
407
+ profile: displaySettings.policyProfile,
408
+ stages: ["grammar"],
409
+ });
410
+ }
411
+ // The replacement keeps the original assistant role; pi types the message
412
+ // as its own AgentMessage union, so hand it back through `any`.
413
+ return { message: result.message };
414
+ });
415
+ const nextGrammarMode = (mode) => mode === "off"
416
+ ? "observe"
417
+ : mode === "observe"
418
+ ? "strip"
419
+ : mode === "strip"
420
+ ? "recover"
421
+ : "off";
422
+ const nextProfile = (profile) => profile === "conservative"
423
+ ? "adaptive"
424
+ : profile === "adaptive"
425
+ ? "recover"
426
+ : "conservative";
427
+ pi.registerCommand("repair-settings", {
428
+ description: "Toggle the tool-repair indicator (🔨), repair-note display, and grammar recovery",
429
+ handler: async (_args, ctx) => {
430
+ for (;;) {
431
+ const profileLabel = `Policy profile: ${displaySettings.policyProfile} — conservative (observe) | adaptive (strip) | recover (promote)`;
432
+ const indicatorLabel = `Repair indicator (🔨 ✓): ${displaySettings.showIndicator ? "on" : "off"} — toggle`;
433
+ const notesLabel = `Repair note text beneath indicator: ${displaySettings.showNotes ? "on" : "off"} — toggle`;
434
+ const grammarLabel = `Grammar override: ${displaySettings.grammarRecovery} — cycle (off → observe → strip → recover)`;
435
+ const unknownLabel = `Unknown-tool grammar text: ${displaySettings.unknownGrammarText} — never executable`;
436
+ const choice = await ctx.ui.select("Tool repair display settings", [
437
+ profileLabel,
438
+ indicatorLabel,
439
+ notesLabel,
440
+ grammarLabel,
441
+ unknownLabel,
442
+ "Close",
443
+ ]);
444
+ if (choice === undefined || choice === "Close")
445
+ break;
446
+ if (choice === profileLabel) {
447
+ displaySettings.policyProfile = nextProfile(displaySettings.policyProfile);
448
+ displaySettings.grammarRecovery =
449
+ displaySettings.policyProfile === "conservative"
450
+ ? "observe"
451
+ : displaySettings.policyProfile === "recover"
452
+ ? "recover"
453
+ : "strip";
454
+ }
455
+ if (choice === indicatorLabel)
456
+ displaySettings.showIndicator = !displaySettings.showIndicator;
457
+ if (choice === notesLabel)
458
+ displaySettings.showNotes = !displaySettings.showNotes;
459
+ if (choice === grammarLabel)
460
+ displaySettings.grammarRecovery = nextGrammarMode(displaySettings.grammarRecovery);
461
+ if (choice === unknownLabel)
462
+ displaySettings.unknownGrammarText =
463
+ displaySettings.unknownGrammarText === "preserve"
464
+ ? "strip"
465
+ : "preserve";
466
+ saveDisplaySettings(displaySettings);
467
+ }
468
+ ctx.ui.notify(`Repair display: indicator ${displaySettings.showIndicator ? "on" : "off"}, notes ${displaySettings.showNotes ? "on" : "off"}, policy ${displaySettings.policyProfile}, grammar ${displaySettings.grammarRecovery}, unknown text ${displaySettings.unknownGrammarText} (applies from now on)`, "info");
469
+ },
470
+ });
471
+ pi.registerCommand("repair-stats", {
472
+ description: "Summarize tool-input repair telemetry",
473
+ handler: async (_args, ctx) => {
474
+ const path = telemetryPath();
475
+ if (!path || !existsSync(path)) {
476
+ ctx.ui.notify("No repair telemetry recorded yet.", "info");
477
+ return;
478
+ }
479
+ const records = [];
480
+ for (const line of readFileSync(path, "utf-8").split("\n")) {
481
+ if (!line.trim())
482
+ continue;
483
+ try {
484
+ records.push(JSON.parse(line));
485
+ }
486
+ catch {
487
+ // skip malformed lines
488
+ }
489
+ }
490
+ if (records.length === 0) {
491
+ ctx.ui.notify("No repair telemetry recorded yet.", "info");
492
+ return;
493
+ }
494
+ const emptyCounts = () => ({
495
+ repaired: 0,
496
+ unrepairable: 0,
497
+ recovered: 0,
498
+ });
499
+ const byTool = new Map();
500
+ const byRule = new Map();
501
+ const byModel = new Map();
502
+ const byGrammar = new Map();
503
+ let stripOnlyEvents = 0;
504
+ let toolEvents = 0;
505
+ const bump = (counts, outcome) => {
506
+ if (outcome === "repaired" ||
507
+ outcome === "unrepairable" ||
508
+ outcome === "recovered")
509
+ counts[outcome] += 1;
510
+ };
511
+ for (const record of records) {
512
+ // Records without an explicit channel are legacy tool-channel repairs.
513
+ if (record.channel === "message") {
514
+ stripOnlyEvents += 1;
515
+ for (const family of (record.grammar ?? "unknown").split(","))
516
+ byGrammar.set(family, (byGrammar.get(family) ?? 0) + 1);
517
+ }
518
+ else {
519
+ toolEvents += 1;
520
+ const key = record.tool ?? "unknown";
521
+ const tool = byTool.get(key) ?? emptyCounts();
522
+ bump(tool, record.outcome);
523
+ byTool.set(key, tool);
524
+ const model = byModel.get(record.model ?? "unknown") ?? emptyCounts();
525
+ bump(model, record.outcome);
526
+ byModel.set(record.model ?? "unknown", model);
527
+ }
528
+ for (const rule of record.rules)
529
+ byRule.set(rule, (byRule.get(rule) ?? 0) + 1);
530
+ }
531
+ const fmt = (c) => `${c.repaired} repaired, ${c.recovered} recovered, ${c.unrepairable} unrepairable`;
532
+ const lines = [
533
+ `Tool repair telemetry (${records.length} events: ${toolEvents} tool, ${stripOnlyEvents} grammar strip-only)`,
534
+ "",
535
+ "By tool:",
536
+ ];
537
+ for (const [tool, counts] of [...byTool].sort((a, b) => b[1].repaired + b[1].recovered - (a[1].repaired + a[1].recovered))) {
538
+ lines.push(` ${tool}: ${fmt(counts)}`);
539
+ }
540
+ lines.push("", "By model:");
541
+ for (const [model, counts] of [...byModel].sort((a, b) => b[1].repaired + b[1].recovered - (a[1].repaired + a[1].recovered))) {
542
+ lines.push(` ${model}: ${fmt(counts)}`);
543
+ }
544
+ if (byGrammar.size > 0) {
545
+ lines.push("", "Grammar strip-only events (message channel):");
546
+ for (const [family, count] of [...byGrammar].sort((a, b) => b[1] - a[1])) {
547
+ lines.push(` ${family}: ${count}`);
548
+ }
549
+ }
550
+ lines.push("", "Rules fired:");
551
+ for (const [rule, count] of [...byRule].sort((a, b) => b[1] - a[1])) {
552
+ lines.push(` ${rule}: ${count}`);
553
+ }
554
+ ctx.ui.notify(lines.join("\n"), "info");
555
+ },
556
+ });
557
+ }
558
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface RepairFeedback {
2
+ rules: string[];
3
+ notes: string[];
4
+ stages?: string[];
5
+ profile?: string;
6
+ model?: string;
7
+ outcome?: "repaired" | "recovered";
8
+ fingerprint?: string;
9
+ }
10
+ export interface RepairLifecycleOptions {
11
+ ttlMs?: number;
12
+ maxPending?: number;
13
+ maxAssociated?: number;
14
+ now?: () => number;
15
+ }
16
+ export declare function stableSerialize(value: unknown): string;
17
+ export declare class RepairLifecycle {
18
+ #private;
19
+ constructor(options?: RepairLifecycleOptions);
20
+ enqueue(toolName: string, args: unknown, feedback: RepairFeedback): void;
21
+ correlate(toolName: string, args: unknown, toolCallId: string): RepairFeedback | undefined;
22
+ associate(toolCallId: string, feedback: RepairFeedback): void;
23
+ peek(toolCallId: string): RepairFeedback | undefined;
24
+ take(toolCallId: string): RepairFeedback | undefined;
25
+ cleanup(): void;
26
+ clear(): void;
27
+ get pendingCount(): number;
28
+ }
29
+ export declare function formatRepairNotes(notes: readonly string[]): string;
30
+ export declare function attachRepairNotes<T extends {
31
+ type: string;
32
+ text?: string;
33
+ }>(content: readonly T[], notes: readonly string[]): T[];
34
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAcD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMtD;AAED,qBAAa,eAAe;;gBAWd,OAAO,GAAE,sBAA2B;IAOhD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYxE,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,SAAS;IAoB7B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAQ7D,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKpD,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAiBpD,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IAKb,IAAI,YAAY,IAAI,MAAM,CAEzB;CACF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACzE,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,CAAC,EAAE,CAiBL"}