eve 0.53.1 → 0.54.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/src/channel/types.d.ts +2 -0
  3. package/dist/src/chunks/{use-eve-agent-BR8EpIOX.js → use-eve-agent-CxPlg0KL.js} +0 -1
  4. package/dist/src/chunks/{use-eve-agent-XnfjQt1Z.js → use-eve-agent-D-KQzzyW.js} +0 -1
  5. package/dist/src/cli/commands/trace-detail.js +1 -1
  6. package/dist/src/cli/commands/trace.d.ts +2 -2
  7. package/dist/src/cli/commands/trace.js +3 -3
  8. package/dist/src/cli/dev/tui/runner.js +1 -1
  9. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  10. package/dist/src/cli/dev/tui/traces/trace-content.d.ts +1 -3
  11. package/dist/src/cli/dev/tui/traces/trace-content.js +2 -2
  12. package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +5 -5
  13. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  14. package/dist/src/cli/dev/tui/traces/trace-view.js +1 -1
  15. package/dist/src/cli/dev/tui/traces/trace-viewer-session.js +1 -1
  16. package/dist/src/client/agent-info-schema.d.ts +0 -1
  17. package/dist/src/client/agent-info-schema.js +1 -1
  18. package/dist/src/compiled/.vendor-stamp.json +1 -1
  19. package/dist/src/compiled/@opentelemetry/api/index.d.ts +1 -0
  20. package/dist/src/compiler/default-tool-policy.js +1 -1
  21. package/dist/src/compiler/extension-compatibility.d.ts +4 -4
  22. package/dist/src/compiler/extension-compatibility.js +1 -1
  23. package/dist/src/compiler/manifest.js +1 -1
  24. package/dist/src/context/dynamic-instruction-lifecycle.d.ts +2 -1
  25. package/dist/src/context/dynamic-instruction-lifecycle.js +1 -1
  26. package/dist/src/context/keys.d.ts +3 -1
  27. package/dist/src/context/keys.js +1 -1
  28. package/dist/src/context/memory-event-lifecycle.d.ts +2 -0
  29. package/dist/src/context/memory-event-lifecycle.js +1 -1
  30. package/dist/src/context/memory-lifecycle.d.ts +5 -0
  31. package/dist/src/context/memory-lifecycle.js +1 -1
  32. package/dist/src/eve-channel/index.js +1 -1
  33. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  34. package/dist/src/execution/cancelled-turn-message.js +1 -1
  35. package/dist/src/execution/compaction.d.ts +2 -2
  36. package/dist/src/execution/coordination-dispatch-shared.d.ts +0 -1
  37. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  38. package/dist/src/execution/coordination-dispatch-step.js +1 -1
  39. package/dist/src/execution/create-session-step.js +1 -1
  40. package/dist/src/execution/durable-session-store.d.ts +2 -2
  41. package/dist/src/execution/eve-workflow-attributes.d.ts +3 -3
  42. package/dist/src/execution/next-driver-action.d.ts +2 -0
  43. package/dist/src/execution/parked-delivery-wait.js +1 -1
  44. package/dist/src/execution/route-child-delivery.js +1 -1
  45. package/dist/src/execution/runtime-context.js +1 -1
  46. package/dist/src/execution/session.d.ts +0 -2
  47. package/dist/src/execution/session.js +2 -2
  48. package/dist/src/execution/tasks/parent/dispatch.d.ts +1 -12
  49. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  50. package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +5 -1
  51. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  52. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  53. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  54. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -2
  55. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  56. package/dist/src/execution/tools/subagent/invoke-step.d.ts +4 -0
  57. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  58. package/dist/src/execution/tools/subagent/start.d.ts +2 -2
  59. package/dist/src/execution/tools/subagent/start.js +1 -1
  60. package/dist/src/execution/tools/subagent/task-agent-requests.js +1 -1
  61. package/dist/src/execution/tools/tasks.d.ts +1 -8
  62. package/dist/src/execution/tools/tasks.js +1 -1
  63. package/dist/src/execution/tools/todo.d.ts +2 -2
  64. package/dist/src/execution/tools/todo.js +2 -2
  65. package/dist/src/execution/turn-workflow.js +1 -1
  66. package/dist/src/execution/workflow-runtime.js +1 -1
  67. package/dist/src/execution/workflow-steps.js +1 -1
  68. package/dist/src/framework/sources/registry.js +1 -1
  69. package/dist/src/harness/compaction.js +1 -1
  70. package/dist/src/harness/coordination.js +1 -1
  71. package/dist/src/harness/current-messages.d.ts +7 -6
  72. package/dist/src/harness/current-messages.js +1 -1
  73. package/dist/src/harness/emission.js +1 -1
  74. package/dist/src/harness/execute-tool.d.ts +2 -4
  75. package/dist/src/harness/messages.d.ts +36 -0
  76. package/dist/src/harness/messages.js +1 -1
  77. package/dist/src/harness/model-call-error.d.ts +5 -0
  78. package/dist/src/harness/model-call-error.js +1 -1
  79. package/dist/src/harness/semantic-errors/rules/model-provider.js +1 -1
  80. package/dist/src/harness/session-limit-enforcement.d.ts +2 -15
  81. package/dist/src/harness/step-hooks.d.ts +2 -1
  82. package/dist/src/harness/step-hooks.js +1 -1
  83. package/dist/src/harness/tool-loop.js +2 -2
  84. package/dist/src/harness/types.d.ts +6 -4
  85. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  86. package/dist/src/instrumentation/background-task-runtime.d.ts +18 -0
  87. package/dist/src/instrumentation/background-task-runtime.js +1 -0
  88. package/dist/src/instrumentation/channel-delivery.js +1 -1
  89. package/dist/src/instrumentation/content.js +1 -1
  90. package/dist/src/instrumentation/dispatch.js +1 -1
  91. package/dist/src/instrumentation/lifecycle.d.ts +19 -2
  92. package/dist/src/instrumentation/lifecycle.js +1 -1
  93. package/dist/src/instrumentation/memory.d.ts +72 -0
  94. package/dist/src/instrumentation/memory.js +1 -0
  95. package/dist/src/instrumentation/native-events.d.ts +7 -0
  96. package/dist/src/instrumentation/native-events.js +1 -1
  97. package/dist/src/instrumentation/parent-lineage.d.ts +2 -2
  98. package/dist/src/instrumentation/parent-lineage.js +1 -1
  99. package/dist/src/instrumentation/prepare-trace-context.d.ts +3 -11
  100. package/dist/src/instrumentation/prepare-trace-context.js +1 -1
  101. package/dist/src/instrumentation/principal-summary.d.ts +11 -0
  102. package/dist/src/instrumentation/principal-summary.js +1 -0
  103. package/dist/src/instrumentation/provider.d.ts +1 -0
  104. package/dist/src/instrumentation/runtime.d.ts +11 -7
  105. package/dist/src/instrumentation/runtime.js +1 -1
  106. package/dist/src/instrumentation/session-context.d.ts +22 -0
  107. package/dist/src/instrumentation/session-context.js +1 -0
  108. package/dist/src/instrumentation/state.d.ts +7 -2
  109. package/dist/src/instrumentation/state.js +1 -1
  110. package/dist/src/internal/application/package.js +1 -1
  111. package/dist/src/internal/logging.js +1 -1
  112. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  113. package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +4 -5
  114. package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
  115. package/dist/src/protocol/baggage.d.ts +15 -2
  116. package/dist/src/protocol/baggage.js +1 -1
  117. package/dist/src/public/instrumentation/index.d.ts +5 -4
  118. package/dist/src/runtime/agent/bootstrap.d.ts +2 -2
  119. package/dist/src/runtime/agent/bootstrap.js +1 -1
  120. package/dist/src/self-modification/agent.js +1 -1
  121. package/dist/src/self-modification/extension/instructions.js +21 -20
  122. package/dist/src/self-modification/extension/tools/edit_file.js +1 -1
  123. package/dist/src/self-modification/extension/tools/search_registry.d.ts +1 -1
  124. package/dist/src/self-modification/extension/tools/search_registry.js +1 -1
  125. package/dist/src/setup/integrations/self-modification/setup.js +1 -1
  126. package/dist/src/setup/scaffold/create/project.js +1 -1
  127. package/dist/src/shared/action-types.d.ts +4 -0
  128. package/dist/src/shared/action-types.js +1 -1
  129. package/dist/src/shared/dispatch-action.d.ts +1 -1
  130. package/dist/src/shared/memory-state.js +1 -1
  131. package/dist/src/shared/serialized-observability-state.d.ts +12 -0
  132. package/dist/src/shared/serialized-observability-state.js +1 -0
  133. package/dist/src/subagents/callback-route.js +1 -1
  134. package/dist/src/subagents/callback-step.d.ts +0 -8
  135. package/dist/src/subagents/callback-step.js +1 -1
  136. package/dist/src/subagents/invocation.d.ts +9 -0
  137. package/dist/src/subagents/remote-dispatch.d.ts +3 -3
  138. package/dist/src/subagents/remote-dispatch.js +1 -1
  139. package/dist/src/subagents/start-local.d.ts +2 -6
  140. package/dist/src/subagents/start-local.js +1 -1
  141. package/dist/src/subagents/start-remote.d.ts +2 -8
  142. package/dist/src/subagents/start-remote.js +1 -1
  143. package/dist/src/subagents/tool.d.ts +3 -13
  144. package/dist/src/subagents/tool.js +1 -1
  145. package/dist/src/svelte/index.js +1 -1
  146. package/dist/src/svelte/use-eve-agent.js +1 -1
  147. package/dist/src/tasks/delivery-context.d.ts +12 -3
  148. package/dist/src/tasks/delivery-context.js +2 -2
  149. package/dist/src/tasks/session-index.d.ts +6 -3
  150. package/dist/src/tasks/session-index.js +1 -1
  151. package/dist/src/tasks/session-task-cohorts.d.ts +10 -2
  152. package/dist/src/tasks/session-task-cohorts.js +1 -1
  153. package/dist/src/tools/behavior.d.ts +1 -3
  154. package/dist/src/tools/framework/task-contract.d.ts +0 -4
  155. package/dist/src/tools/framework/task-contract.js +1 -1
  156. package/dist/src/tracing/agent-action-instrumentation.d.ts +3 -2
  157. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  158. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  159. package/dist/src/tracing/agent-channel-delivery-instrumentation.d.ts +1 -6
  160. package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
  161. package/dist/src/tracing/agent-invocation-coordinator.d.ts +28 -0
  162. package/dist/src/tracing/agent-invocation-coordinator.js +1 -0
  163. package/dist/src/tracing/agent-invocation-terminal.d.ts +18 -0
  164. package/dist/src/tracing/agent-invocation-terminal.js +1 -0
  165. package/dist/src/tracing/agent-memory-instrumentation.d.ts +13 -0
  166. package/dist/src/tracing/agent-memory-instrumentation.js +1 -0
  167. package/dist/src/tracing/agent-otel-attributes.d.ts +4 -0
  168. package/dist/src/tracing/agent-otel-attributes.js +1 -0
  169. package/dist/src/tracing/agent-otel-content.d.ts +4 -12
  170. package/dist/src/tracing/agent-otel-content.js +3 -3
  171. package/dist/src/tracing/agent-otel-provider.d.ts +4 -6
  172. package/dist/src/tracing/agent-otel-provider.js +2 -2
  173. package/dist/src/tracing/agent-otel-runtime-context.d.ts +9 -0
  174. package/dist/src/tracing/agent-otel-runtime-context.js +1 -1
  175. package/dist/src/tracing/agent-otel-session-context.d.ts +4 -3
  176. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  177. package/dist/src/tracing/agent-otel-usage.d.ts +4 -10
  178. package/dist/src/tracing/agent-otel-usage.js +1 -1
  179. package/dist/src/tracing/agent-span-contract.d.ts +26 -0
  180. package/dist/src/tracing/agent-span-contract.js +1 -0
  181. package/dist/src/tracing/agent-span-error.d.ts +3 -0
  182. package/dist/src/tracing/agent-span-error.js +1 -0
  183. package/dist/src/tracing/agent-span-id-generator.d.ts +3 -0
  184. package/dist/src/tracing/agent-span-id-generator.js +1 -1
  185. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  186. package/dist/src/tracing/agent-trace-context-codec.d.ts +12 -0
  187. package/dist/src/tracing/agent-trace-context-codec.js +1 -0
  188. package/dist/src/tracing/agent-trace-context-store.d.ts +35 -8
  189. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  190. package/dist/src/tracing/agent-trace-span-processor.d.ts +5 -7
  191. package/dist/src/tracing/agent-trace-span-processor.js +1 -1
  192. package/dist/src/tracing/agent-trace-state.d.ts +43 -3
  193. package/dist/src/tracing/agent-trace-state.js +1 -1
  194. package/dist/src/tracing/bounded-error.d.ts +1 -0
  195. package/dist/src/tracing/bounded-error.js +1 -0
  196. package/dist/src/tracing/content-attributes.js +1 -1
  197. package/dist/src/tracing/content-span-processor.js +1 -1
  198. package/dist/src/tracing/conversation-context.d.ts +4 -0
  199. package/dist/src/tracing/conversation-context.js +1 -0
  200. package/dist/src/tracing/error-content-context.d.ts +3 -0
  201. package/dist/src/tracing/error-content-context.js +1 -0
  202. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  203. package/dist/src/tracing/local-trace-reader.d.ts +6 -6
  204. package/dist/src/tracing/local-trace-reader.js +1 -1
  205. package/dist/src/tracing/local-traces.d.ts +6 -8
  206. package/dist/src/tracing/local-traces.js +1 -1
  207. package/dist/src/tracing/otel-declaration.d.ts +5 -3
  208. package/dist/src/tracing/otel-registration.d.ts +2 -1
  209. package/dist/src/tracing/otel-registration.js +1 -1
  210. package/dist/src/tracing/telemetry-budget.d.ts +4 -0
  211. package/dist/src/tracing/telemetry-budget.js +1 -0
  212. package/dist/src/vue/index.js +1 -1
  213. package/dist/src/vue/use-eve-agent.js +1 -1
  214. package/docs/concepts/built-in-tools.md +0 -20
  215. package/docs/concepts/sessions-runs-and-streaming.md +9 -1
  216. package/docs/guides/frontend/overview.mdx +1 -1
  217. package/docs/guides/instrumentation-providers.md +5 -0
  218. package/docs/guides/instrumentation.md +179 -23
  219. package/docs/guides/remote-agents.md +11 -0
  220. package/docs/reference/cli.md +16 -14
  221. package/docs/subagents/index.mdx +15 -10
  222. package/package.json +1 -6
  223. package/dist/src/execution/tasks/child/update-step.d.ts +0 -6
  224. package/dist/src/execution/tasks/child/update-step.js +0 -1
  225. package/dist/src/execution/tasks/child/update.d.ts +0 -8
  226. package/dist/src/execution/tasks/child/update.js +0 -1
  227. package/dist/src/public/tools/task-update.d.ts +0 -1
  228. package/dist/src/public/tools/task-update.js +0 -1
  229. package/dist/src/tools/framework/task-update.d.ts +0 -5
  230. package/dist/src/tools/framework/task-update.js +0 -1
