veryfront 0.1.64 → 0.1.65

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 (67) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/agent/runtime/index.d.ts +1 -0
  3. package/esm/src/agent/runtime/index.d.ts.map +1 -1
  4. package/esm/src/agent/runtime/index.js +10 -2
  5. package/esm/src/channels/control-plane.d.ts +259 -0
  6. package/esm/src/channels/control-plane.d.ts.map +1 -0
  7. package/esm/src/channels/control-plane.js +212 -0
  8. package/esm/src/channels/invoke.d.ts +3 -40
  9. package/esm/src/channels/invoke.d.ts.map +1 -1
  10. package/esm/src/channels/invoke.js +9 -106
  11. package/esm/src/internal-agents/ag-ui-sse.d.ts +35 -0
  12. package/esm/src/internal-agents/ag-ui-sse.d.ts.map +1 -0
  13. package/esm/src/internal-agents/ag-ui-sse.js +263 -0
  14. package/esm/src/internal-agents/control-plane-auth.d.ts +20 -0
  15. package/esm/src/internal-agents/control-plane-auth.d.ts.map +1 -0
  16. package/esm/src/internal-agents/control-plane-auth.js +56 -0
  17. package/esm/src/internal-agents/request-body.d.ts +9 -0
  18. package/esm/src/internal-agents/request-body.d.ts.map +1 -0
  19. package/esm/src/internal-agents/request-body.js +28 -0
  20. package/esm/src/internal-agents/run-stream.d.ts +14 -0
  21. package/esm/src/internal-agents/run-stream.d.ts.map +1 -0
  22. package/esm/src/internal-agents/run-stream.js +259 -0
  23. package/esm/src/internal-agents/schema.d.ts +268 -0
  24. package/esm/src/internal-agents/schema.d.ts.map +1 -0
  25. package/esm/src/internal-agents/schema.js +71 -0
  26. package/esm/src/internal-agents/session-manager.d.ts +63 -0
  27. package/esm/src/internal-agents/session-manager.d.ts.map +1 -0
  28. package/esm/src/internal-agents/session-manager.js +258 -0
  29. package/esm/src/platform/adapters/runtime/deno/adapter.d.ts.map +1 -1
  30. package/esm/src/platform/adapters/runtime/deno/adapter.js +4 -13
  31. package/esm/src/platform/compat/process.d.ts.map +1 -1
  32. package/esm/src/platform/compat/process.js +42 -5
  33. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts +11 -0
  34. package/esm/src/server/handlers/request/agent-run-cancel.handler.d.ts.map +1 -0
  35. package/esm/src/server/handlers/request/agent-run-cancel.handler.js +62 -0
  36. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts +11 -0
  37. package/esm/src/server/handlers/request/agent-run-resume.handler.d.ts.map +1 -0
  38. package/esm/src/server/handlers/request/agent-run-resume.handler.js +77 -0
  39. package/esm/src/server/handlers/request/agent-stream.handler.d.ts +14 -0
  40. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -0
  41. package/esm/src/server/handlers/request/agent-stream.handler.js +86 -0
  42. package/esm/src/server/handlers/request/{channel-assistants.handler.d.ts → internal-agents-list.handler.d.ts} +4 -4
  43. package/esm/src/server/handlers/request/internal-agents-list.handler.d.ts.map +1 -0
  44. package/esm/src/server/handlers/request/internal-agents-list.handler.js +73 -0
  45. package/esm/src/server/runtime-handler/index.d.ts.map +1 -1
  46. package/esm/src/server/runtime-handler/index.js +8 -2
  47. package/package.json +1 -1
  48. package/src/deno.js +1 -1
  49. package/src/src/agent/runtime/index.ts +12 -2
  50. package/src/src/channels/control-plane.ts +332 -0
  51. package/src/src/channels/invoke.ts +12 -157
  52. package/src/src/internal-agents/ag-ui-sse.ts +327 -0
  53. package/src/src/internal-agents/control-plane-auth.ts +82 -0
  54. package/src/src/internal-agents/request-body.ts +42 -0
  55. package/src/src/internal-agents/run-stream.ts +354 -0
  56. package/src/src/internal-agents/schema.ts +102 -0
  57. package/src/src/internal-agents/session-manager.ts +358 -0
  58. package/src/src/platform/adapters/runtime/deno/adapter.ts +9 -11
  59. package/src/src/platform/compat/process.ts +56 -3
  60. package/src/src/server/handlers/request/agent-run-cancel.handler.ts +86 -0
  61. package/src/src/server/handlers/request/agent-run-resume.handler.ts +108 -0
  62. package/src/src/server/handlers/request/agent-stream.handler.ts +125 -0
  63. package/src/src/server/handlers/request/internal-agents-list.handler.ts +100 -0
  64. package/src/src/server/runtime-handler/index.ts +8 -2
  65. package/esm/src/server/handlers/request/channel-assistants.handler.d.ts.map +0 -1
  66. package/esm/src/server/handlers/request/channel-assistants.handler.js +0 -71
  67. package/src/src/server/handlers/request/channel-assistants.handler.ts +0 -94
