@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,412 @@
1
+ /**
2
+ * Task-Aware Context Assembly
3
+ * Intelligently selects context based on active tasks and their relationships
4
+ */
5
+ import { logger } from '../../core/monitoring/logger.js';
6
+ export class TaskAwareContextManager {
7
+ db;
8
+ frameManager;
9
+ projectId;
10
+ constructor(db, frameManager, projectId) {
11
+ this.db = db;
12
+ this.frameManager = frameManager;
13
+ this.projectId = projectId;
14
+ this.initializeTaskSchema();
15
+ }
16
+ initializeTaskSchema() {
17
+ this.db.exec(`
18
+ CREATE TABLE IF NOT EXISTS tasks (
19
+ task_id TEXT PRIMARY KEY,
20
+ frame_id TEXT NOT NULL,
21
+ anchor_id TEXT,
22
+ name TEXT NOT NULL,
23
+ description TEXT,
24
+ status TEXT DEFAULT 'pending',
25
+ priority TEXT DEFAULT 'medium',
26
+ parent_task_id TEXT,
27
+ depends_on TEXT DEFAULT '[]',
28
+ assigned_to TEXT,
29
+ estimated_effort INTEGER,
30
+ actual_effort INTEGER,
31
+ created_at INTEGER DEFAULT (unixepoch()),
32
+ started_at INTEGER,
33
+ completed_at INTEGER,
34
+ blocked_reason TEXT,
35
+ context_tags TEXT DEFAULT '[]',
36
+ metadata TEXT DEFAULT '{}',
37
+ FOREIGN KEY(frame_id) REFERENCES frames(frame_id),
38
+ FOREIGN KEY(anchor_id) REFERENCES anchors(anchor_id),
39
+ FOREIGN KEY(parent_task_id) REFERENCES tasks(task_id)
40
+ );
41
+
42
+ CREATE TABLE IF NOT EXISTS task_dependencies (
43
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
44
+ task_id TEXT NOT NULL,
45
+ depends_on_task_id TEXT NOT NULL,
46
+ dependency_type TEXT DEFAULT 'blocks',
47
+ created_at INTEGER DEFAULT (unixepoch()),
48
+ FOREIGN KEY(task_id) REFERENCES tasks(task_id),
49
+ FOREIGN KEY(depends_on_task_id) REFERENCES tasks(task_id)
50
+ );
51
+
52
+ CREATE TABLE IF NOT EXISTS context_access_log (
53
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
54
+ request_id TEXT NOT NULL,
55
+ task_ids TEXT, -- JSON array of relevant task IDs
56
+ context_items TEXT, -- JSON array of included context items
57
+ relevance_scores TEXT, -- JSON object of item -> score mappings
58
+ total_tokens INTEGER,
59
+ query_hash TEXT,
60
+ timestamp INTEGER DEFAULT (unixepoch())
61
+ );
62
+
63
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
64
+ CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
65
+ CREATE INDEX IF NOT EXISTS idx_tasks_frame ON tasks(frame_id);
66
+ CREATE INDEX IF NOT EXISTS idx_task_deps ON task_dependencies(task_id);
67
+ `);
68
+ }
69
+ /**
70
+ * Create task from TODO anchor or standalone
71
+ */
72
+ createTask(options) {
73
+ const taskId = `task_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
74
+ const frameId = options.frameId || this.frameManager.getCurrentFrameId();
75
+ if (!frameId) {
76
+ throw new Error('No active frame for task creation');
77
+ }
78
+ const task = {
79
+ task_id: taskId,
80
+ frame_id: frameId,
81
+ anchor_id: options.anchorId,
82
+ name: options.name,
83
+ description: options.description,
84
+ status: 'pending',
85
+ priority: options.priority || 'medium',
86
+ parent_task_id: options.parentTaskId,
87
+ depends_on: options.dependsOn || [],
88
+ estimated_effort: options.estimatedEffort,
89
+ created_at: Math.floor(Date.now() / 1000),
90
+ context_tags: options.contextTags || [],
91
+ metadata: options.metadata || {},
92
+ };
93
+ // Insert task
94
+ this.db
95
+ .prepare(`
96
+ INSERT INTO tasks (
97
+ task_id, frame_id, anchor_id, name, description, status, priority,
98
+ parent_task_id, depends_on, estimated_effort, created_at, context_tags, metadata
99
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
100
+ `)
101
+ .run(task.task_id, task.frame_id, task.anchor_id, task.name, task.description, task.status, task.priority, task.parent_task_id, JSON.stringify(task.depends_on), task.estimated_effort, task.created_at, JSON.stringify(task.context_tags), JSON.stringify(task.metadata));
102
+ // Create dependency relationships
103
+ if (task.depends_on.length > 0) {
104
+ const dependencyStmt = this.db.prepare(`
105
+ INSERT INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)
106
+ `);
107
+ task.depends_on.forEach((depTaskId) => {
108
+ dependencyStmt.run(taskId, depTaskId);
109
+ });
110
+ }
111
+ // Log event
112
+ this.frameManager.addEvent('decision', {
113
+ action: 'create_task',
114
+ task_id: taskId,
115
+ name: task.name,
116
+ priority: task.priority,
117
+ });
118
+ logger.info('Created task', { taskId, name: task.name, frameId });
119
+ return taskId;
120
+ }
121
+ /**
122
+ * Update task status with automatic time tracking
123
+ */
124
+ updateTaskStatus(taskId, newStatus, reason) {
125
+ const task = this.getTask(taskId);
126
+ if (!task)
127
+ throw new Error(`Task not found: ${taskId}`);
128
+ const now = Math.floor(Date.now() / 1000);
129
+ const updates = { status: newStatus };
130
+ // Automatic time tracking
131
+ if (newStatus === 'in_progress' && task.status === 'pending') {
132
+ updates.started_at = now;
133
+ }
134
+ else if (newStatus === 'completed' && task.status === 'in_progress') {
135
+ updates.completed_at = now;
136
+ if (task.started_at) {
137
+ updates.actual_effort = now - task.started_at;
138
+ }
139
+ }
140
+ else if (newStatus === 'blocked') {
141
+ updates.blocked_reason = reason || 'No reason provided';
142
+ }
143
+ // Build dynamic update query
144
+ const setClause = Object.keys(updates)
145
+ .map((key) => `${key} = ?`)
146
+ .join(', ');
147
+ const values = Object.values(updates);
148
+ this.db
149
+ .prepare(`UPDATE tasks SET ${setClause} WHERE task_id = ?`)
150
+ .run(...values, taskId);
151
+ // Log status change
152
+ this.frameManager.addEvent('observation', {
153
+ action: 'task_status_change',
154
+ task_id: taskId,
155
+ old_status: task.status,
156
+ new_status: newStatus,
157
+ reason,
158
+ });
159
+ logger.info('Updated task status', {
160
+ taskId,
161
+ oldStatus: task.status,
162
+ newStatus,
163
+ });
164
+ }
165
+ /**
166
+ * Assemble context optimized for active tasks and query
167
+ */
168
+ assembleTaskAwareContext(request) {
169
+ const startTime = Date.now();
170
+ // 1. Get active and relevant tasks
171
+ const activeTasks = this.getActiveTasks(request.taskFocus);
172
+ const blockedTasks = this.getBlockedTasks();
173
+ // 2. Score and select relevant context
174
+ const contextItems = this.selectRelevantContext(activeTasks, request);
175
+ // 3. Assemble final context with smart ordering
176
+ const { context, totalTokens, relevanceScores } = this.buildContextString(contextItems, activeTasks, request.maxTokens || 4000);
177
+ // 4. Log context access for learning
178
+ this.logContextAccess({
179
+ taskIds: activeTasks.map((t) => t.task_id),
180
+ contextItems: contextItems.map((item) => item.id),
181
+ relevanceScores,
182
+ totalTokens,
183
+ query: request.query || '',
184
+ });
185
+ const metadata = {
186
+ includedTasks: activeTasks,
187
+ contextSources: contextItems.map((item) => `${item.type}:${item.id}`),
188
+ totalTokens,
189
+ relevanceScores,
190
+ };
191
+ logger.info('Assembled task-aware context', {
192
+ activeTasks: activeTasks.length,
193
+ blockedTasks: blockedTasks.length,
194
+ contextItems: contextItems.length,
195
+ totalTokens,
196
+ assemblyTimeMs: Date.now() - startTime,
197
+ });
198
+ return { context, metadata };
199
+ }
200
+ /**
201
+ * Get tasks that are currently active or should be in context
202
+ */
203
+ getActiveTasks(taskFocus) {
204
+ let query = `
205
+ SELECT * FROM tasks
206
+ WHERE status IN ('in_progress', 'pending')
207
+ `;
208
+ let params = [];
209
+ if (taskFocus && taskFocus.length > 0) {
210
+ query += ` AND task_id IN (${taskFocus.map(() => '?').join(',')})`;
211
+ params = taskFocus;
212
+ }
213
+ query += ` ORDER BY priority DESC, created_at ASC`;
214
+ const rows = this.db.prepare(query).all(...params);
215
+ return this.hydrateTasks(rows);
216
+ }
217
+ getBlockedTasks() {
218
+ const rows = this.db
219
+ .prepare(`
220
+ SELECT * FROM tasks WHERE status = 'blocked' ORDER BY priority DESC
221
+ `)
222
+ .all();
223
+ return this.hydrateTasks(rows);
224
+ }
225
+ /**
226
+ * Select context items relevant to active tasks
227
+ */
228
+ selectRelevantContext(activeTasks, request) {
229
+ const contextItems = [];
230
+ // Get frames for active tasks
231
+ const frameIds = [...new Set(activeTasks.map((t) => t.frame_id))];
232
+ frameIds.forEach((frameId) => {
233
+ const frame = this.frameManager.getFrame(frameId);
234
+ if (frame) {
235
+ const score = this.calculateFrameRelevance(frame, activeTasks, request.query);
236
+ contextItems.push({
237
+ id: frameId,
238
+ type: 'frame',
239
+ content: `Frame: ${frame.name} (${frame.type})`,
240
+ relevanceScore: score,
241
+ tokenEstimate: frame.name.length + 20,
242
+ });
243
+ }
244
+ });
245
+ // Get relevant anchors
246
+ const anchors = this.getRelevantAnchors(frameIds, request);
247
+ anchors.forEach((anchor) => {
248
+ const score = this.calculateAnchorRelevance(anchor, activeTasks, request.query);
249
+ contextItems.push({
250
+ id: anchor.anchor_id,
251
+ type: 'anchor',
252
+ content: `${anchor.type}: ${anchor.text}`,
253
+ relevanceScore: score,
254
+ tokenEstimate: anchor.text.length + 10,
255
+ });
256
+ });
257
+ // Get recent events from active frames
258
+ if (request.includeHistory) {
259
+ frameIds.forEach((frameId) => {
260
+ const events = this.frameManager.getFrameEvents(frameId, 5);
261
+ events.forEach((event) => {
262
+ const score = this.calculateEventRelevance(event, activeTasks, request.query);
263
+ if (score > 0.3) {
264
+ contextItems.push({
265
+ id: event.event_id,
266
+ type: 'event',
267
+ content: `Event: ${event.event_type}`,
268
+ relevanceScore: score,
269
+ tokenEstimate: 30,
270
+ });
271
+ }
272
+ });
273
+ });
274
+ }
275
+ // Sort by relevance score
276
+ return contextItems.sort((a, b) => b.relevanceScore - a.relevanceScore);
277
+ }
278
+ buildContextString(contextItems, activeTasks, maxTokens) {
279
+ let context = '# Active Task Context\n\n';
280
+ let totalTokens = 20; // Header estimate
281
+ const relevanceScores = {};
282
+ // Always include active tasks summary
283
+ context += '## Current Tasks\n';
284
+ activeTasks.forEach((task) => {
285
+ const line = `- [${task.status.toUpperCase()}] ${task.name} (${task.priority})\n`;
286
+ context += line;
287
+ totalTokens += line.length / 4; // Rough token estimate
288
+ relevanceScores[task.task_id] = 1.0;
289
+ });
290
+ context += '\n';
291
+ // Add context items within token budget
292
+ context += '## Relevant Context\n';
293
+ for (const item of contextItems) {
294
+ if (totalTokens + item.tokenEstimate > maxTokens)
295
+ break;
296
+ context += `${item.content}\n`;
297
+ totalTokens += item.tokenEstimate;
298
+ relevanceScores[item.id] = item.relevanceScore;
299
+ }
300
+ return { context, totalTokens, relevanceScores };
301
+ }
302
+ // Relevance scoring methods
303
+ calculateFrameRelevance(frame, activeTasks, query) {
304
+ let score = 0.5; // Base relevance
305
+ // Higher score if frame contains active tasks
306
+ if (activeTasks.some((t) => t.frame_id === frame.frame_id)) {
307
+ score += 0.4;
308
+ }
309
+ // Query matching
310
+ if (query) {
311
+ const queryLower = query.toLowerCase();
312
+ if (frame.name.toLowerCase().includes(queryLower)) {
313
+ score += 0.3;
314
+ }
315
+ }
316
+ // Recent frames get boost
317
+ const ageHours = (Date.now() / 1000 - frame.created_at) / 3600;
318
+ if (ageHours < 24)
319
+ score += 0.2;
320
+ return Math.min(score, 1.0);
321
+ }
322
+ calculateAnchorRelevance(anchor, activeTasks, query) {
323
+ let score = 0.3; // Base relevance
324
+ // Task-related anchors get priority
325
+ if (anchor.type === 'TODO')
326
+ score += 0.4;
327
+ if (anchor.type === 'DECISION')
328
+ score += 0.3;
329
+ if (anchor.type === 'CONSTRAINT')
330
+ score += 0.2;
331
+ // Priority-based boost
332
+ score += (anchor.priority / 10) * 0.2;
333
+ // Query matching
334
+ if (query) {
335
+ const queryLower = query.toLowerCase();
336
+ if (anchor.text.toLowerCase().includes(queryLower)) {
337
+ score += 0.3;
338
+ }
339
+ }
340
+ return Math.min(score, 1.0);
341
+ }
342
+ calculateEventRelevance(event, _activeTasks, _query) {
343
+ let score = 0.1; // Base relevance
344
+ // Event type relevance
345
+ if (event.event_type === 'decision')
346
+ score += 0.4;
347
+ if (event.event_type === 'tool_call')
348
+ score += 0.3;
349
+ if (event.event_type === 'observation')
350
+ score += 0.2;
351
+ // Recent events get boost
352
+ const ageHours = (Date.now() / 1000 - event.ts) / 3600;
353
+ if (ageHours < 1)
354
+ score += 0.3;
355
+ else if (ageHours < 6)
356
+ score += 0.2;
357
+ return Math.min(score, 1.0);
358
+ }
359
+ // Helper methods
360
+ getTask(taskId) {
361
+ const row = this.db
362
+ .prepare(`SELECT * FROM tasks WHERE task_id = ?`)
363
+ .get(taskId);
364
+ return row ? this.hydrateTask(row) : undefined;
365
+ }
366
+ getRelevantAnchors(frameIds, _request) {
367
+ if (frameIds.length === 0)
368
+ return [];
369
+ const placeholders = frameIds.map(() => '?').join(',');
370
+ const rows = this.db
371
+ .prepare(`
372
+ SELECT * FROM anchors
373
+ WHERE frame_id IN (${placeholders})
374
+ ORDER BY priority DESC, created_at DESC
375
+ LIMIT 20
376
+ `)
377
+ .all(...frameIds);
378
+ return rows.map((row) => ({
379
+ ...row,
380
+ metadata: JSON.parse(row.metadata || '{}'),
381
+ }));
382
+ }
383
+ hydrateTasks(rows) {
384
+ return rows.map(this.hydrateTask);
385
+ }
386
+ hydrateTask = (row) => ({
387
+ ...row,
388
+ depends_on: JSON.parse(row.depends_on || '[]'),
389
+ context_tags: JSON.parse(row.context_tags || '[]'),
390
+ metadata: JSON.parse(row.metadata || '{}'),
391
+ });
392
+ logContextAccess(data) {
393
+ const requestId = `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`;
394
+ this.db
395
+ .prepare(`
396
+ INSERT INTO context_access_log (
397
+ request_id, task_ids, context_items, relevance_scores, total_tokens, query_hash
398
+ ) VALUES (?, ?, ?, ?, ?, ?)
399
+ `)
400
+ .run(requestId, JSON.stringify(data.taskIds), JSON.stringify(data.contextItems), JSON.stringify(data.relevanceScores), data.totalTokens, this.hashString(data.query));
401
+ }
402
+ hashString(str) {
403
+ let hash = 0;
404
+ for (let i = 0; i < str.length; i++) {
405
+ const char = str.charCodeAt(i);
406
+ hash = (hash << 5) - hash + char;
407
+ hash = hash & hash; // Convert to 32-bit integer
408
+ }
409
+ return hash.toString(16);
410
+ }
411
+ }
412
+ //# sourceMappingURL=task-aware-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-aware-context.js","sourceRoot":"","sources":["../../../../src/features/tasks/task-aware-context.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@
2
2
  * StackMemory - Lossless memory runtime for AI coding tools
3
3
  * Main entry point for the StackMemory package
4
4
  */
5
- export { FrameManager, type FrameType, type FrameState, } from './core/frame-manager.js';
6
- export { logger, Logger, LogLevel } from './core/logger.js';
7
- export { StackMemoryError, ErrorCode, ErrorHandler, } from './core/error-handler.js';
8
- export { default as LocalStackMemoryMCP } from './mcp/mcp-server.js';
5
+ export { FrameManager, type FrameType, type FrameState, } from './core/context/frame-manager.js';
6
+ export { logger, Logger, LogLevel } from './core/monitoring/logger.js';
7
+ export { StackMemoryError, ErrorCode, ErrorHandler, } from './core/monitoring/error-handler.js';
8
+ export { default as LocalStackMemoryMCP } from './integrations/mcp/server.js';
9
9
  export interface StackMemoryConfig {
10
10
  projectRoot?: string;
11
11
  dbPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAG9E,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/dist/src/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  * StackMemory - Lossless memory runtime for AI coding tools
3
3
  * Main entry point for the StackMemory package
4
4
  */
5
- export { FrameManager, } from './core/frame-manager.js';
6
- export { logger, Logger, LogLevel } from './core/logger.js';
7
- export { StackMemoryError, ErrorCode, ErrorHandler, } from './core/error-handler.js';
8
- export { default as LocalStackMemoryMCP } from './mcp/mcp-server.js';
5
+ export { FrameManager, } from './core/context/frame-manager.js';
6
+ export { logger, Logger, LogLevel } from './core/monitoring/logger.js';
7
+ export { StackMemoryError, ErrorCode, ErrorHandler, } from './core/monitoring/error-handler.js';
8
+ export { default as LocalStackMemoryMCP } from './integrations/mcp/server.js';
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,GAGb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,YAAY,GAGb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Browser MCP Integration for StackMemory
3
+ * Provides browser automation capabilities through MCP
4
+ */
5
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { Browser, Page } from 'puppeteer';
7
+ export interface BrowserAction {
8
+ type: 'navigate' | 'click' | 'type' | 'screenshot' | 'evaluate' | 'wait';
9
+ selector?: string;
10
+ value?: string;
11
+ script?: string;
12
+ timeout?: number;
13
+ }
14
+ export interface BrowserSession {
15
+ id: string;
16
+ browser: Browser;
17
+ page: Page;
18
+ createdAt: Date;
19
+ lastActivity: Date;
20
+ url?: string;
21
+ }
22
+ export declare class BrowserMCPIntegration {
23
+ private config;
24
+ private sessions;
25
+ private server?;
26
+ private maxSessions;
27
+ private sessionTimeout;
28
+ constructor(config?: {
29
+ headless?: boolean;
30
+ defaultViewport?: {
31
+ width: number;
32
+ height: number;
33
+ };
34
+ userDataDir?: string;
35
+ executablePath?: string;
36
+ });
37
+ /**
38
+ * Initialize the Browser MCP server
39
+ */
40
+ initialize(mcpServer?: Server): Promise<void>;
41
+ /**
42
+ * Set up MCP request handlers
43
+ */
44
+ private setupHandlers;
45
+ /**
46
+ * Navigate to a URL
47
+ */
48
+ private navigate;
49
+ /**
50
+ * Take a screenshot
51
+ */
52
+ private screenshot;
53
+ /**
54
+ * Click an element
55
+ */
56
+ private click;
57
+ /**
58
+ * Type text into an input
59
+ */
60
+ private type;
61
+ /**
62
+ * Execute JavaScript in page context
63
+ */
64
+ private evaluate;
65
+ /**
66
+ * Wait for element or timeout
67
+ */
68
+ private waitFor;
69
+ /**
70
+ * Get page content
71
+ */
72
+ private getContent;
73
+ /**
74
+ * Get or create a browser session
75
+ */
76
+ private getOrCreateSession;
77
+ /**
78
+ * Get existing session
79
+ */
80
+ private getSession;
81
+ /**
82
+ * Close a browser session
83
+ */
84
+ private closeSession;
85
+ /**
86
+ * Clean up inactive sessions
87
+ */
88
+ private startCleanupInterval;
89
+ /**
90
+ * Close all sessions
91
+ */
92
+ cleanup(): Promise<void>;
93
+ }
94
+ //# sourceMappingURL=browser-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-mcp.d.ts","sourceRoot":"","sources":["../../../src/integrations/browser-mcp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGrD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAAkB;gBAG9B,MAAM,GAAE;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,eAAe,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACpD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACpB;IAKR;;OAEG;IACG,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;OAEG;IACH,OAAO,CAAC,aAAa;IAmJrB;;OAEG;YACW,QAAQ;IAqBtB;;OAEG;YACW,UAAU;IAmCxB;;OAEG;YACW,KAAK;IAoBnB;;OAEG;YACW,IAAI;IAoBlB;;OAEG;YACW,QAAQ;IAqBtB;;OAEG;YACW,OAAO;IA6BrB;;OAEG;YACW,UAAU;IA2BxB;;OAEG;YACW,kBAAkB;IA0ChC;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;YACW,YAAY;IA4B1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}