@caupulican/pi-adaptative 0.81.21 → 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.
- package/CHANGELOG.md +15 -0
- package/dist/core/agent-session.d.ts +3 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +28 -21
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/failure-corpus.d.ts +10 -1
- package/dist/core/failure-corpus.d.ts.map +1 -1
- package/dist/core/failure-corpus.js +32 -26
- package/dist/core/failure-corpus.js.map +1 -1
- package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
- package/dist/core/model-router/intent-classifier.js +1 -1
- package/dist/core/model-router/intent-classifier.js.map +1 -1
- package/dist/core/model-router/route-judge.d.ts.map +1 -1
- package/dist/core/model-router/route-judge.js +10 -6
- package/dist/core/model-router/route-judge.js.map +1 -1
- package/dist/core/model-router/tool-escalation.d.ts.map +1 -1
- package/dist/core/model-router/tool-escalation.js +2 -1
- package/dist/core/model-router/tool-escalation.js.map +1 -1
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +27 -2
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/session-analytics.d.ts +7 -1
- package/dist/core/session-analytics.d.ts.map +1 -1
- package/dist/core/session-analytics.js +42 -11
- package/dist/core/session-analytics.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tool-recovery-log-records.d.ts +24 -0
- package/dist/core/tool-recovery-log-records.d.ts.map +1 -0
- package/dist/core/tool-recovery-log-records.js +63 -0
- package/dist/core/tool-recovery-log-records.js.map +1 -0
- package/dist/core/tool-recovery-log-worker.d.ts +2 -0
- package/dist/core/tool-recovery-log-worker.d.ts.map +1 -0
- package/dist/core/tool-recovery-log-worker.js +44 -0
- package/dist/core/tool-recovery-log-worker.js.map +1 -0
- package/dist/core/tool-recovery-logger.d.ts +59 -0
- package/dist/core/tool-recovery-logger.d.ts.map +1 -0
- package/dist/core/tool-recovery-logger.js +197 -0
- package/dist/core/tool-recovery-logger.js.map +1 -0
- package/dist/core/tool-repair-health.d.ts +2 -1
- package/dist/core/tool-repair-health.d.ts.map +1 -1
- package/dist/core/tool-repair-health.js +13 -4
- package/dist/core/tool-repair-health.js.map +1 -1
- package/dist/core/tool-repair-settings.d.ts +1 -0
- package/dist/core/tool-repair-settings.d.ts.map +1 -1
- package/dist/core/tool-repair-settings.js +2 -1
- package/dist/core/tool-repair-settings.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +25 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/docs/settings.md +6 -4
- package/docs/tool-repair.md +8 -7
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- 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:
|
|
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.
|
|
547
|
-
|
|
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
|
|
@@ -3091,7 +3098,7 @@ export class AgentSession {
|
|
|
3091
3098
|
willRetry: false,
|
|
3092
3099
|
skipReason: "no model selected",
|
|
3093
3100
|
});
|
|
3094
|
-
return
|
|
3101
|
+
return hadQueuedMessages || this.agent.hasQueuedMessages();
|
|
3095
3102
|
}
|
|
3096
3103
|
const contextWindow = model.contextWindow;
|
|
3097
3104
|
const margin = Math.max(0, Math.floor(0.01 * contextWindow));
|
|
@@ -3180,13 +3187,13 @@ export class AgentSession {
|
|
|
3180
3187
|
if (outcome.kind === "failed") {
|
|
3181
3188
|
if (outcome.reason === "aborted") {
|
|
3182
3189
|
this._emit({ type: "compaction_end", reason, result: undefined, aborted: true, willRetry: false });
|
|
3183
|
-
return
|
|
3190
|
+
return hadQueuedMessages || this.agent.hasQueuedMessages();
|
|
3184
3191
|
}
|
|
3185
3192
|
throw new Error(outcome.reason);
|
|
3186
3193
|
}
|
|
3187
3194
|
if (extensionCancelled || signal.aborted) {
|
|
3188
3195
|
this._emit({ type: "compaction_end", reason, result: undefined, aborted: true, willRetry: false });
|
|
3189
|
-
return
|
|
3196
|
+
return hadQueuedMessages || this.agent.hasQueuedMessages();
|
|
3190
3197
|
}
|
|
3191
3198
|
const result = outcome.kind === "success" ? outcome.result : lastCompaction;
|
|
3192
3199
|
if (!result) {
|
|
@@ -3215,7 +3222,7 @@ export class AgentSession {
|
|
|
3215
3222
|
? `Context overflow recovery failed: ${errorMessage}`
|
|
3216
3223
|
: `Auto-compaction failed: ${errorMessage}`,
|
|
3217
3224
|
});
|
|
3218
|
-
return
|
|
3225
|
+
return hadQueuedMessages || this.agent.hasQueuedMessages();
|
|
3219
3226
|
}
|
|
3220
3227
|
finally {
|
|
3221
3228
|
this._autoCompactionAbortController = undefined;
|