@stackmemoryai/stackmemory 0.5.58 → 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 (596) hide show
  1. package/dist/cli/commands/search.js +20 -3
  2. package/dist/cli/commands/search.js.map +2 -2
  3. package/dist/core/database/sqlite-adapter.js +13 -3
  4. package/dist/core/database/sqlite-adapter.js.map +2 -2
  5. package/dist/core/errors/error-utils.js +208 -0
  6. package/dist/core/errors/error-utils.js.map +7 -0
  7. package/dist/core/errors/index.js +13 -4
  8. package/dist/core/errors/index.js.map +2 -2
  9. package/dist/core/merge/unified-merge-resolver.js +303 -0
  10. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  11. package/dist/core/monitoring/logger.js +61 -9
  12. package/dist/core/monitoring/logger.js.map +2 -2
  13. package/dist/core/security/index.js +35 -0
  14. package/dist/core/security/index.js.map +7 -0
  15. package/dist/core/security/input-sanitizer.js +321 -0
  16. package/dist/core/security/input-sanitizer.js.map +7 -0
  17. package/dist/integrations/linear/client.js +5 -1
  18. package/dist/integrations/linear/client.js.map +2 -2
  19. package/dist/integrations/mcp/remote-server.js +27 -36
  20. package/dist/integrations/mcp/remote-server.js.map +2 -2
  21. package/dist/integrations/mcp/server.js +44 -29
  22. package/dist/integrations/mcp/server.js.map +3 -3
  23. package/dist/scripts/benchmark-performance.js +48 -0
  24. package/dist/scripts/benchmark-performance.js.map +7 -0
  25. package/dist/scripts/check-redis.js +42 -0
  26. package/dist/scripts/check-redis.js.map +7 -0
  27. package/dist/scripts/initialize.js +116 -0
  28. package/dist/scripts/initialize.js.map +7 -0
  29. package/dist/scripts/list-linear-tasks.js +124 -0
  30. package/dist/scripts/list-linear-tasks.js.map +7 -0
  31. package/dist/scripts/measure-handoff-impact.js +340 -0
  32. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  33. package/dist/scripts/query-chromadb.js +160 -0
  34. package/dist/scripts/query-chromadb.js.map +7 -0
  35. package/dist/scripts/show-linear-summary.js +119 -0
  36. package/dist/scripts/show-linear-summary.js.map +7 -0
  37. package/dist/scripts/simple-swarm-demo.js +90 -0
  38. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  39. package/dist/scripts/status.js +155 -0
  40. package/dist/scripts/status.js.map +7 -0
  41. package/dist/scripts/test-chromadb-sync.js +192 -0
  42. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  43. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  44. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  45. package/dist/scripts/test-ralph-iterations.js +121 -0
  46. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  47. package/dist/scripts/test-redis-storage.js +389 -0
  48. package/dist/scripts/test-redis-storage.js.map +7 -0
  49. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  50. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  51. package/dist/scripts/test-swarm-fixes.js +125 -0
  52. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  53. package/dist/scripts/test-swarm-tui.js +23 -0
  54. package/dist/scripts/test-swarm-tui.js.map +7 -0
  55. package/dist/scripts/test-tui-shortcuts.js +52 -0
  56. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  57. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  58. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  59. package/dist/src/agents/core/agent-task-manager.js +527 -0
  60. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  61. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  62. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  63. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  64. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  65. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  66. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  67. package/dist/src/cli/auto-detect.js +321 -0
  68. package/dist/src/cli/auto-detect.js.map +7 -0
  69. package/dist/src/cli/claude-sm-danger.js +21 -0
  70. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  71. package/dist/src/cli/claude-sm.js +1156 -0
  72. package/dist/src/cli/claude-sm.js.map +7 -0
  73. package/dist/src/cli/codex-sm-danger.js +21 -0
  74. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  75. package/dist/src/cli/codex-sm.js +349 -0
  76. package/dist/src/cli/codex-sm.js.map +7 -0
  77. package/dist/src/cli/commands/api.js +232 -0
  78. package/dist/src/cli/commands/api.js.map +7 -0
  79. package/dist/src/cli/commands/auto-background.js +180 -0
  80. package/dist/src/cli/commands/auto-background.js.map +7 -0
  81. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  82. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  83. package/dist/src/cli/commands/clear.js +202 -0
  84. package/dist/src/cli/commands/clear.js.map +7 -0
  85. package/dist/src/cli/commands/config.js +445 -0
  86. package/dist/src/cli/commands/config.js.map +7 -0
  87. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  88. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  89. package/dist/src/cli/commands/context.js +343 -0
  90. package/dist/src/cli/commands/context.js.map +7 -0
  91. package/dist/src/cli/commands/daemon.js +392 -0
  92. package/dist/src/cli/commands/daemon.js.map +7 -0
  93. package/dist/src/cli/commands/dashboard.js +210 -0
  94. package/dist/src/cli/commands/dashboard.js.map +7 -0
  95. package/dist/src/cli/commands/db.js +147 -0
  96. package/dist/src/cli/commands/db.js.map +7 -0
  97. package/dist/src/cli/commands/decision.js +266 -0
  98. package/dist/src/cli/commands/decision.js.map +7 -0
  99. package/dist/src/cli/commands/discovery.js +279 -0
  100. package/dist/src/cli/commands/discovery.js.map +7 -0
  101. package/dist/src/cli/commands/handoff.js +624 -0
  102. package/dist/src/cli/commands/handoff.js.map +7 -0
  103. package/dist/src/cli/commands/hooks.js +298 -0
  104. package/dist/src/cli/commands/hooks.js.map +7 -0
  105. package/dist/src/cli/commands/linear.js +529 -0
  106. package/dist/src/cli/commands/linear.js.map +7 -0
  107. package/dist/src/cli/commands/log.js +169 -0
  108. package/dist/src/cli/commands/log.js.map +7 -0
  109. package/dist/src/cli/commands/login.js +172 -0
  110. package/dist/src/cli/commands/login.js.map +7 -0
  111. package/dist/src/cli/commands/migrate.js +240 -0
  112. package/dist/src/cli/commands/migrate.js.map +7 -0
  113. package/dist/src/cli/commands/model.js +533 -0
  114. package/dist/src/cli/commands/model.js.map +7 -0
  115. package/dist/src/cli/commands/onboard.js +536 -0
  116. package/dist/src/cli/commands/onboard.js.map +7 -0
  117. package/dist/src/cli/commands/projects.js +199 -0
  118. package/dist/src/cli/commands/projects.js.map +7 -0
  119. package/dist/src/cli/commands/ralph.js +909 -0
  120. package/dist/src/cli/commands/ralph.js.map +7 -0
  121. package/dist/src/cli/commands/retrieval.js +248 -0
  122. package/dist/src/cli/commands/retrieval.js.map +7 -0
  123. package/dist/src/cli/commands/search.js +173 -0
  124. package/dist/src/cli/commands/search.js.map +7 -0
  125. package/dist/src/cli/commands/service.js +749 -0
  126. package/dist/src/cli/commands/service.js.map +7 -0
  127. package/dist/src/cli/commands/session.js +200 -0
  128. package/dist/src/cli/commands/session.js.map +7 -0
  129. package/dist/src/cli/commands/settings.js +306 -0
  130. package/dist/src/cli/commands/settings.js.map +7 -0
  131. package/dist/src/cli/commands/setup.js +701 -0
  132. package/dist/src/cli/commands/setup.js.map +7 -0
  133. package/dist/src/cli/commands/shell.js +249 -0
  134. package/dist/src/cli/commands/shell.js.map +7 -0
  135. package/dist/src/cli/commands/signup.js +50 -0
  136. package/dist/src/cli/commands/signup.js.map +7 -0
  137. package/dist/src/cli/commands/skills.js +470 -0
  138. package/dist/src/cli/commands/skills.js.map +7 -0
  139. package/dist/src/cli/commands/sms-notify.js +795 -0
  140. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  141. package/dist/src/cli/commands/storage-tier.js +183 -0
  142. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  143. package/dist/src/cli/commands/sweep.js +249 -0
  144. package/dist/src/cli/commands/sweep.js.map +7 -0
  145. package/dist/src/cli/commands/tasks.js +213 -0
  146. package/dist/src/cli/commands/tasks.js.map +7 -0
  147. package/dist/src/cli/commands/worktree.js +319 -0
  148. package/dist/src/cli/commands/worktree.js.map +7 -0
  149. package/dist/src/cli/index.js +594 -0
  150. package/dist/src/cli/index.js.map +7 -0
  151. package/dist/src/cli/opencode-sm.js +448 -0
  152. package/dist/src/cli/opencode-sm.js.map +7 -0
  153. package/dist/src/cli/utils/viewer.js +96 -0
  154. package/dist/src/cli/utils/viewer.js.map +7 -0
  155. package/dist/src/core/config/config-manager.js +398 -0
  156. package/dist/src/core/config/config-manager.js.map +7 -0
  157. package/dist/src/core/config/feature-flags.js +76 -0
  158. package/dist/src/core/config/feature-flags.js.map +7 -0
  159. package/dist/src/core/config/storage-config.js +115 -0
  160. package/dist/src/core/config/storage-config.js.map +7 -0
  161. package/dist/src/core/config/types.js +144 -0
  162. package/dist/src/core/config/types.js.map +7 -0
  163. package/dist/src/core/context/auto-context.js +80 -0
  164. package/dist/src/core/context/auto-context.js.map +7 -0
  165. package/dist/src/core/context/dual-stack-manager.js +870 -0
  166. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  167. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  168. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  169. package/dist/src/core/context/frame-database.js +479 -0
  170. package/dist/src/core/context/frame-database.js.map +7 -0
  171. package/dist/src/core/context/frame-digest.js +250 -0
  172. package/dist/src/core/context/frame-digest.js.map +7 -0
  173. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  174. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  175. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  176. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  177. package/dist/src/core/context/frame-recovery.js +302 -0
  178. package/dist/src/core/context/frame-recovery.js.map +7 -0
  179. package/dist/src/core/context/frame-stack.js +314 -0
  180. package/dist/src/core/context/frame-stack.js.map +7 -0
  181. package/dist/src/core/context/frame-types.js +5 -0
  182. package/dist/src/core/context/frame-types.js.map +7 -0
  183. package/dist/src/core/context/index.js +25 -0
  184. package/dist/src/core/context/index.js.map +7 -0
  185. package/dist/src/core/context/permission-manager.js +185 -0
  186. package/dist/src/core/context/permission-manager.js.map +7 -0
  187. package/dist/src/core/context/recursive-context-manager.js +592 -0
  188. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  189. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  190. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  191. package/dist/src/core/context/shared-context-layer.js +621 -0
  192. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  193. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  194. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  195. package/dist/src/core/context/validation.js +130 -0
  196. package/dist/src/core/context/validation.js.map +7 -0
  197. package/dist/src/core/database/batch-operations.js +384 -0
  198. package/dist/src/core/database/batch-operations.js.map +7 -0
  199. package/dist/src/core/database/connection-pool.js +330 -0
  200. package/dist/src/core/database/connection-pool.js.map +7 -0
  201. package/dist/src/core/database/database-adapter.js +60 -0
  202. package/dist/src/core/database/database-adapter.js.map +7 -0
  203. package/dist/src/core/database/migration-manager.js +614 -0
  204. package/dist/src/core/database/migration-manager.js.map +7 -0
  205. package/dist/src/core/database/query-cache.js +298 -0
  206. package/dist/src/core/database/query-cache.js.map +7 -0
  207. package/dist/src/core/database/query-router.js +430 -0
  208. package/dist/src/core/database/query-router.js.map +7 -0
  209. package/dist/src/core/database/sqlite-adapter.js +738 -0
  210. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  211. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  212. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  213. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  214. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  215. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  216. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  217. package/dist/src/core/digest/index.js +9 -0
  218. package/dist/src/core/digest/index.js.map +7 -0
  219. package/dist/src/core/digest/types.js +25 -0
  220. package/dist/src/core/digest/types.js.map +7 -0
  221. package/dist/src/core/errors/error-utils.js +208 -0
  222. package/dist/src/core/errors/error-utils.js.map +7 -0
  223. package/dist/src/core/errors/index.js +521 -0
  224. package/dist/src/core/errors/index.js.map +7 -0
  225. package/dist/src/core/errors/recovery.js +269 -0
  226. package/dist/src/core/errors/recovery.js.map +7 -0
  227. package/dist/src/core/execution/parallel-executor.js +258 -0
  228. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  229. package/dist/src/core/frame/workflow-templates.js +319 -0
  230. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  231. package/dist/src/core/merge/conflict-detector.js +431 -0
  232. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  233. package/dist/src/core/merge/index.js +9 -0
  234. package/dist/src/core/merge/index.js.map +7 -0
  235. package/dist/src/core/merge/resolution-engine.js +558 -0
  236. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  237. package/dist/src/core/merge/stack-diff.js +532 -0
  238. package/dist/src/core/merge/stack-diff.js.map +7 -0
  239. package/dist/src/core/merge/types.js +5 -0
  240. package/dist/src/core/merge/types.js.map +7 -0
  241. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  242. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  243. package/dist/src/core/models/fallback-monitor.js +232 -0
  244. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  245. package/dist/src/core/models/model-router.js +340 -0
  246. package/dist/src/core/models/model-router.js.map +7 -0
  247. package/dist/src/core/monitoring/error-handler.js +49 -0
  248. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  249. package/dist/src/core/monitoring/logger.js +202 -0
  250. package/dist/src/core/monitoring/logger.js.map +7 -0
  251. package/dist/src/core/monitoring/metrics.js +172 -0
  252. package/dist/src/core/monitoring/metrics.js.map +7 -0
  253. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  254. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  255. package/dist/src/core/monitoring/session-monitor.js +300 -0
  256. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  257. package/dist/src/core/performance/context-cache.js +273 -0
  258. package/dist/src/core/performance/context-cache.js.map +7 -0
  259. package/dist/src/core/performance/index.js +11 -0
  260. package/dist/src/core/performance/index.js.map +7 -0
  261. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  262. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  263. package/dist/src/core/performance/monitor.js +221 -0
  264. package/dist/src/core/performance/monitor.js.map +7 -0
  265. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  266. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  267. package/dist/src/core/performance/performance-benchmark.js +277 -0
  268. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  269. package/dist/src/core/performance/performance-profiler.js +370 -0
  270. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  271. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  272. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  273. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  274. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  275. package/dist/src/core/projects/project-isolation.js +201 -0
  276. package/dist/src/core/projects/project-isolation.js.map +7 -0
  277. package/dist/src/core/projects/project-manager.js +697 -0
  278. package/dist/src/core/projects/project-manager.js.map +7 -0
  279. package/dist/src/core/query/query-parser.js +370 -0
  280. package/dist/src/core/query/query-parser.js.map +7 -0
  281. package/dist/src/core/query/query-templates.js +321 -0
  282. package/dist/src/core/query/query-templates.js.map +7 -0
  283. package/dist/src/core/retrieval/context-retriever.js +479 -0
  284. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  285. package/dist/src/core/retrieval/index.js +8 -0
  286. package/dist/src/core/retrieval/index.js.map +7 -0
  287. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  288. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  289. package/dist/src/core/retrieval/llm-provider.js +151 -0
  290. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  291. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  292. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  293. package/dist/src/core/retrieval/summary-generator.js +589 -0
  294. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  295. package/dist/src/core/retrieval/types.js +21 -0
  296. package/dist/src/core/retrieval/types.js.map +7 -0
  297. package/dist/src/core/security/index.js +35 -0
  298. package/dist/src/core/security/index.js.map +7 -0
  299. package/dist/src/core/security/input-sanitizer.js +321 -0
  300. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  301. package/dist/src/core/session/clear-survival.js +465 -0
  302. package/dist/src/core/session/clear-survival.js.map +7 -0
  303. package/dist/src/core/session/enhanced-handoff.js +792 -0
  304. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  305. package/dist/src/core/session/handoff-generator.js +343 -0
  306. package/dist/src/core/session/handoff-generator.js.map +7 -0
  307. package/dist/src/core/session/index.js +15 -0
  308. package/dist/src/core/session/index.js.map +7 -0
  309. package/dist/src/core/session/session-manager.js +347 -0
  310. package/dist/src/core/session/session-manager.js.map +7 -0
  311. package/dist/src/core/skills/index.js +7 -0
  312. package/dist/src/core/skills/index.js.map +7 -0
  313. package/dist/src/core/skills/skill-storage.js +764 -0
  314. package/dist/src/core/skills/skill-storage.js.map +7 -0
  315. package/dist/src/core/skills/types.js +193 -0
  316. package/dist/src/core/skills/types.js.map +7 -0
  317. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  318. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  319. package/dist/src/core/storage/infinite-storage.js +510 -0
  320. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  321. package/dist/src/core/storage/remote-storage.js +489 -0
  322. package/dist/src/core/storage/remote-storage.js.map +7 -0
  323. package/dist/src/core/storage/two-tier-storage.js +766 -0
  324. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  325. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  326. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  327. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  328. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  329. package/dist/src/core/trace/debug-trace.js +417 -0
  330. package/dist/src/core/trace/debug-trace.js.map +7 -0
  331. package/dist/src/core/trace/index.js +109 -0
  332. package/dist/src/core/trace/index.js.map +7 -0
  333. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  334. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  335. package/dist/src/core/trace/trace-detector.js +528 -0
  336. package/dist/src/core/trace/trace-detector.js.map +7 -0
  337. package/dist/src/core/trace/trace-store.js +345 -0
  338. package/dist/src/core/trace/trace-store.js.map +7 -0
  339. package/dist/src/core/trace/types.js +77 -0
  340. package/dist/src/core/trace/types.js.map +7 -0
  341. package/dist/src/core/types.js +5 -0
  342. package/dist/src/core/types.js.map +7 -0
  343. package/dist/src/core/utils/async-mutex.js +114 -0
  344. package/dist/src/core/utils/async-mutex.js.map +7 -0
  345. package/dist/src/core/utils/compression.js +83 -0
  346. package/dist/src/core/utils/compression.js.map +7 -0
  347. package/dist/src/core/utils/update-checker.js +218 -0
  348. package/dist/src/core/utils/update-checker.js.map +7 -0
  349. package/dist/src/core/worktree/worktree-manager.js +465 -0
  350. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  351. package/dist/src/daemon/daemon-config.js +149 -0
  352. package/dist/src/daemon/daemon-config.js.map +7 -0
  353. package/dist/src/daemon/services/context-service.js +122 -0
  354. package/dist/src/daemon/services/context-service.js.map +7 -0
  355. package/dist/src/daemon/services/linear-service.js +136 -0
  356. package/dist/src/daemon/services/linear-service.js.map +7 -0
  357. package/dist/src/daemon/session-daemon.js +312 -0
  358. package/dist/src/daemon/session-daemon.js.map +7 -0
  359. package/dist/src/daemon/unified-daemon.js +276 -0
  360. package/dist/src/daemon/unified-daemon.js.map +7 -0
  361. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  362. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  363. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  364. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  365. package/dist/src/features/analytics/index.js +18 -0
  366. package/dist/src/features/analytics/index.js.map +7 -0
  367. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  368. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  369. package/dist/src/features/analytics/types/metrics.js +5 -0
  370. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  371. package/dist/src/features/browser/browser-mcp.js +492 -0
  372. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  373. package/dist/src/features/sweep/index.js +20 -0
  374. package/dist/src/features/sweep/index.js.map +7 -0
  375. package/dist/src/features/sweep/prediction-client.js +155 -0
  376. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  377. package/dist/src/features/sweep/prompt-builder.js +85 -0
  378. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  379. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  380. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  381. package/dist/src/features/sweep/state-watcher.js +87 -0
  382. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  383. package/dist/src/features/sweep/status-bar.js +88 -0
  384. package/dist/src/features/sweep/status-bar.js.map +7 -0
  385. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  386. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  387. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  388. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  389. package/dist/src/features/sweep/types.js +18 -0
  390. package/dist/src/features/sweep/types.js.map +7 -0
  391. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  392. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  393. package/dist/src/features/tasks/task-aware-context.js +410 -0
  394. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  395. package/dist/src/features/tui/simple-monitor.js +116 -0
  396. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  397. package/dist/src/features/tui/swarm-monitor.js +648 -0
  398. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  399. package/dist/src/features/web/client/stores/task-store.js +26 -0
  400. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  401. package/dist/src/features/web/server/index.js +194 -0
  402. package/dist/src/features/web/server/index.js.map +7 -0
  403. package/dist/src/hooks/auto-background.js +151 -0
  404. package/dist/src/hooks/auto-background.js.map +7 -0
  405. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  406. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  407. package/dist/src/hooks/config.js +150 -0
  408. package/dist/src/hooks/config.js.map +7 -0
  409. package/dist/src/hooks/daemon.js +364 -0
  410. package/dist/src/hooks/daemon.js.map +7 -0
  411. package/dist/src/hooks/events.js +58 -0
  412. package/dist/src/hooks/events.js.map +7 -0
  413. package/dist/src/hooks/index.js +12 -0
  414. package/dist/src/hooks/index.js.map +7 -0
  415. package/dist/src/hooks/linear-task-picker.js +186 -0
  416. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  417. package/dist/src/hooks/schemas.js +197 -0
  418. package/dist/src/hooks/schemas.js.map +7 -0
  419. package/dist/src/hooks/secure-fs.js +49 -0
  420. package/dist/src/hooks/secure-fs.js.map +7 -0
  421. package/dist/src/hooks/security-logger.js +155 -0
  422. package/dist/src/hooks/security-logger.js.map +7 -0
  423. package/dist/src/hooks/session-summary.js +222 -0
  424. package/dist/src/hooks/session-summary.js.map +7 -0
  425. package/dist/src/hooks/sms-action-runner.js +371 -0
  426. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  427. package/dist/src/hooks/sms-notify.js +506 -0
  428. package/dist/src/hooks/sms-notify.js.map +7 -0
  429. package/dist/src/hooks/sms-watcher.js +93 -0
  430. package/dist/src/hooks/sms-watcher.js.map +7 -0
  431. package/dist/src/hooks/sms-webhook.js +555 -0
  432. package/dist/src/hooks/sms-webhook.js.map +7 -0
  433. package/dist/src/hooks/whatsapp-commands.js +479 -0
  434. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  435. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  436. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  437. package/dist/src/hooks/whatsapp-sync.js +409 -0
  438. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  439. package/dist/src/index.js +25 -0
  440. package/dist/src/index.js.map +7 -0
  441. package/dist/src/integrations/anthropic/client.js +263 -0
  442. package/dist/src/integrations/anthropic/client.js.map +7 -0
  443. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  444. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  445. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  446. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  447. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  448. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  449. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  450. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  451. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  452. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  453. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  454. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  455. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  456. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  457. package/dist/src/integrations/linear/auth.js +337 -0
  458. package/dist/src/integrations/linear/auth.js.map +7 -0
  459. package/dist/src/integrations/linear/auto-sync.js +258 -0
  460. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  461. package/dist/src/integrations/linear/client.js +634 -0
  462. package/dist/src/integrations/linear/client.js.map +7 -0
  463. package/dist/src/integrations/linear/config.js +130 -0
  464. package/dist/src/integrations/linear/config.js.map +7 -0
  465. package/dist/src/integrations/linear/migration.js +361 -0
  466. package/dist/src/integrations/linear/migration.js.map +7 -0
  467. package/dist/src/integrations/linear/oauth-server.js +454 -0
  468. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  469. package/dist/src/integrations/linear/rest-client.js +213 -0
  470. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  471. package/dist/src/integrations/linear/sync-manager.js +236 -0
  472. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  473. package/dist/src/integrations/linear/sync-service.js +231 -0
  474. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  475. package/dist/src/integrations/linear/sync.js +782 -0
  476. package/dist/src/integrations/linear/sync.js.map +7 -0
  477. package/dist/src/integrations/linear/types.js +5 -0
  478. package/dist/src/integrations/linear/types.js.map +7 -0
  479. package/dist/src/integrations/linear/unified-sync.js +589 -0
  480. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  481. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  482. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  483. package/dist/src/integrations/linear/webhook-server.js +218 -0
  484. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  485. package/dist/src/integrations/linear/webhook.js +291 -0
  486. package/dist/src/integrations/linear/webhook.js.map +7 -0
  487. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  488. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  489. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  490. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  491. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  492. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  493. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  494. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  495. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  496. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  497. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  498. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  499. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  500. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  501. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  502. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  503. package/dist/src/integrations/mcp/index.js +23 -0
  504. package/dist/src/integrations/mcp/index.js.map +7 -0
  505. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  506. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  507. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  508. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  509. package/dist/src/integrations/mcp/remote-server.js +682 -0
  510. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  511. package/dist/src/integrations/mcp/schemas.js +147 -0
  512. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  513. package/dist/src/integrations/mcp/server.js +1975 -0
  514. package/dist/src/integrations/mcp/server.js.map +7 -0
  515. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  516. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  517. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  518. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  519. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  520. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  521. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  522. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  523. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  524. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  525. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  526. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  527. package/dist/src/integrations/ralph/index.js +18 -0
  528. package/dist/src/integrations/ralph/index.js.map +7 -0
  529. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  530. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  531. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  532. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  533. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  534. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  535. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  536. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  537. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  538. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  539. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  540. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  541. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  542. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  543. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  544. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  545. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  546. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  547. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  548. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  549. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  550. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  551. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  552. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  553. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  554. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  555. package/dist/src/integrations/ralph/types.js +5 -0
  556. package/dist/src/integrations/ralph/types.js.map +7 -0
  557. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  558. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  559. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  560. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  561. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  562. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  563. package/dist/src/models/user.model.js +358 -0
  564. package/dist/src/models/user.model.js.map +7 -0
  565. package/dist/src/servers/production/auth-middleware.js +528 -0
  566. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  567. package/dist/src/services/config-service.js +65 -0
  568. package/dist/src/services/config-service.js.map +7 -0
  569. package/dist/src/services/context-service.js +194 -0
  570. package/dist/src/services/context-service.js.map +7 -0
  571. package/dist/src/skills/api-discovery.js +354 -0
  572. package/dist/src/skills/api-discovery.js.map +7 -0
  573. package/dist/src/skills/api-skill.js +475 -0
  574. package/dist/src/skills/api-skill.js.map +7 -0
  575. package/dist/src/skills/claude-skills.js +1061 -0
  576. package/dist/src/skills/claude-skills.js.map +7 -0
  577. package/dist/src/skills/dashboard-launcher.js +216 -0
  578. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  579. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  580. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  581. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  582. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  583. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  584. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  585. package/dist/src/types/task.js +5 -0
  586. package/dist/src/types/task.js.map +7 -0
  587. package/dist/src/utils/env.js +50 -0
  588. package/dist/src/utils/env.js.map +7 -0
  589. package/dist/src/utils/formatting.js +62 -0
  590. package/dist/src/utils/formatting.js.map +7 -0
  591. package/dist/src/utils/process-cleanup.js +136 -0
  592. package/dist/src/utils/process-cleanup.js.map +7 -0
  593. package/package.json +3 -3
  594. package/scripts/initialize.ts +16 -7
  595. package/scripts/install.sh +14 -62
  596. package/scripts/status.ts +111 -46