@@ -1 +1 @@
1
- import{coalesceDeliverPayloads}from"#execution/deliver-payloads.js";import{routeProxiedDeliverStep}from"#execution/proxied-deliver-step.js";import{emitRecordedTaskInputRequestStep,runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{recordTaskInputRequestStep,recordTerminalTaskViewsStep}from"#execution/tasks/parent/hitl-proxy-steps.js";import{acceptTaskAuthorizationEventStep}from"#execution/tools/subagent/accept-event-step.js";import{applyTaskAgentRequest}from"#execution/tools/subagent/task-agent-requests.js";async function routeDeliverToChildren(e){let t=coalesceDeliverPayloads(e.delivery.payloads),n=e.serializedContext,r=e.sessionState;for(let i of t.task?.inputRequests??[]){let t=await recordTaskInputRequestStep({request:i,sessionState:r});if(r=t.sessionState,!t.accepted)continue;let a=await emitRecordedTaskInputRequestStep({parentWritable:e.parentWritable,request:t.request,serializedContext:n,sessionState:r});n=a.serializedContext,r=a.sessionState}for(let i of t.task?.agentRequests??[]){let t=await applyTaskAgentRequest({...i,ownerId:i.taskId},{parentWritable:e.parentWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}for(let i of t.task?.authorizationEvents??[]){if(!await acceptTaskAuthorizationEventStep({delivery:i,sessionState:r}))continue;let t=await runProxySubagentEventStep({hookPayload:i.hookPayload,parentWritable:e.parentWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}(t.task?.views?.length??0)>0&&(r=await recordTerminalTaskViewsStep({sessionState:r,views:t.task?.views??[]}));let i=[],a=[];for(let[t,n]of e.delivery.payloads.entries()){let r={...n};if(delete r.task,Object.keys(r).length===0)continue;let o=i.length;i.push(r);for(let n of e.delivery.deliveryMetadata??[])n.payloadIndex===t&&a.push({...n,payloadIndex:o})}let o=i.length===0?void 0:{...e.delivery,deliveryMetadata:a.length===0?void 0:a,payloads:i};return o===void 0?{kind:`continue`,remainder:void 0,serializedContext:n,sessionState:r}:r.hasProxyInputRequests?await routeProxiedDeliverStep({delivery:o,parentWritable:e.parentWritable,serializedContext:n,sessionState:r}):{kind:`continue`,remainder:o,serializedContext:n,sessionState:r}}export{routeDeliverToChildren};
1
+ import{coalesceDeliverPayloads}from"#execution/deliver-payloads.js";import{routeProxiedDeliverStep}from"#execution/proxied-deliver-step.js";import{emitRecordedTaskInputRequestStep,runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{recordTaskInputRequestStep,recordTerminalTaskViewsStep}from"#execution/tasks/parent/hitl-proxy-steps.js";import{acceptTaskAuthorizationEventStep}from"#execution/tools/subagent/accept-event-step.js";import{applyTaskAgentRequest}from"#execution/tools/subagent/task-agent-requests.js";async function routeDeliverToChildren(e){let t=coalesceDeliverPayloads(e.delivery.payloads),n=e.serializedContext,r=e.sessionState;for(let i of t.task?.inputRequests??[]){let t=await recordTaskInputRequestStep({request:i,sessionState:r});if(r=t.sessionState,!t.accepted)continue;let a=await emitRecordedTaskInputRequestStep({parentWritable:e.parentWritable,request:t.request,serializedContext:n,sessionState:r});n=a.serializedContext,r=a.sessionState}for(let i of t.task?.agentRequests??[]){let t=await applyTaskAgentRequest({...i,ownerId:i.taskId},{parentWritable:e.parentWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}for(let i of t.task?.authorizationEvents??[]){if(!await acceptTaskAuthorizationEventStep({delivery:i,sessionState:r}))continue;let t=await runProxySubagentEventStep({hookPayload:i.hookPayload,parentWritable:e.parentWritable,serializedContext:n,sessionState:r});n=t.serializedContext,r=t.sessionState}if((t.task?.views?.length??0)>0){let e=await recordTerminalTaskViewsStep({serializedContext:n,sessionState:r,views:t.task?.views??[]});n=e.serializedContext,r=e.sessionState}let i=[],a=[];for(let[t,n]of e.delivery.payloads.entries()){let r={...n};if(delete r.task,Object.keys(r).length===0)continue;let o=i.length;i.push(r);for(let n of e.delivery.deliveryMetadata??[])n.payloadIndex===t&&a.push({...n,payloadIndex:o})}let o=i.length===0?void 0:{...e.delivery,deliveryMetadata:a.length===0?void 0:a,payloads:i};return o===void 0?{kind:`continue`,remainder:void 0,serializedContext:n,sessionState:r}:r.hasProxyInputRequests?await routeProxiedDeliverStep({delivery:o,parentWritable:e.parentWritable,serializedContext:n,sessionState:r}):{kind:`continue`,remainder:o,serializedContext:n,sessionState:r}}export{routeDeliverToChildren};
@@ -1 +1 @@
1
- import{ContextContainer,contextStorage}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicSubagentAgentConfigKey,InitiatorAuthKey,ModeKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey}from"#context/keys.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{setChannelContext}from"#execution/channel-context.js";function buildRunContext(e){let{bundle:t,run:n}=e,r=new ContextContainer,i=n.auth;if(r.set(BundleKey,t),setChannelContext(r,n.adapter,{channelName:n.channelName}),n.channelMetadata!==void 0){let e=r.get(ChannelInstrumentationKey);r.set(ChannelInstrumentationKey,{channelType:e?.channelType??n.channelMetadata.channelType,kind:e?.kind??n.channelMetadata.kind,metadata:n.channelMetadata.metadata})}n.continuationToken!==void 0&&r.set(ContinuationTokenKey,n.continuationToken),r.set(ModeKey,n.mode),r.set(AuthKey,i),r.set(InitiatorAuthKey,n.initiatorAuth??i),e.dynamicSubagentAgentConfig!==void 0&&r.set(DynamicSubagentAgentConfigKey,e.dynamicSubagentAgentConfig),n.capabilities!==void 0&&r.set(CapabilitiesKey,n.capabilities),n.requestId!==void 0&&r.set(ChannelRequestIdKey,n.requestId);let a=contextStorage.getStore()?.get(ScheduleIdKey);return a!==void 0&&r.set(ScheduleIdKey,a),n.delivery!==void 0&&r.set(ChannelDeliveryKey,n.delivery),n.callback!==void 0&&r.set(SessionCallbackKey,n.callback),n.activityObserver!==void 0&&r.set(ActivityObserverKey,n.activityObserver),n.parent!==void 0&&r.set(ParentSessionKey,n.parent),n.parentTraceContext!==void 0&&r.set(ParentTraceContextKey,n.parentTraceContext),r}export{buildRunContext};
1
+ import{ContextContainer,contextStorage}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,ConversationIdKey,DynamicSubagentAgentConfigKey,InitiatorAuthKey,ModeKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey}from"#context/keys.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{readConversationId}from"#tracing/conversation-context.js";import{setChannelContext}from"#execution/channel-context.js";function buildRunContext(e){let{bundle:t,run:n}=e,r=new ContextContainer,i=n.auth,a=readConversationId(n.conversationId);if(a!==void 0&&r.set(ConversationIdKey,a),r.set(BundleKey,t),setChannelContext(r,n.adapter,{channelName:n.channelName}),n.channelMetadata!==void 0){let e=r.get(ChannelInstrumentationKey);r.set(ChannelInstrumentationKey,{channelType:e?.channelType??n.channelMetadata.channelType,kind:e?.kind??n.channelMetadata.kind,metadata:n.channelMetadata.metadata})}n.continuationToken!==void 0&&r.set(ContinuationTokenKey,n.continuationToken),r.set(ModeKey,n.mode),r.set(AuthKey,i),r.set(InitiatorAuthKey,n.initiatorAuth??i),e.dynamicSubagentAgentConfig!==void 0&&r.set(DynamicSubagentAgentConfigKey,e.dynamicSubagentAgentConfig),n.capabilities!==void 0&&r.set(CapabilitiesKey,n.capabilities),n.requestId!==void 0&&r.set(ChannelRequestIdKey,n.requestId);let o=contextStorage.getStore()?.get(ScheduleIdKey);return o!==void 0&&r.set(ScheduleIdKey,o),n.delivery!==void 0&&r.set(ChannelDeliveryKey,n.delivery),n.callback!==void 0&&r.set(SessionCallbackKey,n.callback),n.activityObserver!==void 0&&r.set(ActivityObserverKey,n.activityObserver),n.parent!==void 0&&r.set(ParentSessionKey,n.parent),n.parentTraceContext!==void 0&&r.set(ParentTraceContextKey,n.parentTraceContext),r}export{buildRunContext};
@@ -46,7 +46,6 @@ export interface CreateSessionInput {
46
46
  readonly turnAgent: RuntimeTurnAgent;
47
47
  readonly limits?: AuthoredSessionLimits;
48
48
  readonly outputSchema?: HarnessSession["outputSchema"];
49
- readonly systemPromptAdditions?: readonly string[];
50
49
  readonly taskId?: string;
51
50
  readonly workflowMaxSubagents?: number;
52
51
  }
@@ -59,7 +58,6 @@ export declare function createSession(input: CreateSessionInput): HarnessSession
59
58
  */
60
59
  export declare function refreshSessionFromTurnAgent(input: {
61
60
  readonly session: HarnessSession;
62
- readonly systemPromptAdditions?: readonly string[];
63
61
  readonly turnAgent: RuntimeTurnAgent;
64
62
  readonly compactionOverrides?: {
65
63
  readonly thresholdPercent?: number;
@@ -1,3 +1,3 @@
1
- import{formatAvailableSkillsSection}from"#execution/skills/instructions.js";const DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION=4e7;function createCompactionConfig(e={}){let t=e.thresholdPercent??.9,n={recentWindowSize:10,threshold:e.contextWindowTokens===void 0?1e5:Math.max(1,Math.floor(e.contextWindowTokens*t)),thresholdPercent:t};return e.lastKnownInputTokens===void 0?n:{...n,lastKnownInputTokens:e.lastKnownInputTokens,lastKnownPromptMessageCount:e.lastKnownPromptMessageCount}}function createSession(e){let{turnAgent:t}=e,n=createSessionToolDefinitions(t),r={agent:createSessionAgent(t,createSessionSystemPrompt({additions:e.systemPromptAdditions,turnAgent:t}),n),compaction:createCompactionConfig({contextWindowTokens:t.model?.contextWindowTokens,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:e.continuationToken,history:[...t.initialMessages??[]],sessionId:e.sessionId};return e.rootSessionId!==void 0&&(r.rootSessionId=e.rootSessionId),r.limits=resolveSessionLimits(e),e.outputSchema!==void 0&&(r.outputSchema=e.outputSchema),e.taskId!==void 0&&(r.taskId=e.taskId),e.workflowMaxSubagents!==void 0&&(r.workflowMaxSubagents=e.workflowMaxSubagents),r}function createSessionAgent(e,t,n){let r={compactionModelReference:e.compactionModel,reasoning:e.reasoning,system:t,tools:n};if(e.model!==void 0)return{...r,modelReference:e.model};if(e.dynamicModel!==void 0)return{...r,dynamicModel:!0};throw Error(`Cannot create a session before dynamic subagent config is selected.`)}function refreshSessionFromTurnAgent(e){return{...e.session,agent:createSessionAgent(e.turnAgent,createSessionSystemPrompt({additions:e.systemPromptAdditions,turnAgent:e.turnAgent}),createSessionToolDefinitions(e.turnAgent)),compaction:createCompactionConfig({contextWindowTokens:e.turnAgent.model?.contextWindowTokens,lastKnownInputTokens:e.session.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.session.compaction.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent})}}function createSessionSystemPrompt(e){let t=formatAvailableSkillsSection(e.turnAgent.availableSkills??[]);return[...t===null?e.turnAgent.instructions:[...e.turnAgent.instructions,t],...e.additions??[]].join(`
1
+ import{validateHarnessModelMessages}from"#harness/messages.js";import{formatAvailableSkillsSection}from"#execution/skills/instructions.js";const DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION=4e7;function createCompactionConfig(e={}){let t=e.thresholdPercent??.9,n={recentWindowSize:10,threshold:e.contextWindowTokens===void 0?1e5:Math.max(1,Math.floor(e.contextWindowTokens*t)),thresholdPercent:t};return e.lastKnownInputTokens===void 0?n:{...n,lastKnownInputTokens:e.lastKnownInputTokens,lastKnownPromptMessageCount:e.lastKnownPromptMessageCount}}function createSession(e){let{turnAgent:t}=e,n=createSessionToolDefinitions(t),r={agent:createSessionAgent(t,createSessionSystemPrompt(t),n),compaction:createCompactionConfig({contextWindowTokens:t.model?.contextWindowTokens,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:e.continuationToken,history:[...t.initialMessages??[]],sessionId:e.sessionId};return e.rootSessionId!==void 0&&(r.rootSessionId=e.rootSessionId),r.limits=resolveSessionLimits(e),e.outputSchema!==void 0&&(r.outputSchema=e.outputSchema),e.taskId!==void 0&&(r.taskId=e.taskId),e.workflowMaxSubagents!==void 0&&(r.workflowMaxSubagents=e.workflowMaxSubagents),r}function createSessionAgent(e,t,n){let r={compactionModelReference:e.compactionModel,reasoning:e.reasoning,system:t,tools:n};if(e.model!==void 0)return{...r,modelReference:e.model};if(e.dynamicModel!==void 0)return{...r,dynamicModel:!0};throw Error(`Cannot create a session before dynamic subagent config is selected.`)}function refreshSessionFromTurnAgent(e){return{...e.session,agent:createSessionAgent(e.turnAgent,createSessionSystemPrompt(e.turnAgent),createSessionToolDefinitions(e.turnAgent)),compaction:createCompactionConfig({contextWindowTokens:e.turnAgent.model?.contextWindowTokens,lastKnownInputTokens:e.session.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.session.compaction.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent})}}function createSessionSystemPrompt(e){let t=formatAvailableSkillsSection(e.availableSkills??[]);return(t===null?e.instructions:[...e.instructions,t]).join(`
2
2
 
3
- `)}function mintSubagentContinuationToken(e){return`subagent:${e??crypto.randomUUID()}`}function projectToDurableSession(e){let t={agent:{system:e.agent.system},continuationToken:e.continuationToken,history:e.history,sessionId:e.sessionId};return(e.compaction.lastKnownInputTokens!==void 0||e.compaction.lastKnownPromptMessageCount!==void 0)&&(t.compaction={lastKnownInputTokens:e.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.compaction.lastKnownPromptMessageCount}),e.rootSessionId!==void 0&&(t.rootSessionId=e.rootSessionId),e.limits!==void 0&&(t.limits=e.limits),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.sandboxState!==void 0&&(t.sandboxState=e.sandboxState),e.state!==void 0&&(t.state=e.state),e.taskId!==void 0&&(t.taskId=e.taskId),e.workflowMaxSubagents!==void 0&&(t.workflowMaxSubagents=e.workflowMaxSubagents),t}function hydrateDurableSession(e){let{durable:t,turnAgent:n}=e,r=createSessionToolDefinitions(n),i={agent:createSessionAgent(n,t.agent.system,r),compaction:createCompactionConfig({contextWindowTokens:n.model?.contextWindowTokens,lastKnownInputTokens:t.compaction?.lastKnownInputTokens,lastKnownPromptMessageCount:t.compaction?.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:t.continuationToken,history:t.history,sessionId:t.sessionId};return t.rootSessionId!==void 0&&(i.rootSessionId=t.rootSessionId),t.limits!==void 0&&(i.limits=t.limits),t.outputSchema!==void 0&&(i.outputSchema=t.outputSchema),t.sandboxState!==void 0&&(i.sandboxState=t.sandboxState),t.state!==void 0&&(i.state=t.state),t.taskId!==void 0&&(i.taskId=t.taskId),t.workflowMaxSubagents!==void 0&&(i.workflowMaxSubagents=t.workflowMaxSubagents),i}function createSessionToolDefinitions(e){return e.tools.map(e=>({description:e.description??``,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema}))}function resolveSessionLimits(e){let t=e.rootSessionId!==void 0,n=resolveSessionTokenLimit({authored:e.limits?.maxInputTokensPerSession,fallback:t?void 0:DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION}),r=resolveSessionTokenLimit({authored:e.limits?.maxOutputTokensPerSession,fallback:void 0}),i=resolveSessionTokenLimit({authored:e.limits?.maxTokenCostUsdPerSession,fallback:void 0}),a={};return n!==void 0&&(a.maxInputTokensPerSession=n),r!==void 0&&(a.maxOutputTokensPerSession=r),i!==void 0&&(a.maxTokenCostUsdPerSession=i),a}function resolveSessionTokenLimit(e){return e.authored===!1?void 0:e.authored??e.fallback}export{DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION,createCompactionConfig,createSession,hydrateDurableSession,mintSubagentContinuationToken,projectToDurableSession,refreshSessionFromTurnAgent};
3
+ `)}function mintSubagentContinuationToken(e){return`subagent:${e??crypto.randomUUID()}`}function projectToDurableSession(e){let t={agent:{system:e.agent.system},continuationToken:e.continuationToken,history:e.history,sessionId:e.sessionId};return(e.compaction.lastKnownInputTokens!==void 0||e.compaction.lastKnownPromptMessageCount!==void 0)&&(t.compaction={lastKnownInputTokens:e.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.compaction.lastKnownPromptMessageCount}),e.rootSessionId!==void 0&&(t.rootSessionId=e.rootSessionId),e.limits!==void 0&&(t.limits=e.limits),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.sandboxState!==void 0&&(t.sandboxState=e.sandboxState),e.state!==void 0&&(t.state=e.state),e.taskId!==void 0&&(t.taskId=e.taskId),e.workflowMaxSubagents!==void 0&&(t.workflowMaxSubagents=e.workflowMaxSubagents),t}function hydrateDurableSession(e){let{durable:t,turnAgent:n}=e,r=createSessionToolDefinitions(n),i={agent:createSessionAgent(n,t.agent.system,r),compaction:createCompactionConfig({contextWindowTokens:n.model?.contextWindowTokens,lastKnownInputTokens:t.compaction?.lastKnownInputTokens,lastKnownPromptMessageCount:t.compaction?.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:t.continuationToken,history:validateHarnessModelMessages(t.history),sessionId:t.sessionId};return t.rootSessionId!==void 0&&(i.rootSessionId=t.rootSessionId),t.limits!==void 0&&(i.limits=t.limits),t.outputSchema!==void 0&&(i.outputSchema=t.outputSchema),t.sandboxState!==void 0&&(i.sandboxState=t.sandboxState),t.state!==void 0&&(i.state=t.state),t.taskId!==void 0&&(i.taskId=t.taskId),t.workflowMaxSubagents!==void 0&&(i.workflowMaxSubagents=t.workflowMaxSubagents),i}function createSessionToolDefinitions(e){return e.tools.map(e=>({description:e.description??``,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema}))}function resolveSessionLimits(e){let t=e.rootSessionId!==void 0,n=resolveSessionTokenLimit({authored:e.limits?.maxInputTokensPerSession,fallback:t?void 0:DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION}),r=resolveSessionTokenLimit({authored:e.limits?.maxOutputTokensPerSession,fallback:void 0}),i=resolveSessionTokenLimit({authored:e.limits?.maxTokenCostUsdPerSession,fallback:void 0}),a={};return n!==void 0&&(a.maxInputTokensPerSession=n),r!==void 0&&(a.maxOutputTokensPerSession=r),i!==void 0&&(a.maxTokenCostUsdPerSession=i),a}function resolveSessionTokenLimit(e){return e.authored===!1?void 0:e.authored??e.fallback}export{DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION,createCompactionConfig,createSession,hydrateDurableSession,mintSubagentContinuationToken,projectToDurableSession,refreshSessionFromTurnAgent};
@@ -1,24 +1,13 @@
1
- import type { ChannelAdapter } from "#channel/adapter.js";
2
1
  import type { HarnessSession as RuntimeSession } from "#harness/types.js";
3
2
  import type { BackgroundTask } from "#execution/tasks/parent/delegate.js";
4
3
  import { type TaskExecutorCancel } from "#execution/tasks/parent/task-cancel.js";
5
4
  import type { RuntimeActionResult, RuntimeToolCallActionRequest } from "#shared/action-types.js";
6
5
  import type { SessionTaskIndexEntry } from "#tasks/session-index.js";
7
- import { type TaskInboundUpdate, type TaskView } from "#tasks/types.js";
8
- export type DeliverTaskUpdate = (input: {
9
- readonly adapter?: ChannelAdapter;
10
- readonly callback: unknown;
11
- readonly update: TaskInboundUpdate;
12
- }) => Promise<string | undefined>;
6
+ import { type TaskView } from "#tasks/types.js";
13
7
  export declare function isTaskControlAction(action: RuntimeToolCallActionRequest): boolean;
14
8
  export declare function executeTaskControlAction(input: {
15
9
  readonly action: RuntimeToolCallActionRequest;
16
- readonly adapter?: ChannelAdapter;
17
- readonly bundle: import("#runtime/sessions/runtime-context-keys.js").CompiledBundle;
18
10
  readonly cancelOwnedWork?: TaskExecutorCancel;
19
- readonly deliverUpdate?: DeliverTaskUpdate;
20
- readonly parentStepIndex?: number;
21
- readonly parentTurnId: string;
22
11
  readonly serializedContext?: Record<string, unknown>;
23
12
  readonly session: RuntimeSession;
24
13
  }): Promise<{
@@ -1 +1 @@
1
- import{sessionCommandHookToken}from"#execution/session-command-token.js";import{sendTaskCommand}from"#execution/tasks/parent/run-parent.js";import{isTerminalTaskStatus}from"#tasks/types.js";import{wakeTaskParentStep}from"#execution/tasks/child/steps.js";import{createTaskControlError,createTaskViewsResult,createUnknownTasksError,lookupTaskEntries,readTaskView}from"#execution/tasks/parent/control-shared.js";import{cancelTaskOwnedWork}from"#execution/tasks/parent/task-cancel.js";import{TASK_CANCEL_TOOL_NAME,TASK_TOOL_NAMES,TASK_UPDATE_TOOL_NAME}from"#tools/framework/task-contract.js";function isTaskControlAction(e){return e.kind===`tool-call`&&TASK_TOOL_NAMES.has(e.toolName)}async function executeTaskControlAction(e){let{action:t,session:n}=e;if(t.toolName===TASK_UPDATE_TOOL_NAME){let r=t.input.message;if(typeof r!=`string`||r.trim()===``)return{result:createTaskControlError(t,"Provide a non-empty `message`."),session:n};let i={callId:t.callId,kind:`task-update`,message:r,updateEpoch:e.parentTurnId,updateIndex:e.parentStepIndex??0},a=await e.deliverUpdate?.({adapter:e.adapter,callback:e.serializedContext?.[`eve.sessionCallback`],update:i});return{result:a===void 0?createTaskControlError(t,`task_update requires a task-owned session.`):{callId:t.callId,kind:`tool-result`,output:{status:`sent`,taskId:a},toolName:t.toolName},session:n}}let r=readTaskIds(t.input);if(r===void 0||r.length===0)return{result:createTaskControlError(t,"Provide a non-empty `taskIds` array."),session:n};let i=lookupTaskEntries(n,r);if(i.kind===`unknown`)return{result:createUnknownTasksError(t,i.unknown),session:n};if(t.toolName!==TASK_CANCEL_TOOL_NAME)return{result:createTaskControlError(t,`Unsupported task control "${t.toolName}".`),session:n};let a=[];for(let t of i.entries)a.push(await cancelOwnedTask({cancelOwnedWork:e.cancelOwnedWork,entry:t,serializedContext:e.serializedContext,session:n}));return{result:createTaskViewsResult(t,a),session:n}}async function cancelOwnedTask(e){let t=await sendTaskCommand({command:{kind:`cancel`},taskInboxToken:e.entry.taskInboxToken}),n=await readTaskView(e.entry);for(let t=0;t<10&&!isTerminalTaskStatus(n.status);t+=1)await new Promise(e=>setTimeout(e,250)),n=await readTaskView(e.entry);if(!isTerminalTaskStatus(n.status))throw Error(`Task "${e.entry.taskId}" did not commit cancellation before timeout.`);if(n.status!==`cancelled`)return n;let r=await cancelTaskOwnedWork({cancelOwnedWork:e.cancelOwnedWork,entry:e.entry,serializedContext:e.serializedContext,session:e.session});return(t===`unreachable`||r)&&e.session!==void 0&&await wakeTaskParentStep({token:sessionCommandHookToken(e.session.sessionId),view:n}),n}function readTaskIds(e){let t=e.taskIds;if(Array.isArray(t))return t.filter(e=>typeof e==`string`&&e.trim()!==``)}export{cancelOwnedTask,executeTaskControlAction,isTaskControlAction};
1
+ import{sessionCommandHookToken}from"#execution/session-command-token.js";import{sendTaskCommand}from"#execution/tasks/parent/run-parent.js";import{isTerminalTaskStatus}from"#tasks/types.js";import{wakeTaskParentStep}from"#execution/tasks/child/steps.js";import{createTaskControlError,createTaskViewsResult,createUnknownTasksError,lookupTaskEntries,readTaskView}from"#execution/tasks/parent/control-shared.js";import{cancelTaskOwnedWork}from"#execution/tasks/parent/task-cancel.js";import{TASK_CANCEL_TOOL_NAME,TASK_TOOL_NAMES}from"#tools/framework/task-contract.js";function isTaskControlAction(e){return e.kind===`tool-call`&&TASK_TOOL_NAMES.has(e.toolName)}async function executeTaskControlAction(e){let{action:t,session:n}=e,r=readTaskIds(t.input);if(r===void 0||r.length===0)return{result:createTaskControlError(t,"Provide a non-empty `taskIds` array."),session:n};let i=lookupTaskEntries(n,r);if(i.kind===`unknown`)return{result:createUnknownTasksError(t,i.unknown),session:n};if(t.toolName!==TASK_CANCEL_TOOL_NAME)return{result:createTaskControlError(t,`Unsupported task control "${t.toolName}".`),session:n};let a=[];for(let t of i.entries)a.push(await cancelOwnedTask({cancelOwnedWork:e.cancelOwnedWork,entry:t,serializedContext:e.serializedContext,session:n}));return{result:createTaskViewsResult(t,a),session:n}}async function cancelOwnedTask(e){let t=await sendTaskCommand({command:{kind:`cancel`},taskInboxToken:e.entry.taskInboxToken}),n=await readTaskView(e.entry);for(let t=0;t<10&&!isTerminalTaskStatus(n.status);t+=1)await new Promise(e=>setTimeout(e,250)),n=await readTaskView(e.entry);if(!isTerminalTaskStatus(n.status))throw Error(`Task "${e.entry.taskId}" did not commit cancellation before timeout.`);if(n.status!==`cancelled`)return n;let r=await cancelTaskOwnedWork({cancelOwnedWork:e.cancelOwnedWork,entry:e.entry,serializedContext:e.serializedContext,session:e.session});return(t===`unreachable`||r)&&e.session!==void 0&&await wakeTaskParentStep({token:sessionCommandHookToken(e.session.sessionId),view:n}),n}function readTaskIds(e){let t=e.taskIds;if(Array.isArray(t))return t.filter(e=>typeof e==`string`&&e.trim()!==``)}export{cancelOwnedTask,executeTaskControlAction,isTaskControlAction};
@@ -14,6 +14,10 @@ export declare function recordTaskInputRequestStep(input: {
14
14
  }>;
15
15
  /** Caches terminal task views before their workflow runs expire. */
16
16
  export declare function recordTerminalTaskViewsStep(input: {
17
+ readonly serializedContext: Record<string, unknown>;
17
18
  readonly sessionState: DurableSessionState;
18
19
  readonly views: readonly TaskView[];
19
- }): Promise<DurableSessionState>;
20
+ }): Promise<{
21
+ readonly serializedContext: Record<string, unknown>;
22
+ readonly sessionState: DurableSessionState;
23
+ }>;
@@ -1 +1 @@
1
- import{createEveTaskInputRoutePath}from"#protocol/routes.js";import{isInputRequest}from"#shared/input.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{cacheTerminalTaskView,findSessionTaskEntry}from"#tasks/session-index.js";import{createTaskInputRequestId,upsertProxyInputRequestState}from"#harness/proxy-input-requests.js";import{readLatestTaskView}from"#execution/tasks/parent/run-parent.js";import{applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{createTaskInputCapabilityToken}from"#execution/task-input-capability.js";import{createRemoteTaskInputCallbackUrl}from"#execution/workflow-callback-url.js";async function recordTaskInputRequestStep(e){"use step";let t=await readDurableSession(e.sessionState),n=findSessionTaskEntry(t.state,e.request.taskId),r=e.request.requests??[e.request.request];if(n===void 0||r.length===0||!r.every(isInputRequest))return{accepted:!1,sessionState:e.sessionState};let i=await readLatestTaskView({taskRunId:n.taskRunId}),a=r.map(e=>e.requestId);if(i?.status!==`input_required`||i.inputRequests.length!==a.length||!i.inputRequests.every((e,t)=>typeof e==`object`&&!!e&&!Array.isArray(e)&&Reflect.get(e,`requestId`)===a[t]))return{accepted:!1,sessionState:e.sessionState};let o=r.map(t=>({...t,requestId:createTaskInputRequestId(e.request.taskId,t.requestId)})),s=getAgentHandleStore(t.state)?.handles.find(t=>t.phase===`claimed`&&t.ownerId===e.request.taskId),c=s?.phase===`claimed`&&s.address.kind===`agent/remote`?createRemoteTaskInputCallbackUrl(s.address.url,createEveTaskInputRoutePath(createTaskInputCapabilityToken(e.request.replyTo))):void 0,l=r.map((t,n)=>{let r=o[n],i={childContinuationToken:e.request.replyTo,childRequestId:t.requestId,kind:t.kind,taskId:e.request.taskId};return c!==void 0&&(i.childResponseUrl=c),[r.requestId,i]}),u=upsertProxyInputRequestState({entries:l,forChildContinuationToken:e.request.replyTo,state:t.state});return{accepted:!0,request:e.request.requests===void 0?{...e.request,request:o[0]}:{...e.request,request:void 0,requests:o},sessionState:{...e.sessionState,hasProxyInputRequests:!0,snapshot:{session:{...t,state:u},version:e.sessionState.version}}}}async function recordTerminalTaskViewsStep(e){"use step";let t=await readDurableSession(e.sessionState),n=t;for(let t of e.views){if(findSessionTaskEntry(n.state,t.taskId)===void 0)continue;let e=cacheTerminalTaskView(n.state,t);e!==n.state&&(n={...n,state:e}),n=applyTaskAgentHandleCommand(n,{kind:`release-owner`,ownerId:t.taskId}).session}return n===t?e.sessionState:{...e.sessionState,snapshot:{session:n,version:e.sessionState.version}}}export{recordTaskInputRequestStep,recordTerminalTaskViewsStep};
1
+ import{createEveTaskInputRoutePath}from"#protocol/routes.js";import{createLogger}from"#internal/logging.js";import{isInputRequest}from"#shared/input.js";import{contextStorage}from"#context/container.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{cacheTerminalTaskView,findSessionTaskEntry}from"#tasks/session-index.js";import{createTaskInputRequestId,upsertProxyInputRequestState}from"#harness/proxy-input-requests.js";import{readLatestTaskView}from"#execution/tasks/parent/run-parent.js";import{applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{bindSessionInstrumentation}from"#instrumentation/runtime.js";import{createTaskInputCapabilityToken}from"#execution/task-input-capability.js";import{createRemoteTaskInputCallbackUrl}from"#execution/workflow-callback-url.js";const log=createLogger(`execution.tasks.parent`);async function recordTaskInputRequestStep(e){"use step";let t=await readDurableSession(e.sessionState),n=findSessionTaskEntry(t.state,e.request.taskId),r=e.request.requests??[e.request.request];if(n===void 0||r.length===0||!r.every(isInputRequest))return{accepted:!1,sessionState:e.sessionState};let i=await readLatestTaskView({taskRunId:n.taskRunId}),a=r.map(e=>e.requestId);if(i?.status!==`input_required`||i.inputRequests.length!==a.length||!i.inputRequests.every((e,t)=>typeof e==`object`&&!!e&&!Array.isArray(e)&&Reflect.get(e,`requestId`)===a[t]))return{accepted:!1,sessionState:e.sessionState};let o=r.map(t=>({...t,requestId:createTaskInputRequestId(e.request.taskId,t.requestId)})),s=getAgentHandleStore(t.state)?.handles.find(t=>t.phase===`claimed`&&t.ownerId===e.request.taskId),c=s?.phase===`claimed`&&s.address.kind===`agent/remote`?createRemoteTaskInputCallbackUrl(s.address.url,createEveTaskInputRoutePath(createTaskInputCapabilityToken(e.request.replyTo))):void 0,l=r.map((t,n)=>{let r=o[n],i={childContinuationToken:e.request.replyTo,childRequestId:t.requestId,kind:t.kind,taskId:e.request.taskId};return c!==void 0&&(i.childResponseUrl=c),[r.requestId,i]}),u=upsertProxyInputRequestState({entries:l,forChildContinuationToken:e.request.replyTo,state:t.state});return{accepted:!0,request:e.request.requests===void 0?{...e.request,request:o[0]}:{...e.request,request:void 0,requests:o},sessionState:{...e.sessionState,hasProxyInputRequests:!0,snapshot:{session:{...t,state:u},version:e.sessionState.version}}}}async function recordTerminalTaskViewsStep(e){"use step";let t=await readDurableSession(e.sessionState),n=t,r=[];for(let t of e.views){if(findSessionTaskEntry(n.state,t.taskId)===void 0)continue;let e=cacheTerminalTaskView(n.state,t);e!==n.state&&(n={...n,state:e}),r.push(t),n=applyTaskAgentHandleCommand(n,{kind:`release-owner`,ownerId:t.taskId}).session}return{serializedContext:await settleBackgroundTaskActions({serializedContext:e.serializedContext,session:n,views:r}),sessionState:n===t?e.sessionState:{...e.sessionState,snapshot:{session:n,version:e.sessionState.version}}}}async function settleBackgroundTaskActions(e){if(e.views.length===0)return e.serializedContext;try{let t=await deserializeContext(e.serializedContext),n=t.get(BundleKey);if(n===void 0)return e.serializedContext;let r=bindSessionInstrumentation({agentName:n.turnAgent.id,ctx:t,rootSessionId:e.session.rootSessionId??e.session.sessionId,sessionId:e.session.sessionId});if(r===void 0)return e.serializedContext;try{await contextStorage.run(t,()=>r.publishBackgroundTaskSettlements({acceptedAtMs:Date.now(),views:e.views}))}finally{await r.flush()}return serializeContext(t)}catch(t){return log.warn(`failed to settle background task instrumentation`,{error:t,sessionId:e.session.sessionId,taskIds:e.views.map(e=>e.taskId)}),e.serializedContext}}export{recordTaskInputRequestStep,recordTerminalTaskViewsStep};
@@ -1 +1 @@
1
- import{sessionCommandHookToken}from"#execution/session-command-token.js";import{loadContext}from"#context/container.js";import{ActivityObserverKey}from"#context/keys.js";import{parseJsonValue}from"#shared/json.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{parseWorkflowToolInput}from"#execution/tools/workflow/background.js";import{getHarnessEmissionState}from"#harness/emission.js";import{deriveAgentOperationId}from"#subagents/handles/operation-id.js";import{serializeContext}from"#context/serialize.js";import{getAgentHandleStore,writeHandles}from"#subagents/handles/store.js";import{cancelOwnedTask}from"#execution/tasks/parent/dispatch.js";import{cancelBackgroundAgentTask}from"#execution/tools/subagent/task-cancel.js";import{findSessionTaskEntry,recordSessionTask}from"#tasks/session-index.js";import{sessionDriverSupportsWorkflowTaskAuthorization}from"#execution/wire/session-inbox-resume.js";import{runStep}from"#context/run-step.js";import{activeTurnId}from"#harness/active-turn-id.js";import{AGENT_BUSY,AGENT_MISMATCH,AGENT_UNREACHABLE,formatAgentBusyMessage}from"#subagents/agent-handle-errors.js";import{isTurnCancellation}from"#harness/turn-cancellation.js";import{isAuthorizationSignal}from"#harness/authorization.js";import{sendTaskCommand,sendTaskInboundPayload,startTaskRun,waitForTaskCommandOwner}from"#execution/tasks/parent/run-parent.js";import{applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{BackgroundToolExecutorKey}from"#harness/background-tools.js";import{deriveBackgroundTaskActivityObserver}from"#execution/activity-work.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{createTaskMessage,isTaskMessage}from"#tools/task.js";import{beginBackgroundTask,prepareBackgroundTask,rejectDelegatedDispatch}from"#execution/tasks/parent/delegate.js";import{projectSubagentTask}from"#execution/tasks/parent/subagent-task-projection.js";const IN_PROCESS_WORKFLOW_EXECUTOR={data:{},kind:`workflow-task`};function runBackgroundStep(e,t,n){return runStep(e,t,n,[backgroundToolExecutionProvider])}const backgroundToolExecutionProvider={key:BackgroundToolExecutorKey,create(e,t){return{value:new BackgroundToolExecutionScope(t)}},async commit(e,t){return await requireExecutionScope(e).commit(t)},async rollback(e,t){await requireExecutionScope(e).rollback(t)},decorateStepResult(e,t){return requireExecutionScope(e).decorate(t)}};function readRetainedBackgroundToolResult(e){let t=e.get(BackgroundToolExecutorKey);return t instanceof BackgroundToolExecutionScope?t.retainedResult():void 0}var BackgroundToolExecutionScope=class{executions=new Map;records=[];steeringAgents=new Set;agentHandleSession;agentHandlesChanged=!1;retained=!1;initialSession;constructor(e){this.initialSession=e,this.agentHandleSession=e}execute(e){let t=this.executions.get(e.options.toolCallId);if(t!==void 0)return t;if(!e.batch.calls.some(t=>t.callId===e.options.toolCallId))throw Error(`Background tool call "${e.options.toolCallId}" was not registered before execution.`);let n=this.start(e);return this.executions.set(e.options.toolCallId,n),n}async readAgentViews(){return(getAgentHandleStore(this.agentHandleSession.state)?.handles??[]).flatMap(e=>e.phase===`reserved`?[]:e.phase===`available`?[{availability:`available`,id:e.identity.id,name:e.identity.name}]:e.phase===`claimed`?[{availability:`busy`,id:e.identity.id,name:e.identity.name,taskId:e.ownerId,taskStatus:`working`}]:[])}async commit(e){let t=this.records.filter(e=>!e.settled);return t.length>0&&await this.compensate(t,Error(`Background tool execution did not delegate or complete its task.`)),this.apply(e)}decorate(e){let t=this.resultFields();return t===void 0?e:{...e,...t}}async rollback(e){let t=this.records.filter(e=>e.settled),n=this.records.filter(e=>!e.settled);if(n.length>0&&await this.compensate(n,e),t.length===0){this.retained=this.agentHandlesChanged&&isTurnCancellation(e);return}if(isTurnCancellation(e)){this.retained=!0;return}await this.compensate(t,e)}retainedResult(){return this.retained?this.resultFields():void 0}apply(e){let t=e;for(let e of this.records)e.settled&&e.task!==void 0&&(t=recordSessionTask(t,e.task));return this.agentHandlesChanged&&(t=writeHandles(t,getAgentHandleStore(this.agentHandleSession.state)?.handles??[])),t}resultFields(){let e=this.records.flatMap(e=>e.settled&&e.task!==void 0?[e.task]:[]);if(e.length!==0||this.agentHandlesChanged)return{backgroundTaskSession:this.apply(this.initialSession),backgroundTasks:e.map(({taskInboxToken:e,taskId:t,taskRunId:n})=>({taskInboxToken:e,taskId:t,taskRunId:n}))}}async start(e){let t={settled:!1};this.records.push(t);let n=getHarnessEmissionState(this.initialSession.state),r=loadContext(),i=await this.startTask({ctx:r,emission:n,input:e,record:t}),a=i.task;t.task=a;let o={binding:{taskId:a.taskId,token:a.taskInboxToken},postMessage:createTaskMessage,send(){throw Error(`task.send() was replaced by yielded task descriptors.`)},session:this.initialSession,task:a,taskId:a.taskId};if(e.definition.workflowId!==void 0)return t.settled=!0,{...i.receipt,status:`working`,taskId:a.taskId};let s=e.definition.execute(e.toolInput,e.options,o),c=isAsyncIterable(s)?await executeBackgroundIterable({callId:e.options.toolCallId,output:s,task:a}):await s;return isAuthorizationSignal(c)?c:(await deliverTaskCommand(a,{data:parseJsonValue(c),kind:`complete`}),t.settled=!0,{status:`working`,taskId:a.taskId})}async startTask(e){let t=e.input.definition.workflowId===void 0?void 0:{...e.input.definition,workflowId:e.input.definition.workflowId},n=t===void 0?void 0:parseWorkflowToolInput(e.input.toolInput,e.input.definition.name),r=activeTurnId(e.emission),i=t?.resultKind===`subagent`&&n!==void 0?projectSubagentTask({ctx:e.ctx,input:n,name:e.input.definition.name,nodeId:t.nodeId??e.input.definition.name,taskInput:{callId:e.input.options.toolCallId,parentSessionId:this.initialSession.sessionId,parentTurnId:r}}):void 0;if(i!==void 0&&i.identity===void 0&&!hasAgentHandle(this.agentHandleSession,i.metadata.agentId)){let{agentId:a,...o}=n;n=o,i=projectSubagentTask({ctx:e.ctx,input:o,name:e.input.definition.name,nodeId:t.nodeId??e.input.definition.name,taskInput:{callId:e.input.options.toolCallId,parentSessionId:this.initialSession.sessionId,parentTurnId:r}})}let a=i?.metadata??{kind:`tool`,name:e.input.definition.name},o={activityObserver:deriveBackgroundTaskActivityObserver({activityObserver:e.ctx.get(ActivityObserverKey),callId:e.input.options.toolCallId,name:a.name,parentSessionId:this.initialSession.sessionId,parentTurnId:r,rootSessionId:this.initialSession.rootSessionId??this.initialSession.sessionId}),callId:e.input.options.toolCallId,metadata:a,parentSessionId:this.initialSession.sessionId,parentStepIndex:e.emission.stepIndex,parentTurnId:r,session:this.initialSession};if(t===void 0)return{task:await beginBackgroundTask({activityObserver:o.activityObserver,callId:o.callId,metadata:o.metadata,parentSessionId:o.parentSessionId,parentStepIndex:o.parentStepIndex,parentTurnId:o.parentTurnId,session:o.session})};if(n===void 0)throw Error(`Background workflow tool "${e.input.definition.name}" has no input.`);let s=prepareBackgroundTask(o);if(t.resultKind===`subagent`&&i!==void 0&&i.identity!==void 0){let t=i.identity;if(this.applyAgentHandleCommand({identity:t.identity,callId:o.callId,kind:`reserve`,operationId:t.operation.id,ownerId:s.taskId}).kind!==`ready`)throw Error(`Agent handle store rejected start operation "${t.operation.id}".`);e.record.reservation={agentId:t.identity.id,operationId:t.operation.id}}if(t.resultKind===`subagent`&&i!==void 0&&i.identity===void 0){let t=deriveAgentOperationId({callId:o.callId,parentSessionId:o.parentSessionId,parentTurnId:r}),n=await this.claimAgentForSteering({agentId:i.metadata.agentId,callId:o.callId,expectedTarget:i.metadata.mode,invokedName:i.metadata.name,kind:`claim`,operationId:t,ownerId:s.taskId},e.ctx);readClaimedHandle(n)?e.record.claim={operationId:t,taskId:s.taskId}:throwAgentClaimError(i.metadata.agentId,n)}await startTaskRun({activityObserver:o.activityObserver,initialView:{metadata:s.metadata,status:`working`,taskId:s.taskId},parentContinuationToken:sessionCommandHookToken(this.initialSession.sessionId),taskInboxToken:s.taskInboxToken,workflow:{authorizationSupported:await sessionDriverSupportsWorkflowTaskAuthorization(this.initialSession.sessionId),callId:o.callId,executeInput:t.executeInput?.(n),input:n,resultKind:t.resultKind,session:buildCallbackContext().session,stepIndex:e.emission.stepIndex,toolName:e.input.definition.name,taskId:s.taskId,workflowId:t.workflowId}});let c=await waitForTaskCommandOwner({taskInboxToken:s.taskInboxToken}),l={...s,executor:IN_PROCESS_WORKFLOW_EXECUTOR,taskRunId:c.runId};return e.record.task=l,t.resultKind!==`subagent`||i===void 0?{task:l}:(i.identity,{receipt:i.receipt,task:l})}async claimAgentForSteering(e,t){let n=this.applyAgentHandleCommand(e);if(n.kind!==`busy`||n.handle.phase!==`claimed`)return n;let r=n.handle;if(this.steeringAgents.has(r.identity.id))return n;let i=findSessionTaskEntry(this.agentHandleSession.state,r.ownerId);if(i?.metadata.kind!==`subagent`||i.metadata.agentId!==r.identity.id||i.metadata.name!==r.identity.name)return n;this.steeringAgents.add(r.identity.id);try{return await cancelOwnedTask({cancelOwnedWork:cancelBackgroundAgentTask,entry:i,serializedContext:serializeContext(t),session:this.agentHandleSession}),this.applyAgentHandleCommand({kind:`release-owner`,ownerId:r.ownerId}),this.applyAgentHandleCommand(e)}finally{this.steeringAgents.delete(r.identity.id)}}applyAgentHandleCommand(e){let t=applyTaskAgentHandleCommand(this.agentHandleSession,e);return t.session!==this.agentHandleSession&&(this.agentHandleSession=t.session,this.agentHandlesChanged=!0),t.result}async compensate(e,t){let n=[];for(let r of e.toReversed()){if(r.task!==void 0)try{await rejectDelegatedDispatch({error:{code:`PARENT_STEP_FAILED`,message:t instanceof Error?t.message:String(t)},task:r.task})}catch(e){n.push(e)}r.claim!==void 0&&this.applyAgentHandleCommand({kind:`release-owner`,ownerId:r.claim.taskId}),r.reservation!==void 0&&r.task!==void 0&&this.applyAgentHandleCommand({agentId:r.reservation.agentId,kind:`remove`,ownerId:r.task.taskId})}if(n.length>0)throw AggregateError([t,...n],`Background tool execution failed and its tasks could not all be rejected.`,{cause:t})}};async function executeBackgroundIterable(e){let t=e.output[Symbol.asyncIterator](),n=0,r=await t.next();for(;!r.done;){let i=isTaskMessage(r.value)?{callId:e.callId,kind:`task-message`,message:r.value.message,messageEpoch:e.task.taskId,messageIndex:n++}:{callId:e.callId,kind:`task-update`,message:typeof r.value==`string`?r.value:JSON.stringify(r.value),updateEpoch:e.task.taskId,updateIndex:n++};if(await sendTaskInboundPayload({payload:i,taskInboxToken:e.task.taskInboxToken})!==`delivered`)throw Error(`Task run "${e.task.taskId}" did not accept "${i.kind}".`);r=await t.next()}return r.value??null}function hasAgentHandle(e,t){return getAgentHandleStore(e.state)?.handles.some(e=>e.identity.id===t)===!0}function requireExecutionScope(e){if(!(e instanceof BackgroundToolExecutionScope))throw Error(`The background tool executor is not owned by the task runtime.`);return e}async function deliverTaskCommand(e,t){if(await sendTaskCommand({command:t,taskInboxToken:e.taskInboxToken})!==`delivered`)throw Error(`Task run "${e.taskId}" did not accept "${t.kind}".`)}function readClaimedHandle(e){return e.kind===`ready`&&e.handle?.phase===`claimed`}function throwAgentClaimError(e,t){throw t.kind===`mismatch`?Error(JSON.stringify({code:AGENT_MISMATCH,message:`Agent "${e}" no longer matches this subagent definition. Start a new agent instead.`})):t.kind===`busy`?Error(JSON.stringify({code:AGENT_BUSY,message:formatAgentBusyMessage({agentId:e,agentName:t.handle.identity.name,ownerId:`ownerId`in t.handle?t.handle.ownerId:void 0})})):Error(JSON.stringify({code:AGENT_UNREACHABLE,message:`Agent with id "${e}" is no longer reachable.`}))}export{backgroundToolExecutionProvider,readRetainedBackgroundToolResult,runBackgroundStep};
1
+ import{sessionCommandHookToken}from"#execution/session-command-token.js";import{loadContext}from"#context/container.js";import{ActivityObserverKey}from"#context/keys.js";import{parseJsonValue}from"#shared/json.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{parseWorkflowToolInput}from"#execution/tools/workflow/background.js";import{getHarnessEmissionState}from"#harness/emission.js";import{deriveAgentOperationId}from"#subagents/handles/operation-id.js";import{serializeContext}from"#context/serialize.js";import{getAgentHandleStore,writeHandles}from"#subagents/handles/store.js";import{cancelOwnedTask}from"#execution/tasks/parent/dispatch.js";import{cancelBackgroundAgentTask}from"#execution/tools/subagent/task-cancel.js";import{findSessionTaskEntry,recordSessionTask}from"#tasks/session-index.js";import{sessionDriverSupportsWorkflowTaskAuthorization}from"#execution/wire/session-inbox-resume.js";import{runStep}from"#context/run-step.js";import{activeTurnId}from"#harness/active-turn-id.js";import{AGENT_BUSY,AGENT_MISMATCH,AGENT_UNREACHABLE,formatAgentBusyMessage}from"#subagents/agent-handle-errors.js";import{isTurnCancellation}from"#harness/turn-cancellation.js";import{isAuthorizationSignal}from"#harness/authorization.js";import{sendTaskCommand,sendTaskInboundPayload,startTaskRun,waitForTaskCommandOwner}from"#execution/tasks/parent/run-parent.js";import{applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{BackgroundToolExecutorKey}from"#harness/background-tools.js";import{deriveBackgroundTaskActivityObserver}from"#execution/activity-work.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{createTaskMessage,isTaskMessage}from"#tools/task.js";import{beginBackgroundTask,prepareBackgroundTask,rejectDelegatedDispatch}from"#execution/tasks/parent/delegate.js";import{projectSubagentTask}from"#execution/tasks/parent/subagent-task-projection.js";const IN_PROCESS_WORKFLOW_EXECUTOR={data:{},kind:`workflow-task`};function runBackgroundStep(e,t,n){return runStep(e,t,n,[backgroundToolExecutionProvider])}const backgroundToolExecutionProvider={key:BackgroundToolExecutorKey,create(e,t){return{value:new BackgroundToolExecutionScope(t)}},async commit(e,t){return await requireExecutionScope(e).commit(t)},async rollback(e,t){await requireExecutionScope(e).rollback(t)},decorateStepResult(e,t){return requireExecutionScope(e).decorate(t)}};function readRetainedBackgroundToolResult(e){let t=e.get(BackgroundToolExecutorKey);return t instanceof BackgroundToolExecutionScope?t.retainedResult():void 0}var BackgroundToolExecutionScope=class{executions=new Map;records=[];steeringAgents=new Set;agentHandleSession;agentHandlesChanged=!1;retained=!1;initialSession;constructor(e){this.initialSession=e,this.agentHandleSession=e}execute(e){let t=this.executions.get(e.options.toolCallId);if(t!==void 0)return t;if(!e.batch.calls.some(t=>t.callId===e.options.toolCallId))throw Error(`Background tool call "${e.options.toolCallId}" was not registered before execution.`);let n=this.start(e);return this.executions.set(e.options.toolCallId,n),n}async readAgentViews(){return(getAgentHandleStore(this.agentHandleSession.state)?.handles??[]).flatMap(e=>e.phase===`reserved`?[]:e.phase===`available`?[{availability:`available`,id:e.identity.id,name:e.identity.name}]:e.phase===`claimed`?[{availability:`busy`,id:e.identity.id,name:e.identity.name,taskId:e.ownerId,taskStatus:`working`}]:[])}async commit(e){let t=this.records.filter(e=>!e.settled);return t.length>0&&await this.compensate(t,Error(`Background tool execution did not delegate or complete its task.`)),this.apply(e)}decorate(e){let t=this.resultFields();return t===void 0?e:{...e,...t}}async rollback(e){let t=this.records.filter(e=>e.settled),n=this.records.filter(e=>!e.settled);if(n.length>0&&await this.compensate(n,e),t.length===0){this.retained=this.agentHandlesChanged&&isTurnCancellation(e);return}if(isTurnCancellation(e)){this.retained=!0;return}await this.compensate(t,e)}retainedResult(){return this.retained?this.resultFields():void 0}apply(e){let t=e;for(let e of this.records)e.settled&&e.task!==void 0&&(t=recordSessionTask(t,e.task));return this.agentHandlesChanged&&(t=writeHandles(t,getAgentHandleStore(this.agentHandleSession.state)?.handles??[])),t}resultFields(){let e=this.records.flatMap(e=>e.settled&&e.task!==void 0?[{callId:e.callId,taskInboxToken:e.task.taskInboxToken,taskId:e.task.taskId,taskRunId:e.task.taskRunId}]:[]);if(e.length!==0||this.agentHandlesChanged)return{backgroundTaskSession:this.apply(this.initialSession),backgroundTasks:e}}async start(e){let t={callId:e.options.toolCallId,settled:!1};this.records.push(t);let n=getHarnessEmissionState(this.initialSession.state),r=loadContext(),i=await this.startTask({ctx:r,emission:n,input:e,record:t}),a=i.task;t.task=a;let o={binding:{taskId:a.taskId,token:a.taskInboxToken},postMessage:createTaskMessage,send(){throw Error(`task.send() was replaced by yielded task descriptors.`)},session:this.initialSession,task:a,taskId:a.taskId};if(e.definition.workflowId!==void 0)return t.settled=!0,{...i.receipt,status:`working`,taskId:a.taskId};let s=e.definition.execute(e.toolInput,e.options,o),c=isAsyncIterable(s)?await executeBackgroundIterable({callId:e.options.toolCallId,output:s,task:a}):await s;return isAuthorizationSignal(c)?c:(await deliverTaskCommand(a,{data:parseJsonValue(c),kind:`complete`}),t.settled=!0,{status:`working`,taskId:a.taskId})}async startTask(e){let t=e.input.definition.workflowId===void 0?void 0:{...e.input.definition,workflowId:e.input.definition.workflowId},n=t===void 0?void 0:parseWorkflowToolInput(e.input.toolInput,e.input.definition.name),r=activeTurnId(e.emission),i=t?.resultKind===`subagent`&&n!==void 0?projectSubagentTask({ctx:e.ctx,input:n,name:e.input.definition.name,nodeId:t.nodeId??e.input.definition.name,taskInput:{callId:e.input.options.toolCallId,parentSessionId:this.initialSession.sessionId,parentTurnId:r}}):void 0;if(i!==void 0&&i.identity===void 0&&!hasAgentHandle(this.agentHandleSession,i.metadata.agentId)){let{agentId:a,...o}=n;n=o,i=projectSubagentTask({ctx:e.ctx,input:o,name:e.input.definition.name,nodeId:t.nodeId??e.input.definition.name,taskInput:{callId:e.input.options.toolCallId,parentSessionId:this.initialSession.sessionId,parentTurnId:r}})}let a=i?.metadata??{kind:`tool`,name:e.input.definition.name},o={activityObserver:deriveBackgroundTaskActivityObserver({activityObserver:e.ctx.get(ActivityObserverKey),callId:e.input.options.toolCallId,name:a.name,parentSessionId:this.initialSession.sessionId,parentTurnId:r,rootSessionId:this.initialSession.rootSessionId??this.initialSession.sessionId}),callId:e.input.options.toolCallId,metadata:a,parentSessionId:this.initialSession.sessionId,parentStepIndex:e.emission.stepIndex,parentTurnId:r,session:this.initialSession};if(t===void 0)return{task:await beginBackgroundTask({activityObserver:o.activityObserver,callId:o.callId,metadata:o.metadata,parentSessionId:o.parentSessionId,parentStepIndex:o.parentStepIndex,parentTurnId:o.parentTurnId,session:o.session})};if(n===void 0)throw Error(`Background workflow tool "${e.input.definition.name}" has no input.`);let s=prepareBackgroundTask(o);if(t.resultKind===`subagent`&&i!==void 0&&i.identity!==void 0){let t=i.identity;if(this.applyAgentHandleCommand({identity:t.identity,callId:o.callId,kind:`reserve`,operationId:t.operation.id,ownerId:s.taskId}).kind!==`ready`)throw Error(`Agent handle store rejected start operation "${t.operation.id}".`);e.record.reservation={agentId:t.identity.id,operationId:t.operation.id}}if(t.resultKind===`subagent`&&i!==void 0&&i.identity===void 0){let t=deriveAgentOperationId({callId:o.callId,parentSessionId:o.parentSessionId,parentTurnId:r}),n=await this.claimAgentForSteering({agentId:i.metadata.agentId,callId:o.callId,expectedTarget:i.metadata.mode,invokedName:i.metadata.name,kind:`claim`,operationId:t,ownerId:s.taskId},e.ctx);readClaimedHandle(n)?e.record.claim={operationId:t,taskId:s.taskId}:throwAgentClaimError(i.metadata.agentId,n)}await startTaskRun({activityObserver:o.activityObserver,initialView:{metadata:s.metadata,status:`working`,taskId:s.taskId},parentContinuationToken:sessionCommandHookToken(this.initialSession.sessionId),taskInboxToken:s.taskInboxToken,workflow:{authorizationSupported:await sessionDriverSupportsWorkflowTaskAuthorization(this.initialSession.sessionId),callId:o.callId,executeInput:t.executeInput?.(n),input:n,resultKind:t.resultKind,session:buildCallbackContext().session,stepIndex:e.emission.stepIndex,toolName:e.input.definition.name,taskId:s.taskId,workflowId:t.workflowId}});let c=await waitForTaskCommandOwner({taskInboxToken:s.taskInboxToken}),l={...s,executor:IN_PROCESS_WORKFLOW_EXECUTOR,taskRunId:c.runId};return e.record.task=l,t.resultKind!==`subagent`||i===void 0?{task:l}:(i.identity,{receipt:i.receipt,task:l})}async claimAgentForSteering(e,t){let n=this.applyAgentHandleCommand(e);if(n.kind!==`busy`||n.handle.phase!==`claimed`)return n;let r=n.handle;if(this.steeringAgents.has(r.identity.id))return n;let i=findSessionTaskEntry(this.agentHandleSession.state,r.ownerId);if(i?.metadata.kind!==`subagent`||i.metadata.agentId!==r.identity.id||i.metadata.name!==r.identity.name)return n;this.steeringAgents.add(r.identity.id);try{return await cancelOwnedTask({cancelOwnedWork:cancelBackgroundAgentTask,entry:i,serializedContext:serializeContext(t),session:this.agentHandleSession}),this.applyAgentHandleCommand({kind:`release-owner`,ownerId:r.ownerId}),this.applyAgentHandleCommand(e)}finally{this.steeringAgents.delete(r.identity.id)}}applyAgentHandleCommand(e){let t=applyTaskAgentHandleCommand(this.agentHandleSession,e);return t.session!==this.agentHandleSession&&(this.agentHandleSession=t.session,this.agentHandlesChanged=!0),t.result}async compensate(e,t){let n=[];for(let r of e.toReversed()){if(r.task!==void 0)try{await rejectDelegatedDispatch({error:{code:`PARENT_STEP_FAILED`,message:t instanceof Error?t.message:String(t)},task:r.task})}catch(e){n.push(e)}r.claim!==void 0&&this.applyAgentHandleCommand({kind:`release-owner`,ownerId:r.claim.taskId}),r.reservation!==void 0&&r.task!==void 0&&this.applyAgentHandleCommand({agentId:r.reservation.agentId,kind:`remove`,ownerId:r.task.taskId})}if(n.length>0)throw AggregateError([t,...n],`Background tool execution failed and its tasks could not all be rejected.`,{cause:t})}};async function executeBackgroundIterable(e){let t=e.output[Symbol.asyncIterator](),n=0,r=await t.next();for(;!r.done;){let i=isTaskMessage(r.value)?{callId:e.callId,kind:`task-message`,message:r.value.message,messageEpoch:e.task.taskId,messageIndex:n++}:{callId:e.callId,kind:`task-update`,message:typeof r.value==`string`?r.value:JSON.stringify(r.value),updateEpoch:e.task.taskId,updateIndex:n++};if(await sendTaskInboundPayload({payload:i,taskInboxToken:e.task.taskInboxToken})!==`delivered`)throw Error(`Task run "${e.task.taskId}" did not accept "${i.kind}".`);r=await t.next()}return r.value??null}function hasAgentHandle(e,t){return getAgentHandleStore(e.state)?.handles.some(e=>e.identity.id===t)===!0}function requireExecutionScope(e){if(!(e instanceof BackgroundToolExecutionScope))throw Error(`The background tool executor is not owned by the task runtime.`);return e}async function deliverTaskCommand(e,t){if(await sendTaskCommand({command:t,taskInboxToken:e.taskInboxToken})!==`delivered`)throw Error(`Task run "${e.taskId}" did not accept "${t.kind}".`)}function readClaimedHandle(e){return e.kind===`ready`&&e.handle?.phase===`claimed`}function throwAgentClaimError(e,t){throw t.kind===`mismatch`?Error(JSON.stringify({code:AGENT_MISMATCH,message:`Agent "${e}" no longer matches this subagent definition. Start a new agent instead.`})):t.kind===`busy`?Error(JSON.stringify({code:AGENT_BUSY,message:formatAgentBusyMessage({agentId:e,agentName:t.handle.identity.name,ownerId:`ownerId`in t.handle?t.handle.ownerId:void 0})})):Error(JSON.stringify({code:AGENT_UNREACHABLE,message:`Agent with id "${e}" is no longer reachable.`}))}export{backgroundToolExecutionProvider,readRetainedBackgroundToolResult,runBackgroundStep};
@@ -1 +1 @@
1
- import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e){"use workflow";return await sleep(Math.ceil(e.seconds*1e3)),{waitedSeconds:e.seconds}}executeSleepTool.workflowId=`workflow//eve@0.53.1//executeSleepTool`;export{executeSleepTool};
1
+ import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e){"use workflow";return await sleep(Math.ceil(e.seconds*1e3)),{waitedSeconds:e.seconds}}executeSleepTool.workflowId=`workflow//eve@0.54.2//executeSleepTool`;export{executeSleepTool};
@@ -4,7 +4,6 @@ import type { JsonValue } from "#shared/json.js";
4
4
  import type { JsonObject } from "#shared/json.js";
5
5
  import type { AgentInput } from "#tools/workflow-definition.js";
6
6
  import type { ToolContext } from "#tools/definition.js";
7
- import type { TaskInboundUpdate } from "#tasks/types.js";
8
7
  export type InternalAgentInput = {
9
8
  readonly agentId?: string;
10
9
  readonly message: string;
@@ -30,7 +29,7 @@ export interface AgentSettlementRequest {
30
29
  readonly result: RuntimeSubagentChildResult;
31
30
  }
32
31
  export type AgentInvocationEvent = SubagentAuthorizationEventHookPayload | SubagentInputRequestHookPayload;
33
- export type AgentInvocationReply = AgentInvocationEvent | RuntimeActionResultHookPayload | TaskInboundUpdate;
32
+ export type AgentInvocationReply = AgentInvocationEvent | RuntimeActionResultHookPayload;
34
33
  /** Invokes an agent from a workflow tool. */
35
34
  export declare function agent(ctx: ToolContext, target: string, input: AgentInput): Promise<JsonValue>;
36
35
  /** Invokes an agent with a framework-selected replay-stable invocation id. */
@@ -1 +1 @@
1
- import{sessionCommandHookToken}from"#execution/session-command-token.js";import{createHook}from"#compiled/@workflow/core/index.js";import{disposeHook}from"#execution/hook-ownership.js";import{resumeHookStep}from"#execution/tools/workflow/resume-hook-step.js";import{readWorkflowToolRunAdmission,readWorkflowToolRunOwner,readWorkflowToolRunRef}from"#execution/tools/workflow/ask.js";async function agent(e,t,n){return readWorkflowToolRunRef(e),validateAgentInput({...n,target:t}),await invokeAgent(e,{agentId:n.agentId,message:n.message,outputSchema:n.outputSchema,target:t})}async function invokeAgent(e,t,n={}){validateAgentInput(t);let r=readWorkflowToolRunRef(e),i=readWorkflowToolRunOwner(e),a=readWorkflowToolRunAdmission(e);if(a!==void 0){let e=await a;if(e.status===`rejected`)throw Error(e.reason)}let o=createHook(),s=n.invocationId??`${e.callId}:${o.token}`;try{await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{input:t,invocationId:s,kind:`agent-invoke`}});let a=o[Symbol.asyncIterator]();for(;;){let t=await nextAgentReply(a,e.abortSignal);if(t.done)break;let c=t.value;if(c.kind===`runtime-action-result`){let e=c.results.find(e=>e.kind===`subagent-result`&&e.callId===s);if(e!==void 0){if(e.origin===`child`&&await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{kind:`agent-settled`,result:e}}),n.returnResult===!0&&r.execution===`blocking`)return e;if(e.isError===!0)throw e.output;return e.output}continue}if(c.kind===`subagent-input-request`){await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:c.childSessionInbox?.sessionId===c.childSessionId?sessionCommandHookToken(c.childSessionInbox.sessionId):c.childContinuationToken,request:{kind:`input-batch`,requests:c.event.requests},requestCoordinates:{sequence:c.event.sequence,stepIndex:c.event.stepIndex,turnId:c.event.turnId}});continue}if(c.kind===`task-update`){await resumeHookStep(i.inbox,{kind:`report`,from:r,update:c.message});continue}await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{event:c,kind:`authorization-request`}})}}finally{try{await disposeHook(o)}catch{}}throw Error(`Agent "${t.target}" closed without a result.`)}async function nextAgentReply(e,t){if(t===void 0)return await e.next();if(t.aborted)throw t.reason;let n,r=new Promise((e,t)=>{n=t}),abort=()=>n?.(t.reason);t.addEventListener(`abort`,abort,{once:!0});try{return await Promise.race([e.next(),r])}finally{t.removeEventListener(`abort`,abort)}}function validateAgentInput(e){if(typeof e.target!=`string`||e.target.trim()===``)throw TypeError(`agent() requires a non-empty agent name as its first argument.`);if(typeof e.message!=`string`||e.message.trim()===``)throw TypeError("agent() requires a non-empty `message`.")}export{agent,invokeAgent,validateAgentInput};
1
+ import{sessionCommandHookToken}from"#execution/session-command-token.js";import{createHook}from"#compiled/@workflow/core/index.js";import{disposeHook}from"#execution/hook-ownership.js";import{resumeHookStep}from"#execution/tools/workflow/resume-hook-step.js";import{readWorkflowToolRunAdmission,readWorkflowToolRunOwner,readWorkflowToolRunRef}from"#execution/tools/workflow/ask.js";async function agent(e,t,n){return readWorkflowToolRunRef(e),validateAgentInput({...n,target:t}),await invokeAgent(e,{agentId:n.agentId,message:n.message,outputSchema:n.outputSchema,target:t})}async function invokeAgent(e,t,n={}){validateAgentInput(t);let r=readWorkflowToolRunRef(e),i=readWorkflowToolRunOwner(e),a=readWorkflowToolRunAdmission(e);if(a!==void 0){let e=await a;if(e.status===`rejected`)throw Error(e.reason)}let o=createHook(),s=n.invocationId??`${e.callId}:${o.token}`;try{await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{input:t,invocationId:s,kind:`agent-invoke`}});let a=o[Symbol.asyncIterator]();for(;;){let t=await nextAgentReply(a,e.abortSignal);if(t.done)break;let c=t.value;if(c.kind===`runtime-action-result`){let e=c.results.find(e=>e.kind===`subagent-result`&&e.callId===s);if(e!==void 0){if(e.origin===`child`&&await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{kind:`agent-settled`,result:e}}),n.returnResult===!0&&r.execution===`blocking`)return e;if(e.isError===!0)throw e.output;return e.output}continue}if(c.kind===`subagent-input-request`){await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:c.childSessionInbox?.sessionId===c.childSessionId?sessionCommandHookToken(c.childSessionInbox.sessionId):c.childContinuationToken,request:{kind:`input-batch`,requests:c.event.requests},requestCoordinates:{sequence:c.event.sequence,stepIndex:c.event.stepIndex,turnId:c.event.turnId}});continue}await resumeHookStep(i.inbox,{kind:`request`,from:r,replyTo:o.token,request:{event:c,kind:`authorization-request`}})}}finally{try{await disposeHook(o)}catch{}}throw Error(`Agent "${t.target}" closed without a result.`)}async function nextAgentReply(e,t){if(t===void 0)return await e.next();if(t.aborted)throw t.reason;let n,r=new Promise((e,t)=>{n=t}),abort=()=>n?.(t.reason);t.addEventListener(`abort`,abort,{once:!0});try{return await Promise.race([e.next(),r])}finally{t.removeEventListener(`abort`,abort)}}function validateAgentInput(e){if(typeof e.target!=`string`||e.target.trim()===``)throw TypeError(`agent() requires a non-empty agent name as its first argument.`);if(typeof e.message!=`string`||e.message.trim()===``)throw TypeError("agent() requires a non-empty `message`.")}export{agent,invokeAgent,validateAgentInput};
@@ -8,10 +8,12 @@ export type AgentInvocationDispatchResult = {
8
8
  readonly kind: "dispatched";
9
9
  readonly agentId: string;
10
10
  readonly event: SubagentCalledStreamEvent;
11
+ readonly serializedContext?: Record<string, unknown>;
11
12
  readonly sessionState: DurableSessionState;
12
13
  } | {
13
14
  readonly kind: "failed";
14
15
  readonly result: RuntimeSubagentResult;
16
+ readonly serializedContext?: Record<string, unknown>;
15
17
  readonly sessionState: DurableSessionState;
16
18
  };
