@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,431 @@
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 { v4 as uuidv4 } from "uuid";
6
+ import { logger } from "../monitoring/logger.js";
7
+ class ConflictDetector {
8
+ SIMILARITY_THRESHOLD = 0.8;
9
+ /**
10
+ * Detect all types of conflicts between two frame stacks
11
+ */
12
+ detectConflicts(stack1, stack2) {
13
+ const conflicts = [];
14
+ const parallelConflicts = this.detectParallelSolutions(stack1, stack2);
15
+ conflicts.push(...parallelConflicts);
16
+ const decisionConflicts = this.detectConflictingDecisions(
17
+ stack1.events,
18
+ stack2.events
19
+ );
20
+ conflicts.push(...decisionConflicts);
21
+ const structuralConflicts = this.detectStructuralDivergence(
22
+ stack1.frames,
23
+ stack2.frames
24
+ );
25
+ conflicts.push(...structuralConflicts);
26
+ logger.info(`Detected ${conflicts.length} conflicts between stacks`, {
27
+ stack1Id: stack1.id,
28
+ stack2Id: stack2.id,
29
+ conflictTypes: this.summarizeConflictTypes(conflicts)
30
+ });
31
+ return conflicts;
32
+ }
33
+ /**
34
+ * Analyze frames to find parallel solutions to the same problem
35
+ */
36
+ analyzeParallelSolutions(frames) {
37
+ const solutions = [];
38
+ const groupedFrames = this.groupSimilarFrames(frames);
39
+ for (const group of groupedFrames) {
40
+ if (group.length > 1) {
41
+ group.forEach((frame) => {
42
+ solutions.push({
43
+ frameId: frame.frame_id,
44
+ solution: this.extractSolution(frame),
45
+ approach: this.analyzeApproach(frame),
46
+ author: frame.inputs?.author || "unknown",
47
+ timestamp: frame.created_at,
48
+ effectiveness: this.calculateEffectiveness(frame)
49
+ });
50
+ });
51
+ }
52
+ }
53
+ return solutions;
54
+ }
55
+ /**
56
+ * Identify conflicting decisions in event streams
57
+ */
58
+ identifyConflictingDecisions(events) {
59
+ const conflicts = [];
60
+ const decisions = this.extractDecisions(events);
61
+ for (let i = 0; i < decisions.length; i++) {
62
+ for (let j = i + 1; j < decisions.length; j++) {
63
+ if (this.decisionsConflict(decisions[i], decisions[j])) {
64
+ conflicts.push({
65
+ decision1: decisions[i].payload?.decision || "",
66
+ decision2: decisions[j].payload?.decision || "",
67
+ impact: this.assessImpact(decisions[i], decisions[j]),
68
+ canCoexist: this.canCoexist(decisions[i], decisions[j])
69
+ });
70
+ }
71
+ }
72
+ }
73
+ return conflicts;
74
+ }
75
+ /**
76
+ * Detect parallel solutions between two stacks
77
+ */
78
+ detectParallelSolutions(stack1, stack2) {
79
+ const conflicts = [];
80
+ for (const frame1 of stack1.frames) {
81
+ for (const frame2 of stack2.frames) {
82
+ if (this.framesAreSimilar(frame1, frame2) && !this.framesAreIdentical(frame1, frame2)) {
83
+ conflicts.push({
84
+ id: uuidv4(),
85
+ type: "parallel_solution",
86
+ frameId1: frame1.frame_id,
87
+ frameId2: frame2.frame_id,
88
+ severity: this.calculateParallelSeverity(frame1, frame2),
89
+ description: `Parallel solutions detected: "${frame1.name}" vs "${frame2.name}"`,
90
+ detectedAt: Date.now(),
91
+ conflictingPaths: this.extractPaths(frame1, frame2)
92
+ });
93
+ }
94
+ }
95
+ }
96
+ return conflicts;
97
+ }
98
+ /**
99
+ * Detect conflicting decisions between event streams
100
+ */
101
+ detectConflictingDecisions(events1, events2) {
102
+ const conflicts = [];
103
+ const decisions1 = this.extractDecisions(events1);
104
+ const decisions2 = this.extractDecisions(events2);
105
+ for (const d1 of decisions1) {
106
+ for (const d2 of decisions2) {
107
+ if (this.decisionsConflict(d1, d2)) {
108
+ conflicts.push({
109
+ id: uuidv4(),
110
+ type: "conflicting_decision",
111
+ frameId1: d1.frame_id,
112
+ frameId2: d2.frame_id,
113
+ severity: this.assessImpact(d1, d2),
114
+ description: `Conflicting decisions: "${d1.payload?.decision}" vs "${d2.payload?.decision}"`,
115
+ detectedAt: Date.now()
116
+ });
117
+ }
118
+ }
119
+ }
120
+ return conflicts;
121
+ }
122
+ /**
123
+ * Detect structural divergence in frame hierarchies
124
+ */
125
+ detectStructuralDivergence(frames1, frames2) {
126
+ const conflicts = [];
127
+ const tree1 = this.buildFrameTree(frames1);
128
+ const tree2 = this.buildFrameTree(frames2);
129
+ const divergences = this.findDivergences(tree1, tree2);
130
+ for (const divergence of divergences) {
131
+ conflicts.push({
132
+ id: uuidv4(),
133
+ type: "structural_divergence",
134
+ frameId1: divergence.node1,
135
+ frameId2: divergence.node2,
136
+ severity: this.calculateDivergenceSeverity(divergence),
137
+ description: `Structural divergence at depth ${divergence.depth}`,
138
+ detectedAt: Date.now()
139
+ });
140
+ }
141
+ return conflicts;
142
+ }
143
+ /**
144
+ * Helper: Check if two frames are similar (solving same problem)
145
+ */
146
+ framesAreSimilar(frame1, frame2) {
147
+ const nameSimilarity = this.calculateSimilarity(frame1.name, frame2.name);
148
+ if (nameSimilarity > this.SIMILARITY_THRESHOLD) return true;
149
+ if (frame1.type === frame2.type && frame1.parent_frame_id === frame2.parent_frame_id) {
150
+ return true;
151
+ }
152
+ const inputSimilarity = this.compareInputs(frame1.inputs, frame2.inputs);
153
+ return inputSimilarity > this.SIMILARITY_THRESHOLD;
154
+ }
155
+ /**
156
+ * Helper: Check if frames are identical
157
+ */
158
+ framesAreIdentical(frame1, frame2) {
159
+ return frame1.frame_id === frame2.frame_id;
160
+ }
161
+ /**
162
+ * Helper: Calculate string similarity (Levenshtein-based)
163
+ */
164
+ calculateSimilarity(str1, str2) {
165
+ const maxLen = Math.max(str1.length, str2.length);
166
+ if (maxLen === 0) return 1;
167
+ const distance = this.levenshteinDistance(str1, str2);
168
+ return 1 - distance / maxLen;
169
+ }
170
+ /**
171
+ * Helper: Levenshtein distance implementation
172
+ */
173
+ levenshteinDistance(str1, str2) {
174
+ const matrix = [];
175
+ for (let i = 0; i <= str2.length; i++) {
176
+ matrix[i] = [i];
177
+ }
178
+ for (let j = 0; j <= str1.length; j++) {
179
+ matrix[0][j] = j;
180
+ }
181
+ for (let i = 1; i <= str2.length; i++) {
182
+ for (let j = 1; j <= str1.length; j++) {
183
+ if (str2.charAt(i - 1) === str1.charAt(j - 1)) {
184
+ matrix[i][j] = matrix[i - 1][j - 1];
185
+ } else {
186
+ matrix[i][j] = Math.min(
187
+ matrix[i - 1][j - 1] + 1,
188
+ matrix[i][j - 1] + 1,
189
+ matrix[i - 1][j] + 1
190
+ );
191
+ }
192
+ }
193
+ }
194
+ return matrix[str2.length][str1.length];
195
+ }
196
+ /**
197
+ * Helper: Compare frame inputs
198
+ */
199
+ compareInputs(inputs1, inputs2) {
200
+ const keys1 = Object.keys(inputs1 || {});
201
+ const keys2 = Object.keys(inputs2 || {});
202
+ const allKeys = /* @__PURE__ */ new Set([...keys1, ...keys2]);
203
+ if (allKeys.size === 0) return 1;
204
+ let matches = 0;
205
+ for (const key of allKeys) {
206
+ if (JSON.stringify(inputs1[key]) === JSON.stringify(inputs2[key])) {
207
+ matches++;
208
+ }
209
+ }
210
+ return matches / allKeys.size;
211
+ }
212
+ /**
213
+ * Helper: Calculate severity for parallel solutions
214
+ */
215
+ calculateParallelSeverity(frame1, frame2) {
216
+ if (frame1.state === "closed" && frame2.state === "closed") {
217
+ const outputSimilarity = this.compareInputs(
218
+ frame1.outputs,
219
+ frame2.outputs
220
+ );
221
+ if (outputSimilarity < 0.5) return "critical";
222
+ if (outputSimilarity < 0.7) return "high";
223
+ }
224
+ if (frame1.parent_frame_id === frame2.parent_frame_id) {
225
+ return "high";
226
+ }
227
+ return "medium";
228
+ }
229
+ /**
230
+ * Helper: Extract decision events
231
+ */
232
+ extractDecisions(events) {
233
+ return events.filter(
234
+ (e) => e.event_type === "decision" || e.payload?.type === "decision" || e.payload?.decision !== void 0
235
+ );
236
+ }
237
+ /**
238
+ * Helper: Check if two decisions conflict
239
+ */
240
+ decisionsConflict(d1, d2) {
241
+ const resource1 = d1.payload?.resource || d1.payload?.path;
242
+ const resource2 = d2.payload?.resource || d2.payload?.path;
243
+ if (resource1 && resource2 && resource1 === resource2) {
244
+ return d1.payload?.decision !== d2.payload?.decision;
245
+ }
246
+ return this.hasLogicalConflict(d1.payload, d2.payload);
247
+ }
248
+ /**
249
+ * Helper: Check for logical conflicts in payloads
250
+ */
251
+ hasLogicalConflict(payload1, payload2) {
252
+ if (payload1?.architecture && payload2?.architecture) {
253
+ return payload1.architecture !== payload2.architecture;
254
+ }
255
+ if (payload1?.technology && payload2?.technology) {
256
+ return payload1.technology !== payload2.technology;
257
+ }
258
+ return false;
259
+ }
260
+ /**
261
+ * Helper: Assess impact of conflicting decisions
262
+ */
263
+ assessImpact(d1, d2) {
264
+ if (d1.payload?.type === "architecture" || d2.payload?.type === "architecture") {
265
+ return "high";
266
+ }
267
+ if (d1.payload?.scope === "implementation" || d2.payload?.scope === "implementation") {
268
+ return "medium";
269
+ }
270
+ return "low";
271
+ }
272
+ /**
273
+ * Helper: Check if decisions can coexist
274
+ */
275
+ canCoexist(d1, d2) {
276
+ if (d1.payload?.scope !== d2.payload?.scope) {
277
+ return true;
278
+ }
279
+ const resource1 = d1.payload?.resource;
280
+ const resource2 = d2.payload?.resource;
281
+ return resource1 !== resource2;
282
+ }
283
+ /**
284
+ * Helper: Build frame tree structure
285
+ */
286
+ buildFrameTree(frames) {
287
+ const tree = /* @__PURE__ */ new Map();
288
+ for (const frame of frames) {
289
+ if (frame.parent_frame_id) {
290
+ if (!tree.has(frame.parent_frame_id)) {
291
+ tree.set(frame.parent_frame_id, /* @__PURE__ */ new Set());
292
+ }
293
+ const parentSet = tree.get(frame.parent_frame_id);
294
+ if (parentSet) {
295
+ parentSet.add(frame.frame_id);
296
+ }
297
+ }
298
+ }
299
+ return tree;
300
+ }
301
+ /**
302
+ * Helper: Find divergence points in trees
303
+ */
304
+ findDivergences(tree1, tree2) {
305
+ const divergences = [];
306
+ for (const [node, children1] of tree1) {
307
+ if (tree2.has(node)) {
308
+ const children2 = tree2.get(node);
309
+ if (children2 && !this.setsEqual(children1, children2)) {
310
+ divergences.push({
311
+ node1: node,
312
+ node2: node,
313
+ depth: this.calculateDepth(node, tree1)
314
+ });
315
+ }
316
+ }
317
+ }
318
+ return divergences;
319
+ }
320
+ /**
321
+ * Helper: Check if two sets are equal
322
+ */
323
+ setsEqual(set1, set2) {
324
+ if (set1.size !== set2.size) return false;
325
+ for (const item of set1) {
326
+ if (!set2.has(item)) return false;
327
+ }
328
+ return true;
329
+ }
330
+ /**
331
+ * Helper: Calculate node depth in tree
332
+ */
333
+ calculateDepth(node, tree) {
334
+ let depth = 0;
335
+ let current = node;
336
+ for (const [parent, children] of tree) {
337
+ if (children.has(current)) {
338
+ depth++;
339
+ current = parent;
340
+ }
341
+ }
342
+ return depth;
343
+ }
344
+ /**
345
+ * Helper: Calculate divergence severity
346
+ */
347
+ calculateDivergenceSeverity(divergence) {
348
+ if (divergence.depth === 0) return "critical";
349
+ if (divergence.depth === 1) return "high";
350
+ if (divergence.depth === 2) return "medium";
351
+ return "low";
352
+ }
353
+ /**
354
+ * Helper: Extract paths from frames
355
+ */
356
+ extractPaths(frame1, frame2) {
357
+ const paths = [];
358
+ if (frame1.inputs?.path) paths.push(frame1.inputs.path);
359
+ if (frame2.inputs?.path) paths.push(frame2.inputs.path);
360
+ if (frame1.outputs?.files) paths.push(...frame1.outputs.files);
361
+ if (frame2.outputs?.files) paths.push(...frame2.outputs.files);
362
+ return [...new Set(paths)];
363
+ }
364
+ /**
365
+ * Helper: Extract solution from frame
366
+ */
367
+ extractSolution(frame) {
368
+ return frame.outputs?.solution || frame.digest_text || "No solution description";
369
+ }
370
+ /**
371
+ * Helper: Analyze approach taken
372
+ */
373
+ analyzeApproach(frame) {
374
+ if (frame.outputs?.approach) return frame.outputs.approach;
375
+ if (frame.type === "debug") return "Debug approach";
376
+ if (frame.type === "review") return "Review approach";
377
+ return "Standard approach";
378
+ }
379
+ /**
380
+ * Helper: Calculate solution effectiveness
381
+ */
382
+ calculateEffectiveness(frame) {
383
+ let score = 0.5;
384
+ if (frame.state === "closed") score += 0.2;
385
+ if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.1;
386
+ if (frame.digest_text) score += 0.1;
387
+ if (frame.closed_at && frame.created_at) {
388
+ const duration = frame.closed_at - frame.created_at;
389
+ if (duration < 3e5) score += 0.1;
390
+ }
391
+ return Math.min(score, 1);
392
+ }
393
+ /**
394
+ * Helper: Group similar frames together
395
+ */
396
+ groupSimilarFrames(frames) {
397
+ const groups = [];
398
+ const processed = /* @__PURE__ */ new Set();
399
+ for (const frame of frames) {
400
+ if (processed.has(frame.frame_id)) continue;
401
+ const group = [frame];
402
+ processed.add(frame.frame_id);
403
+ for (const other of frames) {
404
+ if (!processed.has(other.frame_id) && this.framesAreSimilar(frame, other)) {
405
+ group.push(other);
406
+ processed.add(other.frame_id);
407
+ }
408
+ }
409
+ groups.push(group);
410
+ }
411
+ return groups;
412
+ }
413
+ /**
414
+ * Helper: Summarize conflict types
415
+ */
416
+ summarizeConflictTypes(conflicts) {
417
+ const summary = {
418
+ parallel_solution: 0,
419
+ conflicting_decision: 0,
420
+ structural_divergence: 0
421
+ };
422
+ for (const conflict of conflicts) {
423
+ summary[conflict.type]++;
424
+ }
425
+ return summary;
426
+ }
427
+ }
428
+ export {
429
+ ConflictDetector
430
+ };
431
+ //# sourceMappingURL=conflict-detector.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/merge/conflict-detector.ts"],
4
+ "sourcesContent": ["/**\n * Conflict Detection Engine\n * Detects paradoxes in parallel frame timelines\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n MergeConflict,\n FrameStack,\n ParallelSolution,\n DecisionConflict,\n} from './types.js';\nimport { Frame, Event } from '../context/index.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport class ConflictDetector {\n private readonly SIMILARITY_THRESHOLD = 0.8;\n\n /**\n * Detect all types of conflicts between two frame stacks\n */\n detectConflicts(stack1: FrameStack, stack2: FrameStack): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Detect parallel solution conflicts\n const parallelConflicts = this.detectParallelSolutions(stack1, stack2);\n conflicts.push(...parallelConflicts);\n\n // Detect conflicting decisions\n const decisionConflicts = this.detectConflictingDecisions(\n stack1.events,\n stack2.events\n );\n conflicts.push(...decisionConflicts);\n\n // Detect structural divergence\n const structuralConflicts = this.detectStructuralDivergence(\n stack1.frames,\n stack2.frames\n );\n conflicts.push(...structuralConflicts);\n\n logger.info(`Detected ${conflicts.length} conflicts between stacks`, {\n stack1Id: stack1.id,\n stack2Id: stack2.id,\n conflictTypes: this.summarizeConflictTypes(conflicts),\n });\n\n return conflicts;\n }\n\n /**\n * Analyze frames to find parallel solutions to the same problem\n */\n analyzeParallelSolutions(frames: Frame[]): ParallelSolution[] {\n const solutions: ParallelSolution[] = [];\n\n // Group frames by similar purpose/name\n const groupedFrames = this.groupSimilarFrames(frames);\n\n for (const group of groupedFrames) {\n if (group.length > 1) {\n // Multiple frames solving similar problems\n group.forEach((frame) => {\n solutions.push({\n frameId: frame.frame_id,\n solution: this.extractSolution(frame),\n approach: this.analyzeApproach(frame),\n author: frame.inputs?.author || 'unknown',\n timestamp: frame.created_at,\n effectiveness: this.calculateEffectiveness(frame),\n });\n });\n }\n }\n\n return solutions;\n }\n\n /**\n * Identify conflicting decisions in event streams\n */\n identifyConflictingDecisions(events: Event[]): DecisionConflict[] {\n const conflicts: DecisionConflict[] = [];\n const decisions = this.extractDecisions(events);\n\n for (let i = 0; i < decisions.length; i++) {\n for (let j = i + 1; j < decisions.length; j++) {\n if (this.decisionsConflict(decisions[i], decisions[j])) {\n conflicts.push({\n decision1: decisions[i].payload?.decision || '',\n decision2: decisions[j].payload?.decision || '',\n impact: this.assessImpact(decisions[i], decisions[j]),\n canCoexist: this.canCoexist(decisions[i], decisions[j]),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect parallel solutions between two stacks\n */\n private detectParallelSolutions(\n stack1: FrameStack,\n stack2: FrameStack\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Find frames that appear to solve the same problem\n for (const frame1 of stack1.frames) {\n for (const frame2 of stack2.frames) {\n if (\n this.framesAreSimilar(frame1, frame2) &&\n !this.framesAreIdentical(frame1, frame2)\n ) {\n conflicts.push({\n id: uuidv4(),\n type: 'parallel_solution',\n frameId1: frame1.frame_id,\n frameId2: frame2.frame_id,\n severity: this.calculateParallelSeverity(frame1, frame2),\n description: `Parallel solutions detected: \"${frame1.name}\" vs \"${frame2.name}\"`,\n detectedAt: Date.now(),\n conflictingPaths: this.extractPaths(frame1, frame2),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect conflicting decisions between event streams\n */\n private detectConflictingDecisions(\n events1: Event[],\n events2: Event[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n const decisions1 = this.extractDecisions(events1);\n const decisions2 = this.extractDecisions(events2);\n\n for (const d1 of decisions1) {\n for (const d2 of decisions2) {\n if (this.decisionsConflict(d1, d2)) {\n conflicts.push({\n id: uuidv4(),\n type: 'conflicting_decision',\n frameId1: d1.frame_id,\n frameId2: d2.frame_id,\n severity: this.assessImpact(d1, d2) as\n | 'low'\n | 'medium'\n | 'high'\n | 'critical',\n description: `Conflicting decisions: \"${d1.payload?.decision}\" vs \"${d2.payload?.decision}\"`,\n detectedAt: Date.now(),\n });\n }\n }\n }\n\n return conflicts;\n }\n\n /**\n * Detect structural divergence in frame hierarchies\n */\n private detectStructuralDivergence(\n frames1: Frame[],\n frames2: Frame[]\n ): MergeConflict[] {\n const conflicts: MergeConflict[] = [];\n\n // Build frame trees\n const tree1 = this.buildFrameTree(frames1);\n const tree2 = this.buildFrameTree(frames2);\n\n // Find divergence points\n const divergences = this.findDivergences(tree1, tree2);\n\n for (const divergence of divergences) {\n conflicts.push({\n id: uuidv4(),\n type: 'structural_divergence',\n frameId1: divergence.node1,\n frameId2: divergence.node2,\n severity: this.calculateDivergenceSeverity(divergence),\n description: `Structural divergence at depth ${divergence.depth}`,\n detectedAt: Date.now(),\n });\n }\n\n return conflicts;\n }\n\n /**\n * Helper: Check if two frames are similar (solving same problem)\n */\n private framesAreSimilar(frame1: Frame, frame2: Frame): boolean {\n // Check name similarity\n const nameSimilarity = this.calculateSimilarity(frame1.name, frame2.name);\n if (nameSimilarity > this.SIMILARITY_THRESHOLD) return true;\n\n // Check type and parent\n if (\n frame1.type === frame2.type &&\n frame1.parent_frame_id === frame2.parent_frame_id\n ) {\n return true;\n }\n\n // Check inputs similarity\n const inputSimilarity = this.compareInputs(frame1.inputs, frame2.inputs);\n return inputSimilarity > this.SIMILARITY_THRESHOLD;\n }\n\n /**\n * Helper: Check if frames are identical\n */\n private framesAreIdentical(frame1: Frame, frame2: Frame): boolean {\n return frame1.frame_id === frame2.frame_id;\n }\n\n /**\n * Helper: Calculate string similarity (Levenshtein-based)\n */\n private calculateSimilarity(str1: string, str2: string): number {\n const maxLen = Math.max(str1.length, str2.length);\n if (maxLen === 0) return 1;\n\n const distance = this.levenshteinDistance(str1, str2);\n return 1 - distance / maxLen;\n }\n\n /**\n * Helper: Levenshtein distance implementation\n */\n private levenshteinDistance(str1: string, str2: string): number {\n const matrix: number[][] = [];\n\n for (let i = 0; i <= str2.length; i++) {\n matrix[i] = [i];\n }\n\n for (let j = 0; j <= str1.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= str2.length; i++) {\n for (let j = 1; j <= str1.length; j++) {\n if (str2.charAt(i - 1) === str1.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1,\n matrix[i][j - 1] + 1,\n matrix[i - 1][j] + 1\n );\n }\n }\n }\n\n return matrix[str2.length][str1.length];\n }\n\n /**\n * Helper: Compare frame inputs\n */\n private compareInputs(\n inputs1: Record<string, unknown>,\n inputs2: Record<string, unknown>\n ): number {\n const keys1 = Object.keys(inputs1 || {});\n const keys2 = Object.keys(inputs2 || {});\n const allKeys = new Set([...keys1, ...keys2]);\n\n if (allKeys.size === 0) return 1;\n\n let matches = 0;\n for (const key of allKeys) {\n if (JSON.stringify(inputs1[key]) === JSON.stringify(inputs2[key])) {\n matches++;\n }\n }\n\n return matches / allKeys.size;\n }\n\n /**\n * Helper: Calculate severity for parallel solutions\n */\n private calculateParallelSeverity(\n frame1: Frame,\n frame2: Frame\n ): 'low' | 'medium' | 'high' | 'critical' {\n // Critical if both are completed and have different outputs\n if (frame1.state === 'closed' && frame2.state === 'closed') {\n const outputSimilarity = this.compareInputs(\n frame1.outputs,\n frame2.outputs\n );\n if (outputSimilarity < 0.5) return 'critical';\n if (outputSimilarity < 0.7) return 'high';\n }\n\n // High if different approaches to same parent task\n if (frame1.parent_frame_id === frame2.parent_frame_id) {\n return 'high';\n }\n\n return 'medium';\n }\n\n /**\n * Helper: Extract decision events\n */\n private extractDecisions(events: Event[]): Event[] {\n return events.filter(\n (e) =>\n e.event_type === 'decision' ||\n e.payload?.type === 'decision' ||\n e.payload?.decision !== undefined\n );\n }\n\n /**\n * Helper: Check if two decisions conflict\n */\n private decisionsConflict(d1: Event, d2: Event): boolean {\n // Check if decisions affect same resource/path\n const resource1 = d1.payload?.resource || d1.payload?.path;\n const resource2 = d2.payload?.resource || d2.payload?.path;\n\n if (resource1 && resource2 && resource1 === resource2) {\n // Different decisions on same resource\n return d1.payload?.decision !== d2.payload?.decision;\n }\n\n // Check for logical conflicts\n return this.hasLogicalConflict(d1.payload, d2.payload);\n }\n\n /**\n * Helper: Check for logical conflicts in payloads\n */\n private hasLogicalConflict(payload1: unknown, payload2: unknown): boolean {\n // Architecture decisions\n if (payload1?.architecture && payload2?.architecture) {\n return payload1.architecture !== payload2.architecture;\n }\n\n // Technology choices\n if (payload1?.technology && payload2?.technology) {\n return payload1.technology !== payload2.technology;\n }\n\n return false;\n }\n\n /**\n * Helper: Assess impact of conflicting decisions\n */\n private assessImpact(d1: Event, d2: Event): 'low' | 'medium' | 'high' {\n // High impact for architecture/design decisions\n if (\n d1.payload?.type === 'architecture' ||\n d2.payload?.type === 'architecture'\n ) {\n return 'high';\n }\n\n // Medium for implementation decisions\n if (\n d1.payload?.scope === 'implementation' ||\n d2.payload?.scope === 'implementation'\n ) {\n return 'medium';\n }\n\n return 'low';\n }\n\n /**\n * Helper: Check if decisions can coexist\n */\n private canCoexist(d1: Event, d2: Event): boolean {\n // Different scopes can coexist\n if (d1.payload?.scope !== d2.payload?.scope) {\n return true;\n }\n\n // Non-conflicting resources can coexist\n const resource1 = d1.payload?.resource;\n const resource2 = d2.payload?.resource;\n\n return resource1 !== resource2;\n }\n\n /**\n * Helper: Build frame tree structure\n */\n private buildFrameTree(frames: Frame[]): Map<string, Set<string>> {\n const tree = new Map<string, Set<string>>();\n\n for (const frame of frames) {\n if (frame.parent_frame_id) {\n if (!tree.has(frame.parent_frame_id)) {\n tree.set(frame.parent_frame_id, new Set());\n }\n const parentSet = tree.get(frame.parent_frame_id);\n if (parentSet) {\n parentSet.add(frame.frame_id);\n }\n }\n }\n\n return tree;\n }\n\n /**\n * Helper: Find divergence points in trees\n */\n private findDivergences(\n tree1: Map<string, Set<string>>,\n tree2: Map<string, Set<string>>\n ): Array<{ node1: string; node2: string; depth: number }> {\n const divergences: Array<{ node1: string; node2: string; depth: number }> =\n [];\n\n // Find nodes that exist in both but have different children\n for (const [node, children1] of tree1) {\n if (tree2.has(node)) {\n const children2 = tree2.get(node);\n if (children2 && !this.setsEqual(children1, children2)) {\n divergences.push({\n node1: node,\n node2: node,\n depth: this.calculateDepth(node, tree1),\n });\n }\n }\n }\n\n return divergences;\n }\n\n /**\n * Helper: Check if two sets are equal\n */\n private setsEqual<T>(set1: Set<T>, set2: Set<T>): boolean {\n if (set1.size !== set2.size) return false;\n for (const item of set1) {\n if (!set2.has(item)) return false;\n }\n return true;\n }\n\n /**\n * Helper: Calculate node depth in tree\n */\n private calculateDepth(node: string, tree: Map<string, Set<string>>): number {\n let depth = 0;\n let current = node;\n\n // Find parent of current node\n for (const [parent, children] of tree) {\n if (children.has(current)) {\n depth++;\n current = parent;\n }\n }\n\n return depth;\n }\n\n /**\n * Helper: Calculate divergence severity\n */\n private calculateDivergenceSeverity(divergence: {\n depth: number;\n }): 'low' | 'medium' | 'high' | 'critical' {\n if (divergence.depth === 0) return 'critical'; // Root divergence\n if (divergence.depth === 1) return 'high';\n if (divergence.depth === 2) return 'medium';\n return 'low';\n }\n\n /**\n * Helper: Extract paths from frames\n */\n private extractPaths(frame1: Frame, frame2: Frame): string[] {\n const paths: string[] = [];\n\n if (frame1.inputs?.path) paths.push(frame1.inputs.path);\n if (frame2.inputs?.path) paths.push(frame2.inputs.path);\n if (frame1.outputs?.files) paths.push(...frame1.outputs.files);\n if (frame2.outputs?.files) paths.push(...frame2.outputs.files);\n\n return [...new Set(paths)];\n }\n\n /**\n * Helper: Extract solution from frame\n */\n private extractSolution(frame: Frame): string {\n return (\n frame.outputs?.solution || frame.digest_text || 'No solution description'\n );\n }\n\n /**\n * Helper: Analyze approach taken\n */\n private analyzeApproach(frame: Frame): string {\n if (frame.outputs?.approach) return frame.outputs.approach;\n if (frame.type === 'debug') return 'Debug approach';\n if (frame.type === 'review') return 'Review approach';\n return 'Standard approach';\n }\n\n /**\n * Helper: Calculate solution effectiveness\n */\n private calculateEffectiveness(frame: Frame): number {\n let score = 0.5; // Base score\n\n // Completed frames are more effective\n if (frame.state === 'closed') score += 0.2;\n\n // Frames with outputs are more effective\n if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.1;\n\n // Frames with digests are more effective\n if (frame.digest_text) score += 0.1;\n\n // Quick completion is more effective\n if (frame.closed_at && frame.created_at) {\n const duration = frame.closed_at - frame.created_at;\n if (duration < 300000) score += 0.1; // Less than 5 minutes\n }\n\n return Math.min(score, 1);\n }\n\n /**\n * Helper: Group similar frames together\n */\n private groupSimilarFrames(frames: Frame[]): Frame[][] {\n const groups: Frame[][] = [];\n const processed = new Set<string>();\n\n for (const frame of frames) {\n if (processed.has(frame.frame_id)) continue;\n\n const group = [frame];\n processed.add(frame.frame_id);\n\n for (const other of frames) {\n if (\n !processed.has(other.frame_id) &&\n this.framesAreSimilar(frame, other)\n ) {\n group.push(other);\n processed.add(other.frame_id);\n }\n }\n\n groups.push(group);\n }\n\n return groups;\n }\n\n /**\n * Helper: Summarize conflict types\n */\n private summarizeConflictTypes(\n conflicts: MergeConflict[]\n ): Record<string, number> {\n const summary: Record<string, number> = {\n parallel_solution: 0,\n conflicting_decision: 0,\n structural_divergence: 0,\n };\n\n for (const conflict of conflicts) {\n summary[conflict.type]++;\n }\n\n return summary;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
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
+ export * from "./types.js";
6
+ export * from "./conflict-detector.js";
7
+ export * from "./stack-diff.js";
8
+ export * from "./resolution-engine.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/merge/index.ts"],
4
+ "sourcesContent": ["/**\n * Stack Merge Conflict Resolution System\n * STA-101: Export all merge components\n */\n\nexport * from './types.js';\nexport * from './conflict-detector.js';\nexport * from './stack-diff.js';\nexport * from './resolution-engine.js';\n"],
5
+ "mappings": ";;;;AAKA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }