@caupulican/pi-adaptative 0.81.27 → 0.81.30

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 (191) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/bundled-resources/skills/harness-self-adaptation/SKILL.md +327 -0
  3. package/dist/bundled-resources/skills/harness-self-adaptation/references/adaptation-layers.md +89 -0
  4. package/dist/core/agent-session.d.ts +20 -3
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +73 -17
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/auth-storage.d.ts +6 -0
  9. package/dist/core/auth-storage.d.ts.map +1 -1
  10. package/dist/core/auth-storage.js +35 -0
  11. package/dist/core/auth-storage.js.map +1 -1
  12. package/dist/core/autonomy/approval-gate.d.ts +1 -1
  13. package/dist/core/autonomy/approval-gate.d.ts.map +1 -1
  14. package/dist/core/autonomy/approval-gate.js +5 -1
  15. package/dist/core/autonomy/approval-gate.js.map +1 -1
  16. package/dist/core/autonomy/contracts.d.ts +2 -0
  17. package/dist/core/autonomy/contracts.d.ts.map +1 -1
  18. package/dist/core/autonomy/contracts.js.map +1 -1
  19. package/dist/core/autonomy/lane-tool-surface.d.ts +4 -0
  20. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  21. package/dist/core/autonomy/lane-tool-surface.js +31 -4
  22. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  23. package/dist/core/autonomy/lane-tracker.d.ts +6 -0
  24. package/dist/core/autonomy/lane-tracker.d.ts.map +1 -1
  25. package/dist/core/autonomy/lane-tracker.js +25 -3
  26. package/dist/core/autonomy/lane-tracker.js.map +1 -1
  27. package/dist/core/autonomy/risk-assessment.d.ts.map +1 -1
  28. package/dist/core/autonomy/risk-assessment.js +1 -1
  29. package/dist/core/autonomy/risk-assessment.js.map +1 -1
  30. package/dist/core/background-lane-controller.d.ts +34 -1
  31. package/dist/core/background-lane-controller.d.ts.map +1 -1
  32. package/dist/core/background-lane-controller.js +204 -9
  33. package/dist/core/background-lane-controller.js.map +1 -1
  34. package/dist/core/context/context-artifacts.d.ts.map +1 -1
  35. package/dist/core/context/context-artifacts.js +7 -6
  36. package/dist/core/context/context-artifacts.js.map +1 -1
  37. package/dist/core/context/context-store-retention.d.ts +12 -0
  38. package/dist/core/context/context-store-retention.d.ts.map +1 -0
  39. package/dist/core/context/context-store-retention.js +161 -0
  40. package/dist/core/context/context-store-retention.js.map +1 -0
  41. package/dist/core/context-gc.d.ts.map +1 -1
  42. package/dist/core/context-gc.js +20 -4
  43. package/dist/core/context-gc.js.map +1 -1
  44. package/dist/core/context-pipeline.d.ts +18 -15
  45. package/dist/core/context-pipeline.d.ts.map +1 -1
  46. package/dist/core/context-pipeline.js +143 -38
  47. package/dist/core/context-pipeline.js.map +1 -1
  48. package/dist/core/cost/cost-summary.d.ts +7 -1
  49. package/dist/core/cost/cost-summary.d.ts.map +1 -1
  50. package/dist/core/cost/cost-summary.js +28 -17
  51. package/dist/core/cost/cost-summary.js.map +1 -1
  52. package/dist/core/cost/daily-usage.d.ts +7 -3
  53. package/dist/core/cost/daily-usage.d.ts.map +1 -1
  54. package/dist/core/cost/daily-usage.js +10 -5
  55. package/dist/core/cost/daily-usage.js.map +1 -1
  56. package/dist/core/delegation/worker-result.d.ts.map +1 -1
  57. package/dist/core/delegation/worker-result.js +3 -0
  58. package/dist/core/delegation/worker-result.js.map +1 -1
  59. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  60. package/dist/core/delegation/worker-runner.js +70 -5
  61. package/dist/core/delegation/worker-runner.js.map +1 -1
  62. package/dist/core/export-html/template.js +2 -1
  63. package/dist/core/extensions/loader.d.ts.map +1 -1
  64. package/dist/core/extensions/loader.js +52 -2
  65. package/dist/core/extensions/loader.js.map +1 -1
  66. package/dist/core/extensions/runner.d.ts.map +1 -1
  67. package/dist/core/extensions/runner.js +21 -19
  68. package/dist/core/extensions/runner.js.map +1 -1
  69. package/dist/core/extensions/types.d.ts +5 -0
  70. package/dist/core/extensions/types.d.ts.map +1 -1
  71. package/dist/core/extensions/types.js.map +1 -1
  72. package/dist/core/failure-corpus.d.ts.map +1 -1
  73. package/dist/core/failure-corpus.js +36 -13
  74. package/dist/core/failure-corpus.js.map +1 -1
  75. package/dist/core/local-runtime-controller.d.ts +16 -0
  76. package/dist/core/local-runtime-controller.d.ts.map +1 -1
  77. package/dist/core/local-runtime-controller.js +127 -30
  78. package/dist/core/local-runtime-controller.js.map +1 -1
  79. package/dist/core/memory-controller.d.ts +2 -0
  80. package/dist/core/memory-controller.d.ts.map +1 -1
  81. package/dist/core/memory-controller.js +18 -0
  82. package/dist/core/memory-controller.js.map +1 -1
  83. package/dist/core/model-registry.d.ts +2 -0
  84. package/dist/core/model-registry.d.ts.map +1 -1
  85. package/dist/core/model-registry.js +4 -0
  86. package/dist/core/model-registry.js.map +1 -1
  87. package/dist/core/models/local-runtime.d.ts +2 -0
  88. package/dist/core/models/local-runtime.d.ts.map +1 -1
  89. package/dist/core/models/local-runtime.js +25 -14
  90. package/dist/core/models/local-runtime.js.map +1 -1
  91. package/dist/core/models/runtime-arbiter.d.ts +11 -0
  92. package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
  93. package/dist/core/models/runtime-arbiter.js +35 -13
  94. package/dist/core/models/runtime-arbiter.js.map +1 -1
  95. package/dist/core/reflection-controller.d.ts +5 -1
  96. package/dist/core/reflection-controller.d.ts.map +1 -1
  97. package/dist/core/reflection-controller.js +9 -3
  98. package/dist/core/reflection-controller.js.map +1 -1
  99. package/dist/core/runtime-builder.d.ts +19 -2
  100. package/dist/core/runtime-builder.d.ts.map +1 -1
  101. package/dist/core/runtime-builder.js +13 -5
  102. package/dist/core/runtime-builder.js.map +1 -1
  103. package/dist/core/sdk.d.ts.map +1 -1
  104. package/dist/core/sdk.js +3 -0
  105. package/dist/core/sdk.js.map +1 -1
  106. package/dist/core/session-analytics.d.ts +13 -7
  107. package/dist/core/session-analytics.d.ts.map +1 -1
  108. package/dist/core/session-analytics.js +155 -112
  109. package/dist/core/session-analytics.js.map +1 -1
  110. package/dist/core/tool-gate-controller.d.ts +3 -0
  111. package/dist/core/tool-gate-controller.d.ts.map +1 -1
  112. package/dist/core/tool-gate-controller.js +20 -15
  113. package/dist/core/tool-gate-controller.js.map +1 -1
  114. package/dist/core/tool-recovery-log-records.d.ts.map +1 -1
  115. package/dist/core/tool-recovery-log-records.js +54 -9
  116. package/dist/core/tool-recovery-log-records.js.map +1 -1
  117. package/dist/core/tool-recovery-logger.d.ts +2 -0
  118. package/dist/core/tool-recovery-logger.d.ts.map +1 -1
  119. package/dist/core/tool-recovery-logger.js +32 -13
  120. package/dist/core/tool-recovery-logger.js.map +1 -1
  121. package/dist/core/tool-recovery-stats.d.ts +15 -0
  122. package/dist/core/tool-recovery-stats.d.ts.map +1 -0
  123. package/dist/core/tool-recovery-stats.js +206 -0
  124. package/dist/core/tool-recovery-stats.js.map +1 -0
  125. package/dist/core/tool-selection/expected-utility.d.ts +51 -0
  126. package/dist/core/tool-selection/expected-utility.d.ts.map +1 -0
  127. package/dist/core/tool-selection/expected-utility.js +85 -0
  128. package/dist/core/tool-selection/expected-utility.js.map +1 -0
  129. package/dist/core/tool-selection/tool-performance-store.d.ts +82 -0
  130. package/dist/core/tool-selection/tool-performance-store.d.ts.map +1 -0
  131. package/dist/core/tool-selection/tool-performance-store.js +249 -0
  132. package/dist/core/tool-selection/tool-performance-store.js.map +1 -0
  133. package/dist/core/tool-selection/tool-selection-controller.d.ts +41 -0
  134. package/dist/core/tool-selection/tool-selection-controller.d.ts.map +1 -0
  135. package/dist/core/tool-selection/tool-selection-controller.js +199 -0
  136. package/dist/core/tool-selection/tool-selection-controller.js.map +1 -0
  137. package/dist/core/tools/delegate-status.d.ts +9 -0
  138. package/dist/core/tools/delegate-status.d.ts.map +1 -0
  139. package/dist/core/tools/delegate-status.js +61 -0
  140. package/dist/core/tools/delegate-status.js.map +1 -0
  141. package/dist/core/tools/delegate.d.ts +13 -0
  142. package/dist/core/tools/delegate.d.ts.map +1 -1
  143. package/dist/core/tools/delegate.js +28 -4
  144. package/dist/core/tools/delegate.js.map +1 -1
  145. package/dist/core/tools/run-toolkit-script.d.ts +3 -0
  146. package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
  147. package/dist/core/tools/run-toolkit-script.js +17 -7
  148. package/dist/core/tools/run-toolkit-script.js.map +1 -1
  149. package/dist/main.d.ts.map +1 -1
  150. package/dist/main.js +1 -1
  151. package/dist/main.js.map +1 -1
  152. package/dist/modes/interactive/components/bash-execution.d.ts +2 -1
  153. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  154. package/dist/modes/interactive/components/bash-execution.js +12 -1
  155. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  156. package/dist/modes/interactive/components/footer.d.ts +1 -0
  157. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  158. package/dist/modes/interactive/components/footer.js +19 -9
  159. package/dist/modes/interactive/components/footer.js.map +1 -1
  160. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  161. package/dist/modes/interactive/components/tool-execution.js +12 -2
  162. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  163. package/dist/modes/interactive/components/tool-panel-registry.d.ts +1 -0
  164. package/dist/modes/interactive/components/tool-panel-registry.d.ts.map +1 -1
  165. package/dist/modes/interactive/components/tool-panel-registry.js +18 -2
  166. package/dist/modes/interactive/components/tool-panel-registry.js.map +1 -1
  167. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  168. package/dist/modes/interactive/interactive-mode.js +18 -0
  169. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  170. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  171. package/dist/modes/rpc/jsonl.js +9 -28
  172. package/dist/modes/rpc/jsonl.js.map +1 -1
  173. package/dist/utils/streaming-lines.d.ts +20 -0
  174. package/dist/utils/streaming-lines.d.ts.map +1 -0
  175. package/dist/utils/streaming-lines.js +79 -0
  176. package/dist/utils/streaming-lines.js.map +1 -0
  177. package/docs/extensions.md +2 -0
  178. package/docs/index.md +1 -1
  179. package/docs/integration-sweep-builder-blueprint-2026-07-09.md +365 -0
  180. package/docs/integration-sweep-resume-2026-07-09.md +407 -0
  181. package/docs/self-adaptation.md +7 -0
  182. package/docs/settings.md +7 -1
  183. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  184. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  185. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  186. package/examples/extensions/sandbox/package-lock.json +2 -2
  187. package/examples/extensions/sandbox/package.json +1 -1
  188. package/examples/extensions/with-deps/package-lock.json +2 -2
  189. package/examples/extensions/with-deps/package.json +1 -1
  190. package/npm-shrinkwrap.json +12 -12
  191. package/package.json +4 -4
