@caupulican/pi-adaptative 0.90.7 → 0.90.12
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 +56 -0
- package/dist/bundled-resources/skills/tool-call-repair/SKILL.md +5 -4
- package/dist/bundled-resources/skills/tool-call-repair/references/failure-grammar.md +6 -3
- package/dist/bundled-resources/skills/tool-call-repair/references/repair-catalogue.md +1 -0
- package/dist/core/agent-session-contracts.d.ts +2 -0
- package/dist/core/agent-session-contracts.d.ts.map +1 -1
- package/dist/core/agent-session-contracts.js.map +1 -1
- package/dist/core/agent-session.d.ts +8 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +84 -197
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/bounded-completion.d.ts +7 -1
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -1
- package/dist/core/autonomy/bounded-completion.js +8 -2
- package/dist/core/autonomy/bounded-completion.js.map +1 -1
- package/dist/core/autonomy/contracts.d.ts +1 -1
- package/dist/core/autonomy/contracts.d.ts.map +1 -1
- package/dist/core/autonomy/contracts.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +14 -0
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +32 -0
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/billing-failover-controller.js +1 -1
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/context/current-work-memory.d.ts +1 -1
- package/dist/core/context/current-work-memory.d.ts.map +1 -1
- package/dist/core/context/current-work-memory.js +2 -1
- package/dist/core/context/current-work-memory.js.map +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts +1 -1
- package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
- package/dist/core/context/long-term-memory-trigger.js +2 -1
- package/dist/core/context/long-term-memory-trigger.js.map +1 -1
- package/dist/core/delegation/managed-lane-controller.js +2 -2
- package/dist/core/delegation/managed-lane-controller.js.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts +13 -0
- package/dist/core/delegation/worker-agent-control-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-agent-control-coordinator.js +71 -8
- package/dist/core/delegation/worker-agent-control-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +13 -8
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-claim.d.ts.map +1 -1
- package/dist/core/delegation/worker-claim.js +14 -1
- package/dist/core/delegation/worker-claim.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts +3 -2
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +95 -42
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
- package/dist/core/delegation/worker-fleet-limits.js +5 -1
- package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
- package/dist/core/delegation/worker-lane-projection.d.ts.map +1 -1
- package/dist/core/delegation/worker-lane-projection.js +7 -4
- package/dist/core/delegation/worker-lane-projection.js.map +1 -1
- package/dist/core/delegation/worker-lifecycle.d.ts +8 -0
- package/dist/core/delegation/worker-lifecycle.d.ts.map +1 -1
- package/dist/core/delegation/worker-lifecycle.js.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.d.ts +21 -0
- package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-notification-coordinator.js +65 -2
- package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-runner.d.ts +7 -0
- package/dist/core/delegation/worker-runner.d.ts.map +1 -1
- package/dist/core/delegation/worker-runner.js +24 -7
- package/dist/core/delegation/worker-runner.js.map +1 -1
- package/dist/core/delegation/worker-system-prompt.d.ts +54 -0
- package/dist/core/delegation/worker-system-prompt.d.ts.map +1 -0
- package/dist/core/delegation/worker-system-prompt.js +85 -0
- package/dist/core/delegation/worker-system-prompt.js.map +1 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-tree-budget-coordinator.js +4 -0
- package/dist/core/delegation/worker-tree-budget-coordinator.js.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +4 -0
- package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js +28 -1
- package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
- package/dist/core/durable-custom-message-turn-controller.js +14 -3
- package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
- package/dist/core/extension-binding-controller.d.ts +107 -0
- package/dist/core/extension-binding-controller.d.ts.map +1 -0
- package/dist/core/extension-binding-controller.js +224 -0
- package/dist/core/extension-binding-controller.js.map +1 -0
- package/dist/core/extensions/extension-session-scope.d.ts +17 -0
- package/dist/core/extensions/extension-session-scope.d.ts.map +1 -0
- package/dist/core/extensions/extension-session-scope.js +135 -0
- package/dist/core/extensions/extension-session-scope.js.map +1 -0
- package/dist/core/extensions/index.d.ts +1 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -0
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/types.d.ts +2 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +2 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +10 -4
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +9 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.js +35 -9
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +10 -1
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +2 -1
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-execution-errors.d.ts +18 -0
- package/dist/core/goals/goal-execution-errors.d.ts.map +1 -0
- package/dist/core/goals/goal-execution-errors.js +21 -0
- package/dist/core/goals/goal-execution-errors.js.map +1 -0
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js +3 -3
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +11 -0
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +74 -14
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-state.js +1 -1
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
- package/dist/core/goals/goal-tool-core.js +2 -2
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/goals/natural-language-goal.d.ts +18 -0
- package/dist/core/goals/natural-language-goal.d.ts.map +1 -1
- package/dist/core/goals/natural-language-goal.js +99 -16
- package/dist/core/goals/natural-language-goal.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +10 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +3 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts +1 -1
- package/dist/core/orchestration/capability-gateway.d.ts.map +1 -1
- package/dist/core/orchestration/capability-gateway.js +4 -4
- package/dist/core/orchestration/capability-gateway.js.map +1 -1
- package/dist/core/orchestration/event-store.d.ts +8 -0
- package/dist/core/orchestration/event-store.d.ts.map +1 -1
- package/dist/core/orchestration/event-store.js +9 -7
- package/dist/core/orchestration/event-store.js.map +1 -1
- package/dist/core/orchestration/task-runtime-reducer.js +1 -1
- package/dist/core/orchestration/task-runtime-reducer.js.map +1 -1
- package/dist/core/orchestration/worker-model-pins.d.ts +7 -0
- package/dist/core/orchestration/worker-model-pins.d.ts.map +1 -1
- package/dist/core/orchestration/worker-model-pins.js +17 -1
- package/dist/core/orchestration/worker-model-pins.js.map +1 -1
- package/dist/core/provider-request-runtime-controller.d.ts +9 -0
- package/dist/core/provider-request-runtime-controller.d.ts.map +1 -1
- package/dist/core/provider-request-runtime-controller.js +17 -3
- package/dist/core/provider-request-runtime-controller.js.map +1 -1
- package/dist/core/provider-tool-text.d.ts +15 -1
- package/dist/core/provider-tool-text.d.ts.map +1 -1
- package/dist/core/provider-tool-text.js +42 -10
- package/dist/core/provider-tool-text.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts +1 -1
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +2 -1
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/resource-loader.d.ts +3 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +8 -0
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +6 -0
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +2 -1
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +7 -2
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/tasks/task-state.d.ts +1 -1
- package/dist/core/tasks/task-state.d.ts.map +1 -1
- package/dist/core/tasks/task-state.js +4 -2
- package/dist/core/tasks/task-state.js.map +1 -1
- package/dist/core/tools/delegate.d.ts +13 -0
- package/dist/core/tools/delegate.d.ts.map +1 -1
- package/dist/core/tools/delegate.js +20 -18
- package/dist/core/tools/delegate.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts +7 -0
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +8 -6
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/core/util/faultable-fs.d.ts +30 -0
- package/dist/core/util/faultable-fs.d.ts.map +1 -0
- package/dist/core/util/faultable-fs.js +30 -0
- package/dist/core/util/faultable-fs.js.map +1 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +1 -0
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
- package/dist/modes/interactive/components/activity-lane.js +4 -3
- package/dist/modes/interactive/components/activity-lane.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +2 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/report-commands.js +1 -1
- package/dist/modes/interactive/report-commands.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +3 -2
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/docs/extensions.md +1 -0
- package/docs/providers.md +3 -0
- package/docs/settings.md +4 -2
- package/docs/tool-repair.md +1 -0
- 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 +9 -4
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { basename
|
|
3
|
-
import { projectToolsForProvider } from "@caupulican/pi-agent-core";
|
|
2
|
+
import { basename } from "node:path";
|
|
3
|
+
import { NATIVE_TOOL_PROTOCOL_RESIDUE_ERROR, projectToolsForProvider } from "@caupulican/pi-agent-core";
|
|
4
4
|
import { AgentBusyError } from "@caupulican/pi-agent-core/agent";
|
|
5
5
|
import { compactToolResultDetailsForRetention } from "@caupulican/pi-agent-core/message-retention";
|
|
6
6
|
import { createCustomMessage } from "@caupulican/pi-agent-core/messages";
|
|
7
7
|
import { DEFAULT_STREAM_IDLE, withStreamIdleWatchdog, } from "@caupulican/pi-agent-core/reliability";
|
|
8
|
+
import { transcriptHasClosedToolOperation } from "@caupulican/pi-agent-core/tool-failure-memory";
|
|
8
9
|
import { getSupportedThinkingLevels, modelsAreEqual } from "@caupulican/pi-ai/models";
|
|
9
10
|
import { cleanupSessionResources } from "@caupulican/pi-ai/session-resources";
|
|
10
11
|
import { streamSimple } from "@caupulican/pi-ai/stream";
|
|
@@ -22,8 +23,9 @@ import { CompactionSupport } from "./compaction-support.js";
|
|
|
22
23
|
import { buildContextCompositionReport, formatContextCompositionDashboard, } from "./context/context-composition.js";
|
|
23
24
|
import { ContextPipeline } from "./context-pipeline.js";
|
|
24
25
|
import { downgradeReasoning, estimateTurnCostUsd, evaluateCostGuard } from "./cost-guard.js";
|
|
25
|
-
import { appendWorkerClaimSnapshot, getWorkerClaimSnapshots } from "./delegation/session-worker-claim.js";
|
|
26
|
+
import { appendWorkerClaimSnapshot, getLatestWorkerClaimSnapshot, getWorkerClaimSnapshots, } from "./delegation/session-worker-claim.js";
|
|
26
27
|
import { DurableCustomMessageTurnController } from "./durable-custom-message-turn-controller.js";
|
|
28
|
+
import { ExtensionBindingController } from "./extension-binding-controller.js";
|
|
27
29
|
import { FailureCorpusRecorder } from "./failure-corpus.js";
|
|
28
30
|
import { ForegroundRecoveryController } from "./foreground-recovery-controller.js";
|
|
29
31
|
import { ForegroundTerminalHandoffController } from "./foreground-terminal-handoff-controller.js";
|
|
@@ -116,6 +118,8 @@ export class AgentSession {
|
|
|
116
118
|
this._pendingNextTurnMessages = [];
|
|
117
119
|
this._streamingPromptSubmissionTail = Promise.resolve();
|
|
118
120
|
this._unboundToolGrantWarnings = [];
|
|
121
|
+
/** Delegate provider-prompt-guideline bounding diagnostics (root-session delegate tool only). */
|
|
122
|
+
this._delegatePromptGuidelineWarnings = [];
|
|
119
123
|
this._branchSummaryAbortController = undefined;
|
|
120
124
|
this._turnIndex = 0;
|
|
121
125
|
/** Per-agent persistent shell session identity: stable across runtime reloads, disposed with the session. */
|
|
@@ -231,7 +235,7 @@ export class AgentSession {
|
|
|
231
235
|
if (messagePersisted) {
|
|
232
236
|
this._pipeline.observeProviderUsage(this.agent.state.messages, assistantMsg);
|
|
233
237
|
}
|
|
234
|
-
if (assistantMsg.errorMessage?.startsWith(
|
|
238
|
+
if (assistantMsg.errorMessage?.startsWith(`${NATIVE_TOOL_PROTOCOL_RESIDUE_ERROR}:`)) {
|
|
235
239
|
this._goals.markProtocolFailureBlocked(assistantMsg.errorMessage);
|
|
236
240
|
}
|
|
237
241
|
this._foregroundRecovery.observeAssistant(assistantMsg);
|
|
@@ -561,6 +565,7 @@ export class AgentSession {
|
|
|
561
565
|
compaction: this._compaction,
|
|
562
566
|
context: providerRequestContext,
|
|
563
567
|
admitGoalRequest: () => this._goals.admitProviderRequest(),
|
|
568
|
+
shouldStopGoalExecutionAfterTurn: () => this._goals.hasExecutionLeaseCrossedBudgetLimit(),
|
|
564
569
|
});
|
|
565
570
|
this._toolRecoveryLogger = new ToolRecoveryLogger({
|
|
566
571
|
enabled: toolRepairSettings.logging,
|
|
@@ -595,6 +600,7 @@ export class AgentSession {
|
|
|
595
600
|
isDisposed: () => this._disposed,
|
|
596
601
|
getGoalStateSnapshot: () => this.getGoalStateSnapshot(),
|
|
597
602
|
workerInputsWillWakeParent: (workerRequestIds) => this._humanInput.workerInputsWillWakeParent(workerRequestIds),
|
|
603
|
+
getWorkerClaimSnapshot: (laneId) => getLatestWorkerClaimSnapshot(getActiveSessionBranchEntries(this.sessionManager), laneId),
|
|
598
604
|
startCustomMessageTurn: (message, lease, goalId) => this._durableCustomMessageTurns.start(message, lease, goalId),
|
|
599
605
|
sendCustomMessage: (message, options, lease) => this._sendCustomMessage(message, options, lease),
|
|
600
606
|
warn: (message) => this._emit({ type: "warning", message }),
|
|
@@ -708,15 +714,18 @@ export class AgentSession {
|
|
|
708
714
|
this._unboundToolGrantWarnings = warnings;
|
|
709
715
|
},
|
|
710
716
|
getUnboundToolGrantWarnings: () => this._unboundToolGrantWarnings,
|
|
717
|
+
setDelegatePromptGuidelineWarnings: (warnings) => {
|
|
718
|
+
this._delegatePromptGuidelineWarnings = warnings;
|
|
719
|
+
},
|
|
711
720
|
createProfileFilterReloadSnapshot: () => this._profileFilter.createReloadSnapshot(),
|
|
712
721
|
restoreProfileFilterReloadSnapshot: (snapshot) => this._profileFilter.restoreReloadSnapshot(snapshot),
|
|
713
722
|
getActiveToolNames: () => this.getActiveToolNames(),
|
|
714
723
|
setActiveToolsByName: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
715
724
|
normalizePromptSnippet: (text) => this._normalizePromptSnippet(text),
|
|
716
725
|
normalizePromptGuidelines: (guidelines) => this._normalizePromptGuidelines(guidelines),
|
|
717
|
-
bindExtensionCore: (runner) => this.
|
|
718
|
-
applyExtensionBindings: (runner) => this.
|
|
719
|
-
extendResourcesFromExtensions: (reason) => this.extendResourcesFromExtensions(reason),
|
|
726
|
+
bindExtensionCore: (runner) => this._extensionBinding.bindExtensionCore(runner),
|
|
727
|
+
applyExtensionBindings: (runner) => this._extensionBinding.applyExtensionBindings(runner),
|
|
728
|
+
extendResourcesFromExtensions: (reason) => this._extensionBinding.extendResourcesFromExtensions(reason),
|
|
720
729
|
reapplyActiveProfileModelSettings: () => this._profileFilter.reapplyActiveProfileModelSettings(),
|
|
721
730
|
notifyExtensionsChanged: () => this._notifyExtensionsChanged(),
|
|
722
731
|
getToolArtifactStore: () => this._getToolArtifactStore(),
|
|
@@ -759,6 +768,67 @@ export class AgentSession {
|
|
|
759
768
|
this._localRuntimeController.reconcile(this._collectEligibleLocalModelsForReconcile());
|
|
760
769
|
},
|
|
761
770
|
});
|
|
771
|
+
this._extensionBinding = new ExtensionBindingController({
|
|
772
|
+
getAgent: () => this.agent,
|
|
773
|
+
getExtensionRunner: () => this._extensionRunner,
|
|
774
|
+
getSessionStartEvent: () => this._sessionStartEvent,
|
|
775
|
+
getCwd: () => this._cwd,
|
|
776
|
+
getResourceLoader: () => this._resourceLoader,
|
|
777
|
+
getSessionManager: () => this.sessionManager,
|
|
778
|
+
getSettingsManager: () => this.settingsManager,
|
|
779
|
+
getModelRegistry: () => this._modelRegistry,
|
|
780
|
+
getModel: () => this.model,
|
|
781
|
+
getActiveToolNames: () => this.getActiveToolNames(),
|
|
782
|
+
getAllTools: () => this.getAllTools(),
|
|
783
|
+
setActiveToolsByName: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
784
|
+
refreshToolRegistry: () => this._refreshToolRegistry(),
|
|
785
|
+
rebuildSystemPrompt: (toolNames) => this._rebuildSystemPrompt(toolNames),
|
|
786
|
+
setBaseSystemPrompt: (prompt) => {
|
|
787
|
+
this._baseSystemPrompt = prompt;
|
|
788
|
+
},
|
|
789
|
+
getPromptTemplates: () => this.promptTemplates,
|
|
790
|
+
getThinkingLevel: () => this.thinkingLevel,
|
|
791
|
+
setThinkingLevel: (level) => this.setThinkingLevel(level),
|
|
792
|
+
setModel: (model) => this.setModel(model),
|
|
793
|
+
sendCustomMessage: (message, options) => this.sendCustomMessage(message, options),
|
|
794
|
+
sendUserMessage: (content, options) => this.sendUserMessage(content, options),
|
|
795
|
+
setSessionName: (name) => this.setSessionName(name),
|
|
796
|
+
registerMemoryProvider: (provider) => this.registerMemoryProvider(provider),
|
|
797
|
+
registerContextMemoryProvider: (provider) => this.registerContextMemoryProvider(provider),
|
|
798
|
+
addSpawnedUsage: (usage, opts) => this.addSpawnedUsage(usage, opts),
|
|
799
|
+
recordManagedLane: (event) => this._backgroundLanes.recordManagedLane(event),
|
|
800
|
+
isForegroundBusy: () => this._foregroundRecovery.isBusy,
|
|
801
|
+
getPendingMessageCount: () => this.pendingMessageCount,
|
|
802
|
+
isStreaming: () => this.isStreaming,
|
|
803
|
+
isCompacting: () => this.isCompacting,
|
|
804
|
+
getContextUsage: () => this.getContextUsage(),
|
|
805
|
+
compactForExtension: (options) => this.compactForExtension(options),
|
|
806
|
+
reload: () => this.reload(),
|
|
807
|
+
abort: () => this.abort(),
|
|
808
|
+
getSystemPrompt: () => this.systemPrompt,
|
|
809
|
+
getExtensionCommandContextActions: () => this._extensionCommandContextActions,
|
|
810
|
+
refreshCurrentModelFromRegistry: () => this._refreshCurrentModelFromRegistry(),
|
|
811
|
+
initializeMemory: () => this._memory.initialize(),
|
|
812
|
+
getExtensionUIContext: () => this._extensionUIContext,
|
|
813
|
+
setExtensionUIContext: (uiContext) => {
|
|
814
|
+
this._extensionUIContext = uiContext;
|
|
815
|
+
},
|
|
816
|
+
getExtensionMode: () => this._extensionMode,
|
|
817
|
+
setExtensionMode: (mode) => {
|
|
818
|
+
this._extensionMode = mode;
|
|
819
|
+
},
|
|
820
|
+
setExtensionCommandContextActions: (actions) => {
|
|
821
|
+
this._extensionCommandContextActions = actions;
|
|
822
|
+
},
|
|
823
|
+
getExtensionShutdownHandler: () => this._extensionShutdownHandler,
|
|
824
|
+
setExtensionShutdownHandler: (handler) => {
|
|
825
|
+
this._extensionShutdownHandler = handler;
|
|
826
|
+
},
|
|
827
|
+
getExtensionErrorListener: () => this._extensionErrorListener,
|
|
828
|
+
setExtensionErrorListener: (listener) => {
|
|
829
|
+
this._extensionErrorListener = listener;
|
|
830
|
+
},
|
|
831
|
+
});
|
|
762
832
|
this._analytics = new SessionAnalytics({
|
|
763
833
|
getState: () => this.state,
|
|
764
834
|
getMessages: () => this.messages,
|
|
@@ -1276,6 +1346,7 @@ export class AgentSession {
|
|
|
1276
1346
|
...this._profileFilter.profileDeniedResourceObservations(),
|
|
1277
1347
|
...this._profileFilter.getInertExtensionWarnings(),
|
|
1278
1348
|
...this._unboundToolGrantWarnings,
|
|
1349
|
+
...this._delegatePromptGuidelineWarnings,
|
|
1279
1350
|
// Auto-built per-turn foreground envelope (observe-only; not enforced). Falls back to a
|
|
1280
1351
|
// live preview when no turn has run yet so /context always shows the current scope.
|
|
1281
1352
|
formatForegroundEnvelopeObservation(this._currentForegroundEnvelope ?? this._buildForegroundEnvelopeFromState()),
|
|
@@ -1684,6 +1755,7 @@ export class AgentSession {
|
|
|
1684
1755
|
this.agent.subscribeToolCallHandoffRequest = undefined;
|
|
1685
1756
|
});
|
|
1686
1757
|
safely(() => this._extensionRunner.invalidate());
|
|
1758
|
+
track(() => this._resourceLoader.dispose?.() ?? Promise.resolve());
|
|
1687
1759
|
safely(() => this._disconnectFromAgent());
|
|
1688
1760
|
this._eventListeners = [];
|
|
1689
1761
|
// Let an aborted in-flight reflection reach its terminal state, then flush session-owned write
|
|
@@ -2207,7 +2279,9 @@ export class AgentSession {
|
|
|
2207
2279
|
messages.push(msg);
|
|
2208
2280
|
}
|
|
2209
2281
|
const taskStepsState = options?.internalContextType ? undefined : this.getTaskStepsStateSnapshot();
|
|
2210
|
-
const taskStepsContext = taskStepsState
|
|
2282
|
+
const taskStepsContext = taskStepsState
|
|
2283
|
+
? formatTaskStepsContext(taskStepsState, 12, transcriptHasClosedToolOperation(this.agent.state.messages))
|
|
2284
|
+
: undefined;
|
|
2211
2285
|
if (taskStepsState && taskStepsContext) {
|
|
2212
2286
|
messages.push(createCustomMessage("task_steps_context", taskStepsContext, false, { revision: taskStepsState.revision }, new Date().toISOString()));
|
|
2213
2287
|
}
|
|
@@ -2712,79 +2786,9 @@ export class AgentSession {
|
|
|
2712
2786
|
get autoCompactionEnabled() {
|
|
2713
2787
|
return this.settingsManager.getCompactionEnabled();
|
|
2714
2788
|
}
|
|
2789
|
+
/** Public entry point delegating to {@link ExtensionBindingController.bindExtensions}. */
|
|
2715
2790
|
async bindExtensions(bindings) {
|
|
2716
|
-
|
|
2717
|
-
this._extensionUIContext = bindings.uiContext;
|
|
2718
|
-
}
|
|
2719
|
-
if (bindings.mode !== undefined) {
|
|
2720
|
-
this._extensionMode = bindings.mode;
|
|
2721
|
-
}
|
|
2722
|
-
if (bindings.commandContextActions !== undefined) {
|
|
2723
|
-
this._extensionCommandContextActions = bindings.commandContextActions;
|
|
2724
|
-
}
|
|
2725
|
-
if (bindings.abortHandler !== undefined) {
|
|
2726
|
-
this._extensionAbortHandler = bindings.abortHandler;
|
|
2727
|
-
}
|
|
2728
|
-
if (bindings.shutdownHandler !== undefined) {
|
|
2729
|
-
this._extensionShutdownHandler = bindings.shutdownHandler;
|
|
2730
|
-
}
|
|
2731
|
-
if (bindings.onError !== undefined) {
|
|
2732
|
-
this._extensionErrorListener = bindings.onError;
|
|
2733
|
-
}
|
|
2734
|
-
this._applyExtensionBindings(this._extensionRunner);
|
|
2735
|
-
await this._extensionRunner.emit(this._sessionStartEvent);
|
|
2736
|
-
await this.extendResourcesFromExtensions(this._sessionStartEvent.reason === "reload" ? "reload" : "startup");
|
|
2737
|
-
// Initialize the memory subsystem after extensions have had a chance to register providers.
|
|
2738
|
-
await this._memory.initialize();
|
|
2739
|
-
}
|
|
2740
|
-
async extendResourcesFromExtensions(reason) {
|
|
2741
|
-
if (!this._extensionRunner.hasHandlers("resources_discover")) {
|
|
2742
|
-
return;
|
|
2743
|
-
}
|
|
2744
|
-
const { skillPaths, promptPaths, themePaths } = await this._extensionRunner.emitResourcesDiscover(this._cwd, reason);
|
|
2745
|
-
if (skillPaths.length === 0 && promptPaths.length === 0 && themePaths.length === 0) {
|
|
2746
|
-
return;
|
|
2747
|
-
}
|
|
2748
|
-
const extensionPaths = {
|
|
2749
|
-
skillPaths: this.buildExtensionResourcePaths(skillPaths),
|
|
2750
|
-
promptPaths: this.buildExtensionResourcePaths(promptPaths),
|
|
2751
|
-
themePaths: this.buildExtensionResourcePaths(themePaths),
|
|
2752
|
-
};
|
|
2753
|
-
this._resourceLoader.extendResources(extensionPaths);
|
|
2754
|
-
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
|
|
2755
|
-
this.agent.state.systemPrompt = this._baseSystemPrompt;
|
|
2756
|
-
}
|
|
2757
|
-
buildExtensionResourcePaths(entries) {
|
|
2758
|
-
return entries.map((entry) => {
|
|
2759
|
-
const source = this.getExtensionSourceLabel(entry.extensionPath);
|
|
2760
|
-
const baseDir = entry.extensionPath.startsWith("<") ? undefined : dirname(entry.extensionPath);
|
|
2761
|
-
return {
|
|
2762
|
-
path: entry.path,
|
|
2763
|
-
metadata: {
|
|
2764
|
-
source,
|
|
2765
|
-
scope: "temporary",
|
|
2766
|
-
origin: "top-level",
|
|
2767
|
-
baseDir,
|
|
2768
|
-
},
|
|
2769
|
-
};
|
|
2770
|
-
});
|
|
2771
|
-
}
|
|
2772
|
-
getExtensionSourceLabel(extensionPath) {
|
|
2773
|
-
if (extensionPath.startsWith("<")) {
|
|
2774
|
-
return `extension:${extensionPath.replace(/[<>]/g, "")}`;
|
|
2775
|
-
}
|
|
2776
|
-
const base = basename(extensionPath);
|
|
2777
|
-
const name = base.replace(/\.(ts|js)$/, "");
|
|
2778
|
-
return `extension:${name}`;
|
|
2779
|
-
}
|
|
2780
|
-
_applyExtensionBindings(runner) {
|
|
2781
|
-
runner.setUIContext(this._extensionUIContext);
|
|
2782
|
-
runner.setMode(this._extensionMode);
|
|
2783
|
-
runner.bindCommandContext(this._extensionCommandContextActions);
|
|
2784
|
-
this._extensionErrorUnsubscriber?.();
|
|
2785
|
-
this._extensionErrorUnsubscriber = this._extensionErrorListener
|
|
2786
|
-
? runner.onError(this._extensionErrorListener)
|
|
2787
|
-
: undefined;
|
|
2791
|
+
return this._extensionBinding.bindExtensions(bindings);
|
|
2788
2792
|
}
|
|
2789
2793
|
_refreshCurrentModelFromRegistry() {
|
|
2790
2794
|
const currentModel = this.model;
|
|
@@ -2797,123 +2801,6 @@ export class AgentSession {
|
|
|
2797
2801
|
}
|
|
2798
2802
|
this.agent.state.model = refreshedModel;
|
|
2799
2803
|
}
|
|
2800
|
-
_bindExtensionCore(runner) {
|
|
2801
|
-
const getCommands = () => {
|
|
2802
|
-
const extensionCommands = runner.getRegisteredCommands().map((command) => ({
|
|
2803
|
-
name: command.invocationName,
|
|
2804
|
-
description: command.description,
|
|
2805
|
-
source: "extension",
|
|
2806
|
-
sourceInfo: command.sourceInfo,
|
|
2807
|
-
}));
|
|
2808
|
-
const templates = this.promptTemplates.map((template) => ({
|
|
2809
|
-
name: template.name,
|
|
2810
|
-
description: template.description,
|
|
2811
|
-
source: "prompt",
|
|
2812
|
-
sourceInfo: template.sourceInfo,
|
|
2813
|
-
}));
|
|
2814
|
-
const skills = this._resourceLoader.getActiveSkills().map((skill) => ({
|
|
2815
|
-
name: `skill:${skill.name}`,
|
|
2816
|
-
description: skill.description,
|
|
2817
|
-
source: "skill",
|
|
2818
|
-
sourceInfo: skill.sourceInfo,
|
|
2819
|
-
}));
|
|
2820
|
-
return [...extensionCommands, ...templates, ...skills];
|
|
2821
|
-
};
|
|
2822
|
-
runner.bindCore({
|
|
2823
|
-
sendMessage: (message, options) => {
|
|
2824
|
-
this.sendCustomMessage(message, options).catch((err) => {
|
|
2825
|
-
runner.emitError({
|
|
2826
|
-
extensionPath: "<runtime>",
|
|
2827
|
-
event: "send_message",
|
|
2828
|
-
error: err instanceof Error ? err.message : String(err),
|
|
2829
|
-
});
|
|
2830
|
-
});
|
|
2831
|
-
},
|
|
2832
|
-
sendUserMessage: (content, options) => {
|
|
2833
|
-
this.sendUserMessage(content, options).catch((err) => {
|
|
2834
|
-
runner.emitError({
|
|
2835
|
-
extensionPath: "<runtime>",
|
|
2836
|
-
event: "send_user_message",
|
|
2837
|
-
error: err instanceof Error ? err.message : String(err),
|
|
2838
|
-
});
|
|
2839
|
-
});
|
|
2840
|
-
},
|
|
2841
|
-
appendEntry: (customType, data) => {
|
|
2842
|
-
this.sessionManager.appendCustomEntry(customType, data);
|
|
2843
|
-
},
|
|
2844
|
-
setSessionName: (name) => {
|
|
2845
|
-
this.setSessionName(name);
|
|
2846
|
-
},
|
|
2847
|
-
getSessionName: () => {
|
|
2848
|
-
return this.sessionManager.getSessionName();
|
|
2849
|
-
},
|
|
2850
|
-
setLabel: (entryId, label) => {
|
|
2851
|
-
this.sessionManager.appendLabelChange(entryId, label);
|
|
2852
|
-
},
|
|
2853
|
-
getActiveTools: () => this.getActiveToolNames(),
|
|
2854
|
-
getAllTools: () => this.getAllTools(),
|
|
2855
|
-
setActiveTools: (toolNames) => this.setActiveToolsByName(toolNames),
|
|
2856
|
-
refreshTools: () => this._refreshToolRegistry(),
|
|
2857
|
-
getCommands,
|
|
2858
|
-
setModel: async (model) => {
|
|
2859
|
-
if (!this.modelRegistry.hasConfiguredAuth(model))
|
|
2860
|
-
return false;
|
|
2861
|
-
await this.setModel(model);
|
|
2862
|
-
return true;
|
|
2863
|
-
},
|
|
2864
|
-
getThinkingLevel: () => this.thinkingLevel,
|
|
2865
|
-
setThinkingLevel: (level) => this.setThinkingLevel(level),
|
|
2866
|
-
getExternalResourceRoots: () => this.settingsManager.getEffectiveExternalResourceRoots(),
|
|
2867
|
-
registerMemoryProvider: (provider) => this.registerMemoryProvider(provider),
|
|
2868
|
-
registerContextMemoryProvider: (provider) => this.registerContextMemoryProvider(provider),
|
|
2869
|
-
reportSpawnedUsage: (usage, opts) => {
|
|
2870
|
-
this.addSpawnedUsage(usage, opts);
|
|
2871
|
-
},
|
|
2872
|
-
reportManagedLane: (event) => {
|
|
2873
|
-
this._backgroundLanes.recordManagedLane(event);
|
|
2874
|
-
},
|
|
2875
|
-
}, {
|
|
2876
|
-
getModel: () => this.model,
|
|
2877
|
-
isIdle: () => !this._foregroundRecovery.isBusy,
|
|
2878
|
-
getSignal: () => this.agent.signal,
|
|
2879
|
-
abort: () => {
|
|
2880
|
-
if (this._extensionAbortHandler) {
|
|
2881
|
-
this._extensionAbortHandler();
|
|
2882
|
-
return;
|
|
2883
|
-
}
|
|
2884
|
-
void this.abort();
|
|
2885
|
-
},
|
|
2886
|
-
hasPendingMessages: () => this.pendingMessageCount > 0,
|
|
2887
|
-
shutdown: () => {
|
|
2888
|
-
this._extensionShutdownHandler?.();
|
|
2889
|
-
},
|
|
2890
|
-
getContextUsage: () => this.getContextUsage(),
|
|
2891
|
-
compact: (options) => this.compactForExtension(options),
|
|
2892
|
-
reload: () => {
|
|
2893
|
-
if (this.isStreaming) {
|
|
2894
|
-
return Promise.reject(new Error("ctx.reload() cannot run while the agent is streaming or a tool call is active. Wait for ctx.isIdle(), queue a follow-up /reload, or use an idle command/event handler so hot reload cannot destabilize the UI."));
|
|
2895
|
-
}
|
|
2896
|
-
if (this.isCompacting) {
|
|
2897
|
-
return Promise.reject(new Error("ctx.reload() cannot run during context compaction or branch summarization. Let compaction finish before reloading so the session tree and UI remain stable."));
|
|
2898
|
-
}
|
|
2899
|
-
const actions = this._extensionCommandContextActions;
|
|
2900
|
-
if (!actions) {
|
|
2901
|
-
return this.reload();
|
|
2902
|
-
}
|
|
2903
|
-
return actions.reload();
|
|
2904
|
-
},
|
|
2905
|
-
getSystemPrompt: () => this.systemPrompt,
|
|
2906
|
-
}, {
|
|
2907
|
-
registerProvider: (name, config) => {
|
|
2908
|
-
this._modelRegistry.registerProvider(name, config);
|
|
2909
|
-
this._refreshCurrentModelFromRegistry();
|
|
2910
|
-
},
|
|
2911
|
-
unregisterProvider: (name) => {
|
|
2912
|
-
this._modelRegistry.unregisterProvider(name);
|
|
2913
|
-
this._refreshCurrentModelFromRegistry();
|
|
2914
|
-
},
|
|
2915
|
-
});
|
|
2916
|
-
}
|
|
2917
2804
|
/** Register a memory provider contributed by an extension; applied on the next memory (re)init. */
|
|
2918
2805
|
registerMemoryProvider(provider) {
|
|
2919
2806
|
this._memory.registerMemoryProvider(provider);
|