@stackmemoryai/stackmemory 0.2.9 → 0.3.0

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 (575) hide show
  1. package/dist/agents/core/agent-task-manager.js +512 -0
  2. package/dist/agents/core/agent-task-manager.js.map +7 -0
  3. package/dist/agents/verifiers/base-verifier.js +129 -0
  4. package/dist/agents/verifiers/base-verifier.js.map +7 -0
  5. package/dist/agents/verifiers/formatter-verifier.js +126 -0
  6. package/dist/agents/verifiers/formatter-verifier.js.map +7 -0
  7. package/dist/agents/verifiers/llm-judge.js +248 -0
  8. package/dist/agents/verifiers/llm-judge.js.map +7 -0
  9. package/dist/cli/__tests__/index.test.js +290 -0
  10. package/dist/cli/__tests__/index.test.js.map +7 -0
  11. package/dist/cli/auto-detect.js +317 -0
  12. package/dist/cli/auto-detect.js.map +7 -0
  13. package/dist/cli/browser-test.js +29 -0
  14. package/dist/cli/browser-test.js.map +7 -0
  15. package/dist/cli/claude-sm.js +369 -0
  16. package/dist/cli/claude-sm.js.map +7 -0
  17. package/dist/cli/codex-sm.js +283 -0
  18. package/dist/cli/codex-sm.js.map +7 -0
  19. package/dist/cli/commands/agent.js +286 -0
  20. package/dist/cli/commands/agent.js.map +7 -0
  21. package/dist/cli/commands/config.js +199 -0
  22. package/dist/cli/commands/config.js.map +7 -0
  23. package/dist/cli/commands/context.js +327 -0
  24. package/dist/cli/commands/context.js.map +7 -0
  25. package/dist/cli/commands/handoff.js +191 -0
  26. package/dist/cli/commands/handoff.js.map +7 -0
  27. package/dist/cli/commands/linear-test.js +115 -0
  28. package/dist/cli/commands/linear-test.js.map +7 -0
  29. package/dist/cli/commands/linear.js +378 -0
  30. package/dist/cli/commands/linear.js.map +7 -0
  31. package/dist/cli/commands/log.js +165 -0
  32. package/dist/cli/commands/log.js.map +7 -0
  33. package/dist/cli/commands/onboard.js +349 -0
  34. package/dist/cli/commands/onboard.js.map +7 -0
  35. package/dist/cli/commands/projects.js +195 -0
  36. package/dist/cli/commands/projects.js.map +7 -0
  37. package/dist/cli/commands/search.js +152 -0
  38. package/dist/cli/commands/search.js.map +7 -0
  39. package/dist/cli/commands/session.js +179 -0
  40. package/dist/cli/commands/session.js.map +7 -0
  41. package/dist/cli/commands/tasks.js +205 -0
  42. package/dist/cli/commands/tasks.js.map +7 -0
  43. package/dist/cli/commands/webhook.js +131 -0
  44. package/dist/cli/commands/webhook.js.map +7 -0
  45. package/dist/cli/commands/worktree.js +276 -0
  46. package/dist/cli/commands/worktree.js.map +7 -0
  47. package/dist/cli/index.js +953 -0
  48. package/dist/cli/index.js.map +7 -0
  49. package/dist/cli/utils/viewer.js +92 -0
  50. package/dist/cli/utils/viewer.js.map +7 -0
  51. package/dist/core/config/__tests__/config-manager.test.js +248 -0
  52. package/dist/core/config/__tests__/config-manager.test.js.map +7 -0
  53. package/dist/core/config/config-manager.js +368 -0
  54. package/dist/core/config/config-manager.js.map +7 -0
  55. package/dist/core/config/types.js +140 -0
  56. package/dist/core/config/types.js.map +7 -0
  57. package/dist/core/context/__tests__/frame-manager.test.js +879 -0
  58. package/dist/core/context/__tests__/frame-manager.test.js.map +7 -0
  59. package/dist/core/context/auto-context.js +72 -0
  60. package/dist/core/context/auto-context.js.map +7 -0
  61. package/dist/core/context/compaction-handler.js +326 -0
  62. package/dist/core/context/compaction-handler.js.map +7 -0
  63. package/dist/core/context/frame-database.js +376 -0
  64. package/dist/core/context/frame-database.js.map +7 -0
  65. package/dist/core/context/frame-digest.js +239 -0
  66. package/dist/core/context/frame-digest.js.map +7 -0
  67. package/dist/core/context/frame-manager.js +682 -0
  68. package/dist/core/context/frame-manager.js.map +7 -0
  69. package/dist/core/context/frame-stack.js +270 -0
  70. package/dist/core/context/frame-stack.js.map +7 -0
  71. package/dist/core/context/frame-types.js +1 -0
  72. package/dist/core/context/frame-types.js.map +7 -0
  73. package/dist/core/context/index.js +33 -0
  74. package/dist/core/context/index.js.map +7 -0
  75. package/dist/core/context/model-aware-compaction.js +619 -0
  76. package/dist/core/context/model-aware-compaction.js.map +7 -0
  77. package/dist/core/context/refactored-frame-manager.js +393 -0
  78. package/dist/core/context/refactored-frame-manager.js.map +7 -0
  79. package/dist/core/database/batch-operations.js +329 -0
  80. package/dist/core/database/batch-operations.js.map +7 -0
  81. package/dist/core/database/connection-pool.js +224 -0
  82. package/dist/core/database/connection-pool.js.map +7 -0
  83. package/dist/core/database/query-cache.js +284 -0
  84. package/dist/core/database/query-cache.js.map +7 -0
  85. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +379 -0
  86. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +7 -0
  87. package/dist/core/digest/__tests__/frame-digest-integration.test.js +230 -0
  88. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +7 -0
  89. package/dist/core/digest/enhanced-hybrid-digest.js +267 -0
  90. package/dist/core/digest/enhanced-hybrid-digest.js.map +7 -0
  91. package/dist/core/digest/frame-digest-integration.js +172 -0
  92. package/dist/core/digest/frame-digest-integration.js.map +7 -0
  93. package/dist/core/digest/hybrid-digest-generator.js +549 -0
  94. package/dist/core/digest/hybrid-digest-generator.js.map +7 -0
  95. package/dist/core/digest/index.js +5 -0
  96. package/dist/core/digest/index.js.map +7 -0
  97. package/dist/core/digest/types.js +21 -0
  98. package/dist/core/digest/types.js.map +7 -0
  99. package/dist/core/errors/__tests__/error-handling.test.js +270 -0
  100. package/dist/core/errors/__tests__/error-handling.test.js.map +7 -0
  101. package/dist/core/errors/index.js +239 -0
  102. package/dist/core/errors/index.js.map +7 -0
  103. package/dist/core/errors/recovery.js +258 -0
  104. package/dist/core/errors/recovery.js.map +7 -0
  105. package/dist/core/merge/__tests__/conflict-scenarios.test.js +414 -0
  106. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +7 -0
  107. package/dist/core/merge/conflict-detector.js +424 -0
  108. package/dist/core/merge/conflict-detector.js.map +7 -0
  109. package/dist/core/merge/index.js +5 -0
  110. package/dist/core/merge/index.js.map +7 -0
  111. package/dist/core/merge/resolution-engine.js +565 -0
  112. package/dist/core/merge/resolution-engine.js.map +7 -0
  113. package/dist/core/merge/stack-diff.js +528 -0
  114. package/dist/core/merge/stack-diff.js.map +7 -0
  115. package/dist/core/merge/types.js +1 -0
  116. package/dist/core/merge/types.js.map +7 -0
  117. package/dist/core/monitoring/error-handler.js +278 -0
  118. package/dist/core/monitoring/error-handler.js.map +7 -0
  119. package/dist/core/monitoring/logger.js +115 -0
  120. package/dist/core/monitoring/logger.js.map +7 -0
  121. package/dist/core/monitoring/metrics.js +157 -0
  122. package/dist/core/monitoring/metrics.js.map +7 -0
  123. package/dist/core/monitoring/progress-tracker.js +174 -0
  124. package/dist/core/monitoring/progress-tracker.js.map +7 -0
  125. package/dist/core/performance/context-cache.js +269 -0
  126. package/dist/core/performance/context-cache.js.map +7 -0
  127. package/dist/core/performance/index.js +7 -0
  128. package/dist/core/performance/index.js.map +7 -0
  129. package/dist/core/performance/lazy-context-loader.js +319 -0
  130. package/dist/core/performance/lazy-context-loader.js.map +7 -0
  131. package/dist/core/performance/monitor.js +217 -0
  132. package/dist/core/performance/monitor.js.map +7 -0
  133. package/dist/core/performance/optimized-frame-context.js +326 -0
  134. package/dist/core/performance/optimized-frame-context.js.map +7 -0
  135. package/dist/core/performance/performance-benchmark.js +269 -0
  136. package/dist/core/performance/performance-benchmark.js.map +7 -0
  137. package/dist/core/performance/performance-profiler.js +318 -0
  138. package/dist/core/performance/performance-profiler.js.map +7 -0
  139. package/dist/core/performance/streaming-jsonl-parser.js +187 -0
  140. package/dist/core/performance/streaming-jsonl-parser.js.map +7 -0
  141. package/dist/core/persistence/postgres-adapter.js +345 -0
  142. package/dist/core/persistence/postgres-adapter.js.map +7 -0
  143. package/dist/core/projects/project-manager.js +699 -0
  144. package/dist/core/projects/project-manager.js.map +7 -0
  145. package/dist/core/query/__tests__/query-parser.test.js +301 -0
  146. package/dist/core/query/__tests__/query-parser.test.js.map +7 -0
  147. package/dist/core/query/__tests__/query-templates.test.js +210 -0
  148. package/dist/core/query/__tests__/query-templates.test.js.map +7 -0
  149. package/dist/core/query/query-parser.js +366 -0
  150. package/dist/core/query/query-parser.js.map +7 -0
  151. package/dist/core/query/query-templates.js +317 -0
  152. package/dist/core/query/query-templates.js.map +7 -0
  153. package/dist/core/retrieval/index.js +4 -0
  154. package/dist/core/retrieval/index.js.map +7 -0
  155. package/dist/core/retrieval/llm-context-retrieval.js +577 -0
  156. package/dist/core/retrieval/llm-context-retrieval.js.map +7 -0
  157. package/dist/core/retrieval/summary-generator.js +585 -0
  158. package/dist/core/retrieval/summary-generator.js.map +7 -0
  159. package/dist/core/retrieval/types.js +17 -0
  160. package/dist/core/retrieval/types.js.map +7 -0
  161. package/dist/core/session/index.js +11 -0
  162. package/dist/core/session/index.js.map +7 -0
  163. package/dist/core/session/session-manager.js +297 -0
  164. package/dist/core/session/session-manager.js.map +7 -0
  165. package/dist/core/trace/cli-trace-wrapper.js +110 -0
  166. package/dist/core/trace/cli-trace-wrapper.js.map +7 -0
  167. package/dist/core/trace/db-trace-wrapper.js +215 -0
  168. package/dist/core/trace/db-trace-wrapper.js.map +7 -0
  169. package/dist/core/trace/debug-trace.js +385 -0
  170. package/dist/core/trace/debug-trace.js.map +7 -0
  171. package/dist/core/trace/index.js +158 -0
  172. package/dist/core/trace/index.js.map +7 -0
  173. package/dist/core/trace/linear-api-wrapper.js +169 -0
  174. package/dist/core/trace/linear-api-wrapper.js.map +7 -0
  175. package/dist/core/trace/trace-demo.js +135 -0
  176. package/dist/core/trace/trace-demo.js.map +7 -0
  177. package/dist/core/trace/trace-detector.demo.js +138 -0
  178. package/dist/core/trace/trace-detector.demo.js.map +7 -0
  179. package/dist/core/trace/trace-detector.js +386 -0
  180. package/dist/core/trace/trace-detector.js.map +7 -0
  181. package/dist/core/trace/trace-detector.test.js +401 -0
  182. package/dist/core/trace/trace-detector.test.js.map +7 -0
  183. package/dist/core/trace/trace-store.js +341 -0
  184. package/dist/core/trace/trace-store.js.map +7 -0
  185. package/dist/core/trace/types.js +73 -0
  186. package/dist/core/trace/types.js.map +7 -0
  187. package/dist/core/types.js +1 -0
  188. package/dist/core/types.js.map +7 -0
  189. package/dist/core/utils/update-checker.js +214 -0
  190. package/dist/core/utils/update-checker.js.map +7 -0
  191. package/dist/core/worktree/worktree-manager.js +450 -0
  192. package/dist/core/worktree/worktree-manager.js.map +7 -0
  193. package/dist/features/analytics/api/analytics-api.js +283 -0
  194. package/dist/features/analytics/api/analytics-api.js.map +7 -0
  195. package/dist/features/analytics/core/analytics-service.js +267 -0
  196. package/dist/features/analytics/core/analytics-service.js.map +7 -0
  197. package/dist/features/analytics/index.js +14 -0
  198. package/dist/features/analytics/index.js.map +7 -0
  199. package/dist/features/analytics/queries/metrics-queries.js +273 -0
  200. package/dist/features/analytics/queries/metrics-queries.js.map +7 -0
  201. package/dist/features/analytics/types/metrics.js +1 -0
  202. package/dist/features/analytics/types/metrics.js.map +7 -0
  203. package/dist/features/browser/browser-mcp.js +488 -0
  204. package/dist/features/browser/browser-mcp.js.map +7 -0
  205. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +747 -0
  206. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +7 -0
  207. package/dist/features/tasks/pebbles-task-store.js +647 -0
  208. package/dist/features/tasks/pebbles-task-store.js.map +7 -0
  209. package/dist/features/tasks/task-aware-context.js +406 -0
  210. package/dist/features/tasks/task-aware-context.js.map +7 -0
  211. package/dist/index.js +21 -0
  212. package/dist/index.js.map +7 -0
  213. package/dist/integrations/linear/__tests__/auth.test.js +558 -0
  214. package/dist/integrations/linear/__tests__/auth.test.js.map +7 -0
  215. package/dist/integrations/linear/__tests__/sync-service.test.js +760 -0
  216. package/dist/integrations/linear/__tests__/sync-service.test.js.map +7 -0
  217. package/dist/integrations/linear/auth.js +308 -0
  218. package/dist/integrations/linear/auth.js.map +7 -0
  219. package/dist/integrations/linear/auto-sync.js +244 -0
  220. package/dist/integrations/linear/auto-sync.js.map +7 -0
  221. package/dist/integrations/linear/client.js +448 -0
  222. package/dist/integrations/linear/client.js.map +7 -0
  223. package/dist/integrations/linear/config.js +115 -0
  224. package/dist/integrations/linear/config.js.map +7 -0
  225. package/dist/integrations/linear/sync-manager.js +233 -0
  226. package/dist/integrations/linear/sync-manager.js.map +7 -0
  227. package/dist/integrations/linear/sync-service.js +214 -0
  228. package/dist/integrations/linear/sync-service.js.map +7 -0
  229. package/dist/integrations/linear/sync.js +565 -0
  230. package/dist/integrations/linear/sync.js.map +7 -0
  231. package/dist/integrations/linear/types.js +1 -0
  232. package/dist/integrations/linear/types.js.map +7 -0
  233. package/dist/integrations/linear/webhook-server.js +204 -0
  234. package/dist/integrations/linear/webhook-server.js.map +7 -0
  235. package/dist/integrations/linear/webhook.js +269 -0
  236. package/dist/integrations/linear/webhook.js.map +7 -0
  237. package/dist/integrations/mcp/__tests__/server.test.js +798 -0
  238. package/dist/integrations/mcp/__tests__/server.test.js.map +7 -0
  239. package/dist/integrations/mcp/handlers/context-handlers.js +253 -0
  240. package/dist/integrations/mcp/handlers/context-handlers.js.map +7 -0
  241. package/dist/integrations/mcp/handlers/index.js +134 -0
  242. package/dist/integrations/mcp/handlers/index.js.map +7 -0
  243. package/dist/integrations/mcp/handlers/linear-handlers.js +243 -0
  244. package/dist/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  245. package/dist/integrations/mcp/handlers/task-handlers.js +235 -0
  246. package/dist/integrations/mcp/handlers/task-handlers.js.map +7 -0
  247. package/dist/integrations/mcp/handlers/trace-handlers.js +304 -0
  248. package/dist/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  249. package/dist/integrations/mcp/index.js +19 -0
  250. package/dist/integrations/mcp/index.js.map +7 -0
  251. package/dist/integrations/mcp/refactored-server.js +331 -0
  252. package/dist/integrations/mcp/refactored-server.js.map +7 -0
  253. package/dist/integrations/mcp/server.js +1621 -0
  254. package/dist/integrations/mcp/server.js.map +7 -0
  255. package/dist/integrations/mcp/tool-definitions.js +562 -0
  256. package/dist/integrations/mcp/tool-definitions.js.map +7 -0
  257. package/dist/integrations/mcp/trace-test.js +44 -0
  258. package/dist/integrations/mcp/trace-test.js.map +7 -0
  259. package/dist/integrations/pg-aiguide/embedding-provider.js +174 -0
  260. package/dist/integrations/pg-aiguide/embedding-provider.js.map +7 -0
  261. package/dist/integrations/pg-aiguide/semantic-search.js +183 -0
  262. package/dist/integrations/pg-aiguide/semantic-search.js.map +7 -0
  263. package/dist/integrations/pg-aiguide/timescale-analytics.js +220 -0
  264. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +7 -0
  265. package/dist/mcp/stackmemory-mcp-server.js +550 -0
  266. package/dist/mcp/stackmemory-mcp-server.js.map +7 -0
  267. package/dist/middleware/exponential-rate-limiter.js +285 -0
  268. package/dist/middleware/exponential-rate-limiter.js.map +7 -0
  269. package/dist/models/user.model.js +351 -0
  270. package/dist/models/user.model.js.map +7 -0
  271. package/dist/scripts/benchmark-performance.d.ts +7 -0
  272. package/dist/scripts/benchmark-performance.d.ts.map +1 -0
  273. package/dist/scripts/benchmark-performance.js +44 -0
  274. package/dist/scripts/benchmark-performance.js.map +1 -0
  275. package/dist/scripts/cleanup-duplicate-tasks.d.ts +12 -0
  276. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +1 -0
  277. package/dist/scripts/cleanup-duplicate-tasks.js +215 -0
  278. package/dist/scripts/cleanup-duplicate-tasks.js.map +1 -0
  279. package/dist/servers/production/auth-middleware.js +513 -0
  280. package/dist/servers/production/auth-middleware.js.map +7 -0
  281. package/dist/servers/railway/index.js +390 -0
  282. package/dist/servers/railway/index.js.map +7 -0
  283. package/dist/services/config-service.js +62 -0
  284. package/dist/services/config-service.js.map +7 -0
  285. package/dist/services/context-service.js +191 -0
  286. package/dist/services/context-service.js.map +7 -0
  287. package/dist/src/agents/core/agent-task-manager.d.ts +154 -0
  288. package/dist/src/agents/core/agent-task-manager.d.ts.map +1 -0
  289. package/dist/src/agents/core/agent-task-manager.js +504 -0
  290. package/dist/src/agents/core/agent-task-manager.js.map +1 -0
  291. package/dist/src/agents/verifiers/base-verifier.d.ts +112 -0
  292. package/dist/src/agents/verifiers/base-verifier.d.ts.map +1 -0
  293. package/dist/src/agents/verifiers/base-verifier.js +130 -0
  294. package/dist/src/agents/verifiers/base-verifier.js.map +1 -0
  295. package/dist/src/agents/verifiers/formatter-verifier.d.ts +14 -0
  296. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +1 -0
  297. package/dist/src/agents/verifiers/formatter-verifier.js +107 -0
  298. package/dist/src/agents/verifiers/formatter-verifier.js.map +1 -0
  299. package/dist/src/agents/verifiers/llm-judge.d.ts +46 -0
  300. package/dist/src/agents/verifiers/llm-judge.d.ts.map +1 -0
  301. package/dist/src/agents/verifiers/llm-judge.js +248 -0
  302. package/dist/src/agents/verifiers/llm-judge.js.map +1 -0
  303. package/dist/src/cli/claude-sm.js +55 -0
  304. package/dist/src/cli/claude-sm.js.map +1 -1
  305. package/dist/src/cli/commands/agent.d.ts +9 -0
  306. package/dist/src/cli/commands/agent.d.ts.map +1 -0
  307. package/dist/src/cli/commands/agent.js +303 -0
  308. package/dist/src/cli/commands/agent.js.map +1 -0
  309. package/dist/src/cli/commands/handoff.d.ts +6 -0
  310. package/dist/src/cli/commands/handoff.d.ts.map +1 -0
  311. package/dist/src/cli/commands/handoff.js +212 -0
  312. package/dist/src/cli/commands/handoff.js.map +1 -0
  313. package/dist/src/cli/index.d.ts.map +1 -1
  314. package/dist/src/cli/index.js +4 -0
  315. package/dist/src/cli/index.js.map +1 -1
  316. package/dist/src/core/context/frame-database.d.ts +59 -0
  317. package/dist/src/core/context/frame-database.d.ts.map +1 -0
  318. package/dist/src/core/context/frame-database.js +333 -0
  319. package/dist/src/core/context/frame-database.js.map +1 -0
  320. package/dist/src/core/context/frame-digest.d.ts +59 -0
  321. package/dist/src/core/context/frame-digest.d.ts.map +1 -0
  322. package/dist/src/core/context/frame-digest.js +264 -0
  323. package/dist/src/core/context/frame-digest.js.map +1 -0
  324. package/dist/src/core/context/frame-manager.d.ts +2 -0
  325. package/dist/src/core/context/frame-manager.d.ts.map +1 -1
  326. package/dist/src/core/context/frame-manager.js +7 -0
  327. package/dist/src/core/context/frame-manager.js.map +1 -1
  328. package/dist/src/core/context/frame-stack.d.ts +85 -0
  329. package/dist/src/core/context/frame-stack.d.ts.map +1 -0
  330. package/dist/src/core/context/frame-stack.js +287 -0
  331. package/dist/src/core/context/frame-stack.js.map +1 -0
  332. package/dist/src/core/context/frame-types.d.ts +67 -0
  333. package/dist/src/core/context/frame-types.d.ts.map +1 -0
  334. package/dist/src/core/context/frame-types.js +6 -0
  335. package/dist/src/core/context/frame-types.js.map +1 -0
  336. package/dist/src/core/context/index.d.ts +11 -0
  337. package/dist/src/core/context/index.d.ts.map +1 -0
  338. package/dist/src/core/context/index.js +14 -0
  339. package/dist/src/core/context/index.js.map +1 -0
  340. package/dist/src/core/context/refactored-frame-manager.d.ts +99 -0
  341. package/dist/src/core/context/refactored-frame-manager.d.ts.map +1 -0
  342. package/dist/src/core/context/refactored-frame-manager.js +340 -0
  343. package/dist/src/core/context/refactored-frame-manager.js.map +1 -0
  344. package/dist/src/core/database/batch-operations.d.ts +118 -0
  345. package/dist/src/core/database/batch-operations.d.ts.map +1 -0
  346. package/dist/src/core/database/batch-operations.js +339 -0
  347. package/dist/src/core/database/batch-operations.js.map +1 -0
  348. package/dist/src/core/database/connection-pool.d.ts +79 -0
  349. package/dist/src/core/database/connection-pool.d.ts.map +1 -0
  350. package/dist/src/core/database/connection-pool.js +236 -0
  351. package/dist/src/core/database/connection-pool.js.map +1 -0
  352. package/dist/src/core/database/query-cache.d.ts +135 -0
  353. package/dist/src/core/database/query-cache.d.ts.map +1 -0
  354. package/dist/src/core/database/query-cache.js +294 -0
  355. package/dist/src/core/database/query-cache.js.map +1 -0
  356. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +125 -0
  357. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +1 -0
  358. package/dist/src/core/digest/enhanced-hybrid-digest.js +282 -0
  359. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +1 -0
  360. package/dist/src/core/digest/frame-digest-integration.d.ts +67 -0
  361. package/dist/src/core/digest/frame-digest-integration.d.ts.map +1 -0
  362. package/dist/src/core/digest/frame-digest-integration.js +198 -0
  363. package/dist/src/core/digest/frame-digest-integration.js.map +1 -0
  364. package/dist/src/core/digest/hybrid-digest-generator.d.ts +3 -3
  365. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +1 -1
  366. package/dist/src/core/digest/hybrid-digest-generator.js.map +1 -1
  367. package/dist/src/core/digest/index.d.ts +3 -1
  368. package/dist/src/core/digest/index.d.ts.map +1 -1
  369. package/dist/src/core/digest/index.js +3 -1
  370. package/dist/src/core/digest/index.js.map +1 -1
  371. package/dist/src/core/errors/index.d.ts +13 -5
  372. package/dist/src/core/errors/index.d.ts.map +1 -1
  373. package/dist/src/core/errors/index.js +13 -5
  374. package/dist/src/core/errors/index.js.map +1 -1
  375. package/dist/src/core/merge/conflict-detector.d.ts +122 -0
  376. package/dist/src/core/merge/conflict-detector.d.ts.map +1 -0
  377. package/dist/src/core/merge/conflict-detector.js +468 -0
  378. package/dist/src/core/merge/conflict-detector.js.map +1 -0
  379. package/dist/src/core/merge/index.d.ts +9 -0
  380. package/dist/src/core/merge/index.d.ts.map +1 -0
  381. package/dist/src/core/merge/index.js +9 -0
  382. package/dist/src/core/merge/index.js.map +1 -0
  383. package/dist/src/core/merge/resolution-engine.d.ts +120 -0
  384. package/dist/src/core/merge/resolution-engine.d.ts.map +1 -0
  385. package/dist/src/core/merge/resolution-engine.js +573 -0
  386. package/dist/src/core/merge/resolution-engine.js.map +1 -0
  387. package/dist/src/core/merge/stack-diff.d.ts +97 -0
  388. package/dist/src/core/merge/stack-diff.d.ts.map +1 -0
  389. package/dist/src/core/merge/stack-diff.js +516 -0
  390. package/dist/src/core/merge/stack-diff.js.map +1 -0
  391. package/dist/src/core/merge/types.d.ts +110 -0
  392. package/dist/src/core/merge/types.d.ts.map +1 -0
  393. package/dist/src/core/merge/types.js +6 -0
  394. package/dist/src/core/merge/types.js.map +1 -0
  395. package/dist/src/core/performance/context-cache.d.ts +109 -0
  396. package/dist/src/core/performance/context-cache.d.ts.map +1 -0
  397. package/dist/src/core/performance/context-cache.js +280 -0
  398. package/dist/src/core/performance/context-cache.js.map +1 -0
  399. package/dist/src/core/performance/index.d.ts +3 -0
  400. package/dist/src/core/performance/index.d.ts.map +1 -0
  401. package/dist/src/core/performance/index.js +3 -0
  402. package/dist/src/core/performance/index.js.map +1 -0
  403. package/dist/src/core/performance/lazy-context-loader.d.ts +93 -0
  404. package/dist/src/core/performance/lazy-context-loader.d.ts.map +1 -0
  405. package/dist/src/core/performance/lazy-context-loader.js +332 -0
  406. package/dist/src/core/performance/lazy-context-loader.js.map +1 -0
  407. package/dist/src/core/performance/monitor.d.ts +48 -0
  408. package/dist/src/core/performance/monitor.d.ts.map +1 -0
  409. package/dist/src/core/performance/monitor.js +226 -0
  410. package/dist/src/core/performance/monitor.js.map +1 -0
  411. package/dist/src/core/performance/optimized-frame-context.d.ts +74 -0
  412. package/dist/src/core/performance/optimized-frame-context.d.ts.map +1 -0
  413. package/dist/src/core/performance/optimized-frame-context.js +330 -0
  414. package/dist/src/core/performance/optimized-frame-context.js.map +1 -0
  415. package/dist/src/core/performance/performance-benchmark.d.ts +50 -0
  416. package/dist/src/core/performance/performance-benchmark.d.ts.map +1 -0
  417. package/dist/src/core/performance/performance-benchmark.js +290 -0
  418. package/dist/src/core/performance/performance-benchmark.js.map +1 -0
  419. package/dist/src/core/performance/performance-profiler.d.ts +151 -0
  420. package/dist/src/core/performance/performance-profiler.d.ts.map +1 -0
  421. package/dist/src/core/performance/performance-profiler.js +346 -0
  422. package/dist/src/core/performance/performance-profiler.js.map +1 -0
  423. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +41 -0
  424. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +1 -0
  425. package/dist/src/core/performance/streaming-jsonl-parser.js +193 -0
  426. package/dist/src/core/performance/streaming-jsonl-parser.js.map +1 -0
  427. package/dist/src/core/persistence/postgres-adapter.d.ts.map +1 -1
  428. package/dist/src/core/persistence/postgres-adapter.js +18 -4
  429. package/dist/src/core/persistence/postgres-adapter.js.map +1 -1
  430. package/dist/src/core/query/query-parser.d.ts +5 -0
  431. package/dist/src/core/query/query-parser.d.ts.map +1 -1
  432. package/dist/src/core/query/query-parser.js +86 -18
  433. package/dist/src/core/query/query-parser.js.map +1 -1
  434. package/dist/src/core/query/query-templates.d.ts +44 -0
  435. package/dist/src/core/query/query-templates.d.ts.map +1 -0
  436. package/dist/src/core/query/query-templates.js +326 -0
  437. package/dist/src/core/query/query-templates.js.map +1 -0
  438. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +5 -3
  439. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +1 -1
  440. package/dist/src/core/retrieval/llm-context-retrieval.js +73 -21
  441. package/dist/src/core/retrieval/llm-context-retrieval.js.map +1 -1
  442. package/dist/src/core/trace/cli-trace-wrapper.d.ts +23 -0
  443. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +1 -0
  444. package/dist/src/core/trace/cli-trace-wrapper.js +141 -0
  445. package/dist/src/core/trace/cli-trace-wrapper.js.map +1 -0
  446. package/dist/src/core/trace/db-trace-wrapper.d.ts +36 -0
  447. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +1 -0
  448. package/dist/src/core/trace/db-trace-wrapper.js +252 -0
  449. package/dist/src/core/trace/db-trace-wrapper.js.map +1 -0
  450. package/dist/src/core/trace/debug-trace.d.ts +84 -0
  451. package/dist/src/core/trace/debug-trace.d.ts.map +1 -0
  452. package/dist/src/core/trace/debug-trace.js +402 -0
  453. package/dist/src/core/trace/debug-trace.js.map +1 -0
  454. package/dist/src/core/trace/error-test.d.ts +6 -0
  455. package/dist/src/core/trace/error-test.d.ts.map +1 -0
  456. package/dist/src/core/trace/error-test.js +128 -0
  457. package/dist/src/core/trace/error-test.js.map +1 -0
  458. package/dist/src/core/trace/index.d.ts +25 -0
  459. package/dist/src/core/trace/index.d.ts.map +1 -0
  460. package/dist/src/core/trace/index.js +121 -0
  461. package/dist/src/core/trace/index.js.map +1 -0
  462. package/dist/src/core/trace/linear-api-wrapper.d.ts +17 -0
  463. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +1 -0
  464. package/dist/src/core/trace/linear-api-wrapper.js +205 -0
  465. package/dist/src/core/trace/linear-api-wrapper.js.map +1 -0
  466. package/dist/src/core/trace/performance-test.d.ts +6 -0
  467. package/dist/src/core/trace/performance-test.d.ts.map +1 -0
  468. package/dist/src/core/trace/performance-test.js +111 -0
  469. package/dist/src/core/trace/performance-test.js.map +1 -0
  470. package/dist/src/core/trace/trace-demo.d.ts +8 -0
  471. package/dist/src/core/trace/trace-demo.d.ts.map +1 -0
  472. package/dist/src/core/trace/trace-demo.js +154 -0
  473. package/dist/src/core/trace/trace-demo.js.map +1 -0
  474. package/dist/src/core/trace/trace-detector.d.ts +2 -2
  475. package/dist/src/core/trace/trace-detector.d.ts.map +1 -1
  476. package/dist/src/core/trace/trace-detector.demo.js +1 -1
  477. package/dist/src/core/trace/trace-detector.demo.js.map +1 -1
  478. package/dist/src/core/trace/trace-detector.js +3 -3
  479. package/dist/src/core/trace/trace-detector.js.map +1 -1
  480. package/dist/src/features/tasks/pebbles-task-store.d.ts +9 -2
  481. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -1
  482. package/dist/src/features/tasks/pebbles-task-store.js +97 -18
  483. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -1
  484. package/dist/src/integrations/linear/auth.d.ts.map +1 -1
  485. package/dist/src/integrations/linear/auth.js.map +1 -1
  486. package/dist/src/integrations/linear/client.d.ts +15 -1
  487. package/dist/src/integrations/linear/client.d.ts.map +1 -1
  488. package/dist/src/integrations/linear/client.js +85 -3
  489. package/dist/src/integrations/linear/client.js.map +1 -1
  490. package/dist/src/integrations/linear/sync-manager.d.ts +2 -0
  491. package/dist/src/integrations/linear/sync-manager.d.ts.map +1 -1
  492. package/dist/src/integrations/linear/sync-manager.js +16 -4
  493. package/dist/src/integrations/linear/sync-manager.js.map +1 -1
  494. package/dist/src/integrations/linear/sync-service.d.ts +23 -2
  495. package/dist/src/integrations/linear/sync-service.d.ts.map +1 -1
  496. package/dist/src/integrations/linear/sync-service.js +44 -25
  497. package/dist/src/integrations/linear/sync-service.js.map +1 -1
  498. package/dist/src/integrations/linear/sync.d.ts +6 -0
  499. package/dist/src/integrations/linear/sync.d.ts.map +1 -1
  500. package/dist/src/integrations/linear/sync.js +27 -2
  501. package/dist/src/integrations/linear/sync.js.map +1 -1
  502. package/dist/src/integrations/linear/types.d.ts +16 -1
  503. package/dist/src/integrations/linear/types.d.ts.map +1 -1
  504. package/dist/src/integrations/linear/webhook-server.d.ts.map +1 -1
  505. package/dist/src/integrations/linear/webhook-server.js +10 -8
  506. package/dist/src/integrations/linear/webhook-server.js.map +1 -1
  507. package/dist/src/integrations/linear/webhook.d.ts +13 -0
  508. package/dist/src/integrations/linear/webhook.d.ts.map +1 -1
  509. package/dist/src/integrations/linear/webhook.js +101 -14
  510. package/dist/src/integrations/linear/webhook.js.map +1 -1
  511. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +39 -0
  512. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +1 -0
  513. package/dist/src/integrations/mcp/handlers/context-handlers.js +266 -0
  514. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +1 -0
  515. package/dist/src/integrations/mcp/handlers/index.d.ts +37 -0
  516. package/dist/src/integrations/mcp/handlers/index.d.ts.map +1 -0
  517. package/dist/src/integrations/mcp/handlers/index.js +134 -0
  518. package/dist/src/integrations/mcp/handlers/index.js.map +1 -0
  519. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +33 -0
  520. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +1 -0
  521. package/dist/src/integrations/mcp/handlers/linear-handlers.js +251 -0
  522. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +1 -0
  523. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +42 -0
  524. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +1 -0
  525. package/dist/src/integrations/mcp/handlers/task-handlers.js +238 -0
  526. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +1 -0
  527. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +41 -0
  528. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +1 -0
  529. package/dist/src/integrations/mcp/handlers/trace-handlers.js +298 -0
  530. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +1 -0
  531. package/dist/src/integrations/mcp/index.d.ts +13 -0
  532. package/dist/src/integrations/mcp/index.d.ts.map +1 -0
  533. package/dist/src/integrations/mcp/index.js +17 -0
  534. package/dist/src/integrations/mcp/index.js.map +1 -0
  535. package/dist/src/integrations/mcp/refactored-server.d.ts +76 -0
  536. package/dist/src/integrations/mcp/refactored-server.d.ts.map +1 -0
  537. package/dist/src/integrations/mcp/refactored-server.js +351 -0
  538. package/dist/src/integrations/mcp/refactored-server.js.map +1 -0
  539. package/dist/src/integrations/mcp/tool-definitions.d.ts +44 -0
  540. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +1 -0
  541. package/dist/src/integrations/mcp/tool-definitions.js +563 -0
  542. package/dist/src/integrations/mcp/tool-definitions.js.map +1 -0
  543. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +1 -1
  544. package/dist/src/integrations/pg-aiguide/semantic-search.js +43 -21
  545. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +1 -1
  546. package/dist/src/mcp/stackmemory-mcp-server.d.ts +9 -0
  547. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +1 -0
  548. package/dist/src/mcp/stackmemory-mcp-server.js +519 -0
  549. package/dist/src/mcp/stackmemory-mcp-server.js.map +1 -0
  550. package/dist/src/middleware/exponential-rate-limiter.d.ts +78 -0
  551. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +1 -0
  552. package/dist/src/middleware/exponential-rate-limiter.js +293 -0
  553. package/dist/src/middleware/exponential-rate-limiter.js.map +1 -0
  554. package/dist/src/models/user.model.d.ts +8 -1
  555. package/dist/src/models/user.model.d.ts.map +1 -1
  556. package/dist/src/models/user.model.js +62 -14
  557. package/dist/src/models/user.model.js.map +1 -1
  558. package/dist/src/servers/production/auth-middleware.d.ts +5 -2
  559. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -1
  560. package/dist/src/servers/production/auth-middleware.js +71 -34
  561. package/dist/src/servers/production/auth-middleware.js.map +1 -1
  562. package/dist/src/services/context-service.d.ts.map +1 -1
  563. package/dist/src/services/context-service.js +86 -1
  564. package/dist/src/services/context-service.js.map +1 -1
  565. package/dist/src/validation/schemas.d.ts +633 -0
  566. package/dist/src/validation/schemas.d.ts.map +1 -0
  567. package/dist/src/validation/schemas.js +347 -0
  568. package/dist/src/validation/schemas.js.map +1 -0
  569. package/dist/types/task.js +1 -0
  570. package/dist/types/task.js.map +7 -0
  571. package/dist/utils/logger.js +52 -0
  572. package/dist/utils/logger.js.map +7 -0
  573. package/dist/validation/schemas.js +218 -0
  574. package/dist/validation/schemas.js.map +7 -0
  575. package/package.json +7 -3
