eve 0.42.0 → 0.43.0

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 (137) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/src/channel/forwarded-principal.d.ts +4 -4
  3. package/dist/src/compiler/extension-compatibility.d.ts +7 -5
  4. package/dist/src/compiler/extension-compatibility.js +1 -1
  5. package/dist/src/compiler/manifest.d.ts +3 -0
  6. package/dist/src/compiler/manifest.js +1 -1
  7. package/dist/src/compiler/normalize-manifest.js +1 -1
  8. package/dist/src/compiler/normalize-tool.js +1 -1
  9. package/dist/src/context/build-dynamic-tools.d.ts +5 -5
  10. package/dist/src/context/build-dynamic-tools.js +1 -1
  11. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  12. package/dist/src/context/dynamic-tool-lifecycle.d.ts +8 -27
  13. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  14. package/dist/src/context/keys.d.ts +10 -14
  15. package/dist/src/context/keys.js +1 -1
  16. package/dist/src/context/provider.d.ts +5 -1
  17. package/dist/src/context/run-step.d.ts +3 -2
  18. package/dist/src/context/run-step.js +1 -1
  19. package/dist/src/execution/agent-handle-dispatch.d.ts +3 -0
  20. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  21. package/dist/src/execution/delegation-tool.d.ts +9 -1
  22. package/dist/src/execution/delegation-tool.js +1 -1
  23. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +14 -1
  24. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
  25. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  26. package/dist/src/execution/history-view.d.ts +9 -0
  27. package/dist/src/execution/history-view.js +1 -0
  28. package/dist/src/execution/next-driver-action.d.ts +33 -1
  29. package/dist/src/execution/node-step.d.ts +5 -2
  30. package/dist/src/execution/node-step.js +1 -1
  31. package/dist/src/execution/remote-agent-dispatch.d.ts +2 -0
  32. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  33. package/dist/src/execution/session-callback-step.d.ts +2 -2
  34. package/dist/src/execution/session-callback-step.js +1 -1
  35. package/dist/src/execution/tasks/child/steps.js +1 -1
  36. package/dist/src/execution/tasks/child/update.d.ts +2 -2
  37. package/dist/src/execution/tasks/child/update.js +1 -1
  38. package/dist/src/execution/tasks/child/workflow.js +1 -1
  39. package/dist/src/execution/tasks/parent/agent-views.d.ts +2 -1
  40. package/dist/src/execution/tasks/parent/agent-views.js +1 -1
  41. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +6 -0
  42. package/dist/src/execution/tasks/parent/continuation-dispatch.js +1 -1
  43. package/dist/src/execution/tasks/parent/control-shared.d.ts +1 -1
  44. package/dist/src/execution/tasks/parent/control-shared.js +1 -1
  45. package/dist/src/execution/tasks/parent/delegate.d.ts +20 -6
  46. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  47. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
  48. package/dist/src/execution/tasks/parent/dispatch.d.ts +13 -1
  49. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  50. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  51. package/dist/src/execution/tasks/parent/tool-execution.d.ts +46 -0
  52. package/dist/src/execution/tasks/parent/tool-execution.js +1 -0
  53. package/dist/src/execution/tool-auth.d.ts +12 -3
  54. package/dist/src/execution/tool-auth.js +1 -1
  55. package/dist/src/execution/turn-cancellation-control.js +1 -1
  56. package/dist/src/execution/turn-workflow.js +1 -1
  57. package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
  58. package/dist/src/execution/workflow-steps.d.ts +1 -54
  59. package/dist/src/execution/workflow-steps.js +1 -1
  60. package/dist/src/harness/advertised-tools.js +1 -1
  61. package/dist/src/harness/background-tools.d.ts +37 -0
  62. package/dist/src/harness/background-tools.js +1 -0
  63. package/dist/src/harness/execute-tool.d.ts +10 -1
  64. package/dist/src/harness/handles/transitions.d.ts +36 -0
  65. package/dist/src/harness/handles/transitions.js +1 -1
  66. package/dist/src/harness/messages.d.ts +2 -0
  67. package/dist/src/harness/messages.js +1 -1
  68. package/dist/src/harness/tool-loop.js +2 -2
  69. package/dist/src/harness/tools.d.ts +5 -1
  70. package/dist/src/harness/tools.js +1 -1
  71. package/dist/src/harness/types.d.ts +13 -0
  72. package/dist/src/internal/application/package.js +1 -1
  73. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  74. package/dist/src/internal/authored-module-loader.js +1 -1
  75. package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.js +1 -1
  76. package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.d.ts +13 -0
  77. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.d.ts +7 -31
  78. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +4 -4
  79. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  80. package/dist/src/public/channels/eve.d.ts +7 -7
  81. package/dist/src/public/channels/eve.js +1 -1
  82. package/dist/src/public/definitions/remote-agent.d.ts +7 -5
  83. package/dist/src/public/definitions/tool.d.ts +23 -0
  84. package/dist/src/public/definitions/tool.js +1 -1
  85. package/dist/src/public/tools/approval/approval-helpers.js +1 -1
  86. package/dist/src/public/tools/index.d.ts +1 -1
  87. package/dist/src/runtime/framework-tools/connection-search-dynamic.js +2 -2
  88. package/dist/src/runtime/framework-tools/subagent/local.d.ts +41 -0
  89. package/dist/src/runtime/framework-tools/subagent/local.js +1 -0
  90. package/dist/src/runtime/framework-tools/subagent/remote.d.ts +23 -0
  91. package/dist/src/runtime/framework-tools/subagent/remote.js +1 -0
  92. package/dist/src/runtime/framework-tools/tasks.d.ts +11 -2
  93. package/dist/src/runtime/framework-tools/tasks.js +1 -1
  94. package/dist/src/runtime/resolve-tool.js +1 -1
  95. package/dist/src/runtime/session-callback-route.js +1 -1
  96. package/dist/src/setup/integrations/linq/management.d.ts +5 -0
  97. package/dist/src/setup/integrations/linq/management.js +1 -0
  98. package/dist/src/setup/integrations/linq/setup.d.ts +5 -1
  99. package/dist/src/setup/integrations/linq/setup.js +3 -3
  100. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  101. package/dist/src/setup/scaffold/create/project.js +4 -10
  102. package/dist/src/setup/scaffold/create/web-template.d.ts +0 -1
  103. package/dist/src/setup/scaffold/create/web-template.js +1 -1
  104. package/dist/src/setup/scaffold/update/channels.d.ts +1 -1
  105. package/dist/src/setup/scaffold/update/channels.js +2 -2
  106. package/dist/src/setup/scaffold/update/package-json.d.ts +0 -2
  107. package/dist/src/setup/scaffold/update/package-json.js +1 -1
  108. package/dist/src/setup/scaffold/workspace-root.d.ts +0 -1
  109. package/dist/src/setup/scaffold/workspace-root.js +1 -1
  110. package/dist/src/shared/durable-dynamic-tool-callbacks.d.ts +34 -0
  111. package/dist/src/shared/durable-dynamic-tool-callbacks.js +1 -0
  112. package/dist/src/shared/dynamic-tool-definition.d.ts +2 -4
  113. package/dist/src/shared/empty-delivery.js +1 -1
  114. package/dist/src/shared/history-view.d.ts +22 -0
  115. package/dist/src/shared/history-view.js +1 -0
  116. package/dist/src/shared/json.d.ts +2 -0
  117. package/dist/src/shared/json.js +1 -1
  118. package/dist/src/shared/tool-definition.d.ts +4 -1
  119. package/dist/src/shared/tool-task.d.ts +107 -0
  120. package/dist/src/shared/tool-task.js +1 -0
  121. package/dist/src/tasks/delivery-context.d.ts +12 -0
  122. package/dist/src/tasks/delivery-context.js +17 -0
  123. package/dist/src/tasks/json.d.ts +25 -10
  124. package/dist/src/tasks/json.js +1 -1
  125. package/dist/src/tasks/session-index.d.ts +5 -3
  126. package/dist/src/tasks/session-index.js +1 -1
  127. package/dist/src/tasks/transitions.d.ts +40 -5
  128. package/dist/src/tasks/transitions.js +1 -1
  129. package/dist/src/tasks/types.d.ts +46 -4
  130. package/dist/src/tasks/types.js +1 -1
  131. package/docs/channels/linq.mdx +1 -1
  132. package/docs/getting-started.mdx +36 -36
  133. package/docs/guides/auth-and-route-protection.md +6 -2
  134. package/docs/guides/dynamic-capabilities.md +12 -10
  135. package/docs/guides/remote-agents.md +10 -2
  136. package/docs/tools/overview.mdx +19 -0
  137. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # eve
2
2
 
3
+ ## 0.43.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1390675: Background tools can now report a delegated task's terminal result in-process via `task.send({ kind: "complete" | "fail" | "cancel", ... })`, without minting a callback URL.
8
+
9
+ ### Patch Changes
10
+
11
+ - 1c2684a: Add the native Agentcard MCP connection to the registry through Vercel Connect.
12
+ - f3f4f4a: Allow in-process background tool executors to report progress and terminal results through `task.send`. Progress updates now use executor-neutral coordinates internally, and background task types are exported from `eve/tools`.
13
+ - 7de783e: Existing Linq account setup now fetches the phone numbers assigned to the partner API token, then lets you select the numbers for your agent.
14
+ - 3ec0e5b: Route model-facing session history through one prepared view so dynamic resolvers, compaction, instrumentation, and model calls receive a consistent conversation without changing durable history.
15
+ - b57c965: Forward the active caller on persistent local and remote subagent continuations so user-scoped connections resolve for the current turn without inheriting the previous caller's authority. Upgrade both remote-agent deployments before resuming existing persistent sessions; create-only receivers reject forwarded continuations rather than falling back to service authority.
16
+ - 3811d81: Update the project scripts after `eve add channel/web` so `pnpm dev` starts the generated Next.js app.
17
+ - be9be27: Make dynamic tool approval, execution, and output callbacks durable across cold starts. Non-serializable callback captures now fail with an actionable error instead of losing values during replay.
18
+ - 1390675: Add generic background `defineTool` execution so authored tools can return `task.delegated()` receipts and run through the durable task lifecycle without subagent-specific harness branches.
19
+ - 99de091: Run local and remote subagents through generic background `defineTool` execution when `experimental.tasks` is enabled, preserving durable task receipts, HITL, cancellation, and child stream events.
20
+ - f3f4f4a: Give the parent model runtime-authored task state on background wakes so related intermediate results can stay silent and settle into one consolidated report.
21
+ - 3811d81: New npm, Yarn, and Bun agents no longer receive an obsolete AI SDK package-manager pin. Web Chat installation now preserves the AI SDK version already declared by the agent, avoiding npm `EOVERRIDE` failures.
22
+
3
23
  ## 0.42.0
4
24
 
5
25
  ### Minor Changes
@@ -8,7 +8,7 @@ import type { SessionAuthContext } from "#channel/types.js";
8
8
  */
9
9
  export declare const FORWARDED_BY_ATTRIBUTE = "eve:forwarded-by";
10
10
  /**
11
- * Wire shape of the create-session `forwardedPrincipal` body field: the
11
+ * Wire shape of the session-request `forwardedPrincipal` body field: the
12
12
  * dispatching turn's session principals, asserted by a trusted forwarder.
13
13
  * Only principal metadata crosses the wire — never tokens or credentials.
14
14
  */
@@ -31,7 +31,7 @@ export type ForwardedPrincipalParseResult = {
31
31
  readonly ok: false;
32
32
  };
33
33
  /**
34
- * The create route's effective session principals after the forwarded
34
+ * A session route's effective principals after the forwarded
35
35
  * principal gate: the transport principal untouched when the body carries no
36
36
  * assertion, or the stamped forwarded contexts once a trusted forwarder's
37
37
  * assertion is accepted.
@@ -45,7 +45,7 @@ export type ResolvedForwardedPrincipal = {
45
45
  readonly initiatorAuth: SessionAuthContext;
46
46
  };
47
47
  /**
48
- * Gates the create-session `forwardedPrincipal` body field and resolves the
48
+ * Gates the `forwardedPrincipal` body field and resolves the
49
49
  * effective session principals. Returns the failure `Response` on rejection:
50
50
  * 403 when the channel accepts no forwarded principal or the predicate
51
51
  * refuses the forwarder, 400 on a malformed payload, 500 when the authored
@@ -59,7 +59,7 @@ export declare function resolveForwardedPrincipal(input: {
59
59
  readonly payload: Record<string, unknown>;
60
60
  }): Promise<ResolvedForwardedPrincipal | Response>;
61
61
  /**
62
- * Parses the create-session `forwardedPrincipal` body field against the
62
+ * Parses the `forwardedPrincipal` body field against the
63
63
  * strict wire schema. Mirrors `parseSessionCallback` for `callback`: strict
64
64
  * keys, formatted error strings, and no exceptions.
65
65
  */
@@ -11,9 +11,11 @@ declare const EXTENSION_CAPABILITY_CONTRACTS: {
11
11
  readonly dropped: {};
12
12
  };
13
13
  readonly tool: {
14
- readonly current: 13;
15
- readonly supported: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
16
- readonly dropped: {};
14
+ readonly current: 17;
15
+ readonly supported: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17];
16
+ readonly dropped: {
17
+ readonly 15: "TaskExec replaces stageEffect with send";
18
+ };
17
19
  };
