@wrongstack/core 0.6.7 → 0.7.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 (52) hide show
  1. package/dist/{agent-bridge-BCVxmrOn.d.ts → agent-bridge-CrQpYjM7.d.ts} +1 -1
  2. package/dist/{compactor-BUJ8550X.d.ts → compactor-CWV1u-IU.d.ts} +1 -1
  3. package/dist/{config-BHkYGzUT.d.ts → config-C34JRwl4.d.ts} +1 -1
  4. package/dist/{context-C8mBUzBv.d.ts → context-bmR0YgBm.d.ts} +71 -3
  5. package/dist/coordination/index.d.ts +11 -11
  6. package/dist/coordination/index.js +53 -9
  7. package/dist/coordination/index.js.map +1 -1
  8. package/dist/default-config-DvRSTELf.d.ts +20 -0
  9. package/dist/defaults/index.d.ts +20 -19
  10. package/dist/defaults/index.js +130 -32
  11. package/dist/defaults/index.js.map +1 -1
  12. package/dist/{events-DounT6pP.d.ts → events-CEKFTmIY.d.ts} +1 -1
  13. package/dist/execution/index.d.ts +19 -13
  14. package/dist/execution/index.js +94 -22
  15. package/dist/execution/index.js.map +1 -1
  16. package/dist/extension/index.d.ts +6 -6
  17. package/dist/extension/index.js +3 -1
  18. package/dist/extension/index.js.map +1 -1
  19. package/dist/{index-DiIGZh5I.d.ts → index-BJIFLGII.d.ts} +5 -5
  20. package/dist/{index-BlVITqm-.d.ts → index-CZR0HjxM.d.ts} +12 -105
  21. package/dist/index.d.ts +27 -26
  22. package/dist/index.js +184 -53
  23. package/dist/index.js.map +1 -1
  24. package/dist/infrastructure/index.d.ts +6 -6
  25. package/dist/kernel/index.d.ts +9 -9
  26. package/dist/kernel/index.js +8 -4
  27. package/dist/kernel/index.js.map +1 -1
  28. package/dist/{mcp-servers-CXFfDN_d.d.ts → mcp-servers-BRJicm5o.d.ts} +3 -3
  29. package/dist/models/index.d.ts +2 -2
  30. package/dist/{multi-agent-Iy8YUe3v.d.ts → multi-agent-Cm1wYSrw.d.ts} +7 -2
  31. package/dist/{agent-subagent-runner-BTloSwjE.d.ts → multi-agent-coordinator-CCupVFqv.d.ts} +117 -4
  32. package/dist/observability/index.d.ts +2 -2
  33. package/dist/{path-resolver-DwJO5XBn.d.ts → path-resolver-CfT7e_HT.d.ts} +2 -2
  34. package/dist/{plan-templates-CG_pInJV.d.ts → plan-templates-Q78an-GJ.d.ts} +4 -4
  35. package/dist/{provider-runner-DoohzfyD.d.ts → provider-runner-WDj28o7J.d.ts} +3 -3
  36. package/dist/{retry-policy-DOnwHAyz.d.ts → retry-policy-Dpxp4SET.d.ts} +1 -1
  37. package/dist/sdd/index.d.ts +3 -3
  38. package/dist/{secret-scrubber-C9UJxFCJ.d.ts → secret-scrubber-C2YCYtkn.d.ts} +1 -1
  39. package/dist/{secret-scrubber-DcTK9JHC.d.ts → secret-scrubber-CowtdEF8.d.ts} +1 -1
  40. package/dist/security/index.d.ts +3 -3
  41. package/dist/{selector-DVo3eT-P.d.ts → selector-CP39HhCe.d.ts} +1 -1
  42. package/dist/{session-reader-BXWxFAhS.d.ts → session-reader-Dwjn4WZR.d.ts} +1 -1
  43. package/dist/storage/index.d.ts +5 -5
  44. package/dist/storage/index.js +93 -10
  45. package/dist/storage/index.js.map +1 -1
  46. package/dist/{system-prompt-BBGles-N.d.ts → system-prompt-CfgXqyv2.d.ts} +1 -1
  47. package/dist/{tool-executor-CwpjhwHC.d.ts → tool-executor-D5NFi_LV.d.ts} +5 -5
  48. package/dist/types/index.d.ts +16 -15
  49. package/dist/types/index.js +101 -20
  50. package/dist/types/index.js.map +1 -1
  51. package/dist/utils/index.d.ts +1 -1
  52. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -106,6 +106,53 @@ var init_atomic_write = __esm({
106
106
  });
