@stackmemoryai/stackmemory 0.5.57 → 0.5.59

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 (611) hide show
  1. package/bin/codex-smd +6 -0
  2. package/dist/cli/codex-sm-danger.js +21 -0
  3. package/dist/cli/codex-sm-danger.js.map +7 -0
  4. package/dist/cli/commands/handoff.js +33 -3
  5. package/dist/cli/commands/handoff.js.map +2 -2
  6. package/dist/cli/commands/search.js +20 -3
  7. package/dist/cli/commands/search.js.map +2 -2
  8. package/dist/core/database/sqlite-adapter.js +13 -3
  9. package/dist/core/database/sqlite-adapter.js.map +2 -2
  10. package/dist/core/errors/error-utils.js +208 -0
  11. package/dist/core/errors/error-utils.js.map +7 -0
  12. package/dist/core/errors/index.js +13 -4
  13. package/dist/core/errors/index.js.map +2 -2
  14. package/dist/core/merge/unified-merge-resolver.js +303 -0
  15. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  16. package/dist/core/monitoring/logger.js +61 -9
  17. package/dist/core/monitoring/logger.js.map +2 -2
  18. package/dist/core/security/index.js +35 -0
  19. package/dist/core/security/index.js.map +7 -0
  20. package/dist/core/security/input-sanitizer.js +321 -0
  21. package/dist/core/security/input-sanitizer.js.map +7 -0
  22. package/dist/core/session/enhanced-handoff.js +136 -2
  23. package/dist/core/session/enhanced-handoff.js.map +3 -3
  24. package/dist/integrations/linear/client.js +5 -1
  25. package/dist/integrations/linear/client.js.map +2 -2
  26. package/dist/integrations/mcp/remote-server.js +27 -36
  27. package/dist/integrations/mcp/remote-server.js.map +2 -2
  28. package/dist/integrations/mcp/server.js +44 -29
  29. package/dist/integrations/mcp/server.js.map +3 -3
  30. package/dist/scripts/benchmark-performance.js +48 -0
  31. package/dist/scripts/benchmark-performance.js.map +7 -0
  32. package/dist/scripts/check-redis.js +42 -0
  33. package/dist/scripts/check-redis.js.map +7 -0
  34. package/dist/scripts/initialize.js +116 -0
  35. package/dist/scripts/initialize.js.map +7 -0
  36. package/dist/scripts/list-linear-tasks.js +124 -0
  37. package/dist/scripts/list-linear-tasks.js.map +7 -0
  38. package/dist/scripts/measure-handoff-impact.js +340 -0
  39. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  40. package/dist/scripts/query-chromadb.js +160 -0
  41. package/dist/scripts/query-chromadb.js.map +7 -0
  42. package/dist/scripts/show-linear-summary.js +119 -0
  43. package/dist/scripts/show-linear-summary.js.map +7 -0
  44. package/dist/scripts/simple-swarm-demo.js +90 -0
  45. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  46. package/dist/scripts/status.js +155 -0
  47. package/dist/scripts/status.js.map +7 -0
  48. package/dist/scripts/test-chromadb-sync.js +192 -0
  49. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  50. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  51. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  52. package/dist/scripts/test-ralph-iterations.js +121 -0
  53. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  54. package/dist/scripts/test-redis-storage.js +389 -0
  55. package/dist/scripts/test-redis-storage.js.map +7 -0
  56. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  57. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  58. package/dist/scripts/test-swarm-fixes.js +125 -0
  59. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  60. package/dist/scripts/test-swarm-tui.js +23 -0
  61. package/dist/scripts/test-swarm-tui.js.map +7 -0
  62. package/dist/scripts/test-tui-shortcuts.js +52 -0
  63. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  64. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  65. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  66. package/dist/src/agents/core/agent-task-manager.js +527 -0
  67. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  68. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  69. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  70. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  71. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  72. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  73. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  74. package/dist/src/cli/auto-detect.js +321 -0
  75. package/dist/src/cli/auto-detect.js.map +7 -0
  76. package/dist/src/cli/claude-sm-danger.js +21 -0
  77. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  78. package/dist/src/cli/claude-sm.js +1156 -0
  79. package/dist/src/cli/claude-sm.js.map +7 -0
  80. package/dist/src/cli/codex-sm-danger.js +21 -0
  81. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  82. package/dist/src/cli/codex-sm.js +349 -0
  83. package/dist/src/cli/codex-sm.js.map +7 -0
  84. package/dist/src/cli/commands/api.js +232 -0
  85. package/dist/src/cli/commands/api.js.map +7 -0
  86. package/dist/src/cli/commands/auto-background.js +180 -0
  87. package/dist/src/cli/commands/auto-background.js.map +7 -0
  88. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  89. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  90. package/dist/src/cli/commands/clear.js +202 -0
  91. package/dist/src/cli/commands/clear.js.map +7 -0
  92. package/dist/src/cli/commands/config.js +445 -0
  93. package/dist/src/cli/commands/config.js.map +7 -0
  94. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  95. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  96. package/dist/src/cli/commands/context.js +343 -0
  97. package/dist/src/cli/commands/context.js.map +7 -0
  98. package/dist/src/cli/commands/daemon.js +392 -0
  99. package/dist/src/cli/commands/daemon.js.map +7 -0
  100. package/dist/src/cli/commands/dashboard.js +210 -0
  101. package/dist/src/cli/commands/dashboard.js.map +7 -0
  102. package/dist/src/cli/commands/db.js +147 -0
  103. package/dist/src/cli/commands/db.js.map +7 -0
  104. package/dist/src/cli/commands/decision.js +266 -0
  105. package/dist/src/cli/commands/decision.js.map +7 -0
  106. package/dist/src/cli/commands/discovery.js +279 -0
  107. package/dist/src/cli/commands/discovery.js.map +7 -0
  108. package/dist/src/cli/commands/handoff.js +624 -0
  109. package/dist/src/cli/commands/handoff.js.map +7 -0
  110. package/dist/src/cli/commands/hooks.js +298 -0
  111. package/dist/src/cli/commands/hooks.js.map +7 -0
  112. package/dist/src/cli/commands/linear.js +529 -0
  113. package/dist/src/cli/commands/linear.js.map +7 -0
  114. package/dist/src/cli/commands/log.js +169 -0
  115. package/dist/src/cli/commands/log.js.map +7 -0
  116. package/dist/src/cli/commands/login.js +172 -0
  117. package/dist/src/cli/commands/login.js.map +7 -0
  118. package/dist/src/cli/commands/migrate.js +240 -0
  119. package/dist/src/cli/commands/migrate.js.map +7 -0
  120. package/dist/src/cli/commands/model.js +533 -0
  121. package/dist/src/cli/commands/model.js.map +7 -0
  122. package/dist/src/cli/commands/onboard.js +536 -0
  123. package/dist/src/cli/commands/onboard.js.map +7 -0
  124. package/dist/src/cli/commands/projects.js +199 -0
  125. package/dist/src/cli/commands/projects.js.map +7 -0
  126. package/dist/src/cli/commands/ralph.js +909 -0
  127. package/dist/src/cli/commands/ralph.js.map +7 -0
  128. package/dist/src/cli/commands/retrieval.js +248 -0
  129. package/dist/src/cli/commands/retrieval.js.map +7 -0
  130. package/dist/src/cli/commands/search.js +173 -0
  131. package/dist/src/cli/commands/search.js.map +7 -0
  132. package/dist/src/cli/commands/service.js +749 -0
  133. package/dist/src/cli/commands/service.js.map +7 -0
  134. package/dist/src/cli/commands/session.js +200 -0
  135. package/dist/src/cli/commands/session.js.map +7 -0
  136. package/dist/src/cli/commands/settings.js +306 -0
  137. package/dist/src/cli/commands/settings.js.map +7 -0
  138. package/dist/src/cli/commands/setup.js +701 -0
  139. package/dist/src/cli/commands/setup.js.map +7 -0
  140. package/dist/src/cli/commands/shell.js +249 -0
  141. package/dist/src/cli/commands/shell.js.map +7 -0
  142. package/dist/src/cli/commands/signup.js +50 -0
  143. package/dist/src/cli/commands/signup.js.map +7 -0
  144. package/dist/src/cli/commands/skills.js +470 -0
  145. package/dist/src/cli/commands/skills.js.map +7 -0
  146. package/dist/src/cli/commands/sms-notify.js +795 -0
  147. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  148. package/dist/src/cli/commands/storage-tier.js +183 -0
  149. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  150. package/dist/src/cli/commands/sweep.js +249 -0
  151. package/dist/src/cli/commands/sweep.js.map +7 -0
  152. package/dist/src/cli/commands/tasks.js +213 -0
  153. package/dist/src/cli/commands/tasks.js.map +7 -0
  154. package/dist/src/cli/commands/worktree.js +319 -0
  155. package/dist/src/cli/commands/worktree.js.map +7 -0
  156. package/dist/src/cli/index.js +594 -0
  157. package/dist/src/cli/index.js.map +7 -0
  158. package/dist/src/cli/opencode-sm.js +448 -0
  159. package/dist/src/cli/opencode-sm.js.map +7 -0
  160. package/dist/src/cli/utils/viewer.js +96 -0
  161. package/dist/src/cli/utils/viewer.js.map +7 -0
  162. package/dist/src/core/config/config-manager.js +398 -0
  163. package/dist/src/core/config/config-manager.js.map +7 -0
  164. package/dist/src/core/config/feature-flags.js +76 -0
  165. package/dist/src/core/config/feature-flags.js.map +7 -0
  166. package/dist/src/core/config/storage-config.js +115 -0
  167. package/dist/src/core/config/storage-config.js.map +7 -0
  168. package/dist/src/core/config/types.js +144 -0
  169. package/dist/src/core/config/types.js.map +7 -0
  170. package/dist/src/core/context/auto-context.js +80 -0
  171. package/dist/src/core/context/auto-context.js.map +7 -0
  172. package/dist/src/core/context/dual-stack-manager.js +870 -0
  173. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  174. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  175. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  176. package/dist/src/core/context/frame-database.js +479 -0
  177. package/dist/src/core/context/frame-database.js.map +7 -0
  178. package/dist/src/core/context/frame-digest.js +250 -0
  179. package/dist/src/core/context/frame-digest.js.map +7 -0
  180. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  181. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  182. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  183. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  184. package/dist/src/core/context/frame-recovery.js +302 -0
  185. package/dist/src/core/context/frame-recovery.js.map +7 -0
  186. package/dist/src/core/context/frame-stack.js +314 -0
  187. package/dist/src/core/context/frame-stack.js.map +7 -0
  188. package/dist/src/core/context/frame-types.js +5 -0
  189. package/dist/src/core/context/frame-types.js.map +7 -0
  190. package/dist/src/core/context/index.js +25 -0
  191. package/dist/src/core/context/index.js.map +7 -0
  192. package/dist/src/core/context/permission-manager.js +185 -0
  193. package/dist/src/core/context/permission-manager.js.map +7 -0
  194. package/dist/src/core/context/recursive-context-manager.js +592 -0
  195. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  196. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  197. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  198. package/dist/src/core/context/shared-context-layer.js +621 -0
  199. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  200. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  201. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  202. package/dist/src/core/context/validation.js +130 -0
  203. package/dist/src/core/context/validation.js.map +7 -0
  204. package/dist/src/core/database/batch-operations.js +384 -0
  205. package/dist/src/core/database/batch-operations.js.map +7 -0
  206. package/dist/src/core/database/connection-pool.js +330 -0
  207. package/dist/src/core/database/connection-pool.js.map +7 -0
  208. package/dist/src/core/database/database-adapter.js +60 -0
  209. package/dist/src/core/database/database-adapter.js.map +7 -0
  210. package/dist/src/core/database/migration-manager.js +614 -0
  211. package/dist/src/core/database/migration-manager.js.map +7 -0
  212. package/dist/src/core/database/query-cache.js +298 -0
  213. package/dist/src/core/database/query-cache.js.map +7 -0
  214. package/dist/src/core/database/query-router.js +430 -0
  215. package/dist/src/core/database/query-router.js.map +7 -0
  216. package/dist/src/core/database/sqlite-adapter.js +738 -0
  217. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  218. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  219. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  220. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  221. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  222. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  223. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  224. package/dist/src/core/digest/index.js +9 -0
  225. package/dist/src/core/digest/index.js.map +7 -0
  226. package/dist/src/core/digest/types.js +25 -0
  227. package/dist/src/core/digest/types.js.map +7 -0
  228. package/dist/src/core/errors/error-utils.js +208 -0
  229. package/dist/src/core/errors/error-utils.js.map +7 -0
  230. package/dist/src/core/errors/index.js +521 -0
  231. package/dist/src/core/errors/index.js.map +7 -0
  232. package/dist/src/core/errors/recovery.js +269 -0
  233. package/dist/src/core/errors/recovery.js.map +7 -0
  234. package/dist/src/core/execution/parallel-executor.js +258 -0
  235. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  236. package/dist/src/core/frame/workflow-templates.js +319 -0
  237. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  238. package/dist/src/core/merge/conflict-detector.js +431 -0
  239. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  240. package/dist/src/core/merge/index.js +9 -0
  241. package/dist/src/core/merge/index.js.map +7 -0
  242. package/dist/src/core/merge/resolution-engine.js +558 -0
  243. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  244. package/dist/src/core/merge/stack-diff.js +532 -0
  245. package/dist/src/core/merge/stack-diff.js.map +7 -0
  246. package/dist/src/core/merge/types.js +5 -0
  247. package/dist/src/core/merge/types.js.map +7 -0
  248. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  249. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  250. package/dist/src/core/models/fallback-monitor.js +232 -0
  251. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  252. package/dist/src/core/models/model-router.js +340 -0
  253. package/dist/src/core/models/model-router.js.map +7 -0
  254. package/dist/src/core/monitoring/error-handler.js +49 -0
  255. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  256. package/dist/src/core/monitoring/logger.js +202 -0
  257. package/dist/src/core/monitoring/logger.js.map +7 -0
  258. package/dist/src/core/monitoring/metrics.js +172 -0
  259. package/dist/src/core/monitoring/metrics.js.map +7 -0
  260. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  261. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  262. package/dist/src/core/monitoring/session-monitor.js +300 -0
  263. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  264. package/dist/src/core/performance/context-cache.js +273 -0
  265. package/dist/src/core/performance/context-cache.js.map +7 -0
  266. package/dist/src/core/performance/index.js +11 -0
  267. package/dist/src/core/performance/index.js.map +7 -0
  268. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  269. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  270. package/dist/src/core/performance/monitor.js +221 -0
  271. package/dist/src/core/performance/monitor.js.map +7 -0
  272. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  273. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  274. package/dist/src/core/performance/performance-benchmark.js +277 -0
  275. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  276. package/dist/src/core/performance/performance-profiler.js +370 -0
  277. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  278. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  279. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  280. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  281. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  282. package/dist/src/core/projects/project-isolation.js +201 -0
  283. package/dist/src/core/projects/project-isolation.js.map +7 -0
  284. package/dist/src/core/projects/project-manager.js +697 -0
  285. package/dist/src/core/projects/project-manager.js.map +7 -0
  286. package/dist/src/core/query/query-parser.js +370 -0
  287. package/dist/src/core/query/query-parser.js.map +7 -0
  288. package/dist/src/core/query/query-templates.js +321 -0
  289. package/dist/src/core/query/query-templates.js.map +7 -0
  290. package/dist/src/core/retrieval/context-retriever.js +479 -0
  291. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  292. package/dist/src/core/retrieval/index.js +8 -0
  293. package/dist/src/core/retrieval/index.js.map +7 -0
  294. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  295. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  296. package/dist/src/core/retrieval/llm-provider.js +151 -0
  297. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  298. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  299. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  300. package/dist/src/core/retrieval/summary-generator.js +589 -0
  301. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  302. package/dist/src/core/retrieval/types.js +21 -0
  303. package/dist/src/core/retrieval/types.js.map +7 -0
  304. package/dist/src/core/security/index.js +35 -0
  305. package/dist/src/core/security/index.js.map +7 -0
  306. package/dist/src/core/security/input-sanitizer.js +321 -0
  307. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  308. package/dist/src/core/session/clear-survival.js +465 -0
  309. package/dist/src/core/session/clear-survival.js.map +7 -0
  310. package/dist/src/core/session/enhanced-handoff.js +792 -0
  311. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  312. package/dist/src/core/session/handoff-generator.js +343 -0
  313. package/dist/src/core/session/handoff-generator.js.map +7 -0
  314. package/dist/src/core/session/index.js +15 -0
  315. package/dist/src/core/session/index.js.map +7 -0
  316. package/dist/src/core/session/session-manager.js +347 -0
  317. package/dist/src/core/session/session-manager.js.map +7 -0
  318. package/dist/src/core/skills/index.js +7 -0
  319. package/dist/src/core/skills/index.js.map +7 -0
  320. package/dist/src/core/skills/skill-storage.js +764 -0
  321. package/dist/src/core/skills/skill-storage.js.map +7 -0
  322. package/dist/src/core/skills/types.js +193 -0
  323. package/dist/src/core/skills/types.js.map +7 -0
  324. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  325. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  326. package/dist/src/core/storage/infinite-storage.js +510 -0
  327. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  328. package/dist/src/core/storage/remote-storage.js +489 -0
  329. package/dist/src/core/storage/remote-storage.js.map +7 -0
  330. package/dist/src/core/storage/two-tier-storage.js +766 -0
  331. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  332. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  333. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  334. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  335. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  336. package/dist/src/core/trace/debug-trace.js +417 -0
  337. package/dist/src/core/trace/debug-trace.js.map +7 -0
  338. package/dist/src/core/trace/index.js +109 -0
  339. package/dist/src/core/trace/index.js.map +7 -0
  340. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  341. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  342. package/dist/src/core/trace/trace-detector.js +528 -0
  343. package/dist/src/core/trace/trace-detector.js.map +7 -0
  344. package/dist/src/core/trace/trace-store.js +345 -0
  345. package/dist/src/core/trace/trace-store.js.map +7 -0
  346. package/dist/src/core/trace/types.js +77 -0
  347. package/dist/src/core/trace/types.js.map +7 -0
  348. package/dist/src/core/types.js +5 -0
  349. package/dist/src/core/types.js.map +7 -0
  350. package/dist/src/core/utils/async-mutex.js +114 -0
  351. package/dist/src/core/utils/async-mutex.js.map +7 -0
  352. package/dist/src/core/utils/compression.js +83 -0
  353. package/dist/src/core/utils/compression.js.map +7 -0
  354. package/dist/src/core/utils/update-checker.js +218 -0
  355. package/dist/src/core/utils/update-checker.js.map +7 -0
  356. package/dist/src/core/worktree/worktree-manager.js +465 -0
  357. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  358. package/dist/src/daemon/daemon-config.js +149 -0
  359. package/dist/src/daemon/daemon-config.js.map +7 -0
  360. package/dist/src/daemon/services/context-service.js +122 -0
  361. package/dist/src/daemon/services/context-service.js.map +7 -0
  362. package/dist/src/daemon/services/linear-service.js +136 -0
  363. package/dist/src/daemon/services/linear-service.js.map +7 -0
  364. package/dist/src/daemon/session-daemon.js +312 -0
  365. package/dist/src/daemon/session-daemon.js.map +7 -0
  366. package/dist/src/daemon/unified-daemon.js +276 -0
  367. package/dist/src/daemon/unified-daemon.js.map +7 -0
  368. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  369. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  370. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  371. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  372. package/dist/src/features/analytics/index.js +18 -0
  373. package/dist/src/features/analytics/index.js.map +7 -0
  374. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  375. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  376. package/dist/src/features/analytics/types/metrics.js +5 -0
  377. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  378. package/dist/src/features/browser/browser-mcp.js +492 -0
  379. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  380. package/dist/src/features/sweep/index.js +20 -0
  381. package/dist/src/features/sweep/index.js.map +7 -0
  382. package/dist/src/features/sweep/prediction-client.js +155 -0
  383. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  384. package/dist/src/features/sweep/prompt-builder.js +85 -0
  385. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  386. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  387. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  388. package/dist/src/features/sweep/state-watcher.js +87 -0
  389. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  390. package/dist/src/features/sweep/status-bar.js +88 -0
  391. package/dist/src/features/sweep/status-bar.js.map +7 -0
  392. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  393. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  394. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  395. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  396. package/dist/src/features/sweep/types.js +18 -0
  397. package/dist/src/features/sweep/types.js.map +7 -0
  398. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  399. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  400. package/dist/src/features/tasks/task-aware-context.js +410 -0
  401. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  402. package/dist/src/features/tui/simple-monitor.js +116 -0
  403. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  404. package/dist/src/features/tui/swarm-monitor.js +648 -0
  405. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  406. package/dist/src/features/web/client/stores/task-store.js +26 -0
  407. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  408. package/dist/src/features/web/server/index.js +194 -0
  409. package/dist/src/features/web/server/index.js.map +7 -0
  410. package/dist/src/hooks/auto-background.js +151 -0
  411. package/dist/src/hooks/auto-background.js.map +7 -0
  412. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  413. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  414. package/dist/src/hooks/config.js +150 -0
  415. package/dist/src/hooks/config.js.map +7 -0
  416. package/dist/src/hooks/daemon.js +364 -0
  417. package/dist/src/hooks/daemon.js.map +7 -0
  418. package/dist/src/hooks/events.js +58 -0
  419. package/dist/src/hooks/events.js.map +7 -0
  420. package/dist/src/hooks/index.js +12 -0
  421. package/dist/src/hooks/index.js.map +7 -0
  422. package/dist/src/hooks/linear-task-picker.js +186 -0
  423. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  424. package/dist/src/hooks/schemas.js +197 -0
  425. package/dist/src/hooks/schemas.js.map +7 -0
  426. package/dist/src/hooks/secure-fs.js +49 -0
  427. package/dist/src/hooks/secure-fs.js.map +7 -0
  428. package/dist/src/hooks/security-logger.js +155 -0
  429. package/dist/src/hooks/security-logger.js.map +7 -0
  430. package/dist/src/hooks/session-summary.js +222 -0
  431. package/dist/src/hooks/session-summary.js.map +7 -0
  432. package/dist/src/hooks/sms-action-runner.js +371 -0
  433. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  434. package/dist/src/hooks/sms-notify.js +506 -0
  435. package/dist/src/hooks/sms-notify.js.map +7 -0
  436. package/dist/src/hooks/sms-watcher.js +93 -0
  437. package/dist/src/hooks/sms-watcher.js.map +7 -0
  438. package/dist/src/hooks/sms-webhook.js +555 -0
  439. package/dist/src/hooks/sms-webhook.js.map +7 -0
  440. package/dist/src/hooks/whatsapp-commands.js +479 -0
  441. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  442. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  443. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  444. package/dist/src/hooks/whatsapp-sync.js +409 -0
  445. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  446. package/dist/src/index.js +25 -0
  447. package/dist/src/index.js.map +7 -0
  448. package/dist/src/integrations/anthropic/client.js +263 -0
  449. package/dist/src/integrations/anthropic/client.js.map +7 -0
  450. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  451. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  452. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  453. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  454. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  455. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  456. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  457. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  458. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  459. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  460. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  461. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  462. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  463. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  464. package/dist/src/integrations/linear/auth.js +337 -0
  465. package/dist/src/integrations/linear/auth.js.map +7 -0
  466. package/dist/src/integrations/linear/auto-sync.js +258 -0
  467. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  468. package/dist/src/integrations/linear/client.js +634 -0
  469. package/dist/src/integrations/linear/client.js.map +7 -0
  470. package/dist/src/integrations/linear/config.js +130 -0
  471. package/dist/src/integrations/linear/config.js.map +7 -0
  472. package/dist/src/integrations/linear/migration.js +361 -0
  473. package/dist/src/integrations/linear/migration.js.map +7 -0
  474. package/dist/src/integrations/linear/oauth-server.js +454 -0
  475. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  476. package/dist/src/integrations/linear/rest-client.js +213 -0
  477. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  478. package/dist/src/integrations/linear/sync-manager.js +236 -0
  479. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  480. package/dist/src/integrations/linear/sync-service.js +231 -0
  481. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  482. package/dist/src/integrations/linear/sync.js +782 -0
  483. package/dist/src/integrations/linear/sync.js.map +7 -0
  484. package/dist/src/integrations/linear/types.js +5 -0
  485. package/dist/src/integrations/linear/types.js.map +7 -0
  486. package/dist/src/integrations/linear/unified-sync.js +589 -0
  487. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  488. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  489. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  490. package/dist/src/integrations/linear/webhook-server.js +218 -0
  491. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  492. package/dist/src/integrations/linear/webhook.js +291 -0
  493. package/dist/src/integrations/linear/webhook.js.map +7 -0
  494. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  495. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  496. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  497. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  498. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  499. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  500. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  501. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  502. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  503. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  504. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  505. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  506. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  507. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  508. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  509. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  510. package/dist/src/integrations/mcp/index.js +23 -0
  511. package/dist/src/integrations/mcp/index.js.map +7 -0
  512. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  513. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  514. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  515. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  516. package/dist/src/integrations/mcp/remote-server.js +682 -0
  517. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  518. package/dist/src/integrations/mcp/schemas.js +147 -0
  519. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  520. package/dist/src/integrations/mcp/server.js +1975 -0
  521. package/dist/src/integrations/mcp/server.js.map +7 -0
  522. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  523. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  524. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  525. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  526. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  527. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  528. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  529. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  530. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  531. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  532. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  533. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  534. package/dist/src/integrations/ralph/index.js +18 -0
  535. package/dist/src/integrations/ralph/index.js.map +7 -0
  536. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  537. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  538. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  539. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  540. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  541. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  542. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  543. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  544. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  545. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  546. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  547. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  548. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  549. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  550. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  551. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  552. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  553. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  554. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  555. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  556. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  557. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  558. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  559. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  560. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  561. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  562. package/dist/src/integrations/ralph/types.js +5 -0
  563. package/dist/src/integrations/ralph/types.js.map +7 -0
  564. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  565. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  566. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  567. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  568. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  569. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  570. package/dist/src/models/user.model.js +358 -0
  571. package/dist/src/models/user.model.js.map +7 -0
  572. package/dist/src/servers/production/auth-middleware.js +528 -0
  573. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  574. package/dist/src/services/config-service.js +65 -0
  575. package/dist/src/services/config-service.js.map +7 -0
  576. package/dist/src/services/context-service.js +194 -0
  577. package/dist/src/services/context-service.js.map +7 -0
  578. package/dist/src/skills/api-discovery.js +354 -0
  579. package/dist/src/skills/api-discovery.js.map +7 -0
  580. package/dist/src/skills/api-skill.js +475 -0
  581. package/dist/src/skills/api-skill.js.map +7 -0
  582. package/dist/src/skills/claude-skills.js +1061 -0
  583. package/dist/src/skills/claude-skills.js.map +7 -0
  584. package/dist/src/skills/dashboard-launcher.js +216 -0
  585. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  586. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  587. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  588. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  589. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  590. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  591. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  592. package/dist/src/types/task.js +5 -0
  593. package/dist/src/types/task.js.map +7 -0
  594. package/dist/src/utils/env.js +50 -0
  595. package/dist/src/utils/env.js.map +7 -0
  596. package/dist/src/utils/formatting.js +62 -0
  597. package/dist/src/utils/formatting.js.map +7 -0
  598. package/dist/src/utils/process-cleanup.js +136 -0
  599. package/dist/src/utils/process-cleanup.js.map +7 -0
  600. package/package.json +4 -3
  601. package/scripts/create-cleanup-issues.js +302 -0
  602. package/scripts/demos/browser-test.ts +39 -0
  603. package/scripts/demos/ralph-integration-demo.ts +244 -0
  604. package/scripts/demos/trace-demo.ts +214 -0
  605. package/scripts/demos/trace-detector.demo.ts +171 -0
  606. package/scripts/demos/trace-test.ts +67 -0
  607. package/scripts/initialize.ts +16 -7
  608. package/scripts/install.sh +14 -62
  609. package/scripts/status.ts +111 -46
  610. package/scripts/test-claude-config.sh +123 -0
  611. package/scripts/validate-claude-config.sh +155 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/test-redis-storage.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env tsx\n/**\n * Test script for Redis trace storage\n * Tests the 3-tier storage system with Redis hot tier\n */\n\nimport { createClient } from 'redis';\nimport Database from 'better-sqlite3';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { join } from 'path';\nimport { existsSync, mkdirSync } from 'fs';\nimport { RailwayOptimizedStorage } from '../src/core/storage/railway-optimized-storage.js';\nimport { ConfigManager } from '../src/core/config/config-manager.js';\nimport { Trace, TraceType, ToolCall } from '../src/core/trace/types.js';\n\n// Load environment variables\nimport dotenv from 'dotenv';\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\ndotenv.config();\n\nasync function testRedisConnection() {\n const spinner = ora('Testing Redis connection...').start();\n\n try {\n const redisUrl = process.env['REDIS_URL'] || 'redis://localhost:6379';\n console.log(\n chalk.gray(\n ` Using Redis URL: ${redisUrl.replace(/:[^:@]+@/, ':****@')})`\n )\n );\n const client = createClient({ url: redisUrl });\n\n await client.connect();\n\n // Test basic operations\n const testKey = 'test:connection';\n await client.set(testKey, 'connected');\n const result = await client.get(testKey);\n await client.del(testKey);\n\n if (result === 'connected') {\n spinner.succeed(`Redis connected successfully at ${redisUrl}`);\n\n // Get Redis info\n const info = await client.info('memory');\n const memoryUsed = info.match(/used_memory_human:(\\S+)/)?.[1];\n console.log(chalk.gray(` Memory used: ${memoryUsed || 'unknown'}`));\n } else {\n spinner.fail('Redis connection test failed');\n return false;\n }\n\n await client.quit();\n return true;\n } catch (error: unknown) {\n spinner.fail(`Redis connection failed: ${error}`);\n return false;\n }\n}\n\nfunction createMockTrace(index: number): Trace {\n const now = Date.now() - index * 60 * 60 * 1000; // Offset by hours\n const tools: ToolCall[] = [\n {\n id: uuidv4(),\n tool: 'search',\n timestamp: now,\n arguments: { query: `test query ${index}` },\n filesAffected: ['src/test.ts', 'src/index.ts'],\n },\n {\n id: uuidv4(),\n tool: 'read',\n timestamp: now + 1000,\n arguments: { file: 'src/test.ts' },\n result: 'file contents',\n },\n {\n id: uuidv4(),\n tool: 'edit',\n timestamp: now + 2000,\n arguments: { file: 'src/test.ts', changes: 'some changes' },\n filesAffected: ['src/test.ts'],\n },\n {\n id: uuidv4(),\n tool: 'test',\n timestamp: now + 3000,\n arguments: { command: 'npm test' },\n result: 'tests passed',\n },\n ];\n\n const trace: Trace = {\n id: uuidv4(),\n type: TraceType.SEARCH_DRIVEN,\n tools,\n score: 0.5 + Math.random() * 0.5, // Random score 0.5-1.0\n summary: `Test trace #${index}: Search-driven modification`,\n metadata: {\n startTime: now,\n endTime: now + 4000,\n filesModified: ['src/test.ts'],\n errorsEncountered: index % 3 === 0 ? ['Test error'] : [],\n decisionsRecorded: index % 2 === 0 ? ['Use async pattern'] : [],\n causalChain: index % 3 === 0,\n },\n };\n\n return trace;\n}\n\nasync function testStorageOperations() {\n console.log(chalk.blue('\\n\uD83D\uDCE6 Testing Storage Operations'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n\n // Setup database\n const dbDir = join(process.cwd(), '.stackmemory');\n if (!existsSync(dbDir)) {\n mkdirSync(dbDir, { recursive: true });\n }\n\n const dbPath = join(dbDir, 'test-context.db');\n const db = new Database(dbPath);\n\n // Initialize trace tables\n db.exec(`\n CREATE TABLE IF NOT EXISTS traces (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n score REAL NOT NULL,\n summary TEXT NOT NULL,\n start_time INTEGER NOT NULL,\n end_time INTEGER NOT NULL,\n frame_id TEXT,\n user_id TEXT,\n files_modified TEXT,\n errors_encountered TEXT,\n decisions_recorded TEXT,\n causal_chain INTEGER,\n compressed_data TEXT,\n created_at INTEGER DEFAULT (unixepoch())\n )\n `);\n\n db.exec(`\n CREATE TABLE IF NOT EXISTS tool_calls (\n id TEXT PRIMARY KEY,\n trace_id TEXT NOT NULL,\n tool TEXT NOT NULL,\n arguments TEXT,\n timestamp INTEGER NOT NULL,\n result TEXT,\n error TEXT,\n files_affected TEXT,\n duration INTEGER,\n sequence_number INTEGER NOT NULL,\n FOREIGN KEY (trace_id) REFERENCES traces(id) ON DELETE CASCADE\n )\n `);\n\n // Create storage_tiers table required by RailwayOptimizedStorage\n db.exec(`\n CREATE TABLE IF NOT EXISTS storage_tiers (\n trace_id TEXT PRIMARY KEY,\n tier TEXT NOT NULL,\n location TEXT NOT NULL,\n original_size INTEGER,\n compressed_size INTEGER,\n compression_ratio REAL,\n access_count INTEGER DEFAULT 0,\n last_accessed INTEGER DEFAULT (unixepoch()),\n created_at INTEGER DEFAULT (unixepoch()),\n migrated_at INTEGER,\n score REAL,\n migration_score REAL,\n metadata TEXT,\n FOREIGN KEY (trace_id) REFERENCES traces(id) ON DELETE CASCADE\n )\n `);\n\n // Create indexes for storage_tiers\n db.exec(`\n CREATE INDEX IF NOT EXISTS idx_storage_tier ON storage_tiers(tier);\n CREATE INDEX IF NOT EXISTS idx_storage_created ON storage_tiers(created_at);\n CREATE INDEX IF NOT EXISTS idx_storage_accessed ON storage_tiers(last_accessed);\n `);\n\n const configManager = new ConfigManager();\n\n // Initialize storage with Redis URL from environment\n const storage = new RailwayOptimizedStorage(db, configManager, {\n redis: {\n url: process.env['REDIS_URL'],\n ttlSeconds: 24 * 60 * 60, // 24 hours\n maxMemory: '100mb',\n },\n });\n\n // Test storing traces\n const traces: Trace[] = [];\n const results: { id: string; tier: string; score: number }[] = [];\n\n console.log(chalk.yellow('\\n\u270F\uFE0F Creating and storing test traces...'));\n\n for (let i = 0; i < 10; i++) {\n const trace = createMockTrace(i);\n traces.push(trace);\n\n const spinner = ora(`Storing trace #${i + 1}...`).start();\n\n try {\n // First insert the trace into the traces table\n const insertTrace = db.prepare(`\n INSERT INTO traces (\n id, type, score, summary, start_time, end_time,\n files_modified, errors_encountered, decisions_recorded, causal_chain,\n created_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n insertTrace.run(\n trace.id,\n trace.type,\n trace.score,\n trace.summary,\n trace.metadata.startTime,\n trace.metadata.endTime,\n JSON.stringify(trace.metadata.filesModified || []),\n JSON.stringify(trace.metadata.errorsEncountered || []),\n JSON.stringify(trace.metadata.decisionsRecorded || []),\n trace.metadata.causalChain ? 1 : 0,\n Date.now()\n );\n\n // Insert tool calls\n const insertToolCall = db.prepare(`\n INSERT INTO tool_calls (\n id, trace_id, tool, arguments, timestamp, result, files_affected, sequence_number\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n trace.tools.forEach((tool, index) => {\n insertToolCall.run(\n tool.id,\n trace.id,\n tool.tool,\n JSON.stringify(tool.arguments),\n tool.timestamp,\n tool.result || null,\n JSON.stringify(tool.filesAffected || []),\n index\n );\n });\n\n // Now store in tiered storage\n const tier = await storage.storeTrace(trace);\n results.push({ id: trace.id, tier, score: trace.score });\n\n const tierIcon = tier === 'hot' ? '\uD83D\uDD25' : tier === 'warm' ? '\u2601\uFE0F' : '\u2744\uFE0F';\n spinner.succeed(\n `Trace #${i + 1} stored in ${tierIcon} ${tier} tier (score: ${trace.score.toFixed(2)})`\n );\n } catch (error: unknown) {\n spinner.fail(`Failed to store trace #${i + 1}: ${error}`);\n }\n\n // Small delay\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n // Test retrieval\n console.log(chalk.yellow('\\n\uD83D\uDD0D Testing trace retrieval...'));\n\n for (let i = 0; i < 3; i++) {\n const result = results[i];\n const spinner = ora(\n `Retrieving trace ${result.id.substring(0, 8)}...`\n ).start();\n\n try {\n const retrieved = await storage.retrieveTrace(result.id);\n\n if (retrieved) {\n spinner.succeed(\n `Retrieved from ${result.tier} tier: ${retrieved.summary}`\n );\n } else {\n spinner.fail('Trace not found');\n }\n } catch (error: unknown) {\n spinner.fail(`Retrieval failed: ${error}`);\n }\n }\n\n // Get storage statistics\n console.log(chalk.yellow('\\n\uD83D\uDCCA Storage Statistics:'));\n\n const stats = storage.getStorageStats();\n\n console.log(chalk.gray('\u2501'.repeat(50)));\n for (const tier of stats.byTier) {\n const icon =\n tier.tier === 'hot' ? '\uD83D\uDD25' : tier.tier === 'warm' ? '\u2601\uFE0F' : '\u2744\uFE0F';\n console.log(`${icon} ${chalk.bold(tier.tier.toUpperCase())} Tier:`);\n console.log(` Traces: ${tier.count}`);\n console.log(` Original Size: ${formatBytes(tier.total_original || 0)}`);\n console.log(` Compressed: ${formatBytes(tier.total_compressed || 0)}`);\n if (tier.avg_compression) {\n console.log(\n ` Compression: ${(tier.avg_compression * 100).toFixed(1)}%`\n );\n }\n }\n\n // Test Redis-specific operations\n console.log(chalk.yellow('\\n\uD83D\uDD25 Testing Redis Hot Tier...'));\n\n const redisClient = createClient({ url: process.env['REDIS_URL'] });\n await redisClient.connect();\n\n // Check stored traces in Redis\n const keys = await redisClient.keys('trace:*');\n console.log(` Traces in Redis: ${chalk.green(keys.length)}`);\n\n // Check sorted sets\n const byScore = await redisClient.zCard('traces:by_score');\n const byTime = await redisClient.zCard('traces:by_time');\n console.log(` Score index: ${chalk.green(byScore)} entries`);\n console.log(` Time index: ${chalk.green(byTime)} entries`);\n\n // Get top traces by score\n const topTraces = await redisClient.zRangeWithScores(\n 'traces:by_score',\n -3,\n -1\n );\n if (topTraces.length > 0) {\n console.log(chalk.yellow('\\n\uD83C\uDFC6 Top Traces by Score:'));\n for (const trace of topTraces.reverse()) {\n console.log(\n ` ${trace.value.substring(0, 8)}... - Score: ${trace.score.toFixed(3)}`\n );\n }\n }\n\n // Memory usage\n const memInfo = await redisClient.memoryUsage('trace:' + results[0]?.id);\n if (memInfo) {\n console.log(chalk.yellow('\\n\uD83D\uDCBE Memory Usage:'));\n console.log(` Sample trace memory: ${formatBytes(memInfo)}`);\n console.log(` Estimated total: ${formatBytes(memInfo * keys.length)}`);\n }\n\n await redisClient.quit();\n\n // Test migration\n console.log(chalk.yellow('\\n\uD83D\uDD04 Testing tier migration...'));\n\n const migrationResults = await storage.migrateTiers();\n console.log(\n ` Hot \u2192 Warm: ${chalk.yellow(migrationResults.hotToWarm)} traces`\n );\n console.log(\n ` Warm \u2192 Cold: ${chalk.cyan(migrationResults.warmToCold)} traces`\n );\n if (migrationResults.errors.length > 0) {\n console.log(chalk.red(` Errors: ${migrationResults.errors.length}`));\n }\n\n // Cleanup\n db.close();\n\n console.log(chalk.green('\\n\u2705 Storage tests completed successfully!'));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;\n}\n\nasync function main() {\n console.log(chalk.blue.bold('\\n\uD83E\uDDEA StackMemory Redis Storage Test\\n'));\n\n // Test Redis connection\n const redisConnected = await testRedisConnection();\n\n if (!redisConnected) {\n console.log(chalk.red('\\n\u274C Cannot proceed without Redis connection'));\n console.log(chalk.yellow('\\nTo fix:'));\n console.log('1. Ensure Redis is running');\n console.log('2. Check REDIS_URL in .env file');\n console.log('3. For Railway: Ensure Redis addon is provisioned');\n process.exit(1);\n }\n\n // Test storage operations\n await testStorageOperations();\n\n // Interactive test\n console.log(chalk.blue('\\n\uD83C\uDFAE Interactive Test'));\n console.log(chalk.gray('\u2501'.repeat(50)));\n console.log(\n chalk.cyan('You can now use the CLI to interact with the stored traces:')\n );\n console.log();\n console.log(\n ' ' +\n chalk.white('stackmemory storage status') +\n ' - View storage statistics'\n );\n console.log(\n ' ' +\n chalk.white('stackmemory storage migrate') +\n ' - Migrate traces between tiers'\n );\n console.log(\n ' ' +\n chalk.white('stackmemory storage retrieve <id>') +\n ' - Retrieve a specific trace'\n );\n console.log();\n console.log(chalk.gray('Trace IDs from this test:'));\n\n // Show first 3 trace IDs for testing\n const dbPath = join(process.cwd(), '.stackmemory', 'test-context.db');\n const db = new Database(dbPath);\n\n // Make sure storage_tiers table exists before querying\n db.exec(`\n CREATE TABLE IF NOT EXISTS storage_tiers (\n trace_id TEXT PRIMARY KEY,\n tier TEXT NOT NULL,\n location TEXT NOT NULL,\n original_size INTEGER,\n compressed_size INTEGER,\n compression_ratio REAL,\n access_count INTEGER DEFAULT 0,\n last_accessed INTEGER DEFAULT (unixepoch()),\n created_at INTEGER DEFAULT (unixepoch()),\n migrated_at INTEGER,\n score REAL,\n migration_score REAL,\n metadata TEXT\n )\n `);\n\n const recentTraces = db\n .prepare(\n `\n SELECT trace_id, tier FROM storage_tiers \n ORDER BY created_at DESC LIMIT 3\n `\n )\n .all() as Array<{ trace_id: string; tier: string }>;\n\n for (const trace of recentTraces) {\n const tierIcon =\n trace.tier === 'hot' ? '\uD83D\uDD25' : trace.tier === 'warm' ? '\u2601\uFE0F' : '\u2744\uFE0F';\n console.log(` ${tierIcon} ${trace.trace_id}`);\n }\n\n db.close();\n\n console.log(chalk.green('\\n\u2728 Test complete!'));\n}\n\n// Run the test\nmain().catch((error) => {\n console.error(chalk.red('Test failed:'), error);\n process.exit(1);\n});\n"],
5
+ "mappings": ";;;;;AAMA,SAAS,oBAAoB;AAC7B,OAAO,cAAc;AACrB,SAAS,MAAM,cAAc;AAC7B,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,SAAS,YAAY;AACrB,SAAS,YAAY,iBAAiB;AACtC,SAAS,+BAA+B;AACxC,SAAS,qBAAqB;AAC9B,SAAgB,iBAA2B;AAG3C,OAAO,YAAY;AAEnB,SAAS,OAAO,KAAa,cAA+B;AAC1D,QAAM,QAAQ,QAAQ,IAAI,GAAG;AAC7B,MAAI,UAAU,QAAW;AACvB,QAAI,iBAAiB,OAAW,QAAO;AACvC,UAAM,IAAI,MAAM,wBAAwB,GAAG,cAAc;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,SAAS,eAAe,KAAiC;AACvD,SAAO,QAAQ,IAAI,GAAG;AACxB;AAEA,OAAO,OAAO;AAEd,eAAe,sBAAsB;AACnC,QAAM,UAAU,IAAI,6BAA6B,EAAE,MAAM;AAEzD,MAAI;AACF,UAAM,WAAW,QAAQ,IAAI,WAAW,KAAK;AAC7C,YAAQ;AAAA,MACN,MAAM;AAAA,QACJ,sBAAsB,SAAS,QAAQ,YAAY,QAAQ,CAAC;AAAA,MAC9D;AAAA,IACF;AACA,UAAM,SAAS,aAAa,EAAE,KAAK,SAAS,CAAC;AAE7C,UAAM,OAAO,QAAQ;AAGrB,UAAM,UAAU;AAChB,UAAM,OAAO,IAAI,SAAS,WAAW;AACrC,UAAM,SAAS,MAAM,OAAO,IAAI,OAAO;AACvC,UAAM,OAAO,IAAI,OAAO;AAExB,QAAI,WAAW,aAAa;AAC1B,cAAQ,QAAQ,mCAAmC,QAAQ,EAAE;AAG7D,YAAM,OAAO,MAAM,OAAO,KAAK,QAAQ;AACvC,YAAM,aAAa,KAAK,MAAM,yBAAyB,IAAI,CAAC;AAC5D,cAAQ,IAAI,MAAM,KAAK,kBAAkB,cAAc,SAAS,EAAE,CAAC;AAAA,IACrE,OAAO;AACL,cAAQ,KAAK,8BAA8B;AAC3C,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,KAAK;AAClB,WAAO;AAAA,EACT,SAAS,OAAgB;AACvB,YAAQ,KAAK,4BAA4B,KAAK,EAAE;AAChD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,OAAsB;AAC7C,QAAM,MAAM,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK;AAC3C,QAAM,QAAoB;AAAA,IACxB;AAAA,MACE,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,WAAW;AAAA,MACX,WAAW,EAAE,OAAO,cAAc,KAAK,GAAG;AAAA,MAC1C,eAAe,CAAC,eAAe,cAAc;AAAA,IAC/C;AAAA,IACA;AAAA,MACE,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,EAAE,MAAM,cAAc;AAAA,MACjC,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACE,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,EAAE,MAAM,eAAe,SAAS,eAAe;AAAA,MAC1D,eAAe,CAAC,aAAa;AAAA,IAC/B;AAAA,IACA;AAAA,MACE,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,EAAE,SAAS,WAAW;AAAA,MACjC,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,QAAe;AAAA,IACnB,IAAI,OAAO;AAAA,IACX,MAAM,UAAU;AAAA,IAChB;AAAA,IACA,OAAO,MAAM,KAAK,OAAO,IAAI;AAAA;AAAA,IAC7B,SAAS,eAAe,KAAK;AAAA,IAC7B,UAAU;AAAA,MACR,WAAW;AAAA,MACX,SAAS,MAAM;AAAA,MACf,eAAe,CAAC,aAAa;AAAA,MAC7B,mBAAmB,QAAQ,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC;AAAA,MACvD,mBAAmB,QAAQ,MAAM,IAAI,CAAC,mBAAmB,IAAI,CAAC;AAAA,MAC9D,aAAa,QAAQ,MAAM;AAAA,IAC7B;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,wBAAwB;AACrC,UAAQ,IAAI,MAAM,KAAK,wCAAiC,CAAC;AACzD,UAAQ,IAAI,MAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AAGtC,QAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG,cAAc;AAChD,MAAI,CAAC,WAAW,KAAK,GAAG;AACtB,cAAU,OAAO,EAAE,WAAW,KAAK,CAAC;AAAA,EACtC;AAEA,QAAM,SAAS,KAAK,OAAO,iBAAiB;AAC5C,QAAM,KAAK,IAAI,SAAS,MAAM;AAG9B,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBP;AAED,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAcP;AAGD,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBP;AAGD,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA,GAIP;AAED,QAAM,gBAAgB,IAAI,cAAc;AAGxC,QAAM,UAAU,IAAI,wBAAwB,IAAI,eAAe;AAAA,IAC7D,OAAO;AAAA,MACL,KAAK,QAAQ,IAAI,WAAW;AAAA,MAC5B,YAAY,KAAK,KAAK;AAAA;AAAA,MACtB,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAGD,QAAM,SAAkB,CAAC;AACzB,QAAM,UAAyD,CAAC;AAEhE,UAAQ,IAAI,MAAM,OAAO,qDAA2C,CAAC;AAErE,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,UAAM,QAAQ,gBAAgB,CAAC;AAC/B,WAAO,KAAK,KAAK;AAEjB,UAAM,UAAU,IAAI,kBAAkB,IAAI,CAAC,KAAK,EAAE,MAAM;AAExD,QAAI;AAEF,YAAM,cAAc,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAM9B;AAED,kBAAY;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,SAAS;AAAA,QACf,MAAM,SAAS;AAAA,QACf,KAAK,UAAU,MAAM,SAAS,iBAAiB,CAAC,CAAC;AAAA,QACjD,KAAK,UAAU,MAAM,SAAS,qBAAqB,CAAC,CAAC;AAAA,QACrD,KAAK,UAAU,MAAM,SAAS,qBAAqB,CAAC,CAAC;AAAA,QACrD,MAAM,SAAS,cAAc,IAAI;AAAA,QACjC,KAAK,IAAI;AAAA,MACX;AAGA,YAAM,iBAAiB,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA,OAIjC;AAED,YAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AACnC,uBAAe;AAAA,UACb,KAAK;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK,UAAU,KAAK,SAAS;AAAA,UAC7B,KAAK;AAAA,UACL,KAAK,UAAU;AAAA,UACf,KAAK,UAAU,KAAK,iBAAiB,CAAC,CAAC;AAAA,UACvC;AAAA,QACF;AAAA,MACF,CAAC;AAGD,YAAM,OAAO,MAAM,QAAQ,WAAW,KAAK;AAC3C,cAAQ,KAAK,EAAE,IAAI,MAAM,IAAI,MAAM,OAAO,MAAM,MAAM,CAAC;AAEvD,YAAM,WAAW,SAAS,QAAQ,cAAO,SAAS,SAAS,iBAAO;AAClE,cAAQ;AAAA,QACN,UAAU,IAAI,CAAC,cAAc,QAAQ,IAAI,IAAI,iBAAiB,MAAM,MAAM,QAAQ,CAAC,CAAC;AAAA,MACtF;AAAA,IACF,SAAS,OAAgB;AACvB,cAAQ,KAAK,0BAA0B,IAAI,CAAC,KAAK,KAAK,EAAE;AAAA,IAC1D;AAGA,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAAA,EACzD;AAGA,UAAQ,IAAI,MAAM,OAAO,wCAAiC,CAAC;AAE3D,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,SAAS,QAAQ,CAAC;AACxB,UAAM,UAAU;AAAA,MACd,oBAAoB,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;AAAA,IAC/C,EAAE,MAAM;AAER,QAAI;AACF,YAAM,YAAY,MAAM,QAAQ,cAAc,OAAO,EAAE;AAEvD,UAAI,WAAW;AACb,gBAAQ;AAAA,UACN,kBAAkB,OAAO,IAAI,UAAU,UAAU,OAAO;AAAA,QAC1D;AAAA,MACF,OAAO;AACL,gBAAQ,KAAK,iBAAiB;AAAA,MAChC;AAAA,IACF,SAAS,OAAgB;AACvB,cAAQ,KAAK,qBAAqB,KAAK,EAAE;AAAA,IAC3C;AAAA,EACF;AAGA,UAAQ,IAAI,MAAM,OAAO,iCAA0B,CAAC;AAEpD,QAAM,QAAQ,QAAQ,gBAAgB;AAEtC,UAAQ,IAAI,MAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,aAAW,QAAQ,MAAM,QAAQ;AAC/B,UAAM,OACJ,KAAK,SAAS,QAAQ,cAAO,KAAK,SAAS,SAAS,iBAAO;AAC7D,YAAQ,IAAI,GAAG,IAAI,IAAI,MAAM,KAAK,KAAK,KAAK,YAAY,CAAC,CAAC,QAAQ;AAClE,YAAQ,IAAI,cAAc,KAAK,KAAK,EAAE;AACtC,YAAQ,IAAI,qBAAqB,YAAY,KAAK,kBAAkB,CAAC,CAAC,EAAE;AACxE,YAAQ,IAAI,kBAAkB,YAAY,KAAK,oBAAoB,CAAC,CAAC,EAAE;AACvE,QAAI,KAAK,iBAAiB;AACxB,cAAQ;AAAA,QACN,oBAAoB,KAAK,kBAAkB,KAAK,QAAQ,CAAC,CAAC;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAGA,UAAQ,IAAI,MAAM,OAAO,uCAAgC,CAAC;AAE1D,QAAM,cAAc,aAAa,EAAE,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;AAClE,QAAM,YAAY,QAAQ;AAG1B,QAAM,OAAO,MAAM,YAAY,KAAK,SAAS;AAC7C,UAAQ,IAAI,uBAAuB,MAAM,MAAM,KAAK,MAAM,CAAC,EAAE;AAG7D,QAAM,UAAU,MAAM,YAAY,MAAM,iBAAiB;AACzD,QAAM,SAAS,MAAM,YAAY,MAAM,gBAAgB;AACvD,UAAQ,IAAI,mBAAmB,MAAM,MAAM,OAAO,CAAC,UAAU;AAC7D,UAAQ,IAAI,kBAAkB,MAAM,MAAM,MAAM,CAAC,UAAU;AAG3D,QAAM,YAAY,MAAM,YAAY;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,UAAU,SAAS,GAAG;AACxB,YAAQ,IAAI,MAAM,OAAO,kCAA2B,CAAC;AACrD,eAAW,SAAS,UAAU,QAAQ,GAAG;AACvC,cAAQ;AAAA,QACN,MAAM,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,gBAAgB,MAAM,MAAM,QAAQ,CAAC,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAGA,QAAM,UAAU,MAAM,YAAY,YAAY,WAAW,QAAQ,CAAC,GAAG,EAAE;AACvE,MAAI,SAAS;AACX,YAAQ,IAAI,MAAM,OAAO,2BAAoB,CAAC;AAC9C,YAAQ,IAAI,2BAA2B,YAAY,OAAO,CAAC,EAAE;AAC7D,YAAQ,IAAI,uBAAuB,YAAY,UAAU,KAAK,MAAM,CAAC,EAAE;AAAA,EACzE;AAEA,QAAM,YAAY,KAAK;AAGvB,UAAQ,IAAI,MAAM,OAAO,uCAAgC,CAAC;AAE1D,QAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,UAAQ;AAAA,IACN,uBAAkB,MAAM,OAAO,iBAAiB,SAAS,CAAC;AAAA,EAC5D;AACA,UAAQ;AAAA,IACN,wBAAmB,MAAM,KAAK,iBAAiB,UAAU,CAAC;AAAA,EAC5D;AACA,MAAI,iBAAiB,OAAO,SAAS,GAAG;AACtC,YAAQ,IAAI,MAAM,IAAI,cAAc,iBAAiB,OAAO,MAAM,EAAE,CAAC;AAAA,EACvE;AAGA,KAAG,MAAM;AAET,UAAQ,IAAI,MAAM,MAAM,gDAA2C,CAAC;AACtE;AAEA,SAAS,YAAY,OAAuB;AAC1C,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,IAAI;AACV,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,IAAI;AACpC,QAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,SAAO,IAAI,QAAQ,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAC3D;AAEA,eAAe,OAAO;AACpB,UAAQ,IAAI,MAAM,KAAK,KAAK,8CAAuC,CAAC;AAGpE,QAAM,iBAAiB,MAAM,oBAAoB;AAEjD,MAAI,CAAC,gBAAgB;AACnB,YAAQ,IAAI,MAAM,IAAI,kDAA6C,CAAC;AACpE,YAAQ,IAAI,MAAM,OAAO,WAAW,CAAC;AACrC,YAAQ,IAAI,4BAA4B;AACxC,YAAQ,IAAI,iCAAiC;AAC7C,YAAQ,IAAI,mDAAmD;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,sBAAsB;AAG5B,UAAQ,IAAI,MAAM,KAAK,8BAAuB,CAAC;AAC/C,UAAQ,IAAI,MAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,UAAQ;AAAA,IACN,MAAM,KAAK,6DAA6D;AAAA,EAC1E;AACA,UAAQ,IAAI;AACZ,UAAQ;AAAA,IACN,OACE,MAAM,MAAM,4BAA4B,IACxC;AAAA,EACJ;AACA,UAAQ;AAAA,IACN,OACE,MAAM,MAAM,6BAA6B,IACzC;AAAA,EACJ;AACA,UAAQ;AAAA,IACN,OACE,MAAM,MAAM,mCAAmC,IAC/C;AAAA,EACJ;AACA,UAAQ,IAAI;AACZ,UAAQ,IAAI,MAAM,KAAK,2BAA2B,CAAC;AAGnD,QAAM,SAAS,KAAK,QAAQ,IAAI,GAAG,gBAAgB,iBAAiB;AACpE,QAAM,KAAK,IAAI,SAAS,MAAM;AAG9B,KAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBP;AAED,QAAM,eAAe,GAClB;AAAA,IACC;AAAA;AAAA;AAAA;AAAA,EAIF,EACC,IAAI;AAEP,aAAW,SAAS,cAAc;AAChC,UAAM,WACJ,MAAM,SAAS,QAAQ,cAAO,MAAM,SAAS,SAAS,iBAAO;AAC/D,YAAQ,IAAI,KAAK,QAAQ,IAAI,MAAM,QAAQ,EAAE;AAAA,EAC/C;AAEA,KAAG,MAAM;AAET,UAAQ,IAAI,MAAM,MAAM,yBAAoB,CAAC;AAC/C;AAGA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,MAAM,MAAM,IAAI,cAAc,GAAG,KAAK;AAC9C,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env npx tsx
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import "dotenv/config";
7
+ import * as fs from "fs/promises";
8
+ import * as path from "path";
9
+ import { existsSync } from "fs";
10
+ const RALPH_DIR = "./.ralph-test";
11
+ async function saveLoopState(state) {
12
+ await fs.writeFile(
13
+ path.join(RALPH_DIR, "state.json"),
14
+ JSON.stringify(state, null, 2)
15
+ );
16
+ await fs.writeFile(
17
+ path.join(RALPH_DIR, "iteration.txt"),
18
+ state.iteration.toString()
19
+ );
20
+ console.log(
21
+ ` Saved state: iteration=${state.iteration}, status=${state.status}`
22
+ );
23
+ }
24
+ async function loadState() {
25
+ const stateData = await fs.readFile(
26
+ path.join(RALPH_DIR, "state.json"),
27
+ "utf8"
28
+ );
29
+ const stateFile = JSON.parse(stateData);
30
+ const iterationData = await fs.readFile(
31
+ path.join(RALPH_DIR, "iteration.txt"),
32
+ "utf8"
33
+ );
34
+ const iterationFile = parseInt(iterationData.trim());
35
+ return { stateFile, iterationFile };
36
+ }
37
+ async function testStateSynchronization() {
38
+ try {
39
+ console.log("\u{1F9EA} Testing Ralph State Synchronization Fix...");
40
+ if (existsSync(RALPH_DIR)) {
41
+ await fs.rm(RALPH_DIR, { recursive: true });
42
+ }
43
+ await fs.mkdir(RALPH_DIR, { recursive: true });
44
+ const state = {
45
+ loopId: "test-loop-123",
46
+ task: "Test state synchronization",
47
+ criteria: "state.json and iteration.txt should match",
48
+ iteration: 0,
49
+ status: "initialized",
50
+ startTime: Date.now(),
51
+ lastUpdateTime: Date.now()
52
+ };
53
+ console.log("\u{1F4CA} Testing initial state save...");
54
+ await saveLoopState(state);
55
+ const initial = await loadState();
56
+ console.log(` State file: iteration=${initial.stateFile.iteration}`);
57
+ console.log(` Iteration file: ${initial.iterationFile}`);
58
+ if (initial.stateFile.iteration === initial.iterationFile) {
59
+ console.log(" \u2705 Initial synchronization correct");
60
+ } else {
61
+ throw new Error("Initial state synchronization failed");
62
+ }
63
+ for (let i = 1; i <= 5; i++) {
64
+ console.log(`\u{1F504} Testing iteration ${i}...`);
65
+ state.iteration = i;
66
+ state.lastUpdateTime = Date.now();
67
+ state.status = i < 5 ? "running" : "completed";
68
+ await saveLoopState(state);
69
+ const current = await loadState();
70
+ console.log(` State file: iteration=${current.stateFile.iteration}`);
71
+ console.log(` Iteration file: ${current.iterationFile}`);
72
+ if (current.stateFile.iteration === current.iterationFile) {
73
+ console.log(` \u2705 Iteration ${i} synchronization correct`);
74
+ } else {
75
+ throw new Error(
76
+ `Iteration ${i} synchronization failed: state=${current.stateFile.iteration}, file=${current.iterationFile}`
77
+ );
78
+ }
79
+ }
80
+ console.log("\u{1F50D} Testing fix for old broken scenario...");
81
+ const brokenState = { ...state, iteration: 10 };
82
+ await fs.writeFile(
83
+ path.join(RALPH_DIR, "state.json"),
84
+ JSON.stringify(brokenState, null, 2)
85
+ );
86
+ await fs.writeFile(
87
+ path.join(RALPH_DIR, "iteration.txt"),
88
+ "0"
89
+ // Old broken state
90
+ );
91
+ console.log(" Created broken state: state.json=10, iteration.txt=0");
92
+ await saveLoopState(brokenState);
93
+ const fixed = await loadState();
94
+ if (fixed.stateFile.iteration === fixed.iterationFile && fixed.iterationFile === 10) {
95
+ console.log(" \u2705 Fixed broken state successfully");
96
+ } else {
97
+ throw new Error("Failed to fix broken state");
98
+ }
99
+ await fs.rm(RALPH_DIR, { recursive: true });
100
+ console.log("");
101
+ console.log("\u{1F389} Ralph state synchronization test completed successfully!");
102
+ console.log("");
103
+ console.log("\u2705 Fixed Issues:");
104
+ console.log(" - state.json and iteration.txt now stay synchronized");
105
+ console.log(" - saveLoopState() updates both files atomically");
106
+ console.log(" - Iteration counter properly increments in both files");
107
+ console.log(" - Old broken states can be fixed by re-saving");
108
+ console.log("");
109
+ } catch (error) {
110
+ console.error("\u274C Test failed:", error.message);
111
+ process.exit(1);
112
+ }
113
+ }
114
+ testStateSynchronization();
115
+ //# sourceMappingURL=test-simple-ralph-state-sync.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/test-simple-ralph-state-sync.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env npx tsx\n\n/**\n * Simple test to verify Ralph state synchronization fix\n * Tests just the state saving/loading functionality\n */\n\nimport 'dotenv/config';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { existsSync } from 'fs';\n\nconst RALPH_DIR = './.ralph-test';\n\n/**\n * Mock RalphLoopState for testing\n */\ninterface RalphLoopState {\n loopId: string;\n task: string;\n criteria: string;\n iteration: number;\n status: string;\n startTime: number;\n lastUpdateTime: number;\n}\n\n/**\n * Save loop state (same logic as in bridge)\n */\nasync function saveLoopState(state: RalphLoopState): Promise<void> {\n // Save state.json\n await fs.writeFile(\n path.join(RALPH_DIR, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n\n // Synchronize iteration.txt with current iteration\n await fs.writeFile(\n path.join(RALPH_DIR, 'iteration.txt'),\n state.iteration.toString()\n );\n\n console.log(\n ` Saved state: iteration=${state.iteration}, status=${state.status}`\n );\n}\n\n/**\n * Load state from files\n */\nasync function loadState(): Promise<{\n stateFile: RalphLoopState;\n iterationFile: number;\n}> {\n const stateData = await fs.readFile(\n path.join(RALPH_DIR, 'state.json'),\n 'utf8'\n );\n const stateFile = JSON.parse(stateData) as RalphLoopState;\n\n const iterationData = await fs.readFile(\n path.join(RALPH_DIR, 'iteration.txt'),\n 'utf8'\n );\n const iterationFile = parseInt(iterationData.trim());\n\n return { stateFile, iterationFile };\n}\n\nasync function testStateSynchronization() {\n try {\n console.log('\uD83E\uDDEA Testing Ralph State Synchronization Fix...');\n\n // Create test directory\n if (existsSync(RALPH_DIR)) {\n await fs.rm(RALPH_DIR, { recursive: true });\n }\n await fs.mkdir(RALPH_DIR, { recursive: true });\n\n // Create initial state\n const state: RalphLoopState = {\n loopId: 'test-loop-123',\n task: 'Test state synchronization',\n criteria: 'state.json and iteration.txt should match',\n iteration: 0,\n status: 'initialized',\n startTime: Date.now(),\n lastUpdateTime: Date.now(),\n };\n\n console.log('\uD83D\uDCCA Testing initial state save...');\n await saveLoopState(state);\n\n // Verify initial state\n const initial = await loadState();\n console.log(` State file: iteration=${initial.stateFile.iteration}`);\n console.log(` Iteration file: ${initial.iterationFile}`);\n\n if (initial.stateFile.iteration === initial.iterationFile) {\n console.log(' \u2705 Initial synchronization correct');\n } else {\n throw new Error('Initial state synchronization failed');\n }\n\n // Test iteration updates\n for (let i = 1; i <= 5; i++) {\n console.log(`\uD83D\uDD04 Testing iteration ${i}...`);\n\n state.iteration = i;\n state.lastUpdateTime = Date.now();\n state.status = i < 5 ? 'running' : 'completed';\n\n await saveLoopState(state);\n\n // Verify synchronization\n const current = await loadState();\n console.log(` State file: iteration=${current.stateFile.iteration}`);\n console.log(` Iteration file: ${current.iterationFile}`);\n\n if (current.stateFile.iteration === current.iterationFile) {\n console.log(` \u2705 Iteration ${i} synchronization correct`);\n } else {\n throw new Error(\n `Iteration ${i} synchronization failed: state=${current.stateFile.iteration}, file=${current.iterationFile}`\n );\n }\n }\n\n // Test the old broken scenario\n console.log('\uD83D\uDD0D Testing fix for old broken scenario...');\n\n // Simulate the old bug by manually creating mismatched files\n const brokenState = { ...state, iteration: 10 };\n await fs.writeFile(\n path.join(RALPH_DIR, 'state.json'),\n JSON.stringify(brokenState, null, 2)\n );\n await fs.writeFile(\n path.join(RALPH_DIR, 'iteration.txt'),\n '0' // Old broken state\n );\n\n console.log(' Created broken state: state.json=10, iteration.txt=0');\n\n // Fix it by saving properly\n await saveLoopState(brokenState);\n\n const fixed = await loadState();\n if (\n fixed.stateFile.iteration === fixed.iterationFile &&\n fixed.iterationFile === 10\n ) {\n console.log(' \u2705 Fixed broken state successfully');\n } else {\n throw new Error('Failed to fix broken state');\n }\n\n // Cleanup\n await fs.rm(RALPH_DIR, { recursive: true });\n\n console.log('');\n console.log('\uD83C\uDF89 Ralph state synchronization test completed successfully!');\n console.log('');\n console.log('\u2705 Fixed Issues:');\n console.log(' - state.json and iteration.txt now stay synchronized');\n console.log(' - saveLoopState() updates both files atomically');\n console.log(' - Iteration counter properly increments in both files');\n console.log(' - Old broken states can be fixed by re-saving');\n console.log('');\n } catch (error: unknown) {\n console.error('\u274C Test failed:', (error as Error).message);\n process.exit(1);\n }\n}\n\n// Run the test\ntestStateSynchronization();\n"],
5
+ "mappings": ";;;;;AAOA,OAAO;AACP,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,kBAAkB;AAE3B,MAAM,YAAY;AAkBlB,eAAe,cAAc,OAAsC;AAEjE,QAAM,GAAG;AAAA,IACP,KAAK,KAAK,WAAW,YAAY;AAAA,IACjC,KAAK,UAAU,OAAO,MAAM,CAAC;AAAA,EAC/B;AAGA,QAAM,GAAG;AAAA,IACP,KAAK,KAAK,WAAW,eAAe;AAAA,IACpC,MAAM,UAAU,SAAS;AAAA,EAC3B;AAEA,UAAQ;AAAA,IACN,6BAA6B,MAAM,SAAS,YAAY,MAAM,MAAM;AAAA,EACtE;AACF;AAKA,eAAe,YAGZ;AACD,QAAM,YAAY,MAAM,GAAG;AAAA,IACzB,KAAK,KAAK,WAAW,YAAY;AAAA,IACjC;AAAA,EACF;AACA,QAAM,YAAY,KAAK,MAAM,SAAS;AAEtC,QAAM,gBAAgB,MAAM,GAAG;AAAA,IAC7B,KAAK,KAAK,WAAW,eAAe;AAAA,IACpC;AAAA,EACF;AACA,QAAM,gBAAgB,SAAS,cAAc,KAAK,CAAC;AAEnD,SAAO,EAAE,WAAW,cAAc;AACpC;AAEA,eAAe,2BAA2B;AACxC,MAAI;AACF,YAAQ,IAAI,sDAA+C;AAG3D,QAAI,WAAW,SAAS,GAAG;AACzB,YAAM,GAAG,GAAG,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC5C;AACA,UAAM,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAG7C,UAAM,QAAwB;AAAA,MAC5B,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,WAAW,KAAK,IAAI;AAAA,MACpB,gBAAgB,KAAK,IAAI;AAAA,IAC3B;AAEA,YAAQ,IAAI,yCAAkC;AAC9C,UAAM,cAAc,KAAK;AAGzB,UAAM,UAAU,MAAM,UAAU;AAChC,YAAQ,IAAI,4BAA4B,QAAQ,UAAU,SAAS,EAAE;AACrE,YAAQ,IAAI,sBAAsB,QAAQ,aAAa,EAAE;AAEzD,QAAI,QAAQ,UAAU,cAAc,QAAQ,eAAe;AACzD,cAAQ,IAAI,2CAAsC;AAAA,IACpD,OAAO;AACL,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAGA,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,cAAQ,IAAI,+BAAwB,CAAC,KAAK;AAE1C,YAAM,YAAY;AAClB,YAAM,iBAAiB,KAAK,IAAI;AAChC,YAAM,SAAS,IAAI,IAAI,YAAY;AAEnC,YAAM,cAAc,KAAK;AAGzB,YAAM,UAAU,MAAM,UAAU;AAChC,cAAQ,IAAI,4BAA4B,QAAQ,UAAU,SAAS,EAAE;AACrE,cAAQ,IAAI,sBAAsB,QAAQ,aAAa,EAAE;AAEzD,UAAI,QAAQ,UAAU,cAAc,QAAQ,eAAe;AACzD,gBAAQ,IAAI,uBAAkB,CAAC,0BAA0B;AAAA,MAC3D,OAAO;AACL,cAAM,IAAI;AAAA,UACR,aAAa,CAAC,kCAAkC,QAAQ,UAAU,SAAS,UAAU,QAAQ,aAAa;AAAA,QAC5G;AAAA,MACF;AAAA,IACF;AAGA,YAAQ,IAAI,kDAA2C;AAGvD,UAAM,cAAc,EAAE,GAAG,OAAO,WAAW,GAAG;AAC9C,UAAM,GAAG;AAAA,MACP,KAAK,KAAK,WAAW,YAAY;AAAA,MACjC,KAAK,UAAU,aAAa,MAAM,CAAC;AAAA,IACrC;AACA,UAAM,GAAG;AAAA,MACP,KAAK,KAAK,WAAW,eAAe;AAAA,MACpC;AAAA;AAAA,IACF;AAEA,YAAQ,IAAI,yDAAyD;AAGrE,UAAM,cAAc,WAAW;AAE/B,UAAM,QAAQ,MAAM,UAAU;AAC9B,QACE,MAAM,UAAU,cAAc,MAAM,iBACpC,MAAM,kBAAkB,IACxB;AACA,cAAQ,IAAI,2CAAsC;AAAA,IACpD,OAAO;AACL,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAGA,UAAM,GAAG,GAAG,WAAW,EAAE,WAAW,KAAK,CAAC;AAE1C,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,oEAA6D;AACzE,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,sBAAiB;AAC7B,YAAQ,IAAI,yDAAyD;AACrE,YAAQ,IAAI,oDAAoD;AAChE,YAAQ,IAAI,0DAA0D;AACtE,YAAQ,IAAI,kDAAkD;AAC9D,YAAQ,IAAI,EAAE;AAAA,EAChB,SAAS,OAAgB;AACvB,YAAQ,MAAM,uBAAmB,MAAgB,OAAO;AACxD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,yBAAyB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env tsx
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import { SwarmCoordinator } from "../src/integrations/ralph/swarm/swarm-coordinator.js";
7
+ import { RalphStackMemoryBridge } from "../src/integrations/ralph/bridge/ralph-stackmemory-bridge.js";
8
+ import { GitWorkflowManager } from "../src/integrations/ralph/swarm/git-workflow-manager.js";
9
+ import { v4 as uuidv4 } from "uuid";
10
+ async function testDatabaseOptionalFix() {
11
+ console.log("\n1. Testing database optional fix...");
12
+ try {
13
+ const bridgeWithoutDb = new RalphStackMemoryBridge({
14
+ useStackMemory: false
15
+ // This should prevent database error
16
+ });
17
+ await bridgeWithoutDb.initialize({
18
+ task: "Test task without database",
19
+ criteria: "Test criteria"
20
+ });
21
+ console.log(
22
+ "\u2705 Bridge initialized successfully without database requirement"
23
+ );
24
+ } catch (error) {
25
+ console.error(
26
+ "\u274C Failed to initialize bridge without database:",
27
+ error.message
28
+ );
29
+ return false;
30
+ }
31
+ return true;
32
+ }
33
+ async function testGitBranchConflictFix() {
34
+ console.log("\n2. Testing git branch conflict fix...");
35
+ const gitManager = new GitWorkflowManager({
36
+ enableGitWorkflow: true,
37
+ branchStrategy: "agent"
38
+ });
39
+ const mockAgent = {
40
+ id: uuidv4(),
41
+ role: "developer",
42
+ status: "active",
43
+ capabilities: ["coding"],
44
+ workingDirectory: ".swarm/test",
45
+ currentTask: null,
46
+ performance: {
47
+ tasksCompleted: 0,
48
+ successRate: 1,
49
+ averageTaskTime: 0,
50
+ driftDetected: false,
51
+ lastFreshStart: Date.now()
52
+ },
53
+ coordination: {
54
+ communicationStyle: "collaborative",
55
+ conflictResolution: "defer_to_expertise",
56
+ collaborationPreferences: []
57
+ }
58
+ };
59
+ const mockTask = {
60
+ id: uuidv4(),
61
+ type: "implementation",
62
+ title: "implement-core-feature",
63
+ description: "Test task",
64
+ priority: 1,
65
+ estimatedEffort: "medium",
66
+ requiredRoles: ["developer"],
67
+ dependencies: [],
68
+ acceptanceCriteria: ["Test passes"]
69
+ };
70
+ try {
71
+ await gitManager.initializeAgentWorkflow(mockAgent, mockTask);
72
+ console.log("\u2705 First branch initialization successful");
73
+ await gitManager.initializeAgentWorkflow(mockAgent, mockTask);
74
+ console.log(
75
+ "\u2705 Second branch initialization handled existing branch gracefully"
76
+ );
77
+ } catch (error) {
78
+ console.error("\u274C Git branch conflict handling failed:", error.message);
79
+ return false;
80
+ }
81
+ return true;
82
+ }
83
+ async function testStopSwarmMethod() {
84
+ console.log("\n3. Testing stopSwarm method...");
85
+ const coordinator = new SwarmCoordinator({
86
+ maxAgents: 5,
87
+ coordinationInterval: 3e4
88
+ });
89
+ try {
90
+ if (typeof coordinator.stopSwarm !== "function") {
91
+ console.error("\u274C stopSwarm method does not exist");
92
+ return false;
93
+ }
94
+ await coordinator.stopSwarm();
95
+ console.log("\u2705 stopSwarm method executed successfully");
96
+ } catch (error) {
97
+ console.error("\u274C stopSwarm method failed:", error.message);
98
+ return false;
99
+ }
100
+ return true;
101
+ }
102
+ async function main() {
103
+ console.log("Testing Swarm Orchestration Fixes");
104
+ console.log("==================================");
105
+ let allTestsPassed = true;
106
+ const test1 = await testDatabaseOptionalFix();
107
+ allTestsPassed = allTestsPassed && test1;
108
+ const test2 = await testGitBranchConflictFix();
109
+ allTestsPassed = allTestsPassed && test2;
110
+ const test3 = await testStopSwarmMethod();
111
+ allTestsPassed = allTestsPassed && test3;
112
+ console.log("\n==================================");
113
+ if (allTestsPassed) {
114
+ console.log("\u2705 All tests passed! Fixes are working correctly.");
115
+ process.exit(0);
116
+ } else {
117
+ console.log("\u274C Some tests failed. Please review the fixes.");
118
+ process.exit(1);
119
+ }
120
+ }
121
+ main().catch((error) => {
122
+ console.error("Test script error:", error);
123
+ process.exit(1);
124
+ });
125
+ //# sourceMappingURL=test-swarm-fixes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/test-swarm-fixes.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env tsx\n/**\n * Test script to verify swarm orchestration fixes\n */\n\nimport { SwarmCoordinator } from '../src/integrations/ralph/swarm/swarm-coordinator.js';\nimport { RalphStackMemoryBridge } from '../src/integrations/ralph/bridge/ralph-stackmemory-bridge.js';\nimport { GitWorkflowManager } from '../src/integrations/ralph/swarm/git-workflow-manager.js';\nimport { Agent, SwarmTask } from '../src/integrations/ralph/types.js';\nimport { v4 as uuidv4 } from 'uuid';\n\nasync function testDatabaseOptionalFix() {\n console.log('\\n1. Testing database optional fix...');\n\n try {\n // Test 1: Create bridge WITHOUT database requirement\n const bridgeWithoutDb = new RalphStackMemoryBridge({\n useStackMemory: false, // This should prevent database error\n });\n\n await bridgeWithoutDb.initialize({\n task: 'Test task without database',\n criteria: 'Test criteria',\n });\n\n console.log(\n '\u2705 Bridge initialized successfully without database requirement'\n );\n } catch (error: any) {\n console.error(\n '\u274C Failed to initialize bridge without database:',\n error.message\n );\n return false;\n }\n\n return true;\n}\n\nasync function testGitBranchConflictFix() {\n console.log('\\n2. Testing git branch conflict fix...');\n\n const gitManager = new GitWorkflowManager({\n enableGitWorkflow: true,\n branchStrategy: 'agent',\n });\n\n const mockAgent: Agent = {\n id: uuidv4(),\n role: 'developer',\n status: 'active',\n capabilities: ['coding'],\n workingDirectory: '.swarm/test',\n currentTask: null,\n performance: {\n tasksCompleted: 0,\n successRate: 1.0,\n averageTaskTime: 0,\n driftDetected: false,\n lastFreshStart: Date.now(),\n },\n coordination: {\n communicationStyle: 'collaborative',\n conflictResolution: 'defer_to_expertise',\n collaborationPreferences: [],\n },\n };\n\n const mockTask: SwarmTask = {\n id: uuidv4(),\n type: 'implementation',\n title: 'implement-core-feature',\n description: 'Test task',\n priority: 1,\n estimatedEffort: 'medium',\n requiredRoles: ['developer'],\n dependencies: [],\n acceptanceCriteria: ['Test passes'],\n };\n\n try {\n // Initialize workflow twice with same agent/task (should handle existing branch)\n await gitManager.initializeAgentWorkflow(mockAgent, mockTask);\n console.log('\u2705 First branch initialization successful');\n\n // Try again with same task (should handle existing branch gracefully)\n await gitManager.initializeAgentWorkflow(mockAgent, mockTask);\n console.log(\n '\u2705 Second branch initialization handled existing branch gracefully'\n );\n } catch (error: any) {\n console.error('\u274C Git branch conflict handling failed:', error.message);\n return false;\n }\n\n return true;\n}\n\nasync function testStopSwarmMethod() {\n console.log('\\n3. Testing stopSwarm method...');\n\n const coordinator = new SwarmCoordinator({\n maxAgents: 5,\n coordinationInterval: 30000,\n });\n\n try {\n // Initialize coordinator (minimal setup for testing)\n // Note: We're just testing the method exists and runs without errors\n\n // Verify stopSwarm method exists\n if (typeof coordinator.stopSwarm !== 'function') {\n console.error('\u274C stopSwarm method does not exist');\n return false;\n }\n\n // Call stopSwarm (should handle empty state gracefully)\n await coordinator.stopSwarm();\n console.log('\u2705 stopSwarm method executed successfully');\n } catch (error: any) {\n console.error('\u274C stopSwarm method failed:', error.message);\n return false;\n }\n\n return true;\n}\n\nasync function main() {\n console.log('Testing Swarm Orchestration Fixes');\n console.log('==================================');\n\n let allTestsPassed = true;\n\n // Test 1: Database optional fix\n const test1 = await testDatabaseOptionalFix();\n allTestsPassed = allTestsPassed && test1;\n\n // Test 2: Git branch conflict fix\n const test2 = await testGitBranchConflictFix();\n allTestsPassed = allTestsPassed && test2;\n\n // Test 3: stopSwarm method\n const test3 = await testStopSwarmMethod();\n allTestsPassed = allTestsPassed && test3;\n\n // Summary\n console.log('\\n==================================');\n if (allTestsPassed) {\n console.log('\u2705 All tests passed! Fixes are working correctly.');\n process.exit(0);\n } else {\n console.log('\u274C Some tests failed. Please review the fixes.');\n process.exit(1);\n }\n}\n\n// Run tests\nmain().catch((error) => {\n console.error('Test script error:', error);\n process.exit(1);\n});\n"],
5
+ "mappings": ";;;;;AAKA,SAAS,wBAAwB;AACjC,SAAS,8BAA8B;AACvC,SAAS,0BAA0B;AAEnC,SAAS,MAAM,cAAc;AAE7B,eAAe,0BAA0B;AACvC,UAAQ,IAAI,uCAAuC;AAEnD,MAAI;AAEF,UAAM,kBAAkB,IAAI,uBAAuB;AAAA,MACjD,gBAAgB;AAAA;AAAA,IAClB,CAAC;AAED,UAAM,gBAAgB,WAAW;AAAA,MAC/B,MAAM;AAAA,MACN,UAAU;AAAA,IACZ,CAAC;AAED,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF,SAAS,OAAY;AACnB,YAAQ;AAAA,MACN;AAAA,MACA,MAAM;AAAA,IACR;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAe,2BAA2B;AACxC,UAAQ,IAAI,yCAAyC;AAErD,QAAM,aAAa,IAAI,mBAAmB;AAAA,IACxC,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,YAAmB;AAAA,IACvB,IAAI,OAAO;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc,CAAC,QAAQ;AAAA,IACvB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,gBAAgB,KAAK,IAAI;AAAA,IAC3B;AAAA,IACA,cAAc;AAAA,MACZ,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,0BAA0B,CAAC;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,WAAsB;AAAA,IAC1B,IAAI,OAAO;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe,CAAC,WAAW;AAAA,IAC3B,cAAc,CAAC;AAAA,IACf,oBAAoB,CAAC,aAAa;AAAA,EACpC;AAEA,MAAI;AAEF,UAAM,WAAW,wBAAwB,WAAW,QAAQ;AAC5D,YAAQ,IAAI,+CAA0C;AAGtD,UAAM,WAAW,wBAAwB,WAAW,QAAQ;AAC5D,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF,SAAS,OAAY;AACnB,YAAQ,MAAM,+CAA0C,MAAM,OAAO;AACrE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAe,sBAAsB;AACnC,UAAQ,IAAI,kCAAkC;AAE9C,QAAM,cAAc,IAAI,iBAAiB;AAAA,IACvC,WAAW;AAAA,IACX,sBAAsB;AAAA,EACxB,CAAC;AAED,MAAI;AAKF,QAAI,OAAO,YAAY,cAAc,YAAY;AAC/C,cAAQ,MAAM,wCAAmC;AACjD,aAAO;AAAA,IACT;AAGA,UAAM,YAAY,UAAU;AAC5B,YAAQ,IAAI,+CAA0C;AAAA,EACxD,SAAS,OAAY;AACnB,YAAQ,MAAM,mCAA8B,MAAM,OAAO;AACzD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,eAAe,OAAO;AACpB,UAAQ,IAAI,mCAAmC;AAC/C,UAAQ,IAAI,oCAAoC;AAEhD,MAAI,iBAAiB;AAGrB,QAAM,QAAQ,MAAM,wBAAwB;AAC5C,mBAAiB,kBAAkB;AAGnC,QAAM,QAAQ,MAAM,yBAAyB;AAC7C,mBAAiB,kBAAkB;AAGnC,QAAM,QAAQ,MAAM,oBAAoB;AACxC,mBAAiB,kBAAkB;AAGnC,UAAQ,IAAI,sCAAsC;AAClD,MAAI,gBAAgB;AAClB,YAAQ,IAAI,uDAAkD;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB,OAAO;AACL,YAAQ,IAAI,oDAA+C;AAC3D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,KAAK,EAAE,MAAM,CAAC,UAAU;AACtB,UAAQ,MAAM,sBAAsB,KAAK;AACzC,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env npx tsx
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import "dotenv/config";
7
+ import { SwarmTUI } from "../src/features/tui/swarm-monitor.js";
8
+ import { logger } from "../src/core/monitoring/logger.js";
9
+ async function testSwarmTUI() {
10
+ try {
11
+ console.log("\u{1F9BE} Starting Swarm TUI Test...");
12
+ const tui = new SwarmTUI();
13
+ await tui.initialize();
14
+ tui.start();
15
+ console.log("TUI should now be running. Press q to quit.");
16
+ } catch (error) {
17
+ logger.error("TUI test failed", error);
18
+ console.error("\u274C TUI test failed:", error.message);
19
+ process.exit(1);
20
+ }
21
+ }
22
+ testSwarmTUI();
23
+ //# sourceMappingURL=test-swarm-tui.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/test-swarm-tui.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env npx tsx\n\n/**\n * Test script for Swarm TUI monitoring\n * Launches the TUI with mock data for testing\n */\n\nimport 'dotenv/config';\nimport { SwarmTUI } from '../src/features/tui/swarm-monitor.js';\nimport { logger } from '../src/core/monitoring/logger.js';\n\nasync function testSwarmTUI() {\n try {\n console.log('\uD83E\uDDBE Starting Swarm TUI Test...');\n \n const tui = new SwarmTUI();\n \n // Initialize without swarm coordinator for testing\n await tui.initialize();\n \n // Start the TUI\n tui.start();\n \n console.log('TUI should now be running. Press q to quit.');\n \n } catch (error: unknown) {\n logger.error('TUI test failed', error as Error);\n console.error('\u274C TUI test failed:', (error as Error).message);\n process.exit(1);\n }\n}\n\n// Run the test\ntestSwarmTUI();"],
5
+ "mappings": ";;;;;AAOA,OAAO;AACP,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,eAAe,eAAe;AAC5B,MAAI;AACF,YAAQ,IAAI,sCAA+B;AAE3C,UAAM,MAAM,IAAI,SAAS;AAGzB,UAAM,IAAI,WAAW;AAGrB,QAAI,MAAM;AAEV,YAAQ,IAAI,6CAA6C;AAAA,EAE3D,SAAS,OAAgB;AACvB,WAAO,MAAM,mBAAmB,KAAc;AAC9C,YAAQ,MAAM,2BAAuB,MAAgB,OAAO;AAC5D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,aAAa;",
6
+ "names": []
7
+ }
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env npx tsx
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import "dotenv/config";
7
+ import { SwarmTUI } from "../src/features/tui/swarm-monitor.js";
8
+ import { logger } from "../src/core/monitoring/logger.js";
9
+ console.log("\u{1F9EA} TUI Shortcuts Test Guide");
10
+ console.log("============================");
11
+ console.log("");
12
+ console.log("This will launch the TUI. Test these keyboard shortcuts:");
13
+ console.log("");
14
+ console.log("\u{1F4CB} Test Checklist:");
15
+ console.log(" [ ] q - Quit TUI (should exit cleanly)");
16
+ console.log(" [ ] Esc - Alternative quit (should exit cleanly)");
17
+ console.log(" [ ] Ctrl+C - Force quit (should exit cleanly)");
18
+ console.log(' [ ] r - Refresh data (should show "Manual refresh triggered")');
19
+ console.log(" [ ] h - Show help (should display full help in logs)");
20
+ console.log(" [ ] c - Clear logs (should clear log area and show confirmation)");
21
+ console.log(" [ ] d - Detect swarms (should show registry status and process info)");
22
+ console.log(" [ ] s - Start swarm help (should show example commands)");
23
+ console.log(" [ ] t - Stop swarm (should show appropriate message)");
24
+ console.log("");
25
+ console.log("\u{1F3AF} Expected Behavior:");
26
+ console.log(" - All shortcuts should work without errors");
27
+ console.log(" - Log messages should appear in the bottom panel");
28
+ console.log(" - Help text should be comprehensive");
29
+ console.log(" - Detection should show registry and external processes");
30
+ console.log(" - Interface should remain responsive");
31
+ console.log("");
32
+ console.log("Press Enter to launch TUI...");
33
+ await new Promise((resolve) => {
34
+ process.stdin.once("data", resolve);
35
+ });
36
+ async function testTUIShortcuts() {
37
+ try {
38
+ console.log("\u{1F680} Launching TUI for shortcut testing...");
39
+ const tui = new SwarmTUI();
40
+ await tui.initialize();
41
+ tui.start();
42
+ console.log("\u2705 TUI launched successfully");
43
+ console.log("\u{1F4DD} Test each keyboard shortcut systematically");
44
+ console.log('\u{1F3C1} Use "q" to quit when testing is complete');
45
+ } catch (error) {
46
+ logger.error("TUI shortcuts test failed", error);
47
+ console.error("\u274C TUI shortcuts test failed:", error.message);
48
+ process.exit(1);
49
+ }
50
+ }
51
+ testTUIShortcuts();
52
+ //# sourceMappingURL=test-tui-shortcuts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/test-tui-shortcuts.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env npx tsx\n\n/**\n * Test script for TUI keyboard shortcuts\n * Tests all interactive features and key bindings\n */\n\nimport 'dotenv/config';\nimport { SwarmTUI } from '../src/features/tui/swarm-monitor.js';\nimport { logger } from '../src/core/monitoring/logger.js';\n\nconsole.log('\uD83E\uDDEA TUI Shortcuts Test Guide');\nconsole.log('============================');\nconsole.log('');\nconsole.log('This will launch the TUI. Test these keyboard shortcuts:');\nconsole.log('');\nconsole.log('\uD83D\uDCCB Test Checklist:');\nconsole.log(' [ ] q - Quit TUI (should exit cleanly)');\nconsole.log(' [ ] Esc - Alternative quit (should exit cleanly)');\nconsole.log(' [ ] Ctrl+C - Force quit (should exit cleanly)');\nconsole.log(' [ ] r - Refresh data (should show \"Manual refresh triggered\")');\nconsole.log(' [ ] h - Show help (should display full help in logs)');\nconsole.log(' [ ] c - Clear logs (should clear log area and show confirmation)');\nconsole.log(' [ ] d - Detect swarms (should show registry status and process info)');\nconsole.log(' [ ] s - Start swarm help (should show example commands)');\nconsole.log(' [ ] t - Stop swarm (should show appropriate message)');\nconsole.log('');\nconsole.log('\uD83C\uDFAF Expected Behavior:');\nconsole.log(' - All shortcuts should work without errors');\nconsole.log(' - Log messages should appear in the bottom panel');\nconsole.log(' - Help text should be comprehensive');\nconsole.log(' - Detection should show registry and external processes');\nconsole.log(' - Interface should remain responsive');\nconsole.log('');\nconsole.log('Press Enter to launch TUI...');\n\n// Wait for user input\nawait new Promise(resolve => {\n process.stdin.once('data', resolve);\n});\n\nasync function testTUIShortcuts() {\n try {\n console.log('\uD83D\uDE80 Launching TUI for shortcut testing...');\n \n const tui = new SwarmTUI();\n \n // Initialize TUI\n await tui.initialize();\n \n // Start the TUI\n tui.start();\n \n console.log('\u2705 TUI launched successfully');\n console.log('\uD83D\uDCDD Test each keyboard shortcut systematically');\n console.log('\uD83C\uDFC1 Use \"q\" to quit when testing is complete');\n \n } catch (error: unknown) {\n logger.error('TUI shortcuts test failed', error as Error);\n console.error('\u274C TUI shortcuts test failed:', (error as Error).message);\n process.exit(1);\n }\n}\n\n// Run the test\ntestTUIShortcuts();"],
5
+ "mappings": ";;;;;AAOA,OAAO;AACP,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,QAAQ,IAAI,oCAA6B;AACzC,QAAQ,IAAI,8BAA8B;AAC1C,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,0DAA0D;AACtE,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,2BAAoB;AAChC,QAAQ,IAAI,0CAA0C;AACtD,QAAQ,IAAI,oDAAoD;AAChE,QAAQ,IAAI,iDAAiD;AAC7D,QAAQ,IAAI,iEAAiE;AAC7E,QAAQ,IAAI,wDAAwD;AACpE,QAAQ,IAAI,oEAAoE;AAChF,QAAQ,IAAI,wEAAwE;AACpF,QAAQ,IAAI,2DAA2D;AACvE,QAAQ,IAAI,wDAAwD;AACpE,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,8BAAuB;AACnC,QAAQ,IAAI,8CAA8C;AAC1D,QAAQ,IAAI,oDAAoD;AAChE,QAAQ,IAAI,uCAAuC;AACnD,QAAQ,IAAI,2DAA2D;AACvE,QAAQ,IAAI,wCAAwC;AACpD,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,8BAA8B;AAG1C,MAAM,IAAI,QAAQ,aAAW;AAC3B,UAAQ,MAAM,KAAK,QAAQ,OAAO;AACpC,CAAC;AAED,eAAe,mBAAmB;AAChC,MAAI;AACF,YAAQ,IAAI,iDAA0C;AAEtD,UAAM,MAAM,IAAI,SAAS;AAGzB,UAAM,IAAI,WAAW;AAGrB,QAAI,MAAM;AAEV,YAAQ,IAAI,kCAA6B;AACzC,YAAQ,IAAI,sDAA+C;AAC3D,YAAQ,IAAI,oDAA6C;AAAA,EAE3D,SAAS,OAAgB;AACvB,WAAO,MAAM,6BAA6B,KAAc;AACxD,YAAQ,MAAM,qCAAiC,MAAgB,OAAO;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,iBAAiB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env npx tsx
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import "dotenv/config";
7
+ import { SwarmTUI } from "../src/features/tui/swarm-monitor.js";
8
+ import { logger } from "../src/core/monitoring/logger.js";
9
+ async function validateTUIShortcuts() {
10
+ try {
11
+ console.log("\u{1F9EA} Validating TUI Keyboard Shortcuts...");
12
+ const tui = new SwarmTUI();
13
+ await tui.initialize();
14
+ const screen = tui.screen;
15
+ if (!screen) {
16
+ throw new Error("Screen not initialized");
17
+ }
18
+ const keyHandlers = screen._events.key || [];
19
+ console.log("\u{1F4CB} Validation Results:");
20
+ console.log(`\u2705 Screen initialized: ${screen ? "Yes" : "No"}`);
21
+ console.log(`\u2705 Key handlers registered: ${keyHandlers.length > 0 ? "Yes" : "No"}`);
22
+ console.log("\n\u{1F50D} Testing Help Function:");
23
+ try {
24
+ tui.showHelp();
25
+ console.log("\u2705 Help function works");
26
+ } catch (error) {
27
+ console.log("\u274C Help function failed:", error.message);
28
+ }
29
+ console.log("\n\u{1F50D} Testing Detect Function:");
30
+ try {
31
+ await tui.showDetectedSwarms();
32
+ console.log("\u2705 Detect function works");
33
+ } catch (error) {
34
+ console.log("\u274C Detect function failed:", error.message);
35
+ }
36
+ console.log("\n\u{1F50D} Testing Refresh Function:");
37
+ try {
38
+ await tui.refreshData();
39
+ console.log("\u2705 Refresh function works");
40
+ } catch (error) {
41
+ console.log("\u274C Refresh function failed:", error.message);
42
+ }
43
+ console.log("\n\u{1F50D} Testing Clear Logs Function:");
44
+ try {
45
+ tui.clearLogs();
46
+ console.log("\u2705 Clear logs function works");
47
+ } catch (error) {
48
+ console.log("\u274C Clear logs function failed:", error.message);
49
+ }
50
+ tui.cleanup();
51
+ console.log("\n\u2705 All TUI shortcut validations passed!");
52
+ console.log("\u{1F4A1} Run scripts/test-tui-shortcuts.ts for interactive testing");
53
+ } catch (error) {
54
+ logger.error("TUI shortcuts validation failed", error);
55
+ console.error("\u274C Validation failed:", error.message);
56
+ process.exit(1);
57
+ }
58
+ }
59
+ validateTUIShortcuts();
60
+ //# sourceMappingURL=validate-tui-shortcuts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../scripts/validate-tui-shortcuts.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env npx tsx\n\n/**\n * Validation script for TUI shortcuts (non-interactive)\n * Verifies all key handlers are properly bound\n */\n\nimport 'dotenv/config';\nimport { SwarmTUI } from '../src/features/tui/swarm-monitor.js';\nimport { logger } from '../src/core/monitoring/logger.js';\n\nasync function validateTUIShortcuts() {\n try {\n console.log('\uD83E\uDDEA Validating TUI Keyboard Shortcuts...');\n \n const tui = new SwarmTUI();\n await tui.initialize();\n \n // Access the screen object to check key handlers\n const screen = (tui as any).screen;\n \n if (!screen) {\n throw new Error('Screen not initialized');\n }\n \n // Check if key handlers exist\n const keyHandlers = screen._events.key || [];\n \n console.log('\uD83D\uDCCB Validation Results:');\n console.log(`\u2705 Screen initialized: ${screen ? 'Yes' : 'No'}`);\n console.log(`\u2705 Key handlers registered: ${keyHandlers.length > 0 ? 'Yes' : 'No'}`);\n \n // Test the help functionality directly\n console.log('\\n\uD83D\uDD0D Testing Help Function:');\n try {\n (tui as any).showHelp();\n console.log('\u2705 Help function works');\n } catch (error: unknown) {\n console.log('\u274C Help function failed:', (error as Error).message);\n }\n \n // Test the detect function\n console.log('\\n\uD83D\uDD0D Testing Detect Function:');\n try {\n await (tui as any).showDetectedSwarms();\n console.log('\u2705 Detect function works');\n } catch (error: unknown) {\n console.log('\u274C Detect function failed:', (error as Error).message);\n }\n \n // Test refresh function\n console.log('\\n\uD83D\uDD0D Testing Refresh Function:');\n try {\n await (tui as any).refreshData();\n console.log('\u2705 Refresh function works');\n } catch (error: unknown) {\n console.log('\u274C Refresh function failed:', (error as Error).message);\n }\n \n // Test clear logs function\n console.log('\\n\uD83D\uDD0D Testing Clear Logs Function:');\n try {\n (tui as any).clearLogs();\n console.log('\u2705 Clear logs function works');\n } catch (error: unknown) {\n console.log('\u274C Clear logs function failed:', (error as Error).message);\n }\n \n // Cleanup\n (tui as any).cleanup();\n \n console.log('\\n\u2705 All TUI shortcut validations passed!');\n console.log('\uD83D\uDCA1 Run scripts/test-tui-shortcuts.ts for interactive testing');\n \n } catch (error: unknown) {\n logger.error('TUI shortcuts validation failed', error as Error);\n console.error('\u274C Validation failed:', (error as Error).message);\n process.exit(1);\n }\n}\n\n// Run validation\nvalidateTUIShortcuts();"],
5
+ "mappings": ";;;;;AAOA,OAAO;AACP,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,eAAe,uBAAuB;AACpC,MAAI;AACF,YAAQ,IAAI,gDAAyC;AAErD,UAAM,MAAM,IAAI,SAAS;AACzB,UAAM,IAAI,WAAW;AAGrB,UAAM,SAAU,IAAY;AAE5B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAGA,UAAM,cAAc,OAAO,QAAQ,OAAO,CAAC;AAE3C,YAAQ,IAAI,+BAAwB;AACpC,YAAQ,IAAI,8BAAyB,SAAS,QAAQ,IAAI,EAAE;AAC5D,YAAQ,IAAI,mCAA8B,YAAY,SAAS,IAAI,QAAQ,IAAI,EAAE;AAGjF,YAAQ,IAAI,oCAA6B;AACzC,QAAI;AACF,MAAC,IAAY,SAAS;AACtB,cAAQ,IAAI,4BAAuB;AAAA,IACrC,SAAS,OAAgB;AACvB,cAAQ,IAAI,gCAA4B,MAAgB,OAAO;AAAA,IACjE;AAGA,YAAQ,IAAI,sCAA+B;AAC3C,QAAI;AACF,YAAO,IAAY,mBAAmB;AACtC,cAAQ,IAAI,8BAAyB;AAAA,IACvC,SAAS,OAAgB;AACvB,cAAQ,IAAI,kCAA8B,MAAgB,OAAO;AAAA,IACnE;AAGA,YAAQ,IAAI,uCAAgC;AAC5C,QAAI;AACF,YAAO,IAAY,YAAY;AAC/B,cAAQ,IAAI,+BAA0B;AAAA,IACxC,SAAS,OAAgB;AACvB,cAAQ,IAAI,mCAA+B,MAAgB,OAAO;AAAA,IACpE;AAGA,YAAQ,IAAI,0CAAmC;AAC/C,QAAI;AACF,MAAC,IAAY,UAAU;AACvB,cAAQ,IAAI,kCAA6B;AAAA,IAC3C,SAAS,OAAgB;AACvB,cAAQ,IAAI,sCAAkC,MAAgB,OAAO;AAAA,IACvE;AAGA,IAAC,IAAY,QAAQ;AAErB,YAAQ,IAAI,+CAA0C;AACtD,YAAQ,IAAI,qEAA8D;AAAA,EAE5E,SAAS,OAAgB;AACvB,WAAO,MAAM,mCAAmC,KAAc;AAC9D,YAAQ,MAAM,6BAAyB,MAAgB,OAAO;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,qBAAqB;",
6
+ "names": []
7
+ }