@wrongstack/core 0.6.6 → 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-BBXK_ppx.d.ts → agent-bridge-CrQpYjM7.d.ts} +1 -1
  2. package/dist/{compactor-C8NhpSt5.d.ts → compactor-CWV1u-IU.d.ts} +1 -1
  3. package/dist/{config-DfC6g6KV.d.ts → config-C34JRwl4.d.ts} +1 -1
  4. package/dist/{context-DN5v-uQX.d.ts → context-bmR0YgBm.d.ts} +74 -8
  5. package/dist/coordination/index.d.ts +11 -11
  6. package/dist/coordination/index.js +115 -39
  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 +224 -64
  11. package/dist/defaults/index.js.map +1 -1
  12. package/dist/{events-CJqwQl8G.d.ts → events-CEKFTmIY.d.ts} +10 -1
  13. package/dist/execution/index.d.ts +27 -13
  14. package/dist/execution/index.js +153 -40
  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-DcnXDPdY.d.ts → index-BJIFLGII.d.ts} +20 -5
  20. package/dist/{index-CXnWsGBp.d.ts → index-CZR0HjxM.d.ts} +14 -110
  21. package/dist/index.d.ts +27 -26
  22. package/dist/index.js +396 -180
  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-CevFHHM1.d.ts → mcp-servers-BRJicm5o.d.ts} +3 -3
  29. package/dist/models/index.d.ts +2 -2
  30. package/dist/{multi-agent-D5IbASk_.d.ts → multi-agent-Cm1wYSrw.d.ts} +9 -4
  31. package/dist/{agent-subagent-runner-DsSm9lKN.d.ts → multi-agent-coordinator-CCupVFqv.d.ts} +117 -4
  32. package/dist/observability/index.d.ts +2 -2
  33. package/dist/{path-resolver-CBx_q1HA.d.ts → path-resolver-CfT7e_HT.d.ts} +2 -2
  34. package/dist/{plan-templates-BEOllUJV.d.ts → plan-templates-Q78an-GJ.d.ts} +4 -4
  35. package/dist/{provider-runner-Byh5TcJs.d.ts → provider-runner-WDj28o7J.d.ts} +3 -3
  36. package/dist/{retry-policy-BZSIMxrJ.d.ts → retry-policy-Dpxp4SET.d.ts} +1 -1
  37. package/dist/sdd/index.d.ts +3 -3
  38. package/dist/{secret-scrubber-CT7wefiO.d.ts → secret-scrubber-C2YCYtkn.d.ts} +1 -1
  39. package/dist/{secret-scrubber-I0QHY_ob.d.ts → secret-scrubber-CowtdEF8.d.ts} +1 -1
  40. package/dist/security/index.d.ts +3 -3
  41. package/dist/{selector-DDb_mq9X.d.ts → selector-CP39HhCe.d.ts} +1 -1
  42. package/dist/{session-reader-B9nVkziM.d.ts → session-reader-Dwjn4WZR.d.ts} +1 -1
  43. package/dist/storage/index.d.ts +5 -5
  44. package/dist/storage/index.js +94 -11
  45. package/dist/storage/index.js.map +1 -1
  46. package/dist/{system-prompt-gL06H9P4.d.ts → system-prompt-CfgXqyv2.d.ts} +1 -1
  47. package/dist/{tool-executor-BF7QfYVE.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 +102 -23
  50. package/dist/types/index.js.map +1 -1
  51. package/dist/utils/index.d.ts +1 -1
  52. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
- export { q as AfterIterationHook, r as AfterRunHook, s as AfterToolExecutionHook, t as AgentExtension, B as BeforeIterationHook, w as BeforeRunHook, x as BeforeToolExecutionHook, E as ExtensionRegistry, O as OnErrorHook, G as ProviderRunnerFn, z as ProviderRunnerWrapper } from '../index-DcnXDPdY.js';
2
- import '../context-DN5v-uQX.js';
1
+ export { q as AfterIterationHook, r as AfterRunHook, s as AfterToolExecutionHook, t as AgentExtension, B as BeforeIterationHook, w as BeforeRunHook, x as BeforeToolExecutionHook, E as ExtensionRegistry, O as OnErrorHook, G as ProviderRunnerFn, z as ProviderRunnerWrapper } from '../index-BJIFLGII.js';
2
+ import '../context-bmR0YgBm.js';
3
3
  import '../logger-BMQgxvdy.js';
4
- import '../system-prompt-gL06H9P4.js';
4
+ import '../system-prompt-CfgXqyv2.js';
5
5
  import '../observability-BhnVLBLS.js';
6
- import '../events-CJqwQl8G.js';
7
- import '../secret-scrubber-CT7wefiO.js';
8
- import '../config-DfC6g6KV.js';
6
+ import '../events-CEKFTmIY.js';
7
+ import '../secret-scrubber-C2YCYtkn.js';
8
+ import '../config-C34JRwl4.js';
9
9
  import '../models-registry-Y2xbog0E.js';
@@ -1,4 +1,6 @@
1
1
  // src/types/errors.ts
2
+ var ERROR_CODES = {
3
+ REGISTRY_DUPLICATE: "REGISTRY_DUPLICATE"};
2
4
  var WrongStackError = class extends Error {
3
5
  code;
4
6
  subsystem;
@@ -82,7 +84,7 @@ var ExtensionRegistry = class {
82
84
  if (this.extensions.some((e) => e.name === ext.name)) {
83
85
  throw new WrongStackError({
84
86
  message: `Extension "${ext.name}" already registered`,
85
- code: "REGISTRY_DUPLICATE",
87
+ code: ERROR_CODES.REGISTRY_DUPLICATE,
86
88
  subsystem: "container",
87
89
  context: { extension: ext.name }
88
90
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/errors.ts","../../src/extension/registry.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * WrongStack error hierarchy.\n *\n * Every error thrown by the framework is a `WrongStackError` with a\n * machine-readable `code`, a `subsystem` tag, and a `severity` level.\n * This lets consumers (CLI, TUI, plugins, tests) branch on structured\n * data instead of parsing error messages.\n */\n\n// ── Error codes ──────────────────────────────────────────────────────\n\nexport type ErrorCode =\n // Provider\n | 'PROVIDER_RATE_LIMITED'\n | 'PROVIDER_AUTH_FAILED'\n | 'PROVIDER_OVERLOADED'\n | 'PROVIDER_INVALID_REQUEST'\n | 'PROVIDER_SERVER_ERROR'\n | 'PROVIDER_NETWORK_ERROR'\n | 'PROVIDER_CONTEXT_OVERFLOW'\n // Tool\n | 'TOOL_NOT_FOUND'\n | 'TOOL_PERMISSION_DENIED'\n | 'TOOL_EXECUTION_FAILED'\n | 'TOOL_TIMEOUT'\n | 'TOOL_INPUT_INVALID'\n // Config\n | 'CONFIG_INVALID'\n | 'CONFIG_NOT_FOUND'\n | 'CONFIG_PARSE_FAILED'\n | 'CONFIG_MIGRATION_NEEDED'\n // Plugin\n | 'PLUGIN_LOAD_FAILED'\n | 'PLUGIN_API_MISMATCH'\n | 'PLUGIN_MISSING_DEPENDENCY'\n // Agent\n | 'AGENT_ITERATION_LIMIT'\n | 'AGENT_CONTEXT_OVERFLOW'\n | 'AGENT_ABORTED'\n | 'AGENT_RUN_FAILED'\n // Session\n | 'SESSION_NOT_FOUND'\n | 'SESSION_CORRUPTED'\n | 'SESSION_WRITE_FAILED'\n // Container / Registry\n | 'CONTAINER_TOKEN_ALREADY_BOUND'\n | 'CONTAINER_TOKEN_NOT_BOUND'\n | 'REGISTRY_DUPLICATE'\n | 'REGISTRY_NOT_FOUND'\n // General\n | 'UNKNOWN';\n\nexport type ErrorSubsystem =\n | 'provider'\n | 'tool'\n | 'config'\n | 'plugin'\n | 'agent'\n | 'session'\n | 'container'\n | 'general';\nexport type ErrorSeverity = 'fatal' | 'error' | 'warning';\n\n// ── Base error class ─────────────────────────────────────────────────\n\nexport class WrongStackError extends Error {\n readonly code: ErrorCode;\n readonly subsystem: ErrorSubsystem;\n readonly severity: ErrorSeverity;\n readonly recoverable: boolean;\n readonly context?: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n code: ErrorCode;\n subsystem: ErrorSubsystem;\n severity?: ErrorSeverity;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super(opts.message, { cause: opts.cause });\n this.name = 'WrongStackError';\n this.code = opts.code;\n this.subsystem = opts.subsystem;\n this.severity = opts.severity ?? 'error';\n this.recoverable = opts.recoverable ?? false;\n this.context = opts.context;\n }\n\n /**\n * Render a one-line user-facing description.\n * Subclasses should override for domain-specific formatting.\n */\n describe(): string {\n const ctx = this.context ? ` ${formatContext(this.context)}` : '';\n return `${this.code}: ${this.message}${ctx}`;\n }\n}\n\nfunction formatContext(ctx: Record<string, unknown>): string {\n const parts = Object.entries(ctx)\n .filter(([, v]) => v !== undefined)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${String(v)}`);\n return parts.length > 0 ? `[${parts.join(' ')}]` : '';\n}\n\n// ── Specific error classes ───────────────────────────────────────────\n\n/**\n * Tool execution errors — thrown by ToolExecutor and individual tools.\n */\nexport class ToolError extends WrongStackError {\n readonly toolName: string;\n\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n | 'TOOL_NOT_FOUND'\n | 'TOOL_PERMISSION_DENIED'\n | 'TOOL_EXECUTION_FAILED'\n | 'TOOL_TIMEOUT'\n | 'TOOL_INPUT_INVALID'\n >;\n toolName: string;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'tool',\n recoverable: opts.recoverable,\n context: { tool: opts.toolName, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'ToolError';\n this.toolName = opts.toolName;\n }\n}\n\n/**\n * Config loading / validation errors.\n */\nexport class ConfigError extends WrongStackError {\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'CONFIG_INVALID' | 'CONFIG_NOT_FOUND' | 'CONFIG_PARSE_FAILED' | 'CONFIG_MIGRATION_NEEDED'\n >;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'config',\n severity: 'fatal',\n recoverable: false,\n context: opts.context,\n cause: opts.cause,\n });\n this.name = 'ConfigError';\n }\n}\n\n/**\n * Plugin loading / lifecycle errors.\n */\nexport class PluginError extends WrongStackError {\n readonly pluginName: string;\n\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'PLUGIN_LOAD_FAILED' | 'PLUGIN_API_MISMATCH' | 'PLUGIN_MISSING_DEPENDENCY'\n >;\n pluginName: string;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'plugin',\n severity: 'error',\n recoverable: opts.code === 'PLUGIN_MISSING_DEPENDENCY',\n context: { plugin: opts.pluginName, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'PluginError';\n this.pluginName = opts.pluginName;\n }\n}\n\n/**\n * Agent runtime errors — thrown by Agent.run when a non-WrongStackError\n * escapes the inner loop, so callers always see a structured error.\n */\nexport class AgentError extends WrongStackError {\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'AGENT_ITERATION_LIMIT' | 'AGENT_CONTEXT_OVERFLOW' | 'AGENT_ABORTED' | 'AGENT_RUN_FAILED'\n >;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'agent',\n severity: opts.code === 'AGENT_ABORTED' ? 'warning' : 'error',\n recoverable: opts.recoverable ?? opts.code === 'AGENT_ITERATION_LIMIT',\n context: opts.context,\n cause: opts.cause,\n });\n this.name = 'AgentError';\n }\n}\n\n/**\n * Wrap an arbitrary thrown value into a `WrongStackError` so the caller\n * always gets a structured error. Pass-throughs WrongStackError instances\n * unchanged; raw `Error`s and primitives get an `AGENT_RUN_FAILED` wrapper\n * with the original preserved as `cause`.\n */\nexport function toWrongStackError(\n err: unknown,\n code: Extract<ErrorCode, 'AGENT_RUN_FAILED' | 'AGENT_ABORTED' | 'UNKNOWN'> = 'AGENT_RUN_FAILED',\n): WrongStackError {\n if (err instanceof WrongStackError) return err;\n const message = err instanceof Error ? err.message : String(err);\n return new AgentError({\n message,\n code: code === 'UNKNOWN' ? 'AGENT_RUN_FAILED' : code,\n cause: err,\n });\n}\n\n/**\n * Session storage errors.\n */\nexport class SessionError extends WrongStackError {\n readonly sessionId?: string;\n\n constructor(opts: {\n message: string;\n code: Extract<ErrorCode, 'SESSION_NOT_FOUND' | 'SESSION_CORRUPTED' | 'SESSION_WRITE_FAILED'>;\n sessionId?: string;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'session',\n severity: opts.code === 'SESSION_WRITE_FAILED' ? 'error' : 'warning',\n recoverable: opts.code !== 'SESSION_CORRUPTED',\n context: { sessionId: opts.sessionId, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'SessionError';\n this.sessionId = opts.sessionId;\n }\n}\n\n// ── Type guards ──────────────────────────────────────────────────────\n\nexport function isWrongStackError(err: unknown): err is WrongStackError {\n return err instanceof WrongStackError;\n}\n\nexport function isToolError(err: unknown): err is ToolError {\n return err instanceof ToolError;\n}\n\nexport function isConfigError(err: unknown): err is ConfigError {\n return err instanceof ConfigError;\n}\n\nexport function isPluginError(err: unknown): err is PluginError {\n return err instanceof PluginError;\n}\n\nexport function isSessionError(err: unknown): err is SessionError {\n return err instanceof SessionError;\n}\n\nexport function isAgentError(err: unknown): err is AgentError {\n return err instanceof AgentError;\n}\n","/**\n * ExtensionRegistry — manages AgentExtension registrations.\n *\n * Extensions are called in registration order at each lifecycle phase.\n * Each extension hook failure is caught and logged independently so\n * one bad extension can't take down the agent.\n */\n\nimport type { TextBlock } from '../types/blocks.js';\nimport { WrongStackError } from '../types/errors.js';\nimport type { Logger } from '../types/logger.js';\nimport type { SystemPromptContributor } from '../types/system-prompt-contributor.js';\nimport type {\n AfterIterationHook,\n AfterRunHook,\n AfterToolExecutionHook,\n AgentExtension,\n BeforeIterationHook,\n BeforeRunHook,\n BeforeToolExecutionHook,\n OnErrorHook,\n ProviderRunnerFn,\n ProviderRunnerWrapper,\n} from './extension-points.js';\n\nexport class ExtensionRegistry {\n private readonly extensions: AgentExtension[] = [];\n private readonly promptContributors: SystemPromptContributor[] = [];\n private log: Logger | undefined;\n\n setLogger(log: Logger): void {\n this.log = log;\n }\n\n /**\n * Register a system prompt contributor. Returns an unregister function.\n * Contributors are called on every system prompt build in registration\n * order. Their output blocks are inserted after the core environment\n * block, before the mode and plan blocks.\n */\n registerSystemPromptContributor(c: SystemPromptContributor): () => void {\n this.promptContributors.push(c);\n return () => {\n const idx = this.promptContributors.indexOf(c);\n if (idx >= 0) this.promptContributors.splice(idx, 1);\n };\n }\n\n /**\n * Build all registered system prompt contributions.\n * Failures are caught and logged — one bad contributor doesn't\n * break the prompt assembly.\n */\n async buildSystemPromptContributions(\n ctx: Parameters<SystemPromptContributor>[0],\n ): Promise<TextBlock[]> {\n const blocks: TextBlock[] = [];\n // Snapshot before iterating so mid-iteration registration doesn't cause\n // skipped or duplicate contributor invocations during this phase.\n const snapshot = [...this.promptContributors];\n for (const c of snapshot) {\n try {\n const contributed = await c(ctx);\n blocks.push(...contributed);\n } catch (err) {\n this.log?.error('SystemPromptContributor failed', err);\n }\n }\n return blocks;\n }\n\n /**\n * Returns the live array of contributors (readonly snapshot for\n * passing to DefaultSystemPromptBuilder at build time).\n */\n listSystemPromptContributors(): readonly SystemPromptContributor[] {\n return this.promptContributors;\n }\n\n /**\n * Register an extension. Duplicate names are rejected.\n * Returns an unregister function.\n */\n register(ext: AgentExtension): () => void {\n if (this.extensions.some((e) => e.name === ext.name)) {\n throw new WrongStackError({\n message: `Extension \"${ext.name}\" already registered`,\n code: 'REGISTRY_DUPLICATE',\n subsystem: 'container',\n context: { extension: ext.name },\n });\n }\n this.extensions.push(ext);\n return () => this.unregister(ext.name);\n }\n\n /**\n * Register an extension, silently replacing any previous registration\n * with the same name. Use this when overriding a default extension.\n */\n registerOrReplace(ext: AgentExtension): () => void {\n const idx = this.extensions.findIndex((e) => e.name === ext.name);\n if (idx >= 0) this.extensions.splice(idx, 1);\n return this.register(ext);\n }\n\n /**\n * Unregister an extension by name. Returns true if found.\n */\n unregister(name: string): boolean {\n const idx = this.extensions.findIndex((e) => e.name === name);\n if (idx === -1) return false;\n this.extensions.splice(idx, 1);\n return true;\n }\n\n /**\n * List registered extension names in order.\n */\n list(): readonly string[] {\n return this.extensions.map((e) => e.name);\n }\n\n /**\n * Check if an extension with the given name is registered.\n */\n has(name: string): boolean {\n return this.extensions.some((e) => e.name === name);\n }\n\n /**\n * Remove all registered extensions and contributors.\n */\n clear(): void {\n this.extensions.length = 0;\n this.promptContributors.length = 0;\n }\n\n // ── Hook runners ─────────────────────────────────────────────────\n\n async runBeforeRun(...args: Parameters<BeforeRunHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeRun) continue;\n try {\n await ext.beforeRun(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeRun hook failed`, err);\n }\n }\n }\n\n async runAfterRun(...args: Parameters<AfterRunHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterRun) continue;\n try {\n await ext.afterRun(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterRun hook failed`, err);\n }\n }\n }\n\n async runBeforeIteration(...args: Parameters<BeforeIterationHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeIteration) continue;\n try {\n await ext.beforeIteration(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeIteration hook failed`, err);\n }\n }\n }\n\n async runAfterIteration(...args: Parameters<AfterIterationHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterIteration) continue;\n try {\n await ext.afterIteration(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterIteration hook failed`, err);\n }\n }\n }\n\n /**\n * Run onError hooks in order. The first hook that returns a non-void\n * result wins; subsequent hooks are skipped.\n */\n async runOnError(\n ...args: Parameters<OnErrorHook>\n ): Promise<\n { action: 'retry'; model?: string } | { action: 'fail' } | { action: 'continue' } | void\n > {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.onError) continue;\n try {\n const result = await ext.onError(...args);\n if (result) return result;\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" onError hook failed`, err);\n }\n }\n }\n\n /**\n * Build a composed provider runner. Extensions with `wrapProviderRunner`\n * form a middleware-style chain: the innermost extension wraps the\n * default runner, each subsequent wrapper wraps the previous.\n */\n wrapProviderRunner(inner: ProviderRunnerFn): ProviderRunnerFn {\n const wrappers = this.extensions\n .filter((e) => e.wrapProviderRunner)\n .map((e) => ({ name: e.name, wrap: e.wrapProviderRunner! }));\n\n if (wrappers.length === 0) return inner;\n\n // Build chain from innermost to outermost\n let composed: ProviderRunnerFn = inner;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n const wrapper = wrappers[i]!;\n const next = composed;\n composed = async (ctx, req) => {\n try {\n return await wrapper.wrap(ctx, req, next);\n } catch (err) {\n this.log?.error(`Extension \"${wrapper.name}\" wrapProviderRunner failed`, err);\n throw err;\n }\n };\n }\n return composed;\n }\n\n async runBeforeToolExecution(\n ...args: Parameters<BeforeToolExecutionHook>\n ): Promise<Parameters<BeforeToolExecutionHook>[1]> {\n let toolUses = args[1];\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeToolExecution) continue;\n try {\n toolUses = await ext.beforeToolExecution(args[0], toolUses);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeToolExecution hook failed`, err);\n }\n }\n return toolUses;\n }\n\n async runAfterToolExecution(...args: Parameters<AfterToolExecutionHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterToolExecution) continue;\n try {\n await ext.afterToolExecution(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterToolExecution hook failed`, err);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/errors.ts","../../src/extension/registry.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * WrongStack error hierarchy.\n *\n * Every error thrown by the framework is a `WrongStackError` with a\n * machine-readable `code`, a `subsystem` tag, and a `severity` level.\n * This lets consumers (CLI, TUI, plugins, tests) branch on structured\n * data instead of parsing error messages.\n */\n\n// ── Error codes ──────────────────────────────────────────────────────\n\n/**\n * Machine-readable error codes as frozen constants.\n *\n * Use `ERROR_CODES.X` instead of raw string literals for:\n * - IDE autocomplete and compile-time validation\n * - Safe refactoring (rename updates all usages)\n * - Plugin extensibility (extend the object to add custom codes)\n *\n * The `ErrorCode` type is derived from this object, so adding a new\n * code here automatically updates the type without extra changes.\n */\nexport const ERROR_CODES = {\n // Provider\n PROVIDER_RATE_LIMITED: 'PROVIDER_RATE_LIMITED',\n PROVIDER_AUTH_FAILED: 'PROVIDER_AUTH_FAILED',\n PROVIDER_OVERLOADED: 'PROVIDER_OVERLOADED',\n PROVIDER_INVALID_REQUEST: 'PROVIDER_INVALID_REQUEST',\n PROVIDER_SERVER_ERROR: 'PROVIDER_SERVER_ERROR',\n PROVIDER_NETWORK_ERROR: 'PROVIDER_NETWORK_ERROR',\n PROVIDER_CONTEXT_OVERFLOW: 'PROVIDER_CONTEXT_OVERFLOW',\n // Tool\n TOOL_NOT_FOUND: 'TOOL_NOT_FOUND',\n TOOL_PERMISSION_DENIED: 'TOOL_PERMISSION_DENIED',\n TOOL_EXECUTION_FAILED: 'TOOL_EXECUTION_FAILED',\n TOOL_TIMEOUT: 'TOOL_TIMEOUT',\n TOOL_INPUT_INVALID: 'TOOL_INPUT_INVALID',\n // Config\n CONFIG_INVALID: 'CONFIG_INVALID',\n CONFIG_NOT_FOUND: 'CONFIG_NOT_FOUND',\n CONFIG_PARSE_FAILED: 'CONFIG_PARSE_FAILED',\n CONFIG_MIGRATION_NEEDED: 'CONFIG_MIGRATION_NEEDED',\n // Plugin\n PLUGIN_LOAD_FAILED: 'PLUGIN_LOAD_FAILED',\n PLUGIN_API_MISMATCH: 'PLUGIN_API_MISMATCH',\n PLUGIN_MISSING_DEPENDENCY: 'PLUGIN_MISSING_DEPENDENCY',\n // Agent\n AGENT_ITERATION_LIMIT: 'AGENT_ITERATION_LIMIT',\n AGENT_CONTEXT_OVERFLOW: 'AGENT_CONTEXT_OVERFLOW',\n AGENT_ABORTED: 'AGENT_ABORTED',\n AGENT_RUN_FAILED: 'AGENT_RUN_FAILED',\n // Session\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n SESSION_CORRUPTED: 'SESSION_CORRUPTED',\n SESSION_WRITE_FAILED: 'SESSION_WRITE_FAILED',\n // Container / Registry\n CONTAINER_TOKEN_ALREADY_BOUND: 'CONTAINER_TOKEN_ALREADY_BOUND',\n CONTAINER_TOKEN_NOT_BOUND: 'CONTAINER_TOKEN_NOT_BOUND',\n REGISTRY_DUPLICATE: 'REGISTRY_DUPLICATE',\n REGISTRY_NOT_FOUND: 'REGISTRY_NOT_FOUND',\n // File system\n FS_READ_FAILED: 'FS_READ_FAILED',\n FS_WRITE_FAILED: 'FS_WRITE_FAILED',\n FS_MKDIR_FAILED: 'FS_MKDIR_FAILED',\n FS_DELETE_FAILED: 'FS_DELETE_FAILED',\n FS_ATOMIC_WRITE_FAILED: 'FS_ATOMIC_WRITE_FAILED',\n // General\n UNKNOWN: 'UNKNOWN',\n} as const;\n\n/**\n * Union type derived from `ERROR_CODES`. Using `typeof ERROR_CODES[keyof typeof ERROR_CODES]`\n * instead of a string literal union means TypeScript auto-updates the type whenever\n * a new code is added to `ERROR_CODES` — no need to keep two lists in sync.\n */\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];\n\nexport type ErrorSubsystem =\n | 'provider'\n | 'tool'\n | 'config'\n | 'plugin'\n | 'agent'\n | 'session'\n | 'container'\n | 'fs'\n | 'general';\nexport type ErrorSeverity = 'fatal' | 'error' | 'warning';\n\n// ── Base error class ─────────────────────────────────────────────────\n\nexport class WrongStackError extends Error {\n readonly code: ErrorCode;\n readonly subsystem: ErrorSubsystem;\n readonly severity: ErrorSeverity;\n readonly recoverable: boolean;\n readonly context?: Record<string, unknown>;\n\n constructor(opts: {\n message: string;\n code: ErrorCode;\n subsystem: ErrorSubsystem;\n severity?: ErrorSeverity;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super(opts.message, { cause: opts.cause });\n this.name = 'WrongStackError';\n this.code = opts.code;\n this.subsystem = opts.subsystem;\n this.severity = opts.severity ?? 'error';\n this.recoverable = opts.recoverable ?? false;\n this.context = opts.context;\n }\n\n /**\n * Render a one-line user-facing description.\n * Subclasses should override for domain-specific formatting.\n */\n describe(): string {\n const ctx = this.context ? ` ${formatContext(this.context)}` : '';\n return `${this.code}: ${this.message}${ctx}`;\n }\n}\n\nfunction formatContext(ctx: Record<string, unknown>): string {\n const parts = Object.entries(ctx)\n .filter(([, v]) => v !== undefined)\n .slice(0, 3)\n .map(([k, v]) => `${k}=${String(v)}`);\n return parts.length > 0 ? `[${parts.join(' ')}]` : '';\n}\n\n// ── Specific error classes ───────────────────────────────────────────\n\n/**\n * Tool execution errors — thrown by ToolExecutor and individual tools.\n */\nexport class ToolError extends WrongStackError {\n readonly toolName: string;\n\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n | 'TOOL_NOT_FOUND'\n | 'TOOL_PERMISSION_DENIED'\n | 'TOOL_EXECUTION_FAILED'\n | 'TOOL_TIMEOUT'\n | 'TOOL_INPUT_INVALID'\n >;\n toolName: string;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'tool',\n recoverable: opts.recoverable,\n context: { tool: opts.toolName, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'ToolError';\n this.toolName = opts.toolName;\n }\n}\n\n/**\n * Config loading / validation errors.\n */\nexport class ConfigError extends WrongStackError {\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'CONFIG_INVALID' | 'CONFIG_NOT_FOUND' | 'CONFIG_PARSE_FAILED' | 'CONFIG_MIGRATION_NEEDED'\n >;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'config',\n severity: 'fatal',\n recoverable: false,\n context: opts.context,\n cause: opts.cause,\n });\n this.name = 'ConfigError';\n }\n}\n\n/**\n * Plugin loading / lifecycle errors.\n */\nexport class PluginError extends WrongStackError {\n readonly pluginName: string;\n\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'PLUGIN_LOAD_FAILED' | 'PLUGIN_API_MISMATCH' | 'PLUGIN_MISSING_DEPENDENCY'\n >;\n pluginName: string;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'plugin',\n severity: 'error',\n recoverable: opts.code === ERROR_CODES.PLUGIN_MISSING_DEPENDENCY,\n context: { plugin: opts.pluginName, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'PluginError';\n this.pluginName = opts.pluginName;\n }\n}\n\n/**\n * Agent runtime errors — thrown by Agent.run when a non-WrongStackError\n * escapes the inner loop, so callers always see a structured error.\n */\nexport class AgentError extends WrongStackError {\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'AGENT_ITERATION_LIMIT' | 'AGENT_CONTEXT_OVERFLOW' | 'AGENT_ABORTED' | 'AGENT_RUN_FAILED'\n >;\n recoverable?: boolean;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'agent',\n severity: opts.code === ERROR_CODES.AGENT_ABORTED ? 'warning' : 'error',\n recoverable: opts.recoverable ?? opts.code === ERROR_CODES.AGENT_ITERATION_LIMIT,\n context: opts.context,\n cause: opts.cause,\n });\n this.name = 'AgentError';\n }\n}\n\n/**\n * Wrap an arbitrary thrown value into a `WrongStackError` so the caller\n * always gets a structured error. Pass-throughs WrongStackError instances\n * unchanged; raw `Error`s and primitives get an `AGENT_RUN_FAILED` wrapper\n * with the original preserved as `cause`.\n */\nexport function toWrongStackError(\n err: unknown,\n code: Extract<ErrorCode, 'AGENT_RUN_FAILED' | 'AGENT_ABORTED' | 'UNKNOWN'> = ERROR_CODES.AGENT_RUN_FAILED,\n): WrongStackError {\n if (err instanceof WrongStackError) return err;\n const message = err instanceof Error ? err.message : String(err);\n return new AgentError({\n message,\n code: code === 'UNKNOWN' ? ERROR_CODES.AGENT_RUN_FAILED : code,\n cause: err,\n });\n}\n\n/**\n * Session storage errors.\n */\nexport class SessionError extends WrongStackError {\n readonly sessionId?: string;\n\n constructor(opts: {\n message: string;\n code: Extract<ErrorCode, 'SESSION_NOT_FOUND' | 'SESSION_CORRUPTED' | 'SESSION_WRITE_FAILED'>;\n sessionId?: string;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'session',\n severity: opts.code === ERROR_CODES.SESSION_WRITE_FAILED ? 'error' : 'warning',\n recoverable: opts.code !== ERROR_CODES.SESSION_CORRUPTED,\n context: { sessionId: opts.sessionId, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'SessionError';\n this.sessionId = opts.sessionId;\n }\n}\n\n/**\n * File system operation errors.\n */\nexport class FsError extends WrongStackError {\n readonly path?: string;\n\n constructor(opts: {\n message: string;\n code: Extract<\n ErrorCode,\n 'FS_READ_FAILED' | 'FS_WRITE_FAILED' | 'FS_MKDIR_FAILED' | 'FS_DELETE_FAILED' | 'FS_ATOMIC_WRITE_FAILED'\n >;\n path?: string;\n context?: Record<string, unknown>;\n cause?: unknown;\n }) {\n super({\n message: opts.message,\n code: opts.code,\n subsystem: 'fs',\n severity: 'error',\n recoverable: opts.code !== ERROR_CODES.FS_READ_FAILED,\n context: { path: opts.path, ...opts.context },\n cause: opts.cause,\n });\n this.name = 'FsError';\n this.path = opts.path;\n }\n}\n\n// ── Type guards ──────────────────────────────────────────────────────\n\nexport function isWrongStackError(err: unknown): err is WrongStackError {\n return err instanceof WrongStackError;\n}\n\nexport function isToolError(err: unknown): err is ToolError {\n return err instanceof ToolError;\n}\n\nexport function isConfigError(err: unknown): err is ConfigError {\n return err instanceof ConfigError;\n}\n\nexport function isPluginError(err: unknown): err is PluginError {\n return err instanceof PluginError;\n}\n\nexport function isSessionError(err: unknown): err is SessionError {\n return err instanceof SessionError;\n}\n\nexport function isAgentError(err: unknown): err is AgentError {\n return err instanceof AgentError;\n}\n\nexport function isFsError(err: unknown): err is FsError {\n return err instanceof FsError;\n}\n","/**\n * ExtensionRegistry — manages AgentExtension registrations.\n *\n * Extensions are called in registration order at each lifecycle phase.\n * Each extension hook failure is caught and logged independently so\n * one bad extension can't take down the agent.\n */\n\nimport type { TextBlock } from '../types/blocks.js';\nimport { WrongStackError, ERROR_CODES } from '../types/errors.js';\nimport type { Logger } from '../types/logger.js';\nimport type { SystemPromptContributor } from '../types/system-prompt-contributor.js';\nimport type {\n AfterIterationHook,\n AfterRunHook,\n AfterToolExecutionHook,\n AgentExtension,\n BeforeIterationHook,\n BeforeRunHook,\n BeforeToolExecutionHook,\n OnErrorHook,\n ProviderRunnerFn,\n ProviderRunnerWrapper,\n} from './extension-points.js';\n\nexport class ExtensionRegistry {\n private readonly extensions: AgentExtension[] = [];\n private readonly promptContributors: SystemPromptContributor[] = [];\n private log: Logger | undefined;\n\n setLogger(log: Logger): void {\n this.log = log;\n }\n\n /**\n * Register a system prompt contributor. Returns an unregister function.\n * Contributors are called on every system prompt build in registration\n * order. Their output blocks are inserted after the core environment\n * block, before the mode and plan blocks.\n */\n registerSystemPromptContributor(c: SystemPromptContributor): () => void {\n this.promptContributors.push(c);\n return () => {\n const idx = this.promptContributors.indexOf(c);\n if (idx >= 0) this.promptContributors.splice(idx, 1);\n };\n }\n\n /**\n * Build all registered system prompt contributions.\n * Failures are caught and logged — one bad contributor doesn't\n * break the prompt assembly.\n */\n async buildSystemPromptContributions(\n ctx: Parameters<SystemPromptContributor>[0],\n ): Promise<TextBlock[]> {\n const blocks: TextBlock[] = [];\n // Snapshot before iterating so mid-iteration registration doesn't cause\n // skipped or duplicate contributor invocations during this phase.\n const snapshot = [...this.promptContributors];\n for (const c of snapshot) {\n try {\n const contributed = await c(ctx);\n blocks.push(...contributed);\n } catch (err) {\n this.log?.error('SystemPromptContributor failed', err);\n }\n }\n return blocks;\n }\n\n /**\n * Returns the live array of contributors (readonly snapshot for\n * passing to DefaultSystemPromptBuilder at build time).\n */\n listSystemPromptContributors(): readonly SystemPromptContributor[] {\n return this.promptContributors;\n }\n\n /**\n * Register an extension. Duplicate names are rejected.\n * Returns an unregister function.\n */\n register(ext: AgentExtension): () => void {\n if (this.extensions.some((e) => e.name === ext.name)) {\n throw new WrongStackError({\n message: `Extension \"${ext.name}\" already registered`,\n code: ERROR_CODES.REGISTRY_DUPLICATE,\n subsystem: 'container',\n context: { extension: ext.name },\n });\n }\n this.extensions.push(ext);\n return () => this.unregister(ext.name);\n }\n\n /**\n * Register an extension, silently replacing any previous registration\n * with the same name. Use this when overriding a default extension.\n */\n registerOrReplace(ext: AgentExtension): () => void {\n const idx = this.extensions.findIndex((e) => e.name === ext.name);\n if (idx >= 0) this.extensions.splice(idx, 1);\n return this.register(ext);\n }\n\n /**\n * Unregister an extension by name. Returns true if found.\n */\n unregister(name: string): boolean {\n const idx = this.extensions.findIndex((e) => e.name === name);\n if (idx === -1) return false;\n this.extensions.splice(idx, 1);\n return true;\n }\n\n /**\n * List registered extension names in order.\n */\n list(): readonly string[] {\n return this.extensions.map((e) => e.name);\n }\n\n /**\n * Check if an extension with the given name is registered.\n */\n has(name: string): boolean {\n return this.extensions.some((e) => e.name === name);\n }\n\n /**\n * Remove all registered extensions and contributors.\n */\n clear(): void {\n this.extensions.length = 0;\n this.promptContributors.length = 0;\n }\n\n // ── Hook runners ─────────────────────────────────────────────────\n\n async runBeforeRun(...args: Parameters<BeforeRunHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeRun) continue;\n try {\n await ext.beforeRun(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeRun hook failed`, err);\n }\n }\n }\n\n async runAfterRun(...args: Parameters<AfterRunHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterRun) continue;\n try {\n await ext.afterRun(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterRun hook failed`, err);\n }\n }\n }\n\n async runBeforeIteration(...args: Parameters<BeforeIterationHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeIteration) continue;\n try {\n await ext.beforeIteration(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeIteration hook failed`, err);\n }\n }\n }\n\n async runAfterIteration(...args: Parameters<AfterIterationHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterIteration) continue;\n try {\n await ext.afterIteration(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterIteration hook failed`, err);\n }\n }\n }\n\n /**\n * Run onError hooks in order. The first hook that returns a non-void\n * result wins; subsequent hooks are skipped.\n */\n async runOnError(\n ...args: Parameters<OnErrorHook>\n ): Promise<\n { action: 'retry'; model?: string } | { action: 'fail' } | { action: 'continue' } | void\n > {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.onError) continue;\n try {\n const result = await ext.onError(...args);\n if (result) return result;\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" onError hook failed`, err);\n }\n }\n }\n\n /**\n * Build a composed provider runner. Extensions with `wrapProviderRunner`\n * form a middleware-style chain: the innermost extension wraps the\n * default runner, each subsequent wrapper wraps the previous.\n */\n wrapProviderRunner(inner: ProviderRunnerFn): ProviderRunnerFn {\n const wrappers = this.extensions\n .filter((e) => e.wrapProviderRunner)\n .map((e) => ({ name: e.name, wrap: e.wrapProviderRunner! }));\n\n if (wrappers.length === 0) return inner;\n\n // Build chain from innermost to outermost\n let composed: ProviderRunnerFn = inner;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n const wrapper = wrappers[i]!;\n const next = composed;\n composed = async (ctx, req) => {\n try {\n return await wrapper.wrap(ctx, req, next);\n } catch (err) {\n this.log?.error(`Extension \"${wrapper.name}\" wrapProviderRunner failed`, err);\n throw err;\n }\n };\n }\n return composed;\n }\n\n async runBeforeToolExecution(\n ...args: Parameters<BeforeToolExecutionHook>\n ): Promise<Parameters<BeforeToolExecutionHook>[1]> {\n let toolUses = args[1];\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.beforeToolExecution) continue;\n try {\n toolUses = await ext.beforeToolExecution(args[0], toolUses);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" beforeToolExecution hook failed`, err);\n }\n }\n return toolUses;\n }\n\n async runAfterToolExecution(...args: Parameters<AfterToolExecutionHook>): Promise<void> {\n const snapshot = [...this.extensions];\n for (const ext of snapshot) {\n if (!ext.afterToolExecution) continue;\n try {\n await ext.afterToolExecution(...args);\n } catch (err) {\n this.log?.error(`Extension \"${ext.name}\" afterToolExecution hook failed`, err);\n }\n }\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { v as Tool, B as ToolResultBlock, G as ToolUseBlock, a2 as Context, T as TextBlock, R as Request, j as Response, g as Provider, W as WrongStackError, b as ContentBlock, aa as RunOptions, J as JSONSchema } from './context-DN5v-uQX.js';
1
+ import { x as Tool, G as ToolResultBlock, K as ToolUseBlock, a5 as Context, T as TextBlock, R as Request, l as Response, i as Provider, W as WrongStackError, b as ContentBlock, ad as RunOptions, J as JSONSchema } from './context-bmR0YgBm.js';
2
2
  import { L as Logger } from './logger-BMQgxvdy.js';
3
- import { R as Renderer, B as BuildContext, C as Container, P as Pipeline, e as ReadonlyPipeline } from './system-prompt-gL06H9P4.js';
3
+ import { R as Renderer, B as BuildContext, C as Container, P as Pipeline, e as ReadonlyPipeline } from './system-prompt-CfgXqyv2.js';
4
4
  import { T as Tracer } from './observability-BhnVLBLS.js';
5
- import { E as EventBus, a as EventName, L as Listener } from './events-CJqwQl8G.js';
6
- import { a as PermissionPolicy, S as SecretScrubber } from './secret-scrubber-CT7wefiO.js';
7
- import { l as ProviderConfig, a as Config } from './config-DfC6g6KV.js';
5
+ import { E as EventBus, a as EventName, L as Listener } from './events-CEKFTmIY.js';
6
+ import { a as PermissionPolicy, S as SecretScrubber } from './secret-scrubber-C2YCYtkn.js';
7
+ import { l as ProviderConfig, a as Config } from './config-C34JRwl4.js';
8
8
  import { W as WireFamily } from './models-registry-Y2xbog0E.js';
9
9
 
10
10
  /**
@@ -87,6 +87,11 @@ declare class ToolRegistry {
87
87
  owner: string;
88
88
  }[];
89
89
  clear(): void;
90
+ /**
91
+ * Return a new ToolRegistry with the same registered tools and owners.
92
+ * Useful for creating filtered copies in multi-agent scenarios.
93
+ */
94
+ clone(): ToolRegistry;
90
95
  }
91
96
 
92
97
  /**
@@ -449,6 +454,16 @@ interface RunResult {
449
454
  error?: WrongStackError;
450
455
  finalText?: string;
451
456
  iterations: number;
457
+ /**
458
+ * Subagent delegate summaries collected during the run. Populated by the
459
+ * `delegate` tool — each entry is the `summary` + `ok` fields returned
460
+ * when a subagent finishes. Callers (e.g. TUI/CLI renderer) use this to
461
+ * surface flashy completion banners in the terminal.
462
+ */
463
+ delegateSummaries?: Array<{
464
+ summary: string;
465
+ ok: boolean;
466
+ }>;
452
467
  }
453
468
  interface AgentInit {
454
469
  container: Container;
@@ -1,9 +1,8 @@
1
1
  import { a as DirectorStateSnapshot } from './director-state-BmYi3DGA.js';
2
- import { c as SubagentConfig, j as TaskResult, a as CoordinatorStatus, k as TaskSpec, M as MultiAgentConfig, i as SubagentRunner, b as MultiAgentCoordinator, S as SpawnResult, l as BridgeMessage, A as AgentBridge } from './multi-agent-D5IbASk_.js';
3
- import { r as SessionWriter, v as Tool, p as SessionStore } from './context-DN5v-uQX.js';
4
- import { I as InMemoryAgentBridge } from './agent-bridge-BBXK_ppx.js';
5
- import { F as FleetBus, e as FleetUsage, f as FleetUsageAggregator } from './agent-subagent-runner-DsSm9lKN.js';
6
- import { EventEmitter } from 'node:events';
2
+ import { c as SubagentConfig, j as TaskResult, a as CoordinatorStatus, k as TaskSpec, M as MultiAgentConfig, i as SubagentRunner } from './multi-agent-Cm1wYSrw.js';
3
+ import { t as SessionWriter, x as Tool, r as SessionStore } from './context-bmR0YgBm.js';
4
+ import { I as InMemoryAgentBridge } from './agent-bridge-CrQpYjM7.js';
5
+ import { F as FleetBus, e as FleetUsage, f as FleetUsageAggregator } from './multi-agent-coordinator-CCupVFqv.js';
7
6
 
8
7
  /**
9
8
  * Interface for a fleet coordinator. Implemented by both `Director`
@@ -70,6 +69,12 @@ interface ICoordinator {
70
69
  * no new tasks are dispatched.
71
70
  */
72
71
  terminateAll(): Promise<void>;
72
+ /**
73
+ * Stop a subagent and remove it from the coordinator. Releases all
74
+ * associated resources (AbortController, budget state). The subagent
75
+ * entry is deleted so the id can be reused in a future spawn.
76
+ */
77
+ remove(subagentId: string): Promise<void>;
73
78
  /**
74
79
  * Live coordinator status — subagent list, pending task count,
75
80
  * completed task count, iteration totals.
@@ -665,6 +670,7 @@ declare class Director implements ICoordinator {
665
670
  awaitTasks(taskIds: string[]): Promise<TaskResult[]>;
666
671
  terminate(subagentId: string): Promise<void>;
667
672
  terminateAll(): Promise<void>;
673
+ remove(subagentId: string): Promise<void>;
668
674
  status(): CoordinatorStatus;
669
675
  /**
670
676
  * Subscribe to coordinator events. Currently only `task.completed` is
@@ -829,7 +835,8 @@ interface CreateDelegateToolOptions {
829
835
  * Buffer subtracted from the caller's `timeoutMs` before passing it
830
836
  * to the subagent. Gives the host a window to detect a subagent that
831
837
  * has gone silent and surface a partial result rather than a generic
832
- * timeout. Default: 30_000 ms.
838
+ * timeout. Default: 60_000 ms (raised from 30s to give subagents
839
+ * more headroom before the host kills them).
833
840
  */
834
841
  subagentTimeoutBufferMs?: number;
835
842
  }
@@ -848,105 +855,6 @@ interface CreateDelegateToolOptions {
848
855
  */
849
856
  declare function createDelegateTool(opts: CreateDelegateToolOptions): Tool;
850
857
 
851
- interface MultiAgentCoordinatorOptions {
852
- /**
853
- * Callback that executes a task on behalf of a subagent. Required for
854
- * `assign()` to actually run anything — without it, tasks queue forever.
855
- * The coordinator provides per-subagent isolation (own budget, own signal,
856
- * own bridge) and enforces timeout + concurrency.
857
- */
858
- runner?: SubagentRunner;
859
- }
860
- declare class DefaultMultiAgentCoordinator extends EventEmitter implements MultiAgentCoordinator {
861
- readonly coordinatorId: string;
862
- readonly config: MultiAgentConfig;
863
- private runner?;
864
- private readonly subagents;
865
- private pendingTasks;
866
- private completedResults;
867
- private totalIterations;
868
- private inFlight;
869
- /**
870
- * Subagents currently being stopped. Set on entry to `stop()`, cleared
871
- * once `recordCompletion` lands the terminal TaskResult. Used by
872
- * `runDispatched` and `findIdleSubagent` to refuse mid-flight dispatch
873
- * to a subagent the caller has already asked to terminate — closes the
874
- * assign+terminate race where a fresh task could land on a worker that
875
- * was about to be killed.
876
- */
877
- private readonly terminating;
878
- constructor(config: MultiAgentConfig, options?: MultiAgentCoordinatorOptions);
879
- /**
880
- * Replace the runner after construction. Used when the runner depends
881
- * on infrastructure (e.g. FleetBus) that isn't available until after
882
- * the coordinator's owning Director is built.
883
- */
884
- setRunner(runner: SubagentRunner): void;
885
- /**
886
- * Change the in-flight dispatch ceiling at runtime. Lowering does NOT
887
- * preempt running tasks — already-dispatched subagents finish their
888
- * current task; only future dispatches respect the new cap. Raising
889
- * immediately tries to fill the freed slots from the pending queue.
890
- */
891
- setMaxConcurrent(n: number): void;
892
- spawn(subagent: SubagentConfig): Promise<SpawnResult>;
893
- assign(task: TaskSpec): Promise<void>;
894
- delegate(to: string, msg: BridgeMessage): Promise<void>;
895
- /**
896
- * Wire up the communication bridge for a subagent. Call after spawn() once
897
- * the caller has created the bidirectional connection.
898
- */
899
- setSubagentBridge(subagentId: string, bridge: AgentBridge): void;
900
- stop(subagentId: string): Promise<void>;
901
- stopAll(): Promise<void>;
902
- getStatus(): CoordinatorStatus;
903
- /** Expose snapshot of completed results — useful for callers awaiting all done. */
904
- results(): readonly TaskResult[];
905
- /**
906
- * Wait for one or more tasks to complete and return their results.
907
- * If a task is already done when called, returns immediately.
908
- * Resolves to an array in the same order as `taskIds`.
909
- */
910
- awaitTasks(taskIds: string[]): Promise<TaskResult[]>;
911
- /**
912
- * Manual completion — for callers that drive subagents without a runner
913
- * (e.g. external orchestrators). When a runner is configured the coordinator
914
- * calls this itself.
915
- */
916
- completeTask(result: TaskResult): void;
917
- private tryDispatchNext;
918
- private canDispatch;
919
- private takeNextDispatchableTask;
920
- private findIdleSubagent;
921
- private isIdleSubagent;
922
- /**
923
- * Returns true iff at least one spawned subagent could still
924
- * process a task. A "live" subagent is one that is not stopped
925
- * AND not mid-termination — `running` workers count because they
926
- * will eventually finish and become idle.
927
- *
928
- * When no subagent has ever been spawned, returns `true` so a
929
- * pre-spawn `assign()` simply queues (legacy behaviour). The
930
- * dead-end detection only fires after `stop()` has retired every
931
- * spawned worker.
932
- *
933
- * Used by `tryDispatchNext` to detect a dead-end pending queue.
934
- */
935
- private hasLiveSubagent;
936
- /**
937
- * Drain every pending task with a synthetic `aborted_by_parent`
938
- * completion event. Same shape as the `stopAll()` drain — we go
939
- * around `recordCompletion` because pending tasks were never
940
- * counted in `inFlight` and routing them through would trip the
941
- * underflow guard on every task after the first.
942
- */
943
- private drainPendingAsAborted;
944
- private runDispatched;
945
- private executeWithTimeout;
946
- private recordCompletion;
947
- private isDone;
948
- }
949
-
950
858
  /**
951
859
  * Per-subagent session factory.
952
860
  *
@@ -1165,10 +1073,6 @@ interface FleetRosterBudget {
1165
1073
  maxCostUsd?: number;
1166
1074
  }
1167
1075
  declare const FLEET_ROSTER_BUDGETS: Record<string, FleetRosterBudget>;
1168
- /**
1169
- * Apply roster budget to a config (only when the config has no explicit
1170
- * budget fields set). This is called by the coordinator before dispatch.
1171
- */
1172
1076
  declare function applyRosterBudget(cfg: SubagentConfig): SubagentConfig;
1173
1077
  /** Quick-access list for spawning all at once. */
1174
1078
  declare const ALL_FLEET_AGENTS: SubagentConfig[];
@@ -1182,4 +1086,4 @@ declare const ALL_FLEET_AGENTS: SubagentConfig[];
1182
1086
  */
1183
1087
  declare const NULL_FLEET_BUS: FleetBus;
1184
1088
 
1185
- export { ALL_FLEET_AGENTS as A, BUG_HUNTER_AGENT as B, type CreateDelegateToolOptions as C, DEFAULT_DIRECTOR_PREAMBLE as D, FLEET_ROSTER as F, type ICoordinator as I, type MultiAgentCoordinatorOptions as M, NULL_FLEET_BUS as N, REFACTOR_PLANNER_AGENT as R, SECURITY_SCANNER_AGENT as S, AUDIT_LOG_AGENT as a, DEFAULT_SUBAGENT_BASELINE as b, DefaultMultiAgentCoordinator as c, type DelegateHost as d, Director as e, type DirectorPromptParts as f, type DirectorSessionFactory as g, type DirectorSessionFactoryOptions as h, FLEET_ROSTER_BUDGETS as i, FleetManager as j, type FleetManagerOptions as k, FleetSpawnBudgetError as l, type IFleetManager as m, type SubagentPromptParts as n, applyRosterBudget as o, composeDirectorPrompt as p, composeSubagentPrompt as q, createDelegateTool as r, makeDirectorSessionFactory as s, rosterSummaryFromConfigs as t, FleetCostCapError as u };
1089
+ export { ALL_FLEET_AGENTS as A, BUG_HUNTER_AGENT as B, type CreateDelegateToolOptions as C, DEFAULT_DIRECTOR_PREAMBLE as D, FLEET_ROSTER as F, type ICoordinator as I, NULL_FLEET_BUS as N, REFACTOR_PLANNER_AGENT as R, SECURITY_SCANNER_AGENT as S, AUDIT_LOG_AGENT as a, DEFAULT_SUBAGENT_BASELINE as b, type DelegateHost as c, Director as d, type DirectorPromptParts as e, type DirectorSessionFactory as f, type DirectorSessionFactoryOptions as g, FLEET_ROSTER_BUDGETS as h, FleetManager as i, type FleetManagerOptions as j, FleetSpawnBudgetError as k, type IFleetManager as l, type SubagentPromptParts as m, applyRosterBudget as n, composeDirectorPrompt as o, composeSubagentPrompt as p, createDelegateTool as q, makeDirectorSessionFactory as r, rosterSummaryFromConfigs as s, FleetCostCapError as t };
package/dist/index.d.ts CHANGED
@@ -1,59 +1,60 @@
1
- import { S as SystemPromptBuilder, M as ModelCapabilities, B as BuildContext, C as Container } from './system-prompt-gL06H9P4.js';
2
- export { a as BindOptions, D as Decorator, F as Factory, b as Middleware, c as MiddlewareHandler, N as NextFn, P as Pipeline, d as PipelineOptions, R as Renderer, T as Token } from './system-prompt-gL06H9P4.js';
3
- import { E as EventBus, a as EventName, L as Listener } from './events-CJqwQl8G.js';
4
- export { b as EventLogger, c as EventMap, S as ScopedEventBus } from './events-CJqwQl8G.js';
1
+ import { S as SystemPromptBuilder, M as ModelCapabilities, B as BuildContext, C as Container } from './system-prompt-CfgXqyv2.js';
2
+ export { a as BindOptions, D as Decorator, F as Factory, b as Middleware, c as MiddlewareHandler, N as NextFn, P as Pipeline, d as PipelineOptions, R as Renderer, T as Token } from './system-prompt-CfgXqyv2.js';
3
+ import { E as EventBus, a as EventName, L as Listener } from './events-CEKFTmIY.js';
4
+ export { b as EventLogger, c as EventMap, S as ScopedEventBus } from './events-CEKFTmIY.js';
5
5
  export { RunController, RunControllerOptions, TOKENS } from './kernel/index.js';
6
- import { a2 as Context, g as Provider, v as Tool, b as ContentBlock, T as TextBlock } from './context-DN5v-uQX.js';
7
- export { A as AgentError, C as Capabilities, a as ConfigError, a7 as ContextInit, a6 as ConversationState, E as ErrorCode, c as ErrorSeverity, d as ErrorSubsystem, F as FileSnapshot, I as ImageBlock, J as JSONSchema, M as Message, e as MessageRole, P as Permission, f as PluginError, h as ProviderError, i as ProviderErrorBody, a8 as ReadonlyConversationState, R as Request, j as Response, k as ResumedSession, l as RiskTier, a9 as RunEnv, aa as RunOptions, S as SessionData, m as SessionError, n as SessionEvent, o as SessionMetadata, p as SessionStore, q as SessionSummary, r as SessionWriter, ab as StateChange, ac as StateChangeHandler, s as StopReason, t as StreamEvent, u as ThinkingBlock, a5 as TodoItem, a3 as TokenCounter, w as ToolCallContext, x as ToolError, y as ToolFinalEvent, z as ToolProgressEvent, B as ToolResultBlock, D as ToolStreamEvent, G as ToolUseBlock, U as Usage, W as WrongStackError, H as asBlocks, K as asText, ad as extractRunEnv, L as isAgentError, N as isConfigError, O as isImageBlock, Q as isPluginError, V as isSessionError, X as isTextBlock, Y as isThinkingBlock, Z as isToolError, _ as isToolResultBlock, $ as isToolUseBlock, a0 as isWrongStackError, a1 as toWrongStackError, ae as wrapAsState } from './context-DN5v-uQX.js';
8
- export { P as ProviderRunner, R as RunProviderOptions } from './provider-runner-Byh5TcJs.js';
9
- import { M as MCPServerConfig, a as Config } from './config-DfC6g6KV.js';
10
- export { C as CONTEXT_WINDOW_MODES, b as ConfigLoader, c as ConfigStore, d as ContextConfig, e as ContextWindowAggressiveOn, f as ContextWindowConfigLike, g as ContextWindowMode, h as ContextWindowModeId, i as ContextWindowPolicy, j as ContextWindowThresholds, D as DEFAULT_CONTEXT_WINDOW_MODE_ID, F as FeaturesConfig, L as LogConfig, P as PluginConfig, k as ProviderApiKey, l as ProviderConfig, T as ToolsConfig, m as formatContextWindowModeList, n as getContextWindowMode, o as isContextWindowModeId, p as listContextWindowModes, r as resolveContextWindowPolicy } from './config-DfC6g6KV.js';
11
- export { C as CompactReport, a as Compactor } from './compactor-C8NhpSt5.js';
12
- export { P as PermissionDecision, a as PermissionPolicy, S as SecretScrubber, T as TrustPolicy } from './secret-scrubber-CT7wefiO.js';
6
+ import { a5 as Context, i as Provider, x as Tool, b as ContentBlock, T as TextBlock } from './context-bmR0YgBm.js';
7
+ export { A as AgentError, C as Capabilities, a as ConfigError, aa as ContextInit, a9 as ConversationState, E as ERROR_CODES, c as ErrorCode, d as ErrorSeverity, e as ErrorSubsystem, F as FileSnapshot, f as FsError, I as ImageBlock, J as JSONSchema, M as Message, g as MessageRole, P as Permission, h as PluginError, j as ProviderError, k as ProviderErrorBody, ab as ReadonlyConversationState, R as Request, l as Response, m as ResumedSession, n as RiskTier, ac as RunEnv, ad as RunOptions, S as SessionData, o as SessionError, p as SessionEvent, q as SessionMetadata, r as SessionStore, s as SessionSummary, t as SessionWriter, ae as StateChange, af as StateChangeHandler, u as StopReason, v as StreamEvent, w as ThinkingBlock, a8 as TodoItem, a6 as TokenCounter, y as ToolCallContext, z as ToolError, B as ToolFinalEvent, D as ToolProgressEvent, G as ToolResultBlock, H as ToolStreamEvent, K as ToolUseBlock, U as Usage, W as WrongStackError, L as asBlocks, N as asText, ag as extractRunEnv, O as isAgentError, Q as isConfigError, V as isFsError, X as isImageBlock, Y as isPluginError, Z as isSessionError, _ as isTextBlock, $ as isThinkingBlock, a0 as isToolError, a1 as isToolResultBlock, a2 as isToolUseBlock, a3 as isWrongStackError, a4 as toWrongStackError, ah as wrapAsState } from './context-bmR0YgBm.js';
8
+ export { P as ProviderRunner, R as RunProviderOptions } from './provider-runner-WDj28o7J.js';
9
+ import { M as MCPServerConfig, a as Config } from './config-C34JRwl4.js';
10
+ export { C as CONTEXT_WINDOW_MODES, b as ConfigLoader, c as ConfigStore, d as ContextConfig, e as ContextWindowAggressiveOn, f as ContextWindowConfigLike, g as ContextWindowMode, h as ContextWindowModeId, i as ContextWindowPolicy, j as ContextWindowThresholds, D as DEFAULT_CONTEXT_WINDOW_MODE_ID, F as FeaturesConfig, L as LogConfig, P as PluginConfig, k as ProviderApiKey, l as ProviderConfig, T as ToolsConfig, m as formatContextWindowModeList, n as getContextWindowMode, o as isContextWindowModeId, p as listContextWindowModes, r as resolveContextWindowPolicy } from './config-C34JRwl4.js';
11
+ export { C as CompactReport, a as Compactor } from './compactor-CWV1u-IU.js';
12
+ export { P as PermissionDecision, a as PermissionPolicy, S as SecretScrubber, T as TrustPolicy } from './secret-scrubber-C2YCYtkn.js';
13
13
  export { C as CheckpointInfo, R as RewindResult, a as RewindResultExtended, S as SessionRewinder } from './session-rewinder-C9HnMkhP.js';
14
- import { e as AttachmentStore, d as AttachmentRef, A as AddAttachmentInput } from './session-reader-B9nVkziM.js';
15
- export { a as Attachment, b as AttachmentKind, c as AttachmentMeta, D as DefaultSessionReader } from './session-reader-B9nVkziM.js';
16
- export { D as DefaultSecretScrubber, a as DefaultSecretVault, S as SecretVaultOptions, d as decryptConfigSecrets, e as encryptConfigSecrets, m as migratePlaintextSecrets, r as rewriteConfigEncrypted } from './secret-scrubber-I0QHY_ob.js';
14
+ import { e as AttachmentStore, d as AttachmentRef, A as AddAttachmentInput } from './session-reader-Dwjn4WZR.js';
15
+ export { a as Attachment, b as AttachmentKind, c as AttachmentMeta, D as DefaultSessionReader } from './session-reader-Dwjn4WZR.js';
16
+ export { D as DEFAULT_CONTEXT_CONFIG, a as DEFAULT_TOOLS_CONFIG } from './default-config-DvRSTELf.js';
17
+ export { D as DefaultSecretScrubber, a as DefaultSecretVault, S as SecretVaultOptions, d as decryptConfigSecrets, e as encryptConfigSecrets, m as migratePlaintextSecrets, r as rewriteConfigEncrypted } from './secret-scrubber-CowtdEF8.js';
17
18
  export { D as DefaultLogger, a as DefaultLoggerOptions } from './logger-BH6AE0W9.js';
18
- export { D as DefaultPathResolver, a as DefaultTokenCounter } from './path-resolver-CBx_q1HA.js';
19
+ export { D as DefaultPathResolver, a as DefaultTokenCounter } from './path-resolver-CfT7e_HT.js';
19
20
  import { b as MemoryStore } from './memory-CEXuo7sz.js';
20
21
  export { M as MemoryEntry, a as MemoryScope } from './memory-CEXuo7sz.js';
21
- export { C as CompactorOptions, D as DEFAULT_RECOVERY_STRATEGIES, a as DefaultErrorHandler, b as DefaultRetryPolicy, H as HybridCompactor, R as RecoveryStrategy, T as ToolExecutor, c as buildRecoveryStrategies } from './tool-executor-BF7QfYVE.js';
22
+ export { C as CompactorOptions, D as DEFAULT_RECOVERY_STRATEGIES, a as DefaultErrorHandler, b as DefaultRetryPolicy, H as HybridCompactor, R as RecoveryStrategy, T as ToolExecutor, c as buildRecoveryStrategies } from './tool-executor-D5NFi_LV.js';
22
23
  import { a as SkillLoader } from './skill-CxuWrsKK.js';
23
24
  export { S as SkillEntry, b as SkillManifest } from './skill-CxuWrsKK.js';
24
25
  export { I as InputReader, P as PromptOption } from './input-reader-E-ffP2ee.js';
25
- import { h as SlashCommand, j as SystemPromptContributor, b as PluginAPI, e as PluginPipelines, T as ToolRegistryView, g as ProviderRegistryView, M as MCPRegistryView, i as SlashCommandRegistryView, E as ExtensionRegistry, S as SessionWriterView, a as MetricsSinkView, o as ToolRegistry, p as ProviderRegistry, P as Plugin } from './index-DcnXDPdY.js';
26
- export { q as AfterIterationHook, r as AfterRunHook, s as AfterToolExecutionHook, A as Agent, t as AgentExtension, u as AgentInit, k as AgentInput, v as AgentPipelines, B as BeforeIterationHook, w as BeforeRunHook, x as BeforeToolExecutionHook, D as DEFAULT_MAX_ITERATIONS, O as OnErrorHook, c as PluginCapabilities, d as PluginDependency, y as ProviderFactory, z as ProviderRunnerWrapper, R as RunResult, C as ToolWrapper, U as UserInputPayload, F as createDefaultPipelines } from './index-DcnXDPdY.js';
26
+ import { h as SlashCommand, j as SystemPromptContributor, b as PluginAPI, e as PluginPipelines, T as ToolRegistryView, g as ProviderRegistryView, M as MCPRegistryView, i as SlashCommandRegistryView, E as ExtensionRegistry, S as SessionWriterView, a as MetricsSinkView, o as ToolRegistry, p as ProviderRegistry, P as Plugin } from './index-BJIFLGII.js';
27
+ export { q as AfterIterationHook, r as AfterRunHook, s as AfterToolExecutionHook, A as Agent, t as AgentExtension, u as AgentInit, k as AgentInput, v as AgentPipelines, B as BeforeIterationHook, w as BeforeRunHook, x as BeforeToolExecutionHook, D as DEFAULT_MAX_ITERATIONS, O as OnErrorHook, c as PluginCapabilities, d as PluginDependency, y as ProviderFactory, z as ProviderRunnerWrapper, R as RunResult, C as ToolWrapper, U as UserInputPayload, F as createDefaultPipelines } from './index-BJIFLGII.js';
27
28
  export { D as DefaultModelsRegistry, a as DefaultModelsRegistryOptions, c as classifyFamily } from './models-registry-DqzwpBQy.js';
28
29
  import { c as ModeStore } from './mode-CV077NjV.js';
29
30
  export { D as DEFAULT_MODES, M as Mode, a as ModeConfig, b as ModeManifest } from './mode-CV077NjV.js';
30
- export { I as InMemoryAgentBridge, a as InMemoryBridgeTransport, c as createMessage } from './agent-bridge-BBXK_ppx.js';
31
- export { n as BudgetExceededError, o as BudgetKind, p as BudgetLimits, q as BudgetUsage, C as CoordinatorEvents, a as CoordinatorStatus, D as DoneCondition, M as MultiAgentConfig, b as MultiAgentCoordinator, S as SpawnResult, r as SubagentBudget, c as SubagentConfig, d as SubagentContext, e as SubagentError, f as SubagentErrorKind, g as SubagentRunContext, h as SubagentRunOutcome, i as SubagentRunner, T as TaskDelegation, j as TaskResult, k as TaskSpec } from './multi-agent-D5IbASk_.js';
31
+ export { I as InMemoryAgentBridge, a as InMemoryBridgeTransport, c as createMessage } from './agent-bridge-CrQpYjM7.js';
32
+ export { n as BudgetExceededError, o as BudgetKind, p as BudgetLimits, q as BudgetUsage, C as CoordinatorEvents, a as CoordinatorStatus, D as DoneCondition, M as MultiAgentConfig, b as MultiAgentCoordinator, S as SpawnResult, r as SubagentBudget, c as SubagentConfig, d as SubagentContext, e as SubagentError, f as SubagentErrorKind, g as SubagentRunContext, h as SubagentRunOutcome, i as SubagentRunner, T as TaskDelegation, j as TaskResult, k as TaskSpec } from './multi-agent-Cm1wYSrw.js';
32
33
  export { C as CriticalPathResult, D as DEFAULT_SPEC_TEMPLATE, S as SpecAnalysis, a as SpecApiEndpoint, b as SpecRequirement, c as SpecSection, d as SpecSectionType, e as SpecStatus, f as SpecTemplate, g as SpecValidationResult, h as Specification, T as TaskAssignment, i as TaskDependency, j as TaskEdge, k as TaskFilter, l as TaskGraph, m as TaskNode, n as TaskPriority, o as TaskProgress, p as TaskSort, q as TaskStatus, r as TaskType, s as computeTaskProgress, t as findCriticalPath, u as topologicalSort } from './task-graph-D1YQbpxF.js';
33
34
  export { A as AggregateHealth, H as HealthCheck, a as HealthCheckResult, b as HealthRegistry, c as HealthStatus, M as MetricLabels, d as MetricSeries, e as MetricsSink, f as MetricsSnapshot, S as Span, T as Tracer } from './observability-BhnVLBLS.js';
34
35
  export { AtomicWriteOptions, BuildChildEnvOptions, CompileFail, CompileResult, MessageRepairReport, MessageRepairResult, NewlineStyle, RequestTokenBreakdown, SafeParseResult, ToolOutputSerializerOptions, UnifiedDiffOptions, ValidationError, ValidationResult, atomicWrite, buildChildEnv, color, compileGlob, compileUserRegex, createToolOutputSerializer, detectNewlineStyle, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, formatTodosList, matchAny, matchGlob, normalizeToLf, repairToolUseAdjacency, safeParse, safeStringify, sanitizeJsonString, stripAnsi, toStyle, unifiedDiff, validateAgainstSchema } from './utils/index.js';
35
36
  export { a as WstackPathOptions, W as WstackPaths, p as projectHash, r as resolveWstackPaths } from './wstack-paths-86YPFktR.js';
36
- export { A as AbandonedSession, a as AttachmentStoreOptions, C as ConfigLoaderOptions, b as ConfigMigration, c as ConfigMigrationError, d as ConfigSource, D as DEFAULT_CONFIG_MIGRATIONS, e as DefaultAttachmentStore, f as DefaultConfigLoader, g as DefaultConfigStore, h as DefaultMemoryStore, i as DefaultSessionStore, M as MemoryStoreOptions, j as MigrationContext, k as MigrationResult, P as PersistedQueueItem, l as PlanFile, m as PlanItem, n as PlanTemplate, Q as QueueStore, R as RecoveryLock, o as RecoveryLockOptions, S as SessionAnalyzer, p as SessionStoreOptions, T as TodosCheckpointFile, q as addPlanItem, r as attachPlanCheckpoint, s as attachTodosCheckpoint, t as clearPlan, u as deriveTodosFromPlanItem, v as emptyPlan, w as formatPlan, x as formatPlanTemplates, y as getPlanTemplate, z as listPlanTemplates, B as loadPlan, E as loadTodosCheckpoint, F as removePlanItem, G as runConfigMigrations, H as savePlan, I as saveTodosCheckpoint, J as setPlanItemStatus } from './plan-templates-BEOllUJV.js';
37
+ export { A as AbandonedSession, a as AttachmentStoreOptions, C as ConfigLoaderOptions, b as ConfigMigration, c as ConfigMigrationError, d as ConfigSource, D as DEFAULT_CONFIG_MIGRATIONS, e as DefaultAttachmentStore, f as DefaultConfigLoader, g as DefaultConfigStore, h as DefaultMemoryStore, i as DefaultSessionStore, M as MemoryStoreOptions, j as MigrationContext, k as MigrationResult, P as PersistedQueueItem, l as PlanFile, m as PlanItem, n as PlanTemplate, Q as QueueStore, R as RecoveryLock, o as RecoveryLockOptions, S as SessionAnalyzer, p as SessionStoreOptions, T as TodosCheckpointFile, q as addPlanItem, r as attachPlanCheckpoint, s as attachTodosCheckpoint, t as clearPlan, u as deriveTodosFromPlanItem, v as emptyPlan, w as formatPlan, x as formatPlanTemplates, y as getPlanTemplate, z as listPlanTemplates, B as loadPlan, E as loadTodosCheckpoint, F as removePlanItem, G as runConfigMigrations, H as savePlan, I as saveTodosCheckpoint, J as setPlanItemStatus } from './plan-templates-Q78an-GJ.js';
37
38
  export { D as DirectorStateCheckpoint, a as DirectorStateSnapshot, b as DirectorSubagentState, c as DirectorTaskState, l as loadDirectorState } from './director-state-BmYi3DGA.js';
38
39
  export { AutoApprovePermissionPolicy, DefaultPermissionPolicy, PermissionPolicyOptions } from './security/index.js';
39
40
  export { AutoCompactionMiddleware, AutonomousRunner, AutonomousRunnerOptions, AutonomyPromptContributorOptions, DefaultSkillLoader, DoneCheckResult, DoneConditionChecker, EternalAutonomyEngine, EternalAutonomyOptions, EternalEngineState, IntelligentCompactor, IntelligentCompactorOptions, ParallelEngineState, ParallelEternalEngine, ParallelEternalOptions, SelectiveCompactor, SelectiveCompactorOptions, SkillLoaderOptions, buildGoalPreamble, makeAutonomyPromptContributor } from './execution/index.js';
40
41
  export { DefaultProviderRunner } from './defaults/index.js';
41
- export { A as ALL_FLEET_AGENTS, a as AUDIT_LOG_AGENT, B as BUG_HUNTER_AGENT, C as CreateDelegateToolOptions, D as DEFAULT_DIRECTOR_PREAMBLE, b as DEFAULT_SUBAGENT_BASELINE, c as DefaultMultiAgentCoordinator, d as DelegateHost, e as Director, f as DirectorPromptParts, g as DirectorSessionFactory, h as DirectorSessionFactoryOptions, F as FLEET_ROSTER, i as FLEET_ROSTER_BUDGETS, j as FleetManager, k as FleetManagerOptions, l as FleetSpawnBudgetError, I as ICoordinator, m as IFleetManager, M as MultiAgentCoordinatorOptions, N as NULL_FLEET_BUS, R as REFACTOR_PLANNER_AGENT, S as SECURITY_SCANNER_AGENT, n as SubagentPromptParts, o as applyRosterBudget, p as composeDirectorPrompt, q as composeSubagentPrompt, r as createDelegateTool, s as makeDirectorSessionFactory, t as rosterSummaryFromConfigs } from './index-CXnWsGBp.js';
42
- export { A as AgentFactory, a as AgentFactoryResult, b as AgentRunnerOptions, F as FleetBus, c as FleetEvent, d as FleetHandler, e as FleetUsage, f as FleetUsageAggregator, S as SubagentUsageSnapshot, m as makeAgentSubagentRunner } from './agent-subagent-runner-DsSm9lKN.js';
42
+ export { A as ALL_FLEET_AGENTS, a as AUDIT_LOG_AGENT, B as BUG_HUNTER_AGENT, C as CreateDelegateToolOptions, D as DEFAULT_DIRECTOR_PREAMBLE, b as DEFAULT_SUBAGENT_BASELINE, c as DelegateHost, d as Director, e as DirectorPromptParts, f as DirectorSessionFactory, g as DirectorSessionFactoryOptions, F as FLEET_ROSTER, h as FLEET_ROSTER_BUDGETS, i as FleetManager, j as FleetManagerOptions, k as FleetSpawnBudgetError, I as ICoordinator, l as IFleetManager, N as NULL_FLEET_BUS, R as REFACTOR_PLANNER_AGENT, S as SECURITY_SCANNER_AGENT, m as SubagentPromptParts, n as applyRosterBudget, o as composeDirectorPrompt, p as composeSubagentPrompt, q as createDelegateTool, r as makeDirectorSessionFactory, s as rosterSummaryFromConfigs } from './index-CZR0HjxM.js';
43
+ export { A as AgentFactory, a as AgentFactoryResult, b as AgentRunnerOptions, D as DefaultMultiAgentCoordinator, F as FleetBus, c as FleetEvent, d as FleetHandler, e as FleetUsage, f as FleetUsageAggregator, M as MultiAgentCoordinatorOptions, S as SubagentUsageSnapshot, m as makeAgentSubagentRunner } from './multi-agent-coordinator-CCupVFqv.js';
43
44
  export { DefaultModeStore, LLMSelector, LLMSelectorOptions, ModeLoaderOptions, loadProjectModes, loadUserModes } from './models/index.js';
44
45
  export { AISpecBuilder, AISpecBuilderOptions, AISpecPhase, AISpecSession, AutoExecutor, AutoExecutorOptions, BottleneckTask, CollectedAnswer, CriticalPathAnalysis, DefaultTaskStore, ExecutionSummary, GeneratedTask, SPEC_TEMPLATES, SpecDiff, SpecDrivenDev, SpecDrivenDevOptions, SpecIndexEntry, SpecParser, SpecStore, SpecStoreOptions, SpecVersion, SpecVersioning, TaskExecutionContext, TaskExecutionResult, TaskFlow, TaskFlowEventMap, TaskFlowEventName, TaskFlowExecutionContext, TaskFlowOptions, TaskFlowPhase, TaskGenerator, TaskGeneratorOptions, TaskGraphIndexEntry, TaskGraphStore, TaskGraphStoreOptions, TaskStore, TaskTracker, TaskTrackerOptions, TaskTransition, analyzeCriticalPath, createAutoExecutor, getTemplate, listTemplates, renderProgress, renderSpecAnalysis, renderTaskGraph, renderTaskList, templateToMarkdown } from './sdd/index.js';
45
46
  export { DefaultHealthRegistry, InMemoryMetricsSink, MetricsServerHandle, MetricsServerOptions, NoopMetricsSink, NoopTracer, OTelTracer, OtlpMetricsExporterHandle, OtlpMetricsExporterOptions, OtlpTraceExporterHandle, OtlpTraceExporterOptions, PROMETHEUS_CONTENT_TYPE, buildOtlpMetricsRequest, buildOtlpTracesRequest, renderPrometheus, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, wireMetricsToEvents } from './observability/index.js';
46
- export { C as ContextManagerAction, a as ContextManagerInput, b as ContextManagerResult, c as ContextManagerToolOptions, d as allServers, e as awsServer, f as blockServer, g as braveSearchServer, h as context7Server, i as contextManagerTool, j as createContextManagerTool, k as everArtServer, l as filesystemServer, m as githubServer, n as googleMapsServer, o as miniMaxVisionServer, s as sentinelServer, p as slackServer, z as zaiVisionServer } from './mcp-servers-CevFHHM1.js';
47
+ export { C as ContextManagerAction, a as ContextManagerInput, b as ContextManagerResult, c as ContextManagerToolOptions, d as allServers, e as awsServer, f as blockServer, g as braveSearchServer, h as context7Server, i as contextManagerTool, j as createContextManagerTool, k as everArtServer, l as filesystemServer, m as githubServer, n as googleMapsServer, o as miniMaxVisionServer, s as sentinelServer, p as slackServer, z as zaiVisionServer } from './mcp-servers-BRJicm5o.js';
47
48
  export { DownloadResult, InstallResult, InstalledSkillEntry, ManifestData, ParsedRef, SkillInstaller, SkillInstallerOptions, SkillManifestStore, UpdateResult, downloadGitHubTarball, parseSkillRef } from './skills/index.js';
48
49
  export { DefaultSessionRewinder, SessionRewinderOptions } from './storage/index.js';
49
50
  export { G as GoalFile, J as JournalEntry, M as MAX_JOURNAL_ENTRIES, a as appendJournal, e as emptyGoal, f as formatGoal, g as goalFilePath, l as loadGoal, s as saveGoal, b as summarizeUsage } from './goal-store-HHgaq5ue.js';
50
- import { R as RetryPolicy, E as ErrorHandler } from './retry-policy-BZSIMxrJ.js';
51
+ import { R as RetryPolicy, E as ErrorHandler } from './retry-policy-Dpxp4SET.js';
51
52
  import { L as Logger } from './logger-BMQgxvdy.js';
52
53
  export { a as LogLevel } from './logger-BMQgxvdy.js';
53
54
  export { a as ModelsDevPayload, c as ModelsDevProvider, M as ModelsRegistry, b as ResolvedModel, R as ResolvedProvider, W as WireFamily } from './models-registry-Y2xbog0E.js';
54
55
  export { S as SecretVault } from './secret-vault-DoISxaKO.js';
55
56
  import './path-resolver-CPRj4bFY.js';
56
- import './selector-DDb_mq9X.js';
57
+ import './selector-CP39HhCe.js';
57
58
  import 'node:events';
58
59
 
59
60
  /**