@@ -9,6 +9,7 @@ import { getAgentDir } from "../config.js";
9
9
  import { stripFrontmatter } from "../utils/frontmatter.js";
10
10
  import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from "./auth-guidance.js";
11
11
  import { buildForegroundEnvelope, formatForegroundEnvelopeObservation } from "./autonomy/foreground-envelope.js";
12
+ import { evaluateToolGate } from "./autonomy/gates.js";
12
13
  import { AutonomyTelemetry } from "./autonomy-telemetry.js";
13
14
  import { BackgroundLaneController } from "./background-lane-controller.js";
14
15
  import { BashExecutionController } from "./bash-execution-controller.js";
@@ -49,6 +50,8 @@ import { TOOL_RECOVERY_EVENT_LOG_FILE } from "./tool-recovery-log-records.js";
49
50
  import { ToolRecoveryLogger } from "./tool-recovery-logger.js";
50
51
  import { formatToolRepairHealthReport } from "./tool-repair-health.js";
51
52
  import { resolveCurrentToolRepairSettings } from "./tool-repair-settings.js";
53
+ import { ToolPerformanceStore } from "./tool-selection/tool-performance-store.js";
54
+ import { ToolSelectionController } from "./tool-selection/tool-selection-controller.js";
52
55
  // ============================================================================
