@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.
Files changed (112) hide show
  1. package/README.md +258 -105
  2. package/dist/branching.d.ts +56 -0
  3. package/dist/branching.d.ts.map +1 -0
  4. package/dist/branching.js +211 -0
  5. package/dist/branching.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +235 -2
  8. package/dist/cli.js.map +1 -1
  9. package/dist/completion.d.ts +75 -0
  10. package/dist/completion.d.ts.map +1 -0
  11. package/dist/completion.js +234 -0
  12. package/dist/completion.js.map +1 -0
  13. package/dist/config.d.ts +36 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +90 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/diff.d.ts +73 -0
  18. package/dist/diff.d.ts.map +1 -0
  19. package/dist/diff.js +317 -0
  20. package/dist/diff.js.map +1 -0
  21. package/dist/errors.d.ts +41 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +199 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/file-watcher.d.ts +91 -0
  26. package/dist/file-watcher.d.ts.map +1 -0
  27. package/dist/file-watcher.js +269 -0
  28. package/dist/file-watcher.js.map +1 -0
  29. package/dist/files.d.ts +49 -0
  30. package/dist/files.d.ts.map +1 -0
  31. package/dist/files.js +191 -0
  32. package/dist/files.js.map +1 -0
  33. package/dist/fuzzy-search.d.ts +75 -0
  34. package/dist/fuzzy-search.d.ts.map +1 -0
  35. package/dist/fuzzy-search.js +240 -0
  36. package/dist/fuzzy-search.js.map +1 -0
  37. package/dist/hooks.d.ts +79 -0
  38. package/dist/hooks.d.ts.map +1 -0
  39. package/dist/hooks.js +271 -0
  40. package/dist/hooks.js.map +1 -0
  41. package/dist/keyboard.d.ts +57 -0
  42. package/dist/keyboard.d.ts.map +1 -0
  43. package/dist/keyboard.js +265 -0
  44. package/dist/keyboard.js.map +1 -0
  45. package/dist/markdown.d.ts +14 -0
  46. package/dist/markdown.d.ts.map +1 -0
  47. package/dist/markdown.js +248 -0
  48. package/dist/markdown.js.map +1 -0
  49. package/dist/mcp.d.ts +90 -0
  50. package/dist/mcp.d.ts.map +1 -0
  51. package/dist/mcp.js +290 -0
  52. package/dist/mcp.js.map +1 -0
  53. package/dist/memory.d.ts +104 -0
  54. package/dist/memory.d.ts.map +1 -0
  55. package/dist/memory.js +394 -0
  56. package/dist/memory.js.map +1 -0
  57. package/dist/model-router.d.ts +67 -0
  58. package/dist/model-router.d.ts.map +1 -0
  59. package/dist/model-router.js +289 -0
  60. package/dist/model-router.js.map +1 -0
  61. package/dist/parallel-tools.d.ts +51 -0
  62. package/dist/parallel-tools.d.ts.map +1 -0
  63. package/dist/parallel-tools.js +278 -0
  64. package/dist/parallel-tools.js.map +1 -0
  65. package/dist/project-config.d.ts +84 -0
  66. package/dist/project-config.d.ts.map +1 -0
  67. package/dist/project-config.js +250 -0
  68. package/dist/project-config.js.map +1 -0
  69. package/dist/providers.d.ts +10 -2
  70. package/dist/providers.d.ts.map +1 -1
  71. package/dist/providers.js +240 -38
  72. package/dist/providers.js.map +1 -1
  73. package/dist/risk.d.ts +31 -0
  74. package/dist/risk.d.ts.map +1 -0
  75. package/dist/risk.js +367 -0
  76. package/dist/risk.js.map +1 -0
  77. package/dist/sandbox.d.ts +49 -0
  78. package/dist/sandbox.d.ts.map +1 -0
  79. package/dist/sandbox.js +347 -0
  80. package/dist/sandbox.js.map +1 -0
  81. package/dist/skills.d.ts +71 -0
  82. package/dist/skills.d.ts.map +1 -0
  83. package/dist/skills.js +383 -0
  84. package/dist/skills.js.map +1 -0
  85. package/dist/storage.d.ts +139 -0
  86. package/dist/storage.d.ts.map +1 -0
  87. package/dist/storage.js +508 -0
  88. package/dist/storage.js.map +1 -0
  89. package/dist/streaming.d.ts +94 -0
  90. package/dist/streaming.d.ts.map +1 -0
  91. package/dist/streaming.js +305 -0
  92. package/dist/streaming.js.map +1 -0
  93. package/dist/summarization.d.ts +76 -0
  94. package/dist/summarization.d.ts.map +1 -0
  95. package/dist/summarization.js +242 -0
  96. package/dist/summarization.js.map +1 -0
  97. package/dist/themes.d.ts +110 -0
  98. package/dist/themes.d.ts.map +1 -0
  99. package/dist/themes.js +329 -0
  100. package/dist/themes.js.map +1 -0
  101. package/dist/tools.d.ts.map +1 -1
  102. package/dist/tools.js +335 -1
  103. package/dist/tools.js.map +1 -1
  104. package/dist/types.d.ts +56 -1
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/types.js +105 -0
  107. package/dist/types.js.map +1 -1
  108. package/dist/ui-cli.d.ts +9 -2
  109. package/dist/ui-cli.d.ts.map +1 -1
  110. package/dist/ui-cli.js +1315 -220
  111. package/dist/ui-cli.js.map +1 -1
  112. package/package.json +1 -1
