@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,262 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import chalk from "chalk";
4
+ import ora from "ora";
5
+ import { ClaudeSkillsManager } from "../../skills/claude-skills.js";
6
+ import { DualStackManager } from "../../core/context/dual-stack-manager.js";
7
+ import { FrameHandoffManager } from "../../core/context/frame-handoff-manager.js";
8
+ import { ContextRetriever } from "../../core/retrieval/context-retriever.js";
9
+ import { SQLiteAdapter } from "../../core/database/sqlite-adapter.js";
10
+ import { ConfigManager } from "../../core/config/config-manager.js";
11
+ import * as path from "path";
12
+ import * as os from "os";
13
+ async function initializeSkillContext() {
14
+ const config = ConfigManager.getInstance();
15
+ const projectId = config.get("project.id");
16
+ const userId = config.get("user.id") || process.env.USER || "default";
17
+ const dbPath = path.join(
18
+ os.homedir(),
19
+ ".stackmemory",
20
+ "data",
21
+ projectId,
22
+ "stackmemory.db"
23
+ );
24
+ const database = new SQLiteAdapter(projectId, { dbPath });
25
+ await database.connect();
26
+ const dualStackManager = new DualStackManager(database, projectId, userId);
27
+ const handoffManager = new FrameHandoffManager(dualStackManager);
28
+ const contextRetriever = new ContextRetriever(database);
29
+ return {
30
+ projectId,
31
+ userId,
32
+ dualStackManager,
33
+ handoffManager,
34
+ contextRetriever,
35
+ database
36
+ };
37
+ }
38
+ function createSkillsCommand() {
39
+ const skillsCmd = new Command("skills").description("Execute Claude skills for enhanced workflow");
40
+ skillsCmd.command("handoff <targetUser> <message>").description("Streamline frame handoffs between team members").option("-p, --priority <level>", "Set priority (low, medium, high, critical)", "medium").option("-f, --frames <frames...>", "Specific frames to handoff").option("--no-auto-detect", "Disable auto-detection of frames").action(async (targetUser, message, options) => {
41
+ const spinner = ora("Initiating handoff...").start();
42
+ try {
43
+ const context = await initializeSkillContext();
44
+ const skillsManager = new ClaudeSkillsManager(context);
45
+ const result = await skillsManager.executeSkill("handoff", [targetUser, message], {
46
+ priority: options.priority,
47
+ frames: options.frames,
48
+ autoDetect: options.autoDetect !== false
49
+ });
50
+ spinner.stop();
51
+ if (result.success) {
52
+ console.log(chalk.green("\u2713"), result.message);
53
+ if (result.data) {
54
+ console.log(chalk.cyan("\nHandoff Details:"));
55
+ console.log(` ID: ${result.data.handoffId}`);
56
+ console.log(` Frames: ${result.data.frameCount}`);
57
+ console.log(` Priority: ${result.data.priority}`);
58
+ if (result.data.actionItems?.length > 0) {
59
+ console.log(chalk.yellow("\n Action Items:"));
60
+ result.data.actionItems.forEach((item) => {
61
+ console.log(` \u2022 ${item}`);
62
+ });
63
+ }
64
+ }
65
+ } else {
66
+ console.log(chalk.red("\u2717"), result.message);
67
+ }
68
+ await context.database.disconnect();
69
+ } catch (error) {
70
+ spinner.stop();
71
+ console.error(chalk.red("Error:"), error.message);
72
+ process.exit(1);
73
+ }
74
+ });
75
+ const checkpointCmd = skillsCmd.command("checkpoint").description("Create and manage recovery points");
76
+ checkpointCmd.command("create <description>").description("Create a new checkpoint").option("--files <files...>", "Include specific files in checkpoint").option("--auto-detect-risky", "Auto-detect risky operations").action(async (description, options) => {
77
+ const spinner = ora("Creating checkpoint...").start();
78
+ try {
79
+ const context = await initializeSkillContext();
80
+ const skillsManager = new ClaudeSkillsManager(context);
81
+ const result = await skillsManager.executeSkill("checkpoint", ["create", description], {
82
+ includeFiles: options.files,
83
+ autoDetectRisky: options.autoDetectRisky
84
+ });
85
+ spinner.stop();
86
+ if (result.success) {
87
+ console.log(chalk.green("\u2713"), result.message);
88
+ if (result.data) {
89
+ console.log(chalk.cyan("\nCheckpoint Info:"));
90
+ console.log(` ID: ${result.data.checkpointId}`);
91
+ console.log(` Time: ${result.data.timestamp}`);
92
+ console.log(` Frames: ${result.data.frameCount}`);
93
+ }
94
+ } else {
95
+ console.log(chalk.red("\u2717"), result.message);
96
+ }
97
+ await context.database.disconnect();
98
+ } catch (error) {
99
+ spinner.stop();
100
+ console.error(chalk.red("Error:"), error.message);
101
+ process.exit(1);
102
+ }
103
+ });
104
+ checkpointCmd.command("restore <checkpointId>").description("Restore from a checkpoint").action(async (checkpointId) => {
105
+ const spinner = ora("Restoring checkpoint...").start();
106
+ try {
107
+ const context = await initializeSkillContext();
108
+ const skillsManager = new ClaudeSkillsManager(context);
109
+ const result = await skillsManager.executeSkill("checkpoint", ["restore", checkpointId]);
110
+ spinner.stop();
111
+ if (result.success) {
112
+ console.log(chalk.green("\u2713"), result.message);
113
+ if (result.data) {
114
+ console.log(chalk.cyan("\nRestored:"));
115
+ console.log(` Frames: ${result.data.frameCount}`);
116
+ console.log(` Files: ${result.data.filesRestored}`);
117
+ }
118
+ } else {
119
+ console.log(chalk.red("\u2717"), result.message);
120
+ }
121
+ await context.database.disconnect();
122
+ } catch (error) {
123
+ spinner.stop();
124
+ console.error(chalk.red("Error:"), error.message);
125
+ process.exit(1);
126
+ }
127
+ });
128
+ checkpointCmd.command("list").description("List available checkpoints").option("-l, --limit <number>", "Limit number of results", "10").option("-s, --since <date>", "Show checkpoints since date").action(async (options) => {
129
+ const spinner = ora("Loading checkpoints...").start();
130
+ try {
131
+ const context = await initializeSkillContext();
132
+ const skillsManager = new ClaudeSkillsManager(context);
133
+ const result = await skillsManager.executeSkill("checkpoint", ["list"], {
134
+ limit: parseInt(options.limit),
135
+ since: options.since ? new Date(options.since) : void 0
136
+ });
137
+ spinner.stop();
138
+ if (result.success) {
139
+ console.log(chalk.cyan("Available Checkpoints:\n"));
140
+ if (result.data && result.data.length > 0) {
141
+ result.data.forEach((cp) => {
142
+ const riskIndicator = cp.risky ? chalk.yellow(" [RISKY]") : "";
143
+ console.log(`${chalk.bold(cp.id)}${riskIndicator}`);
144
+ console.log(` ${cp.description}`);
145
+ console.log(chalk.gray(` ${cp.timestamp} (${cp.frameCount} frames)
146
+ `));
147
+ });
148
+ } else {
149
+ console.log(chalk.gray("No checkpoints found"));
150
+ }
151
+ } else {
152
+ console.log(chalk.red("\u2717"), result.message);
153
+ }
154
+ await context.database.disconnect();
155
+ } catch (error) {
156
+ spinner.stop();
157
+ console.error(chalk.red("Error:"), error.message);
158
+ process.exit(1);
159
+ }
160
+ });
161
+ checkpointCmd.command("diff <checkpoint1> <checkpoint2>").description("Show differences between two checkpoints").action(async (checkpoint1, checkpoint2) => {
162
+ const spinner = ora("Comparing checkpoints...").start();
163
+ try {
164
+ const context = await initializeSkillContext();
165
+ const skillsManager = new ClaudeSkillsManager(context);
166
+ const result = await skillsManager.executeSkill("checkpoint", ["diff", checkpoint1, checkpoint2]);
167
+ spinner.stop();
168
+ if (result.success) {
169
+ console.log(chalk.cyan("Checkpoint Diff:\n"));
170
+ if (result.data) {
171
+ console.log(` Time difference: ${result.data.timeDiff}`);
172
+ console.log(` Frame difference: ${result.data.framesDiff}`);
173
+ console.log(` New frames: ${result.data.newFrames}`);
174
+ console.log(` Removed frames: ${result.data.removedFrames}`);
175
+ console.log(` Modified frames: ${result.data.modifiedFrames}`);
176
+ }
177
+ } else {
178
+ console.log(chalk.red("\u2717"), result.message);
179
+ }
180
+ await context.database.disconnect();
181
+ } catch (error) {
182
+ spinner.stop();
183
+ console.error(chalk.red("Error:"), error.message);
184
+ process.exit(1);
185
+ }
186
+ });
187
+ skillsCmd.command("dig <query>").description("Deep historical context retrieval").option("-d, --depth <depth>", "Search depth (e.g., 30days, 6months, all)", "30days").option("--patterns", "Extract patterns from results").option("--decisions", "Extract key decisions").option("--timeline", "Generate activity timeline").action(async (query, options) => {
188
+ const spinner = ora("Digging through context...").start();
189
+ try {
190
+ const context = await initializeSkillContext();
191
+ const skillsManager = new ClaudeSkillsManager(context);
192
+ const result = await skillsManager.executeSkill("dig", [query], {
193
+ depth: options.depth,
194
+ patterns: options.patterns,
195
+ decisions: options.decisions,
196
+ timeline: options.timeline
197
+ });
198
+ spinner.stop();
199
+ if (result.success) {
200
+ console.log(chalk.green("\u2713"), result.message);
201
+ if (result.data) {
202
+ console.log(chalk.cyan(`
203
+ Searched ${result.data.timeRange.from} to ${result.data.timeRange.to}`));
204
+ if (result.data.summary) {
205
+ console.log("\n" + result.data.summary);
206
+ } else {
207
+ if (result.data.topResults?.length > 0) {
208
+ console.log(chalk.cyan("\nTop Results:"));
209
+ result.data.topResults.forEach((r) => {
210
+ console.log(` ${chalk.yellow(`[${r.score.toFixed(2)}]`)} ${r.summary}`);
211
+ });
212
+ }
213
+ if (result.data.patterns?.length > 0) {
214
+ console.log(chalk.cyan("\nDetected Patterns:"));
215
+ result.data.patterns.forEach((p) => {
216
+ console.log(` ${p.name}: ${p.count} occurrences`);
217
+ });
218
+ }
219
+ if (result.data.decisions?.length > 0) {
220
+ console.log(chalk.cyan("\nKey Decisions:"));
221
+ result.data.decisions.slice(0, 5).forEach((d) => {
222
+ console.log(` ${chalk.gray(new Date(d.timestamp).toLocaleDateString())}: ${d.decision}`);
223
+ });
224
+ }
225
+ if (result.data.timeline?.length > 0) {
226
+ console.log(chalk.cyan("\nActivity Timeline:"));
227
+ result.data.timeline.slice(0, 5).forEach((t) => {
228
+ console.log(` ${t.date}: ${t.itemCount} activities`);
229
+ });
230
+ }
231
+ }
232
+ }
233
+ } else {
234
+ console.log(chalk.red("\u2717"), result.message);
235
+ }
236
+ await context.database.disconnect();
237
+ } catch (error) {
238
+ spinner.stop();
239
+ console.error(chalk.red("Error:"), error.message);
240
+ process.exit(1);
241
+ }
242
+ });
243
+ skillsCmd.command("help [skill]").description("Show help for a specific skill").action(async (skill) => {
244
+ const context = await initializeSkillContext();
245
+ const skillsManager = new ClaudeSkillsManager(context);
246
+ if (skill) {
247
+ console.log(skillsManager.getSkillHelp(skill));
248
+ } else {
249
+ console.log(chalk.cyan("Available Claude Skills:\n"));
250
+ console.log(" handoff - Streamline frame handoffs between team members");
251
+ console.log(" checkpoint - Create and manage recovery points");
252
+ console.log(" dig - Deep historical context retrieval\n");
253
+ console.log('Use "stackmemory skills help <skill>" for detailed help on each skill');
254
+ }
255
+ await context.database.disconnect();
256
+ });
257
+ return skillsCmd;
258
+ }
259
+ export {
260
+ createSkillsCommand
261
+ };
262
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/commands/skills.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * Claude Skills CLI Commands\n * Integrates Claude skills into the stackmemory CLI\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { ClaudeSkillsManager, type SkillContext } from '../../skills/claude-skills.js';\nimport { DualStackManager } from '../../core/context/dual-stack-manager.js';\nimport { FrameHandoffManager } from '../../core/context/frame-handoff-manager.js';\nimport { ContextRetriever } from '../../core/retrieval/context-retriever.js';\nimport { SQLiteAdapter } from '../../core/database/sqlite-adapter.js';\nimport { ConfigManager } from '../../core/config/config-manager.js';\nimport * as path from 'path';\nimport * as os from 'os';\n\nasync function initializeSkillContext(): Promise<SkillContext> {\n const config = ConfigManager.getInstance();\n const projectId = config.get('project.id');\n const userId = config.get('user.id') || process.env.USER || 'default';\n \n const dbPath = path.join(\n os.homedir(),\n '.stackmemory',\n 'data',\n projectId,\n 'stackmemory.db'\n );\n\n const database = new SQLiteAdapter(projectId, { dbPath });\n await database.connect();\n\n const dualStackManager = new DualStackManager(database, projectId, userId);\n const handoffManager = new FrameHandoffManager(dualStackManager);\n const contextRetriever = new ContextRetriever(database);\n\n return {\n projectId,\n userId,\n dualStackManager,\n handoffManager,\n contextRetriever,\n database,\n };\n}\n\nexport function createSkillsCommand(): Command {\n const skillsCmd = new Command('skills')\n .description('Execute Claude skills for enhanced workflow');\n\n // Handoff skill command\n skillsCmd\n .command('handoff <targetUser> <message>')\n .description('Streamline frame handoffs between team members')\n .option('-p, --priority <level>', 'Set priority (low, medium, high, critical)', 'medium')\n .option('-f, --frames <frames...>', 'Specific frames to handoff')\n .option('--no-auto-detect', 'Disable auto-detection of frames')\n .action(async (targetUser, message, options) => {\n const spinner = ora('Initiating handoff...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('handoff', [targetUser, message], {\n priority: options.priority,\n frames: options.frames,\n autoDetect: options.autoDetect !== false,\n });\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.green('\u2713'), result.message);\n if (result.data) {\n console.log(chalk.cyan('\\nHandoff Details:'));\n console.log(` ID: ${result.data.handoffId}`);\n console.log(` Frames: ${result.data.frameCount}`);\n console.log(` Priority: ${result.data.priority}`);\n if (result.data.actionItems?.length > 0) {\n console.log(chalk.yellow('\\n Action Items:'));\n result.data.actionItems.forEach(item => {\n console.log(` \u2022 ${item}`);\n });\n }\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n // Checkpoint skill commands\n const checkpointCmd = skillsCmd.command('checkpoint')\n .description('Create and manage recovery points');\n\n checkpointCmd\n .command('create <description>')\n .description('Create a new checkpoint')\n .option('--files <files...>', 'Include specific files in checkpoint')\n .option('--auto-detect-risky', 'Auto-detect risky operations')\n .action(async (description, options) => {\n const spinner = ora('Creating checkpoint...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('checkpoint', ['create', description], {\n includeFiles: options.files,\n autoDetectRisky: options.autoDetectRisky,\n });\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.green('\u2713'), result.message);\n if (result.data) {\n console.log(chalk.cyan('\\nCheckpoint Info:'));\n console.log(` ID: ${result.data.checkpointId}`);\n console.log(` Time: ${result.data.timestamp}`);\n console.log(` Frames: ${result.data.frameCount}`);\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n checkpointCmd\n .command('restore <checkpointId>')\n .description('Restore from a checkpoint')\n .action(async (checkpointId) => {\n const spinner = ora('Restoring checkpoint...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('checkpoint', ['restore', checkpointId]);\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.green('\u2713'), result.message);\n if (result.data) {\n console.log(chalk.cyan('\\nRestored:'));\n console.log(` Frames: ${result.data.frameCount}`);\n console.log(` Files: ${result.data.filesRestored}`);\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n checkpointCmd\n .command('list')\n .description('List available checkpoints')\n .option('-l, --limit <number>', 'Limit number of results', '10')\n .option('-s, --since <date>', 'Show checkpoints since date')\n .action(async (options) => {\n const spinner = ora('Loading checkpoints...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('checkpoint', ['list'], {\n limit: parseInt(options.limit),\n since: options.since ? new Date(options.since) : undefined,\n });\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.cyan('Available Checkpoints:\\n'));\n if (result.data && result.data.length > 0) {\n result.data.forEach((cp: any) => {\n const riskIndicator = cp.risky ? chalk.yellow(' [RISKY]') : '';\n console.log(`${chalk.bold(cp.id)}${riskIndicator}`);\n console.log(` ${cp.description}`);\n console.log(chalk.gray(` ${cp.timestamp} (${cp.frameCount} frames)\\n`));\n });\n } else {\n console.log(chalk.gray('No checkpoints found'));\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n checkpointCmd\n .command('diff <checkpoint1> <checkpoint2>')\n .description('Show differences between two checkpoints')\n .action(async (checkpoint1, checkpoint2) => {\n const spinner = ora('Comparing checkpoints...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('checkpoint', ['diff', checkpoint1, checkpoint2]);\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.cyan('Checkpoint Diff:\\n'));\n if (result.data) {\n console.log(` Time difference: ${result.data.timeDiff}`);\n console.log(` Frame difference: ${result.data.framesDiff}`);\n console.log(` New frames: ${result.data.newFrames}`);\n console.log(` Removed frames: ${result.data.removedFrames}`);\n console.log(` Modified frames: ${result.data.modifiedFrames}`);\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n // Context Archaeologist skill command\n skillsCmd\n .command('dig <query>')\n .description('Deep historical context retrieval')\n .option('-d, --depth <depth>', 'Search depth (e.g., 30days, 6months, all)', '30days')\n .option('--patterns', 'Extract patterns from results')\n .option('--decisions', 'Extract key decisions')\n .option('--timeline', 'Generate activity timeline')\n .action(async (query, options) => {\n const spinner = ora('Digging through context...').start();\n \n try {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n const result = await skillsManager.executeSkill('dig', [query], {\n depth: options.depth,\n patterns: options.patterns,\n decisions: options.decisions,\n timeline: options.timeline,\n });\n\n spinner.stop();\n\n if (result.success) {\n console.log(chalk.green('\u2713'), result.message);\n \n if (result.data) {\n console.log(chalk.cyan(`\\nSearched ${result.data.timeRange.from} to ${result.data.timeRange.to}`));\n \n if (result.data.summary) {\n console.log('\\n' + result.data.summary);\n } else {\n // Display top results\n if (result.data.topResults?.length > 0) {\n console.log(chalk.cyan('\\nTop Results:'));\n result.data.topResults.forEach((r: any) => {\n console.log(` ${chalk.yellow(`[${r.score.toFixed(2)}]`)} ${r.summary}`);\n });\n }\n\n // Display patterns if found\n if (result.data.patterns?.length > 0) {\n console.log(chalk.cyan('\\nDetected Patterns:'));\n result.data.patterns.forEach((p: any) => {\n console.log(` ${p.name}: ${p.count} occurrences`);\n });\n }\n\n // Display decisions if found\n if (result.data.decisions?.length > 0) {\n console.log(chalk.cyan('\\nKey Decisions:'));\n result.data.decisions.slice(0, 5).forEach((d: any) => {\n console.log(` ${chalk.gray(new Date(d.timestamp).toLocaleDateString())}: ${d.decision}`);\n });\n }\n\n // Display timeline if generated\n if (result.data.timeline?.length > 0) {\n console.log(chalk.cyan('\\nActivity Timeline:'));\n result.data.timeline.slice(0, 5).forEach((t: any) => {\n console.log(` ${t.date}: ${t.itemCount} activities`);\n });\n }\n }\n }\n } else {\n console.log(chalk.red('\u2717'), result.message);\n }\n\n await context.database.disconnect();\n } catch (error) {\n spinner.stop();\n console.error(chalk.red('Error:'), error.message);\n process.exit(1);\n }\n });\n\n // Help command for skills\n skillsCmd\n .command('help [skill]')\n .description('Show help for a specific skill')\n .action(async (skill) => {\n const context = await initializeSkillContext();\n const skillsManager = new ClaudeSkillsManager(context);\n \n if (skill) {\n console.log(skillsManager.getSkillHelp(skill));\n } else {\n console.log(chalk.cyan('Available Claude Skills:\\n'));\n console.log(' handoff - Streamline frame handoffs between team members');\n console.log(' checkpoint - Create and manage recovery points');\n console.log(' dig - Deep historical context retrieval\\n');\n console.log('Use \"stackmemory skills help <skill>\" for detailed help on each skill');\n }\n \n await context.database.disconnect();\n });\n\n return skillsCmd;\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,275 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import Database from "better-sqlite3";
5
+ import { join } from "path";
6
+ import { existsSync } from "fs";
7
+ import { RailwayOptimizedStorage } from "../../core/storage/railway-optimized-storage.js";
8
+ import { ConfigManager } from "../../core/config/config-manager.js";
9
+ import { formatBytes, formatDuration } from "../../utils/formatting.js";
10
+ function createStorageCommand() {
11
+ const storage = new Command("storage").description(
12
+ "Manage 3-tier storage system (Redis/Railway/GCS)"
13
+ );
14
+ storage.command("status").description("Show storage tier statistics").option("-v, --verbose", "Show detailed statistics").action(async (options) => {
15
+ const spinner = ora("Loading storage statistics...").start();
16
+ try {
17
+ const dbPath = join(process.cwd(), ".stackmemory", "context.db");
18
+ if (!existsSync(dbPath)) {
19
+ spinner.fail("StackMemory not initialized in this directory");
20
+ process.exit(1);
21
+ }
22
+ const db = new Database(dbPath);
23
+ const configManager = new ConfigManager();
24
+ const storage2 = new RailwayOptimizedStorage(db, configManager);
25
+ const stats = storage2.getStorageStats();
26
+ spinner.succeed("Storage statistics loaded");
27
+ console.log(chalk.blue("\n\u{1F4CA} Storage Tier Distribution:"));
28
+ console.log(chalk.gray("\u2501".repeat(50)));
29
+ for (const tier of stats.byTier) {
30
+ const icon = tier.tier === "hot" ? "\u{1F525}" : tier.tier === "warm" ? "\u2601\uFE0F" : "\u2744\uFE0F";
31
+ const color = tier.tier === "hot" ? chalk.red : tier.tier === "warm" ? chalk.yellow : chalk.cyan;
32
+ console.log(`
33
+ ${icon} ${color(tier.tier.toUpperCase())} Tier:`);
34
+ console.log(` Traces: ${chalk.white(tier.count)}`);
35
+ console.log(` Original Size: ${chalk.white(formatBytes(tier.total_original || 0))}`);
36
+ console.log(` Compressed Size: ${chalk.white(formatBytes(tier.total_compressed || 0))}`);
37
+ console.log(` Compression Ratio: ${chalk.green((tier.avg_compression * 100).toFixed(1) + "%")}`);
38
+ console.log(` Avg Access Count: ${chalk.white(tier.avg_access?.toFixed(1) || "0")}`);
39
+ }
40
+ console.log(chalk.blue("\n\u{1F4C5} Age Distribution:"));
41
+ console.log(chalk.gray("\u2501".repeat(50)));
42
+ for (const age of stats.byAge) {
43
+ const percent = (age.count / stats.totalTraces * 100).toFixed(1);
44
+ const bar = "\u2588".repeat(Math.floor(percent / 2));
45
+ console.log(` ${age.age_group.padEnd(10)} ${bar} ${percent}% (${age.count})`);
46
+ }
47
+ console.log(chalk.blue("\n\u{1F4C8} Summary:"));
48
+ console.log(chalk.gray("\u2501".repeat(50)));
49
+ console.log(` Total Traces: ${chalk.white(stats.totalTraces)}`);
50
+ console.log(` Total Size: ${chalk.white(formatBytes(stats.totalSize))}`);
51
+ console.log(` Compressed Size: ${chalk.white(formatBytes(stats.compressedSize))}`);
52
+ const compressionRatio = ((1 - stats.compressedSize / stats.totalSize) * 100).toFixed(1);
53
+ console.log(` Overall Compression: ${chalk.green(compressionRatio + "%")}`);
54
+ const costEstimate = calculateStorageCost(stats);
55
+ console.log(chalk.blue("\n\u{1F4B0} Estimated Monthly Cost:"));
56
+ console.log(chalk.gray("\u2501".repeat(50)));
57
+ console.log(` Redis (Hot): ${chalk.green("$0.00")} (included with Railway)`);
58
+ console.log(` Railway Buckets (Warm): ${chalk.yellow(costEstimate.railway)}`);
59
+ console.log(` GCS Coldline (Cold): ${chalk.cyan(costEstimate.gcs)}`);
60
+ console.log(` Total: ${chalk.white(costEstimate.total)}`);
61
+ if (options.verbose) {
62
+ const recentMigrations = db.prepare(`
63
+ SELECT trace_id, tier, migrated_at, score
64
+ FROM storage_tiers
65
+ WHERE migrated_at > ?
66
+ ORDER BY migrated_at DESC
67
+ LIMIT 10
68
+ `).all(Date.now() - 24 * 60 * 60 * 1e3);
69
+ if (recentMigrations.length > 0) {
70
+ console.log(chalk.blue("\n\u{1F504} Recent Migrations (last 24h):"));
71
+ console.log(chalk.gray("\u2501".repeat(50)));
72
+ for (const m of recentMigrations) {
73
+ const time = new Date(m.migrated_at).toLocaleTimeString();
74
+ console.log(` ${time} - ${m.trace_id.substring(0, 8)}... \u2192 ${m.tier} (score: ${m.score.toFixed(2)})`);
75
+ }
76
+ }
77
+ }
78
+ db.close();
79
+ } catch (error) {
80
+ spinner.fail("Failed to load storage statistics");
81
+ console.error(error);
82
+ process.exit(1);
83
+ }
84
+ });
85
+ storage.command("migrate").description("Migrate traces between storage tiers").option("--dry-run", "Show what would be migrated without doing it").option("--force", "Force migration regardless of age").action(async (options) => {
86
+ const spinner = ora("Checking for traces to migrate...").start();
87
+ try {
88
+ const dbPath = join(process.cwd(), ".stackmemory", "context.db");
89
+ const db = new Database(dbPath);
90
+ const configManager = new ConfigManager();
91
+ const storage2 = new RailwayOptimizedStorage(db, configManager);
92
+ if (options.dryRun) {
93
+ const candidates = db.prepare(`
94
+ SELECT trace_id, tier, created_at, score,
95
+ (? - created_at) / 3600000 as age_hours
96
+ FROM storage_tiers
97
+ WHERE tier != 'cold'
98
+ ORDER BY created_at ASC
99
+ `).all(Date.now());
100
+ const toMigrate = {
101
+ hotToWarm: candidates.filter(
102
+ (c) => c.tier === "hot" && c.age_hours > 24
103
+ ),
104
+ warmToCold: candidates.filter(
105
+ (c) => c.tier === "warm" && c.age_hours > 720
106
+ )
107
+ };
108
+ spinner.info("Dry run - no changes will be made");
109
+ console.log(chalk.blue("\n\u{1F504} Migration Plan:"));
110
+ console.log(chalk.gray("\u2501".repeat(50)));
111
+ if (toMigrate.hotToWarm.length > 0) {
112
+ console.log(chalk.red(`
113
+ \u{1F525} \u2192 \u2601\uFE0F Hot to Warm: ${toMigrate.hotToWarm.length} traces`));
114
+ for (const t of toMigrate.hotToWarm.slice(0, 5)) {
115
+ console.log(` \u2022 ${t.trace_id.substring(0, 8)}... (${t.age_hours.toFixed(0)}h old, score: ${t.score.toFixed(2)})`);
116
+ }
117
+ if (toMigrate.hotToWarm.length > 5) {
118
+ console.log(` ... and ${toMigrate.hotToWarm.length - 5} more`);
119
+ }
120
+ }
121
+ if (toMigrate.warmToCold.length > 0) {
122
+ console.log(chalk.yellow(`
123
+ \u2601\uFE0F \u2192 \u2744\uFE0F Warm to Cold: ${toMigrate.warmToCold.length} traces`));
124
+ for (const t of toMigrate.warmToCold.slice(0, 5)) {
125
+ const ageDays = Math.floor(t.age_hours / 24);
126
+ console.log(` \u2022 ${t.trace_id.substring(0, 8)}... (${ageDays}d old, score: ${t.score.toFixed(2)})`);
127
+ }
128
+ if (toMigrate.warmToCold.length > 5) {
129
+ console.log(` ... and ${toMigrate.warmToCold.length - 5} more`);
130
+ }
131
+ }
132
+ if (toMigrate.hotToWarm.length === 0 && toMigrate.warmToCold.length === 0) {
133
+ console.log(chalk.green("\u2713 No traces need migration"));
134
+ }
135
+ } else {
136
+ spinner.text = "Migrating traces between tiers...";
137
+ const results = await storage2.migrateTiers();
138
+ spinner.succeed("Migration completed");
139
+ console.log(chalk.blue("\n\u2705 Migration Results:"));
140
+ console.log(chalk.gray("\u2501".repeat(50)));
141
+ console.log(` Hot \u2192 Warm: ${chalk.yellow(results.hotToWarm)} traces`);
142
+ console.log(` Warm \u2192 Cold: ${chalk.cyan(results.warmToCold)} traces`);
143
+ if (results.errors.length > 0) {
144
+ console.log(chalk.red(`
145
+ \u274C Errors (${results.errors.length}):`));
146
+ for (const error of results.errors.slice(0, 5)) {
147
+ console.log(` \u2022 ${error}`);
148
+ }
149
+ }
150
+ }
151
+ db.close();
152
+ } catch (error) {
153
+ spinner.fail("Migration failed");
154
+ console.error(error);
155
+ process.exit(1);
156
+ }
157
+ });
158
+ storage.command("cleanup").description("Clean up old traces from cold storage").option("--days <number>", "Remove traces older than N days", parseInt, 90).option("--dry-run", "Show what would be removed without doing it").action(async (options) => {
159
+ const spinner = ora("Analyzing storage for cleanup...").start();
160
+ try {
161
+ const dbPath = join(process.cwd(), ".stackmemory", "context.db");
162
+ const db = new Database(dbPath);
163
+ const configManager = new ConfigManager();
164
+ const storage2 = new RailwayOptimizedStorage(db, configManager);
165
+ const cutoff = Date.now() - options.days * 24 * 60 * 60 * 1e3;
166
+ if (options.dryRun) {
167
+ const toRemove = db.prepare(`
168
+ SELECT COUNT(*) as count, SUM(compressed_size) as size
169
+ FROM storage_tiers
170
+ WHERE tier = 'cold' AND created_at < ? AND access_count = 0
171
+ `).get(cutoff);
172
+ spinner.info("Dry run - no traces will be removed");
173
+ console.log(chalk.blue("\n\u{1F9F9} Cleanup Analysis:"));
174
+ console.log(chalk.gray("\u2501".repeat(50)));
175
+ console.log(` Traces to remove: ${chalk.red(toRemove.count || 0)}`);
176
+ console.log(` Space to free: ${chalk.yellow(formatBytes(toRemove.size || 0))}`);
177
+ console.log(` Criteria: > ${options.days} days old with 0 access`);
178
+ } else {
179
+ const removed = await storage2.cleanup();
180
+ spinner.succeed(`Cleanup completed - removed ${removed} traces`);
181
+ }
182
+ db.close();
183
+ } catch (error) {
184
+ spinner.fail("Cleanup failed");
185
+ console.error(error);
186
+ process.exit(1);
187
+ }
188
+ });
189
+ storage.command("retrieve <traceId>").description("Retrieve a trace from any storage tier").action(async (traceId) => {
190
+ const spinner = ora(`Retrieving trace ${traceId}...`).start();
191
+ try {
192
+ const dbPath = join(process.cwd(), ".stackmemory", "context.db");
193
+ const db = new Database(dbPath);
194
+ const configManager = new ConfigManager();
195
+ const storage2 = new RailwayOptimizedStorage(db, configManager);
196
+ const trace = await storage2.retrieveTrace(traceId);
197
+ if (!trace) {
198
+ spinner.fail(`Trace ${traceId} not found`);
199
+ process.exit(1);
200
+ }
201
+ spinner.succeed("Trace retrieved");
202
+ console.log(chalk.blue("\n\u{1F4E6} Trace Details:"));
203
+ console.log(chalk.gray("\u2501".repeat(50)));
204
+ console.log(` ID: ${chalk.cyan(trace.id)}`);
205
+ console.log(` Type: ${chalk.yellow(trace.type)}`);
206
+ console.log(` Score: ${chalk.green(trace.score.toFixed(3))}`);
207
+ console.log(` Summary: ${trace.summary}`);
208
+ console.log(` Tools: ${trace.tools?.length || trace.toolSummary?.count || 0}`);
209
+ const metadata = trace.metadata;
210
+ if (metadata) {
211
+ console.log(chalk.blue("\n\u{1F4CB} Metadata:"));
212
+ console.log(` Start: ${new Date(metadata.startTime).toLocaleString()}`);
213
+ console.log(` Duration: ${formatDuration(metadata.endTime - metadata.startTime)}`);
214
+ console.log(` Files: ${metadata.filesModified?.length || metadata.filesModified || 0}`);
215
+ console.log(` Errors: ${metadata.errorsEncountered?.length || metadata.errorsCount || 0}`);
216
+ }
217
+ const location = db.prepare(
218
+ "SELECT tier, location, access_count FROM storage_tiers WHERE trace_id = ?"
219
+ ).get(traceId);
220
+ if (location) {
221
+ const tierIcon = location.tier === "hot" ? "\u{1F525}" : location.tier === "warm" ? "\u2601\uFE0F" : "\u2744\uFE0F";
222
+ console.log(chalk.blue("\n\u{1F4BE} Storage:"));
223
+ console.log(` Tier: ${tierIcon} ${location.tier}`);
224
+ console.log(` Access Count: ${location.access_count}`);
225
+ }
226
+ db.close();
227
+ } catch (error) {
228
+ spinner.fail("Failed to retrieve trace");
229
+ console.error(error);
230
+ process.exit(1);
231
+ }
232
+ });
233
+ storage.command("config").description("Show storage configuration").action(async () => {
234
+ console.log(chalk.blue("\n\u2699\uFE0F Storage Configuration:"));
235
+ console.log(chalk.gray("\u2501".repeat(50)));
236
+ console.log(chalk.red("\n\u{1F525} Hot Tier (Redis):"));
237
+ console.log(` URL: ${process.env.REDIS_URL ? chalk.green("Configured") : chalk.yellow("Not configured")}`);
238
+ console.log(` TTL: 24 hours`);
239
+ console.log(` Max Memory: 100MB`);
240
+ console.log(chalk.yellow("\n\u2601\uFE0F Warm Tier (Railway Buckets):"));
241
+ console.log(` Endpoint: ${process.env.RAILWAY_BUCKET_ENDPOINT || "Not configured"}`);
242
+ console.log(` Bucket: ${process.env.RAILWAY_BUCKET_NAME || "stackmemory-warm"}`);
243
+ console.log(` Access Key: ${process.env.RAILWAY_BUCKET_ACCESS_KEY ? chalk.green("Set") : chalk.yellow("Not set")}`);
244
+ console.log(` Retention: 30 days`);
245
+ console.log(chalk.cyan("\n\u2744\uFE0F Cold Tier (GCS):"));
246
+ console.log(` Project: ${process.env.GCP_PROJECT_ID || "Not configured"}`);
247
+ console.log(` Bucket: ${process.env.GCS_BUCKET || "stackmemory-cold"}`);
248
+ console.log(` Key File: ${process.env.GCP_KEY_FILE ? chalk.green("Set") : chalk.yellow("Not set")}`);
249
+ console.log(` Storage Class: Coldline`);
250
+ console.log(` Retention: Infinite`);
251
+ console.log(chalk.blue("\n\u{1F4CA} Migration Thresholds:"));
252
+ console.log(` Hot \u2192 Warm: After 24 hours`);
253
+ console.log(` Warm \u2192 Cold: After 30 days`);
254
+ console.log(` Low Score Migration: < 0.4 score`);
255
+ });
256
+ return storage;
257
+ }
258
+ function calculateStorageCost(stats) {
259
+ const warmTier = stats.byTier.find((t) => t.tier === "warm");
260
+ const coldTier = stats.byTier.find((t) => t.tier === "cold");
261
+ const warmGB = (warmTier?.total_compressed || 0) / (1024 * 1024 * 1024);
262
+ const coldGB = (coldTier?.total_compressed || 0) / (1024 * 1024 * 1024);
263
+ const railwayCost = warmGB * 0.02;
264
+ const gcsCost = coldGB * 4e-3;
265
+ const totalCost = railwayCost + gcsCost;
266
+ return {
267
+ railway: `$${railwayCost.toFixed(2)}`,
268
+ gcs: `$${gcsCost.toFixed(2)}`,
269
+ total: `$${totalCost.toFixed(2)}`
270
+ };
271
+ }
272
+ export {
273
+ createStorageCommand
274
+ };
275
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/commands/storage.ts"],
4
+ "sourcesContent": ["/**\n * Storage management commands for StackMemory\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport { RailwayOptimizedStorage } from '../../core/storage/railway-optimized-storage.js';\nimport { ConfigManager } from '../../core/config/config-manager.js';\nimport { formatBytes, formatDuration } from '../../utils/formatting.js';\n\nexport function createStorageCommand(): Command {\n const storage = new Command('storage').description(\n 'Manage 3-tier storage system (Redis/Railway/GCS)'\n );\n\n storage\n .command('status')\n .description('Show storage tier statistics')\n .option('-v, --verbose', 'Show detailed statistics')\n .action(async (options) => {\n const spinner = ora('Loading storage statistics...').start();\n \n try {\n const dbPath = join(process.cwd(), '.stackmemory', 'context.db');\n if (!existsSync(dbPath)) {\n spinner.fail('StackMemory not initialized in this directory');\n process.exit(1);\n }\n \n const db = new Database(dbPath);\n const configManager = new ConfigManager();\n const storage = new RailwayOptimizedStorage(db, configManager);\n \n const stats = storage.getStorageStats();\n spinner.succeed('Storage statistics loaded');\n \n console.log(chalk.blue('\\n\uD83D\uDCCA Storage Tier Distribution:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n \n // Tier statistics\n for (const tier of stats.byTier) {\n const icon = tier.tier === 'hot' ? '\uD83D\uDD25' : tier.tier === 'warm' ? '\u2601\uFE0F' : '\u2744\uFE0F';\n const color = tier.tier === 'hot' ? chalk.red : tier.tier === 'warm' ? chalk.yellow : chalk.cyan;\n \n console.log(`\\n${icon} ${color(tier.tier.toUpperCase())} Tier:`);\n console.log(` Traces: ${chalk.white(tier.count)}`);\n console.log(` Original Size: ${chalk.white(formatBytes(tier.total_original || 0))}`);\n console.log(` Compressed Size: ${chalk.white(formatBytes(tier.total_compressed || 0))}`);\n console.log(` Compression Ratio: ${chalk.green((tier.avg_compression * 100).toFixed(1) + '%')}`);\n console.log(` Avg Access Count: ${chalk.white(tier.avg_access?.toFixed(1) || '0')}`);\n }\n \n // Age distribution\n console.log(chalk.blue('\\n\uD83D\uDCC5 Age Distribution:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n for (const age of stats.byAge) {\n const percent = (age.count / stats.totalTraces * 100).toFixed(1);\n const bar = '\u2588'.repeat(Math.floor(percent / 2));\n console.log(` ${age.age_group.padEnd(10)} ${bar} ${percent}% (${age.count})`);\n }\n \n // Summary\n console.log(chalk.blue('\\n\uD83D\uDCC8 Summary:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(` Total Traces: ${chalk.white(stats.totalTraces)}`);\n console.log(` Total Size: ${chalk.white(formatBytes(stats.totalSize))}`);\n console.log(` Compressed Size: ${chalk.white(formatBytes(stats.compressedSize))}`);\n \n const compressionRatio = ((1 - stats.compressedSize / stats.totalSize) * 100).toFixed(1);\n console.log(` Overall Compression: ${chalk.green(compressionRatio + '%')}`);\n \n // Cost estimation\n const costEstimate = calculateStorageCost(stats);\n console.log(chalk.blue('\\n\uD83D\uDCB0 Estimated Monthly Cost:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(` Redis (Hot): ${chalk.green('$0.00')} (included with Railway)`);\n console.log(` Railway Buckets (Warm): ${chalk.yellow(costEstimate.railway)}`);\n console.log(` GCS Coldline (Cold): ${chalk.cyan(costEstimate.gcs)}`);\n console.log(` Total: ${chalk.white(costEstimate.total)}`);\n \n if (options.verbose) {\n // Show recent migrations\n const recentMigrations = db.prepare(`\n SELECT trace_id, tier, migrated_at, score\n FROM storage_tiers\n WHERE migrated_at > ?\n ORDER BY migrated_at DESC\n LIMIT 10\n `).all(Date.now() - 24 * 60 * 60 * 1000) as any[];\n \n if (recentMigrations.length > 0) {\n console.log(chalk.blue('\\n\uD83D\uDD04 Recent Migrations (last 24h):'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n for (const m of recentMigrations) {\n const time = new Date(m.migrated_at).toLocaleTimeString();\n console.log(` ${time} - ${m.trace_id.substring(0, 8)}... \u2192 ${m.tier} (score: ${m.score.toFixed(2)})`);\n }\n }\n }\n \n db.close();\n \n } catch (error) {\n spinner.fail('Failed to load storage statistics');\n console.error(error);\n process.exit(1);\n }\n });\n\n storage\n .command('migrate')\n .description('Migrate traces between storage tiers')\n .option('--dry-run', 'Show what would be migrated without doing it')\n .option('--force', 'Force migration regardless of age')\n .action(async (options) => {\n const spinner = ora('Checking for traces to migrate...').start();\n \n try {\n const dbPath = join(process.cwd(), '.stackmemory', 'context.db');\n const db = new Database(dbPath);\n const configManager = new ConfigManager();\n const storage = new RailwayOptimizedStorage(db, configManager);\n \n if (options.dryRun) {\n // Analyze what would be migrated\n const candidates = db.prepare(`\n SELECT trace_id, tier, created_at, score,\n (? - created_at) / 3600000 as age_hours\n FROM storage_tiers\n WHERE tier != 'cold'\n ORDER BY created_at ASC\n `).all(Date.now()) as any[];\n \n const toMigrate = {\n hotToWarm: candidates.filter((c: any) => \n c.tier === 'hot' && c.age_hours > 24\n ),\n warmToCold: candidates.filter((c: any) => \n c.tier === 'warm' && c.age_hours > 720\n ),\n };\n \n spinner.info('Dry run - no changes will be made');\n \n console.log(chalk.blue('\\n\uD83D\uDD04 Migration Plan:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n \n if (toMigrate.hotToWarm.length > 0) {\n console.log(chalk.red(`\\n\uD83D\uDD25 \u2192 \u2601\uFE0F Hot to Warm: ${toMigrate.hotToWarm.length} traces`));\n for (const t of toMigrate.hotToWarm.slice(0, 5)) {\n console.log(` \u2022 ${t.trace_id.substring(0, 8)}... (${t.age_hours.toFixed(0)}h old, score: ${t.score.toFixed(2)})`);\n }\n if (toMigrate.hotToWarm.length > 5) {\n console.log(` ... and ${toMigrate.hotToWarm.length - 5} more`);\n }\n }\n \n if (toMigrate.warmToCold.length > 0) {\n console.log(chalk.yellow(`\\n\u2601\uFE0F \u2192 \u2744\uFE0F Warm to Cold: ${toMigrate.warmToCold.length} traces`));\n for (const t of toMigrate.warmToCold.slice(0, 5)) {\n const ageDays = Math.floor(t.age_hours / 24);\n console.log(` \u2022 ${t.trace_id.substring(0, 8)}... (${ageDays}d old, score: ${t.score.toFixed(2)})`);\n }\n if (toMigrate.warmToCold.length > 5) {\n console.log(` ... and ${toMigrate.warmToCold.length - 5} more`);\n }\n }\n \n if (toMigrate.hotToWarm.length === 0 && toMigrate.warmToCold.length === 0) {\n console.log(chalk.green('\u2713 No traces need migration'));\n }\n \n } else {\n // Perform actual migration\n spinner.text = 'Migrating traces between tiers...';\n const results = await storage.migrateTiers();\n \n spinner.succeed('Migration completed');\n \n console.log(chalk.blue('\\n\u2705 Migration Results:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(` Hot \u2192 Warm: ${chalk.yellow(results.hotToWarm)} traces`);\n console.log(` Warm \u2192 Cold: ${chalk.cyan(results.warmToCold)} traces`);\n \n if (results.errors.length > 0) {\n console.log(chalk.red(`\\n\u274C Errors (${results.errors.length}):`));\n for (const error of results.errors.slice(0, 5)) {\n console.log(` \u2022 ${error}`);\n }\n }\n }\n \n db.close();\n \n } catch (error) {\n spinner.fail('Migration failed');\n console.error(error);\n process.exit(1);\n }\n });\n\n storage\n .command('cleanup')\n .description('Clean up old traces from cold storage')\n .option('--days <number>', 'Remove traces older than N days', parseInt, 90)\n .option('--dry-run', 'Show what would be removed without doing it')\n .action(async (options) => {\n const spinner = ora('Analyzing storage for cleanup...').start();\n \n try {\n const dbPath = join(process.cwd(), '.stackmemory', 'context.db');\n const db = new Database(dbPath);\n const configManager = new ConfigManager();\n const storage = new RailwayOptimizedStorage(db, configManager);\n \n const cutoff = Date.now() - (options.days * 24 * 60 * 60 * 1000);\n \n if (options.dryRun) {\n const toRemove = db.prepare(`\n SELECT COUNT(*) as count, SUM(compressed_size) as size\n FROM storage_tiers\n WHERE tier = 'cold' AND created_at < ? AND access_count = 0\n `).get(cutoff) as any;\n \n spinner.info('Dry run - no traces will be removed');\n \n console.log(chalk.blue('\\n\uD83E\uDDF9 Cleanup Analysis:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(` Traces to remove: ${chalk.red(toRemove.count || 0)}`);\n console.log(` Space to free: ${chalk.yellow(formatBytes(toRemove.size || 0))}`);\n console.log(` Criteria: > ${options.days} days old with 0 access`);\n \n } else {\n const removed = await storage.cleanup();\n spinner.succeed(`Cleanup completed - removed ${removed} traces`);\n }\n \n db.close();\n \n } catch (error) {\n spinner.fail('Cleanup failed');\n console.error(error);\n process.exit(1);\n }\n });\n\n storage\n .command('retrieve <traceId>')\n .description('Retrieve a trace from any storage tier')\n .action(async (traceId) => {\n const spinner = ora(`Retrieving trace ${traceId}...`).start();\n \n try {\n const dbPath = join(process.cwd(), '.stackmemory', 'context.db');\n const db = new Database(dbPath);\n const configManager = new ConfigManager();\n const storage = new RailwayOptimizedStorage(db, configManager);\n \n const trace = await storage.retrieveTrace(traceId);\n \n if (!trace) {\n spinner.fail(`Trace ${traceId} not found`);\n process.exit(1);\n }\n \n spinner.succeed('Trace retrieved');\n \n console.log(chalk.blue('\\n\uD83D\uDCE6 Trace Details:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(` ID: ${chalk.cyan(trace.id)}`);\n console.log(` Type: ${chalk.yellow(trace.type)}`);\n console.log(` Score: ${chalk.green(trace.score.toFixed(3))}`);\n console.log(` Summary: ${trace.summary}`);\n console.log(` Tools: ${trace.tools?.length || trace.toolSummary?.count || 0}`);\n \n const metadata = trace.metadata;\n if (metadata) {\n console.log(chalk.blue('\\n\uD83D\uDCCB Metadata:'));\n console.log(` Start: ${new Date(metadata.startTime).toLocaleString()}`);\n console.log(` Duration: ${formatDuration(metadata.endTime - metadata.startTime)}`);\n console.log(` Files: ${metadata.filesModified?.length || metadata.filesModified || 0}`);\n console.log(` Errors: ${metadata.errorsEncountered?.length || metadata.errorsCount || 0}`);\n }\n \n // Show storage location\n const location = db.prepare(\n 'SELECT tier, location, access_count FROM storage_tiers WHERE trace_id = ?'\n ).get(traceId) as any;\n \n if (location) {\n const tierIcon = location.tier === 'hot' ? '\uD83D\uDD25' : \n location.tier === 'warm' ? '\u2601\uFE0F' : '\u2744\uFE0F';\n console.log(chalk.blue('\\n\uD83D\uDCBE Storage:'));\n console.log(` Tier: ${tierIcon} ${location.tier}`);\n console.log(` Access Count: ${location.access_count}`);\n }\n \n db.close();\n \n } catch (error) {\n spinner.fail('Failed to retrieve trace');\n console.error(error);\n process.exit(1);\n }\n });\n\n storage\n .command('config')\n .description('Show storage configuration')\n .action(async () => {\n console.log(chalk.blue('\\n\u2699\uFE0F Storage Configuration:'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n \n console.log(chalk.red('\\n\uD83D\uDD25 Hot Tier (Redis):'));\n console.log(` URL: ${process.env.REDIS_URL ? chalk.green('Configured') : chalk.yellow('Not configured')}`);\n console.log(` TTL: 24 hours`);\n console.log(` Max Memory: 100MB`);\n \n console.log(chalk.yellow('\\n\u2601\uFE0F Warm Tier (Railway Buckets):'));\n console.log(` Endpoint: ${process.env.RAILWAY_BUCKET_ENDPOINT || 'Not configured'}`);\n console.log(` Bucket: ${process.env.RAILWAY_BUCKET_NAME || 'stackmemory-warm'}`);\n console.log(` Access Key: ${process.env.RAILWAY_BUCKET_ACCESS_KEY ? chalk.green('Set') : chalk.yellow('Not set')}`);\n console.log(` Retention: 30 days`);\n \n console.log(chalk.cyan('\\n\u2744\uFE0F Cold Tier (GCS):'));\n console.log(` Project: ${process.env.GCP_PROJECT_ID || 'Not configured'}`);\n console.log(` Bucket: ${process.env.GCS_BUCKET || 'stackmemory-cold'}`);\n console.log(` Key File: ${process.env.GCP_KEY_FILE ? chalk.green('Set') : chalk.yellow('Not set')}`);\n console.log(` Storage Class: Coldline`);\n console.log(` Retention: Infinite`);\n \n console.log(chalk.blue('\\n\uD83D\uDCCA Migration Thresholds:'));\n console.log(` Hot \u2192 Warm: After 24 hours`);\n console.log(` Warm \u2192 Cold: After 30 days`);\n console.log(` Low Score Migration: < 0.4 score`);\n });\n\n return storage;\n}\n\n/**\n * Calculate storage cost estimates\n */\nfunction calculateStorageCost(stats: any): { railway: string; gcs: string; total: string } {\n // Find warm and cold tier sizes\n const warmTier = stats.byTier.find((t: any) => t.tier === 'warm');\n const coldTier = stats.byTier.find((t: any) => t.tier === 'cold');\n \n const warmGB = (warmTier?.total_compressed || 0) / (1024 * 1024 * 1024);\n const coldGB = (coldTier?.total_compressed || 0) / (1024 * 1024 * 1024);\n \n // Railway Buckets: ~$0.02/GB (estimate)\n const railwayCost = warmGB * 0.02;\n \n // GCS Coldline: $0.004/GB\n const gcsCost = coldGB * 0.004;\n \n const totalCost = railwayCost + gcsCost;\n \n return {\n railway: `$${railwayCost.toFixed(2)}`,\n gcs: `$${gcsCost.toFixed(2)}`,\n total: `$${totalCost.toFixed(2)}`,\n };\n}"],
5
+ "mappings": "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",
6
+ "names": ["storage"]
7
+ }