@caupulican/pi-adaptative 0.81.22 → 0.81.23

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 (47) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/core/agent-session.d.ts +3 -1
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +24 -17
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/failure-corpus.d.ts +10 -1
  7. package/dist/core/failure-corpus.d.ts.map +1 -1
  8. package/dist/core/failure-corpus.js +32 -26
  9. package/dist/core/failure-corpus.js.map +1 -1
  10. package/dist/core/session-analytics.d.ts +7 -1
  11. package/dist/core/session-analytics.d.ts.map +1 -1
  12. package/dist/core/session-analytics.js +42 -11
  13. package/dist/core/session-analytics.js.map +1 -1
  14. package/dist/core/settings-manager.d.ts +1 -1
  15. package/dist/core/settings-manager.d.ts.map +1 -1
  16. package/dist/core/settings-manager.js.map +1 -1
  17. package/dist/core/tool-recovery-log-records.d.ts +24 -0
  18. package/dist/core/tool-recovery-log-records.d.ts.map +1 -0
  19. package/dist/core/tool-recovery-log-records.js +63 -0
  20. package/dist/core/tool-recovery-log-records.js.map +1 -0
  21. package/dist/core/tool-recovery-log-worker.d.ts +2 -0
  22. package/dist/core/tool-recovery-log-worker.d.ts.map +1 -0
  23. package/dist/core/tool-recovery-log-worker.js +44 -0
  24. package/dist/core/tool-recovery-log-worker.js.map +1 -0
  25. package/dist/core/tool-recovery-logger.d.ts +59 -0
  26. package/dist/core/tool-recovery-logger.d.ts.map +1 -0
  27. package/dist/core/tool-recovery-logger.js +197 -0
  28. package/dist/core/tool-recovery-logger.js.map +1 -0
  29. package/dist/core/tool-repair-health.d.ts +2 -1
  30. package/dist/core/tool-repair-health.d.ts.map +1 -1
  31. package/dist/core/tool-repair-health.js +13 -4
  32. package/dist/core/tool-repair-health.js.map +1 -1
  33. package/dist/core/tool-repair-settings.d.ts +1 -0
  34. package/dist/core/tool-repair-settings.d.ts.map +1 -1
  35. package/dist/core/tool-repair-settings.js +2 -1
  36. package/dist/core/tool-repair-settings.js.map +1 -1
  37. package/docs/settings.md +6 -4
  38. package/docs/tool-repair.md +8 -7
  39. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  40. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  41. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  42. package/examples/extensions/sandbox/package-lock.json +2 -2
  43. package/examples/extensions/sandbox/package.json +1 -1
  44. package/examples/extensions/with-deps/package-lock.json +2 -2
  45. package/examples/extensions/with-deps/package.json +1 -1
  46. package/npm-shrinkwrap.json +12 -12
  47. package/package.json +4 -4
@@ -44,6 +44,8 @@ import { SessionAnalytics } from "./session-analytics.js";
44
44
  import { SessionTreeNavigator } from "./session-tree-navigator.js";
45
45
  import { SystemPromptBuilder } from "./system-prompt-builder.js";
46
46
  import { ToolGateController } from "./tool-gate-controller.js";
47
+ import { TOOL_RECOVERY_EVENT_LOG_FILE } from "./tool-recovery-log-records.js";
48
+ import { ToolRecoveryLogger } from "./tool-recovery-logger.js";
47
49
  import { formatToolRepairHealthReport } from "./tool-repair-health.js";
48
50
  import { resolveCurrentToolRepairSettings } from "./tool-repair-settings.js";
49
51
  // ============================================================================
@@ -207,6 +209,8 @@ export class AgentSession {
207
209
  _modelRouter;
208
210
  _billingFailover;
209
211
  _failureCorpus;
212
+ _toolRecoveryLogger;
213
+ _toolRecoveryEventLogPath;
210
214
  _skillCuratorInstance;
211
215
  _disposed = false;
212
216
  _reflectionAbort = new AbortController();
@@ -397,8 +401,17 @@ export class AgentSession {
397
401
  addSpawnedUsage: (usage, opts) => this.addSpawnedUsage(usage, opts),
398
402
  runIsolatedCompletion: (opts) => this.runIsolatedCompletion(opts),
399
403
  });
