@stackmemoryai/stackmemory 0.5.58 → 0.5.61

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 (932) hide show
  1. package/README.md +105 -1
  2. package/dist/scripts/benchmark-performance.js +48 -0
  3. package/dist/scripts/benchmark-performance.js.map +7 -0
  4. package/dist/scripts/check-redis.js +42 -0
  5. package/dist/scripts/check-redis.js.map +7 -0
  6. package/dist/scripts/initialize.js +116 -0
  7. package/dist/scripts/initialize.js.map +7 -0
  8. package/dist/scripts/list-linear-tasks.js +124 -0
  9. package/dist/scripts/list-linear-tasks.js.map +7 -0
  10. package/dist/scripts/measure-handoff-impact.js +340 -0
  11. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  12. package/dist/scripts/query-chromadb.js +160 -0
  13. package/dist/scripts/query-chromadb.js.map +7 -0
  14. package/dist/scripts/show-linear-summary.js +119 -0
  15. package/dist/scripts/show-linear-summary.js.map +7 -0
  16. package/dist/scripts/simple-swarm-demo.js +90 -0
  17. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  18. package/dist/scripts/status.js +155 -0
  19. package/dist/scripts/status.js.map +7 -0
  20. package/dist/scripts/test-chromadb-sync.js +192 -0
  21. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  22. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  23. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  24. package/dist/scripts/test-ralph-iterations.js +121 -0
  25. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  26. package/dist/scripts/test-redis-storage.js +389 -0
  27. package/dist/scripts/test-redis-storage.js.map +7 -0
  28. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  29. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  30. package/dist/scripts/test-swarm-fixes.js +125 -0
  31. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  32. package/dist/scripts/test-swarm-tui.js +23 -0
  33. package/dist/scripts/test-swarm-tui.js.map +7 -0
  34. package/dist/scripts/test-tui-shortcuts.js +52 -0
  35. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  36. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  37. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  38. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  39. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  40. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  41. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  42. package/dist/src/cli/auto-detect.js.map +7 -0
  43. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  44. package/dist/src/cli/claude-sm.js +1236 -0
  45. package/dist/src/cli/claude-sm.js.map +7 -0
  46. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  47. package/dist/src/cli/codex-sm.js.map +7 -0
  48. package/dist/src/cli/commands/api.js.map +7 -0
  49. package/dist/src/cli/commands/auto-background.js.map +7 -0
  50. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  51. package/dist/src/cli/commands/clear.js.map +7 -0
  52. package/dist/src/cli/commands/config.js.map +7 -0
  53. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  54. package/dist/src/cli/commands/context.js.map +7 -0
  55. package/dist/src/cli/commands/daemon.js.map +7 -0
  56. package/dist/src/cli/commands/dashboard.js.map +7 -0
  57. package/dist/src/cli/commands/db.js.map +7 -0
  58. package/dist/src/cli/commands/decision.js.map +7 -0
  59. package/dist/src/cli/commands/discovery.js.map +7 -0
  60. package/dist/src/cli/commands/handoff.js.map +7 -0
  61. package/dist/src/cli/commands/hooks.js.map +7 -0
  62. package/dist/src/cli/commands/linear.js.map +7 -0
  63. package/dist/src/cli/commands/log.js.map +7 -0
  64. package/dist/src/cli/commands/login.js.map +7 -0
  65. package/dist/src/cli/commands/migrate.js.map +7 -0
  66. package/dist/src/cli/commands/model.js.map +7 -0
  67. package/dist/src/cli/commands/onboard.js.map +7 -0
  68. package/dist/src/cli/commands/projects.js.map +7 -0
  69. package/dist/src/cli/commands/ralph.js.map +7 -0
  70. package/dist/src/cli/commands/retrieval.js.map +7 -0
  71. package/dist/src/cli/commands/search.js +173 -0
  72. package/dist/src/cli/commands/search.js.map +7 -0
  73. package/dist/src/cli/commands/service.js.map +7 -0
  74. package/dist/src/cli/commands/session.js.map +7 -0
  75. package/dist/src/cli/commands/settings.js.map +7 -0
  76. package/dist/src/cli/commands/setup.js.map +7 -0
  77. package/dist/src/cli/commands/shell.js.map +7 -0
  78. package/dist/src/cli/commands/signup.js.map +7 -0
  79. package/dist/src/cli/commands/skills.js.map +7 -0
  80. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  81. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  82. package/dist/src/cli/commands/sweep.js.map +7 -0
  83. package/dist/src/cli/commands/tasks.js.map +7 -0
  84. package/dist/src/cli/commands/worktree.js.map +7 -0
  85. package/dist/src/cli/index.js +609 -0
  86. package/dist/src/cli/index.js.map +7 -0
  87. package/dist/src/cli/opencode-sm.js.map +7 -0
  88. package/dist/src/cli/utils/viewer.js.map +7 -0
  89. package/dist/src/core/config/config-manager.js.map +7 -0
  90. package/dist/src/core/config/feature-flags.js.map +7 -0
  91. package/dist/src/core/config/storage-config.js.map +7 -0
  92. package/dist/src/core/config/types.js.map +7 -0
  93. package/dist/src/core/context/auto-context.js.map +7 -0
  94. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  95. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  96. package/dist/src/core/context/frame-database.js.map +7 -0
  97. package/dist/src/core/context/frame-digest.js.map +7 -0
  98. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  99. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  100. package/dist/src/core/context/frame-recovery.js.map +7 -0
  101. package/dist/src/core/context/frame-stack.js.map +7 -0
  102. package/dist/src/core/context/index.js.map +7 -0
  103. package/dist/src/core/context/permission-manager.js.map +7 -0
  104. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  105. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  106. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  107. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  108. package/dist/src/core/context/validation.js.map +7 -0
  109. package/dist/src/core/database/batch-operations.js.map +7 -0
  110. package/dist/src/core/database/connection-pool.js.map +7 -0
  111. package/dist/src/core/database/database-adapter.js.map +7 -0
  112. package/dist/src/core/database/migration-manager.js.map +7 -0
  113. package/dist/src/core/database/query-cache.js.map +7 -0
  114. package/dist/src/core/database/query-router.js.map +7 -0
  115. package/dist/src/core/database/sqlite-adapter.js +738 -0
  116. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  117. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  118. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  119. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  120. package/dist/src/core/digest/index.js.map +7 -0
  121. package/dist/src/core/digest/types.js.map +7 -0
  122. package/dist/src/core/errors/error-utils.js +208 -0
  123. package/dist/src/core/errors/error-utils.js.map +7 -0
  124. package/dist/src/core/errors/index.js +521 -0
  125. package/dist/src/core/errors/index.js.map +7 -0
  126. package/dist/src/core/errors/recovery.js.map +7 -0
  127. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  128. package/dist/src/core/extensions/custom-tools.js +567 -0
  129. package/dist/src/core/extensions/custom-tools.js.map +7 -0
  130. package/dist/src/core/extensions/index.js +55 -0
  131. package/dist/src/core/extensions/index.js.map +7 -0
  132. package/dist/src/core/extensions/loader.js +709 -0
  133. package/dist/src/core/extensions/loader.js.map +7 -0
  134. package/dist/src/core/extensions/plugin-system.js +506 -0
  135. package/dist/src/core/extensions/plugin-system.js.map +7 -0
  136. package/dist/src/core/extensions/provider-adapter.js +617 -0
  137. package/dist/src/core/extensions/provider-adapter.js.map +7 -0
  138. package/dist/src/core/extensions/sandbox-runtime.js +664 -0
  139. package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
  140. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  141. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  142. package/dist/src/core/merge/index.js.map +7 -0
  143. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  144. package/dist/src/core/merge/stack-diff.js.map +7 -0
  145. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  146. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  147. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  148. package/dist/src/core/models/model-router.js.map +7 -0
  149. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  150. package/dist/src/core/monitoring/logger.js +202 -0
  151. package/dist/src/core/monitoring/logger.js.map +7 -0
  152. package/dist/src/core/monitoring/metrics.js.map +7 -0
  153. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  154. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  155. package/dist/src/core/performance/context-cache.js.map +7 -0
  156. package/dist/src/core/performance/index.js.map +7 -0
  157. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  158. package/dist/src/core/performance/monitor.js.map +7 -0
  159. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  160. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  161. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  162. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  163. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  164. package/dist/src/core/projects/project-isolation.js.map +7 -0
  165. package/dist/src/core/projects/project-manager.js.map +7 -0
  166. package/dist/src/core/query/query-parser.js.map +7 -0
  167. package/dist/src/core/query/query-templates.js.map +7 -0
  168. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  169. package/dist/src/core/retrieval/index.js.map +7 -0
  170. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  171. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  172. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  173. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  174. package/dist/src/core/retrieval/types.js.map +7 -0
  175. package/dist/src/core/security/index.js +35 -0
  176. package/dist/src/core/security/index.js.map +7 -0
  177. package/dist/src/core/security/input-sanitizer.js +321 -0
  178. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  179. package/dist/src/core/session/clear-survival.js.map +7 -0
  180. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  181. package/dist/src/core/session/handoff-generator.js.map +7 -0
  182. package/dist/src/core/session/index.js.map +7 -0
  183. package/dist/src/core/session/session-manager.js.map +7 -0
  184. package/dist/src/core/skills/index.js.map +7 -0
  185. package/dist/src/core/skills/skill-storage.js.map +7 -0
  186. package/dist/src/core/skills/types.js.map +7 -0
  187. package/dist/src/core/storage/chromadb-adapter.js +380 -0
  188. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  189. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  190. package/dist/src/core/storage/remote-storage.js.map +7 -0
  191. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  192. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  193. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  194. package/dist/src/core/trace/debug-trace.js.map +7 -0
  195. package/dist/src/core/trace/index.js.map +7 -0
  196. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  197. package/dist/src/core/trace/trace-detector.js.map +7 -0
  198. package/dist/src/core/trace/trace-store.js.map +7 -0
  199. package/dist/src/core/trace/types.js.map +7 -0
  200. package/dist/src/core/utils/async-mutex.js.map +7 -0
  201. package/dist/src/core/utils/compression.js.map +7 -0
  202. package/dist/src/core/utils/update-checker.js.map +7 -0
  203. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  204. package/dist/src/daemon/daemon-config.js.map +7 -0
  205. package/dist/src/daemon/services/context-service.js.map +7 -0
  206. package/dist/src/daemon/services/linear-service.js.map +7 -0
  207. package/dist/src/daemon/session-daemon.js.map +7 -0
  208. package/dist/src/daemon/unified-daemon.js.map +7 -0
  209. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  210. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  211. package/dist/src/features/analytics/index.js.map +7 -0
  212. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  213. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  214. package/dist/src/features/sweep/index.js.map +7 -0
  215. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  216. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  217. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  218. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  219. package/dist/src/features/sweep/status-bar.js.map +7 -0
  220. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  221. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  222. package/dist/src/features/sweep/types.js.map +7 -0
  223. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  224. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  225. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  226. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  227. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  228. package/dist/src/features/web/server/index.js.map +7 -0
  229. package/dist/src/hooks/auto-background.js.map +7 -0
  230. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  231. package/dist/src/hooks/config.js.map +7 -0
  232. package/dist/src/hooks/daemon.js.map +7 -0
  233. package/dist/src/hooks/events.js.map +7 -0
  234. package/dist/src/hooks/index.js.map +7 -0
  235. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  236. package/dist/src/hooks/schemas.js.map +7 -0
  237. package/dist/src/hooks/secure-fs.js.map +7 -0
  238. package/dist/src/hooks/security-logger.js.map +7 -0
  239. package/dist/src/hooks/session-summary.js.map +7 -0
  240. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  241. package/dist/src/hooks/sms-notify.js.map +7 -0
  242. package/dist/src/hooks/sms-watcher.js.map +7 -0
  243. package/dist/src/hooks/sms-webhook.js.map +7 -0
  244. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  245. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  246. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  247. package/dist/src/index.js.map +7 -0
  248. package/dist/src/integrations/anthropic/client.js.map +7 -0
  249. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  250. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  251. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  252. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  253. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  254. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  255. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  256. package/dist/src/integrations/linear/auth.js.map +7 -0
  257. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  258. package/dist/src/integrations/linear/client.js +634 -0
  259. package/dist/src/integrations/linear/client.js.map +7 -0
  260. package/dist/src/integrations/linear/config.js.map +7 -0
  261. package/dist/src/integrations/linear/migration.js.map +7 -0
  262. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  263. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  264. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  265. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  266. package/dist/src/integrations/linear/sync.js.map +7 -0
  267. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  268. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  269. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  270. package/dist/src/integrations/linear/webhook.js.map +7 -0
  271. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  272. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  273. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  274. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  275. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  276. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  277. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  278. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  279. package/dist/src/integrations/mcp/index.js.map +7 -0
  280. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  281. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  282. package/dist/src/integrations/mcp/remote-server.js +682 -0
  283. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  284. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  285. package/dist/src/integrations/mcp/server.js +1975 -0
  286. package/dist/src/integrations/mcp/server.js.map +7 -0
  287. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  288. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  289. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  290. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  291. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  292. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  293. package/dist/src/integrations/ralph/index.js.map +7 -0
  294. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  295. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  296. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  297. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  298. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  299. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  300. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  301. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  302. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  303. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  304. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  305. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  306. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  307. package/dist/src/integrations/ralph/types.js +5 -0
  308. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  309. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  310. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  311. package/dist/src/models/user.model.js.map +7 -0
  312. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  313. package/dist/src/services/config-service.js.map +7 -0
  314. package/dist/src/services/context-service.js.map +7 -0
  315. package/dist/src/skills/api-discovery.js.map +7 -0
  316. package/dist/src/skills/api-skill.js.map +7 -0
  317. package/dist/src/skills/claude-skills.js.map +7 -0
  318. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  319. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  320. package/dist/src/skills/repo-ingestion-skill.js +632 -0
  321. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  322. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  323. package/dist/src/types/task.js.map +7 -0
  324. package/dist/src/utils/env.js.map +7 -0
  325. package/dist/src/utils/formatting.js.map +7 -0
  326. package/dist/src/utils/process-cleanup.js.map +7 -0
  327. package/package.json +13 -9
  328. package/scripts/background-sync-manager.js +145 -83
  329. package/scripts/claude-sm-autostart.js +17 -12
  330. package/scripts/gepa/README.md +275 -0
  331. package/scripts/gepa/config.json +53 -0
  332. package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
  333. package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
  334. package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
  335. package/scripts/gepa/generations/gen-000/baseline.md +124 -0
  336. package/scripts/gepa/hooks/auto-optimize.js +494 -0
  337. package/scripts/gepa/hooks/eval-tracker.js +203 -0
  338. package/scripts/gepa/hooks/reflect.js +311 -0
  339. package/scripts/gepa/optimize.js +611 -0
  340. package/scripts/gepa/state.json +14 -0
  341. package/scripts/initialize.ts +16 -7
  342. package/scripts/install.sh +14 -62
  343. package/scripts/status.ts +111 -46
  344. package/scripts/test-pre-publish-quick.sh +1 -1
  345. package/dist/agents/core/agent-task-manager.js.map +0 -7
  346. package/dist/agents/testing-agent.js +0 -614
  347. package/dist/agents/testing-agent.js.map +0 -7
  348. package/dist/agents/verifiers/base-verifier.js.map +0 -7
  349. package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
  350. package/dist/agents/verifiers/llm-judge.js.map +0 -7
  351. package/dist/cli/auto-detect.js.map +0 -7
  352. package/dist/cli/browser-test.js +0 -33
  353. package/dist/cli/browser-test.js.map +0 -7
  354. package/dist/cli/claude-sm-danger.js.map +0 -7
  355. package/dist/cli/claude-sm.js +0 -1156
  356. package/dist/cli/claude-sm.js.map +0 -7
  357. package/dist/cli/codex-sm-danger.js.map +0 -7
  358. package/dist/cli/codex-sm.js.map +0 -7
  359. package/dist/cli/commands/api.js.map +0 -7
  360. package/dist/cli/commands/auto-background.js.map +0 -7
  361. package/dist/cli/commands/cleanup-processes.js.map +0 -7
  362. package/dist/cli/commands/clear.js.map +0 -7
  363. package/dist/cli/commands/config.js.map +0 -7
  364. package/dist/cli/commands/context-rehydrate.js.map +0 -7
  365. package/dist/cli/commands/context.js.map +0 -7
  366. package/dist/cli/commands/daemon.js.map +0 -7
  367. package/dist/cli/commands/dashboard.js.map +0 -7
  368. package/dist/cli/commands/db.js.map +0 -7
  369. package/dist/cli/commands/decision.js.map +0 -7
  370. package/dist/cli/commands/discovery.js.map +0 -7
  371. package/dist/cli/commands/handoff.js.map +0 -7
  372. package/dist/cli/commands/hooks.js.map +0 -7
  373. package/dist/cli/commands/linear-unified.js +0 -353
  374. package/dist/cli/commands/linear-unified.js.map +0 -7
  375. package/dist/cli/commands/linear.js.map +0 -7
  376. package/dist/cli/commands/log.js.map +0 -7
  377. package/dist/cli/commands/login.js.map +0 -7
  378. package/dist/cli/commands/migrate.js.map +0 -7
  379. package/dist/cli/commands/model.js.map +0 -7
  380. package/dist/cli/commands/monitor.js +0 -313
  381. package/dist/cli/commands/monitor.js.map +0 -7
  382. package/dist/cli/commands/onboard.js.map +0 -7
  383. package/dist/cli/commands/projects.js.map +0 -7
  384. package/dist/cli/commands/quality.js +0 -413
  385. package/dist/cli/commands/quality.js.map +0 -7
  386. package/dist/cli/commands/ralph.js.map +0 -7
  387. package/dist/cli/commands/retrieval.js.map +0 -7
  388. package/dist/cli/commands/search.js +0 -156
  389. package/dist/cli/commands/search.js.map +0 -7
  390. package/dist/cli/commands/service.js.map +0 -7
  391. package/dist/cli/commands/session.js.map +0 -7
  392. package/dist/cli/commands/settings.js.map +0 -7
  393. package/dist/cli/commands/setup.js.map +0 -7
  394. package/dist/cli/commands/shell.js.map +0 -7
  395. package/dist/cli/commands/signup.js.map +0 -7
  396. package/dist/cli/commands/skills.js.map +0 -7
  397. package/dist/cli/commands/sms-notify.js.map +0 -7
  398. package/dist/cli/commands/storage-tier.js.map +0 -7
  399. package/dist/cli/commands/storage.js +0 -360
  400. package/dist/cli/commands/storage.js.map +0 -7
  401. package/dist/cli/commands/sweep.js.map +0 -7
  402. package/dist/cli/commands/tasks.js.map +0 -7
  403. package/dist/cli/commands/test.js +0 -286
  404. package/dist/cli/commands/test.js.map +0 -7
  405. package/dist/cli/commands/workflow.js +0 -142
  406. package/dist/cli/commands/workflow.js.map +0 -7
  407. package/dist/cli/commands/worktree.js.map +0 -7
  408. package/dist/cli/index.js +0 -594
  409. package/dist/cli/index.js.map +0 -7
  410. package/dist/cli/opencode-sm.js.map +0 -7
  411. package/dist/cli/utils/viewer.js.map +0 -7
  412. package/dist/core/analytics/team-analytics.js +0 -378
  413. package/dist/core/analytics/team-analytics.js.map +0 -7
  414. package/dist/core/config/config-manager.js.map +0 -7
  415. package/dist/core/config/feature-flags.js.map +0 -7
  416. package/dist/core/config/storage-config.js.map +0 -7
  417. package/dist/core/config/types.js.map +0 -7
  418. package/dist/core/context/auto-context.js.map +0 -7
  419. package/dist/core/context/dual-stack-manager.js.map +0 -7
  420. package/dist/core/context/enhanced-rehydration.js.map +0 -7
  421. package/dist/core/context/frame-database.js.map +0 -7
  422. package/dist/core/context/frame-digest.js.map +0 -7
  423. package/dist/core/context/frame-handoff-manager.js.map +0 -7
  424. package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
  425. package/dist/core/context/frame-manager.js +0 -1069
  426. package/dist/core/context/frame-manager.js.map +0 -7
  427. package/dist/core/context/frame-recovery.js.map +0 -7
  428. package/dist/core/context/frame-stack.js.map +0 -7
  429. package/dist/core/context/incremental-gc.js +0 -290
  430. package/dist/core/context/incremental-gc.js.map +0 -7
  431. package/dist/core/context/index.js.map +0 -7
  432. package/dist/core/context/model-aware-compaction.js +0 -623
  433. package/dist/core/context/model-aware-compaction.js.map +0 -7
  434. package/dist/core/context/permission-manager.js.map +0 -7
  435. package/dist/core/context/recursive-context-manager.js.map +0 -7
  436. package/dist/core/context/refactored-frame-manager.js.map +0 -7
  437. package/dist/core/context/shared-context-layer.js.map +0 -7
  438. package/dist/core/context/stack-merge-resolver.js.map +0 -7
  439. package/dist/core/context/validation.js.map +0 -7
  440. package/dist/core/database/batch-operations.js.map +0 -7
  441. package/dist/core/database/connection-pool.js.map +0 -7
  442. package/dist/core/database/database-adapter.js.map +0 -7
  443. package/dist/core/database/migration-manager.js.map +0 -7
  444. package/dist/core/database/paradedb-adapter.js +0 -990
  445. package/dist/core/database/paradedb-adapter.js.map +0 -7
  446. package/dist/core/database/query-cache.js.map +0 -7
  447. package/dist/core/database/query-router.js.map +0 -7
  448. package/dist/core/database/sqlite-adapter.js +0 -728
  449. package/dist/core/database/sqlite-adapter.js.map +0 -7
  450. package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
  451. package/dist/core/digest/frame-digest-integration.js.map +0 -7
  452. package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
  453. package/dist/core/digest/index.js.map +0 -7
  454. package/dist/core/digest/types.js.map +0 -7
  455. package/dist/core/errors/index.js +0 -512
  456. package/dist/core/errors/index.js.map +0 -7
  457. package/dist/core/errors/recovery.js.map +0 -7
  458. package/dist/core/execution/parallel-executor.js.map +0 -7
  459. package/dist/core/frame/workflow-templates.js.map +0 -7
  460. package/dist/core/merge/conflict-detector.js.map +0 -7
  461. package/dist/core/merge/index.js.map +0 -7
  462. package/dist/core/merge/resolution-engine.js.map +0 -7
  463. package/dist/core/merge/stack-diff.js.map +0 -7
  464. package/dist/core/models/fallback-monitor.js.map +0 -7
  465. package/dist/core/models/model-router.js.map +0 -7
  466. package/dist/core/monitoring/error-handler.js.map +0 -7
  467. package/dist/core/monitoring/logger.js +0 -150
  468. package/dist/core/monitoring/logger.js.map +0 -7
  469. package/dist/core/monitoring/metrics.js.map +0 -7
  470. package/dist/core/monitoring/progress-tracker.js.map +0 -7
  471. package/dist/core/monitoring/session-monitor.js.map +0 -7
  472. package/dist/core/performance/context-cache.js.map +0 -7
  473. package/dist/core/performance/index.js.map +0 -7
  474. package/dist/core/performance/lazy-context-loader.js.map +0 -7
  475. package/dist/core/performance/monitor.js.map +0 -7
  476. package/dist/core/performance/optimized-frame-context.js.map +0 -7
  477. package/dist/core/performance/performance-benchmark.js.map +0 -7
  478. package/dist/core/performance/performance-profiler.js.map +0 -7
  479. package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
  480. package/dist/core/persistence/postgres-adapter.js.map +0 -7
  481. package/dist/core/projects/project-isolation.js.map +0 -7
  482. package/dist/core/projects/project-manager.js.map +0 -7
  483. package/dist/core/query/query-parser.js.map +0 -7
  484. package/dist/core/query/query-templates.js.map +0 -7
  485. package/dist/core/retrieval/context-retriever.js.map +0 -7
  486. package/dist/core/retrieval/graph-retrieval.js +0 -662
  487. package/dist/core/retrieval/graph-retrieval.js.map +0 -7
  488. package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
  489. package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
  490. package/dist/core/retrieval/index.js.map +0 -7
  491. package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
  492. package/dist/core/retrieval/llm-provider.js.map +0 -7
  493. package/dist/core/retrieval/retrieval-audit.js.map +0 -7
  494. package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
  495. package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
  496. package/dist/core/retrieval/summary-generator.js.map +0 -7
  497. package/dist/core/retrieval/types.js.map +0 -7
  498. package/dist/core/session/clear-survival.js.map +0 -7
  499. package/dist/core/session/enhanced-handoff.js.map +0 -7
  500. package/dist/core/session/handoff-generator.js.map +0 -7
  501. package/dist/core/session/index.js.map +0 -7
  502. package/dist/core/session/session-manager.js.map +0 -7
  503. package/dist/core/skills/index.js.map +0 -7
  504. package/dist/core/skills/skill-storage.js.map +0 -7
  505. package/dist/core/skills/types.js.map +0 -7
  506. package/dist/core/storage/chromadb-adapter.js +0 -354
  507. package/dist/core/storage/chromadb-adapter.js.map +0 -7
  508. package/dist/core/storage/infinite-storage.js.map +0 -7
  509. package/dist/core/storage/railway-optimized-storage.js +0 -591
  510. package/dist/core/storage/railway-optimized-storage.js.map +0 -7
  511. package/dist/core/storage/remote-storage.js.map +0 -7
  512. package/dist/core/storage/two-tier-storage.js.map +0 -7
  513. package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
  514. package/dist/core/trace/db-trace-wrapper.js.map +0 -7
  515. package/dist/core/trace/debug-trace.js.map +0 -7
  516. package/dist/core/trace/index.js.map +0 -7
  517. package/dist/core/trace/linear-api-wrapper.js.map +0 -7
  518. package/dist/core/trace/trace-demo.js +0 -154
  519. package/dist/core/trace/trace-demo.js.map +0 -7
  520. package/dist/core/trace/trace-detector.demo.js +0 -142
  521. package/dist/core/trace/trace-detector.demo.js.map +0 -7
  522. package/dist/core/trace/trace-detector.js.map +0 -7
  523. package/dist/core/trace/trace-store.js.map +0 -7
  524. package/dist/core/trace/types.js.map +0 -7
  525. package/dist/core/utils/async-mutex.js.map +0 -7
  526. package/dist/core/utils/compression.js.map +0 -7
  527. package/dist/core/utils/update-checker.js.map +0 -7
  528. package/dist/core/worktree/worktree-manager.js.map +0 -7
  529. package/dist/daemon/daemon-config.js.map +0 -7
  530. package/dist/daemon/services/context-service.js.map +0 -7
  531. package/dist/daemon/services/linear-service.js.map +0 -7
  532. package/dist/daemon/session-daemon.js.map +0 -7
  533. package/dist/daemon/unified-daemon.js.map +0 -7
  534. package/dist/features/analytics/api/analytics-api.js.map +0 -7
  535. package/dist/features/analytics/core/analytics-service.js.map +0 -7
  536. package/dist/features/analytics/index.js.map +0 -7
  537. package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
  538. package/dist/features/browser/browser-mcp.js.map +0 -7
  539. package/dist/features/sweep/index.js.map +0 -7
  540. package/dist/features/sweep/prediction-client.js.map +0 -7
  541. package/dist/features/sweep/prompt-builder.js.map +0 -7
  542. package/dist/features/sweep/pty-wrapper.js.map +0 -7
  543. package/dist/features/sweep/state-watcher.js.map +0 -7
  544. package/dist/features/sweep/status-bar.js.map +0 -7
  545. package/dist/features/sweep/sweep-server-manager.js.map +0 -7
  546. package/dist/features/sweep/tab-interceptor.js.map +0 -7
  547. package/dist/features/sweep/types.js.map +0 -7
  548. package/dist/features/tasks/linear-task-manager.js.map +0 -7
  549. package/dist/features/tasks/task-aware-context.js.map +0 -7
  550. package/dist/features/tui/simple-monitor.js.map +0 -7
  551. package/dist/features/tui/swarm-monitor.js.map +0 -7
  552. package/dist/features/web/client/stores/task-store.js.map +0 -7
  553. package/dist/features/web/server/index.js.map +0 -7
  554. package/dist/hooks/auto-background.js.map +0 -7
  555. package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
  556. package/dist/hooks/config.js.map +0 -7
  557. package/dist/hooks/daemon.js.map +0 -7
  558. package/dist/hooks/events.js.map +0 -7
  559. package/dist/hooks/index.js.map +0 -7
  560. package/dist/hooks/linear-task-picker.js.map +0 -7
  561. package/dist/hooks/schemas.js.map +0 -7
  562. package/dist/hooks/secure-fs.js.map +0 -7
  563. package/dist/hooks/security-logger.js.map +0 -7
  564. package/dist/hooks/session-summary.js.map +0 -7
  565. package/dist/hooks/sms-action-runner.js.map +0 -7
  566. package/dist/hooks/sms-notify.js.map +0 -7
  567. package/dist/hooks/sms-watcher.js.map +0 -7
  568. package/dist/hooks/sms-webhook.js.map +0 -7
  569. package/dist/hooks/whatsapp-commands.js.map +0 -7
  570. package/dist/hooks/whatsapp-scheduler.js.map +0 -7
  571. package/dist/hooks/whatsapp-sync.js.map +0 -7
  572. package/dist/index.js.map +0 -7
  573. package/dist/integrations/anthropic/client.js.map +0 -7
  574. package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
  575. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
  576. package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
  577. package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
  578. package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
  579. package/dist/integrations/claude-code/subagent-client.js.map +0 -7
  580. package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
  581. package/dist/integrations/linear/auth.js.map +0 -7
  582. package/dist/integrations/linear/auto-sync.js.map +0 -7
  583. package/dist/integrations/linear/client.js +0 -630
  584. package/dist/integrations/linear/client.js.map +0 -7
  585. package/dist/integrations/linear/config.js.map +0 -7
  586. package/dist/integrations/linear/migration.js.map +0 -7
  587. package/dist/integrations/linear/oauth-server.js.map +0 -7
  588. package/dist/integrations/linear/rest-client.js.map +0 -7
  589. package/dist/integrations/linear/sync-manager.js.map +0 -7
  590. package/dist/integrations/linear/sync-service.js.map +0 -7
  591. package/dist/integrations/linear/sync.js.map +0 -7
  592. package/dist/integrations/linear/unified-sync.js.map +0 -7
  593. package/dist/integrations/linear/webhook-handler.js.map +0 -7
  594. package/dist/integrations/linear/webhook-server.js.map +0 -7
  595. package/dist/integrations/linear/webhook.js.map +0 -7
  596. package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
  597. package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
  598. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
  599. package/dist/integrations/mcp/handlers/index.js.map +0 -7
  600. package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
  601. package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
  602. package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
  603. package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
  604. package/dist/integrations/mcp/index.js.map +0 -7
  605. package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
  606. package/dist/integrations/mcp/refactored-server.js.map +0 -7
  607. package/dist/integrations/mcp/remote-server.js +0 -691
  608. package/dist/integrations/mcp/remote-server.js.map +0 -7
  609. package/dist/integrations/mcp/schemas.js.map +0 -7
  610. package/dist/integrations/mcp/server.js +0 -1960
  611. package/dist/integrations/mcp/server.js.map +0 -7
  612. package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
  613. package/dist/integrations/mcp/tool-definitions.js.map +0 -7
  614. package/dist/integrations/mcp/trace-test.js +0 -48
  615. package/dist/integrations/mcp/trace-test.js.map +0 -7
  616. package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
  617. package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
  618. package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
  619. package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
  620. package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
  621. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
  622. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
  623. package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
  624. package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
  625. package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
  626. package/dist/integrations/ralph/index.js.map +0 -7
  627. package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
  628. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
  629. package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
  630. package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
  631. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
  632. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
  633. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
  634. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
  635. package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
  636. package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
  637. package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
  638. package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
  639. package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
  640. package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
  641. package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
  642. package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
  643. package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
  644. package/dist/middleware/exponential-rate-limiter.js.map +0 -7
  645. package/dist/models/user.model.js.map +0 -7
  646. package/dist/servers/production/auth-middleware.js.map +0 -7
  647. package/dist/servers/railway/config.js +0 -55
  648. package/dist/servers/railway/config.js.map +0 -7
  649. package/dist/servers/railway/index-enhanced.js +0 -160
  650. package/dist/servers/railway/index-enhanced.js.map +0 -7
  651. package/dist/servers/railway/index.js +0 -1349
  652. package/dist/servers/railway/index.js.map +0 -7
  653. package/dist/servers/railway/simple.js +0 -64
  654. package/dist/servers/railway/simple.js.map +0 -7
  655. package/dist/servers/railway/storage-test.js +0 -459
  656. package/dist/servers/railway/storage-test.js.map +0 -7
  657. package/dist/services/config-service.js.map +0 -7
  658. package/dist/services/context-service.js.map +0 -7
  659. package/dist/skills/api-discovery.js.map +0 -7
  660. package/dist/skills/api-skill.js.map +0 -7
  661. package/dist/skills/claude-skills.js.map +0 -7
  662. package/dist/skills/dashboard-launcher.js.map +0 -7
  663. package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
  664. package/dist/skills/repo-ingestion-skill.js +0 -609
  665. package/dist/skills/repo-ingestion-skill.js.map +0 -7
  666. package/dist/skills/security-secrets-scanner.js +0 -284
  667. package/dist/skills/security-secrets-scanner.js.map +0 -7
  668. package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
  669. package/dist/utils/env.js.map +0 -7
  670. package/dist/utils/formatting.js.map +0 -7
  671. package/dist/utils/process-cleanup.js.map +0 -7
  672. package/dist/validation/schemas.js +0 -222
  673. package/dist/validation/schemas.js.map +0 -7
  674. /package/dist/{agents → src/agents}/core/agent-task-manager.js +0 -0
  675. /package/dist/{agents → src/agents}/verifiers/base-verifier.js +0 -0
  676. /package/dist/{agents → src/agents}/verifiers/formatter-verifier.js +0 -0
  677. /package/dist/{agents → src/agents}/verifiers/llm-judge.js +0 -0
  678. /package/dist/{cli → src/cli}/auto-detect.js +0 -0
  679. /package/dist/{cli → src/cli}/claude-sm-danger.js +0 -0
  680. /package/dist/{cli → src/cli}/codex-sm-danger.js +0 -0
  681. /package/dist/{cli → src/cli}/codex-sm.js +0 -0
  682. /package/dist/{cli → src/cli}/commands/api.js +0 -0
  683. /package/dist/{cli → src/cli}/commands/auto-background.js +0 -0
  684. /package/dist/{cli → src/cli}/commands/cleanup-processes.js +0 -0
  685. /package/dist/{cli → src/cli}/commands/clear.js +0 -0
  686. /package/dist/{cli → src/cli}/commands/config.js +0 -0
  687. /package/dist/{cli → src/cli}/commands/context-rehydrate.js +0 -0
  688. /package/dist/{cli → src/cli}/commands/context.js +0 -0
  689. /package/dist/{cli → src/cli}/commands/daemon.js +0 -0
  690. /package/dist/{cli → src/cli}/commands/dashboard.js +0 -0
  691. /package/dist/{cli → src/cli}/commands/db.js +0 -0
  692. /package/dist/{cli → src/cli}/commands/decision.js +0 -0
  693. /package/dist/{cli → src/cli}/commands/discovery.js +0 -0
  694. /package/dist/{cli → src/cli}/commands/handoff.js +0 -0
  695. /package/dist/{cli → src/cli}/commands/hooks.js +0 -0
  696. /package/dist/{cli → src/cli}/commands/linear.js +0 -0
  697. /package/dist/{cli → src/cli}/commands/log.js +0 -0
  698. /package/dist/{cli → src/cli}/commands/login.js +0 -0
  699. /package/dist/{cli → src/cli}/commands/migrate.js +0 -0
  700. /package/dist/{cli → src/cli}/commands/model.js +0 -0
  701. /package/dist/{cli → src/cli}/commands/onboard.js +0 -0
  702. /package/dist/{cli → src/cli}/commands/projects.js +0 -0
  703. /package/dist/{cli → src/cli}/commands/ralph.js +0 -0
  704. /package/dist/{cli → src/cli}/commands/retrieval.js +0 -0
  705. /package/dist/{cli → src/cli}/commands/service.js +0 -0
  706. /package/dist/{cli → src/cli}/commands/session.js +0 -0
  707. /package/dist/{cli → src/cli}/commands/settings.js +0 -0
  708. /package/dist/{cli → src/cli}/commands/setup.js +0 -0
  709. /package/dist/{cli → src/cli}/commands/shell.js +0 -0
  710. /package/dist/{cli → src/cli}/commands/signup.js +0 -0
  711. /package/dist/{cli → src/cli}/commands/skills.js +0 -0
  712. /package/dist/{cli → src/cli}/commands/sms-notify.js +0 -0
  713. /package/dist/{cli → src/cli}/commands/storage-tier.js +0 -0
  714. /package/dist/{cli → src/cli}/commands/sweep.js +0 -0
  715. /package/dist/{cli → src/cli}/commands/tasks.js +0 -0
  716. /package/dist/{cli → src/cli}/commands/worktree.js +0 -0
  717. /package/dist/{cli → src/cli}/opencode-sm.js +0 -0
  718. /package/dist/{cli → src/cli}/utils/viewer.js +0 -0
  719. /package/dist/{core → src/core}/config/config-manager.js +0 -0
  720. /package/dist/{core → src/core}/config/feature-flags.js +0 -0
  721. /package/dist/{core → src/core}/config/storage-config.js +0 -0
  722. /package/dist/{core → src/core}/config/types.js +0 -0
  723. /package/dist/{core → src/core}/context/auto-context.js +0 -0
  724. /package/dist/{core → src/core}/context/dual-stack-manager.js +0 -0
  725. /package/dist/{core → src/core}/context/enhanced-rehydration.js +0 -0
  726. /package/dist/{core → src/core}/context/frame-database.js +0 -0
  727. /package/dist/{core → src/core}/context/frame-digest.js +0 -0
  728. /package/dist/{core → src/core}/context/frame-handoff-manager.js +0 -0
  729. /package/dist/{core → src/core}/context/frame-lifecycle-hooks.js +0 -0
  730. /package/dist/{core → src/core}/context/frame-recovery.js +0 -0
  731. /package/dist/{core → src/core}/context/frame-stack.js +0 -0
  732. /package/dist/{core → src/core}/context/frame-types.js +0 -0
  733. /package/dist/{core → src/core}/context/frame-types.js.map +0 -0
  734. /package/dist/{core → src/core}/context/index.js +0 -0
  735. /package/dist/{core → src/core}/context/permission-manager.js +0 -0
  736. /package/dist/{core → src/core}/context/recursive-context-manager.js +0 -0
  737. /package/dist/{core → src/core}/context/refactored-frame-manager.js +0 -0
  738. /package/dist/{core → src/core}/context/shared-context-layer.js +0 -0
  739. /package/dist/{core → src/core}/context/stack-merge-resolver.js +0 -0
  740. /package/dist/{core → src/core}/context/validation.js +0 -0
  741. /package/dist/{core → src/core}/database/batch-operations.js +0 -0
  742. /package/dist/{core → src/core}/database/connection-pool.js +0 -0
  743. /package/dist/{core → src/core}/database/database-adapter.js +0 -0
  744. /package/dist/{core → src/core}/database/migration-manager.js +0 -0
  745. /package/dist/{core → src/core}/database/query-cache.js +0 -0
  746. /package/dist/{core → src/core}/database/query-router.js +0 -0
  747. /package/dist/{core → src/core}/digest/enhanced-hybrid-digest.js +0 -0
  748. /package/dist/{core → src/core}/digest/frame-digest-integration.js +0 -0
  749. /package/dist/{core → src/core}/digest/hybrid-digest-generator.js +0 -0
  750. /package/dist/{core → src/core}/digest/index.js +0 -0
  751. /package/dist/{core → src/core}/digest/types.js +0 -0
  752. /package/dist/{core → src/core}/errors/recovery.js +0 -0
  753. /package/dist/{core → src/core}/execution/parallel-executor.js +0 -0
  754. /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
  755. /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
  756. /package/dist/{core → src/core}/frame/workflow-templates.js +0 -0
  757. /package/dist/{core → src/core}/merge/conflict-detector.js +0 -0
  758. /package/dist/{core → src/core}/merge/index.js +0 -0
  759. /package/dist/{core → src/core}/merge/resolution-engine.js +0 -0
  760. /package/dist/{core → src/core}/merge/stack-diff.js +0 -0
  761. /package/dist/{core → src/core/merge}/types.js +0 -0
  762. /package/dist/{core → src/core/merge}/types.js.map +0 -0
  763. /package/dist/{core → src/core}/models/fallback-monitor.js +0 -0
  764. /package/dist/{core → src/core}/models/model-router.js +0 -0
  765. /package/dist/{core → src/core}/monitoring/error-handler.js +0 -0
  766. /package/dist/{core → src/core}/monitoring/metrics.js +0 -0
  767. /package/dist/{core → src/core}/monitoring/progress-tracker.js +0 -0
  768. /package/dist/{core → src/core}/monitoring/session-monitor.js +0 -0
  769. /package/dist/{core → src/core}/performance/context-cache.js +0 -0
  770. /package/dist/{core → src/core}/performance/index.js +0 -0
  771. /package/dist/{core → src/core}/performance/lazy-context-loader.js +0 -0
  772. /package/dist/{core → src/core}/performance/monitor.js +0 -0
  773. /package/dist/{core → src/core}/performance/optimized-frame-context.js +0 -0
  774. /package/dist/{core → src/core}/performance/performance-benchmark.js +0 -0
  775. /package/dist/{core → src/core}/performance/performance-profiler.js +0 -0
  776. /package/dist/{core → src/core}/performance/streaming-jsonl-parser.js +0 -0
  777. /package/dist/{core → src/core}/persistence/postgres-adapter.js +0 -0
  778. /package/dist/{core → src/core}/projects/project-isolation.js +0 -0
  779. /package/dist/{core → src/core}/projects/project-manager.js +0 -0
  780. /package/dist/{core → src/core}/query/query-parser.js +0 -0
  781. /package/dist/{core → src/core}/query/query-templates.js +0 -0
  782. /package/dist/{core → src/core}/retrieval/context-retriever.js +0 -0
  783. /package/dist/{core → src/core}/retrieval/index.js +0 -0
  784. /package/dist/{core → src/core}/retrieval/llm-context-retrieval.js +0 -0
  785. /package/dist/{core → src/core}/retrieval/llm-provider.js +0 -0
  786. /package/dist/{core → src/core}/retrieval/retrieval-audit.js +0 -0
  787. /package/dist/{core → src/core}/retrieval/summary-generator.js +0 -0
  788. /package/dist/{core → src/core}/retrieval/types.js +0 -0
  789. /package/dist/{core → src/core}/session/clear-survival.js +0 -0
  790. /package/dist/{core → src/core}/session/enhanced-handoff.js +0 -0
  791. /package/dist/{core → src/core}/session/handoff-generator.js +0 -0
  792. /package/dist/{core → src/core}/session/index.js +0 -0
  793. /package/dist/{core → src/core}/session/session-manager.js +0 -0
  794. /package/dist/{core → src/core}/skills/index.js +0 -0
  795. /package/dist/{core → src/core}/skills/skill-storage.js +0 -0
  796. /package/dist/{core → src/core}/skills/types.js +0 -0
  797. /package/dist/{core → src/core}/storage/infinite-storage.js +0 -0
  798. /package/dist/{core → src/core}/storage/remote-storage.js +0 -0
  799. /package/dist/{core → src/core}/storage/two-tier-storage.js +0 -0
  800. /package/dist/{core → src/core}/trace/cli-trace-wrapper.js +0 -0
  801. /package/dist/{core → src/core}/trace/db-trace-wrapper.js +0 -0
  802. /package/dist/{core → src/core}/trace/debug-trace.js +0 -0
  803. /package/dist/{core → src/core}/trace/index.js +0 -0
  804. /package/dist/{core → src/core}/trace/linear-api-wrapper.js +0 -0
  805. /package/dist/{core → src/core}/trace/trace-detector.js +0 -0
  806. /package/dist/{core → src/core}/trace/trace-store.js +0 -0
  807. /package/dist/{core → src/core}/trace/types.js +0 -0
  808. /package/dist/{integrations/linear → src/core}/types.js +0 -0
  809. /package/dist/{integrations/linear → src/core}/types.js.map +0 -0
  810. /package/dist/{core → src/core}/utils/async-mutex.js +0 -0
  811. /package/dist/{core → src/core}/utils/compression.js +0 -0
  812. /package/dist/{core → src/core}/utils/update-checker.js +0 -0
  813. /package/dist/{core → src/core}/worktree/worktree-manager.js +0 -0
  814. /package/dist/{daemon → src/daemon}/daemon-config.js +0 -0
  815. /package/dist/{daemon → src/daemon}/services/context-service.js +0 -0
  816. /package/dist/{daemon → src/daemon}/services/linear-service.js +0 -0
  817. /package/dist/{daemon → src/daemon}/session-daemon.js +0 -0
  818. /package/dist/{daemon → src/daemon}/unified-daemon.js +0 -0
  819. /package/dist/{features → src/features}/analytics/api/analytics-api.js +0 -0
  820. /package/dist/{features → src/features}/analytics/core/analytics-service.js +0 -0
  821. /package/dist/{features → src/features}/analytics/index.js +0 -0
  822. /package/dist/{features → src/features}/analytics/queries/metrics-queries.js +0 -0
  823. /package/dist/{features → src/features}/analytics/types/metrics.js +0 -0
  824. /package/dist/{features → src/features}/analytics/types/metrics.js.map +0 -0
  825. /package/dist/{features → src/features}/browser/browser-mcp.js +0 -0
  826. /package/dist/{features → src/features}/sweep/index.js +0 -0
  827. /package/dist/{features → src/features}/sweep/prediction-client.js +0 -0
  828. /package/dist/{features → src/features}/sweep/prompt-builder.js +0 -0
  829. /package/dist/{features → src/features}/sweep/pty-wrapper.js +0 -0
  830. /package/dist/{features → src/features}/sweep/state-watcher.js +0 -0
  831. /package/dist/{features → src/features}/sweep/status-bar.js +0 -0
  832. /package/dist/{features → src/features}/sweep/sweep-server-manager.js +0 -0
  833. /package/dist/{features → src/features}/sweep/tab-interceptor.js +0 -0
  834. /package/dist/{features → src/features}/sweep/types.js +0 -0
  835. /package/dist/{features → src/features}/tasks/linear-task-manager.js +0 -0
  836. /package/dist/{features → src/features}/tasks/task-aware-context.js +0 -0
  837. /package/dist/{features → src/features}/tui/simple-monitor.js +0 -0
  838. /package/dist/{features → src/features}/tui/swarm-monitor.js +0 -0
  839. /package/dist/{features → src/features}/web/client/stores/task-store.js +0 -0
  840. /package/dist/{features → src/features}/web/server/index.js +0 -0
  841. /package/dist/{hooks → src/hooks}/auto-background.js +0 -0
  842. /package/dist/{hooks → src/hooks}/claude-code-whatsapp-hook.js +0 -0
  843. /package/dist/{hooks → src/hooks}/config.js +0 -0
  844. /package/dist/{hooks → src/hooks}/daemon.js +0 -0
  845. /package/dist/{hooks → src/hooks}/events.js +0 -0
  846. /package/dist/{hooks → src/hooks}/index.js +0 -0
  847. /package/dist/{hooks → src/hooks}/linear-task-picker.js +0 -0
  848. /package/dist/{hooks → src/hooks}/schemas.js +0 -0
  849. /package/dist/{hooks → src/hooks}/secure-fs.js +0 -0
  850. /package/dist/{hooks → src/hooks}/security-logger.js +0 -0
  851. /package/dist/{hooks → src/hooks}/session-summary.js +0 -0
  852. /package/dist/{hooks → src/hooks}/sms-action-runner.js +0 -0
  853. /package/dist/{hooks → src/hooks}/sms-notify.js +0 -0
  854. /package/dist/{hooks → src/hooks}/sms-watcher.js +0 -0
  855. /package/dist/{hooks → src/hooks}/sms-webhook.js +0 -0
  856. /package/dist/{hooks → src/hooks}/whatsapp-commands.js +0 -0
  857. /package/dist/{hooks → src/hooks}/whatsapp-scheduler.js +0 -0
  858. /package/dist/{hooks → src/hooks}/whatsapp-sync.js +0 -0
  859. /package/dist/{index.js → src/index.js} +0 -0
  860. /package/dist/{integrations → src/integrations}/anthropic/client.js +0 -0
  861. /package/dist/{integrations → src/integrations}/claude-code/agent-bridge.js +0 -0
  862. /package/dist/{integrations → src/integrations}/claude-code/enhanced-pre-clear-hooks.js +0 -0
  863. /package/dist/{integrations → src/integrations}/claude-code/lifecycle-hooks.js +0 -0
  864. /package/dist/{integrations → src/integrations}/claude-code/post-task-hooks.js +0 -0
  865. /package/dist/{integrations → src/integrations}/claude-code/subagent-client-stub.js +0 -0
  866. /package/dist/{integrations → src/integrations}/claude-code/subagent-client.js +0 -0
  867. /package/dist/{integrations → src/integrations}/claude-code/task-coordinator.js +0 -0
  868. /package/dist/{integrations → src/integrations}/linear/auth.js +0 -0
  869. /package/dist/{integrations → src/integrations}/linear/auto-sync.js +0 -0
  870. /package/dist/{integrations → src/integrations}/linear/config.js +0 -0
  871. /package/dist/{integrations → src/integrations}/linear/migration.js +0 -0
  872. /package/dist/{integrations → src/integrations}/linear/oauth-server.js +0 -0
  873. /package/dist/{integrations → src/integrations}/linear/rest-client.js +0 -0
  874. /package/dist/{integrations → src/integrations}/linear/sync-manager.js +0 -0
  875. /package/dist/{integrations → src/integrations}/linear/sync-service.js +0 -0
  876. /package/dist/{integrations → src/integrations}/linear/sync.js +0 -0
  877. /package/dist/{integrations/ralph → src/integrations/linear}/types.js +0 -0
  878. /package/dist/{integrations/ralph → src/integrations/linear}/types.js.map +0 -0
  879. /package/dist/{integrations → src/integrations}/linear/unified-sync.js +0 -0
  880. /package/dist/{integrations → src/integrations}/linear/webhook-handler.js +0 -0
  881. /package/dist/{integrations → src/integrations}/linear/webhook-server.js +0 -0
  882. /package/dist/{integrations → src/integrations}/linear/webhook.js +0 -0
  883. /package/dist/{integrations → src/integrations}/mcp/handlers/code-execution-handlers.js +0 -0
  884. /package/dist/{integrations → src/integrations}/mcp/handlers/context-handlers.js +0 -0
  885. /package/dist/{integrations → src/integrations}/mcp/handlers/discovery-handlers.js +0 -0
  886. /package/dist/{integrations → src/integrations}/mcp/handlers/index.js +0 -0
  887. /package/dist/{integrations → src/integrations}/mcp/handlers/linear-handlers.js +0 -0
  888. /package/dist/{integrations → src/integrations}/mcp/handlers/skill-handlers.js +0 -0
  889. /package/dist/{integrations → src/integrations}/mcp/handlers/task-handlers.js +0 -0
  890. /package/dist/{integrations → src/integrations}/mcp/handlers/trace-handlers.js +0 -0
  891. /package/dist/{integrations → src/integrations}/mcp/index.js +0 -0
  892. /package/dist/{integrations → src/integrations}/mcp/middleware/tool-scoring.js +0 -0
  893. /package/dist/{integrations → src/integrations}/mcp/refactored-server.js +0 -0
  894. /package/dist/{integrations → src/integrations}/mcp/schemas.js +0 -0
  895. /package/dist/{integrations → src/integrations}/mcp/tool-definitions-code.js +0 -0
  896. /package/dist/{integrations → src/integrations}/mcp/tool-definitions.js +0 -0
  897. /package/dist/{integrations → src/integrations}/ralph/bridge/ralph-stackmemory-bridge.js +0 -0
  898. /package/dist/{integrations → src/integrations}/ralph/context/context-budget-manager.js +0 -0
  899. /package/dist/{integrations → src/integrations}/ralph/context/stackmemory-context-loader.js +0 -0
  900. /package/dist/{integrations → src/integrations}/ralph/coordination/enhanced-coordination.js +0 -0
  901. /package/dist/{integrations → src/integrations}/ralph/index.js +0 -0
  902. /package/dist/{integrations → src/integrations}/ralph/learning/pattern-learner.js +0 -0
  903. /package/dist/{integrations → src/integrations}/ralph/lifecycle/iteration-lifecycle.js +0 -0
  904. /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-dashboard.js +0 -0
  905. /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-registry.js +0 -0
  906. /package/dist/{integrations → src/integrations}/ralph/orchestration/multi-loop-orchestrator.js +0 -0
  907. /package/dist/{integrations → src/integrations}/ralph/patterns/compounding-engineering-pattern.js +0 -0
  908. /package/dist/{integrations → src/integrations}/ralph/patterns/extended-coherence-sessions.js +0 -0
  909. /package/dist/{integrations → src/integrations}/ralph/patterns/oracle-worker-pattern.js +0 -0
  910. /package/dist/{integrations → src/integrations}/ralph/performance/performance-optimizer.js +0 -0
  911. /package/dist/{integrations → src/integrations}/ralph/recovery/crash-recovery.js +0 -0
  912. /package/dist/{integrations → src/integrations}/ralph/state/state-reconciler.js +0 -0
  913. /package/dist/{integrations → src/integrations}/ralph/swarm/git-workflow-manager.js +0 -0
  914. /package/dist/{integrations → src/integrations}/ralph/swarm/swarm-coordinator.js +0 -0
  915. /package/dist/{types/task.js.map → src/integrations/ralph/types.js.map} +0 -0
  916. /package/dist/{integrations → src/integrations}/ralph/visualization/ralph-debugger.js +0 -0
  917. /package/dist/{mcp → src/mcp}/stackmemory-mcp-server.js +0 -0
  918. /package/dist/{middleware → src/middleware}/exponential-rate-limiter.js +0 -0
  919. /package/dist/{models → src/models}/user.model.js +0 -0
  920. /package/dist/{servers → src/servers}/production/auth-middleware.js +0 -0
  921. /package/dist/{services → src/services}/config-service.js +0 -0
  922. /package/dist/{services → src/services}/context-service.js +0 -0
  923. /package/dist/{skills → src/skills}/api-discovery.js +0 -0
  924. /package/dist/{skills → src/skills}/api-skill.js +0 -0
  925. /package/dist/{skills → src/skills}/claude-skills.js +0 -0
  926. /package/dist/{skills → src/skills}/dashboard-launcher.js +0 -0
  927. /package/dist/{skills → src/skills}/recursive-agent-orchestrator.js +0 -0
  928. /package/dist/{skills → src/skills}/unified-rlm-orchestrator.js +0 -0
  929. /package/dist/{types → src/types}/task.js +0 -0
  930. /package/dist/{utils → src/utils}/env.js +0 -0
  931. /package/dist/{utils → src/utils}/formatting.js +0 -0
  932. /package/dist/{utils → src/utils}/process-cleanup.js +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/extensions/sandbox-runtime.ts"],
