eve 0.47.6 → 0.47.7
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 +34 -0
- package/dist/src/channel/adapter.js +1 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/chunks/{use-eve-agent-DjYwFJF7.js → use-eve-agent-B5zw1dwj.js} +0 -1
- package/dist/src/chunks/{use-eve-agent-DkUB0Ok4.js → use-eve-agent-Dg5S44kG.js} +0 -1
- package/dist/src/cli/commands/registry-declared-setups.js +1 -1
- package/dist/src/cli/commands/registry-install-transaction.d.ts +23 -0
- package/dist/src/cli/commands/registry-install-transaction.js +1 -0
- package/dist/src/cli/commands/registry-package.js +1 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/commands/setup-headless.d.ts +6 -0
- package/dist/src/cli/commands/setup-headless.js +1 -1
- package/dist/src/cli/dev/run-interactive-ui.js +1 -1
- package/dist/src/cli/dev/tui/line-editor.d.ts +4 -0
- package/dist/src/cli/dev/tui/line-editor.js +3 -3
- package/dist/src/cli/dev/tui/runner.d.ts +2 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/stream-format.d.ts +8 -0
- package/dist/src/cli/dev/tui/stream-format.js +2 -2
- package/dist/src/cli/dev/tui/subagent-pump.d.ts +3 -0
- package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/client/agent-info-schema.d.ts +0 -1
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +7 -17
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/normalize-tool.d.ts +0 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/build-dynamic-tools.d.ts +2 -2
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/container.d.ts +7 -0
- package/dist/src/context/container.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.d.ts +16 -9
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/dynamic-tool-metadata.d.ts +44 -0
- package/dist/src/context/dynamic-tool-metadata.js +1 -0
- package/dist/src/context/keys.d.ts +11 -14
- package/dist/src/context/keys.js +1 -1
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +0 -1
- package/dist/src/eve-channel/request.js +2 -2
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/delegation-tool.d.ts +1 -2
- package/dist/src/execution/delegation-tool.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +8 -3
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/pending-turn-state.js +1 -1
- package/dist/src/execution/prepared-agent-action.d.ts +7 -0
- package/dist/src/execution/prepared-agent-action.js +1 -0
- package/dist/src/execution/subagent-start-local.d.ts +3 -0
- package/dist/src/execution/subagent-start-local.js +1 -1
- package/dist/src/execution/subagent-tool.d.ts +1 -0
- package/dist/src/execution/subagent-tool.js +1 -1
- package/dist/src/execution/tasks/child/update.d.ts +3 -2
- package/dist/src/execution/tasks/parent/control-shared.d.ts +5 -4
- package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch.d.ts +4 -3
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/execution/tools/subagent/local.d.ts +3 -4
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/tools/subagent/remote.d.ts +4 -1
- package/dist/src/execution/tools/subagent/remote.js +1 -1
- package/dist/src/execution/workflow-entry-finalization.d.ts +22 -0
- package/dist/src/execution/workflow-entry-finalization.js +1 -0
- package/dist/src/execution/workflow-entry.d.ts +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/advertised-tools.d.ts +3 -0
- package/dist/src/harness/advertised-tools.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.d.ts +6 -0
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/background-tools.d.ts +2 -0
- package/dist/src/harness/execute-tool.d.ts +2 -28
- package/dist/src/harness/hitl/pending-input-resolution.js +1 -1
- package/dist/src/harness/input-extraction.d.ts +3 -0
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/runtime-actions.d.ts +9 -3
- package/dist/src/harness/runtime-actions.js +1 -1
- package/dist/src/harness/stale-input-responses.d.ts +2 -1
- package/dist/src/harness/stale-input-responses.js +1 -1
- package/dist/src/harness/subagent-depth.d.ts +3 -4
- package/dist/src/harness/subagent-depth.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tools.d.ts +0 -2
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/harness/types.d.ts +6 -7
- package/dist/src/harness/workflow-runtime-action-state.d.ts +3 -3
- package/dist/src/harness/workflow-runtime-action-state.js +1 -1
- package/dist/src/harness/workflow-sandbox.js +1 -1
- package/dist/src/harness/workflow-subagent-limit.d.ts +4 -4
- package/dist/src/instrumentation/ai-sdk-telemetry.d.ts +1 -0
- package/dist/src/instrumentation/ai-sdk-telemetry.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +3 -0
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/build-output-environment.d.ts +2 -0
- package/dist/src/internal/application/build-output-environment.js +1 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/application/paths.d.ts +1 -2
- package/dist/src/internal/application/paths.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.d.ts +6 -2
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/client-context.d.ts +2 -0
- package/dist/src/internal/client-context.js +1 -0
- package/dist/src/internal/nitro/dev-client-address.d.ts +2 -0
- package/dist/src/internal/nitro/dev-client-address.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.d.ts +2 -2
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/routes.d.ts +2 -2
- package/dist/src/public/local-dev.d.ts +9 -0
- package/dist/src/public/local-dev.js +1 -0
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/runtime/actions/keys.d.ts +3 -0
- package/dist/src/runtime/actions/keys.js +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -1
- package/dist/src/runtime/local-dev-capability.d.ts +55 -0
- package/dist/src/runtime/local-dev-capability.js +1 -0
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/sessions/runtime-session.d.ts +1 -0
- package/dist/src/runtime/sessions/runtime-session.js +1 -1
- package/dist/src/runtime/sessions/turn.d.ts +3 -0
- package/dist/src/runtime/subagents/registry.js +1 -1
- package/dist/src/runtime/tools/registry.d.ts +1 -0
- package/dist/src/runtime/tools/registry.js +1 -1
- package/dist/src/runtime/types.d.ts +2 -2
- package/dist/src/services/dev-client/client-options.d.ts +1 -0
- package/dist/src/services/dev-client/client-options.js +1 -1
- package/dist/src/services/dev-client/runtime-artifacts.d.ts +2 -0
- package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/dispatch-action.d.ts +24 -0
- package/dist/src/shared/dispatch-action.js +1 -0
- package/dist/src/shared/workflow-sandbox.d.ts +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/json.js +1 -1
- package/dist/src/tools/behavior.d.ts +55 -0
- package/dist/src/tools/behavior.js +1 -0
- package/dist/src/tools/durable-callbacks.d.ts +1 -0
- package/dist/src/tools/framework/agent.d.ts +2 -11
- package/dist/src/tools/framework/agent.js +1 -1
- package/dist/src/tools/framework/ask-question.d.ts +2 -14
- package/dist/src/tools/framework/ask-question.js +1 -1
- package/dist/src/tools/framework/task-cancel.d.ts +2 -7
- package/dist/src/tools/framework/task-cancel.js +1 -1
- package/dist/src/tools/framework/task-contract.d.ts +0 -2
- package/dist/src/tools/framework/task-contract.js +1 -1
- package/dist/src/tools/framework/task-update.d.ts +2 -7
- package/dist/src/tools/framework/task-update.js +1 -1
- package/dist/src/tools/native-definition.d.ts +6 -0
- package/dist/src/tools/native-definition.js +1 -0
- package/dist/src/tools/provided/load-skill.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-provider.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
- package/dist/src/tracing/otel-registration.d.ts +2 -0
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/reference/typescript-api.md +24 -0
- package/package.json +6 -1
- package/dist/src/execution/tools/tasks.d.ts +0 -18
- package/dist/src/execution/tools/tasks.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function isOldSourceOffsetDynamicToolMetadata(e){return e.callbacks!==void 0&&`stepId`in e.callbacks.execute}function isCurrentDynamicToolMetadata(e){return e.callbacks!==void 0&&!isOldSourceOffsetDynamicToolMetadata(e)}function isOldStepFunctionDynamicToolMetadata(e){return e.callbacks===void 0}function withoutSourceOffset(e){return{closure:e.closure}}function convertSourceOffsetMetadata(e){let t={execute:withoutSourceOffset(e.callbacks.execute),...e.callbacks.approvalRequest===void 0?{}:{approvalRequest:withoutSourceOffset(e.callbacks.approvalRequest)},...e.callbacks.approvalResponse===void 0?{}:{approvalResponse:withoutSourceOffset(e.callbacks.approvalResponse)},...e.callbacks.toModelOutput===void 0?{}:{toModelOutput:withoutSourceOffset(e.callbacks.toModelOutput)}};return{...e,callbacks:t}}function toCurrentDynamicToolMetadata(e,t){if(isCurrentDynamicToolMetadata(e))return e;if(t===void 0)throw Error(`Dynamic tool "${e.name}" uses old persisted metadata, but its resolver did not return a current replacement.`);if(t.resolverSlug!==e.resolverSlug||t.name!==e.name)throw Error(`Dynamic tool "${e.name}" received current metadata from a different resolver or tool.`);if(!isOldStepFunctionDynamicToolMetadata(e)){for(let n of Object.keys(e.callbacks))if(t.callbacks[n]===void 0)throw Error(`Dynamic tool "${e.name}" lost its ${n} callback while converting old persisted metadata.`);return convertSourceOffsetMetadata(e)}if(e.approvalResponseStepFnName!==void 0&&e.approvalStepFnName===void 0)throw Error(`Dynamic tool "${e.name}" has an old approval-response callback without an approval-request callback.`);if(e.approvalStepFnName!==void 0&&t.callbacks.approvalRequest===void 0)throw Error(`Dynamic tool "${e.name}" lost its approval-request callback while converting old persisted metadata.`);if(e.approvalResponseStepFnName!==void 0&&t.callbacks.approvalResponse===void 0)throw Error(`Dynamic tool "${e.name}" lost its approval-response callback while converting old persisted metadata.`);return t}function toCurrentDynamicToolMetadataList(e,t=[]){return e.map(e=>toCurrentDynamicToolMetadata(e,t.find(t=>t.resolverSlug===e.resolverSlug&&t.name===e.name)))}export{isCurrentDynamicToolMetadata,isOldSourceOffsetDynamicToolMetadata,isOldStepFunctionDynamicToolMetadata,toCurrentDynamicToolMetadata,toCurrentDynamicToolMetadataList};
|
|
@@ -4,13 +4,12 @@
|
|
|
4
4
|
* `#runtime/sessions/runtime-context-keys.ts`.
|
|
5
5
|
*/
|
|
6
6
|
import type { LanguageModel, ModelMessage, SystemModelMessage } from "ai";
|
|
7
|
-
import type { JsonObject } from "#shared/json.js";
|
|
8
7
|
import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
|
|
9
8
|
import type { ActivityObserverConfig, ChannelDeliveryMetadata, ChannelInstrumentationProjection, SessionAuthContext, SessionCallback, SessionCapabilities, SessionParent, SessionTraceContext, SessionTurn } from "#channel/types.js";
|
|
10
9
|
import { ContextKey } from "#context/key.js";
|
|
11
10
|
import type { InstrumentationChannelDeliveryRef } from "#instrumentation/lifecycle.js";
|
|
12
11
|
import type { HandleEventFn } from "#harness/types.js";
|
|
13
|
-
import type {
|
|
12
|
+
import type { PersistedDynamicToolMetadata } from "#context/dynamic-tool-metadata.js";
|
|
14
13
|
import type { DynamicSubagentAgentConfig } from "#runtime/subagents/dynamic-agent-config.js";
|
|
15
14
|
import type { DynamicRemoteAgentConfig } from "#runtime/subagents/dynamic-remote-agent-config.js";
|
|
16
15
|
import type { SandboxAccess } from "#sandbox/state.js";
|
|
@@ -48,6 +47,13 @@ export declare const InitiatorAuthKey: ContextKey<SessionAuthContext | null>;
|
|
|
48
47
|
export declare const SessionIdKey: ContextKey<string>;
|
|
49
48
|
export declare const ContinuationTokenKey: ContextKey<string>;
|
|
50
49
|
export declare const ChannelRequestIdKey: ContextKey<string>;
|
|
50
|
+
/** Parent-verified local client provenance, valid only for the current dev host secret. */
|
|
51
|
+
export interface LocalDevRequestProvenance {
|
|
52
|
+
readonly address: string;
|
|
53
|
+
readonly interactiveClient: boolean;
|
|
54
|
+
readonly signature: string;
|
|
55
|
+
}
|
|
56
|
+
export declare const LocalDevRequestKey: ContextKey<LocalDevRequestProvenance>;
|
|
51
57
|
/** Authored schedule whose dispatch created this session. */
|
|
52
58
|
export declare const ScheduleIdKey: ContextKey<string>;
|
|
53
59
|
export declare const ChannelDeliveryKey: ContextKey<ChannelDeliveryMetadata>;
|
|
@@ -113,20 +119,11 @@ export interface LiveDynamicModelSelection {
|
|
|
113
119
|
}
|
|
114
120
|
/** Virtual step-scoped dynamic model selection (from `step.started`); never serialized. */
|
|
115
121
|
export declare const LiveStepDynamicModelSelectionKey: ContextKey<LiveDynamicModelSelection | null>;
|
|
116
|
-
export interface DurableDynamicToolMetadata {
|
|
117
|
-
readonly callbacks: DurableDynamicToolCallbacks;
|
|
118
|
-
readonly name: string;
|
|
119
|
-
readonly description: string;
|
|
120
|
-
readonly inputSchema: JsonObject;
|
|
121
|
-
readonly outputSchema?: JsonObject;
|
|
122
|
-
readonly resolverSlug: string;
|
|
123
|
-
readonly entryKey: string;
|
|
124
|
-
}
|
|
125
122
|
/**
|
|
126
123
|
* Session-scoped dynamic tool metadata (from `session.started`).
|
|
127
124
|
* Persists for the session lifetime.
|
|
128
125
|
*/
|
|
129
|
-
export declare const SessionDynamicToolMetadataKey: ContextKey<readonly
|
|
126
|
+
export declare const SessionDynamicToolMetadataKey: ContextKey<readonly PersistedDynamicToolMetadata[]>;
|
|
130
127
|
/**
|
|
131
128
|
* Runtime revision that last resolved session-scoped dynamic tools.
|
|
132
129
|
* Used to refresh their durable metadata after a deploy or development rebuild.
|
|
@@ -136,7 +133,7 @@ export declare const SessionDynamicToolRuntimeRevisionKey: ContextKey<string>;
|
|
|
136
133
|
* Turn-scoped dynamic tool metadata (from `turn.started`).
|
|
137
134
|
* Replaced each turn.
|
|
138
135
|
*/
|
|
139
|
-
export declare const TurnDynamicToolMetadataKey: ContextKey<readonly
|
|
136
|
+
export declare const TurnDynamicToolMetadataKey: ContextKey<readonly PersistedDynamicToolMetadata[]>;
|
|
140
137
|
export interface LockedMemorySlot {
|
|
141
138
|
readonly scope: MemoryScope;
|
|
142
139
|
readonly slot: string;
|
|
@@ -162,7 +159,7 @@ export interface PreparedMemoryCompaction {
|
|
|
162
159
|
}
|
|
163
160
|
export declare const PreparedMemoryCompactionKey: ContextKey<PreparedMemoryCompaction>;
|
|
164
161
|
/** Step-scoped dynamic tool metadata, replaced before each model step. */
|
|
165
|
-
export declare const StepDynamicToolMetadataKey: ContextKey<readonly
|
|
162
|
+
export declare const StepDynamicToolMetadataKey: ContextKey<readonly PersistedDynamicToolMetadata[]>;
|
|
166
163
|
/** Whether this turn executes subagent definitions as durable background tools. */
|
|
167
164
|
export declare const TasksEnabledKey: ContextKey<boolean>;
|
|
168
165
|
export type DurableDynamicSubagentSelection = {
|
package/dist/src/context/keys.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ContextKey}from"#context/key.js";import{SESSION_CALLBACK_CONTEXT_KEY_NAME}from"#context/key-names.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),ScheduleIdKey=new ContextKey(`eve.scheduleId`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),TurnTaskStateKey=new ContextKey(`eve.turnTaskState`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SessionTraceSeedKey=new ContextKey(`eve.sessionTraceSeed`),OtelTraceEnabledKey=new ContextKey(`eve.otelTraceEnabled`),SubagentDepthKey=new ContextKey(`eve.subagentDepth`),CapabilitiesKey=new ContextKey(`eve.capabilities`),ActivityObserverKey=new ContextKey(`eve.activityObserver`),SessionCallbackKey=new ContextKey(SESSION_CALLBACK_CONTEXT_KEY_NAME),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),HandleEventKey=new ContextKey(`eve.internal.handleEvent`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),TurnMemoryLocksKey=new ContextKey(`eve.memory.turnLocks`),PreparedMemoryPreambleKey=new ContextKey(`eve.memory.preparedPreamble`),PendingMemoryCommitKey=new ContextKey(`eve.memory.pendingCommit`),PreparedMemoryCompactionKey=new ContextKey(`eve.memory.preparedCompaction`),StepDynamicToolMetadataKey=new ContextKey(`eve.stepDynamicToolMetadata`),TasksEnabledKey=new ContextKey(`eve.tasksEnabled`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSubagentAgentConfigKey,HandleEventKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,ModeKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,RuntimeModelMetadataCacheKey,SandboxKey,ScheduleIdKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionKey,SessionTraceSeedKey,StepDynamicToolMetadataKey,SubagentDepthKey,TasksEnabledKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnMemoryLocksKey,TurnTaskDeliveryKey,TurnTaskStateKey};
|
|
1
|
+
import{ContextKey}from"#context/key.js";import{SESSION_CALLBACK_CONTEXT_KEY_NAME}from"#context/key-names.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),LocalDevRequestKey=new ContextKey(`eve.internal.localDevRequest`),ScheduleIdKey=new ContextKey(`eve.scheduleId`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),TurnTaskStateKey=new ContextKey(`eve.turnTaskState`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SessionTraceSeedKey=new ContextKey(`eve.sessionTraceSeed`),OtelTraceEnabledKey=new ContextKey(`eve.otelTraceEnabled`),SubagentDepthKey=new ContextKey(`eve.subagentDepth`),CapabilitiesKey=new ContextKey(`eve.capabilities`),ActivityObserverKey=new ContextKey(`eve.activityObserver`),SessionCallbackKey=new ContextKey(SESSION_CALLBACK_CONTEXT_KEY_NAME),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),HandleEventKey=new ContextKey(`eve.internal.handleEvent`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),TurnMemoryLocksKey=new ContextKey(`eve.memory.turnLocks`),PreparedMemoryPreambleKey=new ContextKey(`eve.memory.preparedPreamble`),PendingMemoryCommitKey=new ContextKey(`eve.memory.pendingCommit`),PreparedMemoryCompactionKey=new ContextKey(`eve.memory.preparedCompaction`),StepDynamicToolMetadataKey=new ContextKey(`eve.stepDynamicToolMetadata`),TasksEnabledKey=new ContextKey(`eve.tasksEnabled`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSubagentAgentConfigKey,HandleEventKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,LocalDevRequestKey,ModeKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,PendingMemoryCommitKey,PreparedMemoryCompactionKey,PreparedMemoryPreambleKey,RuntimeModelMetadataCacheKey,SandboxKey,ScheduleIdKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionKey,SessionTraceSeedKey,StepDynamicToolMetadataKey,SubagentDepthKey,TasksEnabledKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnMemoryLocksKey,TurnTaskDeliveryKey,TurnTaskStateKey};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EVE_ACTIVITY_ROUTE_PATTERN,EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_SESSION_CANCEL_ROUTE_PATTERN,EVE_SESSION_CLEAR_ROUTE_PATTERN,EVE_SESSION_COMPACT_ROUTE_PATTERN,EVE_SESSION_RESET_ROUTE_PATTERN,EVE_SESSION_ROUTE_PATH,EVE_SESSION_ROUTE_PATTERN,EVE_SESSION_STREAM_ROUTE_PATTERN,EVE_SUBAGENT_STREAM_ROUTE_PATTERN,EVE_TASK_INPUT_ROUTE_PATTERN,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{isRuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{GET,HEAD,POST,defineChannel}from"#public/definitions/channel.js";import{resolveForwardedPrincipal}from"#channel/forwarded-principal.js";import{handleConnectionCallbackRequest,handleLegacyConnectionCallbackRequest}from"#execution/connections/callback-route.js";import{handleActivityRequest}from"#execution/activity-route.js";import{handleSessionCallbackRequest}from"#execution/session-callback-route.js";import{handleTaskInputResponseRequest}from"#execution/task-input-response-route.js";import{readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{parseTraceparent}from"#protocol/traceparent.js";import{routeAuth}from"#public/channels/auth.js";import{mergeUploadPolicy}from"#public/channels/upload-policy.js";import{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,mergeContext,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId}from"#eve-channel/request.js";import{findRemoteSubagentBinding,healthResponse,normalizeEveCors,resolveOnMessage}from"#eve-channel/support.js";export*from"#eve-channel/types.js";const log=createLogger(`eve.channel`);function eveChannel(h){let g=mergeUploadPolicy(h.uploadPolicy);return defineChannel({cors:normalizeEveCors(h.cors),turnPolicy:h.turnPolicy,routes:[GET(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),HEAD(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),GET(EVE_INFO_ROUTE_PATH,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=readAgentInfoRouteResponse(t);return r===void 0?Response.json({error:`Agent info route requires internal channel dispatch context.`,ok:!1},{status:500}):await r()}),GET(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),GET(EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,handleLegacyConnectionCallbackRequest),POST(EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,handleLegacyConnectionCallbackRequest),POST(EVE_ACTIVITY_ROUTE_PATTERN,handleActivityRequest),POST(EVE_CALLBACK_ROUTE_PATTERN,handleSessionCallbackRequest),POST(EVE_TASK_INPUT_ROUTE_PATTERN,handleTaskInputResponseRequest),POST(EVE_SESSION_ROUTE_PATH,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=await parseJsonRequest(e);if(r instanceof Response)return r;let i=rejectSessionContinuationToken(r);if(i!==null)return i;let a=await resolveForwardedPrincipal({trustedForwarders:h.trustedForwarders,forwarder:n,payload:r});if(a instanceof Response)return a;let o=parseCreateBody(r);if(o instanceof Response)return o;let s=o.callback===void 0?void 0:parseTraceparent(e.headers.get(`traceparent`)),c=checkUploadPolicy(o,g);if(c!==null)return c;if(o.operationId!==void 0&&a.auth.principalType===`anonymous`)return Response.json({error:`operationId requires an authenticated principal.`,ok:!1},{status:400});let l=o.operationId===void 0?void 0:await deriveOperationContinuationToken({auth:a.auth,operationId:o.operationId});if(l!==void 0){let e=await t.resolveSession(l);if(e!==void 0)return Response.json({ok:!0,sessionId:e.id,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.id},status:202})}let u=await resolveOnMessage({auth:a.auth,config:h,message:o.message,request:e});if(u instanceof Response)return u;let d=readRouteSessionCreator(t);if(d===void 0)return Response.json({error:`Session creation requires internal channel dispatch context.`,ok:!1},{status:500});let f;try{f=await d({activityObserver:o.activityObserver,auth:u.auth,capabilities:o.capabilities??(o.mode===`task`?void 0:{requestInput:!0}),callback:o.callback,continuationToken:l,initiatorAuth:a.accepted?a.initiatorAuth:void 0,input:{message:o.message,context:mergeContext(o.context,u.context),outputSchema:o.outputSchema},mode:o.mode??`conversation`,parentTraceContext:s,title:u.title})}catch(e){if(l!==void 0&&isRuntimeSessionOwnershipConflictError(e))return Response.json({ok:!0,sessionId:e.ownerSessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.ownerSessionId},status:202});let t=logError(log,`session-create request failed`,e);return Response.json({error:`Failed to create the session.`,errorId:t,ok:!1},{status:500})}return Response.json({ok:!0,sessionId:f.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:f.sessionId},status:202})}),POST(EVE_SESSION_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseJsonRequest(e);if(a instanceof Response)return a;let o=await resolveForwardedPrincipal({trustedForwarders:h.trustedForwarders,forwarder:r,payload:a});if(o instanceof Response)return o;let s=parseSessionMessageBody(a);if(s instanceof Response)return s;let c=checkUploadPolicy(s,g);if(c!==null)return c;let l=s.context,u=o.auth;if(s.message!==void 0){let t=await resolveOnMessage({auth:o.auth,config:h,message:s.message,request:e,sessionId:i});if(t instanceof Response)return t;l=mergeContext(s.context,t.context),u=t.auth}let d;try{let e=t(i),n={activityObserver:s.activityObserver,auth:u,callback:s.callback,context:l,outputSchema:s.outputSchema,turnPolicy:s.turnPolicy};d=s.inputResponses===void 0?await e.send(s.message,n):await e.respond(s.inputResponses,n)}catch(e){let t=logError(log,`session-message request failed`,e,{sessionId:i});return Response.json({error:`Failed to send the session message.`,errorId:t,ok:!1},{status:500})}return d.status===`session_not_active`?Response.json({code:`session_not_active`,error:`The session is no longer active.`,ok:!1},{headers:{"cache-control":`no-store`},status:409}):Response.json({ok:!0,sessionId:d.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:d.sessionId},status:202})}),POST(EVE_SESSION_CANCEL_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseCancelTurnBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).cancel({taskId:a.taskId,turnId:a.turnId})}catch(e){let t=logError(log,`cancel-turn request failed`,e,{sessionId:i});return Response.json({error:`Failed to cancel the turn.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_turn`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_COMPACT_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseSessionControlBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).compact()}catch(e){let t=logError(log,`session-compaction request failed`,e,{sessionId:i});return Response.json({error:`Failed to compact the session.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_CLEAR_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseSessionControlBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).clear()}catch(e){let t=logError(log,`session-clear request failed`,e,{sessionId:i});return Response.json({error:`Failed to clear the session context.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_RESET_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseResetBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).reset({reason:a.reason})}catch(e){let t=logError(log,`session-reset request failed`,e,{sessionId:i});return Response.json({error:`Failed to reset the session.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`reset`?{ok:!0,previousSessionId:o.previousSessionId,status:`reset`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`}})}),GET(EVE_SESSION_STREAM_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);return i instanceof Response?i:await createSessionStreamResponse(e,t(i))}),GET(EVE_SUBAGENT_STREAM_ROUTE_PATTERN,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=t.params.parentSessionId,i=t.params.callId,a=t.params.childSessionId;if(!r||!i||!a)return Response.json({error:`Missing subagent stream coordinates.`,ok:!1},{status:400});let o=parseStartIndex(e);if(o instanceof Response)return o;let s=parseIncludeTailIndex(e),c=createEveSubagentStreamRoutePath({callId:i,childSessionId:a,parentSessionId:r}),l;try{let e=await findRemoteSubagentBinding({callId:i,childSessionId:a,childStreamPath:c,parentSessionId:r,parent:t.attachSession(r)});if(e===void 0)throw Error(`Remote subagent binding not found.`);l=e}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let u=readRemoteAgentStreamHeadersResolver(t);if(u===void 0)return Response.json({error:`Subagent stream proxy requires internal channel dispatch context.`,ok:!1},{status:500});let d;try{d=await u({name:l.data.toolName,resolverId:l.data.remote.resolverId,url:l.data.remote.url})}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let f=new URL(createEveSessionStreamRoutePath(a).replace(/^\/+/,``),`${l.data.remote.url.replace(/\/+$/,``)}/`);o!==void 0&&f.searchParams.set(`startIndex`,String(o)),s&&f.searchParams.set(`includeTailIndex`,`1`);let p=await fetch(f,{cache:`no-store`,headers:d,redirect:`manual`,signal:e.signal}),m=new Headers;for(let e of[`cache-control`,`content-type`,`x-accel-buffering`,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER]){let t=p.headers.get(e);t!==null&&m.set(e,t)}return new Response(p.body,{headers:m,status:p.status,statusText:p.statusText})})],events:h.events})}export{eveChannel};
|
|
1
|
+
import{EVE_ACTIVITY_ROUTE_PATTERN,EVE_CALLBACK_ROUTE_PATTERN,EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_HEALTH_ROUTE_PATH,EVE_INFO_ROUTE_PATH,EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,EVE_SESSION_CANCEL_ROUTE_PATTERN,EVE_SESSION_CLEAR_ROUTE_PATTERN,EVE_SESSION_COMPACT_ROUTE_PATTERN,EVE_SESSION_RESET_ROUTE_PATTERN,EVE_SESSION_ROUTE_PATH,EVE_SESSION_ROUTE_PATTERN,EVE_SESSION_STREAM_ROUTE_PATTERN,EVE_SUBAGENT_STREAM_ROUTE_PATTERN,EVE_TASK_INPUT_ROUTE_PATTERN,createEveSessionStreamRoutePath,createEveSubagentStreamRoutePath}from"#protocol/routes.js";import{attachClientContext}from"#internal/client-context.js";import{createLogger,logError}from"#internal/logging.js";import{isRuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{GET,HEAD,POST,defineChannel}from"#public/definitions/channel.js";import{resolveForwardedPrincipal}from"#channel/forwarded-principal.js";import{handleConnectionCallbackRequest,handleLegacyConnectionCallbackRequest}from"#execution/connections/callback-route.js";import{handleActivityRequest}from"#execution/activity-route.js";import{handleSessionCallbackRequest}from"#execution/session-callback-route.js";import{handleTaskInputResponseRequest}from"#execution/task-input-response-route.js";import{readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{parseTraceparent}from"#protocol/traceparent.js";import{routeAuth}from"#public/channels/auth.js";import{mergeUploadPolicy}from"#public/channels/upload-policy.js";import{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId}from"#eve-channel/request.js";import{findRemoteSubagentBinding,healthResponse,normalizeEveCors,resolveOnMessage}from"#eve-channel/support.js";export*from"#eve-channel/types.js";const log=createLogger(`eve.channel`);function eveChannel(h){let g=mergeUploadPolicy(h.uploadPolicy);return defineChannel({cors:normalizeEveCors(h.cors),turnPolicy:h.turnPolicy,routes:[GET(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),HEAD(EVE_HEALTH_ROUTE_PATH,async()=>healthResponse()),GET(EVE_INFO_ROUTE_PATH,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=readAgentInfoRouteResponse(t);return r===void 0?Response.json({error:`Agent info route requires internal channel dispatch context.`,ok:!1},{status:500}):await r()}),GET(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),POST(EVE_CONNECTION_CALLBACK_ROUTE_PATTERN,handleConnectionCallbackRequest),GET(EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,handleLegacyConnectionCallbackRequest),POST(EVE_LEGACY_CONNECTION_CALLBACK_ROUTE_PATTERN,handleLegacyConnectionCallbackRequest),POST(EVE_ACTIVITY_ROUTE_PATTERN,handleActivityRequest),POST(EVE_CALLBACK_ROUTE_PATTERN,handleSessionCallbackRequest),POST(EVE_TASK_INPUT_ROUTE_PATTERN,handleTaskInputResponseRequest),POST(EVE_SESSION_ROUTE_PATH,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=await parseJsonRequest(e);if(r instanceof Response)return r;let i=rejectSessionContinuationToken(r);if(i!==null)return i;let a=await resolveForwardedPrincipal({trustedForwarders:h.trustedForwarders,forwarder:n,payload:r});if(a instanceof Response)return a;let o=parseCreateBody(r);if(o instanceof Response)return o;let s=o.callback===void 0?void 0:parseTraceparent(e.headers.get(`traceparent`)),c=checkUploadPolicy(o,g);if(c!==null)return c;if(o.operationId!==void 0&&a.auth.principalType===`anonymous`)return Response.json({error:`operationId requires an authenticated principal.`,ok:!1},{status:400});let l=o.operationId===void 0?void 0:await deriveOperationContinuationToken({auth:a.auth,operationId:o.operationId});if(l!==void 0){let e=await t.resolveSession(l);if(e!==void 0)return Response.json({ok:!0,sessionId:e.id,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.id},status:202})}let u=await resolveOnMessage({auth:a.auth,config:h,message:o.message,request:e});if(u instanceof Response)return u;let d=readRouteSessionCreator(t);if(d===void 0)return Response.json({error:`Session creation requires internal channel dispatch context.`,ok:!1},{status:500});let f;try{f=await d({activityObserver:o.activityObserver,auth:u.auth,capabilities:o.capabilities??(o.mode===`task`?void 0:{requestInput:!0}),callback:o.callback,continuationToken:l,initiatorAuth:a.accepted?a.initiatorAuth:void 0,input:attachClientContext({message:o.message,context:u.context,outputSchema:o.outputSchema},o.context),mode:o.mode??`conversation`,parentTraceContext:s,title:u.title})}catch(e){if(l!==void 0&&isRuntimeSessionOwnershipConflictError(e))return Response.json({ok:!0,sessionId:e.ownerSessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:e.ownerSessionId},status:202});let t=logError(log,`session-create request failed`,e);return Response.json({error:`Failed to create the session.`,errorId:t,ok:!1},{status:500})}return Response.json({ok:!0,sessionId:f.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:f.sessionId},status:202})}),POST(EVE_SESSION_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseJsonRequest(e);if(a instanceof Response)return a;let o=await resolveForwardedPrincipal({trustedForwarders:h.trustedForwarders,forwarder:r,payload:a});if(o instanceof Response)return o;let s=parseSessionMessageBody(a);if(s instanceof Response)return s;let c=checkUploadPolicy(s,g);if(c!==null)return c;let l,u=o.auth;if(s.message!==void 0){let t=await resolveOnMessage({auth:o.auth,config:h,message:s.message,request:e,sessionId:i});if(t instanceof Response)return t;l=t.context,u=t.auth}let d;try{let e=t(i),n=attachClientContext({activityObserver:s.activityObserver,auth:u,callback:s.callback,context:l,outputSchema:s.outputSchema,turnPolicy:s.turnPolicy},s.context);d=s.inputResponses===void 0?await e.send(s.message,n):await e.respond(s.inputResponses,n)}catch(e){let t=logError(log,`session-message request failed`,e,{sessionId:i});return Response.json({error:`Failed to send the session message.`,errorId:t,ok:!1},{status:500})}return d.status===`session_not_active`?Response.json({code:`session_not_active`,error:`The session is no longer active.`,ok:!1},{headers:{"cache-control":`no-store`},status:409}):Response.json({ok:!0,sessionId:d.sessionId,status:`accepted`},{headers:{"cache-control":`no-store`,[EVE_SESSION_ID_HEADER]:d.sessionId},status:202})}),POST(EVE_SESSION_CANCEL_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseCancelTurnBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).cancel({taskId:a.taskId,turnId:a.turnId})}catch(e){let t=logError(log,`cancel-turn request failed`,e,{sessionId:i});return Response.json({error:`Failed to cancel the turn.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_turn`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_COMPACT_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseSessionControlBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).compact()}catch(e){let t=logError(log,`session-compaction request failed`,e,{sessionId:i});return Response.json({error:`Failed to compact the session.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_CLEAR_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseSessionControlBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).clear()}catch(e){let t=logError(log,`session-clear request failed`,e,{sessionId:i});return Response.json({error:`Failed to clear the session context.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`accepted`?{ok:!0,sessionId:o.sessionId,status:`accepted`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`},status:o.status===`accepted`?202:200})}),POST(EVE_SESSION_RESET_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);if(i instanceof Response)return i;let a=await parseResetBody(e);if(a instanceof Response)return a;let o;try{o=await t(i).reset({reason:a.reason})}catch(e){let t=logError(log,`session-reset request failed`,e,{sessionId:i});return Response.json({error:`Failed to reset the session.`,errorId:t,ok:!1},{status:500})}return Response.json(o.status===`reset`?{ok:!0,previousSessionId:o.previousSessionId,status:`reset`}:{ok:!0,status:`no_active_session`},{headers:{"cache-control":`no-store`}})}),GET(EVE_SESSION_STREAM_ROUTE_PATTERN,async(e,{attachSession:t,params:n})=>{let r=await routeAuth(e,h.auth);if(r instanceof Response)return r;let i=requireSessionId(n);return i instanceof Response?i:await createSessionStreamResponse(e,t(i))}),GET(EVE_SUBAGENT_STREAM_ROUTE_PATTERN,async(e,t)=>{let n=await routeAuth(e,h.auth);if(n instanceof Response)return n;let r=t.params.parentSessionId,i=t.params.callId,a=t.params.childSessionId;if(!r||!i||!a)return Response.json({error:`Missing subagent stream coordinates.`,ok:!1},{status:400});let o=parseStartIndex(e);if(o instanceof Response)return o;let s=parseIncludeTailIndex(e),c=createEveSubagentStreamRoutePath({callId:i,childSessionId:a,parentSessionId:r}),l;try{let e=await findRemoteSubagentBinding({callId:i,childSessionId:a,childStreamPath:c,parentSessionId:r,parent:t.attachSession(r)});if(e===void 0)throw Error(`Remote subagent binding not found.`);l=e}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let u=readRemoteAgentStreamHeadersResolver(t);if(u===void 0)return Response.json({error:`Subagent stream proxy requires internal channel dispatch context.`,ok:!1},{status:500});let d;try{d=await u({name:l.data.toolName,resolverId:l.data.remote.resolverId,url:l.data.remote.url})}catch{return Response.json({error:`Subagent stream not found.`,ok:!1},{status:404})}let f=new URL(createEveSessionStreamRoutePath(a).replace(/^\/+/,``),`${l.data.remote.url.replace(/\/+$/,``)}/`);o!==void 0&&f.searchParams.set(`startIndex`,String(o)),s&&f.searchParams.set(`includeTailIndex`,`1`);let p=await fetch(f,{cache:`no-store`,headers:d,redirect:`manual`,signal:e.signal}),m=new Headers;for(let e of[`cache-control`,`content-type`,`x-accel-buffering`,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER]){let t=p.headers.get(e);t!==null&&m.set(e,t)}return new Response(p.body,{headers:m,status:p.status,statusText:p.statusText})})],events:h.events})}export{eveChannel};
|
|
@@ -45,7 +45,6 @@ export declare function rejectSessionContinuationToken(payload: Record<string, u
|
|
|
45
45
|
export declare function requireSessionId(params: Readonly<Record<string, string>>): string | Response;
|
|
46
46
|
export declare function createSessionStreamResponse(request: Request, session: Session): Promise<Response>;
|
|
47
47
|
export declare function checkUploadPolicy(body: ParsedCreateBody | ParsedSessionMessageBody, policy: UploadPolicy): Response | null;
|
|
48
|
-
export declare function mergeContext(existing: readonly string[] | undefined, added: readonly string[] | undefined): readonly string[] | undefined;
|
|
49
48
|
export declare function parseIncludeTailIndex(request: Request): boolean;
|
|
50
49
|
export declare function parseStartIndex(request: Request): number | undefined | Response;
|
|
51
50
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseModeField(e.mode);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;if(t===void 0)return Response.json({error:`Missing or empty 'message' field.`,ok:!1},{status:400});let c=e.operationId;if(c!==void 0&&(typeof c!=`string`||!c))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let l={activityObserver:a,callback:r,capabilities:i,message:t,mode:o,context:n,outputSchema:s};return typeof c==`string`&&(l.operationId=c),l}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;let c=parseTurnPolicyField(e.turnPolicy);return c instanceof Response?c:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:s,turnPolicy:c}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let a={};return typeof i==`string`&&(a.taskId=i),typeof r==`string`&&(a.turnId=r),a}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let l=parseStartIndex(e);if(l instanceof Response)return l;let u=parseIncludeTailIndex(e);try{let d=u?await t.getStreamTailIndex():void 0,f=await t.getEventStream({startIndex:l}),p=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return d!==void 0&&p.set(EVE_STREAM_TAIL_INDEX_HEADER,String(d)),new Response(serializeAsNdjson(f,e.signal,streamEventLimit(l,d)),{headers:p})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseModeField(e){if(e!==void 0)return e===`conversation`||e===`task`?e:Response.json({error:`Expected 'mode' to be either 'conversation' or 'task'.`,ok:!1},{status:400})}function parseTurnPolicyField(e){if(e!==void 0)return e===`queue`||e===`steer`?e:Response.json({error:`Expected 'turnPolicy' to be either 'queue' or 'steer'.`,ok:!1},{status:400})}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let n=e;if(n.type===`text`)return typeof n.text!=`string`||n.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:n.text};if(n.type===`file`){if(typeof n.mediaType!=`string`||n.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof n.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(n.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:n.mediaType,data:n.data};return typeof n.filename==`string`&&n.filename.length>0&&(e.filename=n.filename),e}return Response.json({error:`Unsupported message part type "${String(n.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(t){if(t===void 0)return;if(!Array.isArray(t)||t.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let n=t.filter(isInputResponse);return n.length===t.length?n:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function mergeContext(e,t){return e===void 0?t:t===void 0?e:[...e,...t]}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
|
|
1
|
+
import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseModeField(e.mode);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;if(t===void 0)return Response.json({error:`Missing or empty 'message' field.`,ok:!1},{status:400});let c=e.operationId;if(c!==void 0&&(typeof c!=`string`||!c))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let l={activityObserver:a,callback:r,capabilities:i,message:t,mode:o,context:n,outputSchema:s};return typeof c==`string`&&(l.operationId=c),l}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;let c=parseTurnPolicyField(e.turnPolicy);return c instanceof Response?c:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:s,turnPolicy:c}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let a={};return typeof i==`string`&&(a.taskId=i),typeof r==`string`&&(a.turnId=r),a}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let l=parseStartIndex(e);if(l instanceof Response)return l;let u=parseIncludeTailIndex(e);try{let d=u?await t.getStreamTailIndex():void 0,f=await t.getEventStream({startIndex:l}),p=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return d!==void 0&&p.set(EVE_STREAM_TAIL_INDEX_HEADER,String(d)),new Response(serializeAsNdjson(f,e.signal,streamEventLimit(l,d)),{headers:p})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseModeField(e){if(e!==void 0)return e===`conversation`||e===`task`?e:Response.json({error:`Expected 'mode' to be either 'conversation' or 'task'.`,ok:!1},{status:400})}function parseTurnPolicyField(e){if(e!==void 0)return e===`queue`||e===`steer`?e:Response.json({error:`Expected 'turnPolicy' to be either 'queue' or 'steer'.`,ok:!1},{status:400})}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let n=e;if(n.type===`text`)return typeof n.text!=`string`||n.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:n.text};if(n.type===`file`){if(typeof n.mediaType!=`string`||n.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof n.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(n.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:n.mediaType,data:n.data};return typeof n.filename==`string`&&n.filename.length>0&&(e.filename=n.filename),e}return Response.json({error:`Unsupported message part type "${String(n.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(t){if(t===void 0)return;if(!Array.isArray(t)||t.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let n=t.filter(isInputResponse);return n.length===t.length?n:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
|
|
2
2
|
${e}`}function parseIncludeTailIndex(e){let t=new URL(e.url).searchParams.get(`includeTailIndex`);return t===`1`||t===`true`}function parseStartIndex(e){let t=new URL(e.url).searchParams.get(`startIndex`);if(t===null)return;let n=Number(t);return!/^-?\d+$/.test(t)||!Number.isSafeInteger(n)?Response.json({error:`Expected startIndex to be an integer.`,ok:!1},{status:400}):n}function streamEventLimit(e,t){if(t===void 0)return;let n=e===void 0?0:e<0?Math.max(0,t+1+e):e;return Math.max(0,t-n+1)}function serializeAsNdjson(e,t,n){let r=new TextEncoder,i=0,a=new TransformStream({start(e){e.enqueue(r.encode(`
|
|
3
|
-
`)),n===0&&e.terminate()},transform(e,t){t.enqueue(r.encode(`${JSON.stringify(e)}\n`)),i+=1,i===n&&t.terminate()}});return e.pipeTo(a.writable,{signal:t}).catch(()=>{}),a.readable}export{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,
|
|
3
|
+
`)),n===0&&e.terminate()},transform(e,t){t.enqueue(r.encode(`${JSON.stringify(e)}\n`)),i+=1,i===n&&t.terminate()}});return e.pipeTo(a.writable,{signal:t}).catch(()=>{}),a.readable}export{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDurableSessionState}from"#execution/durable-session-store.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveDurableCompiledArtifactsSource}from"#runtime/durable-compiled-artifacts-source.js";import{createSession}from"#execution/session.js";import{resolveInheritedTokenLimit}from"#execution/run-session-limits.js";import{resolveEffectiveAgentRuntimeFromConfig}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION}from"#execution/tasks/child/instructions.js";
|
|
1
|
+
import{createDurableSessionState}from"#execution/durable-session-store.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveDurableCompiledArtifactsSource}from"#runtime/durable-compiled-artifacts-source.js";import{createSession}from"#execution/session.js";import{resolveInheritedTokenLimit}from"#execution/run-session-limits.js";import{resolveEffectiveAgentRuntimeFromConfig}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION}from"#execution/tasks/child/instructions.js";async function createSessionStep(t){"use step";let n=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:resolveDurableCompiledArtifactsSource(t.compiledArtifactsSource),nodeId:t.nodeId}),r=resolveEffectiveAgentRuntimeFromConfig(n,t.dynamicSubagentAgentConfig),i=t.taskOwned===!0&&n.resolvedAgent.config?.experimental?.tasks===!0&&r.turnAgent.tools.some(e=>e.kind===`authored-tool`&&e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===`task-update`);return{state:createDurableSessionState({session:createSession({compactionOverrides:{thresholdPercent:r.thresholdPercent},continuationToken:t.continuationToken,limits:{maxInputTokensPerSession:resolveInheritedTokenLimit({configured:r.limits?.maxInputTokensPerSession,inherited:t.inheritedLimits?.maxInputTokensPerSession}),maxOutputTokensPerSession:resolveInheritedTokenLimit({configured:r.limits?.maxOutputTokensPerSession,inherited:t.inheritedLimits?.maxOutputTokensPerSession})},outputSchema:t.outputSchema,rootSessionId:t.rootSessionId,sessionId:t.sessionId,subagentDepth:t.subagentDepth,systemPromptAdditions:i?[TASK_UPDATE_SESSION_INSTRUCTION]:void 0,turnAgent:r.turnAgent,workflowMaxSubagents:n.resolvedAgent.workflowTool?.maxSubagents})})}}export{createSessionStep};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
|
|
2
2
|
import type { PreparedRuntimeDelegationTool } from "#runtime/sessions/turn.js";
|
|
3
3
|
import { type ToolSchemaSource } from "#tools/schema.js";
|
|
4
|
-
type HarnessDelegationTool = Pick<PreparedRuntimeDelegationTool, "
|
|
4
|
+
type HarnessDelegationTool = Pick<PreparedRuntimeDelegationTool, "behavior" | "description" | "name"> & {
|
|
5
5
|
readonly inputSchema?: ToolSchemaSource | null;
|
|
6
6
|
readonly outputSchema?: ToolSchemaSource | null;
|
|
7
|
-
readonly rootOnly?: boolean;
|
|
8
7
|
};
|
|
9
8
|
export declare function createHarnessDelegationToolDefinition(tool: HarnessDelegationTool): HarnessToolDefinition;
|
|
10
9
|
export declare function createBackgroundSubagentHarnessDefinition(tool: HarnessDelegationTool): HarnessToolDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UNSPECIFIED_INPUT_SCHEMA,toInputSchema,toOutputSchema}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{defineSubagent
|
|
1
|
+
import{UNSPECIFIED_INPUT_SCHEMA,toInputSchema,toOutputSchema}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{defineSubagent}from"#execution/tools/subagent/local.js";import{defineRemoteSubagent}from"#execution/tools/subagent/remote.js";function createHarnessDelegationToolDefinition(t){return{behavior:t.behavior,description:t.description??``,inputSchema:toInputSchema(t.inputSchema)??UNSPECIFIED_INPUT_SCHEMA,name:t.name,outputSchema:toOutputSchema(t.outputSchema)??void 0}}function createBackgroundSubagentHarnessDefinition(n){let r=n.behavior?.handling;if(r?.kind!==`dispatch`)throw Error(`Background subagent tool "${n.name}" has no prepared dispatch target.`);if(r.target.kind===`task-cancel`||r.target.kind===`task-update`)throw Error(`Background subagent tool "${n.name}" cannot dispatch ${r.target.kind}.`);let i=createBackgroundSubagentDefinition({description:n.description??``,name:n.name,target:r.target}),a=createToolExecuteWithAuth({execute:i.execute,execution:i.execution,scope:n.name});return{behavior:n.behavior,description:i.description,execute:a,execution:i.execution,inputSchema:toInputSchema(i.inputSchema)??UNSPECIFIED_INPUT_SCHEMA,name:n.name,outputSchema:toOutputSchema(i.outputSchema)??void 0}}function createBackgroundSubagentDefinition(e){switch(e.target.kind){case`remote-agent-call`:return defineRemoteSubagent({description:e.description,name:e.name,target:e.target});case`self-agent-call`:case`subagent-call`:return defineSubagent({description:e.description,name:e.name,target:e.target})}}export{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition};
|
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { ActivityObserverConfig } from "#channel/types.js";
|
|
10
10
|
import { type ChannelAdapter, type ChannelAdapterContext } from "#channel/adapter.js";
|
|
11
|
+
import { type LocalDevRequestProvenance } from "#context/keys.js";
|
|
11
12
|
import { type AlsContext } from "#context/container.js";
|
|
12
13
|
import { type CompiledBundle } from "#runtime/sessions/runtime-context-keys.js";
|
|
13
14
|
import { type DispatchOutcome, type RuntimeAgentHandleAction, type RuntimeSession } from "#execution/agent-handle-dispatch.js";
|
|
14
15
|
import { getPendingRuntimeActionBatch } from "#harness/runtime-actions.js";
|
|
15
16
|
import type { ActivityWorkIdentityV1 } from "#protocol/activity.js";
|
|
16
|
-
import type {
|
|
17
|
+
import type { RuntimeActionResult, RuntimeRemoteAgentCallActionRequest, RuntimeSubagentCallActionRequest, RuntimeSubagentDispatchFailure } from "#shared/action-types.js";
|
|
18
|
+
import type { PendingAgentDispatchAction, PendingTaskControlAction } from "#shared/dispatch-action.js";
|
|
17
19
|
import { type DurableSessionState } from "#execution/durable-session-store.js";
|
|
18
20
|
import { buildSubagentRunInput, type SubagentInputSource } from "#execution/subagent-tool.js";
|
|
19
21
|
import { getDynamicSubagentSelection } from "#context/dynamic-subagent-lifecycle.js";
|
|
@@ -36,12 +38,13 @@ export type DispatchPlanEntry = {
|
|
|
36
38
|
readonly target: DispatchStartTarget;
|
|
37
39
|
} | {
|
|
38
40
|
readonly kind: "task-control";
|
|
39
|
-
readonly action:
|
|
41
|
+
readonly action: PendingTaskControlAction;
|
|
40
42
|
};
|
|
41
43
|
export type DispatchStartTarget = {
|
|
42
44
|
readonly kind: "local";
|
|
43
45
|
readonly action: RuntimeSubagentCallActionRequest;
|
|
44
46
|
readonly dynamicSubagentAgentConfig?: DynamicSubagentAgentConfig;
|
|
47
|
+
readonly selfAgent: boolean;
|
|
45
48
|
readonly source: SubagentInputSource;
|
|
46
49
|
} | {
|
|
47
50
|
readonly kind: "remote";
|
|
@@ -89,6 +92,7 @@ export interface PreparedRuntimeActionDispatch {
|
|
|
89
92
|
*/
|
|
90
93
|
readonly fanoutSize: number;
|
|
91
94
|
readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
|
|
95
|
+
readonly localDevRequest?: LocalDevRequestProvenance;
|
|
92
96
|
readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
|
|
93
97
|
readonly activityObserver?: ActivityObserverConfig & {
|
|
94
98
|
readonly workIdentity: ActivityWorkIdentityV1;
|
|
@@ -116,7 +120,7 @@ export declare function prepareRuntimeActionDispatch(input: {
|
|
|
116
120
|
readonly taskControls: boolean;
|
|
117
121
|
}): Promise<PreparedRuntimeActionDispatch | undefined>;
|
|
118
122
|
export declare function prepareAgentActionDispatch(input: {
|
|
119
|
-
readonly action:
|
|
123
|
+
readonly action: PendingAgentDispatchAction;
|
|
120
124
|
readonly ctx: AlsContext;
|
|
121
125
|
readonly event: {
|
|
122
126
|
readonly sequence: number;
|
|
@@ -163,6 +167,7 @@ export declare function startSubagent(input: {
|
|
|
163
167
|
readonly currentSession: RuntimeSession;
|
|
164
168
|
readonly fanoutSize: number;
|
|
165
169
|
readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
|
|
170
|
+
readonly localDevRequest?: LocalDevRequestProvenance;
|
|
166
171
|
readonly parentContinuationToken: string | undefined;
|
|
167
172
|
readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
|
|
168
173
|
readonly activityObserver?: ActivityObserverConfig & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{ContextContainer}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey,SandboxKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{deriveRootTurnActivityWorkId}from"#execution/activity-work-id.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{withContextScope}from"#context/run-step.js";import
|
|
1
|
+
import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{ContextContainer}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey,SandboxKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{deriveRootTurnActivityWorkId}from"#execution/activity-work-id.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{withContextScope}from"#context/run-step.js";import"#execution/agent-handle-dispatch.js";import{readActionTraceContext,readSessionTraceContext}from"#tracing/agent-trace-context-store.js";import{assertUniqueRuntimeActionCallIds,getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{createRecursiveAgentRootOnlyResult,createUnavailableDynamicSubagentResult,getSubagentName}from"#execution/dispatch-action-failures.js";import{startLocalSubagent}from"#execution/subagent-start-local.js";import{startRemoteSubagent}from"#execution/subagent-start-remote.js";import"#execution/subagent-tool.js";import{isSubagentDelegationAction,resolveSubagentDepth}from"#harness/subagent-depth.js";import{isTaskControlAction}from"#execution/tasks/parent/dispatch.js";import{resolvePreparedAgentAction}from"#execution/prepared-agent-action.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function prepareRuntimeActionDispatch(e){let t=await readDurableSession(e.sessionState),n=getPendingRuntimeActionBatch(t.state);return n===void 0||n.actions.length===0?void 0:await prepareActionDispatch({batch:n,ctx:await deserializeContext(e.serializedContext),durableSession:t,serializedContext:e.serializedContext,taskControls:e.taskControls})}async function prepareAgentActionDispatch(e){let t=await readDurableSession(e.sessionState);return await prepareActionDispatch({batch:{actions:[e.action],event:e.event,responseMessages:[]},ctx:copyDurableContext(e.ctx),durableSession:t,fanoutSize:e.localFanoutSize,serializedContext:e.serializedContext,taskControls:!1})}function copyDurableContext(e){let t=new ContextContainer;for(let[n,r]of e.entries())t.set(n,r);return t}async function prepareActionDispatch(e){let{batch:t,durableSession:n}=e;assertUniqueRuntimeActionCallIds(t.actions);let r=e.ctx,c=r.require(BundleKey),l=resolveEffectiveAgentRuntime(c,r),u=hydrateDurableSession({compactionOverrides:{thresholdPercent:l.thresholdPercent},durable:n,turnAgent:l.turnAgent}),d=r.require(ChannelKey);getAgentHandleStore(n.state);let f=planDispatch({actions:t.actions,bundle:c,ctx:r,session:u,taskControls:e.taskControls}),p=resolveActiveSandboxSessionId(d.state,u.sessionId);if(planSharesSandbox({bundle:c,plan:f}))try{u=(await withContextScope(r,u,async e=>(await r.require(SandboxKey).get(),{result:void 0,session:e}))).session}finally{r.clearVirtualContext()}return{adapter:d,adapterCtx:buildAdapterContext(d,r),auth:r.get(AuthKey)??null,batch:t,bundle:c,capabilities:r.get(CapabilitiesKey),channelMetadata:r.get(ChannelInstrumentationKey),fanoutSize:e.fanoutSize??f.filter(e=>e.kind===`start`&&e.target.kind===`local`).length,initiatorAuth:r.get(InitiatorAuthKey)??null,localDevRequest:r.localDevRequest,parentTraceContext:readSessionTraceContext(e.serializedContext,u.sessionId),plan:f,activityObserver:resolvePreparedActivity(r.get(ActivityObserverKey),u,t.event.turnId),sandboxSessionId:p,serializedContext:e.serializedContext,session:u}}function resolvePreparedActivity(e,t,n){if(e!==void 0)return{sink:e.sink,workIdentity:e.workIdentity??{id:deriveRootTurnActivityWorkId({sessionId:t.sessionId,turnId:n}),kind:`root-turn`,rootSessionId:t.rootSessionId??t.sessionId,rootTurnId:n,sessionId:t.sessionId,turnId:n}}}function planSharesSandbox(e){let t=e.bundle.graph;return e.plan.some(e=>e.kind!==`start`||e.target.kind!==`local`?!1:e.target.selfAgent||t?.nodesByNodeId.get(e.target.action.nodeId)?.sandboxRegistry.sandbox.definition.inheritsParent===!0)}function resolveActiveSandboxSessionId(e,t){if(typeof e!=`object`||!e)return t;let n=e.sandboxSessionId;return typeof n==`string`&&n.length>0?n:t}async function emitSubagentCalled(e){let{entry:r,outcome:i}=e;try{let t=r.kind===`resume`?r.action:r.target.action,a=r.kind===`resume`?r.dynamicRemoteAgent:r.target.kind===`remote`?r.target.dynamicRemoteAgent:void 0,o=await callAdapterEventHandler(e.adapter,createSubagentCalledEvent({callId:i.callId,childSessionId:i.address.sessionId,name:i.name,remote:i.address.kind===`agent/remote`?{resolverId:a===void 0?t.nodeId:a.credentialsStepId,url:i.address.url}:void 0,sequence:e.batchEvent.sequence,sessionId:e.sessionId,toolName:i.toolName,turnId:e.batchEvent.turnId,workflowId:workflowEntryReference.workflowId}),e.adapterCtx);await e.writer.write(encodeMessageStreamEvent(stampMessageStreamEvent(o)))}catch(e){logError(log,`subagent.called emission failed`,e,{callId:i.callId,childSessionId:i.address.sessionId,toolName:i.toolName})}}function planDispatch(e){let t=getAgentHandleStore(e.session.state)?.handles??[];return e.actions.map(n=>{if(e.taskControls&&isTaskControlAction(n))return{action:n,kind:`task-control`};if(!isSubagentDelegationAction(n))throw Error(`Unsupported prepared dispatch target "${n.target.kind}" in workflow runtime.`);let r=resolvePreparedAgentAction(n),i=n.input.agentId,a=typeof i==`string`&&i.trim()!==``?i:void 0;if(a!==void 0){if(t.some(e=>e.identity.id===a)){let t=e.bundle.subagentRegistry.dynamicNodeIds?.has(r.action.nodeId)===!0?getDynamicSubagentSelection(e.ctx,r.action.nodeId):void 0;return{action:r.action,agentId:a,dynamicRemoteAgent:r.action.kind===`remote-agent-call`&&t?.kind===`remote`?t.remoteAgent:void 0,kind:`resume`}}log.warn(`unknown agentId on subagent call; starting a new agent`,{agentId:a,callId:n.callId})}return classifyFreshStart({action:r.action,bundle:e.bundle,ctx:e.ctx,selfAgent:r.selfAgent,session:e.session})})}function classifyFreshStart(e){let{action:t}=e,n=e.bundle.subagentRegistry.subagentsByNodeId,r=resolveSubagentDepth(e.session),i=e.session.rootSessionId!==void 0||r.currentDepth>0,a=(t.kind===`subagent-call`||t.kind===`remote-agent-call`)&&e.bundle.subagentRegistry.dynamicNodeIds?.has(t.nodeId)===!0,o=a?getDynamicSubagentSelection(e.ctx,t.nodeId):void 0;if(a&&(o===void 0||t.kind===`subagent-call`&&o.kind!==`subagent`||t.kind===`remote-agent-call`&&o.kind!==`remote`)){let e=getSubagentName(t);return log.warn(`dynamic subagent call blocked after availability changed`,{callId:t.callId,nodeId:t.nodeId,subagentName:e}),{kind:`reject`,result:createUnavailableDynamicSubagentResult(t)}}if(e.selfAgent&&t.kind!==`subagent-call`)throw Error(`A self-agent dispatch target must resolve to a local subagent action.`);if(e.selfAgent&&i&&t.kind===`subagent-call`)return log.warn(`recursive agent call blocked outside the root session`,{callId:t.callId,currentDepth:r.currentDepth,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`reject`,result:createRecursiveAgentRootOnlyResult(t)};switch(t.kind){case`subagent-call`:{let r=o?.kind===`subagent`?o.agentConfig:void 0,i=n.get(t.nodeId),a=r?.description??(i?.definition.kind===`subagent`?i.definition.description:void 0),s=a===void 0?{outputSchema:e.bundle.turnAgent.outputSchema,type:`runtime`}:{description:a,outputSchema:r?.outputSchema??e.bundle.graph?.nodesByNodeId.get(t.nodeId)?.turnAgent?.outputSchema,type:`local`};return{kind:`start`,target:{action:t,dynamicSubagentAgentConfig:r,kind:`local`,selfAgent:e.selfAgent,source:s}}}case`remote-agent-call`:return{kind:`start`,target:{action:t,dynamicRemoteAgent:o?.kind===`remote`?o.remoteAgent:void 0,kind:`remote`}};default:return t}}async function startSubagent(e){let t=readActionTraceContext(e.serializedContext,e.session.sessionId,e.batchEvent.turnId,e.target.action.callId)??e.parentTraceContext;switch(e.target.kind){case`local`:return startLocalSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,capabilities:e.capabilities,channelMetadata:e.channelMetadata,currentSession:e.currentSession,dynamicSubagentAgentConfig:e.target.dynamicSubagentAgentConfig,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,localDevRequest:e.localDevRequest,parentContinuationToken:e.parentContinuationToken,parentTraceContext:t,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,selfAgent:e.target.selfAgent,session:e.session,source:e.target.source,taskOwned:e.taskOwned});case`remote`:return startRemoteSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,callbackBaseUrl:e.callbackBaseUrl,currentSession:e.currentSession,dynamicRemoteAgent:e.target.dynamicRemoteAgent,initiatorAuth:e.initiatorAuth,parentContinuationToken:e.parentContinuationToken,parentTraceContext:t,activityObserver:e.activityObserver,session:e.session,taskOwned:e.taskOwned});default:return e.target}}export{emitSubagentCalled,prepareAgentActionDispatch,prepareRuntimeActionDispatch,startSubagent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToAgentHandle}from"#execution/agent-handle-dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";async function dispatchRuntimeActionsStep(n){"use step";let r=await prepareRuntimeActionDispatch({serializedContext:n.serializedContext,sessionState:n.sessionState,taskControls:!1});if(r===void 0)return{results:[],sessionState:n.sessionState,pendingTasks:[]};let{batch:i,bundle:a,session:o}=r,s=n.parentWritable.getWriter(),c=o,l=[];try{for(let e of r.plan){if(e.kind===`reject`){l.push(e.result);continue}if(e.kind===`task-control`)throw Error(`Task-control actions require the task dispatch step.`);let t;switch(e.kind){case`resume`:t=await dispatchToAgentHandle({action:e.action,activityObserver:r.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:r.activityObserver,callId:e.action.callId,kind:e.action.kind===`remote-agent-call`?`remote-agent`:`subagent`,name:e.action.kind===`remote-agent-call`?e.action.remoteAgentName:e.action.subagentName,parentSessionId:o.sessionId,parentTurnId:i.event.turnId}),agentId:e.agentId,auth:r.auth,bundle:createAgentContinuationBundle({action:e.action,bundle:a,dynamicRemoteAgent:e.dynamicRemoteAgent}),currentSession:c,parentToken:n.parentContinuationToken??o.continuationToken,parentTurnId:i.event.turnId});break;case`start`:t=await startSubagent({auth:r.auth,batchEvent:i.event,bundle:a,callbackBaseUrl:n.callbackBaseUrl,capabilities:r.capabilities,channelMetadata:r.channelMetadata,currentSession:c,fanoutSize:r.fanoutSize,initiatorAuth:r.initiatorAuth,parentContinuationToken:n.parentContinuationToken,parentTraceContext:r.parentTraceContext,activityObserver:r.activityObserver,sandboxSessionId:r.sandboxSessionId,serializedContext:r.serializedContext,session:o,taskOwned:!1,target:e.target});break}if(c=t.session,t.kind===`error`){l.push(t.result);continue}await emitSubagentCalled({adapter:r.adapter,adapterCtx:r.adapterCtx,batchEvent:i.event,entry:e,outcome:t,sessionId:o.sessionId,writer:s})}}finally{s.releaseLock()}return{results:l,sessionState:c===o?n.sessionState:createDurableSessionState({session:c}),pendingTasks:[]}}export{dispatchRuntimeActionsStep};
|
|
1
|
+
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToAgentHandle}from"#execution/agent-handle-dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";async function dispatchRuntimeActionsStep(n){"use step";let r=await prepareRuntimeActionDispatch({serializedContext:n.serializedContext,sessionState:n.sessionState,taskControls:!1});if(r===void 0)return{results:[],sessionState:n.sessionState,pendingTasks:[]};let{batch:i,bundle:a,session:o}=r,s=n.parentWritable.getWriter(),c=o,l=[];try{for(let e of r.plan){if(e.kind===`reject`){l.push(e.result);continue}if(e.kind===`task-control`)throw Error(`Task-control actions require the task dispatch step.`);let t;switch(e.kind){case`resume`:t=await dispatchToAgentHandle({action:e.action,activityObserver:r.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:r.activityObserver,callId:e.action.callId,kind:e.action.kind===`remote-agent-call`?`remote-agent`:`subagent`,name:e.action.kind===`remote-agent-call`?e.action.remoteAgentName:e.action.subagentName,parentSessionId:o.sessionId,parentTurnId:i.event.turnId}),agentId:e.agentId,auth:r.auth,bundle:createAgentContinuationBundle({action:e.action,bundle:a,dynamicRemoteAgent:e.dynamicRemoteAgent}),currentSession:c,parentToken:n.parentContinuationToken??o.continuationToken,parentTurnId:i.event.turnId});break;case`start`:t=await startSubagent({auth:r.auth,batchEvent:i.event,bundle:a,callbackBaseUrl:n.callbackBaseUrl,capabilities:r.capabilities,channelMetadata:r.channelMetadata,currentSession:c,fanoutSize:r.fanoutSize,initiatorAuth:r.initiatorAuth,localDevRequest:r.localDevRequest,parentContinuationToken:n.parentContinuationToken,parentTraceContext:r.parentTraceContext,activityObserver:r.activityObserver,sandboxSessionId:r.sandboxSessionId,serializedContext:r.serializedContext,session:o,taskOwned:!1,target:e.target});break}if(c=t.session,t.kind===`error`){l.push(t.result);continue}await emitSubagentCalled({adapter:r.adapter,adapterCtx:r.adapterCtx,batchEvent:i.event,entry:e,outcome:t,sessionId:o.sessionId,writer:s})}}finally{s.releaseLock()}return{results:l,sessionState:c===o?n.sessionState:createDurableSessionState({session:c}),pendingTasks:[]}}export{dispatchRuntimeActionsStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getSubagentDelegationName,isSubagentDelegationAction}from"#harness/subagent-depth.js";import{dispatchRuntimeActionsStep}from"#execution/dispatch-runtime-actions-step.js";import{dispatchTaskStep}from"#execution/tasks/parent/dispatch-task-step.js";import{getPendingWorkflowInterrupt,setPendingWorkflowUsedCalls}from"#harness/workflow-interrupt-state.js";import{buildRuntimeActionsFromWorkflowInterrupt}from"#harness/workflow-runtime-action-state.js";import{planWorkflowSubagentDispatch}from"#harness/workflow-subagent-limit.js";const log=createLogger(`execution.dispatch-workflow-runtime-actions`);async function dispatchWorkflowRuntimeActionsStep(e){"use step";let n=await readDurableSession(e.sessionState),r=getPendingWorkflowInterrupt(n.state);if(r===void 0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let i=buildRuntimeActionsFromWorkflowInterrupt(r.interrupt);if(i.length===0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let a=await deserializeContext(e.serializedContext),o=a.require(BundleKey),s=resolveEffectiveAgentRuntime(o,a),c=planWorkflowSubagentDispatch({actions:i,maxSubagents:n.workflowMaxSubagents,usedCalls:r.usedCalls}),l=c.blocked.map(e=>(log.warn(`workflow subagent limit reached; blocking delegated call`,{callId:e.callId,maxSubagents:c.maxSubagents,subagentName:isSubagentDelegationAction(e)?getSubagentDelegationName(e):e.kind,usedCalls:c.usedCalls}),createWorkflowSubagentLimitResult({action:e,plan:c})));if(c.allowed.length===0)return{results:l,sessionState:e.sessionState,pendingTasks:[]};let u=setPendingWorkflowUsedCalls({session:hydrateDurableSession({compactionOverrides:{thresholdPercent:s.thresholdPercent},durable:n,turnAgent:s.turnAgent}),usedCalls:r.usedCalls+c.allowed.length}),d=setPendingRuntimeActionBatch({actions:c.allowed,event:{sequence:0,stepIndex:0,turnId:`workflow-dispatch`},responseMessages:[],session:u}),f=await(o.resolvedAgent.config?.experimental?.tasks===!0?dispatchTaskStep:dispatchRuntimeActionsStep)({callbackBaseUrl:e.callbackBaseUrl,parentContinuationToken:e.parentContinuationToken,parentWritable:e.parentWritable,serializedContext:e.serializedContext,sessionState:createDurableSessionState({session:d})});return l.length===0?f:{results:[...f.results,...l],sessionState:f.sessionState,pendingTasks:f.pendingTasks}}function createWorkflowSubagentLimitResult(e){let t=isSubagentDelegationAction(e.action)?getSubagentDelegationName(e.action):e.action.kind;return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:`WORKFLOW_SUBAGENT_LIMIT_REACHED`,maxSubagents:e.plan.maxSubagents,message:`Workflow subagent limit reached (${String(e.plan.maxSubagents)}); "${t}" was not called.`},subagentName:t}}export{dispatchWorkflowRuntimeActionsStep};
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getSubagentDelegationName,isSubagentDelegationAction}from"#harness/subagent-depth.js";import{dispatchRuntimeActionsStep}from"#execution/dispatch-runtime-actions-step.js";import{dispatchTaskStep}from"#execution/tasks/parent/dispatch-task-step.js";import{getPendingWorkflowInterrupt,setPendingWorkflowUsedCalls}from"#harness/workflow-interrupt-state.js";import{buildRuntimeActionsFromWorkflowInterrupt}from"#harness/workflow-runtime-action-state.js";import{planWorkflowSubagentDispatch}from"#harness/workflow-subagent-limit.js";const log=createLogger(`execution.dispatch-workflow-runtime-actions`);async function dispatchWorkflowRuntimeActionsStep(e){"use step";let n=await readDurableSession(e.sessionState),r=getPendingWorkflowInterrupt(n.state);if(r===void 0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let i=buildRuntimeActionsFromWorkflowInterrupt(r.interrupt);if(i.length===0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let a=await deserializeContext(e.serializedContext),o=a.require(BundleKey),s=resolveEffectiveAgentRuntime(o,a),c=planWorkflowSubagentDispatch({actions:i,maxSubagents:n.workflowMaxSubagents,usedCalls:r.usedCalls}),l=c.blocked.map(e=>(log.warn(`workflow subagent limit reached; blocking delegated call`,{callId:e.callId,maxSubagents:c.maxSubagents,subagentName:isSubagentDelegationAction(e)?getSubagentDelegationName(e):e.target.kind,usedCalls:c.usedCalls}),createWorkflowSubagentLimitResult({action:e,plan:c})));if(c.allowed.length===0)return{results:l,sessionState:e.sessionState,pendingTasks:[]};let u=setPendingWorkflowUsedCalls({session:hydrateDurableSession({compactionOverrides:{thresholdPercent:s.thresholdPercent},durable:n,turnAgent:s.turnAgent}),usedCalls:r.usedCalls+c.allowed.length}),d=setPendingRuntimeActionBatch({actions:c.allowed,event:{sequence:0,stepIndex:0,turnId:`workflow-dispatch`},responseMessages:[],session:u}),f=await(o.resolvedAgent.config?.experimental?.tasks===!0?dispatchTaskStep:dispatchRuntimeActionsStep)({callbackBaseUrl:e.callbackBaseUrl,parentContinuationToken:e.parentContinuationToken,parentWritable:e.parentWritable,serializedContext:e.serializedContext,sessionState:createDurableSessionState({session:d})});return l.length===0?f:{results:[...f.results,...l],sessionState:f.sessionState,pendingTasks:f.pendingTasks}}function createWorkflowSubagentLimitResult(e){let t=isSubagentDelegationAction(e.action)?getSubagentDelegationName(e.action):e.action.target.kind;return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:`WORKFLOW_SUBAGENT_LIMIT_REACHED`,maxSubagents:e.plan.maxSubagents,message:`Workflow subagent limit reached (${String(e.plan.maxSubagents)}); "${t}" was not called.`},subagentName:t}}export{dispatchWorkflowRuntimeActionsStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{preparePersistedStepDynamicToolMetadata}from"#context/dynamic-tool-lifecycle.js";import{createToolLoopHarness}from"#harness/tool-loop.js";import{findRegisteredRuntimeTool}from"#runtime/tools/registry.js";import{preserveFrameworkStateOnCompaction}from"#execution/compaction.js";const log=createLogger(`execution.node-step`);function createExecutionNodeStep(e){let t=createRuntimeModelResolver(e.modelResolutionScope),n=e.node.turnAgent.dynamicModel===void 0?void 0:createRuntimeDynamicModelEventDispatcher(e.modelResolutionScope,e.node.turnAgent.dynamicModel),r=createNodeHarnessTools({node:e.node}),i=e.instrumentation,a=i?.prepareExecution(),o=createToolLoopHarness({abortSignal:e.abortSignal,capabilities:e.capabilities,clearOnly:e.clearOnly,compactOnly:e.compactOnly,workflow:e.node.agent.workflowTool!==void 0,workflowMaxSubagents:e.workflowMaxSubagents,handleEvent:e.handleEvent,historyProjector:e.historyProjector,historyView:e.historyView,instrumentation:a,mode:e.mode,tasksEnabled:e.node.agent.config?.experimental?.tasks===!0,onCompaction:preserveFrameworkStateOnCompaction,prepareStepDynamicTools:t=>preparePersistedStepDynamicToolMetadata({...t,resolvers:e.node.agent.dynamicToolResolvers??[]}),dispatchDynamicModelEvent:n,resolveModel:t,runtimeIdentity:buildRuntimeIdentity(e.node),tools:r});return i===void 0?o:async(e,t)=>{try{return await o(e,t)}finally{await i.flush()}}}function buildRuntimeIdentity(e){let n=resolveInstalledPackageInfo(),r={agentId:e.turnAgent.id,agentName:e.agent.config?.name,eveVersion:n.version},i=process.env.VERCEL_GIT_COMMIT_SHA?.trim(),a=process.env.VERCEL_GIT_COMMIT_REF?.trim(),o=process.env.VERCEL_DEPLOYMENT_CREATED_AT?.trim();return i||a||o?{...r,build:{deployedAt:o||void 0,gitBranch:a||void 0,gitSha:i||void 0}}:r}function createRuntimeModelResolver(e){return t=>resolveRuntimeModelReference(t,e)}function createRuntimeDynamicModelEventDispatcher(e,t){return n=>dispatchDynamicModelEvent({ctx:n.ctx,dynamicModel:t,event:n.event,messages:n.messages,scope:e})}function createNodeHarnessTools(e){let t=new Map,n=e.node.agent.config?.experimental?.tasks===!0;for(let r of e.node.turnAgent.tools){let i=resolveHarnessToolDefinition({node:e.node,tasksEnabled:n,tool:r});i!==null&&t.set(r.name,i)}return t}function resolveHarnessToolDefinition(e){if(e.tool.kind===`subagent`||e.tool.kind===`remote`)return e.tasksEnabled?createBackgroundSubagentHarnessDefinition(e.tool):createHarnessDelegationToolDefinition(e.tool);let t=findRegisteredRuntimeTool(e.node.toolRegistry,e.tool.name);if(t===null)return log.warn(`declared tool is not registered — omitting from toolset`,{toolName:e.tool.name,nodeId:e.node.nodeId}),null;let r=t.definition,i=e.tool.behavior?.handling?.kind===`dispatch`?e.tool.behavior.handling.target:void 0;if(!e.tasksEnabled&&(i?.kind===`task-cancel`||i?.kind===`task-update`))return null;if(i?.kind===`self-agent-call`&&e.tasksEnabled){let t=e.tool.behavior;if(t===void 0)throw Error(`Self-agent tool "${e.tool.name}" has no prepared behavior.`);return createBackgroundSubagentHarnessDefinition({behavior:t,description:e.tool.description,inputSchema:e.tool.inputSchema,name:e.tool.name,outputSchema:e.tool.outputSchema})}let s=r.execute;return{behavior:e.tool.behavior,approvalKey:r.approvalKey,description:r.description,execution:r.execution,execute:resolveAuthoredExecute({rawExecute:s,scope:r.name}),inputSchema:r.inputSchema??UNSPECIFIED_INPUT_SCHEMA,name:r.name,approval:r.approval,outputSchema:r.outputSchema,toModelOutput:r.toModelOutput}}function resolveAuthoredExecute(e){let{rawExecute:t,scope:n}=e;return t===void 0?void 0:createToolExecuteWithAuth({execute:t,scope:n})}export{buildRuntimeIdentity,createExecutionNodeStep,createNodeHarnessTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{
|
|
1
|
+
import{getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{getPendingDispatchActionKey}from"#runtime/actions/keys.js";function derivePendingState(t){let n=getPendingRuntimeActionBatch(t.state),r=getPendingAuthorization(t.state),i={authorizationAttemptIds:r?.challenges.flatMap(e=>e.attemptId===void 0?[]:[e.attemptId]),authorizationNames:r?.challenges.map(e=>e.name),hasPendingAuthorization:r!==void 0,hasPendingInputBatch:hasPendingInputBatch(t.state)};return n===void 0?i:{...i,pendingRuntimeActionKeys:n.actions.map(e=>getPendingDispatchActionKey(e))}}export{derivePendingState};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RuntimeAgentHandleAction } from "#execution/agent-handle-dispatch.js";
|
|
2
|
+
import type { PendingAgentDispatchAction } from "#shared/dispatch-action.js";
|
|
3
|
+
/** Converts a prepared dispatch identity into the existing agent transport contract. */
|
|
4
|
+
export declare function resolvePreparedAgentAction(action: PendingAgentDispatchAction): {
|
|
5
|
+
readonly action: RuntimeAgentHandleAction;
|
|
6
|
+
readonly selfAgent: boolean;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function resolvePreparedAgentAction(e){let t={callId:e.callId,description:e.description,input:e.input,name:e.toolName,nodeId:e.target.nodeId};switch(e.target.kind){case`remote-agent-call`:return{action:{...t,kind:`remote-agent-call`,remoteAgentName:e.target.remoteAgentName},selfAgent:!1};case`self-agent-call`:return{action:{...t,kind:`subagent-call`,subagentName:e.target.subagentName},selfAgent:!0};case`subagent-call`:return{action:{...t,kind:`subagent-call`,subagentName:e.target.subagentName},selfAgent:!1}}}export{resolvePreparedAgentAction};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DispatchOutcome, RuntimeSession } from "#execution/agent-handle-dispatch.js";
|
|
2
|
+
import type { LocalDevRequestProvenance } from "#context/keys.js";
|
|
2
3
|
import { buildSubagentRunInput, type SubagentInputSource } from "#execution/subagent-tool.js";
|
|
3
4
|
import { createWorkflowRuntime } from "#execution/workflow-runtime.js";
|
|
4
5
|
import type { RuntimeSubagentCallActionRequest } from "#shared/action-types.js";
|
|
@@ -19,10 +20,12 @@ export declare function startLocalSubagent(input: {
|
|
|
19
20
|
readonly dynamicSubagentAgentConfig?: DynamicSubagentAgentConfig;
|
|
20
21
|
readonly fanoutSize: number;
|
|
21
22
|
readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
|
|
23
|
+
readonly localDevRequest?: LocalDevRequestProvenance;
|
|
22
24
|
readonly parentContinuationToken: string | undefined;
|
|
23
25
|
readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
|
|
24
26
|
readonly activityObserver?: Parameters<typeof buildSubagentRunInput>[0]["activityObserver"];
|
|
25
27
|
readonly sandboxSessionId: string;
|
|
28
|
+
readonly selfAgent: boolean;
|
|
26
29
|
readonly session: RuntimeSession;
|
|
27
30
|
readonly source: SubagentInputSource;
|
|
28
31
|
readonly taskOwned: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,logError}from"#internal/logging.js";import{isRuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{toErrorMessage}from"#shared/errors.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{SUBAGENT_START_FAILED}from"#harness/agent-handle-errors.js";import{confirmAgentStarted,confirmTaskAgentAddress,prepareAgentStart,rejectAgentEffect}from"#harness/handles/transitions.js";import{buildSubagentRunInput}from"#execution/subagent-tool.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";import{mintStartOperation}from"#execution/dispatch-start-operation.js";const log=createLogger(`execution.subagent-start-local`);async function startLocalSubagent(e){let{action:t,source:n}=e,r=deriveChildActivityObserverConfig({activityObserver:e.activityObserver,callId:t.callId,kind:`subagent`,name:t.subagentName,parentSessionId:e.session.sessionId,parentTurnId:e.batchEvent.turnId}),i=createWorkflowRuntime({compiledArtifactsSource:e.bundle.compiledArtifactsSource,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,nodeId:t.nodeId}),{childContinuationToken:a,runInput:o}=buildSubagentRunInput({action:t,auth:e.auth,batchEvent:e.batchEvent,capabilities:e.capabilities,channelMetadata:e.channelMetadata,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,graph:e.bundle.graph,parentContinuationToken:e.parentContinuationToken,parentTraceContext:e.parentTraceContext,activityObserver:r,sandboxSessionId:e.sandboxSessionId,session:e.session,source:n}),s=n.type===`runtime`?`agent/self`:`agent/local`,{identity:c,operation:l}=mintStartOperation({callId:t.callId,name:t.subagentName,nodeId:t.nodeId,parentSessionId:e.session.sessionId,parentTurnId:e.batchEvent.turnId}),u=prepareAgentStart(e.currentSession,{identity:c,operation:l,target:{continuationToken:a,kind:s}}),d;try{d=(await i.createSession(o)).sessionId}catch(e){if(!isRuntimeSessionOwnershipConflictError(e))return logError(log,`local subagent start failed`,e,{callId:t.callId,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`error`,result:{callId:t.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:SUBAGENT_START_FAILED,message:toErrorMessage(e)},subagentName:t.subagentName},session:rejectAgentEffect(u,{disposition:`dead`,operationId:l.id})};d=e.ownerSessionId}let f={continuationToken:a,kind:s,sessionId:d};return{address:f,callId:t.callId,kind:`called`,name:t.name,session:e.taskOwned?confirmTaskAgentAddress(u,{address:f,operationId:l.id}):confirmAgentStarted(u,{address:f,operationId:l.id}),toolName:t.subagentName}}export{startLocalSubagent};
|
|
1
|
+
import{createLogger,logError}from"#internal/logging.js";import{isRuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{ContextContainer,contextStorage}from"#context/container.js";import{toErrorMessage}from"#shared/errors.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{SUBAGENT_START_FAILED}from"#harness/agent-handle-errors.js";import{confirmAgentStarted,confirmTaskAgentAddress,prepareAgentStart,rejectAgentEffect}from"#harness/handles/transitions.js";import{buildSubagentRunInput}from"#execution/subagent-tool.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";import{mintStartOperation}from"#execution/dispatch-start-operation.js";const log=createLogger(`execution.subagent-start-local`);async function startLocalSubagent(e){let{action:t,source:n}=e,r=deriveChildActivityObserverConfig({activityObserver:e.activityObserver,callId:t.callId,kind:`subagent`,name:t.subagentName,parentSessionId:e.session.sessionId,parentTurnId:e.batchEvent.turnId}),i=createWorkflowRuntime({compiledArtifactsSource:e.bundle.compiledArtifactsSource,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,nodeId:t.nodeId}),{childContinuationToken:a,runInput:o}=buildSubagentRunInput({action:t,auth:e.auth,batchEvent:e.batchEvent,capabilities:e.capabilities,channelMetadata:e.channelMetadata,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,graph:e.bundle.graph,parentContinuationToken:e.parentContinuationToken,parentTraceContext:e.parentTraceContext,activityObserver:r,sandboxSessionId:e.sandboxSessionId,selfAgent:e.selfAgent,session:e.session,source:n}),s=n.type===`runtime`?`agent/self`:`agent/local`,{identity:c,operation:l}=mintStartOperation({callId:t.callId,name:t.subagentName,nodeId:t.nodeId,parentSessionId:e.session.sessionId,parentTurnId:e.batchEvent.turnId}),u=prepareAgentStart(e.currentSession,{identity:c,operation:l,target:{continuationToken:a,kind:s}}),d;try{d=(await contextStorage.run(new ContextContainer({localDevRequest:e.localDevRequest}),()=>i.createSession(o))).sessionId}catch(e){if(!isRuntimeSessionOwnershipConflictError(e))return logError(log,`local subagent start failed`,e,{callId:t.callId,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`error`,result:{callId:t.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:SUBAGENT_START_FAILED,message:toErrorMessage(e)},subagentName:t.subagentName},session:rejectAgentEffect(u,{disposition:`dead`,operationId:l.id})};d=e.ownerSessionId}let f={continuationToken:a,kind:s,sessionId:d};return{address:f,callId:t.callId,kind:`called`,name:t.name,session:e.taskOwned?confirmTaskAgentAddress(u,{address:f,operationId:l.id}):confirmAgentStarted(u,{address:f,operationId:l.id}),toolName:t.subagentName}}export{startLocalSubagent};
|
|
@@ -72,6 +72,7 @@ export declare function buildSubagentRunInput(input: {
|
|
|
72
72
|
readonly graph?: SubagentSandboxGraph;
|
|
73
73
|
/** Durable session identity of the sandbox currently used by the parent. */
|
|
74
74
|
readonly sandboxSessionId?: string;
|
|
75
|
+
readonly selfAgent: boolean;
|
|
75
76
|
/** Hook token owned by the workflow currently waiting for this child. */
|
|
76
77
|
readonly parentContinuationToken?: string;
|
|
77
78
|
readonly parentTraceContext?: SessionTraceContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{formatSubagentInput,normalizeRequestedOutputSchema}from"#execution/subagent-invocation.js";import{mintSubagentContinuationToken}from"#execution/session.js";import{SUBAGENT_ADAPTER_KIND}from"#execution/subagent-adapter-state.js";import{resolveSubagentDepth}from"#harness/subagent-depth.js";import{resolveRemainingSessionTokenLimits}from"#harness/subagent-token-budget.js";function buildSubagentRunInput(e){let{action:r,auth:i,batchEvent:a,capabilities:o,channelMetadata:s,initiatorAuth:c,session:l,source:u}=e,d=mintSubagentContinuationToken(`${l.sessionId}:${r.callId}`),f=l.rootSessionId??l.sessionId,p=resolveSubagentDepth(l),m=resolveRemainingSessionTokenLimits(l,e.fanoutSize),h=normalizeRequestedOutputSchema(r.input.outputSchema),g={callId:r.callId,parentContinuationToken:e.parentContinuationToken??l.continuationToken,parentSessionId:l.sessionId,subagentName:r.subagentName};return(e.graph?.nodesByNodeId.get(r.nodeId)?.sandboxRegistry.sandbox?.definition.inheritsParent===!0||
|
|
1
|
+
import{formatSubagentInput,normalizeRequestedOutputSchema}from"#execution/subagent-invocation.js";import{mintSubagentContinuationToken}from"#execution/session.js";import{SUBAGENT_ADAPTER_KIND}from"#execution/subagent-adapter-state.js";import{resolveSubagentDepth}from"#harness/subagent-depth.js";import{resolveRemainingSessionTokenLimits}from"#harness/subagent-token-budget.js";function buildSubagentRunInput(e){let{action:r,auth:i,batchEvent:a,capabilities:o,channelMetadata:s,initiatorAuth:c,session:l,source:u}=e,d=mintSubagentContinuationToken(`${l.sessionId}:${r.callId}`),f=l.rootSessionId??l.sessionId,p=resolveSubagentDepth(l),m=resolveRemainingSessionTokenLimits(l,e.fanoutSize),h=normalizeRequestedOutputSchema(r.input.outputSchema),g={callId:r.callId,parentContinuationToken:e.parentContinuationToken??l.continuationToken,parentSessionId:l.sessionId,subagentName:r.subagentName};return(e.graph?.nodesByNodeId.get(r.nodeId)?.sandboxRegistry.sandbox?.definition.inheritsParent===!0||e.selfAgent)&&(l.sandboxState!==void 0&&(g.parentSandboxState=l.sandboxState),g.sandboxSessionId=e.sandboxSessionId??l.sessionId),{childContinuationToken:d,runInput:{adapter:{kind:SUBAGENT_ADAPTER_KIND,state:g},auth:i,capabilities:o,channelMetadata:s,continuationToken:d,initiatorAuth:c,input:{message:formatSubagentCallInputMessage({action:r,source:u}),outputSchema:h??u.outputSchema},limits:m,mode:`conversation`,parent:{callId:r.callId,rootSessionId:f,sessionId:l.sessionId,turn:{id:a.turnId,sequence:a.sequence}},parentTraceContext:e.parentTraceContext,activityObserver:e.activityObserver,subagentDepth:p.nextChildDepth}}}function formatSubagentCallInputMessage(t){let{message:n}=t.action.input;switch(t.source.type){case`local`:return formatSubagentInput({description:t.source.description,message:n,name:t.action.subagentName,type:`local`}).message;case`runtime`:return formatSubagentInput({message:n,name:t.action.subagentName,type:`runtime`}).message;default:return t.source}}export{buildSubagentRunInput};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { ChannelAdapter } from "#channel/adapter.js";
|
|
2
|
-
import type { RuntimeActionResult
|
|
2
|
+
import type { RuntimeActionResult } from "#shared/action-types.js";
|
|
3
|
+
import type { TaskControlInvocation } from "#shared/dispatch-action.js";
|
|
3
4
|
/** Sends one child-authored progress update over its existing parent transport. */
|
|
4
5
|
export declare function executeTaskUpdate(input: {
|
|
5
|
-
readonly action:
|
|
6
|
+
readonly action: TaskControlInvocation;
|
|
6
7
|
readonly adapter: ChannelAdapter | undefined;
|
|
7
8
|
readonly updateIndex: number;
|
|
8
9
|
readonly updateEpoch: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { RuntimeSession } from "#execution/agent-handle-dispatch.js";
|
|
2
2
|
import { type AgentHandle } from "#harness/handles/store.js";
|
|
3
|
-
import type { RuntimeActionResult
|
|
3
|
+
import type { RuntimeActionResult } from "#shared/action-types.js";
|
|
4
|
+
import type { TaskControlInvocation } from "#shared/dispatch-action.js";
|
|
4
5
|
import { type SessionTaskIndexEntry } from "#tasks/session-index.js";
|
|
5
6
|
import { type TaskView } from "#tasks/types.js";
|
|
6
7
|
/**
|
|
@@ -29,8 +30,8 @@ export declare function findActiveTaskForAgent(session: RuntimeSession, agentId:
|
|
|
29
30
|
readonly view: TaskView;
|
|
30
31
|
} | undefined>;
|
|
31
32
|
/** One successful task-control result carrying full task views. */
|
|
32
|
-
export declare function createTaskViewsResult(action:
|
|
33
|
+
export declare function createTaskViewsResult(action: TaskControlInvocation, views: readonly TaskView[]): RuntimeActionResult;
|
|
33
34
|
/** One task-control error the model can act on. */
|
|
34
|
-
export declare function createTaskControlError(action:
|
|
35
|
+
export declare function createTaskControlError(action: TaskControlInvocation, message: string): RuntimeActionResult;
|
|
35
36
|
/** The ownership error for ids outside this session's task index. */
|
|
36
|
-
export declare function createUnknownTasksError(action:
|
|
37
|
+
export declare function createUnknownTasksError(action: TaskControlInvocation, unknown: readonly string[]): RuntimeActionResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToTaskAgentAddress}from"#execution/agent-handle-dispatch.js";import{executeTaskControlAction}from"#execution/tasks/parent/dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";import{beginDelegatedTask,settleDelegatedDispatch}from"#execution/tasks/parent/delegate.js";import{checkTaskContinuationAvailability,describeTaskDispatch,persistContinuationTaskInParentSession,settleTaskDispatchError}from"#execution/tasks/parent/continuation-dispatch.js";async function dispatchTaskStep(r){"use step";let i=await prepareRuntimeActionDispatch({serializedContext:r.serializedContext,sessionState:r.sessionState,taskControls:!0});if(i===void 0)return{results:[],sessionState:r.sessionState,pendingTasks:[]};let{batch:a,bundle:o,session:s}=i,c=r.parentWritable.getWriter(),l=s,u=[],d=[];try{for(let e of i.plan){if(e.kind===`reject`){u.push(e.result);continue}if(e.kind===`task-control`){let t=await executeTaskControlAction({action:e.action,adapter:i.adapter,bundle:o,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,serializedContext:i.serializedContext,session:l});l=t.session,t.pendingTask!==void 0&&d.push(t.pendingTask),u.push(t.result);continue}if(e.kind===`resume`){let t=await checkTaskContinuationAvailability({action:e.action,agentId:e.agentId,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,session:l});if(t!==void 0){u.push(t);continue}}let n=e.kind===`resume`?e.action:e.target.action,f=await beginDelegatedTask({...describeTaskDispatch({action:n,agentId:e.kind===`resume`?e.agentId:void 0,parentSessionId:s.sessionId,parentTurnId:a.event.turnId,session:l}),activityObserver:i.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:i.activityObserver,callId:n.callId,kind:`task`,name:e.kind===`resume`?e.action.name:e.target.action.name,parentSessionId:s.sessionId,parentTurnId:a.event.turnId}),parentSessionId:s.sessionId,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,session:l}),p;e.kind===`resume`&&(p=await persistContinuationTaskInParentSession({action:e.action,agentId:e.agentId,delegated:f,session:l}),l=p?.session??l);let m;switch(e.kind){case`resume`:m=await dispatchToTaskAgentAddress({action:e.action,activityObserver:i.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:i.activityObserver,callId:e.action.callId,kind:`task`,name:e.action.name,parentSessionId:s.sessionId,parentTurnId:a.event.turnId}),agentId:e.agentId,auth:i.auth,bundle:createAgentContinuationBundle({action:e.action,bundle:o,dynamicRemoteAgent:e.dynamicRemoteAgent}),currentSession:l,parentToken:f.taskInboxToken});break;case`start`:m=await startSubagent({auth:i.auth,batchEvent:a.event,bundle:o,callbackBaseUrl:r.callbackBaseUrl,capabilities:i.capabilities,channelMetadata:i.channelMetadata,currentSession:l,fanoutSize:i.fanoutSize,initiatorAuth:i.initiatorAuth,parentContinuationToken:f.taskInboxToken,parentTraceContext:i.parentTraceContext,activityObserver:i.activityObserver,sandboxSessionId:i.sandboxSessionId,serializedContext:i.serializedContext,session:s,taskOwned:!0,target:e.target});break}if(l=m.session,m.kind===`error`){u.push(await settleTaskDispatchError({delegated:f,outcome:m,persisted:p})),p!==void 0&&d.push(f);continue}if(p!==void 0)u.push(p.receipt);else{let e=await settleDelegatedDispatch({callId:m.callId,session:l,subagentName:m.toolName,task:f});l=e.session,u.push(e.receipt)}d.push(f),await emitSubagentCalled({adapter:i.adapter,adapterCtx:i.adapterCtx,batchEvent:a.event,entry:e,outcome:m,sessionId:s.sessionId,writer:c})}}finally{c.releaseLock()}return{results:u,sessionState:l===s?r.sessionState:createDurableSessionState({session:l}),pendingTasks:d}}export{dispatchTaskStep};
|
|
1
|
+
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToTaskAgentAddress}from"#execution/agent-handle-dispatch.js";import{executeTaskControlAction}from"#execution/tasks/parent/dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";import{beginDelegatedTask,settleDelegatedDispatch}from"#execution/tasks/parent/delegate.js";import{checkTaskContinuationAvailability,describeTaskDispatch,persistContinuationTaskInParentSession,settleTaskDispatchError}from"#execution/tasks/parent/continuation-dispatch.js";async function dispatchTaskStep(r){"use step";let i=await prepareRuntimeActionDispatch({serializedContext:r.serializedContext,sessionState:r.sessionState,taskControls:!0});if(i===void 0)return{results:[],sessionState:r.sessionState,pendingTasks:[]};let{batch:a,bundle:o,session:s}=i,c=r.parentWritable.getWriter(),l=s,u=[],d=[];try{for(let e of i.plan){if(e.kind===`reject`){u.push(e.result);continue}if(e.kind===`task-control`){let t=await executeTaskControlAction({action:e.action,adapter:i.adapter,bundle:o,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,serializedContext:i.serializedContext,session:l});l=t.session,t.pendingTask!==void 0&&d.push(t.pendingTask),u.push(t.result);continue}if(e.kind===`resume`){let t=await checkTaskContinuationAvailability({action:e.action,agentId:e.agentId,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,session:l});if(t!==void 0){u.push(t);continue}}let n=e.kind===`resume`?e.action:e.target.action,f=await beginDelegatedTask({...describeTaskDispatch({action:n,agentId:e.kind===`resume`?e.agentId:void 0,parentSessionId:s.sessionId,parentTurnId:a.event.turnId,session:l}),activityObserver:i.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:i.activityObserver,callId:n.callId,kind:`task`,name:e.kind===`resume`?e.action.name:e.target.action.name,parentSessionId:s.sessionId,parentTurnId:a.event.turnId}),parentSessionId:s.sessionId,parentStepIndex:a.event.stepIndex,parentTurnId:a.event.turnId,session:l}),p;e.kind===`resume`&&(p=await persistContinuationTaskInParentSession({action:e.action,agentId:e.agentId,delegated:f,session:l}),l=p?.session??l);let m;switch(e.kind){case`resume`:m=await dispatchToTaskAgentAddress({action:e.action,activityObserver:i.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:i.activityObserver,callId:e.action.callId,kind:`task`,name:e.action.name,parentSessionId:s.sessionId,parentTurnId:a.event.turnId}),agentId:e.agentId,auth:i.auth,bundle:createAgentContinuationBundle({action:e.action,bundle:o,dynamicRemoteAgent:e.dynamicRemoteAgent}),currentSession:l,parentToken:f.taskInboxToken});break;case`start`:m=await startSubagent({auth:i.auth,batchEvent:a.event,bundle:o,callbackBaseUrl:r.callbackBaseUrl,capabilities:i.capabilities,channelMetadata:i.channelMetadata,currentSession:l,fanoutSize:i.fanoutSize,initiatorAuth:i.initiatorAuth,localDevRequest:i.localDevRequest,parentContinuationToken:f.taskInboxToken,parentTraceContext:i.parentTraceContext,activityObserver:i.activityObserver,sandboxSessionId:i.sandboxSessionId,serializedContext:i.serializedContext,session:s,taskOwned:!0,target:e.target});break}if(l=m.session,m.kind===`error`){u.push(await settleTaskDispatchError({delegated:f,outcome:m,persisted:p})),p!==void 0&&d.push(f);continue}if(p!==void 0)u.push(p.receipt);else{let e=await settleDelegatedDispatch({callId:m.callId,session:l,subagentName:m.toolName,task:f});l=e.session,u.push(e.receipt)}d.push(f),await emitSubagentCalled({adapter:i.adapter,adapterCtx:i.adapterCtx,batchEvent:a.event,entry:e,outcome:m,sessionId:s.sessionId,writer:c})}}finally{c.releaseLock()}return{results:u,sessionState:l===s?r.sessionState:createDurableSessionState({session:l}),pendingTasks:d}}export{dispatchTaskStep};
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { RuntimeSession } from "#execution/agent-handle-dispatch.js";
|
|
2
2
|
import type { ChannelAdapter } from "#channel/adapter.js";
|
|
3
3
|
import type { DelegatedTask } from "#execution/tasks/parent/delegate.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { RuntimeActionResult } from "#shared/action-types.js";
|
|
5
|
+
import type { PendingDispatchAction, PendingTaskControlAction } from "#shared/dispatch-action.js";
|
|
5
6
|
import type { CompiledBundle } from "#runtime/sessions/runtime-context-keys.js";
|
|
6
7
|
import type { SessionTaskIndexEntry } from "#tasks/session-index.js";
|
|
7
8
|
import { type SubagentExecutorData, type TaskView } from "#tasks/types.js";
|
|
8
9
|
/** True for task-control calls dispatched outside the model loop. */
|
|
9
|
-
export declare function isTaskControlAction(action:
|
|
10
|
+
export declare function isTaskControlAction(action: PendingDispatchAction): action is PendingTaskControlAction;
|
|
10
11
|
/**
|
|
11
12
|
* Executes one task-control call inside the dispatch step, which holds
|
|
12
13
|
* the durable session state (ownership index) and world access the
|
|
@@ -15,7 +16,7 @@ export declare function isTaskControlAction(action: RuntimeActionRequest): actio
|
|
|
15
16
|
* Returns the current session alongside the action result.
|
|
16
17
|
*/
|
|
17
18
|
export declare function executeTaskControlAction(input: {
|
|
18
|
-
readonly action:
|
|
19
|
+
readonly action: PendingTaskControlAction;
|
|
19
20
|
readonly adapter?: ChannelAdapter;
|
|
20
21
|
readonly bundle: CompiledBundle;
|
|
21
22
|
readonly parentStepIndex?: number;
|