@stackmemoryai/stackmemory 0.2.6 → 0.2.7

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 (203) hide show
  1. package/README.md +245 -83
  2. package/dist/scripts/cancel-duplicate-tasks.d.ts +7 -0
  3. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +1 -0
  4. package/dist/scripts/cancel-duplicate-tasks.js +171 -0
  5. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -0
  6. package/dist/scripts/list-linear-tasks.d.ts +6 -0
  7. package/dist/scripts/list-linear-tasks.d.ts.map +1 -0
  8. package/dist/scripts/list-linear-tasks.js +122 -0
  9. package/dist/scripts/list-linear-tasks.js.map +1 -0
  10. package/dist/scripts/merge-linear-duplicates-safe.d.ts +7 -0
  11. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +1 -0
  12. package/dist/scripts/merge-linear-duplicates-safe.js +265 -0
  13. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -0
  14. package/dist/scripts/merge-linear-duplicates.d.ts +7 -0
  15. package/dist/scripts/merge-linear-duplicates.d.ts.map +1 -0
  16. package/dist/scripts/merge-linear-duplicates.js +126 -0
  17. package/dist/scripts/merge-linear-duplicates.js.map +1 -0
  18. package/dist/scripts/show-linear-summary.d.ts +6 -0
  19. package/dist/scripts/show-linear-summary.d.ts.map +1 -0
  20. package/dist/scripts/show-linear-summary.js +117 -0
  21. package/dist/scripts/show-linear-summary.js.map +1 -0
  22. package/dist/src/cli/__tests__/index.test.d.ts +5 -0
  23. package/dist/src/cli/__tests__/index.test.d.ts.map +1 -0
  24. package/dist/src/cli/__tests__/index.test.js +726 -0
  25. package/dist/src/cli/__tests__/index.test.js.map +1 -0
  26. package/dist/src/cli/auto-detect.d.ts +61 -0
  27. package/dist/src/cli/auto-detect.d.ts.map +1 -0
  28. package/dist/src/cli/auto-detect.js +350 -0
  29. package/dist/src/cli/auto-detect.js.map +1 -0
  30. package/dist/src/cli/claude-sm.d.ts +7 -0
  31. package/dist/src/cli/claude-sm.d.ts.map +1 -0
  32. package/dist/src/cli/claude-sm.js +357 -0
  33. package/dist/src/cli/claude-sm.js.map +1 -0
  34. package/dist/src/cli/commands/context.d.ts +7 -0
  35. package/dist/src/cli/commands/context.d.ts.map +1 -0
  36. package/dist/src/cli/commands/context.js +365 -0
  37. package/dist/src/cli/commands/context.js.map +1 -0
  38. package/dist/src/cli/commands/linear-test.d.ts +6 -0
  39. package/dist/src/cli/commands/linear-test.d.ts.map +1 -0
  40. package/dist/src/cli/commands/linear-test.js +123 -0
  41. package/dist/src/cli/commands/linear-test.js.map +1 -0
  42. package/dist/src/cli/commands/linear.d.ts +6 -0
  43. package/dist/src/cli/commands/linear.d.ts.map +1 -0
  44. package/dist/src/cli/commands/linear.js +317 -0
  45. package/dist/src/cli/commands/linear.js.map +1 -0
  46. package/dist/src/cli/commands/log.d.ts +7 -0
  47. package/dist/src/cli/commands/log.d.ts.map +1 -0
  48. package/dist/src/cli/commands/log.js +168 -0
  49. package/dist/src/cli/commands/log.js.map +1 -0
  50. package/dist/src/cli/commands/onboard.d.ts +8 -0
  51. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  52. package/dist/src/cli/commands/onboard.js +363 -0
  53. package/dist/src/cli/commands/onboard.js.map +1 -0
  54. package/dist/src/cli/commands/projects.js +1 -1
  55. package/dist/src/cli/commands/projects.js.map +1 -1
  56. package/dist/src/cli/commands/search.d.ts +7 -0
  57. package/dist/src/cli/commands/search.d.ts.map +1 -0
  58. package/dist/src/cli/commands/search.js +162 -0
  59. package/dist/src/cli/commands/search.js.map +1 -0
  60. package/dist/src/cli/commands/session.d.ts +7 -0
  61. package/dist/src/cli/commands/session.d.ts.map +1 -0
  62. package/dist/src/cli/commands/session.js +222 -0
  63. package/dist/src/cli/commands/session.js.map +1 -0
  64. package/dist/src/cli/commands/tasks.d.ts +7 -0
  65. package/dist/src/cli/commands/tasks.d.ts.map +1 -0
  66. package/dist/src/cli/commands/tasks.js +229 -0
  67. package/dist/src/cli/commands/tasks.js.map +1 -0
  68. package/dist/src/cli/commands/webhook.d.ts +3 -0
  69. package/dist/src/cli/commands/webhook.d.ts.map +1 -0
  70. package/dist/src/cli/commands/webhook.js +157 -0
  71. package/dist/src/cli/commands/webhook.js.map +1 -0
  72. package/dist/src/cli/commands/worktree.d.ts +8 -0
  73. package/dist/src/cli/commands/worktree.d.ts.map +1 -0
  74. package/dist/src/cli/commands/worktree.js +339 -0
  75. package/dist/src/cli/commands/worktree.js.map +1 -0
  76. package/dist/src/cli/index.d.ts +2 -1
  77. package/dist/src/cli/index.d.ts.map +1 -1
  78. package/dist/src/cli/index.js +290 -50
  79. package/dist/src/cli/index.js.map +1 -1
  80. package/dist/src/cli/utils/viewer.d.ts.map +1 -1
  81. package/dist/src/cli/utils/viewer.js +3 -1
  82. package/dist/src/cli/utils/viewer.js.map +1 -1
  83. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +5 -0
  84. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +1 -0
  85. package/dist/src/core/context/__tests__/frame-manager.test.js +892 -0
  86. package/dist/src/core/context/__tests__/frame-manager.test.js.map +1 -0
  87. package/dist/src/core/context/auto-context.d.ts +22 -0
  88. package/dist/src/core/context/auto-context.d.ts.map +1 -0
  89. package/dist/src/core/context/auto-context.js +77 -0
  90. package/dist/src/core/context/auto-context.js.map +1 -0
  91. package/dist/src/core/context/frame-manager.d.ts +4 -0
  92. package/dist/src/core/context/frame-manager.d.ts.map +1 -1
  93. package/dist/src/core/context/frame-manager.js +350 -144
  94. package/dist/src/core/context/frame-manager.js.map +1 -1
  95. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +5 -0
  96. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +1 -0
  97. package/dist/src/core/errors/__tests__/error-handling.test.js +239 -0
  98. package/dist/src/core/errors/__tests__/error-handling.test.js.map +1 -0
  99. package/dist/src/core/errors/index.d.ts +135 -0
  100. package/dist/src/core/errors/index.d.ts.map +1 -0
  101. package/dist/src/core/errors/index.js +274 -0
  102. package/dist/src/core/errors/index.js.map +1 -0
  103. package/dist/src/core/errors/recovery.d.ts +86 -0
  104. package/dist/src/core/errors/recovery.d.ts.map +1 -0
  105. package/dist/src/core/errors/recovery.js +274 -0
  106. package/dist/src/core/errors/recovery.js.map +1 -0
  107. package/dist/src/core/projects/project-manager.d.ts.map +1 -1
  108. package/dist/src/core/projects/project-manager.js +240 -122
  109. package/dist/src/core/projects/project-manager.js.map +1 -1
  110. package/dist/src/core/session/index.d.ts +2 -0
  111. package/dist/src/core/session/index.d.ts.map +1 -0
  112. package/dist/src/core/session/index.js +2 -0
  113. package/dist/src/core/session/index.js.map +1 -0
  114. package/dist/src/core/session/session-manager.d.ts +69 -0
  115. package/dist/src/core/session/session-manager.d.ts.map +1 -0
  116. package/dist/src/core/session/session-manager.js +311 -0
  117. package/dist/src/core/session/session-manager.js.map +1 -0
  118. package/dist/src/core/utils/update-checker.d.ts.map +1 -1
  119. package/dist/src/core/utils/update-checker.js +82 -25
  120. package/dist/src/core/utils/update-checker.js.map +1 -1
  121. package/dist/src/core/worktree/worktree-manager.d.ts +110 -0
  122. package/dist/src/core/worktree/worktree-manager.d.ts.map +1 -0
  123. package/dist/src/core/worktree/worktree-manager.js +456 -0
  124. package/dist/src/core/worktree/worktree-manager.js.map +1 -0
  125. package/dist/src/features/analytics/core/analytics-service.d.ts +6 -0
  126. package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -1
  127. package/dist/src/features/analytics/core/analytics-service.js +125 -10
  128. package/dist/src/features/analytics/core/analytics-service.js.map +1 -1
  129. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -1
  130. package/dist/src/features/analytics/queries/metrics-queries.js +220 -163
  131. package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -1
  132. package/dist/src/features/browser/browser-mcp.d.ts.map +1 -1
  133. package/dist/src/features/browser/browser-mcp.js +3 -0
  134. package/dist/src/features/browser/browser-mcp.js.map +1 -1
  135. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +5 -0
  136. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +1 -0
  137. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +712 -0
  138. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +1 -0
  139. package/dist/src/features/tasks/pebbles-task-store.d.ts +4 -0
  140. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
  141. package/dist/src/features/tasks/pebbles-task-store.js +299 -141
  142. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
  143. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +5 -0
  144. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +1 -0
  145. package/dist/src/integrations/linear/__tests__/auth.test.js +517 -0
  146. package/dist/src/integrations/linear/__tests__/auth.test.js.map +1 -0
  147. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +5 -0
  148. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +1 -0
  149. package/dist/src/integrations/linear/__tests__/sync-service.test.js +700 -0
  150. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +1 -0
  151. package/dist/src/integrations/linear/client.d.ts +28 -1
  152. package/dist/src/integrations/linear/client.d.ts.map +1 -1
  153. package/dist/src/integrations/linear/client.js +87 -0
  154. package/dist/src/integrations/linear/client.js.map +1 -1
  155. package/dist/src/integrations/linear/sync-service.d.ts +25 -0
  156. package/dist/src/integrations/linear/sync-service.d.ts.map +1 -0
  157. package/dist/src/integrations/linear/sync-service.js +198 -0
  158. package/dist/src/integrations/linear/sync-service.js.map +1 -0
  159. package/dist/src/integrations/linear/sync.d.ts +23 -1
  160. package/dist/src/integrations/linear/sync.d.ts.map +1 -1
  161. package/dist/src/integrations/linear/sync.js +156 -9
  162. package/dist/src/integrations/linear/sync.js.map +1 -1
  163. package/dist/src/integrations/linear/types.d.ts +75 -0
  164. package/dist/src/integrations/linear/types.d.ts.map +1 -0
  165. package/dist/src/integrations/linear/types.js +2 -0
  166. package/dist/src/integrations/linear/types.js.map +1 -0
  167. package/dist/src/integrations/linear/webhook-server.d.ts +32 -0
  168. package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -0
  169. package/dist/src/integrations/linear/webhook-server.js +188 -0
  170. package/dist/src/integrations/linear/webhook-server.js.map +1 -0
  171. package/dist/src/integrations/linear/webhook.d.ts +95 -0
  172. package/dist/src/integrations/linear/webhook.d.ts.map +1 -0
  173. package/dist/src/integrations/linear/webhook.js +204 -0
  174. package/dist/src/integrations/linear/webhook.js.map +1 -0
  175. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +5 -0
  176. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +1 -0
  177. package/dist/src/integrations/mcp/__tests__/server.test.js +790 -0
  178. package/dist/src/integrations/mcp/__tests__/server.test.js.map +1 -0
  179. package/dist/src/integrations/mcp/server.d.ts +6 -0
  180. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  181. package/dist/src/integrations/mcp/server.js +490 -54
  182. package/dist/src/integrations/mcp/server.js.map +1 -1
  183. package/dist/src/servers/production/auth-middleware.d.ts +2 -2
  184. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
  185. package/dist/src/servers/production/auth-middleware.js +1 -1
  186. package/dist/src/servers/production/auth-middleware.js.map +1 -1
  187. package/dist/src/services/config-service.d.ts +44 -0
  188. package/dist/src/services/config-service.d.ts.map +1 -0
  189. package/dist/src/services/config-service.js +61 -0
  190. package/dist/src/services/config-service.js.map +1 -0
  191. package/dist/src/services/context-service.d.ts +17 -0
  192. package/dist/src/services/context-service.d.ts.map +1 -0
  193. package/dist/src/services/context-service.js +88 -0
  194. package/dist/src/services/context-service.js.map +1 -0
  195. package/dist/src/types/task.d.ts +17 -0
  196. package/dist/src/types/task.d.ts.map +1 -0
  197. package/dist/src/types/task.js +2 -0
  198. package/dist/src/types/task.js.map +1 -0
  199. package/dist/src/utils/logger.d.ts +13 -0
  200. package/dist/src/utils/logger.d.ts.map +1 -0
  201. package/dist/src/utils/logger.js +52 -0
  202. package/dist/src/utils/logger.js.map +1 -0
  203. package/package.json +16 -3
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Context Commands for StackMemory CLI
3
+ * Manage context stack (show, push, pop)
4
+ */
5
+ import { Command } from 'commander';
6
+ import Database from 'better-sqlite3';
7
+ import { join } from 'path';
8
+ import { existsSync } from 'fs';
9
+ import { FrameManager } from '../../core/context/frame-manager.js';
10
+ export function createContextCommands() {
11
+ const context = new Command('context')
12
+ .alias('ctx')
13
+ .description('Manage context stack');
14
+ // Show current context
15
+ context
16
+ .command('show')
17
+ .alias('status')
18
+ .description('Show current context stack')
19
+ .option('-v, --verbose', 'Show detailed information')
20
+ .action(async (options) => {
21
+ const projectRoot = process.cwd();
22
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
23
+ if (!existsSync(dbPath)) {
24
+ console.log('āŒ StackMemory not initialized. Run "stackmemory init" first.');
25
+ return;
26
+ }
27
+ const db = new Database(dbPath);
28
+ try {
29
+ // Get project ID - try metadata table, fallback to default
30
+ let projectId = 'default';
31
+ try {
32
+ const projectRow = db
33
+ .prepare(`
34
+ SELECT value FROM metadata WHERE key = 'project_id'
35
+ `)
36
+ .get();
37
+ if (projectRow?.value)
38
+ projectId = projectRow.value;
39
+ }
40
+ catch {
41
+ // metadata table doesn't exist, use default
42
+ }
43
+ const frameManager = new FrameManager(db, projectId);
44
+ const depth = frameManager.getStackDepth();
45
+ const activePath = frameManager.getActiveFramePath();
46
+ console.log(`\nšŸ“š Context Stack\n`);
47
+ console.log(`Project: ${projectId}`);
48
+ console.log(`Depth: ${depth}`);
49
+ console.log(`Active frames: ${activePath.length}\n`);
50
+ if (activePath.length === 0) {
51
+ console.log('No active context frames.\n');
52
+ console.log('Use "stackmemory context push" to create one.');
53
+ }
54
+ else {
55
+ const typeIcon = {
56
+ session: 'šŸ”·',
57
+ task: 'šŸ“‹',
58
+ command: '⚔',
59
+ file: 'šŸ“„',
60
+ decision: 'šŸ’”',
61
+ };
62
+ console.log('Stack (bottom to top):');
63
+ activePath.forEach((frame, i) => {
64
+ const icon = typeIcon[frame.type] || 'šŸ“¦';
65
+ const indent = ' '.repeat(i);
66
+ console.log(`${indent}${i === activePath.length - 1 ? '└─' : 'ā”œā”€'} ${icon} ${frame.name || frame.frame_id.slice(0, 10)}`);
67
+ if (options.verbose) {
68
+ console.log(`${indent} ID: ${frame.frame_id}`);
69
+ console.log(`${indent} Type: ${frame.type}`);
70
+ console.log(`${indent} Created: ${new Date(frame.created_at * 1000).toLocaleString()}`);
71
+ }
72
+ });
73
+ }
74
+ console.log('');
75
+ }
76
+ catch (error) {
77
+ console.error('āŒ Failed to show context:', error.message);
78
+ }
79
+ finally {
80
+ db.close();
81
+ }
82
+ });
83
+ // Push new context frame
84
+ context
85
+ .command('push <name>')
86
+ .description('Push a new context frame onto the stack')
87
+ .option('-t, --type <type>', 'Frame type (session, task, command, file, decision)', 'task')
88
+ .option('-m, --metadata <json>', 'Additional metadata as JSON')
89
+ .action(async (name, options) => {
90
+ const projectRoot = process.cwd();
91
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
92
+ if (!existsSync(dbPath)) {
93
+ console.log('āŒ StackMemory not initialized. Run "stackmemory init" first.');
94
+ return;
95
+ }
96
+ const db = new Database(dbPath);
97
+ try {
98
+ let projectId = 'default';
99
+ try {
100
+ const projectRow = db
101
+ .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)
102
+ .get();
103
+ if (projectRow?.value)
104
+ projectId = projectRow.value;
105
+ }
106
+ catch { }
107
+ const frameManager = new FrameManager(db, projectId);
108
+ // Get current top frame as parent
109
+ const activePath = frameManager.getActiveFramePath();
110
+ const parentId = activePath.length > 0
111
+ ? activePath[activePath.length - 1].frame_id
112
+ : undefined;
113
+ // Parse metadata if provided
114
+ let inputs = {};
115
+ if (options.metadata) {
116
+ try {
117
+ inputs = JSON.parse(options.metadata);
118
+ }
119
+ catch {
120
+ console.log('āš ļø Invalid metadata JSON, ignoring');
121
+ }
122
+ }
123
+ const frameId = frameManager.createFrame({
124
+ type: options.type,
125
+ name,
126
+ inputs,
127
+ parentFrameId: parentId,
128
+ });
129
+ console.log(`āœ… Pushed context frame: ${name}`);
130
+ console.log(` ID: ${frameId.slice(0, 10)}`);
131
+ console.log(` Type: ${options.type}`);
132
+ console.log(` Depth: ${frameManager.getStackDepth()}`);
133
+ }
134
+ catch (error) {
135
+ console.error('āŒ Failed to push context:', error.message);
136
+ }
137
+ finally {
138
+ db.close();
139
+ }
140
+ });
141
+ // Pop context frame
142
+ context
143
+ .command('pop')
144
+ .description('Pop the top context frame from the stack')
145
+ .option('-a, --all', 'Pop all frames (clear stack)')
146
+ .action(async (options) => {
147
+ const projectRoot = process.cwd();
148
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
149
+ if (!existsSync(dbPath)) {
150
+ console.log('āŒ StackMemory not initialized. Run "stackmemory init" first.');
151
+ return;
152
+ }
153
+ const db = new Database(dbPath);
154
+ try {
155
+ let projectId = 'default';
156
+ try {
157
+ const projectRow = db
158
+ .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)
159
+ .get();
160
+ if (projectRow?.value)
161
+ projectId = projectRow.value;
162
+ }
163
+ catch { }
164
+ const frameManager = new FrameManager(db, projectId);
165
+ const activePath = frameManager.getActiveFramePath();
166
+ if (activePath.length === 0) {
167
+ console.log('šŸ“š Stack is already empty.');
168
+ return;
169
+ }
170
+ if (options.all) {
171
+ // Close all frames from top to bottom
172
+ for (let i = activePath.length - 1; i >= 0; i--) {
173
+ frameManager.closeFrame(activePath[i].frame_id);
174
+ }
175
+ console.log(`āœ… Cleared all ${activePath.length} context frames.`);
176
+ }
177
+ else {
178
+ // Close just the top frame
179
+ const topFrame = activePath[activePath.length - 1];
180
+ frameManager.closeFrame(topFrame.frame_id);
181
+ console.log(`āœ… Popped: ${topFrame.name || topFrame.frame_id.slice(0, 10)}`);
182
+ console.log(` Depth: ${frameManager.getStackDepth()}`);
183
+ }
184
+ }
185
+ catch (error) {
186
+ console.error('āŒ Failed to pop context:', error.message);
187
+ }
188
+ finally {
189
+ db.close();
190
+ }
191
+ });
192
+ // Add event to current context
193
+ context
194
+ .command('add <type> <message>')
195
+ .description('Add an event to current context (types: observation, decision, error)')
196
+ .action(async (type, message) => {
197
+ const projectRoot = process.cwd();
198
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
199
+ if (!existsSync(dbPath)) {
200
+ console.log('āŒ StackMemory not initialized. Run "stackmemory init" first.');
201
+ return;
202
+ }
203
+ const db = new Database(dbPath);
204
+ try {
205
+ let projectId = 'default';
206
+ try {
207
+ const projectRow = db
208
+ .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)
209
+ .get();
210
+ if (projectRow?.value)
211
+ projectId = projectRow.value;
212
+ }
213
+ catch { }
214
+ const frameManager = new FrameManager(db, projectId);
215
+ const activePath = frameManager.getActiveFramePath();
216
+ if (activePath.length === 0) {
217
+ console.log('āš ļø No active context frame. Creating one...');
218
+ frameManager.createFrame({
219
+ type: 'task',
220
+ name: 'cli-session',
221
+ inputs: {},
222
+ });
223
+ }
224
+ const currentFrame = frameManager.getActiveFramePath().slice(-1)[0];
225
+ const validTypes = [
226
+ 'observation',
227
+ 'decision',
228
+ 'error',
229
+ 'action',
230
+ 'result',
231
+ ];
232
+ if (!validTypes.includes(type)) {
233
+ console.log(`āš ļø Unknown event type "${type}". Using "observation".`);
234
+ type = 'observation';
235
+ }
236
+ frameManager.addEvent(type, { message, content: message }, currentFrame.frame_id);
237
+ console.log(`āœ… Added ${type}: ${message.slice(0, 50)}${message.length > 50 ? '...' : ''}`);
238
+ }
239
+ catch (error) {
240
+ console.error('āŒ Failed to add event:', error.message);
241
+ }
242
+ finally {
243
+ db.close();
244
+ }
245
+ });
246
+ // Worktree integration commands
247
+ context
248
+ .command('worktree [action]')
249
+ .description('Manage Claude worktree contexts')
250
+ .option('-i, --instance <id>', 'Instance ID')
251
+ .option('-b, --branch <name>', 'Branch name')
252
+ .option('-l, --list', 'List worktree contexts')
253
+ .action(async (action, options) => {
254
+ const projectRoot = process.cwd();
255
+ const dbPath = join(projectRoot, '.stackmemory', 'context.db');
256
+ if (!existsSync(dbPath)) {
257
+ console.log('āŒ StackMemory not initialized. Run "stackmemory init" first.');
258
+ return;
259
+ }
260
+ const db = new Database(dbPath);
261
+ try {
262
+ let projectId = 'default';
263
+ try {
264
+ const projectRow = db
265
+ .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)
266
+ .get();
267
+ if (projectRow?.value)
268
+ projectId = projectRow.value;
269
+ }
270
+ catch { }
271
+ const frameManager = new FrameManager(db, projectId);
272
+ if (options.list || action === 'list') {
273
+ // List all worktree contexts
274
+ const worktreeFrames = db
275
+ .prepare(`
276
+ SELECT * FROM frames
277
+ WHERE project_id = ?
278
+ AND type = 'session'
279
+ AND inputs LIKE '%worktree%'
280
+ ORDER BY created_at DESC
281
+ LIMIT 10
282
+ `)
283
+ .all(projectId);
284
+ console.log('\n🌳 Worktree Contexts\n');
285
+ if (worktreeFrames.length === 0) {
286
+ console.log('No worktree contexts found.');
287
+ }
288
+ else {
289
+ worktreeFrames.forEach((frame) => {
290
+ const inputs = JSON.parse(frame.inputs || '{}');
291
+ const instanceId = inputs.instanceId || 'unknown';
292
+ const branch = inputs.branch || 'unknown';
293
+ const created = new Date(frame.created_at * 1000).toLocaleString();
294
+ console.log(`šŸ“ ${frame.name || frame.frame_id.slice(0, 10)}`);
295
+ console.log(` Instance: ${instanceId}`);
296
+ console.log(` Branch: ${branch}`);
297
+ console.log(` Created: ${created}`);
298
+ console.log('');
299
+ });
300
+ }
301
+ }
302
+ else if (action === 'save') {
303
+ // Save current worktree context
304
+ const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;
305
+ const branch = options.branch || 'unknown';
306
+ if (!instanceId) {
307
+ console.log('āš ļø No instance ID provided or detected.');
308
+ return;
309
+ }
310
+ const frameId = frameManager.createFrame({
311
+ type: 'task',
312
+ name: `worktree-${branch}`,
313
+ inputs: {
314
+ worktree: true,
315
+ instanceId,
316
+ branch,
317
+ path: process.cwd(),
318
+ },
319
+ });
320
+ console.log(`āœ… Saved worktree context for ${branch}`);
321
+ console.log(` Instance: ${instanceId}`);
322
+ console.log(` Frame ID: ${frameId.slice(0, 10)}`);
323
+ }
324
+ else if (action === 'load') {
325
+ // Load worktree context
326
+ const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;
327
+ if (!instanceId) {
328
+ console.log('āš ļø No instance ID provided.');
329
+ return;
330
+ }
331
+ const worktreeFrame = db
332
+ .prepare(`
333
+ SELECT * FROM frames
334
+ WHERE project_id = ?
335
+ AND type = 'session'
336
+ AND inputs LIKE ?
337
+ ORDER BY created_at DESC
338
+ LIMIT 1
339
+ `)
340
+ .get(projectId, `%"instanceId":"${instanceId}"%`);
341
+ if (worktreeFrame) {
342
+ const inputs = JSON.parse(worktreeFrame.inputs || '{}');
343
+ console.log(`āœ… Loaded worktree context`);
344
+ console.log(` Branch: ${inputs.branch}`);
345
+ console.log(` Instance: ${inputs.instanceId}`);
346
+ console.log(` Path: ${inputs.path}`);
347
+ }
348
+ else {
349
+ console.log('āš ļø No worktree context found for this instance.');
350
+ }
351
+ }
352
+ else {
353
+ console.log('Usage: stackmemory context worktree [save|load|list]');
354
+ }
355
+ }
356
+ catch (error) {
357
+ console.error('āŒ Failed to manage worktree context:', error.message);
358
+ }
359
+ finally {
360
+ db.close();
361
+ }
362
+ });
363
+ return context;
364
+ }
365
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/cli/commands/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Simple Linear sync test command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function registerLinearTestCommand(parent: Command): void;
6
+ //# sourceMappingURL=linear-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-test.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/linear-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,QAmIxD"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Simple Linear sync test command
3
+ */
4
+ import chalk from 'chalk';
5
+ export function registerLinearTestCommand(parent) {
6
+ parent
7
+ .command('linear:test')
8
+ .description('Test Linear API connection')
9
+ .option('--api-key <key>', 'Linear API key')
10
+ .action(async (options) => {
11
+ try {
12
+ const apiKey = options.apiKey || process.env.LINEAR_API_KEY;
13
+ if (!apiKey) {
14
+ console.log(chalk.red('āŒ No API key provided'));
15
+ console.log('Use --api-key or set LINEAR_API_KEY environment variable');
16
+ return;
17
+ }
18
+ console.log(chalk.yellow('šŸ”„ Testing Linear connection...'));
19
+ // Simple GraphQL query to test connection
20
+ const response = await fetch('https://api.linear.app/graphql', {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Authorization': apiKey,
24
+ 'Content-Type': 'application/json',
25
+ },
26
+ body: JSON.stringify({
27
+ query: `
28
+ query Me {
29
+ viewer {
30
+ id
31
+ name
32
+ email
33
+ }
34
+ teams {
35
+ nodes {
36
+ id
37
+ key
38
+ name
39
+ }
40
+ }
41
+ }
42
+ `
43
+ }),
44
+ });
45
+ if (!response.ok) {
46
+ console.log(chalk.red(`āŒ API Error: ${response.status} ${response.statusText}`));
47
+ return;
48
+ }
49
+ const result = await response.json();
50
+ if (result.errors) {
51
+ console.log(chalk.red('āŒ GraphQL Errors:'));
52
+ result.errors.forEach((err) => console.log(` - ${err.message}`));
53
+ return;
54
+ }
55
+ if (result.data?.viewer) {
56
+ console.log(chalk.green('āœ… Connected to Linear!'));
57
+ console.log(chalk.cyan('\nšŸ‘¤ User:'));
58
+ console.log(` Name: ${result.data.viewer.name}`);
59
+ console.log(` Email: ${result.data.viewer.email}`);
60
+ }
61
+ if (result.data?.teams?.nodes?.length > 0) {
62
+ console.log(chalk.cyan('\nšŸ¢ Teams:'));
63
+ result.data.teams.nodes.forEach((team) => {
64
+ console.log(` - ${team.name} (${team.key})`);
65
+ });
66
+ }
67
+ // Test creating a sample issue (optional)
68
+ console.log(chalk.yellow('\nšŸ”„ Testing issue creation...'));
69
+ if (result.data?.teams?.nodes?.length > 0) {
70
+ const teamId = result.data.teams.nodes[0].id;
71
+ const createResponse = await fetch('https://api.linear.app/graphql', {
72
+ method: 'POST',
73
+ headers: {
74
+ 'Authorization': apiKey,
75
+ 'Content-Type': 'application/json',
76
+ },
77
+ body: JSON.stringify({
78
+ query: `
79
+ mutation CreateIssue($input: IssueCreateInput!) {
80
+ issueCreate(input: $input) {
81
+ success
82
+ issue {
83
+ id
84
+ identifier
85
+ title
86
+ url
87
+ }
88
+ }
89
+ }
90
+ `,
91
+ variables: {
92
+ input: {
93
+ teamId: teamId,
94
+ title: '[TEST] StackMemory Integration Test',
95
+ description: 'This is a test issue created by StackMemory to verify Linear integration.',
96
+ priority: 4, // Low priority
97
+ }
98
+ }
99
+ }),
100
+ });
101
+ const createResult = await createResponse.json();
102
+ if (createResult.data?.issueCreate?.success) {
103
+ const issue = createResult.data.issueCreate.issue;
104
+ console.log(chalk.green('āœ… Test issue created successfully!'));
105
+ console.log(` ID: ${issue.identifier}`);
106
+ console.log(` Title: ${issue.title}`);
107
+ console.log(` URL: ${issue.url}`);
108
+ // Optional: Delete the test issue
109
+ console.log(chalk.gray('\n(You can delete this test issue from Linear)'));
110
+ }
111
+ else {
112
+ console.log(chalk.yellow('⚠ Could not create test issue'));
113
+ }
114
+ }
115
+ console.log(chalk.green('\nāœ… Linear integration test completed!'));
116
+ }
117
+ catch (error) {
118
+ console.error(chalk.red('āŒ Test failed:'), error.message);
119
+ process.exit(1);
120
+ }
121
+ });
122
+ }
123
+ //# sourceMappingURL=linear-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-test.js","sourceRoot":"","sources":["../../../../src/cli/commands/linear-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Linear integration commands
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function registerLinearCommands(parent: Command): void;
6
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/linear.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,QAuVrD"}