@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/storage.js
ADDED
|
@@ -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"}
|