@@ -0,0 +1,199 @@
1
+ import { Command } from "commander";
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import * as yaml from "js-yaml";
5
+ import chalk from "chalk";
6
+ import { ConfigManager } from "../../core/config/config-manager.js";
7
+ import { DEFAULT_CONFIG } from "../../core/config/types.js";
8
+ function createConfigCommand() {
9
+ const config = new Command("config").description(
10
+ "Manage StackMemory configuration"
11
+ );
12
+ config.command("validate").description("Validate configuration file").option(
13
+ "-f, --file <path>",
14
+ "Path to config file",
15
+ ".stackmemory/config.yaml"
16
+ ).option("--fix", "Attempt to auto-fix common issues").action(async (options) => {
17
+ console.log(chalk.blue("\u{1F50D} Validating configuration..."));
18
+ const configPath = path.resolve(options.file);
19
+ const manager = new ConfigManager(configPath);
20
+ const result = manager.validate();
21
+ if (result.errors.length > 0) {
22
+ console.log(chalk.red("\n\u2717 Errors:"));
23
+ result.errors.forEach((error) => {
24
+ console.log(chalk.red(` \u2022 ${error}`));
25
+ });
26
+ }
27
+ if (result.warnings.length > 0) {
28
+ console.log(chalk.yellow("\n\u26A0 Warnings:"));
29
+ result.warnings.forEach((warning) => {
30
+ console.log(chalk.yellow(` \u2022 ${warning}`));
31
+ });
32
+ }
33
+ if (result.suggestions.length > 0) {
34
+ console.log(chalk.cyan("\n\u{1F4A1} Suggestions:"));
35
+ result.suggestions.forEach((suggestion) => {
36
+ console.log(chalk.cyan(` \u2022 ${suggestion}`));
37
+ });
38
+ }
39
+ if (options.fix && result.errors.length > 0) {
40
+ console.log(chalk.blue("\n\u{1F527} Attempting auto-fix..."));
41
+ const config2 = manager.getConfig();
42
+ const weights = config2.scoring.weights;
43
+ const weightSum = weights.base + weights.impact + weights.persistence + weights.reference;
44
+ if (Math.abs(weightSum - 1) > 1e-3) {
45
+ const factor = 1 / weightSum;
46
+ manager.updateWeights({
47
+ base: weights.base * factor,
48
+ impact: weights.impact * factor,
49
+ persistence: weights.persistence * factor,
50
+ reference: weights.reference * factor
51
+ });
52
+ manager.save();
53
+ console.log(chalk.green(" \u2713 Normalized weights to sum to 1.0"));
54
+ }
55
+ }
56
+ if (result.valid) {
57
+ console.log(chalk.green("\n\u2705 Configuration is valid"));
58
+ process.exit(0);
59
+ } else {
60
+ console.log(chalk.red("\n\u274C Configuration has errors"));
61
+ process.exit(1);
62
+ }
63
+ });
64
+ config.command("init").description("Initialize configuration file with defaults").option("-p, --profile <name>", "Use a preset profile", "default").option("-f, --force", "Overwrite existing config").action(async (options) => {
65
+ const configPath = path.join(
66
+ process.cwd(),
67
+ ".stackmemory",
68
+ "config.yaml"
69
+ );
70
+ if (fs.existsSync(configPath) && !options.force) {
71
+ console.log(
72
+ chalk.yellow(
73
+ "\u26A0 Config file already exists. Use --force to overwrite."
74
+ )
75
+ );
76
+ process.exit(1);
77
+ }
78
+ const dir = path.dirname(configPath);
79
+ if (!fs.existsSync(dir)) {
80
+ fs.mkdirSync(dir, { recursive: true });
81
+ }
82
+ const config2 = { ...DEFAULT_CONFIG };
83
+ if (options.profile && options.profile !== "default") {
84
+ config2.profile = options.profile;
85
+ }
86
+ const content = yaml.dump(config2, {
87
+ indent: 2,
88
+ lineWidth: 120,
89
+ noRefs: true
90
+ });
91
+ fs.writeFileSync(configPath, content, "utf-8");
92
+ console.log(chalk.green(`\u2705 Created config file at ${configPath}`));
93
+ if (options.profile !== "default") {
94
+ console.log(chalk.cyan(`\u{1F4CB} Using profile: ${options.profile}`));
95
+ }
96
+ });
97
+ config.command("show").description("Show current configuration").option("-p, --profile <name>", "Show specific profile").action(async (options) => {
98
+ const manager = new ConfigManager();
99
+ const config2 = manager.getConfig();
100
+ if (options.profile) {
101
+ const profiles = manager.getProfiles();
102
+ const profile = profiles[options.profile];
103
+ if (!profile) {
104
+ console.log(chalk.red(`\u274C Profile '${options.profile}' not found`));
105
+ console.log(chalk.cyan("Available profiles:"));
106
+ Object.keys(profiles).forEach((name) => {
107
+ console.log(` \u2022 ${name}`);
108
+ });
109
+ process.exit(1);
110
+ }
111
+ console.log(chalk.blue(`
112
+ \u{1F4CB} Profile: ${profile.name}`));
113
+ if (profile.description) {
114
+ console.log(chalk.gray(` ${profile.description}`));
115
+ }
116
+ console.log("\n" + yaml.dump(profile, { indent: 2 }));
117
+ } else {
118
+ console.log(chalk.blue("\n\u{1F4CB} Current Configuration:"));
119
+ if (config2.profile) {
120
+ console.log(chalk.cyan(` Active Profile: ${config2.profile}`));
121
+ }
122
+ console.log("\n" + yaml.dump(config2, { indent: 2 }));
123
+ }
124
+ });
125
+ config.command("set-profile <name>").description("Set active profile").action(async (name) => {
126
+ const manager = new ConfigManager();
127
+ if (manager.setProfile(name)) {
128
+ manager.save();
129
+ console.log(chalk.green(`\u2705 Active profile set to: ${name}`));
130
+ } else {
131
+ console.log(chalk.red(`\u274C Profile '${name}' not found`));
132
+ console.log(chalk.cyan("Available profiles:"));
133
+ Object.keys(manager.getProfiles()).forEach((profile) => {
134
+ console.log(` \u2022 ${profile}`);
135
+ });
136
+ process.exit(1);
137
+ }
138
+ });
139
+ config.command("list-profiles").description("List available profiles").action(async () => {
140
+ const manager = new ConfigManager();
141
+ const profiles = manager.getProfiles();
142
+ const currentProfile = manager.getConfig().profile;
143
+ console.log(chalk.blue("\n\u{1F4CB} Available Profiles:"));
144
+ Object.entries(profiles).forEach(([name, profile]) => {
145
+ const marker = name === currentProfile ? chalk.green(" \u2713") : "";
146
+ console.log(` \u2022 ${chalk.cyan(name)}${marker}`);
147
+ if (profile.description) {
148
+ console.log(chalk.gray(` ${profile.description}`));
149
+ }
150
+ });
151
+ });
152
+ config.command("test-score <tool>").description("Test importance scoring for a tool").option("-f, --files <number>", "Number of files affected", parseInt).option("-p, --permanent", "Is change permanent").option("-r, --references <number>", "Reference count", parseInt).action(async (tool, options) => {
153
+ const manager = new ConfigManager();
154
+ const score = manager.calculateScore(tool, {
155
+ filesAffected: options.files,
156
+ isPermanent: options.permanent,
157
+ referenceCount: options.references
158
+ });
159
+ const config2 = manager.getConfig();
160
+ const baseScore = config2.scoring.tool_scores[tool] || 0.5;
161
+ console.log(chalk.blue("\n\u{1F4CA} Score Calculation:"));
162
+ console.log(` Tool: ${chalk.cyan(tool)}`);
163
+ console.log(` Base Score: ${chalk.yellow(baseScore.toFixed(3))}`);
164
+ if (options.files !== void 0) {
165
+ console.log(` Files Affected: ${options.files}`);
166
+ }
167
+ if (options.permanent) {
168
+ console.log(` Permanent: ${chalk.green("Yes")}`);
169
+ }
170
+ if (options.references !== void 0) {
171
+ console.log(` References: ${options.references}`);
172
+ }
173
+ console.log(chalk.blue("\n Weights:"));
174
+ console.log(` Base: ${config2.scoring.weights.base}`);
175
+ console.log(` Impact: ${config2.scoring.weights.impact}`);
176
+ console.log(` Persistence: ${config2.scoring.weights.persistence}`);
177
+ console.log(` Reference: ${config2.scoring.weights.reference}`);
178
+ console.log(chalk.green(`
179
+ Final Score: ${score.toFixed(3)}`));
180
+ let level = "Low";
181
+ let color = chalk.gray;
182
+ if (score >= 0.8) {
183
+ level = "Critical";
184
+ color = chalk.red;
185
+ } else if (score >= 0.6) {
186
+ level = "High";
187
+ color = chalk.yellow;
188
+ } else if (score >= 0.4) {
189
+ level = "Medium";
190
+ color = chalk.cyan;
191
+ }
192
+ console.log(` Importance: ${color(level)}`);
193
+ });
194
+ return config;
195
+ }
196
+ export {
197
+ createConfigCommand
198
+ };
199
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/commands/config.ts"],
4
+ "sourcesContent": ["/**\n * Config command for StackMemory CLI\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as yaml from 'js-yaml';\nimport chalk from 'chalk';\nimport { ConfigManager } from '../../core/config/config-manager.js';\nimport { DEFAULT_CONFIG, PRESET_PROFILES } from '../../core/config/types.js';\n\nexport function createConfigCommand(): Command {\n const config = new Command('config').description(\n 'Manage StackMemory configuration'\n );\n\n config\n .command('validate')\n .description('Validate configuration file')\n .option(\n '-f, --file <path>',\n 'Path to config file',\n '.stackmemory/config.yaml'\n )\n .option('--fix', 'Attempt to auto-fix common issues')\n .action(async (options) => {\n console.log(chalk.blue('\uD83D\uDD0D Validating configuration...'));\n\n const configPath = path.resolve(options.file);\n const manager = new ConfigManager(configPath);\n const result = manager.validate();\n\n // Display errors\n if (result.errors.length > 0) {\n console.log(chalk.red('\\n\u2717 Errors:'));\n result.errors.forEach((error) => {\n console.log(chalk.red(` \u2022 ${error}`));\n });\n }\n\n // Display warnings\n if (result.warnings.length > 0) {\n console.log(chalk.yellow('\\n\u26A0 Warnings:'));\n result.warnings.forEach((warning) => {\n console.log(chalk.yellow(` \u2022 ${warning}`));\n });\n }\n\n // Display suggestions\n if (result.suggestions.length > 0) {\n console.log(chalk.cyan('\\n\uD83D\uDCA1 Suggestions:'));\n result.suggestions.forEach((suggestion) => {\n console.log(chalk.cyan(` \u2022 ${suggestion}`));\n });\n }\n\n // Auto-fix if requested\n if (options.fix && result.errors.length > 0) {\n console.log(chalk.blue('\\n\uD83D\uDD27 Attempting auto-fix...'));\n\n const config = manager.getConfig();\n const weights = config.scoring.weights;\n const weightSum =\n weights.base +\n weights.impact +\n weights.persistence +\n weights.reference;\n\n if (Math.abs(weightSum - 1.0) > 0.001) {\n // Normalize weights to sum to 1.0\n const factor = 1.0 / weightSum;\n manager.updateWeights({\n base: weights.base * factor,\n impact: weights.impact * factor,\n persistence: weights.persistence * factor,\n reference: weights.reference * factor,\n });\n manager.save();\n console.log(chalk.green(' \u2713 Normalized weights to sum to 1.0'));\n }\n }\n\n // Final status\n if (result.valid) {\n console.log(chalk.green('\\n\u2705 Configuration is valid'));\n process.exit(0);\n } else {\n console.log(chalk.red('\\n\u274C Configuration has errors'));\n process.exit(1);\n }\n });\n\n config\n .command('init')\n .description('Initialize configuration file with defaults')\n .option('-p, --profile <name>', 'Use a preset profile', 'default')\n .option('-f, --force', 'Overwrite existing config')\n .action(async (options) => {\n const configPath = path.join(\n process.cwd(),\n '.stackmemory',\n 'config.yaml'\n );\n\n if (fs.existsSync(configPath) && !options.force) {\n console.log(\n chalk.yellow(\n '\u26A0 Config file already exists. Use --force to overwrite.'\n )\n );\n process.exit(1);\n }\n\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n const config = { ...DEFAULT_CONFIG };\n if (options.profile && options.profile !== 'default') {\n config.profile = options.profile;\n }\n\n const content = yaml.dump(config, {\n indent: 2,\n lineWidth: 120,\n noRefs: true,\n });\n\n fs.writeFileSync(configPath, content, 'utf-8');\n console.log(chalk.green(`\u2705 Created config file at ${configPath}`));\n\n if (options.profile !== 'default') {\n console.log(chalk.cyan(`\uD83D\uDCCB Using profile: ${options.profile}`));\n }\n });\n\n config\n .command('show')\n .description('Show current configuration')\n .option('-p, --profile <name>', 'Show specific profile')\n .action(async (options) => {\n const manager = new ConfigManager();\n const config = manager.getConfig();\n\n if (options.profile) {\n const profiles = manager.getProfiles();\n const profile = profiles[options.profile];\n\n if (!profile) {\n console.log(chalk.red(`\u274C Profile '${options.profile}' not found`));\n console.log(chalk.cyan('Available profiles:'));\n Object.keys(profiles).forEach((name) => {\n console.log(` \u2022 ${name}`);\n });\n process.exit(1);\n }\n\n console.log(chalk.blue(`\\n\uD83D\uDCCB Profile: ${profile.name}`));\n if (profile.description) {\n console.log(chalk.gray(` ${profile.description}`));\n }\n console.log('\\n' + yaml.dump(profile, { indent: 2 }));\n } else {\n console.log(chalk.blue('\\n\uD83D\uDCCB Current Configuration:'));\n if (config.profile) {\n console.log(chalk.cyan(` Active Profile: ${config.profile}`));\n }\n console.log('\\n' + yaml.dump(config, { indent: 2 }));\n }\n });\n\n config\n .command('set-profile <name>')\n .description('Set active profile')\n .action(async (name) => {\n const manager = new ConfigManager();\n\n if (manager.setProfile(name)) {\n manager.save();\n console.log(chalk.green(`\u2705 Active profile set to: ${name}`));\n } else {\n console.log(chalk.red(`\u274C Profile '${name}' not found`));\n console.log(chalk.cyan('Available profiles:'));\n Object.keys(manager.getProfiles()).forEach((profile) => {\n console.log(` \u2022 ${profile}`);\n });\n process.exit(1);\n }\n });\n\n config\n .command('list-profiles')\n .description('List available profiles')\n .action(async () => {\n const manager = new ConfigManager();\n const profiles = manager.getProfiles();\n const currentProfile = manager.getConfig().profile;\n\n console.log(chalk.blue('\\n\uD83D\uDCCB Available Profiles:'));\n Object.entries(profiles).forEach(([name, profile]) => {\n const marker = name === currentProfile ? chalk.green(' \u2713') : '';\n console.log(` \u2022 ${chalk.cyan(name)}${marker}`);\n if (profile.description) {\n console.log(chalk.gray(` ${profile.description}`));\n }\n });\n });\n\n config\n .command('test-score <tool>')\n .description('Test importance scoring for a tool')\n .option('-f, --files <number>', 'Number of files affected', parseInt)\n .option('-p, --permanent', 'Is change permanent')\n .option('-r, --references <number>', 'Reference count', parseInt)\n .action(async (tool, options) => {\n const manager = new ConfigManager();\n\n const score = manager.calculateScore(tool, {\n filesAffected: options.files,\n isPermanent: options.permanent,\n referenceCount: options.references,\n });\n\n const config = manager.getConfig();\n const baseScore = config.scoring.tool_scores[tool] || 0.5;\n\n console.log(chalk.blue('\\n\uD83D\uDCCA Score Calculation:'));\n console.log(` Tool: ${chalk.cyan(tool)}`);\n console.log(` Base Score: ${chalk.yellow(baseScore.toFixed(3))}`);\n\n if (options.files !== undefined) {\n console.log(` Files Affected: ${options.files}`);\n }\n if (options.permanent) {\n console.log(` Permanent: ${chalk.green('Yes')}`);\n }\n if (options.references !== undefined) {\n console.log(` References: ${options.references}`);\n }\n\n console.log(chalk.blue('\\n Weights:'));\n console.log(` Base: ${config.scoring.weights.base}`);\n console.log(` Impact: ${config.scoring.weights.impact}`);\n console.log(` Persistence: ${config.scoring.weights.persistence}`);\n console.log(` Reference: ${config.scoring.weights.reference}`);\n\n console.log(chalk.green(`\\n Final Score: ${score.toFixed(3)}`));\n\n // Show importance level\n let level = 'Low';\n let color = chalk.gray;\n if (score >= 0.8) {\n level = 'Critical';\n color = chalk.red;\n } else if (score >= 0.6) {\n level = 'High';\n color = chalk.yellow;\n } else if (score >= 0.4) {\n level = 'Medium';\n color = chalk.cyan;\n }\n\n console.log(` Importance: ${color(level)}`);\n });\n\n return config;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["config"]
7
+ }
@@ -0,0 +1,327 @@
1
+ import { Command } from "commander";
2
+ import Database from "better-sqlite3";
3
+ import { join } from "path";
4
+ import { existsSync } from "fs";
5
+ import { FrameManager } from "../../core/context/frame-manager.js";
6
+ function createContextCommands() {
7
+ const context = new Command("context").alias("ctx").description("Manage context stack");
8
+ context.command("show").alias("status").description("Show current context stack").option("-v, --verbose", "Show detailed information").action(async (options) => {
9
+ const projectRoot = process.cwd();
10
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
11
+ if (!existsSync(dbPath)) {
12
+ console.log(
13
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
14
+ );
15
+ return;
16
+ }
17
+ const db = new Database(dbPath);
18
+ try {
19
+ let projectId = "default";
20
+ try {
21
+ const projectRow = db.prepare(
22
+ `
23
+ SELECT value FROM metadata WHERE key = 'project_id'
24
+ `
25
+ ).get();
26
+ if (projectRow?.value) projectId = projectRow.value;
27
+ } catch {
28
+ }
29
+ const frameManager = new FrameManager(db, projectId);
30
+ const depth = frameManager.getStackDepth();
31
+ const activePath = frameManager.getActiveFramePath();
32
+ console.log(`
33
+ \u{1F4DA} Context Stack
34
+ `);
35
+ console.log(`Project: ${projectId}`);
36
+ console.log(`Depth: ${depth}`);
37
+ console.log(`Active frames: ${activePath.length}
38
+ `);
39
+ if (activePath.length === 0) {
40
+ console.log("No active context frames.\n");
41
+ console.log('Use "stackmemory context push" to create one.');
42
+ } else {
43
+ const typeIcon = {
44
+ session: "\u{1F537}",
45
+ task: "\u{1F4CB}",
46
+ command: "\u26A1",
47
+ file: "\u{1F4C4}",
48
+ decision: "\u{1F4A1}"
49
+ };
50
+ console.log("Stack (bottom to top):");
51
+ activePath.forEach((frame, i) => {
52
+ const icon = typeIcon[frame.type] || "\u{1F4E6}";
53
+ const indent = " ".repeat(i);
54
+ console.log(
55
+ `${indent}${i === activePath.length - 1 ? "\u2514\u2500" : "\u251C\u2500"} ${icon} ${frame.name || frame.frame_id.slice(0, 10)}`
56
+ );
57
+ if (options.verbose) {
58
+ console.log(`${indent} ID: ${frame.frame_id}`);
59
+ console.log(`${indent} Type: ${frame.type}`);
60
+ console.log(
61
+ `${indent} Created: ${new Date(frame.created_at * 1e3).toLocaleString()}`
62
+ );
63
+ }
64
+ });
65
+ }
66
+ console.log("");
67
+ } catch (error) {
68
+ console.error("\u274C Failed to show context:", error.message);
69
+ } finally {
70
+ db.close();
71
+ }
72
+ });
73
+ context.command("push <name>").description("Push a new context frame onto the stack").option(
74
+ "-t, --type <type>",
75
+ "Frame type (session, task, command, file, decision)",
76
+ "task"
77
+ ).option("-m, --metadata <json>", "Additional metadata as JSON").action(async (name, options) => {
78
+ const projectRoot = process.cwd();
79
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
80
+ if (!existsSync(dbPath)) {
81
+ console.log(
82
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
83
+ );
84
+ return;
85
+ }
86
+ const db = new Database(dbPath);
87
+ try {
88
+ let projectId = "default";
89
+ try {
90
+ const projectRow = db.prepare(`SELECT value FROM metadata WHERE key = 'project_id'`).get();
91
+ if (projectRow?.value) projectId = projectRow.value;
92
+ } catch {
93
+ }
94
+ const frameManager = new FrameManager(db, projectId);
95
+ const activePath = frameManager.getActiveFramePath();
96
+ const parentId = activePath.length > 0 ? activePath[activePath.length - 1].frame_id : void 0;
97
+ let inputs = {};
98
+ if (options.metadata) {
99
+ try {
100
+ inputs = JSON.parse(options.metadata);
101
+ } catch {
102
+ console.log("\u26A0\uFE0F Invalid metadata JSON, ignoring");
103
+ }
104
+ }
105
+ const frameId = frameManager.createFrame({
106
+ type: options.type,
107
+ name,
108
+ inputs,
109
+ parentFrameId: parentId
110
+ });
111
+ console.log(`\u2705 Pushed context frame: ${name}`);
112
+ console.log(` ID: ${frameId.slice(0, 10)}`);
113
+ console.log(` Type: ${options.type}`);
114
+ console.log(` Depth: ${frameManager.getStackDepth()}`);
115
+ } catch (error) {
116
+ console.error("\u274C Failed to push context:", error.message);
117
+ } finally {
118
+ db.close();
119
+ }
120
+ });
121
+ context.command("pop").description("Pop the top context frame from the stack").option("-a, --all", "Pop all frames (clear stack)").action(async (options) => {
122
+ const projectRoot = process.cwd();
123
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
124
+ if (!existsSync(dbPath)) {
125
+ console.log(
126
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
127
+ );
128
+ return;
129
+ }
130
+ const db = new Database(dbPath);
131
+ try {
132
+ let projectId = "default";
133
+ try {
134
+ const projectRow = db.prepare(`SELECT value FROM metadata WHERE key = 'project_id'`).get();
135
+ if (projectRow?.value) projectId = projectRow.value;
136
+ } catch {
137
+ }
138
+ const frameManager = new FrameManager(db, projectId);
139
+ const activePath = frameManager.getActiveFramePath();
140
+ if (activePath.length === 0) {
141
+ console.log("\u{1F4DA} Stack is already empty.");
142
+ return;
143
+ }
144
+ if (options.all) {
145
+ for (let i = activePath.length - 1; i >= 0; i--) {
146
+ frameManager.closeFrame(activePath[i].frame_id);
147
+ }
148
+ console.log(`\u2705 Cleared all ${activePath.length} context frames.`);
149
+ } else {
150
+ const topFrame = activePath[activePath.length - 1];
151
+ frameManager.closeFrame(topFrame.frame_id);
152
+ console.log(
153
+ `\u2705 Popped: ${topFrame.name || topFrame.frame_id.slice(0, 10)}`
154
+ );
155
+ console.log(` Depth: ${frameManager.getStackDepth()}`);
156
+ }
157
+ } catch (error) {
158
+ console.error("\u274C Failed to pop context:", error.message);
159
+ } finally {
160
+ db.close();
161
+ }
162
+ });
163
+ context.command("add <type> <message>").description(
164
+ "Add an event to current context (types: observation, decision, error)"
165
+ ).action(async (type, message) => {
166
+ const projectRoot = process.cwd();
167
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
168
+ if (!existsSync(dbPath)) {
169
+ console.log(
170
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
171
+ );
172
+ return;
173
+ }
174
+ const db = new Database(dbPath);
175
+ try {
176
+ let projectId = "default";
177
+ try {
178
+ const projectRow = db.prepare(`SELECT value FROM metadata WHERE key = 'project_id'`).get();
179
+ if (projectRow?.value) projectId = projectRow.value;
180
+ } catch {
181
+ }
182
+ const frameManager = new FrameManager(db, projectId);
183
+ const activePath = frameManager.getActiveFramePath();
184
+ if (activePath.length === 0) {
185
+ console.log("\u26A0\uFE0F No active context frame. Creating one...");
186
+ frameManager.createFrame({
187
+ type: "task",
188
+ name: "cli-session",
189
+ inputs: {}
190
+ });
191
+ }
192
+ const currentFrame = frameManager.getActiveFramePath().slice(-1)[0];
193
+ const validTypes = [
194
+ "observation",
195
+ "decision",
196
+ "error",
197
+ "action",
198
+ "result"
199
+ ];
200
+ if (!validTypes.includes(type)) {
201
+ console.log(`\u26A0\uFE0F Unknown event type "${type}". Using "observation".`);
202
+ type = "observation";
203
+ }
204
+ frameManager.addEvent(
205
+ type,
206
+ { message, content: message },
207
+ currentFrame.frame_id
208
+ );
209
+ console.log(
210
+ `\u2705 Added ${type}: ${message.slice(0, 50)}${message.length > 50 ? "..." : ""}`
211
+ );
212
+ } catch (error) {
213
+ console.error("\u274C Failed to add event:", error.message);
214
+ } finally {
215
+ db.close();
216
+ }
217
+ });
218
+ context.command("worktree [action]").description("Manage Claude worktree contexts").option("-i, --instance <id>", "Instance ID").option("-b, --branch <name>", "Branch name").option("-l, --list", "List worktree contexts").action(async (action, options) => {
219
+ const projectRoot = process.cwd();
220
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
221
+ if (!existsSync(dbPath)) {
222
+ console.log(
223
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
224
+ );
225
+ return;
226
+ }
227
+ const db = new Database(dbPath);
228
+ try {
229
+ let projectId = "default";
230
+ try {
231
+ const projectRow = db.prepare(`SELECT value FROM metadata WHERE key = 'project_id'`).get();
232
+ if (projectRow?.value) projectId = projectRow.value;
233
+ } catch {
234
+ }
235
+ const frameManager = new FrameManager(db, projectId);
236
+ if (options.list || action === "list") {
237
+ const worktreeFrames = db.prepare(
238
+ `
239
+ SELECT * FROM frames
240
+ WHERE project_id = ?
241
+ AND type = 'session'
242
+ AND inputs LIKE '%worktree%'
243
+ ORDER BY created_at DESC
244
+ LIMIT 10
245
+ `
246
+ ).all(projectId);
247
+ console.log("\n\u{1F333} Worktree Contexts\n");
248
+ if (worktreeFrames.length === 0) {
249
+ console.log("No worktree contexts found.");
250
+ } else {
251
+ worktreeFrames.forEach((frame) => {
252
+ const inputs = JSON.parse(frame.inputs || "{}");
253
+ const instanceId = inputs.instanceId || "unknown";
254
+ const branch = inputs.branch || "unknown";
255
+ const created = new Date(
256
+ frame.created_at * 1e3
257
+ ).toLocaleString();
258
+ console.log(`\u{1F4CD} ${frame.name || frame.frame_id.slice(0, 10)}`);
259
+ console.log(` Instance: ${instanceId}`);
260
+ console.log(` Branch: ${branch}`);
261
+ console.log(` Created: ${created}`);
262
+ console.log("");
263
+ });
264
+ }
265
+ } else if (action === "save") {
266
+ const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;
267
+ const branch = options.branch || "unknown";
268
+ if (!instanceId) {
269
+ console.log("\u26A0\uFE0F No instance ID provided or detected.");
270
+ return;
271
+ }
272
+ const frameId = frameManager.createFrame({
273
+ type: "task",
274
+ name: `worktree-${branch}`,
275
+ inputs: {
276
+ worktree: true,
277
+ instanceId,
278
+ branch,
279
+ path: process.cwd()
280
+ }
281
+ });
282
+ console.log(`\u2705 Saved worktree context for ${branch}`);
283
+ console.log(` Instance: ${instanceId}`);
284
+ console.log(` Frame ID: ${frameId.slice(0, 10)}`);
285
+ } else if (action === "load") {
286
+ const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;
287
+ if (!instanceId) {
288
+ console.log("\u26A0\uFE0F No instance ID provided.");
289
+ return;
290
+ }
291
+ const worktreeFrame = db.prepare(
292
+ `
293
+ SELECT * FROM frames
294
+ WHERE project_id = ?
295
+ AND type = 'session'
296
+ AND inputs LIKE ?
297
+ ORDER BY created_at DESC
298
+ LIMIT 1
299
+ `
300
+ ).get(projectId, `%"instanceId":"${instanceId}"%`);
301
+ if (worktreeFrame) {
302
+ const inputs = JSON.parse(worktreeFrame.inputs || "{}");
303
+ console.log(`\u2705 Loaded worktree context`);
304
+ console.log(` Branch: ${inputs.branch}`);
305
+ console.log(` Instance: ${inputs.instanceId}`);
306
+ console.log(` Path: ${inputs.path}`);
307
+ } else {
308
+ console.log("\u26A0\uFE0F No worktree context found for this instance.");
309
+ }
310
+ } else {
311
+ console.log("Usage: stackmemory context worktree [save|load|list]");
312
+ }
313
+ } catch (error) {
314
+ console.error(
315
+ "\u274C Failed to manage worktree context:",
316
+ error.message
317
+ );
318
+ } finally {
319
+ db.close();
320
+ }
321
+ });
322
+ return context;
323
+ }
324
+ export {
325
+ createContextCommands
326
+ };
327
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/cli/commands/context.ts"],
4
+ "sourcesContent": ["/**\n * Context Commands for StackMemory CLI\n * Manage context stack (show, push, pop)\n */\n\nimport { Command } from 'commander';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport { FrameManager, FrameType } from '../../core/context/frame-manager.js';\n\nexport function createContextCommands(): Command {\n const context = new Command('context')\n .alias('ctx')\n .description('Manage context stack');\n\n // Show current context\n context\n .command('show')\n .alias('status')\n .description('Show current context stack')\n .option('-v, --verbose', 'Show detailed information')\n .action(async (options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n // Get project ID - try metadata table, fallback to default\n let projectId = 'default';\n try {\n const projectRow = db\n .prepare(\n `\n SELECT value FROM metadata WHERE key = 'project_id'\n `\n )\n .get() as any;\n if (projectRow?.value) projectId = projectRow.value;\n } catch {\n // metadata table doesn't exist, use default\n }\n\n const frameManager = new FrameManager(db, projectId);\n\n const depth = frameManager.getStackDepth();\n const activePath = frameManager.getActiveFramePath();\n\n console.log(`\\n\uD83D\uDCDA Context Stack\\n`);\n console.log(`Project: ${projectId}`);\n console.log(`Depth: ${depth}`);\n console.log(`Active frames: ${activePath.length}\\n`);\n\n if (activePath.length === 0) {\n console.log('No active context frames.\\n');\n console.log('Use \"stackmemory context push\" to create one.');\n } else {\n const typeIcon: Record<string, string> = {\n session: '\uD83D\uDD37',\n task: '\uD83D\uDCCB',\n command: '\u26A1',\n file: '\uD83D\uDCC4',\n decision: '\uD83D\uDCA1',\n };\n\n console.log('Stack (bottom to top):');\n activePath.forEach((frame, i) => {\n const icon = typeIcon[frame.type] || '\uD83D\uDCE6';\n const indent = ' '.repeat(i);\n console.log(\n `${indent}${i === activePath.length - 1 ? '\u2514\u2500' : '\u251C\u2500'} ${icon} ${frame.name || frame.frame_id.slice(0, 10)}`\n );\n\n if (options.verbose) {\n console.log(`${indent} ID: ${frame.frame_id}`);\n console.log(`${indent} Type: ${frame.type}`);\n console.log(\n `${indent} Created: ${new Date(frame.created_at * 1000).toLocaleString()}`\n );\n }\n });\n }\n\n console.log('');\n } catch (error) {\n console.error('\u274C Failed to show context:', (error as Error).message);\n } finally {\n db.close();\n }\n });\n\n // Push new context frame\n context\n .command('push <name>')\n .description('Push a new context frame onto the stack')\n .option(\n '-t, --type <type>',\n 'Frame type (session, task, command, file, decision)',\n 'task'\n )\n .option('-m, --metadata <json>', 'Additional metadata as JSON')\n .action(async (name, options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const projectRow = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (projectRow?.value) projectId = projectRow.value;\n } catch {}\n\n const frameManager = new FrameManager(db, projectId);\n\n // Get current top frame as parent\n const activePath = frameManager.getActiveFramePath();\n const parentId =\n activePath.length > 0\n ? activePath[activePath.length - 1].frame_id\n : undefined;\n\n // Parse metadata if provided\n let inputs = {};\n if (options.metadata) {\n try {\n inputs = JSON.parse(options.metadata);\n } catch {\n console.log('\u26A0\uFE0F Invalid metadata JSON, ignoring');\n }\n }\n\n const frameId = frameManager.createFrame({\n type: options.type as FrameType,\n name,\n inputs,\n parentFrameId: parentId,\n });\n\n console.log(`\u2705 Pushed context frame: ${name}`);\n console.log(` ID: ${frameId.slice(0, 10)}`);\n console.log(` Type: ${options.type}`);\n console.log(` Depth: ${frameManager.getStackDepth()}`);\n } catch (error) {\n console.error('\u274C Failed to push context:', (error as Error).message);\n } finally {\n db.close();\n }\n });\n\n // Pop context frame\n context\n .command('pop')\n .description('Pop the top context frame from the stack')\n .option('-a, --all', 'Pop all frames (clear stack)')\n .action(async (options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const projectRow = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (projectRow?.value) projectId = projectRow.value;\n } catch {}\n\n const frameManager = new FrameManager(db, projectId);\n\n const activePath = frameManager.getActiveFramePath();\n\n if (activePath.length === 0) {\n console.log('\uD83D\uDCDA Stack is already empty.');\n return;\n }\n\n if (options.all) {\n // Close all frames from top to bottom\n for (let i = activePath.length - 1; i >= 0; i--) {\n frameManager.closeFrame(activePath[i].frame_id);\n }\n console.log(`\u2705 Cleared all ${activePath.length} context frames.`);\n } else {\n // Close just the top frame\n const topFrame = activePath[activePath.length - 1];\n frameManager.closeFrame(topFrame.frame_id);\n console.log(\n `\u2705 Popped: ${topFrame.name || topFrame.frame_id.slice(0, 10)}`\n );\n console.log(` Depth: ${frameManager.getStackDepth()}`);\n }\n } catch (error) {\n console.error('\u274C Failed to pop context:', (error as Error).message);\n } finally {\n db.close();\n }\n });\n\n // Add event to current context\n context\n .command('add <type> <message>')\n .description(\n 'Add an event to current context (types: observation, decision, error)'\n )\n .action(async (type, message) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const projectRow = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (projectRow?.value) projectId = projectRow.value;\n } catch {}\n\n const frameManager = new FrameManager(db, projectId);\n\n const activePath = frameManager.getActiveFramePath();\n\n if (activePath.length === 0) {\n console.log('\u26A0\uFE0F No active context frame. Creating one...');\n frameManager.createFrame({\n type: 'task',\n name: 'cli-session',\n inputs: {},\n });\n }\n\n const currentFrame = frameManager.getActiveFramePath().slice(-1)[0];\n\n const validTypes = [\n 'observation',\n 'decision',\n 'error',\n 'action',\n 'result',\n ];\n if (!validTypes.includes(type)) {\n console.log(`\u26A0\uFE0F Unknown event type \"${type}\". Using \"observation\".`);\n type = 'observation';\n }\n\n frameManager.addEvent(\n type,\n { message, content: message },\n currentFrame.frame_id\n );\n\n console.log(\n `\u2705 Added ${type}: ${message.slice(0, 50)}${message.length > 50 ? '...' : ''}`\n );\n } catch (error) {\n console.error('\u274C Failed to add event:', (error as Error).message);\n } finally {\n db.close();\n }\n });\n\n // Worktree integration commands\n context\n .command('worktree [action]')\n .description('Manage Claude worktree contexts')\n .option('-i, --instance <id>', 'Instance ID')\n .option('-b, --branch <name>', 'Branch name')\n .option('-l, --list', 'List worktree contexts')\n .action(async (action, options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const projectRow = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (projectRow?.value) projectId = projectRow.value;\n } catch {}\n\n const frameManager = new FrameManager(db, projectId);\n\n if (options.list || action === 'list') {\n // List all worktree contexts\n const worktreeFrames = db\n .prepare(\n `\n SELECT * FROM frames \n WHERE project_id = ? \n AND type = 'session' \n AND inputs LIKE '%worktree%'\n ORDER BY created_at DESC\n LIMIT 10\n `\n )\n .all(projectId) as any[];\n\n console.log('\\n\uD83C\uDF33 Worktree Contexts\\n');\n if (worktreeFrames.length === 0) {\n console.log('No worktree contexts found.');\n } else {\n worktreeFrames.forEach((frame) => {\n const inputs = JSON.parse(frame.inputs || '{}');\n const instanceId = inputs.instanceId || 'unknown';\n const branch = inputs.branch || 'unknown';\n const created = new Date(\n frame.created_at * 1000\n ).toLocaleString();\n console.log(`\uD83D\uDCCD ${frame.name || frame.frame_id.slice(0, 10)}`);\n console.log(` Instance: ${instanceId}`);\n console.log(` Branch: ${branch}`);\n console.log(` Created: ${created}`);\n console.log('');\n });\n }\n } else if (action === 'save') {\n // Save current worktree context\n const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;\n const branch = options.branch || 'unknown';\n\n if (!instanceId) {\n console.log('\u26A0\uFE0F No instance ID provided or detected.');\n return;\n }\n\n const frameId = frameManager.createFrame({\n type: 'task',\n name: `worktree-${branch}`,\n inputs: {\n worktree: true,\n instanceId,\n branch,\n path: process.cwd(),\n },\n });\n\n console.log(`\u2705 Saved worktree context for ${branch}`);\n console.log(` Instance: ${instanceId}`);\n console.log(` Frame ID: ${frameId.slice(0, 10)}`);\n } else if (action === 'load') {\n // Load worktree context\n const instanceId = options.instance || process.env.CLAUDE_INSTANCE_ID;\n\n if (!instanceId) {\n console.log('\u26A0\uFE0F No instance ID provided.');\n return;\n }\n\n const worktreeFrame = db\n .prepare(\n `\n SELECT * FROM frames \n WHERE project_id = ? \n AND type = 'session' \n AND inputs LIKE ?\n ORDER BY created_at DESC\n LIMIT 1\n `\n )\n .get(projectId, `%\"instanceId\":\"${instanceId}\"%`) as any;\n\n if (worktreeFrame) {\n const inputs = JSON.parse(worktreeFrame.inputs || '{}');\n console.log(`\u2705 Loaded worktree context`);\n console.log(` Branch: ${inputs.branch}`);\n console.log(` Instance: ${inputs.instanceId}`);\n console.log(` Path: ${inputs.path}`);\n } else {\n console.log('\u26A0\uFE0F No worktree context found for this instance.');\n }\n } else {\n console.log('Usage: stackmemory context worktree [save|load|list]');\n }\n } catch (error) {\n console.error(\n '\u274C Failed to manage worktree context:',\n (error as Error).message\n );\n } finally {\n db.close();\n }\n });\n\n return context;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }