@amodalai/runtime 0.1.24 → 0.1.26

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 (75) hide show
  1. package/dist/src/__tests__/providers.test.d.ts +6 -0
  2. package/dist/src/__tests__/providers.test.js +209 -0
  3. package/dist/src/__tests__/providers.test.js.map +1 -0
  4. package/dist/src/__tests__/sse-contract.test.d.ts +6 -0
  5. package/dist/src/__tests__/sse-contract.test.js +464 -0
  6. package/dist/src/__tests__/sse-contract.test.js.map +1 -0
  7. package/dist/src/__tests__/tools.test.d.ts +6 -0
  8. package/dist/src/__tests__/tools.test.js +583 -0
  9. package/dist/src/__tests__/tools.test.js.map +1 -0
  10. package/dist/src/agent/agent-types.d.ts +2 -2
  11. package/dist/src/agent/config-watcher.test.js +18 -14
  12. package/dist/src/agent/config-watcher.test.js.map +1 -1
  13. package/dist/src/agent/local-server.js +64 -9
  14. package/dist/src/agent/local-server.js.map +1 -1
  15. package/dist/src/agent/local-server.test.js +17 -13
  16. package/dist/src/agent/local-server.test.js.map +1 -1
  17. package/dist/src/agent/proactive/proactive-runner.js +6 -1
  18. package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
  19. package/dist/src/agent/routes/admin-chat.js +1 -0
  20. package/dist/src/agent/routes/admin-chat.js.map +1 -1
  21. package/dist/src/agent/routes/automations.js +2 -0
  22. package/dist/src/agent/routes/automations.js.map +1 -1
  23. package/dist/src/agent/routes/evals.js +1 -0
  24. package/dist/src/agent/routes/evals.js.map +1 -1
  25. package/dist/src/agent/routes/files.js +3 -0
  26. package/dist/src/agent/routes/files.js.map +1 -1
  27. package/dist/src/agent/routes/inspect.js +4 -1
  28. package/dist/src/agent/routes/inspect.js.map +1 -1
  29. package/dist/src/agent/routes/stores.js +4 -0
  30. package/dist/src/agent/routes/stores.js.map +1 -1
  31. package/dist/src/agent/routes/task.js +1 -0
  32. package/dist/src/agent/routes/task.js.map +1 -1
  33. package/dist/src/agent/routes/webhooks.js +1 -0
  34. package/dist/src/agent/routes/webhooks.js.map +1 -1
  35. package/dist/src/config.d.ts +96 -0
  36. package/dist/src/config.js +221 -0
  37. package/dist/src/config.js.map +1 -0
  38. package/dist/src/config.test.d.ts +6 -0
  39. package/dist/src/config.test.js +235 -0
  40. package/dist/src/config.test.js.map +1 -0
  41. package/dist/src/errors.d.ts +145 -0
  42. package/dist/src/errors.js +218 -0
  43. package/dist/src/errors.js.map +1 -0
  44. package/dist/src/errors.test.d.ts +6 -0
  45. package/dist/src/errors.test.js +203 -0
  46. package/dist/src/errors.test.js.map +1 -0
  47. package/dist/src/index.d.ts +8 -1
  48. package/dist/src/index.js +8 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/logger.d.ts +33 -29
  51. package/dist/src/logger.js +70 -65
  52. package/dist/src/logger.js.map +1 -1
  53. package/dist/src/logger.test.d.ts +6 -0
  54. package/dist/src/logger.test.js +198 -0
  55. package/dist/src/logger.test.js.map +1 -0
  56. package/dist/src/routes/ai-stream.js +4 -1
  57. package/dist/src/routes/ai-stream.js.map +1 -1
  58. package/dist/src/routes/chat-stream.js +3 -1
  59. package/dist/src/routes/chat-stream.js.map +1 -1
  60. package/dist/src/routes/chat.js +1 -0
  61. package/dist/src/routes/chat.js.map +1 -1
  62. package/dist/src/routes/webhooks.js +3 -1
  63. package/dist/src/routes/webhooks.js.map +1 -1
  64. package/dist/src/server.test.js +66 -62
  65. package/dist/src/server.test.js.map +1 -1
  66. package/dist/src/session/session-manager.js +14 -4
  67. package/dist/src/session/session-manager.js.map +1 -1
  68. package/dist/src/session/session-manager.test.js +28 -24
  69. package/dist/src/session/session-manager.test.js.map +1 -1
  70. package/dist/src/session/session-runner.test.js +22 -18
  71. package/dist/src/session/session-runner.test.js.map +1 -1
  72. package/dist/src/stores/pglite-store-backend.js +6 -0
  73. package/dist/src/stores/pglite-store-backend.js.map +1 -1
  74. package/dist/tsconfig.tsbuildinfo +1 -1
  75. package/package.json +3 -2
