@stackmemoryai/stackmemory 0.1.0 → 0.2.1

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 (77) hide show
  1. package/dist/scripts/initialize.js +15 -15
  2. package/dist/scripts/initialize.js.map +1 -1
  3. package/dist/scripts/status.js +21 -11
  4. package/dist/scripts/status.js.map +1 -1
  5. package/dist/src/beads/beads-task-store.d.ts +117 -0
  6. package/dist/src/beads/beads-task-store.d.ts.map +1 -0
  7. package/dist/src/beads/beads-task-store.js +318 -0
  8. package/dist/src/beads/beads-task-store.js.map +1 -0
  9. package/dist/src/beads/task-aware-context.d.ts +103 -0
  10. package/dist/src/beads/task-aware-context.d.ts.map +1 -0
  11. package/dist/src/beads/task-aware-context.js +395 -0
  12. package/dist/src/beads/task-aware-context.js.map +1 -0
  13. package/dist/src/beads-task-store.d.ts +117 -0
  14. package/dist/src/beads-task-store.d.ts.map +1 -0
  15. package/dist/src/beads-task-store.js +318 -0
  16. package/dist/src/beads-task-store.js.map +1 -0
  17. package/dist/src/cli/cli.d.ts +7 -0
  18. package/dist/src/cli/cli.d.ts.map +1 -0
  19. package/dist/src/cli/cli.js +471 -0
  20. package/dist/src/cli/cli.js.map +1 -0
  21. package/dist/src/core/error-handler.d.ts +46 -0
  22. package/dist/src/core/error-handler.d.ts.map +1 -0
  23. package/dist/src/core/error-handler.js +212 -0
  24. package/dist/src/core/error-handler.js.map +1 -0
  25. package/dist/src/core/frame-manager.d.ts +106 -0
  26. package/dist/src/core/frame-manager.d.ts.map +1 -0
  27. package/dist/src/core/frame-manager.js +387 -0
  28. package/dist/src/core/frame-manager.js.map +1 -0
  29. package/dist/src/core/logger.d.ts +24 -0
  30. package/dist/src/core/logger.d.ts.map +1 -0
  31. package/dist/src/core/logger.js +121 -0
  32. package/dist/src/core/logger.js.map +1 -0
  33. package/dist/src/core/logger.test.d.ts +2 -0
  34. package/dist/src/core/logger.test.d.ts.map +1 -0
  35. package/dist/src/core/logger.test.js +31 -0
  36. package/dist/src/core/logger.test.js.map +1 -0
  37. package/dist/src/index.d.ts +4 -4
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +4 -4
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/integrations/linear-auth.d.ts +99 -0
  42. package/dist/src/integrations/linear-auth.d.ts.map +1 -0
  43. package/dist/src/integrations/linear-auth.js +319 -0
  44. package/dist/src/integrations/linear-auth.js.map +1 -0
  45. package/dist/src/integrations/linear-auto-sync.d.ts +77 -0
  46. package/dist/src/integrations/linear-auto-sync.d.ts.map +1 -0
  47. package/dist/src/integrations/linear-auto-sync.js +268 -0
  48. package/dist/src/integrations/linear-auto-sync.js.map +1 -0
  49. package/dist/src/integrations/linear-client.d.ts +86 -0
  50. package/dist/src/integrations/linear-client.d.ts.map +1 -0
  51. package/dist/src/integrations/linear-client.js +275 -0
  52. package/dist/src/integrations/linear-client.js.map +1 -0
  53. package/dist/src/integrations/linear-config.d.ts +51 -0
  54. package/dist/src/integrations/linear-config.d.ts.map +1 -0
  55. package/dist/src/integrations/linear-config.js +103 -0
  56. package/dist/src/integrations/linear-config.js.map +1 -0
  57. package/dist/src/integrations/linear-sync.d.ts +95 -0
  58. package/dist/src/integrations/linear-sync.d.ts.map +1 -0
  59. package/dist/src/integrations/linear-sync.js +340 -0
  60. package/dist/src/integrations/linear-sync.js.map +1 -0
  61. package/dist/src/mcp/mcp-server.d.ts +38 -0
  62. package/dist/src/mcp/mcp-server.d.ts.map +1 -0
  63. package/dist/src/mcp/mcp-server.js +812 -0
  64. package/dist/src/mcp/mcp-server.js.map +1 -0
  65. package/dist/src/pebbles/pebbles-task-store.d.ts +117 -0
  66. package/dist/src/pebbles/pebbles-task-store.d.ts.map +1 -0
  67. package/dist/src/pebbles/pebbles-task-store.js +335 -0
  68. package/dist/src/pebbles/pebbles-task-store.js.map +1 -0
  69. package/dist/src/pebbles/task-aware-context.d.ts +103 -0
  70. package/dist/src/pebbles/task-aware-context.d.ts.map +1 -0
  71. package/dist/src/pebbles/task-aware-context.js +412 -0
  72. package/dist/src/pebbles/task-aware-context.js.map +1 -0
  73. package/dist/src/task-aware-context.d.ts +103 -0
  74. package/dist/src/task-aware-context.d.ts.map +1 -0
  75. package/dist/src/task-aware-context.js +395 -0
  76. package/dist/src/task-aware-context.js.map +1 -0
  77. package/package.json +41 -9
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Beads-Inspired Task Storage
3
+ * Git-native JSONL storage with SQLite cache for tasks
4
+ */
5
+ import { createHash } from 'crypto';
6
+ import { appendFile, existsSync, mkdirSync, readFileSync } from 'fs';
7
+ import { join } from 'path';
8
+ import { logger } from './logger.js';
9
+ export class BeadsTaskStore {
10
+ db;
11
+ projectRoot;
12
+ tasksFile;
13
+ cacheFile;
14
+ constructor(projectRoot, db) {
15
+ this.projectRoot = projectRoot;
16
+ this.db = db;
17
+ // Ensure .stackmemory directory exists
18
+ const stackmemoryDir = join(projectRoot, '.stackmemory');
19
+ if (!existsSync(stackmemoryDir)) {
20
+ mkdirSync(stackmemoryDir, { recursive: true });
21
+ }
22
+ this.tasksFile = join(stackmemoryDir, 'tasks.jsonl');
23
+ this.cacheFile = join(stackmemoryDir, 'cache.db');
24
+ this.initializeCache();
25
+ this.loadFromJSONL();
26
+ }
27
+ initializeCache() {
28
+ this.db.exec(`
29
+ CREATE TABLE IF NOT EXISTS task_cache (
30
+ id TEXT PRIMARY KEY,
31
+ type TEXT NOT NULL,
32
+ timestamp INTEGER NOT NULL,
33
+ parent_id TEXT,
34
+ frame_id TEXT NOT NULL,
35
+ title TEXT NOT NULL,
36
+ description TEXT,
37
+ status TEXT NOT NULL,
38
+ priority TEXT NOT NULL,
39
+ assignee TEXT,
40
+ created_at INTEGER NOT NULL,
41
+ started_at INTEGER,
42
+ completed_at INTEGER,
43
+ estimated_effort INTEGER,
44
+ actual_effort INTEGER,
45
+ depends_on TEXT DEFAULT '[]',
46
+ blocks TEXT DEFAULT '[]',
47
+ tags TEXT DEFAULT '[]',
48
+ external_refs TEXT DEFAULT '{}',
49
+ context_score REAL DEFAULT 0.5,
50
+ last_accessed INTEGER
51
+ );
52
+
53
+ CREATE INDEX IF NOT EXISTS idx_task_status ON task_cache(status);
54
+ CREATE INDEX IF NOT EXISTS idx_task_priority ON task_cache(priority);
55
+ CREATE INDEX IF NOT EXISTS idx_task_frame ON task_cache(frame_id);
56
+ CREATE INDEX IF NOT EXISTS idx_task_timestamp ON task_cache(timestamp);
57
+ CREATE INDEX IF NOT EXISTS idx_task_parent ON task_cache(parent_id);
58
+ `);
59
+ }
60
+ /**
61
+ * Load existing tasks from JSONL into SQLite cache
62
+ */
63
+ loadFromJSONL() {
64
+ if (!existsSync(this.tasksFile))
65
+ return;
66
+ const content = readFileSync(this.tasksFile, 'utf-8');
67
+ const lines = content.split('\n').filter(line => line.trim());
68
+ let loaded = 0;
69
+ for (const line of lines) {
70
+ try {
71
+ const task = JSON.parse(line);
72
+ this.upsertToCache(task);
73
+ loaded++;
74
+ }
75
+ catch (error) {
76
+ logger.warn('Failed to parse task line', { line, error });
77
+ }
78
+ }
79
+ logger.info('Loaded tasks from JSONL', { loaded, file: this.tasksFile });
80
+ }
81
+ /**
82
+ * Create a new task with content-hash ID
83
+ */
84
+ createTask(options) {
85
+ const now = Math.floor(Date.now() / 1000);
86
+ // Create content for hash (ensures deterministic ID)
87
+ const content = `${options.title}:${options.frameId}:${now}:${Math.random()}`;
88
+ const id = this.generateTaskId(content);
89
+ const task = {
90
+ id,
91
+ type: 'task_create',
92
+ timestamp: now,
93
+ parent_id: options.parentId,
94
+ frame_id: options.frameId,
95
+ title: options.title,
96
+ description: options.description,
97
+ status: 'pending',
98
+ priority: options.priority || 'medium',
99
+ assignee: options.assignee,
100
+ created_at: now,
101
+ estimated_effort: options.estimatedEffort,
102
+ depends_on: options.dependsOn || [],
103
+ blocks: [],
104
+ tags: options.tags || [],
105
+ context_score: 0.5
106
+ };
107
+ this.appendTask(task);
108
+ return id;
109
+ }
110
+ /**
111
+ * Update task status with new event
112
+ */
113
+ updateTaskStatus(taskId, newStatus, reason) {
114
+ const existing = this.getTask(taskId);
115
+ if (!existing)
116
+ throw new Error(`Task not found: ${taskId}`);
117
+ const now = Math.floor(Date.now() / 1000);
118
+ const updates = {
119
+ status: newStatus,
120
+ timestamp: now
121
+ };
122
+ // Automatic time tracking
123
+ if (newStatus === 'in_progress' && existing.status === 'pending') {
124
+ updates.started_at = now;
125
+ updates.type = 'task_update';
126
+ }
127
+ else if (newStatus === 'completed' && existing.status === 'in_progress') {
128
+ updates.completed_at = now;
129
+ updates.type = 'task_complete';
130
+ if (existing.started_at) {
131
+ updates.actual_effort = Math.floor((now - existing.started_at) / 60); // Minutes
132
+ }
133
+ }
134
+ else if (newStatus === 'blocked') {
135
+ updates.type = 'task_block';
136
+ }
137
+ const updatedTask = { ...existing, ...updates };
138
+ this.appendTask(updatedTask);
139
+ }
140
+ /**
141
+ * Add dependency relationship
142
+ */
143
+ addDependency(taskId, dependsOnId) {
144
+ const task = this.getTask(taskId);
145
+ const dependsOnTask = this.getTask(dependsOnId);
146
+ if (!task)
147
+ throw new Error(`Task not found: ${taskId}`);
148
+ if (!dependsOnTask)
149
+ throw new Error(`Dependency task not found: ${dependsOnId}`);
150
+ // Update task dependencies
151
+ const updatedTask = {
152
+ ...task,
153
+ depends_on: [...new Set([...task.depends_on, dependsOnId])],
154
+ timestamp: Math.floor(Date.now() / 1000),
155
+ type: 'task_update'
156
+ };
157
+ // Update blocking task
158
+ const updatedBlockingTask = {
159
+ ...dependsOnTask,
160
+ blocks: [...new Set([...dependsOnTask.blocks, taskId])],
161
+ timestamp: Math.floor(Date.now() / 1000),
162
+ type: 'task_update'
163
+ };
164
+ this.appendTask(updatedTask);
165
+ this.appendTask(updatedBlockingTask);
166
+ }
167
+ /**
168
+ * Get current active tasks
169
+ */
170
+ getActiveTasks(frameId) {
171
+ let query = `
172
+ SELECT * FROM task_cache
173
+ WHERE status IN ('pending', 'in_progress')
174
+ `;
175
+ const params = [];
176
+ if (frameId) {
177
+ query += ` AND frame_id = ?`;
178
+ params.push(frameId);
179
+ }
180
+ query += ` ORDER BY priority DESC, created_at ASC`;
181
+ const rows = this.db.prepare(query).all(...params);
182
+ return this.hydrateTasks(rows);
183
+ }
184
+ /**
185
+ * Get task by ID (latest version)
186
+ */
187
+ getTask(taskId) {
188
+ const row = this.db.prepare(`
189
+ SELECT * FROM task_cache WHERE id = ?
190
+ `).get(taskId);
191
+ return row ? this.hydrateTask(row) : undefined;
192
+ }
193
+ /**
194
+ * Get tasks that are blocking other tasks
195
+ */
196
+ getBlockingTasks() {
197
+ const rows = this.db.prepare(`
198
+ SELECT * FROM task_cache
199
+ WHERE JSON_ARRAY_LENGTH(blocks) > 0
200
+ AND status NOT IN ('completed', 'cancelled')
201
+ ORDER BY priority DESC
202
+ `).all();
203
+ return this.hydrateTasks(rows);
204
+ }
205
+ /**
206
+ * Get metrics for current project
207
+ */
208
+ getMetrics() {
209
+ const statusCounts = this.db.prepare(`
210
+ SELECT status, COUNT(*) as count
211
+ FROM task_cache
212
+ GROUP BY status
213
+ `).all();
214
+ const priorityCounts = this.db.prepare(`
215
+ SELECT priority, COUNT(*) as count
216
+ FROM task_cache
217
+ GROUP BY priority
218
+ `).all();
219
+ const totalTasks = statusCounts.reduce((sum, s) => sum + s.count, 0);
220
+ const completedTasks = statusCounts.find(s => s.status === 'completed')?.count || 0;
221
+ const blockedTasks = statusCounts.find(s => s.status === 'blocked')?.count || 0;
222
+ // Calculate effort accuracy
223
+ const effortRows = this.db.prepare(`
224
+ SELECT estimated_effort, actual_effort
225
+ FROM task_cache
226
+ WHERE estimated_effort IS NOT NULL
227
+ AND actual_effort IS NOT NULL
228
+ `).all();
229
+ let avgEffortAccuracy = 0;
230
+ if (effortRows.length > 0) {
231
+ const accuracies = effortRows.map(r => 1 - Math.abs(r.estimated_effort - r.actual_effort) / Math.max(r.estimated_effort, 1));
232
+ avgEffortAccuracy = accuracies.reduce((sum, acc) => sum + acc, 0) / accuracies.length;
233
+ }
234
+ return {
235
+ total_tasks: totalTasks,
236
+ by_status: Object.fromEntries(statusCounts.map(s => [s.status, s.count])),
237
+ by_priority: Object.fromEntries(priorityCounts.map(p => [p.priority, p.count])),
238
+ completion_rate: totalTasks > 0 ? completedTasks / totalTasks : 0,
239
+ avg_effort_accuracy: avgEffortAccuracy,
240
+ blocked_tasks: blockedTasks,
241
+ overdue_tasks: 0 // TODO: implement due dates
242
+ };
243
+ }
244
+ /**
245
+ * Export tasks for Linear integration (Phase 2)
246
+ */
247
+ exportForLinear() {
248
+ const tasks = this.db.prepare(`
249
+ SELECT * FROM task_cache
250
+ WHERE external_refs IS NULL OR JSON_EXTRACT(external_refs, '$.linear') IS NULL
251
+ ORDER BY created_at ASC
252
+ `).all();
253
+ return tasks.map(task => ({
254
+ title: task.title,
255
+ description: task.description,
256
+ priority: this.mapPriorityToLinear(task.priority),
257
+ status: this.mapStatusToLinear(task.status),
258
+ estimate: task.estimated_effort,
259
+ dependencies: JSON.parse(task.depends_on || '[]')
260
+ }));
261
+ }
262
+ // Private methods
263
+ appendTask(task) {
264
+ // Append to JSONL file (git-tracked source of truth)
265
+ const jsonLine = JSON.stringify(task) + '\n';
266
+ appendFile(this.tasksFile, jsonLine, (err) => {
267
+ if (err)
268
+ logger.error('Failed to append task to JSONL', { error: err, taskId: task.id });
269
+ });
270
+ // Update SQLite cache (for fast queries)
271
+ this.upsertToCache(task);
272
+ logger.info('Appended task', {
273
+ id: task.id,
274
+ type: task.type,
275
+ title: task.title,
276
+ status: task.status
277
+ });
278
+ }
279
+ upsertToCache(task) {
280
+ this.db.prepare(`
281
+ INSERT OR REPLACE INTO task_cache (
282
+ id, type, timestamp, parent_id, frame_id, title, description,
283
+ status, priority, assignee, created_at, started_at, completed_at,
284
+ estimated_effort, actual_effort, depends_on, blocks, tags,
285
+ external_refs, context_score, last_accessed
286
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
287
+ `).run(task.id, task.type, task.timestamp, task.parent_id, task.frame_id, task.title, task.description, task.status, task.priority, task.assignee, task.created_at, task.started_at, task.completed_at, task.estimated_effort, task.actual_effort, JSON.stringify(task.depends_on), JSON.stringify(task.blocks), JSON.stringify(task.tags), JSON.stringify(task.external_refs || {}), task.context_score, task.last_accessed);
288
+ }
289
+ generateTaskId(content) {
290
+ const hash = createHash('sha256').update(content).digest('hex');
291
+ return `tsk-${hash.substring(0, 8)}`;
292
+ }
293
+ hydrateTask = (row) => ({
294
+ ...row,
295
+ depends_on: JSON.parse(row.depends_on || '[]'),
296
+ blocks: JSON.parse(row.blocks || '[]'),
297
+ tags: JSON.parse(row.tags || '[]'),
298
+ external_refs: JSON.parse(row.external_refs || '{}')
299
+ });
300
+ hydrateTasks(rows) {
301
+ return rows.map(this.hydrateTask);
302
+ }
303
+ mapPriorityToLinear(priority) {
304
+ const map = { low: 1, medium: 2, high: 3, urgent: 4 };
305
+ return map[priority] || 2;
306
+ }
307
+ mapStatusToLinear(status) {
308
+ const map = {
309
+ pending: 'Backlog',
310
+ in_progress: 'In Progress',
311
+ completed: 'Done',
312
+ blocked: 'Blocked',
313
+ cancelled: 'Cancelled'
314
+ };
315
+ return map[status] || 'Backlog';
316
+ }
317
+ }
318
+ //# sourceMappingURL=beads-task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-task-store.js","sourceRoot":"","sources":["../../src/beads-task-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAoDrC,MAAM,OAAO,cAAc;IACjB,EAAE,CAAoB;IACtB,WAAW,CAAS;IACpB,SAAS,CAAS;IAClB,SAAS,CAAS;IAE1B,YAAY,WAAmB,EAAE,EAAqB;QACpD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,uCAAuC;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA8BZ,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QAExC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9D,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACzB,MAAM,EAAE,CAAC;YACX,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,OAUjB;QACC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1C,qDAAqD;QACrD,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9E,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAExC,MAAM,IAAI,GAAc;YACtB,EAAE;YACF,IAAI,EAAE,aAAa;YACnB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,OAAO,CAAC,QAAQ;YAC3B,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;YACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,GAAG;YACf,gBAAgB,EAAE,OAAO,CAAC,eAAe;YACzC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YACnC,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;YACxB,aAAa,EAAE,GAAG;SACnB,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,MAAc,EAAE,SAAqB,EAAE,MAAe;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAuB;YAClC,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,0BAA0B;QAC1B,IAAI,SAAS,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;YACzB,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC;QAC/B,CAAC;aAAM,IAAI,SAAS,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC1E,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC;YAC3B,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC;YAC/B,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;YAClF,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC9B,CAAC;QAED,MAAM,WAAW,GAAc,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,MAAc,EAAE,WAAmB;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAEjF,2BAA2B;QAC3B,MAAM,WAAW,GAAc;YAC7B,GAAG,IAAI;YACP,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YAC3D,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACxC,IAAI,EAAE,aAAa;SACpB,CAAC;QAEF,uBAAuB;QACvB,MAAM,mBAAmB,GAAc;YACrC,GAAG,aAAa;YAChB,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACvD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACxC,IAAI,EAAE,aAAa;SACpB,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,OAAgB;QACpC,IAAI,KAAK,GAAG;;;KAGX,CAAC;QACF,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,mBAAmB,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,KAAK,IAAI,yCAAyC,CAAC;QAEnD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAU,CAAC;QAC5D,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,MAAc;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE3B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAQ,CAAC;QAEtB,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK5B,CAAC,CAAC,GAAG,EAAW,CAAC;QAElB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,UAAU;QACf,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIpC,CAAC,CAAC,GAAG,EAA6C,CAAC;QAEpD,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAItC,CAAC,CAAC,GAAG,EAAiD,CAAC;QAExD,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAEhF,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAKlC,CAAC,CAAC,GAAG,EAA2D,CAAC;QAElE,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CACrF,CAAC;YACF,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QACxF,CAAC;QAED,OAAO;YACL,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ;YAChF,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ;YACtF,eAAe,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACjE,mBAAmB,EAAE,iBAAiB;YACtC,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,CAAC,CAAC,4BAA4B;SAC9C,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,eAAe;QAQpB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI7B,CAAC,CAAC,GAAG,EAAW,CAAC;QAElB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjD,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3C,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;SAClD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kBAAkB;IACV,UAAU,CAAC,IAAe;QAChC,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3C,IAAI,GAAG;gBAAE,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,IAAe;QACnC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;KAOf,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EACjE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EACnD,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,EACnE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CACvC,CAAC;IACJ,CAAC;IAEO,cAAc,CAAC,OAAe;QACpC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChE,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAEO,WAAW,GAAG,CAAC,GAAQ,EAAa,EAAE,CAAC,CAAC;QAC9C,GAAG,GAAG;QACN,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;QAC9C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC;QACtC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QAClC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC;KACrD,CAAC,CAAC;IAEK,YAAY,CAAC,IAAW;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAEO,mBAAmB,CAAC,QAAsB;QAChD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACtD,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEO,iBAAiB,CAAC,MAAkB;QAC1C,MAAM,GAAG,GAAG;YACV,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,aAAa;YAC1B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,WAAW;SACvB,CAAC;QACF,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * StackMemory CLI
4
+ * Command-line interface for StackMemory operations
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}