@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.
Files changed (46) hide show
  1. package/README.md +6 -0
  2. package/dist/background-subagents.d.ts.map +1 -1
  3. package/dist/background-subagents.js +8 -3
  4. package/dist/background-subagents.js.map +1 -1
  5. package/dist/harness-loop.d.ts +1 -1
  6. package/dist/harness-loop.d.ts.map +1 -1
  7. package/dist/harness-loop.js +10 -1
  8. package/dist/harness-loop.js.map +1 -1
  9. package/dist/index.d.ts +5 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +29 -6
  12. package/dist/index.js.map +1 -1
  13. package/dist/public-api.d.ts +1 -1
  14. package/dist/public-api.d.ts.map +1 -1
  15. package/dist/public-api.js.map +1 -1
  16. package/dist/runtime-types.d.ts +8 -0
  17. package/dist/runtime-types.d.ts.map +1 -1
  18. package/dist/sandbox-authored-tool-child.d.ts +7 -0
  19. package/dist/sandbox-authored-tool-child.d.ts.map +1 -0
  20. package/dist/sandbox-authored-tool-child.js +217 -0
  21. package/dist/sandbox-authored-tool-child.js.map +1 -0
  22. package/dist/sandbox-authored-tool-executor.d.ts +23 -0
  23. package/dist/sandbox-authored-tool-executor.d.ts.map +1 -0
  24. package/dist/sandbox-authored-tool-executor.js +290 -0
  25. package/dist/sandbox-authored-tool-executor.js.map +1 -0
  26. package/dist/sandbox-tool-bridge.d.ts +19 -0
  27. package/dist/sandbox-tool-bridge.d.ts.map +1 -0
  28. package/dist/sandbox-tool-bridge.js +227 -0
  29. package/dist/sandbox-tool-bridge.js.map +1 -0
  30. package/dist/source-loader.d.ts +10 -0
  31. package/dist/source-loader.d.ts.map +1 -1
  32. package/dist/source-loader.js +64 -3
  33. package/dist/source-loader.js.map +1 -1
  34. package/dist/subagent-execution.d.ts +9 -0
  35. package/dist/subagent-execution.d.ts.map +1 -1
  36. package/dist/subagent-execution.js +86 -1
  37. package/dist/subagent-execution.js.map +1 -1
  38. package/dist/tool-apis.d.ts +1 -1
  39. package/dist/tool-apis.d.ts.map +1 -1
  40. package/dist/tool-apis.js +10 -4
  41. package/dist/tool-apis.js.map +1 -1
  42. package/dist/tool-execution.d.ts +12 -3
  43. package/dist/tool-execution.d.ts.map +1 -1
  44. package/dist/tool-execution.js +52 -12
  45. package/dist/tool-execution.js.map +1 -1
  46. 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":"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"}
@@ -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":"AAIA,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;CACpB;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,WAAW,CAAuC;IACnE,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,8BAA8B;IAM7C,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC;IAkB5E,gBAAgB,IAAI,IAAI;YAkBV,eAAe;IAuB7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOhC,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,qBAAqB;CAM9B"}
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"}
@@ -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: posix.dirname(normalizeSourcePath(args.path))
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":"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"}
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");