@stackmemoryai/stackmemory 0.3.0 → 0.3.3

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 (736) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/codex-sm.js +48 -19
  3. package/dist/cli/codex-sm.js.map +2 -2
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/dashboard.js +178 -0
  9. package/dist/cli/commands/dashboard.js.map +7 -0
  10. package/dist/cli/commands/handoff.js +125 -8
  11. package/dist/cli/commands/handoff.js.map +2 -2
  12. package/dist/cli/commands/linear-create.js +132 -0
  13. package/dist/cli/commands/linear-create.js.map +7 -0
  14. package/dist/cli/commands/linear-list.js +69 -0
  15. package/dist/cli/commands/linear-list.js.map +7 -0
  16. package/dist/cli/commands/linear-migrate.js +40 -0
  17. package/dist/cli/commands/linear-migrate.js.map +7 -0
  18. package/dist/cli/commands/linear.js +185 -36
  19. package/dist/cli/commands/linear.js.map +2 -2
  20. package/dist/cli/commands/monitor.js +309 -0
  21. package/dist/cli/commands/monitor.js.map +7 -0
  22. package/dist/cli/commands/quality.js +414 -0
  23. package/dist/cli/commands/quality.js.map +7 -0
  24. package/dist/cli/commands/storage.js +275 -0
  25. package/dist/cli/commands/storage.js.map +7 -0
  26. package/dist/cli/commands/tui.js +66 -0
  27. package/dist/cli/commands/tui.js.map +7 -0
  28. package/dist/cli/commands/workflow.js +134 -0
  29. package/dist/cli/commands/workflow.js.map +7 -0
  30. package/dist/cli/index.js +105 -9
  31. package/dist/cli/index.js.map +3 -3
  32. package/dist/core/analytics/team-analytics.js +374 -0
  33. package/dist/core/analytics/team-analytics.js.map +7 -0
  34. package/dist/core/context/context-bridge.js +234 -0
  35. package/dist/core/context/context-bridge.js.map +7 -0
  36. package/dist/core/context/dual-stack-manager.js +850 -0
  37. package/dist/core/context/dual-stack-manager.js.map +7 -0
  38. package/dist/core/context/frame-handoff-manager.js +384 -0
  39. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  40. package/dist/core/context/frame-manager.js +132 -12
  41. package/dist/core/context/frame-manager.js.map +2 -2
  42. package/dist/core/context/permission-manager.js +181 -0
  43. package/dist/core/context/permission-manager.js.map +7 -0
  44. package/dist/core/context/shared-context-layer.js +386 -0
  45. package/dist/core/context/shared-context-layer.js.map +7 -0
  46. package/dist/core/context/stack-merge-resolver.js +600 -0
  47. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  48. package/dist/core/context/validation.js +121 -0
  49. package/dist/core/context/validation.js.map +7 -0
  50. package/dist/core/database/connection-pool.js +266 -175
  51. package/dist/core/database/connection-pool.js.map +2 -2
  52. package/dist/core/database/database-adapter.js +51 -0
  53. package/dist/core/database/database-adapter.js.map +7 -0
  54. package/dist/core/database/migration-manager.js +514 -0
  55. package/dist/core/database/migration-manager.js.map +7 -0
  56. package/dist/core/database/paradedb-adapter.js +970 -0
  57. package/dist/core/database/paradedb-adapter.js.map +7 -0
  58. package/dist/core/database/query-router.js +421 -0
  59. package/dist/core/database/query-router.js.map +7 -0
  60. package/dist/core/database/sqlite-adapter.js +547 -0
  61. package/dist/core/database/sqlite-adapter.js.map +7 -0
  62. package/dist/core/errors/index.js +21 -1
  63. package/dist/core/errors/index.js.map +2 -2
  64. package/dist/core/frame/workflow-templates-stub.js +42 -0
  65. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  66. package/dist/core/frame/workflow-templates.js +276 -0
  67. package/dist/core/frame/workflow-templates.js.map +7 -0
  68. package/dist/core/merge/conflict-detector.js +5 -2
  69. package/dist/core/merge/conflict-detector.js.map +2 -2
  70. package/dist/core/merge/resolution-engine.js +3 -14
  71. package/dist/core/merge/resolution-engine.js.map +2 -2
  72. package/dist/core/merge/stack-diff.js.map +2 -2
  73. package/dist/core/monitoring/logger.js +18 -3
  74. package/dist/core/monitoring/logger.js.map +2 -2
  75. package/dist/core/monitoring/session-monitor.js +296 -0
  76. package/dist/core/monitoring/session-monitor.js.map +7 -0
  77. package/dist/core/retrieval/context-retriever.js +475 -0
  78. package/dist/core/retrieval/context-retriever.js.map +7 -0
  79. package/dist/core/retrieval/graph-retrieval.js +658 -0
  80. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  82. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  83. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  84. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  85. package/dist/core/session/clear-survival-stub.js +49 -0
  86. package/dist/core/session/clear-survival-stub.js.map +7 -0
  87. package/dist/core/session/clear-survival.js +426 -0
  88. package/dist/core/session/clear-survival.js.map +7 -0
  89. package/dist/core/session/handoff-generator.js +339 -0
  90. package/dist/core/session/handoff-generator.js.map +7 -0
  91. package/dist/core/session/session-manager.js +61 -26
  92. package/dist/core/session/session-manager.js.map +3 -3
  93. package/dist/core/skills/index.js +3 -0
  94. package/dist/core/skills/index.js.map +7 -0
  95. package/dist/core/skills/skill-storage.js +749 -0
  96. package/dist/core/skills/skill-storage.js.map +7 -0
  97. package/dist/core/skills/types.js +189 -0
  98. package/dist/core/skills/types.js.map +7 -0
  99. package/dist/core/storage/railway-optimized-storage.js +550 -0
  100. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  101. package/dist/core/storage/remote-storage.js +456 -0
  102. package/dist/core/storage/remote-storage.js.map +7 -0
  103. package/dist/core/trace/trace-detector.js +136 -5
  104. package/dist/core/trace/trace-detector.js.map +2 -2
  105. package/dist/core/trace/trace-store.js.map +2 -2
  106. package/dist/features/tui/components/analytics-panel.js +136 -0
  107. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  108. package/dist/features/tui/components/frame-visualizer.js +377 -0
  109. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  110. package/dist/features/tui/components/pr-tracker.js +123 -0
  111. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  112. package/dist/features/tui/components/session-monitor.js +286 -0
  113. package/dist/features/tui/components/session-monitor.js.map +7 -0
  114. package/dist/features/tui/components/subagent-fleet.js +388 -0
  115. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  116. package/dist/features/tui/components/task-board.js +475 -0
  117. package/dist/features/tui/components/task-board.js.map +7 -0
  118. package/dist/features/tui/index.js +397 -0
  119. package/dist/features/tui/index.js.map +7 -0
  120. package/dist/features/tui/services/data-service.js +654 -0
  121. package/dist/features/tui/services/data-service.js.map +7 -0
  122. package/dist/features/tui/services/websocket-client.js +149 -0
  123. package/dist/features/tui/services/websocket-client.js.map +7 -0
  124. package/dist/features/tui/terminal-compat.js +205 -0
  125. package/dist/features/tui/terminal-compat.js.map +7 -0
  126. package/dist/features/tui/types.js +1 -0
  127. package/dist/features/tui/types.js.map +7 -0
  128. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  129. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  131. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  132. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  133. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  134. package/dist/integrations/linear/client.js +22 -4
  135. package/dist/integrations/linear/client.js.map +2 -2
  136. package/dist/integrations/linear/migration.js +299 -0
  137. package/dist/integrations/linear/migration.js.map +7 -0
  138. package/dist/integrations/linear/oauth-server.js +396 -0
  139. package/dist/integrations/linear/oauth-server.js.map +7 -0
  140. package/dist/integrations/linear/rest-client.js +199 -0
  141. package/dist/integrations/linear/rest-client.js.map +7 -0
  142. package/dist/integrations/linear/sync.js +14 -2
  143. package/dist/integrations/linear/sync.js.map +2 -2
  144. package/dist/integrations/linear/webhook-handler.js +200 -0
  145. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  146. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  147. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  148. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  149. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  150. package/dist/integrations/mcp/refactored-server.js +31 -3
  151. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  152. package/dist/integrations/mcp/server.js +25 -7
  153. package/dist/integrations/mcp/server.js.map +2 -2
  154. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  155. package/dist/models/user.model.js +3 -0
  156. package/dist/models/user.model.js.map +2 -2
  157. package/dist/services/context-service.js.map +2 -2
  158. package/dist/utils/formatting.js +58 -0
  159. package/dist/utils/formatting.js.map +7 -0
  160. package/package.json +24 -5
  161. package/dist/cli/__tests__/index.test.js +0 -290
  162. package/dist/cli/__tests__/index.test.js.map +0 -7
  163. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  164. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  165. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  166. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  168. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  169. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  170. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  171. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  172. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  173. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  174. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  176. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  177. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  178. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  179. package/dist/core/trace/trace-detector.test.js +0 -401
  180. package/dist/core/trace/trace-detector.test.js.map +0 -7
  181. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  182. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  184. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  185. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  186. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  187. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  188. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  189. package/dist/scripts/benchmark-performance.d.ts +0 -7
  190. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  191. package/dist/scripts/benchmark-performance.js +0 -44
  192. package/dist/scripts/benchmark-performance.js.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  194. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  195. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  196. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  198. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  199. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  200. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  201. package/dist/scripts/initialize.d.ts +0 -6
  202. package/dist/scripts/initialize.d.ts.map +0 -1
  203. package/dist/scripts/initialize.js +0 -93
  204. package/dist/scripts/initialize.js.map +0 -1
  205. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  206. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  207. package/dist/scripts/list-linear-tasks.js +0 -121
  208. package/dist/scripts/list-linear-tasks.js.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  210. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  211. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  212. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  213. package/dist/scripts/show-linear-summary.d.ts +0 -6
  214. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  215. package/dist/scripts/show-linear-summary.js +0 -120
  216. package/dist/scripts/show-linear-summary.js.map +0 -1
  217. package/dist/scripts/status.d.ts +0 -6
  218. package/dist/scripts/status.d.ts.map +0 -1
  219. package/dist/scripts/status.js +0 -101
  220. package/dist/scripts/status.js.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  222. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  223. package/dist/src/agents/core/agent-task-manager.js +0 -504
  224. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  226. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  227. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  228. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  230. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  231. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  232. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  234. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  236. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  237. package/dist/src/cli/auto-detect.d.ts +0 -61
  238. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  239. package/dist/src/cli/auto-detect.js +0 -350
  240. package/dist/src/cli/auto-detect.js.map +0 -1
  241. package/dist/src/cli/browser-test.d.ts +0 -6
  242. package/dist/src/cli/browser-test.d.ts.map +0 -1
  243. package/dist/src/cli/browser-test.js +0 -32
  244. package/dist/src/cli/browser-test.js.map +0 -1
  245. package/dist/src/cli/claude-sm.d.ts +0 -7
  246. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  247. package/dist/src/cli/claude-sm.js +0 -412
  248. package/dist/src/cli/claude-sm.js.map +0 -1
  249. package/dist/src/cli/commands/agent.d.ts +0 -9
  250. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  251. package/dist/src/cli/commands/agent.js +0 -303
  252. package/dist/src/cli/commands/agent.js.map +0 -1
  253. package/dist/src/cli/commands/config.d.ts +0 -6
  254. package/dist/src/cli/commands/config.d.ts.map +0 -1
  255. package/dist/src/cli/commands/config.js +0 -224
  256. package/dist/src/cli/commands/config.js.map +0 -1
  257. package/dist/src/cli/commands/context.d.ts +0 -7
  258. package/dist/src/cli/commands/context.d.ts.map +0 -1
  259. package/dist/src/cli/commands/context.js +0 -365
  260. package/dist/src/cli/commands/context.js.map +0 -1
  261. package/dist/src/cli/commands/handoff.d.ts +0 -6
  262. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  263. package/dist/src/cli/commands/handoff.js +0 -212
  264. package/dist/src/cli/commands/handoff.js.map +0 -1
  265. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  266. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  267. package/dist/src/cli/commands/linear-test.js +0 -123
  268. package/dist/src/cli/commands/linear-test.js.map +0 -1
  269. package/dist/src/cli/commands/linear.d.ts +0 -6
  270. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  271. package/dist/src/cli/commands/linear.js +0 -393
  272. package/dist/src/cli/commands/linear.js.map +0 -1
  273. package/dist/src/cli/commands/log.d.ts +0 -7
  274. package/dist/src/cli/commands/log.d.ts.map +0 -1
  275. package/dist/src/cli/commands/log.js +0 -168
  276. package/dist/src/cli/commands/log.js.map +0 -1
  277. package/dist/src/cli/commands/onboard.d.ts +0 -8
  278. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  279. package/dist/src/cli/commands/onboard.js +0 -363
  280. package/dist/src/cli/commands/onboard.js.map +0 -1
  281. package/dist/src/cli/commands/projects.d.ts +0 -8
  282. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  283. package/dist/src/cli/commands/projects.js +0 -220
  284. package/dist/src/cli/commands/projects.js.map +0 -1
  285. package/dist/src/cli/commands/search.d.ts +0 -7
  286. package/dist/src/cli/commands/search.d.ts.map +0 -1
  287. package/dist/src/cli/commands/search.js +0 -162
  288. package/dist/src/cli/commands/search.js.map +0 -1
  289. package/dist/src/cli/commands/session.d.ts +0 -7
  290. package/dist/src/cli/commands/session.d.ts.map +0 -1
  291. package/dist/src/cli/commands/session.js +0 -222
  292. package/dist/src/cli/commands/session.js.map +0 -1
  293. package/dist/src/cli/commands/tasks.d.ts +0 -7
  294. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  295. package/dist/src/cli/commands/tasks.js +0 -229
  296. package/dist/src/cli/commands/tasks.js.map +0 -1
  297. package/dist/src/cli/commands/webhook.d.ts +0 -3
  298. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  299. package/dist/src/cli/commands/webhook.js +0 -157
  300. package/dist/src/cli/commands/webhook.js.map +0 -1
  301. package/dist/src/cli/commands/worktree.d.ts +0 -8
  302. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  303. package/dist/src/cli/commands/worktree.js +0 -339
  304. package/dist/src/cli/commands/worktree.js.map +0 -1
  305. package/dist/src/cli/index.d.ts +0 -8
  306. package/dist/src/cli/index.d.ts.map +0 -1
  307. package/dist/src/cli/index.js +0 -995
  308. package/dist/src/cli/index.js.map +0 -1
  309. package/dist/src/cli/utils/viewer.d.ts +0 -3
  310. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  311. package/dist/src/cli/utils/viewer.js +0 -91
  312. package/dist/src/cli/utils/viewer.js.map +0 -1
  313. package/dist/src/core/config/config-manager.d.ts +0 -95
  314. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  315. package/dist/src/core/config/config-manager.js +0 -359
  316. package/dist/src/core/config/config-manager.js.map +0 -1
  317. package/dist/src/core/config/types.d.ts +0 -72
  318. package/dist/src/core/config/types.d.ts.map +0 -1
  319. package/dist/src/core/config/types.js +0 -127
  320. package/dist/src/core/config/types.js.map +0 -1
  321. package/dist/src/core/context/auto-context.d.ts +0 -22
  322. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  323. package/dist/src/core/context/auto-context.js +0 -77
  324. package/dist/src/core/context/auto-context.js.map +0 -1
  325. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  326. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  327. package/dist/src/core/context/compaction-handler.js +0 -306
  328. package/dist/src/core/context/compaction-handler.js.map +0 -1
  329. package/dist/src/core/context/frame-database.d.ts +0 -59
  330. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  331. package/dist/src/core/context/frame-database.js +0 -333
  332. package/dist/src/core/context/frame-database.js.map +0 -1
  333. package/dist/src/core/context/frame-digest.d.ts +0 -59
  334. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  335. package/dist/src/core/context/frame-digest.js +0 -264
  336. package/dist/src/core/context/frame-digest.js.map +0 -1
  337. package/dist/src/core/context/frame-manager.d.ts +0 -112
  338. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-manager.js +0 -600
  340. package/dist/src/core/context/frame-manager.js.map +0 -1
  341. package/dist/src/core/context/frame-stack.d.ts +0 -85
  342. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-stack.js +0 -287
  344. package/dist/src/core/context/frame-stack.js.map +0 -1
  345. package/dist/src/core/context/frame-types.d.ts +0 -67
  346. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-types.js +0 -6
  348. package/dist/src/core/context/frame-types.js.map +0 -1
  349. package/dist/src/core/context/index.d.ts +0 -11
  350. package/dist/src/core/context/index.d.ts.map +0 -1
  351. package/dist/src/core/context/index.js +0 -14
  352. package/dist/src/core/context/index.js.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  354. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  355. package/dist/src/core/context/model-aware-compaction.js +0 -616
  356. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  358. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  359. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  360. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  361. package/dist/src/core/database/batch-operations.d.ts +0 -118
  362. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  363. package/dist/src/core/database/batch-operations.js +0 -339
  364. package/dist/src/core/database/batch-operations.js.map +0 -1
  365. package/dist/src/core/database/connection-pool.d.ts +0 -79
  366. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  367. package/dist/src/core/database/connection-pool.js +0 -236
  368. package/dist/src/core/database/connection-pool.js.map +0 -1
  369. package/dist/src/core/database/query-cache.d.ts +0 -135
  370. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  371. package/dist/src/core/database/query-cache.js +0 -294
  372. package/dist/src/core/database/query-cache.js.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  374. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  375. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  376. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  378. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  379. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  380. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  382. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  383. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  384. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  385. package/dist/src/core/digest/index.d.ts +0 -9
  386. package/dist/src/core/digest/index.d.ts.map +0 -1
  387. package/dist/src/core/digest/index.js +0 -9
  388. package/dist/src/core/digest/index.js.map +0 -1
  389. package/dist/src/core/digest/types.d.ts +0 -154
  390. package/dist/src/core/digest/types.d.ts.map +0 -1
  391. package/dist/src/core/digest/types.js +0 -18
  392. package/dist/src/core/digest/types.js.map +0 -1
  393. package/dist/src/core/errors/index.d.ts +0 -143
  394. package/dist/src/core/errors/index.d.ts.map +0 -1
  395. package/dist/src/core/errors/index.js +0 -282
  396. package/dist/src/core/errors/index.js.map +0 -1
  397. package/dist/src/core/errors/recovery.d.ts +0 -86
  398. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  399. package/dist/src/core/errors/recovery.js +0 -274
  400. package/dist/src/core/errors/recovery.js.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  402. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  403. package/dist/src/core/merge/conflict-detector.js +0 -468
  404. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  405. package/dist/src/core/merge/index.d.ts +0 -9
  406. package/dist/src/core/merge/index.d.ts.map +0 -1
  407. package/dist/src/core/merge/index.js +0 -9
  408. package/dist/src/core/merge/index.js.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  410. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  411. package/dist/src/core/merge/resolution-engine.js +0 -573
  412. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  413. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  414. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  415. package/dist/src/core/merge/stack-diff.js +0 -516
  416. package/dist/src/core/merge/stack-diff.js.map +0 -1
  417. package/dist/src/core/merge/types.d.ts +0 -110
  418. package/dist/src/core/merge/types.d.ts.map +0 -1
  419. package/dist/src/core/merge/types.js +0 -6
  420. package/dist/src/core/merge/types.js.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  422. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  423. package/dist/src/core/monitoring/error-handler.js +0 -212
  424. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  425. package/dist/src/core/monitoring/logger.d.ts +0 -24
  426. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  427. package/dist/src/core/monitoring/logger.js +0 -126
  428. package/dist/src/core/monitoring/logger.js.map +0 -1
  429. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  430. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/metrics.js +0 -152
  432. package/dist/src/core/monitoring/metrics.js.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  434. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  436. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  437. package/dist/src/core/performance/context-cache.d.ts +0 -109
  438. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  439. package/dist/src/core/performance/context-cache.js +0 -280
  440. package/dist/src/core/performance/context-cache.js.map +0 -1
  441. package/dist/src/core/performance/index.d.ts +0 -3
  442. package/dist/src/core/performance/index.d.ts.map +0 -1
  443. package/dist/src/core/performance/index.js +0 -3
  444. package/dist/src/core/performance/index.js.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  446. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  447. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  448. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  449. package/dist/src/core/performance/monitor.d.ts +0 -48
  450. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  451. package/dist/src/core/performance/monitor.js +0 -226
  452. package/dist/src/core/performance/monitor.js.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  454. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  455. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  456. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  458. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  459. package/dist/src/core/performance/performance-benchmark.js +0 -290
  460. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  462. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  463. package/dist/src/core/performance/performance-profiler.js +0 -346
  464. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  466. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  467. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  468. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  470. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  471. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  472. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  473. package/dist/src/core/projects/project-manager.d.ts +0 -130
  474. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  475. package/dist/src/core/projects/project-manager.js +0 -709
  476. package/dist/src/core/projects/project-manager.js.map +0 -1
  477. package/dist/src/core/query/query-parser.d.ts +0 -109
  478. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  479. package/dist/src/core/query/query-parser.js +0 -415
  480. package/dist/src/core/query/query-parser.js.map +0 -1
  481. package/dist/src/core/query/query-templates.d.ts +0 -44
  482. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  483. package/dist/src/core/query/query-templates.js +0 -326
  484. package/dist/src/core/query/query-templates.js.map +0 -1
  485. package/dist/src/core/retrieval/index.d.ts +0 -8
  486. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  487. package/dist/src/core/retrieval/index.js +0 -8
  488. package/dist/src/core/retrieval/index.js.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  490. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  491. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  492. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  494. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/summary-generator.js +0 -622
  496. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  497. package/dist/src/core/retrieval/types.d.ts +0 -257
  498. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/types.js +0 -18
  500. package/dist/src/core/retrieval/types.js.map +0 -1
  501. package/dist/src/core/session/index.d.ts +0 -2
  502. package/dist/src/core/session/index.d.ts.map +0 -1
  503. package/dist/src/core/session/index.js +0 -2
  504. package/dist/src/core/session/index.js.map +0 -1
  505. package/dist/src/core/session/session-manager.d.ts +0 -69
  506. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  507. package/dist/src/core/session/session-manager.js +0 -311
  508. package/dist/src/core/session/session-manager.js.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  510. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  511. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  512. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  514. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  515. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  516. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  517. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  518. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  519. package/dist/src/core/trace/debug-trace.js +0 -402
  520. package/dist/src/core/trace/debug-trace.js.map +0 -1
  521. package/dist/src/core/trace/error-test.d.ts +0 -6
  522. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  523. package/dist/src/core/trace/error-test.js +0 -128
  524. package/dist/src/core/trace/error-test.js.map +0 -1
  525. package/dist/src/core/trace/index.d.ts +0 -25
  526. package/dist/src/core/trace/index.d.ts.map +0 -1
  527. package/dist/src/core/trace/index.js +0 -121
  528. package/dist/src/core/trace/index.js.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  530. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  531. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  532. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  533. package/dist/src/core/trace/performance-test.d.ts +0 -6
  534. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  535. package/dist/src/core/trace/performance-test.js +0 -111
  536. package/dist/src/core/trace/performance-test.js.map +0 -1
  537. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  538. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  539. package/dist/src/core/trace/trace-demo.js +0 -154
  540. package/dist/src/core/trace/trace-demo.js.map +0 -1
  541. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  542. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  544. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  545. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  546. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  547. package/dist/src/core/trace/trace-detector.js +0 -425
  548. package/dist/src/core/trace/trace-detector.js.map +0 -1
  549. package/dist/src/core/trace/trace-store.d.ts +0 -60
  550. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-store.js +0 -323
  552. package/dist/src/core/trace/trace-store.js.map +0 -1
  553. package/dist/src/core/trace/types.d.ts +0 -81
  554. package/dist/src/core/trace/types.d.ts.map +0 -1
  555. package/dist/src/core/trace/types.js +0 -70
  556. package/dist/src/core/trace/types.js.map +0 -1
  557. package/dist/src/core/types.d.ts +0 -35
  558. package/dist/src/core/types.d.ts.map +0 -1
  559. package/dist/src/core/types.js +0 -2
  560. package/dist/src/core/types.js.map +0 -1
  561. package/dist/src/core/utils/update-checker.d.ts +0 -38
  562. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  563. package/dist/src/core/utils/update-checker.js +0 -213
  564. package/dist/src/core/utils/update-checker.js.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  566. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  567. package/dist/src/core/worktree/worktree-manager.js +0 -456
  568. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  570. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  571. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  572. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  574. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  575. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  576. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  577. package/dist/src/features/analytics/index.d.ts +0 -12
  578. package/dist/src/features/analytics/index.d.ts.map +0 -1
  579. package/dist/src/features/analytics/index.js +0 -11
  580. package/dist/src/features/analytics/index.js.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  582. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  583. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  584. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  586. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  587. package/dist/src/features/analytics/types/metrics.js +0 -2
  588. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  590. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  591. package/dist/src/features/browser/browser-mcp.js +0 -459
  592. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  594. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  595. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  596. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  598. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  599. package/dist/src/features/tasks/task-aware-context.js +0 -412
  600. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  601. package/dist/src/index.d.ts +0 -21
  602. package/dist/src/index.d.ts.map +0 -1
  603. package/dist/src/index.js +0 -9
  604. package/dist/src/index.js.map +0 -1
  605. package/dist/src/integrations/linear/auth.d.ts +0 -99
  606. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  607. package/dist/src/integrations/linear/auth.js +0 -319
  608. package/dist/src/integrations/linear/auth.js.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  610. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  611. package/dist/src/integrations/linear/auto-sync.js +0 -268
  612. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  613. package/dist/src/integrations/linear/client.d.ts +0 -127
  614. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/client.js +0 -446
  616. package/dist/src/integrations/linear/client.js.map +0 -1
  617. package/dist/src/integrations/linear/config.d.ts +0 -51
  618. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/config.js +0 -103
  620. package/dist/src/integrations/linear/config.js.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  622. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/sync-manager.js +0 -235
  624. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  626. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/sync-service.js +0 -217
  628. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  629. package/dist/src/integrations/linear/sync.d.ts +0 -125
  630. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync.js +0 -563
  632. package/dist/src/integrations/linear/sync.js.map +0 -1
  633. package/dist/src/integrations/linear/types.d.ts +0 -90
  634. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/types.js +0 -2
  636. package/dist/src/integrations/linear/types.js.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  638. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/webhook-server.js +0 -190
  640. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  641. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  642. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/webhook.js +0 -291
  644. package/dist/src/integrations/linear/webhook.js.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  646. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  648. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  650. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  652. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  656. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  658. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  660. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  664. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/index.d.ts +0 -13
  666. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/index.js +0 -17
  668. package/dist/src/integrations/mcp/index.js.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  670. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  672. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  673. package/dist/src/integrations/mcp/server.d.ts +0 -54
  674. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/server.js +0 -1616
  676. package/dist/src/integrations/mcp/server.js.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  678. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  680. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  682. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/trace-test.js +0 -54
  684. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  688. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  690. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  692. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  696. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  698. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  699. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  700. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  702. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  703. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  704. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  705. package/dist/src/models/user.model.d.ts +0 -62
  706. package/dist/src/models/user.model.d.ts.map +0 -1
  707. package/dist/src/models/user.model.js +0 -311
  708. package/dist/src/models/user.model.js.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  710. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  711. package/dist/src/servers/production/auth-middleware.js +0 -558
  712. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  713. package/dist/src/servers/railway/index.d.ts +0 -7
  714. package/dist/src/servers/railway/index.d.ts.map +0 -1
  715. package/dist/src/servers/railway/index.js +0 -401
  716. package/dist/src/servers/railway/index.js.map +0 -1
  717. package/dist/src/services/config-service.d.ts +0 -44
  718. package/dist/src/services/config-service.d.ts.map +0 -1
  719. package/dist/src/services/config-service.js +0 -61
  720. package/dist/src/services/config-service.js.map +0 -1
  721. package/dist/src/services/context-service.d.ts +0 -17
  722. package/dist/src/services/context-service.d.ts.map +0 -1
  723. package/dist/src/services/context-service.js +0 -173
  724. package/dist/src/services/context-service.js.map +0 -1
  725. package/dist/src/types/task.d.ts +0 -27
  726. package/dist/src/types/task.d.ts.map +0 -1
  727. package/dist/src/types/task.js +0 -2
  728. package/dist/src/types/task.js.map +0 -1
  729. package/dist/src/utils/logger.d.ts +0 -13
  730. package/dist/src/utils/logger.d.ts.map +0 -1
  731. package/dist/src/utils/logger.js +0 -52
  732. package/dist/src/utils/logger.js.map +0 -1
  733. package/dist/src/validation/schemas.d.ts +0 -633
  734. package/dist/src/validation/schemas.d.ts.map +0 -1
  735. package/dist/src/validation/schemas.js +0 -347
  736. package/dist/src/validation/schemas.js.map +0 -1