17
19
  export type TaskAgentInvocationDispatchResult = {
@@ -40,9 +42,11 @@ export declare function settleTaskAgentInvocationStep(input: {
40
42
  readonly accumulateUsage?: boolean;
41
43
  readonly ownerId: string;
42
44
  readonly result: RuntimeSubagentChildResult;
45
+ readonly serializedContext: Record<string, unknown>;
43
46
  readonly sessionState: DurableSessionState;
44
47
  readonly taskId?: string | undefined;
45
48
  }): Promise<{
49
+ readonly serializedContext: Record<string, unknown>;
46
50
  readonly sessionState: DurableSessionState;
47
51
  }>;
48
52
  /** Releases any child leases still owned by a completed workflow-tool run. */
@@ -1 +1 @@
1
- import{createSubagentCalledEvent}from"#protocol/message.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{getWorkflowMetadata}from"#compiled/@workflow/core/index.js";import{deriveAgentOperationId}from"#subagents/handles/operation-id.js";import{readDurableSession,replaceDurableSessionSnapshot}from"#execution/durable-session-store.js";import{getAgentHandleStore,writeHandles}from"#subagents/handles/store.js";import{projectToDurableSession}from"#execution/session.js";import{findSessionTaskEntry}from"#tasks/session-index.js";import{AGENT_BUSY,AGENT_MISMATCH,AGENT_UNREACHABLE,formatAgentBusyMessage}from"#subagents/agent-handle-errors.js";import{clearProxyInputRequestsForChild,clearProxyInputRequestsForTask}from"#harness/proxy-input-requests.js";import{readLatestTaskView}from"#execution/tasks/parent/run-parent.js";import{abandonAgentInvocationOwners,applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{isTerminalTaskStatus}from"#tasks/types.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{createSubagentReceiptIdentity}from"#execution/tools/subagent/receipt-identity.js";import{createAgentErrorResult,dispatchToClaimedAgentAddress}from"#subagents/handle-dispatch.js";import{createAgentContinuationBundle}from"#subagents/continuation-bundle.js";import{startSubagent}from"#execution/tools/subagent/start.js";import{prepareOwnerAgentInvocation}from"#execution/tools/subagent/invoke-preparation.js";async function dispatchAgentInvocation(e){let t=await readDurableSession(e.sessionState),n=getAgentHandleStore(t.state)?.handles??[],r=await prepareOwnerAgentInvocation({invocation:e.request.input,invocationId:e.request.invocationId,knownAgentIds:n.map(e=>e.identity.id),serializedContext:e.serializedContext,sessionState:e.sessionState}),i=r.plan[0];if(i===void 0)throw Error(`Agent invocation produced no executable plan entry.`);let a=r.session,currentAgentHandles=()=>getAgentHandleStore(a.state)?.handles??[],sessionState=()=>replaceDurableSessionSnapshot({session:projectToDurableSession(a),state:e.sessionState}),applyHandleCommand=e=>{let t=applyTaskAgentHandleCommand(a,e);return a=t.session,t.result};if(i.kind===`reject`)return{kind:`failed`,result:i.result,sessionState:sessionState()};let o,s;if(i.kind===`resume`){let t=currentAgentHandles().filter(t=>t.phase===`claimed`&&t.ownerId===e.ownerId&&t.callId===i.action.callId&&t.identity.id===i.agentId);if(t.length>1)throw Error(`Invocation owner "${e.ownerId}" has multiple claims for "${i.action.callId}".`);let n=t[0];if(n===void 0){let t=deriveAgentOperationId({callId:i.action.callId,parentSessionId:r.session.sessionId,parentTurnId:r.batch.event.turnId}),a=applyHandleCommand({agentId:i.agentId,callId:i.action.callId,expectedTarget:i.action.kind===`remote-agent-call`?`remote`:`local`,invokedName:i.action.kind===`remote-agent-call`?i.action.remoteAgentName:i.action.subagentName,kind:`claim`,operationId:t,ownerId:e.ownerId});if(n=readClaimedHandle(a),n===void 0)return{kind:`failed`,result:createTaskClaimError(i.action,i.agentId,a),sessionState:sessionState()}}let c=createAgentContinuationBundle({action:i.action,bundle:r.bundle,dynamicRemoteAgent:i.dynamicRemoteAgent});o=await dispatchToClaimedAgentAddress({action:i.action,auth:r.auth,bundle:c,currentSession:a,parentToken:e.replyTo,handle:n,taskId:e.taskId}),o.kind===`error`&&o.deliveryPermanent===!0&&applyHandleCommand({agentId:i.agentId,kind:`remove`,ownerId:e.ownerId}),s=n.identity.id}else{let t=i.target.action,n=currentAgentHandles().filter(n=>n.phase===`reserved`&&n.ownerId===e.ownerId&&n.callId===t.callId&&n.identity.name===t.name&&n.identity.nodeId===t.nodeId),c=n.length===1?{identity:n[0].identity,operation:{id:n[0].operationId}}:createSubagentReceiptIdentity({callId:t.callId,subagentName:t.kind===`remote-agent-call`?t.remoteAgentName:t.subagentName,nodeId:t.nodeId,parentSessionId:r.session.sessionId,parentTurnId:r.batch.event.turnId});if(n.length>1)throw Error(`Invocation owner "${e.ownerId}" has multiple reservations for "${t.callId}".`);if(n.length===0&&applyHandleCommand({identity:c.identity,callId:t.callId,kind:`reserve`,operationId:c.operation.id,ownerId:e.ownerId}).kind!==`ready`)throw Error(`Agent handle store rejected start operation "${c.operation.id}".`);if(o=await startSubagent({auth:r.auth,batchEvent:r.batch.event,bundle:r.bundle,callbackBaseUrl:e.callbackBaseUrl,capabilities:r.capabilities,channelMetadata:r.channelMetadata,currentSession:a,fanoutSize:r.fanoutSize,initiatorAuth:r.initiatorAuth,localDevRequest:r.localDevRequest,parentContinuationToken:e.replyTo,activityObserver:r.activityObserver,parentTraceContext:r.parentTraceContext,sandboxSessionId:r.sandboxSessionId,serializedContext:r.serializedContext,session:a,taskId:e.taskId,target:i.target}),s=c.identity.id,o.kind===`error`)applyHandleCommand({agentId:s,kind:`remove`,ownerId:e.ownerId});else if(readClaimedHandle(applyHandleCommand({address:o.address,kind:`confirm`,operationId:c.operation.id,ownerId:e.ownerId}))===void 0)throw Error(`Agent handle store could not confirm start operation "${c.operation.id}".`)}if(o.kind===`error`)return{kind:`failed`,result:o.result,sessionState:sessionState()};let c=i.kind===`resume`?i.action:i.target.action,l=i.kind===`resume`?i.dynamicRemoteAgent:i.target.kind===`remote`?i.target.dynamicRemoteAgent:void 0,u=createSubagentCalledEvent({agentId:s,callId:o.callId,childSessionId:o.address.sessionId,name:o.name,remote:o.address.kind===`agent/remote`?{resolverId:l===void 0?c.nodeId:l.credentialsStepId,url:o.address.url}:void 0,sequence:r.batch.event.sequence,sessionId:r.session.sessionId,toolName:o.toolName,turnId:r.batch.event.turnId,workflowId:workflowEntryReference.workflowId});return e.emit!==void 0&&await e.emit(u),{kind:`dispatched`,agentId:s,event:u,sessionState:sessionState()}}async function dispatchTaskAgentInvocationStep(e){"use step";if(e.taskId!==void 0){let t=await readDurableSession(e.sessionState),n=findSessionTaskEntry(t.state,e.taskId);if(n===void 0)return{kind:`not-admitted`,sessionState:e.sessionState};let r=await readLatestTaskView({taskRunId:n.taskRunId});if(r===void 0||isTerminalTaskStatus(r.status))return{kind:`not-admitted`,sessionState:e.sessionState}}return await dispatchAgentInvocation({...e,callbackBaseUrl:resolveWorkflowCallbackBaseUrl(getWorkflowMetadata().url)})}async function settleTaskAgentInvocationStep(e){"use step";let t=await readDurableSession(e.sessionState),n=getAgentHandleStore(t.state)?.handles??[],r=n.filter(t=>t.phase===`claimed`&&t.ownerId===e.ownerId),i=r.find(t=>t.phase===`claimed`&&t.callId===e.result.callId)??(r.length===1?r[0]:void 0);if(i?.phase!==`claimed`)return{sessionState:e.sessionState};let a=e.result.outcome.kind===`terminal`?n.filter(e=>e!==i):n.map(t=>t===i?e.result.outcome.result.kind===`cancelled`?{address:i.address,identity:i.identity,lastStatus:`(cancelled)`,phase:`parked`}:{address:i.address,identity:i.identity,phase:`available`}:t),o=writeHandles(t,a);return e.result.outcome.kind===`terminal`&&(o=e.taskId===void 0?`continuationToken`in i.address?clearProxyInputRequestsForChild(o,i.address.continuationToken):o:clearProxyInputRequestsForTask(o,e.taskId)),e.accumulateUsage!==!1&&(o=setTurnUsageState(o,accumulateSessionUsage({previous:getTurnUsageState(o.state),usage:e.result.outcome.usageDelta}))),{sessionState:replaceDurableSessionSnapshot({session:o,state:e.sessionState})}}async function releaseAgentInvocationOwnerStep(e){"use step";let t=await readDurableSession(e.sessionState),n=e.cancelled?abandonAgentInvocationOwners(t,new Set([e.ownerId])):applyTaskAgentHandleCommand(t,{kind:`release-owner`,ownerId:e.ownerId}).session;return{sessionState:n===t?e.sessionState:replaceDurableSessionSnapshot({session:n,state:e.sessionState})}}function readClaimedHandle(e){let t=e.kind===`ready`?e.handle:void 0;return t?.phase===`claimed`?t:void 0}function createTaskClaimError(e,t,n){return n.kind===`mismatch`?createAgentErrorResult({action:e,code:AGENT_MISMATCH,message:`Agent "${t}" no longer matches this subagent definition. Start a new agent instead.`}):n.kind===`busy`?createAgentErrorResult({action:e,code:AGENT_BUSY,message:formatAgentBusyMessage({agentId:t,agentName:n.handle.identity.name,ownerId:`ownerId`in n.handle?n.handle.ownerId:void 0})}):createAgentErrorResult({action:e,code:AGENT_UNREACHABLE,message:`Agent with id "${t}" is no longer reachable.`})}export{dispatchAgentInvocation,dispatchTaskAgentInvocationStep,releaseAgentInvocationOwnerStep,settleTaskAgentInvocationStep};
1
+ import{createSubagentCalledEvent}from"#protocol/message.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{getWorkflowMetadata}from"#compiled/@workflow/core/index.js";import{deriveAgentOperationId}from"#subagents/handles/operation-id.js";import{readDurableSession,replaceDurableSessionSnapshot}from"#execution/durable-session-store.js";import{getAgentHandleStore,writeHandles}from"#subagents/handles/store.js";import{projectToDurableSession}from"#execution/session.js";import{findSessionTaskEntry}from"#tasks/session-index.js";import{AGENT_BUSY,AGENT_MISMATCH,AGENT_UNREACHABLE,formatAgentBusyMessage}from"#subagents/agent-handle-errors.js";import{clearProxyInputRequestsForChild,clearProxyInputRequestsForTask}from"#harness/proxy-input-requests.js";import{readLatestTaskView}from"#execution/tasks/parent/run-parent.js";import{abandonAgentInvocationOwners,applyTaskAgentHandleCommand}from"#subagents/handles/transitions.js";import{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{isTerminalTaskStatus}from"#tasks/types.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{createSubagentReceiptIdentity}from"#execution/tools/subagent/receipt-identity.js";import{createAgentErrorResult,dispatchToClaimedAgentAddress}from"#subagents/handle-dispatch.js";import{createAgentContinuationBundle}from"#subagents/continuation-bundle.js";import{startSubagent}from"#execution/tools/subagent/start.js";import{prepareOwnerAgentInvocation}from"#execution/tools/subagent/invoke-preparation.js";import{prepareAgentInvocationTrace}from"#tracing/agent-invocation-coordinator.js";import{flushAgentInvocationTraces,settleAgentInvocationTrace}from"#tracing/agent-invocation-terminal.js";async function dispatchAgentInvocation(e){let t=await readDurableSession(e.sessionState),n=getAgentHandleStore(t.state)?.handles??[],r=await prepareOwnerAgentInvocation({invocation:e.request.input,invocationId:e.request.invocationId,knownAgentIds:n.map(e=>e.identity.id),serializedContext:e.serializedContext,sessionState:e.sessionState}),i=r.plan[0];if(i===void 0)throw Error(`Agent invocation produced no executable plan entry.`);if(i.kind===`reject`)return{kind:`failed`,result:i.result,serializedContext:r.serializedContext,sessionState:e.sessionState};let a=i.kind===`start`?i.target.action:i.action,o=prepareAgentInvocationTrace({channelMetadata:r.channelMetadata,invocation:a,ownerId:e.ownerId,serializedContext:r.serializedContext,sessionId:r.session.sessionId,sessionState:t.state,startTimeMs:Date.now(),taskId:e.taskId,turnId:r.batch.event.turnId}),s=r.session,currentAgentHandles=()=>getAgentHandleStore(s.state)?.handles??[],sessionState=()=>replaceDurableSessionSnapshot({session:projectToDurableSession(s),state:e.sessionState}),failed=async e=>({kind:`failed`,result:e,serializedContext:await flushAgentInvocationTraces(o.fail(e)),sessionState:sessionState()}),applyHandleCommand=e=>{let t=applyTaskAgentHandleCommand(s,e);return s=t.session,t.result},c,l;if(i.kind===`resume`){let t=currentAgentHandles().filter(t=>t.phase===`claimed`&&t.ownerId===e.ownerId&&t.callId===i.action.callId&&t.identity.id===i.agentId);if(t.length>1)throw Error(`Invocation owner "${e.ownerId}" has multiple claims for "${i.action.callId}".`);let n=t[0];if(n===void 0){let t=deriveAgentOperationId({callId:i.action.callId,parentSessionId:r.session.sessionId,parentTurnId:r.batch.event.turnId}),a=applyHandleCommand({agentId:i.agentId,callId:i.action.callId,expectedTarget:i.action.kind===`remote-agent-call`?`remote`:`local`,invokedName:i.action.kind===`remote-agent-call`?i.action.remoteAgentName:i.action.subagentName,kind:`claim`,operationId:t,ownerId:e.ownerId});if(n=readClaimedHandle(a),n===void 0)return failed(createTaskClaimError(i.action,i.agentId,a))}let a=createAgentContinuationBundle({action:i.action,bundle:r.bundle,dynamicRemoteAgent:i.dynamicRemoteAgent});c=await dispatchToClaimedAgentAddress({action:i.action,auth:r.auth,bundle:a,currentSession:s,parentToken:e.replyTo,handle:n,taskId:e.taskId}),c.kind===`error`&&c.deliveryPermanent===!0&&applyHandleCommand({agentId:i.agentId,kind:`remove`,ownerId:e.ownerId}),l=n.identity.id}else{let t=i.target.action,n=currentAgentHandles().filter(n=>n.phase===`reserved`&&n.ownerId===e.ownerId&&n.callId===t.callId&&n.identity.name===t.name&&n.identity.nodeId===t.nodeId),a=n.length===1?{identity:n[0].identity,operation:{id:n[0].operationId}}:createSubagentReceiptIdentity({callId:t.callId,subagentName:t.kind===`remote-agent-call`?t.remoteAgentName:t.subagentName,nodeId:t.nodeId,parentSessionId:r.session.sessionId,parentTurnId:r.batch.event.turnId});if(n.length>1)throw Error(`Invocation owner "${e.ownerId}" has multiple reservations for "${t.callId}".`);if(n.length===0&&applyHandleCommand({identity:a.identity,callId:t.callId,kind:`reserve`,operationId:a.operation.id,ownerId:e.ownerId}).kind!==`ready`)throw Error(`Agent handle store rejected start operation "${a.operation.id}".`);if(c=await startSubagent({auth:r.auth,batchEvent:r.batch.event,bundle:r.bundle,callbackBaseUrl:e.callbackBaseUrl,capabilities:r.capabilities,channelMetadata:r.channelMetadata,currentSession:s,fanoutSize:r.fanoutSize,initiatorAuth:r.initiatorAuth,localDevRequest:r.localDevRequest,parentContinuationToken:e.replyTo,activityObserver:r.activityObserver,sandboxSessionId:r.sandboxSessionId,session:s,taskId:e.taskId,target:i.target,trace:o.dispatch}),l=a.identity.id,c.kind===`error`)applyHandleCommand({agentId:l,kind:`remove`,ownerId:e.ownerId});else if(readClaimedHandle(applyHandleCommand({address:c.address,kind:`confirm`,operationId:a.operation.id,ownerId:e.ownerId}))===void 0)throw Error(`Agent handle store could not confirm start operation "${a.operation.id}".`)}if(c.kind===`error`)return failed(c.result);let u=i.kind===`resume`?i.action:i.target.action,d=i.kind===`resume`?i.dynamicRemoteAgent:i.target.kind===`remote`?i.target.dynamicRemoteAgent:void 0,f=createSubagentCalledEvent({agentId:l,callId:c.callId,childSessionId:c.address.sessionId,name:c.name,remote:c.address.kind===`agent/remote`?{resolverId:d===void 0?u.nodeId:d.credentialsStepId,url:c.address.url}:void 0,sequence:r.batch.event.sequence,sessionId:r.session.sessionId,toolName:c.toolName,turnId:r.batch.event.turnId,workflowId:workflowEntryReference.workflowId});return e.emit!==void 0&&await e.emit(f),{kind:`dispatched`,agentId:l,event:f,serializedContext:o.serializedContext,sessionState:sessionState()}}async function dispatchTaskAgentInvocationStep(e){"use step";if(e.taskId!==void 0){let t=await readDurableSession(e.sessionState),n=findSessionTaskEntry(t.state,e.taskId);if(n===void 0)return{kind:`not-admitted`,sessionState:e.sessionState};let r=await readLatestTaskView({taskRunId:n.taskRunId});if(r===void 0||isTerminalTaskStatus(r.status))return{kind:`not-admitted`,sessionState:e.sessionState}}return await dispatchAgentInvocation({...e,callbackBaseUrl:resolveWorkflowCallbackBaseUrl(getWorkflowMetadata().url)})}async function settleTaskAgentInvocationStep(e){"use step";let t=await readDurableSession(e.sessionState),n=await flushAgentInvocationTraces(settleAgentInvocationTrace({acceptedAtMs:Date.now(),result:e.result,serializedContext:e.serializedContext,sessionId:t.sessionId})),r=getAgentHandleStore(t.state)?.handles??[],i=r.filter(t=>t.phase===`claimed`&&t.ownerId===e.ownerId),a=i.find(t=>t.phase===`claimed`&&t.callId===e.result.callId)??(i.length===1?i[0]:void 0);if(a?.phase!==`claimed`)return{serializedContext:n,sessionState:e.sessionState};let o=e.result.outcome.kind===`terminal`?r.filter(e=>e!==a):r.map(t=>t===a?e.result.outcome.result.kind===`cancelled`?{address:a.address,identity:a.identity,lastStatus:`(cancelled)`,phase:`parked`}:{address:a.address,identity:a.identity,phase:`available`}:t),s=writeHandles(t,o);return e.result.outcome.kind===`terminal`&&(s=e.taskId===void 0?`continuationToken`in a.address?clearProxyInputRequestsForChild(s,a.address.continuationToken):s:clearProxyInputRequestsForTask(s,e.taskId)),e.accumulateUsage!==!1&&(s=setTurnUsageState(s,accumulateSessionUsage({previous:getTurnUsageState(s.state),usage:e.result.outcome.usageDelta}))),{serializedContext:n,sessionState:replaceDurableSessionSnapshot({session:s,state:e.sessionState})}}async function releaseAgentInvocationOwnerStep(e){"use step";let t=await readDurableSession(e.sessionState),n=e.cancelled?abandonAgentInvocationOwners(t,new Set([e.ownerId])):applyTaskAgentHandleCommand(t,{kind:`release-owner`,ownerId:e.ownerId}).session;return{sessionState:n===t?e.sessionState:replaceDurableSessionSnapshot({session:n,state:e.sessionState})}}function readClaimedHandle(e){let t=e.kind===`ready`?e.handle:void 0;return t?.phase===`claimed`?t:void 0}function createTaskClaimError(e,t,n){return n.kind===`mismatch`?createAgentErrorResult({action:e,code:AGENT_MISMATCH,message:`Agent "${t}" no longer matches this subagent definition. Start a new agent instead.`}):n.kind===`busy`?createAgentErrorResult({action:e,code:AGENT_BUSY,message:formatAgentBusyMessage({agentId:t,agentName:n.handle.identity.name,ownerId:`ownerId`in n.handle?n.handle.ownerId:void 0})}):createAgentErrorResult({action:e,code:AGENT_UNREACHABLE,message:`Agent with id "${t}" is no longer reachable.`})}export{dispatchAgentInvocation,dispatchTaskAgentInvocationStep,releaseAgentInvocationOwnerStep,settleTaskAgentInvocationStep};
@@ -7,6 +7,7 @@ import type { CompiledBundle } from "#runtime/sessions/runtime-context-keys.js";
7
7
  import type { RuntimeRemoteAgentDispatchRequest, RuntimeSubagentDispatchRequest } from "#shared/action-types.js";
8
8
  import type { DispatchOutcome, RuntimeSession } from "#subagents/handle-dispatch.js";
9
9
  import { buildSubagentRunInput, type SubagentInputSource } from "#subagents/tool.js";
10
+ import type { AgentChildTraceDispatch } from "#tracing/agent-invocation-coordinator.js";
10
11
  export type SubagentStartTarget = {
11
12
  readonly kind: "local";
12
13
  readonly action: RuntimeSubagentDispatchRequest;
@@ -33,13 +34,12 @@ export declare function startSubagent(input: {
33
34
  readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
34
35
  readonly localDevRequest?: LocalDevRequestProvenance;
35
36
  readonly parentContinuationToken: string | undefined;
36
- readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
37
37
  readonly activityObserver?: ActivityObserverConfig & {
38
38
  readonly workIdentity: ActivityWorkIdentityV1;
39
39
  };
40
40
  readonly sandboxSessionId: string;
41
- readonly serializedContext: Record<string, unknown>;
42
41
  readonly session: RuntimeSession;
43
42
  readonly taskId?: string;
44
43
  readonly target: SubagentStartTarget;
44
+ readonly trace: AgentChildTraceDispatch;
45
45
  }): Promise<DispatchOutcome>;
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,readForwardedTraceAssertion}from"#shared/forwarded-trace-policy.js";import{readActionTraceContext}from"#tracing/agent-trace-context-store.js";import"#subagents/tool.js";import{startLocalSubagent}from"#subagents/start-local.js";import{startRemoteSubagent}from"#subagents/start-remote.js";async function startSubagent(e){let t=readActionTraceContext(e.serializedContext,e.session.sessionId,e.batchEvent.turnId,e.target.action.callId)??e.parentTraceContext,n=readForwardedTraceAssertion(t?.forwardedTracePolicy),r=normalizeChannelAudience(e.channelMetadata?.metadata.audience),i=t?.decision===void 0?t:{...t,decision:applyLiveDeliveryAudienceCeiling(t.decision,r,n)};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:i,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,session:e.session,source:e.target.source,taskId:e.taskId});case`remote`:return startRemoteSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,callbackBaseUrl:e.callbackBaseUrl,originAudience:n?.originAudience??r,currentSession:e.currentSession,dynamicRemoteAgent:e.target.dynamicRemoteAgent,initiatorAuth:e.initiatorAuth,parentContinuationToken:e.parentContinuationToken,parentTraceContext:i,activityObserver:e.activityObserver,session:e.session,taskId:e.taskId});default:return e.target}}export{startSubagent};
1
+ import{resolveConversationId}from"#tracing/conversation-context.js";import"#subagents/tool.js";import{startLocalSubagent}from"#subagents/start-local.js";import{startRemoteSubagent}from"#subagents/start-remote.js";async function startSubagent(e){let{trace:t}=e,n={conversationId:t.conversationId??resolveConversationId(e.session.rootSessionId??e.session.sessionId),lineage:{callId:e.target.action.callId,rootSessionId:e.session.rootSessionId??e.session.sessionId,sessionId:e.session.sessionId,turn:{id:e.batchEvent.turnId,sequence:e.batchEvent.sequence}},continuationToken:e.parentContinuationToken,traceContext:t.parentTraceContext,originAudience:t.originAudience};switch(e.target.kind){case`local`:return startLocalSubagent({action:e.target.action,auth:e.auth,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,parent:n,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,session:e.session,source:e.target.source,taskId:e.taskId});case`remote`:return startRemoteSubagent({action:e.target.action,auth:e.auth,bundle:e.bundle,callbackBaseUrl:e.callbackBaseUrl,currentSession:e.currentSession,dynamicRemoteAgent:e.target.dynamicRemoteAgent,initiatorAuth:e.initiatorAuth,parent:n,activityObserver:e.activityObserver,session:e.session,taskId:e.taskId});default:return e.target}}export{startSubagent};
@@ -1 +1 @@
1
- import{resumeHookStep}from"#execution/tools/workflow/resume-hook-step.js";import{emitTaskSubagentCalledStep}from"#execution/tools/subagent/emit-called-step.js";import{dispatchTaskAgentInvocationStep,settleTaskAgentInvocationStep}from"#execution/tools/subagent/invoke-step.js";async function applyTaskAgentRequest(e,t){let{request:n}=e;switch(n.kind){case`agent-settled`:{let r=await settleTaskAgentInvocationStep({accumulateUsage:e.accumulateUsage,ownerId:e.ownerId,result:n.result,sessionState:t.sessionState,taskId:e.taskId});return{serializedContext:t.serializedContext,sessionState:r.sessionState}}case`agent-invoke`:{let r=await dispatchTaskAgentInvocationStep({ownerId:e.ownerId,replyTo:e.replyTo,request:n,serializedContext:t.serializedContext,sessionState:t.sessionState,taskId:e.taskId});switch(r.kind){case`dispatched`:return{serializedContext:(await emitTaskSubagentCalledStep({event:r.event,parentWritable:t.parentWritable,serializedContext:t.serializedContext})).serializedContext,sessionState:r.sessionState};case`failed`:return await resumeHookStep(e.replyTo,{kind:`runtime-action-result`,results:[r.result]}),{serializedContext:t.serializedContext,sessionState:r.sessionState};case`not-admitted`:return{serializedContext:t.serializedContext,sessionState:r.sessionState}}}}}export{applyTaskAgentRequest};
1
+ import{resumeHookStep}from"#execution/tools/workflow/resume-hook-step.js";import{emitTaskSubagentCalledStep}from"#execution/tools/subagent/emit-called-step.js";import{dispatchTaskAgentInvocationStep,settleTaskAgentInvocationStep}from"#execution/tools/subagent/invoke-step.js";async function applyTaskAgentRequest(e,t){let{request:n}=e;switch(n.kind){case`agent-settled`:{let r=await settleTaskAgentInvocationStep({accumulateUsage:e.accumulateUsage,ownerId:e.ownerId,result:n.result,serializedContext:t.serializedContext,sessionState:t.sessionState,taskId:e.taskId});return{serializedContext:r.serializedContext,sessionState:r.sessionState}}case`agent-invoke`:{let r=await dispatchTaskAgentInvocationStep({ownerId:e.ownerId,replyTo:e.replyTo,request:n,serializedContext:t.serializedContext,sessionState:t.sessionState,taskId:e.taskId});switch(r.kind){case`dispatched`:return{serializedContext:(await emitTaskSubagentCalledStep({event:r.event,parentWritable:t.parentWritable,serializedContext:r.serializedContext??t.serializedContext})).serializedContext,sessionState:r.sessionState};case`failed`:return await resumeHookStep(e.replyTo,{kind:`runtime-action-result`,results:[r.result]}),{serializedContext:r.serializedContext??t.serializedContext,sessionState:r.sessionState};case`not-admitted`:return{serializedContext:t.serializedContext,sessionState:r.sessionState}}}}}export{applyTaskAgentRequest};
@@ -1,10 +1,3 @@
1
1
  import type { HarnessToolDefinition } from "#harness/execute-tool.js";
