@stackmemoryai/stackmemory 0.3.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/codex-sm.js +48 -19
  3. package/dist/cli/codex-sm.js.map +2 -2
  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/dashboard.js +178 -0
  9. package/dist/cli/commands/dashboard.js.map +7 -0
  10. package/dist/cli/commands/handoff.js +125 -8
  11. package/dist/cli/commands/handoff.js.map +2 -2
  12. package/dist/cli/commands/linear-create.js +132 -0
  13. package/dist/cli/commands/linear-create.js.map +7 -0
  14. package/dist/cli/commands/linear-list.js +69 -0
  15. package/dist/cli/commands/linear-list.js.map +7 -0
  16. package/dist/cli/commands/linear-migrate.js +40 -0
  17. package/dist/cli/commands/linear-migrate.js.map +7 -0
  18. package/dist/cli/commands/linear.js +185 -36
  19. package/dist/cli/commands/linear.js.map +2 -2
  20. package/dist/cli/commands/monitor.js +309 -0
  21. package/dist/cli/commands/monitor.js.map +7 -0
  22. package/dist/cli/commands/quality.js +414 -0
  23. package/dist/cli/commands/quality.js.map +7 -0
  24. package/dist/cli/commands/storage.js +275 -0
  25. package/dist/cli/commands/storage.js.map +7 -0
  26. package/dist/cli/commands/tui.js +66 -0
  27. package/dist/cli/commands/tui.js.map +7 -0
  28. package/dist/cli/commands/workflow.js +134 -0
  29. package/dist/cli/commands/workflow.js.map +7 -0
  30. package/dist/cli/index.js +105 -9
  31. package/dist/cli/index.js.map +3 -3
  32. package/dist/core/analytics/team-analytics.js +374 -0
  33. package/dist/core/analytics/team-analytics.js.map +7 -0
  34. package/dist/core/context/context-bridge.js +234 -0
  35. package/dist/core/context/context-bridge.js.map +7 -0
  36. package/dist/core/context/dual-stack-manager.js +850 -0
  37. package/dist/core/context/dual-stack-manager.js.map +7 -0
  38. package/dist/core/context/frame-handoff-manager.js +384 -0
  39. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  40. package/dist/core/context/frame-manager.js +132 -12
  41. package/dist/core/context/frame-manager.js.map +2 -2
  42. package/dist/core/context/permission-manager.js +181 -0
  43. package/dist/core/context/permission-manager.js.map +7 -0
  44. package/dist/core/context/shared-context-layer.js +386 -0
  45. package/dist/core/context/shared-context-layer.js.map +7 -0
  46. package/dist/core/context/stack-merge-resolver.js +600 -0
  47. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  48. package/dist/core/context/validation.js +121 -0
  49. package/dist/core/context/validation.js.map +7 -0
  50. package/dist/core/database/connection-pool.js +266 -175
  51. package/dist/core/database/connection-pool.js.map +2 -2
  52. package/dist/core/database/database-adapter.js +51 -0
  53. package/dist/core/database/database-adapter.js.map +7 -0
  54. package/dist/core/database/migration-manager.js +514 -0
  55. package/dist/core/database/migration-manager.js.map +7 -0
  56. package/dist/core/database/paradedb-adapter.js +970 -0
  57. package/dist/core/database/paradedb-adapter.js.map +7 -0
  58. package/dist/core/database/query-router.js +421 -0
  59. package/dist/core/database/query-router.js.map +7 -0
  60. package/dist/core/database/sqlite-adapter.js +547 -0
  61. package/dist/core/database/sqlite-adapter.js.map +7 -0
  62. package/dist/core/errors/index.js +21 -1
  63. package/dist/core/errors/index.js.map +2 -2
  64. package/dist/core/frame/workflow-templates-stub.js +42 -0
  65. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  66. package/dist/core/frame/workflow-templates.js +276 -0
  67. package/dist/core/frame/workflow-templates.js.map +7 -0
  68. package/dist/core/merge/conflict-detector.js +5 -2
  69. package/dist/core/merge/conflict-detector.js.map +2 -2
  70. package/dist/core/merge/resolution-engine.js +3 -14
  71. package/dist/core/merge/resolution-engine.js.map +2 -2
  72. package/dist/core/merge/stack-diff.js.map +2 -2
  73. package/dist/core/monitoring/logger.js +18 -3
  74. package/dist/core/monitoring/logger.js.map +2 -2
  75. package/dist/core/monitoring/session-monitor.js +296 -0
  76. package/dist/core/monitoring/session-monitor.js.map +7 -0
  77. package/dist/core/retrieval/context-retriever.js +475 -0
  78. package/dist/core/retrieval/context-retriever.js.map +7 -0
  79. package/dist/core/retrieval/graph-retrieval.js +658 -0
  80. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  82. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  83. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  84. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  85. package/dist/core/session/clear-survival-stub.js +49 -0
  86. package/dist/core/session/clear-survival-stub.js.map +7 -0
  87. package/dist/core/session/clear-survival.js +426 -0
  88. package/dist/core/session/clear-survival.js.map +7 -0
  89. package/dist/core/session/handoff-generator.js +339 -0
  90. package/dist/core/session/handoff-generator.js.map +7 -0
  91. package/dist/core/session/session-manager.js +61 -26
  92. package/dist/core/session/session-manager.js.map +3 -3
  93. package/dist/core/skills/index.js +3 -0
  94. package/dist/core/skills/index.js.map +7 -0
  95. package/dist/core/skills/skill-storage.js +749 -0
  96. package/dist/core/skills/skill-storage.js.map +7 -0
  97. package/dist/core/skills/types.js +189 -0
  98. package/dist/core/skills/types.js.map +7 -0
  99. package/dist/core/storage/railway-optimized-storage.js +550 -0
  100. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  101. package/dist/core/storage/remote-storage.js +456 -0
  102. package/dist/core/storage/remote-storage.js.map +7 -0
  103. package/dist/core/trace/trace-detector.js +136 -5
  104. package/dist/core/trace/trace-detector.js.map +2 -2
  105. package/dist/core/trace/trace-store.js.map +2 -2
  106. package/dist/features/tui/components/analytics-panel.js +136 -0
  107. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  108. package/dist/features/tui/components/frame-visualizer.js +377 -0
  109. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  110. package/dist/features/tui/components/pr-tracker.js +123 -0
  111. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  112. package/dist/features/tui/components/session-monitor.js +286 -0
  113. package/dist/features/tui/components/session-monitor.js.map +7 -0
  114. package/dist/features/tui/components/subagent-fleet.js +388 -0
  115. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  116. package/dist/features/tui/components/task-board.js +475 -0
  117. package/dist/features/tui/components/task-board.js.map +7 -0
  118. package/dist/features/tui/index.js +397 -0
  119. package/dist/features/tui/index.js.map +7 -0
  120. package/dist/features/tui/services/data-service.js +654 -0
  121. package/dist/features/tui/services/data-service.js.map +7 -0
  122. package/dist/features/tui/services/websocket-client.js +149 -0
  123. package/dist/features/tui/services/websocket-client.js.map +7 -0
  124. package/dist/features/tui/terminal-compat.js +205 -0
  125. package/dist/features/tui/terminal-compat.js.map +7 -0
  126. package/dist/features/tui/types.js +1 -0
  127. package/dist/features/tui/types.js.map +7 -0
  128. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  129. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  131. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  132. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  133. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  134. package/dist/integrations/linear/client.js +22 -4
  135. package/dist/integrations/linear/client.js.map +2 -2
  136. package/dist/integrations/linear/migration.js +299 -0
  137. package/dist/integrations/linear/migration.js.map +7 -0
  138. package/dist/integrations/linear/oauth-server.js +396 -0
  139. package/dist/integrations/linear/oauth-server.js.map +7 -0
  140. package/dist/integrations/linear/rest-client.js +199 -0
  141. package/dist/integrations/linear/rest-client.js.map +7 -0
  142. package/dist/integrations/linear/sync.js +14 -2
  143. package/dist/integrations/linear/sync.js.map +2 -2
  144. package/dist/integrations/linear/webhook-handler.js +200 -0
  145. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  146. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  147. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  148. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  149. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  150. package/dist/integrations/mcp/refactored-server.js +31 -3
  151. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  152. package/dist/integrations/mcp/server.js +25 -7
  153. package/dist/integrations/mcp/server.js.map +2 -2
  154. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  155. package/dist/models/user.model.js +3 -0
  156. package/dist/models/user.model.js.map +2 -2
  157. package/dist/services/context-service.js.map +2 -2
  158. package/dist/utils/formatting.js +58 -0
  159. package/dist/utils/formatting.js.map +7 -0
  160. package/package.json +24 -5
  161. package/dist/cli/__tests__/index.test.js +0 -290
  162. package/dist/cli/__tests__/index.test.js.map +0 -7
  163. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  164. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  165. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  166. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  168. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  169. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  170. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  171. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  172. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  173. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  174. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  176. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  177. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  178. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  179. package/dist/core/trace/trace-detector.test.js +0 -401
  180. package/dist/core/trace/trace-detector.test.js.map +0 -7
  181. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  182. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  184. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  185. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  186. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  187. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  188. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  189. package/dist/scripts/benchmark-performance.d.ts +0 -7
  190. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  191. package/dist/scripts/benchmark-performance.js +0 -44
  192. package/dist/scripts/benchmark-performance.js.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  194. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  195. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  196. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  198. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  199. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  200. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  201. package/dist/scripts/initialize.d.ts +0 -6
  202. package/dist/scripts/initialize.d.ts.map +0 -1
  203. package/dist/scripts/initialize.js +0 -93
  204. package/dist/scripts/initialize.js.map +0 -1
  205. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  206. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  207. package/dist/scripts/list-linear-tasks.js +0 -121
  208. package/dist/scripts/list-linear-tasks.js.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  210. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  211. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  212. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  213. package/dist/scripts/show-linear-summary.d.ts +0 -6
  214. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  215. package/dist/scripts/show-linear-summary.js +0 -120
  216. package/dist/scripts/show-linear-summary.js.map +0 -1
  217. package/dist/scripts/status.d.ts +0 -6
  218. package/dist/scripts/status.d.ts.map +0 -1
  219. package/dist/scripts/status.js +0 -101
  220. package/dist/scripts/status.js.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  222. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  223. package/dist/src/agents/core/agent-task-manager.js +0 -504
  224. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  226. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  227. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  228. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  230. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  231. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  232. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  234. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  236. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  237. package/dist/src/cli/auto-detect.d.ts +0 -61
  238. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  239. package/dist/src/cli/auto-detect.js +0 -350
  240. package/dist/src/cli/auto-detect.js.map +0 -1
  241. package/dist/src/cli/browser-test.d.ts +0 -6
  242. package/dist/src/cli/browser-test.d.ts.map +0 -1
  243. package/dist/src/cli/browser-test.js +0 -32
  244. package/dist/src/cli/browser-test.js.map +0 -1
  245. package/dist/src/cli/claude-sm.d.ts +0 -7
  246. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  247. package/dist/src/cli/claude-sm.js +0 -412
  248. package/dist/src/cli/claude-sm.js.map +0 -1
  249. package/dist/src/cli/commands/agent.d.ts +0 -9
  250. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  251. package/dist/src/cli/commands/agent.js +0 -303
  252. package/dist/src/cli/commands/agent.js.map +0 -1
  253. package/dist/src/cli/commands/config.d.ts +0 -6
  254. package/dist/src/cli/commands/config.d.ts.map +0 -1
  255. package/dist/src/cli/commands/config.js +0 -224
  256. package/dist/src/cli/commands/config.js.map +0 -1
  257. package/dist/src/cli/commands/context.d.ts +0 -7
  258. package/dist/src/cli/commands/context.d.ts.map +0 -1
  259. package/dist/src/cli/commands/context.js +0 -365
  260. package/dist/src/cli/commands/context.js.map +0 -1
  261. package/dist/src/cli/commands/handoff.d.ts +0 -6
  262. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  263. package/dist/src/cli/commands/handoff.js +0 -212
  264. package/dist/src/cli/commands/handoff.js.map +0 -1
  265. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  266. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  267. package/dist/src/cli/commands/linear-test.js +0 -123
  268. package/dist/src/cli/commands/linear-test.js.map +0 -1
  269. package/dist/src/cli/commands/linear.d.ts +0 -6
  270. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  271. package/dist/src/cli/commands/linear.js +0 -393
  272. package/dist/src/cli/commands/linear.js.map +0 -1
  273. package/dist/src/cli/commands/log.d.ts +0 -7
  274. package/dist/src/cli/commands/log.d.ts.map +0 -1
  275. package/dist/src/cli/commands/log.js +0 -168
  276. package/dist/src/cli/commands/log.js.map +0 -1
  277. package/dist/src/cli/commands/onboard.d.ts +0 -8
  278. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  279. package/dist/src/cli/commands/onboard.js +0 -363
  280. package/dist/src/cli/commands/onboard.js.map +0 -1
  281. package/dist/src/cli/commands/projects.d.ts +0 -8
  282. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  283. package/dist/src/cli/commands/projects.js +0 -220
  284. package/dist/src/cli/commands/projects.js.map +0 -1
  285. package/dist/src/cli/commands/search.d.ts +0 -7
  286. package/dist/src/cli/commands/search.d.ts.map +0 -1
  287. package/dist/src/cli/commands/search.js +0 -162
  288. package/dist/src/cli/commands/search.js.map +0 -1
  289. package/dist/src/cli/commands/session.d.ts +0 -7
  290. package/dist/src/cli/commands/session.d.ts.map +0 -1
  291. package/dist/src/cli/commands/session.js +0 -222
  292. package/dist/src/cli/commands/session.js.map +0 -1
  293. package/dist/src/cli/commands/tasks.d.ts +0 -7
  294. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  295. package/dist/src/cli/commands/tasks.js +0 -229
  296. package/dist/src/cli/commands/tasks.js.map +0 -1
  297. package/dist/src/cli/commands/webhook.d.ts +0 -3
  298. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  299. package/dist/src/cli/commands/webhook.js +0 -157
  300. package/dist/src/cli/commands/webhook.js.map +0 -1
  301. package/dist/src/cli/commands/worktree.d.ts +0 -8
  302. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  303. package/dist/src/cli/commands/worktree.js +0 -339
  304. package/dist/src/cli/commands/worktree.js.map +0 -1
  305. package/dist/src/cli/index.d.ts +0 -8
  306. package/dist/src/cli/index.d.ts.map +0 -1
  307. package/dist/src/cli/index.js +0 -995
  308. package/dist/src/cli/index.js.map +0 -1
  309. package/dist/src/cli/utils/viewer.d.ts +0 -3
  310. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  311. package/dist/src/cli/utils/viewer.js +0 -91
  312. package/dist/src/cli/utils/viewer.js.map +0 -1
  313. package/dist/src/core/config/config-manager.d.ts +0 -95
  314. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  315. package/dist/src/core/config/config-manager.js +0 -359
  316. package/dist/src/core/config/config-manager.js.map +0 -1
  317. package/dist/src/core/config/types.d.ts +0 -72
  318. package/dist/src/core/config/types.d.ts.map +0 -1
  319. package/dist/src/core/config/types.js +0 -127
  320. package/dist/src/core/config/types.js.map +0 -1
  321. package/dist/src/core/context/auto-context.d.ts +0 -22
  322. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  323. package/dist/src/core/context/auto-context.js +0 -77
  324. package/dist/src/core/context/auto-context.js.map +0 -1
  325. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  326. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  327. package/dist/src/core/context/compaction-handler.js +0 -306
  328. package/dist/src/core/context/compaction-handler.js.map +0 -1
  329. package/dist/src/core/context/frame-database.d.ts +0 -59
  330. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  331. package/dist/src/core/context/frame-database.js +0 -333
  332. package/dist/src/core/context/frame-database.js.map +0 -1
  333. package/dist/src/core/context/frame-digest.d.ts +0 -59
  334. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  335. package/dist/src/core/context/frame-digest.js +0 -264
  336. package/dist/src/core/context/frame-digest.js.map +0 -1
  337. package/dist/src/core/context/frame-manager.d.ts +0 -112
  338. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-manager.js +0 -600
  340. package/dist/src/core/context/frame-manager.js.map +0 -1
  341. package/dist/src/core/context/frame-stack.d.ts +0 -85
  342. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-stack.js +0 -287
  344. package/dist/src/core/context/frame-stack.js.map +0 -1
  345. package/dist/src/core/context/frame-types.d.ts +0 -67
  346. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-types.js +0 -6
  348. package/dist/src/core/context/frame-types.js.map +0 -1
  349. package/dist/src/core/context/index.d.ts +0 -11
  350. package/dist/src/core/context/index.d.ts.map +0 -1
  351. package/dist/src/core/context/index.js +0 -14
  352. package/dist/src/core/context/index.js.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  354. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  355. package/dist/src/core/context/model-aware-compaction.js +0 -616
  356. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  358. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  359. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  360. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  361. package/dist/src/core/database/batch-operations.d.ts +0 -118
  362. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  363. package/dist/src/core/database/batch-operations.js +0 -339
  364. package/dist/src/core/database/batch-operations.js.map +0 -1
  365. package/dist/src/core/database/connection-pool.d.ts +0 -79
  366. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  367. package/dist/src/core/database/connection-pool.js +0 -236
  368. package/dist/src/core/database/connection-pool.js.map +0 -1
  369. package/dist/src/core/database/query-cache.d.ts +0 -135
  370. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  371. package/dist/src/core/database/query-cache.js +0 -294
  372. package/dist/src/core/database/query-cache.js.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  374. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  375. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  376. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  378. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  379. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  380. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  382. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  383. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  384. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  385. package/dist/src/core/digest/index.d.ts +0 -9
  386. package/dist/src/core/digest/index.d.ts.map +0 -1
  387. package/dist/src/core/digest/index.js +0 -9
  388. package/dist/src/core/digest/index.js.map +0 -1
  389. package/dist/src/core/digest/types.d.ts +0 -154
  390. package/dist/src/core/digest/types.d.ts.map +0 -1
  391. package/dist/src/core/digest/types.js +0 -18
  392. package/dist/src/core/digest/types.js.map +0 -1
  393. package/dist/src/core/errors/index.d.ts +0 -143
  394. package/dist/src/core/errors/index.d.ts.map +0 -1
  395. package/dist/src/core/errors/index.js +0 -282
  396. package/dist/src/core/errors/index.js.map +0 -1
  397. package/dist/src/core/errors/recovery.d.ts +0 -86
  398. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  399. package/dist/src/core/errors/recovery.js +0 -274
  400. package/dist/src/core/errors/recovery.js.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  402. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  403. package/dist/src/core/merge/conflict-detector.js +0 -468
  404. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  405. package/dist/src/core/merge/index.d.ts +0 -9
  406. package/dist/src/core/merge/index.d.ts.map +0 -1
  407. package/dist/src/core/merge/index.js +0 -9
  408. package/dist/src/core/merge/index.js.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  410. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  411. package/dist/src/core/merge/resolution-engine.js +0 -573
  412. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  413. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  414. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  415. package/dist/src/core/merge/stack-diff.js +0 -516
  416. package/dist/src/core/merge/stack-diff.js.map +0 -1
  417. package/dist/src/core/merge/types.d.ts +0 -110
  418. package/dist/src/core/merge/types.d.ts.map +0 -1
  419. package/dist/src/core/merge/types.js +0 -6
  420. package/dist/src/core/merge/types.js.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  422. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  423. package/dist/src/core/monitoring/error-handler.js +0 -212
  424. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  425. package/dist/src/core/monitoring/logger.d.ts +0 -24
  426. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  427. package/dist/src/core/monitoring/logger.js +0 -126
  428. package/dist/src/core/monitoring/logger.js.map +0 -1
  429. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  430. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/metrics.js +0 -152
  432. package/dist/src/core/monitoring/metrics.js.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  434. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  436. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  437. package/dist/src/core/performance/context-cache.d.ts +0 -109
  438. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  439. package/dist/src/core/performance/context-cache.js +0 -280
  440. package/dist/src/core/performance/context-cache.js.map +0 -1
  441. package/dist/src/core/performance/index.d.ts +0 -3
  442. package/dist/src/core/performance/index.d.ts.map +0 -1
  443. package/dist/src/core/performance/index.js +0 -3
  444. package/dist/src/core/performance/index.js.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  446. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  447. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  448. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  449. package/dist/src/core/performance/monitor.d.ts +0 -48
  450. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  451. package/dist/src/core/performance/monitor.js +0 -226
  452. package/dist/src/core/performance/monitor.js.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  454. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  455. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  456. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  458. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  459. package/dist/src/core/performance/performance-benchmark.js +0 -290
  460. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  462. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  463. package/dist/src/core/performance/performance-profiler.js +0 -346
  464. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  466. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  467. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  468. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  470. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  471. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  472. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  473. package/dist/src/core/projects/project-manager.d.ts +0 -130
  474. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  475. package/dist/src/core/projects/project-manager.js +0 -709
  476. package/dist/src/core/projects/project-manager.js.map +0 -1
  477. package/dist/src/core/query/query-parser.d.ts +0 -109
  478. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  479. package/dist/src/core/query/query-parser.js +0 -415
  480. package/dist/src/core/query/query-parser.js.map +0 -1
  481. package/dist/src/core/query/query-templates.d.ts +0 -44
  482. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  483. package/dist/src/core/query/query-templates.js +0 -326
  484. package/dist/src/core/query/query-templates.js.map +0 -1
  485. package/dist/src/core/retrieval/index.d.ts +0 -8
  486. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  487. package/dist/src/core/retrieval/index.js +0 -8
  488. package/dist/src/core/retrieval/index.js.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  490. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  491. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  492. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  494. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/summary-generator.js +0 -622
  496. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  497. package/dist/src/core/retrieval/types.d.ts +0 -257
  498. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/types.js +0 -18
  500. package/dist/src/core/retrieval/types.js.map +0 -1
  501. package/dist/src/core/session/index.d.ts +0 -2
  502. package/dist/src/core/session/index.d.ts.map +0 -1
  503. package/dist/src/core/session/index.js +0 -2
  504. package/dist/src/core/session/index.js.map +0 -1
  505. package/dist/src/core/session/session-manager.d.ts +0 -69
  506. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  507. package/dist/src/core/session/session-manager.js +0 -311
  508. package/dist/src/core/session/session-manager.js.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  510. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  511. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  512. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  514. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  515. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  516. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  517. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  518. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  519. package/dist/src/core/trace/debug-trace.js +0 -402
  520. package/dist/src/core/trace/debug-trace.js.map +0 -1
  521. package/dist/src/core/trace/error-test.d.ts +0 -6
  522. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  523. package/dist/src/core/trace/error-test.js +0 -128
  524. package/dist/src/core/trace/error-test.js.map +0 -1
  525. package/dist/src/core/trace/index.d.ts +0 -25
  526. package/dist/src/core/trace/index.d.ts.map +0 -1
  527. package/dist/src/core/trace/index.js +0 -121
  528. package/dist/src/core/trace/index.js.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  530. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  531. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  532. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  533. package/dist/src/core/trace/performance-test.d.ts +0 -6
  534. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  535. package/dist/src/core/trace/performance-test.js +0 -111
  536. package/dist/src/core/trace/performance-test.js.map +0 -1
  537. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  538. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  539. package/dist/src/core/trace/trace-demo.js +0 -154
  540. package/dist/src/core/trace/trace-demo.js.map +0 -1
  541. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  542. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  544. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  545. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  546. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  547. package/dist/src/core/trace/trace-detector.js +0 -425
  548. package/dist/src/core/trace/trace-detector.js.map +0 -1
  549. package/dist/src/core/trace/trace-store.d.ts +0 -60
  550. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-store.js +0 -323
  552. package/dist/src/core/trace/trace-store.js.map +0 -1
  553. package/dist/src/core/trace/types.d.ts +0 -81
  554. package/dist/src/core/trace/types.d.ts.map +0 -1
  555. package/dist/src/core/trace/types.js +0 -70
  556. package/dist/src/core/trace/types.js.map +0 -1
  557. package/dist/src/core/types.d.ts +0 -35
  558. package/dist/src/core/types.d.ts.map +0 -1
  559. package/dist/src/core/types.js +0 -2
  560. package/dist/src/core/types.js.map +0 -1
  561. package/dist/src/core/utils/update-checker.d.ts +0 -38
  562. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  563. package/dist/src/core/utils/update-checker.js +0 -213
  564. package/dist/src/core/utils/update-checker.js.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  566. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  567. package/dist/src/core/worktree/worktree-manager.js +0 -456
  568. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  570. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  571. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  572. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  574. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  575. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  576. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  577. package/dist/src/features/analytics/index.d.ts +0 -12
  578. package/dist/src/features/analytics/index.d.ts.map +0 -1
  579. package/dist/src/features/analytics/index.js +0 -11
  580. package/dist/src/features/analytics/index.js.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  582. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  583. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  584. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  586. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  587. package/dist/src/features/analytics/types/metrics.js +0 -2
  588. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  590. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  591. package/dist/src/features/browser/browser-mcp.js +0 -459
  592. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  594. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  595. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  596. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  598. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  599. package/dist/src/features/tasks/task-aware-context.js +0 -412
  600. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  601. package/dist/src/index.d.ts +0 -21
  602. package/dist/src/index.d.ts.map +0 -1
  603. package/dist/src/index.js +0 -9
  604. package/dist/src/index.js.map +0 -1
  605. package/dist/src/integrations/linear/auth.d.ts +0 -99
  606. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  607. package/dist/src/integrations/linear/auth.js +0 -319
  608. package/dist/src/integrations/linear/auth.js.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  610. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  611. package/dist/src/integrations/linear/auto-sync.js +0 -268
  612. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  613. package/dist/src/integrations/linear/client.d.ts +0 -127
  614. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/client.js +0 -446
  616. package/dist/src/integrations/linear/client.js.map +0 -1
  617. package/dist/src/integrations/linear/config.d.ts +0 -51
  618. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/config.js +0 -103
  620. package/dist/src/integrations/linear/config.js.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  622. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/sync-manager.js +0 -235
  624. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  626. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/sync-service.js +0 -217
  628. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  629. package/dist/src/integrations/linear/sync.d.ts +0 -125
  630. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync.js +0 -563
  632. package/dist/src/integrations/linear/sync.js.map +0 -1
  633. package/dist/src/integrations/linear/types.d.ts +0 -90
  634. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/types.js +0 -2
  636. package/dist/src/integrations/linear/types.js.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  638. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/webhook-server.js +0 -190
  640. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  641. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  642. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/webhook.js +0 -291
  644. package/dist/src/integrations/linear/webhook.js.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  646. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  648. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  650. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  652. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  656. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  658. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  660. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  664. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/index.d.ts +0 -13
  666. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/index.js +0 -17
  668. package/dist/src/integrations/mcp/index.js.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  670. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  672. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  673. package/dist/src/integrations/mcp/server.d.ts +0 -54
  674. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/server.js +0 -1616
  676. package/dist/src/integrations/mcp/server.js.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  678. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  680. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  682. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/trace-test.js +0 -54
  684. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  688. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  690. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  692. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  696. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  698. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  699. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  700. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  702. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  703. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  704. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  705. package/dist/src/models/user.model.d.ts +0 -62
  706. package/dist/src/models/user.model.d.ts.map +0 -1
  707. package/dist/src/models/user.model.js +0 -311
  708. package/dist/src/models/user.model.js.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  710. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  711. package/dist/src/servers/production/auth-middleware.js +0 -558
  712. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  713. package/dist/src/servers/railway/index.d.ts +0 -7
  714. package/dist/src/servers/railway/index.d.ts.map +0 -1
  715. package/dist/src/servers/railway/index.js +0 -401
  716. package/dist/src/servers/railway/index.js.map +0 -1
  717. package/dist/src/services/config-service.d.ts +0 -44
  718. package/dist/src/services/config-service.d.ts.map +0 -1
  719. package/dist/src/services/config-service.js +0 -61
  720. package/dist/src/services/config-service.js.map +0 -1
  721. package/dist/src/services/context-service.d.ts +0 -17
  722. package/dist/src/services/context-service.d.ts.map +0 -1
  723. package/dist/src/services/context-service.js +0 -173
  724. package/dist/src/services/context-service.js.map +0 -1
  725. package/dist/src/types/task.d.ts +0 -27
  726. package/dist/src/types/task.d.ts.map +0 -1
  727. package/dist/src/types/task.js +0 -2
  728. package/dist/src/types/task.js.map +0 -1
  729. package/dist/src/utils/logger.d.ts +0 -13
  730. package/dist/src/utils/logger.d.ts.map +0 -1
  731. package/dist/src/utils/logger.js +0 -52
  732. package/dist/src/utils/logger.js.map +0 -1
  733. package/dist/src/validation/schemas.d.ts +0 -633
  734. package/dist/src/validation/schemas.d.ts.map +0 -1
  735. package/dist/src/validation/schemas.js +0 -347
  736. package/dist/src/validation/schemas.js.map +0 -1
