@stackmemoryai/stackmemory 0.3.1 → 0.3.3

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 (734) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/commands/clear.js +191 -0
  3. package/dist/cli/commands/clear.js.map +7 -0
  4. package/dist/cli/commands/config.js +152 -1
  5. package/dist/cli/commands/config.js.map +2 -2
  6. package/dist/cli/commands/dashboard.js +178 -0
  7. package/dist/cli/commands/dashboard.js.map +7 -0
  8. package/dist/cli/commands/handoff.js +125 -8
  9. package/dist/cli/commands/handoff.js.map +2 -2
  10. package/dist/cli/commands/linear-create.js +132 -0
  11. package/dist/cli/commands/linear-create.js.map +7 -0
  12. package/dist/cli/commands/linear-list.js +69 -0
  13. package/dist/cli/commands/linear-list.js.map +7 -0
  14. package/dist/cli/commands/linear-migrate.js +40 -0
  15. package/dist/cli/commands/linear-migrate.js.map +7 -0
  16. package/dist/cli/commands/linear.js +185 -36
  17. package/dist/cli/commands/linear.js.map +2 -2
  18. package/dist/cli/commands/monitor.js +309 -0
  19. package/dist/cli/commands/monitor.js.map +7 -0
  20. package/dist/cli/commands/quality.js +414 -0
  21. package/dist/cli/commands/quality.js.map +7 -0
  22. package/dist/cli/commands/storage.js +275 -0
  23. package/dist/cli/commands/storage.js.map +7 -0
  24. package/dist/cli/commands/tui.js +66 -0
  25. package/dist/cli/commands/tui.js.map +7 -0
  26. package/dist/cli/commands/workflow.js +134 -0
  27. package/dist/cli/commands/workflow.js.map +7 -0
  28. package/dist/cli/index.js +104 -8
  29. package/dist/cli/index.js.map +3 -3
  30. package/dist/core/analytics/team-analytics.js +374 -0
  31. package/dist/core/analytics/team-analytics.js.map +7 -0
  32. package/dist/core/context/context-bridge.js +234 -0
  33. package/dist/core/context/context-bridge.js.map +7 -0
  34. package/dist/core/context/dual-stack-manager.js +850 -0
  35. package/dist/core/context/dual-stack-manager.js.map +7 -0
  36. package/dist/core/context/frame-handoff-manager.js +384 -0
  37. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  38. package/dist/core/context/frame-manager.js +132 -12
  39. package/dist/core/context/frame-manager.js.map +2 -2
  40. package/dist/core/context/permission-manager.js +181 -0
  41. package/dist/core/context/permission-manager.js.map +7 -0
  42. package/dist/core/context/shared-context-layer.js +386 -0
  43. package/dist/core/context/shared-context-layer.js.map +7 -0
  44. package/dist/core/context/stack-merge-resolver.js +600 -0
  45. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  46. package/dist/core/context/validation.js +121 -0
  47. package/dist/core/context/validation.js.map +7 -0
  48. package/dist/core/database/connection-pool.js +266 -175
  49. package/dist/core/database/connection-pool.js.map +2 -2
  50. package/dist/core/database/database-adapter.js +51 -0
  51. package/dist/core/database/database-adapter.js.map +7 -0
  52. package/dist/core/database/migration-manager.js +514 -0
  53. package/dist/core/database/migration-manager.js.map +7 -0
  54. package/dist/core/database/paradedb-adapter.js +970 -0
  55. package/dist/core/database/paradedb-adapter.js.map +7 -0
  56. package/dist/core/database/query-router.js +421 -0
  57. package/dist/core/database/query-router.js.map +7 -0
  58. package/dist/core/database/sqlite-adapter.js +547 -0
  59. package/dist/core/database/sqlite-adapter.js.map +7 -0
  60. package/dist/core/errors/index.js +21 -1
  61. package/dist/core/errors/index.js.map +2 -2
  62. package/dist/core/frame/workflow-templates-stub.js +42 -0
  63. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  64. package/dist/core/frame/workflow-templates.js +276 -0
  65. package/dist/core/frame/workflow-templates.js.map +7 -0
  66. package/dist/core/merge/conflict-detector.js +5 -2
  67. package/dist/core/merge/conflict-detector.js.map +2 -2
  68. package/dist/core/merge/resolution-engine.js +3 -14
  69. package/dist/core/merge/resolution-engine.js.map +2 -2
  70. package/dist/core/merge/stack-diff.js.map +2 -2
  71. package/dist/core/monitoring/logger.js +18 -3
  72. package/dist/core/monitoring/logger.js.map +2 -2
  73. package/dist/core/monitoring/session-monitor.js +296 -0
  74. package/dist/core/monitoring/session-monitor.js.map +7 -0
  75. package/dist/core/retrieval/context-retriever.js +475 -0
  76. package/dist/core/retrieval/context-retriever.js.map +7 -0
  77. package/dist/core/retrieval/graph-retrieval.js +658 -0
  78. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  79. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  80. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  82. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  83. package/dist/core/session/clear-survival-stub.js +49 -0
  84. package/dist/core/session/clear-survival-stub.js.map +7 -0
  85. package/dist/core/session/clear-survival.js +426 -0
  86. package/dist/core/session/clear-survival.js.map +7 -0
  87. package/dist/core/session/handoff-generator.js +339 -0
  88. package/dist/core/session/handoff-generator.js.map +7 -0
  89. package/dist/core/session/session-manager.js +61 -26
  90. package/dist/core/session/session-manager.js.map +3 -3
  91. package/dist/core/skills/index.js +3 -0
  92. package/dist/core/skills/index.js.map +7 -0
  93. package/dist/core/skills/skill-storage.js +749 -0
  94. package/dist/core/skills/skill-storage.js.map +7 -0
  95. package/dist/core/skills/types.js +189 -0
  96. package/dist/core/skills/types.js.map +7 -0
  97. package/dist/core/storage/railway-optimized-storage.js +550 -0
  98. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  99. package/dist/core/storage/remote-storage.js +456 -0
  100. package/dist/core/storage/remote-storage.js.map +7 -0
  101. package/dist/core/trace/trace-detector.js +136 -5
  102. package/dist/core/trace/trace-detector.js.map +2 -2
  103. package/dist/core/trace/trace-store.js.map +2 -2
  104. package/dist/features/tui/components/analytics-panel.js +136 -0
  105. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  106. package/dist/features/tui/components/frame-visualizer.js +377 -0
  107. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  108. package/dist/features/tui/components/pr-tracker.js +123 -0
  109. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  110. package/dist/features/tui/components/session-monitor.js +286 -0
  111. package/dist/features/tui/components/session-monitor.js.map +7 -0
  112. package/dist/features/tui/components/subagent-fleet.js +388 -0
  113. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  114. package/dist/features/tui/components/task-board.js +475 -0
  115. package/dist/features/tui/components/task-board.js.map +7 -0
  116. package/dist/features/tui/index.js +397 -0
  117. package/dist/features/tui/index.js.map +7 -0
  118. package/dist/features/tui/services/data-service.js +654 -0
  119. package/dist/features/tui/services/data-service.js.map +7 -0
  120. package/dist/features/tui/services/websocket-client.js +149 -0
  121. package/dist/features/tui/services/websocket-client.js.map +7 -0
  122. package/dist/features/tui/terminal-compat.js +205 -0
  123. package/dist/features/tui/terminal-compat.js.map +7 -0
  124. package/dist/features/tui/types.js +1 -0
  125. package/dist/features/tui/types.js.map +7 -0
  126. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  127. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  128. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  129. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  131. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  132. package/dist/integrations/linear/client.js +22 -4
  133. package/dist/integrations/linear/client.js.map +2 -2
  134. package/dist/integrations/linear/migration.js +299 -0
  135. package/dist/integrations/linear/migration.js.map +7 -0
  136. package/dist/integrations/linear/oauth-server.js +396 -0
  137. package/dist/integrations/linear/oauth-server.js.map +7 -0
  138. package/dist/integrations/linear/rest-client.js +199 -0
  139. package/dist/integrations/linear/rest-client.js.map +7 -0
  140. package/dist/integrations/linear/sync.js +14 -2
  141. package/dist/integrations/linear/sync.js.map +2 -2
  142. package/dist/integrations/linear/webhook-handler.js +200 -0
  143. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  144. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  145. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  146. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  147. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  148. package/dist/integrations/mcp/refactored-server.js +31 -3
  149. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  150. package/dist/integrations/mcp/server.js +25 -7
  151. package/dist/integrations/mcp/server.js.map +2 -2
  152. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  153. package/dist/models/user.model.js +3 -0
  154. package/dist/models/user.model.js.map +2 -2
  155. package/dist/services/context-service.js.map +2 -2
  156. package/dist/utils/formatting.js +58 -0
  157. package/dist/utils/formatting.js.map +7 -0
  158. package/package.json +21 -5
  159. package/dist/cli/__tests__/index.test.js +0 -290
  160. package/dist/cli/__tests__/index.test.js.map +0 -7
  161. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  162. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  163. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  164. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  165. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  166. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  168. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  169. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  170. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  171. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  172. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  173. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  174. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  176. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  177. package/dist/core/trace/trace-detector.test.js +0 -401
  178. package/dist/core/trace/trace-detector.test.js.map +0 -7
  179. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  180. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  181. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  182. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  184. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  185. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  186. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  187. package/dist/scripts/benchmark-performance.d.ts +0 -7
  188. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  189. package/dist/scripts/benchmark-performance.js +0 -44
  190. package/dist/scripts/benchmark-performance.js.map +0 -1
  191. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  192. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  194. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  195. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  196. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  198. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  199. package/dist/scripts/initialize.d.ts +0 -6
  200. package/dist/scripts/initialize.d.ts.map +0 -1
  201. package/dist/scripts/initialize.js +0 -93
  202. package/dist/scripts/initialize.js.map +0 -1
  203. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  204. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  205. package/dist/scripts/list-linear-tasks.js +0 -121
  206. package/dist/scripts/list-linear-tasks.js.map +0 -1
  207. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  208. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  210. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  211. package/dist/scripts/show-linear-summary.d.ts +0 -6
  212. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  213. package/dist/scripts/show-linear-summary.js +0 -120
  214. package/dist/scripts/show-linear-summary.js.map +0 -1
  215. package/dist/scripts/status.d.ts +0 -6
  216. package/dist/scripts/status.d.ts.map +0 -1
  217. package/dist/scripts/status.js +0 -101
  218. package/dist/scripts/status.js.map +0 -1
  219. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  220. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.js +0 -504
  222. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  223. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  224. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  226. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  227. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  228. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  230. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  231. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  232. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  234. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  235. package/dist/src/cli/auto-detect.d.ts +0 -61
  236. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  237. package/dist/src/cli/auto-detect.js +0 -350
  238. package/dist/src/cli/auto-detect.js.map +0 -1
  239. package/dist/src/cli/browser-test.d.ts +0 -6
  240. package/dist/src/cli/browser-test.d.ts.map +0 -1
  241. package/dist/src/cli/browser-test.js +0 -32
  242. package/dist/src/cli/browser-test.js.map +0 -1
  243. package/dist/src/cli/claude-sm.d.ts +0 -7
  244. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  245. package/dist/src/cli/claude-sm.js +0 -412
  246. package/dist/src/cli/claude-sm.js.map +0 -1
  247. package/dist/src/cli/commands/agent.d.ts +0 -9
  248. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  249. package/dist/src/cli/commands/agent.js +0 -303
  250. package/dist/src/cli/commands/agent.js.map +0 -1
  251. package/dist/src/cli/commands/config.d.ts +0 -6
  252. package/dist/src/cli/commands/config.d.ts.map +0 -1
  253. package/dist/src/cli/commands/config.js +0 -224
  254. package/dist/src/cli/commands/config.js.map +0 -1
  255. package/dist/src/cli/commands/context.d.ts +0 -7
  256. package/dist/src/cli/commands/context.d.ts.map +0 -1
  257. package/dist/src/cli/commands/context.js +0 -365
  258. package/dist/src/cli/commands/context.js.map +0 -1
  259. package/dist/src/cli/commands/handoff.d.ts +0 -6
  260. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  261. package/dist/src/cli/commands/handoff.js +0 -212
  262. package/dist/src/cli/commands/handoff.js.map +0 -1
  263. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  264. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  265. package/dist/src/cli/commands/linear-test.js +0 -123
  266. package/dist/src/cli/commands/linear-test.js.map +0 -1
  267. package/dist/src/cli/commands/linear.d.ts +0 -6
  268. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  269. package/dist/src/cli/commands/linear.js +0 -393
  270. package/dist/src/cli/commands/linear.js.map +0 -1
  271. package/dist/src/cli/commands/log.d.ts +0 -7
  272. package/dist/src/cli/commands/log.d.ts.map +0 -1
  273. package/dist/src/cli/commands/log.js +0 -168
  274. package/dist/src/cli/commands/log.js.map +0 -1
  275. package/dist/src/cli/commands/onboard.d.ts +0 -8
  276. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  277. package/dist/src/cli/commands/onboard.js +0 -363
  278. package/dist/src/cli/commands/onboard.js.map +0 -1
  279. package/dist/src/cli/commands/projects.d.ts +0 -8
  280. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  281. package/dist/src/cli/commands/projects.js +0 -220
  282. package/dist/src/cli/commands/projects.js.map +0 -1
  283. package/dist/src/cli/commands/search.d.ts +0 -7
  284. package/dist/src/cli/commands/search.d.ts.map +0 -1
  285. package/dist/src/cli/commands/search.js +0 -162
  286. package/dist/src/cli/commands/search.js.map +0 -1
  287. package/dist/src/cli/commands/session.d.ts +0 -7
  288. package/dist/src/cli/commands/session.d.ts.map +0 -1
  289. package/dist/src/cli/commands/session.js +0 -222
  290. package/dist/src/cli/commands/session.js.map +0 -1
  291. package/dist/src/cli/commands/tasks.d.ts +0 -7
  292. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  293. package/dist/src/cli/commands/tasks.js +0 -229
  294. package/dist/src/cli/commands/tasks.js.map +0 -1
  295. package/dist/src/cli/commands/webhook.d.ts +0 -3
  296. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  297. package/dist/src/cli/commands/webhook.js +0 -157
  298. package/dist/src/cli/commands/webhook.js.map +0 -1
  299. package/dist/src/cli/commands/worktree.d.ts +0 -8
  300. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  301. package/dist/src/cli/commands/worktree.js +0 -339
  302. package/dist/src/cli/commands/worktree.js.map +0 -1
  303. package/dist/src/cli/index.d.ts +0 -8
  304. package/dist/src/cli/index.d.ts.map +0 -1
  305. package/dist/src/cli/index.js +0 -995
  306. package/dist/src/cli/index.js.map +0 -1
  307. package/dist/src/cli/utils/viewer.d.ts +0 -3
  308. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  309. package/dist/src/cli/utils/viewer.js +0 -91
  310. package/dist/src/cli/utils/viewer.js.map +0 -1
  311. package/dist/src/core/config/config-manager.d.ts +0 -95
  312. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  313. package/dist/src/core/config/config-manager.js +0 -359
  314. package/dist/src/core/config/config-manager.js.map +0 -1
  315. package/dist/src/core/config/types.d.ts +0 -72
  316. package/dist/src/core/config/types.d.ts.map +0 -1
  317. package/dist/src/core/config/types.js +0 -127
  318. package/dist/src/core/config/types.js.map +0 -1
  319. package/dist/src/core/context/auto-context.d.ts +0 -22
  320. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  321. package/dist/src/core/context/auto-context.js +0 -77
  322. package/dist/src/core/context/auto-context.js.map +0 -1
  323. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  324. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  325. package/dist/src/core/context/compaction-handler.js +0 -306
  326. package/dist/src/core/context/compaction-handler.js.map +0 -1
  327. package/dist/src/core/context/frame-database.d.ts +0 -59
  328. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  329. package/dist/src/core/context/frame-database.js +0 -333
  330. package/dist/src/core/context/frame-database.js.map +0 -1
  331. package/dist/src/core/context/frame-digest.d.ts +0 -59
  332. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  333. package/dist/src/core/context/frame-digest.js +0 -264
  334. package/dist/src/core/context/frame-digest.js.map +0 -1
  335. package/dist/src/core/context/frame-manager.d.ts +0 -112
  336. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  337. package/dist/src/core/context/frame-manager.js +0 -600
  338. package/dist/src/core/context/frame-manager.js.map +0 -1
  339. package/dist/src/core/context/frame-stack.d.ts +0 -85
  340. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  341. package/dist/src/core/context/frame-stack.js +0 -287
  342. package/dist/src/core/context/frame-stack.js.map +0 -1
  343. package/dist/src/core/context/frame-types.d.ts +0 -67
  344. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  345. package/dist/src/core/context/frame-types.js +0 -6
  346. package/dist/src/core/context/frame-types.js.map +0 -1
  347. package/dist/src/core/context/index.d.ts +0 -11
  348. package/dist/src/core/context/index.d.ts.map +0 -1
  349. package/dist/src/core/context/index.js +0 -14
  350. package/dist/src/core/context/index.js.map +0 -1
  351. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  352. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.js +0 -616
  354. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  355. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  356. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  358. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  359. package/dist/src/core/database/batch-operations.d.ts +0 -118
  360. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  361. package/dist/src/core/database/batch-operations.js +0 -339
  362. package/dist/src/core/database/batch-operations.js.map +0 -1
  363. package/dist/src/core/database/connection-pool.d.ts +0 -79
  364. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  365. package/dist/src/core/database/connection-pool.js +0 -236
  366. package/dist/src/core/database/connection-pool.js.map +0 -1
  367. package/dist/src/core/database/query-cache.d.ts +0 -135
  368. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  369. package/dist/src/core/database/query-cache.js +0 -294
  370. package/dist/src/core/database/query-cache.js.map +0 -1
  371. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  372. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  374. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  375. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  376. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  378. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  379. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  380. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  382. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  383. package/dist/src/core/digest/index.d.ts +0 -9
  384. package/dist/src/core/digest/index.d.ts.map +0 -1
  385. package/dist/src/core/digest/index.js +0 -9
  386. package/dist/src/core/digest/index.js.map +0 -1
  387. package/dist/src/core/digest/types.d.ts +0 -154
  388. package/dist/src/core/digest/types.d.ts.map +0 -1
  389. package/dist/src/core/digest/types.js +0 -18
  390. package/dist/src/core/digest/types.js.map +0 -1
  391. package/dist/src/core/errors/index.d.ts +0 -143
  392. package/dist/src/core/errors/index.d.ts.map +0 -1
  393. package/dist/src/core/errors/index.js +0 -282
  394. package/dist/src/core/errors/index.js.map +0 -1
  395. package/dist/src/core/errors/recovery.d.ts +0 -86
  396. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  397. package/dist/src/core/errors/recovery.js +0 -274
  398. package/dist/src/core/errors/recovery.js.map +0 -1
  399. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  400. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.js +0 -468
  402. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  403. package/dist/src/core/merge/index.d.ts +0 -9
  404. package/dist/src/core/merge/index.d.ts.map +0 -1
  405. package/dist/src/core/merge/index.js +0 -9
  406. package/dist/src/core/merge/index.js.map +0 -1
  407. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  408. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.js +0 -573
  410. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  411. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  412. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  413. package/dist/src/core/merge/stack-diff.js +0 -516
  414. package/dist/src/core/merge/stack-diff.js.map +0 -1
  415. package/dist/src/core/merge/types.d.ts +0 -110
  416. package/dist/src/core/merge/types.d.ts.map +0 -1
  417. package/dist/src/core/merge/types.js +0 -6
  418. package/dist/src/core/merge/types.js.map +0 -1
  419. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  420. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.js +0 -212
  422. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  423. package/dist/src/core/monitoring/logger.d.ts +0 -24
  424. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  425. package/dist/src/core/monitoring/logger.js +0 -126
  426. package/dist/src/core/monitoring/logger.js.map +0 -1
  427. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  428. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  429. package/dist/src/core/monitoring/metrics.js +0 -152
  430. package/dist/src/core/monitoring/metrics.js.map +0 -1
  431. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  432. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  434. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  435. package/dist/src/core/performance/context-cache.d.ts +0 -109
  436. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  437. package/dist/src/core/performance/context-cache.js +0 -280
  438. package/dist/src/core/performance/context-cache.js.map +0 -1
  439. package/dist/src/core/performance/index.d.ts +0 -3
  440. package/dist/src/core/performance/index.d.ts.map +0 -1
  441. package/dist/src/core/performance/index.js +0 -3
  442. package/dist/src/core/performance/index.js.map +0 -1
  443. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  444. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  446. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  447. package/dist/src/core/performance/monitor.d.ts +0 -48
  448. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  449. package/dist/src/core/performance/monitor.js +0 -226
  450. package/dist/src/core/performance/monitor.js.map +0 -1
  451. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  452. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  454. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  455. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  456. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.js +0 -290
  458. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  459. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  460. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.js +0 -346
  462. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  463. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  464. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  466. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  467. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  468. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  470. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  471. package/dist/src/core/projects/project-manager.d.ts +0 -130
  472. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  473. package/dist/src/core/projects/project-manager.js +0 -709
  474. package/dist/src/core/projects/project-manager.js.map +0 -1
  475. package/dist/src/core/query/query-parser.d.ts +0 -109
  476. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  477. package/dist/src/core/query/query-parser.js +0 -415
  478. package/dist/src/core/query/query-parser.js.map +0 -1
  479. package/dist/src/core/query/query-templates.d.ts +0 -44
  480. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  481. package/dist/src/core/query/query-templates.js +0 -326
  482. package/dist/src/core/query/query-templates.js.map +0 -1
  483. package/dist/src/core/retrieval/index.d.ts +0 -8
  484. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  485. package/dist/src/core/retrieval/index.js +0 -8
  486. package/dist/src/core/retrieval/index.js.map +0 -1
  487. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  488. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  490. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  491. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  492. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.js +0 -622
  494. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  495. package/dist/src/core/retrieval/types.d.ts +0 -257
  496. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  497. package/dist/src/core/retrieval/types.js +0 -18
  498. package/dist/src/core/retrieval/types.js.map +0 -1
  499. package/dist/src/core/session/index.d.ts +0 -2
  500. package/dist/src/core/session/index.d.ts.map +0 -1
  501. package/dist/src/core/session/index.js +0 -2
  502. package/dist/src/core/session/index.js.map +0 -1
  503. package/dist/src/core/session/session-manager.d.ts +0 -69
  504. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  505. package/dist/src/core/session/session-manager.js +0 -311
  506. package/dist/src/core/session/session-manager.js.map +0 -1
  507. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  508. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  510. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  511. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  512. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  514. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  515. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  516. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  517. package/dist/src/core/trace/debug-trace.js +0 -402
  518. package/dist/src/core/trace/debug-trace.js.map +0 -1
  519. package/dist/src/core/trace/error-test.d.ts +0 -6
  520. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  521. package/dist/src/core/trace/error-test.js +0 -128
  522. package/dist/src/core/trace/error-test.js.map +0 -1
  523. package/dist/src/core/trace/index.d.ts +0 -25
  524. package/dist/src/core/trace/index.d.ts.map +0 -1
  525. package/dist/src/core/trace/index.js +0 -121
  526. package/dist/src/core/trace/index.js.map +0 -1
  527. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  528. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  530. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  531. package/dist/src/core/trace/performance-test.d.ts +0 -6
  532. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  533. package/dist/src/core/trace/performance-test.js +0 -111
  534. package/dist/src/core/trace/performance-test.js.map +0 -1
  535. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  536. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  537. package/dist/src/core/trace/trace-demo.js +0 -154
  538. package/dist/src/core/trace/trace-demo.js.map +0 -1
  539. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  540. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  541. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  542. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  544. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  545. package/dist/src/core/trace/trace-detector.js +0 -425
  546. package/dist/src/core/trace/trace-detector.js.map +0 -1
  547. package/dist/src/core/trace/trace-store.d.ts +0 -60
  548. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  549. package/dist/src/core/trace/trace-store.js +0 -323
  550. package/dist/src/core/trace/trace-store.js.map +0 -1
  551. package/dist/src/core/trace/types.d.ts +0 -81
  552. package/dist/src/core/trace/types.d.ts.map +0 -1
  553. package/dist/src/core/trace/types.js +0 -70
  554. package/dist/src/core/trace/types.js.map +0 -1
  555. package/dist/src/core/types.d.ts +0 -35
  556. package/dist/src/core/types.d.ts.map +0 -1
  557. package/dist/src/core/types.js +0 -2
  558. package/dist/src/core/types.js.map +0 -1
  559. package/dist/src/core/utils/update-checker.d.ts +0 -38
  560. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  561. package/dist/src/core/utils/update-checker.js +0 -213
  562. package/dist/src/core/utils/update-checker.js.map +0 -1
  563. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  564. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.js +0 -456
  566. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  567. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  568. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  570. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  571. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  572. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  574. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  575. package/dist/src/features/analytics/index.d.ts +0 -12
  576. package/dist/src/features/analytics/index.d.ts.map +0 -1
  577. package/dist/src/features/analytics/index.js +0 -11
  578. package/dist/src/features/analytics/index.js.map +0 -1
  579. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  580. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  582. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  583. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  584. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.js +0 -2
  586. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  587. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  588. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.js +0 -459
  590. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  591. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  592. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  594. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  595. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  596. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.js +0 -412
  598. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  599. package/dist/src/index.d.ts +0 -21
  600. package/dist/src/index.d.ts.map +0 -1
  601. package/dist/src/index.js +0 -9
  602. package/dist/src/index.js.map +0 -1
  603. package/dist/src/integrations/linear/auth.d.ts +0 -99
  604. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  605. package/dist/src/integrations/linear/auth.js +0 -319
  606. package/dist/src/integrations/linear/auth.js.map +0 -1
  607. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  608. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.js +0 -268
  610. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  611. package/dist/src/integrations/linear/client.d.ts +0 -127
  612. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  613. package/dist/src/integrations/linear/client.js +0 -446
  614. package/dist/src/integrations/linear/client.js.map +0 -1
  615. package/dist/src/integrations/linear/config.d.ts +0 -51
  616. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  617. package/dist/src/integrations/linear/config.js +0 -103
  618. package/dist/src/integrations/linear/config.js.map +0 -1
  619. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  620. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.js +0 -235
  622. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  623. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  624. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.js +0 -217
  626. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  627. package/dist/src/integrations/linear/sync.d.ts +0 -125
  628. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  629. package/dist/src/integrations/linear/sync.js +0 -563
  630. package/dist/src/integrations/linear/sync.js.map +0 -1
  631. package/dist/src/integrations/linear/types.d.ts +0 -90
  632. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  633. package/dist/src/integrations/linear/types.js +0 -2
  634. package/dist/src/integrations/linear/types.js.map +0 -1
  635. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  636. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.js +0 -190
  638. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  639. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  640. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  641. package/dist/src/integrations/linear/webhook.js +0 -291
  642. package/dist/src/integrations/linear/webhook.js.map +0 -1
  643. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  644. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  646. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  648. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  650. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  652. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  656. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  658. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  660. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  663. package/dist/src/integrations/mcp/index.d.ts +0 -13
  664. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  665. package/dist/src/integrations/mcp/index.js +0 -17
  666. package/dist/src/integrations/mcp/index.js.map +0 -1
  667. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  668. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  670. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  671. package/dist/src/integrations/mcp/server.d.ts +0 -54
  672. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  673. package/dist/src/integrations/mcp/server.js +0 -1616
  674. package/dist/src/integrations/mcp/server.js.map +0 -1
  675. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  676. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  678. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  679. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  680. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.js +0 -54
  682. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  683. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  684. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  688. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  690. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  692. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  695. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  696. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  698. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  699. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  700. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  702. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  703. package/dist/src/models/user.model.d.ts +0 -62
  704. package/dist/src/models/user.model.d.ts.map +0 -1
  705. package/dist/src/models/user.model.js +0 -311
  706. package/dist/src/models/user.model.js.map +0 -1
  707. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  708. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.js +0 -558
  710. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  711. package/dist/src/servers/railway/index.d.ts +0 -7
  712. package/dist/src/servers/railway/index.d.ts.map +0 -1
  713. package/dist/src/servers/railway/index.js +0 -401
  714. package/dist/src/servers/railway/index.js.map +0 -1
  715. package/dist/src/services/config-service.d.ts +0 -44
  716. package/dist/src/services/config-service.d.ts.map +0 -1
  717. package/dist/src/services/config-service.js +0 -61
  718. package/dist/src/services/config-service.js.map +0 -1
  719. package/dist/src/services/context-service.d.ts +0 -17
  720. package/dist/src/services/context-service.d.ts.map +0 -1
  721. package/dist/src/services/context-service.js +0 -173
  722. package/dist/src/services/context-service.js.map +0 -1
  723. package/dist/src/types/task.d.ts +0 -27
  724. package/dist/src/types/task.d.ts.map +0 -1
  725. package/dist/src/types/task.js +0 -2
  726. package/dist/src/types/task.js.map +0 -1
  727. package/dist/src/utils/logger.d.ts +0 -13
  728. package/dist/src/utils/logger.d.ts.map +0 -1
  729. package/dist/src/utils/logger.js +0 -52
  730. package/dist/src/utils/logger.js.map +0 -1
  731. package/dist/src/validation/schemas.d.ts +0 -633
  732. package/dist/src/validation/schemas.d.ts.map +0 -1
  733. package/dist/src/validation/schemas.js +0 -347
  734. package/dist/src/validation/schemas.js.map +0 -1
@@ -0,0 +1,352 @@
1
+ import { ConfigManager } from "../../../core/config/config-manager.js";
2
+ import { TraceDetector } from "../../../core/trace/trace-detector.js";
3
+ import { logger } from "../../../core/monitoring/logger.js";
4
+ import { v4 as uuidv4 } from "uuid";
5
+ class ToolScoringMiddleware {
6
+ configManager;
7
+ traceDetector;
8
+ metrics = [];
9
+ profileStats = /* @__PURE__ */ new Map();
10
+ db;
11
+ constructor(configManager, traceDetector, db) {
12
+ this.configManager = configManager || new ConfigManager();
13
+ this.traceDetector = traceDetector || new TraceDetector();
14
+ this.db = db;
15
+ this.initializeDatabase();
16
+ this.loadMetrics();
17
+ }
18
+ /**
19
+ * Initialize database tables for metrics
20
+ */
21
+ initializeDatabase() {
22
+ if (!this.db) return;
23
+ this.db.exec(`
24
+ CREATE TABLE IF NOT EXISTS tool_scoring_metrics (
25
+ id TEXT PRIMARY KEY,
26
+ profile_name TEXT NOT NULL,
27
+ tool_name TEXT NOT NULL,
28
+ score REAL NOT NULL,
29
+ files_affected INTEGER DEFAULT 0,
30
+ is_permanent BOOLEAN DEFAULT FALSE,
31
+ reference_count INTEGER DEFAULT 0,
32
+ timestamp INTEGER NOT NULL,
33
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
34
+ )
35
+ `);
36
+ this.db.exec(`
37
+ CREATE TABLE IF NOT EXISTS profile_usage_stats (
38
+ profile_name TEXT PRIMARY KEY,
39
+ usage_count INTEGER DEFAULT 0,
40
+ total_score REAL DEFAULT 0,
41
+ avg_score REAL DEFAULT 0,
42
+ high_score_tools TEXT,
43
+ last_used INTEGER,
44
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
45
+ )
46
+ `);
47
+ this.db.exec(`
48
+ CREATE INDEX IF NOT EXISTS idx_metrics_profile ON tool_scoring_metrics(profile_name);
49
+ CREATE INDEX IF NOT EXISTS idx_metrics_tool ON tool_scoring_metrics(tool_name);
50
+ CREATE INDEX IF NOT EXISTS idx_metrics_timestamp ON tool_scoring_metrics(timestamp);
51
+ `);
52
+ }
53
+ /**
54
+ * Load existing metrics from database
55
+ */
56
+ loadMetrics() {
57
+ if (!this.db) return;
58
+ try {
59
+ const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1e3;
60
+ const stmt = this.db.prepare(`
61
+ SELECT * FROM tool_scoring_metrics
62
+ WHERE timestamp > ?
63
+ ORDER BY timestamp DESC
64
+ `);
65
+ const rows = stmt.all(cutoff);
66
+ this.metrics = rows.map((row) => ({
67
+ profileName: row.profile_name,
68
+ toolName: row.tool_name,
69
+ score: row.score,
70
+ factors: {
71
+ filesAffected: row.files_affected,
72
+ isPermanent: row.is_permanent === 1,
73
+ referenceCount: row.reference_count
74
+ },
75
+ timestamp: row.timestamp
76
+ }));
77
+ const statsStmt = this.db.prepare(`
78
+ SELECT * FROM profile_usage_stats
79
+ `);
80
+ const statsRows = statsStmt.all();
81
+ statsRows.forEach((row) => {
82
+ this.profileStats.set(row.profile_name, {
83
+ profileName: row.profile_name,
84
+ usageCount: row.usage_count,
85
+ totalScore: row.total_score,
86
+ avgScore: row.avg_score,
87
+ highScoreTools: row.high_score_tools ? JSON.parse(row.high_score_tools) : [],
88
+ lastUsed: row.last_used
89
+ });
90
+ });
91
+ logger.info("Loaded tool scoring metrics", {
92
+ metricsCount: this.metrics.length,
93
+ profilesCount: this.profileStats.size
94
+ });
95
+ } catch (error) {
96
+ logger.error("Failed to load metrics", error);
97
+ }
98
+ }
99
+ /**
100
+ * Score a tool call and track it
101
+ */
102
+ async scoreToolCall(toolName, args, result, error) {
103
+ const factors = this.extractScoringFactors(toolName, args, result);
104
+ const score = this.configManager.calculateScore(toolName, factors);
105
+ const config = this.configManager.getConfig();
106
+ const profileName = config.profile || "default";
107
+ const metric = {
108
+ profileName,
109
+ toolName,
110
+ score,
111
+ factors,
112
+ timestamp: Date.now()
113
+ };
114
+ this.metrics.push(metric);
115
+ this.updateProfileStats(profileName, toolName, score);
116
+ this.saveMetric(metric);
117
+ if (score > 0.3) {
118
+ const toolCall = {
119
+ id: uuidv4(),
120
+ tool: toolName,
121
+ arguments: args,
122
+ timestamp: Date.now(),
123
+ result,
124
+ error,
125
+ filesAffected: factors.filesAffected > 0 ? this.getFilesFromArgs(args) : void 0
126
+ };
127
+ this.traceDetector.addToolCall(toolCall);
128
+ }
129
+ if (score > 0.8) {
130
+ logger.warn("High-importance tool call", {
131
+ tool: toolName,
132
+ score,
133
+ profile: profileName,
134
+ factors
135
+ });
136
+ }
137
+ return score;
138
+ }
139
+ /**
140
+ * Extract scoring factors from tool arguments and results
141
+ */
142
+ extractScoringFactors(toolName, args, result) {
143
+ let filesAffected = 0;
144
+ let isPermanent = false;
145
+ let referenceCount = 0;
146
+ if (args.file || args.files || args.path || args.paths) {
147
+ filesAffected = 1;
148
+ if (args.files || args.paths) {
149
+ filesAffected = Array.isArray(args.files || args.paths) ? (args.files || args.paths).length : 1;
150
+ }
151
+ }
152
+ const permanentTools = [
153
+ "write",
154
+ "edit",
155
+ "create",
156
+ "delete",
157
+ "update",
158
+ "add_decision",
159
+ "create_task",
160
+ "linear_update_task"
161
+ ];
162
+ if (permanentTools.some((t) => toolName.includes(t))) {
163
+ isPermanent = true;
164
+ }
165
+ if (result?.referenceCount !== void 0) {
166
+ referenceCount = result.referenceCount;
167
+ } else if (result?.references?.length) {
168
+ referenceCount = result.references.length;
169
+ }
170
+ return { filesAffected, isPermanent, referenceCount };
171
+ }
172
+ /**
173
+ * Get file paths from arguments
174
+ */
175
+ getFilesFromArgs(args) {
176
+ const files = [];
177
+ if (args.file) files.push(args.file);
178
+ if (args.path) files.push(args.path);
179
+ if (args.files && Array.isArray(args.files)) files.push(...args.files);
180
+ if (args.paths && Array.isArray(args.paths)) files.push(...args.paths);
181
+ return files;
182
+ }
183
+ /**
184
+ * Update profile usage statistics
185
+ */
186
+ updateProfileStats(profileName, toolName, score) {
187
+ let stats = this.profileStats.get(profileName);
188
+ if (!stats) {
189
+ stats = {
190
+ profileName,
191
+ usageCount: 0,
192
+ totalScore: 0,
193
+ avgScore: 0,
194
+ highScoreTools: [],
195
+ lastUsed: Date.now()
196
+ };
197
+ this.profileStats.set(profileName, stats);
198
+ }
199
+ stats.usageCount++;
200
+ stats.totalScore += score;
201
+ stats.avgScore = stats.totalScore / stats.usageCount;
202
+ stats.lastUsed = Date.now();
203
+ if (score > 0.7 && !stats.highScoreTools.includes(toolName)) {
204
+ stats.highScoreTools.push(toolName);
205
+ if (stats.highScoreTools.length > 10) {
206
+ stats.highScoreTools.shift();
207
+ }
208
+ }
209
+ this.saveProfileStats(stats);
210
+ }
211
+ /**
212
+ * Save metric to database
213
+ */
214
+ saveMetric(metric) {
215
+ if (!this.db) return;
216
+ try {
217
+ const stmt = this.db.prepare(`
218
+ INSERT INTO tool_scoring_metrics (
219
+ id, profile_name, tool_name, score,
220
+ files_affected, is_permanent, reference_count,
221
+ timestamp
222
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
223
+ `);
224
+ stmt.run(
225
+ uuidv4(),
226
+ metric.profileName,
227
+ metric.toolName,
228
+ metric.score,
229
+ metric.factors.filesAffected,
230
+ metric.factors.isPermanent ? 1 : 0,
231
+ metric.factors.referenceCount,
232
+ metric.timestamp
233
+ );
234
+ } catch (error) {
235
+ logger.error("Failed to save metric", error);
236
+ }
237
+ }
238
+ /**
239
+ * Save profile stats to database
240
+ */
241
+ saveProfileStats(stats) {
242
+ if (!this.db) return;
243
+ try {
244
+ const stmt = this.db.prepare(`
245
+ INSERT OR REPLACE INTO profile_usage_stats (
246
+ profile_name, usage_count, total_score, avg_score,
247
+ high_score_tools, last_used
248
+ ) VALUES (?, ?, ?, ?, ?, ?)
249
+ `);
250
+ stmt.run(
251
+ stats.profileName,
252
+ stats.usageCount,
253
+ stats.totalScore,
254
+ stats.avgScore,
255
+ JSON.stringify(stats.highScoreTools),
256
+ stats.lastUsed
257
+ );
258
+ } catch (error) {
259
+ logger.error("Failed to save profile stats", error);
260
+ }
261
+ }
262
+ /**
263
+ * Get profile effectiveness report
264
+ */
265
+ getProfileReport(profileName) {
266
+ if (profileName) {
267
+ const stats = this.profileStats.get(profileName);
268
+ if (!stats) {
269
+ return { error: `Profile '${profileName}' not found or not used yet` };
270
+ }
271
+ return {
272
+ profile: profileName,
273
+ usage: stats.usageCount,
274
+ avgScore: stats.avgScore.toFixed(3),
275
+ highScoreTools: stats.highScoreTools,
276
+ lastUsed: new Date(stats.lastUsed).toISOString()
277
+ };
278
+ }
279
+ const profiles = Array.from(this.profileStats.values()).sort((a, b) => b.avgScore - a.avgScore);
280
+ return {
281
+ profileCount: profiles.length,
282
+ mostEffective: profiles[0]?.profileName || "none",
283
+ profiles: profiles.map((p) => ({
284
+ name: p.profileName,
285
+ usage: p.usageCount,
286
+ avgScore: p.avgScore.toFixed(3)
287
+ }))
288
+ };
289
+ }
290
+ /**
291
+ * Get tool scoring trends
292
+ */
293
+ getToolTrends(toolName, hours = 24) {
294
+ const cutoff = Date.now() - hours * 60 * 60 * 1e3;
295
+ const relevantMetrics = this.metrics.filter(
296
+ (m) => m.toolName === toolName && m.timestamp > cutoff
297
+ );
298
+ if (relevantMetrics.length === 0) {
299
+ return { tool: toolName, message: "No recent data" };
300
+ }
301
+ const scores = relevantMetrics.map((m) => m.score);
302
+ const avgScore = scores.reduce((a, b) => a + b, 0) / scores.length;
303
+ const maxScore = Math.max(...scores);
304
+ const minScore = Math.min(...scores);
305
+ return {
306
+ tool: toolName,
307
+ period: `${hours}h`,
308
+ count: relevantMetrics.length,
309
+ avgScore: avgScore.toFixed(3),
310
+ maxScore: maxScore.toFixed(3),
311
+ minScore: minScore.toFixed(3),
312
+ trend: this.calculateTrend(relevantMetrics)
313
+ };
314
+ }
315
+ /**
316
+ * Calculate score trend
317
+ */
318
+ calculateTrend(metrics) {
319
+ if (metrics.length < 2) return "stable";
320
+ const firstHalf = metrics.slice(0, Math.floor(metrics.length / 2));
321
+ const secondHalf = metrics.slice(Math.floor(metrics.length / 2));
322
+ const firstAvg = firstHalf.reduce((a, m) => a + m.score, 0) / firstHalf.length;
323
+ const secondAvg = secondHalf.reduce((a, m) => a + m.score, 0) / secondHalf.length;
324
+ const diff = secondAvg - firstAvg;
325
+ if (diff > 0.1) return "increasing";
326
+ if (diff < -0.1) return "decreasing";
327
+ return "stable";
328
+ }
329
+ /**
330
+ * Clean old metrics
331
+ */
332
+ cleanOldMetrics(daysToKeep = 30) {
333
+ const cutoff = Date.now() - daysToKeep * 24 * 60 * 60 * 1e3;
334
+ const oldCount = this.metrics.length;
335
+ this.metrics = this.metrics.filter((m) => m.timestamp > cutoff);
336
+ if (this.db) {
337
+ try {
338
+ const stmt = this.db.prepare(`
339
+ DELETE FROM tool_scoring_metrics WHERE timestamp < ?
340
+ `);
341
+ stmt.run(cutoff);
342
+ } catch (error) {
343
+ logger.error("Failed to clean old metrics", error);
344
+ }
345
+ }
346
+ return oldCount - this.metrics.length;
347
+ }
348
+ }
349
+ export {
350
+ ToolScoringMiddleware
351
+ };
352
+ //# sourceMappingURL=tool-scoring.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/integrations/mcp/middleware/tool-scoring.ts"],
4
+ "sourcesContent": ["/**\n * Tool Scoring Middleware for MCP\n * Integrates ConfigManager weight profiles with tool execution\n */\n\nimport { ConfigManager } from '../../../core/config/config-manager.js';\nimport { TraceDetector } from '../../../core/trace/trace-detector.js';\nimport { ToolCall } from '../../../core/trace/types.js';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { v4 as uuidv4 } from 'uuid';\nimport Database from 'better-sqlite3';\n\nexport interface ToolScoringMetrics {\n profileName: string;\n toolName: string;\n score: number;\n factors: {\n filesAffected: number;\n isPermanent: boolean;\n referenceCount: number;\n };\n timestamp: number;\n}\n\nexport interface ProfileUsageStats {\n profileName: string;\n usageCount: number;\n totalScore: number;\n avgScore: number;\n highScoreTools: string[];\n lastUsed: number;\n}\n\n/**\n * Middleware for scoring tool calls and tracking profile effectiveness\n */\nexport class ToolScoringMiddleware {\n private configManager: ConfigManager;\n private traceDetector: TraceDetector;\n private metrics: ToolScoringMetrics[] = [];\n private profileStats: Map<string, ProfileUsageStats> = new Map();\n private db?: Database.Database;\n \n constructor(\n configManager?: ConfigManager,\n traceDetector?: TraceDetector,\n db?: Database.Database\n ) {\n this.configManager = configManager || new ConfigManager();\n this.traceDetector = traceDetector || new TraceDetector();\n this.db = db;\n \n this.initializeDatabase();\n this.loadMetrics();\n }\n \n /**\n * Initialize database tables for metrics\n */\n private initializeDatabase(): void {\n if (!this.db) return;\n \n // Create metrics table\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tool_scoring_metrics (\n id TEXT PRIMARY KEY,\n profile_name TEXT NOT NULL,\n tool_name TEXT NOT NULL,\n score REAL NOT NULL,\n files_affected INTEGER DEFAULT 0,\n is_permanent BOOLEAN DEFAULT FALSE,\n reference_count INTEGER DEFAULT 0,\n timestamp INTEGER NOT NULL,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n )\n `);\n \n // Create profile stats table\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS profile_usage_stats (\n profile_name TEXT PRIMARY KEY,\n usage_count INTEGER DEFAULT 0,\n total_score REAL DEFAULT 0,\n avg_score REAL DEFAULT 0,\n high_score_tools TEXT,\n last_used INTEGER,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP\n )\n `);\n \n // Create indexes\n this.db.exec(`\n CREATE INDEX IF NOT EXISTS idx_metrics_profile ON tool_scoring_metrics(profile_name);\n CREATE INDEX IF NOT EXISTS idx_metrics_tool ON tool_scoring_metrics(tool_name);\n CREATE INDEX IF NOT EXISTS idx_metrics_timestamp ON tool_scoring_metrics(timestamp);\n `);\n }\n \n /**\n * Load existing metrics from database\n */\n private loadMetrics(): void {\n if (!this.db) return;\n \n try {\n // Load recent metrics (last 7 days)\n const cutoff = Date.now() - 7 * 24 * 60 * 60 * 1000;\n const stmt = this.db.prepare(`\n SELECT * FROM tool_scoring_metrics \n WHERE timestamp > ? \n ORDER BY timestamp DESC\n `);\n \n const rows = stmt.all(cutoff) as any[];\n this.metrics = rows.map(row => ({\n profileName: row.profile_name,\n toolName: row.tool_name,\n score: row.score,\n factors: {\n filesAffected: row.files_affected,\n isPermanent: row.is_permanent === 1,\n referenceCount: row.reference_count,\n },\n timestamp: row.timestamp,\n }));\n \n // Load profile stats\n const statsStmt = this.db.prepare(`\n SELECT * FROM profile_usage_stats\n `);\n \n const statsRows = statsStmt.all() as any[];\n statsRows.forEach(row => {\n this.profileStats.set(row.profile_name, {\n profileName: row.profile_name,\n usageCount: row.usage_count,\n totalScore: row.total_score,\n avgScore: row.avg_score,\n highScoreTools: row.high_score_tools ? JSON.parse(row.high_score_tools) : [],\n lastUsed: row.last_used,\n });\n });\n \n logger.info('Loaded tool scoring metrics', {\n metricsCount: this.metrics.length,\n profilesCount: this.profileStats.size,\n });\n } catch (error) {\n logger.error('Failed to load metrics', error);\n }\n }\n \n /**\n * Score a tool call and track it\n */\n async scoreToolCall(\n toolName: string,\n args: any,\n result?: any,\n error?: string\n ): Promise<number> {\n // Extract factors from arguments and result\n const factors = this.extractScoringFactors(toolName, args, result);\n \n // Calculate score using current profile\n const score = this.configManager.calculateScore(toolName, factors);\n \n // Get current profile name\n const config = this.configManager.getConfig();\n const profileName = config.profile || 'default';\n \n // Track the metric\n const metric: ToolScoringMetrics = {\n profileName,\n toolName,\n score,\n factors,\n timestamp: Date.now(),\n };\n \n this.metrics.push(metric);\n this.updateProfileStats(profileName, toolName, score);\n \n // Save to database\n this.saveMetric(metric);\n \n // Add to trace detector if significant\n if (score > 0.3) {\n const toolCall: ToolCall = {\n id: uuidv4(),\n tool: toolName,\n arguments: args,\n timestamp: Date.now(),\n result,\n error,\n filesAffected: factors.filesAffected > 0 ? this.getFilesFromArgs(args) : undefined,\n };\n \n this.traceDetector.addToolCall(toolCall);\n }\n \n // Log high-importance operations\n if (score > 0.8) {\n logger.warn('High-importance tool call', {\n tool: toolName,\n score,\n profile: profileName,\n factors,\n });\n }\n \n return score;\n }\n \n /**\n * Extract scoring factors from tool arguments and results\n */\n private extractScoringFactors(\n toolName: string,\n args: any,\n result?: any\n ): { filesAffected: number; isPermanent: boolean; referenceCount: number } {\n let filesAffected = 0;\n let isPermanent = false;\n let referenceCount = 0;\n \n // Check for file-related arguments\n if (args.file || args.files || args.path || args.paths) {\n filesAffected = 1;\n if (args.files || args.paths) {\n filesAffected = Array.isArray(args.files || args.paths) \n ? (args.files || args.paths).length \n : 1;\n }\n }\n \n // Check if tool makes permanent changes\n const permanentTools = [\n 'write', 'edit', 'create', 'delete', 'update',\n 'add_decision', 'create_task', 'linear_update_task'\n ];\n \n if (permanentTools.some(t => toolName.includes(t))) {\n isPermanent = true;\n }\n \n // Extract reference count from result if available\n if (result?.referenceCount !== undefined) {\n referenceCount = result.referenceCount;\n } else if (result?.references?.length) {\n referenceCount = result.references.length;\n }\n \n return { filesAffected, isPermanent, referenceCount };\n }\n \n /**\n * Get file paths from arguments\n */\n private getFilesFromArgs(args: any): string[] {\n const files: string[] = [];\n \n if (args.file) files.push(args.file);\n if (args.path) files.push(args.path);\n if (args.files && Array.isArray(args.files)) files.push(...args.files);\n if (args.paths && Array.isArray(args.paths)) files.push(...args.paths);\n \n return files;\n }\n \n /**\n * Update profile usage statistics\n */\n private updateProfileStats(profileName: string, toolName: string, score: number): void {\n let stats = this.profileStats.get(profileName);\n \n if (!stats) {\n stats = {\n profileName,\n usageCount: 0,\n totalScore: 0,\n avgScore: 0,\n highScoreTools: [],\n lastUsed: Date.now(),\n };\n this.profileStats.set(profileName, stats);\n }\n \n stats.usageCount++;\n stats.totalScore += score;\n stats.avgScore = stats.totalScore / stats.usageCount;\n stats.lastUsed = Date.now();\n \n // Track high-score tools\n if (score > 0.7 && !stats.highScoreTools.includes(toolName)) {\n stats.highScoreTools.push(toolName);\n if (stats.highScoreTools.length > 10) {\n stats.highScoreTools.shift(); // Keep only last 10\n }\n }\n \n this.saveProfileStats(stats);\n }\n \n /**\n * Save metric to database\n */\n private saveMetric(metric: ToolScoringMetrics): void {\n if (!this.db) return;\n \n try {\n const stmt = this.db.prepare(`\n INSERT INTO tool_scoring_metrics (\n id, profile_name, tool_name, score,\n files_affected, is_permanent, reference_count,\n timestamp\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `);\n \n stmt.run(\n uuidv4(),\n metric.profileName,\n metric.toolName,\n metric.score,\n metric.factors.filesAffected,\n metric.factors.isPermanent ? 1 : 0,\n metric.factors.referenceCount,\n metric.timestamp\n );\n } catch (error) {\n logger.error('Failed to save metric', error);\n }\n }\n \n /**\n * Save profile stats to database\n */\n private saveProfileStats(stats: ProfileUsageStats): void {\n if (!this.db) return;\n \n try {\n const stmt = this.db.prepare(`\n INSERT OR REPLACE INTO profile_usage_stats (\n profile_name, usage_count, total_score, avg_score,\n high_score_tools, last_used\n ) VALUES (?, ?, ?, ?, ?, ?)\n `);\n \n stmt.run(\n stats.profileName,\n stats.usageCount,\n stats.totalScore,\n stats.avgScore,\n JSON.stringify(stats.highScoreTools),\n stats.lastUsed\n );\n } catch (error) {\n logger.error('Failed to save profile stats', error);\n }\n }\n \n /**\n * Get profile effectiveness report\n */\n getProfileReport(profileName?: string): any {\n if (profileName) {\n const stats = this.profileStats.get(profileName);\n if (!stats) {\n return { error: `Profile '${profileName}' not found or not used yet` };\n }\n \n return {\n profile: profileName,\n usage: stats.usageCount,\n avgScore: stats.avgScore.toFixed(3),\n highScoreTools: stats.highScoreTools,\n lastUsed: new Date(stats.lastUsed).toISOString(),\n };\n }\n \n // Return report for all profiles\n const profiles = Array.from(this.profileStats.values())\n .sort((a, b) => b.avgScore - a.avgScore);\n \n return {\n profileCount: profiles.length,\n mostEffective: profiles[0]?.profileName || 'none',\n profiles: profiles.map(p => ({\n name: p.profileName,\n usage: p.usageCount,\n avgScore: p.avgScore.toFixed(3),\n })),\n };\n }\n \n /**\n * Get tool scoring trends\n */\n getToolTrends(toolName: string, hours: number = 24): any {\n const cutoff = Date.now() - hours * 60 * 60 * 1000;\n const relevantMetrics = this.metrics.filter(\n m => m.toolName === toolName && m.timestamp > cutoff\n );\n \n if (relevantMetrics.length === 0) {\n return { tool: toolName, message: 'No recent data' };\n }\n \n const scores = relevantMetrics.map(m => m.score);\n const avgScore = scores.reduce((a, b) => a + b, 0) / scores.length;\n const maxScore = Math.max(...scores);\n const minScore = Math.min(...scores);\n \n return {\n tool: toolName,\n period: `${hours}h`,\n count: relevantMetrics.length,\n avgScore: avgScore.toFixed(3),\n maxScore: maxScore.toFixed(3),\n minScore: minScore.toFixed(3),\n trend: this.calculateTrend(relevantMetrics),\n };\n }\n \n /**\n * Calculate score trend\n */\n private calculateTrend(metrics: ToolScoringMetrics[]): string {\n if (metrics.length < 2) return 'stable';\n \n const firstHalf = metrics.slice(0, Math.floor(metrics.length / 2));\n const secondHalf = metrics.slice(Math.floor(metrics.length / 2));\n \n const firstAvg = firstHalf.reduce((a, m) => a + m.score, 0) / firstHalf.length;\n const secondAvg = secondHalf.reduce((a, m) => a + m.score, 0) / secondHalf.length;\n \n const diff = secondAvg - firstAvg;\n \n if (diff > 0.1) return 'increasing';\n if (diff < -0.1) return 'decreasing';\n return 'stable';\n }\n \n /**\n * Clean old metrics\n */\n cleanOldMetrics(daysToKeep: number = 30): number {\n const cutoff = Date.now() - daysToKeep * 24 * 60 * 60 * 1000;\n const oldCount = this.metrics.length;\n \n this.metrics = this.metrics.filter(m => m.timestamp > cutoff);\n \n if (this.db) {\n try {\n const stmt = this.db.prepare(`\n DELETE FROM tool_scoring_metrics WHERE timestamp < ?\n `);\n stmt.run(cutoff);\n } catch (error) {\n logger.error('Failed to clean old metrics', error);\n }\n }\n \n return oldCount - this.metrics.length;\n }\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -14,9 +14,11 @@ import { LinearSyncEngine, DEFAULT_SYNC_CONFIG } from "../linear/sync.js";
14
14
  import { BrowserMCPIntegration } from "../../features/browser/browser-mcp.js";
15
15
  import { TraceDetector } from "../../core/trace/trace-detector.js";
16
16
  import { LLMContextRetrieval } from "../../core/retrieval/index.js";
17
+ import { ConfigManager } from "../../core/config/config-manager.js";
17
18
  import { logger } from "../../core/monitoring/logger.js";
18
19
  import { MCPHandlerFactory } from "./handlers/index.js";
19
20
  import { MCPToolDefinitions } from "./tool-definitions.js";
21
+ import { ToolScoringMiddleware } from "./middleware/tool-scoring.js";
20
22
  class RefactoredStackMemoryMCP {
21
23
  server;
22
24
  db;
@@ -30,6 +32,8 @@ class RefactoredStackMemoryMCP {
30
32
  browserMCP;
31
33
  traceDetector;
32
34
  contextRetrieval;
35
+ configManager;
36
+ toolScoringMiddleware;
33
37
  // Handler factory
34
38
  handlerFactory;
35
39
  toolDefinitions;
@@ -57,6 +61,8 @@ class RefactoredStackMemoryMCP {
57
61
  * Initialize core components
58
62
  */
59
63
  initializeComponents(config) {
64
+ const configPath = join(this.projectRoot, ".stackmemory", "config.yaml");
65
+ this.configManager = new ConfigManager(configPath);
60
66
  this.frameManager = new RefactoredFrameManager(this.db, this.projectId);
61
67
  this.taskStore = new PebblesTaskStore(this.projectRoot, this.db);
62
68
  this.linearAuthManager = new LinearAuthManager(this.projectRoot);
@@ -75,8 +81,13 @@ class RefactoredStackMemoryMCP {
75
81
  });
76
82
  }
77
83
  if (config.enableTracing !== false) {
78
- this.traceDetector = new TraceDetector({}, void 0, this.db);
84
+ this.traceDetector = new TraceDetector({}, this.configManager, this.db);
79
85
  }
86
+ this.toolScoringMiddleware = new ToolScoringMiddleware(
87
+ this.configManager,
88
+ this.traceDetector,
89
+ this.db
90
+ );
80
91
  this.contextRetrieval = new LLMContextRetrieval(
81
92
  this.db,
82
93
  this.frameManager,
@@ -170,13 +181,22 @@ class RefactoredStackMemoryMCP {
170
181
  const handler = this.handlerFactory.getHandler(name);
171
182
  const result = await handler(args);
172
183
  const duration = Date.now() - startTime;
184
+ const score = await this.toolScoringMiddleware.scoreToolCall(
185
+ name,
186
+ args,
187
+ result,
188
+ void 0
189
+ // no error
190
+ );
173
191
  if (currentFrameId) {
174
192
  this.frameManager.addEvent("tool_result", {
175
193
  tool_name: name,
176
194
  call_id: callId,
177
195
  duration,
178
196
  success: true,
179
- result_size: JSON.stringify(result).length
197
+ result_size: JSON.stringify(result).length,
198
+ importance_score: score,
199
+ profile: this.configManager.getConfig().profile || "default"
180
200
  });
181
201
  }
182
202
  if (this.traceDetector) {
@@ -198,6 +218,12 @@ class RefactoredStackMemoryMCP {
198
218
  } catch (error) {
199
219
  const duration = Date.now() - startTime;
200
220
  const errorMessage = error instanceof Error ? error.message : String(error);
221
+ const score = await this.toolScoringMiddleware.scoreToolCall(
222
+ name,
223
+ args,
224
+ void 0,
225
+ errorMessage
226
+ );
201
227
  const currentFrameId = this.frameManager.getCurrentFrameId();
202
228
  if (currentFrameId) {
203
229
  this.frameManager.addEvent("tool_result", {
@@ -205,7 +231,9 @@ class RefactoredStackMemoryMCP {
205
231
  call_id: callId,
206
232
  duration,
207
233
  success: false,
208
- error: errorMessage
234
+ error: errorMessage,
235
+ importance_score: score,
236
+ profile: this.configManager.getConfig().profile || "default"
209
237
  });
210
238
  }
211
239
  logger.error("Tool call failed", {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/integrations/mcp/refactored-server.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n/**\n * Refactored StackMemory MCP Server - Modular Implementation\n * Clean, maintainable MCP server using focused handler modules\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport Database from 'better-sqlite3';\nimport { readFileSync, existsSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { execSync } from 'child_process';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Core components\nimport { RefactoredFrameManager } from '../../core/context/refactored-frame-manager.js';\nimport { PebblesTaskStore } from '../../features/tasks/pebbles-task-store.js';\nimport { LinearAuthManager } from '../linear/auth.js';\nimport { LinearSyncEngine, DEFAULT_SYNC_CONFIG } from '../linear/sync.js';\nimport { BrowserMCPIntegration } from '../../features/browser/browser-mcp.js';\nimport { TraceDetector } from '../../core/trace/trace-detector.js';\nimport { LLMContextRetrieval } from '../../core/retrieval/index.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\n// Handler modules\nimport { MCPHandlerFactory, MCPHandlerDependencies } from './handlers/index.js';\nimport { MCPToolDefinitions } from './tool-definitions.js';\n\n/**\n * Configuration for MCP server\n */\ninterface MCPServerConfig {\n headless?: boolean;\n viewportWidth?: number;\n viewportHeight?: number;\n enableTracing?: boolean;\n enableBrowser?: boolean;\n}\n\n/**\n * Refactored StackMemory MCP Server\n */\nclass RefactoredStackMemoryMCP {\n private server!: Server;\n private db!: Database.Database;\n private projectRoot: string;\n private projectId: string;\n \n // Core components\n private frameManager!: RefactoredFrameManager;\n private taskStore!: PebblesTaskStore;\n private linearAuthManager!: LinearAuthManager;\n private linearSync!: LinearSyncEngine;\n private browserMCP!: BrowserMCPIntegration;\n private traceDetector!: TraceDetector;\n private contextRetrieval!: LLMContextRetrieval;\n \n // Handler factory\n private handlerFactory!: MCPHandlerFactory;\n private toolDefinitions!: MCPToolDefinitions;\n\n constructor(config: MCPServerConfig = {}) {\n this.projectRoot = this.findProjectRoot();\n this.projectId = this.getProjectId();\n \n this.initializeDatabase();\n this.initializeComponents(config);\n this.initializeServer();\n this.setupHandlers();\n }\n\n /**\n * Initialize database connection\n */\n private initializeDatabase(): void {\n const dbDir = join(this.projectRoot, '.stackmemory');\n if (!existsSync(dbDir)) {\n mkdirSync(dbDir, { recursive: true });\n }\n\n const dbPath = join(dbDir, 'context.db');\n this.db = new Database(dbPath);\n \n logger.info('Database initialized', { dbPath });\n }\n\n /**\n * Initialize core components\n */\n private initializeComponents(config: MCPServerConfig): void {\n // Frame manager\n this.frameManager = new RefactoredFrameManager(this.db, this.projectId);\n\n // Task store\n this.taskStore = new PebblesTaskStore(this.projectRoot, this.db);\n\n // Linear integration\n this.linearAuthManager = new LinearAuthManager(this.projectRoot);\n this.linearSync = new LinearSyncEngine(\n this.taskStore,\n this.linearAuthManager,\n DEFAULT_SYNC_CONFIG\n );\n\n // Browser integration (if enabled)\n if (config.enableBrowser !== false) {\n this.browserMCP = new BrowserMCPIntegration({\n headless: config.headless ?? process.env.BROWSER_HEADLESS !== 'false',\n defaultViewport: { \n width: config.viewportWidth ?? 1280, \n height: config.viewportHeight ?? 720 \n },\n });\n }\n\n // Trace detector (if enabled)\n if (config.enableTracing !== false) {\n this.traceDetector = new TraceDetector({}, undefined, this.db);\n }\n\n // Context retrieval\n this.contextRetrieval = new LLMContextRetrieval(\n this.db,\n this.frameManager as any,\n this.projectId,\n {}\n );\n\n logger.info('Core components initialized');\n }\n\n /**\n * Initialize MCP server\n */\n private initializeServer(): void {\n this.server = new Server(\n {\n name: 'stackmemory-refactored',\n version: '0.2.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n logger.info('MCP server initialized');\n }\n\n /**\n * Setup MCP handlers\n */\n private setupHandlers(): void {\n // Create handler factory with dependencies\n const dependencies: MCPHandlerDependencies = {\n frameManager: this.frameManager as any,\n contextRetrieval: this.contextRetrieval,\n taskStore: this.taskStore,\n projectId: this.projectId,\n linearAuthManager: this.linearAuthManager,\n linearSync: this.linearSync,\n traceDetector: this.traceDetector,\n browserMCP: this.browserMCP,\n };\n\n this.handlerFactory = new MCPHandlerFactory(dependencies);\n this.toolDefinitions = new MCPToolDefinitions();\n\n // Setup tool listing handler\n this.setupToolListHandler();\n \n // Setup tool execution handler\n this.setupToolExecutionHandler();\n\n logger.info('MCP handlers configured');\n }\n\n /**\n * Setup tool listing handler\n */\n private setupToolListHandler(): void {\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/list'),\n }),\n async () => {\n const tools = this.toolDefinitions.getAllToolDefinitions();\n \n logger.debug('Listed tools', { count: tools.length });\n \n return { tools };\n }\n );\n }\n\n /**\n * Setup tool execution handler\n */\n private setupToolExecutionHandler(): void {\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/call'),\n params: z.object({\n name: z.string(),\n arguments: z.record(z.unknown()),\n }),\n }),\n async (request) => {\n const { name, arguments: args } = request.params;\n const callId = uuidv4();\n const startTime = Date.now();\n\n logger.info('Tool call started', { toolName: name, callId });\n\n try {\n // Log tool call event\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('tool_call', {\n tool_name: name,\n arguments: args,\n timestamp: startTime,\n call_id: callId,\n });\n }\n\n // Check if handler exists\n if (!this.handlerFactory.hasHandler(name)) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n // Execute tool handler\n const handler = this.handlerFactory.getHandler(name);\n const result = await handler(args);\n\n const duration = Date.now() - startTime;\n\n // Log tool result event\n if (currentFrameId) {\n this.frameManager.addEvent('tool_result', {\n tool_name: name,\n call_id: callId,\n duration,\n success: true,\n result_size: JSON.stringify(result).length,\n });\n }\n\n // Update trace detector\n if (this.traceDetector) {\n this.traceDetector.addToolCall({\n id: callId,\n tool: name,\n arguments: args,\n timestamp: startTime,\n result,\n duration,\n });\n }\n\n logger.info('Tool call completed', { \n toolName: name, \n callId, \n duration \n });\n\n return result;\n\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Log error event\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('tool_result', {\n tool_name: name,\n call_id: callId,\n duration,\n success: false,\n error: errorMessage,\n });\n }\n\n logger.error('Tool call failed', { \n toolName: name, \n callId, \n duration, \n error: errorMessage \n });\n\n return {\n content: [\n {\n type: 'text',\n text: `Error executing ${name}: ${errorMessage}`,\n },\n ],\n isError: true,\n };\n }\n }\n );\n }\n\n /**\n * Start the MCP server\n */\n async start(): Promise<void> {\n try {\n // Initialize components\n await this.frameManager.initialize();\n\n // Start server\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n\n logger.info('StackMemory MCP Server started', {\n projectRoot: this.projectRoot,\n projectId: this.projectId,\n availableTools: this.handlerFactory.getAvailableTools().length,\n });\n\n // Setup cleanup handlers\n this.setupCleanup();\n\n } catch (error) {\n logger.error('Failed to start MCP server', error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n\n /**\n * Setup cleanup handlers\n */\n private setupCleanup(): void {\n const cleanup = async () => {\n logger.info('Shutting down MCP server...');\n \n try {\n if (this.browserMCP) {\n await this.browserMCP.cleanup();\n }\n \n if (this.db) {\n this.db.close();\n }\n \n logger.info('MCP server shutdown complete');\n } catch (error) {\n logger.error('Error during cleanup', error instanceof Error ? error : new Error(String(error)));\n }\n \n process.exit(0);\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n process.on('uncaughtException', (error) => {\n logger.error('Uncaught exception', error instanceof Error ? error : new Error(String(error)));\n cleanup();\n });\n }\n\n /**\n * Find project root directory\n */\n private findProjectRoot(): string {\n let currentDir = process.cwd();\n const rootDir = '/';\n\n while (currentDir !== rootDir) {\n if (existsSync(join(currentDir, '.git'))) {\n return currentDir;\n }\n currentDir = dirname(currentDir);\n }\n\n return process.cwd();\n }\n\n /**\n * Get project ID from git remote or directory name\n */\n private getProjectId(): string {\n try {\n const remoteUrl = execSync('git remote get-url origin', { \n cwd: this.projectRoot, \n encoding: 'utf8' \n }).trim();\n \n const match = remoteUrl.match(/([^/]+\\/[^/]+)(?:\\.git)?$/);\n if (match) {\n return match[1];\n }\n } catch (error) {\n logger.debug('Could not get git remote URL', error);\n }\n\n return this.projectRoot.split('/').pop() || 'unknown';\n }\n}\n\n/**\n * Main entry point\n */\nasync function main(): Promise<void> {\n try {\n const config: MCPServerConfig = {\n headless: process.env.BROWSER_HEADLESS !== 'false',\n enableTracing: process.env.DISABLE_TRACING !== 'true',\n enableBrowser: process.env.DISABLE_BROWSER !== 'true',\n };\n\n const server = new RefactoredStackMemoryMCP(config);\n await server.start();\n\n } catch (error) {\n logger.error('Failed to start server', error instanceof Error ? error : new Error(String(error)));\n process.exit(1);\n }\n}\n\n// Run if this is the main module\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n });\n}\n\nexport { RefactoredStackMemoryMCP };"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * Refactored StackMemory MCP Server - Modular Implementation\n * Clean, maintainable MCP server using focused handler modules\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport Database from 'better-sqlite3';\nimport { readFileSync, existsSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { execSync } from 'child_process';\nimport { v4 as uuidv4 } from 'uuid';\n\n// Core components\nimport { RefactoredFrameManager } from '../../core/context/refactored-frame-manager.js';\nimport { PebblesTaskStore } from '../../features/tasks/pebbles-task-store.js';\nimport { LinearAuthManager } from '../linear/auth.js';\nimport { LinearSyncEngine, DEFAULT_SYNC_CONFIG } from '../linear/sync.js';\nimport { BrowserMCPIntegration } from '../../features/browser/browser-mcp.js';\nimport { TraceDetector } from '../../core/trace/trace-detector.js';\nimport { LLMContextRetrieval } from '../../core/retrieval/index.js';\nimport { ConfigManager } from '../../core/config/config-manager.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\n// Handler modules\nimport { MCPHandlerFactory, MCPHandlerDependencies } from './handlers/index.js';\nimport { MCPToolDefinitions } from './tool-definitions.js';\nimport { ToolScoringMiddleware } from './middleware/tool-scoring.js';\n\n/**\n * Configuration for MCP server\n */\ninterface MCPServerConfig {\n headless?: boolean;\n viewportWidth?: number;\n viewportHeight?: number;\n enableTracing?: boolean;\n enableBrowser?: boolean;\n}\n\n/**\n * Refactored StackMemory MCP Server\n */\nclass RefactoredStackMemoryMCP {\n private server!: Server;\n private db!: Database.Database;\n private projectRoot: string;\n private projectId: string;\n \n // Core components\n private frameManager!: RefactoredFrameManager;\n private taskStore!: PebblesTaskStore;\n private linearAuthManager!: LinearAuthManager;\n private linearSync!: LinearSyncEngine;\n private browserMCP!: BrowserMCPIntegration;\n private traceDetector!: TraceDetector;\n private contextRetrieval!: LLMContextRetrieval;\n private configManager!: ConfigManager;\n private toolScoringMiddleware!: ToolScoringMiddleware;\n \n // Handler factory\n private handlerFactory!: MCPHandlerFactory;\n private toolDefinitions!: MCPToolDefinitions;\n\n constructor(config: MCPServerConfig = {}) {\n this.projectRoot = this.findProjectRoot();\n this.projectId = this.getProjectId();\n \n this.initializeDatabase();\n this.initializeComponents(config);\n this.initializeServer();\n this.setupHandlers();\n }\n\n /**\n * Initialize database connection\n */\n private initializeDatabase(): void {\n const dbDir = join(this.projectRoot, '.stackmemory');\n if (!existsSync(dbDir)) {\n mkdirSync(dbDir, { recursive: true });\n }\n\n const dbPath = join(dbDir, 'context.db');\n this.db = new Database(dbPath);\n \n logger.info('Database initialized', { dbPath });\n }\n\n /**\n * Initialize core components\n */\n private initializeComponents(config: MCPServerConfig): void {\n // Configuration manager\n const configPath = join(this.projectRoot, '.stackmemory', 'config.yaml');\n this.configManager = new ConfigManager(configPath);\n\n // Frame manager\n this.frameManager = new RefactoredFrameManager(this.db, this.projectId);\n\n // Task store\n this.taskStore = new PebblesTaskStore(this.projectRoot, this.db);\n\n // Linear integration\n this.linearAuthManager = new LinearAuthManager(this.projectRoot);\n this.linearSync = new LinearSyncEngine(\n this.taskStore,\n this.linearAuthManager,\n DEFAULT_SYNC_CONFIG\n );\n\n // Browser integration (if enabled)\n if (config.enableBrowser !== false) {\n this.browserMCP = new BrowserMCPIntegration({\n headless: config.headless ?? process.env.BROWSER_HEADLESS !== 'false',\n defaultViewport: { \n width: config.viewportWidth ?? 1280, \n height: config.viewportHeight ?? 720 \n },\n });\n }\n\n // Trace detector with ConfigManager (if enabled)\n if (config.enableTracing !== false) {\n this.traceDetector = new TraceDetector({}, this.configManager, this.db);\n }\n\n // Tool scoring middleware\n this.toolScoringMiddleware = new ToolScoringMiddleware(\n this.configManager,\n this.traceDetector,\n this.db\n );\n\n // Context retrieval\n this.contextRetrieval = new LLMContextRetrieval(\n this.db,\n this.frameManager as any,\n this.projectId,\n {}\n );\n\n logger.info('Core components initialized');\n }\n\n /**\n * Initialize MCP server\n */\n private initializeServer(): void {\n this.server = new Server(\n {\n name: 'stackmemory-refactored',\n version: '0.2.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n logger.info('MCP server initialized');\n }\n\n /**\n * Setup MCP handlers\n */\n private setupHandlers(): void {\n // Create handler factory with dependencies\n const dependencies: MCPHandlerDependencies = {\n frameManager: this.frameManager as any,\n contextRetrieval: this.contextRetrieval,\n taskStore: this.taskStore,\n projectId: this.projectId,\n linearAuthManager: this.linearAuthManager,\n linearSync: this.linearSync,\n traceDetector: this.traceDetector,\n browserMCP: this.browserMCP,\n };\n\n this.handlerFactory = new MCPHandlerFactory(dependencies);\n this.toolDefinitions = new MCPToolDefinitions();\n\n // Setup tool listing handler\n this.setupToolListHandler();\n \n // Setup tool execution handler\n this.setupToolExecutionHandler();\n\n logger.info('MCP handlers configured');\n }\n\n /**\n * Setup tool listing handler\n */\n private setupToolListHandler(): void {\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/list'),\n }),\n async () => {\n const tools = this.toolDefinitions.getAllToolDefinitions();\n \n logger.debug('Listed tools', { count: tools.length });\n \n return { tools };\n }\n );\n }\n\n /**\n * Setup tool execution handler\n */\n private setupToolExecutionHandler(): void {\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/call'),\n params: z.object({\n name: z.string(),\n arguments: z.record(z.unknown()),\n }),\n }),\n async (request) => {\n const { name, arguments: args } = request.params;\n const callId = uuidv4();\n const startTime = Date.now();\n\n logger.info('Tool call started', { toolName: name, callId });\n\n try {\n // Log tool call event\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('tool_call', {\n tool_name: name,\n arguments: args,\n timestamp: startTime,\n call_id: callId,\n });\n }\n\n // Check if handler exists\n if (!this.handlerFactory.hasHandler(name)) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n // Execute tool handler\n const handler = this.handlerFactory.getHandler(name);\n const result = await handler(args);\n\n const duration = Date.now() - startTime;\n\n // Score the tool call using current profile\n const score = await this.toolScoringMiddleware.scoreToolCall(\n name,\n args,\n result,\n undefined // no error\n );\n\n // Log tool result event with score\n if (currentFrameId) {\n this.frameManager.addEvent('tool_result', {\n tool_name: name,\n call_id: callId,\n duration,\n success: true,\n result_size: JSON.stringify(result).length,\n importance_score: score,\n profile: this.configManager.getConfig().profile || 'default',\n });\n }\n\n // Update trace detector\n if (this.traceDetector) {\n this.traceDetector.addToolCall({\n id: callId,\n tool: name,\n arguments: args,\n timestamp: startTime,\n result,\n duration,\n });\n }\n\n logger.info('Tool call completed', { \n toolName: name, \n callId, \n duration \n });\n\n return result;\n\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Score the failed tool call\n const score = await this.toolScoringMiddleware.scoreToolCall(\n name,\n args,\n undefined,\n errorMessage\n );\n\n // Log error event with score\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('tool_result', {\n tool_name: name,\n call_id: callId,\n duration,\n success: false,\n error: errorMessage,\n importance_score: score,\n profile: this.configManager.getConfig().profile || 'default',\n });\n }\n\n logger.error('Tool call failed', { \n toolName: name, \n callId, \n duration, \n error: errorMessage \n });\n\n return {\n content: [\n {\n type: 'text',\n text: `Error executing ${name}: ${errorMessage}`,\n },\n ],\n isError: true,\n };\n }\n }\n );\n }\n\n /**\n * Start the MCP server\n */\n async start(): Promise<void> {\n try {\n // Initialize components\n await this.frameManager.initialize();\n\n // Start server\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n\n logger.info('StackMemory MCP Server started', {\n projectRoot: this.projectRoot,\n projectId: this.projectId,\n availableTools: this.handlerFactory.getAvailableTools().length,\n });\n\n // Setup cleanup handlers\n this.setupCleanup();\n\n } catch (error) {\n logger.error('Failed to start MCP server', error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n\n /**\n * Setup cleanup handlers\n */\n private setupCleanup(): void {\n const cleanup = async () => {\n logger.info('Shutting down MCP server...');\n \n try {\n if (this.browserMCP) {\n await this.browserMCP.cleanup();\n }\n \n if (this.db) {\n this.db.close();\n }\n \n logger.info('MCP server shutdown complete');\n } catch (error) {\n logger.error('Error during cleanup', error instanceof Error ? error : new Error(String(error)));\n }\n \n process.exit(0);\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n process.on('uncaughtException', (error) => {\n logger.error('Uncaught exception', error instanceof Error ? error : new Error(String(error)));\n cleanup();\n });\n }\n\n /**\n * Find project root directory\n */\n private findProjectRoot(): string {\n let currentDir = process.cwd();\n const rootDir = '/';\n\n while (currentDir !== rootDir) {\n if (existsSync(join(currentDir, '.git'))) {\n return currentDir;\n }\n currentDir = dirname(currentDir);\n }\n\n return process.cwd();\n }\n\n /**\n * Get project ID from git remote or directory name\n */\n private getProjectId(): string {\n try {\n const remoteUrl = execSync('git remote get-url origin', { \n cwd: this.projectRoot, \n encoding: 'utf8' \n }).trim();\n \n const match = remoteUrl.match(/([^/]+\\/[^/]+)(?:\\.git)?$/);\n if (match) {\n return match[1];\n }\n } catch (error) {\n logger.debug('Could not get git remote URL', error);\n }\n\n return this.projectRoot.split('/').pop() || 'unknown';\n }\n}\n\n/**\n * Main entry point\n */\nasync function main(): Promise<void> {\n try {\n const config: MCPServerConfig = {\n headless: process.env.BROWSER_HEADLESS !== 'false',\n enableTracing: process.env.DISABLE_TRACING !== 'true',\n enableBrowser: process.env.DISABLE_BROWSER !== 'true',\n };\n\n const server = new RefactoredStackMemoryMCP(config);\n await server.start();\n\n } catch (error) {\n logger.error('Failed to start server', error instanceof Error ? error : new Error(String(error)));\n process.exit(1);\n }\n}\n\n// Run if this is the main module\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error('Fatal error:', error);\n process.exit(1);\n });\n}\n\nexport { RefactoredStackMemoryMCP };"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -137,15 +137,18 @@ ${summary}...`, 0.8);
137
137
  this.loadStoredContexts();
138
138
  }
139
139
  getProjectId() {
140
+ let identifier;
140
141
  try {
141
- const remoteUrl = execSync("git config --get remote.origin.url", {
142
+ identifier = execSync("git config --get remote.origin.url", {
142
143
  cwd: this.projectRoot,
143
- stdio: "pipe"
144
+ stdio: "pipe",
145
+ timeout: 5e3
144
146
  }).toString().trim();
145
- return remoteUrl || this.projectRoot.split("/").pop() || "unknown";
146
147
  } catch {
147
- return this.projectRoot.split("/").pop() || "unknown";
148
+ identifier = this.projectRoot;
148
149
  }
150
+ const cleaned = identifier.replace(/\.git$/, "").replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
151
+ return cleaned.substring(cleaned.length - 50) || "unknown";
149
152
  }
150
153
  getProjectInfo() {
151
154
  const packageJsonPath = join(this.projectRoot, "package.json");
@@ -1180,7 +1183,12 @@ Reason: ${reason}` : ""}`
1180
1183
  };
1181
1184
  }
1182
1185
  const client = new LinearClient({
1183
- apiKey: tokens.accessToken
1186
+ apiKey: tokens.accessToken,
1187
+ useBearer: true,
1188
+ onUnauthorized: async () => {
1189
+ const refreshed = await this.linearAuthManager.refreshAccessToken();
1190
+ return refreshed.accessToken;
1191
+ }
1184
1192
  });
1185
1193
  let issue = await client.getIssue(args.issueId);
1186
1194
  if (!issue) {
@@ -1274,7 +1282,12 @@ Reason: ${reason}` : ""}`
1274
1282
  };
1275
1283
  }
1276
1284
  const client = new LinearClient({
1277
- apiKey: tokens.accessToken
1285
+ apiKey: tokens.accessToken,
1286
+ useBearer: true,
1287
+ onUnauthorized: async () => {
1288
+ const refreshed = await this.linearAuthManager.refreshAccessToken();
1289
+ return refreshed.accessToken;
1290
+ }
1278
1291
  });
1279
1292
  let stateType = void 0;
1280
1293
  if (args.status && args.status !== "all") {
@@ -1351,7 +1364,12 @@ Reason: ${reason}` : ""}`
1351
1364
  }
1352
1365
  try {
1353
1366
  const client = new LinearClient({
1354
- apiKey: tokens.accessToken
1367
+ apiKey: tokens.accessToken,
1368
+ useBearer: true,
1369
+ onUnauthorized: async () => {
1370
+ const refreshed = await this.linearAuthManager.refreshAccessToken();
1371
+ return refreshed.accessToken;
1372
+ }
1355
1373
  });
1356
1374
  const viewer = await client.getViewer();
1357
1375
  const team = await client.getTeam();