@stackmemoryai/stackmemory 0.2.3 → 0.2.6

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 (187) hide show
  1. package/README.md +108 -0
  2. package/dist/index.js +382 -0
  3. package/dist/src/analytics/api/analytics-api.d.ts +24 -0
  4. package/dist/src/analytics/api/analytics-api.d.ts.map +1 -0
  5. package/dist/src/analytics/api/analytics-api.js +279 -0
  6. package/dist/src/analytics/api/analytics-api.js.map +1 -0
  7. package/dist/src/analytics/core/analytics-service.d.ts +23 -0
  8. package/dist/src/analytics/core/analytics-service.d.ts.map +1 -0
  9. package/dist/src/analytics/core/analytics-service.js +160 -0
  10. package/dist/src/analytics/core/analytics-service.js.map +1 -0
  11. package/dist/src/analytics/index.d.ts +12 -0
  12. package/dist/src/analytics/index.d.ts.map +1 -0
  13. package/dist/src/analytics/index.js +11 -0
  14. package/dist/src/analytics/index.js.map +1 -0
  15. package/dist/src/analytics/queries/metrics-queries.d.ts +11 -0
  16. package/dist/src/analytics/queries/metrics-queries.d.ts.map +1 -0
  17. package/dist/src/analytics/queries/metrics-queries.js +179 -0
  18. package/dist/src/analytics/queries/metrics-queries.js.map +1 -0
  19. package/dist/src/analytics/types/metrics.d.ts +60 -0
  20. package/dist/src/analytics/types/metrics.d.ts.map +1 -0
  21. package/dist/src/analytics/types/metrics.js +2 -0
  22. package/dist/src/analytics/types/metrics.js.map +1 -0
  23. package/dist/src/cli/analytics-viewer.d.ts +3 -0
  24. package/dist/src/cli/analytics-viewer.d.ts.map +1 -0
  25. package/dist/src/cli/analytics-viewer.js +89 -0
  26. package/dist/src/cli/analytics-viewer.js.map +1 -0
  27. package/dist/src/cli/browser-test.d.ts +6 -0
  28. package/dist/src/cli/browser-test.d.ts.map +1 -0
  29. package/dist/src/cli/browser-test.js +32 -0
  30. package/dist/src/cli/browser-test.js.map +1 -0
  31. package/dist/src/cli/cli.js +233 -1
  32. package/dist/src/cli/cli.js.map +1 -1
  33. package/dist/src/cli/commands/projects.d.ts +8 -0
  34. package/dist/src/cli/commands/projects.d.ts.map +1 -0
  35. package/dist/src/cli/commands/projects.js +220 -0
  36. package/dist/src/cli/commands/projects.js.map +1 -0
  37. package/dist/src/cli/index.d.ts +7 -0
  38. package/dist/src/cli/index.d.ts.map +1 -0
  39. package/dist/src/cli/index.js +704 -0
  40. package/dist/src/cli/index.js.map +1 -0
  41. package/dist/src/cli/project-commands.d.ts +8 -0
  42. package/dist/src/cli/project-commands.d.ts.map +1 -0
  43. package/dist/src/cli/project-commands.js +212 -0
  44. package/dist/src/cli/project-commands.js.map +1 -0
  45. package/dist/src/cli/utils/viewer.d.ts +3 -0
  46. package/dist/src/cli/utils/viewer.d.ts.map +1 -0
  47. package/dist/src/cli/utils/viewer.js +89 -0
  48. package/dist/src/cli/utils/viewer.js.map +1 -0
  49. package/dist/src/core/context/frame-manager.d.ts +106 -0
  50. package/dist/src/core/context/frame-manager.d.ts.map +1 -0
  51. package/dist/src/core/context/frame-manager.js +387 -0
  52. package/dist/src/core/context/frame-manager.js.map +1 -0
  53. package/dist/src/core/logger.test.js +1 -1
  54. package/dist/src/core/logger.test.js.map +1 -1
  55. package/dist/src/core/monitoring/error-handler.d.ts +46 -0
  56. package/dist/src/core/monitoring/error-handler.d.ts.map +1 -0
  57. package/dist/src/core/monitoring/error-handler.js +212 -0
  58. package/dist/src/core/monitoring/error-handler.js.map +1 -0
  59. package/dist/src/core/monitoring/logger.d.ts +24 -0
  60. package/dist/src/core/monitoring/logger.d.ts.map +1 -0
  61. package/dist/src/core/monitoring/logger.js +121 -0
  62. package/dist/src/core/monitoring/logger.js.map +1 -0
  63. package/dist/src/core/monitoring/metrics.d.ts +7 -0
  64. package/dist/src/core/monitoring/metrics.d.ts.map +1 -0
  65. package/dist/src/core/monitoring/metrics.js +13 -0
  66. package/dist/src/core/monitoring/metrics.js.map +1 -0
  67. package/dist/src/core/monitoring/progress-tracker.d.ts +95 -0
  68. package/dist/src/core/monitoring/progress-tracker.d.ts.map +1 -0
  69. package/dist/src/core/monitoring/progress-tracker.js +178 -0
  70. package/dist/src/core/monitoring/progress-tracker.js.map +1 -0
  71. package/dist/src/core/progress-tracker.d.ts +95 -0
  72. package/dist/src/core/progress-tracker.d.ts.map +1 -0
  73. package/dist/src/core/progress-tracker.js +178 -0
  74. package/dist/src/core/progress-tracker.js.map +1 -0
  75. package/dist/src/core/project-manager.d.ts +130 -0
  76. package/dist/src/core/project-manager.d.ts.map +1 -0
  77. package/dist/src/core/project-manager.js +582 -0
  78. package/dist/src/core/project-manager.js.map +1 -0
  79. package/dist/src/core/projects/project-manager.d.ts +130 -0
  80. package/dist/src/core/projects/project-manager.d.ts.map +1 -0
  81. package/dist/src/core/projects/project-manager.js +591 -0
  82. package/dist/src/core/projects/project-manager.js.map +1 -0
  83. package/dist/src/core/update-checker.d.ts +38 -0
  84. package/dist/src/core/update-checker.d.ts.map +1 -0
  85. package/dist/src/core/update-checker.js +156 -0
  86. package/dist/src/core/update-checker.js.map +1 -0
  87. package/dist/src/core/utils/update-checker.d.ts +38 -0
  88. package/dist/src/core/utils/update-checker.d.ts.map +1 -0
  89. package/dist/src/core/utils/update-checker.js +156 -0
  90. package/dist/src/core/utils/update-checker.js.map +1 -0
  91. package/dist/src/features/analytics/api/analytics-api.d.ts +24 -0
  92. package/dist/src/features/analytics/api/analytics-api.d.ts.map +1 -0
  93. package/dist/src/features/analytics/api/analytics-api.js +289 -0
  94. package/dist/src/features/analytics/api/analytics-api.js.map +1 -0
  95. package/dist/src/features/analytics/core/analytics-service.d.ts +23 -0
  96. package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -0
  97. package/dist/src/features/analytics/core/analytics-service.js +160 -0
  98. package/dist/src/features/analytics/core/analytics-service.js.map +1 -0
  99. package/dist/src/features/analytics/index.d.ts +12 -0
  100. package/dist/src/features/analytics/index.d.ts.map +1 -0
  101. package/dist/src/features/analytics/index.js +11 -0
  102. package/dist/src/features/analytics/index.js.map +1 -0
  103. package/dist/src/features/analytics/queries/metrics-queries.d.ts +11 -0
  104. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -0
  105. package/dist/src/features/analytics/queries/metrics-queries.js +183 -0
  106. package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -0
  107. package/dist/src/features/analytics/types/metrics.d.ts +60 -0
  108. package/dist/src/features/analytics/types/metrics.d.ts.map +1 -0
  109. package/dist/src/features/analytics/types/metrics.js +2 -0
  110. package/dist/src/features/analytics/types/metrics.js.map +1 -0
  111. package/dist/src/features/browser/browser-mcp.d.ts +94 -0
  112. package/dist/src/features/browser/browser-mcp.d.ts.map +1 -0
  113. package/dist/src/features/browser/browser-mcp.js +456 -0
  114. package/dist/src/features/browser/browser-mcp.js.map +1 -0
  115. package/dist/src/features/tasks/pebbles-task-store.d.ts +117 -0
  116. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -0
  117. package/dist/src/features/tasks/pebbles-task-store.js +335 -0
  118. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -0
  119. package/dist/src/features/tasks/task-aware-context.d.ts +103 -0
  120. package/dist/src/features/tasks/task-aware-context.d.ts.map +1 -0
  121. package/dist/src/features/tasks/task-aware-context.js +412 -0
  122. package/dist/src/features/tasks/task-aware-context.js.map +1 -0
  123. package/dist/src/index.d.ts +4 -4
  124. package/dist/src/index.d.ts.map +1 -1
  125. package/dist/src/index.js +4 -4
  126. package/dist/src/index.js.map +1 -1
  127. package/dist/src/integrations/browser-mcp.d.ts +94 -0
  128. package/dist/src/integrations/browser-mcp.d.ts.map +1 -0
  129. package/dist/src/integrations/browser-mcp.js +431 -0
  130. package/dist/src/integrations/browser-mcp.js.map +1 -0
  131. package/dist/src/integrations/linear/auth.d.ts +99 -0
  132. package/dist/src/integrations/linear/auth.d.ts.map +1 -0
  133. package/dist/src/integrations/linear/auth.js +319 -0
  134. package/dist/src/integrations/linear/auth.js.map +1 -0
  135. package/dist/src/integrations/linear/auto-sync.d.ts +77 -0
  136. package/dist/src/integrations/linear/auto-sync.d.ts.map +1 -0
  137. package/dist/src/integrations/linear/auto-sync.js +268 -0
  138. package/dist/src/integrations/linear/auto-sync.js.map +1 -0
  139. package/dist/src/integrations/linear/client.d.ts +86 -0
  140. package/dist/src/integrations/linear/client.d.ts.map +1 -0
  141. package/dist/src/integrations/linear/client.js +277 -0
  142. package/dist/src/integrations/linear/client.js.map +1 -0
  143. package/dist/src/integrations/linear/config.d.ts +51 -0
  144. package/dist/src/integrations/linear/config.d.ts.map +1 -0
  145. package/dist/src/integrations/linear/config.js +103 -0
  146. package/dist/src/integrations/linear/config.js.map +1 -0
  147. package/dist/src/integrations/linear/sync.d.ts +97 -0
  148. package/dist/src/integrations/linear/sync.d.ts.map +1 -0
  149. package/dist/src/integrations/linear/sync.js +391 -0
  150. package/dist/src/integrations/linear/sync.js.map +1 -0
  151. package/dist/src/integrations/mcp/server.d.ts +40 -0
  152. package/dist/src/integrations/mcp/server.d.ts.map +1 -0
  153. package/dist/src/integrations/mcp/server.js +828 -0
  154. package/dist/src/integrations/mcp/server.js.map +1 -0
  155. package/dist/src/mcp/mcp-server.d.ts +2 -0
  156. package/dist/src/mcp/mcp-server.d.ts.map +1 -1
  157. package/dist/src/mcp/mcp-server.js +16 -0
  158. package/dist/src/mcp/mcp-server.js.map +1 -1
  159. package/dist/src/railway/index.d.ts +7 -0
  160. package/dist/src/railway/index.d.ts.map +1 -0
  161. package/dist/src/railway/index.js +401 -0
  162. package/dist/src/railway/index.js.map +1 -0
  163. package/dist/src/runway/auth/auth-middleware.d.ts +66 -0
  164. package/dist/src/runway/auth/auth-middleware.d.ts.map +1 -0
  165. package/dist/src/runway/auth/auth-middleware.js +337 -0
  166. package/dist/src/runway/auth/auth-middleware.js.map +1 -0
  167. package/dist/src/runway/server/runway-mcp-server.d.ts +46 -0
  168. package/dist/src/runway/server/runway-mcp-server.d.ts.map +1 -0
  169. package/dist/src/runway/server/runway-mcp-server.js +601 -0
  170. package/dist/src/runway/server/runway-mcp-server.js.map +1 -0
  171. package/dist/src/runway.bak/auth/auth-middleware.d.ts +66 -0
  172. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +1 -0
  173. package/dist/src/runway.bak/auth/auth-middleware.js +337 -0
  174. package/dist/src/runway.bak/auth/auth-middleware.js.map +1 -0
  175. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +46 -0
  176. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +1 -0
  177. package/dist/src/runway.bak/server/runway-mcp-server.js +601 -0
  178. package/dist/src/runway.bak/server/runway-mcp-server.js.map +1 -0
  179. package/dist/src/servers/production/auth-middleware.d.ts +66 -0
  180. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -0
  181. package/dist/src/servers/production/auth-middleware.js +346 -0
  182. package/dist/src/servers/production/auth-middleware.js.map +1 -0
  183. package/dist/src/servers/railway/index.d.ts +7 -0
  184. package/dist/src/servers/railway/index.d.ts.map +1 -0
  185. package/dist/src/servers/railway/index.js +401 -0
  186. package/dist/src/servers/railway/index.js.map +1 -0
  187. package/package.json +27 -5
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Linear Bi-directional Sync Engine
3
+ * Handles syncing tasks between StackMemory and Linear
4
+ */
5
+ import { logger } from '../../core/monitoring/logger.js';
6
+ import { LinearClient } from './client.js';
7
+ export class LinearSyncEngine {
8
+ taskStore;
9
+ linearClient;
10
+ authManager;
11
+ config;
12
+ mappings = new Map();
13
+ constructor(taskStore, authManager, config) {
14
+ this.taskStore = taskStore;
15
+ this.authManager = authManager;
16
+ this.config = config;
17
+ // Check for API key from environment variable first
18
+ const apiKey = process.env.LINEAR_API_KEY;
19
+ if (apiKey) {
20
+ // Use API key from environment
21
+ this.linearClient = new LinearClient({
22
+ apiKey: apiKey,
23
+ });
24
+ }
25
+ else {
26
+ // Fall back to OAuth tokens
27
+ const tokens = this.authManager.loadTokens();
28
+ if (!tokens) {
29
+ throw new Error('Linear API key or authentication tokens not found. Set LINEAR_API_KEY environment variable or run "stackmemory linear setup" first.');
30
+ }
31
+ this.linearClient = new LinearClient({
32
+ apiKey: tokens.accessToken,
33
+ });
34
+ }
35
+ this.loadMappings();
36
+ }
37
+ /**
38
+ * Perform bi-directional sync
39
+ */
40
+ async sync() {
41
+ if (!this.config.enabled) {
42
+ return {
43
+ success: false,
44
+ synced: { toLinear: 0, fromLinear: 0, updated: 0 },
45
+ conflicts: [],
46
+ errors: ['Sync is disabled'],
47
+ };
48
+ }
49
+ const result = {
50
+ success: true,
51
+ synced: { toLinear: 0, fromLinear: 0, updated: 0 },
52
+ conflicts: [],
53
+ errors: [],
54
+ };
55
+ try {
56
+ // Update client with valid token if not using environment API key
57
+ const apiKey = process.env.LINEAR_API_KEY;
58
+ if (!apiKey) {
59
+ const token = await this.authManager.getValidToken();
60
+ this.linearClient = new LinearClient({ apiKey: token });
61
+ }
62
+ // Get team info if not configured
63
+ if (!this.config.defaultTeamId) {
64
+ const team = await this.linearClient.getTeam();
65
+ this.config.defaultTeamId = team.id;
66
+ logger.info(`Using Linear team: ${team.name} (${team.key})`);
67
+ }
68
+ // Sync in both directions based on configuration
69
+ if (this.config.direction === 'bidirectional' ||
70
+ this.config.direction === 'to_linear') {
71
+ const toLinearResult = await this.syncToLinear();
72
+ result.synced.toLinear = toLinearResult.created;
73
+ result.synced.updated += toLinearResult.updated;
74
+ result.errors.push(...toLinearResult.errors);
75
+ }
76
+ if (this.config.direction === 'bidirectional' ||
77
+ this.config.direction === 'from_linear') {
78
+ const fromLinearResult = await this.syncFromLinear();
79
+ result.synced.fromLinear = fromLinearResult.created;
80
+ result.synced.updated += fromLinearResult.updated;
81
+ result.conflicts.push(...fromLinearResult.conflicts);
82
+ result.errors.push(...fromLinearResult.errors);
83
+ }
84
+ this.saveMappings();
85
+ }
86
+ catch (error) {
87
+ result.success = false;
88
+ result.errors.push(`Sync failed: ${String(error)}`);
89
+ logger.error('Linear sync failed:', error);
90
+ }
91
+ return result;
92
+ }
93
+ /**
94
+ * Sync tasks from StackMemory to Linear
95
+ */
96
+ async syncToLinear() {
97
+ const result = { created: 0, updated: 0, errors: [] };
98
+ // Get unsynced tasks from StackMemory
99
+ const unsyncedTasks = this.getUnsyncedTasks();
100
+ for (const task of unsyncedTasks) {
101
+ try {
102
+ const linearIssue = await this.createLinearIssueFromTask(task);
103
+ // Create mapping
104
+ const mapping = {
105
+ stackmemoryId: task.id,
106
+ linearId: linearIssue.id,
107
+ linearIdentifier: linearIssue.identifier,
108
+ lastSyncTimestamp: Date.now(),
109
+ lastLinearUpdate: linearIssue.updatedAt,
110
+ lastStackMemoryUpdate: task.timestamp * 1000,
111
+ };
112
+ this.mappings.set(task.id, mapping);
113
+ // Update task with Linear reference
114
+ this.updateTaskWithLinearRef(task.id, linearIssue);
115
+ result.created++;
116
+ logger.info(`Synced task to Linear: ${task.title} → ${linearIssue.identifier}`);
117
+ }
118
+ catch (error) {
119
+ result.errors.push(`Failed to sync task ${task.id}: ${String(error)}`);
120
+ logger.error(`Failed to sync task ${task.id} to Linear:`, error);
121
+ }
122
+ }
123
+ // Update existing Linear issues for modified StackMemory tasks
124
+ const modifiedTasks = this.getModifiedTasks();
125
+ for (const task of modifiedTasks) {
126
+ try {
127
+ const mapping = this.mappings.get(task.id);
128
+ if (!mapping)
129
+ continue;
130
+ await this.updateLinearIssueFromTask(task, mapping);
131
+ mapping.lastSyncTimestamp = Date.now();
132
+ mapping.lastStackMemoryUpdate = task.timestamp * 1000;
133
+ result.updated++;
134
+ logger.info(`Updated Linear issue: ${mapping.linearIdentifier}`);
135
+ }
136
+ catch (error) {
137
+ result.errors.push(`Failed to update Linear issue for task ${task.id}: ${String(error)}`);
138
+ logger.error(`Failed to update Linear issue for task ${task.id}:`, error);
139
+ }
140
+ }
141
+ return result;
142
+ }
143
+ /**
144
+ * Sync tasks from Linear to StackMemory
145
+ */
146
+ async syncFromLinear() {
147
+ const result = {
148
+ created: 0,
149
+ updated: 0,
150
+ conflicts: [],
151
+ errors: [],
152
+ };
153
+ // For now, we'll focus on updating existing mapped tasks
154
+ // Creating new StackMemory tasks from Linear issues would require frame context
155
+ for (const [taskId, mapping] of this.mappings) {
156
+ try {
157
+ const linearIssue = await this.linearClient.getIssue(mapping.linearId);
158
+ if (!linearIssue) {
159
+ result.errors.push(`Linear issue ${mapping.linearId} not found`);
160
+ continue;
161
+ }
162
+ // Check if Linear issue was updated since last sync
163
+ const linearUpdateTime = new Date(linearIssue.updatedAt).getTime();
164
+ if (linearUpdateTime <= mapping.lastSyncTimestamp) {
165
+ continue; // No changes in Linear
166
+ }
167
+ // Check for conflicts
168
+ const task = this.taskStore.getTask(taskId);
169
+ if (!task) {
170
+ result.errors.push(`StackMemory task ${taskId} not found`);
171
+ continue;
172
+ }
173
+ const stackMemoryUpdateTime = task.timestamp * 1000;
174
+ if (stackMemoryUpdateTime > mapping.lastSyncTimestamp &&
175
+ linearUpdateTime > mapping.lastSyncTimestamp) {
176
+ // Conflict: both sides updated since last sync
177
+ result.conflicts.push({
178
+ taskId,
179
+ linearId: mapping.linearId,
180
+ reason: 'Both StackMemory and Linear were updated since last sync',
181
+ });
182
+ if (this.config.conflictResolution === 'manual') {
183
+ continue; // Skip, let user resolve manually
184
+ }
185
+ }
186
+ // Apply conflict resolution
187
+ const shouldUpdateFromLinear = this.shouldUpdateFromLinear(task, linearIssue, mapping, stackMemoryUpdateTime, linearUpdateTime);
188
+ if (shouldUpdateFromLinear) {
189
+ this.updateTaskFromLinearIssue(task, linearIssue);
190
+ mapping.lastSyncTimestamp = Date.now();
191
+ mapping.lastLinearUpdate = linearIssue.updatedAt;
192
+ result.updated++;
193
+ logger.info(`Updated StackMemory task from Linear: ${task.title}`);
194
+ }
195
+ }
196
+ catch (error) {
197
+ result.errors.push(`Failed to sync from Linear for task ${taskId}: ${String(error)}`);
198
+ logger.error(`Failed to sync from Linear for task ${taskId}:`, error);
199
+ }
200
+ }
201
+ return result;
202
+ }
203
+ /**
204
+ * Create Linear issue from StackMemory task
205
+ */
206
+ async createLinearIssueFromTask(task) {
207
+ const input = {
208
+ title: task.title,
209
+ description: this.formatDescriptionForLinear(task),
210
+ teamId: this.config.defaultTeamId,
211
+ priority: this.mapPriorityToLinear(task.priority),
212
+ estimate: task.estimated_effort
213
+ ? Math.ceil(task.estimated_effort / 60)
214
+ : undefined, // Convert minutes to hours
215
+ labelIds: this.mapTagsToLinear(task.tags),
216
+ };
217
+ return await this.linearClient.createIssue(input);
218
+ }
219
+ /**
220
+ * Update Linear issue from StackMemory task
221
+ */
222
+ async updateLinearIssueFromTask(task, mapping) {
223
+ const updates = {
224
+ title: task.title,
225
+ description: this.formatDescriptionForLinear(task),
226
+ priority: this.mapPriorityToLinear(task.priority),
227
+ estimate: task.estimated_effort
228
+ ? Math.ceil(task.estimated_effort / 60)
229
+ : undefined,
230
+ stateId: await this.mapStatusToLinearState(task.status),
231
+ };
232
+ await this.linearClient.updateIssue(mapping.linearId, updates);
233
+ }
234
+ /**
235
+ * Update StackMemory task from Linear issue
236
+ */
237
+ updateTaskFromLinearIssue(task, linearIssue) {
238
+ // Map Linear state to StackMemory status
239
+ const newStatus = this.mapLinearStateToStatus(linearIssue.state.type);
240
+ if (newStatus !== task.status) {
241
+ this.taskStore.updateTaskStatus(task.id, newStatus, 'Updated from Linear');
242
+ }
243
+ // Note: Other fields like title, description could be updated here
244
+ // but require careful consideration of conflict resolution
245
+ }
246
+ /**
247
+ * Check if task should be updated from Linear based on conflict resolution strategy
248
+ */
249
+ shouldUpdateFromLinear(task, linearIssue, mapping, stackMemoryUpdateTime, linearUpdateTime) {
250
+ switch (this.config.conflictResolution) {
251
+ case 'linear_wins':
252
+ return true;
253
+ case 'stackmemory_wins':
254
+ return false;
255
+ case 'newest_wins':
256
+ return linearUpdateTime > stackMemoryUpdateTime;
257
+ case 'manual':
258
+ return false;
259
+ default:
260
+ return false;
261
+ }
262
+ }
263
+ /**
264
+ * Get tasks that haven't been synced to Linear yet
265
+ */
266
+ getUnsyncedTasks() {
267
+ const activeTasks = this.taskStore.getActiveTasks();
268
+ return activeTasks.filter((task) => !this.mappings.has(task.id) && !task.external_refs?.linear);
269
+ }
270
+ /**
271
+ * Get tasks that have been modified since last sync
272
+ */
273
+ getModifiedTasks() {
274
+ const tasks = [];
275
+ for (const [taskId, mapping] of this.mappings) {
276
+ const task = this.taskStore.getTask(taskId);
277
+ if (task && task.timestamp * 1000 > mapping.lastSyncTimestamp) {
278
+ tasks.push(task);
279
+ }
280
+ }
281
+ return tasks;
282
+ }
283
+ /**
284
+ * Update task with Linear reference
285
+ */
286
+ updateTaskWithLinearRef(taskId, linearIssue) {
287
+ const task = this.taskStore.getTask(taskId);
288
+ if (!task)
289
+ return;
290
+ // This would need a method in PebblesTaskStore to update external_refs
291
+ // For now, we'll track this in our mappings
292
+ logger.info(`Task ${taskId} mapped to Linear ${linearIssue.identifier}`);
293
+ }
294
+ // Mapping utilities
295
+ formatDescriptionForLinear(task) {
296
+ let description = task.description || '';
297
+ description += `\n\n---\n**StackMemory Context:**\n`;
298
+ description += `- Task ID: ${task.id}\n`;
299
+ description += `- Frame: ${task.frame_id}\n`;
300
+ description += `- Created: ${new Date(task.created_at * 1000).toISOString()}\n`;
301
+ if (task.tags.length > 0) {
302
+ description += `- Tags: ${task.tags.join(', ')}\n`;
303
+ }
304
+ if (task.depends_on.length > 0) {
305
+ description += `- Dependencies: ${task.depends_on.join(', ')}\n`;
306
+ }
307
+ return description;
308
+ }
309
+ mapPriorityToLinear(priority) {
310
+ const map = {
311
+ low: 1, // Low priority in Linear
312
+ medium: 2, // Medium priority in Linear
313
+ high: 3, // High priority in Linear
314
+ urgent: 4, // Urgent priority in Linear
315
+ };
316
+ return map[priority] || 2;
317
+ }
318
+ mapTagsToLinear(_tags) {
319
+ // In a full implementation, this would map StackMemory tags to Linear label IDs
320
+ // For now, return undefined to skip label assignment
321
+ return undefined;
322
+ }
323
+ mapLinearStateToStatus(linearStateType) {
324
+ switch (linearStateType) {
325
+ case 'backlog':
326
+ case 'unstarted':
327
+ return 'pending';
328
+ case 'started':
329
+ return 'in_progress';
330
+ case 'completed':
331
+ return 'completed';
332
+ case 'cancelled':
333
+ return 'cancelled';
334
+ default:
335
+ return 'pending';
336
+ }
337
+ }
338
+ async mapStatusToLinearState(status) {
339
+ // Get available states for the team
340
+ try {
341
+ const team = await this.linearClient.getTeam();
342
+ const states = await this.linearClient.getWorkflowStates(team.id);
343
+ // Map StackMemory status to Linear state types
344
+ const targetStateType = this.getLinearStateTypeFromStatus(status);
345
+ // Find the first state that matches the target type
346
+ const matchingState = states.find((state) => state.type === targetStateType);
347
+ return matchingState?.id;
348
+ }
349
+ catch (error) {
350
+ logger.warn('Failed to map status to Linear state:', error);
351
+ return undefined;
352
+ }
353
+ }
354
+ getLinearStateTypeFromStatus(status) {
355
+ switch (status) {
356
+ case 'pending':
357
+ return 'unstarted';
358
+ case 'in_progress':
359
+ return 'started';
360
+ case 'completed':
361
+ return 'completed';
362
+ case 'cancelled':
363
+ return 'cancelled';
364
+ case 'blocked':
365
+ return 'unstarted'; // Map blocked to unstarted in Linear
366
+ default:
367
+ return 'unstarted';
368
+ }
369
+ }
370
+ // Persistence for mappings
371
+ loadMappings() {
372
+ // In a full implementation, this would load from a file or database
373
+ // For now, start with empty mappings
374
+ this.mappings.clear();
375
+ }
376
+ saveMappings() {
377
+ // In a full implementation, this would save to a file or database
378
+ logger.info(`Saved ${this.mappings.size} task mappings`);
379
+ }
380
+ }
381
+ /**
382
+ * Default sync configuration
383
+ */
384
+ export const DEFAULT_SYNC_CONFIG = {
385
+ enabled: false,
386
+ direction: 'bidirectional',
387
+ autoSync: false,
388
+ conflictResolution: 'newest_wins',
389
+ syncInterval: 15, // minutes
390
+ };
391
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/integrations/linear/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * StackMemory MCP Server - Local Instance
4
+ * This runs locally and provides context to Claude Code
5
+ */
6
+ declare class LocalStackMemoryMCP {
7
+ private server;
8
+ private db;
9
+ private projectRoot;
10
+ private frameManager;
11
+ private taskStore;
12
+ private projectId;
13
+ private contexts;
14
+ private browserMCP;
15
+ constructor();
16
+ private findProjectRoot;
17
+ private initDB;
18
+ private loadInitialContext;
19
+ private getProjectId;
20
+ private getProjectInfo;
21
+ private addContext;
22
+ private loadStoredContexts;
23
+ private setupHandlers;
24
+ private handleGetContext;
25
+ private handleAddDecision;
26
+ private handleStartFrame;
27
+ private handleCloseFrame;
28
+ private handleAddAnchor;
29
+ private handleGetHotStack;
30
+ private logAttention;
31
+ private handleCreateTask;
32
+ private handleUpdateTaskStatus;
33
+ private handleGetActiveTasks;
34
+ private handleGetTaskMetrics;
35
+ private handleAddTaskDependency;
36
+ start(): Promise<void>;
37
+ }
38
+ export default LocalStackMemoryMCP;
39
+ export declare function runMCPServer(): Promise<void>;
40
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/integrations/mcp/server.ts"],"names":[],"mappings":";AACA;;;GAGG;AAyBH,cAAM,mBAAmB;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAmB;IAIpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAAwB;;IAiE1C,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,MAAM;IA8Bd,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,aAAa;YAmSP,gBAAgB;YA6ChB,iBAAiB;YAejB,gBAAgB;YAqChB,gBAAgB;YAoChB,eAAe;YAuBf,iBAAiB;IA8D/B,OAAO,CAAC,YAAY;YAYN,gBAAgB;YA4ChB,sBAAsB;YAkCtB,oBAAoB;YA2CpB,oBAAoB;YAmCpB,uBAAuB;IAiC/B,KAAK;CAKZ;AAGD,eAAe,mBAAmB,CAAC;AAGnC,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}