@@ -0,0 +1,648 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ import blessed from "blessed";
6
+ import { logger } from "../../core/monitoring/logger.js";
7
+ import { SwarmDashboard } from "../../integrations/ralph/monitoring/swarm-dashboard.js";
8
+ import { SwarmRegistry } from "../../integrations/ralph/monitoring/swarm-registry.js";
9
+ import { execSync } from "child_process";
10
+ class SwarmTUI {
11
+ screen;
12
+ commitsTable;
13
+ statusBox;
14
+ agentsTable;
15
+ metricsBox;
16
+ logBox;
17
+ swarmCoordinator = null;
18
+ swarmDashboard = null;
19
+ refreshInterval = null;
20
+ commitMetrics = /* @__PURE__ */ new Map();
21
+ constructor() {
22
+ const isGhostty = process.env.TERM_PROGRAM === "ghostty" || process.env.TERM?.includes("ghostty");
23
+ const isBasicTerm = process.env.TERM === "dumb" || process.env.TERM === "unknown";
24
+ this.screen = blessed.screen({
25
+ smartCSR: !isGhostty,
26
+ // Disable smart CSR for ghostty
27
+ title: "Ralph Swarm Monitor",
28
+ terminal: isGhostty ? "xterm-256color" : void 0,
29
+ fullUnicode: !isBasicTerm,
30
+ dockBorders: false,
31
+ ignoreDockContrast: true,
32
+ useBCE: false,
33
+ // Disable background color erase for compatibility
34
+ forceUnicode: false,
35
+ debug: false
36
+ });
37
+ this.screen.on("error", (err) => {
38
+ logger.error("TUI screen error:", err);
39
+ console.log(
40
+ "\u26A0\uFE0F TUI display error detected. Try setting TERM=xterm-256color"
41
+ );
42
+ console.log(
43
+ " Alternative: Use stackmemory ralph status for text-based monitoring"
44
+ );
45
+ });
46
+ this.createUI();
47
+ this.setupKeyHandlers();
48
+ logger.info("SwarmTUI initialized");
49
+ }
50
+ createUI() {
51
+ const container = blessed.box({
52
+ parent: this.screen,
53
+ top: 0,
54
+ left: 0,
55
+ width: "100%",
56
+ height: "100%",
57
+ style: {
58
+ bg: "black"
59
+ }
60
+ });
61
+ const isGhostty = process.env.TERM_PROGRAM === "ghostty" || process.env.TERM?.includes("ghostty");
62
+ const safeColors = isGhostty;
63
+ blessed.box({
64
+ parent: container,
65
+ top: 0,
66
+ left: 0,
67
+ width: "100%",
68
+ height: 3,
69
+ content: "\u{1F9BE} Ralph Swarm Monitor - Real-time Swarm Operations",
70
+ style: safeColors ? {
71
+ fg: "white",
72
+ bold: false
73
+ } : {
74
+ bg: "blue",
75
+ fg: "white",
76
+ bold: true
77
+ },
78
+ border: {
79
+ type: "line"
80
+ }
81
+ });
82
+ this.statusBox = blessed.box({
83
+ parent: container,
84
+ top: 3,
85
+ left: "50%",
86
+ width: "50%",
87
+ height: 8,
88
+ label: " Swarm Status ",
89
+ content: "No active swarm",
90
+ style: {
91
+ bg: "black",
92
+ fg: "white"
93
+ },
94
+ border: {
95
+ type: "line",
96
+ fg: "cyan"
97
+ }
98
+ });
99
+ this.metricsBox = blessed.box({
100
+ parent: container,
101
+ top: 3,
102
+ left: 0,
103
+ width: "50%",
104
+ height: 8,
105
+ label: " Performance Metrics ",
106
+ content: "Waiting for data...",
107
+ style: {
108
+ bg: "black",
109
+ fg: "white"
110
+ },
111
+ border: {
112
+ type: "line",
113
+ fg: "green"
114
+ }
115
+ });
116
+ this.agentsTable = blessed.table({
117
+ parent: container,
118
+ top: 11,
119
+ left: 0,
120
+ width: "50%",
121
+ height: 12,
122
+ label: " Active Agents ",
123
+ style: {
124
+ bg: "black",
125
+ fg: "white",
126
+ header: {
127
+ bg: "blue",
128
+ fg: "white",
129
+ bold: true
130
+ },
131
+ cell: {
132
+ selected: {
133
+ bg: "blue",
134
+ fg: "white"
135
+ }
136
+ }
137
+ },
138
+ border: {
139
+ type: "line",
140
+ fg: "yellow"
141
+ },
142
+ data: [["Role", "Status", "Iteration", "Task", "Last Active"]]
143
+ });
144
+ this.commitsTable = blessed.table({
145
+ parent: container,
146
+ top: 11,
147
+ left: "50%",
148
+ width: "50%",
149
+ height: 12,
150
+ label: " Recent Commits ",
151
+ style: {
152
+ bg: "black",
153
+ fg: "white",
154
+ header: {
155
+ bg: "blue",
156
+ fg: "white",
157
+ bold: true
158
+ },
159
+ cell: {
160
+ selected: {
161
+ bg: "blue",
162
+ fg: "white"
163
+ }
164
+ }
165
+ },
166
+ border: {
167
+ type: "line",
168
+ fg: "magenta"
169
+ },
170
+ data: [["Agent", "Message", "Lines +/-", "Time"]]
171
+ });
172
+ this.logBox = blessed.log({
173
+ parent: container,
174
+ top: 23,
175
+ left: 0,
176
+ width: "100%",
177
+ height: "100%-23",
178
+ label: " Swarm Logs ",
179
+ style: {
180
+ bg: "black",
181
+ fg: "white"
182
+ },
183
+ border: {
184
+ type: "line",
185
+ fg: "white"
186
+ },
187
+ scrollable: true,
188
+ alwaysScroll: true,
189
+ mouse: true
190
+ });
191
+ blessed.box({
192
+ parent: container,
193
+ bottom: 0,
194
+ left: 0,
195
+ width: "100%",
196
+ height: 1,
197
+ content: "q=quit | r=refresh | s=start swarm | t=stop swarm | h=help | c=clear logs | d=detect swarms",
198
+ style: {
199
+ bg: "white",
200
+ fg: "black"
201
+ }
202
+ });
203
+ }
204
+ setupKeyHandlers() {
205
+ this.screen.key(["escape", "q", "C-c"], () => {
206
+ this.cleanup();
207
+ process.exit(0);
208
+ });
209
+ this.screen.key(["r"], () => {
210
+ this.refreshData();
211
+ this.logBox.log("Manual refresh triggered");
212
+ });
213
+ this.screen.key(["s"], () => {
214
+ this.startSwarmInteractive();
215
+ });
216
+ this.screen.key(["t"], () => {
217
+ this.stopSwarmInteractive();
218
+ });
219
+ this.screen.key(["h"], () => {
220
+ this.showHelp();
221
+ });
222
+ this.screen.key(["c"], () => {
223
+ this.clearLogs();
224
+ });
225
+ this.screen.key(["d"], () => {
226
+ this.showDetectedSwarms();
227
+ });
228
+ }
229
+ /**
230
+ * Initialize swarm monitoring
231
+ */
232
+ async initialize(swarmCoordinator, swarmId) {
233
+ try {
234
+ if (swarmId) {
235
+ const registry = SwarmRegistry.getInstance();
236
+ const swarm = registry.getSwarm(swarmId);
237
+ if (swarm) {
238
+ this.swarmCoordinator = swarm.coordinator;
239
+ this.logBox.log(`Connected to swarm: ${swarmId}`);
240
+ } else {
241
+ this.logBox.log(`Swarm not found: ${swarmId}`);
242
+ }
243
+ } else if (swarmCoordinator) {
244
+ this.swarmCoordinator = swarmCoordinator;
245
+ } else {
246
+ const registry = SwarmRegistry.getInstance();
247
+ const activeSwarms = registry.listActiveSwarms();
248
+ if (activeSwarms.length > 0) {
249
+ this.swarmCoordinator = activeSwarms[0].coordinator;
250
+ this.logBox.log(`Auto-connected to swarm: ${activeSwarms[0].id}`);
251
+ }
252
+ }
253
+ if (this.swarmCoordinator) {
254
+ this.swarmDashboard = new SwarmDashboard(this.swarmCoordinator);
255
+ this.swarmDashboard.startMonitoring(2e3);
256
+ this.swarmDashboard.on("metricsUpdated", (metrics) => {
257
+ this.updateUI(metrics);
258
+ });
259
+ }
260
+ this.refreshInterval = setInterval(() => {
261
+ this.refreshData();
262
+ }, 3e3);
263
+ this.logBox.log("SwarmTUI monitoring initialized");
264
+ } catch (error) {
265
+ logger.error("Failed to initialize SwarmTUI", error);
266
+ this.logBox.log(`Error: ${error.message}`);
267
+ }
268
+ }
269
+ /**
270
+ * Start the TUI display
271
+ */
272
+ start() {
273
+ this.screen.render();
274
+ this.logBox.log("Ralph Swarm Monitor started");
275
+ this.logBox.log("Monitoring for active swarms...");
276
+ }
277
+ /**
278
+ * Refresh all data
279
+ */
280
+ async refreshData() {
281
+ try {
282
+ await this.updateCommitMetrics();
283
+ if (this.swarmCoordinator) {
284
+ const status = this.getSwarmStatus();
285
+ this.updateStatusDisplay(status);
286
+ } else {
287
+ await this.detectActiveSwarms();
288
+ }
289
+ this.screen.render();
290
+ } catch (error) {
291
+ logger.error("Failed to refresh TUI data", error);
292
+ this.logBox.log(`Refresh error: ${error.message}`);
293
+ }
294
+ }
295
+ /**
296
+ * Update commit metrics for all agents
297
+ */
298
+ async updateCommitMetrics() {
299
+ try {
300
+ const gitLog = execSync(
301
+ 'git log --oneline --since="1 hour ago" --pretty=format:"%H|%an|%s|%ct" --numstat',
302
+ { encoding: "utf8", cwd: process.cwd() }
303
+ );
304
+ const commits = this.parseGitCommits(gitLog);
305
+ this.updateCommitsTable(commits);
306
+ } catch {
307
+ this.logBox.log("No recent commits found");
308
+ }
309
+ }
310
+ /**
311
+ * Parse git log output into commit data
312
+ */
313
+ parseGitCommits(gitLog) {
314
+ const commits = [];
315
+ const lines = gitLog.split("\n").filter(Boolean);
316
+ let currentCommit = null;
317
+ for (const line of lines) {
318
+ if (line.includes("|")) {
319
+ const [hash, author, message, timestamp] = line.split("|");
320
+ currentCommit = {
321
+ hash: hash.substring(0, 8),
322
+ agent: this.extractAgentFromAuthor(author),
323
+ message: message.substring(0, 50),
324
+ timestamp: parseInt(timestamp),
325
+ linesAdded: 0,
326
+ linesDeleted: 0
327
+ };
328
+ } else if (currentCommit && line.match(/^\d+\s+\d+/)) {
329
+ const [added, deleted] = line.split(" ")[0].split(" ");
330
+ currentCommit.linesAdded += parseInt(added) || 0;
331
+ currentCommit.linesDeleted += parseInt(deleted) || 0;
332
+ commits.push({ ...currentCommit });
333
+ currentCommit = null;
334
+ }
335
+ }
336
+ return commits.slice(0, 10);
337
+ }
338
+ /**
339
+ * Extract agent info from git author
340
+ */
341
+ extractAgentFromAuthor(author) {
342
+ const agentMatch = author.match(/\[(\w+)\]/);
343
+ if (agentMatch) {
344
+ return agentMatch[1];
345
+ }
346
+ const roles = [
347
+ "developer",
348
+ "tester",
349
+ "optimizer",
350
+ "documenter",
351
+ "architect"
352
+ ];
353
+ for (const role of roles) {
354
+ if (author.toLowerCase().includes(role)) {
355
+ return role;
356
+ }
357
+ }
358
+ return "user";
359
+ }
360
+ /**
361
+ * Update commits table display
362
+ */
363
+ updateCommitsTable(commits) {
364
+ const tableData = [["Agent", "Message", "Lines +/-", "Time"]];
365
+ for (const commit of commits) {
366
+ const timeAgo = this.formatTimeAgo(commit.timestamp * 1e3);
367
+ const linesChange = `+${commit.linesAdded}/-${commit.linesDeleted}`;
368
+ tableData.push([commit.agent, commit.message, linesChange, timeAgo]);
369
+ }
370
+ this.commitsTable.setData(tableData);
371
+ }
372
+ /**
373
+ * Get current swarm status
374
+ */
375
+ getSwarmStatus() {
376
+ if (!this.swarmCoordinator) return null;
377
+ const usage = this.swarmCoordinator.getResourceUsage();
378
+ const swarmState = this.swarmCoordinator.swarmState;
379
+ if (!swarmState) return null;
380
+ return {
381
+ swarmId: swarmState.id,
382
+ status: swarmState.status,
383
+ startTime: swarmState.startTime,
384
+ uptime: Date.now() - swarmState.startTime,
385
+ agents: usage.activeAgents ? Array.from(
386
+ this.swarmCoordinator.activeAgents?.values() || []
387
+ ).map((agent) => ({
388
+ id: agent.id,
389
+ role: agent.role,
390
+ status: agent.status,
391
+ currentTask: agent.currentTask,
392
+ iteration: agent.performance?.tasksCompleted || 0,
393
+ lastActivity: agent.performance?.lastFreshStart || Date.now()
394
+ })) : [],
395
+ performance: {
396
+ throughput: swarmState.performance?.throughput || 0,
397
+ efficiency: swarmState.performance?.efficiency || 0,
398
+ totalTasks: swarmState.totalTaskCount || 0,
399
+ completedTasks: swarmState.completedTaskCount || 0
400
+ }
401
+ };
402
+ }
403
+ /**
404
+ * Update status display
405
+ */
406
+ updateStatusDisplay(status) {
407
+ if (!status) {
408
+ this.statusBox.setContent("No active swarm detected");
409
+ this.agentsTable.setData([
410
+ ["Role", "Status", "Iteration", "Task", "Last Active"]
411
+ ]);
412
+ this.metricsBox.setContent("Waiting for swarm data...");
413
+ return;
414
+ }
415
+ const uptimeStr = this.formatDuration(status.uptime);
416
+ const statusContent = `Swarm: ${status.swarmId.substring(0, 8)}
417
+ Status: ${status.status.toUpperCase()}
418
+ Uptime: ${uptimeStr}
419
+ Agents: ${status.agents.length}`;
420
+ this.statusBox.setContent(statusContent);
421
+ const agentData = [["Role", "Status", "Iteration", "Task", "Last Active"]];
422
+ for (const agent of status.agents) {
423
+ const lastActivity = this.formatTimeAgo(agent.lastActivity);
424
+ const task = agent.currentTask ? agent.currentTask.substring(0, 20) : "idle";
425
+ agentData.push([
426
+ agent.role,
427
+ agent.status,
428
+ agent.iteration.toString(),
429
+ task,
430
+ lastActivity
431
+ ]);
432
+ }
433
+ this.agentsTable.setData(agentData);
434
+ const metricsContent = `Throughput: ${status.performance.throughput.toFixed(2)} tasks/min
435
+ Efficiency: ${(status.performance.efficiency * 100).toFixed(1)}%
436
+ Tasks: ${status.performance.completedTasks}/${status.performance.totalTasks}
437
+ Success Rate: ${status.performance.efficiency > 0 ? (status.performance.efficiency * 100).toFixed(1) : "N/A"}%`;
438
+ this.metricsBox.setContent(metricsContent);
439
+ }
440
+ /**
441
+ * Update UI with metrics from dashboard
442
+ */
443
+ updateUI(metrics) {
444
+ this.logBox.log(
445
+ `Metrics updated: ${metrics.status} - ${metrics.activeAgents} agents`
446
+ );
447
+ }
448
+ /**
449
+ * Detect active swarms in the system
450
+ */
451
+ async detectActiveSwarms() {
452
+ try {
453
+ const registry = SwarmRegistry.getInstance();
454
+ const activeSwarms = registry.listActiveSwarms();
455
+ const stats = registry.getStatistics();
456
+ if (activeSwarms.length > 0) {
457
+ let statusContent = `Available Swarms (${activeSwarms.length}):
458
+ `;
459
+ for (const swarm of activeSwarms.slice(0, 3)) {
460
+ const uptime = this.formatDuration(Date.now() - swarm.startTime);
461
+ statusContent += `\u2022 ${swarm.id.substring(0, 8)}: ${swarm.status} (${uptime})
462
+ `;
463
+ }
464
+ if (activeSwarms.length > 3) {
465
+ statusContent += `... and ${activeSwarms.length - 3} more`;
466
+ }
467
+ this.statusBox.setContent(statusContent);
468
+ this.logBox.log(
469
+ `Found ${activeSwarms.length} active swarms in registry`
470
+ );
471
+ } else {
472
+ const ralphProcesses = execSync(
473
+ 'ps aux | grep "ralph" | grep -v grep',
474
+ { encoding: "utf8" }
475
+ );
476
+ if (ralphProcesses.trim()) {
477
+ this.logBox.log("Detected Ralph processes running");
478
+ this.statusBox.setContent(
479
+ "External Ralph processes detected\n(Use swarm coordinator for full monitoring)"
480
+ );
481
+ } else {
482
+ this.statusBox.setContent(`No active swarms detected
483
+ Total swarms: ${stats.totalSwarms}
484
+ Completed: ${stats.completedSwarms}
485
+
486
+ Run: stackmemory ralph swarm <task>`);
487
+ }
488
+ }
489
+ } catch {
490
+ }
491
+ }
492
+ /**
493
+ * Format time ago string
494
+ */
495
+ formatTimeAgo(timestamp) {
496
+ const diff = Date.now() - timestamp;
497
+ const minutes = Math.floor(diff / 6e4);
498
+ const hours = Math.floor(minutes / 60);
499
+ const days = Math.floor(hours / 24);
500
+ if (days > 0) return `${days}d ago`;
501
+ if (hours > 0) return `${hours}h ago`;
502
+ if (minutes > 0) return `${minutes}m ago`;
503
+ return "just now";
504
+ }
505
+ /**
506
+ * Format duration string
507
+ */
508
+ formatDuration(ms) {
509
+ const seconds = Math.floor(ms / 1e3);
510
+ const minutes = Math.floor(seconds / 60);
511
+ const hours = Math.floor(minutes / 60);
512
+ if (hours > 0) return `${hours}h ${minutes % 60}m`;
513
+ if (minutes > 0) return `${minutes}m ${seconds % 60}s`;
514
+ return `${seconds}s`;
515
+ }
516
+ /**
517
+ * Start swarm interactively
518
+ */
519
+ startSwarmInteractive() {
520
+ this.logBox.log("\u{1F680} Start Swarm Interactive Mode:");
521
+ this.logBox.log(
522
+ 'Example: stackmemory ralph swarm "Implement feature" --agents developer,tester'
523
+ );
524
+ this.logBox.log(
525
+ 'Tip: Run the command in another terminal, then press "d" to detect it'
526
+ );
527
+ }
528
+ /**
529
+ * Stop swarm interactively
530
+ */
531
+ stopSwarmInteractive() {
532
+ if (this.swarmCoordinator) {
533
+ this.logBox.log("\u{1F6D1} Stopping current swarm...");
534
+ this.logBox.log(
535
+ "Note: Swarm stopping not yet implemented - use Ctrl+C in swarm terminal"
536
+ );
537
+ } else {
538
+ this.logBox.log("\u274C No active swarm coordinator to stop");
539
+ this.logBox.log("External Ralph processes must be stopped manually");
540
+ }
541
+ }
542
+ /**
543
+ * Show help dialog
544
+ */
545
+ showHelp() {
546
+ this.logBox.log("\u{1F9BE} Ralph Swarm Monitor - Help");
547
+ this.logBox.log("");
548
+ this.logBox.log("Keyboard Shortcuts:");
549
+ this.logBox.log(" q, Esc, Ctrl+C - Quit TUI");
550
+ this.logBox.log(" r - Refresh data manually");
551
+ this.logBox.log(" s - Show start swarm commands");
552
+ this.logBox.log(" t - Stop current swarm");
553
+ this.logBox.log(" h - Show this help");
554
+ this.logBox.log(" c - Clear log output");
555
+ this.logBox.log(" d - Detect and list available swarms");
556
+ this.logBox.log("");
557
+ this.logBox.log("Usage:");
558
+ this.logBox.log(
559
+ " stackmemory ralph tui # Auto-detect swarms"
560
+ );
561
+ this.logBox.log(
562
+ " stackmemory ralph tui --swarm-id <id> # Monitor specific swarm"
563
+ );
564
+ this.logBox.log("");
565
+ this.logBox.log("Starting Swarms:");
566
+ this.logBox.log(
567
+ ' stackmemory ralph swarm "Task description" --agents developer,tester'
568
+ );
569
+ this.logBox.log("");
570
+ }
571
+ /**
572
+ * Clear log output
573
+ */
574
+ clearLogs() {
575
+ this.logBox.setContent("");
576
+ this.logBox.log("\u{1F4DD} Logs cleared - monitoring continues...");
577
+ }
578
+ /**
579
+ * Show detected swarms
580
+ */
581
+ async showDetectedSwarms() {
582
+ this.logBox.log("\u{1F50D} Detecting active swarms...");
583
+ try {
584
+ const registry = SwarmRegistry.getInstance();
585
+ const activeSwarms = registry.listActiveSwarms();
586
+ const stats = registry.getStatistics();
587
+ this.logBox.log("");
588
+ this.logBox.log("\u{1F4CA} Swarm Registry Status:");
589
+ this.logBox.log(` Total swarms: ${stats.totalSwarms}`);
590
+ this.logBox.log(` Active swarms: ${stats.activeSwarms}`);
591
+ this.logBox.log(` Completed swarms: ${stats.completedSwarms}`);
592
+ if (activeSwarms.length > 0) {
593
+ this.logBox.log("");
594
+ this.logBox.log("\u{1F9BE} Active Swarms:");
595
+ for (const swarm of activeSwarms) {
596
+ const uptime = this.formatDuration(Date.now() - swarm.startTime);
597
+ this.logBox.log(` \u2022 ${swarm.id}: ${swarm.description} (${uptime})`);
598
+ }
599
+ this.logBox.log("");
600
+ this.logBox.log("\u{1F4A1} Use --swarm-id to connect to specific swarm");
601
+ } else {
602
+ this.logBox.log("");
603
+ this.logBox.log("\u274C No active swarms in registry");
604
+ try {
605
+ const ralphProcesses = execSync(
606
+ 'ps aux | grep "ralph" | grep -v grep',
607
+ { encoding: "utf8" }
608
+ );
609
+ if (ralphProcesses.trim()) {
610
+ this.logBox.log("\u{1F50D} External Ralph processes detected:");
611
+ ralphProcesses.split("\n").filter((line) => line.trim()).forEach((line) => {
612
+ const parts = line.split(/\s+/);
613
+ this.logBox.log(
614
+ ` PID ${parts[1]}: ${parts.slice(10).join(" ").slice(0, 60)}`
615
+ );
616
+ });
617
+ }
618
+ } catch {
619
+ this.logBox.log("\u{1F50D} No external Ralph processes found");
620
+ }
621
+ this.logBox.log("");
622
+ this.logBox.log(
623
+ '\u{1F4A1} Start a swarm: stackmemory ralph swarm "Task" --agents developer'
624
+ );
625
+ }
626
+ } catch (error) {
627
+ this.logBox.log(`\u274C Detection failed: ${error.message}`);
628
+ }
629
+ }
630
+ /**
631
+ * Cleanup resources
632
+ */
633
+ cleanup() {
634
+ if (this.refreshInterval) {
635
+ clearInterval(this.refreshInterval);
636
+ }
637
+ if (this.swarmDashboard) {
638
+ this.swarmDashboard.stopMonitoring();
639
+ }
640
+ logger.info("SwarmTUI cleaned up");
641
+ }
642
+ }
643
+ var swarm_monitor_default = SwarmTUI;
644
+ export {
645
+ SwarmTUI,
646
+ swarm_monitor_default as default
647
+ };
648
+ //# sourceMappingURL=swarm-monitor.js.map