@@ -0,0 +1,600 @@
1
+ import { logger } from "../monitoring/logger.js";
2
+ import { ValidationError, DatabaseError, ErrorCode } from "../errors/index.js";
3
+ import {
4
+ validateInput,
5
+ StartMergeSessionSchema,
6
+ CreateMergePolicySchema,
7
+ ConflictResolutionSchema
8
+ } from "./validation.js";
9
+ class StackMergeResolver {
10
+ dualStackManager;
11
+ activeSessions = /* @__PURE__ */ new Map();
12
+ mergePolicies = /* @__PURE__ */ new Map();
13
+ constructor(dualStackManager) {
14
+ this.dualStackManager = dualStackManager;
15
+ this.initializeDefaultPolicies();
16
+ logger.debug("StackMergeResolver initialized", {
17
+ policies: Array.from(this.mergePolicies.keys())
18
+ });
19
+ }
20
+ /**
21
+ * Start a merge session with conflict analysis
22
+ */
23
+ async startMergeSession(sourceStackId, targetStackId, frameIds, policyName = "default") {
24
+ const input = validateInput(StartMergeSessionSchema, {
25
+ sourceStackId,
26
+ targetStackId,
27
+ frameIds,
28
+ policyName
29
+ });
30
+ const sessionId = `merge-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
31
+ logger.debug("Looking for merge policy", {
32
+ policyName: input.policyName,
33
+ availablePolicies: Array.from(this.mergePolicies.keys())
34
+ });
35
+ const policy = this.mergePolicies.get(input.policyName);
36
+ if (!policy) {
37
+ logger.error("Merge policy not found", {
38
+ requested: input.policyName,
39
+ available: Array.from(this.mergePolicies.keys())
40
+ });
41
+ throw new ValidationError(
42
+ `Merge policy not found: ${input.policyName}`,
43
+ ErrorCode.RESOURCE_NOT_FOUND
44
+ );
45
+ }
46
+ try {
47
+ const currentUserId = this.dualStackManager.getCurrentContext().ownerId || "unknown";
48
+ await this.dualStackManager.getPermissionManager().enforcePermission(
49
+ this.dualStackManager.getPermissionManager().createContext(currentUserId, "merge", "stack", input.sourceStackId)
50
+ );
51
+ await this.dualStackManager.getPermissionManager().enforcePermission(
52
+ this.dualStackManager.getPermissionManager().createContext(currentUserId, "merge", "stack", input.targetStackId)
53
+ );
54
+ const session = {
55
+ sessionId,
56
+ sourceStackId: input.sourceStackId,
57
+ targetStackId: input.targetStackId,
58
+ conflicts: [],
59
+ resolutions: [],
60
+ policy,
61
+ status: "analyzing",
62
+ startedAt: /* @__PURE__ */ new Date(),
63
+ metadata: {
64
+ totalFrames: 0,
65
+ conflictFrames: 0,
66
+ autoResolvedConflicts: 0,
67
+ manualResolvedConflicts: 0
68
+ }
69
+ };
70
+ this.activeSessions.set(sessionId, session);
71
+ await this.analyzeConflicts(sessionId, frameIds);
72
+ await this.autoResolveConflicts(sessionId);
73
+ logger.info(`Merge session started: ${sessionId}`, {
74
+ sourceStack: sourceStackId,
75
+ targetStack: targetStackId,
76
+ conflicts: session.conflicts.length,
77
+ policy: policyName
78
+ });
79
+ return sessionId;
80
+ } catch (error) {
81
+ logger.error("Failed to start merge session", {
82
+ error: error instanceof Error ? error.message : error,
83
+ sourceStackId: input.sourceStackId,
84
+ targetStackId: input.targetStackId,
85
+ policyName: input.policyName
86
+ });
87
+ throw new DatabaseError(
88
+ "Failed to start merge session",
89
+ ErrorCode.OPERATION_FAILED,
90
+ { sourceStackId, targetStackId },
91
+ error instanceof Error ? error : void 0
92
+ );
93
+ }
94
+ }
95
+ /**
96
+ * Analyze conflicts between source and target stacks
97
+ */
98
+ async analyzeConflicts(sessionId, frameIds) {
99
+ const session = this.activeSessions.get(sessionId);
100
+ if (!session) {
101
+ throw new DatabaseError(
102
+ `Merge session not found: ${sessionId}`,
103
+ ErrorCode.RESOURCE_NOT_FOUND
104
+ );
105
+ }
106
+ try {
107
+ const sourceStack = this.getStackManager(session.sourceStackId);
108
+ const targetStack = this.getStackManager(session.targetStackId);
109
+ const framesToAnalyze = frameIds || (await sourceStack.getActiveFrames()).map((f) => f.frame_id);
110
+ session.metadata.totalFrames = framesToAnalyze.length;
111
+ for (const frameId of framesToAnalyze) {
112
+ const sourceFrame = await sourceStack.getFrame(frameId);
113
+ if (!sourceFrame) continue;
114
+ const targetFrame = await targetStack.getFrame(frameId);
115
+ if (!targetFrame) continue;
116
+ const conflicts = await this.analyzeFrameConflicts(
117
+ sourceFrame,
118
+ targetFrame
119
+ );
120
+ session.conflicts.push(...conflicts);
121
+ }
122
+ session.metadata.conflictFrames = new Set(
123
+ session.conflicts.map((c) => c.frameId)
124
+ ).size;
125
+ session.status = "resolving";
126
+ this.activeSessions.set(sessionId, session);
127
+ logger.info(`Conflict analysis completed: ${sessionId}`, {
128
+ totalConflicts: session.conflicts.length,
129
+ conflictFrames: session.metadata.conflictFrames
130
+ });
131
+ } catch (error) {
132
+ session.status = "failed";
133
+ this.activeSessions.set(sessionId, session);
134
+ throw error;
135
+ }
136
+ }
137
+ /**
138
+ * Analyze conflicts within a single frame
139
+ */
140
+ async analyzeFrameConflicts(sourceFrame, targetFrame) {
141
+ const conflicts = [];
142
+ if (sourceFrame.name !== targetFrame.name) {
143
+ conflicts.push({
144
+ frameId: sourceFrame.frame_id,
145
+ conflictType: "content",
146
+ sourceFrame,
147
+ targetFrame,
148
+ conflictDetails: [
149
+ {
150
+ field: "name",
151
+ sourceValue: sourceFrame.name,
152
+ targetValue: targetFrame.name,
153
+ lastModified: {
154
+ source: new Date(sourceFrame.created_at * 1e3),
155
+ target: new Date(targetFrame.created_at * 1e3)
156
+ }
157
+ }
158
+ ],
159
+ severity: "medium",
160
+ autoResolvable: false
161
+ });
162
+ }
163
+ if (sourceFrame.state !== targetFrame.state) {
164
+ conflicts.push({
165
+ frameId: sourceFrame.frame_id,
166
+ conflictType: "metadata",
167
+ sourceFrame,
168
+ targetFrame,
169
+ conflictDetails: [
170
+ {
171
+ field: "state",
172
+ sourceValue: sourceFrame.state,
173
+ targetValue: targetFrame.state,
174
+ lastModified: {
175
+ source: new Date(sourceFrame.created_at * 1e3),
176
+ target: new Date(targetFrame.created_at * 1e3)
177
+ }
178
+ }
179
+ ],
180
+ severity: "high",
181
+ autoResolvable: true
182
+ // Can auto-resolve based on timestamps
183
+ });
184
+ }
185
+ if (JSON.stringify(sourceFrame.inputs) !== JSON.stringify(targetFrame.inputs)) {
186
+ conflicts.push({
187
+ frameId: sourceFrame.frame_id,
188
+ conflictType: "content",
189
+ sourceFrame,
190
+ targetFrame,
191
+ conflictDetails: [
192
+ {
193
+ field: "inputs",
194
+ sourceValue: sourceFrame.inputs,
195
+ targetValue: targetFrame.inputs,
196
+ lastModified: {
197
+ source: new Date(sourceFrame.created_at * 1e3),
198
+ target: new Date(targetFrame.created_at * 1e3)
199
+ }
200
+ }
201
+ ],
202
+ severity: "medium",
203
+ autoResolvable: false
204
+ });
205
+ }
206
+ const eventConflicts = await this.analyzeEventConflicts(
207
+ sourceFrame,
208
+ targetFrame
209
+ );
210
+ conflicts.push(...eventConflicts);
211
+ const anchorConflicts = await this.analyzeAnchorConflicts(
212
+ sourceFrame,
213
+ targetFrame
214
+ );
215
+ conflicts.push(...anchorConflicts);
216
+ return conflicts;
217
+ }
218
+ /**
219
+ * Analyze conflicts in frame events
220
+ */
221
+ async analyzeEventConflicts(sourceFrame, targetFrame) {
222
+ const conflicts = [];
223
+ try {
224
+ const sourceStack = this.getStackManager(sourceFrame.project_id);
225
+ const targetStack = this.getStackManager(targetFrame.project_id);
226
+ const sourceEvents = await sourceStack.getFrameEvents(
227
+ sourceFrame.frame_id
228
+ );
229
+ const targetEvents = await targetStack.getFrameEvents(
230
+ targetFrame.frame_id
231
+ );
232
+ if (sourceEvents.length !== targetEvents.length) {
233
+ conflicts.push({
234
+ frameId: sourceFrame.frame_id,
235
+ conflictType: "sequence",
236
+ sourceFrame,
237
+ targetFrame,
238
+ conflictDetails: [
239
+ {
240
+ field: "event_count",
241
+ sourceValue: sourceEvents.length,
242
+ targetValue: targetEvents.length,
243
+ lastModified: {
244
+ source: /* @__PURE__ */ new Date(),
245
+ target: /* @__PURE__ */ new Date()
246
+ }
247
+ }
248
+ ],
249
+ severity: "high",
250
+ autoResolvable: true
251
+ // Can merge events
252
+ });
253
+ }
254
+ const minLength = Math.min(sourceEvents.length, targetEvents.length);
255
+ for (let i = 0; i < minLength; i++) {
256
+ const sourceEvent = sourceEvents[i];
257
+ const targetEvent = targetEvents[i];
258
+ if (sourceEvent.text !== targetEvent.text || JSON.stringify(sourceEvent.metadata) !== JSON.stringify(targetEvent.metadata)) {
259
+ conflicts.push({
260
+ frameId: sourceFrame.frame_id,
261
+ conflictType: "content",
262
+ sourceFrame,
263
+ targetFrame,
264
+ conflictDetails: [
265
+ {
266
+ field: `event_${i}`,
267
+ sourceValue: {
268
+ text: sourceEvent.text,
269
+ metadata: sourceEvent.metadata
270
+ },
271
+ targetValue: {
272
+ text: targetEvent.text,
273
+ metadata: targetEvent.metadata
274
+ },
275
+ lastModified: {
276
+ source: /* @__PURE__ */ new Date(),
277
+ target: /* @__PURE__ */ new Date()
278
+ }
279
+ }
280
+ ],
281
+ severity: "medium",
282
+ autoResolvable: false
283
+ });
284
+ }
285
+ }
286
+ } catch (error) {
287
+ logger.warn(
288
+ `Failed to analyze event conflicts for frame: ${sourceFrame.frame_id}`,
289
+ error
290
+ );
291
+ }
292
+ return conflicts;
293
+ }
294
+ /**
295
+ * Analyze conflicts in frame anchors
296
+ */
297
+ async analyzeAnchorConflicts(sourceFrame, targetFrame) {
298
+ const conflicts = [];
299
+ try {
300
+ const sourceStack = this.getStackManager(sourceFrame.project_id);
301
+ const targetStack = this.getStackManager(targetFrame.project_id);
302
+ const sourceAnchors = await sourceStack.getFrameAnchors(
303
+ sourceFrame.frame_id
304
+ );
305
+ const targetAnchors = await targetStack.getFrameAnchors(
306
+ targetFrame.frame_id
307
+ );
308
+ const sourceAnchorsByType = this.groupAnchorsByType(sourceAnchors);
309
+ const targetAnchorsByType = this.groupAnchorsByType(targetAnchors);
310
+ const allTypes = /* @__PURE__ */ new Set([
311
+ ...Object.keys(sourceAnchorsByType),
312
+ ...Object.keys(targetAnchorsByType)
313
+ ]);
314
+ for (const type of allTypes) {
315
+ const sourceTypeAnchors = sourceAnchorsByType[type] || [];
316
+ const targetTypeAnchors = targetAnchorsByType[type] || [];
317
+ if (sourceTypeAnchors.length !== targetTypeAnchors.length || !this.anchorsEqual(sourceTypeAnchors, targetTypeAnchors)) {
318
+ conflicts.push({
319
+ frameId: sourceFrame.frame_id,
320
+ conflictType: "content",
321
+ sourceFrame,
322
+ targetFrame,
323
+ conflictDetails: [
324
+ {
325
+ field: `anchors_${type}`,
326
+ sourceValue: sourceTypeAnchors,
327
+ targetValue: targetTypeAnchors,
328
+ lastModified: {
329
+ source: /* @__PURE__ */ new Date(),
330
+ target: /* @__PURE__ */ new Date()
331
+ }
332
+ }
333
+ ],
334
+ severity: "low",
335
+ autoResolvable: true
336
+ // Can merge anchors
337
+ });
338
+ }
339
+ }
340
+ } catch (error) {
341
+ logger.warn(
342
+ `Failed to analyze anchor conflicts for frame: ${sourceFrame.frame_id}`,
343
+ error
344
+ );
345
+ }
346
+ return conflicts;
347
+ }
348
+ /**
349
+ * Auto-resolve conflicts based on merge policy
350
+ */
351
+ async autoResolveConflicts(sessionId) {
352
+ const session = this.activeSessions.get(sessionId);
353
+ if (!session) return;
354
+ const autoResolvableConflicts = session.conflicts.filter(
355
+ (c) => c.autoResolvable
356
+ );
357
+ for (const conflict of autoResolvableConflicts) {
358
+ const resolution = await this.applyMergePolicy(conflict, session.policy);
359
+ if (resolution) {
360
+ session.resolutions.push(resolution);
361
+ session.metadata.autoResolvedConflicts++;
362
+ logger.debug(`Auto-resolved conflict: ${conflict.frameId}`, {
363
+ type: conflict.conflictType,
364
+ strategy: resolution.strategy
365
+ });
366
+ }
367
+ }
368
+ const remainingConflicts = session.conflicts.filter(
369
+ (c) => !session.resolutions.find((r) => r.conflictId === c.frameId)
370
+ );
371
+ if (remainingConflicts.length === 0) {
372
+ session.status = "completed";
373
+ session.completedAt = /* @__PURE__ */ new Date();
374
+ } else if (remainingConflicts.every((c) => !c.autoResolvable)) {
375
+ session.status = "manual_review";
376
+ }
377
+ this.activeSessions.set(sessionId, session);
378
+ }
379
+ /**
380
+ * Apply merge policy to resolve conflicts automatically
381
+ */
382
+ async applyMergePolicy(conflict, policy) {
383
+ const sortedRules = policy.rules.sort((a, b) => b.priority - a.priority);
384
+ for (const rule of sortedRules) {
385
+ if (this.evaluateRuleCondition(conflict, rule.condition)) {
386
+ return {
387
+ conflictId: conflict.frameId,
388
+ strategy: rule.action === "require_manual" ? "manual" : rule.action,
389
+ resolvedBy: "system",
390
+ resolvedAt: /* @__PURE__ */ new Date(),
391
+ notes: `Auto-resolved by policy: ${policy.name}`
392
+ };
393
+ }
394
+ }
395
+ return null;
396
+ }
397
+ /**
398
+ * Manually resolve a specific conflict
399
+ */
400
+ async resolveConflict(sessionId, conflictId, resolution) {
401
+ const input = validateInput(ConflictResolutionSchema, {
402
+ strategy: resolution.strategy,
403
+ resolvedBy: resolution.resolvedBy,
404
+ notes: resolution.notes
405
+ });
406
+ const session = this.activeSessions.get(sessionId);
407
+ if (!session) {
408
+ throw new ValidationError(
409
+ `Merge session not found: ${sessionId}`,
410
+ ErrorCode.MERGE_SESSION_INVALID
411
+ );
412
+ }
413
+ const conflict = session.conflicts.find((c) => c.frameId === conflictId);
414
+ if (!conflict) {
415
+ throw new ValidationError(
416
+ `Conflict not found: ${conflictId}`,
417
+ ErrorCode.MERGE_CONFLICT_UNRESOLVABLE
418
+ );
419
+ }
420
+ const fullResolution = {
421
+ ...input,
422
+ conflictId,
423
+ resolvedAt: /* @__PURE__ */ new Date()
424
+ };
425
+ session.resolutions.push(fullResolution);
426
+ session.metadata.manualResolvedConflicts++;
427
+ const resolvedConflictIds = new Set(
428
+ session.resolutions.map((r) => r.conflictId)
429
+ );
430
+ const allResolved = session.conflicts.every(
431
+ (c) => resolvedConflictIds.has(c.frameId)
432
+ );
433
+ if (allResolved) {
434
+ session.status = "completed";
435
+ session.completedAt = /* @__PURE__ */ new Date();
436
+ }
437
+ this.activeSessions.set(sessionId, session);
438
+ logger.info(`Conflict manually resolved: ${conflictId}`, {
439
+ strategy: resolution.strategy,
440
+ resolvedBy: resolution.resolvedBy
441
+ });
442
+ }
443
+ /**
444
+ * Execute merge with resolved conflicts
445
+ */
446
+ async executeMerge(sessionId) {
447
+ const session = this.activeSessions.get(sessionId);
448
+ if (!session) {
449
+ throw new DatabaseError(
450
+ `Merge session not found: ${sessionId}`,
451
+ ErrorCode.RESOURCE_NOT_FOUND
452
+ );
453
+ }
454
+ if (session.status !== "completed") {
455
+ throw new DatabaseError(
456
+ `Merge session not ready for execution: ${session.status}`,
457
+ ErrorCode.INVALID_STATE
458
+ );
459
+ }
460
+ try {
461
+ const resolutionMap = new Map(
462
+ session.resolutions.map((r) => [r.conflictId, r])
463
+ );
464
+ const result = await this.dualStackManager.syncStacks(
465
+ session.sourceStackId,
466
+ session.targetStackId,
467
+ {
468
+ conflictResolution: "merge",
469
+ // Will be overridden by our resolution map
470
+ frameIds: session.conflicts.map((c) => c.frameId)
471
+ }
472
+ );
473
+ logger.info(`Merge executed: ${sessionId}`, {
474
+ mergedFrames: result.mergedFrames.length,
475
+ conflicts: result.conflictFrames.length,
476
+ errors: result.errors.length
477
+ });
478
+ return result;
479
+ } catch (error) {
480
+ throw new DatabaseError(
481
+ "Failed to execute merge",
482
+ ErrorCode.OPERATION_FAILED,
483
+ { sessionId },
484
+ error instanceof Error ? error : void 0
485
+ );
486
+ }
487
+ }
488
+ /**
489
+ * Get merge session details
490
+ */
491
+ async getMergeSession(sessionId) {
492
+ return this.activeSessions.get(sessionId) || null;
493
+ }
494
+ /**
495
+ * Create custom merge policy
496
+ */
497
+ async createMergePolicy(policy) {
498
+ const input = validateInput(CreateMergePolicySchema, policy);
499
+ this.mergePolicies.set(input.name, input);
500
+ logger.info(`Created merge policy: ${input.name}`, {
501
+ rules: input.rules.length,
502
+ autoApplyThreshold: input.autoApplyThreshold
503
+ });
504
+ }
505
+ /**
506
+ * Initialize default merge policies
507
+ */
508
+ initializeDefaultPolicies() {
509
+ this.mergePolicies.set("conservative", {
510
+ name: "conservative",
511
+ description: "Prefer manual resolution for most conflicts",
512
+ rules: [
513
+ {
514
+ condition: '$.conflictType == "metadata" && $.severity == "low"',
515
+ action: "target_wins",
516
+ priority: 1
517
+ },
518
+ {
519
+ condition: '$.severity == "critical"',
520
+ action: "require_manual",
521
+ priority: 10
522
+ }
523
+ ],
524
+ autoApplyThreshold: "never"
525
+ });
526
+ this.mergePolicies.set("aggressive", {
527
+ name: "aggressive",
528
+ description: "Auto-resolve conflicts when safe",
529
+ rules: [
530
+ {
531
+ condition: '$.conflictType == "sequence"',
532
+ action: "merge_both",
533
+ priority: 5
534
+ },
535
+ {
536
+ condition: '$.severity == "low"',
537
+ action: "source_wins",
538
+ priority: 2
539
+ },
540
+ {
541
+ condition: '$.severity == "medium" && $.autoResolvable',
542
+ action: "merge_both",
543
+ priority: 4
544
+ }
545
+ ],
546
+ autoApplyThreshold: "medium"
547
+ });
548
+ this.mergePolicies.set("default", {
549
+ name: "default",
550
+ description: "Balanced conflict resolution",
551
+ rules: [
552
+ {
553
+ condition: '$.conflictType == "sequence" && $.severity == "low"',
554
+ action: "merge_both",
555
+ priority: 3
556
+ },
557
+ {
558
+ condition: '$.conflictType == "metadata" && $.autoResolvable',
559
+ action: "target_wins",
560
+ priority: 2
561
+ },
562
+ {
563
+ condition: '$.severity == "critical"',
564
+ action: "require_manual",
565
+ priority: 10
566
+ }
567
+ ],
568
+ autoApplyThreshold: "low"
569
+ });
570
+ }
571
+ // Helper methods
572
+ getStackManager(stackId) {
573
+ return this.dualStackManager.getStackManager(stackId);
574
+ }
575
+ groupAnchorsByType(anchors) {
576
+ return anchors.reduce(
577
+ (groups, anchor) => {
578
+ if (!groups[anchor.type]) groups[anchor.type] = [];
579
+ groups[anchor.type].push(anchor);
580
+ return groups;
581
+ },
582
+ {}
583
+ );
584
+ }
585
+ anchorsEqual(anchors1, anchors2) {
586
+ if (anchors1.length !== anchors2.length) return false;
587
+ const sorted1 = [...anchors1].sort((a, b) => a.text.localeCompare(b.text));
588
+ const sorted2 = [...anchors2].sort((a, b) => a.text.localeCompare(b.text));
589
+ return sorted1.every(
590
+ (anchor, i) => anchor.text === sorted2[i].text && anchor.priority === sorted2[i].priority
591
+ );
592
+ }
593
+ evaluateRuleCondition(conflict, condition) {
594
+ return condition.includes(conflict.conflictType) || condition.includes(conflict.severity);
595
+ }
596
+ }
597
+ export {
598
+ StackMergeResolver
599
+ };
600
+ //# sourceMappingURL=stack-merge-resolver.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/context/stack-merge-resolver.ts"],
4
+ "sourcesContent": ["/**\n * Stack Merge Conflict Resolution - STA-101\n * Advanced conflict resolution for frame merging between individual and shared stacks\n */\n\nimport type { Frame, Event, Anchor } from './frame-manager.js';\nimport {\n DualStackManager,\n type StackSyncResult,\n} from './dual-stack-manager.js';\nimport { logger } from '../monitoring/logger.js';\nimport { ValidationError, DatabaseError, ErrorCode } from '../errors/index.js';\nimport {\n validateInput,\n StartMergeSessionSchema,\n CreateMergePolicySchema,\n ConflictResolutionSchema,\n type StartMergeSessionInput,\n type CreateMergePolicyInput,\n type ConflictResolutionInput,\n} from './validation.js';\n\nexport interface MergeConflict {\n frameId: string;\n conflictType:\n | 'content'\n | 'metadata'\n | 'sequence'\n | 'dependency'\n | 'permission';\n sourceFrame: Frame;\n targetFrame: Frame;\n conflictDetails: {\n field: string;\n sourceValue: any;\n targetValue: any;\n lastModified: {\n source: Date;\n target: Date;\n };\n }[];\n severity: 'low' | 'medium' | 'high' | 'critical';\n autoResolvable: boolean;\n}\n\nexport interface MergeResolution {\n conflictId: string;\n strategy: 'source_wins' | 'target_wins' | 'merge_both' | 'manual' | 'skip';\n resolutionData?: Record<string, any>;\n resolvedBy: string;\n resolvedAt: Date;\n notes?: string;\n}\n\nexport interface MergePolicy {\n name: string;\n description: string;\n rules: Array<{\n condition: string; // JSONPath expression\n action: 'source_wins' | 'target_wins' | 'merge_both' | 'require_manual';\n priority: number;\n }>;\n autoApplyThreshold: 'low' | 'medium' | 'high' | 'never';\n}\n\nexport interface MergeSession {\n sessionId: string;\n sourceStackId: string;\n targetStackId: string;\n conflicts: MergeConflict[];\n resolutions: MergeResolution[];\n policy: MergePolicy;\n status: 'analyzing' | 'resolving' | 'completed' | 'failed' | 'manual_review';\n startedAt: Date;\n completedAt?: Date;\n metadata: {\n totalFrames: number;\n conflictFrames: number;\n autoResolvedConflicts: number;\n manualResolvedConflicts: number;\n };\n}\n\nexport class StackMergeResolver {\n private dualStackManager: DualStackManager;\n private activeSessions: Map<string, MergeSession> = new Map();\n private mergePolicies: Map<string, MergePolicy> = new Map();\n\n constructor(dualStackManager: DualStackManager) {\n this.dualStackManager = dualStackManager;\n this.initializeDefaultPolicies();\n logger.debug('StackMergeResolver initialized', {\n policies: Array.from(this.mergePolicies.keys()),\n });\n }\n\n /**\n * Start a merge session with conflict analysis\n */\n async startMergeSession(\n sourceStackId: string,\n targetStackId: string,\n frameIds?: string[],\n policyName: string = 'default'\n ): Promise<string> {\n // Validate input parameters\n const input = validateInput(StartMergeSessionSchema, {\n sourceStackId,\n targetStackId,\n frameIds,\n policyName,\n });\n const sessionId = `merge-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n logger.debug('Looking for merge policy', {\n policyName: input.policyName,\n availablePolicies: Array.from(this.mergePolicies.keys()),\n });\n const policy = this.mergePolicies.get(input.policyName);\n if (!policy) {\n logger.error('Merge policy not found', {\n requested: input.policyName,\n available: Array.from(this.mergePolicies.keys()),\n });\n throw new ValidationError(\n `Merge policy not found: ${input.policyName}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n try {\n // Check merge permissions on both stacks\n const currentUserId =\n this.dualStackManager.getCurrentContext().ownerId || 'unknown';\n await this.dualStackManager\n .getPermissionManager()\n .enforcePermission(\n this.dualStackManager\n .getPermissionManager()\n .createContext(currentUserId, 'merge', 'stack', input.sourceStackId)\n );\n\n await this.dualStackManager\n .getPermissionManager()\n .enforcePermission(\n this.dualStackManager\n .getPermissionManager()\n .createContext(currentUserId, 'merge', 'stack', input.targetStackId)\n );\n\n // Create merge session\n const session: MergeSession = {\n sessionId,\n sourceStackId: input.sourceStackId,\n targetStackId: input.targetStackId,\n conflicts: [],\n resolutions: [],\n policy,\n status: 'analyzing',\n startedAt: new Date(),\n metadata: {\n totalFrames: 0,\n conflictFrames: 0,\n autoResolvedConflicts: 0,\n manualResolvedConflicts: 0,\n },\n };\n\n this.activeSessions.set(sessionId, session);\n\n // Analyze conflicts\n await this.analyzeConflicts(sessionId, frameIds);\n\n // Auto-resolve conflicts where possible\n await this.autoResolveConflicts(sessionId);\n\n logger.info(`Merge session started: ${sessionId}`, {\n sourceStack: sourceStackId,\n targetStack: targetStackId,\n conflicts: session.conflicts.length,\n policy: policyName,\n });\n\n return sessionId;\n } catch (error) {\n logger.error('Failed to start merge session', {\n error: error instanceof Error ? error.message : error,\n sourceStackId: input.sourceStackId,\n targetStackId: input.targetStackId,\n policyName: input.policyName,\n });\n throw new DatabaseError(\n 'Failed to start merge session',\n ErrorCode.OPERATION_FAILED,\n { sourceStackId, targetStackId },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n /**\n * Analyze conflicts between source and target stacks\n */\n private async analyzeConflicts(\n sessionId: string,\n frameIds?: string[]\n ): Promise<void> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new DatabaseError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n try {\n const sourceStack = this.getStackManager(session.sourceStackId);\n const targetStack = this.getStackManager(session.targetStackId);\n\n // Get frames to analyze\n const framesToAnalyze =\n frameIds ||\n (await sourceStack.getActiveFrames()).map((f) => f.frame_id);\n\n session.metadata.totalFrames = framesToAnalyze.length;\n\n for (const frameId of framesToAnalyze) {\n const sourceFrame = await sourceStack.getFrame(frameId);\n if (!sourceFrame) continue;\n\n const targetFrame = await targetStack.getFrame(frameId);\n if (!targetFrame) continue; // No conflict if target doesn't exist\n\n // Analyze frame-level conflicts\n const conflicts = await this.analyzeFrameConflicts(\n sourceFrame,\n targetFrame\n );\n session.conflicts.push(...conflicts);\n }\n\n session.metadata.conflictFrames = new Set(\n session.conflicts.map((c) => c.frameId)\n ).size;\n session.status = 'resolving';\n\n this.activeSessions.set(sessionId, session);\n\n logger.info(`Conflict analysis completed: ${sessionId}`, {\n totalConflicts: session.conflicts.length,\n conflictFrames: session.metadata.conflictFrames,\n });\n } catch (error) {\n session.status = 'failed';\n this.activeSessions.set(sessionId, session);\n throw error;\n }\n }\n\n /**\n * Analyze conflicts within a single frame\n */\n private async analyzeFrameConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n // Content conflicts\n if (sourceFrame.name !== targetFrame.name) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'name',\n sourceValue: sourceFrame.name,\n targetValue: targetFrame.name,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n\n // State conflicts\n if (sourceFrame.state !== targetFrame.state) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'metadata',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'state',\n sourceValue: sourceFrame.state,\n targetValue: targetFrame.state,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'high',\n autoResolvable: true, // Can auto-resolve based on timestamps\n });\n }\n\n // Input/Output conflicts\n if (\n JSON.stringify(sourceFrame.inputs) !== JSON.stringify(targetFrame.inputs)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'inputs',\n sourceValue: sourceFrame.inputs,\n targetValue: targetFrame.inputs,\n lastModified: {\n source: new Date(sourceFrame.created_at * 1000),\n target: new Date(targetFrame.created_at * 1000),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n\n // Analyze event conflicts\n const eventConflicts = await this.analyzeEventConflicts(\n sourceFrame,\n targetFrame\n );\n conflicts.push(...eventConflicts);\n\n // Analyze anchor conflicts\n const anchorConflicts = await this.analyzeAnchorConflicts(\n sourceFrame,\n targetFrame\n );\n conflicts.push(...anchorConflicts);\n\n return conflicts;\n }\n\n /**\n * Analyze conflicts in frame events\n */\n private async analyzeEventConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n try {\n const sourceStack = this.getStackManager(sourceFrame.project_id);\n const targetStack = this.getStackManager(targetFrame.project_id);\n\n const sourceEvents = await sourceStack.getFrameEvents(\n sourceFrame.frame_id\n );\n const targetEvents = await targetStack.getFrameEvents(\n targetFrame.frame_id\n );\n\n // Check for sequence conflicts\n if (sourceEvents.length !== targetEvents.length) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'sequence',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: 'event_count',\n sourceValue: sourceEvents.length,\n targetValue: targetEvents.length,\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'high',\n autoResolvable: true, // Can merge events\n });\n }\n\n // Check for content conflicts in matching events\n const minLength = Math.min(sourceEvents.length, targetEvents.length);\n for (let i = 0; i < minLength; i++) {\n const sourceEvent = sourceEvents[i];\n const targetEvent = targetEvents[i];\n\n if (\n sourceEvent.text !== targetEvent.text ||\n JSON.stringify(sourceEvent.metadata) !==\n JSON.stringify(targetEvent.metadata)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: `event_${i}`,\n sourceValue: {\n text: sourceEvent.text,\n metadata: sourceEvent.metadata,\n },\n targetValue: {\n text: targetEvent.text,\n metadata: targetEvent.metadata,\n },\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'medium',\n autoResolvable: false,\n });\n }\n }\n } catch (error) {\n logger.warn(\n `Failed to analyze event conflicts for frame: ${sourceFrame.frame_id}`,\n error\n );\n }\n\n return conflicts;\n }\n\n /**\n * Analyze conflicts in frame anchors\n */\n private async analyzeAnchorConflicts(\n sourceFrame: Frame,\n targetFrame: Frame\n ): Promise<MergeConflict[]> {\n const conflicts: MergeConflict[] = [];\n\n try {\n const sourceStack = this.getStackManager(sourceFrame.project_id);\n const targetStack = this.getStackManager(targetFrame.project_id);\n\n const sourceAnchors = await sourceStack.getFrameAnchors(\n sourceFrame.frame_id\n );\n const targetAnchors = await targetStack.getFrameAnchors(\n targetFrame.frame_id\n );\n\n // Group anchors by type for comparison\n const sourceAnchorsByType = this.groupAnchorsByType(sourceAnchors);\n const targetAnchorsByType = this.groupAnchorsByType(targetAnchors);\n\n const allTypes = new Set([\n ...Object.keys(sourceAnchorsByType),\n ...Object.keys(targetAnchorsByType),\n ]);\n\n for (const type of allTypes) {\n const sourceTypeAnchors = sourceAnchorsByType[type] || [];\n const targetTypeAnchors = targetAnchorsByType[type] || [];\n\n if (\n sourceTypeAnchors.length !== targetTypeAnchors.length ||\n !this.anchorsEqual(sourceTypeAnchors, targetTypeAnchors)\n ) {\n conflicts.push({\n frameId: sourceFrame.frame_id,\n conflictType: 'content',\n sourceFrame,\n targetFrame,\n conflictDetails: [\n {\n field: `anchors_${type}`,\n sourceValue: sourceTypeAnchors,\n targetValue: targetTypeAnchors,\n lastModified: {\n source: new Date(),\n target: new Date(),\n },\n },\n ],\n severity: 'low',\n autoResolvable: true, // Can merge anchors\n });\n }\n }\n } catch (error) {\n logger.warn(\n `Failed to analyze anchor conflicts for frame: ${sourceFrame.frame_id}`,\n error\n );\n }\n\n return conflicts;\n }\n\n /**\n * Auto-resolve conflicts based on merge policy\n */\n private async autoResolveConflicts(sessionId: string): Promise<void> {\n const session = this.activeSessions.get(sessionId);\n if (!session) return;\n\n const autoResolvableConflicts = session.conflicts.filter(\n (c) => c.autoResolvable\n );\n\n for (const conflict of autoResolvableConflicts) {\n const resolution = await this.applyMergePolicy(conflict, session.policy);\n if (resolution) {\n session.resolutions.push(resolution);\n session.metadata.autoResolvedConflicts++;\n\n logger.debug(`Auto-resolved conflict: ${conflict.frameId}`, {\n type: conflict.conflictType,\n strategy: resolution.strategy,\n });\n }\n }\n\n // Update session status\n const remainingConflicts = session.conflicts.filter(\n (c) => !session.resolutions.find((r) => r.conflictId === c.frameId)\n );\n\n if (remainingConflicts.length === 0) {\n session.status = 'completed';\n session.completedAt = new Date();\n } else if (remainingConflicts.every((c) => !c.autoResolvable)) {\n session.status = 'manual_review';\n }\n\n this.activeSessions.set(sessionId, session);\n }\n\n /**\n * Apply merge policy to resolve conflicts automatically\n */\n private async applyMergePolicy(\n conflict: MergeConflict,\n policy: MergePolicy\n ): Promise<MergeResolution | null> {\n // Sort rules by priority\n const sortedRules = policy.rules.sort((a, b) => b.priority - a.priority);\n\n for (const rule of sortedRules) {\n if (this.evaluateRuleCondition(conflict, rule.condition)) {\n return {\n conflictId: conflict.frameId,\n strategy:\n rule.action === 'require_manual' ? 'manual' : (rule.action as any),\n resolvedBy: 'system',\n resolvedAt: new Date(),\n notes: `Auto-resolved by policy: ${policy.name}`,\n };\n }\n }\n\n return null;\n }\n\n /**\n * Manually resolve a specific conflict\n */\n async resolveConflict(\n sessionId: string,\n conflictId: string,\n resolution: Omit<MergeResolution, 'conflictId' | 'resolvedAt'>\n ): Promise<void> {\n // Validate input parameters\n const input = validateInput(ConflictResolutionSchema, {\n strategy: resolution.strategy,\n resolvedBy: resolution.resolvedBy,\n notes: resolution.notes,\n });\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new ValidationError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.MERGE_SESSION_INVALID\n );\n }\n\n const conflict = session.conflicts.find((c) => c.frameId === conflictId);\n if (!conflict) {\n throw new ValidationError(\n `Conflict not found: ${conflictId}`,\n ErrorCode.MERGE_CONFLICT_UNRESOLVABLE\n );\n }\n\n const fullResolution: MergeResolution = {\n ...input,\n conflictId,\n resolvedAt: new Date(),\n };\n\n session.resolutions.push(fullResolution);\n session.metadata.manualResolvedConflicts++;\n\n // Check if all conflicts are resolved\n const resolvedConflictIds = new Set(\n session.resolutions.map((r) => r.conflictId)\n );\n const allResolved = session.conflicts.every((c) =>\n resolvedConflictIds.has(c.frameId)\n );\n\n if (allResolved) {\n session.status = 'completed';\n session.completedAt = new Date();\n }\n\n this.activeSessions.set(sessionId, session);\n\n logger.info(`Conflict manually resolved: ${conflictId}`, {\n strategy: resolution.strategy,\n resolvedBy: resolution.resolvedBy,\n });\n }\n\n /**\n * Execute merge with resolved conflicts\n */\n async executeMerge(sessionId: string): Promise<StackSyncResult> {\n const session = this.activeSessions.get(sessionId);\n if (!session) {\n throw new DatabaseError(\n `Merge session not found: ${sessionId}`,\n ErrorCode.RESOURCE_NOT_FOUND\n );\n }\n\n if (session.status !== 'completed') {\n throw new DatabaseError(\n `Merge session not ready for execution: ${session.status}`,\n ErrorCode.INVALID_STATE\n );\n }\n\n try {\n // Build resolution map\n const resolutionMap = new Map(\n session.resolutions.map((r) => [r.conflictId, r])\n );\n\n // Execute sync with custom conflict resolution\n const result = await this.dualStackManager.syncStacks(\n session.sourceStackId,\n session.targetStackId,\n {\n conflictResolution: 'merge', // Will be overridden by our resolution map\n frameIds: session.conflicts.map((c) => c.frameId),\n }\n );\n\n logger.info(`Merge executed: ${sessionId}`, {\n mergedFrames: result.mergedFrames.length,\n conflicts: result.conflictFrames.length,\n errors: result.errors.length,\n });\n\n return result;\n } catch (error) {\n throw new DatabaseError(\n 'Failed to execute merge',\n ErrorCode.OPERATION_FAILED,\n { sessionId },\n error instanceof Error ? error : undefined\n );\n }\n }\n\n /**\n * Get merge session details\n */\n async getMergeSession(sessionId: string): Promise<MergeSession | null> {\n return this.activeSessions.get(sessionId) || null;\n }\n\n /**\n * Create custom merge policy\n */\n async createMergePolicy(policy: MergePolicy): Promise<void> {\n // Validate input parameters\n const input = validateInput(CreateMergePolicySchema, policy);\n\n this.mergePolicies.set(input.name, input);\n logger.info(`Created merge policy: ${input.name}`, {\n rules: input.rules.length,\n autoApplyThreshold: input.autoApplyThreshold,\n });\n }\n\n /**\n * Initialize default merge policies\n */\n private initializeDefaultPolicies(): void {\n // Conservative policy - prefer manual resolution\n this.mergePolicies.set('conservative', {\n name: 'conservative',\n description: 'Prefer manual resolution for most conflicts',\n rules: [\n {\n condition: '$.conflictType == \"metadata\" && $.severity == \"low\"',\n action: 'target_wins',\n priority: 1,\n },\n {\n condition: '$.severity == \"critical\"',\n action: 'require_manual',\n priority: 10,\n },\n ],\n autoApplyThreshold: 'never',\n });\n\n // Aggressive policy - auto-resolve when possible\n this.mergePolicies.set('aggressive', {\n name: 'aggressive',\n description: 'Auto-resolve conflicts when safe',\n rules: [\n {\n condition: '$.conflictType == \"sequence\"',\n action: 'merge_both',\n priority: 5,\n },\n {\n condition: '$.severity == \"low\"',\n action: 'source_wins',\n priority: 2,\n },\n {\n condition: '$.severity == \"medium\" && $.autoResolvable',\n action: 'merge_both',\n priority: 4,\n },\n ],\n autoApplyThreshold: 'medium',\n });\n\n // Default policy - balanced approach\n this.mergePolicies.set('default', {\n name: 'default',\n description: 'Balanced conflict resolution',\n rules: [\n {\n condition: '$.conflictType == \"sequence\" && $.severity == \"low\"',\n action: 'merge_both',\n priority: 3,\n },\n {\n condition: '$.conflictType == \"metadata\" && $.autoResolvable',\n action: 'target_wins',\n priority: 2,\n },\n {\n condition: '$.severity == \"critical\"',\n action: 'require_manual',\n priority: 10,\n },\n ],\n autoApplyThreshold: 'low',\n });\n }\n\n // Helper methods\n private getStackManager(stackId: string): any {\n // Use DualStackManager's getStackManager method to get the right stack\n return this.dualStackManager.getStackManager(stackId);\n }\n\n private groupAnchorsByType(anchors: Anchor[]): Record<string, Anchor[]> {\n return anchors.reduce(\n (groups, anchor) => {\n if (!groups[anchor.type]) groups[anchor.type] = [];\n groups[anchor.type].push(anchor);\n return groups;\n },\n {} as Record<string, Anchor[]>\n );\n }\n\n private anchorsEqual(anchors1: Anchor[], anchors2: Anchor[]): boolean {\n if (anchors1.length !== anchors2.length) return false;\n\n // Sort by text for comparison\n const sorted1 = [...anchors1].sort((a, b) => a.text.localeCompare(b.text));\n const sorted2 = [...anchors2].sort((a, b) => a.text.localeCompare(b.text));\n\n return sorted1.every(\n (anchor, i) =>\n anchor.text === sorted2[i].text &&\n anchor.priority === sorted2[i].priority\n );\n }\n\n private evaluateRuleCondition(\n conflict: MergeConflict,\n condition: string\n ): boolean {\n // Simple condition evaluation - in real implementation would use JSONPath\n return (\n condition.includes(conflict.conflictType) ||\n condition.includes(conflict.severity)\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }