@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
@@ -0,0 +1,425 @@
1
+ /**
2
+ * Trace Detection and Bundling System
3
+ * Identifies chains of related tool calls and bundles them as single traces
4
+ */
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ import { TraceType, DEFAULT_TRACE_CONFIG, TRACE_PATTERNS, } from './types';
7
+ import { ConfigManager } from '../config/config-manager';
8
+ import { TraceStore } from './trace-store';
9
+ export class TraceDetector {
10
+ config;
11
+ activeTrace = [];
12
+ lastToolTime = 0;
13
+ traces = [];
14
+ configManager;
15
+ traceStore;
16
+ constructor(config = {}, configManager, db) {
17
+ this.config = { ...DEFAULT_TRACE_CONFIG, ...config };
18
+ this.configManager = configManager || new ConfigManager();
19
+ if (db) {
20
+ this.traceStore = new TraceStore(db);
21
+ // Load existing traces from database
22
+ this.loadTracesFromStore();
23
+ }
24
+ }
25
+ /**
26
+ * Load traces from the database
27
+ */
28
+ loadTracesFromStore() {
29
+ if (!this.traceStore)
30
+ return;
31
+ try {
32
+ // Load recent traces (last 24 hours)
33
+ const recentTraces = this.traceStore.getAllTraces();
34
+ const cutoff = Date.now() - 24 * 60 * 60 * 1000;
35
+ this.traces = recentTraces.filter((t) => t.metadata.startTime >= cutoff);
36
+ }
37
+ catch (error) {
38
+ // If loading fails, start with empty traces
39
+ console.error('Failed to load traces from store:', error);
40
+ this.traces = [];
41
+ }
42
+ }
43
+ /**
44
+ * Add a tool call and check if it belongs to current trace
45
+ */
46
+ addToolCall(tool) {
47
+ const now = Date.now();
48
+ // Check if this tool belongs to the current trace
49
+ if (this.shouldStartNewTrace(tool)) {
50
+ // Finalize current trace if it exists
51
+ if (this.activeTrace.length > 0) {
52
+ this.finalizeTrace();
53
+ }
54
+ // Start new trace
55
+ this.activeTrace = [tool];
56
+ }
57
+ else {
58
+ // Add to current trace
59
+ this.activeTrace.push(tool);
60
+ }
61
+ this.lastToolTime = tool.timestamp;
62
+ // Check if trace is getting too large
63
+ if (this.activeTrace.length >= this.config.maxTraceSize) {
64
+ this.finalizeTrace();
65
+ }
66
+ }
67
+ /**
68
+ * Determine if a tool call should start a new trace
69
+ */
70
+ shouldStartNewTrace(tool) {
71
+ // First tool always starts a new trace
72
+ if (this.activeTrace.length === 0) {
73
+ return false;
74
+ }
75
+ const lastTool = this.activeTrace[this.activeTrace.length - 1];
76
+ // Time proximity check
77
+ const timeDiff = tool.timestamp - lastTool.timestamp;
78
+ if (timeDiff > this.config.timeProximityMs) {
79
+ return true;
80
+ }
81
+ // Directory check if enabled
82
+ if (this.config.sameDirThreshold) {
83
+ const lastFiles = lastTool.filesAffected || [];
84
+ const currentFiles = tool.filesAffected || [];
85
+ if (lastFiles.length > 0 && currentFiles.length > 0) {
86
+ const lastDirs = lastFiles.map((f) => this.getDirectory(f));
87
+ const currentDirs = currentFiles.map((f) => this.getDirectory(f));
88
+ const hasCommonDir = lastDirs.some((d) => currentDirs.includes(d));
89
+ if (!hasCommonDir) {
90
+ return true;
91
+ }
92
+ }
93
+ }
94
+ // Causal relationship check
95
+ if (this.config.causalRelationship) {
96
+ // If last tool had an error and current tool is not a fix attempt, start new trace
97
+ if (lastTool.error && !this.isFixAttempt(tool, lastTool)) {
98
+ return true;
99
+ }
100
+ }
101
+ return false;
102
+ }
103
+ /**
104
+ * Check if a tool is attempting to fix an error from previous tool
105
+ */
106
+ isFixAttempt(current, previous) {
107
+ // Edit after error is likely a fix
108
+ if (previous.error &&
109
+ (current.tool === 'edit' || current.tool === 'write')) {
110
+ return true;
111
+ }
112
+ // Test after fix is validation
113
+ if (current.tool === 'test' || current.tool === 'bash') {
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * Finalize current trace and add to traces list
120
+ */
121
+ finalizeTrace() {
122
+ if (this.activeTrace.length === 0)
123
+ return;
124
+ const trace = this.createTrace(this.activeTrace);
125
+ this.traces.push(trace);
126
+ // Persist to database if store is available
127
+ if (this.traceStore) {
128
+ try {
129
+ this.traceStore.saveTrace(trace);
130
+ }
131
+ catch (error) {
132
+ console.error('Failed to persist trace:', error);
133
+ }
134
+ }
135
+ this.activeTrace = [];
136
+ }
137
+ /**
138
+ * Create a trace from a sequence of tool calls
139
+ */
140
+ createTrace(tools) {
141
+ const id = uuidv4();
142
+ const type = this.detectTraceType(tools);
143
+ const metadata = this.extractMetadata(tools);
144
+ const score = this.calculateTraceScore(tools, metadata);
145
+ const summary = this.generateSummary(tools, type, metadata);
146
+ const trace = {
147
+ id,
148
+ type,
149
+ tools,
150
+ score,
151
+ summary,
152
+ metadata,
153
+ };
154
+ // Check if trace should be compressed
155
+ const ageHours = (Date.now() - metadata.startTime) / (1000 * 60 * 60);
156
+ if (ageHours > this.config.compressionThreshold) {
157
+ trace.compressed = this.compressTrace(trace);
158
+ }
159
+ return trace;
160
+ }
161
+ /**
162
+ * Detect the type of trace based on tool patterns
163
+ */
164
+ detectTraceType(tools) {
165
+ const toolSequence = tools.map((t) => t.tool);
166
+ // Check against known patterns
167
+ for (const pattern of TRACE_PATTERNS) {
168
+ if (this.matchesPattern(toolSequence, pattern.pattern)) {
169
+ return pattern.type;
170
+ }
171
+ }
172
+ // Heuristic detection
173
+ if (toolSequence.includes('search') || toolSequence.includes('grep')) {
174
+ if (toolSequence.includes('edit')) {
175
+ return TraceType.SEARCH_DRIVEN;
176
+ }
177
+ return TraceType.EXPLORATION;
178
+ }
179
+ if (tools.some((t) => t.error)) {
180
+ return TraceType.ERROR_RECOVERY;
181
+ }
182
+ if (toolSequence.includes('test')) {
183
+ return TraceType.TESTING;
184
+ }
185
+ if (toolSequence.includes('write')) {
186
+ return TraceType.FEATURE_IMPLEMENTATION;
187
+ }
188
+ return TraceType.UNKNOWN;
189
+ }
190
+ /**
191
+ * Check if tool sequence matches a pattern
192
+ */
193
+ matchesPattern(sequence, pattern) {
194
+ if (pattern instanceof RegExp) {
195
+ return pattern.test(sequence.join('→'));
196
+ }
197
+ if (Array.isArray(pattern)) {
198
+ // Check if pattern is a subsequence
199
+ let patternIndex = 0;
200
+ for (const tool of sequence) {
201
+ if (tool === pattern[patternIndex]) {
202
+ patternIndex++;
203
+ if (patternIndex >= pattern.length) {
204
+ return true;
205
+ }
206
+ }
207
+ }
208
+ }
209
+ return false;
210
+ }
211
+ /**
212
+ * Extract metadata from tool calls
213
+ */
214
+ extractMetadata(tools) {
215
+ const startTime = tools[0].timestamp;
216
+ const endTime = tools[tools.length - 1].timestamp;
217
+ const filesModified = new Set();
218
+ const errorsEncountered = [];
219
+ const decisionsRecorded = [];
220
+ let hasCausalChain = false;
221
+ for (let i = 0; i < tools.length; i++) {
222
+ const tool = tools[i];
223
+ // Collect files
224
+ if (tool.filesAffected) {
225
+ tool.filesAffected.forEach((f) => filesModified.add(f));
226
+ }
227
+ // Collect errors
228
+ if (tool.error) {
229
+ errorsEncountered.push(tool.error);
230
+ // Check if next tool is a fix attempt
231
+ if (i < tools.length - 1) {
232
+ const nextTool = tools[i + 1];
233
+ if (this.isFixAttempt(nextTool, tool)) {
234
+ hasCausalChain = true;
235
+ }
236
+ }
237
+ }
238
+ // Collect decisions (if tool is decision_recording)
239
+ if (tool.tool === 'decision_recording' && tool.arguments?.decision) {
240
+ decisionsRecorded.push(tool.arguments.decision);
241
+ }
242
+ }
243
+ return {
244
+ startTime,
245
+ endTime,
246
+ filesModified: Array.from(filesModified),
247
+ errorsEncountered,
248
+ decisionsRecorded,
249
+ causalChain: hasCausalChain,
250
+ };
251
+ }
252
+ /**
253
+ * Calculate importance score for a trace
254
+ */
255
+ calculateTraceScore(tools, metadata) {
256
+ // Get individual tool scores
257
+ const toolScores = tools.map((t) => this.configManager.calculateScore(t.tool, {
258
+ filesAffected: t.filesAffected?.length || 0,
259
+ isPermanent: this.isPermanentChange(t),
260
+ referenceCount: 0, // Would need to track references
261
+ }));
262
+ // Use MAX strategy for trace scoring (highest tool determines trace importance)
263
+ const maxScore = Math.max(...toolScores);
264
+ // Apply bonuses
265
+ let score = maxScore;
266
+ // Bonus for causal chains (error→fix→verify)
267
+ if (metadata.causalChain) {
268
+ score = Math.min(score + 0.1, 1.0);
269
+ }
270
+ // Bonus for decisions
271
+ if (metadata.decisionsRecorded.length > 0) {
272
+ score = Math.min(score + 0.05 * metadata.decisionsRecorded.length, 1.0);
273
+ }
274
+ // Penalty for errors without fixes
275
+ if (metadata.errorsEncountered.length > 0 && !metadata.causalChain) {
276
+ score = Math.max(score - 0.1, 0);
277
+ }
278
+ return score;
279
+ }
280
+ /**
281
+ * Check if a tool call represents a permanent change
282
+ */
283
+ isPermanentChange(tool) {
284
+ const permanentTools = ['write', 'edit', 'decision_recording'];
285
+ return permanentTools.includes(tool.tool);
286
+ }
287
+ /**
288
+ * Generate a summary for the trace
289
+ */
290
+ generateSummary(tools, type, metadata) {
291
+ const toolChain = tools.map((t) => t.tool).join('→');
292
+ switch (type) {
293
+ case TraceType.SEARCH_DRIVEN:
294
+ return `Search-driven modification: ${toolChain}`;
295
+ case TraceType.ERROR_RECOVERY:
296
+ const error = metadata.errorsEncountered[0] || 'unknown error';
297
+ return `Error recovery: ${error} via ${toolChain}`;
298
+ case TraceType.FEATURE_IMPLEMENTATION:
299
+ const files = metadata.filesModified.length;
300
+ return `Feature implementation: ${files} files via ${toolChain}`;
301
+ case TraceType.REFACTORING:
302
+ return `Code refactoring: ${toolChain}`;
303
+ case TraceType.TESTING:
304
+ return `Test execution: ${toolChain}`;
305
+ case TraceType.EXPLORATION:
306
+ return `Codebase exploration: ${toolChain}`;
307
+ case TraceType.DEBUGGING:
308
+ return `Debugging session: ${toolChain}`;
309
+ case TraceType.BUILD_DEPLOY:
310
+ return `Build and deploy: ${toolChain}`;
311
+ default:
312
+ return `Tool sequence: ${toolChain}`;
313
+ }
314
+ }
315
+ /**
316
+ * Compress a trace for long-term storage
317
+ */
318
+ compressTrace(trace) {
319
+ const pattern = trace.tools.map((t) => t.tool).join('→');
320
+ const duration = trace.metadata.endTime - trace.metadata.startTime;
321
+ return {
322
+ pattern,
323
+ summary: trace.summary,
324
+ score: trace.score,
325
+ toolCount: trace.tools.length,
326
+ duration,
327
+ timestamp: trace.metadata.startTime,
328
+ };
329
+ }
330
+ /**
331
+ * Get directory from file path
332
+ */
333
+ getDirectory(filePath) {
334
+ const parts = filePath.split('/');
335
+ parts.pop(); // Remove filename
336
+ return parts.join('/');
337
+ }
338
+ /**
339
+ * Flush any pending trace
340
+ */
341
+ flush() {
342
+ if (this.activeTrace.length > 0) {
343
+ this.finalizeTrace();
344
+ }
345
+ }
346
+ /**
347
+ * Get all detected traces
348
+ */
349
+ getTraces() {
350
+ return this.traces;
351
+ }
352
+ /**
353
+ * Get traces by type
354
+ */
355
+ getTracesByType(type) {
356
+ return this.traces.filter((t) => t.type === type);
357
+ }
358
+ /**
359
+ * Get high-importance traces
360
+ */
361
+ getHighImportanceTraces(threshold = 0.7) {
362
+ return this.traces.filter((t) => t.score >= threshold);
363
+ }
364
+ /**
365
+ * Compress old traces
366
+ */
367
+ compressOldTraces(ageHours = 24) {
368
+ let compressed = 0;
369
+ const now = Date.now();
370
+ for (const trace of this.traces) {
371
+ const age = (now - trace.metadata.startTime) / (1000 * 60 * 60);
372
+ if (age > ageHours && !trace.compressed) {
373
+ trace.compressed = this.compressTrace(trace);
374
+ // Optionally remove full tool data to save space
375
+ // trace.tools = [];
376
+ compressed++;
377
+ }
378
+ }
379
+ return compressed;
380
+ }
381
+ /**
382
+ * Export traces for analysis
383
+ */
384
+ exportTraces() {
385
+ return JSON.stringify(this.traces, null, 2);
386
+ }
387
+ /**
388
+ * Get statistics about traces
389
+ */
390
+ getStatistics() {
391
+ const stats = {
392
+ totalTraces: this.traces.length,
393
+ tracesByType: {},
394
+ averageScore: 0,
395
+ averageLength: 0,
396
+ compressedCount: 0,
397
+ highImportanceCount: 0,
398
+ };
399
+ if (this.traces.length === 0)
400
+ return stats;
401
+ let totalScore = 0;
402
+ let totalLength = 0;
403
+ for (const trace of this.traces) {
404
+ // Type distribution
405
+ stats.tracesByType[trace.type] =
406
+ (stats.tracesByType[trace.type] || 0) + 1;
407
+ // Scores
408
+ totalScore += trace.score;
409
+ // Length
410
+ totalLength += trace.tools.length;
411
+ // Compressed
412
+ if (trace.compressed) {
413
+ stats.compressedCount++;
414
+ }
415
+ // High importance
416
+ if (trace.score >= 0.7) {
417
+ stats.highImportanceCount++;
418
+ }
419
+ }
420
+ stats.averageScore = totalScore / this.traces.length;
421
+ stats.averageLength = totalLength / this.traces.length;
422
+ return stats;
423
+ }
424
+ }
425
+ //# sourceMappingURL=trace-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-detector.js","sourceRoot":"","sources":["../../../../src/core/trace/trace-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Trace Store - Database persistence for traces
3
+ */
4
+ import Database from 'better-sqlite3';
5
+ import { Trace, TraceType } from './types.js';
6
+ export declare class TraceStore {
7
+ private db;
8
+ constructor(db: Database.Database);
9
+ /**
10
+ * Initialize database schema for traces
11
+ */
12
+ private initializeSchema;
13
+ /**
14
+ * Save a trace to the database
15
+ */
16
+ saveTrace(trace: Trace): void;
17
+ /**
18
+ * Load a trace by ID
19
+ */
20
+ getTrace(id: string): Trace | null;
21
+ /**
22
+ * Load all traces
23
+ */
24
+ getAllTraces(): Trace[];
25
+ /**
26
+ * Load traces by type
27
+ */
28
+ getTracesByType(type: TraceType): Trace[];
29
+ /**
30
+ * Load traces by frame
31
+ */
32
+ getTracesByFrame(frameId: string): Trace[];
33
+ /**
34
+ * Load high-importance traces
35
+ */
36
+ getHighImportanceTraces(minScore?: number): Trace[];
37
+ /**
38
+ * Load error traces
39
+ */
40
+ getErrorTraces(): Trace[];
41
+ /**
42
+ * Get trace statistics
43
+ */
44
+ getStatistics(): {
45
+ totalTraces: number;
46
+ tracesByType: Record<string, number>;
47
+ averageScore: number;
48
+ averageLength: number;
49
+ errorRate: number;
50
+ };
51
+ /**
52
+ * Delete old traces
53
+ */
54
+ deleteOldTraces(olderThanMs: number): number;
55
+ /**
56
+ * Convert database rows to Trace object
57
+ */
58
+ private rowsToTrace;
59
+ }
60
+ //# sourceMappingURL=trace-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-store.d.ts","sourceRoot":"","sources":["../../../../src/core/trace/trace-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EACL,KAAK,EAEL,SAAS,EAGV,MAAM,YAAY,CAAC;AAGpB,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAKjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkFxB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA6D7B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAwBlC;;OAEG;IACH,YAAY,IAAI,KAAK,EAAE;IAsBvB;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,EAAE;IAsBzC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;IAsB1C;;OAEG;IACH,uBAAuB,CAAC,QAAQ,GAAE,MAAY,GAAG,KAAK,EAAE;IAsBxD;;OAEG;IACH,cAAc,IAAI,KAAK,EAAE;IAwBzB;;OAEG;IACH,aAAa,IAAI;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB;IAwCD;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAa5C;;OAEG;IACH,OAAO,CAAC,WAAW;CAwCpB"}