attocode 0.1.3 → 0.1.4
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/CHANGELOG.md +19 -1
- package/README.md +56 -0
- package/dist/src/agent.d.ts +5 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +201 -15
- package/dist/src/agent.js.map +1 -1
- package/dist/src/analysis/feedback-loop.d.ts +115 -0
- package/dist/src/analysis/feedback-loop.d.ts.map +1 -0
- package/dist/src/analysis/feedback-loop.js +226 -0
- package/dist/src/analysis/feedback-loop.js.map +1 -0
- package/dist/src/analysis/index.d.ts +9 -0
- package/dist/src/analysis/index.d.ts.map +1 -0
- package/dist/src/analysis/index.js +9 -0
- package/dist/src/analysis/index.js.map +1 -0
- package/dist/src/analysis/prompt-templates.d.ts +36 -0
- package/dist/src/analysis/prompt-templates.d.ts.map +1 -0
- package/dist/src/analysis/prompt-templates.js +198 -0
- package/dist/src/analysis/prompt-templates.js.map +1 -0
- package/dist/src/analysis/trace-summary.d.ts +56 -0
- package/dist/src/analysis/trace-summary.d.ts.map +1 -0
- package/dist/src/analysis/trace-summary.js +261 -0
- package/dist/src/analysis/trace-summary.js.map +1 -0
- package/dist/src/commands/handler.d.ts.map +1 -1
- package/dist/src/commands/handler.js +194 -2
- package/dist/src/commands/handler.js.map +1 -1
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/defaults.d.ts +11 -2
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +25 -2
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/errors/index.d.ts +233 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +427 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/integrations/auto-compaction.d.ts +33 -0
- package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
- package/dist/src/integrations/auto-compaction.js +47 -3
- package/dist/src/integrations/auto-compaction.js.map +1 -1
- package/dist/src/integrations/dead-letter-queue.d.ts +208 -0
- package/dist/src/integrations/dead-letter-queue.d.ts.map +1 -0
- package/dist/src/integrations/dead-letter-queue.js +458 -0
- package/dist/src/integrations/dead-letter-queue.js.map +1 -0
- package/dist/src/integrations/health-check.d.ts +218 -0
- package/dist/src/integrations/health-check.d.ts.map +1 -0
- package/dist/src/integrations/health-check.js +400 -0
- package/dist/src/integrations/health-check.js.map +1 -0
- package/dist/src/integrations/index.d.ts +5 -0
- package/dist/src/integrations/index.d.ts.map +1 -1
- package/dist/src/integrations/index.js +9 -0
- package/dist/src/integrations/index.js.map +1 -1
- package/dist/src/integrations/mcp-client.d.ts +9 -0
- package/dist/src/integrations/mcp-client.d.ts.map +1 -1
- package/dist/src/integrations/mcp-client.js +49 -7
- package/dist/src/integrations/mcp-client.js.map +1 -1
- package/dist/src/integrations/openrouter-pricing.d.ts +28 -3
- package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -1
- package/dist/src/integrations/openrouter-pricing.js +57 -16
- package/dist/src/integrations/openrouter-pricing.js.map +1 -1
- package/dist/src/integrations/retry.d.ts +131 -0
- package/dist/src/integrations/retry.d.ts.map +1 -0
- package/dist/src/integrations/retry.js +233 -0
- package/dist/src/integrations/retry.js.map +1 -0
- package/dist/src/integrations/sqlite-store.d.ts +42 -0
- package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
- package/dist/src/integrations/sqlite-store.js +111 -0
- package/dist/src/integrations/sqlite-store.js.map +1 -1
- package/dist/src/main.js +88 -7
- package/dist/src/main.js.map +1 -1
- package/dist/src/modes/repl.d.ts.map +1 -1
- package/dist/src/modes/repl.js +37 -1
- package/dist/src/modes/repl.js.map +1 -1
- package/dist/src/modes/tui.d.ts.map +1 -1
- package/dist/src/modes/tui.js +46 -5
- package/dist/src/modes/tui.js.map +1 -1
- package/dist/src/modes.d.ts.map +1 -1
- package/dist/src/modes.js +10 -3
- package/dist/src/modes.js.map +1 -1
- package/dist/src/persistence/schema.d.ts +4 -0
- package/dist/src/persistence/schema.d.ts.map +1 -1
- package/dist/src/persistence/schema.js +49 -0
- package/dist/src/persistence/schema.js.map +1 -1
- package/dist/src/providers/adapters/anthropic.d.ts +24 -2
- package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
- package/dist/src/providers/adapters/anthropic.js +184 -0
- package/dist/src/providers/adapters/anthropic.js.map +1 -1
- package/dist/src/tools/bash.d.ts.map +1 -1
- package/dist/src/tools/bash.js +7 -4
- package/dist/src/tools/bash.js.map +1 -1
- package/dist/src/tools/file.d.ts.map +1 -1
- package/dist/src/tools/file.js +31 -10
- package/dist/src/tools/file.js.map +1 -1
- package/dist/src/tools/permission.d.ts +12 -0
- package/dist/src/tools/permission.d.ts.map +1 -1
- package/dist/src/tools/permission.js +136 -0
- package/dist/src/tools/permission.js.map +1 -1
- package/dist/src/tools/registry.d.ts +23 -1
- package/dist/src/tools/registry.d.ts.map +1 -1
- package/dist/src/tools/registry.js +77 -17
- package/dist/src/tools/registry.js.map +1 -1
- package/dist/src/tools/standard.d.ts.map +1 -1
- package/dist/src/tools/standard.js +8 -0
- package/dist/src/tools/standard.js.map +1 -1
- package/dist/src/tools/types.d.ts +20 -1
- package/dist/src/tools/types.d.ts.map +1 -1
- package/dist/src/tools/types.js.map +1 -1
- package/dist/src/tracing/trace-collector.d.ts +198 -2
- package/dist/src/tracing/trace-collector.d.ts.map +1 -1
- package/dist/src/tracing/trace-collector.js +315 -3
- package/dist/src/tracing/trace-collector.js.map +1 -1
- package/dist/src/tracing/types.d.ts +470 -2
- package/dist/src/tracing/types.d.ts.map +1 -1
- package/dist/src/tracing/types.js +25 -0
- package/dist/src/tracing/types.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +161 -4
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/types.d.ts +35 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +6 -3
- package/dist/src/hello.d.ts +0 -2
- package/dist/src/hello.d.ts.map +0 -1
- package/dist/src/hello.js +0 -4
- package/dist/src/hello.js.map +0 -1
- package/dist/src/test-sqlite.d.ts +0 -2
- package/dist/src/test-sqlite.d.ts.map +0 -1
- package/dist/src/test-sqlite.js +0 -114
- package/dist/src/test-sqlite.js.map +0 -1
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Retry Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides configurable retry logic with exponential backoff for transient failures.
|
|
5
|
+
* Used by tools, MCP client, and other operations that may encounter temporary errors.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const result = await withRetry(
|
|
10
|
+
* () => fetchData(),
|
|
11
|
+
* {
|
|
12
|
+
* maxAttempts: 3,
|
|
13
|
+
* baseDelayMs: 1000,
|
|
14
|
+
* retryableErrors: ['ETIMEDOUT', 'ECONNRESET'],
|
|
15
|
+
* }
|
|
16
|
+
* );
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Default retryable error patterns.
|
|
21
|
+
* These are common transient errors that often resolve on retry.
|
|
22
|
+
*/
|
|
23
|
+
export const DEFAULT_RETRYABLE_ERRORS = [
|
|
24
|
+
'ETIMEDOUT',
|
|
25
|
+
'ECONNRESET',
|
|
26
|
+
'ECONNREFUSED',
|
|
27
|
+
'ENOTFOUND',
|
|
28
|
+
'EPIPE',
|
|
29
|
+
'EBUSY',
|
|
30
|
+
'timeout',
|
|
31
|
+
'socket hang up',
|
|
32
|
+
'network error',
|
|
33
|
+
'temporarily unavailable',
|
|
34
|
+
'service unavailable',
|
|
35
|
+
'rate limit',
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* Default retryable error codes.
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_RETRYABLE_CODES = [
|
|
41
|
+
'ETIMEDOUT',
|
|
42
|
+
'ECONNRESET',
|
|
43
|
+
'ECONNREFUSED',
|
|
44
|
+
'ENOTFOUND',
|
|
45
|
+
'EPIPE',
|
|
46
|
+
'EBUSY',
|
|
47
|
+
'EAGAIN',
|
|
48
|
+
'ENETUNREACH',
|
|
49
|
+
'EHOSTUNREACH',
|
|
50
|
+
];
|
|
51
|
+
// =============================================================================
|
|
52
|
+
// RETRY IMPLEMENTATION
|
|
53
|
+
// =============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* Execute a function with retry logic.
|
|
56
|
+
*
|
|
57
|
+
* @param fn - The async function to execute
|
|
58
|
+
* @param config - Retry configuration
|
|
59
|
+
* @returns Promise resolving to the result or throwing the last error
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* // Basic usage with defaults
|
|
64
|
+
* const data = await withRetry(() => fetchData(), { maxAttempts: 3 });
|
|
65
|
+
*
|
|
66
|
+
* // With custom config
|
|
67
|
+
* const data = await withRetry(
|
|
68
|
+
* () => unreliableApi(),
|
|
69
|
+
* {
|
|
70
|
+
* maxAttempts: 5,
|
|
71
|
+
* baseDelayMs: 500,
|
|
72
|
+
* backoffMultiplier: 1.5,
|
|
73
|
+
* retryableErrors: ['timeout'],
|
|
74
|
+
* onRetry: (attempt, err) => console.log(`Retry ${attempt}: ${err.message}`),
|
|
75
|
+
* }
|
|
76
|
+
* );
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export async function withRetry(fn, config) {
|
|
80
|
+
const { maxAttempts, baseDelayMs = 1000, maxDelayMs = 30000, backoffMultiplier = 2, jitter = true, retryableErrors = DEFAULT_RETRYABLE_ERRORS, retryableCodes = DEFAULT_RETRYABLE_CODES, isRetryable, onRetry, onExhausted, } = config;
|
|
81
|
+
let lastError;
|
|
82
|
+
let attempt = 0;
|
|
83
|
+
while (attempt < maxAttempts) {
|
|
84
|
+
attempt++;
|
|
85
|
+
try {
|
|
86
|
+
return await fn();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
lastError = error;
|
|
90
|
+
// Check if this is the last attempt
|
|
91
|
+
if (attempt >= maxAttempts) {
|
|
92
|
+
onExhausted?.(attempt, lastError);
|
|
93
|
+
throw lastError;
|
|
94
|
+
}
|
|
95
|
+
// Check if error is retryable
|
|
96
|
+
if (!shouldRetry(lastError, retryableErrors, retryableCodes, isRetryable)) {
|
|
97
|
+
throw lastError;
|
|
98
|
+
}
|
|
99
|
+
// Calculate delay with exponential backoff
|
|
100
|
+
let delay = Math.min(baseDelayMs * Math.pow(backoffMultiplier, attempt - 1), maxDelayMs);
|
|
101
|
+
// Add jitter (±25%)
|
|
102
|
+
if (jitter) {
|
|
103
|
+
const jitterAmount = delay * 0.25;
|
|
104
|
+
delay += (Math.random() - 0.5) * 2 * jitterAmount;
|
|
105
|
+
delay = Math.max(0, delay);
|
|
106
|
+
}
|
|
107
|
+
onRetry?.(attempt, lastError, delay);
|
|
108
|
+
// Wait before retry
|
|
109
|
+
await sleep(delay);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Should never reach here, but TypeScript needs this
|
|
113
|
+
throw lastError ?? new Error('Retry failed');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute a function with retry and return detailed result.
|
|
117
|
+
*
|
|
118
|
+
* Unlike withRetry, this never throws - it returns a result object
|
|
119
|
+
* that indicates success or failure.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const result = await withRetryResult(() => unreliableOp(), { maxAttempts: 3 });
|
|
124
|
+
* if (result.success) {
|
|
125
|
+
* console.log('Got:', result.value);
|
|
126
|
+
* } else {
|
|
127
|
+
* console.log('Failed after', result.attempts, 'attempts:', result.error);
|
|
128
|
+
* }
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export async function withRetryResult(fn, config) {
|
|
132
|
+
const startTime = Date.now();
|
|
133
|
+
let attempts = 0;
|
|
134
|
+
try {
|
|
135
|
+
const result = await withRetry(async () => {
|
|
136
|
+
attempts++;
|
|
137
|
+
return await fn();
|
|
138
|
+
}, config);
|
|
139
|
+
return {
|
|
140
|
+
success: true,
|
|
141
|
+
value: result,
|
|
142
|
+
attempts,
|
|
143
|
+
totalTimeMs: Date.now() - startTime,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: error,
|
|
150
|
+
attempts,
|
|
151
|
+
totalTimeMs: Date.now() - startTime,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// =============================================================================
|
|
156
|
+
// HELPERS
|
|
157
|
+
// =============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Determine if an error should trigger a retry.
|
|
160
|
+
*/
|
|
161
|
+
function shouldRetry(error, retryableErrors, retryableCodes, customIsRetryable) {
|
|
162
|
+
// Custom check takes precedence
|
|
163
|
+
if (customIsRetryable) {
|
|
164
|
+
return customIsRetryable(error);
|
|
165
|
+
}
|
|
166
|
+
// Check error code
|
|
167
|
+
const code = error.code;
|
|
168
|
+
if (code && retryableCodes.includes(code)) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
// Check error message patterns
|
|
172
|
+
const message = error.message.toLowerCase();
|
|
173
|
+
for (const pattern of retryableErrors) {
|
|
174
|
+
if (message.includes(pattern.toLowerCase())) {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Sleep for a specified duration.
|
|
182
|
+
*/
|
|
183
|
+
function sleep(ms) {
|
|
184
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
185
|
+
}
|
|
186
|
+
// =============================================================================
|
|
187
|
+
// SPECIALIZED RETRY CONFIGS
|
|
188
|
+
// =============================================================================
|
|
189
|
+
/**
|
|
190
|
+
* Retry config for tool execution.
|
|
191
|
+
* Conservative: 2 attempts, short delays.
|
|
192
|
+
*/
|
|
193
|
+
export const TOOL_RETRY_CONFIG = {
|
|
194
|
+
baseDelayMs: 500,
|
|
195
|
+
maxDelayMs: 5000,
|
|
196
|
+
backoffMultiplier: 2,
|
|
197
|
+
retryableCodes: ['ETIMEDOUT', 'ECONNRESET', 'EBUSY', 'EAGAIN'],
|
|
198
|
+
retryableErrors: ['timeout', 'temporarily unavailable'],
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Retry config for MCP calls.
|
|
202
|
+
* More aggressive: 3 attempts, longer delays.
|
|
203
|
+
*/
|
|
204
|
+
export const MCP_RETRY_CONFIG = {
|
|
205
|
+
baseDelayMs: 1000,
|
|
206
|
+
maxDelayMs: 10000,
|
|
207
|
+
backoffMultiplier: 2,
|
|
208
|
+
retryableCodes: DEFAULT_RETRYABLE_CODES,
|
|
209
|
+
retryableErrors: ['timeout', 'socket hang up', 'connection reset'],
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
* Retry config for file operations.
|
|
213
|
+
* Short delays, handles busy files.
|
|
214
|
+
*/
|
|
215
|
+
export const FILE_RETRY_CONFIG = {
|
|
216
|
+
baseDelayMs: 100,
|
|
217
|
+
maxDelayMs: 2000,
|
|
218
|
+
backoffMultiplier: 2,
|
|
219
|
+
retryableCodes: ['EBUSY', 'EAGAIN', 'EMFILE', 'ENFILE'],
|
|
220
|
+
retryableErrors: ['resource busy', 'too many open files'],
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Retry config for network operations.
|
|
224
|
+
* Standard exponential backoff.
|
|
225
|
+
*/
|
|
226
|
+
export const NETWORK_RETRY_CONFIG = {
|
|
227
|
+
baseDelayMs: 1000,
|
|
228
|
+
maxDelayMs: 30000,
|
|
229
|
+
backoffMultiplier: 2,
|
|
230
|
+
retryableCodes: DEFAULT_RETRYABLE_CODES,
|
|
231
|
+
retryableErrors: DEFAULT_RETRYABLE_ERRORS,
|
|
232
|
+
};
|
|
233
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/integrations/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* await store.appendMessage({ role: 'user', content: 'Hello' });
|
|
12
12
|
* ```
|
|
13
13
|
*/
|
|
14
|
+
import Database from 'better-sqlite3';
|
|
14
15
|
import type { Message, ToolCall } from '../types.js';
|
|
15
16
|
import type { SessionEntry, SessionEventListener, SessionStoreConfig } from './session-store.js';
|
|
16
17
|
import type { PendingPlan } from './pending-plan.js';
|
|
@@ -303,6 +304,11 @@ export declare class SQLiteStore {
|
|
|
303
304
|
checkpointCount: number;
|
|
304
305
|
dbSizeBytes: number;
|
|
305
306
|
};
|
|
307
|
+
/**
|
|
308
|
+
* Get the underlying database instance.
|
|
309
|
+
* Useful for integrations that need direct database access (e.g., DeadLetterQueue).
|
|
310
|
+
*/
|
|
311
|
+
getDatabase(): Database.Database;
|
|
306
312
|
/**
|
|
307
313
|
* Log API usage for cost tracking.
|
|
308
314
|
* Inserts a usage log entry and updates session totals atomically.
|
|
@@ -490,6 +496,42 @@ export declare class SQLiteStore {
|
|
|
490
496
|
migrated: number;
|
|
491
497
|
failed: number;
|
|
492
498
|
}>;
|
|
499
|
+
/**
|
|
500
|
+
* Check if remembered permissions feature is available.
|
|
501
|
+
*/
|
|
502
|
+
hasRememberedPermissionsFeature(): boolean;
|
|
503
|
+
/**
|
|
504
|
+
* Remember a permission decision.
|
|
505
|
+
* @param toolName - The tool name (e.g., 'bash')
|
|
506
|
+
* @param decision - 'always' or 'never'
|
|
507
|
+
* @param pattern - Optional command pattern (for bash commands)
|
|
508
|
+
*/
|
|
509
|
+
rememberPermission(toolName: string, decision: 'always' | 'never', pattern?: string): void;
|
|
510
|
+
/**
|
|
511
|
+
* Get a remembered permission decision.
|
|
512
|
+
* Returns the decision if found, or undefined if no remembered decision.
|
|
513
|
+
*/
|
|
514
|
+
getRememberedPermission(toolName: string, pattern?: string): {
|
|
515
|
+
decision: 'always' | 'never';
|
|
516
|
+
pattern?: string;
|
|
517
|
+
} | undefined;
|
|
518
|
+
/**
|
|
519
|
+
* List all remembered permission decisions.
|
|
520
|
+
*/
|
|
521
|
+
listRememberedPermissions(): Array<{
|
|
522
|
+
toolName: string;
|
|
523
|
+
pattern?: string;
|
|
524
|
+
decision: 'always' | 'never';
|
|
525
|
+
createdAt: string;
|
|
526
|
+
}>;
|
|
527
|
+
/**
|
|
528
|
+
* Remove a remembered permission decision.
|
|
529
|
+
*/
|
|
530
|
+
forgetPermission(toolName: string, pattern?: string): void;
|
|
531
|
+
/**
|
|
532
|
+
* Clear all remembered permissions for a tool or all tools.
|
|
533
|
+
*/
|
|
534
|
+
clearRememberedPermissions(toolName?: string): void;
|
|
493
535
|
/**
|
|
494
536
|
* Prune old sessions if over limit.
|
|
495
537
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/integrations/sqlite-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/integrations/sqlite-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ export class SQLiteStore {
|
|
|
37
37
|
goals: false,
|
|
38
38
|
workerResults: false,
|
|
39
39
|
pendingPlans: false,
|
|
40
|
+
deadLetterQueue: false,
|
|
41
|
+
rememberedPermissions: false,
|
|
40
42
|
};
|
|
41
43
|
// Prepared statements for performance
|
|
42
44
|
// Goal-related statements are optional (only prepared if feature is available)
|
|
@@ -331,6 +333,28 @@ export class SQLiteStore {
|
|
|
331
333
|
DELETE FROM pending_plans WHERE id = ?
|
|
332
334
|
`);
|
|
333
335
|
}
|
|
336
|
+
// Remembered permissions statements (optional - only if feature available)
|
|
337
|
+
if (this.features.rememberedPermissions) {
|
|
338
|
+
this.stmts.insertRememberedPermission = this.db.prepare(`
|
|
339
|
+
INSERT OR REPLACE INTO remembered_permissions (tool_name, pattern, decision, created_at)
|
|
340
|
+
VALUES (@toolName, @pattern, @decision, @createdAt)
|
|
341
|
+
`);
|
|
342
|
+
this.stmts.getRememberedPermission = this.db.prepare(`
|
|
343
|
+
SELECT tool_name as toolName, pattern, decision, created_at as createdAt
|
|
344
|
+
FROM remembered_permissions
|
|
345
|
+
WHERE tool_name = ? AND (pattern = ? OR pattern IS NULL)
|
|
346
|
+
ORDER BY pattern IS NULL ASC
|
|
347
|
+
LIMIT 1
|
|
348
|
+
`);
|
|
349
|
+
this.stmts.listRememberedPermissions = this.db.prepare(`
|
|
350
|
+
SELECT tool_name as toolName, pattern, decision, created_at as createdAt
|
|
351
|
+
FROM remembered_permissions
|
|
352
|
+
ORDER BY tool_name, pattern
|
|
353
|
+
`);
|
|
354
|
+
this.stmts.deleteRememberedPermission = this.db.prepare(`
|
|
355
|
+
DELETE FROM remembered_permissions WHERE tool_name = ? AND (pattern = ? OR (? IS NULL AND pattern IS NULL))
|
|
356
|
+
`);
|
|
357
|
+
}
|
|
334
358
|
}
|
|
335
359
|
// ===========================================================================
|
|
336
360
|
// SESSION MANAGEMENT (compatible with SessionStore interface)
|
|
@@ -583,6 +607,13 @@ export class SQLiteStore {
|
|
|
583
607
|
const dbSizeBytes = this.db.prepare('SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size()').get().size;
|
|
584
608
|
return { sessionCount, entryCount, toolCallCount, checkpointCount, dbSizeBytes };
|
|
585
609
|
}
|
|
610
|
+
/**
|
|
611
|
+
* Get the underlying database instance.
|
|
612
|
+
* Useful for integrations that need direct database access (e.g., DeadLetterQueue).
|
|
613
|
+
*/
|
|
614
|
+
getDatabase() {
|
|
615
|
+
return this.db;
|
|
616
|
+
}
|
|
586
617
|
// ===========================================================================
|
|
587
618
|
// COST TRACKING
|
|
588
619
|
// ===========================================================================
|
|
@@ -1358,6 +1389,86 @@ export class SQLiteStore {
|
|
|
1358
1389
|
return { migrated, failed };
|
|
1359
1390
|
}
|
|
1360
1391
|
// ===========================================================================
|
|
1392
|
+
// REMEMBERED PERMISSIONS
|
|
1393
|
+
// ===========================================================================
|
|
1394
|
+
/**
|
|
1395
|
+
* Check if remembered permissions feature is available.
|
|
1396
|
+
*/
|
|
1397
|
+
hasRememberedPermissionsFeature() {
|
|
1398
|
+
return this.features.rememberedPermissions;
|
|
1399
|
+
}
|
|
1400
|
+
/**
|
|
1401
|
+
* Remember a permission decision.
|
|
1402
|
+
* @param toolName - The tool name (e.g., 'bash')
|
|
1403
|
+
* @param decision - 'always' or 'never'
|
|
1404
|
+
* @param pattern - Optional command pattern (for bash commands)
|
|
1405
|
+
*/
|
|
1406
|
+
rememberPermission(toolName, decision, pattern) {
|
|
1407
|
+
if (!this.features.rememberedPermissions || !this.stmts.insertRememberedPermission) {
|
|
1408
|
+
return;
|
|
1409
|
+
}
|
|
1410
|
+
this.stmts.insertRememberedPermission.run({
|
|
1411
|
+
toolName,
|
|
1412
|
+
pattern: pattern ?? null,
|
|
1413
|
+
decision,
|
|
1414
|
+
createdAt: new Date().toISOString(),
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
/**
|
|
1418
|
+
* Get a remembered permission decision.
|
|
1419
|
+
* Returns the decision if found, or undefined if no remembered decision.
|
|
1420
|
+
*/
|
|
1421
|
+
getRememberedPermission(toolName, pattern) {
|
|
1422
|
+
if (!this.features.rememberedPermissions || !this.stmts.getRememberedPermission) {
|
|
1423
|
+
return undefined;
|
|
1424
|
+
}
|
|
1425
|
+
const row = this.stmts.getRememberedPermission.get(toolName, pattern ?? null);
|
|
1426
|
+
if (!row)
|
|
1427
|
+
return undefined;
|
|
1428
|
+
return {
|
|
1429
|
+
decision: row.decision,
|
|
1430
|
+
pattern: row.pattern ?? undefined,
|
|
1431
|
+
};
|
|
1432
|
+
}
|
|
1433
|
+
/**
|
|
1434
|
+
* List all remembered permission decisions.
|
|
1435
|
+
*/
|
|
1436
|
+
listRememberedPermissions() {
|
|
1437
|
+
if (!this.features.rememberedPermissions || !this.stmts.listRememberedPermissions) {
|
|
1438
|
+
return [];
|
|
1439
|
+
}
|
|
1440
|
+
const rows = this.stmts.listRememberedPermissions.all();
|
|
1441
|
+
return rows.map(row => ({
|
|
1442
|
+
toolName: row.toolName,
|
|
1443
|
+
pattern: row.pattern ?? undefined,
|
|
1444
|
+
decision: row.decision,
|
|
1445
|
+
createdAt: row.createdAt,
|
|
1446
|
+
}));
|
|
1447
|
+
}
|
|
1448
|
+
/**
|
|
1449
|
+
* Remove a remembered permission decision.
|
|
1450
|
+
*/
|
|
1451
|
+
forgetPermission(toolName, pattern) {
|
|
1452
|
+
if (!this.features.rememberedPermissions || !this.stmts.deleteRememberedPermission) {
|
|
1453
|
+
return;
|
|
1454
|
+
}
|
|
1455
|
+
this.stmts.deleteRememberedPermission.run(toolName, pattern ?? null, pattern ?? null);
|
|
1456
|
+
}
|
|
1457
|
+
/**
|
|
1458
|
+
* Clear all remembered permissions for a tool or all tools.
|
|
1459
|
+
*/
|
|
1460
|
+
clearRememberedPermissions(toolName) {
|
|
1461
|
+
if (!this.features.rememberedPermissions) {
|
|
1462
|
+
return;
|
|
1463
|
+
}
|
|
1464
|
+
if (toolName) {
|
|
1465
|
+
this.db.prepare('DELETE FROM remembered_permissions WHERE tool_name = ?').run(toolName);
|
|
1466
|
+
}
|
|
1467
|
+
else {
|
|
1468
|
+
this.db.prepare('DELETE FROM remembered_permissions').run();
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
// ===========================================================================
|
|
1361
1472
|
// LIFECYCLE
|
|
1362
1473
|
// ===========================================================================
|
|
1363
1474
|
/**
|