@@ -0,0 +1,235 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { tmpdir } from 'node:os';
10
+ import { loadConfig } from './config.js';
11
+ import { ConfigError } from './errors.js';
12
+ function makeTempRepo(config) {
13
+ const dir = mkdtempSync(join(tmpdir(), 'amodal-config-test-'));
14
+ writeFileSync(join(dir, 'amodal.json'), JSON.stringify(config));
15
+ return dir;
16
+ }
17
+ const VALID_CONFIG = {
18
+ name: 'test-agent',
19
+ version: '1.0.0',
20
+ description: 'A test agent',
21
+ userContext: 'Always be helpful.',
22
+ models: {
23
+ main: { provider: 'anthropic', model: 'claude-sonnet-4-6' },
24
+ },
25
+ };
26
+ describe('loadConfig', () => {
27
+ let savedEnv;
28
+ beforeEach(() => {
29
+ savedEnv = {
30
+ ANTHROPIC_API_KEY: process.env['ANTHROPIC_API_KEY'],
31
+ LOG_LEVEL: process.env['LOG_LEVEL'],
32
+ };
33
+ process.env['ANTHROPIC_API_KEY'] = 'test-key';
34
+ });
35
+ afterEach(() => {
36
+ for (const [key, val] of Object.entries(savedEnv)) {
37
+ if (val === undefined)
38
+ delete process.env[key];
39
+ else
40
+ process.env[key] = val;
41
+ }
42
+ });
43
+ it('loads a valid config from amodal.json', () => {
44
+ const dir = makeTempRepo(VALID_CONFIG);
45
+ try {
46
+ const config = loadConfig({ repoPath: dir });
47
+ expect(config.name).toBe('test-agent');
48
+ expect(config.version).toBe('1.0.0');
49
+ expect(config.description).toBe('A test agent');
50
+ expect(config.userContext).toBe('Always be helpful.');
51
+ expect(config.primaryModel.provider).toBe('anthropic');
52
+ expect(config.primaryModel.model).toBe('claude-sonnet-4-6');
53
+ expect(config.repoPath).toBe(dir);
54
+ }
55
+ finally {
56
+ rmSync(dir, { recursive: true });
57
+ }
58
+ });
59
+ it('loads from .amodal/config.json if amodal.json missing', () => {
60
+ const dir = mkdtempSync(join(tmpdir(), 'amodal-config-test-'));
61
+ mkdirSync(join(dir, '.amodal'));
62
+ writeFileSync(join(dir, '.amodal', 'config.json'), JSON.stringify(VALID_CONFIG));
63
+ try {
64
+ const config = loadConfig({ repoPath: dir });
65
+ expect(config.name).toBe('test-agent');
66
+ }
67
+ finally {
68
+ rmSync(dir, { recursive: true });
69
+ }
70
+ });
71
+ it('throws ConfigError when no config file found', () => {
72
+ const dir = mkdtempSync(join(tmpdir(), 'amodal-config-test-'));
73
+ try {
74
+ expect(() => loadConfig({ repoPath: dir })).toThrow(ConfigError);
75
+ try {
76
+ loadConfig({ repoPath: dir });
77
+ }
78
+ catch (err) {
79
+ expect(err).toBeInstanceOf(ConfigError);
80
+ const ce = err;
81
+ expect(ce.key).toBe('amodal.json');
82
+ expect(ce.suggestion).toContain('amodal init');
83
+ }
84
+ }
85
+ finally {
86
+ rmSync(dir, { recursive: true });
87
+ }
88
+ });
89
+ it('throws ConfigError when provider API key is missing', () => {
90
+ delete process.env['ANTHROPIC_API_KEY'];
91
+ const dir = makeTempRepo(VALID_CONFIG);
92
+ try {
93
+ expect(() => loadConfig({ repoPath: dir })).toThrow(ConfigError);
94
+ try {
95
+ loadConfig({ repoPath: dir });
96
+ }
97
+ catch (err) {
98
+ const ce = err;
99
+ expect(ce.suggestion).toContain('ANTHROPIC_API_KEY');
100
+ }
101
+ }
102
+ finally {
103
+ rmSync(dir, { recursive: true });
104
+ }
105
+ });
106
+ it('skips provider key check when credentials are explicit', () => {
107
+ delete process.env['ANTHROPIC_API_KEY'];
108
+ const dir = makeTempRepo({
109
+ ...VALID_CONFIG,
110
+ models: {
111
+ main: {
112
+ provider: 'anthropic',
113
+ model: 'claude-sonnet-4-6',
114
+ credentials: { ANTHROPIC_API_KEY: 'inline-key' },
115
+ },
116
+ },
117
+ });
118
+ try {
119
+ const config = loadConfig({ repoPath: dir });
120
+ expect(config.primaryModel.credentials).toEqual({ ANTHROPIC_API_KEY: 'inline-key' });
121
+ }
122
+ finally {
123
+ rmSync(dir, { recursive: true });
124
+ }
125
+ });
126
+ it('applies runtime overrides', () => {
127
+ const dir = makeTempRepo(VALID_CONFIG);
128
+ try {
129
+ const config = loadConfig({
130
+ repoPath: dir,
131
+ overrides: {
132
+ primaryModel: { model: 'claude-opus-4-6' },
133
+ storeBackend: 'postgres',
134
+ postgresUrl: 'postgresql://localhost/test',
135
+ },
136
+ });
137
+ expect(config.primaryModel.model).toBe('claude-opus-4-6');
138
+ expect(config.primaryModel.provider).toBe('anthropic'); // preserved from base
139
+ expect(config.stores.backend).toBe('postgres');
140
+ expect(config.stores.postgresUrl).toBe('postgresql://localhost/test');
141
+ }
142
+ finally {
143
+ rmSync(dir, { recursive: true });
144
+ }
145
+ });
146
+ it('sets default store config', () => {
147
+ const dir = makeTempRepo(VALID_CONFIG);
148
+ try {
149
+ const config = loadConfig({ repoPath: dir });
150
+ expect(config.stores.backend).toBe('pglite');
151
+ expect(config.stores.dataDir).toBe(join(dir, '.amodal', 'store-data'));
152
+ }
153
+ finally {
154
+ rmSync(dir, { recursive: true });
155
+ }
156
+ });
157
+ it('sets default sandbox config', () => {
158
+ const dir = makeTempRepo(VALID_CONFIG);
159
+ try {
160
+ const config = loadConfig({ repoPath: dir });
161
+ expect(config.sandbox.shellExec).toBe(false);
162
+ expect(config.sandbox.maxTimeout).toBe(30000);
163
+ }
164
+ finally {
165
+ rmSync(dir, { recursive: true });
166
+ }
167
+ });
168
+ it('parses MCP server configs', () => {
169
+ const dir = makeTempRepo({
170
+ ...VALID_CONFIG,
171
+ mcp: {
172
+ servers: {
173
+ 'my-server': {
174
+ transport: 'stdio',
175
+ command: 'node',
176
+ args: ['server.js'],
177
+ },
178
+ },
179
+ },
180
+ });
181
+ try {
182
+ const config = loadConfig({ repoPath: dir });
183
+ expect(config.mcpServers['my-server']).toEqual({
184
+ transport: 'stdio',
185
+ command: 'node',
186
+ args: ['server.js'],
187
+ });
188
+ }
189
+ finally {
190
+ rmSync(dir, { recursive: true });
191
+ }
192
+ });
193
+ it('exposes raw config for backwards compatibility', () => {
194
+ const dir = makeTempRepo(VALID_CONFIG);
195
+ try {
196
+ const config = loadConfig({ repoPath: dir });
197
+ expect(config.raw.name).toBe('test-agent');
198
+ }
199
+ finally {
200
+ rmSync(dir, { recursive: true });
201
+ }
202
+ });
203
+ it('respects LOG_LEVEL env var', () => {
204
+ process.env['LOG_LEVEL'] = 'debug';
205
+ const dir = makeTempRepo(VALID_CONFIG);
206
+ try {
207
+ const config = loadConfig({ repoPath: dir });
208
+ expect(config.logLevel).toBe(1); // LogLevel.DEBUG
209
+ }
210
+ finally {
211
+ delete process.env['LOG_LEVEL'];
212
+ rmSync(dir, { recursive: true });
213
+ }
214
+ });
215
+ it('throws on invalid JSON', () => {
216
+ const dir = mkdtempSync(join(tmpdir(), 'amodal-config-test-'));
217
+ writeFileSync(join(dir, 'amodal.json'), 'not json{{{');
218
+ try {
219
+ expect(() => loadConfig({ repoPath: dir })).toThrow(ConfigError);
220
+ }
221
+ finally {
222
+ rmSync(dir, { recursive: true });
223
+ }
224
+ });
225
+ it('throws on missing required fields', () => {
226
+ const dir = makeTempRepo({ name: 'test' }); // missing version, models
227
+ try {
228
+ expect(() => loadConfig({ repoPath: dir })).toThrow(ConfigError);
229
+ }
230
+ finally {
231
+ rmSync(dir, { recursive: true });
232
+ }
233
+ });
234
+ });
235
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ /**
7
+ * A discriminated result type for operations that can fail.
8
+ * Forces callers to handle both success and error cases.
9
+ */
10
+ export type Result<T, E = Error> = {
11
+ ok: true;
12
+ value: T;
13
+ } | {
14
+ ok: false;
15
+ error: E;
16
+ };
17
+ /**
18
+ * Base error class for all Amodal runtime errors.
19
+ *
20
+ * Every error carries:
21
+ * - `code` — a unique, stable string for programmatic matching
22
+ * - `context` — structured data about what was happening when the error occurred
23
+ * - `cause` — the underlying error (standard Error.cause)
24
+ */
25
+ export declare class AmodalError extends Error {
26
+ readonly code: string;
27
+ readonly context: Record<string, unknown>;
28
+ constructor(code: string, message: string, context?: Record<string, unknown>, cause?: unknown);
29
+ /**
30
+ * Serialize to a structured object suitable for logging or JSON responses.
31
+ */
32
+ toJSON(): Record<string, unknown>;
33
+ }
34
+ /**
35
+ * Error from an LLM provider call (Anthropic, OpenAI, Google, etc.).
36
+ */
37
+ export declare class ProviderError extends AmodalError {
38
+ readonly provider: string;
39
+ readonly statusCode?: number;
40
+ readonly retryable: boolean;
41
+ constructor(message: string, options: {
42
+ provider: string;
43
+ statusCode?: number;
44
+ retryable?: boolean;
45
+ cause?: unknown;
46
+ context?: Record<string, unknown>;
47
+ });
48
+ }
49
+ /**
50
+ * Thrown on 429 rate limit responses.
51
+ */
52
+ export declare class RateLimitError extends ProviderError {
53
+ readonly retryAfterMs?: number;
54
+ constructor(message: string, options: {
55
+ provider: string;
56
+ retryAfterMs?: number;
57
+ cause?: unknown;
58
+ });
59
+ }
60
+ /**
61
+ * Thrown when a provider request times out.
62
+ */
63
+ export declare class ProviderTimeoutError extends ProviderError {
64
+ constructor(message: string, options: {
65
+ provider: string;
66
+ cause?: unknown;
67
+ });
68
+ }
69
+ /**
70
+ * Error during tool execution (custom tools, store tools, request tool, etc.).
71
+ */
72
+ export declare class ToolExecutionError extends AmodalError {
73
+ readonly toolName: string;
74
+ readonly callId: string;
75
+ constructor(message: string, options: {
76
+ toolName: string;
77
+ callId: string;
78
+ cause?: unknown;
79
+ context?: Record<string, unknown>;
80
+ });
81
+ }
82
+ /**
83
+ * Error from a store backend operation (PGLite, Postgres, etc.).
84
+ */
85
+ export declare class StoreError extends AmodalError {
86
+ readonly store: string;
87
+ readonly operation: string;
88
+ constructor(message: string, options: {
89
+ store: string;
90
+ operation: string;
91
+ cause?: unknown;
92
+ context?: Record<string, unknown>;
93
+ });
94
+ }
95
+ /**
96
+ * Error from a connection request (REST API calls, MCP, etc.).
97
+ */
98
+ export declare class ConnectionError extends AmodalError {
99
+ readonly connection: string;
100
+ readonly action: string;
101
+ constructor(message: string, options: {
102
+ connection: string;
103
+ action: string;
104
+ cause?: unknown;
105
+ context?: Record<string, unknown>;
106
+ });
107
+ }
108
+ /**
109
+ * Error in session lifecycle (creation, destroy, state transitions).
110
+ */
111
+ export declare class SessionError extends AmodalError {
112
+ readonly sessionId: string;
113
+ constructor(message: string, options: {
114
+ sessionId: string;
115
+ cause?: unknown;
116
+ context?: Record<string, unknown>;
117
+ });
118
+ }
119
+ /**
120
+ * Error during context compaction (summarization, truncation).
121
+ */
122
+ export declare class CompactionError extends AmodalError {
123
+ readonly stage: string;
124
+ constructor(message: string, options: {
125
+ stage: string;
126
+ cause?: unknown;
127
+ context?: Record<string, unknown>;
128
+ });
129
+ }
130
+ /**
131
+ * Error in configuration loading or validation.
132
+ * Includes a `suggestion` field with actionable fix instructions.
133
+ */
134
+ export declare class ConfigError extends AmodalError {
135
+ readonly key: string;
136
+ readonly suggestion: string;
137
+ constructor(message: string, options: {
138
+ key: string;
139
+ suggestion?: string;
140
+ cause?: unknown;
141
+ context?: Record<string, unknown>;
142
+ });
143
+ /** Format as a multi-line error message for CLI output. */
144
+ format(): string;
145
+ }
@@ -0,0 +1,218 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ // ---------------------------------------------------------------------------
7
+ // Base error
8
+ // ---------------------------------------------------------------------------
9
+ /**
10
+ * Base error class for all Amodal runtime errors.
11
+ *
12
+ * Every error carries:
13
+ * - `code` — a unique, stable string for programmatic matching
14
+ * - `context` — structured data about what was happening when the error occurred
15
+ * - `cause` — the underlying error (standard Error.cause)
16
+ */
17
+ export class AmodalError extends Error {
18
+ code;
19
+ context;
20
+ constructor(code, message, context = {}, cause) {
21
+ super(message, { cause });
22
+ this.name = 'AmodalError';
23
+ this.code = code;
24
+ this.context = context;
25
+ }
26
+ /**
27
+ * Serialize to a structured object suitable for logging or JSON responses.
28
+ */
29
+ toJSON() {
30
+ return {
31
+ name: this.name,
32
+ code: this.code,
33
+ message: this.message,
34
+ context: this.context,
35
+ ...(this.cause instanceof Error
36
+ ? { cause: { name: this.cause.name, message: this.cause.message } }
37
+ : this.cause !== undefined
38
+ ? { cause: String(this.cause) }
39
+ : {}),
40
+ };
41
+ }
42
+ }
43
+ // ---------------------------------------------------------------------------
44
+ // Provider errors
45
+ // ---------------------------------------------------------------------------
46
+ /**
47
+ * Error from an LLM provider call (Anthropic, OpenAI, Google, etc.).
48
+ */
49
+ export class ProviderError extends AmodalError {
50
+ provider;
51
+ statusCode;
52
+ retryable;
53
+ constructor(message, options) {
54
+ super('PROVIDER_ERROR', message, {
55
+ provider: options.provider,
56
+ statusCode: options.statusCode,
57
+ ...options.context,
58
+ }, options.cause);
59
+ this.name = 'ProviderError';
60
+ this.provider = options.provider;
61
+ this.statusCode = options.statusCode;
62
+ this.retryable = options.retryable ?? false;
63
+ }
64
+ }
65
+ /**
66
+ * Thrown on 429 rate limit responses.
67
+ */
68
+ export class RateLimitError extends ProviderError {
69
+ retryAfterMs;
70
+ constructor(message, options) {
71
+ super(message, {
72
+ provider: options.provider,
73
+ statusCode: 429,
74
+ retryable: true,
75
+ cause: options.cause,
76
+ context: { retryAfterMs: options.retryAfterMs },
77
+ });
78
+ this.name = 'RateLimitError';
79
+ this.retryAfterMs = options.retryAfterMs;
80
+ }
81
+ }
82
+ /**
83
+ * Thrown when a provider request times out.
84
+ */
85
+ export class ProviderTimeoutError extends ProviderError {
86
+ constructor(message, options) {
87
+ super(message, {
88
+ provider: options.provider,
89
+ retryable: true,
90
+ cause: options.cause,
91
+ });
92
+ this.name = 'ProviderTimeoutError';
93
+ }
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Tool errors
97
+ // ---------------------------------------------------------------------------
98
+ /**
99
+ * Error during tool execution (custom tools, store tools, request tool, etc.).
100
+ */
101
+ export class ToolExecutionError extends AmodalError {
102
+ toolName;
103
+ callId;
104
+ constructor(message, options) {
105
+ super('TOOL_EXECUTION_ERROR', message, {
106
+ toolName: options.toolName,
107
+ callId: options.callId,
108
+ ...options.context,
109
+ }, options.cause);
110
+ this.name = 'ToolExecutionError';
111
+ this.toolName = options.toolName;
112
+ this.callId = options.callId;
113
+ }
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Store errors
117
+ // ---------------------------------------------------------------------------
118
+ /**
119
+ * Error from a store backend operation (PGLite, Postgres, etc.).
120
+ */
121
+ export class StoreError extends AmodalError {
122
+ store;
123
+ operation;
124
+ constructor(message, options) {
125
+ super('STORE_ERROR', message, {
126
+ store: options.store,
127
+ operation: options.operation,
128
+ ...options.context,
129
+ }, options.cause);
130
+ this.name = 'StoreError';
131
+ this.store = options.store;
132
+ this.operation = options.operation;
133
+ }
134
+ }
135
+ // ---------------------------------------------------------------------------
136
+ // Connection errors
137
+ // ---------------------------------------------------------------------------
138
+ /**
139
+ * Error from a connection request (REST API calls, MCP, etc.).
140
+ */
141
+ export class ConnectionError extends AmodalError {
142
+ connection;
143
+ action;
144
+ constructor(message, options) {
145
+ super('CONNECTION_ERROR', message, {
146
+ connection: options.connection,
147
+ action: options.action,
148
+ ...options.context,
149
+ }, options.cause);
150
+ this.name = 'ConnectionError';
151
+ this.connection = options.connection;
152
+ this.action = options.action;
153
+ }
154
+ }
155
+ // ---------------------------------------------------------------------------
156
+ // Session errors
157
+ // ---------------------------------------------------------------------------
158
+ /**
159
+ * Error in session lifecycle (creation, destroy, state transitions).
160
+ */
161
+ export class SessionError extends AmodalError {
162
+ sessionId;
163
+ constructor(message, options) {
164
+ super('SESSION_ERROR', message, {
165
+ sessionId: options.sessionId,
166
+ ...options.context,
167
+ }, options.cause);
168
+ this.name = 'SessionError';
169
+ this.sessionId = options.sessionId;
170
+ }
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // Compaction errors
174
+ // ---------------------------------------------------------------------------
175
+ /**
176
+ * Error during context compaction (summarization, truncation).
177
+ */
178
+ export class CompactionError extends AmodalError {
179
+ stage;
180
+ constructor(message, options) {
181
+ super('COMPACTION_ERROR', message, {
182
+ stage: options.stage,
183
+ ...options.context,
184
+ }, options.cause);
185
+ this.name = 'CompactionError';
186
+ this.stage = options.stage;
187
+ }
188
+ }
189
+ // ---------------------------------------------------------------------------
190
+ // Config errors
191
+ // ---------------------------------------------------------------------------
192
+ /**
193
+ * Error in configuration loading or validation.
194
+ * Includes a `suggestion` field with actionable fix instructions.
195
+ */
196
+ export class ConfigError extends AmodalError {
197
+ key;
198
+ suggestion;
199
+ constructor(message, options) {
200
+ super('CONFIG_ERROR', message, {
201
+ key: options.key,
202
+ ...options.context,
203
+ }, options.cause);
204
+ this.name = 'ConfigError';
205
+ this.key = options.key;
206
+ this.suggestion = options.suggestion ?? '';
207
+ }
208
+ /** Format as a multi-line error message for CLI output. */
209
+ format() {
210
+ const lines = [`Config error: ${this.message}`];
211
+ if (this.key)
212
+ lines.push(` Key: ${this.key}`);
213
+ if (this.suggestion)
214
+ lines.push(` Fix: ${this.suggestion}`);
215
+ return lines.join('\n');
216
+ }
217
+ }
218
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Amodal Labs, Inc.
4
+ * SPDX-License-Identifier: MIT
5
+ */
6
+ export {};