107
107
 
108
108
  // src/types/errors.ts
109
+ var ERROR_CODES = {
110
+ // Provider
111
+ PROVIDER_RATE_LIMITED: "PROVIDER_RATE_LIMITED",
112
+ PROVIDER_AUTH_FAILED: "PROVIDER_AUTH_FAILED",
113
+ PROVIDER_OVERLOADED: "PROVIDER_OVERLOADED",
114
+ PROVIDER_INVALID_REQUEST: "PROVIDER_INVALID_REQUEST",
115
+ PROVIDER_SERVER_ERROR: "PROVIDER_SERVER_ERROR",
116
+ PROVIDER_NETWORK_ERROR: "PROVIDER_NETWORK_ERROR",
117
+ PROVIDER_CONTEXT_OVERFLOW: "PROVIDER_CONTEXT_OVERFLOW",
118
+ // Tool
119
+ TOOL_NOT_FOUND: "TOOL_NOT_FOUND",
120
+ TOOL_PERMISSION_DENIED: "TOOL_PERMISSION_DENIED",
121
+ TOOL_EXECUTION_FAILED: "TOOL_EXECUTION_FAILED",
122
+ TOOL_TIMEOUT: "TOOL_TIMEOUT",
123
+ TOOL_INPUT_INVALID: "TOOL_INPUT_INVALID",
124
+ // Config
125
+ CONFIG_INVALID: "CONFIG_INVALID",
126
+ CONFIG_NOT_FOUND: "CONFIG_NOT_FOUND",
127
+ CONFIG_PARSE_FAILED: "CONFIG_PARSE_FAILED",
128
+ CONFIG_MIGRATION_NEEDED: "CONFIG_MIGRATION_NEEDED",
129
+ // Plugin
130
+ PLUGIN_LOAD_FAILED: "PLUGIN_LOAD_FAILED",
131
+ PLUGIN_API_MISMATCH: "PLUGIN_API_MISMATCH",
132
+ PLUGIN_MISSING_DEPENDENCY: "PLUGIN_MISSING_DEPENDENCY",
133
+ // Agent
134
+ AGENT_ITERATION_LIMIT: "AGENT_ITERATION_LIMIT",
135
+ AGENT_CONTEXT_OVERFLOW: "AGENT_CONTEXT_OVERFLOW",
136
+ AGENT_ABORTED: "AGENT_ABORTED",
137
+ AGENT_RUN_FAILED: "AGENT_RUN_FAILED",
138
+ // Session
139
+ SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
140
+ SESSION_CORRUPTED: "SESSION_CORRUPTED",
141
+ SESSION_WRITE_FAILED: "SESSION_WRITE_FAILED",
142
+ // Container / Registry
143
+ CONTAINER_TOKEN_ALREADY_BOUND: "CONTAINER_TOKEN_ALREADY_BOUND",
144
+ CONTAINER_TOKEN_NOT_BOUND: "CONTAINER_TOKEN_NOT_BOUND",
145
+ REGISTRY_DUPLICATE: "REGISTRY_DUPLICATE",
146
+ REGISTRY_NOT_FOUND: "REGISTRY_NOT_FOUND",
147
+ // File system
148
+ FS_READ_FAILED: "FS_READ_FAILED",
149
+ FS_WRITE_FAILED: "FS_WRITE_FAILED",
150
+ FS_MKDIR_FAILED: "FS_MKDIR_FAILED",
151
+ FS_DELETE_FAILED: "FS_DELETE_FAILED",
152
+ FS_ATOMIC_WRITE_FAILED: "FS_ATOMIC_WRITE_FAILED",
153
+ // General
154
+ UNKNOWN: "UNKNOWN"
155
+ };
109
156
  var WrongStackError = class extends Error {
110
157
  code;
111
158
  subsystem;
@@ -171,7 +218,7 @@ var PluginError = class extends WrongStackError {
171
218
  code: opts.code,
172
219
  subsystem: "plugin",
173
220
  severity: "error",
174
- recoverable: opts.code === "PLUGIN_MISSING_DEPENDENCY",
221
+ recoverable: opts.code === ERROR_CODES.PLUGIN_MISSING_DEPENDENCY,
175
222
  context: { plugin: opts.pluginName, ...opts.context },
176
223
  cause: opts.cause
177
224
  });