@@ -0,0 +1,749 @@
1
+ import "dotenv/config";
2
+ import Redis from "ioredis";
3
+ import { v4 as uuidv4 } from "uuid";
4
+ import { logger } from "../monitoring/logger.js";
5
+ import {
6
+ REDIS_KEYS,
7
+ CACHE_TTL,
8
+ calculateSkillTTL,
9
+ SkillSchema,
10
+ JournalEntrySchema
11
+ } from "./types.js";
12
+ class SkillStorageService {
13
+ redis;
14
+ userId;
15
+ keyPrefix;
16
+ enableMetrics;
17
+ // Metrics tracking
18
+ metrics = {
19
+ cacheHits: 0,
20
+ cacheMisses: 0
21
+ };
22
+ constructor(config) {
23
+ this.redis = new Redis(config.redisUrl);
24
+ this.userId = config.userId;
25
+ this.keyPrefix = config.keyPrefix || "sm:skills";
26
+ this.enableMetrics = config.enableMetrics ?? true;
27
+ this.redis.on("error", (err) => {
28
+ logger.error("Redis connection error in SkillStorage", err);
29
+ });
30
+ this.redis.on("connect", () => {
31
+ logger.info("SkillStorage connected to Redis");
32
+ });
33
+ logger.info("SkillStorageService initialized", {
34
+ userId: this.userId,
35
+ keyPrefix: this.keyPrefix,
36
+ enableMetrics: this.enableMetrics
37
+ });
38
+ }
39
+ key(pattern) {
40
+ return `${this.keyPrefix}:${pattern}`;
41
+ }
42
+ /**
43
+ * Get the current user ID
44
+ */
45
+ getUserId() {
46
+ return this.userId;
47
+ }
48
+ // ============================================================
49
+ // SKILL CRUD OPERATIONS
50
+ // ============================================================
51
+ /**
52
+ * Create a new skill
53
+ */
54
+ async createSkill(input) {
55
+ const now = (/* @__PURE__ */ new Date()).toISOString();
56
+ const skill = {
57
+ ...input,
58
+ id: uuidv4(),
59
+ createdAt: now,
60
+ updatedAt: now,
61
+ validatedCount: 0
62
+ };
63
+ SkillSchema.parse(skill);
64
+ const pipeline = this.redis.pipeline();
65
+ const skillKey = this.key(REDIS_KEYS.skill(this.userId, skill.id));
66
+ pipeline.setex(
67
+ skillKey,
68
+ calculateSkillTTL(skill.validatedCount),
69
+ JSON.stringify(skill)
70
+ );
71
+ if (skill.tool) {
72
+ pipeline.zadd(
73
+ this.key(REDIS_KEYS.skillsByTool(this.userId, skill.tool)),
74
+ Date.now(),
75
+ skill.id
76
+ );
77
+ }
78
+ pipeline.zadd(
79
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),
80
+ this.priorityScore(skill.priority),
81
+ skill.id
82
+ );
83
+ for (const tag of skill.tags) {
84
+ pipeline.zadd(
85
+ this.key(REDIS_KEYS.skillsByTag(this.userId, tag)),
86
+ Date.now(),
87
+ skill.id
88
+ );
89
+ }
90
+ pipeline.zadd(
91
+ this.key(REDIS_KEYS.skillsRecent(this.userId)),
92
+ Date.now(),
93
+ skill.id
94
+ );
95
+ pipeline.zremrangebyrank(
96
+ this.key(REDIS_KEYS.skillsRecent(this.userId)),
97
+ 0,
98
+ -1001
99
+ );
100
+ await pipeline.exec();
101
+ logger.info("Created skill", {
102
+ userId: this.userId,
103
+ id: skill.id,
104
+ category: skill.category,
105
+ tool: skill.tool
106
+ });
107
+ return skill;
108
+ }
109
+ /**
110
+ * Get skill by ID
111
+ */
112
+ async getSkill(id) {
113
+ const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));
114
+ const data = await this.redis.get(skillKey);
115
+ if (!data) {
116
+ this.metrics.cacheMisses++;
117
+ return null;
118
+ }
119
+ this.metrics.cacheHits++;
120
+ return JSON.parse(data);
121
+ }
122
+ /**
123
+ * Update an existing skill
124
+ */
125
+ async updateSkill(input) {
126
+ const existing = await this.getSkill(input.id);
127
+ if (!existing) {
128
+ return null;
129
+ }
130
+ const updated = {
131
+ ...existing,
132
+ ...input,
133
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
134
+ };
135
+ SkillSchema.parse(updated);
136
+ const skillKey = this.key(REDIS_KEYS.skill(this.userId, updated.id));
137
+ await this.redis.setex(
138
+ skillKey,
139
+ calculateSkillTTL(updated.validatedCount),
140
+ JSON.stringify(updated)
141
+ );
142
+ logger.info("Updated skill", { userId: this.userId, id: updated.id });
143
+ return updated;
144
+ }
145
+ /**
146
+ * Validate a skill (increment validation count)
147
+ */
148
+ async validateSkill(id) {
149
+ const skill = await this.getSkill(id);
150
+ if (!skill) {
151
+ return null;
152
+ }
153
+ skill.validatedCount++;
154
+ skill.lastValidated = (/* @__PURE__ */ new Date()).toISOString();
155
+ skill.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
156
+ const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));
157
+ await this.redis.setex(
158
+ skillKey,
159
+ calculateSkillTTL(skill.validatedCount),
160
+ JSON.stringify(skill)
161
+ );
162
+ await this.redis.zadd(
163
+ this.key(REDIS_KEYS.skillsValidated(this.userId)),
164
+ skill.validatedCount,
165
+ id
166
+ );
167
+ if (skill.validatedCount >= 3 && skill.priority !== "critical") {
168
+ await this.redis.sadd(
169
+ this.key(REDIS_KEYS.promotionCandidates(this.userId)),
170
+ id
171
+ );
172
+ }
173
+ logger.info("Validated skill", {
174
+ userId: this.userId,
175
+ id,
176
+ validatedCount: skill.validatedCount
177
+ });
178
+ return skill;
179
+ }
180
+ /**
181
+ * Delete a skill
182
+ */
183
+ async deleteSkill(id) {
184
+ const skill = await this.getSkill(id);
185
+ if (!skill) {
186
+ return false;
187
+ }
188
+ const pipeline = this.redis.pipeline();
189
+ const skillKey = this.key(REDIS_KEYS.skill(this.userId, id));
190
+ pipeline.del(skillKey);
191
+ if (skill.tool) {
192
+ pipeline.zrem(
193
+ this.key(REDIS_KEYS.skillsByTool(this.userId, skill.tool)),
194
+ id
195
+ );
196
+ }
197
+ pipeline.zrem(
198
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),
199
+ id
200
+ );
201
+ for (const tag of skill.tags) {
202
+ pipeline.zrem(this.key(REDIS_KEYS.skillsByTag(this.userId, tag)), id);
203
+ }
204
+ pipeline.zrem(this.key(REDIS_KEYS.skillsRecent(this.userId)), id);
205
+ pipeline.zrem(this.key(REDIS_KEYS.skillsValidated(this.userId)), id);
206
+ pipeline.srem(this.key(REDIS_KEYS.promotionCandidates(this.userId)), id);
207
+ await pipeline.exec();
208
+ logger.info("Deleted skill", { userId: this.userId, id });
209
+ return true;
210
+ }
211
+ // ============================================================
212
+ // SKILL QUERIES
213
+ // ============================================================
214
+ /**
215
+ * Query skills with filters
216
+ */
217
+ async querySkills(query) {
218
+ let skillIds = [];
219
+ if (query.tool) {
220
+ skillIds = await this.redis.zrevrange(
221
+ this.key(REDIS_KEYS.skillsByTool(this.userId, query.tool)),
222
+ 0,
223
+ -1
224
+ );
225
+ } else if (query.categories && query.categories.length === 1) {
226
+ skillIds = await this.redis.zrevrange(
227
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, query.categories[0])),
228
+ 0,
229
+ -1
230
+ );
231
+ } else if (query.tags && query.tags.length === 1) {
232
+ skillIds = await this.redis.zrevrange(
233
+ this.key(REDIS_KEYS.skillsByTag(this.userId, query.tags[0])),
234
+ 0,
235
+ -1
236
+ );
237
+ } else {
238
+ skillIds = await this.redis.zrevrange(
239
+ this.key(REDIS_KEYS.skillsRecent(this.userId)),
240
+ 0,
241
+ query.limit + query.offset
242
+ );
243
+ }
244
+ if (skillIds.length === 0) {
245
+ return [];
246
+ }
247
+ const pipeline = this.redis.pipeline();
248
+ for (const id of skillIds) {
249
+ pipeline.get(this.key(REDIS_KEYS.skill(this.userId, id)));
250
+ }
251
+ const results = await pipeline.exec();
252
+ if (!results) {
253
+ return [];
254
+ }
255
+ let skills = results.map(([err, data]) => {
256
+ if (err || !data) return null;
257
+ try {
258
+ return JSON.parse(data);
259
+ } catch {
260
+ return null;
261
+ }
262
+ }).filter((s) => s !== null);
263
+ if (query.categories && query.categories.length > 0) {
264
+ skills = skills.filter((s) => query.categories.includes(s.category));
265
+ }
266
+ if (query.priorities && query.priorities.length > 0) {
267
+ skills = skills.filter((s) => query.priorities.includes(s.priority));
268
+ }
269
+ if (query.minValidatedCount !== void 0) {
270
+ skills = skills.filter(
271
+ (s) => s.validatedCount >= query.minValidatedCount
272
+ );
273
+ }
274
+ if (query.language) {
275
+ skills = skills.filter((s) => s.language === query.language);
276
+ }
277
+ if (query.framework) {
278
+ skills = skills.filter((s) => s.framework === query.framework);
279
+ }
280
+ skills.sort((a, b) => {
281
+ let aVal, bVal;
282
+ switch (query.sortBy) {
283
+ case "priority":
284
+ aVal = this.priorityScore(a.priority);
285
+ bVal = this.priorityScore(b.priority);
286
+ break;
287
+ case "validatedCount":
288
+ aVal = a.validatedCount;
289
+ bVal = b.validatedCount;
290
+ break;
291
+ case "createdAt":
292
+ aVal = new Date(a.createdAt).getTime();
293
+ bVal = new Date(b.createdAt).getTime();
294
+ break;
295
+ case "updatedAt":
296
+ aVal = new Date(a.updatedAt).getTime();
297
+ bVal = new Date(b.updatedAt).getTime();
298
+ break;
299
+ default:
300
+ aVal = this.priorityScore(a.priority);
301
+ bVal = this.priorityScore(b.priority);
302
+ }
303
+ return query.sortOrder === "desc" ? bVal - aVal : aVal - bVal;
304
+ });
305
+ return skills.slice(query.offset, query.offset + query.limit);
306
+ }
307
+ /**
308
+ * Get skills relevant to current context
309
+ */
310
+ async getRelevantSkills(context) {
311
+ const skills = [];
312
+ const seenIds = /* @__PURE__ */ new Set();
313
+ const criticalIds = await this.redis.zrevrange(
314
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "correction")),
315
+ 0,
316
+ -1
317
+ );
318
+ for (const id of criticalIds) {
319
+ const skill = await this.getSkill(id);
320
+ if (skill && skill.priority === "critical" && !seenIds.has(id)) {
321
+ skills.push(skill);
322
+ seenIds.add(id);
323
+ }
324
+ }
325
+ if (context.tool) {
326
+ const toolSkills = await this.querySkills({
327
+ tool: context.tool,
328
+ limit: 20,
329
+ offset: 0,
330
+ sortBy: "priority",
331
+ sortOrder: "desc"
332
+ });
333
+ for (const skill of toolSkills) {
334
+ if (!seenIds.has(skill.id)) {
335
+ skills.push(skill);
336
+ seenIds.add(skill.id);
337
+ }
338
+ }
339
+ }
340
+ const validatedIds = await this.redis.zrevrange(
341
+ this.key(REDIS_KEYS.skillsValidated(this.userId)),
342
+ 0,
343
+ 10
344
+ );
345
+ for (const id of validatedIds) {
346
+ if (!seenIds.has(id)) {
347
+ const skill = await this.getSkill(id);
348
+ if (skill) {
349
+ skills.push(skill);
350
+ seenIds.add(id);
351
+ }
352
+ }
353
+ }
354
+ return skills.slice(0, 50);
355
+ }
356
+ // ============================================================
357
+ // SESSION JOURNAL
358
+ // ============================================================
359
+ /**
360
+ * Create a journal entry
361
+ */
362
+ async createJournalEntry(sessionId, type, title, content, context) {
363
+ const entry = {
364
+ id: uuidv4(),
365
+ sessionId,
366
+ type,
367
+ title,
368
+ content,
369
+ context,
370
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
371
+ };
372
+ JournalEntrySchema.parse(entry);
373
+ const pipeline = this.redis.pipeline();
374
+ pipeline.setex(
375
+ this.key(REDIS_KEYS.journalEntry(this.userId, entry.id)),
376
+ CACHE_TTL.journal,
377
+ JSON.stringify(entry)
378
+ );
379
+ pipeline.zadd(
380
+ this.key(REDIS_KEYS.journalSession(this.userId, sessionId)),
381
+ Date.now(),
382
+ entry.id
383
+ );
384
+ pipeline.zadd(
385
+ this.key(REDIS_KEYS.journalRecent(this.userId)),
386
+ Date.now(),
387
+ entry.id
388
+ );
389
+ pipeline.zremrangebyrank(
390
+ this.key(REDIS_KEYS.journalRecent(this.userId)),
391
+ 0,
392
+ -501
393
+ );
394
+ await pipeline.exec();
395
+ logger.info("Created journal entry", {
396
+ userId: this.userId,
397
+ id: entry.id,
398
+ sessionId,
399
+ type,
400
+ title
401
+ });
402
+ return entry;
403
+ }
404
+ /**
405
+ * Get journal entries for a session
406
+ */
407
+ async getSessionJournal(sessionId) {
408
+ const entryIds = await this.redis.zrevrange(
409
+ this.key(REDIS_KEYS.journalSession(this.userId, sessionId)),
410
+ 0,
411
+ -1
412
+ );
413
+ if (entryIds.length === 0) {
414
+ return [];
415
+ }
416
+ const pipeline = this.redis.pipeline();
417
+ for (const id of entryIds) {
418
+ pipeline.get(this.key(REDIS_KEYS.journalEntry(this.userId, id)));
419
+ }
420
+ const results = await pipeline.exec();
421
+ if (!results) {
422
+ return [];
423
+ }
424
+ return results.map(([err, data]) => {
425
+ if (err || !data) return null;
426
+ try {
427
+ return JSON.parse(data);
428
+ } catch {
429
+ return null;
430
+ }
431
+ }).filter((e) => e !== null);
432
+ }
433
+ /**
434
+ * Promote a journal entry to a skill
435
+ */
436
+ async promoteToSkill(entryId, category, priority = "medium") {
437
+ const entryData = await this.redis.get(
438
+ this.key(REDIS_KEYS.journalEntry(this.userId, entryId))
439
+ );
440
+ if (!entryData) {
441
+ return null;
442
+ }
443
+ const entry = JSON.parse(entryData);
444
+ const skill = await this.createSkill({
445
+ content: entry.content,
446
+ summary: entry.title,
447
+ category,
448
+ priority,
449
+ tags: [],
450
+ tool: entry.context?.tool,
451
+ source: "observation",
452
+ sessionId: entry.sessionId
453
+ });
454
+ entry.promotedToSkillId = skill.id;
455
+ await this.redis.setex(
456
+ this.key(REDIS_KEYS.journalEntry(this.userId, entryId)),
457
+ CACHE_TTL.journal,
458
+ JSON.stringify(entry)
459
+ );
460
+ logger.info("Promoted journal entry to skill", {
461
+ userId: this.userId,
462
+ entryId,
463
+ skillId: skill.id
464
+ });
465
+ return skill;
466
+ }
467
+ // ============================================================
468
+ // SESSION MANAGEMENT
469
+ // ============================================================
470
+ /**
471
+ * Start tracking a new session
472
+ */
473
+ async startSession(sessionId) {
474
+ const summary = {
475
+ sessionId,
476
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
477
+ entriesCount: 0,
478
+ correctionsCount: 0,
479
+ decisionsCount: 0,
480
+ keyLearnings: [],
481
+ promotedSkillIds: []
482
+ };
483
+ await this.redis.setex(
484
+ this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId)),
485
+ CACHE_TTL.session,
486
+ JSON.stringify(summary)
487
+ );
488
+ await this.redis.sadd(
489
+ this.key(REDIS_KEYS.sessionsActive(this.userId)),
490
+ sessionId
491
+ );
492
+ logger.info("Started session tracking", { userId: this.userId, sessionId });
493
+ }
494
+ /**
495
+ * End a session and generate summary
496
+ */
497
+ async endSession(sessionId) {
498
+ const summaryData = await this.redis.get(
499
+ this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId))
500
+ );
501
+ if (!summaryData) {
502
+ return null;
503
+ }
504
+ const summary = JSON.parse(summaryData);
505
+ summary.endedAt = (/* @__PURE__ */ new Date()).toISOString();
506
+ const entries = await this.getSessionJournal(sessionId);
507
+ summary.entriesCount = entries.length;
508
+ summary.correctionsCount = entries.filter(
509
+ (e) => e.type === "correction"
510
+ ).length;
511
+ summary.decisionsCount = entries.filter(
512
+ (e) => e.type === "decision"
513
+ ).length;
514
+ summary.keyLearnings = entries.filter((e) => e.type === "correction" || e.type === "resolution").slice(0, 5).map((e) => e.title);
515
+ summary.promotedSkillIds = entries.filter((e) => e.promotedToSkillId).map((e) => e.promotedToSkillId);
516
+ await this.redis.setex(
517
+ this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId)),
518
+ CACHE_TTL.session,
519
+ JSON.stringify(summary)
520
+ );
521
+ await this.redis.srem(
522
+ this.key(REDIS_KEYS.sessionsActive(this.userId)),
523
+ sessionId
524
+ );
525
+ logger.info("Ended session", {
526
+ userId: this.userId,
527
+ sessionId,
528
+ entriesCount: summary.entriesCount,
529
+ keyLearnings: summary.keyLearnings.length
530
+ });
531
+ return summary;
532
+ }
533
+ /**
534
+ * Get session summary
535
+ */
536
+ async getSessionSummary(sessionId) {
537
+ const data = await this.redis.get(
538
+ this.key(REDIS_KEYS.sessionSummary(this.userId, sessionId))
539
+ );
540
+ if (!data) {
541
+ return null;
542
+ }
543
+ return JSON.parse(data);
544
+ }
545
+ // ============================================================
546
+ // KNOWLEDGE HYGIENE
547
+ // ============================================================
548
+ /**
549
+ * Get skills eligible for promotion
550
+ */
551
+ async getPromotionCandidates() {
552
+ const ids = await this.redis.smembers(
553
+ this.key(REDIS_KEYS.promotionCandidates(this.userId))
554
+ );
555
+ const skills = [];
556
+ for (const id of ids) {
557
+ const skill = await this.getSkill(id);
558
+ if (skill && skill.validatedCount >= 3) {
559
+ skills.push(skill);
560
+ }
561
+ }
562
+ return skills;
563
+ }
564
+ /**
565
+ * Promote a skill (increase priority)
566
+ */
567
+ async promoteSkill(id) {
568
+ const skill = await this.getSkill(id);
569
+ if (!skill) {
570
+ return null;
571
+ }
572
+ const priorityOrder = [
573
+ "low",
574
+ "medium",
575
+ "high",
576
+ "critical"
577
+ ];
578
+ const currentIndex = priorityOrder.indexOf(skill.priority);
579
+ if (currentIndex < priorityOrder.length - 1) {
580
+ skill.priority = priorityOrder[currentIndex + 1];
581
+ skill.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
582
+ await this.redis.setex(
583
+ this.key(REDIS_KEYS.skill(this.userId, id)),
584
+ calculateSkillTTL(skill.validatedCount),
585
+ JSON.stringify(skill)
586
+ );
587
+ await this.redis.zadd(
588
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, skill.category)),
589
+ this.priorityScore(skill.priority),
590
+ id
591
+ );
592
+ if (skill.priority === "critical") {
593
+ await this.redis.srem(
594
+ this.key(REDIS_KEYS.promotionCandidates(this.userId)),
595
+ id
596
+ );
597
+ }
598
+ logger.info("Promoted skill", {
599
+ userId: this.userId,
600
+ id,
601
+ newPriority: skill.priority
602
+ });
603
+ }
604
+ return skill;
605
+ }
606
+ /**
607
+ * Archive stale skills (not validated in 90 days)
608
+ */
609
+ async archiveStaleSkills(daysThreshold = 90) {
610
+ const cutoff = Date.now() - daysThreshold * 24 * 60 * 60 * 1e3;
611
+ let archivedCount = 0;
612
+ const skillIds = await this.redis.zrangebyscore(
613
+ this.key(REDIS_KEYS.skillsRecent(this.userId)),
614
+ 0,
615
+ cutoff
616
+ );
617
+ for (const id of skillIds) {
618
+ const skill = await this.getSkill(id);
619
+ if (skill && skill.priority !== "critical") {
620
+ if (!skill.lastValidated || new Date(skill.lastValidated).getTime() < cutoff) {
621
+ if (skill.priority !== "low") {
622
+ skill.priority = "low";
623
+ skill.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
624
+ await this.redis.setex(
625
+ this.key(REDIS_KEYS.skill(this.userId, id)),
626
+ calculateSkillTTL(skill.validatedCount),
627
+ JSON.stringify(skill)
628
+ );
629
+ archivedCount++;
630
+ }
631
+ }
632
+ }
633
+ }
634
+ logger.info("Archived stale skills", {
635
+ userId: this.userId,
636
+ archivedCount,
637
+ daysThreshold
638
+ });
639
+ return archivedCount;
640
+ }
641
+ // ============================================================
642
+ // METRICS & UTILITIES
643
+ // ============================================================
644
+ /**
645
+ * Get storage metrics
646
+ */
647
+ async getMetrics() {
648
+ const [
649
+ skillsTotal,
650
+ toolSkills,
651
+ workflowSkills,
652
+ correctionSkills,
653
+ patternSkills,
654
+ preferenceSkills,
655
+ pitfallSkills,
656
+ optimizationSkills,
657
+ journalTotal,
658
+ sessionsActive
659
+ ] = await Promise.all([
660
+ this.redis.zcard(this.key(REDIS_KEYS.skillsRecent(this.userId))),
661
+ this.redis.zcard(
662
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "tool"))
663
+ ),
664
+ this.redis.zcard(
665
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "workflow"))
666
+ ),
667
+ this.redis.zcard(
668
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "correction"))
669
+ ),
670
+ this.redis.zcard(
671
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "pattern"))
672
+ ),
673
+ this.redis.zcard(
674
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "preference"))
675
+ ),
676
+ this.redis.zcard(
677
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "pitfall"))
678
+ ),
679
+ this.redis.zcard(
680
+ this.key(REDIS_KEYS.skillsByCategory(this.userId, "optimization"))
681
+ ),
682
+ this.redis.zcard(this.key(REDIS_KEYS.journalRecent(this.userId))),
683
+ this.redis.scard(this.key(REDIS_KEYS.sessionsActive(this.userId)))
684
+ ]);
685
+ return {
686
+ userId: this.userId,
687
+ skillsTotal,
688
+ skillsByCategory: {
689
+ tool: toolSkills,
690
+ workflow: workflowSkills,
691
+ correction: correctionSkills,
692
+ pattern: patternSkills,
693
+ preference: preferenceSkills,
694
+ pitfall: pitfallSkills,
695
+ optimization: optimizationSkills
696
+ },
697
+ journalEntriesTotal: journalTotal,
698
+ sessionsTracked: sessionsActive,
699
+ cacheHits: this.metrics.cacheHits,
700
+ cacheMisses: this.metrics.cacheMisses
701
+ };
702
+ }
703
+ /**
704
+ * Priority to numeric score for sorting
705
+ */
706
+ priorityScore(priority) {
707
+ const scores = {
708
+ critical: 1e3,
709
+ high: 100,
710
+ medium: 10,
711
+ low: 1
712
+ };
713
+ return scores[priority];
714
+ }
715
+ /**
716
+ * Close Redis connection
717
+ */
718
+ async close() {
719
+ await this.redis.quit();
720
+ logger.info("SkillStorageService closed");
721
+ }
722
+ }
723
+ const userStorageInstances = /* @__PURE__ */ new Map();
724
+ function getSkillStorage(config) {
725
+ const existing = userStorageInstances.get(config.userId);
726
+ if (existing) {
727
+ return existing;
728
+ }
729
+ const instance = new SkillStorageService(config);
730
+ userStorageInstances.set(config.userId, instance);
731
+ return instance;
732
+ }
733
+ function initializeSkillStorage(userId, redisUrl) {
734
+ const url = redisUrl || process.env.REDIS_URL;
735
+ if (!url) {
736
+ throw new Error("REDIS_URL environment variable not set");
737
+ }
738
+ return getSkillStorage({ redisUrl: url, userId });
739
+ }
740
+ function getDefaultUserId() {
741
+ return process.env.STACKMEMORY_USER_ID || process.env.USER || process.env.USERNAME || "default";
742
+ }
743
+ export {
744
+ SkillStorageService,
745
+ getDefaultUserId,
746
+ getSkillStorage,
747
+ initializeSkillStorage
748
+ };
749
+ //# sourceMappingURL=skill-storage.js.map