@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/memory.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Memory System
|
|
3
|
+
*
|
|
4
|
+
* Persistent memory across sessions using CALLIOPE.md files.
|
|
5
|
+
* Supports project-level and global memories.
|
|
6
|
+
*
|
|
7
|
+
* Format (human-readable markdown):
|
|
8
|
+
* ```
|
|
9
|
+
* # Project Memory
|
|
10
|
+
*
|
|
11
|
+
* ## Context
|
|
12
|
+
* - Key fact about the project
|
|
13
|
+
* - Another important detail
|
|
14
|
+
*
|
|
15
|
+
* ## Preferences
|
|
16
|
+
* - User prefers functional components
|
|
17
|
+
* - Always use TypeScript
|
|
18
|
+
*
|
|
19
|
+
* ## History
|
|
20
|
+
* - 2025-01-09: Implemented auth system
|
|
21
|
+
* - 2025-01-08: Set up project structure
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import * as fs from 'fs';
|
|
25
|
+
import * as path from 'path';
|
|
26
|
+
import * as os from 'os';
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// Paths
|
|
29
|
+
// ============================================================================
|
|
30
|
+
const GLOBAL_MEMORY_DIR = path.join(os.homedir(), '.calliope-cli', 'memory');
|
|
31
|
+
const MEMORY_FILENAME = 'CALLIOPE.md';
|
|
32
|
+
/**
|
|
33
|
+
* Find project memory file (searches up directory tree)
|
|
34
|
+
*/
|
|
35
|
+
export function findProjectMemory(startDir) {
|
|
36
|
+
let currentDir = startDir;
|
|
37
|
+
while (currentDir !== path.dirname(currentDir)) {
|
|
38
|
+
const memoryPath = path.join(currentDir, MEMORY_FILENAME);
|
|
39
|
+
if (fs.existsSync(memoryPath)) {
|
|
40
|
+
return memoryPath;
|
|
41
|
+
}
|
|
42
|
+
currentDir = path.dirname(currentDir);
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get global memory file path
|
|
48
|
+
*/
|
|
49
|
+
export function getGlobalMemoryPath() {
|
|
50
|
+
if (!fs.existsSync(GLOBAL_MEMORY_DIR)) {
|
|
51
|
+
fs.mkdirSync(GLOBAL_MEMORY_DIR, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
return path.join(GLOBAL_MEMORY_DIR, 'global.md');
|
|
54
|
+
}
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Parsing
|
|
57
|
+
// ============================================================================
|
|
58
|
+
/**
|
|
59
|
+
* Parse CALLIOPE.md file into Memory object
|
|
60
|
+
*/
|
|
61
|
+
export function parseMemoryFile(content) {
|
|
62
|
+
const memory = {
|
|
63
|
+
context: [],
|
|
64
|
+
preferences: [],
|
|
65
|
+
history: [],
|
|
66
|
+
notes: [],
|
|
67
|
+
};
|
|
68
|
+
let currentSection = null;
|
|
69
|
+
for (const line of content.split('\n')) {
|
|
70
|
+
const trimmed = line.trim();
|
|
71
|
+
// Section headers
|
|
72
|
+
if (trimmed.startsWith('## ')) {
|
|
73
|
+
const section = trimmed.slice(3).toLowerCase();
|
|
74
|
+
if (section === 'context')
|
|
75
|
+
currentSection = 'context';
|
|
76
|
+
else if (section === 'preferences')
|
|
77
|
+
currentSection = 'preferences';
|
|
78
|
+
else if (section === 'history')
|
|
79
|
+
currentSection = 'history';
|
|
80
|
+
else if (section === 'notes')
|
|
81
|
+
currentSection = 'notes';
|
|
82
|
+
else
|
|
83
|
+
currentSection = null;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Skip main title and empty lines
|
|
87
|
+
if (trimmed.startsWith('# ') || !trimmed) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// List items
|
|
91
|
+
if (currentSection && trimmed.startsWith('- ')) {
|
|
92
|
+
memory[currentSection].push(trimmed.slice(2));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return memory;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Format Memory object as markdown
|
|
99
|
+
*/
|
|
100
|
+
export function formatMemoryFile(memory, title = 'Project Memory') {
|
|
101
|
+
const lines = [`# ${title}`, ''];
|
|
102
|
+
if (memory.context.length > 0) {
|
|
103
|
+
lines.push('## Context', '');
|
|
104
|
+
for (const item of memory.context) {
|
|
105
|
+
lines.push(`- ${item}`);
|
|
106
|
+
}
|
|
107
|
+
lines.push('');
|
|
108
|
+
}
|
|
109
|
+
if (memory.preferences.length > 0) {
|
|
110
|
+
lines.push('## Preferences', '');
|
|
111
|
+
for (const item of memory.preferences) {
|
|
112
|
+
lines.push(`- ${item}`);
|
|
113
|
+
}
|
|
114
|
+
lines.push('');
|
|
115
|
+
}
|
|
116
|
+
if (memory.history.length > 0) {
|
|
117
|
+
lines.push('## History', '');
|
|
118
|
+
for (const item of memory.history) {
|
|
119
|
+
lines.push(`- ${item}`);
|
|
120
|
+
}
|
|
121
|
+
lines.push('');
|
|
122
|
+
}
|
|
123
|
+
if (memory.notes.length > 0) {
|
|
124
|
+
lines.push('## Notes', '');
|
|
125
|
+
for (const item of memory.notes) {
|
|
126
|
+
lines.push(`- ${item}`);
|
|
127
|
+
}
|
|
128
|
+
lines.push('');
|
|
129
|
+
}
|
|
130
|
+
return lines.join('\n');
|
|
131
|
+
}
|
|
132
|
+
// ============================================================================
|
|
133
|
+
// Memory Operations
|
|
134
|
+
// ============================================================================
|
|
135
|
+
/**
|
|
136
|
+
* Load memory from file
|
|
137
|
+
*/
|
|
138
|
+
export function loadMemory(filePath) {
|
|
139
|
+
if (!fs.existsSync(filePath)) {
|
|
140
|
+
return { context: [], preferences: [], history: [], notes: [] };
|
|
141
|
+
}
|
|
142
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
143
|
+
return parseMemoryFile(content);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Save memory to file
|
|
147
|
+
*/
|
|
148
|
+
export function saveMemory(filePath, memory, title) {
|
|
149
|
+
const dir = path.dirname(filePath);
|
|
150
|
+
if (!fs.existsSync(dir)) {
|
|
151
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
152
|
+
}
|
|
153
|
+
fs.writeFileSync(filePath, formatMemoryFile(memory, title));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get project memory for current directory
|
|
157
|
+
*/
|
|
158
|
+
export function getProjectMemory(dir) {
|
|
159
|
+
const memoryPath = findProjectMemory(dir);
|
|
160
|
+
if (!memoryPath) {
|
|
161
|
+
return { context: [], preferences: [], history: [], notes: [] };
|
|
162
|
+
}
|
|
163
|
+
return loadMemory(memoryPath);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get global memory
|
|
167
|
+
*/
|
|
168
|
+
export function getGlobalMemory() {
|
|
169
|
+
return loadMemory(getGlobalMemoryPath());
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Add entry to memory
|
|
173
|
+
*/
|
|
174
|
+
export function addMemoryEntry(filePath, entry, title) {
|
|
175
|
+
const memory = loadMemory(filePath);
|
|
176
|
+
let content = entry.content;
|
|
177
|
+
if (entry.type === 'history' && entry.timestamp) {
|
|
178
|
+
content = `${entry.timestamp}: ${content}`;
|
|
179
|
+
}
|
|
180
|
+
switch (entry.type) {
|
|
181
|
+
case 'context':
|
|
182
|
+
if (!memory.context.includes(content)) {
|
|
183
|
+
memory.context.push(content);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
case 'preference':
|
|
187
|
+
if (!memory.preferences.includes(content)) {
|
|
188
|
+
memory.preferences.push(content);
|
|
189
|
+
}
|
|
190
|
+
break;
|
|
191
|
+
case 'history':
|
|
192
|
+
memory.history.push(content);
|
|
193
|
+
break;
|
|
194
|
+
case 'note':
|
|
195
|
+
memory.notes.push(content);
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
saveMemory(filePath, memory, title);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Remove entry from memory
|
|
202
|
+
*/
|
|
203
|
+
export function removeMemoryEntry(filePath, type, content, title) {
|
|
204
|
+
const memory = loadMemory(filePath);
|
|
205
|
+
const section = type === 'preference' ? 'preferences' : `${type}s`;
|
|
206
|
+
const index = memory[section].findIndex(item => item.toLowerCase().includes(content.toLowerCase()));
|
|
207
|
+
if (index === -1)
|
|
208
|
+
return false;
|
|
209
|
+
memory[section].splice(index, 1);
|
|
210
|
+
saveMemory(filePath, memory, title);
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Initialize project memory file
|
|
215
|
+
*/
|
|
216
|
+
export function initProjectMemory(dir, projectName) {
|
|
217
|
+
const memoryPath = path.join(dir, MEMORY_FILENAME);
|
|
218
|
+
const memory = {
|
|
219
|
+
context: [
|
|
220
|
+
`Project: ${projectName || path.basename(dir)}`,
|
|
221
|
+
],
|
|
222
|
+
preferences: [],
|
|
223
|
+
history: [
|
|
224
|
+
`${new Date().toISOString().split('T')[0]}: Initialized project memory`,
|
|
225
|
+
],
|
|
226
|
+
notes: [],
|
|
227
|
+
};
|
|
228
|
+
saveMemory(memoryPath, memory, 'Project Memory');
|
|
229
|
+
return memoryPath;
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Standard Context Files
|
|
233
|
+
// ============================================================================
|
|
234
|
+
/**
|
|
235
|
+
* Standard files that provide project context
|
|
236
|
+
* These are loaded automatically when found in the project root
|
|
237
|
+
*/
|
|
238
|
+
const CONTEXT_FILES = [
|
|
239
|
+
{ name: 'CALLIOPE.md', label: 'Memory', maxLines: 100 },
|
|
240
|
+
{ name: 'CLAUDE.md', label: 'Claude Context', maxLines: 100 },
|
|
241
|
+
{ name: 'README.md', label: 'README', maxLines: 50 },
|
|
242
|
+
{ name: 'SPEC.md', label: 'Specification', maxLines: 100 },
|
|
243
|
+
{ name: 'TODO.md', label: 'TODO', maxLines: 50 },
|
|
244
|
+
{ name: 'ARCHITECTURE.md', label: 'Architecture', maxLines: 100 },
|
|
245
|
+
{ name: 'CONTRIBUTING.md', label: 'Contributing', maxLines: 50 },
|
|
246
|
+
{ name: 'DESIGN.md', label: 'Design', maxLines: 100 },
|
|
247
|
+
{ name: 'NOTES.md', label: 'Notes', maxLines: 50 },
|
|
248
|
+
{ name: 'CONTEXT.md', label: 'Context', maxLines: 100 },
|
|
249
|
+
{ name: '.cursorrules', label: 'Cursor Rules', maxLines: 100 },
|
|
250
|
+
{ name: '.github/copilot-instructions.md', label: 'Copilot Instructions', maxLines: 100 },
|
|
251
|
+
];
|
|
252
|
+
/**
|
|
253
|
+
* Find and load context from standard files
|
|
254
|
+
*/
|
|
255
|
+
export function loadContextFiles(dir) {
|
|
256
|
+
const results = [];
|
|
257
|
+
for (const file of CONTEXT_FILES) {
|
|
258
|
+
const filePath = path.join(dir, file.name);
|
|
259
|
+
if (fs.existsSync(filePath)) {
|
|
260
|
+
try {
|
|
261
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
262
|
+
const lines = content.split('\n');
|
|
263
|
+
const truncated = lines.slice(0, file.maxLines).join('\n');
|
|
264
|
+
const suffix = lines.length > file.maxLines ? `\n... (${lines.length - file.maxLines} more lines)` : '';
|
|
265
|
+
results.push({
|
|
266
|
+
name: file.name,
|
|
267
|
+
label: file.label,
|
|
268
|
+
content: truncated + suffix,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// Skip files we can't read
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return results;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get list of context files that exist in directory
|
|
280
|
+
*/
|
|
281
|
+
export function listContextFiles(dir) {
|
|
282
|
+
return CONTEXT_FILES
|
|
283
|
+
.map(f => path.join(dir, f.name))
|
|
284
|
+
.filter(p => fs.existsSync(p));
|
|
285
|
+
}
|
|
286
|
+
// ============================================================================
|
|
287
|
+
// Memory Context for LLM
|
|
288
|
+
// ============================================================================
|
|
289
|
+
/**
|
|
290
|
+
* Build memory context string for system prompt
|
|
291
|
+
*/
|
|
292
|
+
export function buildMemoryContext(dir) {
|
|
293
|
+
const projectMemory = getProjectMemory(dir);
|
|
294
|
+
const globalMemory = getGlobalMemory();
|
|
295
|
+
const contextFiles = loadContextFiles(dir);
|
|
296
|
+
const parts = [];
|
|
297
|
+
// Global preferences first
|
|
298
|
+
if (globalMemory.preferences.length > 0) {
|
|
299
|
+
parts.push('Global preferences:');
|
|
300
|
+
for (const pref of globalMemory.preferences) {
|
|
301
|
+
parts.push(`- ${pref}`);
|
|
302
|
+
}
|
|
303
|
+
parts.push('');
|
|
304
|
+
}
|
|
305
|
+
// Project context from CALLIOPE.md
|
|
306
|
+
if (projectMemory.context.length > 0) {
|
|
307
|
+
parts.push('Project context:');
|
|
308
|
+
for (const ctx of projectMemory.context) {
|
|
309
|
+
parts.push(`- ${ctx}`);
|
|
310
|
+
}
|
|
311
|
+
parts.push('');
|
|
312
|
+
}
|
|
313
|
+
// Project preferences
|
|
314
|
+
if (projectMemory.preferences.length > 0) {
|
|
315
|
+
parts.push('Project preferences:');
|
|
316
|
+
for (const pref of projectMemory.preferences) {
|
|
317
|
+
parts.push(`- ${pref}`);
|
|
318
|
+
}
|
|
319
|
+
parts.push('');
|
|
320
|
+
}
|
|
321
|
+
// Recent history (last 5)
|
|
322
|
+
const recentHistory = projectMemory.history.slice(-5);
|
|
323
|
+
if (recentHistory.length > 0) {
|
|
324
|
+
parts.push('Recent history:');
|
|
325
|
+
for (const hist of recentHistory) {
|
|
326
|
+
parts.push(`- ${hist}`);
|
|
327
|
+
}
|
|
328
|
+
parts.push('');
|
|
329
|
+
}
|
|
330
|
+
// Context from other files (excluding CALLIOPE.md which we already parsed)
|
|
331
|
+
for (const file of contextFiles) {
|
|
332
|
+
if (file.name === 'CALLIOPE.md')
|
|
333
|
+
continue;
|
|
334
|
+
parts.push(`--- ${file.label} (${file.name}) ---`);
|
|
335
|
+
parts.push(file.content);
|
|
336
|
+
parts.push('');
|
|
337
|
+
}
|
|
338
|
+
return parts.join('\n');
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Build compact context summary (for token-limited situations)
|
|
342
|
+
*/
|
|
343
|
+
export function buildCompactContext(dir) {
|
|
344
|
+
const projectMemory = getProjectMemory(dir);
|
|
345
|
+
const parts = [];
|
|
346
|
+
if (projectMemory.context.length > 0) {
|
|
347
|
+
parts.push('Context: ' + projectMemory.context.join('; '));
|
|
348
|
+
}
|
|
349
|
+
if (projectMemory.preferences.length > 0) {
|
|
350
|
+
parts.push('Prefs: ' + projectMemory.preferences.join('; '));
|
|
351
|
+
}
|
|
352
|
+
return parts.join('\n');
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Auto-extract potential memories from conversation
|
|
356
|
+
* Returns suggestions for memories to add
|
|
357
|
+
*/
|
|
358
|
+
export function suggestMemories(content) {
|
|
359
|
+
const suggestions = [];
|
|
360
|
+
// Look for patterns that suggest preferences
|
|
361
|
+
const prefPatterns = [
|
|
362
|
+
/(?:always|prefer|use|want)\s+(?:to\s+)?(.+?)(?:\.|$)/gi,
|
|
363
|
+
/(?:don't|never|avoid)\s+(.+?)(?:\.|$)/gi,
|
|
364
|
+
];
|
|
365
|
+
for (const pattern of prefPatterns) {
|
|
366
|
+
let match;
|
|
367
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
368
|
+
if (match[1].length > 10 && match[1].length < 100) {
|
|
369
|
+
suggestions.push({
|
|
370
|
+
type: 'preference',
|
|
371
|
+
content: match[1].trim(),
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// Look for patterns that suggest context
|
|
377
|
+
const contextPatterns = [
|
|
378
|
+
/(?:this project|the codebase|this repo)\s+(?:is|uses|has)\s+(.+?)(?:\.|$)/gi,
|
|
379
|
+
/(?:we're using|built with|powered by)\s+(.+?)(?:\.|$)/gi,
|
|
380
|
+
];
|
|
381
|
+
for (const pattern of contextPatterns) {
|
|
382
|
+
let match;
|
|
383
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
384
|
+
if (match[1].length > 5 && match[1].length < 100) {
|
|
385
|
+
suggestions.push({
|
|
386
|
+
type: 'context',
|
|
387
|
+
content: match[1].trim(),
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return suggestions;
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calliope CLI - Multi-Model Router
|
|
3
|
+
*
|
|
4
|
+
* Intelligently routes requests to different models based on task complexity.
|
|
5
|
+
*/
|
|
6
|
+
import type { LLMProvider } from './types.js';
|
|
7
|
+
export type TaskComplexity = 'trivial' | 'simple' | 'moderate' | 'complex' | 'expert';
|
|
8
|
+
export interface ModelTier {
|
|
9
|
+
name: string;
|
|
10
|
+
provider: LLMProvider;
|
|
11
|
+
model: string;
|
|
12
|
+
maxTokens: number;
|
|
13
|
+
costPer1kInput: number;
|
|
14
|
+
costPer1kOutput: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RoutingConfig {
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
tiers: {
|
|
19
|
+
fast: ModelTier;
|
|
20
|
+
balanced: ModelTier;
|
|
21
|
+
smart: ModelTier;
|
|
22
|
+
};
|
|
23
|
+
autoRoute: boolean;
|
|
24
|
+
defaultTier: 'fast' | 'balanced' | 'smart';
|
|
25
|
+
}
|
|
26
|
+
export interface RouteDecision {
|
|
27
|
+
tier: 'fast' | 'balanced' | 'smart';
|
|
28
|
+
model: ModelTier;
|
|
29
|
+
reason: string;
|
|
30
|
+
complexity: TaskComplexity;
|
|
31
|
+
confidence: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Analyze task complexity from user message
|
|
35
|
+
*/
|
|
36
|
+
export declare function analyzeComplexity(message: string, context?: {
|
|
37
|
+
messageCount?: number;
|
|
38
|
+
hasCode?: boolean;
|
|
39
|
+
fileCount?: number;
|
|
40
|
+
toolsUsed?: string[];
|
|
41
|
+
}): {
|
|
42
|
+
complexity: TaskComplexity;
|
|
43
|
+
confidence: number;
|
|
44
|
+
signals: string[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Route request to appropriate model tier
|
|
48
|
+
*/
|
|
49
|
+
export declare function routeRequest(message: string, provider: LLMProvider, context?: {
|
|
50
|
+
messageCount?: number;
|
|
51
|
+
hasCode?: boolean;
|
|
52
|
+
fileCount?: number;
|
|
53
|
+
toolsUsed?: string[];
|
|
54
|
+
}): RouteDecision;
|
|
55
|
+
/**
|
|
56
|
+
* Get model tier for provider
|
|
57
|
+
*/
|
|
58
|
+
export declare function getModelTier(provider: LLMProvider, tier: 'fast' | 'balanced' | 'smart'): ModelTier;
|
|
59
|
+
/**
|
|
60
|
+
* Get all tiers for a provider
|
|
61
|
+
*/
|
|
62
|
+
export declare function getAllTiers(provider: LLMProvider): RoutingConfig['tiers'];
|
|
63
|
+
/**
|
|
64
|
+
* Check if provider supports routing
|
|
65
|
+
*/
|
|
66
|
+
export declare function supportsRouting(provider: LLMProvider): boolean;
|
|
67
|
+
//# sourceMappingURL=model-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-router.d.ts","sourceRoot":"","sources":["../src/model-router.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,IAAI,EAAE,SAAS,CAAC;QAChB,QAAQ,EAAE,SAAS,CAAC;QACpB,KAAK,EAAE,SAAS,CAAC;KAClB,CAAC;IACF,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AA8ID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GAAG;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA2FxE;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GACA,aAAa,CA+Bf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAClC,SAAS,CAGX;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAE9D"}
|