4
+ "sourcesContent": ["/**\n * Browser Sandbox Extension Runtime\n *\n * Provides isolated execution environment for extensions using iframe/worker isolation.\n * Exposes controlled Web APIs (fetch, DOM, storage) with permission-based access.\n * Supports hot-reload for extension updates without restart.\n */\n\nimport { z } from 'zod';\nimport { EventEmitter } from 'events';\nimport { ValidationError, ErrorCode, SystemError } from '../errors/index.js';\nimport { logger } from '../monitoring/logger.js';\n\n// ============================================================================\n// Permission System Types\n// ============================================================================\n\n/**\n * Permission types for extension capabilities\n */\nexport type PermissionType =\n | 'network' // Network access with domain allowlist\n | 'storage:local' // Local storage access\n | 'storage:indexed' // IndexedDB access\n | 'frames:read' // Read frame data\n | 'frames:write' // Write frame data\n | 'events:emit' // Emit events to other extensions\n | 'events:subscribe' // Subscribe to events\n | 'dom:read' // Read DOM elements (sandbox only)\n | 'dom:write'; // Write DOM elements (sandbox only)\n\n/**\n * Network permission with domain specification\n */\nexport interface NetworkPermission {\n type: 'network';\n domains: string[]; // Allowlisted domains (e.g., ['api.linear.app', '*.github.com'])\n}\n\n/**\n * Storage permission\n */\nexport interface StoragePermission {\n type: 'storage:local' | 'storage:indexed';\n quotaBytes?: number; // Optional storage quota\n}\n\n/**\n * Frame access permission\n */\nexport interface FramePermission {\n type: 'frames:read' | 'frames:write';\n scope?: 'own' | 'all'; // 'own' = only extension's frames, 'all' = all frames\n}\n\n/**\n * Event permission\n */\nexport interface EventPermission {\n type: 'events:emit' | 'events:subscribe';\n patterns?: string[]; // Event name patterns (glob-style)\n}\n\n/**\n * DOM permission (sandbox only)\n */\nexport interface DomPermission {\n type: 'dom:read' | 'dom:write';\n}\n\nexport type Permission =\n | NetworkPermission\n | StoragePermission\n | FramePermission\n | EventPermission\n | DomPermission;\n\n/**\n * Permission manifest for an extension\n */\nexport interface PermissionManifest {\n name: string;\n version: string;\n permissions: Permission[];\n description?: string;\n author?: string;\n homepage?: string;\n}\n\n// ============================================================================\n// Extension Interface Types\n// ============================================================================\n\n/**\n * Tool definition for extension-provided tools\n */\nexport interface ToolDefinition {\n name: string;\n description: string;\n parameters: Record<string, unknown>; // JSON Schema\n execute: (params: unknown, context: ExtensionContext) => Promise<ToolResult>;\n}\n\n/**\n * Tool execution result\n */\nexport interface ToolResult {\n success: boolean;\n data?: unknown;\n error?: string;\n}\n\n/**\n * Hook definition for lifecycle events\n */\nexport interface HookDefinition {\n event: string;\n handler: (data: unknown, context: ExtensionContext) => Promise<void>;\n priority?: number;\n}\n\n/**\n * Provider adapter for LLM integrations\n */\nexport interface ProviderAdapter {\n id: string;\n name: string;\n\n // Core streaming interface\n stream(\n messages: Message[],\n options: StreamOptions\n ): AsyncIterable<StreamEvent>;\n\n // Provider-specific extensions (opt-in)\n extensions?: {\n extendedThinking?: boolean; // Claude\n codeInterpreter?: boolean; // OpenAI\n grounding?: boolean; // Gemini\n };\n}\n\n/**\n * Message format for provider communication\n */\nexport interface Message {\n role: 'user' | 'assistant' | 'system';\n content: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Stream options for provider calls\n */\nexport interface StreamOptions {\n maxTokens?: number;\n temperature?: number;\n stopSequences?: string[];\n tools?: ToolDefinition[];\n}\n\n/**\n * Stream event types\n */\nexport type StreamEvent =\n | { type: 'text'; content: string }\n | { type: 'tool_call'; name: string; arguments: unknown }\n | { type: 'error'; error: string }\n | { type: 'done' };\n\n/**\n * Event handler type\n */\nexport type EventHandler = (data: unknown) => void | Promise<void>;\n\n/**\n * Frame manager interface exposed to extensions\n */\nexport interface FrameManagerAPI {\n getCurrentFrame(): Promise<FrameData | null>;\n getFrame(frameId: string): Promise<FrameData | null>;\n listFrames(filter?: FrameFilter): Promise<FrameData[]>;\n createFrame?(options: FrameCreateOptions): Promise<FrameData>;\n closeFrame?(frameId: string): Promise<void>;\n}\n\n/**\n * Frame data exposed to extensions\n */\nexport interface FrameData {\n frameId: string;\n name: string;\n type: string;\n state: string;\n parentFrameId?: string;\n createdAt: number;\n closedAt?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Frame filter options\n */\nexport interface FrameFilter {\n type?: string;\n state?: 'active' | 'closed';\n parentFrameId?: string;\n limit?: number;\n}\n\n/**\n * Frame creation options\n */\nexport interface FrameCreateOptions {\n name: string;\n type: string;\n parentFrameId?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * State serializer interface exposed to extensions\n */\nexport interface StateSerializerAPI {\n // Structured data (JSON) - surgical updates\n get<T>(key: string): Promise<T | null>;\n set<T>(key: string, value: T): Promise<void>;\n delete(key: string): Promise<boolean>;\n\n // Unstructured data (Markdown) - full load\n getDocument(key: string): Promise<string | null>;\n setDocument(key: string, content: string): Promise<void>;\n deleteDocument(key: string): Promise<boolean>;\n}\n\n/**\n * Storage API exposed to extensions (localStorage-like)\n */\nexport interface StorageAPI {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n clear(): void;\n key(index: number): string | null;\n readonly length: number;\n}\n\n/**\n * Context provided to extension during execution\n */\nexport interface ExtensionContext {\n // Extension metadata\n extensionId: string;\n extensionName: string;\n permissions: Permission[];\n\n // Core APIs\n frames: FrameManagerAPI;\n state: StateSerializerAPI;\n\n // Web APIs (sandboxed)\n fetch: typeof globalThis.fetch;\n storage: StorageAPI;\n\n // Communication\n emit(event: string, data: unknown): void;\n on(event: string, handler: EventHandler): () => void;\n off(event: string, handler: EventHandler): void;\n}\n\n/**\n * Extension interface that extensions must implement\n */\nexport interface Extension {\n name: string;\n version: string;\n manifest: PermissionManifest;\n\n // Lifecycle\n init(context: ExtensionContext): Promise<void>;\n destroy(): Promise<void>;\n\n // Capabilities (optional)\n tools?: ToolDefinition[];\n providers?: ProviderAdapter[];\n hooks?: HookDefinition[];\n}\n\n// ============================================================================\n// Sandbox Configuration\n// ============================================================================\n\n/**\n * Sandbox isolation mode\n */\nexport type SandboxMode =\n | 'iframe' // Browser iframe isolation (full Web API access)\n | 'worker' // Web Worker isolation (limited API access, better for compute)\n | 'node'; // Node.js vm context (server-side only)\n\n/**\n * Sandbox runtime configuration\n */\nexport interface SandboxConfig {\n mode: SandboxMode;\n timeout: number; // Execution timeout in ms\n memoryLimit?: number; // Memory limit in bytes (where supported)\n networkAllowlist?: string[]; // Global network allowlist\n enableDevtools?: boolean; // Enable debugging capabilities\n}\n\n/**\n * Extension load source\n */\nexport type ExtensionSource =\n | { type: 'url'; url: string } // From URL (web-backed)\n | { type: 'file'; path: string } // From local file (development)\n | { type: 'npm'; package: string; version?: string } // From npm package\n | { type: 'inline'; code: string; manifest: PermissionManifest }; // Inline code\n\n// ============================================================================\n// Sandbox Runtime Implementation\n// ============================================================================\n\n/**\n * Extension registration state\n */\ninterface ExtensionState {\n extension: Extension;\n context: ExtensionContext;\n status: 'loading' | 'active' | 'error' | 'unloaded';\n error?: Error;\n loadedAt: number;\n source: ExtensionSource;\n}\n\n/**\n * Zod schemas for validation\n */\nconst PermissionManifestSchema = z.object({\n name: z.string().min(1).max(100),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/),\n permissions: z.array(\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('network'),\n domains: z.array(z.string().min(1)),\n }),\n z.object({\n type: z.literal('storage:local'),\n quotaBytes: z.number().positive().optional(),\n }),\n z.object({\n type: z.literal('storage:indexed'),\n quotaBytes: z.number().positive().optional(),\n }),\n z.object({\n type: z.literal('frames:read'),\n scope: z.enum(['own', 'all']).optional(),\n }),\n z.object({\n type: z.literal('frames:write'),\n scope: z.enum(['own', 'all']).optional(),\n }),\n z.object({\n type: z.literal('events:emit'),\n patterns: z.array(z.string()).optional(),\n }),\n z.object({\n type: z.literal('events:subscribe'),\n patterns: z.array(z.string()).optional(),\n }),\n z.object({ type: z.literal('dom:read') }),\n z.object({ type: z.literal('dom:write') }),\n ])\n ),\n description: z.string().max(1000).optional(),\n author: z.string().max(200).optional(),\n homepage: z.string().url().optional(),\n});\n\n/**\n * Browser Sandbox Runtime\n *\n * Manages extension lifecycle, isolation, and API exposure.\n */\nexport class SandboxRuntime {\n private extensions = new Map<string, ExtensionState>();\n private eventBus = new EventEmitter();\n private config: SandboxConfig;\n private frameManager?: FrameManagerAPI;\n private stateSerializer?: StateSerializerAPI;\n\n constructor(config: Partial<SandboxConfig> = {}) {\n this.config = {\n mode: config.mode ?? 'node',\n timeout: config.timeout ?? 30000,\n memoryLimit: config.memoryLimit,\n networkAllowlist: config.networkAllowlist ?? [],\n enableDevtools: config.enableDevtools ?? false,\n };\n\n logger.info('SandboxRuntime initialized', {\n mode: this.config.mode,\n timeout: this.config.timeout,\n });\n }\n\n /**\n * Set the frame manager API for extensions\n */\n setFrameManager(frameManager: FrameManagerAPI): void {\n this.frameManager = frameManager;\n }\n\n /**\n * Set the state serializer API for extensions\n */\n setStateSerializer(stateSerializer: StateSerializerAPI): void {\n this.stateSerializer = stateSerializer;\n }\n\n /**\n * Load an extension from a source\n */\n async loadExtension(source: ExtensionSource): Promise<string> {\n logger.info('Loading extension', { source });\n\n const extension = await this.resolveExtension(source);\n const manifest = extension.manifest;\n\n // Validate manifest\n this.validateManifest(manifest);\n\n // Check for existing extension\n if (this.extensions.has(manifest.name)) {\n throw new ValidationError(\n `Extension \"${manifest.name}\" is already loaded`,\n ErrorCode.VALIDATION_FAILED,\n { extensionName: manifest.name }\n );\n }\n\n // Create isolated context\n const context = this.createExtensionContext(manifest);\n\n // Register extension state\n const state: ExtensionState = {\n extension,\n context,\n status: 'loading',\n loadedAt: Date.now(),\n source,\n };\n this.extensions.set(manifest.name, state);\n\n try {\n // Initialize extension with timeout\n await this.withTimeout(\n extension.init(context),\n this.config.timeout,\n `Extension \"${manifest.name}\" initialization timed out`\n );\n\n state.status = 'active';\n logger.info('Extension loaded successfully', {\n name: manifest.name,\n version: manifest.version,\n });\n\n return manifest.name;\n } catch (error) {\n state.status = 'error';\n state.error = error instanceof Error ? error : new Error(String(error));\n logger.error('Extension initialization failed', {\n name: manifest.name,\n error: state.error.message,\n });\n throw error;\n }\n }\n\n /**\n * Unload an extension\n */\n async unloadExtension(extensionName: string): Promise<void> {\n const state = this.extensions.get(extensionName);\n if (!state) {\n throw new ValidationError(\n `Extension \"${extensionName}\" not found`,\n ErrorCode.RESOURCE_NOT_FOUND,\n { extensionName }\n );\n }\n\n try {\n await this.withTimeout(\n state.extension.destroy(),\n this.config.timeout,\n `Extension \"${extensionName}\" destruction timed out`\n );\n } catch (error) {\n logger.warn('Extension destruction failed', {\n name: extensionName,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n state.status = 'unloaded';\n this.extensions.delete(extensionName);\n logger.info('Extension unloaded', { name: extensionName });\n }\n\n /**\n * Hot-reload an extension (unload and reload)\n */\n async reloadExtension(extensionName: string): Promise<void> {\n const state = this.extensions.get(extensionName);\n if (!state) {\n throw new ValidationError(\n `Extension \"${extensionName}\" not found`,\n ErrorCode.RESOURCE_NOT_FOUND,\n { extensionName }\n );\n }\n\n const source = state.source;\n await this.unloadExtension(extensionName);\n await this.loadExtension(source);\n logger.info('Extension reloaded', { name: extensionName });\n }\n\n /**\n * Get extension by name\n */\n getExtension(extensionName: string): Extension | undefined {\n return this.extensions.get(extensionName)?.extension;\n }\n\n /**\n * Get all loaded extensions\n */\n listExtensions(): Array<{\n name: string;\n version: string;\n status: string;\n loadedAt: number;\n }> {\n return Array.from(this.extensions.entries()).map(([name, state]) => ({\n name,\n version: state.extension.version,\n status: state.status,\n loadedAt: state.loadedAt,\n }));\n }\n\n /**\n * Get tools from all active extensions\n */\n getTools(): ToolDefinition[] {\n const tools: ToolDefinition[] = [];\n for (const state of Array.from(this.extensions.values())) {\n if (state.status === 'active' && state.extension.tools) {\n tools.push(...state.extension.tools);\n }\n }\n return tools;\n }\n\n /**\n * Get providers from all active extensions\n */\n getProviders(): ProviderAdapter[] {\n const providers: ProviderAdapter[] = [];\n for (const state of Array.from(this.extensions.values())) {\n if (state.status === 'active' && state.extension.providers) {\n providers.push(...state.extension.providers);\n }\n }\n return providers;\n }\n\n /**\n * Emit event to all extensions\n */\n emit(event: string, data: unknown): void {\n this.eventBus.emit(event, data);\n }\n\n /**\n * Shutdown the runtime\n */\n async shutdown(): Promise<void> {\n logger.info('Shutting down SandboxRuntime');\n const names = Array.from(this.extensions.keys());\n for (const name of names) {\n try {\n await this.unloadExtension(name);\n } catch (error) {\n logger.warn('Failed to unload extension during shutdown', {\n name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n this.eventBus.removeAllListeners();\n logger.info('SandboxRuntime shutdown complete');\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n /**\n * Resolve extension from source\n */\n private async resolveExtension(source: ExtensionSource): Promise<Extension> {\n switch (source.type) {\n case 'inline':\n return this.loadInlineExtension(source.code, source.manifest);\n\n case 'file':\n return this.loadFileExtension(source.path);\n\n case 'url':\n return this.loadUrlExtension(source.url);\n\n case 'npm':\n return this.loadNpmExtension(source.package, source.version);\n\n default:\n throw new ValidationError(\n 'Invalid extension source type',\n ErrorCode.VALIDATION_FAILED,\n { source }\n );\n }\n }\n\n /**\n * Load inline extension\n */\n private async loadInlineExtension(\n code: string,\n manifest: PermissionManifest\n ): Promise<Extension> {\n // For inline extensions, we expect the code to export a factory function\n // In a real browser environment, this would use Function constructor or eval\n // For Node.js, we use vm module\n\n // Security: Code execution is sandboxed and requires manifest declaration\n const AsyncFunction = Object.getPrototypeOf(\n async function () {}\n ).constructor;\n\n try {\n const factory = new AsyncFunction(\n 'manifest',\n `\n ${code}\n return { ...exports, manifest };\n `\n );\n const extension = await factory(manifest);\n return extension as Extension;\n } catch (error) {\n throw new SystemError(\n `Failed to load inline extension: ${error instanceof Error ? error.message : String(error)}`,\n ErrorCode.INITIALIZATION_ERROR,\n { manifest: manifest.name }\n );\n }\n }\n\n /**\n * Load extension from file\n */\n private async loadFileExtension(filePath: string): Promise<Extension> {\n try {\n // Dynamic import for ES modules\n const module = await import(filePath);\n const extension = module.default || module;\n\n if (!extension.name || !extension.version || !extension.manifest) {\n throw new Error('Invalid extension export: missing required fields');\n }\n\n return extension as Extension;\n } catch (error) {\n throw new SystemError(\n `Failed to load extension from file: ${error instanceof Error ? error.message : String(error)}`,\n ErrorCode.FILE_NOT_FOUND,\n { filePath }\n );\n }\n }\n\n /**\n * Load extension from URL\n */\n private async loadUrlExtension(url: string): Promise<Extension> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const code = await response.text();\n // Extract manifest from code (expects manifest export)\n const manifestMatch = code.match(\n /export\\s+const\\s+manifest\\s*=\\s*({[\\s\\S]*?});/\n );\n if (!manifestMatch) {\n throw new Error('No manifest found in extension code');\n }\n\n const manifest = JSON.parse(\n manifestMatch[1].replace(/'/g, '\"')\n ) as PermissionManifest;\n return this.loadInlineExtension(code, manifest);\n } catch (error) {\n throw new SystemError(\n `Failed to load extension from URL: ${error instanceof Error ? error.message : String(error)}`,\n ErrorCode.NETWORK_ERROR,\n { url }\n );\n }\n }\n\n /**\n * Load extension from npm package\n */\n private async loadNpmExtension(\n packageName: string,\n version?: string\n ): Promise<Extension> {\n try {\n // Resolve package path - in production would use require.resolve\n const packagePath = version ? `${packageName}@${version}` : packageName;\n const module = await import(packagePath);\n const extension = module.default || module;\n\n if (!extension.name || !extension.version || !extension.manifest) {\n throw new Error('Invalid extension export: missing required fields');\n }\n\n return extension as Extension;\n } catch (error) {\n throw new SystemError(\n `Failed to load extension from npm: ${error instanceof Error ? error.message : String(error)}`,\n ErrorCode.INITIALIZATION_ERROR,\n { packageName, version }\n );\n }\n }\n\n /**\n * Validate permission manifest\n */\n private validateManifest(manifest: PermissionManifest): void {\n const result = PermissionManifestSchema.safeParse(manifest);\n if (!result.success) {\n throw new ValidationError(\n `Invalid extension manifest: ${result.error.errors.map((e) => e.message).join(', ')}`,\n ErrorCode.VALIDATION_FAILED,\n { errors: result.error.errors }\n );\n }\n\n // Validate network permissions against global allowlist\n const networkPerms = manifest.permissions.filter(\n (p): p is NetworkPermission => p.type === 'network'\n );\n for (const perm of networkPerms) {\n for (const domain of perm.domains) {\n if (!this.isDomainAllowed(domain)) {\n throw new ValidationError(\n `Domain \"${domain}\" is not in the global allowlist`,\n ErrorCode.PERMISSION_VIOLATION,\n { domain, allowlist: this.config.networkAllowlist }\n );\n }\n }\n }\n }\n\n /**\n * Check if a domain is allowed\n */\n private isDomainAllowed(domain: string): boolean {\n // If no global allowlist, allow all\n if (\n !this.config.networkAllowlist ||\n this.config.networkAllowlist.length === 0\n ) {\n return true;\n }\n\n return this.config.networkAllowlist.some((allowed) => {\n if (allowed === domain) return true;\n if (allowed.startsWith('*.')) {\n const suffix = allowed.slice(1);\n return domain.endsWith(suffix) || domain === allowed.slice(2);\n }\n return false;\n });\n }\n\n /**\n * Create sandboxed extension context\n */\n private createExtensionContext(\n manifest: PermissionManifest\n ): ExtensionContext {\n const extensionId = `${manifest.name}@${manifest.version}`;\n\n // Create sandboxed fetch\n const sandboxedFetch = this.createSandboxedFetch(manifest);\n\n // Create sandboxed storage\n const sandboxedStorage = this.createSandboxedStorage(manifest);\n\n // Create frame manager proxy with permission checks\n const framesAPI = this.createFramesAPI(manifest);\n\n // Create state serializer proxy with permission checks\n const stateAPI = this.createStateAPI(manifest);\n\n // Event handlers map for this extension\n const handlers = new Map<string, Set<EventHandler>>();\n\n const context: ExtensionContext = {\n extensionId,\n extensionName: manifest.name,\n permissions: manifest.permissions,\n\n frames: framesAPI,\n state: stateAPI,\n\n fetch: sandboxedFetch,\n storage: sandboxedStorage,\n\n emit: (event: string, data: unknown) => {\n if (!this.hasPermission(manifest, 'events:emit', event)) {\n logger.warn('Extension attempted to emit without permission', {\n extension: manifest.name,\n event,\n });\n return;\n }\n this.eventBus.emit(event, data);\n },\n\n on: (event: string, handler: EventHandler) => {\n if (!this.hasPermission(manifest, 'events:subscribe', event)) {\n logger.warn('Extension attempted to subscribe without permission', {\n extension: manifest.name,\n event,\n });\n return () => {};\n }\n\n if (!handlers.has(event)) {\n handlers.set(event, new Set());\n }\n handlers.get(event)!.add(handler);\n this.eventBus.on(event, handler);\n\n return () => {\n handlers.get(event)?.delete(handler);\n this.eventBus.off(event, handler);\n };\n },\n\n off: (event: string, handler: EventHandler) => {\n handlers.get(event)?.delete(handler);\n this.eventBus.off(event, handler);\n },\n };\n\n return context;\n }\n\n /**\n * Create sandboxed fetch function\n */\n private createSandboxedFetch(\n manifest: PermissionManifest\n ): typeof globalThis.fetch {\n const networkPerms = manifest.permissions.filter(\n (p): p is NetworkPermission => p.type === 'network'\n );\n const allowedDomains = networkPerms.flatMap((p) => p.domains);\n\n return async (input: RequestInfo | URL, init?: RequestInit) => {\n const url =\n typeof input === 'string'\n ? new URL(input)\n : input instanceof URL\n ? input\n : new URL(input.url);\n\n // Check domain allowlist\n const isAllowed = allowedDomains.some((domain) => {\n if (domain === url.hostname) return true;\n if (domain.startsWith('*.')) {\n const suffix = domain.slice(1);\n return url.hostname.endsWith(suffix);\n }\n return false;\n });\n\n if (!isAllowed) {\n throw new ValidationError(\n `Network access to \"${url.hostname}\" is not permitted`,\n ErrorCode.PERMISSION_VIOLATION,\n { hostname: url.hostname, allowed: allowedDomains }\n );\n }\n\n // Perform the actual fetch\n return globalThis.fetch(input, init);\n };\n }\n\n /**\n * Create sandboxed storage\n */\n private createSandboxedStorage(manifest: PermissionManifest): StorageAPI {\n const hasLocalStorage = manifest.permissions.some(\n (p) => p.type === 'storage:local'\n );\n\n if (!hasLocalStorage) {\n // Return a no-op storage\n return {\n getItem: () => null,\n setItem: () => {},\n removeItem: () => {},\n clear: () => {},\n key: () => null,\n length: 0,\n };\n }\n\n // Create isolated storage namespace\n const storageKey = `ext:${manifest.name}:`;\n const storage = new Map<string, string>();\n\n return {\n getItem: (key: string) => storage.get(storageKey + key) ?? null,\n setItem: (key: string, value: string) => {\n storage.set(storageKey + key, value);\n },\n removeItem: (key: string) => {\n storage.delete(storageKey + key);\n },\n clear: () => {\n for (const key of Array.from(storage.keys())) {\n if (key.startsWith(storageKey)) {\n storage.delete(key);\n }\n }\n },\n key: (index: number) => {\n const keys = Array.from(storage.keys()).filter((k) =>\n k.startsWith(storageKey)\n );\n return keys[index]?.slice(storageKey.length) ?? null;\n },\n get length() {\n return Array.from(storage.keys()).filter((k) =>\n k.startsWith(storageKey)\n ).length;\n },\n };\n }\n\n /**\n * Create frames API with permission checks\n */\n private createFramesAPI(manifest: PermissionManifest): FrameManagerAPI {\n const canRead = manifest.permissions.some((p) => p.type === 'frames:read');\n const canWrite = manifest.permissions.some(\n (p) => p.type === 'frames:write'\n );\n\n const noOpFrameManager: FrameManagerAPI = {\n getCurrentFrame: async () => null,\n getFrame: async () => null,\n listFrames: async () => [],\n };\n\n if (!canRead && !this.frameManager) {\n return noOpFrameManager;\n }\n\n const fm = this.frameManager;\n const api: FrameManagerAPI = {\n getCurrentFrame: async () => {\n if (!canRead || !fm) return null;\n return fm.getCurrentFrame();\n },\n getFrame: async (frameId: string) => {\n if (!canRead || !fm) return null;\n return fm.getFrame(frameId);\n },\n listFrames: async (filter?: FrameFilter) => {\n if (!canRead || !fm) return [];\n return fm.listFrames(filter);\n },\n };\n\n if (canWrite && fm?.createFrame) {\n api.createFrame = async (options: FrameCreateOptions) => {\n return fm.createFrame!(options);\n };\n }\n\n if (canWrite && fm?.closeFrame) {\n api.closeFrame = async (frameId: string) => {\n return fm.closeFrame!(frameId);\n };\n }\n\n return api;\n }\n\n /**\n * Create state API with permission checks\n */\n private createStateAPI(manifest: PermissionManifest): StateSerializerAPI {\n const canRead = manifest.permissions.some((p) => p.type === 'frames:read');\n const canWrite = manifest.permissions.some(\n (p) => p.type === 'frames:write'\n );\n\n const prefix = `ext:${manifest.name}:`;\n const ss = this.stateSerializer;\n\n return {\n get: async <T>(key: string): Promise<T | null> => {\n if (!canRead || !ss) return null;\n return ss.get<T>(prefix + key);\n },\n set: async <T>(key: string, value: T): Promise<void> => {\n if (!canWrite || !ss) return;\n await ss.set(prefix + key, value);\n },\n delete: async (key: string): Promise<boolean> => {\n if (!canWrite || !ss) return false;\n return ss.delete(prefix + key);\n },\n getDocument: async (key: string): Promise<string | null> => {\n if (!canRead || !ss) return null;\n return ss.getDocument(prefix + key);\n },\n setDocument: async (key: string, content: string): Promise<void> => {\n if (!canWrite || !ss) return;\n await ss.setDocument(prefix + key, content);\n },\n deleteDocument: async (key: string): Promise<boolean> => {\n if (!canWrite || !ss) return false;\n return ss.deleteDocument(prefix + key);\n },\n };\n }\n\n /**\n * Check if extension has specific permission\n */\n private hasPermission(\n manifest: PermissionManifest,\n type: PermissionType,\n target?: string\n ): boolean {\n const perm = manifest.permissions.find((p) => p.type === type);\n if (!perm) return false;\n\n // Check pattern matching for events\n if ((type === 'events:emit' || type === 'events:subscribe') && target) {\n const eventPerm = perm as EventPermission;\n if (!eventPerm.patterns || eventPerm.patterns.length === 0) {\n return true; // No patterns = all allowed\n }\n return eventPerm.patterns.some((pattern) =>\n this.matchPattern(pattern, target)\n );\n }\n\n return true;\n }\n\n /**\n * Match glob-style pattern\n */\n private matchPattern(pattern: string, value: string): boolean {\n const regex = new RegExp(\n '^' + pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$'\n );\n return regex.test(value);\n }\n\n /**\n * Execute with timeout\n */\n private async withTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n message: string\n ): Promise<T> {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(message)), timeoutMs);\n });\n return Promise.race([promise, timeoutPromise]);\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a new sandbox runtime with default configuration\n */\nexport function createSandboxRuntime(\n config?: Partial<SandboxConfig>\n): SandboxRuntime {\n return new SandboxRuntime(config);\n}\n\n/**\n * Create a permission manifest\n */\nexport function createManifest(\n name: string,\n version: string,\n permissions: Permission[],\n options?: {\n description?: string;\n author?: string;\n homepage?: string;\n }\n): PermissionManifest {\n return {\n name,\n version,\n permissions,\n ...options,\n };\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default SandboxRuntime;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/frame/workflow-templates.ts"],
4
+ "sourcesContent": ["/**\n * Workflow Templates for StackMemory\n * Inspired by Continuous-Claude's structured approach\n *\n * Each workflow auto-creates child frames for phases\n * and enforces completion gates between transitions\n */\n\nimport { Frame, FrameManager } from '../context/index.js';\n\nexport interface WorkflowPhase {\n name: string;\n requiredOutputs?: string[];\n validationRules?: ((frame: Frame) => boolean)[];\n autoTransition?: boolean;\n}\n\nexport interface WorkflowTemplate {\n name: string;\n description: string;\n phases: WorkflowPhase[];\n metadata?: Record<string, any>;\n}\n\nexport class WorkflowTemplates {\n private frameManager: FrameManager;\n\n constructor(frameManager: FrameManager) {\n this.frameManager = frameManager;\n }\n\n /**\n * TDD Workflow: Red \u2192 Green \u2192 Refactor\n */\n static TDD: WorkflowTemplate = {\n name: 'tdd',\n description: 'Test-Driven Development workflow',\n phases: [\n {\n name: 'write-failing-tests',\n requiredOutputs: ['test_file', 'test_count'],\n validationRules: [(frame) => frame.metadata?.tests_failing === true],\n },\n {\n name: 'implement-minimal',\n requiredOutputs: ['implementation_file'],\n validationRules: [(frame) => frame.metadata?.tests_passing === true],\n },\n {\n name: 'refactor',\n requiredOutputs: ['refactored_files'],\n validationRules: [\n (frame) => frame.metadata?.tests_passing === true,\n (frame) => frame.metadata?.complexity_reduced === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Feature Development Workflow\n */\n static FEATURE: WorkflowTemplate = {\n name: 'feature',\n description: 'Feature development workflow',\n phases: [\n {\n name: 'research',\n requiredOutputs: ['requirements', 'constraints', 'dependencies'],\n validationRules: [\n (frame) => frame.metadata?.research_complete === true,\n ],\n },\n {\n name: 'design',\n requiredOutputs: ['architecture_decision', 'api_design'],\n validationRules: [(frame) => frame.metadata?.design_reviewed === true],\n },\n {\n name: 'implement',\n requiredOutputs: ['implementation_files', 'tests'],\n validationRules: [\n (frame) => frame.metadata?.tests_passing === true,\n (frame) => frame.metadata?.lint_passing === true,\n ],\n },\n {\n name: 'validate',\n requiredOutputs: ['test_results', 'performance_metrics'],\n validationRules: [\n (frame) => frame.metadata?.validation_complete === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Bug Fix Workflow\n */\n static BUGFIX: WorkflowTemplate = {\n name: 'bugfix',\n description: 'Bug fixing workflow',\n phases: [\n {\n name: 'reproduce',\n requiredOutputs: ['reproduction_steps', 'failing_test'],\n validationRules: [(frame) => frame.metadata?.bug_reproduced === true],\n },\n {\n name: 'diagnose',\n requiredOutputs: ['root_cause', 'affected_code'],\n validationRules: [(frame) => frame.metadata?.cause_identified === true],\n },\n {\n name: 'fix',\n requiredOutputs: ['fix_commits', 'updated_tests'],\n validationRules: [(frame) => frame.metadata?.fix_applied === true],\n },\n {\n name: 'verify',\n requiredOutputs: ['verification_results', 'regression_tests'],\n validationRules: [\n (frame) => frame.metadata?.bug_fixed === true,\n (frame) => frame.metadata?.no_regressions === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Refactoring Workflow\n */\n static REFACTOR: WorkflowTemplate = {\n name: 'refactor',\n description: 'Code refactoring workflow',\n phases: [\n {\n name: 'analyze',\n requiredOutputs: [\n 'code_metrics',\n 'smell_detection',\n 'complexity_report',\n ],\n validationRules: [\n (frame) => frame.metadata?.analysis_complete === true,\n ],\n },\n {\n name: 'plan',\n requiredOutputs: ['refactor_plan', 'risk_assessment'],\n validationRules: [(frame) => frame.metadata?.plan_approved === true],\n },\n {\n name: 'refactor',\n requiredOutputs: ['refactored_code', 'preserved_tests'],\n validationRules: [(frame) => frame.metadata?.tests_passing === true],\n },\n {\n name: 'validate',\n requiredOutputs: ['before_after_metrics', 'performance_comparison'],\n validationRules: [\n (frame) => frame.metadata?.metrics_improved === true,\n (frame) => frame.metadata?.behavior_preserved === true,\n ],\n autoTransition: true,\n },\n ],\n };\n\n /**\n * Start a workflow, creating the parent frame and first phase frame\n */\n async startWorkflow(\n template: WorkflowTemplate,\n parentFrameId?: string\n ): Promise<Frame> {\n // Create parent workflow frame\n const workflowFrame = await this.frameManager.push(\n {\n type: 'workflow',\n description: `${template.name} workflow`,\n metadata: {\n workflow: template.name,\n current_phase: 0,\n phases: template.phases.map((p) => p.name),\n started_at: new Date().toISOString(),\n },\n },\n parentFrameId\n );\n\n // Auto-create first phase frame\n await this.startPhase(workflowFrame.id, 0);\n\n return workflowFrame;\n }\n\n /**\n * Transition to next phase if current phase is complete\n */\n async transitionPhase(frameId: string): Promise<boolean> {\n const frame = await this.frameManager.getFrame(frameId);\n if (!frame || frame.type !== 'workflow') return false;\n\n const currentPhase = frame.metadata?.current_phase || 0;\n const template = this.getTemplate(frame.metadata?.workflow);\n if (!template) return false;\n\n // Validate current phase completion\n const phaseFrame = await this.getCurrentPhaseFrame(frameId);\n if (!phaseFrame) return false;\n\n const phase = template.phases[currentPhase];\n const isComplete = await this.validatePhase(phaseFrame, phase);\n\n if (!isComplete) {\n console.log(`Phase ${phase.name} validation failed`);\n return false;\n }\n\n // Close current phase frame\n await this.frameManager.close(phaseFrame.id, {\n completed: true,\n phase: phase.name,\n });\n\n // Check if workflow is complete\n if (currentPhase >= template.phases.length - 1) {\n await this.frameManager.close(frameId, {\n workflow_complete: true,\n completed_at: new Date().toISOString(),\n });\n return true;\n }\n\n // Start next phase\n await this.frameManager.updateMetadata(frameId, {\n current_phase: currentPhase + 1,\n });\n await this.startPhase(frameId, currentPhase + 1);\n\n return true;\n }\n\n /**\n * Start a specific phase within a workflow\n */\n private async startPhase(\n workflowFrameId: string,\n phaseIndex: number\n ): Promise<Frame> {\n const frame = await this.frameManager.getFrame(workflowFrameId);\n const template = this.getTemplate(frame?.metadata?.workflow);\n if (!template || phaseIndex >= template.phases.length) {\n throw new Error('Invalid phase index');\n }\n\n const phase = template.phases[phaseIndex];\n return await this.frameManager.push(\n {\n type: 'phase',\n description: `Phase: ${phase.name}`,\n metadata: {\n phase_name: phase.name,\n phase_index: phaseIndex,\n required_outputs: phase.requiredOutputs,\n started_at: new Date().toISOString(),\n },\n },\n workflowFrameId\n );\n }\n\n /**\n * Validate a phase frame against its requirements\n */\n private async validatePhase(\n frame: Frame,\n phase: WorkflowPhase\n ): Promise<boolean> {\n // Check required outputs\n if (phase.requiredOutputs) {\n for (const output of phase.requiredOutputs) {\n if (!frame.metadata?.[output]) {\n return false;\n }\n }\n }\n\n // Run validation rules\n if (phase.validationRules) {\n for (const rule of phase.validationRules) {\n if (!rule(frame)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Get current phase frame for a workflow\n */\n private async getCurrentPhaseFrame(\n workflowFrameId: string\n ): Promise<Frame | null> {\n const children = await this.frameManager.getChildren(workflowFrameId);\n return (\n children.find((f) => f.type === 'phase' && f.status === 'open') || null\n );\n }\n\n /**\n * Get template by name\n */\n private getTemplate(name?: string): WorkflowTemplate | null {\n if (!name) return null;\n\n const templates: Record<string, WorkflowTemplate> = {\n tdd: WorkflowTemplates.TDD,\n feature: WorkflowTemplates.FEATURE,\n bugfix: WorkflowTemplates.BUGFIX,\n refactor: WorkflowTemplates.REFACTOR,\n };\n\n return templates[name] || null;\n }\n\n /**\n * List available workflow templates\n */\n static listTemplates(): WorkflowTemplate[] {\n return [\n WorkflowTemplates.TDD,\n WorkflowTemplates.FEATURE,\n WorkflowTemplates.BUGFIX,\n WorkflowTemplates.REFACTOR,\n ];\n }\n}\n\n/**\n * Export workflow templates object for CLI commands\n */\nexport const workflowTemplates = {\n tdd: {\n name: 'Test-Driven Development',\n description: 'Write tests first, then implement',\n phases: [\n { name: 'write-failing-tests', description: 'Write tests that fail' },\n { name: 'implement-code', description: 'Make tests pass' },\n { name: 'refactor', description: 'Clean up code' },\n ],\n },\n feature: {\n name: 'Feature Development',\n description: 'Develop a new feature',\n phases: [\n { name: 'design', description: 'Design the feature' },\n { name: 'implement', description: 'Build the feature' },\n { name: 'test', description: 'Test the feature' },\n ],\n },\n bugfix: {\n name: 'Bug Fix',\n description: 'Fix a reported bug',\n phases: [\n { name: 'reproduce', description: 'Reproduce the bug' },\n { name: 'fix', description: 'Fix the bug' },\n { name: 'verify', description: 'Verify the fix' },\n ],\n },\n refactor: {\n name: 'Refactoring',\n description: 'Improve code structure',\n phases: [\n { name: 'analyze', description: 'Analyze current code' },\n { name: 'refactor', description: 'Refactor code' },\n { name: 'test', description: 'Ensure no regressions' },\n ],\n },\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -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,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
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/merge/resolution-engine.ts"],
4
+ "sourcesContent": ["/**\n * Resolution Engine\n * Implements multiple strategies for resolving merge conflicts\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n MergeConflict,\n ConflictResolution,\n ResolutionStrategy,\n TeamVote,\n FrameStack,\n MergeResult,\n NotificationResult,\n} from './types.js';\nimport { Frame } from '../context/index.js';\nimport { ConflictDetector } from './conflict-detector.js';\nimport { StackDiffVisualizer } from './stack-diff.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport interface ResolutionContext {\n userId: string;\n userRole: 'junior' | 'mid' | 'senior' | 'lead';\n teamVotes?: TeamVote[];\n aiConfidence?: number;\n timeConstraint?: number; // milliseconds\n}\n\nexport class ResolutionEngine {\n private conflictDetector: ConflictDetector;\n private diffVisualizer: StackDiffVisualizer;\n private resolutionHistory: Map<string, ConflictResolution> = new Map();\n\n constructor() {\n this.conflictDetector = new ConflictDetector();\n this.diffVisualizer = new StackDiffVisualizer();\n }\n\n /**\n * Resolve conflicts using the specified strategy\n */\n async resolveConflicts(\n stack1: FrameStack,\n stack2: FrameStack,\n strategy: ResolutionStrategy['type'],\n context: ResolutionContext\n ): Promise<MergeResult> {\n const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);\n\n logger.info(\n `Resolving ${conflicts.length} conflicts using ${strategy} strategy`,\n {\n userId: context.userId,\n userRole: context.userRole,\n }\n );\n\n let resolution: ConflictResolution;\n\n switch (strategy) {\n case 'keep_both':\n resolution = await this.keepBothStrategy(\n conflicts,\n stack1,\n stack2,\n context\n );\n break;\n\n case 'team_vote':\n resolution = await this.teamVoteStrategy(\n conflicts,\n stack1,\n stack2,\n context\n );\n break;\n\n case 'senior_override':\n resolution = await this.seniorOverrideStrategy(\n conflicts,\n stack1,\n stack2,\n context\n );\n break;\n\n case 'ai_suggest':\n resolution = await this.aiSuggestStrategy(\n conflicts,\n stack1,\n stack2,\n context\n );\n break;\n\n case 'hybrid':\n resolution = await this.hybridStrategy(\n conflicts,\n stack1,\n stack2,\n context\n );\n break;\n\n default:\n throw new Error(`Unknown resolution strategy: ${strategy}`);\n }\n\n // Execute the merge based on resolution\n const mergeResult = await this.executeMerge(\n stack1,\n stack2,\n conflicts,\n resolution\n );\n\n // Store resolution in history\n this.storeResolution(mergeResult.mergedFrameId || '', resolution);\n\n return mergeResult;\n }\n\n /**\n * Strategy: Keep Both Solutions\n * Creates a merged frame that includes both approaches\n */\n private async keepBothStrategy(\n conflicts: MergeConflict[],\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): Promise<ConflictResolution> {\n logger.info('Applying keep_both strategy');\n\n const strategy: ResolutionStrategy = {\n type: 'keep_both',\n confidence: 0.8,\n reasoning:\n 'Preserving both solutions to maintain all work and allow future evaluation',\n };\n\n // Mark all conflicts as resolved by keeping both\n for (const conflict of conflicts) {\n conflict.resolution = {\n strategy,\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: 'Both solutions preserved in merged frame',\n };\n }\n\n return {\n strategy,\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: `Kept all ${stack1.frames.length + stack2.frames.length} frames from both stacks`,\n };\n }\n\n /**\n * Strategy: Team Vote\n * Uses democratic voting to choose between options\n */\n private async teamVoteStrategy(\n conflicts: MergeConflict[],\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): Promise<ConflictResolution> {\n logger.info('Applying team_vote strategy');\n\n if (!context.teamVotes || context.teamVotes.length === 0) {\n throw new Error('Team vote strategy requires votes from team members');\n }\n\n // Count votes for each conflict\n const voteResults = this.countVotes(context.teamVotes);\n\n const strategy: ResolutionStrategy = {\n type: 'team_vote',\n confidence: this.calculateVoteConfidence(voteResults),\n reasoning: `Team consensus from ${context.teamVotes.length} votes`,\n votes: context.teamVotes,\n };\n\n // Apply vote results to conflicts\n for (const conflict of conflicts) {\n conflict.resolution = {\n strategy,\n resolvedBy: 'team_consensus',\n resolvedAt: Date.now(),\n notes: `Resolved by ${voteResults.consensus}% consensus`,\n };\n }\n\n return {\n strategy,\n resolvedBy: 'team_consensus',\n resolvedAt: Date.now(),\n notes: `Democratic resolution with ${voteResults.consensus}% agreement`,\n };\n }\n\n /**\n * Strategy: Senior Override\n * Senior developer's choice takes precedence\n */\n private async seniorOverrideStrategy(\n conflicts: MergeConflict[],\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): Promise<ConflictResolution> {\n logger.info('Applying senior_override strategy');\n\n if (context.userRole !== 'senior' && context.userRole !== 'lead') {\n throw new Error('Senior override requires senior or lead role');\n }\n\n // Assume stack1 is the senior's preferred choice\n this.determinePreferredStack(stack1, stack2, context);\n\n const strategy: ResolutionStrategy = {\n type: 'senior_override',\n confidence: 0.95,\n reasoning: `Senior developer (${context.userId}) selected based on experience and architectural knowledge`,\n };\n\n for (const conflict of conflicts) {\n conflict.resolution = {\n strategy,\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: `Overridden by ${context.userRole} authority`,\n };\n }\n\n return {\n strategy,\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: `Senior override applied to all ${conflicts.length} conflicts`,\n };\n }\n\n /**\n * Strategy: AI Suggest\n * Uses AI analysis to recommend best resolution\n */\n private async aiSuggestStrategy(\n conflicts: MergeConflict[],\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): Promise<ConflictResolution> {\n logger.info('Applying ai_suggest strategy');\n\n // Analyze frames for quality and effectiveness\n const analysis = await this.analyzeFrameQuality(stack1, stack2);\n\n const strategy: ResolutionStrategy = {\n type: 'ai_suggest',\n confidence: context.aiConfidence || 0.85,\n reasoning: this.generateAIReasoning(analysis),\n };\n\n // Apply AI recommendations to each conflict\n for (const conflict of conflicts) {\n const recommendation = this.getAIRecommendation(conflict, analysis);\n conflict.resolution = {\n strategy,\n resolvedBy: 'ai_system',\n resolvedAt: Date.now(),\n notes: recommendation,\n };\n }\n\n return {\n strategy,\n resolvedBy: 'ai_system',\n resolvedAt: Date.now(),\n notes: `AI analysis with ${strategy.confidence * 100}% confidence`,\n };\n }\n\n /**\n * Strategy: Hybrid\n * Combines multiple strategies based on conflict type\n */\n private async hybridStrategy(\n conflicts: MergeConflict[],\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): Promise<ConflictResolution> {\n logger.info('Applying hybrid strategy');\n\n const strategy: ResolutionStrategy = {\n type: 'hybrid',\n confidence: 0.9,\n reasoning: 'Using optimal strategy for each conflict type',\n };\n\n // Apply different strategies based on conflict type\n for (const conflict of conflicts) {\n let subStrategy: ResolutionStrategy['type'];\n\n switch (conflict.type) {\n case 'parallel_solution':\n // Keep both for parallel solutions\n subStrategy = 'keep_both';\n break;\n\n case 'conflicting_decision':\n // Use AI for decision conflicts\n subStrategy = 'ai_suggest';\n break;\n\n case 'structural_divergence':\n // Use senior override for structural issues\n subStrategy =\n context.userRole === 'senior' || context.userRole === 'lead'\n ? 'senior_override'\n : 'team_vote';\n break;\n\n default:\n subStrategy = 'ai_suggest';\n }\n\n conflict.resolution = {\n strategy: {\n ...strategy,\n reasoning: `${subStrategy} for ${conflict.type}`,\n },\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: `Hybrid resolution using ${subStrategy}`,\n };\n }\n\n return {\n strategy,\n resolvedBy: context.userId,\n resolvedAt: Date.now(),\n notes: `Hybrid strategy optimized for each conflict type`,\n };\n }\n\n /**\n * Execute the merge based on resolution\n */\n private async executeMerge(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[],\n resolution: ConflictResolution\n ): Promise<MergeResult> {\n const mergedFrameId = uuidv4();\n const rollbackPoint = this.createRollbackPoint(stack1, stack2);\n const notifications: NotificationResult[] = [];\n\n try {\n // Create merged frame stack\n const mergedFrames = this.mergeFrames(\n stack1,\n stack2,\n conflicts,\n resolution\n );\n\n // Validate merge integrity\n const isValid = this.validateMerge(mergedFrames, conflicts);\n\n if (!isValid) {\n throw new Error('Merge validation failed');\n }\n\n // Send notifications\n const notifyResults = await this.sendNotifications(conflicts, resolution);\n notifications.push(...notifyResults);\n\n logger.info('Merge executed successfully', {\n mergedFrameId,\n frameCount: mergedFrames.length,\n strategy: resolution.strategy.type,\n });\n\n return {\n success: true,\n mergedFrameId,\n conflicts,\n resolution,\n rollbackPoint,\n notifications,\n };\n } catch (error: unknown) {\n logger.error('Merge execution failed', error as Error);\n\n return {\n success: false,\n conflicts,\n resolution,\n rollbackPoint,\n notifications,\n };\n }\n }\n\n /**\n * Count votes from team members\n */\n private countVotes(votes: TeamVote[]): {\n frame1: number;\n frame2: number;\n both: number;\n neither: number;\n total: number;\n consensus: number;\n } {\n const counts = {\n frame1: 0,\n frame2: 0,\n both: 0,\n neither: 0,\n total: votes.length,\n consensus: 0,\n };\n\n for (const vote of votes) {\n counts[vote.choice]++;\n }\n\n // Calculate consensus percentage\n const maxVotes = Math.max(\n counts.frame1,\n counts.frame2,\n counts.both,\n counts.neither\n );\n counts.consensus = Math.round((maxVotes / counts.total) * 100);\n\n return counts;\n }\n\n /**\n * Calculate confidence based on vote distribution\n */\n private calculateVoteConfidence(voteResults: { consensus: number }): number {\n // High confidence if strong consensus\n if (voteResults.consensus >= 80) return 0.95;\n if (voteResults.consensus >= 60) return 0.75;\n if (voteResults.consensus >= 40) return 0.5;\n return 0.3;\n }\n\n /**\n * Determine winner from vote results\n */\n private determineVoteWinner(\n conflict: MergeConflict,\n voteResults: {\n frame1: number;\n frame2: number;\n both: number;\n neither: number;\n }\n ): string {\n if (voteResults.frame1 > voteResults.frame2) return conflict.frameId1;\n if (voteResults.frame2 > voteResults.frame1) return conflict.frameId2;\n if (voteResults.both > voteResults.neither) return 'both';\n return 'neither';\n }\n\n /**\n * Determine preferred stack for senior override\n */\n private determinePreferredStack(\n stack1: FrameStack,\n stack2: FrameStack,\n context: ResolutionContext\n ): FrameStack {\n // Check if senior owns one of the stacks\n if (stack1.owner === context.userId) return stack1;\n if (stack2.owner === context.userId) return stack2;\n\n // Otherwise, prefer more recent/complete stack\n if (stack1.lastModified > stack2.lastModified) return stack1;\n if (\n stack2.frames.filter((f) => f.state === 'closed').length >\n stack1.frames.filter((f) => f.state === 'closed').length\n ) {\n return stack2;\n }\n\n return stack1;\n }\n\n /**\n * Analyze frame quality for AI suggestions\n */\n private async analyzeFrameQuality(\n stack1: FrameStack,\n stack2: FrameStack\n ): Promise<{\n stack1: { completeness: number; efficiency: number; quality: number };\n stack2: { completeness: number; efficiency: number; quality: number };\n }> {\n const analysis = {\n stack1: {\n completeness: this.calculateCompleteness(stack1),\n efficiency: this.calculateEfficiency(stack1),\n quality: this.calculateQuality(stack1),\n },\n stack2: {\n completeness: this.calculateCompleteness(stack2),\n efficiency: this.calculateEfficiency(stack2),\n quality: this.calculateQuality(stack2),\n },\n };\n\n return analysis;\n }\n\n /**\n * Calculate stack completeness\n */\n private calculateCompleteness(stack: FrameStack): number {\n const closedFrames = stack.frames.filter(\n (f) => f.state === 'closed'\n ).length;\n return closedFrames / stack.frames.length;\n }\n\n /**\n * Calculate stack efficiency\n */\n private calculateEfficiency(stack: FrameStack): number {\n let totalDuration = 0;\n let completedFrames = 0;\n\n for (const frame of stack.frames) {\n if (frame.closed_at && frame.created_at) {\n totalDuration += frame.closed_at - frame.created_at;\n completedFrames++;\n }\n }\n\n if (completedFrames === 0) return 0;\n\n const avgDuration = totalDuration / completedFrames;\n // Normalize: 5 minutes = 1.0, longer = lower score\n return Math.max(0, Math.min(1, 300000 / avgDuration));\n }\n\n /**\n * Calculate stack quality\n */\n private calculateQuality(stack: FrameStack): number {\n let qualityScore = 0;\n\n for (const frame of stack.frames) {\n if (frame.outputs && Object.keys(frame.outputs).length > 0)\n qualityScore += 0.3;\n if (frame.digest_text) qualityScore += 0.3;\n if (frame.state === 'closed') qualityScore += 0.4;\n }\n\n return Math.min(1, qualityScore / stack.frames.length);\n }\n\n /**\n * Generate AI reasoning for resolution\n */\n private generateAIReasoning(analysis: {\n stack1: { completeness: number; efficiency: number; quality: number };\n stack2: { completeness: number; efficiency: number; quality: number };\n }): string {\n const stack1Score =\n analysis.stack1.completeness * 0.3 +\n analysis.stack1.efficiency * 0.3 +\n analysis.stack1.quality * 0.4;\n\n const stack2Score =\n analysis.stack2.completeness * 0.3 +\n analysis.stack2.efficiency * 0.3 +\n analysis.stack2.quality * 0.4;\n\n if (stack1Score > stack2Score) {\n return `Stack 1 shows higher overall quality (${(stack1Score * 100).toFixed(1)}% vs ${(stack2Score * 100).toFixed(1)}%)`;\n } else {\n return `Stack 2 shows higher overall quality (${(stack2Score * 100).toFixed(1)}% vs ${(stack1Score * 100).toFixed(1)}%)`;\n }\n }\n\n /**\n * Get AI recommendation for specific conflict\n */\n private getAIRecommendation(conflict: MergeConflict): string {\n switch (conflict.type) {\n case 'parallel_solution':\n return 'Recommend keeping both solutions for A/B testing';\n\n case 'conflicting_decision':\n return 'Recommend the decision with higher quality score';\n\n case 'structural_divergence':\n return 'Recommend restructuring to accommodate both approaches';\n\n default:\n return 'Recommend manual review for this conflict';\n }\n }\n\n /**\n * Create rollback point before merge\n */\n private createRollbackPoint(\n _stack1: FrameStack,\n _stack2: FrameStack\n ): string {\n const rollbackId = uuidv4();\n\n // Store current state for rollback (would persist in real implementation)\n\n // In real implementation, persist this to database\n logger.info('Created rollback point', { rollbackId });\n\n return rollbackId;\n }\n\n /**\n * Merge frames based on resolution\n */\n private mergeFrames(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[],\n resolution: ConflictResolution\n ): Frame[] {\n const mergedFrames: Frame[] = [];\n const processedIds = new Set<string>();\n\n // Process based on resolution strategy\n switch (resolution.strategy.type) {\n case 'keep_both':\n // Add all frames from both stacks\n mergedFrames.push(...stack1.frames, ...stack2.frames);\n break;\n\n case 'team_vote':\n case 'senior_override':\n case 'ai_suggest':\n // Add frames based on resolution decisions\n for (const frame of stack1.frames) {\n const conflict = conflicts.find((c) => c.frameId1 === frame.frame_id);\n if (!conflict || conflict.resolution?.strategy.type === 'keep_both') {\n mergedFrames.push(frame);\n processedIds.add(frame.frame_id);\n }\n }\n\n for (const frame of stack2.frames) {\n if (!processedIds.has(frame.frame_id)) {\n const conflict = conflicts.find(\n (c) => c.frameId2 === frame.frame_id\n );\n if (\n !conflict ||\n conflict.resolution?.strategy.type === 'keep_both'\n ) {\n mergedFrames.push(frame);\n }\n }\n }\n break;\n\n case 'hybrid':\n // Complex merging based on conflict types\n this.hybridMerge(stack1, stack2, conflicts, mergedFrames);\n break;\n }\n\n return mergedFrames;\n }\n\n /**\n * Hybrid merge implementation\n */\n private hybridMerge(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[],\n mergedFrames: Frame[]\n ): void {\n const conflictMap = new Map<string, MergeConflict>();\n\n for (const conflict of conflicts) {\n conflictMap.set(conflict.frameId1, conflict);\n conflictMap.set(conflict.frameId2, conflict);\n }\n\n // Process each frame based on its conflict type\n for (const frame of [...stack1.frames, ...stack2.frames]) {\n const conflict = conflictMap.get(frame.frame_id);\n\n if (!conflict) {\n // No conflict, add frame\n if (!mergedFrames.find((f) => f.frame_id === frame.frame_id)) {\n mergedFrames.push(frame);\n }\n } else if (conflict.type === 'parallel_solution') {\n // Keep both for parallel solutions\n if (!mergedFrames.find((f) => f.frame_id === frame.frame_id)) {\n mergedFrames.push(frame);\n }\n }\n // Other conflict types handled by resolution\n }\n }\n\n /**\n * Validate merge integrity\n */\n private validateMerge(\n mergedFrames: Frame[],\n conflicts: MergeConflict[]\n ): boolean {\n // Check for duplicate frame IDs\n const ids = new Set<string>();\n for (const frame of mergedFrames) {\n if (ids.has(frame.frame_id)) {\n logger.error('Duplicate frame ID in merge', {\n frameId: frame.frame_id,\n });\n return false;\n }\n ids.add(frame.frame_id);\n }\n\n // Check parent-child relationships\n for (const frame of mergedFrames) {\n if (frame.parent_frame_id) {\n const parent = mergedFrames.find(\n (f) => f.frame_id === frame.parent_frame_id\n );\n if (!parent) {\n logger.warn('Orphaned frame in merge', { frameId: frame.frame_id });\n }\n }\n }\n\n // Check all conflicts have resolutions\n for (const conflict of conflicts) {\n if (!conflict.resolution) {\n logger.error('Unresolved conflict in merge', {\n conflictId: conflict.id,\n });\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Send notifications about merge\n */\n private async sendNotifications(\n conflicts: MergeConflict[],\n resolution: ConflictResolution\n ): Promise<NotificationResult[]> {\n const notifications: NotificationResult[] = [];\n\n // In real implementation, send actual notifications\n // For now, simulate notification sending\n const notification: NotificationResult = {\n userId: resolution.resolvedBy || 'team',\n type: 'in-app',\n sent: true,\n timestamp: Date.now(),\n };\n\n notifications.push(notification);\n\n logger.info('Notifications sent', { count: notifications.length });\n\n return notifications;\n }\n\n /**\n * Store resolution in history\n */\n private storeResolution(\n mergeId: string,\n resolution: ConflictResolution\n ): void {\n this.resolutionHistory.set(mergeId, resolution);\n\n // In real implementation, persist to database\n logger.info('Resolution stored in history', {\n mergeId,\n strategy: resolution.strategy.type,\n });\n }\n\n /**\n * Get resolution history for analysis\n */\n getResolutionHistory(): Map<string, ConflictResolution> {\n return this.resolutionHistory;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/merge/stack-diff.ts"],
4
+ "sourcesContent": ["/**\n * Stack Diff Visualizer\n * Creates visual representations of frame stack divergence\n */\n\nimport {\n StackDiff,\n FrameStack,\n DiffTree,\n DiffNode,\n DiffEdge,\n MergeConflict,\n} from './types.js';\nimport { Frame } from '../context/index.js';\nimport { ConflictDetector } from './conflict-detector.js';\n\nexport interface VisualMarker {\n frameId: string;\n type: 'added' | 'removed' | 'modified' | 'conflict';\n color: string;\n symbol: string;\n description: string;\n}\n\nexport interface PreviewResult {\n mergedFrames: Frame[];\n keptFromStack1: string[];\n keptFromStack2: string[];\n conflicts: MergeConflict[];\n estimatedSuccess: number;\n}\n\nexport class StackDiffVisualizer {\n private conflictDetector: ConflictDetector;\n\n constructor() {\n this.conflictDetector = new ConflictDetector();\n }\n\n /**\n * Visualize divergence between two frame stacks\n */\n visualizeDivergence(\n baseFrame: Frame,\n branch1: FrameStack,\n branch2: FrameStack\n ): DiffTree {\n const nodes: DiffNode[] = [];\n const edges: DiffEdge[] = [];\n\n // Add base node\n nodes.push({\n id: baseFrame.frame_id,\n type: 'common',\n frame: baseFrame,\n position: { x: 0, y: 0 },\n metadata: { label: 'Common Ancestor' },\n });\n\n // Process branch 1\n const branch1Nodes = this.processBranch(\n branch1,\n baseFrame.frame_id,\n -100, // Left side\n 100\n );\n nodes.push(...branch1Nodes.nodes);\n edges.push(...branch1Nodes.edges);\n\n // Process branch 2\n const branch2Nodes = this.processBranch(\n branch2,\n baseFrame.frame_id,\n 100, // Right side\n 100\n );\n nodes.push(...branch2Nodes.nodes);\n edges.push(...branch2Nodes.edges);\n\n // Detect and mark conflicts\n const conflicts = this.conflictDetector.detectConflicts(branch1, branch2);\n this.markConflicts(nodes, edges, conflicts);\n\n return {\n nodes,\n edges,\n layout: 'tree',\n };\n }\n\n /**\n * Render conflict markers for visualization\n */\n renderConflictMarkers(conflicts: MergeConflict[]): VisualMarker[] {\n const markers: VisualMarker[] = [];\n\n for (const conflict of conflicts) {\n markers.push({\n frameId: conflict.frameId1,\n type: 'conflict',\n color: this.getSeverityColor(conflict.severity),\n symbol: this.getConflictSymbol(conflict.type),\n description: conflict.description,\n });\n\n markers.push({\n frameId: conflict.frameId2,\n type: 'conflict',\n color: this.getSeverityColor(conflict.severity),\n symbol: this.getConflictSymbol(conflict.type),\n description: conflict.description,\n });\n }\n\n return markers;\n }\n\n /**\n * Generate a merge preview based on resolution strategy\n */\n generateMergePreview(\n stack1: FrameStack,\n stack2: FrameStack,\n strategy:\n | 'keep_both'\n | 'team_vote'\n | 'senior_override'\n | 'ai_suggest'\n | 'hybrid'\n ): PreviewResult {\n const mergedFrames: Frame[] = [];\n const keptFromStack1: string[] = [];\n const keptFromStack2: string[] = [];\n const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);\n\n switch (strategy) {\n case 'keep_both':\n return this.previewKeepBoth(stack1, stack2, conflicts);\n\n case 'team_vote':\n return this.previewTeamVote(stack1, stack2, conflicts);\n\n case 'senior_override':\n return this.previewSeniorOverride(stack1, stack2, conflicts);\n\n case 'ai_suggest':\n return this.previewAISuggest(stack1, stack2, conflicts);\n\n case 'hybrid':\n return this.previewHybrid(stack1, stack2, conflicts);\n\n default:\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess: 0,\n };\n }\n }\n\n /**\n * Create a stack diff comparison\n */\n createStackDiff(\n baseFrameId: string,\n stack1: FrameStack,\n stack2: FrameStack\n ): StackDiff {\n const conflicts = this.conflictDetector.detectConflicts(stack1, stack2);\n const divergencePoint = this.findDivergencePoint(stack1, stack2);\n const commonAncestor = this.findCommonAncestor(stack1, stack2);\n\n // Find base frame\n const baseFrame =\n stack1.frames.find((f) => f.frame_id === baseFrameId) ||\n stack2.frames.find((f) => f.frame_id === baseFrameId);\n\n const visualRepresentation = baseFrame\n ? this.visualizeDivergence(baseFrame, stack1, stack2)\n : undefined;\n\n return {\n baseFrame: baseFrameId,\n branch1: stack1,\n branch2: stack2,\n divergencePoint,\n conflicts,\n commonAncestor,\n visualRepresentation,\n };\n }\n\n /**\n * Process a branch for visualization\n */\n private processBranch(\n stack: FrameStack,\n parentId: string,\n xOffset: number,\n yStart: number\n ): { nodes: DiffNode[]; edges: DiffEdge[] } {\n const nodes: DiffNode[] = [];\n const edges: DiffEdge[] = [];\n let yPos = yStart;\n\n // Find frames that are children of parent\n const children = stack.frames.filter((f) => f.parent_frame_id === parentId);\n\n for (const frame of children) {\n // Add node\n nodes.push({\n id: frame.frame_id,\n type: xOffset < 0 ? 'branch1' : 'branch2',\n frame,\n position: { x: xOffset, y: yPos },\n metadata: {\n branch: xOffset < 0 ? 'left' : 'right',\n depth: frame.depth,\n },\n });\n\n // Add edge from parent\n edges.push({\n source: parentId,\n target: frame.frame_id,\n type: 'parent',\n weight: 1,\n });\n\n // Process children recursively\n const childResults = this.processBranch(\n stack,\n frame.frame_id,\n xOffset + (xOffset < 0 ? -50 : 50),\n yPos + 100\n );\n\n nodes.push(...childResults.nodes);\n edges.push(...childResults.edges);\n\n yPos += 150;\n }\n\n return { nodes, edges };\n }\n\n /**\n * Mark conflicts in the visualization\n */\n private markConflicts(\n nodes: DiffNode[],\n edges: DiffEdge[],\n conflicts: MergeConflict[]\n ): void {\n for (const conflict of conflicts) {\n // Mark conflicting nodes\n const node1 = nodes.find((n) => n.id === conflict.frameId1);\n const node2 = nodes.find((n) => n.id === conflict.frameId2);\n\n if (node1) {\n node1.type = 'conflict';\n node1.metadata = {\n ...node1.metadata,\n conflictType: conflict.type,\n severity: conflict.severity,\n };\n }\n\n if (node2) {\n node2.type = 'conflict';\n node2.metadata = {\n ...node2.metadata,\n conflictType: conflict.type,\n severity: conflict.severity,\n };\n }\n\n // Add conflict edge\n if (node1 && node2) {\n edges.push({\n source: conflict.frameId1,\n target: conflict.frameId2,\n type: 'conflict',\n weight: this.getSeverityWeight(conflict.severity),\n });\n }\n }\n }\n\n /**\n * Get color for severity level\n */\n private getSeverityColor(severity: string): string {\n switch (severity) {\n case 'critical':\n return '#ff0000';\n case 'high':\n return '#ff6600';\n case 'medium':\n return '#ffaa00';\n case 'low':\n return '#ffdd00';\n default:\n return '#888888';\n }\n }\n\n /**\n * Get symbol for conflict type\n */\n private getConflictSymbol(type: string): string {\n switch (type) {\n case 'parallel_solution':\n return '\u26A1';\n case 'conflicting_decision':\n return '\u26A0\uFE0F';\n case 'structural_divergence':\n return '\uD83D\uDD00';\n default:\n return '\u2753';\n }\n }\n\n /**\n * Get weight for severity level\n */\n private getSeverityWeight(severity: string): number {\n switch (severity) {\n case 'critical':\n return 4;\n case 'high':\n return 3;\n case 'medium':\n return 2;\n case 'low':\n return 1;\n default:\n return 0;\n }\n }\n\n /**\n * Preview keep both strategy\n */\n private previewKeepBoth(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[]\n ): PreviewResult {\n const mergedFrames: Frame[] = [];\n const keptFromStack1: string[] = [];\n const keptFromStack2: string[] = [];\n\n // Keep all frames from both stacks\n for (const frame of stack1.frames) {\n mergedFrames.push(frame);\n keptFromStack1.push(frame.frame_id);\n }\n\n for (const frame of stack2.frames) {\n // Only add if not already present\n if (!mergedFrames.find((f) => f.frame_id === frame.frame_id)) {\n mergedFrames.push(frame);\n keptFromStack2.push(frame.frame_id);\n }\n }\n\n // Success depends on conflict severity\n const criticalConflicts = conflicts.filter(\n (c) => c.severity === 'critical'\n ).length;\n const estimatedSuccess = Math.max(0, 1 - criticalConflicts * 0.2);\n\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess,\n };\n }\n\n /**\n * Preview team vote strategy\n */\n private previewTeamVote(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[]\n ): PreviewResult {\n // Simulate team voting - for preview, assume 50/50 split\n const mergedFrames: Frame[] = [];\n const keptFromStack1: string[] = [];\n const keptFromStack2: string[] = [];\n\n // Add non-conflicting frames from both\n const conflictingFrameIds = new Set<string>();\n for (const conflict of conflicts) {\n conflictingFrameIds.add(conflict.frameId1);\n conflictingFrameIds.add(conflict.frameId2);\n }\n\n for (const frame of stack1.frames) {\n if (!conflictingFrameIds.has(frame.frame_id)) {\n mergedFrames.push(frame);\n keptFromStack1.push(frame.frame_id);\n }\n }\n\n for (const frame of stack2.frames) {\n if (\n !conflictingFrameIds.has(frame.frame_id) &&\n !mergedFrames.find((f) => f.frame_id === frame.frame_id)\n ) {\n mergedFrames.push(frame);\n keptFromStack2.push(frame.frame_id);\n }\n }\n\n // For conflicts, alternate between stacks (simulating vote)\n let useStack1 = true;\n for (const conflict of conflicts) {\n if (useStack1) {\n const frame = stack1.frames.find(\n (f) => f.frame_id === conflict.frameId1\n );\n if (frame) {\n mergedFrames.push(frame);\n keptFromStack1.push(frame.frame_id);\n }\n } else {\n const frame = stack2.frames.find(\n (f) => f.frame_id === conflict.frameId2\n );\n if (frame) {\n mergedFrames.push(frame);\n keptFromStack2.push(frame.frame_id);\n }\n }\n useStack1 = !useStack1;\n }\n\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess: 0.75, // Team consensus usually works well\n };\n }\n\n /**\n * Preview senior override strategy\n */\n private previewSeniorOverride(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[]\n ): PreviewResult {\n // Assume stack1 is senior developer's work\n const mergedFrames = [...stack1.frames];\n const keptFromStack1 = stack1.frames.map((f) => f.frame_id);\n const keptFromStack2: string[] = [];\n\n // Add non-conflicting frames from stack2\n const stack1Ids = new Set(keptFromStack1);\n for (const frame of stack2.frames) {\n const hasConflict = conflicts.some((c) => c.frameId2 === frame.frame_id);\n\n if (!hasConflict && !stack1Ids.has(frame.frame_id)) {\n mergedFrames.push(frame);\n keptFromStack2.push(frame.frame_id);\n }\n }\n\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess: 0.85, // Senior override is usually reliable\n };\n }\n\n /**\n * Preview AI suggest strategy\n */\n private previewAISuggest(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[]\n ): PreviewResult {\n const mergedFrames: Frame[] = [];\n const keptFromStack1: string[] = [];\n const keptFromStack2: string[] = [];\n\n // AI would analyze effectiveness - simulate with heuristics\n for (const conflict of conflicts) {\n const frame1 = stack1.frames.find(\n (f) => f.frame_id === conflict.frameId1\n );\n const frame2 = stack2.frames.find(\n (f) => f.frame_id === conflict.frameId2\n );\n\n if (frame1 && frame2) {\n // Choose based on completion and output quality\n const score1 = this.scoreFrame(frame1);\n const score2 = this.scoreFrame(frame2);\n\n if (score1 >= score2) {\n mergedFrames.push(frame1);\n keptFromStack1.push(frame1.frame_id);\n } else {\n mergedFrames.push(frame2);\n keptFromStack2.push(frame2.frame_id);\n }\n }\n }\n\n // Add non-conflicting frames\n this.addNonConflictingFrames(\n stack1,\n stack2,\n conflicts,\n mergedFrames,\n keptFromStack1,\n keptFromStack2\n );\n\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess: 0.9, // AI suggestions are usually optimal\n };\n }\n\n /**\n * Preview hybrid strategy\n */\n private previewHybrid(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[]\n ): PreviewResult {\n const mergedFrames: Frame[] = [];\n const keptFromStack1: string[] = [];\n const keptFromStack2: string[] = [];\n\n // Hybrid: Use different strategies based on conflict type\n for (const conflict of conflicts) {\n if (conflict.type === 'parallel_solution') {\n // Keep both for parallel solutions\n const frame1 = stack1.frames.find(\n (f) => f.frame_id === conflict.frameId1\n );\n const frame2 = stack2.frames.find(\n (f) => f.frame_id === conflict.frameId2\n );\n\n if (frame1) {\n mergedFrames.push(frame1);\n keptFromStack1.push(frame1.frame_id);\n }\n if (frame2) {\n mergedFrames.push(frame2);\n keptFromStack2.push(frame2.frame_id);\n }\n } else if (conflict.type === 'conflicting_decision') {\n // Use AI for decisions\n const frame1 = stack1.frames.find(\n (f) => f.frame_id === conflict.frameId1\n );\n const frame2 = stack2.frames.find(\n (f) => f.frame_id === conflict.frameId2\n );\n\n if (frame1 && frame2) {\n const score1 = this.scoreFrame(frame1);\n const score2 = this.scoreFrame(frame2);\n\n if (score1 >= score2) {\n mergedFrames.push(frame1);\n keptFromStack1.push(frame1.frame_id);\n } else {\n mergedFrames.push(frame2);\n keptFromStack2.push(frame2.frame_id);\n }\n }\n } else {\n // Use senior override for structural divergence\n const frame1 = stack1.frames.find(\n (f) => f.frame_id === conflict.frameId1\n );\n if (frame1) {\n mergedFrames.push(frame1);\n keptFromStack1.push(frame1.frame_id);\n }\n }\n }\n\n // Add non-conflicting frames\n this.addNonConflictingFrames(\n stack1,\n stack2,\n conflicts,\n mergedFrames,\n keptFromStack1,\n keptFromStack2\n );\n\n return {\n mergedFrames,\n keptFromStack1,\n keptFromStack2,\n conflicts,\n estimatedSuccess: 0.88, // Hybrid is very effective\n };\n }\n\n /**\n * Score a frame for quality\n */\n private scoreFrame(frame: Frame): number {\n let score = 0;\n\n if (frame.state === 'closed') score += 0.3;\n if (frame.outputs && Object.keys(frame.outputs).length > 0) score += 0.2;\n if (frame.digest_text) score += 0.2;\n if (frame.closed_at && frame.created_at) {\n const duration = frame.closed_at - frame.created_at;\n if (duration < 600000) score += 0.3; // Less than 10 minutes\n }\n\n return score;\n }\n\n /**\n * Add non-conflicting frames to merge\n */\n private addNonConflictingFrames(\n stack1: FrameStack,\n stack2: FrameStack,\n conflicts: MergeConflict[],\n mergedFrames: Frame[],\n keptFromStack1: string[],\n keptFromStack2: string[]\n ): void {\n const conflictingIds = new Set<string>();\n const mergedIds = new Set<string>(mergedFrames.map((f) => f.frame_id));\n\n for (const conflict of conflicts) {\n conflictingIds.add(conflict.frameId1);\n conflictingIds.add(conflict.frameId2);\n }\n\n for (const frame of stack1.frames) {\n if (\n !conflictingIds.has(frame.frame_id) &&\n !mergedIds.has(frame.frame_id)\n ) {\n mergedFrames.push(frame);\n keptFromStack1.push(frame.frame_id);\n mergedIds.add(frame.frame_id);\n }\n }\n\n for (const frame of stack2.frames) {\n if (\n !conflictingIds.has(frame.frame_id) &&\n !mergedIds.has(frame.frame_id)\n ) {\n mergedFrames.push(frame);\n keptFromStack2.push(frame.frame_id);\n mergedIds.add(frame.frame_id);\n }\n }\n }\n\n /**\n * Find divergence point between stacks\n */\n private findDivergencePoint(stack1: FrameStack, stack2: FrameStack): number {\n const events1 = stack1.events.sort((a, b) => a.ts - b.ts);\n const events2 = stack2.events.sort((a, b) => a.ts - b.ts);\n\n for (let i = 0; i < Math.min(events1.length, events2.length); i++) {\n if (events1[i].event_id !== events2[i].event_id) {\n return events1[i].ts;\n }\n }\n\n return Math.min(\n events1[events1.length - 1]?.ts || 0,\n events2[events2.length - 1]?.ts || 0\n );\n }\n\n /**\n * Find common ancestor frame\n */\n private findCommonAncestor(\n stack1: FrameStack,\n stack2: FrameStack\n ): string | undefined {\n const frames1 = new Set(stack1.frames.map((f) => f.frame_id));\n\n // Find the deepest common frame\n let deepestCommon: Frame | undefined;\n let maxDepth = -1;\n\n for (const frame of stack2.frames) {\n if (frames1.has(frame.frame_id) && frame.depth > maxDepth) {\n deepestCommon = frame;\n maxDepth = frame.depth;\n }\n }\n\n return deepestCommon?.frame_id;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }