@stackmemoryai/stackmemory 0.3.1 → 0.3.5

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 (744) hide show
  1. package/README.md +69 -288
  2. package/dist/cli/commands/chromadb.js +267 -0
  3. package/dist/cli/commands/chromadb.js.map +7 -0
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/context.js +15 -5
  9. package/dist/cli/commands/context.js.map +2 -2
  10. package/dist/cli/commands/dashboard.js +178 -0
  11. package/dist/cli/commands/dashboard.js.map +7 -0
  12. package/dist/cli/commands/handoff.js +125 -8
  13. package/dist/cli/commands/handoff.js.map +2 -2
  14. package/dist/cli/commands/linear-create.js +132 -0
  15. package/dist/cli/commands/linear-create.js.map +7 -0
  16. package/dist/cli/commands/linear-list.js +69 -0
  17. package/dist/cli/commands/linear-list.js.map +7 -0
  18. package/dist/cli/commands/linear-migrate.js +40 -0
  19. package/dist/cli/commands/linear-migrate.js.map +7 -0
  20. package/dist/cli/commands/linear.js +185 -36
  21. package/dist/cli/commands/linear.js.map +2 -2
  22. package/dist/cli/commands/monitor.js +309 -0
  23. package/dist/cli/commands/monitor.js.map +7 -0
  24. package/dist/cli/commands/quality.js +414 -0
  25. package/dist/cli/commands/quality.js.map +7 -0
  26. package/dist/cli/commands/skills.js +262 -0
  27. package/dist/cli/commands/skills.js.map +7 -0
  28. package/dist/cli/commands/storage.js +275 -0
  29. package/dist/cli/commands/storage.js.map +7 -0
  30. package/dist/cli/commands/tui.js +66 -0
  31. package/dist/cli/commands/tui.js.map +7 -0
  32. package/dist/cli/commands/workflow.js +134 -0
  33. package/dist/cli/commands/workflow.js.map +7 -0
  34. package/dist/cli/index.js +109 -8
  35. package/dist/cli/index.js.map +3 -3
  36. package/dist/core/analytics/team-analytics.js +374 -0
  37. package/dist/core/analytics/team-analytics.js.map +7 -0
  38. package/dist/core/context/context-bridge.js +234 -0
  39. package/dist/core/context/context-bridge.js.map +7 -0
  40. package/dist/core/context/dual-stack-manager.js +850 -0
  41. package/dist/core/context/dual-stack-manager.js.map +7 -0
  42. package/dist/core/context/frame-handoff-manager.js +774 -0
  43. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  44. package/dist/core/context/frame-manager.js +142 -13
  45. package/dist/core/context/frame-manager.js.map +2 -2
  46. package/dist/core/context/permission-manager.js +181 -0
  47. package/dist/core/context/permission-manager.js.map +7 -0
  48. package/dist/core/context/shared-context-layer.js +386 -0
  49. package/dist/core/context/shared-context-layer.js.map +7 -0
  50. package/dist/core/context/stack-merge-resolver.js +600 -0
  51. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  52. package/dist/core/context/validation.js +121 -0
  53. package/dist/core/context/validation.js.map +7 -0
  54. package/dist/core/database/connection-pool.js +266 -175
  55. package/dist/core/database/connection-pool.js.map +2 -2
  56. package/dist/core/database/database-adapter.js +51 -0
  57. package/dist/core/database/database-adapter.js.map +7 -0
  58. package/dist/core/database/migration-manager.js +514 -0
  59. package/dist/core/database/migration-manager.js.map +7 -0
  60. package/dist/core/database/paradedb-adapter.js +970 -0
  61. package/dist/core/database/paradedb-adapter.js.map +7 -0
  62. package/dist/core/database/query-router.js +421 -0
  63. package/dist/core/database/query-router.js.map +7 -0
  64. package/dist/core/database/sqlite-adapter.js +547 -0
  65. package/dist/core/database/sqlite-adapter.js.map +7 -0
  66. package/dist/core/errors/index.js +21 -1
  67. package/dist/core/errors/index.js.map +2 -2
  68. package/dist/core/frame/workflow-templates-stub.js +42 -0
  69. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  70. package/dist/core/frame/workflow-templates.js +276 -0
  71. package/dist/core/frame/workflow-templates.js.map +7 -0
  72. package/dist/core/merge/conflict-detector.js +5 -2
  73. package/dist/core/merge/conflict-detector.js.map +2 -2
  74. package/dist/core/merge/resolution-engine.js +3 -14
  75. package/dist/core/merge/resolution-engine.js.map +2 -2
  76. package/dist/core/merge/stack-diff.js.map +2 -2
  77. package/dist/core/monitoring/logger.js +18 -3
  78. package/dist/core/monitoring/logger.js.map +2 -2
  79. package/dist/core/monitoring/session-monitor.js +296 -0
  80. package/dist/core/monitoring/session-monitor.js.map +7 -0
  81. package/dist/core/retrieval/context-retriever.js +475 -0
  82. package/dist/core/retrieval/context-retriever.js.map +7 -0
  83. package/dist/core/retrieval/graph-retrieval.js +658 -0
  84. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  85. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  86. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  87. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  88. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  89. package/dist/core/session/clear-survival-stub.js +49 -0
  90. package/dist/core/session/clear-survival-stub.js.map +7 -0
  91. package/dist/core/session/clear-survival.js +426 -0
  92. package/dist/core/session/clear-survival.js.map +7 -0
  93. package/dist/core/session/handoff-generator.js +339 -0
  94. package/dist/core/session/handoff-generator.js.map +7 -0
  95. package/dist/core/session/session-manager.js +61 -26
  96. package/dist/core/session/session-manager.js.map +3 -3
  97. package/dist/core/skills/index.js +3 -0
  98. package/dist/core/skills/index.js.map +7 -0
  99. package/dist/core/skills/skill-storage.js +749 -0
  100. package/dist/core/skills/skill-storage.js.map +7 -0
  101. package/dist/core/skills/types.js +189 -0
  102. package/dist/core/skills/types.js.map +7 -0
  103. package/dist/core/storage/chromadb-adapter.js +346 -0
  104. package/dist/core/storage/chromadb-adapter.js.map +7 -0
  105. package/dist/core/storage/railway-optimized-storage.js +550 -0
  106. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  107. package/dist/core/storage/remote-storage.js +456 -0
  108. package/dist/core/storage/remote-storage.js.map +7 -0
  109. package/dist/core/trace/trace-detector.js +136 -5
  110. package/dist/core/trace/trace-detector.js.map +2 -2
  111. package/dist/core/trace/trace-store.js.map +2 -2
  112. package/dist/features/tui/components/analytics-panel.js +136 -0
  113. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  114. package/dist/features/tui/components/frame-visualizer.js +377 -0
  115. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  116. package/dist/features/tui/components/pr-tracker.js +123 -0
  117. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  118. package/dist/features/tui/components/session-monitor.js +286 -0
  119. package/dist/features/tui/components/session-monitor.js.map +7 -0
  120. package/dist/features/tui/components/subagent-fleet.js +388 -0
  121. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  122. package/dist/features/tui/components/task-board.js +475 -0
  123. package/dist/features/tui/components/task-board.js.map +7 -0
  124. package/dist/features/tui/index.js +397 -0
  125. package/dist/features/tui/index.js.map +7 -0
  126. package/dist/features/tui/services/data-service.js +654 -0
  127. package/dist/features/tui/services/data-service.js.map +7 -0
  128. package/dist/features/tui/services/websocket-client.js +149 -0
  129. package/dist/features/tui/services/websocket-client.js.map +7 -0
  130. package/dist/features/tui/terminal-compat.js +205 -0
  131. package/dist/features/tui/terminal-compat.js.map +7 -0
  132. package/dist/features/tui/types.js +1 -0
  133. package/dist/features/tui/types.js.map +7 -0
  134. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  135. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  136. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  137. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  138. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  139. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  140. package/dist/integrations/linear/client.js +22 -4
  141. package/dist/integrations/linear/client.js.map +2 -2
  142. package/dist/integrations/linear/migration.js +299 -0
  143. package/dist/integrations/linear/migration.js.map +7 -0
  144. package/dist/integrations/linear/oauth-server.js +396 -0
  145. package/dist/integrations/linear/oauth-server.js.map +7 -0
  146. package/dist/integrations/linear/rest-client.js +199 -0
  147. package/dist/integrations/linear/rest-client.js.map +7 -0
  148. package/dist/integrations/linear/sync.js +14 -2
  149. package/dist/integrations/linear/sync.js.map +2 -2
  150. package/dist/integrations/linear/webhook-handler.js +200 -0
  151. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  152. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  153. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  154. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  155. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  156. package/dist/integrations/mcp/refactored-server.js +31 -3
  157. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  158. package/dist/integrations/mcp/server.js +25 -7
  159. package/dist/integrations/mcp/server.js.map +2 -2
  160. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  161. package/dist/models/user.model.js +3 -0
  162. package/dist/models/user.model.js.map +2 -2
  163. package/dist/services/context-service.js.map +2 -2
  164. package/dist/skills/claude-skills.js +666 -0
  165. package/dist/skills/claude-skills.js.map +7 -0
  166. package/dist/utils/formatting.js +58 -0
  167. package/dist/utils/formatting.js.map +7 -0
  168. package/package.json +30 -24
  169. package/dist/cli/__tests__/index.test.js +0 -290
  170. package/dist/cli/__tests__/index.test.js.map +0 -7
  171. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  172. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  173. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  174. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  175. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  176. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  177. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  178. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  179. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  180. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  181. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  182. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  183. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  184. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  185. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  186. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  187. package/dist/core/trace/trace-detector.test.js +0 -401
  188. package/dist/core/trace/trace-detector.test.js.map +0 -7
  189. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  190. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  191. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  192. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  193. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  194. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  195. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  196. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  197. package/dist/scripts/benchmark-performance.d.ts +0 -7
  198. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  199. package/dist/scripts/benchmark-performance.js +0 -44
  200. package/dist/scripts/benchmark-performance.js.map +0 -1
  201. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  202. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  203. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  204. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  205. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  206. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  207. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  208. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  209. package/dist/scripts/initialize.d.ts +0 -6
  210. package/dist/scripts/initialize.d.ts.map +0 -1
  211. package/dist/scripts/initialize.js +0 -93
  212. package/dist/scripts/initialize.js.map +0 -1
  213. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  214. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  215. package/dist/scripts/list-linear-tasks.js +0 -121
  216. package/dist/scripts/list-linear-tasks.js.map +0 -1
  217. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  218. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  219. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  220. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  221. package/dist/scripts/show-linear-summary.d.ts +0 -6
  222. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  223. package/dist/scripts/show-linear-summary.js +0 -120
  224. package/dist/scripts/show-linear-summary.js.map +0 -1
  225. package/dist/scripts/status.d.ts +0 -6
  226. package/dist/scripts/status.d.ts.map +0 -1
  227. package/dist/scripts/status.js +0 -101
  228. package/dist/scripts/status.js.map +0 -1
  229. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  230. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  231. package/dist/src/agents/core/agent-task-manager.js +0 -504
  232. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  233. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  234. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  236. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  237. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  238. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  239. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  240. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  241. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  242. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  243. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  244. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  245. package/dist/src/cli/auto-detect.d.ts +0 -61
  246. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  247. package/dist/src/cli/auto-detect.js +0 -350
  248. package/dist/src/cli/auto-detect.js.map +0 -1
  249. package/dist/src/cli/browser-test.d.ts +0 -6
  250. package/dist/src/cli/browser-test.d.ts.map +0 -1
  251. package/dist/src/cli/browser-test.js +0 -32
  252. package/dist/src/cli/browser-test.js.map +0 -1
  253. package/dist/src/cli/claude-sm.d.ts +0 -7
  254. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  255. package/dist/src/cli/claude-sm.js +0 -412
  256. package/dist/src/cli/claude-sm.js.map +0 -1
  257. package/dist/src/cli/commands/agent.d.ts +0 -9
  258. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  259. package/dist/src/cli/commands/agent.js +0 -303
  260. package/dist/src/cli/commands/agent.js.map +0 -1
  261. package/dist/src/cli/commands/config.d.ts +0 -6
  262. package/dist/src/cli/commands/config.d.ts.map +0 -1
  263. package/dist/src/cli/commands/config.js +0 -224
  264. package/dist/src/cli/commands/config.js.map +0 -1
  265. package/dist/src/cli/commands/context.d.ts +0 -7
  266. package/dist/src/cli/commands/context.d.ts.map +0 -1
  267. package/dist/src/cli/commands/context.js +0 -365
  268. package/dist/src/cli/commands/context.js.map +0 -1
  269. package/dist/src/cli/commands/handoff.d.ts +0 -6
  270. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  271. package/dist/src/cli/commands/handoff.js +0 -212
  272. package/dist/src/cli/commands/handoff.js.map +0 -1
  273. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  274. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  275. package/dist/src/cli/commands/linear-test.js +0 -123
  276. package/dist/src/cli/commands/linear-test.js.map +0 -1
  277. package/dist/src/cli/commands/linear.d.ts +0 -6
  278. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  279. package/dist/src/cli/commands/linear.js +0 -393
  280. package/dist/src/cli/commands/linear.js.map +0 -1
  281. package/dist/src/cli/commands/log.d.ts +0 -7
  282. package/dist/src/cli/commands/log.d.ts.map +0 -1
  283. package/dist/src/cli/commands/log.js +0 -168
  284. package/dist/src/cli/commands/log.js.map +0 -1
  285. package/dist/src/cli/commands/onboard.d.ts +0 -8
  286. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  287. package/dist/src/cli/commands/onboard.js +0 -363
  288. package/dist/src/cli/commands/onboard.js.map +0 -1
  289. package/dist/src/cli/commands/projects.d.ts +0 -8
  290. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  291. package/dist/src/cli/commands/projects.js +0 -220
  292. package/dist/src/cli/commands/projects.js.map +0 -1
  293. package/dist/src/cli/commands/search.d.ts +0 -7
  294. package/dist/src/cli/commands/search.d.ts.map +0 -1
  295. package/dist/src/cli/commands/search.js +0 -162
  296. package/dist/src/cli/commands/search.js.map +0 -1
  297. package/dist/src/cli/commands/session.d.ts +0 -7
  298. package/dist/src/cli/commands/session.d.ts.map +0 -1
  299. package/dist/src/cli/commands/session.js +0 -222
  300. package/dist/src/cli/commands/session.js.map +0 -1
  301. package/dist/src/cli/commands/tasks.d.ts +0 -7
  302. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  303. package/dist/src/cli/commands/tasks.js +0 -229
  304. package/dist/src/cli/commands/tasks.js.map +0 -1
  305. package/dist/src/cli/commands/webhook.d.ts +0 -3
  306. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  307. package/dist/src/cli/commands/webhook.js +0 -157
  308. package/dist/src/cli/commands/webhook.js.map +0 -1
  309. package/dist/src/cli/commands/worktree.d.ts +0 -8
  310. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  311. package/dist/src/cli/commands/worktree.js +0 -339
  312. package/dist/src/cli/commands/worktree.js.map +0 -1
  313. package/dist/src/cli/index.d.ts +0 -8
  314. package/dist/src/cli/index.d.ts.map +0 -1
  315. package/dist/src/cli/index.js +0 -995
  316. package/dist/src/cli/index.js.map +0 -1
  317. package/dist/src/cli/utils/viewer.d.ts +0 -3
  318. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  319. package/dist/src/cli/utils/viewer.js +0 -91
  320. package/dist/src/cli/utils/viewer.js.map +0 -1
  321. package/dist/src/core/config/config-manager.d.ts +0 -95
  322. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  323. package/dist/src/core/config/config-manager.js +0 -359
  324. package/dist/src/core/config/config-manager.js.map +0 -1
  325. package/dist/src/core/config/types.d.ts +0 -72
  326. package/dist/src/core/config/types.d.ts.map +0 -1
  327. package/dist/src/core/config/types.js +0 -127
  328. package/dist/src/core/config/types.js.map +0 -1
  329. package/dist/src/core/context/auto-context.d.ts +0 -22
  330. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  331. package/dist/src/core/context/auto-context.js +0 -77
  332. package/dist/src/core/context/auto-context.js.map +0 -1
  333. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  334. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  335. package/dist/src/core/context/compaction-handler.js +0 -306
  336. package/dist/src/core/context/compaction-handler.js.map +0 -1
  337. package/dist/src/core/context/frame-database.d.ts +0 -59
  338. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-database.js +0 -333
  340. package/dist/src/core/context/frame-database.js.map +0 -1
  341. package/dist/src/core/context/frame-digest.d.ts +0 -59
  342. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-digest.js +0 -264
  344. package/dist/src/core/context/frame-digest.js.map +0 -1
  345. package/dist/src/core/context/frame-manager.d.ts +0 -112
  346. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-manager.js +0 -600
  348. package/dist/src/core/context/frame-manager.js.map +0 -1
  349. package/dist/src/core/context/frame-stack.d.ts +0 -85
  350. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  351. package/dist/src/core/context/frame-stack.js +0 -287
  352. package/dist/src/core/context/frame-stack.js.map +0 -1
  353. package/dist/src/core/context/frame-types.d.ts +0 -67
  354. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  355. package/dist/src/core/context/frame-types.js +0 -6
  356. package/dist/src/core/context/frame-types.js.map +0 -1
  357. package/dist/src/core/context/index.d.ts +0 -11
  358. package/dist/src/core/context/index.d.ts.map +0 -1
  359. package/dist/src/core/context/index.js +0 -14
  360. package/dist/src/core/context/index.js.map +0 -1
  361. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  362. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  363. package/dist/src/core/context/model-aware-compaction.js +0 -616
  364. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  365. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  366. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  367. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  368. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  369. package/dist/src/core/database/batch-operations.d.ts +0 -118
  370. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  371. package/dist/src/core/database/batch-operations.js +0 -339
  372. package/dist/src/core/database/batch-operations.js.map +0 -1
  373. package/dist/src/core/database/connection-pool.d.ts +0 -79
  374. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  375. package/dist/src/core/database/connection-pool.js +0 -236
  376. package/dist/src/core/database/connection-pool.js.map +0 -1
  377. package/dist/src/core/database/query-cache.d.ts +0 -135
  378. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  379. package/dist/src/core/database/query-cache.js +0 -294
  380. package/dist/src/core/database/query-cache.js.map +0 -1
  381. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  382. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  383. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  384. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  385. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  386. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  387. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  388. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  389. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  390. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  391. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  392. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  393. package/dist/src/core/digest/index.d.ts +0 -9
  394. package/dist/src/core/digest/index.d.ts.map +0 -1
  395. package/dist/src/core/digest/index.js +0 -9
  396. package/dist/src/core/digest/index.js.map +0 -1
  397. package/dist/src/core/digest/types.d.ts +0 -154
  398. package/dist/src/core/digest/types.d.ts.map +0 -1
  399. package/dist/src/core/digest/types.js +0 -18
  400. package/dist/src/core/digest/types.js.map +0 -1
  401. package/dist/src/core/errors/index.d.ts +0 -143
  402. package/dist/src/core/errors/index.d.ts.map +0 -1
  403. package/dist/src/core/errors/index.js +0 -282
  404. package/dist/src/core/errors/index.js.map +0 -1
  405. package/dist/src/core/errors/recovery.d.ts +0 -86
  406. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  407. package/dist/src/core/errors/recovery.js +0 -274
  408. package/dist/src/core/errors/recovery.js.map +0 -1
  409. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  410. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  411. package/dist/src/core/merge/conflict-detector.js +0 -468
  412. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  413. package/dist/src/core/merge/index.d.ts +0 -9
  414. package/dist/src/core/merge/index.d.ts.map +0 -1
  415. package/dist/src/core/merge/index.js +0 -9
  416. package/dist/src/core/merge/index.js.map +0 -1
  417. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  418. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  419. package/dist/src/core/merge/resolution-engine.js +0 -573
  420. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  421. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  422. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  423. package/dist/src/core/merge/stack-diff.js +0 -516
  424. package/dist/src/core/merge/stack-diff.js.map +0 -1
  425. package/dist/src/core/merge/types.d.ts +0 -110
  426. package/dist/src/core/merge/types.d.ts.map +0 -1
  427. package/dist/src/core/merge/types.js +0 -6
  428. package/dist/src/core/merge/types.js.map +0 -1
  429. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  430. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/error-handler.js +0 -212
  432. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  433. package/dist/src/core/monitoring/logger.d.ts +0 -24
  434. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/logger.js +0 -126
  436. package/dist/src/core/monitoring/logger.js.map +0 -1
  437. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  438. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  439. package/dist/src/core/monitoring/metrics.js +0 -152
  440. package/dist/src/core/monitoring/metrics.js.map +0 -1
  441. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  442. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  443. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  444. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  445. package/dist/src/core/performance/context-cache.d.ts +0 -109
  446. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  447. package/dist/src/core/performance/context-cache.js +0 -280
  448. package/dist/src/core/performance/context-cache.js.map +0 -1
  449. package/dist/src/core/performance/index.d.ts +0 -3
  450. package/dist/src/core/performance/index.d.ts.map +0 -1
  451. package/dist/src/core/performance/index.js +0 -3
  452. package/dist/src/core/performance/index.js.map +0 -1
  453. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  454. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  455. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  456. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  457. package/dist/src/core/performance/monitor.d.ts +0 -48
  458. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  459. package/dist/src/core/performance/monitor.js +0 -226
  460. package/dist/src/core/performance/monitor.js.map +0 -1
  461. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  462. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  463. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  464. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  465. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  466. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  467. package/dist/src/core/performance/performance-benchmark.js +0 -290
  468. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  469. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  470. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  471. package/dist/src/core/performance/performance-profiler.js +0 -346
  472. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  473. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  474. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  475. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  476. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  477. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  478. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  479. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  480. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  481. package/dist/src/core/projects/project-manager.d.ts +0 -130
  482. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  483. package/dist/src/core/projects/project-manager.js +0 -709
  484. package/dist/src/core/projects/project-manager.js.map +0 -1
  485. package/dist/src/core/query/query-parser.d.ts +0 -109
  486. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  487. package/dist/src/core/query/query-parser.js +0 -415
  488. package/dist/src/core/query/query-parser.js.map +0 -1
  489. package/dist/src/core/query/query-templates.d.ts +0 -44
  490. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  491. package/dist/src/core/query/query-templates.js +0 -326
  492. package/dist/src/core/query/query-templates.js.map +0 -1
  493. package/dist/src/core/retrieval/index.d.ts +0 -8
  494. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/index.js +0 -8
  496. package/dist/src/core/retrieval/index.js.map +0 -1
  497. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  498. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  500. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  501. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  502. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  503. package/dist/src/core/retrieval/summary-generator.js +0 -622
  504. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  505. package/dist/src/core/retrieval/types.d.ts +0 -257
  506. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  507. package/dist/src/core/retrieval/types.js +0 -18
  508. package/dist/src/core/retrieval/types.js.map +0 -1
  509. package/dist/src/core/session/index.d.ts +0 -2
  510. package/dist/src/core/session/index.d.ts.map +0 -1
  511. package/dist/src/core/session/index.js +0 -2
  512. package/dist/src/core/session/index.js.map +0 -1
  513. package/dist/src/core/session/session-manager.d.ts +0 -69
  514. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  515. package/dist/src/core/session/session-manager.js +0 -311
  516. package/dist/src/core/session/session-manager.js.map +0 -1
  517. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  518. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  519. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  520. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  521. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  522. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  523. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  524. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  525. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  526. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  527. package/dist/src/core/trace/debug-trace.js +0 -402
  528. package/dist/src/core/trace/debug-trace.js.map +0 -1
  529. package/dist/src/core/trace/error-test.d.ts +0 -6
  530. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  531. package/dist/src/core/trace/error-test.js +0 -128
  532. package/dist/src/core/trace/error-test.js.map +0 -1
  533. package/dist/src/core/trace/index.d.ts +0 -25
  534. package/dist/src/core/trace/index.d.ts.map +0 -1
  535. package/dist/src/core/trace/index.js +0 -121
  536. package/dist/src/core/trace/index.js.map +0 -1
  537. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  538. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  539. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  540. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  541. package/dist/src/core/trace/performance-test.d.ts +0 -6
  542. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  543. package/dist/src/core/trace/performance-test.js +0 -111
  544. package/dist/src/core/trace/performance-test.js.map +0 -1
  545. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  546. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  547. package/dist/src/core/trace/trace-demo.js +0 -154
  548. package/dist/src/core/trace/trace-demo.js.map +0 -1
  549. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  550. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  552. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  553. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  554. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  555. package/dist/src/core/trace/trace-detector.js +0 -425
  556. package/dist/src/core/trace/trace-detector.js.map +0 -1
  557. package/dist/src/core/trace/trace-store.d.ts +0 -60
  558. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  559. package/dist/src/core/trace/trace-store.js +0 -323
  560. package/dist/src/core/trace/trace-store.js.map +0 -1
  561. package/dist/src/core/trace/types.d.ts +0 -81
  562. package/dist/src/core/trace/types.d.ts.map +0 -1
  563. package/dist/src/core/trace/types.js +0 -70
  564. package/dist/src/core/trace/types.js.map +0 -1
  565. package/dist/src/core/types.d.ts +0 -35
  566. package/dist/src/core/types.d.ts.map +0 -1
  567. package/dist/src/core/types.js +0 -2
  568. package/dist/src/core/types.js.map +0 -1
  569. package/dist/src/core/utils/update-checker.d.ts +0 -38
  570. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  571. package/dist/src/core/utils/update-checker.js +0 -213
  572. package/dist/src/core/utils/update-checker.js.map +0 -1
  573. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  574. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  575. package/dist/src/core/worktree/worktree-manager.js +0 -456
  576. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  577. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  578. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  579. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  580. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  581. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  582. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  583. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  584. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  585. package/dist/src/features/analytics/index.d.ts +0 -12
  586. package/dist/src/features/analytics/index.d.ts.map +0 -1
  587. package/dist/src/features/analytics/index.js +0 -11
  588. package/dist/src/features/analytics/index.js.map +0 -1
  589. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  590. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  591. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  592. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  593. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  594. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  595. package/dist/src/features/analytics/types/metrics.js +0 -2
  596. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  597. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  598. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  599. package/dist/src/features/browser/browser-mcp.js +0 -459
  600. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  601. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  602. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  603. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  604. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  605. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  606. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  607. package/dist/src/features/tasks/task-aware-context.js +0 -412
  608. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  609. package/dist/src/index.d.ts +0 -21
  610. package/dist/src/index.d.ts.map +0 -1
  611. package/dist/src/index.js +0 -9
  612. package/dist/src/index.js.map +0 -1
  613. package/dist/src/integrations/linear/auth.d.ts +0 -99
  614. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/auth.js +0 -319
  616. package/dist/src/integrations/linear/auth.js.map +0 -1
  617. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  618. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/auto-sync.js +0 -268
  620. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  621. package/dist/src/integrations/linear/client.d.ts +0 -127
  622. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/client.js +0 -446
  624. package/dist/src/integrations/linear/client.js.map +0 -1
  625. package/dist/src/integrations/linear/config.d.ts +0 -51
  626. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/config.js +0 -103
  628. package/dist/src/integrations/linear/config.js.map +0 -1
  629. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  630. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync-manager.js +0 -235
  632. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  633. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  634. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/sync-service.js +0 -217
  636. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  637. package/dist/src/integrations/linear/sync.d.ts +0 -125
  638. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/sync.js +0 -563
  640. package/dist/src/integrations/linear/sync.js.map +0 -1
  641. package/dist/src/integrations/linear/types.d.ts +0 -90
  642. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/types.js +0 -2
  644. package/dist/src/integrations/linear/types.js.map +0 -1
  645. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  646. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  647. package/dist/src/integrations/linear/webhook-server.js +0 -190
  648. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  649. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  650. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  651. package/dist/src/integrations/linear/webhook.js +0 -291
  652. package/dist/src/integrations/linear/webhook.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  654. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  656. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  658. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  660. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  662. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  664. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  666. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  668. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  669. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  670. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  672. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  673. package/dist/src/integrations/mcp/index.d.ts +0 -13
  674. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/index.js +0 -17
  676. package/dist/src/integrations/mcp/index.js.map +0 -1
  677. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  678. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  680. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  681. package/dist/src/integrations/mcp/server.d.ts +0 -54
  682. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/server.js +0 -1616
  684. package/dist/src/integrations/mcp/server.js.map +0 -1
  685. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  686. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  687. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  688. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  689. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  690. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  691. package/dist/src/integrations/mcp/trace-test.js +0 -54
  692. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  694. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  696. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  697. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  698. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  699. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  700. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  701. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  702. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  703. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  704. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  705. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  706. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  707. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  708. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  709. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  710. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  711. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  712. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  713. package/dist/src/models/user.model.d.ts +0 -62
  714. package/dist/src/models/user.model.d.ts.map +0 -1
  715. package/dist/src/models/user.model.js +0 -311
  716. package/dist/src/models/user.model.js.map +0 -1
  717. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  718. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  719. package/dist/src/servers/production/auth-middleware.js +0 -558
  720. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  721. package/dist/src/servers/railway/index.d.ts +0 -7
  722. package/dist/src/servers/railway/index.d.ts.map +0 -1
  723. package/dist/src/servers/railway/index.js +0 -401
  724. package/dist/src/servers/railway/index.js.map +0 -1
  725. package/dist/src/services/config-service.d.ts +0 -44
  726. package/dist/src/services/config-service.d.ts.map +0 -1
  727. package/dist/src/services/config-service.js +0 -61
  728. package/dist/src/services/config-service.js.map +0 -1
  729. package/dist/src/services/context-service.d.ts +0 -17
  730. package/dist/src/services/context-service.d.ts.map +0 -1
  731. package/dist/src/services/context-service.js +0 -173
  732. package/dist/src/services/context-service.js.map +0 -1
  733. package/dist/src/types/task.d.ts +0 -27
  734. package/dist/src/types/task.d.ts.map +0 -1
  735. package/dist/src/types/task.js +0 -2
  736. package/dist/src/types/task.js.map +0 -1
  737. package/dist/src/utils/logger.d.ts +0 -13
  738. package/dist/src/utils/logger.d.ts.map +0 -1
  739. package/dist/src/utils/logger.js +0 -52
  740. package/dist/src/utils/logger.js.map +0 -1
  741. package/dist/src/validation/schemas.d.ts +0 -633
  742. package/dist/src/validation/schemas.d.ts.map +0 -1
  743. package/dist/src/validation/schemas.js +0 -347
  744. 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();