@stackmemoryai/stackmemory 0.2.7 → 0.2.8

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 (297) hide show
  1. package/README.md +25 -8
  2. package/dist/scripts/cancel-duplicate-tasks.js +2 -1
  3. package/dist/scripts/cancel-duplicate-tasks.js.map +1 -1
  4. package/dist/scripts/list-linear-tasks.js +3 -4
  5. package/dist/scripts/list-linear-tasks.js.map +1 -1
  6. package/dist/scripts/merge-linear-duplicates-safe.js +4 -2
  7. package/dist/scripts/merge-linear-duplicates-safe.js.map +1 -1
  8. package/dist/scripts/show-linear-summary.js +4 -1
  9. package/dist/scripts/show-linear-summary.js.map +1 -1
  10. package/dist/scripts/status.js +6 -2
  11. package/dist/scripts/status.js.map +1 -1
  12. package/dist/src/cli/auto-detect.js.map +1 -1
  13. package/dist/src/cli/claude-sm.js.map +1 -1
  14. package/dist/src/cli/commands/config.d.ts +6 -0
  15. package/dist/src/cli/commands/config.d.ts.map +1 -0
  16. package/dist/src/cli/commands/config.js +224 -0
  17. package/dist/src/cli/commands/config.js.map +1 -0
  18. package/dist/src/cli/commands/linear.d.ts.map +1 -1
  19. package/dist/src/cli/commands/linear.js +123 -47
  20. package/dist/src/cli/commands/linear.js.map +1 -1
  21. package/dist/src/cli/index.d.ts.map +1 -1
  22. package/dist/src/cli/index.js +48 -1
  23. package/dist/src/cli/index.js.map +1 -1
  24. package/dist/src/core/config/config-manager.d.ts +95 -0
  25. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  26. package/dist/src/core/config/config-manager.js +359 -0
  27. package/dist/src/core/config/config-manager.js.map +1 -0
  28. package/dist/src/core/config/types.d.ts +72 -0
  29. package/dist/src/core/config/types.d.ts.map +1 -0
  30. package/dist/src/core/config/types.js +127 -0
  31. package/dist/src/core/config/types.js.map +1 -0
  32. package/dist/src/core/context/compaction-handler.d.ts +119 -0
  33. package/dist/src/core/context/compaction-handler.d.ts.map +1 -0
  34. package/dist/src/core/context/compaction-handler.js +306 -0
  35. package/dist/src/core/context/compaction-handler.js.map +1 -0
  36. package/dist/src/core/context/model-aware-compaction.d.ts +101 -0
  37. package/dist/src/core/context/model-aware-compaction.d.ts.map +1 -0
  38. package/dist/src/core/context/model-aware-compaction.js +616 -0
  39. package/dist/src/core/context/model-aware-compaction.js.map +1 -0
  40. package/dist/src/core/query/query-parser.d.ts +104 -0
  41. package/dist/src/core/query/query-parser.d.ts.map +1 -0
  42. package/dist/src/core/query/query-parser.js +347 -0
  43. package/dist/src/core/query/query-parser.js.map +1 -0
  44. package/dist/src/core/retrieval/index.d.ts +8 -0
  45. package/dist/src/core/retrieval/index.d.ts.map +1 -0
  46. package/dist/src/core/retrieval/index.js +8 -0
  47. package/dist/src/core/retrieval/index.js.map +1 -0
  48. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +71 -0
  49. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -0
  50. package/dist/src/core/retrieval/llm-context-retrieval.js +545 -0
  51. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -0
  52. package/dist/src/core/retrieval/summary-generator.d.ts +63 -0
  53. package/dist/src/core/retrieval/summary-generator.d.ts.map +1 -0
  54. package/dist/src/core/retrieval/summary-generator.js +622 -0
  55. package/dist/src/core/retrieval/summary-generator.js.map +1 -0
  56. package/dist/src/core/retrieval/types.d.ts +257 -0
  57. package/dist/src/core/retrieval/types.d.ts.map +1 -0
  58. package/dist/src/core/retrieval/types.js +18 -0
  59. package/dist/src/core/retrieval/types.js.map +1 -0
  60. package/dist/src/core/trace/trace-detector.d.ts +108 -0
  61. package/dist/src/core/trace/trace-detector.d.ts.map +1 -0
  62. package/dist/src/core/trace/trace-detector.demo.d.ts +5 -0
  63. package/dist/src/core/trace/trace-detector.demo.d.ts.map +1 -0
  64. package/dist/src/core/trace/trace-detector.demo.js +145 -0
  65. package/dist/src/core/trace/trace-detector.demo.js.map +1 -0
  66. package/dist/src/core/trace/trace-detector.js +425 -0
  67. package/dist/src/core/trace/trace-detector.js.map +1 -0
  68. package/dist/src/core/trace/trace-store.d.ts +60 -0
  69. package/dist/src/core/trace/trace-store.d.ts.map +1 -0
  70. package/dist/src/core/trace/trace-store.js +323 -0
  71. package/dist/src/core/trace/trace-store.js.map +1 -0
  72. package/dist/src/core/trace/types.d.ts +81 -0
  73. package/dist/src/core/trace/types.d.ts.map +1 -0
  74. package/dist/src/core/trace/types.js +70 -0
  75. package/dist/src/core/trace/types.js.map +1 -0
  76. package/dist/src/integrations/linear/sync-manager.d.ts +76 -0
  77. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -0
  78. package/dist/src/integrations/linear/sync-manager.js +223 -0
  79. package/dist/src/integrations/linear/sync-manager.js.map +1 -0
  80. package/dist/src/integrations/mcp/server.d.ts +8 -0
  81. package/dist/src/integrations/mcp/server.d.ts.map +1 -1
  82. package/dist/src/integrations/mcp/server.js +368 -16
  83. package/dist/src/integrations/mcp/server.js.map +1 -1
  84. package/dist/src/integrations/mcp/trace-test.d.ts +5 -0
  85. package/dist/src/integrations/mcp/trace-test.d.ts.map +1 -0
  86. package/dist/src/integrations/mcp/trace-test.js +54 -0
  87. package/dist/src/integrations/mcp/trace-test.js.map +1 -0
  88. package/dist/src/services/config-service.d.ts +1 -1
  89. package/dist/src/services/config-service.d.ts.map +1 -1
  90. package/dist/src/services/config-service.js.map +1 -1
  91. package/dist/src/types/task.d.ts +11 -1
  92. package/dist/src/types/task.d.ts.map +1 -1
  93. package/dist/src/utils/logger.d.ts +4 -4
  94. package/dist/src/utils/logger.d.ts.map +1 -1
  95. package/dist/src/utils/logger.js.map +1 -1
  96. package/package.json +9 -8
  97. package/dist/attention-scoring/src/attention-tracker.d.ts +0 -79
  98. package/dist/attention-scoring/src/attention-tracker.d.ts.map +0 -1
  99. package/dist/attention-scoring/src/attention-tracker.js +0 -488
  100. package/dist/attention-scoring/src/attention-tracker.js.map +0 -1
  101. package/dist/attention-scoring/src/mcp-integration.d.ts +0 -56
  102. package/dist/attention-scoring/src/mcp-integration.d.ts.map +0 -1
  103. package/dist/attention-scoring/src/mcp-integration.js +0 -369
  104. package/dist/attention-scoring/src/mcp-integration.js.map +0 -1
  105. package/dist/index.js +0 -382
  106. package/dist/p2p-sync/src/p2p-sync.d.ts +0 -81
  107. package/dist/p2p-sync/src/p2p-sync.d.ts.map +0 -1
  108. package/dist/p2p-sync/src/p2p-sync.js +0 -457
  109. package/dist/p2p-sync/src/p2p-sync.js.map +0 -1
  110. package/dist/p2p-sync/src/team-context-sync.d.ts +0 -99
  111. package/dist/p2p-sync/src/team-context-sync.d.ts.map +0 -1
  112. package/dist/p2p-sync/src/team-context-sync.js +0 -491
  113. package/dist/p2p-sync/src/team-context-sync.js.map +0 -1
  114. package/dist/scripts/merge-linear-duplicates.d.ts +0 -7
  115. package/dist/scripts/merge-linear-duplicates.d.ts.map +0 -1
  116. package/dist/scripts/merge-linear-duplicates.js +0 -126
  117. package/dist/scripts/merge-linear-duplicates.js.map +0 -1
  118. package/dist/src/analytics/api/analytics-api.d.ts +0 -24
  119. package/dist/src/analytics/api/analytics-api.d.ts.map +0 -1
  120. package/dist/src/analytics/api/analytics-api.js +0 -279
  121. package/dist/src/analytics/api/analytics-api.js.map +0 -1
  122. package/dist/src/analytics/core/analytics-service.d.ts +0 -23
  123. package/dist/src/analytics/core/analytics-service.d.ts.map +0 -1
  124. package/dist/src/analytics/core/analytics-service.js +0 -160
  125. package/dist/src/analytics/core/analytics-service.js.map +0 -1
  126. package/dist/src/analytics/index.d.ts +0 -12
  127. package/dist/src/analytics/index.d.ts.map +0 -1
  128. package/dist/src/analytics/index.js +0 -11
  129. package/dist/src/analytics/index.js.map +0 -1
  130. package/dist/src/analytics/queries/metrics-queries.d.ts +0 -11
  131. package/dist/src/analytics/queries/metrics-queries.d.ts.map +0 -1
  132. package/dist/src/analytics/queries/metrics-queries.js +0 -179
  133. package/dist/src/analytics/queries/metrics-queries.js.map +0 -1
  134. package/dist/src/analytics/types/metrics.d.ts +0 -60
  135. package/dist/src/analytics/types/metrics.d.ts.map +0 -1
  136. package/dist/src/analytics/types/metrics.js +0 -2
  137. package/dist/src/analytics/types/metrics.js.map +0 -1
  138. package/dist/src/beads/beads-task-store.d.ts +0 -117
  139. package/dist/src/beads/beads-task-store.d.ts.map +0 -1
  140. package/dist/src/beads/beads-task-store.js +0 -318
  141. package/dist/src/beads/beads-task-store.js.map +0 -1
  142. package/dist/src/beads/task-aware-context.d.ts +0 -103
  143. package/dist/src/beads/task-aware-context.d.ts.map +0 -1
  144. package/dist/src/beads/task-aware-context.js +0 -395
  145. package/dist/src/beads/task-aware-context.js.map +0 -1
  146. package/dist/src/beads-task-store.d.ts +0 -117
  147. package/dist/src/beads-task-store.d.ts.map +0 -1
  148. package/dist/src/beads-task-store.js +0 -318
  149. package/dist/src/beads-task-store.js.map +0 -1
  150. package/dist/src/cli/__tests__/index.test.d.ts +0 -5
  151. package/dist/src/cli/__tests__/index.test.d.ts.map +0 -1
  152. package/dist/src/cli/__tests__/index.test.js +0 -726
  153. package/dist/src/cli/__tests__/index.test.js.map +0 -1
  154. package/dist/src/cli/analytics-viewer.d.ts +0 -3
  155. package/dist/src/cli/analytics-viewer.d.ts.map +0 -1
  156. package/dist/src/cli/analytics-viewer.js +0 -89
  157. package/dist/src/cli/analytics-viewer.js.map +0 -1
  158. package/dist/src/cli/cli.d.ts +0 -7
  159. package/dist/src/cli/cli.d.ts.map +0 -1
  160. package/dist/src/cli/cli.js +0 -704
  161. package/dist/src/cli/cli.js.map +0 -1
  162. package/dist/src/cli/project-commands.d.ts +0 -8
  163. package/dist/src/cli/project-commands.d.ts.map +0 -1
  164. package/dist/src/cli/project-commands.js +0 -212
  165. package/dist/src/cli/project-commands.js.map +0 -1
  166. package/dist/src/cli.d.ts +0 -7
  167. package/dist/src/cli.d.ts.map +0 -1
  168. package/dist/src/cli.js +0 -73
  169. package/dist/src/cli.js.map +0 -1
  170. package/dist/src/core/context/__tests__/frame-manager.test.d.ts +0 -5
  171. package/dist/src/core/context/__tests__/frame-manager.test.d.ts.map +0 -1
  172. package/dist/src/core/context/__tests__/frame-manager.test.js +0 -892
  173. package/dist/src/core/context/__tests__/frame-manager.test.js.map +0 -1
  174. package/dist/src/core/error-handler.d.ts +0 -46
  175. package/dist/src/core/error-handler.d.ts.map +0 -1
  176. package/dist/src/core/error-handler.js +0 -212
  177. package/dist/src/core/error-handler.js.map +0 -1
  178. package/dist/src/core/errors/__tests__/error-handling.test.d.ts +0 -5
  179. package/dist/src/core/errors/__tests__/error-handling.test.d.ts.map +0 -1
  180. package/dist/src/core/errors/__tests__/error-handling.test.js +0 -239
  181. package/dist/src/core/errors/__tests__/error-handling.test.js.map +0 -1
  182. package/dist/src/core/frame-manager.d.ts +0 -106
  183. package/dist/src/core/frame-manager.d.ts.map +0 -1
  184. package/dist/src/core/frame-manager.js +0 -387
  185. package/dist/src/core/frame-manager.js.map +0 -1
  186. package/dist/src/core/logger.d.ts +0 -24
  187. package/dist/src/core/logger.d.ts.map +0 -1
  188. package/dist/src/core/logger.js +0 -121
  189. package/dist/src/core/logger.js.map +0 -1
  190. package/dist/src/core/logger.test.d.ts +0 -2
  191. package/dist/src/core/logger.test.d.ts.map +0 -1
  192. package/dist/src/core/logger.test.js +0 -31
  193. package/dist/src/core/logger.test.js.map +0 -1
  194. package/dist/src/core/progress-tracker.d.ts +0 -95
  195. package/dist/src/core/progress-tracker.d.ts.map +0 -1
  196. package/dist/src/core/progress-tracker.js +0 -178
  197. package/dist/src/core/progress-tracker.js.map +0 -1
  198. package/dist/src/core/project-manager.d.ts +0 -130
  199. package/dist/src/core/project-manager.d.ts.map +0 -1
  200. package/dist/src/core/project-manager.js +0 -582
  201. package/dist/src/core/project-manager.js.map +0 -1
  202. package/dist/src/core/update-checker.d.ts +0 -38
  203. package/dist/src/core/update-checker.d.ts.map +0 -1
  204. package/dist/src/core/update-checker.js +0 -156
  205. package/dist/src/core/update-checker.js.map +0 -1
  206. package/dist/src/error-handler.d.ts +0 -42
  207. package/dist/src/error-handler.d.ts.map +0 -1
  208. package/dist/src/error-handler.js +0 -155
  209. package/dist/src/error-handler.js.map +0 -1
  210. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts +0 -5
  211. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.d.ts.map +0 -1
  212. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js +0 -712
  213. package/dist/src/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -1
  214. package/dist/src/frame-manager.d.ts +0 -106
  215. package/dist/src/frame-manager.d.ts.map +0 -1
  216. package/dist/src/frame-manager.js +0 -361
  217. package/dist/src/frame-manager.js.map +0 -1
  218. package/dist/src/integrations/browser-mcp.d.ts +0 -94
  219. package/dist/src/integrations/browser-mcp.d.ts.map +0 -1
  220. package/dist/src/integrations/browser-mcp.js +0 -431
  221. package/dist/src/integrations/browser-mcp.js.map +0 -1
  222. package/dist/src/integrations/linear/__tests__/auth.test.d.ts +0 -5
  223. package/dist/src/integrations/linear/__tests__/auth.test.d.ts.map +0 -1
  224. package/dist/src/integrations/linear/__tests__/auth.test.js +0 -517
  225. package/dist/src/integrations/linear/__tests__/auth.test.js.map +0 -1
  226. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts +0 -5
  227. package/dist/src/integrations/linear/__tests__/sync-service.test.d.ts.map +0 -1
  228. package/dist/src/integrations/linear/__tests__/sync-service.test.js +0 -700
  229. package/dist/src/integrations/linear/__tests__/sync-service.test.js.map +0 -1
  230. package/dist/src/integrations/linear-auth.d.ts +0 -99
  231. package/dist/src/integrations/linear-auth.d.ts.map +0 -1
  232. package/dist/src/integrations/linear-auth.js +0 -319
  233. package/dist/src/integrations/linear-auth.js.map +0 -1
  234. package/dist/src/integrations/linear-auto-sync.d.ts +0 -77
  235. package/dist/src/integrations/linear-auto-sync.d.ts.map +0 -1
  236. package/dist/src/integrations/linear-auto-sync.js +0 -268
  237. package/dist/src/integrations/linear-auto-sync.js.map +0 -1
  238. package/dist/src/integrations/linear-client.d.ts +0 -86
  239. package/dist/src/integrations/linear-client.d.ts.map +0 -1
  240. package/dist/src/integrations/linear-client.js +0 -277
  241. package/dist/src/integrations/linear-client.js.map +0 -1
  242. package/dist/src/integrations/linear-config.d.ts +0 -51
  243. package/dist/src/integrations/linear-config.d.ts.map +0 -1
  244. package/dist/src/integrations/linear-config.js +0 -103
  245. package/dist/src/integrations/linear-config.js.map +0 -1
  246. package/dist/src/integrations/linear-sync.d.ts +0 -97
  247. package/dist/src/integrations/linear-sync.d.ts.map +0 -1
  248. package/dist/src/integrations/linear-sync.js +0 -391
  249. package/dist/src/integrations/linear-sync.js.map +0 -1
  250. package/dist/src/integrations/mcp/__tests__/server.test.d.ts +0 -5
  251. package/dist/src/integrations/mcp/__tests__/server.test.d.ts.map +0 -1
  252. package/dist/src/integrations/mcp/__tests__/server.test.js +0 -790
  253. package/dist/src/integrations/mcp/__tests__/server.test.js.map +0 -1
  254. package/dist/src/logger.d.ts +0 -24
  255. package/dist/src/logger.d.ts.map +0 -1
  256. package/dist/src/logger.js +0 -120
  257. package/dist/src/logger.js.map +0 -1
  258. package/dist/src/mcp/mcp-server.d.ts +0 -40
  259. package/dist/src/mcp/mcp-server.d.ts.map +0 -1
  260. package/dist/src/mcp/mcp-server.js +0 -828
  261. package/dist/src/mcp/mcp-server.js.map +0 -1
  262. package/dist/src/mcp-server.d.ts +0 -32
  263. package/dist/src/mcp-server.d.ts.map +0 -1
  264. package/dist/src/mcp-server.js +0 -441
  265. package/dist/src/mcp-server.js.map +0 -1
  266. package/dist/src/pebbles/pebbles-task-store.d.ts +0 -117
  267. package/dist/src/pebbles/pebbles-task-store.d.ts.map +0 -1
  268. package/dist/src/pebbles/pebbles-task-store.js +0 -335
  269. package/dist/src/pebbles/pebbles-task-store.js.map +0 -1
  270. package/dist/src/pebbles/task-aware-context.d.ts +0 -103
  271. package/dist/src/pebbles/task-aware-context.d.ts.map +0 -1
  272. package/dist/src/pebbles/task-aware-context.js +0 -412
  273. package/dist/src/pebbles/task-aware-context.js.map +0 -1
  274. package/dist/src/railway/index.d.ts +0 -7
  275. package/dist/src/railway/index.d.ts.map +0 -1
  276. package/dist/src/railway/index.js +0 -401
  277. package/dist/src/railway/index.js.map +0 -1
  278. package/dist/src/runway/auth/auth-middleware.d.ts +0 -66
  279. package/dist/src/runway/auth/auth-middleware.d.ts.map +0 -1
  280. package/dist/src/runway/auth/auth-middleware.js +0 -337
  281. package/dist/src/runway/auth/auth-middleware.js.map +0 -1
  282. package/dist/src/runway/server/runway-mcp-server.d.ts +0 -46
  283. package/dist/src/runway/server/runway-mcp-server.d.ts.map +0 -1
  284. package/dist/src/runway/server/runway-mcp-server.js +0 -601
  285. package/dist/src/runway/server/runway-mcp-server.js.map +0 -1
  286. package/dist/src/runway.bak/auth/auth-middleware.d.ts +0 -66
  287. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +0 -1
  288. package/dist/src/runway.bak/auth/auth-middleware.js +0 -337
  289. package/dist/src/runway.bak/auth/auth-middleware.js.map +0 -1
  290. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +0 -46
  291. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +0 -1
  292. package/dist/src/runway.bak/server/runway-mcp-server.js +0 -601
  293. package/dist/src/runway.bak/server/runway-mcp-server.js.map +0 -1
  294. package/dist/src/task-aware-context.d.ts +0 -103
  295. package/dist/src/task-aware-context.d.ts.map +0 -1
  296. package/dist/src/task-aware-context.js +0 -395
  297. package/dist/src/task-aware-context.js.map +0 -1
