eve 0.17.1 → 0.17.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/channel/types.d.ts +11 -0
  3. package/dist/src/cli/dev/tui/status-line.d.ts +1 -1
  4. package/dist/src/compiled/.vendor-stamp.json +1 -1
  5. package/dist/src/compiled/@chat-adapter/slack/api.d.ts +132 -0
  6. package/dist/src/compiled/@chat-adapter/slack/api.js +1 -0
  7. package/dist/src/compiled/@chat-adapter/slack/blocks.js +1 -1
  8. package/dist/src/compiled/@chat-adapter/slack/format.d.ts +33 -0
  9. package/dist/src/compiled/@chat-adapter/slack/format.js +1 -0
  10. package/dist/src/compiled/@chat-adapter/slack/index.js +28 -28
  11. package/dist/src/compiled/@chat-adapter/slack/types-AntsVifS.d.ts +187 -0
  12. package/dist/src/compiled/@chat-adapter/slack/webhook.d.ts +10 -0
  13. package/dist/src/compiled/@chat-adapter/slack/webhook.js +1 -0
  14. package/dist/src/compiled/_chunks/node/chunk-AYN7QRWH-B__hKQV7.js +1 -0
  15. package/dist/src/compiled/_chunks/node/chunk-HFKBBKCJ-CWaVIQuL.js +1 -0
  16. package/dist/src/compiler/manifest.d.ts +2 -2
  17. package/dist/src/compiler/manifest.js +1 -1
  18. package/dist/src/compiler/normalize-agent-config.js +1 -1
  19. package/dist/src/context/keys.d.ts +2 -0
  20. package/dist/src/context/keys.js +1 -1
  21. package/dist/src/evals/assertions/run.js +2 -2
  22. package/dist/src/execution/create-session-step.d.ts +2 -0
  23. package/dist/src/execution/create-session-step.js +1 -1
  24. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  25. package/dist/src/execution/durable-session-store.d.ts +3 -0
  26. package/dist/src/execution/runtime-context.js +1 -1
  27. package/dist/src/execution/session.d.ts +6 -1
  28. package/dist/src/execution/session.js +3 -3
  29. package/dist/src/execution/subagent-tool.js +1 -1
  30. package/dist/src/execution/workflow-entry.js +1 -1
  31. package/dist/src/harness/advertised-tools.d.ts +33 -0
  32. package/dist/src/harness/advertised-tools.js +1 -0
  33. package/dist/src/harness/subagent-depth.d.ts +17 -0
  34. package/dist/src/harness/subagent-depth.js +1 -0
  35. package/dist/src/harness/tool-loop.js +1 -1
  36. package/dist/src/harness/turn-tag-state.d.ts +30 -22
  37. package/dist/src/harness/turn-tag-state.js +1 -1
  38. package/dist/src/harness/types.d.ts +28 -0
  39. package/dist/src/harness/workflow-continuation-security.d.ts +1 -0
  40. package/dist/src/harness/workflow-continuation-security.js +1 -1
  41. package/dist/src/internal/application/package.js +1 -1
  42. package/dist/src/internal/authored-definition/core.js +1 -1
  43. package/dist/src/internal/nitro/host/configure-nitro-routes.js +2 -2
  44. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  45. package/dist/src/internal/nitro/routes/channel-route-context.d.ts +5 -0
  46. package/dist/src/internal/nitro/routes/channel-route-context.js +1 -0
  47. package/dist/src/internal/nitro/routes/info.d.ts +2 -6
  48. package/dist/src/internal/nitro/routes/info.js +1 -1
  49. package/dist/src/protocol/routes.d.ts +2 -4
  50. package/dist/src/public/channels/eve.d.ts +5 -4
  51. package/dist/src/public/channels/eve.js +1 -1
  52. package/dist/src/public/channels/slack/api.d.ts +3 -6
  53. package/dist/src/public/channels/slack/api.js +1 -1
  54. package/dist/src/public/channels/slack/inbound.d.ts +11 -9
  55. package/dist/src/public/channels/slack/inbound.js +1 -1
  56. package/dist/src/public/channels/slack/interactions.d.ts +2 -1
  57. package/dist/src/public/channels/slack/interactions.js +1 -1
  58. package/dist/src/public/channels/slack/mrkdwn.d.ts +3 -35
  59. package/dist/src/public/channels/slack/mrkdwn.js +1 -1
  60. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  61. package/dist/src/public/channels/slack/verify.d.ts +4 -42
  62. package/dist/src/public/channels/slack/verify.js +1 -1
  63. package/dist/src/public/definitions/agent.d.ts +1 -1
  64. package/dist/src/public/index.d.ts +1 -1
  65. package/dist/src/runtime/resolve-agent.js +1 -1
  66. package/dist/src/setup/boxes/preflight.js +1 -1
  67. package/dist/src/setup/boxes/select-model.js +1 -1
  68. package/dist/src/setup/flows/model.js +1 -1
  69. package/dist/src/setup/scaffold/create/project.d.ts +1 -1
  70. package/dist/src/setup/scaffold/create/project.js +1 -1
  71. package/dist/src/setup/scaffold/create/web-template.d.ts +3 -0
  72. package/dist/src/setup/scaffold/create/web-template.js +1 -1
  73. package/dist/src/shared/agent-definition.d.ts +37 -0
  74. package/dist/src/shared/default-agent-model.d.ts +1 -1
  75. package/dist/src/shared/default-agent-model.js +1 -1
  76. package/docs/agent-config.md +35 -8
  77. package/docs/channels/eve.mdx +3 -2
  78. package/docs/concepts/sessions-runs-and-streaming.md +2 -2
  79. package/docs/getting-started.mdx +5 -5
  80. package/docs/reference/typescript-api.md +1 -1
  81. package/docs/subagents.mdx +19 -0
  82. package/package.json +1 -1
  83. package/dist/src/compiled/_chunks/node/chunk-AYN7QRWH-Csu8sG38.js +0 -1