@@ -0,0 +1,258 @@
1
+ import * as dntShim from "../../_dnt.shims.js";
2
+ function stableJsonStringify(value, depth = 0) {
3
+ if (depth > 64) {
4
+ return JSON.stringify(value);
5
+ }
6
+ if (value === null || typeof value !== "object") {
7
+ return JSON.stringify(value);
8
+ }
9
+ if (Array.isArray(value)) {
10
+ return `[${value.map((item) => stableJsonStringify(item, depth + 1)).join(",")}]`;
11
+ }
12
+ const entries = Object.entries(value)
13
+ .sort(([left], [right]) => left.localeCompare(right))
14
+ .map(([key, item]) => `${JSON.stringify(key)}:${stableJsonStringify(item, depth + 1)}`);
15
+ return `{${entries.join(",")}}`;
16
+ }
17
+ function createToolResultKey(result, isError) {
18
+ return `${isError ? "1" : "0"}:${stableJsonStringify(result)}`;
19
+ }
20
+ export class AgentRunCancelledError extends Error {
21
+ constructor(message = "Run cancelled") {
22
+ super(message);
23
+ this.name = "AgentRunCancelledError";
24
+ }
25
+ }
26
+ export class AgentRunAlreadyExistsError extends Error {
27
+ constructor(runId) {
28
+ super(`Run "${runId}" is already active`);
29
+ this.name = "AgentRunAlreadyExistsError";
30
+ }
31
+ }
32
+ export class RunNotActiveError extends Error {
33
+ constructor(runId) {
34
+ super(`Run "${runId}" is not active`);
35
+ this.name = "RunNotActiveError";
36
+ }
37
+ }
38
+ export class ToolResultNotWaitingError extends Error {
39
+ constructor(runId, toolCallId) {
40
+ super(`Run "${runId}" is not waiting for tool call "${toolCallId}"`);
41
+ this.name = "ToolResultNotWaitingError";
42
+ }
43
+ }
44
+ export class ToolResultConflictError extends Error {
45
+ constructor(runId, toolCallId) {
46
+ super(`Conflicting tool result for run "${runId}" and tool call "${toolCallId}"`);
47
+ this.name = "ToolResultConflictError";
48
+ }
49
+ }
50
+ const DEFAULT_WAITING_FOR_TOOL_TTL_MS = 5 * 60 * 1000;
51
+ const DEFAULT_SESSION_TTL_MS = 15 * 60 * 1000;
52
+ const DEFAULT_MAX_CONCURRENT_SESSIONS = 100;
53
+ export class AgentRunSessionManager {
54
+ options;
55
+ sessions = new Map();
56
+ constructor(options = {}) {
57
+ this.options = options;
58
+ }
59
+ get waitingForToolTtlMs() {
60
+ return this.options.waitingForToolTtlMs ?? DEFAULT_WAITING_FOR_TOOL_TTL_MS;
61
+ }
62
+ get sessionTtlMs() {
63
+ return this.options.sessionTtlMs ?? null;
64
+ }
65
+ get setTimeoutFn() {
66
+ return this.options.setTimeoutFn ?? dntShim.dntGlobalThis.setTimeout.bind(dntShim.dntGlobalThis);
67
+ }
68
+ get clearTimeoutFn() {
69
+ return this.options.clearTimeoutFn ?? globalThis.clearTimeout.bind(dntShim.dntGlobalThis);
70
+ }
71
+ clearWaitingTimeout(session) {
72
+ if (session.waitingTimeoutId === null) {
73
+ return;
74
+ }
75
+ this.clearTimeoutFn(session.waitingTimeoutId);
76
+ session.waitingTimeoutId = null;
77
+ }
78
+ clearSessionTimeout(session) {
79
+ if (session.sessionTimeoutId === null) {
80
+ return;
81
+ }
82
+ this.clearTimeoutFn(session.sessionTimeoutId);
83
+ session.sessionTimeoutId = null;
84
+ }
85
+ scheduleSessionTimeout(session) {
86
+ if (this.sessionTtlMs === null) {
87
+ return;
88
+ }
89
+ this.clearSessionTimeout(session);
90
+ session.sessionTimeoutId = this.setTimeoutFn(() => {
91
+ this.cancelRun(session.runId);
92
+ }, this.sessionTtlMs);
93
+ }
94
+ scheduleWaitingTimeout(session) {
95
+ this.clearWaitingTimeout(session);
96
+ session.waitingTimeoutId = this.setTimeoutFn(() => {
97
+ this.cancelRun(session.runId);
98
+ }, this.waitingForToolTtlMs);
99
+ }
100
+ touchSession(session) {
101
+ if (session.status === "running" || session.status === "waiting") {
102
+ this.scheduleSessionTimeout(session);
103
+ }
104
+ }
105
+ get maxConcurrentSessions() {
106
+ return this.options.maxConcurrentSessions ?? DEFAULT_MAX_CONCURRENT_SESSIONS;
107
+ }
108
+ startRun(input) {
109
+ const existing = this.sessions.get(input.runId);
110
+ if (existing && (existing.status === "running" || existing.status === "waiting")) {
111
+ throw new AgentRunAlreadyExistsError(input.runId);
112
+ }
113
+ if (this.sessions.size >= this.maxConcurrentSessions) {
114
+ throw new Error(`Maximum concurrent sessions (${this.maxConcurrentSessions}) reached`);
115
+ }
116
+ const session = {
117
+ runId: input.runId,
118
+ threadId: input.threadId,
119
+ status: "running",
120
+ abortController: new AbortController(),
121
+ waitingTool: null,
122
+ submittedResults: new Map(),
123
+ waitingTimeoutId: null,
124
+ sessionTimeoutId: null,
125
+ };
126
+ this.sessions.set(input.runId, session);
127
+ this.touchSession(session);
128
+ return session.abortController.signal;
129
+ }
130
+ async waitForToolResult(runId, toolCallId) {
131
+ const session = this.sessions.get(runId);
132
+ if (!session || session.status === "completed" || session.status === "failed") {
133
+ throw new RunNotActiveError(runId);
134
+ }
135
+ if (session.abortController.signal.aborted || session.status === "cancelled") {
136
+ throw new AgentRunCancelledError();
137
+ }
138
+ const existingResult = session.submittedResults.get(toolCallId);
139
+ if (existingResult) {
140
+ session.status = "running";
141
+ this.touchSession(session);
142
+ return { result: existingResult.result, isError: existingResult.isError };
143
+ }
144
+ if (session.waitingTool && session.waitingTool.toolCallId !== toolCallId) {
145
+ throw new ToolResultNotWaitingError(runId, toolCallId);
146
+ }
147
+ session.status = "waiting";
148
+ this.scheduleWaitingTimeout(session);
149
+ this.touchSession(session);
150
+ return await new Promise((resolve, reject) => {
151
+ const abortHandler = () => {
152
+ this.clearWaitingTimeout(session);
153
+ session.waitingTool = null;
154
+ session.status = "cancelled";
155
+ reject(new AgentRunCancelledError());
156
+ };
157
+ session.abortController.signal.addEventListener("abort", abortHandler, { once: true });
158
+ session.waitingTool = {
159
+ toolCallId,
160
+ resolve: (value) => {
161
+ session.abortController.signal.removeEventListener("abort", abortHandler);
162
+ this.clearWaitingTimeout(session);
163
+ session.waitingTool = null;
164
+ session.status = "running";
165
+ this.touchSession(session);
166
+ resolve({ result: value.result, isError: value.isError });
167
+ },
168
+ reject: (reason) => {
169
+ session.abortController.signal.removeEventListener("abort", abortHandler);
170
+ this.clearWaitingTimeout(session);
171
+ session.waitingTool = null;
172
+ reject(reason);
173
+ },
174
+ };
175
+ });
176
+ }
177
+ submitToolResult(runId, input) {
178
+ const session = this.sessions.get(runId);
179
+ if (!session) {
180
+ throw new RunNotActiveError(runId);
181
+ }
182
+ const normalized = {
183
+ toolCallId: input.toolCallId,
184
+ result: input.result,
185
+ isError: Boolean(input.isError),
186
+ key: createToolResultKey(input.result, Boolean(input.isError)),
187
+ };
188
+ const existingResult = session.submittedResults.get(input.toolCallId);
189
+ if (existingResult) {
190
+ if (existingResult.key === normalized.key) {
191
+ return { accepted: true, duplicate: true };
192
+ }
193
+ throw new ToolResultConflictError(runId, input.toolCallId);
194
+ }
195
+ if (session.status === "completed" || session.status === "failed" ||
196
+ session.status === "cancelled") {
197
+ throw new RunNotActiveError(runId);
198
+ }
199
+ if (!session.waitingTool || session.waitingTool.toolCallId !== input.toolCallId) {
200
+ throw new ToolResultNotWaitingError(runId, input.toolCallId);
201
+ }
202
+ session.submittedResults.set(input.toolCallId, normalized);
203
+ this.touchSession(session);
204
+ session.waitingTool.resolve(normalized);
205
+ return { accepted: true };
206
+ }
207
+ cancelRun(runId) {
208
+ const session = this.sessions.get(runId);
209
+ if (!session) {
210
+ return false;
211
+ }
212
+ if (session.status === "completed" || session.status === "failed" ||
213
+ session.status === "cancelled") {
214
+ return false;
215
+ }
216
+ session.status = "cancelled";
217
+ this.clearWaitingTimeout(session);
218
+ this.clearSessionTimeout(session);
219
+ session.abortController.abort(new AgentRunCancelledError());
220
+ session.waitingTool?.reject(new AgentRunCancelledError());
221
+ session.waitingTool = null;
222
+ this.sessions.delete(runId);
223
+ return true;
224
+ }
225
+ completeRun(runId) {
226
+ const session = this.sessions.get(runId);
227
+ if (!session)
228
+ return;
229
+ session.status = "completed";
230
+ this.clearWaitingTimeout(session);
231
+ this.clearSessionTimeout(session);
232
+ session.waitingTool = null;
233
+ this.sessions.delete(runId);
234
+ }
235
+ failRun(runId) {
236
+ const session = this.sessions.get(runId);
237
+ if (!session)
238
+ return;
239
+ session.status = "failed";
240
+ this.clearWaitingTimeout(session);
241
+ this.clearSessionTimeout(session);
242
+ session.waitingTool = null;
243
+ this.sessions.delete(runId);
244
+ }
245
+ getRunStatus(runId) {
246
+ return this.sessions.get(runId)?.status ?? null;
247
+ }
248
+ reset() {
249
+ for (const session of this.sessions.values()) {
250
+ this.clearWaitingTimeout(session);
251
+ this.clearSessionTimeout(session);
252
+ }
253
+ this.sessions.clear();
254
+ }
255
+ }
256
+ export const agentRunSessionManager = new AgentRunSessionManager({
257
+ sessionTtlMs: DEFAULT_SESSION_TTL_MS,
258
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/runtime/deno/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAoHvB,cAAM,qBAAsB,YAAW,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAY/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW;CAuErE;AAED,cAAM,sBAAuB,YAAW,kBAAkB;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAInC;AAED,cAAM,iBAAkB,YAAW,aAAa;IAC9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB;CAS7D;AAED,cAAM,gBAAiB,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IAejE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAanC;AAwBD,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,EAAE,wBAA+B;IAC1C,QAAQ,CAAC,GAAG,yBAAgC;IAC5C,QAAQ,CAAC,MAAM,oBAA2B;IAC1C,QAAQ,CAAC,KAAK,mBAA0B;IAExC,QAAQ,CAAC,YAAY;;;;;;;;;;MAUnB;IAEF,OAAO,CAAC,YAAY,CAA2B;IAE/C,KAAK,CACH,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,EACnF,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC;IAuEZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/src/platform/adapters/runtime/deno/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AAGxD,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAElB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAyHvB,cAAM,qBAAsB,YAAW,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAY/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW;CAuErE;AAED,cAAM,sBAAuB,YAAW,kBAAkB;IACxD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGnC;AAED,cAAM,iBAAkB,YAAW,aAAa;IAC9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,gBAAgB;CAS7D;AAED,cAAM,gBAAiB,YAAW,YAAY;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IAejE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAanC;AAwBD,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,EAAE,EAAG,MAAM,CAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,EAAE,wBAA+B;IAC1C,QAAQ,CAAC,GAAG,yBAAgC;IAC5C,QAAQ,CAAC,MAAM,oBAA2B;IAC1C,QAAQ,CAAC,KAAK,mBAA0B;IAExC,QAAQ,CAAC,YAAY;;;;;;;;;;MAUnB;IAEF,OAAO,CAAC,YAAY,CAA2B;IAE/C,KAAK,CACH,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,EACnF,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC;IAuEZ,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -2,7 +2,7 @@ import * as dntShim from "../../../../../_dnt.shims.js";
2
2
  import { createError, NOT_SUPPORTED, toError } from "../../../../errors/index.js";
3
3
  import { join } from "../../../compat/path/index.js";
4
4
  import { serverLogger } from "../../../../utils/index.js";
5
- import { getEnvOverlayStorage } from "../../../compat/process.js";
5
+ import { env as getEnvObject, getEnv, getEnvOverlayStorage, setEnv, } from "../../../compat/process.js";
6
6
  import { createFileWatcher, createWatcherIterator, enqueueWatchEvent, } from "../shared/watcher-queue.js";
7
7
  import { stopManagedServer } from "../shared/server-lifecycle.js";
8
8
  const logger = serverLogger.component("deno");
@@ -201,22 +201,13 @@ class DenoFileSystemAdapter {
201
201
  }
202
202
  class DenoEnvironmentAdapter {
203
203
  get(key) {
204
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined")
205
- return undefined;
206
- return dntShim.Deno.env.get(key);
204
+ return getEnv(key);
207
205
  }
208
206
  set(key, value) {
209
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined") {
210
- throw NOT_SUPPORTED.create({
211
- detail: "DenoEnvironmentAdapter.set() can only be used in Deno runtime",
212
- });
213
- }
214
- dntShim.Deno.env.set(key, value);
207
+ setEnv(key, value);
215
208
  }
216
209
  toObject() {
217
- if (typeof dntShim.Deno === "undefined" || typeof dntShim.Deno.env === "undefined")
218
- return {};
219
- return dntShim.Deno.env.toObject();
210
+ return getEnvObject();
220
211
  }
221
212
  }
222
213
  class DenoServerAdapter {
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/compat/process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/src/platform/compat/process.ts"],"names":[],"mappings":"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"}
@@ -55,18 +55,45 @@ export function chdir(directory) {
55
55
  }
56
56
  throw new Error("chdir() is not supported in this runtime");
57
57
  }
58
+ function getEnvOverlayStore() {
59
+ const storage = getEnvOverlayStorage();
60
+ const store = storage?.getStore();
61
+ return store instanceof Map ? store : null;
62
+ }
63
+ function getOverlayEnvValue(store, key) {
64
+ if (!store?.has(key)) {
65
+ return { hasValue: false, value: undefined };
66
+ }
67
+ const value = store.get(key);
68
+ return { hasValue: true, value: value ?? undefined };
69
+ }
58
70
  export function env() {
59
- if (IS_DENO)
60
- return dntShim.Deno.env.toObject();
61
- if (runtimeProcess)
62
- return runtimeProcess.env;
63
- return {};
71
+ const base = IS_DENO
72
+ ? dntShim.Deno.env.toObject()
73
+ : runtimeProcess
74
+ ? { ...runtimeProcess.env }
75
+ : {};
76
+ const overlay = getEnvOverlayStore();
77
+ if (!overlay)
78
+ return base;
79
+ for (const [key, value] of overlay.entries()) {
80
+ if (value === null) {
81
+ delete base[key];
82
+ continue;
83
+ }
84
+ base[key] = value;
85
+ }
86
+ return base;
64
87
  }
65
88
  /**
66
89
  * Read a host-level environment variable without consulting any project env overlay.
67
90
  * Use this for framework-owned runtime configuration that should not be shadowed by tenant env.
68
91
  */
69
92
  export function getHostEnv(key) {
93
+ const overlayResult = getOverlayEnvValue(getEnvOverlayStore(), key);
94
+ if (overlayResult.hasValue) {
95
+ return overlayResult.value;
96
+ }
70
97
  if (IS_DENO)
71
98
  return dntShim.Deno.env.get(key);
72
99
  if (runtimeProcess)
@@ -156,6 +183,11 @@ export function getEnvBoolean(key, fallback = false, options = {}) {
156
183
  return fallback;
157
184
  }
158
185
  export function setEnv(key, value) {
186
+ const overlay = getEnvOverlayStore();
187
+ if (overlay) {
188
+ overlay.set(key, value);
189
+ return;
190
+ }
159
191
  if (IS_DENO) {
160
192
  dntShim.Deno.env.set(key, value);
161
193
  return;
@@ -167,6 +199,11 @@ export function setEnv(key, value) {
167
199
  throw new Error("setEnv() is not supported in this runtime");
168
200
  }
169
201
  export function deleteEnv(key) {
202
+ const overlay = getEnvOverlayStore();
203
+ if (overlay) {
204
+ overlay.set(key, null);
205
+ return;
206
+ }
170
207
  if (IS_DENO) {
171
208
  dntShim.Deno.env.delete(key);
172
209
  return;
@@ -0,0 +1,11 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { type AgentRunSessionManager } from "../../../internal-agents/session-manager.js";
3
+ import { BaseHandler } from "../response/base.js";
4
+ import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
5
+ export declare class AgentRunCancelHandler extends BaseHandler {
6
+ private readonly sessionManager;
7
+ metadata: HandlerMetadata;
8
+ constructor(sessionManager?: AgentRunSessionManager);
9
+ handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
10
+ }
11
+ //# sourceMappingURL=agent-run-cancel.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-cancel.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-cancel.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,6CAA6C,CAAC;AAMrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AASnG,qBAAa,qBAAsB,SAAQ,WAAW;IAOxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAkDhF"}
@@ -0,0 +1,62 @@
1
+ import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
2
+ import { agentRunSessionManager, } from "../../../internal-agents/session-manager.js";
3
+ import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
4
+ import { BaseHandler } from "../response/base.js";
5
+ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
6
+ const CANCEL_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)$/;
7
+ function getRunId(pathname) {
8
+ return CANCEL_PATH_REGEX.exec(pathname)?.[1] ?? null;
9
+ }
10
+ export class AgentRunCancelHandler extends BaseHandler {
11
+ sessionManager;
12
+ metadata = {
13
+ name: "AgentRunCancelHandler",
14
+ priority: PRIORITY_MEDIUM_API,
15
+ patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "DELETE" }],
16
+ };
17
+ constructor(sessionManager = agentRunSessionManager) {
18
+ super();
19
+ this.sessionManager = sessionManager;
20
+ }
21
+ async handle(req, ctx) {
22
+ if (!this.shouldHandle(req, ctx)) {
23
+ return this.continue();
24
+ }
25
+ const runId = getRunId(new URL(req.url).pathname);
26
+ if (!runId) {
27
+ return this.continue();
28
+ }
29
+ return this.withProxyContext(ctx, async () => {
30
+ const builder = this.createResponseBuilder(ctx)
31
+ .withCORS(req, ctx.securityConfig?.cors)
32
+ .withSecurity(ctx.securityConfig ?? undefined, req);
33
+ try {
34
+ const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
35
+ await verifyControlPlaneRequest(req, ctx, rawBody, {
36
+ expectedSubject: runId,
37
+ expectedSurface: "studio",
38
+ });
39
+ const accepted = this.sessionManager.cancelRun(runId);
40
+ if (accepted) {
41
+ return this.respond(builder.json({ accepted: true }, 202));
42
+ }
43
+ return this.respond(builder.build(null, 204));
44
+ }
45
+ catch (error) {
46
+ if (error instanceof InternalAgentRequestBodyTooLargeError) {
47
+ return this.respond(builder.json({ error: error.message }, error.status));
48
+ }
49
+ if (error instanceof ControlPlaneRequestError) {
50
+ return this.respond(builder.json({ error: error.message }, error.status));
51
+ }
52
+ this.logWarn("Internal agent run cancel failed", {
53
+ error: error instanceof Error ? error.message : String(error),
54
+ runId,
55
+ projectId: ctx.projectId,
56
+ projectSlug: ctx.projectSlug,
57
+ });
58
+ return this.respond(builder.json({ error: "Internal cancel failed" }, 500));
59
+ }
60
+ });
61
+ }
62
+ }
@@ -0,0 +1,11 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { type AgentRunSessionManager } from "../../../internal-agents/session-manager.js";
3
+ import { BaseHandler } from "../response/base.js";
4
+ import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
5
+ export declare class AgentRunResumeHandler extends BaseHandler {
6
+ private readonly sessionManager;
7
+ metadata: HandlerMetadata;
8
+ constructor(sessionManager?: AgentRunSessionManager);
9
+ handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
10
+ }
11
+ //# sourceMappingURL=agent-run-resume.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-resume.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-run-resume.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAKrD,OAAO,EACL,KAAK,sBAAsB,EAK5B,MAAM,6CAA6C,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AASnG,qBAAa,qBAAsB,SAAQ,WAAW;IAOxC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,cAAc,GAAE,sBAA+C;IAItF,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoEhF"}
@@ -0,0 +1,77 @@
1
+ import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
2
+ import { agentRunSessionManager, RunNotActiveError, ToolResultConflictError, ToolResultNotWaitingError, } from "../../../internal-agents/session-manager.js";
3
+ import { INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
4
+ import { ResumeSignalSchema } from "../../../internal-agents/schema.js";
5
+ import { BaseHandler } from "../response/base.js";
6
+ import { PRIORITY_MEDIUM_API } from "../../../utils/constants/index.js";
7
+ const RESUME_PATH_REGEX = /^\/internal\/agents\/runs\/([^/]+)\/resume$/;
8
+ function getRunId(pathname) {
9
+ return RESUME_PATH_REGEX.exec(pathname)?.[1] ?? null;
10
+ }
11
+ export class AgentRunResumeHandler extends BaseHandler {
12
+ sessionManager;
13
+ metadata = {
14
+ name: "AgentRunResumeHandler",
15
+ priority: PRIORITY_MEDIUM_API,
16
+ patterns: [{ pattern: "/internal/agents/runs/", prefix: true, method: "POST" }],
17
+ };
18
+ constructor(sessionManager = agentRunSessionManager) {
19
+ super();
20
+ this.sessionManager = sessionManager;
21
+ }
22
+ async handle(req, ctx) {
23
+ if (!this.shouldHandle(req, ctx)) {
24
+ return this.continue();
25
+ }
26
+ const runId = getRunId(new URL(req.url).pathname);
27
+ if (!runId) {
28
+ return this.continue();
29
+ }
30
+ return this.withProxyContext(ctx, async () => {
31
+ const builder = this.createResponseBuilder(ctx)
32
+ .withCORS(req, ctx.securityConfig?.cors)
33
+ .withSecurity(ctx.securityConfig ?? undefined, req);
34
+ try {
35
+ const rawBody = await readInternalAgentRequestBody(req, INTERNAL_AGENT_CONTROL_PLANE_MAX_BODY_BYTES);
36
+ await verifyControlPlaneRequest(req, ctx, rawBody, {
37
+ expectedSubject: runId,
38
+ expectedSurface: "studio",
39
+ });
40
+ const signal = ResumeSignalSchema.parse(JSON.parse(rawBody));
41
+ const outcome = this.sessionManager.submitToolResult(runId, {
42
+ toolCallId: signal.toolCallId,
43
+ result: signal.result,
44
+ isError: signal.isError,
45
+ });
46
+ return this.respond(builder.json(outcome, 200));
47
+ }
48
+ catch (error) {
49
+ if (error instanceof InternalAgentRequestBodyTooLargeError) {
50
+ return this.respond(builder.json({ error: error.message }, error.status));
51
+ }
52
+ if (error instanceof ControlPlaneRequestError) {
53
+ return this.respond(builder.json({ error: error.message }, error.status));
54
+ }
55
+ if (error instanceof SyntaxError || (error instanceof Error && error.name === "ZodError")) {
56
+ return this.respond(builder.json({ error: "Invalid resume request" }, 400));
57
+ }
58
+ if (error instanceof ToolResultConflictError) {
59
+ return this.respond(builder.json({ error: "TOOL_RESULT_CONFLICT" }, 409));
60
+ }
61
+ if (error instanceof ToolResultNotWaitingError) {
62
+ return this.respond(builder.json({ error: "TOOL_RESULT_NOT_WAITING" }, 409));
63
+ }
64
+ if (error instanceof RunNotActiveError) {
65
+ return this.respond(builder.json({ error: "RUN_NOT_ACTIVE" }, 410));
66
+ }
67
+ this.logWarn("Internal agent run resume failed", {
68
+ error: error instanceof Error ? error.message : String(error),
69
+ runId,
70
+ projectId: ctx.projectId,
71
+ projectSlug: ctx.projectSlug,
72
+ });
73
+ return this.respond(builder.json({ error: "Internal resume failed" }, 500));
74
+ }
75
+ });
76
+ }
77
+ }
@@ -0,0 +1,14 @@
1
+ import * as dntShim from "../../../../_dnt.shims.js";
2
+ import { type RuntimeAgentDiscoveryDeps } from "../../../channels/control-plane.js";
3
+ import { type RuntimeAgentStreamExecutionDeps } from "../../../internal-agents/run-stream.js";
4
+ import { BaseHandler } from "../response/base.js";
5
+ import type { HandlerContext, HandlerMetadata, HandlerResult } from "../types.js";
6
+ export interface AgentStreamHandlerDeps extends RuntimeAgentDiscoveryDeps, RuntimeAgentStreamExecutionDeps {
7
+ }
8
+ export declare class AgentStreamHandler extends BaseHandler {
9
+ private readonly deps;
10
+ metadata: HandlerMetadata;
11
+ constructor(deps?: AgentStreamHandlerDeps);
12
+ handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
13
+ }
14
+ //# sourceMappingURL=agent-stream.handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAehD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;CAAG;AAsBvE,qBAAa,kBAAmB,SAAQ,WAAW;IAOrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,QAAQ,EAAE,eAAe,CAIvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIjE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAgEhF"}