@@ -0,0 +1,508 @@
1
+ /**
2
+ * Calliope CLI - Storage System
3
+ *
4
+ * Manages ~/.calliope-cli/ directory structure for sessions, todos, and history.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ // ============================================================================
10
+ // Paths
11
+ // ============================================================================
12
+ const CALLIOPE_DIR = path.join(os.homedir(), '.calliope-cli');
13
+ export const paths = {
14
+ root: CALLIOPE_DIR,
15
+ config: path.join(CALLIOPE_DIR, 'config.json'),
16
+ sessions: path.join(CALLIOPE_DIR, 'sessions'),
17
+ currentSession: path.join(CALLIOPE_DIR, 'sessions', 'current'),
18
+ todos: path.join(CALLIOPE_DIR, 'todos'),
19
+ globalTodos: path.join(CALLIOPE_DIR, 'todos', 'global.json'),
20
+ projectTodos: path.join(CALLIOPE_DIR, 'todos', 'by-project'),
21
+ templates: path.join(CALLIOPE_DIR, 'templates'),
22
+ planTemplates: path.join(CALLIOPE_DIR, 'templates', 'plans'),
23
+ plugins: path.join(CALLIOPE_DIR, 'plugins'),
24
+ history: path.join(CALLIOPE_DIR, 'history'),
25
+ commandHistory: path.join(CALLIOPE_DIR, 'history', 'commands.txt'),
26
+ };
27
+ // ============================================================================
28
+ // Initialization
29
+ // ============================================================================
30
+ /**
31
+ * Initialize the storage directory structure
32
+ */
33
+ export function initStorage() {
34
+ const dirs = [
35
+ paths.root,
36
+ paths.sessions,
37
+ paths.todos,
38
+ paths.projectTodos,
39
+ paths.templates,
40
+ paths.planTemplates,
41
+ paths.plugins,
42
+ paths.history,
43
+ ];
44
+ for (const dir of dirs) {
45
+ if (!fs.existsSync(dir)) {
46
+ fs.mkdirSync(dir, { recursive: true });
47
+ }
48
+ }
49
+ // Initialize global todos if not exists (line-based format)
50
+ const globalTodosFile = paths.globalTodos.replace('.json', '.txt');
51
+ if (!fs.existsSync(globalTodosFile)) {
52
+ fs.writeFileSync(globalTodosFile, '');
53
+ }
54
+ }
55
+ // ============================================================================
56
+ // JSON Helpers (for config/session metadata)
57
+ // ============================================================================
58
+ function readJSON(filePath, defaultValue) {
59
+ try {
60
+ if (fs.existsSync(filePath)) {
61
+ const content = fs.readFileSync(filePath, 'utf-8');
62
+ return JSON.parse(content);
63
+ }
64
+ }
65
+ catch {
66
+ // Ignore parse errors, return default
67
+ }
68
+ return defaultValue;
69
+ }
70
+ function writeJSON(filePath, data) {
71
+ const dir = path.dirname(filePath);
72
+ if (!fs.existsSync(dir)) {
73
+ fs.mkdirSync(dir, { recursive: true });
74
+ }
75
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
76
+ }
77
+ // ============================================================================
78
+ // Line-based Format Helpers (for chat/todos - more token efficient)
79
+ // ============================================================================
80
+ /**
81
+ * Chat format (human readable, minimal tokens):
82
+ * @2025-01-09T12:34:56 id=msg_123
83
+ * role: content here
84
+ * can span multiple lines
85
+ *
86
+ * @2025-01-09T12:34:57 id=msg_124
87
+ * assistant: response here
88
+ */
89
+ function formatChatMessage(msg) {
90
+ const header = `@${msg.timestamp} id=${msg.id}${msg.toolCallId ? ` tool=${msg.toolCallId}` : ''}`;
91
+ const content = `${msg.role}: ${msg.content}`;
92
+ return `${header}\n${content}\n`;
93
+ }
94
+ function parseChatLine(block) {
95
+ const lines = block.trim().split('\n');
96
+ if (lines.length < 2)
97
+ return null;
98
+ // Parse header: @timestamp id=xxx [tool=yyy]
99
+ const headerMatch = lines[0].match(/^@(\S+)\s+id=(\S+)(?:\s+tool=(\S+))?$/);
100
+ if (!headerMatch)
101
+ return null;
102
+ const [, timestamp, id, toolCallId] = headerMatch;
103
+ // Parse content: role: text
104
+ const contentLine = lines.slice(1).join('\n');
105
+ const roleMatch = contentLine.match(/^(user|assistant|system|tool):\s*([\s\S]*)$/);
106
+ if (!roleMatch)
107
+ return null;
108
+ const [, role, content] = roleMatch;
109
+ return {
110
+ id,
111
+ timestamp,
112
+ role: role,
113
+ content: content.trim(),
114
+ toolCallId,
115
+ };
116
+ }
117
+ function readChatHistory(filePath) {
118
+ if (!fs.existsSync(filePath))
119
+ return [];
120
+ try {
121
+ const content = fs.readFileSync(filePath, 'utf-8');
122
+ const blocks = content.split(/\n(?=@\d)/); // Split on newline followed by @timestamp
123
+ const messages = [];
124
+ for (const block of blocks) {
125
+ if (!block.trim())
126
+ continue;
127
+ const msg = parseChatLine(block);
128
+ if (msg)
129
+ messages.push(msg);
130
+ }
131
+ return messages;
132
+ }
133
+ catch {
134
+ return [];
135
+ }
136
+ }
137
+ function appendChatMessage(filePath, msg) {
138
+ const dir = path.dirname(filePath);
139
+ if (!fs.existsSync(dir)) {
140
+ fs.mkdirSync(dir, { recursive: true });
141
+ }
142
+ fs.appendFileSync(filePath, formatChatMessage(msg) + '\n');
143
+ }
144
+ /**
145
+ * Todo format (simple line-based):
146
+ * id|status|priority|tags|createdAt|completedAt|content
147
+ */
148
+ function formatTodo(todo) {
149
+ const tags = todo.tags.join(',');
150
+ const completed = todo.completedAt || '';
151
+ // Escape | in content
152
+ const content = todo.content.replace(/\|/g, '\\|').replace(/\n/g, '\\n');
153
+ return `${todo.id}|${todo.status}|${todo.priority}|${tags}|${todo.createdAt}|${completed}|${content}`;
154
+ }
155
+ function parseTodoLine(line) {
156
+ const parts = line.split('|');
157
+ if (parts.length < 7)
158
+ return null;
159
+ const [id, status, priority, tags, createdAt, completedAt, ...contentParts] = parts;
160
+ const content = contentParts.join('|').replace(/\\n/g, '\n').replace(/\\\|/g, '|');
161
+ return {
162
+ id,
163
+ status: status,
164
+ priority: priority,
165
+ tags: tags ? tags.split(',') : [],
166
+ createdAt,
167
+ completedAt: completedAt || undefined,
168
+ content,
169
+ };
170
+ }
171
+ function readTodos(filePath) {
172
+ if (!fs.existsSync(filePath))
173
+ return [];
174
+ try {
175
+ const content = fs.readFileSync(filePath, 'utf-8');
176
+ const lines = content.trim().split('\n');
177
+ const todos = [];
178
+ for (const line of lines) {
179
+ if (!line.trim())
180
+ continue;
181
+ const todo = parseTodoLine(line);
182
+ if (todo)
183
+ todos.push(todo);
184
+ }
185
+ return todos;
186
+ }
187
+ catch {
188
+ return [];
189
+ }
190
+ }
191
+ function writeTodos(filePath, todos) {
192
+ const dir = path.dirname(filePath);
193
+ if (!fs.existsSync(dir)) {
194
+ fs.mkdirSync(dir, { recursive: true });
195
+ }
196
+ const content = todos.map(formatTodo).join('\n') + (todos.length > 0 ? '\n' : '');
197
+ fs.writeFileSync(filePath, content);
198
+ }
199
+ // ============================================================================
200
+ // Session Management
201
+ // ============================================================================
202
+ /**
203
+ * Get session directory for a project
204
+ */
205
+ function getSessionDir(projectPath) {
206
+ const projectName = path.basename(projectPath) || 'unnamed';
207
+ const date = new Date().toISOString().split('T')[0];
208
+ return path.join(paths.sessions, `${date}_${projectName}`);
209
+ }
210
+ /**
211
+ * Create or resume a session for the current project
212
+ */
213
+ export function getOrCreateSession(projectPath) {
214
+ initStorage();
215
+ const sessionDir = getSessionDir(projectPath);
216
+ const sessionFile = path.join(sessionDir, 'session.json');
217
+ // Check for existing session today
218
+ if (fs.existsSync(sessionFile)) {
219
+ const session = readJSON(sessionFile, null);
220
+ if (session) {
221
+ session.lastAccessedAt = new Date().toISOString();
222
+ writeJSON(sessionFile, session);
223
+ updateCurrentSymlink(sessionDir);
224
+ return session;
225
+ }
226
+ }
227
+ // Create new session
228
+ if (!fs.existsSync(sessionDir)) {
229
+ fs.mkdirSync(sessionDir, { recursive: true });
230
+ fs.mkdirSync(path.join(sessionDir, 'plans'), { recursive: true });
231
+ }
232
+ const session = {
233
+ id: `session_${Date.now()}`,
234
+ projectPath,
235
+ projectName: path.basename(projectPath) || 'unnamed',
236
+ createdAt: new Date().toISOString(),
237
+ lastAccessedAt: new Date().toISOString(),
238
+ messageCount: 0,
239
+ provider: '',
240
+ model: '',
241
+ };
242
+ writeJSON(sessionFile, session);
243
+ // Create empty chat history file (line-based format)
244
+ fs.writeFileSync(path.join(sessionDir, 'chat.log'), '');
245
+ // Create empty todos file (line-based format)
246
+ fs.writeFileSync(path.join(sessionDir, 'todos.txt'), '');
247
+ updateCurrentSymlink(sessionDir);
248
+ return session;
249
+ }
250
+ /**
251
+ * Update the 'current' symlink to point to active session
252
+ */
253
+ function updateCurrentSymlink(sessionDir) {
254
+ try {
255
+ if (fs.existsSync(paths.currentSession)) {
256
+ fs.unlinkSync(paths.currentSession);
257
+ }
258
+ fs.symlinkSync(sessionDir, paths.currentSession);
259
+ }
260
+ catch {
261
+ // Symlinks may not work on all platforms
262
+ }
263
+ }
264
+ /**
265
+ * Get current session info
266
+ */
267
+ export function getCurrentSession() {
268
+ try {
269
+ if (fs.existsSync(paths.currentSession)) {
270
+ const sessionFile = path.join(paths.currentSession, 'session.json');
271
+ return readJSON(sessionFile, null);
272
+ }
273
+ }
274
+ catch {
275
+ // Ignore errors
276
+ }
277
+ return null;
278
+ }
279
+ /**
280
+ * List recent sessions
281
+ */
282
+ export function listSessions(limit = 10) {
283
+ initStorage();
284
+ try {
285
+ const entries = fs.readdirSync(paths.sessions, { withFileTypes: true });
286
+ const sessions = [];
287
+ for (const entry of entries) {
288
+ if (entry.isDirectory() && entry.name !== 'current') {
289
+ const sessionFile = path.join(paths.sessions, entry.name, 'session.json');
290
+ const session = readJSON(sessionFile, null);
291
+ if (session) {
292
+ sessions.push(session);
293
+ }
294
+ }
295
+ }
296
+ // Sort by last accessed, newest first
297
+ sessions.sort((a, b) => new Date(b.lastAccessedAt).getTime() - new Date(a.lastAccessedAt).getTime());
298
+ return sessions.slice(0, limit);
299
+ }
300
+ catch {
301
+ return [];
302
+ }
303
+ }
304
+ // ============================================================================
305
+ // Chat History
306
+ // ============================================================================
307
+ /**
308
+ * Add a message to the current session's chat history
309
+ */
310
+ export function addChatMessage(message) {
311
+ const session = getCurrentSession();
312
+ if (!session)
313
+ return;
314
+ const historyFile = path.join(paths.currentSession, 'chat.log');
315
+ const newMessage = {
316
+ id: `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`,
317
+ timestamp: new Date().toISOString(),
318
+ ...message,
319
+ };
320
+ // Append to chat log (line-based format)
321
+ appendChatMessage(historyFile, newMessage);
322
+ // Update session message count
323
+ const sessionFile = path.join(paths.currentSession, 'session.json');
324
+ session.messageCount += 1;
325
+ session.lastAccessedAt = new Date().toISOString();
326
+ writeJSON(sessionFile, session);
327
+ }
328
+ /**
329
+ * Get chat history for current session
330
+ */
331
+ export function getChatHistory(limit) {
332
+ const historyFile = path.join(paths.currentSession, 'chat.log');
333
+ const history = readChatHistory(historyFile);
334
+ if (limit) {
335
+ return history.slice(-limit);
336
+ }
337
+ return history;
338
+ }
339
+ /**
340
+ * Search chat history
341
+ */
342
+ export function searchChatHistory(query) {
343
+ const history = getChatHistory();
344
+ const lower = query.toLowerCase();
345
+ return history.filter(msg => msg.content.toLowerCase().includes(lower));
346
+ }
347
+ // ============================================================================
348
+ // TODO Management
349
+ // ============================================================================
350
+ /**
351
+ * Get todos for current session
352
+ */
353
+ export function getSessionTodos() {
354
+ const todosFile = path.join(paths.currentSession, 'todos.txt');
355
+ return readTodos(todosFile);
356
+ }
357
+ /**
358
+ * Get global todos
359
+ */
360
+ export function getGlobalTodos() {
361
+ const globalTodosFile = paths.globalTodos.replace('.json', '.txt');
362
+ return readTodos(globalTodosFile);
363
+ }
364
+ /**
365
+ * Add a todo
366
+ */
367
+ export function addTodo(content, options = {}) {
368
+ const todo = {
369
+ id: `todo_${Date.now()}`,
370
+ content,
371
+ status: 'pending',
372
+ priority: options.priority || 'normal',
373
+ tags: options.tags || [],
374
+ createdAt: new Date().toISOString(),
375
+ };
376
+ if (options.global) {
377
+ const globalTodosFile = paths.globalTodos.replace('.json', '.txt');
378
+ const todos = getGlobalTodos();
379
+ todos.push(todo);
380
+ writeTodos(globalTodosFile, todos);
381
+ }
382
+ else {
383
+ const todosFile = path.join(paths.currentSession, 'todos.txt');
384
+ const todos = readTodos(todosFile);
385
+ todos.push(todo);
386
+ writeTodos(todosFile, todos);
387
+ }
388
+ return todo;
389
+ }
390
+ /**
391
+ * Update a todo's status
392
+ */
393
+ export function updateTodo(id, updates, global = false) {
394
+ const filePath = global
395
+ ? paths.globalTodos.replace('.json', '.txt')
396
+ : path.join(paths.currentSession, 'todos.txt');
397
+ const todos = readTodos(filePath);
398
+ const index = todos.findIndex(t => t.id === id);
399
+ if (index === -1)
400
+ return null;
401
+ const todo = todos[index];
402
+ Object.assign(todo, updates);
403
+ if (updates.status === 'completed') {
404
+ todo.completedAt = new Date().toISOString();
405
+ }
406
+ writeTodos(filePath, todos);
407
+ return todo;
408
+ }
409
+ /**
410
+ * Delete a todo
411
+ */
412
+ export function deleteTodo(id, global = false) {
413
+ const filePath = global
414
+ ? paths.globalTodos.replace('.json', '.txt')
415
+ : path.join(paths.currentSession, 'todos.txt');
416
+ const todos = readTodos(filePath);
417
+ const index = todos.findIndex(t => t.id === id);
418
+ if (index === -1)
419
+ return false;
420
+ todos.splice(index, 1);
421
+ writeTodos(filePath, todos);
422
+ return true;
423
+ }
424
+ // ============================================================================
425
+ // Plan Management
426
+ // ============================================================================
427
+ /**
428
+ * Get plans for current session
429
+ */
430
+ export function getPlans() {
431
+ const plansDir = path.join(paths.currentSession, 'plans');
432
+ if (!fs.existsSync(plansDir))
433
+ return [];
434
+ const plans = [];
435
+ const entries = fs.readdirSync(plansDir);
436
+ for (const entry of entries) {
437
+ if (entry.endsWith('.json') && entry !== 'active.json') {
438
+ const plan = readJSON(path.join(plansDir, entry), null);
439
+ if (plan)
440
+ plans.push(plan);
441
+ }
442
+ }
443
+ return plans.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
444
+ }
445
+ /**
446
+ * Save a plan
447
+ */
448
+ export function savePlan(plan) {
449
+ const plansDir = path.join(paths.currentSession, 'plans');
450
+ if (!fs.existsSync(plansDir)) {
451
+ fs.mkdirSync(plansDir, { recursive: true });
452
+ }
453
+ const planFile = path.join(plansDir, `${plan.id}.json`);
454
+ writeJSON(planFile, plan);
455
+ }
456
+ /**
457
+ * Get active plan
458
+ */
459
+ export function getActivePlan() {
460
+ const activeFile = path.join(paths.currentSession, 'plans', 'active.json');
461
+ return readJSON(activeFile, null);
462
+ }
463
+ /**
464
+ * Set active plan
465
+ */
466
+ export function setActivePlan(plan) {
467
+ const activeFile = path.join(paths.currentSession, 'plans', 'active.json');
468
+ if (plan) {
469
+ writeJSON(activeFile, plan);
470
+ }
471
+ else if (fs.existsSync(activeFile)) {
472
+ fs.unlinkSync(activeFile);
473
+ }
474
+ }
475
+ // ============================================================================
476
+ // Command History
477
+ // ============================================================================
478
+ /**
479
+ * Add a command to history
480
+ */
481
+ export function addCommandToHistory(command) {
482
+ initStorage();
483
+ const timestamp = new Date().toISOString();
484
+ const line = `${timestamp}\t${command}\n`;
485
+ fs.appendFileSync(paths.commandHistory, line);
486
+ }
487
+ /**
488
+ * Get command history
489
+ */
490
+ export function getCommandHistory(limit = 100) {
491
+ if (!fs.existsSync(paths.commandHistory))
492
+ return [];
493
+ const content = fs.readFileSync(paths.commandHistory, 'utf-8');
494
+ const lines = content.trim().split('\n');
495
+ return lines
496
+ .slice(-limit)
497
+ .map(line => line.split('\t')[1] || line)
498
+ .filter(Boolean);
499
+ }
500
+ /**
501
+ * Search command history
502
+ */
503
+ export function searchCommandHistory(query) {
504
+ const history = getCommandHistory(1000);
505
+ const lower = query.toLowerCase();
506
+ return history.filter(cmd => cmd.toLowerCase().includes(lower));
507
+ }
508
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Calliope CLI - Improved Streaming
3
+ *
4
+ * Word-by-word streaming with smooth output.
5
+ */
6
+ export interface StreamOptions {
7
+ wordsPerSecond?: number;
8
+ chunkSize?: number;
9
+ smoothing?: boolean;
10
+ preserveFormatting?: boolean;
11
+ }
12
+ export type StreamCallback = (text: string, isFinal: boolean) => void;
13
+ export declare class TokenBuffer {
14
+ private buffer;
15
+ private emitted;
16
+ private callback;
17
+ private options;
18
+ private emitTimer;
19
+ private lastEmitTime;
20
+ constructor(callback: StreamCallback, options?: StreamOptions);
21
+ /**
22
+ * Add tokens to buffer
23
+ */
24
+ push(token: string): void;
25
+ /**
26
+ * Schedule emission of buffered content
27
+ */
28
+ private scheduleEmit;
29
+ /**
30
+ * Emit buffered content
31
+ */
32
+ private emit;
33
+ /**
34
+ * Flush all remaining content
35
+ */
36
+ flush(): void;
37
+ /**
38
+ * Get all emitted content
39
+ */
40
+ getEmitted(): string;
41
+ /**
42
+ * Reset buffer
43
+ */
44
+ reset(): void;
45
+ }
46
+ /**
47
+ * Transform stream to add typing effect
48
+ */
49
+ export declare function createTypingStream(callback: StreamCallback, options?: StreamOptions): TokenBuffer;
50
+ /**
51
+ * Transform stream to accumulate and emit by sentence
52
+ */
53
+ export declare function createSentenceStream(callback: StreamCallback): {
54
+ push: (token: string) => void;
55
+ flush: () => void;
56
+ };
57
+ /**
58
+ * Transform stream to group by paragraphs
59
+ */
60
+ export declare function createParagraphStream(callback: StreamCallback): {
61
+ push: (token: string) => void;
62
+ flush: () => void;
63
+ };
64
+ export interface StreamStats {
65
+ startTime: number;
66
+ tokenCount: number;
67
+ charCount: number;
68
+ wordCount: number;
69
+ tokensPerSecond: number;
70
+ }
71
+ /**
72
+ * Track streaming statistics
73
+ */
74
+ export declare function createStreamStats(): {
75
+ track: (token: string) => void;
76
+ getStats: () => StreamStats;
77
+ reset: () => void;
78
+ };
79
+ /**
80
+ * Create a streaming progress indicator
81
+ */
82
+ export declare function createProgressIndicator(updateCallback: (indicator: string) => void): {
83
+ start: () => void;
84
+ update: (message?: string) => void;
85
+ stop: () => void;
86
+ };
87
+ /**
88
+ * Create blinking cursor for streaming
89
+ */
90
+ export declare function createCursorAnimation(updateCallback: (cursor: string) => void): {
91
+ start: () => void;
92
+ stop: () => void;
93
+ };
94
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAMtE,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAa;gBAErB,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,aAAkB;IAUjE;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,IAAI;IAyDZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,KAAK,IAAI,IAAI;CAQd;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAMb;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG;IAC9D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CA4BA;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG;IAC/D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAyBA;AAMD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAkCA;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAC1C;IACD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CA4BA;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACvC;IACD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAqBA"}