@@ -0,0 +1,187 @@
1
+ type SlackHeaderValue = readonly string[] | string | null | undefined;
2
+ type SlackHeaders = Headers | Iterable<readonly [string, string]> | Record<string, SlackHeaderValue>;
3
+ type SlackWebhookVerifier = (request: Request, body: string) => Promise<unknown> | unknown;
4
+ interface SlackVerifyOptions {
5
+ maxSkewSeconds?: number;
6
+ now?: () => number;
7
+ signingSecret?: string;
8
+ webhookVerifier?: SlackWebhookVerifier;
9
+ }
10
+ interface SlackParseOptions {
11
+ contentType?: string | null;
12
+ headers?: SlackHeaders;
13
+ }
14
+ interface SlackReadOptions extends SlackParseOptions, SlackVerifyOptions {
15
+ }
16
+ interface SlackRetry {
17
+ num: number;
18
+ reason?: string;
19
+ }
20
+ interface SlackContinuation {
21
+ channelId: string;
22
+ enterpriseId?: string;
23
+ teamId?: string;
24
+ threadTs: string;
25
+ }
26
+ interface SlackUser {
27
+ id: string;
28
+ name?: string;
29
+ teamId?: string;
30
+ username?: string;
31
+ }
32
+ interface SlackFile {
33
+ downloadUrl?: string;
34
+ filetype?: string;
35
+ id: string;
36
+ mimeType?: string;
37
+ name?: string;
38
+ raw: Record<string, unknown>;
39
+ size?: number;
40
+ title?: string;
41
+ type: "audio" | "file" | "image" | "video";
42
+ url?: string;
43
+ }
44
+ type SlackWebhookPayload = SlackAppMentionPayload | SlackBlockActionsPayload | SlackBlockSuggestionPayload | SlackDirectMessagePayload | SlackSlashCommandPayload | SlackUnsupportedPayload | SlackUrlVerificationPayload | SlackViewClosedPayload | SlackViewSubmissionPayload;
45
+ interface SlackUrlVerificationPayload {
46
+ challenge: string;
47
+ kind: "url_verification";
48
+ raw: Record<string, unknown>;
49
+ retry?: SlackRetry;
50
+ }
51
+ interface SlackEventBasePayload {
52
+ apiAppId?: string;
53
+ channelId: string;
54
+ continuation: SlackContinuation;
55
+ enterpriseId?: string;
56
+ eventId?: string;
57
+ eventTime?: number;
58
+ files?: SlackFile[];
59
+ isExtSharedChannel?: boolean;
60
+ raw: Record<string, unknown>;
61
+ retry?: SlackRetry;
62
+ teamId?: string;
63
+ text: string;
64
+ threadTs: string;
65
+ ts: string;
66
+ userId?: string;
67
+ }
68
+ interface SlackAppMentionPayload extends SlackEventBasePayload {
69
+ eventType: "app_mention";
70
+ kind: "app_mention";
71
+ }
72
+ interface SlackDirectMessagePayload extends SlackEventBasePayload {
73
+ botId?: string;
74
+ eventType: "message";
75
+ kind: "direct_message";
76
+ subtype?: string;
77
+ }
78
+ interface SlackSlashCommandPayload {
79
+ channelId: string;
80
+ channelName?: string;
81
+ command: string;
82
+ enterpriseId?: string;
83
+ isEnterpriseInstall: boolean;
84
+ kind: "slash_command";
85
+ raw: Record<string, string>;
86
+ responseUrl?: string;
87
+ retry?: SlackRetry;
88
+ teamId?: string;
89
+ text: string;
90
+ triggerId?: string;
91
+ userId: string;
92
+ userName?: string;
93
+ }
94
+ interface SlackAction {
95
+ actionId: string;
96
+ blockId?: string;
97
+ label?: string;
98
+ raw: Record<string, unknown>;
99
+ selectedOptionLabel?: string;
100
+ selectedOptionValue?: string;
101
+ type: string;
102
+ user?: SlackUser;
103
+ value?: string;
104
+ }
105
+ interface SlackBlockActionsPayload {
106
+ actions: SlackAction[];
107
+ channelId?: string;
108
+ continuation?: SlackContinuation;
109
+ enterpriseId?: string;
110
+ isEnterpriseInstall?: boolean;
111
+ kind: "block_actions";
112
+ messageBlocks?: unknown[];
113
+ messagePromptBlock?: unknown;
114
+ messagePromptText?: string;
115
+ messageTs?: string;
116
+ raw: Record<string, unknown>;
117
+ responseUrl?: string;
118
+ retry?: SlackRetry;
119
+ teamId?: string;
120
+ threadTs?: string;
121
+ triggerId?: string;
122
+ user?: SlackUser;
123
+ userId: string;
124
+ userName?: string;
125
+ }
126
+ interface SlackBlockSuggestionPayload {
127
+ actionId: string;
128
+ blockId: string;
129
+ channelId?: string;
130
+ enterpriseId?: string;
131
+ kind: "block_suggestion";
132
+ raw: Record<string, unknown>;
133
+ retry?: SlackRetry;
134
+ teamId?: string;
135
+ userId: string;
136
+ value: string;
137
+ }
138
+ interface SlackViewSubmissionPayload {
139
+ callbackId?: string;
140
+ enterpriseId?: string;
141
+ kind: "view_submission";
142
+ privateMetadata?: string;
143
+ raw: Record<string, unknown>;
144
+ responseUrls?: unknown[];
145
+ retry?: SlackRetry;
146
+ teamId?: string;
147
+ user?: SlackUser;
148
+ userId: string;
149
+ values?: SlackViewStateValue[];
150
+ view: Record<string, unknown>;
151
+ }
152
+ interface SlackViewClosedPayload {
153
+ enterpriseId?: string;
154
+ kind: "view_closed";
155
+ raw: Record<string, unknown>;
156
+ retry?: SlackRetry;
157
+ teamId?: string;
158
+ user?: SlackUser;
159
+ userId: string;
160
+ view: Record<string, unknown>;
161
+ }
162
+ interface SlackViewStateValue {
163
+ actionId: string;
164
+ blockId: string;
165
+ raw: Record<string, unknown>;
166
+ selectedOptionLabel?: string;
167
+ selectedOptionValue?: string;
168
+ type?: string;
169
+ value?: string;
170
+ }
171
+ interface SlackUnsupportedPayload {
172
+ kind: "unsupported";
173
+ raw: unknown;
174
+ retry?: SlackRetry;
175
+ type: string;
176
+ }
177
+ declare class SlackWebhookError extends Error {
178
+ constructor(message: string);
179
+ }
180
+ declare class SlackWebhookVerificationError extends SlackWebhookError {
181
+ constructor(message: string);
182
+ }
183
+ declare class SlackWebhookParseError extends SlackWebhookError {
184
+ constructor(message: string);
185
+ }
186
+
187
+ export { type SlackAction as S, type SlackAppMentionPayload as a, type SlackBlockActionsPayload as b, type SlackBlockSuggestionPayload as c, type SlackContinuation as d, type SlackDirectMessagePayload as e, type SlackEventBasePayload as f, type SlackFile as g, type SlackHeaderValue as h, type SlackHeaders as i, type SlackParseOptions as j, type SlackReadOptions as k, type SlackRetry as l, type SlackSlashCommandPayload as m, type SlackUnsupportedPayload as n, type SlackUrlVerificationPayload as o, type SlackUser as p, type SlackVerifyOptions as q, type SlackViewClosedPayload as r, type SlackViewStateValue as s, type SlackViewSubmissionPayload as t, SlackWebhookError as u, SlackWebhookParseError as v, type SlackWebhookPayload as w, SlackWebhookVerificationError as x, type SlackWebhookVerifier as y };
@@ -0,0 +1,10 @@
1
+ import { j as SlackParseOptions, w as SlackWebhookPayload, k as SlackReadOptions, q as SlackVerifyOptions, i as SlackHeaders } from './types-AntsVifS.js';
2
+ export { S as SlackAction, a as SlackAppMentionPayload, b as SlackBlockActionsPayload, c as SlackBlockSuggestionPayload, d as SlackContinuation, e as SlackDirectMessagePayload, f as SlackEventBasePayload, g as SlackFile, h as SlackHeaderValue, l as SlackRetry, m as SlackSlashCommandPayload, n as SlackUnsupportedPayload, o as SlackUrlVerificationPayload, p as SlackUser, r as SlackViewClosedPayload, s as SlackViewStateValue, t as SlackViewSubmissionPayload, u as SlackWebhookError, v as SlackWebhookParseError, x as SlackWebhookVerificationError, y as SlackWebhookVerifier } from './types-AntsVifS.js';
3
+
4
+ declare function parseSlackWebhookBody(body: string, options?: SlackParseOptions): SlackWebhookPayload;
5
+
6
+ declare function readSlackWebhook(request: Request, options: SlackReadOptions): Promise<SlackWebhookPayload>;
7
+ declare function verifySlackRequest(request: Request, options: SlackVerifyOptions): Promise<string>;
8
+ declare function verifySlackSignature(body: string, headers: SlackHeaders, options: SlackVerifyOptions): Promise<void>;
9
+
10
+ export { SlackHeaders, SlackParseOptions, SlackReadOptions, SlackVerifyOptions, SlackWebhookPayload, parseSlackWebhookBody, readSlackWebhook, verifySlackRequest, verifySlackSignature };
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n,o as r,r as i,s as a,t as o}from"../../_chunks/node/chunk-HFKBBKCJ-CWaVIQuL.js";export{o as SlackWebhookError,n as SlackWebhookParseError,i as SlackWebhookVerificationError,t as parseSlackWebhookBody,e as readSlackWebhook,r as verifySlackRequest,a as verifySlackSignature};
@@ -0,0 +1 @@
1
+ var e=/[<>|]/,t=/[\^|>]/,n=/^[A-Z0-9_]+$/,r=/(?<![<\w])@([A-Z][A-Z0-9_]+)/g,i=3e3;function a(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}function o(e){return e.replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&amp;/g,`&`)}function s(e,t={}){return v(e),{...t.emoji===void 0?{}:{emoji:t.emoji},text:e,type:`plain_text`}}function c(e,t={}){return v(e),{text:e,type:`mrkdwn`,...t.verbatim===void 0?{}:{verbatim:t.verbatim}}}function l(e){return y(e,`userId`),`<@${e}>`}function u(e){return y(e,`channelId`),`<#${e}>`}function d(e){return y(e,`userGroupId`),`<!subteam^${e}>`}function f(e){return`<!${e}>`}function p(e,t){return b(e,`url`),t?`<${e}|${a(t)}>`:`<${e}>`}function m(e,t,n,r={}){x(t,`token`);let i=e instanceof Date?Math.floor(e.getTime()/1e3):e;if(!Number.isInteger(i))throw TypeError(`timestamp must be an integer unix timestamp or Date`);return`<!date^${i}^${t}${r.link?`^${S(r.link)}`:``}|${a(n)}>`}function h(e){let t=e;return t=t.replace(/<@([A-Z0-9_]+)\|([^<>]+)>/g,`@$2`),t=t.replace(/<@([A-Z0-9_]+)>/g,`@$1`),t=t.replace(/<#[A-Z0-9_]+\|([^<>]+)>/g,`#$1`),t=t.replace(/<#([A-Z0-9_]+)>/g,`#$1`),t=t.replace(/<(https?:\/\/[^|<>]+)\|([^<>]+)>/g,`[$2]($1)`),t=t.replace(/<(https?:\/\/[^<>]+)>/g,`$1`),t=t.replace(/(?<![_*\\])\*([^*\n]+)\*(?![_*])/g,`**$1**`),t=t.replace(/(?<!~)~([^~\n]+)~(?!~)/g,`~~$1~~`),o(t)}function g(e){return e.replace(/\*\*(.+?)\*\*/g,`*$1*`)}function _(e){return e.replace(r,`<@$1>`)}function v(e){if(e.length<1||e.length>i)throw TypeError(`text must be between 1 and ${i} characters`)}function y(e,t){if(!n.test(e))throw TypeError(`${t} must be a Slack ID`)}function b(t,n){if(e.test(t))throw TypeError(`${n} cannot contain Slack control characters`)}function x(e,n){if(t.test(e))throw TypeError(`${n} cannot contain Slack date control characters`)}function S(e){return x(e,`link`),e}export{m as a,l as c,g as d,h as f,u as i,d as l,s as n,p as o,o as p,a as r,f as s,c as t,_ as u};
@@ -0,0 +1 @@
1
+ var e=class extends Error{constructor(e){super(e),this.name=`SlackWebhookError`}},t=class extends e{constructor(e){super(e),this.name=`SlackWebhookVerificationError`}},n=class extends e{constructor(e){super(e),this.name=`SlackWebhookParseError`}};function r(e,t){if(!e)return;if(typeof Headers<`u`&&e instanceof Headers)return e.get(t)??void 0;let n=t.toLowerCase();if(d(e)){for(let[t,r]of e)if(t.toLowerCase()===n)return r;return}for(let[t,r]of Object.entries(e))if(t.toLowerCase()===n)return f(r)}function i(e){let t=r(e,`x-slack-retry-num`);if(!t)return;let n=Number(t);if(Number.isFinite(n))return{num:n,reason:r(e,`x-slack-retry-reason`)}}function a(e,t){return t.includes(`application/x-www-form-urlencoded`)?!0:t.includes(`application/json`)?!1:!e.trimStart().startsWith(`{`)&&e.includes(`=`)}function o(e){try{return JSON.parse(e)}catch{throw new n(`Slack webhook body is invalid JSON`)}}function s(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function c(e){return s(e)?e:void 0}function l(e){return typeof e==`string`?e:``}function u(e){return l(e)||void 0}function d(e){return typeof e[Symbol.iterator]==`function`}function f(e){if(typeof e==`string`)return e;if(Array.isArray(e))return e[0]}function p(e,t={}){let n=t.headers,s=t.contentType??r(n,`content-type`)??``,c=i(n);return a(e,s)?m(e,c):h(o(e),c)}function m(e,t){let n=new URLSearchParams(e),r=n.get(`payload`);return r===null?n.has(`command`)?v(n,t):{kind:`unsupported`,raw:Object.fromEntries(n),retry:t,type:`form`}:g(o(r),t)}function h(e,t){if(!s(e))return{kind:`unsupported`,raw:e,retry:t,type:`unknown`};if(e.type===`url_verification`&&typeof e.challenge==`string`)return{challenge:e.challenge,kind:`url_verification`,raw:e,retry:t};if(e.type!==`event_callback`||!s(e.event))return{kind:`unsupported`,raw:e,retry:t,type:typeof e.type==`string`?e.type:`unknown`};let n=e.event;return n.type===`app_mention`?_(`app_mention`,e,n,t):n.type===`message`&&n.channel_type===`im`?_(`direct_message`,e,n,t):{kind:`unsupported`,raw:e,retry:t,type:typeof n.type==`string`?n.type:`event_callback`}}function g(e,t){if(!s(e))return{kind:`unsupported`,raw:e,retry:t,type:`interaction`};switch(e.type){case`block_actions`:return y(e,t);case`block_suggestion`:return x(e,t);case`view_submission`:return S(e,t);case`view_closed`:return C(e,t);default:return{kind:`unsupported`,raw:e,retry:t,type:typeof e.type==`string`?e.type:`interaction`}}}function _(e,t,n,r){let i=l(n.channel),a=l(n.ts),o=l(n.thread_ts)||a,s=u(n.team_id)||u(t.team_id),c=u(t.enterprise_id)||u(t.context_enterprise_id),d=i?{channelId:i,enterpriseId:c,teamId:s,threadTs:o}:{channelId:``,enterpriseId:c,teamId:s,threadTs:o},f={apiAppId:u(t.api_app_id),channelId:i,continuation:d,enterpriseId:c,eventId:u(t.event_id),eventTime:typeof t.event_time==`number`?t.event_time:void 0,files:w(n.files),eventType:n.type,isExtSharedChannel:typeof t.is_ext_shared_channel==`boolean`?t.is_ext_shared_channel:void 0,raw:n,retry:r,teamId:s,text:l(n.text),threadTs:o,ts:a,userId:u(n.user)};return e===`app_mention`?{...f,eventType:`app_mention`,kind:e}:{...f,botId:u(n.bot_id),eventType:`message`,kind:e,subtype:u(n.subtype)}}function v(e,t){let n=e.get(`enterprise_id`)||void 0,r=e.get(`team_id`)||void 0;return{channelId:e.get(`channel_id`)??``,channelName:e.get(`channel_name`)||void 0,command:e.get(`command`)??``,enterpriseId:n,isEnterpriseInstall:e.get(`is_enterprise_install`)===`true`,kind:`slash_command`,raw:Object.fromEntries(e),responseUrl:e.get(`response_url`)||void 0,retry:t,teamId:r,text:e.get(`text`)??``,triggerId:e.get(`trigger_id`)||void 0,userId:e.get(`user_id`)??``,userName:e.get(`user_name`)||void 0}}function y(e,t){let n=c(e.channel),r=c(e.container),i=c(e.message),a=E(e.user),o=c(e.team),s=c(e.enterprise),l=u(n?.id)||u(r?.channel_id),d=u(i?.ts)||u(r?.message_ts),f=u(i?.thread_ts)||u(r?.thread_ts)||d,p=u(o?.id)||a.teamId,m=u(s?.id)||u(o?.enterprise_id),h=l&&f?{channelId:l,enterpriseId:m,teamId:p,threadTs:f}:void 0,g=Array.isArray(i?.blocks)?i.blocks:void 0,_=D(g);return{actions:Array.isArray(e.actions)?e.actions.map(e=>b(e,a)):[],channelId:l,continuation:h,enterpriseId:m,isEnterpriseInstall:typeof e.is_enterprise_install==`boolean`?e.is_enterprise_install:void 0,kind:`block_actions`,messageBlocks:g,messagePromptBlock:_,messagePromptText:O(_),messageTs:d,raw:e,responseUrl:u(e.response_url),retry:t,teamId:p,threadTs:f,triggerId:u(e.trigger_id),user:a,userId:a.id,userName:a.username||a.name}}function b(e,t){let n=s(e)?e:{},r=c(n.selected_option),i=c(n.text),a=c(r?.text);return{actionId:l(n.action_id),blockId:u(n.block_id),label:u(a?.text)||u(i?.text),raw:n,selectedOptionLabel:u(a?.text),selectedOptionValue:u(r?.value),type:l(n.type),user:t,value:u(n.value)}}function x(e,t){let n=c(e.channel),r=c(e.team),i=c(e.enterprise),a=c(e.user);return{actionId:l(e.action_id),blockId:l(e.block_id),channelId:u(n?.id),enterpriseId:u(i?.id)||u(r?.enterprise_id),kind:`block_suggestion`,raw:e,retry:t,teamId:u(r?.id),userId:l(a?.id),value:l(e.value)}}function S(e,t){let n=c(e.team),r=c(e.enterprise),i=E(e.user),a=c(e.view)??{};return{callbackId:u(a.callback_id),enterpriseId:u(r?.id)||u(n?.enterprise_id),kind:`view_submission`,privateMetadata:u(a.private_metadata),raw:e,responseUrls:Array.isArray(a.response_urls)?a.response_urls:void 0,retry:t,teamId:u(n?.id),user:i,userId:i.id,values:k(a),view:a}}function C(e,t){let n=c(e.team),r=c(e.enterprise),i=E(e.user);return{enterpriseId:u(r?.id)||u(n?.enterprise_id),kind:`view_closed`,raw:e,retry:t,teamId:u(n?.id),user:i,userId:i.id,view:c(e.view)??{}}}function w(e){return Array.isArray(e)?e.map(e=>s(e)?e:void 0).filter(e=>e!==void 0).map(e=>{let t=u(e.mimetype);return{downloadUrl:u(e.url_private_download),filetype:u(e.filetype),id:l(e.id),mimeType:t,name:u(e.name),raw:e,size:typeof e.size==`number`?e.size:void 0,title:u(e.title),type:T(t),url:u(e.url_private)}}):[]}function T(e){return e?.startsWith(`image/`)?`image`:e?.startsWith(`video/`)?`video`:e?.startsWith(`audio/`)?`audio`:`file`}function E(e){let t=c(e)??{};return{id:l(t.id),name:u(t.name),teamId:u(t.team_id),username:u(t.username)}}function D(e){return e?.find(e=>{let t=c(e);return t?.type===`section`&&c(t.text)})}function O(e){return u(c(c(e)?.text)?.text)}function k(e){let t=c(c(e.state)?.values);if(!t)return[];let n=[];for(let[e,r]of Object.entries(t)){let t=c(r);if(t)for(let[r,i]of Object.entries(t)){let t=c(i);if(!t)continue;let a=c(t.selected_option),o=c(a?.text);n.push({actionId:r,blockId:e,raw:t,selectedOptionLabel:u(o?.text),selectedOptionValue:u(a?.value),type:u(t.type),value:u(t.value)})}}return n}var A=/^[\da-f]+$/i;async function j(e,t){return p(await M(e,t),{contentType:t.contentType,headers:e.headers})}async function M(e,n){let r=await e.text();if(n.webhookVerifier){let i=await n.webhookVerifier(e,r);if(!i)throw new t(`Slack webhook verifier rejected the request`);return typeof i==`string`?i:r}return await N(r,e.headers,n),r}async function N(e,n,i){let a=i.signingSecret;if(!a)throw new t(`Slack signing secret is required`);let o=r(n,`x-slack-request-timestamp`),s=r(n,`x-slack-signature`);if(!(o&&s))throw new t(`Slack signature headers are required`);let c=Number(o);if(!Number.isFinite(c))throw new t(`Slack timestamp is invalid`);let l=Math.floor((i.now?.()??Date.now())/1e3),u=i.maxSkewSeconds??300;if(Math.abs(l-c)>u)throw new t(`Slack timestamp is too old`);if(!await P(e,a,o,s))throw new t(`Slack signature is invalid`)}async function P(e,n,r,i){let a=globalThis.crypto;if(!a?.subtle)throw new t(`Web Crypto is not available`);let o=new TextEncoder,s=await a.subtle.importKey(`raw`,o.encode(n),{hash:`SHA-256`,name:`HMAC`},!1,[`verify`]);return a.subtle.verify(`HMAC`,s,F(i),o.encode(`v0:${r}:${e}`))}function F(e){if(!e.startsWith(`v0=`))throw new t(`Slack signature is invalid`);let n=e.slice(3);if(n.length%2!=0||!A.test(n))throw new t(`Slack signature is invalid`);let r=new ArrayBuffer(n.length/2),i=new Uint8Array(r);for(let e=0;e<i.length;e++)i[e]=Number.parseInt(n.slice(e*2,e*2+2),16);return r}export{j as a,p as i,n,M as o,t as r,N as s,e as t};
@@ -19,7 +19,7 @@ export declare const ROOT_COMPILED_AGENT_NODE_ID = "__root__";
19
19
  /**
20
20
  * Current compiled manifest schema version.
21
21
  */
22
- export declare const COMPILED_AGENT_MANIFEST_VERSION = 31;
22
+ export declare const COMPILED_AGENT_MANIFEST_VERSION = 32;
23
23
  /**
24
24
  * Compiled channel entry preserved in the compiled manifest.
25
25
  */
@@ -455,7 +455,7 @@ export declare const compiledAgentManifestSchema: z.ZodObject<{
455
455
  sourceId: z.ZodString;
456
456
  sourceKind: z.ZodLiteral<"module">;
457
457
  }, z.core.$strict>>;
458
- version: z.ZodLiteral<31>;
458
+ version: z.ZodLiteral<32>;
459
459
  workspaceResourceRoot: z.ZodObject<{
460
460
  contentHash: z.ZodOptional<z.ZodString>;
461
461
  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=31,moduleSourceRefSchema=z.object({exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),channelMethodSchema=z.union([z.literal(`GET`),z.literal(`POST`),z.literal(`PUT`),z.literal(`PATCH`),z.literal(`DELETE`),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(),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(),compiledAgentConfigSchema=z.object({build:compiledAgentBuildDefinitionSchema.optional(),compaction:compiledAgentCompactionDefinitionSchema.optional(),description:z.string().optional(),experimental:z.object({workflow:compiledAgentWorkflowDefinitionSchema.optional()}).strict().optional(),model:compiledRuntimeModelReferenceSchema,name:z.string(),outputSchema:jsonObjectSchema.optional(),reasoning:z.enum([`provider-default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`]).optional(),source:moduleSourceRefSchema.optional()}).strict(),compiledInstructionsSchema=z.object({name:z.string(),logicalPath:z.string(),markdown:z.string(),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(),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(),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(),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(),compiledAgentNodeManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowEnabled:z.boolean().default(!1),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).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:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict(),compiledSubagentNodeSchema=z.object({agent:compiledAgentNodeManifestSchema,description:z.string(),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()}).strict(),compiledSubagentEdgeSchema=z.object({childNodeId:z.string(),parentNodeId:z.string()}).strict(),compiledAgentManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowEnabled:z.boolean().default(!1),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:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),version:z.literal(31),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict();function createCompiledAgentNodeManifest(e){let t={agentRoot:e.agentRoot,appRoot:e.appRoot,channels:[...e.channels??[]],connections:[...e.connections??[]],config:{build:e.config.build===void 0?void 0:{externalDependencies:e.config.build.externalDependencies===void 0?void 0:[...e.config.build.externalDependencies]},compaction:{model:e.config.compaction?.model===void 0?void 0:cloneCompiledRuntimeModelReference(e.config.compaction.model),thresholdPercent:e.config.compaction?.thresholdPercent},description:e.config.description,experimental:e.config.experimental===void 0?void 0:{workflow:e.config.experimental.workflow===void 0?void 0:{world:e.config.experimental.workflow.world}},model:cloneCompiledRuntimeModelReference(e.config.model),name:e.config.name,outputSchema:e.config.outputSchema,reasoning:e.config.reasoning,source:e.config.source===void 0?void 0:{...e.config.source}},diagnosticsSummary:e.diagnosticsSummary??{errors:0,warnings:0},disabledFrameworkTools:[...e.disabledFrameworkTools??[]],workflowEnabled:e.workflowEnabled??!1,dynamicInstructions:[...e.dynamicInstructions??[]],dynamicSkills:[...e.dynamicSkills??[]],dynamicTools:[...e.dynamicTools??[]],hooks:[...e.hooks??[]],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})}};return e.instructions!==void 0&&(t.instructions=e.instructions),t}function deriveResourceRootEntries(e){let t=new Set;(e.skills??[]).length>0&&t.add(`skills/`);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,subagentEdges:[...e.subagentEdges??[]],subagents:[...e.subagents??[]],version:31}}function cloneCompiledRuntimeModelReference(e){let t={id:e.id,routing:cloneModelRouting(e.routing)};return e.contextWindowTokens!==void 0&&(t.contextWindowTokens=e.contextWindowTokens),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,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=32,moduleSourceRefSchema=z.object({exportName:z.string().optional(),sourceKind:z.literal(`module`),logicalPath:z.string(),sourceId:z.string()}).strict(),channelMethodSchema=z.union([z.literal(`GET`),z.literal(`POST`),z.literal(`PUT`),z.literal(`PATCH`),z.literal(`DELETE`),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(),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(),compiledAgentLimitsDefinitionSchema=z.object({maxSubagentDepth:z.number().int().positive().optional(),maxInputTokensPerSession:z.number().int().positive().optional(),maxOutputTokensPerSession:z.number().int().positive().optional()}).strict(),compiledAgentConfigSchema=z.object({build:compiledAgentBuildDefinitionSchema.optional(),compaction:compiledAgentCompactionDefinitionSchema.optional(),description:z.string().optional(),experimental:z.object({workflow:compiledAgentWorkflowDefinitionSchema.optional()}).strict().optional(),model:compiledRuntimeModelReferenceSchema,name:z.string(),outputSchema:jsonObjectSchema.optional(),reasoning:z.enum([`provider-default`,`none`,`minimal`,`low`,`medium`,`high`,`xhigh`]).optional(),source:moduleSourceRefSchema.optional(),limits:compiledAgentLimitsDefinitionSchema.optional()}).strict(),compiledInstructionsSchema=z.object({name:z.string(),logicalPath:z.string(),markdown:z.string(),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(),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(),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(),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(),compiledAgentNodeManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowEnabled:z.boolean().default(!1),dynamicInstructions:z.array(compiledDynamicInstructionsDefinitionSchema).default([]),dynamicSkills:z.array(compiledDynamicSkillDefinitionSchema).default([]),dynamicTools:z.array(compiledDynamicToolDefinitionSchema).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:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict(),compiledSubagentNodeSchema=z.object({agent:compiledAgentNodeManifestSchema,description:z.string(),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()}).strict(),compiledSubagentEdgeSchema=z.object({childNodeId:z.string(),parentNodeId:z.string()}).strict(),compiledAgentManifestSchema=z.object({agentRoot:z.string(),appRoot:z.string(),channels:z.array(compiledChannelEntrySchema),config:compiledAgentConfigSchema,connections:z.array(compiledConnectionDefinitionSchema),diagnosticsSummary:discoverDiagnosticsSummarySchema,disabledFrameworkTools:z.array(z.string()).readonly(),workflowEnabled:z.boolean().default(!1),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:compiledInstructionsSchema.optional(),tools:z.array(compiledToolDefinitionSchema),version:z.literal(32),workspaceResourceRoot:compiledWorkspaceResourceRootSchema}).strict();function createCompiledAgentNodeManifest(e){let t={agentRoot:e.agentRoot,appRoot:e.appRoot,channels:[...e.channels??[]],connections:[...e.connections??[]],config:{build:e.config.build===void 0?void 0:{externalDependencies:e.config.build.externalDependencies===void 0?void 0:[...e.config.build.externalDependencies]},compaction:{model:e.config.compaction?.model===void 0?void 0:cloneCompiledRuntimeModelReference(e.config.compaction.model),thresholdPercent:e.config.compaction?.thresholdPercent},description:e.config.description,experimental:e.config.experimental===void 0?void 0:{workflow:e.config.experimental.workflow===void 0?void 0:{world:e.config.experimental.workflow.world}},model:cloneCompiledRuntimeModelReference(e.config.model),name:e.config.name,outputSchema:e.config.outputSchema,reasoning:e.config.reasoning,limits:e.config.limits===void 0?void 0:{maxInputTokensPerSession:e.config.limits.maxInputTokensPerSession,maxOutputTokensPerSession:e.config.limits.maxOutputTokensPerSession,maxSubagentDepth:e.config.limits.maxSubagentDepth},source:e.config.source===void 0?void 0:{...e.config.source}},diagnosticsSummary:e.diagnosticsSummary??{errors:0,warnings:0},disabledFrameworkTools:[...e.disabledFrameworkTools??[]],workflowEnabled:e.workflowEnabled??!1,dynamicInstructions:[...e.dynamicInstructions??[]],dynamicSkills:[...e.dynamicSkills??[]],dynamicTools:[...e.dynamicTools??[]],hooks:[...e.hooks??[]],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})}};return e.instructions!==void 0&&(t.instructions=e.instructions),t}function deriveResourceRootEntries(e){let t=new Set;(e.skills??[]).length>0&&t.add(`skills/`);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,subagentEdges:[...e.subagentEdges??[]],subagents:[...e.subagents??[]],version:32}}function cloneCompiledRuntimeModelReference(e){let t={id:e.id,routing:cloneModelRouting(e.routing)};return e.contextWindowTokens!==void 0&&(t.contextWindowTokens=e.contextWindowTokens),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,createCompiledSubagentNodeId,deriveResourceRootEntries};
@@ -1 +1 @@
1
- import{isAbsolute,join,relative,resolve}from"node:path";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{toErrorMessage}from"#shared/errors.js";import{normalizeJsonSchemaDefinition}from"#shared/json-schema.js";import{normalizeLogicalPath}from"#discover/filesystem.js";import{classifyModelRouting}from"#internal/classify-model-routing.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{parseJsonObject}from"#shared/json.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";async function compileAgentConfig(e,t){let n=e.configModule,r=n===void 0?void 0:formatAgentConfigModulePath(e,n),a=normalizeAgentDefinition(n===void 0?{model:DEFAULT_AGENT_MODEL_ID}:await loadModuleBackedDefinition({agentRoot:e.agentRoot,displayPath:r,kind:`agent config`,source:n}),n===void 0?`Expected the default agent config to match the public eve shape.`:`Expected the agent config export "${n.exportName??`default`}" from "${r}" to match the public eve shape.`),o=await normalizeAuthoredModelReference({modelCatalog:t.modelCatalog,purpose:`the primary compaction trigger model`,contextWindowTokens:a.modelContextWindowTokens,providerOptions:a.modelOptions?.providerOptions,source:n,sourcePath:r,value:a.model}),s={},c={compaction:s,model:o,name:e.agentId};a.description!==void 0&&(c.description=a.description);let l=normalizeExperimentalDefinition(a.experimental);return l!==void 0&&(c.experimental=l),a.build!==void 0&&(c.build={externalDependencies:a.build.externalDependencies===void 0?void 0:[...a.build.externalDependencies]}),a.outputSchema!==void 0&&(c.outputSchema=normalizeJsonSchemaDefinition(a.outputSchema,`output`)),a.reasoning!==void 0&&(c.reasoning=a.reasoning),n!==void 0&&(c.source={exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId}),a.compaction?.model!==void 0&&(s.model=await normalizeAuthoredModelReference({modelCatalog:t.modelCatalog,purpose:`the compaction summary model`,contextWindowTokens:a.compaction.modelContextWindowTokens,providerOptions:a.modelOptions?.providerOptions,source:n,sourcePath:r,value:a.compaction.model})),a.compaction?.thresholdPercent!==void 0&&(s.thresholdPercent=a.compaction.thresholdPercent),c}function normalizeExperimentalDefinition(e){if(e===void 0)return;let t={};return e.workflow!==void 0&&(t.workflow={world:e.workflow.world}),t}async function normalizeAuthoredModelReference(e){if(typeof e.value==`string`)return await withCompiledRuntimeModelLimits({id:formatLanguageModelGatewayId(e.value),providerOptions:parseProviderOptionsRecord(e.providerOptions),routing:classifyModelRouting(e.value,e.providerOptions)},e);let t=e.source;if(t===void 0)throw Error(`Expected ${e.purpose} to provide a valid AI SDK language model reference.`);let n=e.value,r=n.specificationVersion;if(r!==`v2`&&r!==`v3`&&r!==`v4`||typeof n.provider!=`string`||typeof n.modelId!=`string`||typeof n.doGenerate!=`function`||typeof n.doStream!=`function`)throw Error(`Expected the authored agent config export "${t.exportName??`default`}" from "${e.sourcePath??t.logicalPath}" to provide a valid AI SDK language model.`);let i={id:formatLanguageModelGatewayId(n),source:{exportName:t.exportName,sourceKind:`module`,logicalPath:t.logicalPath,sourceId:t.sourceId},providerOptions:parseProviderOptionsRecord(e.providerOptions),routing:classifyModelRouting(n,e.providerOptions)};if(e.contextWindowTokens===void 0){let t=await e.modelCatalog.getByProviderModelId(n.provider,n.modelId);if(t)return{...i,id:t.slug,contextWindowTokens:t.limits.contextWindowTokens}}return await withCompiledRuntimeModelLimits(i,e)}function formatAgentConfigModulePath(e,r){let i=join(e.agentRoot,r.logicalPath);return normalizeLogicalPath(relative(resolveTopLevelAgentRoot(e),i))}function resolveTopLevelAgentRoot(e){let t=resolve(e.appRoot),n=resolve(t,`agent`);return isPathInsideOrEqual(n,resolve(e.agentRoot))?n:t}function isPathInsideOrEqual(t,r){let i=relative(t,r);return i===``||!i.startsWith(`..`)&&!isAbsolute(i)}async function withCompiledRuntimeModelLimits(e,t){if(t.contextWindowTokens!==void 0)return{...e,contextWindowTokens:t.contextWindowTokens};let n;try{n=await t.modelCatalog.getModelLimits(e.id)}catch(n){throw Error(`Failed to load AI Gateway model metadata for ${t.purpose} "${e.id}". ${toErrorMessage(n)}`)}if(n===null)throw Error(`Cannot compile agent compaction because ${t.purpose} "${e.id}" does not have known AI Gateway context window metadata.`);return{...e,contextWindowTokens:n.contextWindowTokens}}function parseProviderOptionsRecord(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=parseJsonObject(r);return t}export{compileAgentConfig};
1
+ import{isAbsolute,join,relative,resolve}from"node:path";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{toErrorMessage}from"#shared/errors.js";import{normalizeJsonSchemaDefinition}from"#shared/json-schema.js";import{normalizeLogicalPath}from"#discover/filesystem.js";import{classifyModelRouting}from"#internal/classify-model-routing.js";import{normalizeAgentDefinition}from"#internal/authored-definition/core.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{parseJsonObject}from"#shared/json.js";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";async function compileAgentConfig(e,t){let n=e.configModule,r=n===void 0?void 0:formatAgentConfigModulePath(e,n),a=normalizeAgentDefinition(n===void 0?{model:DEFAULT_AGENT_MODEL_ID}:await loadModuleBackedDefinition({agentRoot:e.agentRoot,displayPath:r,kind:`agent config`,source:n}),n===void 0?`Expected the default agent config to match the public eve shape.`:`Expected the agent config export "${n.exportName??`default`}" from "${r}" to match the public eve shape.`),o=await normalizeAuthoredModelReference({modelCatalog:t.modelCatalog,purpose:`the primary compaction trigger model`,contextWindowTokens:a.modelContextWindowTokens,providerOptions:a.modelOptions?.providerOptions,source:n,sourcePath:r,value:a.model}),s={},c={compaction:s,model:o,name:e.agentId};a.description!==void 0&&(c.description=a.description);let l=normalizeExperimentalDefinition(a.experimental);return l!==void 0&&(c.experimental=l),a.build!==void 0&&(c.build={externalDependencies:a.build.externalDependencies===void 0?void 0:[...a.build.externalDependencies]}),a.outputSchema!==void 0&&(c.outputSchema=normalizeJsonSchemaDefinition(a.outputSchema,`output`)),a.reasoning!==void 0&&(c.reasoning=a.reasoning),a.limits!==void 0&&(c.limits={maxSubagentDepth:a.limits.maxSubagentDepth,maxInputTokensPerSession:a.limits.maxInputTokensPerSession,maxOutputTokensPerSession:a.limits.maxOutputTokensPerSession}),n!==void 0&&(c.source={exportName:n.exportName,sourceKind:`module`,logicalPath:n.logicalPath,sourceId:n.sourceId}),a.compaction?.model!==void 0&&(s.model=await normalizeAuthoredModelReference({modelCatalog:t.modelCatalog,purpose:`the compaction summary model`,contextWindowTokens:a.compaction.modelContextWindowTokens,providerOptions:a.modelOptions?.providerOptions,source:n,sourcePath:r,value:a.compaction.model})),a.compaction?.thresholdPercent!==void 0&&(s.thresholdPercent=a.compaction.thresholdPercent),c}function normalizeExperimentalDefinition(e){if(e===void 0)return;let t={};return e.workflow!==void 0&&(t.workflow={world:e.workflow.world}),t}async function normalizeAuthoredModelReference(e){if(typeof e.value==`string`)return await withCompiledRuntimeModelLimits({id:formatLanguageModelGatewayId(e.value),providerOptions:parseProviderOptionsRecord(e.providerOptions),routing:classifyModelRouting(e.value,e.providerOptions)},e);let t=e.source;if(t===void 0)throw Error(`Expected ${e.purpose} to provide a valid AI SDK language model reference.`);let n=e.value,r=n.specificationVersion;if(r!==`v2`&&r!==`v3`&&r!==`v4`||typeof n.provider!=`string`||typeof n.modelId!=`string`||typeof n.doGenerate!=`function`||typeof n.doStream!=`function`)throw Error(`Expected the authored agent config export "${t.exportName??`default`}" from "${e.sourcePath??t.logicalPath}" to provide a valid AI SDK language model.`);let i={id:formatLanguageModelGatewayId(n),source:{exportName:t.exportName,sourceKind:`module`,logicalPath:t.logicalPath,sourceId:t.sourceId},providerOptions:parseProviderOptionsRecord(e.providerOptions),routing:classifyModelRouting(n,e.providerOptions)};if(e.contextWindowTokens===void 0){let t=await e.modelCatalog.getByProviderModelId(n.provider,n.modelId);if(t)return{...i,id:t.slug,contextWindowTokens:t.limits.contextWindowTokens}}return await withCompiledRuntimeModelLimits(i,e)}function formatAgentConfigModulePath(e,r){let i=join(e.agentRoot,r.logicalPath);return normalizeLogicalPath(relative(resolveTopLevelAgentRoot(e),i))}function resolveTopLevelAgentRoot(e){let t=resolve(e.appRoot),n=resolve(t,`agent`);return isPathInsideOrEqual(n,resolve(e.agentRoot))?n:t}function isPathInsideOrEqual(t,r){let i=relative(t,r);return i===``||!i.startsWith(`..`)&&!isAbsolute(i)}async function withCompiledRuntimeModelLimits(e,t){if(t.contextWindowTokens!==void 0)return{...e,contextWindowTokens:t.contextWindowTokens};let n;try{n=await t.modelCatalog.getModelLimits(e.id)}catch(n){throw Error(`Failed to load AI Gateway model metadata for ${t.purpose} "${e.id}". ${toErrorMessage(n)}`)}if(n===null)throw Error(`Cannot compile agent compaction because ${t.purpose} "${e.id}" does not have known AI Gateway context window metadata.`);return{...e,contextWindowTokens:n.contextWindowTokens}}function parseProviderOptionsRecord(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=parseJsonObject(r);return t}export{compileAgentConfig};
@@ -42,6 +42,8 @@ export declare const ChannelRequestIdKey: ContextKey<string>;
42
42
  export declare const ChannelInstrumentationKey: ContextKey<ChannelInstrumentationProjection>;
43
43
  export declare const ModeKey: ContextKey<RunMode>;
44
44
  export declare const ParentSessionKey: ContextKey<SessionParent>;
45
+ export declare const SubagentDepthKey: ContextKey<number>;
46
+ export declare const SubagentMaxDepthKey: ContextKey<number>;
45
47
  /**
46
48
  * Session-level capability flags (see {@link SessionCapabilities}). Set
47
49
  * on root runs by channel routes and inherited pointwise by 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`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),CapabilitiesKey=new ContextKey(`eve.capabilities`),SessionCallbackKey=new ContextKey(`eve.sessionCallback`),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),LiveStepToolsKey=new ContextKey(`eve.liveStepTools`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`);export{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicSkillManifestKey,InitiatorAuthKey,LiveStepToolsKey,ModeKey,ParentSessionKey,SandboxKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicToolMetadataKey,SessionIdKey,SessionKey,TurnDynamicInstructionsKey,TurnDynamicToolMetadataKey};
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`),ChannelInstrumentationKey=new ContextKey(`eve.channelInstrumentation`),ModeKey=new ContextKey(`eve.mode`),ParentSessionKey=new ContextKey(`eve.parentSession`),SubagentDepthKey=new ContextKey(`eve.subagentDepth`),SubagentMaxDepthKey=new ContextKey(`eve.subagentMaxDepth`),CapabilitiesKey=new ContextKey(`eve.capabilities`),SessionCallbackKey=new ContextKey(`eve.sessionCallback`),SessionKey=new ContextKey(`eve.session`),SandboxKey=new ContextKey(`eve.sandbox`),SessionDynamicToolMetadataKey=new ContextKey(`eve.sessionDynamicToolMetadata`),TurnDynamicToolMetadataKey=new ContextKey(`eve.turnDynamicToolMetadata`),LiveStepToolsKey=new ContextKey(`eve.liveStepTools`),DynamicSkillManifestKey=new ContextKey(`eve.dynamicSkillManifest`),SessionDynamicInstructionsKey=new ContextKey(`eve.sessionDynamicInstructions`),TurnDynamicInstructionsKey=new ContextKey(`eve.turnDynamicInstructions`);export{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,DynamicSkillManifestKey,InitiatorAuthKey,LiveStepToolsKey,ModeKey,ParentSessionKey,SandboxKey,SessionCallbackKey,SessionDynamicInstructionsKey,SessionDynamicToolMetadataKey,SessionIdKey,SessionKey,SubagentDepthKey,SubagentMaxDepthKey,TurnDynamicInstructionsKey,TurnDynamicToolMetadataKey};
@@ -1,2 +1,2 @@
1
- import{deepEquals,eventMatches,subagentCallMatches,testRegExp,toolCallMatches}from"#evals/match.js";import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";const PASS={score:1},fail=(e,t)=>({score:0,message:e,metadata:t});function succeeded(){return{name:`succeeded`,evaluate(e){let t=runFailure(e);return t===void 0?e.derived.parked?fail(`run parked on ${e.derived.inputRequests.length} unanswered input request(s)`):PASS:t}}}function parked(){return{name:`parked`,evaluate(e){let t=runFailure(e);return t===void 0?e.derived.parked?PASS:fail(`expected the run to park on HITL input; it ended "${e.status}" with no pending requests`):t}}}function messageIncludes(e){return{name:`messageIncludes(${String(e)})`,evaluate(t){let n=joinCompletedMessages(t.events);return(typeof e==`string`?n.includes(e):testRegExp(e,n))?PASS:fail(`assistant messages did not include ${String(e)}; got: ${truncate(n)}`)}}}function calledTool(e,t={}){return validateCount(t.count),{name:`calledTool(${e})`,evaluate(n){let r=n.derived.toolCalls.filter(t=>t.name===e),a=r.filter(e=>toolCallMatches(e,t));if(t.count===void 0?a.length>0:a.length===t.count)return{score:1,metadata:{matchingCalls:a.length}};let o=r.length>0?`observed ${e} calls: ${r.map(e=>truncate(JSON.stringify(e.input))).join(`, `)}`:`observed tools: [${n.derived.toolCalls.map(e=>e.name).join(`, `)}]`;return fail(`${t.count===void 0?`expected a matching call to "${e}"`:`expected exactly ${t.count} matching call(s), found ${a.length}`}; ${o}`)}}}function loadedSkill(e,t={}){return{...calledTool(LOAD_SKILL_TOOL_NAME,{...t,input:{skill:e}}),name:`loadedSkill(${e})`}}function notCalledTool(e){return{name:`notCalledTool(${e})`,evaluate(t){let n=t.derived.toolCalls.filter(t=>t.name===e).length;return n===0?PASS:fail(`"${e}" was called ${n} time(s)`)}}}function toolOrder(e){return{name:`toolOrder(${e.join(` → `)})`,evaluate(t){let n=requestedTools(t.events).map(e=>e.name),r=missingOrderedName(e,n);return r===void 0?PASS:fail(`missing "${r.name}" after [${e.slice(0,r.cursor).join(`, `)}]; observed request order: [${n.join(`, `)}]`)}}}function usedNoTools(){return{name:`usedNoTools`,evaluate(e){let t=e.derived.toolCallCount;return t===0?PASS:fail(`expected no tool calls, got ${t}`,{toolCallCount:t})}}}function maxToolCalls(e){return validateCount(e),{name:`maxToolCalls(${e})`,evaluate(t){let n=t.derived.toolCallCount;return n<=e?PASS:fail(`expected at most ${e} tool calls, got ${n}`,{maxAllowed:e,toolCallCount:n})}}}function noFailedActions(){return{name:`noFailedActions`,evaluate(e){let t=e.events.filter(e=>e.type===`action.result`&&(e.data.status===`failed`||e.data.result.isError===!0));if(t.length===0)return PASS;let n=t.map(e=>e.data.result.kind===`tool-result`?e.data.result.toolName:e.data.result.kind);return fail(`${t.length} failed action(s): ${n.join(`, `)}`)}}}function calledSubagent(e,t={}){return validateCount(t.count),{name:`calledSubagent(${e})`,evaluate(r){let i=r.derived.subagentCalls.filter(t=>t.name===e),a=i.filter(e=>subagentCallMatches(e,t));return(t.count===void 0?a.length>0:a.length===t.count)?{score:1,metadata:{matchingCalls:a.length}}:i.length===0?fail(`subagent "${e}" was never called; observed: [${r.derived.subagentCalls.map(e=>e.name).join(`, `)}]`,{observedSubagentCalls:r.derived.subagentCalls}):fail(`subagent "${e}" was called but ${a.length} call(s) matched the constraints`,{observedSubagentCalls:i})}}}function eventsSatisfy(e,t){return{name:`eventsSatisfy(${e})`,evaluate(n){return t(n.events)?PASS:fail(`event predicate "${e}" did not hold`)}}}function typedEvent(e){return validateCount(e.count),{name:`event(${e.type})`,evaluate(n){let r=n.events.filter(n=>eventMatches(n,e));return(e.count===void 0?r.length>0:r.length===e.count)?{score:1,metadata:{matchingEvents:r.length}}:fail(`expected ${e.count===void 0?`at least one`:`exactly ${e.count}`} matching ${e.type} event(s), found ${r.length}; observed: [${n.events.map(e=>e.type).join(`, `)}]`)}}}function notEvent(e){return{name:`notEvent(${e.type})`,evaluate(n){let r=n.events.filter(n=>eventMatches(n,e));return r.length===0?PASS:fail(`expected no matching ${e.type} events, found ${r.length}`)}}}function eventOrder(e){for(let t of e)validateCount(t.count);return{name:`eventOrder(${e.map(e=>e.type).join(` → `)})`,evaluate(n){let r=-1;for(let i of e){let e=n.events.flatMap((e,n)=>eventMatches(e,i)?[n]:[]);if(!(i.count===void 0?e.length>0:e.length===i.count))return fail(`expected ${i.count===void 0?`at least one`:`exactly ${i.count}`} matching ${i.type} event(s), found ${e.length}`);let a=e[0];if(a===void 0||a<=r)return fail(`event group ${i.type} did not occur after the previous group`);r=e[e.length-1]??r}return PASS}}}function outputEquals(t){return{name:`outputEquals`,evaluate(n){return deepEquals(n.output,t)?PASS:fail(`output ${truncate(JSON.stringify(n.output))} does not equal expected ${truncate(JSON.stringify(t))}`)}}}function outputMatches(e){return{name:`outputMatches`,async evaluate(t){let n=await e[`~standard`].validate(t.output);return!(`issues`in n)||n.issues===void 0?PASS:fail(`output failed schema validation: ${n.issues.map(e=>e.message).join(`; `)}`)}}}function joinCompletedMessages(e){let t=[];for(let n of e)n.type===`message.completed`&&n.data.message!==null&&t.push(n.data.message);return t.join(`
2
- `)}function failureDetail(e,t){return t===void 0?e:`${e} (code: ${t})`}function runFailure(e){if(e.status===`failed`)return fail(failureDetail(`run failed`,e.derived.failureCode));let t=e.events.find(e=>e.type===`turn.failed`||e.type===`step.failed`);return t===void 0?void 0:fail(`${t.type} (${t.data.code}): ${t.data.message}`)}function truncate(e,t=200){return e===void 0?`undefined`:e.length<=t?e:`${e.slice(0,t)}…`}function validateCount(e){if(e!==void 0&&(!Number.isInteger(e)||e<0))throw TypeError(`Assertion count must be a non-negative integer; received ${e}.`)}function missingOrderedName(e,t){let n=0;for(let r of t)if(r===e[n]&&(n+=1),n===e.length)return;let r=e[n];return r===void 0?void 0:{cursor:n,name:r}}function requestedTools(e){let t=[],n=new Set,append=(e,r)=>{n.has(e)||(n.add(e),t.push({callId:e,name:r}))};for(let t of e)if(t.type===`actions.requested`)for(let e of t.data.actions)e.kind===`tool-call`&&append(e.callId,e.toolName);else if(t.type===`input.requested`)for(let e of t.data.requests){let{action:t}=e;t.kind===`tool-call`&&append(t.callId,t.toolName)}return t}export{calledSubagent,calledTool,eventOrder,eventsSatisfy,loadedSkill,maxToolCalls,messageIncludes,noFailedActions,notCalledTool,notEvent,outputEquals,outputMatches,parked,succeeded,toolOrder,typedEvent,usedNoTools};
1
+ import{deepEquals,eventMatches,subagentCallMatches,testRegExp,toolCallMatches}from"#evals/match.js";import{LOAD_SKILL_TOOL_NAME}from"#runtime/skills/fragment-context.js";const PASS={score:1},fail=(e,t)=>({score:0,message:e,metadata:t});function succeeded(){return{name:`succeeded`,evaluate(e){let t=runFailure(e);return t===void 0?e.derived.parked?fail(`run parked on ${e.derived.inputRequests.length} unanswered input request(s)`):PASS:t}}}function parked(){return{name:`parked`,evaluate(e){let t=runFailure(e);return t===void 0?e.derived.parked?PASS:fail(`expected the run to park on HITL input; it ended "${e.status}" with no pending requests`):t}}}function messageIncludes(e){return{name:`messageIncludes(${String(e)})`,evaluate(t){let n=joinCompletedMessages(t.events);return(typeof e==`string`?n.includes(e):testRegExp(e,n))?PASS:fail(`assistant messages did not include ${String(e)}; got: ${truncate(n)}`)}}}function calledTool(e,t={}){return validateCount(t.count),{name:`calledTool(${e})`,evaluate(n){let r=n.derived.toolCalls.filter(t=>t.name===e),a=r.filter(e=>toolCallMatches(e,t));if(t.count===void 0?a.length>0:a.length===t.count)return{score:1,metadata:{matchingCalls:a.length}};let o=r.length>0?`observed ${e} calls: ${r.map(e=>truncate(JSON.stringify(e.input))).join(`, `)}`:`observed tools: [${n.derived.toolCalls.map(e=>e.name).join(`, `)}]`;return fail(`${t.count===void 0?`expected a matching call to "${e}"`:`expected exactly ${t.count} matching call(s), found ${a.length}`}; ${o}`)}}}function loadedSkill(e,t={}){return{...calledTool(LOAD_SKILL_TOOL_NAME,{...t,input:{skill:e}}),name:`loadedSkill(${e})`}}function notCalledTool(e){return{name:`notCalledTool(${e})`,evaluate(t){let n=t.derived.toolCalls.filter(t=>t.name===e).length;return n===0?PASS:fail(`"${e}" was called ${n} time(s)`)}}}function toolOrder(e){return{name:`toolOrder(${e.join(` → `)})`,evaluate(t){let n=requestedTools(t.events).map(e=>e.name),r=missingOrderedName(e,n);return r===void 0?PASS:fail(`missing "${r.name}" after [${e.slice(0,r.cursor).join(`, `)}]; observed request order: [${n.join(`, `)}]`)}}}function usedNoTools(){return{name:`usedNoTools`,evaluate(e){let t=e.derived.toolCallCount;return t===0?PASS:fail(`expected no tool calls, got ${t}`,{toolCallCount:t})}}}function maxToolCalls(e){return validateCount(e),{name:`maxToolCalls(${e})`,evaluate(t){let n=t.derived.toolCallCount;return n<=e?PASS:fail(`expected at most ${e} tool calls, got ${n}`,{maxAllowed:e,toolCallCount:n})}}}function noFailedActions(){return{name:`noFailedActions`,evaluate(e){let t=e.events.filter(e=>e.type===`action.result`&&(e.data.status===`failed`||e.data.result.isError===!0));if(t.length===0)return PASS;let n=t.map(formatFailedActionResult);return fail(`${t.length} failed action(s): ${n.join(`; `)}`,{failedActions:t.map(e=>({callId:e.data.result.callId,error:e.data.error,kind:e.data.result.kind,output:e.data.result.output,status:e.data.status}))})}}}function calledSubagent(e,t={}){return validateCount(t.count),{name:`calledSubagent(${e})`,evaluate(r){let i=r.derived.subagentCalls.filter(t=>t.name===e),a=i.filter(e=>subagentCallMatches(e,t));return(t.count===void 0?a.length>0:a.length===t.count)?{score:1,metadata:{matchingCalls:a.length}}:i.length===0?fail(`subagent "${e}" was never called; observed: [${r.derived.subagentCalls.map(e=>e.name).join(`, `)}]`,{observedSubagentCalls:r.derived.subagentCalls}):fail(`subagent "${e}" was called but ${a.length} call(s) matched the constraints`,{observedSubagentCalls:i})}}}function eventsSatisfy(e,t){return{name:`eventsSatisfy(${e})`,evaluate(n){return t(n.events)?PASS:fail(`event predicate "${e}" did not hold`)}}}function typedEvent(e){return validateCount(e.count),{name:`event(${e.type})`,evaluate(n){let r=n.events.filter(n=>eventMatches(n,e));return(e.count===void 0?r.length>0:r.length===e.count)?{score:1,metadata:{matchingEvents:r.length}}:fail(`expected ${e.count===void 0?`at least one`:`exactly ${e.count}`} matching ${e.type} event(s), found ${r.length}; observed: [${n.events.map(e=>e.type).join(`, `)}]`)}}}function notEvent(e){return{name:`notEvent(${e.type})`,evaluate(n){let r=n.events.filter(n=>eventMatches(n,e));return r.length===0?PASS:fail(`expected no matching ${e.type} events, found ${r.length}`)}}}function eventOrder(e){for(let t of e)validateCount(t.count);return{name:`eventOrder(${e.map(e=>e.type).join(` → `)})`,evaluate(n){let r=-1;for(let i of e){let e=n.events.flatMap((e,n)=>eventMatches(e,i)?[n]:[]);if(!(i.count===void 0?e.length>0:e.length===i.count))return fail(`expected ${i.count===void 0?`at least one`:`exactly ${i.count}`} matching ${i.type} event(s), found ${e.length}`);let a=e[0];if(a===void 0||a<=r)return fail(`event group ${i.type} did not occur after the previous group`);r=e[e.length-1]??r}return PASS}}}function outputEquals(t){return{name:`outputEquals`,evaluate(n){return deepEquals(n.output,t)?PASS:fail(`output ${truncate(JSON.stringify(n.output))} does not equal expected ${truncate(JSON.stringify(t))}`)}}}function outputMatches(e){return{name:`outputMatches`,async evaluate(t){let n=await e[`~standard`].validate(t.output);return!(`issues`in n)||n.issues===void 0?PASS:fail(`output failed schema validation: ${n.issues.map(e=>e.message).join(`; `)}`)}}}function joinCompletedMessages(e){let t=[];for(let n of e)n.type===`message.completed`&&n.data.message!==null&&t.push(n.data.message);return t.join(`
2
+ `)}function failureDetail(e,t){return t===void 0?e:`${e} (code: ${t})`}function formatFailedActionResult(e){let{result:t,status:n}=e.data;return[actionResultLabel(t),`callId=${t.callId}`,`status=${n}`,t.isError===!0?`isError=true`:void 0,e.data.error?.message===void 0?void 0:`error=${e.data.error.message}`,`output=${truncate(formatUnknown(t.output))}`].filter(e=>e!==void 0).join(` `)}function actionResultLabel(e){switch(e.kind){case`tool-result`:return`tool-result:${e.toolName}`;case`subagent-result`:return`subagent-result:${e.subagentName}`;case`load-skill-result`:return e.name===void 0?`load-skill-result`:`load-skill-result:${e.name}`}}function runFailure(e){if(e.status===`failed`)return fail(failureDetail(`run failed`,e.derived.failureCode));let t=e.events.find(e=>e.type===`turn.failed`||e.type===`step.failed`);return t===void 0?void 0:fail(`${t.type} (${t.data.code}): ${t.data.message}`)}function truncate(e,t=200){return e===void 0?`undefined`:e.length<=t?e:`${e.slice(0,t)}…`}function formatUnknown(e){if(e!==void 0){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}}function validateCount(e){if(e!==void 0&&(!Number.isInteger(e)||e<0))throw TypeError(`Assertion count must be a non-negative integer; received ${e}.`)}function missingOrderedName(e,t){let n=0;for(let r of t)if(r===e[n]&&(n+=1),n===e.length)return;let r=e[n];return r===void 0?void 0:{cursor:n,name:r}}function requestedTools(e){let t=[],n=new Set,append=(e,r)=>{n.has(e)||(n.add(e),t.push({callId:e,name:r}))};for(let t of e)if(t.type===`actions.requested`)for(let e of t.data.actions)e.kind===`tool-call`&&append(e.callId,e.toolName);else if(t.type===`input.requested`)for(let e of t.data.requests){let{action:t}=e;t.kind===`tool-call`&&append(t.callId,t.toolName)}return t}export{calledSubagent,calledTool,eventOrder,eventsSatisfy,loadedSkill,maxToolCalls,messageIncludes,noFailedActions,notCalledTool,notEvent,outputEquals,outputMatches,parked,succeeded,toolOrder,typedEvent,usedNoTools};
@@ -23,4 +23,6 @@ export declare function createSessionStep(input: {
23
23
  readonly nodeId?: string;
24
24
  readonly rootSessionId?: string;
25
25
  readonly sessionId: string;
26
+ readonly subagentDepth?: number;
27
+ readonly subagentMaxDepth?: number;
26
28
  }): Promise<CreateSessionStepResult>;
@@ -1 +1 @@
1
- import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{createDurableSessionState}from"#execution/durable-session-store.js";import{createSession}from"#execution/session.js";async function createSessionStep(e){"use step";let t=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:e.compiledArtifactsSource,nodeId:e.nodeId});return{state:createDurableSessionState({session:createSession({compactionOverrides:{thresholdPercent:t.resolvedAgent.config.compaction?.thresholdPercent},continuationToken:e.continuationToken,outputSchema:e.outputSchema,rootSessionId:e.rootSessionId,sessionId:e.sessionId,turnAgent:t.turnAgent})})}}export{createSessionStep};
1
+ import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{createDurableSessionState}from"#execution/durable-session-store.js";import{createSession}from"#execution/session.js";async function createSessionStep(e){"use step";let t=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:e.compiledArtifactsSource,nodeId:e.nodeId});return{state:createDurableSessionState({session:createSession({compactionOverrides:{thresholdPercent:t.resolvedAgent.config.compaction?.thresholdPercent},continuationToken:e.continuationToken,limits:{maxInputTokensPerSession:t.resolvedAgent.config.limits?.maxInputTokensPerSession,maxOutputTokensPerSession:t.resolvedAgent.config.limits?.maxOutputTokensPerSession},outputSchema:e.outputSchema,rootSessionId:e.rootSessionId,sessionId:e.sessionId,subagentDepth:e.subagentDepth,subagentMaxDepth:e.subagentMaxDepth??t.resolvedAgent.config.limits?.maxSubagentDepth,turnAgent:t.turnAgent})})}}export{createSessionStep};
@@ -1 +1 @@
1
- import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{deserializeContext}from"#context/serialize.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{getPendingRuntimeActionBatch,recordPendingSubagentChildToken}from"#harness/runtime-actions.js";import{resolveRemoteAgentForAction,startRemoteAgentSession}from"#execution/remote-agent-dispatch.js";import{buildSubagentRunInput}from"#execution/subagent-tool.js";import{createWorkflowRuntime,workflowEntryReference}from"#execution/workflow-runtime.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function dispatchRuntimeActionsStep(e){"use step";let s=await readDurableSession(e.sessionState),f=getPendingRuntimeActionBatch(s.state);if(f===void 0||f.actions.length===0)return{results:[],sessionState:e.sessionState};let p=await deserializeContext(e.serializedContext),m=p.require(BundleKey),h=hydrateDurableSession({compactionOverrides:{thresholdPercent:m.resolvedAgent.config.compaction?.thresholdPercent},durable:s,turnAgent:m.turnAgent}),g=p.require(ChannelKey),_=p.get(AuthKey)??null,v=p.get(CapabilitiesKey),y=p.get(ChannelInstrumentationKey),b=p.get(InitiatorAuthKey)??null,x=e.parentWritable.getWriter(),S=buildAdapterContext(g,p),C=h,w=[];try{for(let r of f.actions){let i,a,o,s;switch(r.kind){case`subagent-call`:{let t=m.subagentRegistry.subagentsByNodeId.get(r.nodeId),n=t?.definition.kind===`subagent`?{description:t.definition.description,type:`local`}:{type:`runtime`},o=createWorkflowRuntime({compiledArtifactsSource:m.compiledArtifactsSource,nodeId:r.nodeId}),{childContinuationToken:c,runInput:l}=buildSubagentRunInput({action:r,auth:_,batchEvent:f.event,capabilities:v,channelMetadata:y,initiatorAuth:b,parentContinuationToken:e.parentContinuationToken,session:h,source:n}),u=await o.run(l);C=recordPendingSubagentChildToken({callId:r.callId,childContinuationToken:c,session:C}),i=u.sessionId,a=r.name,s=r.subagentName;break}case`remote-agent-call`:{let n;try{n=resolveRemoteAgentForAction({nodeId:r.nodeId,remoteAgentName:r.remoteAgentName,registry:m.subagentRegistry.subagentsByNodeId}),i=await startRemoteAgentSession({action:r,callbackBaseUrl:e.callbackBaseUrl,callbackToken:e.parentContinuationToken,remote:n,session:h})}catch(e){logError(log,`remote agent start failed`,e,{remoteAgentName:r.remoteAgentName,nodeId:r.nodeId,callId:r.callId}),w.push(createRemoteAgentStartFailureResult({action:r,error:e}));continue}a=r.name,o={url:n.url},s=r.remoteAgentName;break}default:throw Error(`Unsupported runtime action kind "${r.kind}" in workflow runtime.`)}let d=await callAdapterEventHandler(g,createSubagentCalledEvent({callId:r.callId,childSessionId:i,name:a,remote:o,sequence:f.event.sequence,sessionId:h.sessionId,toolName:s,turnId:f.event.turnId,workflowId:workflowEntryReference.workflowId}),S);await x.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(d)))}}finally{x.releaseLock()}return{results:w,sessionState:C===h?e.sessionState:createDurableSessionState({session:C})}}function createRemoteAgentStartFailureResult(e){return{callId:e.action.callId,isError:!0,kind:`subagent-result`,output:{code:`REMOTE_AGENT_START_FAILED`,message:toErrorMessage(e.error)},subagentName:e.action.remoteAgentName}}export{dispatchRuntimeActionsStep};
1
+ import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,timestampHandleMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{deserializeContext}from"#context/serialize.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{getPendingRuntimeActionBatch,recordPendingSubagentChildToken}from"#harness/runtime-actions.js";import{resolveRemoteAgentForAction,startRemoteAgentSession}from"#execution/remote-agent-dispatch.js";import{buildSubagentRunInput}from"#execution/subagent-tool.js";import{createWorkflowRuntime,workflowEntryReference}from"#execution/workflow-runtime.js";import{getSubagentDelegationName,isSubagentDelegationAction,resolveSubagentDelegationLimit}from"#harness/subagent-depth.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function dispatchRuntimeActionsStep(e){"use step";let s=await readDurableSession(e.sessionState),f=getPendingRuntimeActionBatch(s.state);if(f===void 0||f.actions.length===0)return{results:[],sessionState:e.sessionState};let p=await deserializeContext(e.serializedContext),m=p.require(BundleKey),h=hydrateDurableSession({compactionOverrides:{thresholdPercent:m.resolvedAgent.config.compaction?.thresholdPercent},durable:s,turnAgent:m.turnAgent}),g=p.require(ChannelKey),_=p.get(AuthKey)??null,v=p.get(CapabilitiesKey),y=p.get(ChannelInstrumentationKey),b=p.get(InitiatorAuthKey)??null,x=e.parentWritable.getWriter(),S=buildAdapterContext(g,p),C=resolveSubagentDelegationLimit(h),w=h,T=[];try{for(let r of f.actions){if(C.reached&&isSubagentDelegationAction(r)){log.warn(`subagent depth limit reached; blocking delegated call`,{callId:r.callId,currentDepth:C.currentDepth,maxDepth:C.maxDepth,nodeId:r.nodeId,subagentName:getSubagentDelegationName(r)}),T.push(createSubagentDepthLimitResult({action:r,delegationLimit:C}));continue}let i,a,o,s;switch(r.kind){case`subagent-call`:{let t=m.subagentRegistry.subagentsByNodeId.get(r.nodeId),n=t?.definition.kind===`subagent`?{description:t.definition.description,type:`local`}:{type:`runtime`},o=createWorkflowRuntime({compiledArtifactsSource:m.compiledArtifactsSource,nodeId:r.nodeId}),{childContinuationToken:c,runInput:l}=buildSubagentRunInput({action:r,auth:_,batchEvent:f.event,capabilities:v,channelMetadata:y,initiatorAuth:b,parentContinuationToken:e.parentContinuationToken,session:h,source:n}),u=await o.run(l);w=recordPendingSubagentChildToken({callId:r.callId,childContinuationToken:c,session:w}),i=u.sessionId,a=r.name,s=r.subagentName;break}case`remote-agent-call`:{let n;try{n=resolveRemoteAgentForAction({nodeId:r.nodeId,remoteAgentName:r.remoteAgentName,registry:m.subagentRegistry.subagentsByNodeId}),i=await startRemoteAgentSession({action:r,callbackBaseUrl:e.callbackBaseUrl,callbackToken:e.parentContinuationToken,remote:n,session:h})}catch(e){logError(log,`remote agent start failed`,e,{remoteAgentName:r.remoteAgentName,nodeId:r.nodeId,callId:r.callId}),T.push(createRemoteAgentStartFailureResult({action:r,error:e}));continue}a=r.name,o={url:n.url},s=r.remoteAgentName;break}default:throw Error(`Unsupported runtime action kind "${r.kind}" in workflow runtime.`)}let d=await callAdapterEventHandler(g,createSubagentCalledEvent({callId:r.callId,childSessionId:i,name:a,remote:o,sequence:f.event.sequence,sessionId:h.sessionId,toolName:s,turnId:f.event.turnId,workflowId:workflowEntryReference.workflowId}),S);await x.write(encodeMessageStreamEvent(timestampHandleMessageStreamEvent(d)))}}finally{x.releaseLock()}return{results:T,sessionState:w===h?e.sessionState:createDurableSessionState({session:w})}}function createRemoteAgentStartFailureResult(e){return{callId:e.action.callId,isError:!0,kind:`subagent-result`,output:{code:`REMOTE_AGENT_START_FAILED`,message:toErrorMessage(e.error)},subagentName:e.action.remoteAgentName}}function createSubagentDepthLimitResult(e){let t=getSubagentDelegationName(e.action);return{callId:e.action.callId,isError:!0,kind:`subagent-result`,output:{code:`SUBAGENT_DEPTH_LIMIT_REACHED`,currentDepth:e.delegationLimit.currentDepth,maxDepth:e.delegationLimit.maxDepth,message:`Subagent depth limit reached (${e.delegationLimit.maxDepth}); "${t}" was not called.`},subagentName:t}}export{dispatchRuntimeActionsStep};
@@ -69,9 +69,12 @@ export interface DurableSession {
69
69
  readonly rootSessionId?: string;
70
70
  readonly continuationToken: string;
71
71
  readonly history: ModelMessage[];
72
+ readonly limits?: HarnessSession["limits"];
72
73
  readonly outputSchema?: JsonObject;
73
74
  readonly state?: SessionStateMap;
74
75
  readonly sandboxState?: SandboxState;
76
+ readonly subagentDepth?: number;
77
+ readonly subagentMaxDepth?: number;
75
78
  readonly agent: {
76
79
  readonly system: string;
77
80
  };
@@ -1 +1 @@
1
- import{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,InitiatorAuthKey,ModeKey,ParentSessionKey,SessionCallbackKey}from"#context/keys.js";import{ContextContainer}from"#context/container.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{setChannelContext}from"#execution/channel-context.js";function buildRunContext(t){let{bundle:n,run:r}=t,i=new ContextContainer,a=r.auth;if(i.set(BundleKey,n),setChannelContext(i,r.adapter,{channelName:r.channelName}),r.channelMetadata!==void 0){let e=i.get(ChannelInstrumentationKey);i.set(ChannelInstrumentationKey,{kind:e?.kind??r.channelMetadata.kind,metadata:r.channelMetadata.metadata})}return i.set(ContinuationTokenKey,r.continuationToken??``),i.set(ModeKey,r.mode),i.set(AuthKey,a),i.set(InitiatorAuthKey,r.initiatorAuth??a),r.capabilities!==void 0&&i.set(CapabilitiesKey,r.capabilities),r.requestId!==void 0&&i.set(ChannelRequestIdKey,r.requestId),r.callback!==void 0&&i.set(SessionCallbackKey,r.callback),r.parent!==void 0&&i.set(ParentSessionKey,r.parent),i}export{buildRunContext};
1
+ import{AuthKey,CapabilitiesKey,ChannelInstrumentationKey,ChannelRequestIdKey,ContinuationTokenKey,InitiatorAuthKey,ModeKey,ParentSessionKey,SessionCallbackKey,SubagentDepthKey,SubagentMaxDepthKey}from"#context/keys.js";import{ContextContainer}from"#context/container.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{setChannelContext}from"#execution/channel-context.js";function buildRunContext(t){let{bundle:n,run:r}=t,i=new ContextContainer,a=r.auth;if(i.set(BundleKey,n),setChannelContext(i,r.adapter,{channelName:r.channelName}),r.channelMetadata!==void 0){let e=i.get(ChannelInstrumentationKey);i.set(ChannelInstrumentationKey,{kind:e?.kind??r.channelMetadata.kind,metadata:r.channelMetadata.metadata})}return i.set(ContinuationTokenKey,r.continuationToken??``),i.set(ModeKey,r.mode),i.set(AuthKey,a),i.set(InitiatorAuthKey,r.initiatorAuth??a),r.capabilities!==void 0&&i.set(CapabilitiesKey,r.capabilities),r.requestId!==void 0&&i.set(ChannelRequestIdKey,r.requestId),r.callback!==void 0&&i.set(SessionCallbackKey,r.callback),r.parent!==void 0&&i.set(ParentSessionKey,r.parent),r.subagentDepth!==void 0&&i.set(SubagentDepthKey,r.subagentDepth),r.subagentMaxDepth!==void 0&&i.set(SubagentMaxDepthKey,r.subagentMaxDepth),i}export{buildRunContext};
@@ -1,6 +1,8 @@
1
1
  import type { DurableSession } from "#execution/durable-session-store.js";
2
- import type { HarnessSession } from "#harness/types.js";
2
+ import type { HarnessSession, SessionLimits } from "#harness/types.js";
3
3
  import type { RuntimeTurnAgent } from "#runtime/agent/bootstrap.js";
4
+ export declare const DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION = 40000000;
5
+ export declare const DEFAULT_SUBAGENT_MAX_INPUT_TOKENS_PER_SESSION = 5000000;
4
6
  /**
5
7
  * Creates the durable compaction configuration used by one harness session.
6
8
  */
@@ -31,7 +33,10 @@ export interface CreateSessionInput {
31
33
  readonly rootSessionId?: string;
32
34
  readonly sessionId: string;
33
35
  readonly turnAgent: RuntimeTurnAgent;
36
+ readonly limits?: SessionLimits;
34
37
  readonly outputSchema?: HarnessSession["outputSchema"];
38
+ readonly subagentDepth?: number;
39
+ readonly subagentMaxDepth?: number;
35
40
  }
36
41
  /** Creates a fresh {@link HarnessSession} from the current `turnAgent`. */
37
42
  export declare function createSession(input: CreateSessionInput): HarnessSession;
@@ -1,5 +1,5 @@
1
- function createCompactionConfig(e={}){let t=e.thresholdPercent??.9,n={recentWindowSize:10,threshold:e.contextWindowTokens===void 0?1e5:Math.max(1,Math.floor(e.contextWindowTokens*t))};return e.lastKnownInputTokens===void 0?n:{...n,lastKnownInputTokens:e.lastKnownInputTokens,lastKnownPromptMessageCount:e.lastKnownPromptMessageCount}}function createSession(e){let{turnAgent:t}=e,n=createSessionToolDefinitions(t),r={agent:{compactionModelReference:t.compactionModel,modelReference:t.model,reasoning:t.reasoning,system:t.instructions.join(`
1
+ const DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION=4e7,DEFAULT_SUBAGENT_MAX_INPUT_TOKENS_PER_SESSION=5e6;function createCompactionConfig(e={}){let t=e.thresholdPercent??.9,n={recentWindowSize:10,threshold:e.contextWindowTokens===void 0?1e5:Math.max(1,Math.floor(e.contextWindowTokens*t))};return e.lastKnownInputTokens===void 0?n:{...n,lastKnownInputTokens:e.lastKnownInputTokens,lastKnownPromptMessageCount:e.lastKnownPromptMessageCount}}function createSession(e){let{turnAgent:t}=e,n=createSessionToolDefinitions(t),r={agent:{compactionModelReference:t.compactionModel,modelReference:t.model,reasoning:t.reasoning,system:t.instructions.join(`
2
2
 
3
- `),tools:n},compaction:createCompactionConfig({contextWindowTokens:t.model.contextWindowTokens,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:e.continuationToken,history:[],sessionId:e.sessionId};return e.rootSessionId!==void 0&&(r.rootSessionId=e.rootSessionId),e.outputSchema!==void 0&&(r.outputSchema=e.outputSchema),r}function refreshSessionFromTurnAgent(e){return{...e.session,agent:{compactionModelReference:e.turnAgent.compactionModel,modelReference:e.turnAgent.model,reasoning:e.turnAgent.reasoning,system:e.turnAgent.instructions.join(`
3
+ `),tools:n},compaction:createCompactionConfig({contextWindowTokens:t.model.contextWindowTokens,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:e.continuationToken,history:[],sessionId:e.sessionId};return e.rootSessionId!==void 0&&(r.rootSessionId=e.rootSessionId),r.limits=resolveSessionLimits(e),e.outputSchema!==void 0&&(r.outputSchema=e.outputSchema),e.subagentDepth!==void 0&&(r.subagentDepth=e.subagentDepth),e.subagentMaxDepth!==void 0&&(r.subagentMaxDepth=e.subagentMaxDepth),r}function refreshSessionFromTurnAgent(e){return{...e.session,agent:{compactionModelReference:e.turnAgent.compactionModel,modelReference:e.turnAgent.model,reasoning:e.turnAgent.reasoning,system:e.turnAgent.instructions.join(`
4
4
 
5
- `),tools:createSessionToolDefinitions(e.turnAgent)},compaction:createCompactionConfig({contextWindowTokens:e.turnAgent.model.contextWindowTokens,lastKnownInputTokens:e.session.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.session.compaction.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent})}}function mintSubagentContinuationToken(e){return`subagent:${e??crypto.randomUUID()}`}function projectToDurableSession(e){let t={agent:{system:e.agent.system},continuationToken:e.continuationToken,history:e.history,sessionId:e.sessionId};return(e.compaction.lastKnownInputTokens!==void 0||e.compaction.lastKnownPromptMessageCount!==void 0)&&(t.compaction={lastKnownInputTokens:e.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.compaction.lastKnownPromptMessageCount}),e.rootSessionId!==void 0&&(t.rootSessionId=e.rootSessionId),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.sandboxState!==void 0&&(t.sandboxState=e.sandboxState),e.state!==void 0&&(t.state=e.state),t}function hydrateDurableSession(e){let{durable:t,turnAgent:n}=e,r=createSessionToolDefinitions(n),i={agent:{compactionModelReference:n.compactionModel,modelReference:n.model,reasoning:n.reasoning,system:t.agent.system,tools:r},compaction:createCompactionConfig({contextWindowTokens:n.model.contextWindowTokens,lastKnownInputTokens:t.compaction?.lastKnownInputTokens,lastKnownPromptMessageCount:t.compaction?.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:t.continuationToken,history:t.history,sessionId:t.sessionId};return t.rootSessionId!==void 0&&(i.rootSessionId=t.rootSessionId),t.outputSchema!==void 0&&(i.outputSchema=t.outputSchema),t.sandboxState!==void 0&&(i.sandboxState=t.sandboxState),t.state!==void 0&&(i.state=t.state),i}function createSessionToolDefinitions(e){return e.tools.map(e=>({description:e.description??``,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema}))}export{createCompactionConfig,createSession,hydrateDurableSession,mintSubagentContinuationToken,projectToDurableSession,refreshSessionFromTurnAgent};
5
+ `),tools:createSessionToolDefinitions(e.turnAgent)},compaction:createCompactionConfig({contextWindowTokens:e.turnAgent.model.contextWindowTokens,lastKnownInputTokens:e.session.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.session.compaction.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent})}}function mintSubagentContinuationToken(e){return`subagent:${e??crypto.randomUUID()}`}function projectToDurableSession(e){let t={agent:{system:e.agent.system},continuationToken:e.continuationToken,history:e.history,sessionId:e.sessionId};return(e.compaction.lastKnownInputTokens!==void 0||e.compaction.lastKnownPromptMessageCount!==void 0)&&(t.compaction={lastKnownInputTokens:e.compaction.lastKnownInputTokens,lastKnownPromptMessageCount:e.compaction.lastKnownPromptMessageCount}),e.rootSessionId!==void 0&&(t.rootSessionId=e.rootSessionId),e.limits!==void 0&&(t.limits=e.limits),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.sandboxState!==void 0&&(t.sandboxState=e.sandboxState),e.state!==void 0&&(t.state=e.state),e.subagentDepth!==void 0&&(t.subagentDepth=e.subagentDepth),e.subagentMaxDepth!==void 0&&(t.subagentMaxDepth=e.subagentMaxDepth),t}function hydrateDurableSession(e){let{durable:t,turnAgent:n}=e,r=createSessionToolDefinitions(n),i={agent:{compactionModelReference:n.compactionModel,modelReference:n.model,reasoning:n.reasoning,system:t.agent.system,tools:r},compaction:createCompactionConfig({contextWindowTokens:n.model.contextWindowTokens,lastKnownInputTokens:t.compaction?.lastKnownInputTokens,lastKnownPromptMessageCount:t.compaction?.lastKnownPromptMessageCount,thresholdPercent:e.compactionOverrides?.thresholdPercent}),continuationToken:t.continuationToken,history:t.history,sessionId:t.sessionId};return t.rootSessionId!==void 0&&(i.rootSessionId=t.rootSessionId),i.limits=resolveSessionLimits(t),t.outputSchema!==void 0&&(i.outputSchema=t.outputSchema),t.sandboxState!==void 0&&(i.sandboxState=t.sandboxState),t.state!==void 0&&(i.state=t.state),t.subagentDepth!==void 0&&(i.subagentDepth=t.subagentDepth),t.subagentMaxDepth!==void 0&&(i.subagentMaxDepth=t.subagentMaxDepth),i}function createSessionToolDefinitions(e){return e.tools.map(e=>({description:e.description??``,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema}))}function resolveSessionLimits(e){let t=e.limits?.maxInputTokensPerSession??(e.subagentDepth!==void 0&&e.subagentDepth>0?5e6:4e7);return e.limits?.maxOutputTokensPerSession===void 0?{maxInputTokensPerSession:t}:{maxInputTokensPerSession:t,maxOutputTokensPerSession:e.limits.maxOutputTokensPerSession}}export{DEFAULT_ROOT_MAX_INPUT_TOKENS_PER_SESSION,DEFAULT_SUBAGENT_MAX_INPUT_TOKENS_PER_SESSION,createCompactionConfig,createSession,hydrateDurableSession,mintSubagentContinuationToken,projectToDurableSession,refreshSessionFromTurnAgent};
@@ -1 +1 @@
1
- import{mintSubagentContinuationToken}from"#execution/session.js";import{SUBAGENT_ADAPTER_KIND}from"#execution/subagent-adapter.js";import{formatSubagentInput}from"#execution/subagent-invocation.js";function buildSubagentRunInput(n){let{action:r,auth:i,batchEvent:a,capabilities:o,channelMetadata:s,initiatorAuth:c,session:l,source:u}=n,d=mintSubagentContinuationToken(`${l.sessionId}:${r.callId}`),f=l.rootSessionId??l.sessionId;return{childContinuationToken:d,runInput:{adapter:{kind:SUBAGENT_ADAPTER_KIND,state:{callId:r.callId,parentContinuationToken:n.parentContinuationToken??l.continuationToken,parentSessionId:l.sessionId,subagentName:r.subagentName,...r.subagentName===`agent`&&l.sandboxState?{parentSandboxState:l.sandboxState,sandboxSessionId:l.sessionId}:{}}},auth:i,capabilities:o,channelMetadata:s,continuationToken:d,initiatorAuth:c,input:{message:formatSubagentCallInputMessage({action:r,source:u}),outputSchema:r.input.outputSchema},mode:`task`,parent:{callId:r.callId,rootSessionId:f,sessionId:l.sessionId,turn:{id:a.turnId,sequence:a.sequence}}}}}function formatSubagentCallInputMessage(e){let{message:t}=e.action.input;switch(e.source.type){case`local`:return formatSubagentInput({description:e.source.description,message:t,name:e.action.subagentName,type:`local`}).message;case`runtime`:return formatSubagentInput({message:t,name:e.action.subagentName,type:`runtime`}).message;default:return e.source}}export{buildSubagentRunInput};
1
+ import{mintSubagentContinuationToken}from"#execution/session.js";import{SUBAGENT_ADAPTER_KIND}from"#execution/subagent-adapter.js";import{resolveSubagentDelegationLimit}from"#harness/subagent-depth.js";import{formatSubagentInput}from"#execution/subagent-invocation.js";function buildSubagentRunInput(n){let{action:r,auth:i,batchEvent:a,capabilities:o,channelMetadata:s,initiatorAuth:c,session:l,source:u}=n,d=mintSubagentContinuationToken(`${l.sessionId}:${r.callId}`),f=l.rootSessionId??l.sessionId,p=resolveSubagentDelegationLimit(l);return{childContinuationToken:d,runInput:{adapter:{kind:SUBAGENT_ADAPTER_KIND,state:{callId:r.callId,parentContinuationToken:n.parentContinuationToken??l.continuationToken,parentSessionId:l.sessionId,subagentName:r.subagentName,...r.subagentName===`agent`&&l.sandboxState?{parentSandboxState:l.sandboxState,sandboxSessionId:l.sessionId}:{}}},auth:i,capabilities:o,channelMetadata:s,continuationToken:d,initiatorAuth:c,input:{message:formatSubagentCallInputMessage({action:r,source:u}),outputSchema:r.input.outputSchema},mode:`task`,parent:{callId:r.callId,rootSessionId:f,sessionId:l.sessionId,turn:{id:a.turnId,sequence:a.sequence}},subagentDepth:p.nextChildDepth,subagentMaxDepth:l.subagentMaxDepth}}}function formatSubagentCallInputMessage(e){let{message:t}=e.action.input;switch(e.source.type){case`local`:return formatSubagentInput({description:e.source.description,message:t,name:e.action.subagentName,type:`local`}).message;case`runtime`:return formatSubagentInput({message:t,name:e.action.subagentName,type:`runtime`}).message;default:return e.source}}export{buildSubagentRunInput};
@@ -1 +1 @@
1
- import{emitTerminalSessionFailureStep}from"#execution/workflow-steps.js";import{createHook,getWorkflowMetadata,getWritable}from"#compiled/@workflow/core/index.js";import{closeHookIterator,disposeHook}from"#execution/hook-ownership.js";import{normalizeSerializableError}from"#execution/workflow-errors.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";import{coalesceDeliveries}from"#harness/messages.js";import{readChannelRequestId,readRootSessionId}from"#execution/eve-workflow-attributes.js";import{notifyDelegatedParentStep}from"#execution/delegated-parent-notification.js";import{createDelegatedSubagentErrorResult,createDelegatedSubagentSuccessResult}from"#execution/delegated-parent-result.js";import{dispatchAndAwaitTurn}from"#execution/turn-dispatch.js";import{createSessionStep}from"#execution/create-session-step.js";import{fireSessionCallbackStep}from"#execution/session-callback-step.js";import{createSessionDeliveryHook}from"#execution/session-delivery-hook.js";async function workflowEntry(t){"use workflow";let{workflowRunId:i}=getWorkflowMetadata(),a=t.serializedContext[`eve.continuationToken`]||``,s=t.serializedContext[`eve.mode`],c=t.serializedContext[`eve.capabilities`],u=t.serializedContext[`eve.bundle`];t.serializedContext[`eve.sessionId`]=i;let d=getWritable();try{let e=readRootSessionId(t.serializedContext),{state:n}=await createSessionStep({compiledArtifactsSource:u.source,continuationToken:a,nodeId:u.nodeId,outputSchema:t.input.outputSchema,rootSessionId:e,sessionId:i});return await runDriverLoop({capabilities:c,driverWritable:d,initialInput:{kind:`deliver`,payloads:[{message:t.input.message,context:t.input.context,outputSchema:t.input.outputSchema}],requestId:readChannelRequestId(t.serializedContext)},mode:s,serializedContext:t.serializedContext,sessionState:n})}catch(n){throw await emitTerminalSessionFailureStep({error:normalizeSerializableError(n),parentWritable:d,serializedContext:t.serializedContext}),await fireSessionCallbackStep({error:normalizeSerializableError(n),serializedContext:t.serializedContext,status:`failed`}),await notifyDelegatedParentStep({result:createDelegatedSubagentErrorResult(t.serializedContext,n),serializedContext:t.serializedContext}),n}}async function runDriverLoop(e){let n=createHook({token:`${e.sessionState.sessionId}:auth`}),r=n[Symbol.asyncIterator](),o=0,nextTurnControlToken=()=>`${e.sessionState.sessionId}:turn-control:${String(o++)}`,c=[],l=createSessionDeliveryHook(c);try{e.sessionState.continuationToken&&await l.rekey(e.sessionState.continuationToken);let t=await dispatchAndAwaitTurn({bufferedDeliveries:c,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:e.initialInput,deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:e.serializedContext,sessionState:e.sessionState});for(;;){if(t.kind===`done`)return await finalizeDone({action:t,driverWritable:e.driverWritable});if(t.kind!==`park`)throw Error(`Driver received unexpected turn action "${t.kind}".`);if(!t.sessionState.continuationToken)throw Error("Cannot park: no continuation token available. The channel must post the first message during the initial turn (anchoring the session) or `send()` must be called with an explicit continuationToken.");if(await l.rekey(t.sessionState.continuationToken),t.authorizationNames&&t.authorizationNames.length>0){let n=t.authorizationNames.length,i=[];for(;i.length<n;){let e=await r.next();if(e.done)break;e.value.kind===`deliver`&&i.push(...e.value.payloads)}t=await dispatchAndAwaitTurn({bufferedDeliveries:c,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:{kind:`deliver`,payloads:i},deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:t.serializedContext,sessionState:t.sessionState});continue}let n=await waitForNextDeliver({bufferedDeliveries:c,deliveryHook:l});if(n===null)return{output:``};let i=await routeDeliverToChildren({auth:n.auth,parentWritable:e.driverWritable,payloads:n.payloads,sessionState:t.sessionState});i!==void 0&&(t=await dispatchAndAwaitTurn({bufferedDeliveries:c,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:{auth:n.auth,kind:`deliver`,payloads:[i],requestId:n.requestId},deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:t.serializedContext,sessionState:t.sessionState}))}}finally{await l.dispose(),await closeHookIterator(r),await disposeHook(n)}}async function finalizeDone(e){let{output:t,serializedContext:n}=e.action,r=e.action.isError===!0;return await fireSessionCallbackStep({error:r?t:void 0,output:r?void 0:t,serializedContext:n,status:r?`failed`:`completed`}),await notifyDelegatedParentStep({result:r?createDelegatedSubagentErrorResult(n,t):createDelegatedSubagentSuccessResult(n,t),serializedContext:n}),{output:t}}async function waitForNextDeliver(e){if(e.bufferedDeliveries.length>0)return coalesceDeliveries(e.bufferedDeliveries.splice(0));for(;;){let t=await e.deliveryHook.next();if(e.deliveryHook.consumeNext(),t.done)return null;if(t.value.kind!==`deliver`)continue;let n=t.value;for(;;){let t=await takeReadyPayload(e.deliveryHook.next());if(t===NO_READY_MESSAGE||(e.deliveryHook.consumeNext(),t.done))break;t.value.kind===`deliver`&&(n=coalesceDeliveries([n,t.value]))}return n}}const NO_READY_MESSAGE=Symbol(`no-ready-message`);async function takeReadyPayload(e){return await Promise.resolve(),await Promise.race([e,Promise.resolve(NO_READY_MESSAGE)])}export{workflowEntry};
1
+ import{readSerializedSubagentSessionDepth}from"#harness/subagent-depth.js";import{emitTerminalSessionFailureStep}from"#execution/workflow-steps.js";import{createHook,getWorkflowMetadata,getWritable}from"#compiled/@workflow/core/index.js";import{closeHookIterator,disposeHook}from"#execution/hook-ownership.js";import{normalizeSerializableError}from"#execution/workflow-errors.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";import{coalesceDeliveries}from"#harness/messages.js";import{readChannelRequestId,readRootSessionId}from"#execution/eve-workflow-attributes.js";import{notifyDelegatedParentStep}from"#execution/delegated-parent-notification.js";import{createDelegatedSubagentErrorResult,createDelegatedSubagentSuccessResult}from"#execution/delegated-parent-result.js";import{dispatchAndAwaitTurn}from"#execution/turn-dispatch.js";import{createSessionStep}from"#execution/create-session-step.js";import{fireSessionCallbackStep}from"#execution/session-callback-step.js";import{createSessionDeliveryHook}from"#execution/session-delivery-hook.js";async function workflowEntry(n){"use workflow";let{workflowRunId:a}=getWorkflowMetadata(),o=n.serializedContext[`eve.continuationToken`]||``,c=n.serializedContext[`eve.mode`],l=n.serializedContext[`eve.capabilities`],u=n.serializedContext[`eve.bundle`];n.serializedContext[`eve.sessionId`]=a;let d=getWritable();try{let t=readRootSessionId(n.serializedContext),{subagentDepth:r,subagentMaxDepth:i}=readSerializedSubagentSessionDepth(n.serializedContext),{state:s}=await createSessionStep({compiledArtifactsSource:u.source,continuationToken:o,nodeId:u.nodeId,outputSchema:n.input.outputSchema,rootSessionId:t,sessionId:a,subagentDepth:r,subagentMaxDepth:i});return await runDriverLoop({capabilities:l,driverWritable:d,initialInput:{kind:`deliver`,payloads:[{message:n.input.message,context:n.input.context,outputSchema:n.input.outputSchema}],requestId:readChannelRequestId(n.serializedContext)},mode:c,serializedContext:n.serializedContext,sessionState:s})}catch(e){throw await emitTerminalSessionFailureStep({error:normalizeSerializableError(e),parentWritable:d,serializedContext:n.serializedContext}),await fireSessionCallbackStep({error:normalizeSerializableError(e),serializedContext:n.serializedContext,status:`failed`}),await notifyDelegatedParentStep({result:createDelegatedSubagentErrorResult(n.serializedContext,e),serializedContext:n.serializedContext}),e}}async function runDriverLoop(e){let t=createHook({token:`${e.sessionState.sessionId}:auth`}),r=t[Symbol.asyncIterator](),i=0,nextTurnControlToken=()=>`${e.sessionState.sessionId}:turn-control:${String(i++)}`,s=[],l=createSessionDeliveryHook(s);try{e.sessionState.continuationToken&&await l.rekey(e.sessionState.continuationToken);let t=await dispatchAndAwaitTurn({bufferedDeliveries:s,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:e.initialInput,deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:e.serializedContext,sessionState:e.sessionState});for(;;){if(t.kind===`done`)return await finalizeDone({action:t,driverWritable:e.driverWritable});if(t.kind!==`park`)throw Error(`Driver received unexpected turn action "${t.kind}".`);if(!t.sessionState.continuationToken)throw Error("Cannot park: no continuation token available. The channel must post the first message during the initial turn (anchoring the session) or `send()` must be called with an explicit continuationToken.");if(await l.rekey(t.sessionState.continuationToken),t.authorizationNames&&t.authorizationNames.length>0){let n=t.authorizationNames.length,i=[];for(;i.length<n;){let e=await r.next();if(e.done)break;e.value.kind===`deliver`&&i.push(...e.value.payloads)}t=await dispatchAndAwaitTurn({bufferedDeliveries:s,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:{kind:`deliver`,payloads:i},deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:t.serializedContext,sessionState:t.sessionState});continue}let n=await waitForNextDeliver({bufferedDeliveries:s,deliveryHook:l});if(n===null)return{output:``};let i=await routeDeliverToChildren({auth:n.auth,parentWritable:e.driverWritable,payloads:n.payloads,sessionState:t.sessionState});i!==void 0&&(t=await dispatchAndAwaitTurn({bufferedDeliveries:s,capabilities:e.capabilities,controlToken:nextTurnControlToken(),delivery:{auth:n.auth,kind:`deliver`,payloads:[i],requestId:n.requestId},deliveryHook:l,mode:e.mode,parentWritable:e.driverWritable,serializedContext:t.serializedContext,sessionState:t.sessionState}))}}finally{await l.dispose(),await closeHookIterator(r),await disposeHook(t)}}async function finalizeDone(e){let{output:t,serializedContext:n}=e.action,r=e.action.isError===!0;return await fireSessionCallbackStep({error:r?t:void 0,output:r?void 0:t,serializedContext:n,status:r?`failed`:`completed`}),await notifyDelegatedParentStep({result:r?createDelegatedSubagentErrorResult(n,t):createDelegatedSubagentSuccessResult(n,t),serializedContext:n}),{output:t}}async function waitForNextDeliver(e){if(e.bufferedDeliveries.length>0)return coalesceDeliveries(e.bufferedDeliveries.splice(0));for(;;){let t=await e.deliveryHook.next();if(e.deliveryHook.consumeNext(),t.done)return null;if(t.value.kind!==`deliver`)continue;let n=t.value;for(;;){let t=await takeReadyPayload(e.deliveryHook.next());if(t===NO_READY_MESSAGE||(e.deliveryHook.consumeNext(),t.done))break;t.value.kind===`deliver`&&(n=coalesceDeliveries([n,t.value]))}return n}}const NO_READY_MESSAGE=Symbol(`no-ready-message`);async function takeReadyPayload(e){return await Promise.resolve(),await Promise.race([e,Promise.resolve(NO_READY_MESSAGE)])}export{workflowEntry};
@@ -0,0 +1,33 @@
1
+ import type { ToolSet } from "ai";
2
+ import type { HarnessToolDefinition } from "#harness/execute-tool.js";
3
+ import type { HarnessSession, HarnessToolMap } from "#harness/types.js";
4
+ import type { WorkflowSandboxLifecycle } from "#shared/workflow-sandbox.js";
5
+ type AdvertisedToolSession = Pick<HarnessSession, "rootSessionId" | "subagentDepth" | "subagentMaxDepth">;
6
+ type AdvertisedToolMapInput = {
7
+ readonly session: AdvertisedToolSession;
8
+ readonly tools: HarnessToolMap;
9
+ };
10
+ type AdvertisedToolDefinitionsInput = {
11
+ readonly session: AdvertisedToolSession;
12
+ readonly tools: readonly HarnessToolDefinition[];
13
+ };
14
+ type AdvertisedModelToolsInput = {
15
+ readonly modelTools: ToolSet;
16
+ readonly session: HarnessSession;
17
+ readonly tools: HarnessToolMap;
18
+ readonly workflow?: {
19
+ readonly lifecycle?: (input: {
20
+ readonly session: HarnessSession;
21
+ readonly tools: HarnessToolMap;
22
+ }) => WorkflowSandboxLifecycle | undefined;
23
+ };
24
+ };
25
+ type AdvertisedModelTools = {
26
+ readonly harnessTools: HarnessToolMap;
27
+ readonly modelTools: ToolSet;
28
+ readonly session: HarnessSession;
29
+ };
30
+ export declare function getAdvertisedTools(input: AdvertisedModelToolsInput): Promise<AdvertisedModelTools>;
31
+ export declare function getAdvertisedTools(input: AdvertisedToolMapInput): HarnessToolMap;
32
+ export declare function getAdvertisedTools(input: AdvertisedToolDefinitionsInput): readonly HarnessToolDefinition[];
33
+ export {};
@@ -0,0 +1 @@
1
+ import{resolveSubagentDelegationLimit}from"#harness/subagent-depth.js";import{ensureWorkflowContinuationSecurity,getWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{applyWorkflowTool}from"#harness/workflow-sandbox.js";function getAdvertisedTools(e){return`modelTools`in e?getAdvertisedModelTools(e):isToolDefinitionList(e.tools)?filterSubagentToolDefinitionsAtDepthLimit(e.tools,e.session):filterSubagentToolMapAtDepthLimit(e.tools,e.session)}async function getAdvertisedModelTools(e){let i=filterSubagentToolMapAtDepthLimit(e.tools,e.session);if(e.workflow===void 0)return{harnessTools:i,modelTools:e.modelTools,session:e.session};let a=filterWorkflowHostToolsForRootSession(i,e.session);if(a.size===0)return{harnessTools:i,modelTools:e.modelTools,session:e.session};let o=ensureWorkflowContinuationSecurity(e.session),{modelTools:s}=await applyWorkflowTool({continuationSecurity:getWorkflowContinuationSecurity(o),harnessTools:a,lifecycle:e.workflow.lifecycle?.({session:o,tools:a}),tools:e.modelTools});return{harnessTools:i,modelTools:s,session:o}}function filterSubagentToolDefinitionsAtDepthLimit(t,n){let r=resolveSubagentDelegationLimit(n),i=[];for(let e of t)r.reached&&isDelegatedRuntimeActionTool(e)||i.push(e);return i}function filterSubagentToolMapAtDepthLimit(t,n){let r=resolveSubagentDelegationLimit(n),i=new Map;for(let[e,n]of t)r.reached&&isDelegatedRuntimeActionTool(n)||i.set(e,n);return i}function filterWorkflowHostToolsForRootSession(t,n){let r=new Map,i=resolveSubagentDelegationLimit(n);if(n.rootSessionId!==void 0||i.currentDepth>0)return r;for(let[e,n]of t)isDelegatedRuntimeActionTool(n)&&r.set(e,n);return r}function isDelegatedRuntimeActionTool(e){let t=e.runtimeAction;return t?.kind===`subagent-call`||t?.kind===`remote-agent-call`}function isToolDefinitionList(e){return Array.isArray(e)}export{getAdvertisedTools};
@@ -0,0 +1,17 @@
1
+ import type { HarnessSession } from "#harness/types.js";
2
+ import type { RuntimeActionRequest, RuntimeRemoteAgentCallActionRequest, RuntimeSubagentCallActionRequest } from "#runtime/actions/types.js";
3
+ export declare const DEFAULT_SUBAGENT_MAX_DEPTH = 3;
4
+ export type DelegatedRuntimeActionRequest = RuntimeRemoteAgentCallActionRequest | RuntimeSubagentCallActionRequest;
5
+ export type SubagentDelegationLimit = {
6
+ readonly currentDepth: number;
7
+ readonly maxDepth: number;
8
+ readonly nextChildDepth: number;
9
+ readonly reached: boolean;
10
+ };
11
+ export declare function resolveSubagentDelegationLimit(session: Pick<HarnessSession, "subagentDepth" | "subagentMaxDepth">): SubagentDelegationLimit;
12
+ export declare function readSerializedSubagentSessionDepth(serializedContext: Readonly<Record<string, unknown>>): {
13
+ readonly subagentDepth?: number;
14
+ readonly subagentMaxDepth?: number;
15
+ };
16
+ export declare function isSubagentDelegationAction(action: RuntimeActionRequest): action is DelegatedRuntimeActionRequest;
17
+ export declare function getSubagentDelegationName(action: DelegatedRuntimeActionRequest): string;
@@ -0,0 +1 @@
1
+ import{SubagentDepthKey,SubagentMaxDepthKey}from"#context/keys.js";const DEFAULT_SUBAGENT_MAX_DEPTH=3;function resolveSubagentDelegationLimit(e){let t=parseSubagentDepth(e.subagentDepth),n=parseSubagentMaxDepth(e.subagentMaxDepth)??3;return{currentDepth:t,maxDepth:n,nextChildDepth:t+1,reached:t>=n}}function readSerializedSubagentSessionDepth(n){let r=parseSubagentDepth(n[SubagentDepthKey.name]),i=parseSubagentMaxDepth(n[SubagentMaxDepthKey.name]);return{subagentDepth:r===0?void 0:r,subagentMaxDepth:i}}function isSubagentDelegationAction(e){return e.kind===`subagent-call`||e.kind===`remote-agent-call`}function getSubagentDelegationName(e){switch(e.kind){case`remote-agent-call`:return e.remoteAgentName;case`subagent-call`:return e.subagentName;default:return e}}function parseSubagentDepth(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:0}function parseSubagentMaxDepth(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:void 0}export{DEFAULT_SUBAGENT_MAX_DEPTH,getSubagentDelegationName,isSubagentDelegationAction,readSerializedSubagentSessionDepth,resolveSubagentDelegationLimit};