@@ -185,20 +232,20 @@ var AgentError = class extends WrongStackError {
185
232
  message: opts.message,
186
233
  code: opts.code,
187
234
  subsystem: "agent",
188
- severity: opts.code === "AGENT_ABORTED" ? "warning" : "error",
189
- recoverable: opts.recoverable ?? opts.code === "AGENT_ITERATION_LIMIT",
235
+ severity: opts.code === ERROR_CODES.AGENT_ABORTED ? "warning" : "error",
236
+ recoverable: opts.recoverable ?? opts.code === ERROR_CODES.AGENT_ITERATION_LIMIT,
190
237
  context: opts.context,
191
238
  cause: opts.cause
192
239
  });
193
240
  this.name = "AgentError";
194
241
  }
195
242
  };
196
- function toWrongStackError(err, code = "AGENT_RUN_FAILED") {
243
+ function toWrongStackError(err, code = ERROR_CODES.AGENT_RUN_FAILED) {
197
244
  if (err instanceof WrongStackError) return err;
198
245
  const message = err instanceof Error ? err.message : String(err);
199
246
  return new AgentError({
200
247
  message,
201
- code: code === "UNKNOWN" ? "AGENT_RUN_FAILED" : code,
248
+ code: code === "UNKNOWN" ? ERROR_CODES.AGENT_RUN_FAILED : code,
202
249
  cause: err
203
250
  });
204
251
  }
@@ -209,8 +256,8 @@ var SessionError = class extends WrongStackError {
209
256
  message: opts.message,
210
257
  code: opts.code,
211
258
  subsystem: "session",
212
- severity: opts.code === "SESSION_WRITE_FAILED" ? "error" : "warning",
213
- recoverable: opts.code !== "SESSION_CORRUPTED",
259
+ severity: opts.code === ERROR_CODES.SESSION_WRITE_FAILED ? "error" : "warning",
260
+ recoverable: opts.code !== ERROR_CODES.SESSION_CORRUPTED,
214
261
  context: { sessionId: opts.sessionId, ...opts.context },
215
262
  cause: opts.cause
216
263
  });
@@ -218,6 +265,22 @@ var SessionError = class extends WrongStackError {
218
265
  this.sessionId = opts.sessionId;
219
266
  }
220
267
  };
268
+ var FsError = class extends WrongStackError {
269
+ path;
270
+ constructor(opts) {
271
+ super({
272
+ message: opts.message,
273
+ code: opts.code,
274
+ subsystem: "fs",
275
+ severity: "error",
276
+ recoverable: opts.code !== ERROR_CODES.FS_READ_FAILED,
277
+ context: { path: opts.path, ...opts.context },
278
+ cause: opts.cause
279
+ });
280
+ this.name = "FsError";
281
+ this.path = opts.path;
282
+ }
283
+ };
221
284
  function isWrongStackError(err) {
222
285
  return err instanceof WrongStackError;
223
286
  }
@@ -236,6 +299,9 @@ function isSessionError(err) {
236
299
  function isAgentError(err) {
237
300
  return err instanceof AgentError;
238
301
  }
302
+ function isFsError(err) {
303
+ return err instanceof FsError;
304
+ }
239
305
 
240
306
  // src/kernel/container.ts
241
307
  var Container = class {
@@ -244,7 +310,7 @@ var Container = class {
244
310
  if (this.entries.has(token)) {
245
311
  throw new WrongStackError({
246
312
  message: `Container: token "${token.description ?? "unknown"}" already bound`,
247
- code: "CONTAINER_TOKEN_ALREADY_BOUND",
313
+ code: ERROR_CODES.CONTAINER_TOKEN_ALREADY_BOUND,
248
314
  subsystem: "container",
249
315
  context: { token: token.description }
250
316
  });
@@ -261,7 +327,7 @@ var Container = class {
261
327
  if (!existing) {
262
328
  throw new WrongStackError({
263
329
  message: `Container: cannot override "${token.description ?? "unknown"}" \u2014 not bound`,
264
- code: "CONTAINER_TOKEN_NOT_BOUND",
330
+ code: ERROR_CODES.CONTAINER_TOKEN_NOT_BOUND,
265
331
  subsystem: "container",
266
332
  context: { token: token.description }
267
333
  });
@@ -278,7 +344,7 @@ var Container = class {
278
344
  if (!existing) {
279
345
  throw new WrongStackError({
280
346
  message: `Container: cannot decorate "${token.description ?? "unknown"}" \u2014 not bound`,
281
- code: "CONTAINER_TOKEN_NOT_BOUND",
347
+ code: ERROR_CODES.CONTAINER_TOKEN_NOT_BOUND,
282
348
  subsystem: "container",
283
349
  context: { token: token.description }
284
350
  });
@@ -292,7 +358,7 @@ var Container = class {
292
358
  if (!entry) {
293
359
  throw new WrongStackError({
294
360
  message: `Container: token "${token.description ?? "unknown"}" not bound`,
295
- code: "CONTAINER_TOKEN_NOT_BOUND",
361
+ code: ERROR_CODES.CONTAINER_TOKEN_NOT_BOUND,
296
362
  subsystem: "container",
297
363
  context: { token: token.description }
298
364
  });
@@ -895,16 +961,30 @@ function truncate(s, n) {
895
961
  return s.length <= n ? s : `${s.slice(0, n - 1)}\u2026`;
896
962
  }
897
963
  function providerStatusToCode(status, type) {
898
- if (status === 0) return "PROVIDER_NETWORK_ERROR";
899
- if (type === "rate_limit_error" || status === 429) return "PROVIDER_RATE_LIMITED";
900
- if (type === "authentication_error" || status === 401) return "PROVIDER_AUTH_FAILED";
901
- if (type === "overloaded_error" || status === 529) return "PROVIDER_OVERLOADED";
902
- if (type === "invalid_request_error" || status === 400) return "PROVIDER_INVALID_REQUEST";
903
- if (status === 408) return "PROVIDER_NETWORK_ERROR";
904
- if (status >= 500) return "PROVIDER_SERVER_ERROR";
905
- return "PROVIDER_INVALID_REQUEST";
964
+ if (status === 0) return ERROR_CODES.PROVIDER_NETWORK_ERROR;
965
+ if (type === "rate_limit_error" || status === 429) return ERROR_CODES.PROVIDER_RATE_LIMITED;
966
+ if (type === "authentication_error" || status === 401) return ERROR_CODES.PROVIDER_AUTH_FAILED;
967
+ if (type === "overloaded_error" || status === 529) return ERROR_CODES.PROVIDER_OVERLOADED;
968
+ if (type === "invalid_request_error" || status === 400) return ERROR_CODES.PROVIDER_INVALID_REQUEST;
969
+ if (status === 408) return ERROR_CODES.PROVIDER_NETWORK_ERROR;
970
+ if (status >= 500) return ERROR_CODES.PROVIDER_SERVER_ERROR;
971
+ return ERROR_CODES.PROVIDER_INVALID_REQUEST;
906
972
  }
907
973
 
974
+ // src/types/default-config.ts
975
+ var DEFAULT_TOOLS_CONFIG = Object.freeze({
976
+ defaultExecutionStrategy: "smart",
977
+ maxIterations: 100,
978
+ iterationTimeoutMs: 3e5,
979
+ sessionTimeoutMs: 18e5,
980
+ perIterationOutputCapBytes: 1e5,
981
+ autoExtendLimit: true
982
+ });
983
+ var DEFAULT_CONTEXT_CONFIG = Object.freeze({
984
+ preserveK: 10,
985
+ eliseThreshold: 2e3
986
+ });
987
+
908
988
  // src/types/secret-vault.ts
909
989
  var ENCRYPTED_PREFIX = "enc:v1:";
910
990
 
@@ -1736,9 +1816,11 @@ var DefaultPathResolver = class {
1736
1816
  }
1737
1817
  };
1738
1818
 
1819
+ // src/execution/regex-patterns.ts
1820
+ var NETWORK_ERR_RE = /ECONN|ETIMEDOUT|ETIME|ENOTFOUND|EAI_AGAIN|fetch failed/i;
1821
+
1739
1822
  // src/execution/error-handler.ts
1740
1823
  var CONTEXT_OVERFLOW_RE = /context|too long|tokens/i;
1741
- var NETWORK_ERR_RE = /ECONN|ETIMEDOUT|ETIME|ENOTFOUND|EAI_AGAIN|fetch failed/i;
1742
1824
  function buildRecoveryStrategies(opts) {
1743
1825
  return [
1744
1826
  {
@@ -1845,15 +1927,14 @@ var DefaultErrorHandler = class {
1845
1927
  };
1846
1928
 
1847
1929
  // src/execution/retry-policy.ts
1848
- var DefaultRetryPolicy = class _DefaultRetryPolicy {
1849
- static NETWORK_ERR_RE = /ECONN|ETIMEDOUT|ETIME|ENOTFOUND|EAI_AGAIN|fetch failed/i;
1930
+ var DefaultRetryPolicy = class {
1850
1931
  shouldRetry(err, attempt) {
1851
1932
  if (err instanceof ProviderError) {
1852
1933
  if (!err.retryable) return false;
1853
1934
  return attempt < this.maxAttempts(err);
1854
1935
  }
1855
1936
  const msg = err.message ?? "";
1856
- const isNetwork = _DefaultRetryPolicy.NETWORK_ERR_RE.test(msg);
1937
+ const isNetwork = NETWORK_ERR_RE.test(msg);
1857
1938
  if (isNetwork) return attempt < 2;
1858
1939
  return false;
1859
1940
  }
@@ -3922,8 +4003,16 @@ var DefaultSessionStore = class {
3922
4003
  }
3923
4004
  }
3924
4005
  async resume(id) {
3925
- const data = await this.load(id);
3926
4006
  const file = path6.join(this.dir, `${id}.jsonl`);
4007
+ try {
4008
+ await fsp2.access(file, fsp2.constants.R_OK);
4009
+ } catch {
4010
+ throw new Error(
4011
+ `Session "${id}" not found \u2014 the session file does not exist or was deleted.`,
4012
+ { cause: new Error("ENOENT") }
4013
+ );
4014
+ }
4015
+ const data = await this.load(id);
3927
4016
  let handle;
3928
4017
  try {
3929
4018
  handle = await fsp2.open(file, "a", 384);
@@ -4820,16 +4909,16 @@ var BEHAVIOR_DEFAULTS = {
4820
4909
  softThreshold: 0.75,
4821
4910
  hardThreshold: 0.9,
4822
4911
  autoCompact: true,
4823
- preserveK: 10,
4824
- eliseThreshold: 2e3
4912
+ preserveK: DEFAULT_CONTEXT_CONFIG.preserveK,
4913
+ eliseThreshold: DEFAULT_CONTEXT_CONFIG.eliseThreshold
4825
4914
  },
4826
4915
  tools: {
4827
- defaultExecutionStrategy: "smart",
4828
- maxIterations: 100,
4829
- iterationTimeoutMs: 3e5,
4830
- sessionTimeoutMs: 18e5,
4831
- perIterationOutputCapBytes: 1e5,
4832
- autoExtendLimit: true
4916
+ defaultExecutionStrategy: DEFAULT_TOOLS_CONFIG.defaultExecutionStrategy,
4917
+ maxIterations: DEFAULT_TOOLS_CONFIG.maxIterations,
4918
+ iterationTimeoutMs: DEFAULT_TOOLS_CONFIG.iterationTimeoutMs,
4919
+ sessionTimeoutMs: DEFAULT_TOOLS_CONFIG.sessionTimeoutMs,
4920
+ perIterationOutputCapBytes: DEFAULT_TOOLS_CONFIG.perIterationOutputCapBytes,
4921
+ autoExtendLimit: DEFAULT_TOOLS_CONFIG.autoExtendLimit
4833
4922
  },
4834
4923
  log: { level: "info" },
4835
4924
  features: {
@@ -7173,7 +7262,7 @@ var AutoCompactionMiddleware = class {
7173
7262
  if (fatal) {
7174
7263
  throw new AgentError({
7175
7264
  message: `Auto-compaction failed at ${pressure.level} threshold`,
7176
- code: "AGENT_CONTEXT_OVERFLOW",
7265
+ code: ERROR_CODES.AGENT_CONTEXT_OVERFLOW,
7177
7266
  recoverable: true,
7178
7267
  context: {
7179
7268
  level: pressure.level,
@@ -7376,7 +7465,16 @@ async function loadGoal(filePath) {
7376
7465
  }
7377
7466
  }
7378
7467
  async function saveGoal(filePath, goal) {
7379
- await atomicWrite(filePath, JSON.stringify(goal, null, 2), { mode: 384 });
7468
+ try {
7469
+ await atomicWrite(filePath, JSON.stringify(goal, null, 2), { mode: 384 });
7470
+ } catch (err) {
7471
+ throw new FsError({
7472
+ message: err instanceof Error ? err.message : String(err),
7473
+ code: ERROR_CODES.FS_ATOMIC_WRITE_FAILED,
7474
+ path: filePath,
7475
+ cause: err
7476
+ });
7477
+ }
7380
7478
  }
7381
7479
  function emptyGoal(goal) {
7382
7480
  const now = (/* @__PURE__ */ new Date()).toISOString();
@@ -7591,7 +7689,7 @@ var EternalAutonomyEngine = class {
7591
7689
  // Cap the inner loop so a runaway agent.run can't burn through
7592
7690
  // the iteration timeout — the engine's own outer loop is the
7593
7691
  // long-running thing, each tick should be bounded.
7594
- maxIterations: this.opts.iterationMaxAgentSteps ?? 50
7692
+ maxIterations: this.opts.iterationMaxAgentSteps ?? 500
7595
7693
  }
7596
7694
  );
7597
7695
  if (result.status === "aborted") {
@@ -8739,6 +8837,30 @@ var DefaultMultiAgentCoordinator = class extends EventEmitter {
8739
8837
  this.drainPendingAsAborted("Coordinator stopAll() drained the pending queue");
8740
8838
  await Promise.allSettled([...this.subagents.keys()].map((id) => this.stop(id)));
8741
8839
  }
8840
+ async remove(subagentId) {
8841
+ await this.stop(subagentId);
8842
+ this.subagents.delete(subagentId);
8843
+ }
8844
+ /**
8845
+ * Get current coordinator stats for monitoring/debugging.
8846
+ */
8847
+ getStats() {
8848
+ let running = 0, idle = 0, stopped = 0;
8849
+ for (const [, entry] of this.subagents) {
8850
+ if (entry.status === "running") running++;
8851
+ else if (entry.status === "idle") idle++;
8852
+ else stopped++;
8853
+ }
8854
+ return {
8855
+ total: this.subagents.size,
8856
+ running,
8857
+ idle,
8858
+ stopped,
8859
+ inFlight: this.inFlight,
8860
+ pending: this.pendingTasks.length,
8861
+ completed: this.completedResults.length
8862
+ };
8863
+ }
8742
8864
  getStatus() {
8743
8865
  return {
8744
8866
  coordinatorId: this.coordinatorId,
@@ -9206,6 +9328,12 @@ var ParallelEternalEngine = class {
9206
9328
  get currentState() {
9207
9329
  return this.state;
9208
9330
  }
9331
+ /**
9332
+ * Get the underlying coordinator for stats/monitoring.
9333
+ */
9334
+ getCoordinator() {
9335
+ return this.coordinator;
9336
+ }
9209
9337
  stop() {
9210
9338
  this.stopRequested = true;
9211
9339
  void this.persistState("stopped").catch(() => {
@@ -9342,8 +9470,8 @@ Task: ${task}
9342
9470
  await coordinator.spawn({
9343
9471
  id: subagentId,
9344
9472
  name: `slot-${subagentId.slice(-6)}`,
9345
- maxIterations: 50,
9346
- maxToolCalls: 200,
9473
+ // Let the coordinator apply its default budget (from roster or generic).
9474
+ // Hardcoding low limits here defeats the x10 budget improvement.
9347
9475
  timeoutMs: this.timeoutMs
9348
9476
  });
9349
9477
  subagentIds.push(subagentId);
@@ -9360,7 +9488,7 @@ Task: ${task}
9360
9488
  let results = [];
9361
9489
  try {
9362
9490
  const ctrl = new AbortController();
9363
- const timer = setTimeout(() => ctrl.abort(), this.timeoutMs + 6e4);
9491
+ const timer = setTimeout(() => ctrl.abort(), Math.max(this.timeoutMs * 2, 72e5));
9364
9492
  try {
9365
9493
  results = await coordinator.awaitTasks(taskIds);
9366
9494
  } finally {
@@ -10699,6 +10827,9 @@ var Director = class {
10699
10827
  async terminateAll() {
10700
10828
  await this.coordinator.stopAll();
10701
10829
  }
10830
+ async remove(subagentId) {
10831
+ await this.coordinator.remove(subagentId);
10832
+ }
10702
10833
  status() {
10703
10834
  return this.coordinator.getStatus();
10704
10835
  }
@@ -11168,6 +11299,7 @@ async function readSubagentPartial(opts, subagentId) {
11168
11299
  }
11169
11300
  }
11170
11301
  } catch {
11302
+ continue;
11171
11303
  }
11172
11304
  }
11173
11305
  return {
@@ -16425,7 +16557,6 @@ var defaultGitignoreUpdater = new GitignoreUpdater();
16425
16557
 
16426
16558
  // src/security-scanner/orchestrator.ts
16427
16559
  init_atomic_write();
16428
- var NETWORK_ERR_RE2 = /ECONN|ETIMEDOUT|ETIME|ENOTFOUND|EAI_AGAIN|fetch failed/i;
16429
16560
  var SecurityScannerOrchestrator = class {
16430
16561
  constructor(retryPolicy, errorHandler) {
16431
16562
  this.retryPolicy = retryPolicy;
@@ -16448,7 +16579,7 @@ var SecurityScannerOrchestrator = class {
16448
16579
  const isProviderErr = err instanceof ProviderError;
16449
16580
  const policy = this.retryPolicy;
16450
16581
  const errAsErr = isProviderErr ? err : err instanceof Error ? err : new Error(String(err));
16451
- if (!policy || !isProviderErr && !NETWORK_ERR_RE2.test(errAsErr.message)) {
16582
+ if (!policy || !isProviderErr && !NETWORK_ERR_RE.test(errAsErr.message)) {
16452
16583
  throw err;
16453
16584
  }
16454
16585
  const canRetry = policy.shouldRetry(errAsErr, attempt);
@@ -17645,7 +17776,7 @@ var ExtensionRegistry = class {
17645
17776
  if (this.extensions.some((e) => e.name === ext.name)) {
17646
17777
  throw new WrongStackError({
17647
17778
  message: `Extension "${ext.name}" already registered`,
17648
- code: "REGISTRY_DUPLICATE",
17779
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
17649
17780
  subsystem: "container",
17650
17781
  context: { extension: ext.name }
17651
17782
  });
@@ -19210,7 +19341,7 @@ var ToolRegistry = class _ToolRegistry {
19210
19341
  if (this.tools.has(tool.name)) {
19211
19342
  throw new WrongStackError({
19212
19343
  message: `Tool "${tool.name}" already registered`,
19213
- code: "REGISTRY_DUPLICATE",
19344
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
19214
19345
  subsystem: "container",
19215
19346
  context: { tool: tool.name }
19216
19347
  });
@@ -19262,7 +19393,7 @@ var ToolRegistry = class _ToolRegistry {
19262
19393
  if (!this.tools.has(name)) {
19263
19394
  throw new WrongStackError({
19264
19395
  message: `Tool "${name}" not registered; cannot override`,
19265
- code: "REGISTRY_NOT_FOUND",
19396
+ code: ERROR_CODES.REGISTRY_NOT_FOUND,
19266
19397
  subsystem: "container",
19267
19398
  context: { tool: name }
19268
19399
  });
@@ -19285,7 +19416,7 @@ var ToolRegistry = class _ToolRegistry {
19285
19416
  if (!entry) {
19286
19417
  throw new WrongStackError({
19287
19418
  message: `Tool "${name}" not registered; cannot wrap`,
19288
- code: "REGISTRY_NOT_FOUND",
19419
+ code: ERROR_CODES.REGISTRY_NOT_FOUND,
19289
19420
  subsystem: "container",
19290
19421
  context: { tool: name }
19291
19422
  });
@@ -19667,7 +19798,7 @@ function topoSort(plugins) {
19667
19798
  if (visiting.has(p.name)) {
19668
19799
  throw new PluginError({
19669
19800
  message: `Plugin dependency cycle: ${[...stack, p.name].join(" -> ")}`,
19670
- code: "PLUGIN_LOAD_FAILED",
19801
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19671
19802
  pluginName: p.name
19672
19803
  });
19673
19804
  }
@@ -19678,7 +19809,7 @@ function topoSort(plugins) {
19678
19809
  if (!d) {
19679
19810
  throw new PluginError({
19680
19811
  message: `Plugin "${p.name}" depends on missing plugin "${dep.name}"`,
19681
- code: "PLUGIN_MISSING_DEPENDENCY",
19812
+ code: ERROR_CODES.PLUGIN_MISSING_DEPENDENCY,
19682
19813
  pluginName: p.name,
19683
19814
  context: { dependency: dep.name }
19684
19815
  });
@@ -19686,7 +19817,7 @@ function topoSort(plugins) {
19686
19817
  if (dep.version && d.version && !satisfies(dep.version, d.version)) {
19687
19818
  throw new PluginError({
19688
19819
  message: `Plugin "${p.name}" requires "${dep.name}@${dep.version}", found ${d.version}`,
19689
- code: "PLUGIN_LOAD_FAILED",
19820
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19690
19821
  pluginName: p.name,
19691
19822
  context: { dependency: dep.name, required: dep.version, found: d.version }
19692
19823
  });
@@ -19700,7 +19831,7 @@ function topoSort(plugins) {
19700
19831
  if (dep.version && d.version && !satisfies(dep.version, d.version)) {
19701
19832
  throw new PluginError({
19702
19833
  message: `Plugin "${p.name}" optional dep "${dep.name}@${dep.version}" found ${d.version}`,
19703
- code: "PLUGIN_LOAD_FAILED",
19834
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19704
19835
  pluginName: p.name,
19705
19836
  context: { dependency: dep.name, required: dep.version, found: d.version }
19706
19837
  });
@@ -19725,7 +19856,7 @@ async function loadPlugins(plugins, opts) {
19725
19856
  if (names.has(c)) {
19726
19857
  throw new PluginError({
19727
19858
  message: `Plugin "${p.name}" conflicts with loaded plugin "${c}"`,
19728
- code: "PLUGIN_LOAD_FAILED",
19859
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19729
19860
  pluginName: p.name,
19730
19861
  context: { conflictsWith: c }
19731
19862
  });
@@ -19743,7 +19874,7 @@ async function loadPlugins(plugins, opts) {
19743
19874
  if (!satisfies(plugin.apiVersion, kernelVersion)) {
19744
19875
  const err = new PluginError({
19745
19876
  message: `Plugin "${plugin.name}" requires apiVersion ${plugin.apiVersion}; kernel is ${kernelVersion}`,
19746
- code: "PLUGIN_API_MISMATCH",
19877
+ code: ERROR_CODES.PLUGIN_API_MISMATCH,
19747
19878
  pluginName: plugin.name,
19748
19879
  context: { required: plugin.apiVersion, kernel: kernelVersion }
19749
19880
  });
@@ -19765,7 +19896,7 @@ async function loadPlugins(plugins, opts) {
19765
19896
  const detail = firstErr ? `${firstErr.path}: ${firstErr.message}` : "config invalid";
19766
19897
  const err = new PluginError({
19767
19898
  message: `Plugin "${plugin.name}" config invalid \u2014 ${detail}`,
19768
- code: "PLUGIN_LOAD_FAILED",
19899
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19769
19900
  pluginName: plugin.name,
19770
19901
  context: { errors: result.errors }
19771
19902
  });
@@ -19815,7 +19946,7 @@ function wrapApiForCapabilityCheck(plugin, api, log, enforce = false) {
19815
19946
  if (enforce) {
19816
19947
  throw new PluginError({
19817
19948
  message: msg,
19818
- code: "PLUGIN_LOAD_FAILED",
19949
+ code: ERROR_CODES.PLUGIN_LOAD_FAILED,
19819
19950
  pluginName: plugin.name,
19820
19951
  context: { subsystem, detail }
19821
19952
  });
@@ -19888,6 +20019,6 @@ function wrapApiForCapabilityCheck(plugin, api, log, enforce = false) {
19888
20019
  });
19889
20020
  }
19890
20021
 
19891
- export { AISpecBuilder, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, atomicWrite, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, context7Server, contextManagerTool, createAutoExecutor, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, securitySlashCommand, sentinelServer, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
20022
+ export { AISpecBuilder, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, atomicWrite, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, context7Server, contextManagerTool, createAutoExecutor, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, securitySlashCommand, sentinelServer, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
19892
20023
  //# sourceMappingURL=index.js.map
19893
20024
  //# sourceMappingURL=index.js.map