53
56
  // Stream-idle watchdog wiring
54
57
  // ============================================================================
@@ -154,6 +157,7 @@ export class AgentSession {
154
157
  _bash;
155
158
  _profileFilter;
156
159
  _toolGate;
160
+ _toolSelection;
157
161
  _extensionRunner;
158
162
  _turnIndex = 0;
159
163
  _currentForegroundEnvelope;
@@ -368,6 +372,7 @@ export class AgentSession {
368
372
  getEvidenceBundleSnapshot: () => this.getEvidenceBundleSnapshot(),
369
373
  saveEvidenceBundleSnapshot: (bundle) => this.saveEvidenceBundleSnapshot(bundle),
370
374
  saveWorkerResultSnapshot: (result, request) => this.saveWorkerResultSnapshot(result, request),
375
+ readMemoryForLane: (query) => this._memory.readMemoryForLane(query),
371
376
  addSpawnedUsage: (usage, opts) => this.addSpawnedUsage(usage, opts),
372
377
  runIsolatedCompletion: (opts) => this.runIsolatedCompletion(opts),
373
378
  continueGoalLoop: (options) => this.continueGoalLoop(options),
@@ -402,6 +407,7 @@ export class AgentSession {
402
407
  getSessionManager: () => this.sessionManager,
403
408
  getSettingsManager: () => this.settingsManager,
404
409
  getModelRegistry: () => this._modelRegistry,
410
+ getModel: () => this.model,
405
411
  getAgentDir: () => this._agentDir,
406
412
  getCwd: () => this._cwd,
407
413
  getActiveToolNames: () => this.getActiveToolNames(),
@@ -463,8 +469,10 @@ export class AgentSession {
463
469
  isChildSession: () => this._isChildSession,
464
470
  isDisposed: () => this._disposed,
465
471
  getReflectionSignal: () => this._reflectionAbort.signal,
472
+ resolveTextToolCallProtocol: (model) => this._textProtocolFlag(model),
466
473
  archivePromotedSkill: (name) => this.archivePromotedSkill(name),
467
474
  emitAutonomyTelemetry: (event) => this._emitAutonomyTelemetry(event),
475
+ ensureModelReady: (model) => this._localRuntimeController.ensureIsolatedModelReady(model),
468
476
  addSpawnedUsage: (usage, opts) => this.addSpawnedUsage(usage, opts),
469
477
  saveLearningDecisionSnapshot: (decision) => this.saveLearningDecisionSnapshot(decision),
470
478
  });
@@ -544,6 +552,9 @@ export class AgentSession {
544
552
  getGoalStateSnapshot: () => this.getGoalStateSnapshot(),
545
553
  saveGoalStateSnapshot: (state) => this.saveGoalStateSnapshot(state),
546
554
  getContextGcReport: (messages) => this.getContextGcReport(messages),
555
+ startWorkerDelegation: (request) => this._backgroundLanes.startWorkerDelegation(request),
556
+ getWorkerLaneRecords: () => this._backgroundLanes.getLaneRecords(),
557
+ getWorkerResultSnapshots: () => this.getWorkerResultSnapshots(),
547
558
  runWorkerDelegationOnce: (request) => this.runWorkerDelegationOnce(request),
548
559
  runModelFitness: (args) => this.runModelFitness(args),
549
560
  resolveCurationModelIfFit: () => this._resolveCurationModelIfFit(),
@@ -570,6 +581,9 @@ export class AgentSession {
570
581
  const previousToolArgumentValidation = this.agent.onToolArgumentValidation;
571
582
  this.agent.onToolArgumentValidation = (event) => {
572
583
  const taggedEvent = this._tagModelAdaptationRuleTeaching(event);
584
+ if (taggedEvent.outcome === "repaired" || taggedEvent.outcome === "bounced") {
585
+ this._toolSelection.recordValidation(taggedEvent.tool, taggedEvent.outcome);
586
+ }
573
587
  previousToolArgumentValidation?.(taggedEvent);
574
588
  const logRecord = this._toolRecoveryLogger.recordToolArgumentValidation(taggedEvent);
575
589
  if (!logRecord)
@@ -629,12 +643,41 @@ export class AgentSession {
629
643
  isExplicitThinking: () => this._isExplicitThinking,
630
644
  setThinkingLevel: (level) => this.setThinkingLevel(level, { persistSettings: false }),
631
645
  });
646
+ this._toolSelection = new ToolSelectionController({
647
+ store: ToolPerformanceStore.forAgentDir(this._agentDir),
648
+ getModelRef: () => {
649
+ const model = this.model;
650
+ return model ? formatModelRouterModel(model) : "unknown";
651
+ },
652
+ getActiveTools: () => {
653
+ const activeNames = new Set(this.getActiveToolNames());
654
+ return this.getAllTools()
655
+ .filter((tool) => activeNames.has(tool.name))
656
+ .map((tool) => ({
657
+ name: tool.name,
658
+ description: tool.description,
659
+ parameters: tool.parameters,
660
+ }));
661
+ },
662
+ isCandidateAllowed: (toolName) => {
663
+ const envelope = this.capabilityEnvelope;
664
+ if (!envelope)
665
+ return true;
666
+ return (evaluateToolGate({
667
+ toolName,
668
+ args: {},
669
+ cwd: this._cwd,
670
+ envelope,
671
+ }).outcome === "allow");
672
+ },
673
+ });
632
674
  this._toolGate = new ToolGateController({
633
675
  maybeEscalateToolCall: (toolName, args) => this._modelRouter.maybeEscalateToolCall(toolName, args),
634
676
  getCwd: () => this._cwd,
635
677
  getCapabilityEnvelope: () => this.capabilityEnvelope,
636
678
  recordGateOutcome: (outcome) => this._recordGateOutcome(outcome),
637
679
  getExtensionRunner: () => this._extensionRunner,
680
+ getToolSelectionController: () => this._toolSelection,
638
681
  });
639
682
  // Always subscribe to agent events for internal handling
640
683
  // (session persistence, extensions, auto-compaction, retry logic)
@@ -695,17 +738,7 @@ export class AgentSession {
695
738
  if (controller.signal.aborted)
696
739
  return;
697
740
  if (model.provider === OLLAMA_PROVIDER || model.provider === HF_TRANSFORMERS_PROVIDER) {
698
- await this._localRuntimeController.ensureRouteModelReady({
699
- decision: {
700
- tier: "cheap",
701
- risk: "read-only",
702
- confidence: 1,
703
- reasonCode: "prefix_warmer",
704
- reasons: ["prefix warmer residency"],
705
- model: `${model.provider}/${model.id}`,
706
- },
707
- model,
708
- });
741
+ await this._localRuntimeController.ensureIsolatedModelReady(model);
709
742
  }
710
743
  if (controller.signal.aborted)
711
744
  return;
@@ -1436,6 +1469,16 @@ export class AgentSession {
1436
1469
  _buildCompactionPreDigest() {
1437
1470
  return this._pipeline.buildCompactionPreDigest();
1438
1471
  }
1472
+ /** Drop provider-owned request/continuation caches whose prefix was invalidated by compaction. */
1473
+ _refreshAfterCompaction() {
1474
+ this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
1475
+ try {
1476
+ cleanupSessionResources(this.sessionId);
1477
+ }
1478
+ catch {
1479
+ // Provider cache cleanup is best-effort and must not turn an applied compaction into a failure.
1480
+ }
1481
+ }
1439
1482
  /**
1440
1483
  * Context composition dashboard data: decomposes the per-request payload (system prompt, tool
1441
1484
  * schemas, extension contributions, message classes incl. GC/policy stubs and recall pages)
@@ -1752,6 +1795,7 @@ export class AgentSession {
1752
1795
  await this._extensionRunner.emit({ type: "agent_end", messages: event.messages });
1753
1796
  }
1754
1797
  else if (event.type === "turn_start") {
1798
+ this._toolSelection.startTurn();
1755
1799
  this._refreshForegroundEnvelope();
1756
1800
  const extensionEvent = {
1757
1801
  type: "turn_start",
@@ -2018,8 +2062,9 @@ export class AgentSession {
2018
2062
  * Also rebuilds the system prompt to reflect the new tool set.
2019
2063
  * Changes take effect on the next agent turn.
2020
2064
  *
2021
- * artifact_retrieve is auto-activated as a companion whenever grep or find ends up
2022
- * in the resulting active set and artifact_retrieve is registered (i.e. not excluded/
2065
+ * artifact_retrieve is auto-activated as a companion whenever an artifact-producing tool
2066
+ * (grep, find, or run_toolkit_script) ends up in the resulting active set and artifact_retrieve
2067
+ * is registered (i.e. not excluded/
2023
2068
  * blocked/outside an allowlist -- the registry itself is built with that same filter,
2024
2069
  * so registry presence already tracks "allowed"). This is enforced here, not just in
2025
2070
  * the settings/profile refresh flow, because this method is a public, extension-
@@ -2050,9 +2095,14 @@ export class AgentSession {
2050
2095
  for (const name of capabilityFiltered) {
2051
2096
  addIfRegistered(name);
2052
2097
  }
2053
- if (validToolNames.includes("grep") || validToolNames.includes("find")) {
2098
+ if (validToolNames.includes("grep") ||
2099
+ validToolNames.includes("find") ||
2100
+ validToolNames.includes("run_toolkit_script")) {
2054
2101
  addIfRegistered("artifact_retrieve");
2055
2102
  }
2103
+ if (validToolNames.includes("delegate")) {
2104
+ addIfRegistered("delegate_status");
2105
+ }
2056
2106
  this.agent.state.tools = tools;
2057
2107
  // Rebuild base system prompt with new tool set
2058
2108
  this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
@@ -2344,6 +2394,11 @@ export class AgentSession {
2344
2394
  if (!requestModel) {
2345
2395
  throw new Error(formatNoModelSelectedMessage());
2346
2396
  }
2397
+ // A manual/default local model has no RouteDecision, so the router readiness gate above is
2398
+ // intentionally a no-op. It still needs the same managed-runtime boot/residency guarantee.
2399
+ if (!resolvedRouteInfo) {
2400
+ await this._localRuntimeController.ensureForegroundModelReady(requestModel);
2401
+ }
2347
2402
  if (!this._modelRegistry.hasConfiguredAuth(requestModel)) {
2348
2403
  const isOAuth = this._modelRegistry.isUsingOAuth(requestModel);
2349
2404
  if (isOAuth) {
@@ -2454,6 +2509,7 @@ export class AgentSession {
2454
2509
  this._memory.recordRecallOutcome(injectedRecall, recallQuery, responseText);
2455
2510
  }
2456
2511
  }
2512
+ this._backgroundLanes.drainQueuedWorkerDelegations();
2457
2513
  this._backgroundLanes.scheduleGoalAutoContinueFromIdle(options);
2458
2514
  this._backgroundLanes.scheduleResearchLaneFromIdle();
2459
2515
  }
@@ -2850,7 +2906,7 @@ export class AgentSession {
2850
2906
  }
2851
2907
  if (extensionCompaction) {
2852
2908
  this.sessionManager.appendCompaction(extensionCompaction.summary, extensionCompaction.firstKeptEntryId, extensionCompaction.tokensBefore, extensionCompaction.details, true);
2853
- this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
2909
+ this._refreshAfterCompaction();
2854
2910
  const savedCompactionEntry = this.sessionManager
2855
2911
  .getEntries()
2856
2912
  .find((entry) => entry.type === "compaction" && entry.summary === extensionCompaction.summary);
@@ -2901,7 +2957,7 @@ export class AgentSession {
2901
2957
  if (signal.aborted)
2902
2958
  throw new Error("Compaction cancelled");
2903
2959
  this.sessionManager.appendCompaction(result.summary, result.firstKeptEntryId, result.tokensBefore, result.details, fromExtension);
2904
- this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
2960
+ this._refreshAfterCompaction();
2905
2961
  const savedCompactionEntry = this.sessionManager
2906
2962
  .getEntries()
2907
2963
  .find((entry) => entry.type === "compaction" && entry.summary === result.summary);
@@ -3185,7 +3241,7 @@ export class AgentSession {
3185
3241
  apply: async (result) => {
3186
3242
  lastCompaction = result;
3187
3243
  this.sessionManager.appendCompaction(result.summary, result.firstKeptEntryId, result.tokensBefore, result.details, fromExtension);
3188
- this.agent.state.messages = this.sessionManager.buildSessionContext().messages;
3244
+ this._refreshAfterCompaction();
3189
3245
  const newEntries = this.sessionManager.getEntries();
3190
3246
  const savedCompactionEntry = newEntries.find((entry) => entry.type === "compaction" && entry.summary === result.summary);
3191
3247
  if (this._extensionRunner && savedCompactionEntry) {