2
- /**
3
- * Builds harness definitions for the compiled framework task tools.
4
- */
2
+ /** Builds the harness definition for the compiled framework task control. */
5
3
  export declare function createTaskToolHarnessDefinitions(): readonly HarnessToolDefinition[];
6
- /**
7
- * Authored tools with the same name shadow these framework definitions,
8
- * and `disableTool(name)` removes individual controls. advertised-tools
9
- * evaluates their selected availability against persisted session metadata.
10
- */
@@ -1 +1 @@
1
- import{TASK_CANCEL_INPUT_SCHEMA,TASK_CANCEL_TOOL_NAME,TASK_UPDATE_INPUT_SCHEMA,TASK_UPDATE_TOOL_NAME,TASK_VIEWS_OUTPUT_SCHEMA}from"#tools/framework/task-contract.js";function createTaskToolHarnessDefinitions(){return[{description:`Request cooperative cancellation of one or more background tasks. Cancellation is final: a task that finishes after you cancel it stays cancelled. Cancelling an already-finished task changes nothing.`,inputSchema:TASK_CANCEL_INPUT_SCHEMA,name:TASK_CANCEL_TOOL_NAME,outputSchema:TASK_VIEWS_OUTPUT_SCHEMA,runtimeAction:{kind:`task-control`}},{description:`Briefly tell the parent agent what this background task is currently doing. Report activity, not preliminary findings or results.`,inputSchema:TASK_UPDATE_INPUT_SCHEMA,name:TASK_UPDATE_TOOL_NAME,runtimeAction:{kind:`task-control`}}]}export{createTaskToolHarnessDefinitions};
1
+ import{TASK_CANCEL_INPUT_SCHEMA,TASK_CANCEL_TOOL_NAME,TASK_VIEWS_OUTPUT_SCHEMA}from"#tools/framework/task-contract.js";function createTaskToolHarnessDefinitions(){return[{description:`Request cooperative cancellation of one or more background tasks. Cancellation is final: a task that finishes after you cancel it stays cancelled. Cancelling an already-finished task changes nothing.`,inputSchema:TASK_CANCEL_INPUT_SCHEMA,name:TASK_CANCEL_TOOL_NAME,outputSchema:TASK_VIEWS_OUTPUT_SCHEMA,runtimeAction:{kind:`task-control`}}]}export{createTaskToolHarnessDefinitions};
@@ -1,6 +1,6 @@
1
- import type { ModelMessage } from "ai";
2
1
  import { z } from "#compiled/zod/index.js";