18
20
  readonly dynamicTool: {
19
21
  readonly current: 18;
@@ -21,8 +23,8 @@ declare const EXTENSION_CAPABILITY_CONTRACTS: {
21
23
  readonly dropped: {};
22
24
  };
23
25
  readonly channel: {
24
- readonly current: 5;
25
- readonly supported: readonly [1, 2, 3, 4, 5];
26
+ readonly current: 6;
27
+ readonly supported: readonly [1, 2, 3, 4, 5, 6];
26
28
  readonly dropped: {};
27
29
  };
28
30
  readonly schedule: {
@@ -1 +1 @@
1
- import{readFile,writeFile}from"node:fs/promises";import{z}from"#compiled/zod/index.js";import{join}from"node:path";import{formatValidationError}from"#runtime/validation.js";const EXTENSION_COMPATIBILITY_MANIFEST_KIND=`eve-extension`,EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION=2,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME=`_manifest.json`,EXTENSION_CAPABILITY_CONTRACTS={extension:{current:1,supported:[1],dropped:{}},tool:{current:13,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13],dropped:{}},dynamicTool:{current:18,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],dropped:{}},channel:{current:5,supported:[1,2,3,4,5],dropped:{}},schedule:{current:3,supported:[1,2,3],dropped:{}},subagent:{current:2,supported:[1,2],dropped:{}},connection:{current:5,supported:[1,2,3,4,5],dropped:{}},hook:{current:14,supported:[10,11,12,13,14],dropped:{1:`Model identity moved from session.started runtime metadata to step.started call attribution.`,2:`Model identity moved from session.started runtime metadata to step.started call attribution.`,3:`Model identity moved from session.started runtime metadata to step.started call attribution.`,4:`Model identity moved from session.started runtime metadata to step.started call attribution.`,5:`Model identity moved from session.started runtime metadata to step.started call attribution.`,6:`Model identity moved from session.started runtime metadata to step.started call attribution.`,7:`Model identity moved from session.started runtime metadata to step.started call attribution.`,8:`Model identity moved from session.started runtime metadata to step.started call attribution.`,9:`Model identity moved from session.started runtime metadata to step.started call attribution.`}},skill:{current:1,supported:[1],dropped:{}},dynamicSkill:{current:12,supported:[1,2,3,4,5,6,7,8,9,10,11,12],dropped:{}},instructions:{current:2,supported:[1,2],dropped:{}},dynamicInstructions:{current:13,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13],dropped:{}},config:{current:1,supported:[1],dropped:{}},state:{current:3,supported:[1,2,3],dropped:{}}},EXTENSION_CAPABILITY_VERSIONS=Object.fromEntries(Object.entries(EXTENSION_CAPABILITY_CONTRACTS).map(([e,t])=>[e,t.current])),EXTENSION_CAPABILITY_SUPPORT=Object.keys(EXTENSION_CAPABILITY_CONTRACTS).reduce((e,t)=>(e[t]=EXTENSION_CAPABILITY_CONTRACTS[t].supported,e),{}),extensionCompatibilityManifestV1Schema=z.object({kind:z.literal(EXTENSION_COMPATIBILITY_MANIFEST_KIND),formatVersion:z.literal(1),builtWithEve:z.string().min(1),requires:z.record(z.string(),z.number().int().positive())}).strict(),extensionCompatibilityManifestV2Schema=extensionCompatibilityManifestV1Schema.extend({formatVersion:z.literal(2),build:z.object({externalDependencies:z.array(z.string().min(1)).readonly()}).strict().optional()}),extensionCompatibilityManifestSchema=z.union([extensionCompatibilityManifestV1Schema,extensionCompatibilityManifestV2Schema]);function serializeExtensionCompatibilityManifest(e){return`${JSON.stringify(e,null,2)}\n`}function parseExtensionCompatibilityManifest(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`Extension compatibility manifest "${t}" is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}let r=extensionCompatibilityManifestSchema.safeParse(n);if(!r.success)throw Error(`Extension compatibility manifest "${t}" is invalid. ${formatValidationError(r.error)}`);return r.data}async function readExtensionCompatibilityManifest(t){return parseExtensionCompatibilityManifest(await readFile(t,`utf8`),t)}async function writeExtensionCompatibilityManifest(e,n){await writeFile(join(e,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME),serializeExtensionCompatibilityManifest(n),`utf8`)}function findUnsupportedExtensionCapabilities(e,t=EXTENSION_CAPABILITY_SUPPORT){return Object.entries(e.requires).flatMap(([e,n])=>{let r=Object.hasOwn(t,e)?t[e]??[]:[];return r.includes(n)?[]:[{capability:e,requiredVersion:n,supportedVersions:r}]}).sort((e,t)=>e.capability.localeCompare(t.capability))}export{EXTENSION_CAPABILITY_SUPPORT,EXTENSION_CAPABILITY_VERSIONS,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME,EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION,EXTENSION_COMPATIBILITY_MANIFEST_KIND,findUnsupportedExtensionCapabilities,parseExtensionCompatibilityManifest,readExtensionCompatibilityManifest,serializeExtensionCompatibilityManifest,writeExtensionCompatibilityManifest};
1
+ import{readFile,writeFile}from"node:fs/promises";import{z}from"#compiled/zod/index.js";import{join}from"node:path";import{formatValidationError}from"#runtime/validation.js";const EXTENSION_COMPATIBILITY_MANIFEST_KIND=`eve-extension`,EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION=2,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME=`_manifest.json`,EXTENSION_CAPABILITY_CONTRACTS={extension:{current:1,supported:[1],dropped:{}},tool:{current:17,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17],dropped:{15:`TaskExec replaces stageEffect with send`}},dynamicTool:{current:18,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],dropped:{}},channel:{current:6,supported:[1,2,3,4,5,6],dropped:{}},schedule:{current:3,supported:[1,2,3],dropped:{}},subagent:{current:2,supported:[1,2],dropped:{}},connection:{current:5,supported:[1,2,3,4,5],dropped:{}},hook:{current:14,supported:[10,11,12,13,14],dropped:{1:`Model identity moved from session.started runtime metadata to step.started call attribution.`,2:`Model identity moved from session.started runtime metadata to step.started call attribution.`,3:`Model identity moved from session.started runtime metadata to step.started call attribution.`,4:`Model identity moved from session.started runtime metadata to step.started call attribution.`,5:`Model identity moved from session.started runtime metadata to step.started call attribution.`,6:`Model identity moved from session.started runtime metadata to step.started call attribution.`,7:`Model identity moved from session.started runtime metadata to step.started call attribution.`,8:`Model identity moved from session.started runtime metadata to step.started call attribution.`,9:`Model identity moved from session.started runtime metadata to step.started call attribution.`}},skill:{current:1,supported:[1],dropped:{}},dynamicSkill:{current:12,supported:[1,2,3,4,5,6,7,8,9,10,11,12],dropped:{}},instructions:{current:2,supported:[1,2],dropped:{}},dynamicInstructions:{current:13,supported:[1,2,3,4,5,6,7,8,9,10,11,12,13],dropped:{}},config:{current:1,supported:[1],dropped:{}},state:{current:3,supported:[1,2,3],dropped:{}}},EXTENSION_CAPABILITY_VERSIONS=Object.fromEntries(Object.entries(EXTENSION_CAPABILITY_CONTRACTS).map(([e,t])=>[e,t.current])),EXTENSION_CAPABILITY_SUPPORT=Object.keys(EXTENSION_CAPABILITY_CONTRACTS).reduce((e,t)=>(e[t]=EXTENSION_CAPABILITY_CONTRACTS[t].supported,e),{}),extensionCompatibilityManifestV1Schema=z.object({kind:z.literal(EXTENSION_COMPATIBILITY_MANIFEST_KIND),formatVersion:z.literal(1),builtWithEve:z.string().min(1),requires:z.record(z.string(),z.number().int().positive())}).strict(),extensionCompatibilityManifestV2Schema=extensionCompatibilityManifestV1Schema.extend({formatVersion:z.literal(2),build:z.object({externalDependencies:z.array(z.string().min(1)).readonly()}).strict().optional()}),extensionCompatibilityManifestSchema=z.union([extensionCompatibilityManifestV1Schema,extensionCompatibilityManifestV2Schema]);function serializeExtensionCompatibilityManifest(e){return`${JSON.stringify(e,null,2)}\n`}function parseExtensionCompatibilityManifest(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`Extension compatibility manifest "${t}" is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}let r=extensionCompatibilityManifestSchema.safeParse(n);if(!r.success)throw Error(`Extension compatibility manifest "${t}" is invalid. ${formatValidationError(r.error)}`);return r.data}async function readExtensionCompatibilityManifest(t){return parseExtensionCompatibilityManifest(await readFile(t,`utf8`),t)}async function writeExtensionCompatibilityManifest(e,n){await writeFile(join(e,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME),serializeExtensionCompatibilityManifest(n),`utf8`)}function findUnsupportedExtensionCapabilities(e,t=EXTENSION_CAPABILITY_SUPPORT){return Object.entries(e.requires).flatMap(([e,n])=>{let r=Object.hasOwn(t,e)?t[e]??[]:[];return r.includes(n)?[]:[{capability:e,requiredVersion:n,supportedVersions:r}]}).sort((e,t)=>e.capability.localeCompare(t.capability))}export{EXTENSION_CAPABILITY_SUPPORT,EXTENSION_CAPABILITY_VERSIONS,EXTENSION_COMPATIBILITY_MANIFEST_FILENAME,EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION,EXTENSION_COMPATIBILITY_MANIFEST_KIND,findUnsupportedExtensionCapabilities,parseExtensionCompatibilityManifest,readExtensionCompatibilityManifest,serializeExtensionCompatibilityManifest,writeExtensionCompatibilityManifest};
@@ -357,6 +357,7 @@ declare const compiledAgentResourcesSchema: z.ZodObject<{
357
357
  instructions: z.ZodDefault<z.ZodReadonly<z.ZodArray<z.ZodType<CompiledInstructionsDefinition, unknown, z.core.$ZodTypeInternals<CompiledInstructionsDefinition, unknown>>>>>;
358
358
  tools: z.ZodArray<z.ZodObject<{
359
359
  description: z.ZodString;
360
+ execution: z.ZodOptional<z.ZodLiteral<"background">>;
360
361
  exportName: z.ZodOptional<z.ZodString>;
361
362
  inputSchema: z.ZodNullable<z.ZodType<import("../shared/json.ts").JsonObject, unknown, z.core.$ZodTypeInternals<import("../shared/json.ts").JsonObject, unknown>>>;
362
363
  logicalPath: z.ZodString;
@@ -453,6 +454,7 @@ declare const compiledAgentNodeManifestSchema: z.ZodObject<{
453
454
  instructions: z.ZodDefault<z.ZodReadonly<z.ZodArray<z.ZodType<CompiledInstructionsDefinition, unknown, z.core.$ZodTypeInternals<CompiledInstructionsDefinition, unknown>>>>>;
454
455
  tools: z.ZodArray<z.ZodObject<{
455
456
  description: z.ZodString;
457
+ execution: z.ZodOptional<z.ZodLiteral<"background">>;
456
458
  exportName: z.ZodOptional<z.ZodString>;
457
459
  inputSchema: z.ZodNullable<z.ZodType<import("../shared/json.ts").JsonObject, unknown, z.core.$ZodTypeInternals<import("../shared/json.ts").JsonObject, unknown>>>;
458
460
  logicalPath: z.ZodString;
@@ -583,6 +585,7 @@ export declare const compiledAgentManifestSchema: z.ZodObject<{
583
585
  instructions: z.ZodDefault<z.ZodReadonly<z.ZodArray<z.ZodType<CompiledInstructionsDefinition, unknown, z.core.$ZodTypeInternals<CompiledInstructionsDefinition, unknown>>>>>;
584
586
  tools: z.ZodArray<z.ZodObject<{
585
587
  description: z.ZodString;
588
+ execution: z.ZodOptional<z.ZodLiteral<"background">>;
586
589
  exportName: z.ZodOptional<z.ZodString>;
587
590
  inputSchema: z.ZodNullable<z.ZodType<import("../shared/json.ts").JsonObject, unknown, z.core.$ZodTypeInternals<import("../shared/json.ts").JsonObject, unknown>>>;
588
591
  logicalPath: z.ZodString;
@@ -1 +1 @@
1
- import{z}from"#compiled/zod/index.js";import{discoverDiagnosticsSummarySchema}from"#discover/diagnostics.js";import{compiledRemoteAgentNodeSchema}from"#compiler/remote-agent-node.js";import{jsonObjectSchema}from"#shared/json-schemas.js";const COMPILED_AGENT_MANIFEST_KIND=`eve-agent-compiled-manifest`,ROOT_COMPILED_AGENT_NODE_ID=`__root__`,COMPILED_AGENT_MANIFEST_VERSION=41,moduleSourceRefSchema=z.object({exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),compiledDynamicModelDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),channelMethodSchema=z.union([z.literal(`GET`),z.literal(`HEAD`),z.literal(`POST`),z.literal(`PUT`),z.literal(`PATCH`),z.literal(`DELETE`),z.literal(`OPTIONS`),z.literal(`WEBSOCKET`)]),compiledChannelCorsSchema=z.object({origin:z.union([z.literal(`*`),z.literal(`null`),z.array(z.string())]).optional(),methods:z.union([z.literal(`*`),z.array(z.string())]).optional(),allowHeaders:z.union([z.literal(`*`),z.array(z.string())]).optional(),exposeHeaders:z.union([z.literal(`*`),z.array(z.string())]).optional(),credentials:z.boolean().optional(),maxAge:z.union([z.string(),z.literal(!1)]).optional(),preflight:z.object({statusCode:z.number().int().min(100).max(599).optional()}).strict().optional()}).strict(),compiledChannelDefinitionSchema=z.object({kind:z.literal(`channel`),name:z.string(),logicalPath:z.string(),method:channelMethodSchema,urlPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional(),adapterKind:z.string().optional(),cors:compiledChannelCorsSchema.optional()}).strict(),disabledCompiledChannelEntrySchema=z.object({kind:z.literal(`disabled`),name:z.string(),logicalPath:z.string()}).strict(),compiledChannelEntrySchema=z.union([compiledChannelDefinitionSchema,disabledCompiledChannelEntrySchema]),modelRoutingSchema=z.union([z.object({kind:z.literal(`gateway`),target:z.string(),byok:z.string().optional()}).strict(),z.object({kind:z.literal(`external`),provider:z.string()}).strict()]),compiledRuntimeModelReferenceSchema=z.object({contextWindowTokens:z.number().int().positive().optional(),id:z.string(),maxOutputTokens:z.number().int().positive().optional(),source:moduleSourceRefSchema.optional(),providerOptions:z.record(z.string(),jsonObjectSchema).optional(),routing:modelRoutingSchema}).strict(),compiledAgentBuildDefinitionSchema=z.object({externalDependencies:z.array(z.string()).optional()}).strict(),compiledAgentWorkflowWorldDefinitionSchema=z.string(),compiledAgentWorkflowDefinitionSchema=z.object({world:compiledAgentWorkflowWorldDefinitionSchema.optional()}).strict(),compiledAgentCompactionDefinitionSchema=z.object({model:compiledRuntimeModelReferenceSchema.optional(),thresholdPercent:z.number().finite().min(0).max(1).optional()}).strict(),sessionTokenLimitSchema=z.union([z.number().int().positive(),z.literal(!1)]),sessionTimeoutSchema=z.union([z.number().int().positive(),z.literal(!1)]),compiledAgentLimitsDefinitionSchema=z.object({maxInputTokensPerSession:sessionTokenLimitSchema.optional(),maxOutputTokensPerSession:sessionTokenLimitSchema.optional(),sessionTimeoutMs:sessionTimeoutSchema.optional()}).strict(),compiledWorkflowToolDefinitionSchema=z.object({maxSubagents:z.number().int().positive().optional()}).strict(),compiledAgentConfigBaseFields={build:compiledAgentBuildDefinitionSchema.optional(),compaction:compiledAgentCompactionDefinitionSchema.optional(),description:z.string().optional(),experimental:z.object({instrumentationProviders:z.boolean().optional(),subagentPersistentSessions:z.boolean().optional(),tasks:z.boolean().optional(),workflow:compiledAgentWorkflowDefinitionSchema.optional()}).strict().optional(),name:z.string(),outputSchema:jsonObjectSchema.optional(),reasoning:z.enum([`provider-default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`]).optional(),source:moduleSourceRefSchema.optional(),limits:compiledAgentLimitsDefinitionSchema.optional()},compiledAgentConfigSchema=z.union([z.object({...compiledAgentConfigBaseFields,model:compiledRuntimeModelReferenceSchema}).strict(),z.object({...compiledAgentConfigBaseFields,dynamicModel:compiledDynamicModelDefinitionSchema}).strict()]),compiledInstructionsSchema=z.object({content:z.string(),name:z.string(),logicalPath:z.string(),role:z.enum([`system`,`user`]),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSkillBaseFields={name:z.string(),description:z.string(),license:z.string().optional(),markdown:z.string(),metadata:z.record(z.string(),z.string()).optional(),sourceId:z.string(),logicalPath:z.string()},compiledSkillSourceSchema=z.discriminatedUnion(`sourceKind`,[z.object({...compiledSkillBaseFields,sourceKind:z.literal(`markdown`)}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`module`),exportName:z.string().optional()}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`skill-package`),skillId:z.string(),skillFilePath:z.string(),rootPath:z.string(),assetsPath:z.string().optional(),referencesPath:z.string().optional(),scriptsPath:z.string().optional()}).strict()]),compiledScheduleDefinitionSchema=z.object({cron:z.string(),hasRun:z.boolean(),name:z.string(),logicalPath:z.string(),markdown:z.string().optional(),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSandboxDefinitionSchema=z.object({backendName:z.string().optional(),description:z.string().optional(),inheritsParent:z.boolean().optional(),exportName:z.string().optional(),logicalPath:z.string(),revalidationKey:z.string().optional(),sourceHash:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledSandboxWorkspaceSchema=z.object({logicalPath:z.string(),rootEntries:z.array(z.string()).readonly(),sourceId:z.string(),sourcePath:z.string()}).strict(),compiledWorkspaceResourceRootSchema=z.object({contentHash:z.string().optional(),logicalPath:z.string(),rootEntries:z.array(z.string()).readonly()}).strict(),compiledConnectionDefinitionSchema=z.object({connectionName:z.string(),description:z.string(),exportName:z.string().optional(),logicalPath:z.string(),protocol:z.enum([`mcp`,`openapi`]).default(`mcp`),sourceId:z.string(),sourceKind:z.literal(`module`),url:z.string(),vercelConnect:z.object({connector:z.string()}).strict().optional()}).strict(),compiledToolDefinitionSchema=z.object({description:z.string(),exportName:z.string().optional(),inputSchema:jsonObjectSchema.nullable(),logicalPath:z.string(),name:z.string(),outputSchema:jsonObjectSchema.optional(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicToolDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),extensionNamespace:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicSkillDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),extensionNamespace:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicInstructionsDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledHookDefinitionSchema=z.object({exportName:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledExtensionMountSchema=z.object({externalDependencies:z.array(z.string()).readonly(),namespace:z.string(),packageName:z.string(),packageNamespace:z.string(),sourceRoot:z.string(),mountSourceId:z.string(),mountLogicalPath:z.string()}).strict(),compiledAgentResourceFields={agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowTool:compiledWorkflowToolDefinitionSchema.optional(),webSearchProvider:z.enum([`exa`,`parallel`]).optional(),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),extensionMounts:z.array(compiledExtensionMountSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),remoteAgents:z.array(compiledRemoteAgentNodeSchema),skills:z.array(compiledSkillSourceSchema).readonly(),instructions:z.array(compiledInstructionsSchema).readonly().default([]),tools:z.array(compiledToolDefinitionSchema),workspaceResourceRoot:compiledWorkspaceResourceRootSchema},compiledAgentResourcesSchema=z.object(compiledAgentResourceFields).strict(),compiledAgentNodeManifestSchema=z.object({...compiledAgentResourceFields,config:compiledAgentConfigSchema}).strict(),compiledSubagentNodeBaseFields={entryPath:z.string(),logicalPath:z.string(),name:z.string(),nodeId:z.string(),rootPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional()},compiledDynamicSubagentDefinitionSchema=z.object({build:compiledAgentBuildDefinitionSchema.optional(),eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),logicalPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledSubagentNodeSchema=z.union([z.object({...compiledSubagentNodeBaseFields,agent:compiledAgentNodeManifestSchema,description:z.string()}).strict(),z.object({...compiledSubagentNodeBaseFields,agent:compiledAgentResourcesSchema,configResolver:compiledDynamicSubagentDefinitionSchema}).strict()]),compiledSubagentEdgeSchema=z.object({childNodeId:z.string(),parentNodeId:z.string()}).strict(),compiledAgentManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),extensionMounts:z.array(compiledExtensionMountSchema).default([]),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowTool:compiledWorkflowToolDefinitionSchema.optional(),webSearchProvider:z.enum([`exa`,`parallel`]).optional(),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),kind:z.literal(COMPILED_AGENT_MANIFEST_KIND),remoteAgents:z.array(compiledRemoteAgentNodeSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),skills:z.array(compiledSkillSourceSchema).readonly(),subagentEdges:z.array(compiledSubagentEdgeSchema),subagents:z.array(compiledSubagentNodeSchema),instructions:z.array(compiledInstructionsSchema).readonly().default([]),tools:z.array(compiledToolDefinitionSchema),version:z.literal(41),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict();function createCompiledAgentResources(e){return{agentRoot:e.agentRoot,appRoot:e.appRoot,channels:[...e.channels??[]],connections:[...e.connections??[]],diagnosticsSummary:e.diagnosticsSummary??{errors:0,warnings:0},disabledFrameworkTools:[...e.disabledFrameworkTools??[]],workflowTool:e.workflowTool===void 0?void 0:{maxSubagents:e.workflowTool.maxSubagents},webSearchProvider:e.webSearchProvider,dynamicInstructions:[...e.dynamicInstructions??[]],dynamicSkills:[...e.dynamicSkills??[]],dynamicTools:[...e.dynamicTools??[]],extensionMounts:[...e.extensionMounts??[]],hooks:[...e.hooks??[]],instructions:[...e.instructions??[]],remoteAgents:[...e.remoteAgents??[]],sandbox:e.sandbox??null,sandboxWorkspaces:[...e.sandboxWorkspaces??[]],schedules:[...e.schedules??[]],skills:[...e.skills??[]],tools:[...e.tools??[]],workspaceResourceRoot:e.workspaceResourceRoot??{logicalPath:``,rootEntries:deriveResourceRootEntries({sandboxWorkspaces:e.sandboxWorkspaces,skills:e.skills})}}}function createCompiledAgentNodeManifest(e){return{...createCompiledAgentResources(e),config:cloneCompiledAgentDefinition(e.config)}}function cloneCompiledAgentDefinition(e){let t={build:e.build===void 0?void 0:{externalDependencies:e.build.externalDependencies===void 0?void 0:[...e.build.externalDependencies]},compaction:{model:e.compaction?.model===void 0?void 0:cloneCompiledRuntimeModelReference(e.compaction.model),thresholdPercent:e.compaction?.thresholdPercent},description:e.description,experimental:e.experimental===void 0?void 0:{instrumentationProviders:e.experimental.instrumentationProviders,subagentPersistentSessions:e.experimental.subagentPersistentSessions,tasks:e.experimental.tasks,workflow:e.experimental.workflow===void 0?void 0:{world:e.experimental.workflow.world}},name:e.name,outputSchema:e.outputSchema,reasoning:e.reasoning,limits:e.limits===void 0?void 0:{maxInputTokensPerSession:e.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.limits.maxOutputTokensPerSession,sessionTimeoutMs:e.limits.sessionTimeoutMs},source:e.source===void 0?void 0:{...e.source}};return e.dynamicModel===void 0?{...t,model:cloneCompiledRuntimeModelReference(e.model)}:{...t,dynamicModel:{...e.dynamicModel}}}function deriveResourceRootEntries(e){let t=new Set;for(let n of e.sandboxWorkspaces??[])for(let e of n.rootEntries)t.add(e);return[...t].sort((e,t)=>e.localeCompare(t))}function createCompiledSubagentNodeId(e,t){return e===`__root__`?t:`${e}::${t}`}function createCompiledAgentManifest(e){return{...createCompiledAgentNodeManifest(e),kind:COMPILED_AGENT_MANIFEST_KIND,extensionMounts:[...e.extensionMounts??[]],subagentEdges:[...e.subagentEdges??[]],subagents:[...e.subagents??[]],version:41}}function cloneCompiledRuntimeModelReference(e){let t={id:e.id,routing:cloneModelRouting(e.routing)};return e.contextWindowTokens!==void 0&&(t.contextWindowTokens=e.contextWindowTokens),e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.providerOptions!==void 0&&(t.providerOptions={...e.providerOptions}),e.source!==void 0&&(t.source={...e.source}),t}function cloneModelRouting(e){return e.kind===`external`?{kind:`external`,provider:e.provider}:e.byok===void 0?{kind:`gateway`,target:e.target}:{kind:`gateway`,target:e.target,byok:e.byok}}export{COMPILED_AGENT_MANIFEST_KIND,COMPILED_AGENT_MANIFEST_VERSION,ROOT_COMPILED_AGENT_NODE_ID,compiledAgentManifestSchema,createCompiledAgentManifest,createCompiledAgentNodeManifest,createCompiledAgentResources,createCompiledSubagentNodeId,deriveResourceRootEntries};
1
+ import{z}from"#compiled/zod/index.js";import{discoverDiagnosticsSummarySchema}from"#discover/diagnostics.js";import{compiledRemoteAgentNodeSchema}from"#compiler/remote-agent-node.js";import{jsonObjectSchema}from"#shared/json-schemas.js";const COMPILED_AGENT_MANIFEST_KIND=`eve-agent-compiled-manifest`,ROOT_COMPILED_AGENT_NODE_ID=`__root__`,COMPILED_AGENT_MANIFEST_VERSION=41,moduleSourceRefSchema=z.object({exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),compiledDynamicModelDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),channelMethodSchema=z.union([z.literal(`GET`),z.literal(`HEAD`),z.literal(`POST`),z.literal(`PUT`),z.literal(`PATCH`),z.literal(`DELETE`),z.literal(`OPTIONS`),z.literal(`WEBSOCKET`)]),compiledChannelCorsSchema=z.object({origin:z.union([z.literal(`*`),z.literal(`null`),z.array(z.string())]).optional(),methods:z.union([z.literal(`*`),z.array(z.string())]).optional(),allowHeaders:z.union([z.literal(`*`),z.array(z.string())]).optional(),exposeHeaders:z.union([z.literal(`*`),z.array(z.string())]).optional(),credentials:z.boolean().optional(),maxAge:z.union([z.string(),z.literal(!1)]).optional(),preflight:z.object({statusCode:z.number().int().min(100).max(599).optional()}).strict().optional()}).strict(),compiledChannelDefinitionSchema=z.object({kind:z.literal(`channel`),name:z.string(),logicalPath:z.string(),method:channelMethodSchema,urlPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional(),adapterKind:z.string().optional(),cors:compiledChannelCorsSchema.optional()}).strict(),disabledCompiledChannelEntrySchema=z.object({kind:z.literal(`disabled`),name:z.string(),logicalPath:z.string()}).strict(),compiledChannelEntrySchema=z.union([compiledChannelDefinitionSchema,disabledCompiledChannelEntrySchema]),modelRoutingSchema=z.union([z.object({kind:z.literal(`gateway`),target:z.string(),byok:z.string().optional()}).strict(),z.object({kind:z.literal(`external`),provider:z.string()}).strict()]),compiledRuntimeModelReferenceSchema=z.object({contextWindowTokens:z.number().int().positive().optional(),id:z.string(),maxOutputTokens:z.number().int().positive().optional(),source:moduleSourceRefSchema.optional(),providerOptions:z.record(z.string(),jsonObjectSchema).optional(),routing:modelRoutingSchema}).strict(),compiledAgentBuildDefinitionSchema=z.object({externalDependencies:z.array(z.string()).optional()}).strict(),compiledAgentWorkflowWorldDefinitionSchema=z.string(),compiledAgentWorkflowDefinitionSchema=z.object({world:compiledAgentWorkflowWorldDefinitionSchema.optional()}).strict(),compiledAgentCompactionDefinitionSchema=z.object({model:compiledRuntimeModelReferenceSchema.optional(),thresholdPercent:z.number().finite().min(0).max(1).optional()}).strict(),sessionTokenLimitSchema=z.union([z.number().int().positive(),z.literal(!1)]),sessionTimeoutSchema=z.union([z.number().int().positive(),z.literal(!1)]),compiledAgentLimitsDefinitionSchema=z.object({maxInputTokensPerSession:sessionTokenLimitSchema.optional(),maxOutputTokensPerSession:sessionTokenLimitSchema.optional(),sessionTimeoutMs:sessionTimeoutSchema.optional()}).strict(),compiledWorkflowToolDefinitionSchema=z.object({maxSubagents:z.number().int().positive().optional()}).strict(),compiledAgentConfigBaseFields={build:compiledAgentBuildDefinitionSchema.optional(),compaction:compiledAgentCompactionDefinitionSchema.optional(),description:z.string().optional(),experimental:z.object({instrumentationProviders:z.boolean().optional(),subagentPersistentSessions:z.boolean().optional(),tasks:z.boolean().optional(),workflow:compiledAgentWorkflowDefinitionSchema.optional()}).strict().optional(),name:z.string(),outputSchema:jsonObjectSchema.optional(),reasoning:z.enum([`provider-default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`]).optional(),source:moduleSourceRefSchema.optional(),limits:compiledAgentLimitsDefinitionSchema.optional()},compiledAgentConfigSchema=z.union([z.object({...compiledAgentConfigBaseFields,model:compiledRuntimeModelReferenceSchema}).strict(),z.object({...compiledAgentConfigBaseFields,dynamicModel:compiledDynamicModelDefinitionSchema}).strict()]),compiledInstructionsSchema=z.object({content:z.string(),name:z.string(),logicalPath:z.string(),role:z.enum([`system`,`user`]),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSkillBaseFields={name:z.string(),description:z.string(),license:z.string().optional(),markdown:z.string(),metadata:z.record(z.string(),z.string()).optional(),sourceId:z.string(),logicalPath:z.string()},compiledSkillSourceSchema=z.discriminatedUnion(`sourceKind`,[z.object({...compiledSkillBaseFields,sourceKind:z.literal(`markdown`)}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`module`),exportName:z.string().optional()}).strict(),z.object({...compiledSkillBaseFields,sourceKind:z.literal(`skill-package`),skillId:z.string(),skillFilePath:z.string(),rootPath:z.string(),assetsPath:z.string().optional(),referencesPath:z.string().optional(),scriptsPath:z.string().optional()}).strict()]),compiledScheduleDefinitionSchema=z.object({cron:z.string(),hasRun:z.boolean(),name:z.string(),logicalPath:z.string(),markdown:z.string().optional(),sourceId:z.string(),sourceKind:z.union([z.literal(`markdown`),z.literal(`module`)])}).strict(),compiledSandboxDefinitionSchema=z.object({backendName:z.string().optional(),description:z.string().optional(),inheritsParent:z.boolean().optional(),exportName:z.string().optional(),logicalPath:z.string(),revalidationKey:z.string().optional(),sourceHash:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledSandboxWorkspaceSchema=z.object({logicalPath:z.string(),rootEntries:z.array(z.string()).readonly(),sourceId:z.string(),sourcePath:z.string()}).strict(),compiledWorkspaceResourceRootSchema=z.object({contentHash:z.string().optional(),logicalPath:z.string(),rootEntries:z.array(z.string()).readonly()}).strict(),compiledConnectionDefinitionSchema=z.object({connectionName:z.string(),description:z.string(),exportName:z.string().optional(),logicalPath:z.string(),protocol:z.enum([`mcp`,`openapi`]).default(`mcp`),sourceId:z.string(),sourceKind:z.literal(`module`),url:z.string(),vercelConnect:z.object({connector:z.string()}).strict().optional()}).strict(),compiledToolDefinitionSchema=z.object({description:z.string(),execution:z.literal(`background`).optional(),exportName:z.string().optional(),inputSchema:jsonObjectSchema.nullable(),logicalPath:z.string(),name:z.string(),outputSchema:jsonObjectSchema.optional(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicToolDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),extensionNamespace:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicSkillDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),extensionNamespace:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledDynamicInstructionsDefinitionSchema=z.object({eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledHookDefinitionSchema=z.object({exportName:z.string().optional(),logicalPath:z.string(),slug:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledExtensionMountSchema=z.object({externalDependencies:z.array(z.string()).readonly(),namespace:z.string(),packageName:z.string(),packageNamespace:z.string(),sourceRoot:z.string(),mountSourceId:z.string(),mountLogicalPath:z.string()}).strict(),compiledAgentResourceFields={agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowTool:compiledWorkflowToolDefinitionSchema.optional(),webSearchProvider:z.enum([`exa`,`parallel`]).optional(),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),extensionMounts:z.array(compiledExtensionMountSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),remoteAgents:z.array(compiledRemoteAgentNodeSchema),skills:z.array(compiledSkillSourceSchema).readonly(),instructions:z.array(compiledInstructionsSchema).readonly().default([]),tools:z.array(compiledToolDefinitionSchema),workspaceResourceRoot:compiledWorkspaceResourceRootSchema},compiledAgentResourcesSchema=z.object(compiledAgentResourceFields).strict(),compiledAgentNodeManifestSchema=z.object({...compiledAgentResourceFields,config:compiledAgentConfigSchema}).strict(),compiledSubagentNodeBaseFields={entryPath:z.string(),logicalPath:z.string(),name:z.string(),nodeId:z.string(),rootPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`),exportName:z.string().optional()},compiledDynamicSubagentDefinitionSchema=z.object({build:compiledAgentBuildDefinitionSchema.optional(),eventNames:z.array(z.string()).readonly(),exportName:z.string().optional(),logicalPath:z.string(),sourceId:z.string(),sourceKind:z.literal(`module`)}).strict(),compiledSubagentNodeSchema=z.union([z.object({...compiledSubagentNodeBaseFields,agent:compiledAgentNodeManifestSchema,description:z.string()}).strict(),z.object({...compiledSubagentNodeBaseFields,agent:compiledAgentResourcesSchema,configResolver:compiledDynamicSubagentDefinitionSchema}).strict()]),compiledSubagentEdgeSchema=z.object({childNodeId:z.string(),parentNodeId:z.string()}).strict(),compiledAgentManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),extensionMounts:z.array(compiledExtensionMountSchema).default([]),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowTool:compiledWorkflowToolDefinitionSchema.optional(),webSearchProvider:z.enum([`exa`,`parallel`]).optional(),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).default([]),hooks:z.array(compiledHookDefinitionSchema),kind:z.literal(COMPILED_AGENT_MANIFEST_KIND),remoteAgents:z.array(compiledRemoteAgentNodeSchema),sandbox:compiledSandboxDefinitionSchema.nullable(),sandboxWorkspaces:z.array(compiledSandboxWorkspaceSchema),schedules:z.array(compiledScheduleDefinitionSchema),skills:z.array(compiledSkillSourceSchema).readonly(),subagentEdges:z.array(compiledSubagentEdgeSchema),subagents:z.array(compiledSubagentNodeSchema),instructions:z.array(compiledInstructionsSchema).readonly().default([]),tools:z.array(compiledToolDefinitionSchema),version:z.literal(41),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict();function createCompiledAgentResources(e){return{agentRoot:e.agentRoot,appRoot:e.appRoot,channels:[...e.channels??[]],connections:[...e.connections??[]],diagnosticsSummary:e.diagnosticsSummary??{errors:0,warnings:0},disabledFrameworkTools:[...e.disabledFrameworkTools??[]],workflowTool:e.workflowTool===void 0?void 0:{maxSubagents:e.workflowTool.maxSubagents},webSearchProvider:e.webSearchProvider,dynamicInstructions:[...e.dynamicInstructions??[]],dynamicSkills:[...e.dynamicSkills??[]],dynamicTools:[...e.dynamicTools??[]],extensionMounts:[...e.extensionMounts??[]],hooks:[...e.hooks??[]],instructions:[...e.instructions??[]],remoteAgents:[...e.remoteAgents??[]],sandbox:e.sandbox??null,sandboxWorkspaces:[...e.sandboxWorkspaces??[]],schedules:[...e.schedules??[]],skills:[...e.skills??[]],tools:[...e.tools??[]],workspaceResourceRoot:e.workspaceResourceRoot??{logicalPath:``,rootEntries:deriveResourceRootEntries({sandboxWorkspaces:e.sandboxWorkspaces,skills:e.skills})}}}function createCompiledAgentNodeManifest(e){return{...createCompiledAgentResources(e),config:cloneCompiledAgentDefinition(e.config)}}function cloneCompiledAgentDefinition(e){let t={build:e.build===void 0?void 0:{externalDependencies:e.build.externalDependencies===void 0?void 0:[...e.build.externalDependencies]},compaction:{model:e.compaction?.model===void 0?void 0:cloneCompiledRuntimeModelReference(e.compaction.model),thresholdPercent:e.compaction?.thresholdPercent},description:e.description,experimental:e.experimental===void 0?void 0:{instrumentationProviders:e.experimental.instrumentationProviders,subagentPersistentSessions:e.experimental.subagentPersistentSessions,tasks:e.experimental.tasks,workflow:e.experimental.workflow===void 0?void 0:{world:e.experimental.workflow.world}},name:e.name,outputSchema:e.outputSchema,reasoning:e.reasoning,limits:e.limits===void 0?void 0:{maxInputTokensPerSession:e.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.limits.maxOutputTokensPerSession,sessionTimeoutMs:e.limits.sessionTimeoutMs},source:e.source===void 0?void 0:{...e.source}};return e.dynamicModel===void 0?{...t,model:cloneCompiledRuntimeModelReference(e.model)}:{...t,dynamicModel:{...e.dynamicModel}}}function deriveResourceRootEntries(e){let t=new Set;for(let n of e.sandboxWorkspaces??[])for(let e of n.rootEntries)t.add(e);return[...t].sort((e,t)=>e.localeCompare(t))}function createCompiledSubagentNodeId(e,t){return e===`__root__`?t:`${e}::${t}`}function createCompiledAgentManifest(e){return{...createCompiledAgentNodeManifest(e),kind:COMPILED_AGENT_MANIFEST_KIND,extensionMounts:[...e.extensionMounts??[]],subagentEdges:[...e.subagentEdges??[]],subagents:[...e.subagents??[]],version:41}}function cloneCompiledRuntimeModelReference(e){let t={id:e.id,routing:cloneModelRouting(e.routing)};return e.contextWindowTokens!==void 0&&(t.contextWindowTokens=e.contextWindowTokens),e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.providerOptions!==void 0&&(t.providerOptions={...e.providerOptions}),e.source!==void 0&&(t.source={...e.source}),t}function cloneModelRouting(e){return e.kind===`external`?{kind:`external`,provider:e.provider}:e.byok===void 0?{kind:`gateway`,target:e.target}:{kind:`gateway`,target:e.target,byok:e.byok}}export{COMPILED_AGENT_MANIFEST_KIND,COMPILED_AGENT_MANIFEST_VERSION,ROOT_COMPILED_AGENT_NODE_ID,compiledAgentManifestSchema,createCompiledAgentManifest,createCompiledAgentNodeManifest,createCompiledAgentResources,createCompiledSubagentNodeId,deriveResourceRootEntries};
@@ -1 +1 @@
1
- import{compileChannelDefinition}from"#compiler/normalize-channel.js";import{ROOT_COMPILED_AGENT_NODE_ID,createCompiledAgentManifest,createCompiledAgentNodeManifest,createCompiledAgentResources}from"#compiler/manifest.js";import{compileConnectionDefinition}from"#compiler/normalize-connection.js";import{compileHookEntry}from"#compiler/normalize-hook.js";import{compileInstructionsEntry}from"#compiler/normalize-instructions.js";import{compileScheduleDefinition}from"#compiler/normalize-schedule.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileToolEntry}from"#compiler/normalize-tool.js";import{mountRefNamespace,packageStateNamespace}from"#discover/extensions.js";import{createCompiledRuntimeModelCatalogLoader}from"#compiler/model-catalog.js";import{compileAgentConfig}from"#compiler/normalize-agent-config.js";import{compileExtensionContributions,composeAgentSubagentSources}from"#compiler/normalize-extension.js";import{compileSandboxDefinition}from"#compiler/normalize-sandbox.js";import{compileSubagentGraph}from"#compiler/normalize-subagent.js";async function compileAgentManifest(e){let r={modelCatalog:createCompiledRuntimeModelCatalogLoader(e.appRoot)},i=await compileAgentNodeManifest(e,r),a=await compileSubagentGraph({appRoot:e.appRoot,compileAgentNodeManifest,compileAgentResources,context:r,externalDependencies:i.config.build?.externalDependencies??[],parentAgentRoot:e.agentRoot,parentNodeId:ROOT_COMPILED_AGENT_NODE_ID,subagents:composeAgentSubagentSources(e)});return createCompiledAgentManifest({...i,extensionMounts:i.extensionMounts,remoteAgents:a.remoteAgents,subagentEdges:a.edges,subagents:a.nodes})}async function compileAgentNodeManifest(e,t,n={}){let i=Object.hasOwn(n,`agentConfigDefinition`)?await compileAgentConfig(e,t,{definition:n.agentConfigDefinition}):await compileAgentConfig(e,t);if(n.allowRootOnlyConfig===!1&&i.experimental?.workflow!==void 0)throw Error(`Workflow runtime configuration is only supported on the root agent config. Remove "experimental.workflow" from "${e.agentId}".`);if(n.allowRootOnlyConfig===!1&&i.experimental?.tasks!==void 0)throw Error(`Background tasks are only supported on the root agent config. Remove "experimental.tasks" from "${e.agentId}".`);let a=mergeExternalDependencies(n.externalDependencies,i.build?.externalDependencies,e.resolvedExtensions.flatMap(e=>e.externalDependencies)),o=a.length===0?i:{...i,build:{...i.build,externalDependencies:a}};return createCompiledAgentNodeManifest({...await compileAgentResources(e,t,{externalDependencies:a}),config:o})}async function compileAgentResources(t,n,r={}){let s=[...r.externalDependencies??[]],c=await Promise.all(t.tools.map(e=>compileToolEntry(t.agentRoot,e,{externalDependencies:s}))),l=[],u=[],d=[],f,p;for(let e of c)e.kind===`tool`?l.push(e.definition):e.kind===`dynamic-tool`?u.push(e.definition):e.kind===`workflow-tool`?f={maxSubagents:e.maxSubagents}:e.kind===`web-search-tool`?p=e.provider:d.push(e.name);let m=(await Promise.all(t.channels.map(n=>compileChannelDefinition(t.agentRoot,n,{externalDependencies:s})))).flat(),h=await Promise.all(t.skills.map(e=>compileSkillSource(t.agentRoot,e,{externalDependencies:s}))),g=[],_=[];for(let e of h)e.kind===`skill`?g.push(e.definition):_.push(e.definition);let v=await Promise.all(t.instructions.map(e=>compileInstructionsEntry(t.agentRoot,e,{externalDependencies:s}))),y=[],b=[];for(let e of v)e.kind===`instructions`?y.push(e.definition):b.push(e.definition);let x=await Promise.all(t.connections.map(e=>compileConnectionDefinition(t.agentRoot,e,{externalDependencies:s}))),S=t.hooks.map(e=>compileHookEntry(e)),C=await Promise.all(t.schedules.map(e=>compileScheduleDefinition(t.agentRoot,e,{externalDependencies:s}))),w=new Set(l.map(e=>e.name)),T=new Set(u.map(e=>e.slug)),E=new Set(x.map(e=>e.connectionName)),D=new Set(g.map(e=>e.name)),O=[];for(let e of[...t.resolvedExtensions].sort((e,t)=>e.namespace.localeCompare(t.namespace))){let r=await compileExtensionContributions({mount:e,context:n,consumerAgentRoot:t.agentRoot,externalDependencies:s});m.push(...r.channels);for(let e of r.tools)w.has(e.name)||(w.add(e.name),l.push(e));for(let e of r.dynamicTools)T.has(e.slug)||(T.add(e.slug),u.push(e));for(let e of r.connections)E.has(e.connectionName)||(E.add(e.connectionName),x.push(e));for(let e of r.skills)D.has(e.name)||(D.add(e.name),g.push(e));C.push(...r.schedules),S.push(...r.hooks),_.push(...r.dynamicSkills),b.push(...r.dynamicInstructions),O.push(...r.instructions)}let k=[...y,...O];return createCompiledAgentResources({agentRoot:t.agentRoot,appRoot:t.appRoot,channels:m,extensionMounts:compileExtensionMounts(t),connections:x,diagnosticsSummary:t.diagnosticsSummary,disabledFrameworkTools:d,workflowTool:f,webSearchProvider:p,dynamicSkills:_,dynamicTools:u,hooks:S,sandbox:t.sandbox===null?null:await compileSandboxDefinition(t.agentRoot,t.sandbox,{externalDependencies:s}),sandboxWorkspaces:t.sandboxWorkspaces.map(e=>({logicalPath:e.logicalPath,rootEntries:[...e.rootEntries],sourceId:e.sourceId,sourcePath:e.sourcePath})),schedules:C,dynamicInstructions:b,skills:g,instructions:k,tools:l})}function compileExtensionMounts(e){return e.resolvedExtensions.map(t=>{let n=e.extensions.find(e=>mountRefNamespace(e.logicalPath)===t.namespace);return{externalDependencies:[...t.externalDependencies],namespace:t.namespace,packageName:t.packageName,packageNamespace:packageStateNamespace(t.packageName),sourceRoot:t.sourceRoot,mountSourceId:n?.sourceId??`extensions/${t.namespace}`,mountLogicalPath:n?.logicalPath??`extensions/${t.namespace}`}})}function mergeExternalDependencies(...e){let t=new Set;for(let n of e)for(let e of n??[])t.add(e);return[...t]}export{compileAgentManifest};
1
+ import{compileChannelDefinition}from"#compiler/normalize-channel.js";import{ROOT_COMPILED_AGENT_NODE_ID,createCompiledAgentManifest,createCompiledAgentNodeManifest,createCompiledAgentResources}from"#compiler/manifest.js";import{compileConnectionDefinition}from"#compiler/normalize-connection.js";import{compileHookEntry}from"#compiler/normalize-hook.js";import{compileInstructionsEntry}from"#compiler/normalize-instructions.js";import{compileScheduleDefinition}from"#compiler/normalize-schedule.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileToolEntry}from"#compiler/normalize-tool.js";import{mountRefNamespace,packageStateNamespace}from"#discover/extensions.js";import{createCompiledRuntimeModelCatalogLoader}from"#compiler/model-catalog.js";import{compileAgentConfig}from"#compiler/normalize-agent-config.js";import{compileExtensionContributions,composeAgentSubagentSources}from"#compiler/normalize-extension.js";import{compileSandboxDefinition}from"#compiler/normalize-sandbox.js";import{compileSubagentGraph}from"#compiler/normalize-subagent.js";async function compileAgentManifest(e){let r={modelCatalog:createCompiledRuntimeModelCatalogLoader(e.appRoot)},i=await compileAgentNodeManifest(e,r),a=await compileSubagentGraph({appRoot:e.appRoot,compileAgentNodeManifest,compileAgentResources,context:r,externalDependencies:i.config.build?.externalDependencies??[],parentAgentRoot:e.agentRoot,parentNodeId:ROOT_COMPILED_AGENT_NODE_ID,subagents:composeAgentSubagentSources(e)}),o=[i,...a.nodes.map(e=>e.agent)].flatMap(e=>e.tools).find(e=>e.execution===`background`);if(o!==void 0&&i.config.experimental?.tasks!==!0)throw Error(`Background tool "${o.name}" requires experimental.tasks: true in the root agent config.`);return createCompiledAgentManifest({...i,extensionMounts:i.extensionMounts,remoteAgents:a.remoteAgents,subagentEdges:a.edges,subagents:a.nodes})}async function compileAgentNodeManifest(e,t,n={}){let i=Object.hasOwn(n,`agentConfigDefinition`)?await compileAgentConfig(e,t,{definition:n.agentConfigDefinition}):await compileAgentConfig(e,t);if(n.allowRootOnlyConfig===!1&&i.experimental?.workflow!==void 0)throw Error(`Workflow runtime configuration is only supported on the root agent config. Remove "experimental.workflow" from "${e.agentId}".`);if(n.allowRootOnlyConfig===!1&&i.experimental?.tasks!==void 0)throw Error(`Background tasks are only supported on the root agent config. Remove "experimental.tasks" from "${e.agentId}".`);let a=mergeExternalDependencies(n.externalDependencies,i.build?.externalDependencies,e.resolvedExtensions.flatMap(e=>e.externalDependencies)),o=a.length===0?i:{...i,build:{...i.build,externalDependencies:a}};return createCompiledAgentNodeManifest({...await compileAgentResources(e,t,{externalDependencies:a}),config:o})}async function compileAgentResources(t,n,r={}){let s=[...r.externalDependencies??[]],c=await Promise.all(t.tools.map(e=>compileToolEntry(t.agentRoot,e,{externalDependencies:s}))),l=[],u=[],d=[],f,p;for(let e of c)e.kind===`tool`?l.push(e.definition):e.kind===`dynamic-tool`?u.push(e.definition):e.kind===`workflow-tool`?f={maxSubagents:e.maxSubagents}:e.kind===`web-search-tool`?p=e.provider:d.push(e.name);let m=(await Promise.all(t.channels.map(n=>compileChannelDefinition(t.agentRoot,n,{externalDependencies:s})))).flat(),h=await Promise.all(t.skills.map(e=>compileSkillSource(t.agentRoot,e,{externalDependencies:s}))),g=[],_=[];for(let e of h)e.kind===`skill`?g.push(e.definition):_.push(e.definition);let v=await Promise.all(t.instructions.map(e=>compileInstructionsEntry(t.agentRoot,e,{externalDependencies:s}))),y=[],b=[];for(let e of v)e.kind===`instructions`?y.push(e.definition):b.push(e.definition);let x=await Promise.all(t.connections.map(e=>compileConnectionDefinition(t.agentRoot,e,{externalDependencies:s}))),S=t.hooks.map(e=>compileHookEntry(e)),C=await Promise.all(t.schedules.map(e=>compileScheduleDefinition(t.agentRoot,e,{externalDependencies:s}))),w=new Set(l.map(e=>e.name)),T=new Set(u.map(e=>e.slug)),E=new Set(x.map(e=>e.connectionName)),D=new Set(g.map(e=>e.name)),O=[];for(let e of[...t.resolvedExtensions].sort((e,t)=>e.namespace.localeCompare(t.namespace))){let r=await compileExtensionContributions({mount:e,context:n,consumerAgentRoot:t.agentRoot,externalDependencies:s});m.push(...r.channels);for(let e of r.tools)w.has(e.name)||(w.add(e.name),l.push(e));for(let e of r.dynamicTools)T.has(e.slug)||(T.add(e.slug),u.push(e));for(let e of r.connections)E.has(e.connectionName)||(E.add(e.connectionName),x.push(e));for(let e of r.skills)D.has(e.name)||(D.add(e.name),g.push(e));C.push(...r.schedules),S.push(...r.hooks),_.push(...r.dynamicSkills),b.push(...r.dynamicInstructions),O.push(...r.instructions)}let k=[...y,...O];return createCompiledAgentResources({agentRoot:t.agentRoot,appRoot:t.appRoot,channels:m,extensionMounts:compileExtensionMounts(t),connections:x,diagnosticsSummary:t.diagnosticsSummary,disabledFrameworkTools:d,workflowTool:f,webSearchProvider:p,dynamicSkills:_,dynamicTools:u,hooks:S,sandbox:t.sandbox===null?null:await compileSandboxDefinition(t.agentRoot,t.sandbox,{externalDependencies:s}),sandboxWorkspaces:t.sandboxWorkspaces.map(e=>({logicalPath:e.logicalPath,rootEntries:[...e.rootEntries],sourceId:e.sourceId,sourcePath:e.sourcePath})),schedules:C,dynamicInstructions:b,skills:g,instructions:k,tools:l})}function compileExtensionMounts(e){return e.resolvedExtensions.map(t=>{let n=e.extensions.find(e=>mountRefNamespace(e.logicalPath)===t.namespace);return{externalDependencies:[...t.externalDependencies],namespace:t.namespace,packageName:t.packageName,packageNamespace:packageStateNamespace(t.packageName),sourceRoot:t.sourceRoot,mountSourceId:n?.sourceId??`extensions/${t.namespace}`,mountLogicalPath:n?.logicalPath??`extensions/${t.namespace}`}})}function mergeExternalDependencies(...e){let t=new Set;for(let n of e)for(let e of n??[])t.add(e);return[...t]}export{compileAgentManifest};
@@ -1 +1 @@
1
- import{stripLogicalPathExtension}from"#discover/filesystem.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeToolDefinition}from"#internal/authored-definition/schema-backed.js";async function compileToolEntry(e,t,n={}){let r=normalizeToolDefinition(await loadModuleBackedDefinition({agentRoot:e,externalDependencies:n.externalDependencies,kind:`tool`,source:t}),`Expected the tool export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public eve shape.`),i=stripLogicalPathExtension(t.logicalPath).replace(/^tools\//,``).replaceAll(`/`,`-`);if(r.kind===`disabled`)return{kind:`disabled`,name:i};if(r.kind===`workflow-tool`)return{kind:`workflow-tool`,maxSubagents:r.maxSubagents};if(r.kind===`web-search-tool`){if(i!==`web_search`)throw Error(`The webSearch() definition must be exported from "tools/web_search.ts", not "${t.logicalPath}".`);return{kind:`web-search-tool`,provider:r.provider}}return r.kind===`dynamic-tool`?{kind:`dynamic-tool`,definition:{eventNames:[...r.eventNames],exportName:t.exportName,logicalPath:t.logicalPath,slug:i,sourceId:t.sourceId,sourceKind:`module`}}:{kind:`tool`,definition:{description:r.definition.description,exportName:t.exportName,inputSchema:r.definition.inputSchema??null,logicalPath:t.logicalPath,name:i,outputSchema:r.definition.outputSchema,sourceId:t.sourceId,sourceKind:`module`}}}export{compileToolEntry};
1
+ import{stripLogicalPathExtension}from"#discover/filesystem.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeToolDefinition}from"#internal/authored-definition/schema-backed.js";async function compileToolEntry(e,t,n={}){let r=normalizeToolDefinition(await loadModuleBackedDefinition({agentRoot:e,externalDependencies:n.externalDependencies,kind:`tool`,source:t}),`Expected the tool export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public eve shape.`),i=stripLogicalPathExtension(t.logicalPath).replace(/^tools\//,``).replaceAll(`/`,`-`);if(r.kind===`disabled`)return{kind:`disabled`,name:i};if(r.kind===`workflow-tool`)return{kind:`workflow-tool`,maxSubagents:r.maxSubagents};if(r.kind===`web-search-tool`){if(i!==`web_search`)throw Error(`The webSearch() definition must be exported from "tools/web_search.ts", not "${t.logicalPath}".`);return{kind:`web-search-tool`,provider:r.provider}}return r.kind===`dynamic-tool`?{kind:`dynamic-tool`,definition:{eventNames:[...r.eventNames],exportName:t.exportName,logicalPath:t.logicalPath,slug:i,sourceId:t.sourceId,sourceKind:`module`}}:{kind:`tool`,definition:{description:r.definition.description,execution:r.definition.execution,exportName:t.exportName,inputSchema:r.definition.inputSchema??null,logicalPath:t.logicalPath,name:i,outputSchema:r.definition.outputSchema,sourceId:t.sourceId,sourceKind:`module`}}}export{compileToolEntry};
@@ -1,12 +1,12 @@
1
1
  import type { HarnessToolDefinition } from "#harness/execute-tool.js";
2
2
  import type { HarnessToolMap } from "#harness/types.js";
3
3
  import type { ContextReader } from "#context/key.js";
4
+ import { type DurableDynamicToolMetadata } from "#context/keys.js";
5
+ /** Reconstructs every callback exclusively from its durable descriptor. */
6
+ export declare function replayDynamicTools(metadata: readonly DurableDynamicToolMetadata[]): HarnessToolDefinition[];
4
7
  /**
5
- * Builds live dynamic tool definitions. Narrower scopes appear first
6
- * so they win on name collision (the tool-loop uses `??=` for dedup).
7
- *
8
- * Step tools are live closures (re-resolved every step via
9
- * `LiveStepToolsKey`). Session and turn tools replay durable metadata.
8
+ * Builds live dynamic tool definitions. Narrower scopes appear first so they
9
+ * win on name collision (the tool loop uses `??=` for deduplication).
10
10
  */
11
11
  export declare function buildResponseAuthorizationTools(input: {
12
12
  readonly authoredTools: HarnessToolMap;
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{LiveStepToolsKey,SessionDynamicToolMetadataKey,TurnDynamicToolMetadataKey}from"#context/keys.js";import{toInputSchema,toOutputSchema}from"#shared/tool-schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";const log=createLogger(`dynamic-tools`);function lookupStepFunction(e){try{let t=globalThis[Symbol.for(`@workflow/core//registeredSteps`)];return t===void 0?null:t.get(e)||null}catch{return null}}function replayTools(e){let t=[];for(let n of e){if(!n.executeStepFnName||!n.closureVars){log.warn(`Dynamic tool "${n.name}" has no registered step function — skipping on this step. The bundler transform may not have processed this tool file.`);continue}let e=lookupStepFunction(n.executeStepFnName);if(!e){log.warn(`Dynamic tool "${n.name}" references step function "${n.executeStepFnName}" which is not registered — skipping on this step.`);continue}t.push({description:n.description,execute:createToolExecuteWithAuth({scope:n.name,execute:(t,r)=>e(n.closureVars,t,r)}),inputSchema:toInputSchema(n.inputSchema),name:n.name,approval:buildReplayedApproval(n),outputSchema:toOutputSchema(n.outputSchema)})}return t}function buildReplayedApproval(e){if(e.approvalStepFnName===void 0)return;let t=lookupStepFunction(e.approvalStepFnName);if(t===null)return log.warn(`Dynamic tool "${e.name}" references approval function "${e.approvalStepFnName}" which is not registered — requiring approval by default.`),()=>`user-approval`;let policy=async n=>await t(e.closureVars??{},n);if(e.approvalResponseStepFnName===void 0)return policy;let n=lookupStepFunction(e.approvalResponseStepFnName);return n===null?(log.warn(`Dynamic tool "${e.name}" references response authorizer "${e.approvalResponseStepFnName}" which is not registered — rejecting responses.`),{request:policy,response:async()=>({reason:`Approval response authorization is temporarily unavailable.`,status:`rejected`})}):{request:policy,response:async t=>await n(e.closureVars??{},t)}}function buildResponseAuthorizationTools(e){let t=new Map;for(let n of e.context===void 0?[]:buildDynamicTools(e.context))t.has(n.name)||t.set(n.name,n);for(let[n,r]of e.authoredTools)t.has(n)||t.set(n,r);return t}function buildDynamicTools(e){let i=e.get(LiveStepToolsKey)??[],a=replayTools(e.get(TurnDynamicToolMetadataKey)??[]),o=replayTools(e.get(SessionDynamicToolMetadataKey)??[]);return[...i,...a,...o]}export{buildDynamicTools,buildResponseAuthorizationTools};
1
+ import{createLogger}from"#internal/logging.js";import{SessionDynamicToolMetadataKey,StepDynamicToolMetadataKey,TurnDynamicToolMetadataKey}from"#context/keys.js";import{toInputSchema,toOutputSchema}from"#shared/tool-schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";const log=createLogger(`dynamic-tools`);function lookupStepFunction(e){return globalThis[Symbol.for(`@workflow/core//registeredSteps`)]?.get(e)||null}function missingCallbackError(e,t,n){return Error(`Dynamic tool "${e.name}" cannot replay its ${t} callback because step function "${n.stepId}" is not registered. Rebuild the agent and ensure the callback is created at module scope or transformed from authored source.`)}function buildReplayedApproval(e){let t=e.callbacks.approvalRequest;if(t===void 0)return;let n=lookupStepFunction(t.stepId),r=n===null?async()=>(log.error(missingCallbackError(e,`approvalRequest`,t).message),`user-approval`):async e=>await n(t.closure,e),i=e.callbacks.approvalResponse;if(i===void 0)return r;let a=lookupStepFunction(i.stepId);return{request:r,response:a===null?async()=>{let t=missingCallbackError(e,`approvalResponse`,i);return log.error(t.message),{reason:t.message,status:`rejected`}}:async e=>await a(i.closure,e)}}function replayDynamicTools(e){return e.map(e=>{let t=e.callbacks.execute,n=lookupStepFunction(t.stepId),r=e.callbacks.toModelOutput,s=r===void 0?void 0:lookupStepFunction(r.stepId);return{description:e.description,execute:createToolExecuteWithAuth({scope:e.name,execute:(r,i)=>{if(n===null)throw missingCallbackError(e,`execute`,t);return n(t.closure,r,i)}}),inputSchema:toInputSchema(e.inputSchema),name:e.name,approval:buildReplayedApproval(e),outputSchema:toOutputSchema(e.outputSchema),...r===void 0?{}:{toModelOutput:t=>{if(s===null)throw missingCallbackError(e,`toModelOutput`,r);return s(r.closure,t)}}}})}function buildResponseAuthorizationTools(e){let t=new Map;for(let n of e.context===void 0?[]:buildDynamicTools(e.context))t.has(n.name)||t.set(n.name,n);for(let[n,r]of e.authoredTools)t.has(n)||t.set(n,r);return t}function buildDynamicTools(e){let i=replayDynamicTools(e.get(StepDynamicToolMetadataKey)??[]),a=replayDynamicTools(e.get(TurnDynamicToolMetadataKey)??[]),o=replayDynamicTools(e.get(SessionDynamicToolMetadataKey)??[]);return[...i,...a,...o]}export{buildDynamicTools,buildResponseAuthorizationTools,replayDynamicTools};
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,TurnDynamicSubagentSelectionsKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{createPreparedRuntimeSubagentTool,getSubagentToolInputJsonSchema}from"#runtime/subagents/registry.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{normalizeDynamicRemoteAgentConfig}from"#runtime/subagents/dynamic-remote-agent-config.js";const log=createLogger(`dynamic-subagents`),ALLOWED_DYNAMIC_SUBAGENT_EVENTS=new Set([`session.started`,`turn.started`]);async function resolveSelections(e){let t=getSubagentToolInputJsonSchema(e.persistentSessions),n=await Promise.allSettled(e.resolvers.map(async n=>{let r=n.events[e.event.type];if(r===void 0)return[n.nodeId,null];let i=await r(e.event,buildResolveContext(e.ctx,e.messages));if(i==null)return[n.nodeId,null];if(isRemoteAgentDefinition(i)){let e=await normalizeDynamicRemoteAgentConfig({name:n.name,value:i}),r=createPreparedRuntimeSubagentTool({description:e.description,kind:`remote`,logicalPath:n.logicalPath,name:n.name,nodeId:n.nodeId,outputSchema:e.outputSchema,path:e.path,sourceId:n.sourceId,sourceKind:n.sourceKind,url:e.url},t);return[n.nodeId,{kind:`remote`,prepared:r,remoteAgent:e}]}let o=await normalizeDynamicSubagentAgentConfig({name:n.name,state:e.ctx,value:i}),c=createPreparedRuntimeSubagentTool({description:o.description,kind:`subagent`,logicalPath:n.logicalPath,name:n.name,nodeId:n.nodeId,sourceId:n.sourceId,sourceKind:n.sourceKind},t);return[n.nodeId,{agentConfig:o,kind:`subagent`,prepared:c}]})),r={};for(let t=0;t<n.length;t+=1){let a=n[t],o=e.resolvers[t];if(a.status===`rejected`){log.error(`Dynamic subagent resolver (${e.event.type}) threw — omitting subagent.`,{error:toErrorMessage(a.reason),subagentName:o.name}),r[o.nodeId]=null;continue}r[a.value[0]]=a.value[1]}return r}function isRemoteAgentDefinition(e){return typeof e==`object`&&!!e&&e.kind===`remote`}async function dispatchDynamicSubagentEvent(e){if(!ALLOWED_DYNAMIC_SUBAGENT_EVENTS.has(e.event.type))return;let t=e.resolvers.filter(t=>t.eventNames.includes(e.event.type)),i=await resolveSelections({...e,resolvers:t});e.event.type===`session.started`?e.ctx.set(SessionDynamicSubagentSelectionsKey,i):e.ctx.set(TurnDynamicSubagentSelectionsKey,i)}async function refreshDynamicSessionSubagentsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicSubagentRuntimeRevisionKey)===e.runtimeRevision)return;let r=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),i=await resolveSelections({...e,resolvers:r});e.ctx.set(SessionDynamicSubagentSelectionsKey,i),e.ctx.set(SessionDynamicSubagentRuntimeRevisionKey,e.runtimeRevision)}function buildDynamicSubagentTools(e){let t=e.get(SessionDynamicSubagentSelectionsKey)??{},i=e.get(TurnDynamicSubagentSelectionsKey)??{},a={...t,...i},s=[],c=new Set;for(let e of Object.values(a))if(e!==null){if(c.has(e.prepared.name))throw Error(`Found multiple active dynamic subagents named "${e.prepared.name}". Subagent names must be unique at runtime.`);c.add(e.prepared.name),s.push(createHarnessDelegationToolDefinition(e.prepared))}return s}function getDynamicSubagentSelection(e,t){let i=e.get(TurnDynamicSubagentSelectionsKey)??{};return Object.hasOwn(i,t)?i[t]??void 0:(e.get(SessionDynamicSubagentSelectionsKey)??{})[t]??void 0}export{buildDynamicSubagentTools,dispatchDynamicSubagentEvent,getDynamicSubagentSelection,refreshDynamicSessionSubagentsForRuntimeRevision};
1
+ import{createLogger}from"#internal/logging.js";import{SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,TasksEnabledKey,TurnDynamicSubagentSelectionsKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{createPreparedRuntimeSubagentTool,getSubagentToolInputJsonSchema}from"#runtime/subagents/registry.js";import{normalizeDynamicSubagentAgentConfig}from"#runtime/subagents/dynamic-agent-config.js";import{normalizeDynamicRemoteAgentConfig}from"#runtime/subagents/dynamic-remote-agent-config.js";const log=createLogger(`dynamic-subagents`),ALLOWED_DYNAMIC_SUBAGENT_EVENTS=new Set([`session.started`,`turn.started`]);async function resolveSelections(e){let t=getSubagentToolInputJsonSchema(e.persistentSessions),n=await Promise.allSettled(e.resolvers.map(async n=>{let r=n.events[e.event.type];if(r===void 0)return[n.nodeId,null];let i=await r(e.event,buildResolveContext(e.ctx,e.messages));if(i==null)return[n.nodeId,null];if(isRemoteAgentDefinition(i)){let e=await normalizeDynamicRemoteAgentConfig({name:n.name,value:i}),r=createPreparedRuntimeSubagentTool({description:e.description,kind:`remote`,logicalPath:n.logicalPath,name:n.name,nodeId:n.nodeId,outputSchema:e.outputSchema,path:e.path,sourceId:n.sourceId,sourceKind:n.sourceKind,url:e.url},t);return[n.nodeId,{kind:`remote`,prepared:r,remoteAgent:e}]}let a=await normalizeDynamicSubagentAgentConfig({name:n.name,state:e.ctx,value:i}),s=createPreparedRuntimeSubagentTool({description:a.description,kind:`subagent`,logicalPath:n.logicalPath,name:n.name,nodeId:n.nodeId,sourceId:n.sourceId,sourceKind:n.sourceKind},t);return[n.nodeId,{agentConfig:a,kind:`subagent`,prepared:s}]})),r={};for(let t=0;t<n.length;t+=1){let i=n[t],o=e.resolvers[t];if(i.status===`rejected`){log.error(`Dynamic subagent resolver (${e.event.type}) threw — omitting subagent.`,{error:toErrorMessage(i.reason),subagentName:o.name}),r[o.nodeId]=null;continue}r[i.value[0]]=i.value[1]}return r}function isRemoteAgentDefinition(e){return typeof e==`object`&&!!e&&e.kind===`remote`}async function dispatchDynamicSubagentEvent(e){if(!ALLOWED_DYNAMIC_SUBAGENT_EVENTS.has(e.event.type))return;let t=e.resolvers.filter(t=>t.eventNames.includes(e.event.type)),r=await resolveSelections({...e,resolvers:t});e.event.type===`session.started`?e.ctx.set(SessionDynamicSubagentSelectionsKey,r):e.ctx.set(TurnDynamicSubagentSelectionsKey,r)}async function refreshDynamicSessionSubagentsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicSubagentRuntimeRevisionKey)===e.runtimeRevision)return;let r=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),i=await resolveSelections({...e,resolvers:r});e.ctx.set(SessionDynamicSubagentSelectionsKey,i),e.ctx.set(SessionDynamicSubagentRuntimeRevisionKey,e.runtimeRevision)}function buildDynamicSubagentTools(e){let t=e.get(SessionDynamicSubagentSelectionsKey)??{},a=e.get(TurnDynamicSubagentSelectionsKey)??{},o={...t,...a},c=[],l=new Set;for(let t of Object.values(o))if(t!==null){if(l.has(t.prepared.name))throw Error(`Found multiple active dynamic subagents named "${t.prepared.name}". Subagent names must be unique at runtime.`);l.add(t.prepared.name),c.push(e.get(TasksEnabledKey)===!0?createBackgroundSubagentHarnessDefinition(t.prepared):createHarnessDelegationToolDefinition(t.prepared))}return c}function getDynamicSubagentSelection(e,t){let r=e.get(TurnDynamicSubagentSelectionsKey)??{};return Object.hasOwn(r,t)?r[t]??void 0:(e.get(SessionDynamicSubagentSelectionsKey)??{})[t]??void 0}export{buildDynamicSubagentTools,dispatchDynamicSubagentEvent,getDynamicSubagentSelection,refreshDynamicSessionSubagentsForRuntimeRevision};
@@ -1,22 +1,14 @@
1
1
  import type { ModelMessage } from "ai";
2
+ import type { ContextContainer } from "#context/container.js";
3
+ import { type DurableDynamicToolMetadata } from "#context/keys.js";
2
4
  import type { HarnessToolDefinition } from "#harness/execute-tool.js";
3
- import type { UnstampedMessageStreamEvent, SessionStartedStreamEvent } from "#protocol/message.js";
5
+ import type { SessionStartedStreamEvent, UnstampedMessageStreamEvent } from "#protocol/message.js";
6
+ import type { DynamicToolEntry } from "#shared/dynamic-tool-definition.js";
7
+ import { type DurableDynamicToolCallbacks } from "#shared/durable-dynamic-tool-callbacks.js";
4
8
  import type { ResolvedDynamicToolResolver } from "#runtime/types.js";
5
- import type { ContextContainer } from "#context/container.js";
6
- import type { DurableDynamicToolMetadata } from "#context/keys.js";
7
- /**
8
- * Reconstructs tool definitions from durable metadata using
9
- * registered step functions. No resolver re-invocation — the
10
- * execute function is looked up by step ID and called with stored
11
- * closure vars.
12
- */
9
+ /** Kept as the session-specific entry point for existing runtime consumers. */
13
10
  export declare function replayDynamicSessionTools(metadata: readonly DurableDynamicToolMetadata[], _resolvers: readonly ResolvedDynamicToolResolver[]): readonly HarnessToolDefinition[];
14
- /**
15
- * Dispatches a stream event to dynamic tool resolvers. Each
16
- * resolver's metadata replaces its slot (by slug) in the
17
- * scope-appropriate durable key. The tool-loop calls
18
- * {@link buildDynamicTools} to assemble the effective toolset.
19
- */
11
+ export declare function validateDurableDynamicToolCallbacks(name: string, entry: DynamicToolEntry): DurableDynamicToolCallbacks;
20
12
  /** Resolves step-scoped tools once for one internal policy/model pass. */
21
13
  export declare function resolveStepDynamicTools(input: {
22
14
  readonly ctx: ContextContainer;
@@ -30,11 +22,7 @@ export declare function dispatchDynamicToolEvent(input: {
30
22
  readonly event: UnstampedMessageStreamEvent;
31
23
  readonly messages: readonly ModelMessage[];
32
24
  }): Promise<void>;
33
- /**
34
- * Re-resolves session-scoped dynamic tools when a durable session reaches a
35
- * different runtime revision. The refresh is internal: lifecycle consumers
36
- * still observe exactly one `session.started` event for the session.
37
- */
25
+ /** Refreshes session-scoped definitions only when the deployed code revision changes. */
38
26
  export declare function refreshDynamicSessionToolsForRuntimeRevision(input: {
39
27
  readonly ctx: ContextContainer;
40
28
  readonly resolvers: readonly ResolvedDynamicToolResolver[];
@@ -42,10 +30,3 @@ export declare function refreshDynamicSessionToolsForRuntimeRevision(input: {
42
30
  readonly messages: readonly ModelMessage[];
43
31
  readonly runtimeRevision: string;
44
32
  }): Promise<void>;
45
- /** Re-registers missing process-local session callbacks in a fresh runtime. */
46
- export declare function hydrateDynamicSessionTools(input: {
47
- readonly ctx: ContextContainer;
48
- readonly resolvers: readonly ResolvedDynamicToolResolver[];
49
- readonly event: SessionStartedStreamEvent;
50
- readonly messages: readonly ModelMessage[];
51
- }): Promise<void>;
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{LiveStepToolsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,TurnDynamicToolMetadataKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{serializeInputSchema,serializeOutputSchema,toInputSchema,toOutputSchema}from"#shared/tool-schema.js";import{ALLOWED_DYNAMIC_TOOL_EVENTS,isBrandedToolEntry}from"#shared/dynamic-tool-definition.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{resolveApprovalPolicy}from"#public/definitions/approval.js";const log=createLogger(`dynamic-tools`);function toHarnessToolDefinition(e,t){return{description:t.description,execute:createToolExecuteWithAuth({scope:e,execute:(e,n)=>t.execute(e,n)}),inputSchema:toInputSchema(t.inputSchema),name:e,approval:t.approval,outputSchema:toOutputSchema(t.outputSchema),...t.toModelOutput===void 0?{}:{toModelOutput:t.toModelOutput}}}function qualifyDynamicToolNames(e,t,n){let r=Object.keys(n),i=[];if(r.length===0)return i;if(t)return i.push({name:e.slug,entryKey:r[0],entry:n[r[0]]}),i;let a=e.extensionNamespace===void 0?``:`${e.extensionNamespace}__`;for(let e of r)i.push({name:`${a}${e}`,entryKey:e,entry:n[e]});return i}function replayDynamicSessionTools(e,t){let n=[];for(let t of e){if(!t.executeStepFnName||!t.closureVars){log.warn(`Dynamic tool "${t.name}" has no registered step function — skipping on this step. The bundler transform may not have processed this tool file.`);continue}let e=lookupStepFunction(t.executeStepFnName);if(!e){log.warn(`Dynamic tool "${t.name}" references step function "${t.executeStepFnName}" which is not registered — skipping on this step.`);continue}n.push({description:t.description,execute:createToolExecuteWithAuth({scope:t.name,execute:(n,r)=>e(t.closureVars,n,r)}),inputSchema:toInputSchema(t.inputSchema),name:t.name,outputSchema:toOutputSchema(t.outputSchema)})}return n}function getStepRegistry(){let e=Symbol.for(`@workflow/core//registeredSteps`),t=globalThis,n=t[e];return n===void 0&&(n=new Map,t[e]=n),n}function lookupStepFunction(e){try{return getStepRegistry().get(e)||null}catch{return null}}function hasMissingProcessCallback(e){return e.executeStepFnName?.startsWith(`eve:framework-dynamic:`)===!0&&lookupStepFunction(e.executeStepFnName)===null||e.approvalStepFnName!==void 0&&lookupStepFunction(e.approvalStepFnName)===null||e.approvalResponseStepFnName!==void 0&&lookupStepFunction(e.approvalResponseStepFnName)===null}const processCallbackQueue=[],processCallbackGroups=new Map;function registerProcessCallbacks(e,t){let n=getStepRegistry(),r=processCallbackGroups.get(e);if(r!==void 0)for(let e of r.callbackIds)n.delete(e);if(t.size===0){processCallbackGroups.delete(e);return}let i={id:e,callbackIds:new Set(t.keys())};processCallbackGroups.set(e,i),processCallbackQueue.push(i);for(let[e,r]of t)n.set(e,r);for(;processCallbackQueue.length>256;){let e=processCallbackQueue.shift();if(processCallbackGroups.get(e.id)===e){processCallbackGroups.delete(e.id);for(let t of e.callbackIds)n.delete(t)}}}function safeSerialize(e){try{return JSON.parse(JSON.stringify(e))}catch{return{}}}function durableKeyForEvent(e){switch(e){case`session.started`:return SessionDynamicToolMetadataKey;case`turn.started`:return TurnDynamicToolMetadataKey;default:return}}function readDynamicToolResult(e,t){if(isBrandedToolEntry(t))return{entries:{_single:t},isSingle:!0};if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`Dynamic tool resolver "${e.logicalPath}" must return defineTool(), a map of defineTool() values, or null.`);let n={};for(let[r,i]of Object.entries(t)){if(!isBrandedToolEntry(i))throw Error(`Dynamic tool resolver "${e.logicalPath}" returned "${r}" without defineTool(). Wrap every dynamic tool entry in defineTool().`);n[r]=i}return{entries:n,isSingle:!1}}async function resolveToolsFromEvent(e,t,n,r){let a=await Promise.allSettled(t.map(async t=>{let i=t.events[n.type];if(i===void 0)return null;let a=await i(n,buildResolveContext(e,r));if(a==null)return null;let{entries:o,isSingle:s}=readDynamicToolResult(t,a);return{resolver:t,entries:o,isSingle:s}})),l=[],u=[],d=new Map;for(let t of a){if(t.status===`rejected`){log.error(`Dynamic tool resolver (${n.type}) threw — skipping.`,{error:toErrorMessage(t.reason)});continue}if(t.value===null)continue;let{resolver:r,entries:a,isSingle:f}=t.value,p=qualifyDynamicToolNames(r,f,a),m=new Map;for(let{name:t,entryKey:a,entry:o}of p){let f=d.get(t);if(f!==void 0&&f!==r.slug)throw Error(`Dynamic tool "${t}" from resolver "${r.slug}" collides with dynamic resolver "${f}". Namespace the map key manually, e.g. "${r.slug}__${t}".`);if(d.set(t,r.slug),u.push(toHarnessToolDefinition(t,o)),n.type===`step.started`)continue;let p=`__executeStepFn`in o?o.__executeStepFn:void 0,h=`__closureVars`in o?o.__closureVars:void 0,g=p?.stepId,_=h===void 0?void 0:safeSerialize(h),v=n.type===`session.started`?`${e.require(SessionIdKey)}:`:``;if(g===void 0){let e=`eve:framework-dynamic:${v}${r.slug}:${a}`,t=o.execute.bind(o);m.set(e,(e,n,r)=>t(n,r)),g=e,_={}}let y,b;if(o.approval!==void 0){y=`eve:dynamic-tool-approval:${v}${r.slug}:${a}`;let e=resolveApprovalPolicy(o.approval).bind(o);m.set(y,(t,n)=>e(n));let t=typeof o.approval==`function`?void 0:o.approval.response;t!==void 0&&(b=`eve:dynamic-tool-approval-response:${v}${r.slug}:${a}`,m.set(b,(e,n)=>t(n)))}l.push({name:t,description:o.description,inputSchema:serializeInputSchema(o.inputSchema),outputSchema:serializeOutputSchema(o.outputSchema),resolverSlug:r.slug,entryKey:a,executeStepFnName:g,approvalStepFnName:y,approvalResponseStepFnName:b,closureVars:_})}if(n.type===`session.started`)registerProcessCallbacks(`${e.require(SessionIdKey)}:${r.slug}`,m);else for(let[e,t]of m)getStepRegistry().set(e,t)}return{metadata:l,liveTools:u}}const resolvedStepTools=new WeakMap;async function resolveStepDynamicTools(e){let n=`data`in e.event?e.event.data:void 0,r=typeof n?.turnId==`string`&&typeof n.stepIndex==`number`?`${n.turnId}:${String(n.stepIndex)}`:void 0,i=resolvedStepTools.get(e.ctx);if(r!==void 0&&i?.coordinate===r){e.ctx.setVirtualContext(LiveStepToolsKey,i.tools);return}let a=e.resolvers.filter(e=>e.eventNames.includes(`step.started`)),{liveTools:o}=a.length===0?{liveTools:[]}:await resolveToolsFromEvent(e.ctx,a,e.event,e.messages);e.ctx.setVirtualContext(LiveStepToolsKey,o),r!==void 0&&resolvedStepTools.set(e.ctx,{coordinate:r,tools:o})}async function dispatchDynamicToolEvent(e){let{ctx:t,resolvers:r,event:i,messages:a}=e;if(!ALLOWED_DYNAMIC_TOOL_EVENTS.has(i.type))return;if(i.type===`step.started`){await resolveStepDynamicTools(e);return}let o=r.filter(e=>e.eventNames.includes(i.type));if(o.length===0){i.type===`session.started`&&t.set(SessionDynamicToolMetadataKey,[]);return}let{metadata:s}=await resolveToolsFromEvent(t,o,i,a),c=durableKeyForEvent(i.type);if(c===void 0)return;if(i.type===`session.started`){t.set(SessionDynamicToolMetadataKey,s);return}let l=new Set(o.map(e=>e.slug)),u=(t.get(c)??[]).filter(e=>!l.has(e.resolverSlug));t.set(c,[...u,...s])}async function refreshDynamicSessionToolsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicToolRuntimeRevisionKey)===e.runtimeRevision)return;let t=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),{metadata:i}=t.length===0?{metadata:[]}:await resolveToolsFromEvent(e.ctx,t,e.event,e.messages);e.ctx.set(SessionDynamicToolMetadataKey,i),e.ctx.set(SessionDynamicToolRuntimeRevisionKey,e.runtimeRevision)}async function hydrateDynamicSessionTools(e){let t=e.ctx.get(SessionDynamicToolMetadataKey)??[],r=t.filter(hasMissingProcessCallback);if(r.length===0)return;let i=new Set(r.map(e=>e.resolverSlug)),a=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)&&i.has(e.slug)),{metadata:o}=a.length===0?{metadata:[]}:await resolveToolsFromEvent(e.ctx,a,e.event,e.messages),s=new Map(t.map(e=>[e.name,e.resolverSlug])),c=new Map(o.map(e=>[e.name,e.resolverSlug]));if(o.some(e=>s.get(e.name)!==e.resolverSlug))throw Error(`Dynamic session tool callback hydration changed durable ownership.`);r.some(e=>c.get(e.name)!==e.resolverSlug||hasMissingProcessCallback(e))&&log.warn(`Dynamic session tool callback hydration did not reproduce durable ownership.`)}export{dispatchDynamicToolEvent,hydrateDynamicSessionTools,refreshDynamicSessionToolsForRuntimeRevision,replayDynamicSessionTools,resolveStepDynamicTools};
1
+ import{createLogger}from"#internal/logging.js";import{SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,StepDynamicToolMetadataKey,TurnDynamicToolMetadataKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{serializeInputSchema,serializeOutputSchema}from"#shared/tool-schema.js";import{parseJsonObject}from"#shared/json.js";import{ALLOWED_DYNAMIC_TOOL_EVENTS,isBrandedToolEntry}from"#shared/dynamic-tool-definition.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{replayDynamicTools}from"#context/build-dynamic-tools.js";import{readDurableDynamicToolCallbacks}from"#shared/durable-dynamic-tool-callbacks.js";const log=createLogger(`dynamic-tools`);function qualifyDynamicToolNames(e,t,n){let r=Object.keys(n);if(r.length===0)return[];if(t){let t=r[0];return[{name:e.slug,entryKey:t,entry:n[t]}]}let i=e.extensionNamespace===void 0?``:`${e.extensionNamespace}__`;return r.map(e=>({entry:n[e],entryKey:e,name:`${i}${e}`}))}function replayDynamicSessionTools(e,t){return replayDynamicTools(e)}function durableKeyForEvent(e){switch(e){case`session.started`:return SessionDynamicToolMetadataKey;case`turn.started`:return TurnDynamicToolMetadataKey;case`step.started`:return StepDynamicToolMetadataKey;default:return}}function readDynamicToolResult(e,t){if(isBrandedToolEntry(t))return{entries:{_single:t},isSingle:!0};if(typeof t!=`object`||!t||Array.isArray(t))throw Error(`Dynamic tool resolver "${e.logicalPath}" must return defineTool(), a map of defineTool() values, or null.`);let n={};for(let[r,i]of Object.entries(t)){if(!isBrandedToolEntry(i))throw Error(`Dynamic tool resolver "${e.logicalPath}" returned "${r}" without defineTool(). Wrap every dynamic tool entry in defineTool().`);n[r]=i}return{entries:n,isSingle:!1}}function validateReference(e){if(e.reference===void 0){if(e.required)throw Error(`Dynamic tool "${e.name}" callback "${e.phase}" does not have a durable descriptor. Author the callback inline in transformed source or use an eve durable callback helper.`);return}let t=Object.keys(e.reference).filter(e=>e!==`closure`&&e!==`stepId`);if(t.length>0)throw Error(`Dynamic tool "${e.name}" has invalid ${e.phase} callback metadata: unknown key(s) ${t.join(`, `)}.`);if(typeof e.reference.stepId!=`string`||e.reference.stepId.length===0)throw Error(`Dynamic tool "${e.name}" has invalid ${e.phase} callback metadata: stepId must be a non-empty string.`);let n;try{n=parseJsonObject(e.reference.closure)}catch(t){throw Error(`Dynamic tool "${e.name}" callback "${e.phase}" has a non-serializable capture. ${toErrorMessage(t)}`)}if(globalThis[Symbol.for(`@workflow/core//registeredSteps`)]?.has(e.reference.stepId)!==!0)throw Error(`Dynamic tool "${e.name}" callback "${e.phase}" references "${e.reference.stepId}", but that step function is not registered. Author the callback inline in transformed source or register it from an eve callback helper.`);return{closure:n,stepId:e.reference.stepId}}function validateDurableDynamicToolCallbacks(e,t){let n=readDurableDynamicToolCallbacks(t)??{},r=Object.keys(n).filter(e=>e!==`execute`&&e!==`approvalRequest`&&e!==`approvalResponse`&&e!==`toModelOutput`);if(r.length>0)throw Error(`Dynamic tool "${e}" has unknown durable callback phase(s): ${r.join(`, `)}.`);let i=t.approval!==void 0,a=t.approval!==void 0&&typeof t.approval!=`function`&&t.approval.response!==void 0,o=validateReference({name:e,phase:`execute`,reference:n.execute,required:!0}),s=validateReference({name:e,phase:`approvalRequest`,reference:n.approvalRequest,required:i}),c=validateReference({name:e,phase:`approvalResponse`,reference:n.approvalResponse,required:a}),l=validateReference({name:e,phase:`toModelOutput`,reference:n.toModelOutput,required:t.toModelOutput!==void 0}),u={execute:o};return s!==void 0&&(u.approvalRequest=s),c!==void 0&&(u.approvalResponse=c),l!==void 0&&(u.toModelOutput=l),u}function createMetadata(e){return{callbacks:validateDurableDynamicToolCallbacks(e.name,e.entry),description:e.entry.description,entryKey:e.entryKey,inputSchema:serializeInputSchema(e.entry.inputSchema),name:e.name,outputSchema:serializeOutputSchema(e.entry.outputSchema),resolverSlug:e.resolver.slug}}async function resolveToolsFromEvent(e,t,n,r){let i=await Promise.allSettled(t.map(async t=>{let i=t.events[n.type];if(i===void 0)return null;let a=await i(n,buildResolveContext(e,r));if(a==null)return null;let{entries:o,isSingle:s}=readDynamicToolResult(t,a);return{metadata:qualifyDynamicToolNames(t,s,o).map(({name:e,entryKey:n,entry:r})=>createMetadata({entry:r,entryKey:n,name:e,resolver:t})),resolver:t}})),o=[],s=new Map;for(let e of i){if(e.status===`rejected`){log.error(`Dynamic tool resolver (${n.type}) failed — skipping its complete result.`,{error:toErrorMessage(e.reason)});continue}if(e.value!==null){for(let t of e.value.metadata){let n=s.get(t.name);if(n!==void 0&&n!==e.value.resolver.slug)throw Error(`Dynamic tool "${t.name}" from resolver "${e.value.resolver.slug}" collides with dynamic resolver "${n}". Namespace the map key manually.`);s.set(t.name,e.value.resolver.slug)}o.push(...e.value.metadata)}}return{metadata:o}}const resolvedStepTools=new WeakMap;async function resolveStepDynamicTools(e){let t=`data`in e.event?e.event.data:void 0,n=typeof t?.turnId==`string`&&typeof t.stepIndex==`number`?`${t.turnId}:${String(t.stepIndex)}`:void 0,i=resolvedStepTools.get(e.ctx);if(n!==void 0&&i?.coordinate===n){e.ctx.set(StepDynamicToolMetadataKey,i.metadata);return}let a=e.resolvers.filter(e=>e.eventNames.includes(`step.started`)),{metadata:o}=a.length===0?{metadata:[]}:await resolveToolsFromEvent(e.ctx,a,e.event,e.messages);e.ctx.set(StepDynamicToolMetadataKey,o),n!==void 0&&resolvedStepTools.set(e.ctx,{coordinate:n,metadata:o})}async function dispatchDynamicToolEvent(e){if(!ALLOWED_DYNAMIC_TOOL_EVENTS.has(e.event.type))return;if(e.event.type===`step.started`){await resolveStepDynamicTools(e);return}e.event.type===`turn.started`&&e.ctx.set(StepDynamicToolMetadataKey,[]);let n=e.resolvers.filter(t=>t.eventNames.includes(e.event.type)),{metadata:i}=n.length===0?{metadata:[]}:await resolveToolsFromEvent(e.ctx,n,e.event,e.messages),a=durableKeyForEvent(e.event.type);if(a===void 0)return;if(e.event.type===`session.started`){e.ctx.set(SessionDynamicToolMetadataKey,i);return}let o=new Set(n.map(e=>e.slug)),s=(e.ctx.get(a)??[]).filter(e=>!o.has(e.resolverSlug));e.ctx.set(a,[...s,...i])}async function refreshDynamicSessionToolsForRuntimeRevision(e){if(e.ctx.get(SessionDynamicToolRuntimeRevisionKey)===e.runtimeRevision)return;let r=e.resolvers.filter(e=>e.eventNames.includes(`session.started`)),{metadata:i}=r.length===0?{metadata:[]}:await resolveToolsFromEvent(e.ctx,r,e.event,e.messages);e.ctx.set(SessionDynamicToolMetadataKey,i),e.ctx.set(SessionDynamicToolRuntimeRevisionKey,e.runtimeRevision)}export{dispatchDynamicToolEvent,refreshDynamicSessionToolsForRuntimeRevision,replayDynamicSessionTools,resolveStepDynamicTools,validateDurableDynamicToolCallbacks};
@@ -8,7 +8,8 @@ import type { JsonObject } from "#shared/json.js";
8
8
  import type { ChannelInstrumentationProjection, ChannelDeliveryMetadata, SessionAuthContext, SessionCallback, SessionCapabilities, SessionParent, SessionTraceContext, SessionTurn } from "#channel/types.js";
9
9
  import { ContextKey } from "#context/key.js";
10
10
  import type { InstrumentationChannelDeliveryRef } from "#harness/instrumentation/lifecycle.js";
11
- import type { HarnessToolDefinition } from "#harness/execute-tool.js";
11
+ import type { HandleEventFn } from "#harness/types.js";
12
+ import type { DurableDynamicToolCallbacks } from "#shared/durable-dynamic-tool-callbacks.js";
12
13
  import type { DynamicSubagentAgentConfig } from "#runtime/subagents/dynamic-agent-config.js";
13
14
  import type { DynamicRemoteAgentConfig } from "#runtime/subagents/dynamic-remote-agent-config.js";
14
15
  import type { SandboxAccess } from "#sandbox/state.js";
@@ -46,8 +47,8 @@ export declare const SessionIdKey: ContextKey<string>;
46
47
  export declare const ContinuationTokenKey: ContextKey<string>;
47
48
  export declare const ChannelRequestIdKey: ContextKey<string>;
48
49
  export declare const ChannelDeliveryKey: ContextKey<ChannelDeliveryMetadata>;
49
- /** Whether the active turn began from a task-addressed durable delivery. */
50
- export declare const TurnTaskDeliveryKey: ContextKey<boolean>;
50
+ /** Task-cohort phase when the active turn began from a task-addressed durable delivery. */
51
+ export declare const TurnTaskDeliveryKey: ContextKey<"none" | "pending" | "settled">;
51
52
  export interface ActiveChannelDelivery {
52
53
  readonly agentName?: string;
53
54
  readonly delivery: InstrumentationChannelDeliveryRef;
@@ -75,6 +76,7 @@ export declare const CapabilitiesKey: ContextKey<SessionCapabilities>;
75
76
  export declare const SessionCallbackKey: ContextKey<SessionCallback>;
76
77
  export declare const SessionKey: ContextKey<Session>;
77
78
  export declare const SandboxKey: ContextKey<SandboxAccess>;
79
+ export declare const HandleEventKey: ContextKey<HandleEventFn>;
78
80
  /** Session-scoped dynamic model selection (from `session.started`). */
79
81
  export declare const SessionDynamicModelReferenceKey: ContextKey<Readonly<import("../shared/agent-definition.ts").InternalAgentModelDefinition> | null>;
80
82
  /** Turn-scoped dynamic model selection (from `turn.started`). */
@@ -95,16 +97,13 @@ export interface LiveDynamicModelSelection {
95
97
  /** Virtual step-scoped dynamic model selection (from `step.started`); never serialized. */
96
98
  export declare const LiveStepDynamicModelSelectionKey: ContextKey<LiveDynamicModelSelection | null>;
97
99
  export interface DurableDynamicToolMetadata {
100
+ readonly callbacks: DurableDynamicToolCallbacks;
98
101
  readonly name: string;
99
102
  readonly description: string;
100
103
  readonly inputSchema: JsonObject;
101
104
  readonly outputSchema?: JsonObject;
102
105
  readonly resolverSlug: string;
103
106
  readonly entryKey: string;
104
- readonly executeStepFnName?: string;
105
- readonly approvalStepFnName?: string;
106
- readonly approvalResponseStepFnName?: string;
107
- readonly closureVars?: Record<string, unknown>;
108
107
  }
109
108
  /**
110
109
  * Session-scoped dynamic tool metadata (from `session.started`).
@@ -121,13 +120,10 @@ export declare const SessionDynamicToolRuntimeRevisionKey: ContextKey<string>;
121
120
  * Replaced each turn.
122
121
  */
123
122
  export declare const TurnDynamicToolMetadataKey: ContextKey<readonly DurableDynamicToolMetadata[]>;
124
- /**
125
- * Virtual (non-serialized) live step-scoped tool definitions from
126
- * `step.started` resolvers. Carries original execute closures so
127
- * framework tools (which lack bundler step-function metadata) work.
128
- * Re-resolved every step — no cross-step persistence needed.
129
- */
130
- export declare const LiveStepToolsKey: ContextKey<HarnessToolDefinition[]>;
123
+ /** Step-scoped dynamic tool metadata, replaced before each model step. */
124
+ export declare const StepDynamicToolMetadataKey: ContextKey<readonly DurableDynamicToolMetadata[]>;
125
+ /** Whether this turn executes subagent definitions as durable background tools. */
126
+ export declare const TasksEnabledKey: ContextKey<boolean>;
131
127
  export type DurableDynamicSubagentSelection = {
132
128
  readonly agentConfig: DynamicSubagentAgentConfig;
133
129
  readonly kind: "subagent";
@@ -1 +1 @@
1
- import{ContextKey}from"#context/key.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SubagentDepthKey=new ContextKey(`eve.subagentDepth`),CapabilitiesKey=new ContextKey(`eve.capabilities`),SessionCallbackKey=new ContextKey(`eve.sessionCallback`),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),LiveStepToolsKey=new ContextKey(`eve.liveStepTools`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSubagentAgentConfigKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,LiveStepToolsKey,ModeKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,RuntimeModelMetadataCacheKey,SandboxKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionKey,SubagentDepthKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnTaskDeliveryKey};
1
+ import{ContextKey}from"#context/key.js";const AuthKey=new ContextKey(`eve.auth`),InitiatorAuthKey=new ContextKey(`eve.initiatorAuth`),SessionIdKey=new ContextKey(`eve.sessionId`),ContinuationTokenKey=new ContextKey(`eve.continuationToken`),ChannelRequestIdKey=new ContextKey(`eve.channelRequestId`),ChannelDeliveryKey=new ContextKey(`eve.channelDelivery`),TurnTaskDeliveryKey=new ContextKey(`eve.turnTaskDelivery`),ActiveChannelDeliveriesKey=new ContextKey(`eve.activeChannelDeliveries`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),ParentTraceContextKey=new ContextKey(`eve.parentTraceContext`),SubagentDepthKey=new ContextKey(`eve.subagentDepth`),CapabilitiesKey=new ContextKey(`eve.capabilities`),SessionCallbackKey=new ContextKey(`eve.sessionCallback`),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),HandleEventKey=new ContextKey(`eve.internal.handleEvent`),SessionDynamicModelReferenceKey=new ContextKey(`eve.sessionDynamicModelReference`),TurnDynamicModelReferenceKey=new ContextKey(`eve.turnDynamicModelReference`),RuntimeModelMetadataCacheKey=new ContextKey(`eve.runtimeModelMetadataCache`),LiveStepDynamicModelSelectionKey=new ContextKey(`eve.liveStepDynamicModelSelection`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),SessionDynamicToolRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicToolRuntimeRevision`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),StepDynamicToolMetadataKey=new ContextKey(`eve.stepDynamicToolMetadata`),TasksEnabledKey=new ContextKey(`eve.tasksEnabled`),SessionDynamicSubagentSelectionsKey=new ContextKey(`eve.sessionDynamicSubagentSelections`),TurnDynamicSubagentSelectionsKey=new ContextKey(`eve.turnDynamicSubagentSelections`),SessionDynamicSubagentRuntimeRevisionKey=new ContextKey(`eve.sessionDynamicSubagentRuntimeRevision`),DynamicSubagentAgentConfigKey=new ContextKey(`eve.dynamicSubagentAgentConfig`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`),DynamicInstructionResolveMessagesKey=new ContextKey(`eve.dynamicInstructionResolveMessages`),PendingDynamicInstructionUserMessagesKey=new ContextKey(`eve.pendingDynamicInstructionUserMessages`);export{ActiveChannelDeliveriesKey,AuthKey,CapabilitiesKey,ChannelDeliveryKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicInstructionResolveMessagesKey,DynamicSkillManifestKey,DynamicSubagentAgentConfigKey,HandleEventKey,InitiatorAuthKey,LiveStepDynamicModelSelectionKey,ModeKey,ParentSessionKey,ParentTraceContextKey,PendingDynamicInstructionUserMessagesKey,RuntimeModelMetadataCacheKey,SandboxKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicModelReferenceKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicSubagentSelectionsKey,SessionDynamicToolMetadataKey,SessionDynamicToolRuntimeRevisionKey,SessionIdKey,SessionKey,StepDynamicToolMetadataKey,SubagentDepthKey,TasksEnabledKey,TurnDynamicInstructionsKey,TurnDynamicModelReferenceKey,TurnDynamicSubagentSelectionsKey,TurnDynamicToolMetadataKey,TurnTaskDeliveryKey};
@@ -1,4 +1,4 @@
1
- import type { HarnessSession } from "#harness/types.js";
1
+ import type { HarnessSession, StepResult } from "#harness/types.js";
2
2
  import type { ContextContainer } from "#context/container.js";
3
3
  import type { ContextKey } from "#context/key.js";
4
4
  export type { ContextReader } from "#context/key.js";
@@ -24,4 +24,8 @@ export interface FrameworkContextProvider<T> {
24
24
  readonly key: ContextKey<T>;
25
25
  create(ctx: ContextContainer, session: HarnessSession): ProviderResult<T> | undefined | Promise<ProviderResult<T> | undefined>;
26
26
  commit?(value: T, session: HarnessSession): HarnessSession | Promise<HarnessSession>;
27
+ /** Rolls back provider-owned effects when the callback or a later commit fails. */
28
+ rollback?(value: T, cause: unknown): void | Promise<void>;
29
+ /** Adds provider-owned durable effects to a successfully committed harness step. */
30
+ decorateStepResult?(value: T, result: StepResult): StepResult | Promise<StepResult>;
27
31
  }
@@ -1,5 +1,6 @@
1
1
  import type { HarnessSession, StepResult } from "#harness/types.js";
2
2
  import { type ContextContainer } from "#context/container.js";
3
+ import type { FrameworkContextProvider } from "#context/provider.js";
3
4
  interface ContextScopeResult<T> {
4
5
  readonly result: T;
5
6
  readonly session: HarnessSession;
@@ -12,12 +13,12 @@ interface ContextScopeResult<T> {
12
13
  * result and the (possibly mutated) session so provider commit hooks can
13
14
  * persist provider-owned state (e.g. sandbox snapshots).
14
15
  */
15
- export declare function withContextScope<T>(ctx: ContextContainer, harnessSession: HarnessSession, callback: (session: HarnessSession) => Promise<ContextScopeResult<T>>): Promise<ContextScopeResult<T>>;
16
+ export declare function withContextScope<T>(ctx: ContextContainer, harnessSession: HarnessSession, callback: (session: HarnessSession) => Promise<ContextScopeResult<T>>, additionalProviders?: readonly FrameworkContextProvider<any>[]): Promise<ContextScopeResult<T>>;
16
17
  /**
17
18
  * Runs one harness step inside the unified context.
18
19
  *
19
20
  * Delegates to {@link withContextScope} for provider lifecycle, then
20
21
  * reassembles the {@link StepResult}.
21
22
  */
22
- export declare function runStep(ctx: ContextContainer, harnessSession: HarnessSession, callback: (session: HarnessSession) => Promise<StepResult>): Promise<StepResult>;
23
+ export declare function runStep(ctx: ContextContainer, harnessSession: HarnessSession, callback: (session: HarnessSession) => Promise<StepResult>, additionalProviders?: readonly FrameworkContextProvider<any>[]): Promise<StepResult>;
23
24
  export {};
@@ -1 +1 @@
1
- import{contextStorage}from"#context/container.js";import{connectionProvider}from"#context/providers/connection.js";import{sandboxProvider}from"#context/providers/sandbox.js";import{sessionProvider}from"#context/providers/session.js";const frameworkProviders=[sessionProvider,connectionProvider,sandboxProvider];async function withContextScope(t,n,r){let a=n;t.clearVirtualContext();for(let e of frameworkProviders){let n=await e.create(t,a);n!==void 0&&(t.setVirtualContext(e.key,n.value),n.session!==void 0&&(a=n.session))}let o=await contextStorage.run(t,()=>r(a)),s=o.session;for(let e of frameworkProviders)e.commit&&t.has(e.key)&&(s=await e.commit(t.require(e.key),s));return s===o.session?o:{result:o.result,session:s}}async function runStep(e,t,n){let{result:r,session:i}=await withContextScope(e,t,async e=>{let t=await n(e);return{result:t,session:t.session}});return{...r,session:i}}export{runStep,withContextScope};
1
+ import{contextStorage}from"#context/container.js";import{connectionProvider}from"#context/providers/connection.js";import{sandboxProvider}from"#context/providers/sandbox.js";import{sessionProvider}from"#context/providers/session.js";const frameworkProviders=[sessionProvider,connectionProvider,sandboxProvider];async function withContextScope(t,n,r,a=[]){let o=n,s=[...frameworkProviders,...a],c=[];t.clearVirtualContext();try{for(let e of s){let n=await e.create(t,o);n!==void 0&&(t.setVirtualContext(e.key,n.value),c.push(e),n.session!==void 0&&(o=n.session))}let n=await contextStorage.run(t,()=>r(o)),i=n.session;for(let e of c)e.commit!==void 0&&(i=await e.commit(t.require(e.key),i));return i===n.session?n:{result:n.result,session:i}}catch(e){let n=[];for(let r of c.toReversed())if(r.rollback!==void 0)try{await r.rollback(t.require(r.key),e)}catch(e){n.push(e)}throw n.length>0?AggregateError([e,...n],`Framework context rollback did not complete.`,{cause:e}):e}}async function runStep(e,t,n,r=[]){let a=await withContextScope(e,t,async e=>{let t=await n(e);return{result:t,session:t.session}},r),o={...a.result,session:a.session};for(let t of[...frameworkProviders,...r])t.decorateStepResult!==void 0&&e.has(t.key)&&(o=await t.decorateStepResult(e.require(t.key),o));return o}export{runStep,withContextScope};
@@ -7,6 +7,7 @@
7
7
  * address the running handle records, and resolving delivery failures as
8
8
  * dead (handle deleted) or retryable (handle restored to `parked`).
9
9
  */
10
+ import type { SessionAuthContext } from "#channel/types.js";
10
11
  import { type AgentAddress } from "#harness/handles/store.js";
11
12
  import type { RuntimeActionRequest, RuntimeRemoteAgentCallActionRequest, RuntimeSubagentCallActionRequest, RuntimeSubagentDispatchFailure } from "#runtime/actions/types.js";
12
13
  import type { CompiledBundle } from "#runtime/sessions/runtime-context-keys.js";
@@ -54,6 +55,7 @@ export type DispatchOutcome = {
54
55
  export declare function dispatchToAgentHandle(input: {
55
56
  readonly action: RuntimeAgentHandleAction;
56
57
  readonly agentId: string;
58
+ readonly auth: SessionAuthContext | null;
57
59
  readonly bundle: CompiledBundle;
58
60
  readonly currentSession: RuntimeSession;
59
61
  readonly parentToken: string;
@@ -63,6 +65,7 @@ export declare function dispatchToAgentHandle(input: {
63
65
  export declare function dispatchToTaskAgentAddress(input: {
64
66
  readonly action: RuntimeAgentHandleAction;
65
67
  readonly agentId: string;
68
+ readonly auth: SessionAuthContext | null;
66
69
  readonly bundle: CompiledBundle;
67
70
  readonly currentSession: RuntimeSession;
68
71
  readonly parentToken: string;