@wrongstack/core 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{compactor-BUU6Zm_3.d.ts → compactor-DpJBI1YH.d.ts} +7 -1
- package/dist/{config-CKLYPkCi.d.ts → config-D2qvAxVd.d.ts} +38 -1
- package/dist/coordination/index.d.ts +3 -3
- package/dist/coordination/index.js +283 -244
- package/dist/coordination/index.js.map +1 -1
- package/dist/defaults/index.d.ts +7 -7
- package/dist/defaults/index.js +803 -524
- package/dist/defaults/index.js.map +1 -1
- package/dist/{events-CNB9PALO.d.ts → events-BHIQs4o1.d.ts} +7 -0
- package/dist/execution/index.d.ts +10 -7
- package/dist/execution/index.js +166 -18
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +3 -3
- package/dist/extension/index.js +14 -7
- package/dist/extension/index.js.map +1 -1
- package/dist/{index-BDb0cAMP.d.ts → index-hWNybrNZ.d.ts} +3 -5
- package/dist/index.d.ts +12 -12
- package/dist/index.js +629 -299
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +5 -5
- package/dist/infrastructure/index.js +191 -20
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/kernel/index.d.ts +4 -4
- package/dist/kernel/index.js.map +1 -1
- package/dist/{mcp-servers-DR35ojJZ.d.ts → mcp-servers-C2OopXOn.d.ts} +20 -4
- package/dist/observability/index.d.ts +1 -1
- package/dist/{path-resolver-Cl_q0u-R.d.ts → path-resolver--59rCou3.d.ts} +1 -1
- package/dist/{provider-runner-BXuADQqQ.d.ts → provider-runner-B39miKRw.d.ts} +1 -1
- package/dist/sdd/index.d.ts +1 -1
- package/dist/storage/index.d.ts +4 -3
- package/dist/storage/index.js +180 -13
- package/dist/storage/index.js.map +1 -1
- package/dist/{tool-executor-DKu4A6nB.d.ts → tool-executor-HsBLGRaA.d.ts} +2 -2
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.js +206 -9
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +23 -2
- package/dist/utils/index.js +93 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { A as AfterIterationHook, p as AfterRunHook, q as AfterToolExecutionHook, s 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-
|
|
1
|
+
export { A as AfterIterationHook, p as AfterRunHook, q as AfterToolExecutionHook, s 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-hWNybrNZ.js';
|
|
2
2
|
import '../context-IovtuTf8.js';
|
|
3
3
|
import '../logger-BMQgxvdy.js';
|
|
4
4
|
import '../system-prompt-Dk1qm8ey.js';
|
|
5
5
|
import '../observability-BhnVLBLS.js';
|
|
6
|
-
import '../events-
|
|
6
|
+
import '../events-BHIQs4o1.js';
|
|
7
7
|
import '../secret-scrubber-CgG2tV2B.js';
|
|
8
|
-
import '../config-
|
|
8
|
+
import '../config-D2qvAxVd.js';
|
|
9
9
|
import '../models-registry-Y2xbog0E.js';
|
package/dist/extension/index.js
CHANGED
|
@@ -128,7 +128,8 @@ var ExtensionRegistry = class {
|
|
|
128
128
|
}
|
|
129
129
|
// ── Hook runners ─────────────────────────────────────────────────
|
|
130
130
|
async runBeforeRun(...args) {
|
|
131
|
-
|
|
131
|
+
const snapshot = [...this.extensions];
|
|
132
|
+
for (const ext of snapshot) {
|
|
132
133
|
if (!ext.beforeRun) continue;
|
|
133
134
|
try {
|
|
134
135
|
await ext.beforeRun(...args);
|
|
@@ -138,7 +139,8 @@ var ExtensionRegistry = class {
|
|
|
138
139
|
}
|
|
139
140
|
}
|
|
140
141
|
async runAfterRun(...args) {
|
|
141
|
-
|
|
142
|
+
const snapshot = [...this.extensions];
|
|
143
|
+
for (const ext of snapshot) {
|
|
142
144
|
if (!ext.afterRun) continue;
|
|
143
145
|
try {
|
|
144
146
|
await ext.afterRun(...args);
|
|
@@ -148,7 +150,8 @@ var ExtensionRegistry = class {
|
|
|
148
150
|
}
|
|
149
151
|
}
|
|
150
152
|
async runBeforeIteration(...args) {
|
|
151
|
-
|
|
153
|
+
const snapshot = [...this.extensions];
|
|
154
|
+
for (const ext of snapshot) {
|
|
152
155
|
if (!ext.beforeIteration) continue;
|
|
153
156
|
try {
|
|
154
157
|
await ext.beforeIteration(...args);
|
|
@@ -158,7 +161,8 @@ var ExtensionRegistry = class {
|
|
|
158
161
|
}
|
|
159
162
|
}
|
|
160
163
|
async runAfterIteration(...args) {
|
|
161
|
-
|
|
164
|
+
const snapshot = [...this.extensions];
|
|
165
|
+
for (const ext of snapshot) {
|
|
162
166
|
if (!ext.afterIteration) continue;
|
|
163
167
|
try {
|
|
164
168
|
await ext.afterIteration(...args);
|
|
@@ -172,7 +176,8 @@ var ExtensionRegistry = class {
|
|
|
172
176
|
* result wins; subsequent hooks are skipped.
|
|
173
177
|
*/
|
|
174
178
|
async runOnError(...args) {
|
|
175
|
-
|
|
179
|
+
const snapshot = [...this.extensions];
|
|
180
|
+
for (const ext of snapshot) {
|
|
176
181
|
if (!ext.onError) continue;
|
|
177
182
|
try {
|
|
178
183
|
const result = await ext.onError(...args);
|
|
@@ -207,7 +212,8 @@ var ExtensionRegistry = class {
|
|
|
207
212
|
}
|
|
208
213
|
async runBeforeToolExecution(...args) {
|
|
209
214
|
let toolUses = args[1];
|
|
210
|
-
|
|
215
|
+
const snapshot = [...this.extensions];
|
|
216
|
+
for (const ext of snapshot) {
|
|
211
217
|
if (!ext.beforeToolExecution) continue;
|
|
212
218
|
try {
|
|
213
219
|
toolUses = await ext.beforeToolExecution(args[0], toolUses);
|
|
@@ -218,7 +224,8 @@ var ExtensionRegistry = class {
|
|
|
218
224
|
return toolUses;
|
|
219
225
|
}
|
|
220
226
|
async runAfterToolExecution(...args) {
|
|
221
|
-
|
|
227
|
+
const snapshot = [...this.extensions];
|
|
228
|
+
for (const ext of snapshot) {
|
|
222
229
|
if (!ext.afterToolExecution) continue;
|
|
223
230
|
try {
|
|
224
231
|
await ext.afterToolExecution(...args);
|
|
@@ -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 for (const c of this.promptContributors) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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 for (const ext of this.extensions) {\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\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 for (const c of this.promptContributors) {\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"]}
|
|
@@ -2,9 +2,9 @@ import { u as Tool, z as ToolResultBlock, T as TextBlock, a0 as Context, R as Re
|
|
|
2
2
|
import { L as Logger } from './logger-BMQgxvdy.js';
|
|
3
3
|
import { R as Renderer, B as BuildContext, C as Container, P as Pipeline, e as ReadonlyPipeline } from './system-prompt-Dk1qm8ey.js';
|
|
4
4
|
import { T as Tracer } from './observability-BhnVLBLS.js';
|
|
5
|
-
import { E as EventBus, a as EventName, L as Listener } from './events-
|
|
5
|
+
import { E as EventBus, a as EventName, L as Listener } from './events-BHIQs4o1.js';
|
|
6
6
|
import { a as PermissionPolicy, S as SecretScrubber } from './secret-scrubber-CgG2tV2B.js';
|
|
7
|
-
import {
|
|
7
|
+
import { l as ProviderConfig, a as Config } from './config-D2qvAxVd.js';
|
|
8
8
|
import { W as WireFamily } from './models-registry-Y2xbog0E.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -163,9 +163,7 @@ type ToolExecutorStrategy = 'parallel' | 'sequential' | 'smart';
|
|
|
163
163
|
* });
|
|
164
164
|
* ```
|
|
165
165
|
*/
|
|
166
|
-
|
|
167
|
-
(ctx: BuildContext): Promise<TextBlock[]>;
|
|
168
|
-
}
|
|
166
|
+
type SystemPromptContributor = (ctx: BuildContext) => Promise<TextBlock[]>;
|
|
169
167
|
|
|
170
168
|
/**
|
|
171
169
|
* Extension points for the Agent lifecycle.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { S as SystemPromptBuilder, M as ModelCapabilities, B as BuildContext, C as Container } from './system-prompt-Dk1qm8ey.js';
|
|
2
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-Dk1qm8ey.js';
|
|
3
|
-
import { E as EventBus, a as EventName, L as Listener } from './events-
|
|
4
|
-
export { b as EventLogger, c as EventMap } from './events-
|
|
3
|
+
import { E as EventBus, a as EventName, L as Listener } from './events-BHIQs4o1.js';
|
|
4
|
+
export { b as EventLogger, c as EventMap } from './events-BHIQs4o1.js';
|
|
5
5
|
export { RunController, RunControllerOptions, TOKENS } from './kernel/index.js';
|
|
6
6
|
import { b as ContentBlock, T as TextBlock, a0 as Context } from './context-IovtuTf8.js';
|
|
7
7
|
export { A as AgentError, C as Capabilities, a as ConfigError, a3 as ContextInit, a4 as ConversationState, E as ErrorCode, c as ErrorSeverity, d as ErrorSubsystem, I as ImageBlock, J as JSONSchema, M as Message, e as MessageRole, P as Permission, f as PluginError, g as Provider, h as ProviderError, i as ProviderErrorBody, a5 as ReadonlyConversationState, R as Request, j as Response, k as ResumedSession, a6 as RunEnv, a7 as RunOptions, S as SessionData, l as SessionError, m as SessionEvent, n as SessionMetadata, o as SessionStore, p as SessionSummary, q as SessionWriter, a8 as StateChange, a9 as StateChangeHandler, r as StopReason, s as StreamEvent, t as ThinkingBlock, aa as TodoItem, a1 as TokenCounter, u as Tool, v as ToolCallContext, w as ToolError, x as ToolFinalEvent, y as ToolProgressEvent, z as ToolResultBlock, B as ToolStreamEvent, D as ToolUseBlock, U as Usage, W as WrongStackError, F as asBlocks, G as asText, ab as extractRunEnv, H as isAgentError, K as isConfigError, L as isImageBlock, N as isPluginError, O as isSessionError, Q as isTextBlock, V as isThinkingBlock, X as isToolError, Y as isToolResultBlock, Z as isToolUseBlock, _ as isWrongStackError, $ as toWrongStackError, ac as wrapAsState } from './context-IovtuTf8.js';
|
|
8
|
-
export { P as ProviderRunner, R as RunProviderOptions } from './provider-runner-
|
|
9
|
-
import {
|
|
10
|
-
export {
|
|
8
|
+
export { P as ProviderRunner, R as RunProviderOptions } from './provider-runner-B39miKRw.js';
|
|
9
|
+
import { a as Config } from './config-D2qvAxVd.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, M as MCPServerConfig, 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-D2qvAxVd.js';
|
|
11
|
+
export { C as CompactReport, a as Compactor } from './compactor-DpJBI1YH.js';
|
|
11
12
|
export { P as PermissionDecision, a as PermissionPolicy, T as TrustPolicy } from './secret-scrubber-CgG2tV2B.js';
|
|
12
13
|
import { e as AttachmentStore, d as AttachmentRef, A as AddAttachmentInput } from './session-reader-CcPi4BQ8.js';
|
|
13
14
|
export { a as Attachment, b as AttachmentKind, c as AttachmentMeta, D as DefaultSessionReader } from './session-reader-CcPi4BQ8.js';
|
|
14
15
|
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-Cuy5afaQ.js';
|
|
15
16
|
export { D as DefaultLogger, a as DefaultLoggerOptions } from './logger-BH6AE0W9.js';
|
|
16
|
-
export { D as DefaultPathResolver, a as DefaultTokenCounter } from './path-resolver
|
|
17
|
+
export { D as DefaultPathResolver, a as DefaultTokenCounter } from './path-resolver--59rCou3.js';
|
|
17
18
|
import { b as MemoryStore } from './memory-CEXuo7sz.js';
|
|
18
19
|
export { M as MemoryEntry, a as MemoryScope } from './memory-CEXuo7sz.js';
|
|
19
|
-
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-
|
|
20
|
+
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-HsBLGRaA.js';
|
|
20
21
|
import { a as SkillLoader } from './skill-C_7znCIC.js';
|
|
21
22
|
export { S as SkillEntry, b as SkillManifest } from './skill-C_7znCIC.js';
|
|
22
23
|
export { I as InputReader, P as PromptOption } from './input-reader-E-ffP2ee.js';
|
|
23
|
-
import { j as SystemPromptContributor, h as SlashCommand, 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, n as ToolRegistry, o as ProviderRegistry, P as Plugin } from './index-
|
|
24
|
-
export { A as AfterIterationHook, p as AfterRunHook, q as AfterToolExecutionHook, r as Agent, s as AgentExtension, t as AgentInit, u 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-
|
|
24
|
+
import { j as SystemPromptContributor, h as SlashCommand, 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, n as ToolRegistry, o as ProviderRegistry, P as Plugin } from './index-hWNybrNZ.js';
|
|
25
|
+
export { A as AfterIterationHook, p as AfterRunHook, q as AfterToolExecutionHook, r as Agent, s as AgentExtension, t as AgentInit, u 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-hWNybrNZ.js';
|
|
25
26
|
export { D as DefaultModelsRegistry, a as DefaultModelsRegistryOptions, c as classifyFamily } from './models-registry-DqzwpBQy.js';
|
|
26
27
|
import { c as ModeStore } from './mode-CV077NjV.js';
|
|
27
28
|
export { D as DEFAULT_MODES, M as Mode, a as ModeConfig, b as ModeManifest } from './mode-CV077NjV.js';
|
|
@@ -29,7 +30,7 @@ export { I as InMemoryAgentBridge, a as InMemoryBridgeTransport, c as createMess
|
|
|
29
30
|
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-B9a6sflH.js';
|
|
30
31
|
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-BITvWt4t.js';
|
|
31
32
|
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';
|
|
32
|
-
export { AtomicWriteOptions, BuildChildEnvOptions, NewlineStyle, SafeParseResult, ToolOutputSerializerOptions, UnifiedDiffOptions, ValidationError, ValidationResult, atomicWrite, buildChildEnv, color, compileGlob, createToolOutputSerializer, detectNewlineStyle, ensureDir, estimateTextTokens, estimateToolInputTokens, estimateToolResultTokens, formatTodosList, matchAny, matchGlob, normalizeToLf, safeParse, safeStringify, sanitizeJsonString, stripAnsi, toStyle, unifiedDiff, validateAgainstSchema } from './utils/index.js';
|
|
33
|
+
export { AtomicWriteOptions, BuildChildEnvOptions, MessageRepairReport, MessageRepairResult, NewlineStyle, SafeParseResult, ToolOutputSerializerOptions, UnifiedDiffOptions, ValidationError, ValidationResult, atomicWrite, buildChildEnv, color, compileGlob, createToolOutputSerializer, detectNewlineStyle, ensureDir, estimateTextTokens, estimateToolInputTokens, estimateToolResultTokens, formatTodosList, matchAny, matchGlob, normalizeToLf, repairToolUseAdjacency, safeParse, safeStringify, sanitizeJsonString, stripAnsi, toStyle, unifiedDiff, validateAgainstSchema } from './utils/index.js';
|
|
33
34
|
export { W as WstackPathOptions, a as WstackPaths, p as projectHash, r as resolveWstackPaths } from './wstack-paths-BGu2INTm.js';
|
|
34
35
|
export { AbandonedSession, AttachmentStoreOptions, ConfigLoaderOptions, ConfigMigration, ConfigMigrationError, ConfigSource, DEFAULT_CONFIG_MIGRATIONS, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultMemoryStore, DefaultSessionStore, DirectorStateCheckpoint, DirectorStateSnapshot, DirectorSubagentState, DirectorTaskState, MemoryStoreOptions, MigrationContext, MigrationResult, PersistedQueueItem, PlanFile, PlanItem, QueueStore, RecoveryLock, RecoveryLockOptions, SessionAnalyzer, SessionStoreOptions, TodosCheckpointFile, addPlanItem, attachPlanCheckpoint, attachTodosCheckpoint, clearPlan, emptyPlan, formatPlan, loadDirectorState, loadPlan, loadTodosCheckpoint, removePlanItem, runConfigMigrations, savePlan, saveTodosCheckpoint, setPlanItemStatus } from './storage/index.js';
|
|
35
36
|
export { AutoApprovePermissionPolicy, DefaultPermissionPolicy, PermissionPolicyOptions } from './security/index.js';
|
|
@@ -39,12 +40,11 @@ export { ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, AgentFactory, AgentFactoryResult, Ag
|
|
|
39
40
|
export { DefaultModeStore, LLMSelector, LLMSelectorOptions, ModeLoaderOptions, loadProjectModes, loadUserModes } from './models/index.js';
|
|
40
41
|
export { DefaultTaskStore, GeneratedTask, SpecDrivenDev, SpecDrivenDevOptions, SpecParser, TaskFlow, TaskFlowEventMap, TaskFlowEventName, TaskFlowExecutionContext, TaskFlowOptions, TaskFlowPhase, TaskGenerator, TaskGeneratorOptions, TaskStore, TaskTracker, TaskTrackerOptions, TaskTransition } from './sdd/index.js';
|
|
41
42
|
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';
|
|
42
|
-
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, s as sentinelServer,
|
|
43
|
+
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-C2OopXOn.js';
|
|
43
44
|
import { L as Logger } from './logger-BMQgxvdy.js';
|
|
44
45
|
export { a as LogLevel } from './logger-BMQgxvdy.js';
|
|
45
46
|
export { a as ModelsDevPayload, c as ModelsDevProvider, M as ModelsRegistry, b as ResolvedModel, R as ResolvedProvider, W as WireFamily } from './models-registry-Y2xbog0E.js';
|
|
46
47
|
export { S as SecretVault } from './secret-vault-DoISxaKO.js';
|
|
47
|
-
import './compactor-BUU6Zm_3.js';
|
|
48
48
|
import './path-resolver-CPRj4bFY.js';
|
|
49
49
|
import './selector-wT2fv9Fg.js';
|
|
50
50
|
import 'node:events';
|