@@ -1,491 +0,0 @@
1
- /**
2
- * Team Shared Context Management
3
- *
4
- * Per-project shared context that syncs across team members
5
- * Optimized for LLM context windows and collaborative AI coding
6
- */
7
- import { P2PSync } from './p2p-sync';
8
- import Database from 'better-sqlite3';
9
- import { v4 as uuidv4 } from 'uuid';
10
- import { createHash } from 'crypto';
11
- // ============================================
12
- // Team Context Manager
13
- // ============================================
14
- export class TeamContextManager {
15
- p2pSync;
16
- db;
17
- projectId;
18
- teamId;
19
- userId;
20
- // Context layers
21
- sharedContext;
22
- personalContext;
23
- activeFrames = new Map();
24
- constructor(config) {
25
- this.projectId = config.projectId;
26
- this.teamId = config.teamId;
27
- this.userId = config.userId;
28
- this.db = new Database(config.dbPath || `.stackmemory/${this.projectId}/context.db`);
29
- this.initDB();
30
- // Initialize P2P sync for team
31
- this.p2pSync = new P2PSync({
32
- userId: this.userId,
33
- teamId: this.teamId,
34
- signalingServer: config.signalingServer || 'wss://signal.stackmemory.dev',
35
- dbPath: `.stackmemory/${this.projectId}/sync.db`
36
- });
37
- this.sharedContext = new SharedContext(this.db, this.p2pSync);
38
- this.personalContext = new PersonalContext(this.db);
39
- this.setupSyncHandlers();
40
- }
41
- // ============================================
42
- // Database Schema
43
- // ============================================
44
- initDB() {
45
- this.db.exec(`
46
- -- Shared context visible to all team members
47
- CREATE TABLE IF NOT EXISTS shared_context (
48
- context_id TEXT PRIMARY KEY,
49
- project_id TEXT NOT NULL,
50
- type TEXT NOT NULL, -- 'decision', 'constraint', 'architecture', 'learning'
51
- content TEXT NOT NULL,
52
- importance REAL DEFAULT 0.5,
53
- author_id TEXT NOT NULL,
54
- created_at INTEGER DEFAULT (unixepoch()),
55
- updated_at INTEGER DEFAULT (unixepoch()),
56
- vector_clock TEXT NOT NULL,
57
- active BOOLEAN DEFAULT TRUE
58
- );
59
-
60
- -- Personal context (not shared)
61
- CREATE TABLE IF NOT EXISTS personal_context (
62
- context_id TEXT PRIMARY KEY,
63
- user_id TEXT NOT NULL,
64
- project_id TEXT NOT NULL,
65
- type TEXT NOT NULL,
66
- content TEXT NOT NULL,
67
- importance REAL DEFAULT 0.5,
68
- created_at INTEGER DEFAULT (unixepoch())
69
- );
70
-
71
- -- Active working frames (ephemeral, shared during collaboration)
72
- CREATE TABLE IF NOT EXISTS active_frames (
73
- frame_id TEXT PRIMARY KEY,
74
- project_id TEXT NOT NULL,
75
- user_id TEXT NOT NULL,
76
- task TEXT NOT NULL,
77
- status TEXT DEFAULT 'active', -- 'active', 'paused', 'completed'
78
- context_snapshot TEXT, -- Compressed context at frame creation
79
- started_at INTEGER DEFAULT (unixepoch()),
80
- last_activity INTEGER DEFAULT (unixepoch())
81
- );
82
-
83
- -- Project-level aggregated knowledge
84
- CREATE TABLE IF NOT EXISTS project_knowledge (
85
- knowledge_id TEXT PRIMARY KEY,
86
- project_id TEXT NOT NULL,
87
- category TEXT NOT NULL, -- 'patterns', 'gotchas', 'conventions', 'dependencies'
88
- title TEXT NOT NULL,
89
- content TEXT NOT NULL,
90
- confidence REAL DEFAULT 0.5,
91
- usage_count INTEGER DEFAULT 0,
92
- last_used INTEGER DEFAULT (unixepoch())
93
- );
94
-
95
- -- Context importance decay tracking
96
- CREATE TABLE IF NOT EXISTS context_decay (
97
- context_id TEXT PRIMARY KEY,
98
- last_accessed INTEGER DEFAULT (unixepoch()),
99
- access_count INTEGER DEFAULT 1,
100
- decay_rate REAL DEFAULT 0.1
101
- );
102
-
103
- -- Indexes for performance
104
- CREATE INDEX IF NOT EXISTS idx_shared_project ON shared_context(project_id, importance DESC);
105
- CREATE INDEX IF NOT EXISTS idx_shared_type ON shared_context(type, active);
106
- CREATE INDEX IF NOT EXISTS idx_personal_user ON personal_context(user_id, project_id);
107
- CREATE INDEX IF NOT EXISTS idx_frames_active ON active_frames(project_id, status);
108
- CREATE INDEX IF NOT EXISTS idx_knowledge_category ON project_knowledge(project_id, category);
109
- `);
110
- }
111
- // ============================================
112
- // Context Management
113
- // ============================================
114
- /**
115
- * Add a decision or constraint that should be shared with the team
116
- */
117
- addSharedContext(type, content, importance = 0.5) {
118
- const contextId = this.generateContextId(content);
119
- // Check if similar context exists
120
- const existing = this.findSimilarContext(content);
121
- if (existing) {
122
- this.reinforceContext(existing.context_id);
123
- return existing.context_id;
124
- }
125
- // Add to shared context
126
- const vectorClock = this.p2pSync.incrementClock();
127
- this.db.prepare(`
128
- INSERT INTO shared_context
129
- (context_id, project_id, type, content, importance, author_id, vector_clock)
130
- VALUES (?, ?, ?, ?, ?, ?, ?)
131
- `).run(contextId, this.projectId, type, content, importance, this.userId, JSON.stringify(vectorClock));
132
- // Broadcast to team
133
- this.p2pSync.createFrame({
134
- id: contextId,
135
- type: 'shared_context',
136
- content: {
137
- type,
138
- content,
139
- importance,
140
- author_id: this.userId
141
- }
142
- });
143
- return contextId;
144
- }
145
- /**
146
- * Add personal context (not shared with team)
147
- */
148
- addPersonalContext(type, content) {
149
- const contextId = this.generateContextId(content);
150
- this.db.prepare(`
151
- INSERT INTO personal_context
152
- (context_id, user_id, project_id, type, content)
153
- VALUES (?, ?, ?, ?, ?)
154
- `).run(contextId, this.userId, this.projectId, type, content);
155
- return contextId;
156
- }
157
- /**
158
- * Start a new working frame (task/feature/debug session)
159
- */
160
- startFrame(task) {
161
- const frameId = uuidv4();
162
- // Capture current context snapshot
163
- const snapshot = this.captureContextSnapshot();
164
- this.db.prepare(`
165
- INSERT INTO active_frames
166
- (frame_id, project_id, user_id, task, context_snapshot)
167
- VALUES (?, ?, ?, ?, ?)
168
- `).run(frameId, this.projectId, this.userId, task, JSON.stringify(snapshot));
169
- // Share frame with team (they see you're working on this)
170
- this.p2pSync.createFrame({
171
- id: frameId,
172
- type: 'active_frame',
173
- content: {
174
- task,
175
- user_id: this.userId,
176
- started_at: Date.now()
177
- }
178
- });
179
- this.activeFrames.set(frameId, {
180
- id: frameId,
181
- task,
182
- startedAt: Date.now(),
183
- context: snapshot
184
- });
185
- return frameId;
186
- }
187
- /**
188
- * Complete a frame and extract learnings
189
- */
190
- completeFrame(frameId, summary, learnings) {
191
- const frame = this.activeFrames.get(frameId);
192
- if (!frame)
193
- return;
194
- // Update frame status
195
- this.db.prepare(`
196
- UPDATE active_frames
197
- SET status = 'completed', last_activity = unixepoch()
198
- WHERE frame_id = ?
199
- `).run(frameId);
200
- // Extract and share important learnings
201
- learnings.forEach(learning => {
202
- this.addSharedContext('learning', learning, 0.7);
203
- });
204
- // Add to project knowledge if significant
205
- if (learnings.length > 0) {
206
- this.addProjectKnowledge('patterns', frame.task, summary);
207
- }
208
- // Notify team of completion
209
- this.p2pSync.updateFrame(frameId, {
210
- content: {
211
- ...this.p2pSync.getFrame(frameId)?.content,
212
- status: 'completed',
213
- summary,
214
- learnings,
215
- completed_at: Date.now()
216
- }
217
- });
218
- this.activeFrames.delete(frameId);
219
- }
220
- // ============================================
221
- // Context Assembly for LLM
222
- // ============================================
223
- /**
224
- * Get optimized context bundle for LLM
225
- */
226
- async getContextBundle(intent, tokenBudget = 8000) {
227
- const bundle = {
228
- shared: [],
229
- personal: [],
230
- active: [],
231
- knowledge: [],
232
- stats: {
233
- tokenCount: 0,
234
- sources: 0
235
- }
236
- };
237
- let tokensUsed = 0;
238
- const maxTokens = tokenBudget;
239
- // 1. Critical shared context (30% budget)
240
- const criticalShared = this.db.prepare(`
241
- SELECT * FROM shared_context
242
- WHERE project_id = ? AND active = TRUE
243
- ORDER BY importance DESC, updated_at DESC
244
- LIMIT 20
245
- `).all(this.projectId);
246
- for (const ctx of criticalShared) {
247
- const tokens = this.estimateTokens(ctx.content);
248
- if (tokensUsed + tokens > maxTokens * 0.3)
249
- break;
250
- bundle.shared.push({
251
- type: ctx.type,
252
- content: ctx.content,
253
- author: ctx.author_id,
254
- importance: ctx.importance
255
- });
256
- tokensUsed += tokens;
257
- }
258
- // 2. Active team frames (20% budget)
259
- const activeFrames = this.db.prepare(`
260
- SELECT * FROM active_frames
261
- WHERE project_id = ? AND status = 'active'
262
- ORDER BY last_activity DESC
263
- LIMIT 10
264
- `).all(this.projectId);
265
- for (const frame of activeFrames) {
266
- const tokens = this.estimateTokens(frame.task);
267
- if (tokensUsed + tokens > maxTokens * 0.5)
268
- break;
269
- bundle.active.push({
270
- user: frame.user_id,
271
- task: frame.task,
272
- duration: Date.now() - frame.started_at * 1000
273
- });
274
- tokensUsed += tokens;
275
- }
276
- // 3. Relevant project knowledge (30% budget)
277
- const knowledge = this.db.prepare(`
278
- SELECT * FROM project_knowledge
279
- WHERE project_id = ?
280
- ORDER BY confidence DESC, usage_count DESC
281
- LIMIT 15
282
- `).all(this.projectId);
283
- for (const k of knowledge) {
284
- const tokens = this.estimateTokens(k.content);
285
- if (tokensUsed + tokens > maxTokens * 0.8)
286
- break;
287
- bundle.knowledge.push({
288
- category: k.category,
289
- title: k.title,
290
- content: k.content,
291
- confidence: k.confidence
292
- });
293
- tokensUsed += tokens;
294
- }
295
- // 4. Personal context (remaining budget)
296
- const personal = this.db.prepare(`
297
- SELECT * FROM personal_context
298
- WHERE user_id = ? AND project_id = ?
299
- ORDER BY created_at DESC
300
- LIMIT 10
301
- `).all(this.userId, this.projectId);
302
- for (const p of personal) {
303
- const tokens = this.estimateTokens(p.content);
304
- if (tokensUsed + tokens > maxTokens * 0.95)
305
- break;
306
- bundle.personal.push({
307
- type: p.type,
308
- content: p.content
309
- });
310
- tokensUsed += tokens;
311
- }
312
- bundle.stats.tokenCount = tokensUsed;
313
- bundle.stats.sources = bundle.shared.length + bundle.personal.length +
314
- bundle.active.length + bundle.knowledge.length;
315
- return bundle;
316
- }
317
- // ============================================
318
- // Knowledge Extraction & Learning
319
- // ============================================
320
- addProjectKnowledge(category, title, content) {
321
- const knowledgeId = this.generateContextId(content);
322
- this.db.prepare(`
323
- INSERT OR REPLACE INTO project_knowledge
324
- (knowledge_id, project_id, category, title, content, confidence)
325
- VALUES (?, ?, ?, ?, ?, ?)
326
- `).run(knowledgeId, this.projectId, category, title, content, 0.5);
327
- // Share significant knowledge with team
328
- this.p2pSync.createFrame({
329
- id: knowledgeId,
330
- type: 'project_knowledge',
331
- content: {
332
- category,
333
- title,
334
- content
335
- }
336
- });
337
- }
338
- findSimilarContext(content) {
339
- // Simple similarity check - in production use embeddings
340
- const words = content.toLowerCase().split(/\s+/);
341
- const results = this.db.prepare(`
342
- SELECT * FROM shared_context
343
- WHERE project_id = ? AND active = TRUE
344
- `).all(this.projectId);
345
- for (const ctx of results) {
346
- const ctxWords = ctx.content.toLowerCase().split(/\s+/);
347
- const overlap = words.filter(w => ctxWords.includes(w)).length;
348
- if (overlap / words.length > 0.7) {
349
- return ctx;
350
- }
351
- }
352
- return null;
353
- }
354
- reinforceContext(contextId) {
355
- // Increase importance when context is referenced again
356
- this.db.prepare(`
357
- UPDATE shared_context
358
- SET importance = MIN(1.0, importance + 0.1),
359
- updated_at = unixepoch()
360
- WHERE context_id = ?
361
- `).run(contextId);
362
- // Update decay tracking
363
- this.db.prepare(`
364
- INSERT INTO context_decay (context_id, last_accessed, access_count)
365
- VALUES (?, unixepoch(), 1)
366
- ON CONFLICT(context_id) DO UPDATE SET
367
- last_accessed = unixepoch(),
368
- access_count = access_count + 1
369
- `).run(contextId);
370
- }
371
- // ============================================
372
- // Sync Handlers
373
- // ============================================
374
- setupSyncHandlers() {
375
- // Listen for shared context updates from team
376
- setInterval(() => {
377
- this.syncSharedContext();
378
- }, 5000);
379
- // Decay old context importance
380
- setInterval(() => {
381
- this.decayOldContext();
382
- }, 3600000); // Every hour
383
- }
384
- async syncSharedContext() {
385
- // P2P sync handles the actual synchronization
386
- // This method processes received updates
387
- const stats = await this.p2pSync.sync();
388
- console.log(`Synced with ${stats.connectedPeers} peers`);
389
- }
390
- decayOldContext() {
391
- // Reduce importance of unused context
392
- this.db.prepare(`
393
- UPDATE shared_context
394
- SET importance = importance * 0.95
395
- WHERE project_id = ?
396
- AND updated_at < unixepoch() - 86400 * 7 -- 7 days old
397
- AND importance > 0.1
398
- `).run(this.projectId);
399
- }
400
- // ============================================
401
- // Utilities
402
- // ============================================
403
- generateContextId(content) {
404
- return createHash('sha256')
405
- .update(content)
406
- .digest('hex')
407
- .substring(0, 12);
408
- }
409
- estimateTokens(text) {
410
- // Rough estimate: 1 token per 4 characters
411
- return Math.ceil(text.length / 4);
412
- }
413
- captureContextSnapshot() {
414
- const shared = this.db.prepare(`
415
- SELECT type, content, importance FROM shared_context
416
- WHERE project_id = ? AND active = TRUE
417
- ORDER BY importance DESC
418
- LIMIT 10
419
- `).all(this.projectId);
420
- const personal = this.db.prepare(`
421
- SELECT type, content FROM personal_context
422
- WHERE user_id = ? AND project_id = ?
423
- ORDER BY created_at DESC
424
- LIMIT 5
425
- `).all(this.userId, this.projectId);
426
- return {
427
- timestamp: Date.now(),
428
- shared: shared,
429
- personal: personal
430
- };
431
- }
432
- // ============================================
433
- // Public API
434
- // ============================================
435
- getTeamActivity() {
436
- const activeFrames = this.db.prepare(`
437
- SELECT user_id, task, started_at FROM active_frames
438
- WHERE project_id = ? AND status = 'active'
439
- `).all(this.projectId);
440
- const recentContext = this.db.prepare(`
441
- SELECT type, COUNT(*) as count FROM shared_context
442
- WHERE project_id = ? AND created_at > unixepoch() - 3600
443
- GROUP BY type
444
- `).all(this.projectId);
445
- return {
446
- activeUsers: [...new Set(activeFrames.map(f => f.user_id))],
447
- activeFrames: activeFrames.map(f => ({
448
- user: f.user_id,
449
- task: f.task,
450
- duration: Date.now() - f.started_at * 1000
451
- })),
452
- recentContext: recentContext
453
- };
454
- }
455
- exportContext() {
456
- const shared = this.db.prepare(`
457
- SELECT * FROM shared_context WHERE project_id = ?
458
- `).all(this.projectId);
459
- const knowledge = this.db.prepare(`
460
- SELECT * FROM project_knowledge WHERE project_id = ?
461
- `).all(this.projectId);
462
- return JSON.stringify({
463
- projectId: this.projectId,
464
- exported: Date.now(),
465
- sharedContext: shared,
466
- projectKnowledge: knowledge
467
- }, null, 2);
468
- }
469
- disconnect() {
470
- this.p2pSync.disconnect();
471
- this.db.close();
472
- }
473
- }
474
- // ============================================
475
- // Helper Classes
476
- // ============================================
477
- class SharedContext {
478
- db;
479
- p2pSync;
480
- constructor(db, p2pSync) {
481
- this.db = db;
482
- this.p2pSync = p2pSync;
483
- }
484
- }
485
- class PersonalContext {
486
- db;
487
- constructor(db) {
488
- this.db = db;
489
- }
490
- }
491
- //# sourceMappingURL=team-context-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-context-sync.js","sourceRoot":"","sources":["../../../p2p-sync/src/team-context-sync.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Script to merge duplicate Linear tasks
4
- * Keeps the lowest-numbered task as primary and marks others as duplicates
5
- */
6
- export {};
7
- //# sourceMappingURL=merge-linear-duplicates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-linear-duplicates.d.ts","sourceRoot":"","sources":["../../scripts/merge-linear-duplicates.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -1,126 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Script to merge duplicate Linear tasks
4
- * Keeps the lowest-numbered task as primary and marks others as duplicates
5
- */
6
- import { LinearClient } from '@linear/sdk';
7
- import { readFileSync } from 'fs';
8
- import { join } from 'path';
9
- const duplicateGroups = [
10
- {
11
- name: 'Linear API Integration',
12
- taskIds: ['STA-88', 'STA-74', 'STA-61', 'STA-46', 'STA-32', 'STA-9'],
13
- primaryId: 'STA-9',
14
- },
15
- {
16
- name: 'Performance Optimization',
17
- taskIds: ['STA-87', 'STA-73', 'STA-60', 'STA-45', 'STA-31', 'STA-13', 'STA-21', 'STA-35', 'STA-50', 'STA-63', 'STA-77'],
18
- primaryId: 'STA-13',
19
- },
20
- {
21
- name: 'Security Audit and Input Validation',
22
- taskIds: ['STA-85', 'STA-71', 'STA-58', 'STA-43', 'STA-29'],
23
- primaryId: 'STA-29',
24
- },
25
- {
26
- name: 'Implement Proper Error Handling',
27
- taskIds: ['STA-84', 'STA-70', 'STA-57', 'STA-42', 'STA-28'],
28
- primaryId: 'STA-28',
29
- },
30
- {
31
- name: 'Implement Comprehensive Testing Suite',
32
- taskIds: ['STA-83', 'STA-69', 'STA-56', 'STA-41', 'STA-27'],
33
- primaryId: 'STA-27',
34
- },
35
- ];
36
- async function mergeDuplicateTasks() {
37
- console.log('šŸ”„ Starting Linear duplicate task merge...\n');
38
- // Load Linear tokens
39
- const tokensPath = join(process.cwd(), '.stackmemory', 'linear-tokens.json');
40
- let accessToken;
41
- try {
42
- const tokensData = readFileSync(tokensPath, 'utf8');
43
- const tokens = JSON.parse(tokensData);
44
- accessToken = tokens.accessToken;
45
- console.log('āœ… Loaded Linear authentication tokens\n');
46
- }
47
- catch (error) {
48
- console.error('āŒ Failed to load Linear tokens. Please run: stackmemory linear setup');
49
- process.exit(1);
50
- }
51
- // Initialize Linear client
52
- const client = new LinearClient({
53
- apiKey: accessToken,
54
- });
55
- // Process each duplicate group
56
- for (const group of duplicateGroups) {
57
- console.log(`\nšŸ“‹ Processing: ${group.name}`);
58
- console.log(` Primary: ${group.primaryId}`);
59
- console.log(` Duplicates: ${group.taskIds.filter(id => id !== group.primaryId).join(', ')}`);
60
- try {
61
- // Get the primary issue
62
- const primaryIssue = await client.issue(group.primaryId);
63
- if (!primaryIssue) {
64
- console.log(` āš ļø Primary issue ${group.primaryId} not found, skipping group`);
65
- continue;
66
- }
67
- // Collect descriptions from all duplicates
68
- let combinedDescription = primaryIssue.description || '';
69
- const duplicateIds = group.taskIds.filter(id => id !== group.primaryId);
70
- for (const duplicateId of duplicateIds) {
71
- try {
72
- const duplicateIssue = await client.issue(duplicateId);
73
- if (!duplicateIssue) {
74
- console.log(` āš ļø Issue ${duplicateId} not found, skipping`);
75
- continue;
76
- }
77
- // Add duplicate's description if it exists and differs
78
- if (duplicateIssue.description &&
79
- duplicateIssue.description !== primaryIssue.description) {
80
- combinedDescription += `\n\n---\n[Merged from ${duplicateId}]\n${duplicateIssue.description}`;
81
- }
82
- // Get the canceled state for the team
83
- const team = await duplicateIssue.team;
84
- const states = await team.states();
85
- const canceledState = states.nodes.find(s => s.type === 'canceled');
86
- if (!canceledState) {
87
- console.log(` āš ļø No 'canceled' state found for team, skipping ${duplicateId}`);
88
- continue;
89
- }
90
- // Update duplicate to canceled state with reference to primary
91
- await duplicateIssue.update({
92
- stateId: canceledState.id,
93
- description: `Duplicate of ${group.primaryId}\n\n${duplicateIssue.description || ''}`,
94
- });
95
- console.log(` āœ… Marked ${duplicateId} as duplicate of ${group.primaryId}`);
96
- }
97
- catch (error) {
98
- console.log(` āŒ Failed to process ${duplicateId}: ${error.message}`);
99
- }
100
- }
101
- // Update primary issue with combined description if changed
102
- if (combinedDescription !== primaryIssue.description) {
103
- await primaryIssue.update({
104
- description: combinedDescription,
105
- });
106
- console.log(` āœ… Updated ${group.primaryId} with merged descriptions`);
107
- }
108
- console.log(` āœ… Group "${group.name}" processed successfully`);
109
- }
110
- catch (error) {
111
- console.error(` āŒ Error processing group: ${error.message}`);
112
- }
113
- }
114
- console.log('\n✨ Duplicate merge complete!');
115
- console.log('\nšŸ“Š Summary:');
116
- console.log(` Groups processed: ${duplicateGroups.length}`);
117
- console.log(` Total tasks affected: ${duplicateGroups.reduce((acc, g) => acc + g.taskIds.length, 0)}`);
118
- console.log(` Primary tasks kept: ${duplicateGroups.length}`);
119
- console.log(` Tasks marked as duplicate: ${duplicateGroups.reduce((acc, g) => acc + g.taskIds.length - 1, 0)}`);
120
- }
121
- // Run the merge
122
- mergeDuplicateTasks().catch((error) => {
123
- console.error('āŒ Fatal error:', error);
124
- process.exit(1);
125
- });
126
- //# sourceMappingURL=merge-linear-duplicates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-linear-duplicates.js","sourceRoot":"","sources":["../../scripts/merge-linear-duplicates.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { Router } from 'express';
2
- import { Server } from 'http';
3
- export declare class AnalyticsAPI {
4
- private router;
5
- private analyticsService;
6
- private wss?;
7
- constructor(projectPath?: string);
8
- private setupRoutes;
9
- private getMetrics;
10
- private getTasks;
11
- private getTeamMetrics;
12
- private addTask;
13
- private updateTask;
14
- private syncLinear;
15
- private exportMetrics;
16
- private parseQuery;
17
- private getPresetTimeRange;
18
- private convertToCSV;
19
- private handleError;
20
- setupWebSocket(server: Server): void;
21
- getRouter(): Router;
22
- close(): void;
23
- }
24
- //# sourceMappingURL=analytics-api.d.ts.map