@assemblyline-agents/runtime 3.2.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/background-subagents.d.ts.map +1 -1
- package/dist/background-subagents.js +8 -3
- package/dist/background-subagents.js.map +1 -1
- package/dist/harness-loop.d.ts +1 -1
- package/dist/harness-loop.d.ts.map +1 -1
- package/dist/harness-loop.js +10 -1
- package/dist/harness-loop.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -6
- package/dist/index.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js.map +1 -1
- package/dist/runtime-types.d.ts +8 -0
- package/dist/runtime-types.d.ts.map +1 -1
- package/dist/sandbox-authored-tool-child.d.ts +7 -0
- package/dist/sandbox-authored-tool-child.d.ts.map +1 -0
- package/dist/sandbox-authored-tool-child.js +217 -0
- package/dist/sandbox-authored-tool-child.js.map +1 -0
- package/dist/sandbox-authored-tool-executor.d.ts +23 -0
- package/dist/sandbox-authored-tool-executor.d.ts.map +1 -0
- package/dist/sandbox-authored-tool-executor.js +290 -0
- package/dist/sandbox-authored-tool-executor.js.map +1 -0
- package/dist/sandbox-tool-bridge.d.ts +19 -0
- package/dist/sandbox-tool-bridge.d.ts.map +1 -0
- package/dist/sandbox-tool-bridge.js +227 -0
- package/dist/sandbox-tool-bridge.js.map +1 -0
- package/dist/source-loader.d.ts +10 -0
- package/dist/source-loader.d.ts.map +1 -1
- package/dist/source-loader.js +64 -3
- package/dist/source-loader.js.map +1 -1
- package/dist/subagent-execution.d.ts +9 -0
- package/dist/subagent-execution.d.ts.map +1 -1
- package/dist/subagent-execution.js +86 -1
- package/dist/subagent-execution.js.map +1 -1
- package/dist/tool-apis.d.ts +1 -1
- package/dist/tool-apis.d.ts.map +1 -1
- package/dist/tool-apis.js +10 -4
- package/dist/tool-apis.js.map +1 -1
- package/dist/tool-execution.d.ts +12 -3
- package/dist/tool-execution.d.ts.map +1 -1
- package/dist/tool-execution.js +52 -12
- package/dist/tool-execution.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
const BRIDGE_KEY = "__assemblyLineBridge";
|
|
3
|
+
const BLOCKED_PROPERTY_NAMES = new Set(["__proto__", "constructor", "prototype"]);
|
|
4
|
+
export class SandboxToolBridgeRegistry {
|
|
5
|
+
functions = new Map();
|
|
6
|
+
serializeContext(context) {
|
|
7
|
+
return this.serialize(toolContextSurface(context));
|
|
8
|
+
}
|
|
9
|
+
serialize(value, seen = new WeakSet()) {
|
|
10
|
+
if (value === undefined)
|
|
11
|
+
return { [BRIDGE_KEY]: "undefined" };
|
|
12
|
+
if (value === null || typeof value === "string" || typeof value === "boolean")
|
|
13
|
+
return value;
|
|
14
|
+
if (typeof value === "number")
|
|
15
|
+
return Number.isFinite(value) ? value : String(value);
|
|
16
|
+
if (typeof value === "bigint")
|
|
17
|
+
return { [BRIDGE_KEY]: "bigint", value: String(value) };
|
|
18
|
+
if (typeof value === "function") {
|
|
19
|
+
const id = randomUUID();
|
|
20
|
+
this.functions.set(id, value);
|
|
21
|
+
return { [BRIDGE_KEY]: "function", id };
|
|
22
|
+
}
|
|
23
|
+
if (isPromiseLike(value)) {
|
|
24
|
+
const id = randomUUID();
|
|
25
|
+
this.functions.set(id, () => value);
|
|
26
|
+
return { [BRIDGE_KEY]: "promise", id };
|
|
27
|
+
}
|
|
28
|
+
if (isAsyncIterable(value)) {
|
|
29
|
+
const iterator = value[Symbol.asyncIterator]();
|
|
30
|
+
const id = randomUUID();
|
|
31
|
+
this.functions.set(id, () => iterator.next());
|
|
32
|
+
return { [BRIDGE_KEY]: "asyncIterable", id };
|
|
33
|
+
}
|
|
34
|
+
if (value instanceof Uint8Array) {
|
|
35
|
+
return { [BRIDGE_KEY]: "bytes", value: Buffer.from(value).toString("base64") };
|
|
36
|
+
}
|
|
37
|
+
if (value instanceof Date)
|
|
38
|
+
return value.toISOString();
|
|
39
|
+
if (!value || typeof value !== "object")
|
|
40
|
+
return String(value);
|
|
41
|
+
if (seen.has(value))
|
|
42
|
+
return { [BRIDGE_KEY]: "circular" };
|
|
43
|
+
seen.add(value);
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
const output = value.map((item) => this.serialize(item, seen));
|
|
46
|
+
seen.delete(value);
|
|
47
|
+
return output;
|
|
48
|
+
}
|
|
49
|
+
const output = {};
|
|
50
|
+
for (const [key, item] of publicObjectEntries(value)) {
|
|
51
|
+
output[key] = this.serialize(item, seen);
|
|
52
|
+
}
|
|
53
|
+
seen.delete(value);
|
|
54
|
+
return output;
|
|
55
|
+
}
|
|
56
|
+
decode(value, invokeCallback) {
|
|
57
|
+
if (Array.isArray(value))
|
|
58
|
+
return value.map((item) => this.decode(item, invokeCallback));
|
|
59
|
+
if (!value || typeof value !== "object")
|
|
60
|
+
return value;
|
|
61
|
+
const marker = value;
|
|
62
|
+
if (marker[BRIDGE_KEY] === "undefined")
|
|
63
|
+
return undefined;
|
|
64
|
+
if (marker[BRIDGE_KEY] === "bigint")
|
|
65
|
+
return BigInt(String(marker.value));
|
|
66
|
+
if (marker[BRIDGE_KEY] === "bytes")
|
|
67
|
+
return Uint8Array.from(Buffer.from(String(marker.value), "base64"));
|
|
68
|
+
if (marker[BRIDGE_KEY] === "callback") {
|
|
69
|
+
const callbackId = String(marker.id);
|
|
70
|
+
return (...args) => invokeCallback(callbackId, args);
|
|
71
|
+
}
|
|
72
|
+
const output = {};
|
|
73
|
+
for (const [key, item] of Object.entries(marker))
|
|
74
|
+
output[key] = this.decode(item, invokeCallback);
|
|
75
|
+
return output;
|
|
76
|
+
}
|
|
77
|
+
async invoke(functionId, args) {
|
|
78
|
+
const fn = this.functions.get(functionId);
|
|
79
|
+
if (!fn)
|
|
80
|
+
throw new Error(`Sandbox authored tool requested unknown host capability ${functionId}.`);
|
|
81
|
+
return fn(...args);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export function bridgeError(error, registry) {
|
|
85
|
+
const candidate = error && typeof error === "object" ? error : undefined;
|
|
86
|
+
const properties = {};
|
|
87
|
+
if (candidate) {
|
|
88
|
+
for (const key of Object.getOwnPropertyNames(candidate)) {
|
|
89
|
+
if (key === "name" || key === "message" || key === "stack")
|
|
90
|
+
continue;
|
|
91
|
+
properties[key] = registry.serialize(candidate[key]);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const name = candidate && typeof candidate.name === "string" ? candidate.name : "Error";
|
|
95
|
+
const message = candidate && typeof candidate.message === "string" ? candidate.message : String(error);
|
|
96
|
+
const stack = candidate && typeof candidate.stack === "string" ? candidate.stack : undefined;
|
|
97
|
+
return { name, message, ...(stack ? { stack } : {}), ...(Object.keys(properties).length > 0 ? { properties } : {}) };
|
|
98
|
+
}
|
|
99
|
+
export function reviveBridgeError(value) {
|
|
100
|
+
const error = new Error(value?.message ?? "Sandbox authored tool failed.");
|
|
101
|
+
error.name = value?.name ?? "Error";
|
|
102
|
+
if (value?.stack)
|
|
103
|
+
error.stack = value.stack;
|
|
104
|
+
for (const [key, item] of Object.entries(value?.properties ?? {})) {
|
|
105
|
+
error[key] = revivePlainValue(item);
|
|
106
|
+
}
|
|
107
|
+
return error;
|
|
108
|
+
}
|
|
109
|
+
function toolContextSurface(context) {
|
|
110
|
+
return {
|
|
111
|
+
runId: context.runId,
|
|
112
|
+
agentRevision: context.agentRevision,
|
|
113
|
+
...(context.principal ? { principal: context.principal } : {}),
|
|
114
|
+
...(context.initiator ? { initiator: context.initiator } : {}),
|
|
115
|
+
audience: context.audience,
|
|
116
|
+
approvedToolCall: context.approvedToolCall,
|
|
117
|
+
connections: Object.fromEntries(Object.entries(context.connections).map(([name, connection]) => [
|
|
118
|
+
name,
|
|
119
|
+
connectionSurface(connection)
|
|
120
|
+
])),
|
|
121
|
+
...(context.channel ? {
|
|
122
|
+
channel: {
|
|
123
|
+
name: context.channel.name,
|
|
124
|
+
env: context.channel.env,
|
|
125
|
+
...(context.channel.turn ? { turn: context.channel.turn } : {}),
|
|
126
|
+
...(context.channel.fetch ? { fetch: context.channel.fetch } : {})
|
|
127
|
+
}
|
|
128
|
+
} : {}),
|
|
129
|
+
...(context.getConnectionToken ? { getConnectionToken: context.getConnectionToken } : {}),
|
|
130
|
+
...(context.requireConnectionAuth ? { requireConnectionAuth: context.requireConnectionAuth } : {}),
|
|
131
|
+
getSandbox: context.getSandbox,
|
|
132
|
+
...(context.hydrateSandboxPath ? { hydrateSandboxPath: context.hydrateSandboxPath } : {}),
|
|
133
|
+
...(context.recordSandboxTombstone ? { recordSandboxTombstone: context.recordSandboxTombstone } : {}),
|
|
134
|
+
...(context.spawnSubagent ? { spawnSubagent: context.spawnSubagent } : {}),
|
|
135
|
+
...(context.blob ? { blob: apiSurface(context.blob, ["put", "get"]) } : {}),
|
|
136
|
+
...(context.memory ? { memory: apiSurface(context.memory, ["list", "search", "read", "write"]) } : {}),
|
|
137
|
+
...(context.resources ? { resources: apiSurface(context.resources, ["list", "read", "project"]) } : {}),
|
|
138
|
+
askQuestion: context.askQuestion,
|
|
139
|
+
reportProgress: context.reportProgress,
|
|
140
|
+
emit: context.emit,
|
|
141
|
+
step: context.step,
|
|
142
|
+
...(context.selfImprovement ? {
|
|
143
|
+
selfImprovement: apiSurface(context.selfImprovement, ["saveSkill", "listSkills", "deleteSkill"])
|
|
144
|
+
} : {}),
|
|
145
|
+
...(context.automationManager ? {
|
|
146
|
+
automationManager: apiSurface(context.automationManager, ["createAutomation", "listAutomations", "updateAutomation", "deleteAutomation"])
|
|
147
|
+
} : {}),
|
|
148
|
+
...(context.scheduleManager ? {
|
|
149
|
+
scheduleManager: apiSurface(context.scheduleManager, ["createSchedule", "listSchedules", "updateSchedule", "deleteSchedule"])
|
|
150
|
+
} : {}),
|
|
151
|
+
...(context.connectionManager ? {
|
|
152
|
+
connectionManager: apiSurface(context.connectionManager, ["saveConnection", "listConnections", "deleteConnection"])
|
|
153
|
+
} : {}),
|
|
154
|
+
deliveryManager: apiSurface(context.deliveryManager, ["schedule"]),
|
|
155
|
+
agentState: {
|
|
156
|
+
revision: context.agentState.revision,
|
|
157
|
+
...apiSurface(context.agentState, ["get", "set", "delete"])
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function apiSurface(value, methodNames) {
|
|
162
|
+
const candidate = value;
|
|
163
|
+
return Object.fromEntries(methodNames.flatMap((name) => {
|
|
164
|
+
const method = candidate[name];
|
|
165
|
+
return typeof method === "function" ? [[name, method.bind(value)]] : [];
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
function connectionSurface(value) {
|
|
169
|
+
if (!value || typeof value !== "object")
|
|
170
|
+
return value;
|
|
171
|
+
const methods = new Map();
|
|
172
|
+
for (const [name, item] of publicObjectEntries(value)) {
|
|
173
|
+
if (typeof item === "function")
|
|
174
|
+
methods.set(name, item);
|
|
175
|
+
}
|
|
176
|
+
return methods.size > 0 ? Object.fromEntries(methods) : value;
|
|
177
|
+
}
|
|
178
|
+
function publicObjectEntries(value) {
|
|
179
|
+
const entries = new Map();
|
|
180
|
+
for (const [key, item] of Object.entries(value)) {
|
|
181
|
+
if (!BLOCKED_PROPERTY_NAMES.has(key))
|
|
182
|
+
entries.set(key, item);
|
|
183
|
+
}
|
|
184
|
+
let prototype = Object.getPrototypeOf(value);
|
|
185
|
+
while (prototype && prototype !== Object.prototype) {
|
|
186
|
+
for (const name of Object.getOwnPropertyNames(prototype)) {
|
|
187
|
+
if (BLOCKED_PROPERTY_NAMES.has(name) || name.startsWith("_"))
|
|
188
|
+
continue;
|
|
189
|
+
const descriptor = Object.getOwnPropertyDescriptor(prototype, name);
|
|
190
|
+
try {
|
|
191
|
+
if (typeof descriptor?.value === "function")
|
|
192
|
+
entries.set(name, descriptor.value.bind(value));
|
|
193
|
+
else if (descriptor?.get)
|
|
194
|
+
entries.set(name, descriptor.get.call(value));
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// A public getter that is not valid in the current state is omitted.
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
201
|
+
}
|
|
202
|
+
return [...entries];
|
|
203
|
+
}
|
|
204
|
+
function revivePlainValue(value) {
|
|
205
|
+
if (Array.isArray(value))
|
|
206
|
+
return value.map(revivePlainValue);
|
|
207
|
+
if (!value || typeof value !== "object")
|
|
208
|
+
return value;
|
|
209
|
+
const marker = value;
|
|
210
|
+
if (marker[BRIDGE_KEY] === "undefined")
|
|
211
|
+
return undefined;
|
|
212
|
+
if (marker[BRIDGE_KEY] === "bigint")
|
|
213
|
+
return BigInt(String(marker.value));
|
|
214
|
+
if (marker[BRIDGE_KEY] === "bytes")
|
|
215
|
+
return Uint8Array.from(Buffer.from(String(marker.value), "base64"));
|
|
216
|
+
const output = {};
|
|
217
|
+
for (const [key, item] of Object.entries(marker))
|
|
218
|
+
output[key] = revivePlainValue(item);
|
|
219
|
+
return output;
|
|
220
|
+
}
|
|
221
|
+
function isPromiseLike(value) {
|
|
222
|
+
return Boolean(value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function");
|
|
223
|
+
}
|
|
224
|
+
function isAsyncIterable(value) {
|
|
225
|
+
return Boolean(value && typeof value === "object" && typeof value[Symbol.asyncIterator] === "function");
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=sandbox-tool-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-tool-bridge.js","sourceRoot":"","sources":["../src/sandbox-tool-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,GAAG,sBAAsB,CAAC;AAC1C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAYlF,MAAM,OAAO,yBAAyB;IACnB,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEnE,gBAAgB,CAAC,OAA6B;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,OAAO,IAAI,OAAO,EAAU;QACpD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;QAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACvF,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAA2B,CAAC,CAAC;YACpD,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,CAAC;QACD,IAAI,KAAK,YAAY,IAAI;YAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,KAAc,EAAE,cAAsC;QAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QACzD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,OAAO;YAAE,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACxG,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAClG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,IAAe;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,UAAU,GAAG,CAAC,CAAC;QACnG,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,QAAmC;IAC7E,MAAM,SAAS,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YACxD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO;gBAAE,SAAS;YACrE,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,SAAS,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAwC;IACxE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,+BAA+B,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC;IACpC,IAAI,KAAK,EAAE,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,KAA4C,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA6B;IACvD,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;YAC9F,IAAI;YACJ,iBAAiB,CAAC,UAAU,CAAC;SAC9B,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACpB,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;gBAC1B,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG;gBACxB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE;SACF,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvG,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAC5B,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;SACjG,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9B,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;SAC1I,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAC5B,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;SAC9H,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9B,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;SACpH,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,eAAe,EAAE,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,CAAC;QAClE,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ;YACrC,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC5D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,WAAqB;IACtD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAkB,CAAC;IAC9D,OAAO,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACvE,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC;gBACH,IAAI,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;qBACxF,IAAI,UAAU,EAAE,GAAG;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;YACvE,CAAC;QACH,CAAC;QACD,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAkB,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACzD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,OAAO;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxG,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AAClJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAA8C,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,CAAC,CAAC;AACpJ,CAAC"}
|
package/dist/source-loader.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface AgentSourceModuleLoaderOptions {
|
|
|
3
3
|
manifest: AgentManifest;
|
|
4
4
|
sourceBundle?: Record<string, string>;
|
|
5
5
|
cacheRoot?: string;
|
|
6
|
+
/** Package-resolution root used when producing self-contained sandbox bundles. */
|
|
7
|
+
packageRoot?: string;
|
|
6
8
|
}
|
|
7
9
|
export declare const RUNTIME_MODULE_CACHE_UNWRITABLE_CODE = "runtime_module_cache_unwritable";
|
|
8
10
|
export declare class RuntimeModuleCacheUnwritableError extends Error {
|
|
@@ -14,14 +16,22 @@ export declare class AgentSourceModuleLoader {
|
|
|
14
16
|
private readonly manifest;
|
|
15
17
|
private readonly sourceBundle;
|
|
16
18
|
private readonly cacheRoot;
|
|
19
|
+
private readonly packageRoots;
|
|
17
20
|
private readonly moduleCache;
|
|
18
21
|
private cacheReady;
|
|
19
22
|
constructor(options: AgentSourceModuleLoaderOptions);
|
|
20
23
|
load<T = Record<string, unknown>>(source: SourceReference): Promise<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Bundle an authored module without importing it into the host process.
|
|
26
|
+
* Bare dependencies are included so the resulting ESM file can execute in
|
|
27
|
+
* an isolated sandbox that has Node.js but no copy of the host installation.
|
|
28
|
+
*/
|
|
29
|
+
bundleForSandbox(source: SourceReference): Promise<string>;
|
|
21
30
|
ensureCacheReady(): void;
|
|
22
31
|
private bundleAndImport;
|
|
23
32
|
readSource(path: string): string;
|
|
24
33
|
private sourceBundlePlugin;
|
|
34
|
+
private resolvePackage;
|
|
25
35
|
private resolveExistingSource;
|
|
26
36
|
}
|
|
27
37
|
//# sourceMappingURL=source-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-loader.d.ts","sourceRoot":"","sources":["../src/source-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"source-loader.d.ts","sourceRoot":"","sources":["../src/source-loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,oCAAoC,oCAAoC,CAAC;AAEtF,qBAAa,iCAAkC,SAAQ,KAAK;IAG9C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,QAAQ,CAAC,IAAI,qCAAwC;gBAEhC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAIvD;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,8BAA8B;IAO7C,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;IAkB5E;;;;OAIG;IACG,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBhE,gBAAgB,IAAI,IAAI;YAkBV,eAAe;IAuB7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOhC,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,qBAAqB;CAM9B"}
|
package/dist/source-loader.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
2
3
|
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
4
|
import { dirname, extname, join, posix } from "node:path";
|
|
4
5
|
import { pathToFileURL } from "node:url";
|
|
@@ -18,12 +19,14 @@ export class AgentSourceModuleLoader {
|
|
|
18
19
|
manifest;
|
|
19
20
|
sourceBundle;
|
|
20
21
|
cacheRoot;
|
|
22
|
+
packageRoots;
|
|
21
23
|
moduleCache = new Map();
|
|
22
24
|
cacheReady = false;
|
|
23
25
|
constructor(options) {
|
|
24
26
|
this.manifest = options.manifest;
|
|
25
27
|
this.sourceBundle = options.sourceBundle ?? {};
|
|
26
28
|
this.cacheRoot = options.cacheRoot ?? defaultModuleCacheRoot(this.manifest.root);
|
|
29
|
+
this.packageRoots = [...new Set([options.packageRoot, this.manifest.root].filter((value) => Boolean(value)))];
|
|
27
30
|
}
|
|
28
31
|
async load(source) {
|
|
29
32
|
const cacheKey = createHash("sha256")
|
|
@@ -44,6 +47,28 @@ export class AgentSourceModuleLoader {
|
|
|
44
47
|
throw error;
|
|
45
48
|
}
|
|
46
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Bundle an authored module without importing it into the host process.
|
|
52
|
+
* Bare dependencies are included so the resulting ESM file can execute in
|
|
53
|
+
* an isolated sandbox that has Node.js but no copy of the host installation.
|
|
54
|
+
*/
|
|
55
|
+
async bundleForSandbox(source) {
|
|
56
|
+
const bundled = await esbuild.build({
|
|
57
|
+
bundle: true,
|
|
58
|
+
entryPoints: [source.path],
|
|
59
|
+
format: "esm",
|
|
60
|
+
platform: "node",
|
|
61
|
+
target: "node22",
|
|
62
|
+
write: false,
|
|
63
|
+
packages: "bundle",
|
|
64
|
+
plugins: [this.sourceBundlePlugin({ bundlePackages: true })],
|
|
65
|
+
logLevel: "silent"
|
|
66
|
+
});
|
|
67
|
+
const output = bundled.outputFiles[0]?.text;
|
|
68
|
+
if (!output)
|
|
69
|
+
throw new Error(`Failed to bundle Assembly Line sandbox module ${source.path}.`);
|
|
70
|
+
return output;
|
|
71
|
+
}
|
|
47
72
|
ensureCacheReady() {
|
|
48
73
|
if (this.cacheReady)
|
|
49
74
|
return;
|
|
@@ -94,11 +119,13 @@ export class AgentSourceModuleLoader {
|
|
|
94
119
|
return bundled;
|
|
95
120
|
return readFileSync(join(this.manifest.root, normalized), "utf8");
|
|
96
121
|
}
|
|
97
|
-
sourceBundlePlugin() {
|
|
122
|
+
sourceBundlePlugin(options = {}) {
|
|
98
123
|
return {
|
|
99
124
|
name: "assembly-line-source-bundle",
|
|
100
125
|
setup: (build) => {
|
|
101
|
-
build.onResolve({ filter: /.*/ }, (args) => {
|
|
126
|
+
build.onResolve({ filter: /.*/ }, async (args) => {
|
|
127
|
+
if (args.namespace && args.namespace !== "assembly-line-source")
|
|
128
|
+
return undefined;
|
|
102
129
|
if (!args.importer) {
|
|
103
130
|
const candidate = this.resolveExistingSource(args.path);
|
|
104
131
|
if (!candidate)
|
|
@@ -106,6 +133,16 @@ export class AgentSourceModuleLoader {
|
|
|
106
133
|
return { path: candidate, namespace: "assembly-line-source" };
|
|
107
134
|
}
|
|
108
135
|
if (!isRelativeSpecifier(args.path) && !isAbsoluteSourceSpecifier(args.path)) {
|
|
136
|
+
if (options.bundlePackages) {
|
|
137
|
+
if (args.path.startsWith("node:") || isNodeBuiltinSpecifier(args.path)) {
|
|
138
|
+
return { path: args.path, external: true };
|
|
139
|
+
}
|
|
140
|
+
const packagePath = this.resolvePackage(args.path);
|
|
141
|
+
if (!packagePath) {
|
|
142
|
+
return { errors: [{ text: `Could not resolve sandbox dependency ${args.path} imported by ${args.importer}.` }] };
|
|
143
|
+
}
|
|
144
|
+
return { path: packagePath, namespace: "file" };
|
|
145
|
+
}
|
|
109
146
|
return { path: args.path, external: true };
|
|
110
147
|
}
|
|
111
148
|
const base = args.importer ? posix.dirname(normalizeSourcePath(args.importer)) : "";
|
|
@@ -123,11 +160,27 @@ export class AgentSourceModuleLoader {
|
|
|
123
160
|
build.onLoad({ filter: /.*/, namespace: "assembly-line-source" }, (args) => ({
|
|
124
161
|
contents: this.readSource(args.path),
|
|
125
162
|
loader: loaderFor(args.path),
|
|
126
|
-
resolveDir:
|
|
163
|
+
resolveDir: this.packageRoots[0] ?? this.manifest.root
|
|
127
164
|
}));
|
|
128
165
|
}
|
|
129
166
|
};
|
|
130
167
|
}
|
|
168
|
+
resolvePackage(specifier) {
|
|
169
|
+
for (const root of this.packageRoots) {
|
|
170
|
+
try {
|
|
171
|
+
return createRequire(join(root, "package.json")).resolve(specifier);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Try the runtime installation after agent/artifact package roots.
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
return createRequire(import.meta.url).resolve(specifier);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
131
184
|
resolveExistingSource(path) {
|
|
132
185
|
for (const candidate of sourceCandidates(path)) {
|
|
133
186
|
if (this.sourceBundle[candidate] !== undefined || existsSync(join(this.manifest.root, candidate)))
|
|
@@ -170,6 +223,14 @@ function isRelativeSpecifier(specifier) {
|
|
|
170
223
|
function isAbsoluteSourceSpecifier(specifier) {
|
|
171
224
|
return specifier.startsWith("/");
|
|
172
225
|
}
|
|
226
|
+
function isNodeBuiltinSpecifier(specifier) {
|
|
227
|
+
return new Set([
|
|
228
|
+
"assert", "buffer", "child_process", "cluster", "console", "constants", "crypto", "dgram", "diagnostics_channel",
|
|
229
|
+
"dns", "domain", "events", "fs", "http", "http2", "https", "module", "net", "os", "path", "perf_hooks",
|
|
230
|
+
"process", "punycode", "querystring", "readline", "repl", "stream", "string_decoder", "sys", "timers", "tls",
|
|
231
|
+
"trace_events", "tty", "url", "util", "v8", "vm", "wasi", "worker_threads", "zlib"
|
|
232
|
+
]).has(specifier.replace(/^node:/u, "").split("/")[0] ?? specifier);
|
|
233
|
+
}
|
|
173
234
|
function normalizeSourcePath(path) {
|
|
174
235
|
// esbuild hands plugins a "./"-prefixed entry path when the entry resolves
|
|
175
236
|
// against the working directory (dev-server mode); bundle keys never carry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-loader.js","sourceRoot":"","sources":["../src/source-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,iBAAiB,EAGlB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"source-loader.js","sourceRoot":"","sources":["../src/source-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,12 +73,21 @@ export interface SubagentExecutionHost {
|
|
|
73
73
|
turnSpanId(runId: string): string;
|
|
74
74
|
}
|
|
75
75
|
export declare function runSubagentImpl(host: SubagentExecutionHost, parentRunId: string, subagentName: string, task: JsonObject): Promise<RunTimeline>;
|
|
76
|
+
/**
|
|
77
|
+
* Continue an existing child run instead of starting a fresh one. The child
|
|
78
|
+
* keeps its sandbox session, workspace files, and transcript, so recovering a
|
|
79
|
+
* failed or incomplete delegation costs one follow-up turn rather than a full
|
|
80
|
+
* rebuild of work that already ran.
|
|
81
|
+
*/
|
|
82
|
+
export declare function resumeSubagentImpl(host: SubagentExecutionHost, parentRunId: string, childRunId: string, expectedSubagentName: string, message: string): Promise<RunTimeline>;
|
|
76
83
|
export declare function createSubagentRunImpl(host: SubagentExecutionHost, parentRunId: string, subagentName: string, task: JsonObject, options?: {
|
|
77
84
|
background?: boolean;
|
|
78
85
|
}): Promise<RunRecord>;
|
|
79
86
|
export declare function executeSubagentRunImpl(host: SubagentExecutionHost, childRunId: string): Promise<RunTimeline>;
|
|
80
87
|
export declare function finalizeSubagentHandoffImpl(host: SubagentExecutionHost, initialTimeline: RunTimeline): Promise<RunTimeline>;
|
|
81
88
|
export declare function subagentToolResult(timeline: RunTimeline): JsonObject;
|
|
89
|
+
/** Parent-facing instruction for continuing a child run instead of restarting it. */
|
|
90
|
+
export declare function subagentRecoveryHint(childRunId: string): string;
|
|
82
91
|
export declare function readSubagentImpl(host: SubagentExecutionHost, childRunId: string, cursor?: string): Promise<{
|
|
83
92
|
run: RunRecord;
|
|
84
93
|
events: RunEvent[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-execution.d.ts","sourceRoot":"","sources":["../src/subagent-execution.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"subagent-execution.d.ts","sourceRoot":"","sources":["../src/subagent-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,84 @@ export async function runSubagentImpl(host, parentRunId, subagentName, task) {
|
|
|
12
12
|
}
|
|
13
13
|
return host.replay(timeline.run.id);
|
|
14
14
|
}
|
|
15
|
+
const RESUMABLE_CHILD_STATUSES = new Set(["completed", "failed", "cancelled", "suspended"]);
|
|
16
|
+
/**
|
|
17
|
+
* Continue an existing child run instead of starting a fresh one. The child
|
|
18
|
+
* keeps its sandbox session, workspace files, and transcript, so recovering a
|
|
19
|
+
* failed or incomplete delegation costs one follow-up turn rather than a full
|
|
20
|
+
* rebuild of work that already ran.
|
|
21
|
+
*/
|
|
22
|
+
export async function resumeSubagentImpl(host, parentRunId, childRunId, expectedSubagentName, message) {
|
|
23
|
+
const parent = await host.state.getRun(parentRunId);
|
|
24
|
+
if (!parent)
|
|
25
|
+
throw new Error(`Parent run not found: ${parentRunId}`);
|
|
26
|
+
const child = await host.state.getRun(childRunId);
|
|
27
|
+
if (!child)
|
|
28
|
+
throw new Error(`Subagent run not found: ${childRunId}`);
|
|
29
|
+
const subagentName = typeof child.input.subagent === "string" ? child.input.subagent : undefined;
|
|
30
|
+
if (!subagentName)
|
|
31
|
+
throw new Error(`Run ${childRunId} is not a subagent run.`);
|
|
32
|
+
if (subagentName !== expectedSubagentName) {
|
|
33
|
+
throw new Error(`Subagent run ${childRunId} belongs to ${subagentName}, not ${expectedSubagentName}.`);
|
|
34
|
+
}
|
|
35
|
+
if (!(await resumableByRun(host, child, parent))) {
|
|
36
|
+
throw new Error(`Subagent run ${childRunId} does not belong to this conversation.`);
|
|
37
|
+
}
|
|
38
|
+
// Only a settled child can take a follow-up. An executing run would be
|
|
39
|
+
// double-driven, and a run parked on approval, input, or a connection has its
|
|
40
|
+
// own resume path.
|
|
41
|
+
if (!RESUMABLE_CHILD_STATUSES.has(child.status)) {
|
|
42
|
+
throw new Error(`Subagent run ${childRunId} is ${child.status}; wait for it to settle before resuming it.`);
|
|
43
|
+
}
|
|
44
|
+
const selectedSubagents = Array.isArray(parent.input.agentSubagents)
|
|
45
|
+
? parent.input.agentSubagents.filter((name) => typeof name === "string")
|
|
46
|
+
: [];
|
|
47
|
+
if (!selectedSubagents.includes(subagentName)) {
|
|
48
|
+
throw new Error(`Subagent ${subagentName} is not enabled by the current agent capability snapshot.`);
|
|
49
|
+
}
|
|
50
|
+
await host.state.appendEvent(parentRunId, "subagent.resumed", {
|
|
51
|
+
subagent: subagentName,
|
|
52
|
+
childRunId,
|
|
53
|
+
previousStatus: child.status
|
|
54
|
+
});
|
|
55
|
+
const timeline = await sendSubagentFollowupImpl(host, childRunId, message);
|
|
56
|
+
const receipt = readySubagentHandoff(timeline.events);
|
|
57
|
+
if (timeline.run.status === "completed" && receipt) {
|
|
58
|
+
await acceptSubagentHandoff(host.state, parentRunId, receipt);
|
|
59
|
+
}
|
|
60
|
+
await host.state.appendEvent(parentRunId, "subagent.completed", {
|
|
61
|
+
subagent: subagentName,
|
|
62
|
+
childRunId: timeline.run.id,
|
|
63
|
+
status: timeline.run.status,
|
|
64
|
+
resumed: true,
|
|
65
|
+
...(receipt ? { handoff: publicSubagentHandoff(receipt) } : {})
|
|
66
|
+
});
|
|
67
|
+
return host.replay(timeline.run.id);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A run may resume its own children, and any later turn of the same
|
|
71
|
+
* conversation may resume them too. Background work reports its completion on a
|
|
72
|
+
* fresh root turn, so the run that recovers a failed child is rarely the run
|
|
73
|
+
* that started it.
|
|
74
|
+
*/
|
|
75
|
+
async function resumableByRun(host, child, parent) {
|
|
76
|
+
const childParentRunId = typeof child.input.parentRunId === "string" ? child.input.parentRunId : undefined;
|
|
77
|
+
if (childParentRunId === parent.id)
|
|
78
|
+
return true;
|
|
79
|
+
const conversationId = typeof parent.input.conversationId === "string" ? parent.input.conversationId : parent.id;
|
|
80
|
+
const background = isJsonObject(child.input.background) ? child.input.background : undefined;
|
|
81
|
+
if (typeof background?.conversationId === "string" && background.conversationId === conversationId)
|
|
82
|
+
return true;
|
|
83
|
+
if (!childParentRunId)
|
|
84
|
+
return false;
|
|
85
|
+
const childParent = await host.state.getRun(childParentRunId);
|
|
86
|
+
if (!childParent)
|
|
87
|
+
return false;
|
|
88
|
+
const childConversationId = typeof childParent.input.conversationId === "string"
|
|
89
|
+
? childParent.input.conversationId
|
|
90
|
+
: childParent.id;
|
|
91
|
+
return childConversationId === conversationId;
|
|
92
|
+
}
|
|
15
93
|
export async function createSubagentRunImpl(host, parentRunId, subagentName, task, options = {}) {
|
|
16
94
|
const parent = await host.state.getRun(parentRunId);
|
|
17
95
|
if (!parent)
|
|
@@ -244,9 +322,16 @@ export function subagentToolResult(timeline) {
|
|
|
244
322
|
: {}),
|
|
245
323
|
...(timeline.run.status === "failed" && timeline.run.terminalError
|
|
246
324
|
? { error: timeline.run.terminalError }
|
|
247
|
-
: {})
|
|
325
|
+
: {}),
|
|
326
|
+
// A failed child keeps its workspace and transcript. Point the parent at
|
|
327
|
+
// the recovery path so it never re-runs work that already completed.
|
|
328
|
+
...(timeline.run.status === "failed" ? { recovery: subagentRecoveryHint(timeline.run.id) } : {})
|
|
248
329
|
};
|
|
249
330
|
}
|
|
331
|
+
/** Parent-facing instruction for continuing a child run instead of restarting it. */
|
|
332
|
+
export function subagentRecoveryHint(childRunId) {
|
|
333
|
+
return `This child's sandbox, workspace files, and transcript are intact. Continue it with delegate using resumeRunId "${childRunId}" and a short instruction naming what is still missing. Do not re-delegate the original task: that starts an empty workspace and rebuilds finished work.`;
|
|
334
|
+
}
|
|
250
335
|
function readyAfterLatestCompletion(events) {
|
|
251
336
|
const latestCompletion = [...events].reverse().find((event) => event.type === "run.completed");
|
|
252
337
|
const ready = [...events].reverse().find((event) => event.type === "subagent.handoff_ready");
|