3
2
  import { ContextKey } from "#context/key.js";
3
+ import { type UserModelMessage } from "#harness/messages.js";
4
4
  /**
5
5
  * Single item in the todo list.
6
6
  */
@@ -24,7 +24,7 @@ export type TodoToolInput = z.infer<typeof TODO_INPUT_SCHEMA>;
24
24
  * compacts message history, so the agent keeps its task list across
25
25
  * compaction. Returns `undefined` when there is no list to preserve.
26
26
  */
27
- export declare function getTodoCompactionMessage(): ModelMessage | undefined;
27
+ export declare function getTodoCompactionMessage(): UserModelMessage | undefined;
28
28
  /**
29
29
  * Executes the framework todo tool.
30
30
  *
@@ -1,2 +1,2 @@
1
- import{z}from"#compiled/zod/index.js";import{loadContext}from"#context/container.js";import{ContextKey}from"#context/key.js";import{TODO_COMPACTION_PRESERVATION_LABEL}from"#harness/compaction-prompt.js";const TodoStateKey=new ContextKey(`eve.todo`);function formatTodoSummary(e){if(e.items.length===0)return;let t=e.items.map(e=>`- [${e.status===`completed`?`x`:e.status===`cancelled`?`-`:` `}] [${e.priority}] ${e.content}`);return`${TODO_COMPACTION_PRESERVATION_LABEL}\n${t.join(`
2
- `)}`}function getTodoCompactionMessage(){let e=loadContext().get(TodoStateKey);if(e===void 0||!e.items.some(e=>e.status===`pending`||e.status===`in_progress`))return;let t=formatTodoSummary(e);if(t!==void 0)return{content:t,role:`user`}}function formatTodoResult(e){let{items:t}=e,n={cancelled:0,completed:0,in_progress:0,pending:0,total:t.length};for(let e of t)n[e.status]++;return{counts:n,todos:t}}function executeTodoTool(e){let t=loadContext(),{todos:n}=e??{};if(n!==void 0){let e={items:[...n]};return t.set(TodoStateKey,e),formatTodoResult(e)}return formatTodoResult(t.ensure(TodoStateKey,()=>({items:[]})))}const TODO_ITEM_SCHEMA=z.strictObject({content:z.string().describe(`Brief description of the task.`),priority:z.enum([`high`,`medium`,`low`]).describe(`Priority level of the task.`),status:z.enum([`pending`,`in_progress`,`completed`,`cancelled`]).describe(`Current status of the task.`)}),TODO_INPUT_SCHEMA=z.strictObject({todos:z.array(TODO_ITEM_SCHEMA).describe(`The updated todo list. Omit to read the current list without modifying it.`).optional()}),countSchema=z.number().int().min(0),TODO_OUTPUT_SCHEMA=z.strictObject({counts:z.strictObject({cancelled:countSchema,completed:countSchema,in_progress:countSchema,pending:countSchema,total:countSchema}),todos:z.array(TODO_ITEM_SCHEMA)});export{TODO_INPUT_SCHEMA,TODO_OUTPUT_SCHEMA,TodoStateKey,executeTodoTool,getTodoCompactionMessage};
1
+ import{z}from"#compiled/zod/index.js";import{loadContext}from"#context/container.js";import{ContextKey}from"#context/key.js";import{createFrameworkUserMessage}from"#harness/messages.js";import{TODO_COMPACTION_PRESERVATION_LABEL}from"#harness/compaction-prompt.js";const TodoStateKey=new ContextKey(`eve.todo`);function formatTodoSummary(e){if(e.items.length===0)return;let t=e.items.map(e=>`- [${e.status===`completed`?`x`:e.status===`cancelled`?`-`:` `}] [${e.priority}] ${e.content}`);return`${TODO_COMPACTION_PRESERVATION_LABEL}\n${t.join(`
2
+ `)}`}function getTodoCompactionMessage(){let e=loadContext().get(TodoStateKey);if(e===void 0||!e.items.some(e=>e.status===`pending`||e.status===`in_progress`))return;let t=formatTodoSummary(e);if(t!==void 0)return createFrameworkUserMessage(`context.state`,t)}function formatTodoResult(e){let{items:t}=e,n={cancelled:0,completed:0,in_progress:0,pending:0,total:t.length};for(let e of t)n[e.status]++;return{counts:n,todos:t}}function executeTodoTool(e){let t=loadContext(),{todos:n}=e??{};if(n!==void 0){let e={items:[...n]};return t.set(TodoStateKey,e),formatTodoResult(e)}return formatTodoResult(t.ensure(TodoStateKey,()=>({items:[]})))}const TODO_ITEM_SCHEMA=z.strictObject({content:z.string().describe(`Brief description of the task.`),priority:z.enum([`high`,`medium`,`low`]).describe(`Priority level of the task.`),status:z.enum([`pending`,`in_progress`,`completed`,`cancelled`]).describe(`Current status of the task.`)}),TODO_INPUT_SCHEMA=z.strictObject({todos:z.array(TODO_ITEM_SCHEMA).describe(`The updated todo list. Omit to read the current list without modifying it.`).optional()}),countSchema=z.number().int().min(0),TODO_OUTPUT_SCHEMA=z.strictObject({counts:z.strictObject({cancelled:countSchema,completed:countSchema,in_progress:countSchema,pending:countSchema,total:countSchema}),todos:z.array(TODO_ITEM_SCHEMA)});export{TODO_INPUT_SCHEMA,TODO_OUTPUT_SCHEMA,TodoStateKey,executeTodoTool,getTodoCompactionMessage};
@@ -1 +1 @@
1
- import{createHook,getWorkflowMetadata}from"#compiled/@workflow/core/index.js";import{claimHookOwnership,disposeHook,isHookConflictError}from"#execution/hook-ownership.js";import{isInboxSubagentResultFromRecordedWorkflowToolRun,isInboxToolResultFromRecordedWorkflowToolRun}from"#harness/workflow-tool-runs.js";import{activeTurnId}from"#harness/active-turn-id.js";import{migrateTurnWorkflowInput}from"#execution/durable-session-migrations/turn-workflow.js";import{cancelAllIndexedSessionTasksStep}from"#execution/cancel-indexed-session-tasks-step.js";import{turnStep}from"#execution/workflow-steps.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";import{runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{createChannelReader,raceChannelReads}from"#execution/tools/workflow/owner-channels.js";import{openWorkflowToolRunOwnerInbox}from"#execution/tools/workflow/owner.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{acknowledgeDelegatedTasksStep}from"#execution/tasks/parent/delegate.js";import{normalizeSerializableError}from"#execution/workflow-errors.js";import{sendTurnControlStep}from"#execution/turn-control-protocol.js";import{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle}from"#subagents/handles/query.js";import{cancelDescendantTurnsStep}from"#execution/cancel-descendant-turns-step.js";import{dispatchCoordinationStep}from"#execution/coordination-dispatch-step.js";import{createTurnCancellationControl}from"#execution/turn-cancellation-control.js";import{TurnExecutionCursor}from"#execution/turn-execution-cursor.js";import{resolveRuntimeActionResultsForCallIds}from"#runtime/actions/results.js";import{handleWorkflowToolRunMessage}from"#execution/turn-workflow-tool-run.js";const TASK_MODE_WAIT_ERROR_MESSAGE="Task mode cannot wait for follow-up input (`next: null`).";async function turnWorkflow(e){"use workflow";let t=migrateTurnWorkflowInput(e);return t.driverCapabilities?.turnInbox===!0?runTurnOwnedWorkflow(t):runLegacyTurnWorkflow(t)}async function runTurnOwnedWorkflow(e,t){let n=createHook({token:`${e.completionToken}:inbox`}),r=createChannelReader(`inbox`,n),i=e.initialStep,a=new TurnExecutionCursor({controlToken:e.completionToken,parentWritable:e.stepInput.parentWritable,serializedContext:i?.beforeStep.serializedContext??e.stepInput.serializedContext,sessionState:i?.beforeStep.sessionState??e.stepInput.sessionState}),o=0,nextDeliveryRequestId=()=>`${n.token}:delivery:${String(o++)}`,s=[],c=e.stepInput.input,l=!1,u;try{try{await claimHookOwnership(n),l=!0}catch(e){if(isHookConflictError(e))return;throw e}let o=openWorkflowToolRunOwnerInbox(),d=[o.reader,r];for(e.driverCapabilities?.cancelledTurnSettle===!0&&(u=await createTurnCancellationControl({controlToken:e.completionToken,expectedTurnId:activeTurnId(a.sessionState.emissionState),initialPayload:e.initialCancellation})),t?.();;){let t=i?.beforeStep??{serializedContext:a.serializedContext,sessionState:a.sessionState},r=i?.result??await turnStep(a.createStepInput(c,u?.signal));i=void 0;let l=r.action===`dispatch-workflow-tasks`?r.pendingTaskCallIds:r.action===`park`?r.pendingCoordinationCallIds:void 0,f=(r.backgroundTasks?.length??0)>0;if(f){if(r.backgroundTaskState===void 0)throw Error(`Background tasks were returned without their committed session state.`);await a.adopt({serializedContext:t.serializedContext,sessionState:r.backgroundTaskState}),await acknowledgeDelegatedTasksStep({tasks:r.backgroundTasks??[]})}if(r.action===`cancelled`){await a.adopt({serializedContext:r.serializedContext,sessionState:r.backgroundTaskState??r.sessionState}),await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}if(u?.signal.aborted===!0&&(l===void 0||f)){await a.adopt({serializedContext:r.serializedContext,sessionState:r.backgroundTaskState??r.sessionState}),await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}if(r.action===`done`){await u?.dispose(),await a.finish(r,{kind:`done`,output:r.output??``,isError:r.isError,usage:r.usage,usageDelta:r.usageDelta},s);return}if(l!==void 0&&(r.action===`park`||r.action===`dispatch-workflow-tasks`)){await a.adopt(r);let e=await dispatchCoordinationStep({action:r.action,callbackBaseUrl:resolveWorkflowCallbackBaseUrl(getWorkflowMetadata().url),workflowToolRunOwner:o.owner,parentWritable:a.parentWritable,serializedContext:a.serializedContext,sessionState:a.sessionState}),t=e.results.length===0?void 0:Date.now();await a.adopt(e),await acknowledgeDelegatedTasksStep({tasks:e.pendingTasks});let i=await waitForRuntimeActionResults({bufferedDeliveries:s,cancellation:u,cursor:a,inboxToken:n.token,initialAcceptedAtMs:t,initialResults:e.results,nextDeliveryRequestId,readers:d,pendingCallIds:l});if(i===`cancelled`){c=void 0;continue}if(i===`cancel-turn`){await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}c={kind:`runtime-action-result`,...i};continue}if(r.action===`park`){if(!(r.hasPendingAuthorization||r.hasPendingInputBatch&&e.capabilities?.requestInput===!0||e.mode===`conversation`))throw Error(TASK_MODE_WAIT_ERROR_MESSAGE);await u?.dispose(),await a.finish(r,{authorizationAttemptIds:r.authorizationAttemptIds,authorizationNames:r.authorizationNames,kind:`park`,settled:r.settled},s);return}await a.adopt(r),c=void 0}}catch(e){throw await a.send({error:normalizeSerializableError(e),kind:`turn-error`}),e}finally{u!==void 0&&await u.dispose(),l&&await disposeHook(n)}}async function finishCancelledTurn(e){(e.cancellation?.signal.aborted===!0?await e.cancellation.payload:void 0)?.tasks===!0&&await cancelAllIndexedSessionTasksStep({serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState}),await cancelDescendantTurnsStep({serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState}),await e.cancellation?.dispose(),await e.cursor.finish({sessionState:e.cursor.sessionState},{cancelled:!0,kind:`park`},e.bufferedDeliveries)}async function waitForRuntimeActionResults(e){let t,n=[...e.initialResults],r=new Map;if(e.initialAcceptedAtMs!==void 0)for(let t of e.initialResults)r.set(t.callId,e.initialAcceptedAtMs);for(;;){let i=resolveRuntimeActionResultsForCallIds({pendingCallIds:e.pendingCallIds,results:n});if(i!==void 0)return t!==void 0&&await e.cursor.send({kind:`turn-delivery-cancelled`,requestId:t}),{acceptedAtMsByCallId:Object.fromEntries(i.map(e=>[e.callId,r.get(e.callId)])),results:i};e.cursor.sessionState.hasProxyInputRequests&&t===void 0&&(t=e.nextDeliveryRequestId(),await e.cursor.send({continuationToken:e.cursor.sessionState.continuationToken,inboxToken:e.inboxToken,kind:`turn-delivery-request`,requestId:t}));let a=await raceChannelReads(e.readers,e.cancellation?.requested);if(a===`cancel`)return t!==void 0&&await e.cursor.send({kind:`turn-delivery-cancelled`,requestId:t}),`cancelled`;if(a.next.done)throw Error(`Turn inbox closed before runtime actions completed.`);if(a.channel===`workflow`){let t=await handleWorkflowToolRunMessage({callbackMetadataUrl:getWorkflowMetadata().url,cursor:e.cursor,message:a.next.value});t!==void 0&&(n.push(t),r.set(t.callId,Date.now()));continue}let o=a.next.value;if(o.kind===`runtime-action-result`){let t=e.cursor.sessionState.snapshot?.session.state,i=o.results.filter(e=>e.kind===`tool-result`?isInboxToolResultFromRecordedWorkflowToolRun(t,e):e.origin===`child`&&isInboxSubagentResultFromRunningHandle(t,e)||isInboxSubagentResultFromRecordedWorkflowToolRun(t,e));if(i.length>0){let e=Date.now();n.push(...i);for(let t of i)r.set(t.callId,e)}continue}if(o.kind===`subagent-input-request`||o.kind===`subagent-authorization-event`){let t=findRunningAgentHandle(e.cursor.sessionState.snapshot?.session.state,{callId:o.callId});if(t?.identity.name!==o.subagentName||t.address.sessionId!==o.childSessionId)continue;let n=await runProxySubagentEventStep({hookPayload:o,parentWritable:e.cursor.parentWritable,serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState});await e.cursor.adopt(n);continue}if(o.kind===`driver-delivery`&&o.requestId===t){await e.cursor.send({kind:`turn-delivery-accepted`,requestId:o.requestId}),t=void 0;let n=await routeDeliverToChildren({delivery:o.delivery,parentWritable:e.cursor.parentWritable,serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState});if(await e.cursor.adopt({serializedContext:n.serializedContext??e.cursor.serializedContext,sessionState:n.sessionState??e.cursor.sessionState}),n.kind===`cancel-turn`)return n.kind;n.remainder!==void 0&&e.bufferedDeliveries.push(n.remainder)}}}async function runLegacyTurnWorkflow(e){let t=e.stepInput;try{for(;;){let n=await turnStep(t);if(n.action===`done`){await sendTurnControlStep({controlToken:e.completionToken,payload:{action:{kind:`done`,output:n.output??``,isError:n.isError,serializedContext:n.serializedContext,sessionState:n.sessionState,usage:n.usage,usageDelta:n.usageDelta},kind:`turn-result`}});return}if(n.action===`dispatch-workflow-tasks`){await sendTurnControlStep({controlToken:e.completionToken,payload:{action:{kind:`dispatch-workflow-tasks`,pendingCallIds:n.pendingTaskCallIds,serializedContext:n.serializedContext,sessionState:n.sessionState},kind:`turn-result`}});return}if(n.action===`park`){let t=n.pendingCoordinationCallIds;if(!(t!==void 0||n.hasPendingAuthorization||n.hasPendingInputBatch&&e.capabilities?.requestInput===!0||e.mode===`conversation`))throw Error(TASK_MODE_WAIT_ERROR_MESSAGE);let r=t===void 0?{kind:`park`,serializedContext:n.serializedContext,sessionState:n.sessionState,authorizationAttemptIds:n.authorizationAttemptIds,authorizationNames:n.authorizationNames,settled:n.settled}:{kind:`dispatch-coordination`,pendingCallIds:t,serializedContext:n.serializedContext,sessionState:n.sessionState};await sendTurnControlStep({controlToken:e.completionToken,payload:{action:r,kind:`turn-result`}});return}t={input:void 0,parentWritable:t.parentWritable,serializedContext:n.serializedContext,sessionState:n.sessionState}}}catch(t){throw await sendTurnControlStep({controlToken:e.completionToken,payload:{error:normalizeSerializableError(t),kind:`turn-error`}}),t}}turnWorkflow.workflowId=`workflow//eve//turnWorkflow`;export{runTurnOwnedWorkflow,turnWorkflow};
1
+ import{createHook,getWorkflowMetadata}from"#compiled/@workflow/core/index.js";import{claimHookOwnership,disposeHook,isHookConflictError}from"#execution/hook-ownership.js";import{isInboxSubagentResultFromRecordedWorkflowToolRun,isInboxToolResultFromRecordedWorkflowToolRun}from"#harness/workflow-tool-runs.js";import{activeTurnId}from"#harness/active-turn-id.js";import{migrateTurnWorkflowInput}from"#execution/durable-session-migrations/turn-workflow.js";import{cancelAllIndexedSessionTasksStep}from"#execution/cancel-indexed-session-tasks-step.js";import{turnStep}from"#execution/workflow-steps.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";import{runProxySubagentEventStep}from"#subagents/event-proxy-step.js";import{createChannelReader,raceChannelReads}from"#execution/tools/workflow/owner-channels.js";import{openWorkflowToolRunOwnerInbox}from"#execution/tools/workflow/owner.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{acknowledgeDelegatedTasksStep}from"#execution/tasks/parent/delegate.js";import{normalizeSerializableError}from"#execution/workflow-errors.js";import{sendTurnControlStep}from"#execution/turn-control-protocol.js";import{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle}from"#subagents/handles/query.js";import{cancelDescendantTurnsStep}from"#execution/cancel-descendant-turns-step.js";import{dispatchCoordinationStep}from"#execution/coordination-dispatch-step.js";import{createTurnCancellationControl}from"#execution/turn-cancellation-control.js";import{TurnExecutionCursor}from"#execution/turn-execution-cursor.js";import{resolveRuntimeActionResultsForCallIds}from"#runtime/actions/results.js";import{handleWorkflowToolRunMessage}from"#execution/turn-workflow-tool-run.js";const TASK_MODE_WAIT_ERROR_MESSAGE="Task mode cannot wait for follow-up input (`next: null`).";async function turnWorkflow(e){"use workflow";let t=migrateTurnWorkflowInput(e);return t.driverCapabilities?.turnInbox===!0?runTurnOwnedWorkflow(t):runLegacyTurnWorkflow(t)}async function runTurnOwnedWorkflow(e,t){let n=createHook({token:`${e.completionToken}:inbox`}),r=createChannelReader(`inbox`,n),i=e.initialStep,a=new TurnExecutionCursor({controlToken:e.completionToken,parentWritable:e.stepInput.parentWritable,serializedContext:i?.beforeStep.serializedContext??e.stepInput.serializedContext,sessionState:i?.beforeStep.sessionState??e.stepInput.sessionState}),o=0,nextDeliveryRequestId=()=>`${n.token}:delivery:${String(o++)}`,s=[],c=e.stepInput.input,l=!1,u;try{try{await claimHookOwnership(n),l=!0}catch(e){if(isHookConflictError(e))return;throw e}let o=openWorkflowToolRunOwnerInbox(),d=[o.reader,r];for(e.driverCapabilities?.cancelledTurnSettle===!0&&(u=await createTurnCancellationControl({controlToken:e.completionToken,expectedTurnId:activeTurnId(a.sessionState.emissionState),initialPayload:e.initialCancellation})),t?.();;){let t=i?.beforeStep??{serializedContext:a.serializedContext,sessionState:a.sessionState},r=i?.result??await turnStep(a.createStepInput(c,u?.signal));i=void 0;let l=r.action===`dispatch-workflow-tasks`?r.pendingTaskCallIds:r.action===`park`?r.pendingCoordinationCallIds:void 0,f=(r.backgroundTasks?.length??0)>0;if(f){if(r.backgroundTaskState===void 0)throw Error(`Background tasks were returned without their committed session state.`);await a.adopt({serializedContext:r.backgroundTaskContext??t.serializedContext,sessionState:r.backgroundTaskState}),await acknowledgeDelegatedTasksStep({tasks:r.backgroundTasks??[]})}if(r.action===`cancelled`){await a.adopt({serializedContext:r.serializedContext,sessionState:r.backgroundTaskState??r.sessionState}),await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}if(u?.signal.aborted===!0&&(l===void 0||f)){await a.adopt({serializedContext:r.serializedContext,sessionState:r.backgroundTaskState??r.sessionState}),await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}if(r.action===`done`){await u?.dispose(),await a.finish(r,{kind:`done`,output:r.output??``,isError:r.isError,usage:r.usage,usageDelta:r.usageDelta},s);return}if(l!==void 0&&(r.action===`park`||r.action===`dispatch-workflow-tasks`)){await a.adopt(r);let e=await dispatchCoordinationStep({action:r.action,callbackBaseUrl:resolveWorkflowCallbackBaseUrl(getWorkflowMetadata().url),workflowToolRunOwner:o.owner,parentWritable:a.parentWritable,serializedContext:a.serializedContext,sessionState:a.sessionState}),t=e.results.length===0?void 0:Date.now();await a.adopt(e),await acknowledgeDelegatedTasksStep({tasks:e.pendingTasks});let i=await waitForRuntimeActionResults({bufferedDeliveries:s,cancellation:u,cursor:a,inboxToken:n.token,initialAcceptedAtMs:t,initialResults:e.results,nextDeliveryRequestId,readers:d,pendingCallIds:l});if(i===`cancelled`){c=void 0;continue}if(i===`cancel-turn`){await finishCancelledTurn({bufferedDeliveries:s,cancellation:u,cursor:a});return}c={kind:`runtime-action-result`,...i};continue}if(r.action===`park`){if(!(r.hasPendingAuthorization||r.hasPendingInputBatch&&e.capabilities?.requestInput===!0||e.mode===`conversation`))throw Error(TASK_MODE_WAIT_ERROR_MESSAGE);await u?.dispose(),await a.finish(r,{authorizationAttemptIds:r.authorizationAttemptIds,authorizationNames:r.authorizationNames,kind:`park`,settled:r.settled},s);return}await a.adopt(r),c=void 0}}catch(e){throw await a.send({error:normalizeSerializableError(e),kind:`turn-error`}),e}finally{u!==void 0&&await u.dispose(),l&&await disposeHook(n)}}async function finishCancelledTurn(e){(e.cancellation?.signal.aborted===!0?await e.cancellation.payload:void 0)?.tasks===!0&&await cancelAllIndexedSessionTasksStep({serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState}),await cancelDescendantTurnsStep({serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState}),await e.cancellation?.dispose(),await e.cursor.finish({sessionState:e.cursor.sessionState},{cancelled:!0,kind:`park`},e.bufferedDeliveries)}async function waitForRuntimeActionResults(e){let t,n=[...e.initialResults],r=new Map;if(e.initialAcceptedAtMs!==void 0)for(let t of e.initialResults)r.set(t.callId,e.initialAcceptedAtMs);for(;;){let i=resolveRuntimeActionResultsForCallIds({pendingCallIds:e.pendingCallIds,results:n});if(i!==void 0)return t!==void 0&&await e.cursor.send({kind:`turn-delivery-cancelled`,requestId:t}),{acceptedAtMsByCallId:Object.fromEntries(i.map(e=>[e.callId,r.get(e.callId)])),results:i};e.cursor.sessionState.hasProxyInputRequests&&t===void 0&&(t=e.nextDeliveryRequestId(),await e.cursor.send({continuationToken:e.cursor.sessionState.continuationToken,inboxToken:e.inboxToken,kind:`turn-delivery-request`,requestId:t}));let a=await raceChannelReads(e.readers,e.cancellation?.requested);if(a===`cancel`)return t!==void 0&&await e.cursor.send({kind:`turn-delivery-cancelled`,requestId:t}),`cancelled`;if(a.next.done)throw Error(`Turn inbox closed before runtime actions completed.`);if(a.channel===`workflow`){let t=await handleWorkflowToolRunMessage({callbackMetadataUrl:getWorkflowMetadata().url,cursor:e.cursor,message:a.next.value});t!==void 0&&(n.push(t),r.set(t.callId,Date.now()));continue}let o=a.next.value;if(o.kind===`runtime-action-result`){let t=e.cursor.sessionState.snapshot?.session.state,i=o.results.filter(e=>e.kind===`tool-result`?isInboxToolResultFromRecordedWorkflowToolRun(t,e):e.origin===`child`&&isInboxSubagentResultFromRunningHandle(t,e)||isInboxSubagentResultFromRecordedWorkflowToolRun(t,e));if(i.length>0){let e=Date.now();n.push(...i);for(let t of i)r.set(t.callId,e)}continue}if(o.kind===`subagent-input-request`||o.kind===`subagent-authorization-event`){let t=findRunningAgentHandle(e.cursor.sessionState.snapshot?.session.state,{callId:o.callId});if(t?.identity.name!==o.subagentName||t.address.sessionId!==o.childSessionId)continue;let n=await runProxySubagentEventStep({hookPayload:o,parentWritable:e.cursor.parentWritable,serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState});await e.cursor.adopt(n);continue}if(o.kind===`driver-delivery`&&o.requestId===t){await e.cursor.send({kind:`turn-delivery-accepted`,requestId:o.requestId}),t=void 0;let n=await routeDeliverToChildren({delivery:o.delivery,parentWritable:e.cursor.parentWritable,serializedContext:e.cursor.serializedContext,sessionState:e.cursor.sessionState});if(await e.cursor.adopt({serializedContext:n.serializedContext??e.cursor.serializedContext,sessionState:n.sessionState??e.cursor.sessionState}),n.kind===`cancel-turn`)return n.kind;n.remainder!==void 0&&e.bufferedDeliveries.push(n.remainder)}}}async function runLegacyTurnWorkflow(e){let t=e.stepInput;try{for(;;){let n=await turnStep(t);if(n.action===`done`){await sendTurnControlStep({controlToken:e.completionToken,payload:{action:{kind:`done`,output:n.output??``,isError:n.isError,serializedContext:n.serializedContext,sessionState:n.sessionState,usage:n.usage,usageDelta:n.usageDelta},kind:`turn-result`}});return}if(n.action===`dispatch-workflow-tasks`){await sendTurnControlStep({controlToken:e.completionToken,payload:{action:{kind:`dispatch-workflow-tasks`,pendingCallIds:n.pendingTaskCallIds,serializedContext:n.serializedContext,sessionState:n.sessionState},kind:`turn-result`}});return}if(n.action===`park`){let t=n.pendingCoordinationCallIds;if(!(t!==void 0||n.hasPendingAuthorization||n.hasPendingInputBatch&&e.capabilities?.requestInput===!0||e.mode===`conversation`))throw Error(TASK_MODE_WAIT_ERROR_MESSAGE);let r=t===void 0?{kind:`park`,serializedContext:n.serializedContext,sessionState:n.sessionState,authorizationAttemptIds:n.authorizationAttemptIds,authorizationNames:n.authorizationNames,settled:n.settled}:{kind:`dispatch-coordination`,pendingCallIds:t,serializedContext:n.serializedContext,sessionState:n.sessionState};await sendTurnControlStep({controlToken:e.completionToken,payload:{action:r,kind:`turn-result`}});return}t={input:void 0,parentWritable:t.parentWritable,serializedContext:n.serializedContext,sessionState:n.sessionState}}}catch(t){throw await sendTurnControlStep({controlToken:e.completionToken,payload:{error:normalizeSerializableError(t),kind:`turn-error`}}),t}}turnWorkflow.workflowId=`workflow//eve//turnWorkflow`;export{runTurnOwnedWorkflow,turnWorkflow};
@@ -1 +1 @@
1
- import{randomBytes}from"node:crypto";import{createEveActivityRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{getChannelActivityPresentation}from"#channel/activity-renderer.js";import{sessionCommandHookToken}from"#execution/session-command-token.js";import{ActivityObserverKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{walkCauseChain}from"#shared/errors.js";import{normalizePersistedMessageStreamEvent}from"#protocol/message-version.js";import{cancelRun,getRawHookByToken,getRun,getWorld,start}from"#internal/workflow/runtime.js";import{serializeContext}from"#context/serialize.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{EntityConflictError,HookNotFoundError,RunExpiredError,WorkflowRunNotFoundError}from"#compiled/@workflow/errors/index.js";import{resumeSessionInbox}from"#execution/wire/session-inbox-resume.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{buildSessionAttributes,buildSubagentRootAttributes,readParentLineage}from"#execution/eve-workflow-attributes.js";import{normalizeEveAttributes}from"#runtime/attributes/normalize.js";import{ROOT_RUNTIME_AGENT_NODE_ID}from"#runtime/graph.js";import{initializeSessionInstrumentation}from"#instrumentation/runtime.js";import{createWorkflowCallbackUrl,resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{buildRunContext}from"#execution/runtime-context.js";import{parseNdjsonStream}from"#execution/ndjson-stream.js";import{buildInvocationAttributes}from"#internal/invocation/metadata.js";import{isAgentTraceContext}from"#tracing/agent-trace-context.js";import{ACTIVITY_COLLECTOR_WORKFLOW_NAME,SESSION_TIMEOUT_WORKFLOW_NAME,TASK_RUN_WORKFLOW_NAME,TURN_WORKFLOW_NAME,WORKFLOW_ENTRY_NAME,WORKFLOW_TOOL_RUN_WORKFLOW_NAME}from"#execution/stable-workflow-names.js";const EVE_PACKAGE_INFO=resolveInstalledPackageInfo(),COMMAND_HOOK_READY_TIMEOUT_MS=3e4,STABLE_ID_BASE=EVE_PACKAGE_INFO.name,log=createLogger(`execution.workflow-runtime`),workflowEntryReference={workflowId:`workflow//${STABLE_ID_BASE}//${WORKFLOW_ENTRY_NAME}`},turnWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TURN_WORKFLOW_NAME}`},sessionTimeoutWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${SESSION_TIMEOUT_WORKFLOW_NAME}`},taskRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TASK_RUN_WORKFLOW_NAME}`},activityCollectorWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${ACTIVITY_COLLECTOR_WORKFLOW_NAME}`},workflowToolRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${WORKFLOW_TOOL_RUN_WORKFLOW_NAME}`};function createWorkflowRuntime(e){return{async createSession(t){let n=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:e.compiledArtifactsSource,nodeId:e.nodeId}),r=buildRunContext({bundle:n,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,run:t}),i=resolveEffectiveAgentRuntime(n,r);initializeSessionInstrumentation({agentName:i.turnAgent.id,ctx:r,parentTraceContext:t.parentTraceContext});let a=i.limits?.sessionTimeoutMs,o=n.resolvedAgent.config?.experimental?.workflow?.retention,s,c=t.activityObserver;if(t.parent===void 0&&c===void 0&&(getChannelActivityPresentation(t.adapter)?.renderers.length??0)>0){let e=serializeContext(r),t=randomBytes(32).toString(`base64url`),n={expiresAt:new Date(Date.now()+(typeof a==`number`?a:864e5)).toISOString(),serializedContext:e,token:t};try{s=(await startWorkflowOnCurrentDeployment(activityCollectorWorkflowReference,[n],{experimental_retention:o})).runId;let e=process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:`http://localhost:3000`,i=resolveWorkflowCallbackBaseUrl(e);c={sink:{url:createWorkflowCallbackUrl(i,createEveActivityRoutePath(t)),version:1}},r.set(ActivityObserverKey,c)}catch{await cancelActivityCollector(s),s=void 0,log.warn(`failed to start activity collector`)}}let l=serializeContext(r),u=readParentLineage(l),d={input:t.input,limits:t.limits,serializedContext:l},f=t.taskId??t.callback?.taskId;f!==void 0&&(d.taskId=f),s!==void 0&&(d.activityCollectorRunId=s),t.continuationConflictCommand!==void 0&&(d.continuationConflictCommand=t.continuationConflictCommand),a!==void 0&&(d.sessionTimeoutMs=a),o!==void 0&&(d.retention=o);let p={...u.sessionId===void 0?buildSessionAttributes({inputMessage:t.title??t.input.message,serializedContext:l}):buildSubagentRootAttributes({identity:{nodeId:n.nodeId??ROOT_RUNTIME_AGENT_NODE_ID},parentCallId:u.callId,parentSessionId:u.sessionId,parentTurnId:u.turnId,rootSessionId:u.rootSessionId??u.sessionId,serializedContext:l}),...t.externalInvocation===void 0?{}:buildInvocationAttributes(t.externalInvocation)},m;try{m=await startWorkflowOnCurrentDeployment(workflowEntryReference,[d],{allowReservedAttributes:!0,attributes:normalizeEveAttributes(p),experimental_retention:o})}catch(e){throw await cancelActivityCollector(s),logError(log,`failed to start workflow run`,e,{continuationToken:t.continuationToken}),e}let h,getEvents=()=>(h??=parseNdjsonStream(()=>getRun(m.runId).getReadable(),normalizePersistedEvent),h);return{get events(){return getEvents()},sessionId:m.runId}},async dispatchContinuation(e){return await dispatchWorkflowCommand(e.continuationToken,e.command)},async dispatchSession(e){return await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),e.command)},async getEventStream(e,t){return parseNdjsonStream(()=>getRun(e).getReadable({startIndex:t?.startIndex}),normalizePersistedEvent)},async getStreamTailIndex(e){let t=getRun(e).getReadable();try{return await t.getTailIndex()}finally{await t.cancel().catch(()=>{})}},async resolveContinuation(e){try{return{sessionId:(await getRawHookByToken(e)).runId}}catch(t){if(HookNotFoundError.is(t))return;throw logError(log,`failed to resolve session by continuation token`,t,{continuationToken:e}),t}}}}function normalizePersistedEvent(e){return normalizePersistedMessageStreamEvent(e)}async function cancelActivityCollector(e){if(e!==void 0)try{await cancelRun(await getWorld(),e,{cancelReason:`Root session creation did not complete`})}catch{log.warn(`failed to cancel unowned activity collector`)}}async function dispatchWorkflowCommand(e,t){let n;try{n=normalizeWorkflowHook(await resumeSessionInbox(e,t))}catch(n){if(isInactiveCommandTarget(n))return inactiveCommandResult(t);throw logError(log,`failed to dispatch session command`,n,{command:t.kind,token:e}),n}return t.kind===`reset`&&await waitForCommandHookRelease(sessionCommandHookToken(n.runId),n.runId),activeCommandResult(t,n.runId)}function activeCommandResult(e,t){return e.kind===`reset`?{previousSessionId:t,status:`reset`}:e.kind===`send`&&e.delivery!==void 0?{sessionId:t,status:`accepted`,deliveryId:e.delivery.deliveryId}:{sessionId:t,status:`accepted`}}function inactiveCommandResult(e){return e.kind===`send`?{status:`session_not_active`}:e.kind===`cancel`?{status:`no_active_turn`}:{status:`no_active_session`}}async function requestWorkflowTurnCancellation(e){let t={kind:`cancel`};return e.taskId!==void 0&&(t.taskId=e.taskId),e.tasks!==void 0&&(t.tasks=e.tasks),e.turnId!==void 0&&(t.turnId=e.turnId),await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),t)}function isInactiveCommandTarget(e){if(HookNotFoundError.is(e))return!0;for(let t of walkCauseChain(e))if(WorkflowRunNotFoundError.is(t)||RunExpiredError.is(t)||EntityConflictError.is(t))return!0;return!1}async function waitForCommandHookOwner(e){let t=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;)try{return normalizeWorkflowHook(await getRawHookByToken(e))}catch(e){if(!HookNotFoundError.is(e)||Date.now()>=t)throw e;await new Promise(e=>setTimeout(e,20))}}async function waitForCommandHookRelease(e,t){let n=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;){try{if(normalizeWorkflowHook(await getRawHookByToken(e)).runId!==t)return}catch(e){if(HookNotFoundError.is(e))return;throw e}if(Date.now()>=n)throw Error(`Timed out waiting for session "${t}" to release its command inbox.`);await new Promise(e=>setTimeout(e,20))}}async function startWorkflowOnCurrentDeployment(e,t,n){return await startWorkflowOnDeployment(e,t,process.env.VERCEL_DEPLOYMENT_ID?.trim()||void 0,n)}async function startWorkflowOnAcceptedDeployment(e,t,n,r){return n===void 0?await startWorkflowOnCurrentDeployment(e,t,r):await startWorkflowOnDeployment(e,t,n,r)}async function startWorkflowOnDeployment(e,t,n,r){return await withWorkflowStartContext(async()=>n===void 0?r===void 0?await start(e,t):await start(e,t,r):await start(e,t,{...r,deploymentId:n}))}async function withWorkflowStartContext(e){let t=context.active(),n=isAgentTraceContext(t)?trace.deleteSpan(t):t;return await context.with(n,e)}function normalizeWorkflowHook(e){if(typeof e!=`object`||!e||!(`runId`in e))throw Error(`Workflow hook did not include a run id.`);let t=e.runId;if(typeof t!=`string`||t.length===0)throw Error(`Workflow hook did not include a run id.`);return{runId:t}}export{activityCollectorWorkflowReference,createWorkflowRuntime,requestWorkflowTurnCancellation,sessionTimeoutWorkflowReference,startWorkflowOnAcceptedDeployment,startWorkflowOnCurrentDeployment,taskRunWorkflowReference,turnWorkflowReference,waitForCommandHookOwner,workflowEntryReference,workflowToolRunWorkflowReference};
1
+ import{randomBytes}from"node:crypto";import{createEveActivityRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{getChannelActivityPresentation}from"#channel/activity-renderer.js";import{sessionCommandHookToken}from"#execution/session-command-token.js";import{ActivityObserverKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{walkCauseChain}from"#shared/errors.js";import{normalizePersistedMessageStreamEvent}from"#protocol/message-version.js";import{cancelRun,getRawHookByToken,getRun,getWorld,start}from"#internal/workflow/runtime.js";import{serializeContext}from"#context/serialize.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{EntityConflictError,HookNotFoundError,RunExpiredError,WorkflowRunNotFoundError}from"#compiled/@workflow/errors/index.js";import{resumeSessionInbox}from"#execution/wire/session-inbox-resume.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{buildSessionAttributes,buildSubagentRootAttributes,readParentLineage}from"#execution/eve-workflow-attributes.js";import{normalizeEveAttributes}from"#runtime/attributes/normalize.js";import{ROOT_RUNTIME_AGENT_NODE_ID}from"#runtime/graph.js";import{initializeSessionInstrumentation}from"#instrumentation/runtime.js";import{createWorkflowCallbackUrl,resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{buildRunContext}from"#execution/runtime-context.js";import{parseNdjsonStream}from"#execution/ndjson-stream.js";import{buildInvocationAttributes}from"#internal/invocation/metadata.js";import{isAgentTraceContext}from"#tracing/agent-trace-context.js";import{ACTIVITY_COLLECTOR_WORKFLOW_NAME,SESSION_TIMEOUT_WORKFLOW_NAME,TASK_RUN_WORKFLOW_NAME,TURN_WORKFLOW_NAME,WORKFLOW_ENTRY_NAME,WORKFLOW_TOOL_RUN_WORKFLOW_NAME}from"#execution/stable-workflow-names.js";const EVE_PACKAGE_INFO=resolveInstalledPackageInfo(),COMMAND_HOOK_READY_TIMEOUT_MS=3e4,STABLE_ID_BASE=EVE_PACKAGE_INFO.name,log=createLogger(`execution.workflow-runtime`),workflowEntryReference={workflowId:`workflow//${STABLE_ID_BASE}//${WORKFLOW_ENTRY_NAME}`},turnWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TURN_WORKFLOW_NAME}`},sessionTimeoutWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${SESSION_TIMEOUT_WORKFLOW_NAME}`},taskRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TASK_RUN_WORKFLOW_NAME}`},activityCollectorWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${ACTIVITY_COLLECTOR_WORKFLOW_NAME}`},workflowToolRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${WORKFLOW_TOOL_RUN_WORKFLOW_NAME}`};function createWorkflowRuntime(e){return{async createSession(t){let n=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:e.compiledArtifactsSource,nodeId:e.nodeId}),r=buildRunContext({bundle:n,dynamicSubagentAgentConfig:e.dynamicSubagentAgentConfig,run:t}),i=resolveEffectiveAgentRuntime(n,r);initializeSessionInstrumentation({agentName:i.turnAgent.id,ctx:r});let a=i.limits?.sessionTimeoutMs,o=n.resolvedAgent.config?.experimental?.workflow?.retention,s,c=t.activityObserver;if(t.parent===void 0&&c===void 0&&(getChannelActivityPresentation(t.adapter)?.renderers.length??0)>0){let e=serializeContext(r),t=randomBytes(32).toString(`base64url`),n={expiresAt:new Date(Date.now()+(typeof a==`number`?a:864e5)).toISOString(),serializedContext:e,token:t};try{s=(await startWorkflowOnCurrentDeployment(activityCollectorWorkflowReference,[n],{experimental_retention:o})).runId;let e=process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:`http://localhost:3000`,i=resolveWorkflowCallbackBaseUrl(e);c={sink:{url:createWorkflowCallbackUrl(i,createEveActivityRoutePath(t)),version:1}},r.set(ActivityObserverKey,c)}catch{await cancelActivityCollector(s),s=void 0,log.warn(`failed to start activity collector`)}}let l=serializeContext(r),u=readParentLineage(l),d={input:t.input,limits:t.limits,serializedContext:l},f=t.taskId??t.callback?.taskId;f!==void 0&&(d.taskId=f),s!==void 0&&(d.activityCollectorRunId=s),t.continuationConflictCommand!==void 0&&(d.continuationConflictCommand=t.continuationConflictCommand),a!==void 0&&(d.sessionTimeoutMs=a),o!==void 0&&(d.retention=o);let p={...u.sessionId===void 0?buildSessionAttributes({inputMessage:t.title??t.input.message,serializedContext:l}):buildSubagentRootAttributes({identity:{nodeId:n.nodeId??ROOT_RUNTIME_AGENT_NODE_ID},parentCallId:u.callId,parentSessionId:u.sessionId,parentTurnId:u.turnId,rootSessionId:u.rootSessionId??u.sessionId,serializedContext:l}),...t.externalInvocation===void 0?{}:buildInvocationAttributes(t.externalInvocation)},m;try{m=await startWorkflowOnCurrentDeployment(workflowEntryReference,[d],{allowReservedAttributes:!0,attributes:normalizeEveAttributes(p),experimental_retention:o})}catch(e){throw await cancelActivityCollector(s),logError(log,`failed to start workflow run`,e,{continuationToken:t.continuationToken}),e}let h,getEvents=()=>(h??=parseNdjsonStream(()=>getRun(m.runId).getReadable(),normalizePersistedEvent),h);return{get events(){return getEvents()},sessionId:m.runId}},async dispatchContinuation(e){return await dispatchWorkflowCommand(e.continuationToken,e.command)},async dispatchSession(e){return await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),e.command)},async getEventStream(e,t){return parseNdjsonStream(()=>getRun(e).getReadable({startIndex:t?.startIndex}),normalizePersistedEvent)},async getStreamTailIndex(e){let t=getRun(e).getReadable();try{return await t.getTailIndex()}finally{await t.cancel().catch(()=>{})}},async resolveContinuation(e){try{return{sessionId:(await getRawHookByToken(e)).runId}}catch(t){if(HookNotFoundError.is(t))return;throw logError(log,`failed to resolve session by continuation token`,t,{continuationToken:e}),t}}}}function normalizePersistedEvent(e){return normalizePersistedMessageStreamEvent(e)}async function cancelActivityCollector(e){if(e!==void 0)try{await cancelRun(await getWorld(),e,{cancelReason:`Root session creation did not complete`})}catch{log.warn(`failed to cancel unowned activity collector`)}}async function dispatchWorkflowCommand(e,t){let n;try{n=normalizeWorkflowHook(await resumeSessionInbox(e,t))}catch(n){if(isInactiveCommandTarget(n))return inactiveCommandResult(t);throw logError(log,`failed to dispatch session command`,n,{command:t.kind,token:e}),n}return t.kind===`reset`&&await waitForCommandHookRelease(sessionCommandHookToken(n.runId),n.runId),activeCommandResult(t,n.runId)}function activeCommandResult(e,t){return e.kind===`reset`?{previousSessionId:t,status:`reset`}:e.kind===`send`&&e.delivery!==void 0?{sessionId:t,status:`accepted`,deliveryId:e.delivery.deliveryId}:{sessionId:t,status:`accepted`}}function inactiveCommandResult(e){return e.kind===`send`?{status:`session_not_active`}:e.kind===`cancel`?{status:`no_active_turn`}:{status:`no_active_session`}}async function requestWorkflowTurnCancellation(e){let t={kind:`cancel`};return e.taskId!==void 0&&(t.taskId=e.taskId),e.tasks!==void 0&&(t.tasks=e.tasks),e.turnId!==void 0&&(t.turnId=e.turnId),await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),t)}function isInactiveCommandTarget(e){if(HookNotFoundError.is(e))return!0;for(let t of walkCauseChain(e))if(WorkflowRunNotFoundError.is(t)||RunExpiredError.is(t)||EntityConflictError.is(t))return!0;return!1}async function waitForCommandHookOwner(e){let t=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;)try{return normalizeWorkflowHook(await getRawHookByToken(e))}catch(e){if(!HookNotFoundError.is(e)||Date.now()>=t)throw e;await new Promise(e=>setTimeout(e,20))}}async function waitForCommandHookRelease(e,t){let n=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;){try{if(normalizeWorkflowHook(await getRawHookByToken(e)).runId!==t)return}catch(e){if(HookNotFoundError.is(e))return;throw e}if(Date.now()>=n)throw Error(`Timed out waiting for session "${t}" to release its command inbox.`);await new Promise(e=>setTimeout(e,20))}}async function startWorkflowOnCurrentDeployment(e,t,n){return await startWorkflowOnDeployment(e,t,process.env.VERCEL_DEPLOYMENT_ID?.trim()||void 0,n)}async function startWorkflowOnAcceptedDeployment(e,t,n,r){return n===void 0?await startWorkflowOnCurrentDeployment(e,t,r):await startWorkflowOnDeployment(e,t,n,r)}async function startWorkflowOnDeployment(e,t,n,r){return await withWorkflowStartContext(async()=>n===void 0?r===void 0?await start(e,t):await start(e,t,r):await start(e,t,{...r,deploymentId:n}))}async function withWorkflowStartContext(e){let t=context.active(),n=isAgentTraceContext(t)?trace.deleteSpan(t):t;return await context.with(n,e)}function normalizeWorkflowHook(e){if(typeof e!=`object`||!e||!(`runId`in e))throw Error(`Workflow hook did not include a run id.`);let t=e.runId;if(typeof t!=`string`||t.length===0)throw Error(`Workflow hook did not include a run id.`);return{runId:t}}export{activityCollectorWorkflowReference,createWorkflowRuntime,requestWorkflowTurnCancellation,sessionTimeoutWorkflowReference,startWorkflowOnAcceptedDeployment,startWorkflowOnCurrentDeployment,taskRunWorkflowReference,turnWorkflowReference,waitForCommandHookOwner,workflowEntryReference,workflowToolRunWorkflowReference};