404
+ const failureCorpusPath = join(this._agentDir, "state", "failure-corpus.jsonl");
405
+ this._toolRecoveryEventLogPath = join(this._agentDir, "state", TOOL_RECOVERY_EVENT_LOG_FILE);
406
+ const toolRepairSettings = this._toolRepairSettings();
400
407
  this._failureCorpus = new FailureCorpusRecorder({
401
- filePath: join(this._agentDir, "state", "failure-corpus.jsonl"),
408
+ filePath: failureCorpusPath,
409
+ });
410
+ this._toolRecoveryLogger = new ToolRecoveryLogger({
411
+ enabled: toolRepairSettings.logging,
412
+ sessionId: this.sessionManager.getSessionId(),
413
+ eventLogPath: this._toolRecoveryEventLogPath,
414
+ failureCorpusPath,
402
415
  });
403
416
  this._billingFailover = new BillingFailoverController({
404
417
  agent: this.agent,
@@ -538,13 +551,16 @@ export class AgentSession {
538
551
  getSessionManager: () => this.sessionManager,
539
552
  getSettingsManager: () => this.settingsManager,
540
553
  getToolDefinition: (name) => this.getToolDefinition(name),
554
+ getToolRecoveryEventLogPath: () => this._toolRecoveryEventLogPath,
541
555
  });
542
556
  const previousToolArgumentValidation = this.agent.onToolArgumentValidation;
543
557
  this.agent.onToolArgumentValidation = (event) => {
544
558
  const taggedEvent = this._tagModelAdaptationRuleTeaching(event);
545
559
  previousToolArgumentValidation?.(taggedEvent);
546
- this._analytics.recordToolArgumentValidation(taggedEvent);
547
- this._recordToolValidationBounce(taggedEvent);
560
+ const logRecord = this._toolRecoveryLogger.recordToolArgumentValidation(taggedEvent);
561
+ if (!logRecord)
562
+ return;
563
+ this._analytics.recordToolArgumentValidation(logRecord);
548
564
  this._handleTextToolProtocolValidationOutcome(taggedEvent);
549
565
  this._handleModelAdaptationTelemetry(taggedEvent);
550
566
  };
@@ -920,7 +936,6 @@ export class AgentSession {
920
936
  }
921
937
  _applyToolRepairLayerSettings() {
922
938
  const settings = this._toolRepairSettings();
923
- this.agent.toolArgumentRepairEnabled = settings.repair;
924
939
  this.agent.toolArgumentTeachEnabled = settings.teach;
925
940
  }
926
941
  _getModelAdaptationRulesForPrompt() {
@@ -1273,18 +1288,6 @@ export class AgentSession {
1273
1288
  _looksLikeTextToolProtocolAttempt(text) {
1274
1289
  return /<pi:call\b|<tool_call\b|```(?:tool|tool_call)[\s\S]*"name"\s*:/i.test(text);
1275
1290
  }
1276
- _recordToolValidationBounce(event) {
1277
- if (event.outcome !== "bounced" || !event.failureShape || event.failureShape.length === 0)
1278
- return;
1279
- this._failureCorpus.recordToolValidation({
1280
- provider: event.provider ?? this.agent.state.model?.provider,
1281
- modelId: event.model ?? this.agent.state.model?.id,
1282
- tool: event.tool,
1283
- failureModes: event.failureModes,
1284
- shape: event.failureShape,
1285
- errorKeywords: event.errorKeywords,
1286
- });
1287
- }
1288
1291
  _tagModelAdaptationRuleTeaching(event) {
1289
1292
  if (!this._toolRepairSettings().teach || event.taught !== "none")
1290
1293
  return event;
@@ -1492,7 +1495,10 @@ export class AgentSession {
1492
1495
  return formatContextCompositionDashboard(this.getContextCompositionReport());
1493
1496
  }
1494
1497
  formatToolRepairHealthReport() {
1495
- return formatToolRepairHealthReport(this._modelAdaptationStore);
1498
+ return formatToolRepairHealthReport(this._modelAdaptationStore, new Date(), this._toolRecoveryLogger.getStats());
1499
+ }
1500
+ async flushToolRecoveryLogsForTests(timeoutMs = 1000) {
1501
+ await this._toolRecoveryLogger.flush(timeoutMs);
1496
1502
  }
1497
1503
  removeToolRepairRule(model, mode) {
1498
1504
  return this._modelAdaptationStore.removeRule(model, mode);
@@ -1907,6 +1913,7 @@ export class AgentSession {
1907
1913
  .getMemoryManager()
1908
1914
  .shutdownAll()
1909
1915
  .catch(() => { });
1916
+ void this._toolRecoveryLogger.shutdown().catch(() => { });
1910
1917
  cleanupSessionResources(this.sessionId);
1911
1918
  // Best-effort final sweep for any grep/find artifact already released (reference
1912
1919
  // count zero) but not yet reclaimed -- e.g. a release whose cleanup() call failed