@calliopelabs/cli 0.4.6 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +258 -105
- package/dist/branching.d.ts +56 -0
- package/dist/branching.d.ts.map +1 -0
- package/dist/branching.js +211 -0
- package/dist/branching.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +235 -2
- package/dist/cli.js.map +1 -1
- package/dist/completion.d.ts +75 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +234 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +90 -0
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +73 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +317 -0
- package/dist/diff.js.map +1 -0
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +199 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-watcher.d.ts +91 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +269 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/files.d.ts +49 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +191 -0
- package/dist/files.js.map +1 -0
- package/dist/fuzzy-search.d.ts +75 -0
- package/dist/fuzzy-search.d.ts.map +1 -0
- package/dist/fuzzy-search.js +240 -0
- package/dist/fuzzy-search.js.map +1 -0
- package/dist/hooks.d.ts +79 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +271 -0
- package/dist/hooks.js.map +1 -0
- package/dist/keyboard.d.ts +57 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +265 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +248 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp.d.ts +90 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +290 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +104 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +394 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +67 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +289 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-tools.d.ts +51 -0
- package/dist/parallel-tools.d.ts.map +1 -0
- package/dist/parallel-tools.js +278 -0
- package/dist/parallel-tools.js.map +1 -0
- package/dist/project-config.d.ts +84 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +250 -0
- package/dist/project-config.js.map +1 -0
- package/dist/providers.d.ts +10 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +240 -38
- package/dist/providers.js.map +1 -1
- package/dist/risk.d.ts +31 -0
- package/dist/risk.d.ts.map +1 -0
- package/dist/risk.js +367 -0
- package/dist/risk.js.map +1 -0
- package/dist/sandbox.d.ts +49 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +347 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/skills.d.ts +71 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +383 -0
- package/dist/skills.js.map +1 -0
- package/dist/storage.d.ts +139 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +508 -0
- package/dist/storage.js.map +1 -0
- package/dist/streaming.d.ts +94 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +305 -0
- package/dist/streaming.js.map +1 -0
- package/dist/summarization.d.ts +76 -0
- package/dist/summarization.d.ts.map +1 -0
- package/dist/summarization.js +242 -0
- package/dist/summarization.js.map +1 -0
- package/dist/themes.d.ts +110 -0
- package/dist/themes.d.ts.map +1 -0
- package/dist/themes.js +329 -0
- package/dist/themes.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +335 -1
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +56 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +105 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-cli.d.ts +9 -2
- package/dist/ui-cli.d.ts.map +1 -1
- package/dist/ui-cli.js +1315 -220
- package/dist/ui-cli.js.map +1 -1
- package/package.json +1 -1
package/dist/diff.js
ADDED
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Diff Preview System
|
|
3
|
+
*
|
|
4
|
+
* Shows diffs before applying file changes, with approve/reject workflow.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Diff Generation
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* Simple line-by-line diff algorithm
|
|
12
|
+
*/
|
|
13
|
+
export function generateDiff(oldContent, newContent, path) {
|
|
14
|
+
const oldLines = oldContent.split('\n');
|
|
15
|
+
const newLines = newContent.split('\n');
|
|
16
|
+
const diffLines = [];
|
|
17
|
+
let additions = 0;
|
|
18
|
+
let deletions = 0;
|
|
19
|
+
// Add header
|
|
20
|
+
diffLines.push({ type: 'header', content: `--- a/${path}` });
|
|
21
|
+
diffLines.push({ type: 'header', content: `+++ b/${path}` });
|
|
22
|
+
// Simple LCS-based diff
|
|
23
|
+
const lcs = longestCommonSubsequence(oldLines, newLines);
|
|
24
|
+
let oldIdx = 0;
|
|
25
|
+
let newIdx = 0;
|
|
26
|
+
let oldLineNum = 1;
|
|
27
|
+
let newLineNum = 1;
|
|
28
|
+
for (const [oldLcsIdx, newLcsIdx] of lcs) {
|
|
29
|
+
// Add deletions (lines in old but not in LCS)
|
|
30
|
+
while (oldIdx < oldLcsIdx) {
|
|
31
|
+
diffLines.push({
|
|
32
|
+
type: 'remove',
|
|
33
|
+
content: oldLines[oldIdx],
|
|
34
|
+
oldLineNum: oldLineNum++,
|
|
35
|
+
});
|
|
36
|
+
deletions++;
|
|
37
|
+
oldIdx++;
|
|
38
|
+
}
|
|
39
|
+
// Add additions (lines in new but not in LCS)
|
|
40
|
+
while (newIdx < newLcsIdx) {
|
|
41
|
+
diffLines.push({
|
|
42
|
+
type: 'add',
|
|
43
|
+
content: newLines[newIdx],
|
|
44
|
+
newLineNum: newLineNum++,
|
|
45
|
+
});
|
|
46
|
+
additions++;
|
|
47
|
+
newIdx++;
|
|
48
|
+
}
|
|
49
|
+
// Add context (matching line)
|
|
50
|
+
diffLines.push({
|
|
51
|
+
type: 'context',
|
|
52
|
+
content: oldLines[oldIdx],
|
|
53
|
+
oldLineNum: oldLineNum++,
|
|
54
|
+
newLineNum: newLineNum++,
|
|
55
|
+
});
|
|
56
|
+
oldIdx++;
|
|
57
|
+
newIdx++;
|
|
58
|
+
}
|
|
59
|
+
// Remaining deletions
|
|
60
|
+
while (oldIdx < oldLines.length) {
|
|
61
|
+
diffLines.push({
|
|
62
|
+
type: 'remove',
|
|
63
|
+
content: oldLines[oldIdx],
|
|
64
|
+
oldLineNum: oldLineNum++,
|
|
65
|
+
});
|
|
66
|
+
deletions++;
|
|
67
|
+
oldIdx++;
|
|
68
|
+
}
|
|
69
|
+
// Remaining additions
|
|
70
|
+
while (newIdx < newLines.length) {
|
|
71
|
+
diffLines.push({
|
|
72
|
+
type: 'add',
|
|
73
|
+
content: newLines[newIdx],
|
|
74
|
+
newLineNum: newLineNum++,
|
|
75
|
+
});
|
|
76
|
+
additions++;
|
|
77
|
+
newIdx++;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
path,
|
|
81
|
+
oldContent,
|
|
82
|
+
newContent,
|
|
83
|
+
lines: diffLines,
|
|
84
|
+
additions,
|
|
85
|
+
deletions,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* LCS algorithm for diff
|
|
90
|
+
*/
|
|
91
|
+
function longestCommonSubsequence(a, b) {
|
|
92
|
+
const m = a.length;
|
|
93
|
+
const n = b.length;
|
|
94
|
+
const dp = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));
|
|
95
|
+
for (let i = 1; i <= m; i++) {
|
|
96
|
+
for (let j = 1; j <= n; j++) {
|
|
97
|
+
if (a[i - 1] === b[j - 1]) {
|
|
98
|
+
dp[i][j] = dp[i - 1][j - 1] + 1;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Backtrack to find LCS indices
|
|
106
|
+
const result = [];
|
|
107
|
+
let i = m, j = n;
|
|
108
|
+
while (i > 0 && j > 0) {
|
|
109
|
+
if (a[i - 1] === b[j - 1]) {
|
|
110
|
+
result.unshift([i - 1, j - 1]);
|
|
111
|
+
i--;
|
|
112
|
+
j--;
|
|
113
|
+
}
|
|
114
|
+
else if (dp[i - 1][j] > dp[i][j - 1]) {
|
|
115
|
+
i--;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
j--;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// Diff Formatting
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// ANSI colors
|
|
127
|
+
const COLORS = {
|
|
128
|
+
reset: '\x1b[0m',
|
|
129
|
+
red: '\x1b[31m',
|
|
130
|
+
green: '\x1b[32m',
|
|
131
|
+
cyan: '\x1b[36m',
|
|
132
|
+
dim: '\x1b[2m',
|
|
133
|
+
bgRed: '\x1b[41m',
|
|
134
|
+
bgGreen: '\x1b[42m',
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Format diff for terminal display
|
|
138
|
+
*/
|
|
139
|
+
export function formatDiff(diff, contextLines = 3) {
|
|
140
|
+
const lines = [];
|
|
141
|
+
// Header
|
|
142
|
+
lines.push(`${COLORS.cyan}${diff.lines[0].content}${COLORS.reset}`);
|
|
143
|
+
lines.push(`${COLORS.cyan}${diff.lines[1].content}${COLORS.reset}`);
|
|
144
|
+
lines.push('');
|
|
145
|
+
// Group consecutive changes with context
|
|
146
|
+
const chunks = groupDiffChunks(diff.lines.slice(2), contextLines);
|
|
147
|
+
for (const chunk of chunks) {
|
|
148
|
+
// Chunk header
|
|
149
|
+
const startOld = chunk.find(l => l.oldLineNum)?.oldLineNum || 1;
|
|
150
|
+
const startNew = chunk.find(l => l.newLineNum)?.newLineNum || 1;
|
|
151
|
+
lines.push(`${COLORS.cyan}@@ -${startOld} +${startNew} @@${COLORS.reset}`);
|
|
152
|
+
for (const line of chunk) {
|
|
153
|
+
switch (line.type) {
|
|
154
|
+
case 'add':
|
|
155
|
+
lines.push(`${COLORS.green}+${line.content}${COLORS.reset}`);
|
|
156
|
+
break;
|
|
157
|
+
case 'remove':
|
|
158
|
+
lines.push(`${COLORS.red}-${line.content}${COLORS.reset}`);
|
|
159
|
+
break;
|
|
160
|
+
case 'context':
|
|
161
|
+
lines.push(`${COLORS.dim} ${line.content}${COLORS.reset}`);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
lines.push('');
|
|
166
|
+
}
|
|
167
|
+
// Summary
|
|
168
|
+
lines.push(`${COLORS.green}+${diff.additions}${COLORS.reset} ${COLORS.red}-${diff.deletions}${COLORS.reset}`);
|
|
169
|
+
return lines.join('\n');
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Format diff as compact summary
|
|
173
|
+
*/
|
|
174
|
+
export function formatDiffSummary(diff) {
|
|
175
|
+
return `${diff.path}: ${COLORS.green}+${diff.additions}${COLORS.reset} ${COLORS.red}-${diff.deletions}${COLORS.reset}`;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Group diff lines into chunks with context
|
|
179
|
+
*/
|
|
180
|
+
function groupDiffChunks(lines, contextLines) {
|
|
181
|
+
const chunks = [];
|
|
182
|
+
let currentChunk = [];
|
|
183
|
+
let contextCount = 0;
|
|
184
|
+
for (let i = 0; i < lines.length; i++) {
|
|
185
|
+
const line = lines[i];
|
|
186
|
+
if (line.type === 'context') {
|
|
187
|
+
contextCount++;
|
|
188
|
+
// Check if there are changes within contextLines ahead
|
|
189
|
+
let hasChangesAhead = false;
|
|
190
|
+
for (let j = i + 1; j < Math.min(i + contextLines + 1, lines.length); j++) {
|
|
191
|
+
if (lines[j].type !== 'context') {
|
|
192
|
+
hasChangesAhead = true;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
if (currentChunk.length > 0 || hasChangesAhead) {
|
|
197
|
+
if (contextCount <= contextLines * 2) {
|
|
198
|
+
currentChunk.push(line);
|
|
199
|
+
}
|
|
200
|
+
else if (hasChangesAhead) {
|
|
201
|
+
// Start new chunk if changes ahead
|
|
202
|
+
if (currentChunk.length > 0) {
|
|
203
|
+
chunks.push(currentChunk);
|
|
204
|
+
currentChunk = [];
|
|
205
|
+
}
|
|
206
|
+
currentChunk.push(line);
|
|
207
|
+
contextCount = 1;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// Add or remove line
|
|
213
|
+
currentChunk.push(line);
|
|
214
|
+
contextCount = 0;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (currentChunk.length > 0) {
|
|
218
|
+
chunks.push(currentChunk);
|
|
219
|
+
}
|
|
220
|
+
return chunks;
|
|
221
|
+
}
|
|
222
|
+
// ============================================================================
|
|
223
|
+
// Pending Changes Management
|
|
224
|
+
// ============================================================================
|
|
225
|
+
let pendingChanges = [];
|
|
226
|
+
/**
|
|
227
|
+
* Queue a file change for approval
|
|
228
|
+
*/
|
|
229
|
+
export function queueChange(type, path, newContent) {
|
|
230
|
+
const oldContent = fs.existsSync(path) ? fs.readFileSync(path, 'utf-8') : '';
|
|
231
|
+
const diff = generateDiff(oldContent, newContent, path);
|
|
232
|
+
const change = {
|
|
233
|
+
id: `change_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`,
|
|
234
|
+
type,
|
|
235
|
+
path,
|
|
236
|
+
oldContent,
|
|
237
|
+
newContent,
|
|
238
|
+
diff,
|
|
239
|
+
approved: null,
|
|
240
|
+
};
|
|
241
|
+
pendingChanges.push(change);
|
|
242
|
+
return change;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get all pending changes
|
|
246
|
+
*/
|
|
247
|
+
export function getPendingChanges() {
|
|
248
|
+
return pendingChanges.filter(c => c.approved === null);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Approve a change and apply it
|
|
252
|
+
*/
|
|
253
|
+
export function approveChange(id) {
|
|
254
|
+
const change = pendingChanges.find(c => c.id === id);
|
|
255
|
+
if (!change)
|
|
256
|
+
return false;
|
|
257
|
+
change.approved = true;
|
|
258
|
+
// Apply the change
|
|
259
|
+
if (change.type === 'delete') {
|
|
260
|
+
if (fs.existsSync(change.path)) {
|
|
261
|
+
fs.unlinkSync(change.path);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
fs.writeFileSync(change.path, change.newContent);
|
|
266
|
+
}
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Reject a change
|
|
271
|
+
*/
|
|
272
|
+
export function rejectChange(id) {
|
|
273
|
+
const change = pendingChanges.find(c => c.id === id);
|
|
274
|
+
if (!change)
|
|
275
|
+
return false;
|
|
276
|
+
change.approved = false;
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Approve all pending changes
|
|
281
|
+
*/
|
|
282
|
+
export function approveAllChanges() {
|
|
283
|
+
let count = 0;
|
|
284
|
+
for (const change of pendingChanges) {
|
|
285
|
+
if (change.approved === null) {
|
|
286
|
+
approveChange(change.id);
|
|
287
|
+
count++;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return count;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Reject all pending changes
|
|
294
|
+
*/
|
|
295
|
+
export function rejectAllChanges() {
|
|
296
|
+
let count = 0;
|
|
297
|
+
for (const change of pendingChanges) {
|
|
298
|
+
if (change.approved === null) {
|
|
299
|
+
rejectChange(change.id);
|
|
300
|
+
count++;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return count;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Clear change history
|
|
307
|
+
*/
|
|
308
|
+
export function clearChanges() {
|
|
309
|
+
pendingChanges = [];
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get change by ID
|
|
313
|
+
*/
|
|
314
|
+
export function getChange(id) {
|
|
315
|
+
return pendingChanges.find(c => c.id === id);
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=diff.js.map
|
package/dist/diff.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Error Handling
|
|
3
|
+
*
|
|
4
|
+
* Provides retry logic, error classification, and actionable suggestions.
|
|
5
|
+
*/
|
|
6
|
+
export type ErrorCategory = 'network' | 'rate_limit' | 'auth' | 'invalid_request' | 'server' | 'timeout' | 'unknown';
|
|
7
|
+
export interface ClassifiedError {
|
|
8
|
+
category: ErrorCategory;
|
|
9
|
+
message: string;
|
|
10
|
+
suggestion: string;
|
|
11
|
+
retryable: boolean;
|
|
12
|
+
retryAfterMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface RetryOptions {
|
|
15
|
+
maxRetries?: number;
|
|
16
|
+
initialDelayMs?: number;
|
|
17
|
+
maxDelayMs?: number;
|
|
18
|
+
backoffMultiplier?: number;
|
|
19
|
+
onRetry?: (attempt: number, error: Error, delayMs: number) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Classify an error and provide actionable suggestions
|
|
23
|
+
*/
|
|
24
|
+
export declare function classifyError(error: unknown): ClassifiedError;
|
|
25
|
+
/**
|
|
26
|
+
* Format an error for user display
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatError(error: unknown): string;
|
|
29
|
+
/**
|
|
30
|
+
* Execute a function with retry logic
|
|
31
|
+
*/
|
|
32
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Wrap an async function to add retry logic
|
|
35
|
+
*/
|
|
36
|
+
export declare function retryable<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, options?: RetryOptions): T;
|
|
37
|
+
/**
|
|
38
|
+
* Get provider-specific suggestions
|
|
39
|
+
*/
|
|
40
|
+
export declare function getProviderSuggestion(provider: string, error: unknown): string | null;
|
|
41
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,YAAY,GACZ,MAAM,GACN,iBAAiB,GACjB,QAAQ,GACR,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAkH7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASlD;AAoBD;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EAC1E,EAAE,EAAE,CAAC,EACL,OAAO,GAAE,YAAiB,GACzB,CAAC,CAEH;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAuBrF"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Error Handling
|
|
3
|
+
*
|
|
4
|
+
* Provides retry logic, error classification, and actionable suggestions.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Error Classification
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Classify an error and provide actionable suggestions
|
|
11
|
+
*/
|
|
12
|
+
export function classifyError(error) {
|
|
13
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
14
|
+
const lowerMessage = message.toLowerCase();
|
|
15
|
+
// Network errors
|
|
16
|
+
if (lowerMessage.includes('econnrefused') ||
|
|
17
|
+
lowerMessage.includes('enotfound') ||
|
|
18
|
+
lowerMessage.includes('network') ||
|
|
19
|
+
lowerMessage.includes('dns') ||
|
|
20
|
+
lowerMessage.includes('socket')) {
|
|
21
|
+
return {
|
|
22
|
+
category: 'network',
|
|
23
|
+
message: 'Network connection failed',
|
|
24
|
+
suggestion: 'Check your internet connection and try again.',
|
|
25
|
+
retryable: true,
|
|
26
|
+
retryAfterMs: 2000,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Rate limiting
|
|
30
|
+
if (lowerMessage.includes('rate limit') ||
|
|
31
|
+
lowerMessage.includes('too many requests') ||
|
|
32
|
+
lowerMessage.includes('429') ||
|
|
33
|
+
lowerMessage.includes('quota')) {
|
|
34
|
+
// Try to extract retry-after from error
|
|
35
|
+
const retryMatch = message.match(/retry.?after[:\s]+(\d+)/i);
|
|
36
|
+
const retryAfterMs = retryMatch ? parseInt(retryMatch[1]) * 1000 : 60000;
|
|
37
|
+
return {
|
|
38
|
+
category: 'rate_limit',
|
|
39
|
+
message: 'Rate limit exceeded',
|
|
40
|
+
suggestion: `Wait ${Math.round(retryAfterMs / 1000)} seconds and try again, or switch providers with /provider.`,
|
|
41
|
+
retryable: true,
|
|
42
|
+
retryAfterMs,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// Authentication errors
|
|
46
|
+
if (lowerMessage.includes('unauthorized') ||
|
|
47
|
+
lowerMessage.includes('401') ||
|
|
48
|
+
lowerMessage.includes('api key') ||
|
|
49
|
+
lowerMessage.includes('authentication') ||
|
|
50
|
+
lowerMessage.includes('invalid key') ||
|
|
51
|
+
lowerMessage.includes('invalid_api_key')) {
|
|
52
|
+
return {
|
|
53
|
+
category: 'auth',
|
|
54
|
+
message: 'Authentication failed',
|
|
55
|
+
suggestion: 'Check your API key with /config or run `calliope --setup` to reconfigure.',
|
|
56
|
+
retryable: false,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Invalid request errors
|
|
60
|
+
if (lowerMessage.includes('bad request') ||
|
|
61
|
+
lowerMessage.includes('400') ||
|
|
62
|
+
lowerMessage.includes('invalid') ||
|
|
63
|
+
lowerMessage.includes('malformed')) {
|
|
64
|
+
return {
|
|
65
|
+
category: 'invalid_request',
|
|
66
|
+
message: 'Invalid request',
|
|
67
|
+
suggestion: 'Try rephrasing your message or use /clear to reset the conversation.',
|
|
68
|
+
retryable: false,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Timeout errors
|
|
72
|
+
if (lowerMessage.includes('timeout') ||
|
|
73
|
+
lowerMessage.includes('timed out') ||
|
|
74
|
+
lowerMessage.includes('etimedout')) {
|
|
75
|
+
return {
|
|
76
|
+
category: 'timeout',
|
|
77
|
+
message: 'Request timed out',
|
|
78
|
+
suggestion: 'The request took too long. Try a simpler query or check server status.',
|
|
79
|
+
retryable: true,
|
|
80
|
+
retryAfterMs: 5000,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Server errors
|
|
84
|
+
if (lowerMessage.includes('500') ||
|
|
85
|
+
lowerMessage.includes('502') ||
|
|
86
|
+
lowerMessage.includes('503') ||
|
|
87
|
+
lowerMessage.includes('504') ||
|
|
88
|
+
lowerMessage.includes('internal server') ||
|
|
89
|
+
lowerMessage.includes('service unavailable')) {
|
|
90
|
+
return {
|
|
91
|
+
category: 'server',
|
|
92
|
+
message: 'Server error',
|
|
93
|
+
suggestion: 'The API server is having issues. Wait a moment and try again, or switch providers.',
|
|
94
|
+
retryable: true,
|
|
95
|
+
retryAfterMs: 10000,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Unknown error
|
|
99
|
+
return {
|
|
100
|
+
category: 'unknown',
|
|
101
|
+
message: message.length > 100 ? message.substring(0, 100) + '...' : message,
|
|
102
|
+
suggestion: 'An unexpected error occurred. Try again or use /clear to reset.',
|
|
103
|
+
retryable: true,
|
|
104
|
+
retryAfterMs: 3000,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Format an error for user display
|
|
109
|
+
*/
|
|
110
|
+
export function formatError(error) {
|
|
111
|
+
const classified = classifyError(error);
|
|
112
|
+
let output = `✗ ${classified.message}`;
|
|
113
|
+
if (classified.suggestion) {
|
|
114
|
+
output += `\n 💡 ${classified.suggestion}`;
|
|
115
|
+
}
|
|
116
|
+
return output;
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Retry Logic
|
|
120
|
+
// ============================================================================
|
|
121
|
+
const DEFAULT_RETRY_OPTIONS = {
|
|
122
|
+
maxRetries: 3,
|
|
123
|
+
initialDelayMs: 1000,
|
|
124
|
+
maxDelayMs: 30000,
|
|
125
|
+
backoffMultiplier: 2,
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Sleep for a given number of milliseconds
|
|
129
|
+
*/
|
|
130
|
+
function sleep(ms) {
|
|
131
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Execute a function with retry logic
|
|
135
|
+
*/
|
|
136
|
+
export async function withRetry(fn, options = {}) {
|
|
137
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
138
|
+
let lastError;
|
|
139
|
+
let delay = opts.initialDelayMs;
|
|
140
|
+
for (let attempt = 1; attempt <= opts.maxRetries + 1; attempt++) {
|
|
141
|
+
try {
|
|
142
|
+
return await fn();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
146
|
+
// Check if we should retry
|
|
147
|
+
const classified = classifyError(error);
|
|
148
|
+
if (!classified.retryable || attempt > opts.maxRetries) {
|
|
149
|
+
throw lastError;
|
|
150
|
+
}
|
|
151
|
+
// Use the error's suggested delay if available
|
|
152
|
+
const retryDelay = classified.retryAfterMs
|
|
153
|
+
? Math.min(classified.retryAfterMs, opts.maxDelayMs)
|
|
154
|
+
: Math.min(delay, opts.maxDelayMs);
|
|
155
|
+
// Notify about retry
|
|
156
|
+
if (opts.onRetry) {
|
|
157
|
+
opts.onRetry(attempt, lastError, retryDelay);
|
|
158
|
+
}
|
|
159
|
+
await sleep(retryDelay);
|
|
160
|
+
// Exponential backoff
|
|
161
|
+
delay *= opts.backoffMultiplier;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
throw lastError || new Error('Max retries exceeded');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Wrap an async function to add retry logic
|
|
168
|
+
*/
|
|
169
|
+
export function retryable(fn, options = {}) {
|
|
170
|
+
return ((...args) => withRetry(() => fn(...args), options));
|
|
171
|
+
}
|
|
172
|
+
// ============================================================================
|
|
173
|
+
// Provider-Specific Error Handling
|
|
174
|
+
// ============================================================================
|
|
175
|
+
/**
|
|
176
|
+
* Get provider-specific suggestions
|
|
177
|
+
*/
|
|
178
|
+
export function getProviderSuggestion(provider, error) {
|
|
179
|
+
const classified = classifyError(error);
|
|
180
|
+
if (classified.category === 'auth') {
|
|
181
|
+
switch (provider) {
|
|
182
|
+
case 'anthropic':
|
|
183
|
+
return 'Get your API key at https://console.anthropic.com/';
|
|
184
|
+
case 'openai':
|
|
185
|
+
return 'Get your API key at https://platform.openai.com/api-keys';
|
|
186
|
+
case 'google':
|
|
187
|
+
return 'Get your API key at https://aistudio.google.com/apikey';
|
|
188
|
+
case 'openrouter':
|
|
189
|
+
return 'Get your API key at https://openrouter.ai/keys';
|
|
190
|
+
default:
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (classified.category === 'rate_limit') {
|
|
195
|
+
return `Try switching to another provider with /provider`;
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
//# 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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - File Watcher
|
|
3
|
+
*
|
|
4
|
+
* Watch for file changes and notify the agent.
|
|
5
|
+
*/
|
|
6
|
+
export type WatchEventType = 'add' | 'change' | 'unlink';
|
|
7
|
+
export interface WatchEvent {
|
|
8
|
+
type: WatchEventType;
|
|
9
|
+
path: string;
|
|
10
|
+
relativePath: string;
|
|
11
|
+
timestamp: Date;
|
|
12
|
+
}
|
|
13
|
+
export interface WatcherOptions {
|
|
14
|
+
patterns?: string[];
|
|
15
|
+
ignorePatterns?: string[];
|
|
16
|
+
debounceMs?: number;
|
|
17
|
+
recursive?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export type WatchCallback = (event: WatchEvent) => void;
|
|
20
|
+
export declare class FileWatcher {
|
|
21
|
+
private watchers;
|
|
22
|
+
private callbacks;
|
|
23
|
+
private debounceTimers;
|
|
24
|
+
private options;
|
|
25
|
+
private baseDir;
|
|
26
|
+
private running;
|
|
27
|
+
constructor(baseDir: string, options?: WatcherOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Start watching
|
|
30
|
+
*/
|
|
31
|
+
start(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Stop watching
|
|
34
|
+
*/
|
|
35
|
+
stop(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Add event listener
|
|
38
|
+
*/
|
|
39
|
+
on(callback: WatchCallback): void;
|
|
40
|
+
/**
|
|
41
|
+
* Remove event listener
|
|
42
|
+
*/
|
|
43
|
+
off(callback: WatchCallback): void;
|
|
44
|
+
/**
|
|
45
|
+
* Watch a directory
|
|
46
|
+
*/
|
|
47
|
+
private watchDirectory;
|
|
48
|
+
/**
|
|
49
|
+
* Check if path should be ignored
|
|
50
|
+
*/
|
|
51
|
+
private shouldIgnore;
|
|
52
|
+
/**
|
|
53
|
+
* Simple pattern matching
|
|
54
|
+
*/
|
|
55
|
+
private matchPattern;
|
|
56
|
+
/**
|
|
57
|
+
* Debounce file events
|
|
58
|
+
*/
|
|
59
|
+
private debounceEvent;
|
|
60
|
+
/**
|
|
61
|
+
* Emit event to callbacks
|
|
62
|
+
*/
|
|
63
|
+
private emitEvent;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get or create global file watcher
|
|
67
|
+
*/
|
|
68
|
+
export declare function getWatcher(baseDir?: string): FileWatcher;
|
|
69
|
+
/**
|
|
70
|
+
* Start global file watcher
|
|
71
|
+
*/
|
|
72
|
+
export declare function startWatching(baseDir: string, options?: WatcherOptions): FileWatcher;
|
|
73
|
+
/**
|
|
74
|
+
* Stop global file watcher
|
|
75
|
+
*/
|
|
76
|
+
export declare function stopWatching(): void;
|
|
77
|
+
export interface AggregatedChanges {
|
|
78
|
+
added: string[];
|
|
79
|
+
changed: string[];
|
|
80
|
+
deleted: string[];
|
|
81
|
+
summary: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Aggregate watch events over a time period
|
|
85
|
+
*/
|
|
86
|
+
export declare function createChangeAggregator(watcher: FileWatcher, windowMs?: number): {
|
|
87
|
+
getChanges: () => AggregatedChanges;
|
|
88
|
+
clear: () => void;
|
|
89
|
+
destroy: () => void;
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=file-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../src/file-watcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAuBxD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB;IAUzD;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIjC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOlC;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,SAAS;CA0BlB;AAQD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAKxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,CAOpF;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAKnC;AAMD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EACpB,QAAQ,SAAO,GACd;IACD,UAAU,EAAE,MAAM,iBAAiB,CAAC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA0DA"}
|