agor-live 0.17.2 → 0.17.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 (316) hide show
  1. package/dist/cli/lib/banner.d.ts +1 -1
  2. package/dist/cli/lib/banner.js +1 -1
  3. package/dist/cli/lib/check-migrations.test.js +9627 -9112
  4. package/dist/cli/lib/daemon-manager.test.js +9632 -9117
  5. package/dist/cli/lib/help.js +1 -1
  6. package/dist/core/api/index.d.cts +3 -3
  7. package/dist/core/api/index.d.ts +3 -3
  8. package/dist/core/{board-comment-DIdOJrSF.d.cts → board-comment-CCFVVN7K.d.cts} +0 -2
  9. package/dist/core/{board-comment-3N-jSgsk.d.ts → board-comment-iT3DgZb4.d.ts} +0 -2
  10. package/dist/core/claude/index.cjs +29 -19
  11. package/dist/core/claude/index.d.cts +2 -2
  12. package/dist/core/claude/index.d.ts +2 -2
  13. package/dist/core/claude/index.js +32 -33
  14. package/dist/core/client/index.cjs +49 -0
  15. package/dist/core/client/index.d.cts +7 -7
  16. package/dist/core/client/index.d.ts +7 -7
  17. package/dist/core/client/index.js +46 -0
  18. package/dist/core/{client-B5PyIvNc.d.cts → client-CemqXk0v.d.cts} +116 -100
  19. package/dist/core/{client-C1CsRi19.d.ts → client-uYEOha6g.d.ts} +116 -100
  20. package/dist/core/config/browser.d.cts +3 -3
  21. package/dist/core/config/browser.d.ts +3 -3
  22. package/dist/core/config/index.cjs +84 -41
  23. package/dist/core/config/index.d.cts +59 -17
  24. package/dist/core/config/index.d.ts +59 -17
  25. package/dist/core/config/index.js +86 -55
  26. package/dist/core/{config-manager-TxxjFMRd.d.cts → config-manager-B8TP9Kz0.d.cts} +12 -3
  27. package/dist/core/{config-manager-DTrsj6G3.d.ts → config-manager-CDEB0FY4.d.ts} +12 -3
  28. package/dist/core/{config-services-YEZ4DwCD.d.cts → config-services-CXyQKEK5.d.cts} +1 -1
  29. package/dist/core/{config-services-DcO2GRgh.d.ts → config-services-DhM7_yWn.d.ts} +1 -1
  30. package/dist/core/db/index.cjs +235 -175
  31. package/dist/core/db/index.d.cts +190 -147
  32. package/dist/core/db/index.d.ts +190 -147
  33. package/dist/core/db/index.js +239 -190
  34. package/dist/core/db/session-guard.d.cts +4 -4
  35. package/dist/core/db/session-guard.d.ts +4 -4
  36. package/dist/core/drizzle/postgres/0028_queued_tasks.sql +8 -0
  37. package/dist/core/drizzle/postgres/0030_migrate_queued_messages.sql +24 -0
  38. package/dist/core/drizzle/postgres/0031_restructure_agentic_tool_config.sql +201 -0
  39. package/dist/core/drizzle/postgres/meta/_journal.json +21 -0
  40. package/dist/core/drizzle/sqlite/0039_queued_tasks.sql +13 -0
  41. package/dist/core/drizzle/sqlite/0040_migrate_queued_messages.sql +61 -0
  42. package/dist/core/drizzle/sqlite/0041_restructure_agentic_tool_config.sql +204 -0
  43. package/dist/core/drizzle/sqlite/meta/_journal.json +21 -0
  44. package/dist/core/gateway/index.d.cts +2 -2
  45. package/dist/core/gateway/index.d.ts +2 -2
  46. package/dist/core/{gateway-BnOlAelY.d.cts → gateway-BWq4j_Ll.d.cts} +1 -1
  47. package/dist/core/{gateway-B_4X-v07.d.ts → gateway-C3Jm_akw.d.ts} +1 -1
  48. package/dist/core/git/index.d.cts +4 -4
  49. package/dist/core/git/index.d.ts +4 -4
  50. package/dist/core/index.cjs +474 -201
  51. package/dist/core/index.d.cts +12 -10
  52. package/dist/core/index.d.ts +12 -10
  53. package/dist/core/index.js +473 -216
  54. package/dist/core/lib/feathers-validation.cjs +2 -1
  55. package/dist/core/lib/feathers-validation.d.cts +1 -1
  56. package/dist/core/lib/feathers-validation.d.ts +1 -1
  57. package/dist/core/lib/feathers-validation.js +2 -1
  58. package/dist/core/mcp/index.cjs +26 -16
  59. package/dist/core/mcp/index.js +26 -16
  60. package/dist/core/{message-DinITA7a.d.cts → message-CSWOsdcZ.d.cts} +1 -9
  61. package/dist/core/{message-CHUUP6OS.d.ts → message-DZa8g0s0.d.ts} +1 -9
  62. package/dist/core/models/index.d.cts +3 -73
  63. package/dist/core/models/index.d.ts +3 -73
  64. package/dist/core/package.json +5 -0
  65. package/dist/core/permissions/index.d.cts +1 -1
  66. package/dist/core/permissions/index.d.ts +1 -1
  67. package/dist/core/resolve-config-BcL-Hv8k.d.ts +74 -0
  68. package/dist/core/resolve-config-DTCxuSBx.d.cts +74 -0
  69. package/dist/core/seed/index.cjs +145 -98
  70. package/dist/core/seed/index.js +148 -112
  71. package/dist/core/{session-guard-C0LkDEN7.d.ts → session-guard-BFqVtBoS.d.ts} +1 -1
  72. package/dist/core/{session-guard-kvAx_8Fb.d.cts → session-guard-KHh0cnET.d.cts} +1 -1
  73. package/dist/core/sessions/index.cjs +184 -0
  74. package/dist/core/sessions/index.d.cts +79 -0
  75. package/dist/core/sessions/index.d.ts +79 -0
  76. package/dist/core/sessions/index.js +157 -0
  77. package/dist/core/{task-BLPFCORT.d.ts → task-BHV-YHg1.d.ts} +41 -3
  78. package/dist/core/{task-wht1RJEL.d.cts → task-C2Hy7H6u.d.cts} +41 -3
  79. package/dist/core/templates/session-context.d.cts +1 -1
  80. package/dist/core/templates/session-context.d.ts +1 -1
  81. package/dist/core/tools/mcp/oauth-mcp-transport.cjs +168 -66
  82. package/dist/core/tools/mcp/oauth-mcp-transport.d.cts +92 -16
  83. package/dist/core/tools/mcp/oauth-mcp-transport.d.ts +92 -16
  84. package/dist/core/tools/mcp/oauth-mcp-transport.js +165 -66
  85. package/dist/core/tools/mcp/oauth-refresh.cjs +43 -53
  86. package/dist/core/tools/mcp/oauth-refresh.d.cts +3 -3
  87. package/dist/core/tools/mcp/oauth-refresh.d.ts +3 -3
  88. package/dist/core/tools/mcp/oauth-refresh.js +58 -78
  89. package/dist/core/types/index.cjs +49 -0
  90. package/dist/core/types/index.d.cts +7 -7
  91. package/dist/core/types/index.d.ts +7 -7
  92. package/dist/core/types/index.js +46 -0
  93. package/dist/core/{types-DNqfdt1z.d.cts → types-D4Rl6ZKN.d.cts} +18 -2
  94. package/dist/core/{types-DqPMmTad.d.ts → types-n61iaXub.d.ts} +18 -2
  95. package/dist/core/unix/index.cjs +164 -110
  96. package/dist/core/unix/index.d.cts +7 -8
  97. package/dist/core/unix/index.d.ts +7 -8
  98. package/dist/core/unix/index.js +167 -124
  99. package/dist/core/{user-DkNdeFoz.d.cts → user-CpfkcV2C.d.cts} +139 -13
  100. package/dist/core/{user-BfVWBmXA.d.ts → user-DP-XZMIM.d.ts} +139 -13
  101. package/dist/core/utils/permission-mode-mapper.d.cts +0 -2
  102. package/dist/core/utils/permission-mode-mapper.d.ts +0 -2
  103. package/dist/daemon/index.js +2976 -2791
  104. package/dist/daemon/main.js +2976 -2791
  105. package/dist/daemon/mcp/server.js +177 -134
  106. package/dist/daemon/mcp/tools/analytics.js +19 -5
  107. package/dist/daemon/mcp/tools/artifacts.js +19 -5
  108. package/dist/daemon/mcp/tools/boards.js +19 -5
  109. package/dist/daemon/mcp/tools/card-types.js +19 -5
  110. package/dist/daemon/mcp/tools/cards.js +19 -5
  111. package/dist/daemon/mcp/tools/environment.js +19 -5
  112. package/dist/daemon/mcp/tools/mcp-servers.d.ts +29 -2
  113. package/dist/daemon/mcp/tools/mcp-servers.js +64 -54
  114. package/dist/daemon/mcp/tools/messages.js +19 -5
  115. package/dist/daemon/mcp/tools/repos.js +19 -5
  116. package/dist/daemon/mcp/tools/search.js +19 -5
  117. package/dist/daemon/mcp/tools/sessions.js +175 -53
  118. package/dist/daemon/mcp/tools/tasks.js +19 -5
  119. package/dist/daemon/mcp/tools/users.js +19 -5
  120. package/dist/daemon/mcp/tools/worktrees.js +37 -38
  121. package/dist/daemon/register-hooks.js +52 -1
  122. package/dist/daemon/register-routes.js +436 -424
  123. package/dist/daemon/register-services.js +255 -140
  124. package/dist/daemon/services/config.d.ts +7 -1
  125. package/dist/daemon/services/config.js +3 -2
  126. package/dist/daemon/services/gateway.js +28 -15
  127. package/dist/daemon/services/mcp-servers.d.ts +7 -2
  128. package/dist/daemon/services/repos.js +2 -0
  129. package/dist/daemon/services/sessions.d.ts +1 -1
  130. package/dist/daemon/services/sessions.js +8 -16
  131. package/dist/daemon/services/tasks.js +16 -10
  132. package/dist/daemon/services/terminals.js +2 -0
  133. package/dist/daemon/services/users.d.ts +27 -11
  134. package/dist/daemon/services/users.js +89 -43
  135. package/dist/daemon/services/worktree-owners.js +2 -0
  136. package/dist/daemon/services/worktrees.js +2 -0
  137. package/dist/daemon/setup/index.js +5 -2
  138. package/dist/daemon/setup/socketio.d.ts +10 -1
  139. package/dist/daemon/setup/socketio.js +7 -3
  140. package/dist/daemon/startup.js +13 -1
  141. package/dist/daemon/utils/apply-session-config-defaults.d.ts +54 -0
  142. package/dist/daemon/utils/apply-session-config-defaults.js +46 -0
  143. package/dist/daemon/utils/spawn-executor.js +2 -0
  144. package/dist/daemon/utils/worktree-authorization.d.ts +2 -4
  145. package/dist/executor/commands/zellij.d.ts.map +1 -1
  146. package/dist/executor/commands/zellij.js +2 -2
  147. package/dist/executor/handlers/sdk/base-executor.d.ts +4 -3
  148. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  149. package/dist/executor/handlers/sdk/base-executor.js +11 -5
  150. package/dist/executor/payload-types.d.ts +14 -14
  151. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  152. package/dist/executor/sdk-handlers/claude/claude-tool.js +9 -4
  153. package/dist/executor/sdk-handlers/claude/import/task-extractor.d.ts.map +1 -1
  154. package/dist/executor/sdk-handlers/claude/import/task-extractor.js +0 -5
  155. package/dist/executor/sdk-handlers/claude/message-builder.d.ts +23 -2
  156. package/dist/executor/sdk-handlers/claude/message-builder.d.ts.map +1 -1
  157. package/dist/executor/sdk-handlers/claude/message-builder.js +33 -2
  158. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts +9 -1
  159. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.d.ts.map +1 -1
  160. package/dist/executor/sdk-handlers/claude/permissions/permission-hooks.js +12 -0
  161. package/dist/executor/sdk-handlers/claude/query-builder.d.ts.map +1 -1
  162. package/dist/executor/sdk-handlers/claude/query-builder.js +11 -6
  163. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +0 -5
  164. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  165. package/dist/executor/sdk-handlers/codex/codex-tool.js +9 -24
  166. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +15 -2
  167. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  168. package/dist/executor/sdk-handlers/codex/prompt-service.js +39 -10
  169. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts +0 -5
  170. package/dist/executor/sdk-handlers/copilot/copilot-tool.d.ts.map +1 -1
  171. package/dist/executor/sdk-handlers/copilot/copilot-tool.js +5 -22
  172. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts +0 -5
  173. package/dist/executor/sdk-handlers/gemini/gemini-tool.d.ts.map +1 -1
  174. package/dist/executor/sdk-handlers/gemini/gemini-tool.js +9 -24
  175. package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js → CodeEditor.inner-CVLqZBtM.js} +1 -1
  176. package/dist/ui/assets/{CodeEditor.inner-CO-5PAnZ.js.gz → CodeEditor.inner-CVLqZBtM.js.gz} +0 -0
  177. package/dist/ui/assets/{_basePickBy-DfxojsEt.js → _basePickBy-CFq5ES2J.js} +1 -1
  178. package/dist/ui/assets/_basePickBy-CFq5ES2J.js.gz +0 -0
  179. package/dist/ui/assets/{_baseUniq-DWFPJOTC.js → _baseUniq-C4uKBvNt.js} +1 -1
  180. package/dist/ui/assets/_baseUniq-C4uKBvNt.js.gz +0 -0
  181. package/dist/ui/assets/{arc-vMZ_XGSI.js → arc-BnrcXDJJ.js} +1 -1
  182. package/dist/ui/assets/arc-BnrcXDJJ.js.gz +0 -0
  183. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-DGpk_uOD.js → architectureDiagram-VXUJARFQ-DD9HD-WR.js} +1 -1
  184. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DD9HD-WR.js.gz +0 -0
  185. package/dist/ui/assets/{base-80a1f760-BsVlOKqO.js → base-80a1f760-BK1VmxWU.js} +1 -1
  186. package/dist/ui/assets/{blockDiagram-VD42YOAC-BkRnxc94.js → blockDiagram-VD42YOAC-LBAckZZe.js} +1 -1
  187. package/dist/ui/assets/blockDiagram-VD42YOAC-LBAckZZe.js.gz +0 -0
  188. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js → c4Diagram-YG6GDRKO-yEdylcYP.js} +1 -1
  189. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dcf-anJy.js.gz → c4Diagram-YG6GDRKO-yEdylcYP.js.gz} +0 -0
  190. package/dist/ui/assets/channel-CMN-iY3Q.js +1 -0
  191. package/dist/ui/assets/{chunk-4BX2VUAB-C4oVWDo8.js → chunk-4BX2VUAB-IHtzKbmQ.js} +1 -1
  192. package/dist/ui/assets/{chunk-55IACEB6-CsBbTu57.js → chunk-55IACEB6-C4o5tv_F.js} +1 -1
  193. package/dist/ui/assets/{chunk-B4BG7PRW-DtkeCZab.js → chunk-B4BG7PRW-EPkzLvlB.js} +1 -1
  194. package/dist/ui/assets/chunk-B4BG7PRW-EPkzLvlB.js.gz +0 -0
  195. package/dist/ui/assets/{chunk-DI55MBZ5-BQ_asW-1.js → chunk-DI55MBZ5-CW-Bzkzj.js} +1 -1
  196. package/dist/ui/assets/chunk-DI55MBZ5-CW-Bzkzj.js.gz +0 -0
  197. package/dist/ui/assets/{chunk-FMBD7UC4-DAdcLNG-.js → chunk-FMBD7UC4-DvGU02Io.js} +1 -1
  198. package/dist/ui/assets/{chunk-QN33PNHL-Do2zad3m.js → chunk-QN33PNHL-C-PIlz9n.js} +1 -1
  199. package/dist/ui/assets/{chunk-QZHKN3VN-CyhMmSdC.js → chunk-QZHKN3VN-BhpJFm6h.js} +1 -1
  200. package/dist/ui/assets/{chunk-TZMSLE5B-DlPypnIq.js → chunk-TZMSLE5B-Biake8IU.js} +1 -1
  201. package/dist/ui/assets/chunk-TZMSLE5B-Biake8IU.js.gz +0 -0
  202. package/dist/ui/assets/classDiagram-2ON5EDUG-Bz1et8oA.js +1 -0
  203. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-Bz1et8oA.js +1 -0
  204. package/dist/ui/assets/clone-Dxo5sEAf.js +1 -0
  205. package/dist/ui/assets/{consoleHook-59e792cb-DHYIclEd.js → consoleHook-59e792cb-BzEkHWE8.js} +1 -1
  206. package/dist/ui/assets/consoleHook-59e792cb-BzEkHWE8.js.gz +0 -0
  207. package/dist/ui/assets/{cose-bilkent-S5V4N54A-DotJH9qH.js → cose-bilkent-S5V4N54A-vAiVi74s.js} +1 -1
  208. package/dist/ui/assets/cose-bilkent-S5V4N54A-vAiVi74s.js.gz +0 -0
  209. package/dist/ui/assets/{dagre-6UL2VRFP-Btssr8QF.js → dagre-6UL2VRFP-C8w7TshD.js} +1 -1
  210. package/dist/ui/assets/dagre-6UL2VRFP-C8w7TshD.js.gz +0 -0
  211. package/dist/ui/assets/{diagram-PSM6KHXK-D5_Jkog3.js → diagram-PSM6KHXK-CvnjEmtQ.js} +1 -1
  212. package/dist/ui/assets/diagram-PSM6KHXK-CvnjEmtQ.js.gz +0 -0
  213. package/dist/ui/assets/{diagram-QEK2KX5R-DlPEVSL5.js → diagram-QEK2KX5R-D245unng.js} +1 -1
  214. package/dist/ui/assets/diagram-QEK2KX5R-D245unng.js.gz +0 -0
  215. package/dist/ui/assets/{diagram-S2PKOQOG-CjO1k8aG.js → diagram-S2PKOQOG-DgGUHL8Z.js} +1 -1
  216. package/dist/ui/assets/diagram-S2PKOQOG-DgGUHL8Z.js.gz +0 -0
  217. package/dist/ui/assets/{erDiagram-Q2GNP2WA-3cO02-K3.js → erDiagram-Q2GNP2WA-Cf5paK9b.js} +1 -1
  218. package/dist/ui/assets/erDiagram-Q2GNP2WA-Cf5paK9b.js.gz +0 -0
  219. package/dist/ui/assets/{flowDiagram-NV44I4VS-CajTpSxI.js → flowDiagram-NV44I4VS-BJpHmEXV.js} +1 -1
  220. package/dist/ui/assets/flowDiagram-NV44I4VS-BJpHmEXV.js.gz +0 -0
  221. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js → ganttDiagram-LVOFAZNH-zOyTZcXC.js} +1 -1
  222. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-CnY_bV3o.js.gz → ganttDiagram-LVOFAZNH-zOyTZcXC.js.gz} +0 -0
  223. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CH16bg-j.js → gitGraphDiagram-NY62KEGX-B0uxwqMv.js} +1 -1
  224. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-B0uxwqMv.js.gz +0 -0
  225. package/dist/ui/assets/{graph-IQoZvE3o.js → graph-NWXc73TO.js} +1 -1
  226. package/dist/ui/assets/graph-NWXc73TO.js.gz +0 -0
  227. package/dist/ui/assets/{index-599aeaf7-RUCkgwsg.js → index-599aeaf7-BKmNqoNF.js} +1 -1
  228. package/dist/ui/assets/index-599aeaf7-BKmNqoNF.js.gz +0 -0
  229. package/dist/ui/assets/{index-B3AvIgqP.js → index-BRYNiHLB.js} +345 -349
  230. package/dist/ui/assets/index-BRYNiHLB.js.gz +0 -0
  231. package/dist/ui/assets/{index-QV5-5yA2.js → index-BX6Xmhes.js} +1 -1
  232. package/dist/ui/assets/index-BX6Xmhes.js.gz +0 -0
  233. package/dist/ui/assets/{index-ChmRuj_T.js → index-W1hIq1uU.js} +1 -1
  234. package/dist/ui/assets/index-W1hIq1uU.js.gz +0 -0
  235. package/dist/ui/assets/{index-C-quzPWC.js → index-ctuok0zf.js} +1 -1
  236. package/dist/ui/assets/index-ctuok0zf.js.gz +0 -0
  237. package/dist/ui/assets/{infoDiagram-ER5ION4S-2e4gZVGT.js → infoDiagram-ER5ION4S-CquCuoTH.js} +1 -1
  238. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-B5bgV3GH.js → journeyDiagram-XKPGCS4Q-B_XkufZ8.js} +1 -1
  239. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B_XkufZ8.js.gz +0 -0
  240. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-Bp-aWRSc.js → kanban-definition-3W4ZIXB7-C2Bo9HkB.js} +1 -1
  241. package/dist/ui/assets/kanban-definition-3W4ZIXB7-C2Bo9HkB.js.gz +0 -0
  242. package/dist/ui/assets/katex-C6wkUDai.css +1 -0
  243. package/dist/ui/assets/{katex-DGRguze2.css.gz → katex-C6wkUDai.css.gz} +0 -0
  244. package/dist/ui/assets/{layout-BH-2XJZq.js → layout-D9A7Uaku.js} +1 -1
  245. package/dist/ui/assets/layout-D9A7Uaku.js.gz +0 -0
  246. package/dist/ui/assets/{linear-DCYXhl_f.js → linear-BJUwJsxE.js} +1 -1
  247. package/dist/ui/assets/linear-BJUwJsxE.js.gz +0 -0
  248. package/dist/ui/assets/{mermaid.core-BAuL6kgQ.js → mermaid.core-DcOEcjcA.js} +5 -5
  249. package/dist/ui/assets/mermaid.core-DcOEcjcA.js.gz +0 -0
  250. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-DpH5N-N0.js → mindmap-definition-VGOIOE7T-BFT1m7BG.js} +1 -1
  251. package/dist/ui/assets/mindmap-definition-VGOIOE7T-BFT1m7BG.js.gz +0 -0
  252. package/dist/ui/assets/{pieDiagram-ADFJNKIX-BB8fBxj1.js → pieDiagram-ADFJNKIX-BFaX1oBV.js} +1 -1
  253. package/dist/ui/assets/pieDiagram-ADFJNKIX-BFaX1oBV.js.gz +0 -0
  254. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-D6oZLdUD.js → quadrantDiagram-AYHSOK5B-DQps5392.js} +1 -1
  255. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-DQps5392.js.gz +0 -0
  256. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-B4uGPp8w.js → requirementDiagram-UZGBJVZJ-3EZ5KWEi.js} +1 -1
  257. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-3EZ5KWEi.js.gz +0 -0
  258. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-MXhIjhme.js → sankeyDiagram-TZEHDZUN-D0qcydqq.js} +1 -1
  259. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-D0qcydqq.js.gz +0 -0
  260. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-Cm53TYug.js → sequenceDiagram-WL72ISMW-BCR5gaaN.js} +1 -1
  261. package/dist/ui/assets/sequenceDiagram-WL72ISMW-BCR5gaaN.js.gz +0 -0
  262. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-BVuxUkj5.js → stateDiagram-FKZM4ZOC-BvX4FLQ9.js} +1 -1
  263. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BvX4FLQ9.js.gz +0 -0
  264. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-CxLDvgTF.js +1 -0
  265. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CMypNiEP.js → timeline-definition-IT6M3QCI-_AWp5LJn.js} +1 -1
  266. package/dist/ui/assets/timeline-definition-IT6M3QCI-_AWp5LJn.js.gz +0 -0
  267. package/dist/ui/assets/{treemap-KMMF4GRG-BEtnV3BT.js → treemap-KMMF4GRG-BZ9FBl5-.js} +1 -1
  268. package/dist/ui/assets/treemap-KMMF4GRG-BZ9FBl5-.js.gz +0 -0
  269. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-BnioEYUM.js → xychartDiagram-PRI3JC2R-_wB7yuVd.js} +1 -1
  270. package/dist/ui/assets/xychartDiagram-PRI3JC2R-_wB7yuVd.js.gz +0 -0
  271. package/dist/ui/index.html +1 -1
  272. package/package.json +8 -8
  273. package/dist/ui/assets/_basePickBy-DfxojsEt.js.gz +0 -0
  274. package/dist/ui/assets/_baseUniq-DWFPJOTC.js.gz +0 -0
  275. package/dist/ui/assets/arc-vMZ_XGSI.js.gz +0 -0
  276. package/dist/ui/assets/architectureDiagram-VXUJARFQ-DGpk_uOD.js.gz +0 -0
  277. package/dist/ui/assets/blockDiagram-VD42YOAC-BkRnxc94.js.gz +0 -0
  278. package/dist/ui/assets/channel-B9aI4bYN.js +0 -1
  279. package/dist/ui/assets/chunk-B4BG7PRW-DtkeCZab.js.gz +0 -0
  280. package/dist/ui/assets/chunk-DI55MBZ5-BQ_asW-1.js.gz +0 -0
  281. package/dist/ui/assets/chunk-TZMSLE5B-DlPypnIq.js.gz +0 -0
  282. package/dist/ui/assets/classDiagram-2ON5EDUG-p-68WO4Z.js +0 -1
  283. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-p-68WO4Z.js +0 -1
  284. package/dist/ui/assets/clone-DzK5ogfn.js +0 -1
  285. package/dist/ui/assets/consoleHook-59e792cb-DHYIclEd.js.gz +0 -0
  286. package/dist/ui/assets/cose-bilkent-S5V4N54A-DotJH9qH.js.gz +0 -0
  287. package/dist/ui/assets/dagre-6UL2VRFP-Btssr8QF.js.gz +0 -0
  288. package/dist/ui/assets/diagram-PSM6KHXK-D5_Jkog3.js.gz +0 -0
  289. package/dist/ui/assets/diagram-QEK2KX5R-DlPEVSL5.js.gz +0 -0
  290. package/dist/ui/assets/diagram-S2PKOQOG-CjO1k8aG.js.gz +0 -0
  291. package/dist/ui/assets/erDiagram-Q2GNP2WA-3cO02-K3.js.gz +0 -0
  292. package/dist/ui/assets/flowDiagram-NV44I4VS-CajTpSxI.js.gz +0 -0
  293. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CH16bg-j.js.gz +0 -0
  294. package/dist/ui/assets/graph-IQoZvE3o.js.gz +0 -0
  295. package/dist/ui/assets/index-599aeaf7-RUCkgwsg.js.gz +0 -0
  296. package/dist/ui/assets/index-B3AvIgqP.js.gz +0 -0
  297. package/dist/ui/assets/index-C-quzPWC.js.gz +0 -0
  298. package/dist/ui/assets/index-ChmRuj_T.js.gz +0 -0
  299. package/dist/ui/assets/index-QV5-5yA2.js.gz +0 -0
  300. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B5bgV3GH.js.gz +0 -0
  301. package/dist/ui/assets/kanban-definition-3W4ZIXB7-Bp-aWRSc.js.gz +0 -0
  302. package/dist/ui/assets/katex-DGRguze2.css +0 -1
  303. package/dist/ui/assets/layout-BH-2XJZq.js.gz +0 -0
  304. package/dist/ui/assets/linear-DCYXhl_f.js.gz +0 -0
  305. package/dist/ui/assets/mermaid.core-BAuL6kgQ.js.gz +0 -0
  306. package/dist/ui/assets/mindmap-definition-VGOIOE7T-DpH5N-N0.js.gz +0 -0
  307. package/dist/ui/assets/pieDiagram-ADFJNKIX-BB8fBxj1.js.gz +0 -0
  308. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-D6oZLdUD.js.gz +0 -0
  309. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-B4uGPp8w.js.gz +0 -0
  310. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-MXhIjhme.js.gz +0 -0
  311. package/dist/ui/assets/sequenceDiagram-WL72ISMW-Cm53TYug.js.gz +0 -0
  312. package/dist/ui/assets/stateDiagram-FKZM4ZOC-BVuxUkj5.js.gz +0 -0
  313. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-8Jeww6Dc.js +0 -1
  314. package/dist/ui/assets/timeline-definition-IT6M3QCI-CMypNiEP.js.gz +0 -0
  315. package/dist/ui/assets/treemap-KMMF4GRG-BEtnV3BT.js.gz +0 -0
  316. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BnioEYUM.js.gz +0 -0
@@ -1,14 +1,14 @@
1
1
  import '../id-CoIbY_uc.cjs';
2
- export { i as isForeignKeyConstraintError, w as withSessionGuard } from '../session-guard-kvAx_8Fb.cjs';
2
+ export { i as isForeignKeyConstraintError, w as withSessionGuard } from '../session-guard-KHh0cnET.cjs';
3
3
  import '../session-MNU4BQv4.cjs';
4
4
  import '../agentic-tool-BulhIUGb.cjs';
5
5
  import '../context-BpkCELpO.cjs';
6
- import '../client-B5PyIvNc.cjs';
6
+ import '../client-CemqXk0v.cjs';
7
7
  import 'drizzle-orm/libsql';
8
8
  import 'drizzle-orm/postgres-js';
9
9
  import 'drizzle-orm';
10
- import '../message-DinITA7a.cjs';
10
+ import '../message-CSWOsdcZ.cjs';
11
11
  import '../board-D7SnPqp-.cjs';
12
- import '../task-wht1RJEL.cjs';
12
+ import '../task-C2Hy7H6u.cjs';
13
13
  import 'drizzle-orm/pg-core';
14
14
  import 'drizzle-orm/sqlite-core';
@@ -1,14 +1,14 @@
1
1
  import '../id-CoIbY_uc.js';
2
- export { i as isForeignKeyConstraintError, w as withSessionGuard } from '../session-guard-C0LkDEN7.js';
2
+ export { i as isForeignKeyConstraintError, w as withSessionGuard } from '../session-guard-BFqVtBoS.js';
3
3
  import '../session-CAfhv1qL.js';
4
4
  import '../agentic-tool-cYqsU5i5.js';
5
5
  import '../context-BpkCELpO.js';
6
- import '../client-C1CsRi19.js';
6
+ import '../client-uYEOha6g.js';
7
7
  import 'drizzle-orm/libsql';
8
8
  import 'drizzle-orm/postgres-js';
9
9
  import 'drizzle-orm';
10
- import '../message-CHUUP6OS.js';
10
+ import '../message-DZa8g0s0.js';
11
11
  import '../board-D3YJ0_ih.js';
12
- import '../task-BLPFCORT.js';
12
+ import '../task-BHV-YHg1.js';
13
13
  import 'drizzle-orm/pg-core';
14
14
  import 'drizzle-orm/sqlite-core';
@@ -0,0 +1,8 @@
1
+ -- Task-centric queue refactor (Section C of never-lose-prompt design) — part 1
2
+ --
3
+ -- Mirror of sqlite/0039_queued_tasks.sql. Additive: introduces
4
+ -- tasks.queue_position + tasks_queue_idx. Backfill + messages-column drop
5
+ -- ships in 0029 alongside the code refactor.
6
+
7
+ ALTER TABLE "tasks" ADD COLUMN IF NOT EXISTS "queue_position" integer;--> statement-breakpoint
8
+ CREATE INDEX IF NOT EXISTS "tasks_queue_idx" ON "tasks" ("session_id", "status", "queue_position");
@@ -0,0 +1,24 @@
1
+ -- Task-centric queue refactor (Section C of never-lose-prompt design) — part 2
2
+ --
3
+ -- Mirror of sqlite/0040_migrate_queued_messages.sql. Drops the legacy
4
+ -- message-level queue without backfilling: any prompts queued at daemon
5
+ -- restart can be re-issued by the caller, so we do not preserve them.
6
+ --
7
+ -- Belt-and-suspenders: a partial unique index on
8
+ -- (session_id, queue_position) WHERE status='queued' guards the new
9
+ -- `tasks.createPending` race fix at the storage layer.
10
+
11
+ -- 1. Drop legacy queued message rows.
12
+ DELETE FROM "messages" WHERE "status" = 'queued';
13
+ --> statement-breakpoint
14
+
15
+ -- 2. Drop messages.status / messages.queue_position + their composite index.
16
+ DROP INDEX IF EXISTS "messages_queue_idx";--> statement-breakpoint
17
+ ALTER TABLE "messages" DROP COLUMN IF EXISTS "status";--> statement-breakpoint
18
+ ALTER TABLE "messages" DROP COLUMN IF EXISTS "queue_position";--> statement-breakpoint
19
+
20
+ -- 3. Partial unique index — defense-in-depth for `tasks.createPending` race
21
+ -- serialization.
22
+ CREATE UNIQUE INDEX IF NOT EXISTS "tasks_queued_position_unique"
23
+ ON "tasks" ("session_id", "queue_position")
24
+ WHERE "status" = 'queued';
@@ -0,0 +1,201 @@
1
+ -- Restructure per-tool credentials into per-tool buckets.
2
+ --
3
+ -- Lifts encrypted credential strings from two legacy locations:
4
+ -- 1. data.api_keys.<FIELD> (flat map, current PR's intermediate shape)
5
+ -- 2. data.env_vars.<FIELD> (legacy plaintext form: string)
6
+ -- 3. data.env_vars.<FIELD>.value_encrypted (v0.5 object form)
7
+ --
8
+ -- ...into the new per-tool structure:
9
+ -- data.agentic_tools.<tool>.<FIELD> (encrypted string, uniform shape)
10
+ --
11
+ -- Source priority is api_keys > env_vars (api_keys is more recently/explicitly set).
12
+ -- All values stay encrypted at rest — the runtime decrypts on read; URL-typed
13
+ -- fields are still stored as encrypted blobs for shape uniformity.
14
+ --
15
+ -- Idempotency: per-field lift is skipped if the target is already populated.
16
+ -- Non-destructive: source rows are only removed AFTER the target is verified
17
+ -- populated, so a partial run can be safely retried.
18
+
19
+ -- ============================================================
20
+ -- Lift step: agentic_tools.<tool>.<FIELD> ← api_keys/env_vars
21
+ -- ============================================================
22
+
23
+ -- claude-code: ANTHROPIC_API_KEY
24
+ UPDATE users SET data = jsonb_set(
25
+ data,
26
+ '{agentic_tools,claude-code,ANTHROPIC_API_KEY}',
27
+ COALESCE(
28
+ data->'api_keys'->'ANTHROPIC_API_KEY',
29
+ CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_API_KEY')
30
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_API_KEY'
31
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_API_KEY'->'value_encrypted'
32
+ END
33
+ ),
34
+ true
35
+ )
36
+ WHERE NOT (COALESCE(data->'agentic_tools'->'claude-code', '{}'::jsonb) ? 'ANTHROPIC_API_KEY')
37
+ AND COALESCE(
38
+ data->'api_keys'->'ANTHROPIC_API_KEY',
39
+ CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_API_KEY')
40
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_API_KEY'
41
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_API_KEY'->'value_encrypted'
42
+ END
43
+ ) IS NOT NULL;
44
+
45
+ -- claude-code: CLAUDE_CODE_OAUTH_TOKEN
46
+ UPDATE users SET data = jsonb_set(
47
+ data,
48
+ '{agentic_tools,claude-code,CLAUDE_CODE_OAUTH_TOKEN}',
49
+ COALESCE(
50
+ data->'api_keys'->'CLAUDE_CODE_OAUTH_TOKEN',
51
+ CASE jsonb_typeof(data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN')
52
+ WHEN 'string' THEN data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN'
53
+ WHEN 'object' THEN data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN'->'value_encrypted'
54
+ END
55
+ ),
56
+ true
57
+ )
58
+ WHERE NOT (COALESCE(data->'agentic_tools'->'claude-code', '{}'::jsonb) ? 'CLAUDE_CODE_OAUTH_TOKEN')
59
+ AND COALESCE(
60
+ data->'api_keys'->'CLAUDE_CODE_OAUTH_TOKEN',
61
+ CASE jsonb_typeof(data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN')
62
+ WHEN 'string' THEN data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN'
63
+ WHEN 'object' THEN data->'env_vars'->'CLAUDE_CODE_OAUTH_TOKEN'->'value_encrypted'
64
+ END
65
+ ) IS NOT NULL;
66
+
67
+ -- claude-code: ANTHROPIC_BASE_URL (env_vars only — was never in api_keys)
68
+ UPDATE users SET data = jsonb_set(
69
+ data,
70
+ '{agentic_tools,claude-code,ANTHROPIC_BASE_URL}',
71
+ CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_BASE_URL')
72
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_BASE_URL'
73
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_BASE_URL'->'value_encrypted'
74
+ END,
75
+ true
76
+ )
77
+ WHERE NOT (COALESCE(data->'agentic_tools'->'claude-code', '{}'::jsonb) ? 'ANTHROPIC_BASE_URL')
78
+ AND CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_BASE_URL')
79
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_BASE_URL'
80
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_BASE_URL'->'value_encrypted'
81
+ ELSE NULL
82
+ END IS NOT NULL;
83
+
84
+ -- claude-code: ANTHROPIC_AUTH_TOKEN (env_vars only)
85
+ UPDATE users SET data = jsonb_set(
86
+ data,
87
+ '{agentic_tools,claude-code,ANTHROPIC_AUTH_TOKEN}',
88
+ CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_AUTH_TOKEN')
89
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_AUTH_TOKEN'
90
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_AUTH_TOKEN'->'value_encrypted'
91
+ END,
92
+ true
93
+ )
94
+ WHERE NOT (COALESCE(data->'agentic_tools'->'claude-code', '{}'::jsonb) ? 'ANTHROPIC_AUTH_TOKEN')
95
+ AND CASE jsonb_typeof(data->'env_vars'->'ANTHROPIC_AUTH_TOKEN')
96
+ WHEN 'string' THEN data->'env_vars'->'ANTHROPIC_AUTH_TOKEN'
97
+ WHEN 'object' THEN data->'env_vars'->'ANTHROPIC_AUTH_TOKEN'->'value_encrypted'
98
+ ELSE NULL
99
+ END IS NOT NULL;
100
+
101
+ -- codex: OPENAI_API_KEY
102
+ UPDATE users SET data = jsonb_set(
103
+ data,
104
+ '{agentic_tools,codex,OPENAI_API_KEY}',
105
+ COALESCE(
106
+ data->'api_keys'->'OPENAI_API_KEY',
107
+ CASE jsonb_typeof(data->'env_vars'->'OPENAI_API_KEY')
108
+ WHEN 'string' THEN data->'env_vars'->'OPENAI_API_KEY'
109
+ WHEN 'object' THEN data->'env_vars'->'OPENAI_API_KEY'->'value_encrypted'
110
+ END
111
+ ),
112
+ true
113
+ )
114
+ WHERE NOT (COALESCE(data->'agentic_tools'->'codex', '{}'::jsonb) ? 'OPENAI_API_KEY')
115
+ AND COALESCE(
116
+ data->'api_keys'->'OPENAI_API_KEY',
117
+ CASE jsonb_typeof(data->'env_vars'->'OPENAI_API_KEY')
118
+ WHEN 'string' THEN data->'env_vars'->'OPENAI_API_KEY'
119
+ WHEN 'object' THEN data->'env_vars'->'OPENAI_API_KEY'->'value_encrypted'
120
+ END
121
+ ) IS NOT NULL;
122
+
123
+ -- gemini: GEMINI_API_KEY
124
+ UPDATE users SET data = jsonb_set(
125
+ data,
126
+ '{agentic_tools,gemini,GEMINI_API_KEY}',
127
+ COALESCE(
128
+ data->'api_keys'->'GEMINI_API_KEY',
129
+ CASE jsonb_typeof(data->'env_vars'->'GEMINI_API_KEY')
130
+ WHEN 'string' THEN data->'env_vars'->'GEMINI_API_KEY'
131
+ WHEN 'object' THEN data->'env_vars'->'GEMINI_API_KEY'->'value_encrypted'
132
+ END
133
+ ),
134
+ true
135
+ )
136
+ WHERE NOT (COALESCE(data->'agentic_tools'->'gemini', '{}'::jsonb) ? 'GEMINI_API_KEY')
137
+ AND COALESCE(
138
+ data->'api_keys'->'GEMINI_API_KEY',
139
+ CASE jsonb_typeof(data->'env_vars'->'GEMINI_API_KEY')
140
+ WHEN 'string' THEN data->'env_vars'->'GEMINI_API_KEY'
141
+ WHEN 'object' THEN data->'env_vars'->'GEMINI_API_KEY'->'value_encrypted'
142
+ END
143
+ ) IS NOT NULL;
144
+
145
+ -- copilot: COPILOT_GITHUB_TOKEN
146
+ -- (Note: GH_TOKEN / GITHUB_TOKEN are intentionally NOT migrated — they have
147
+ -- legitimate non-Copilot uses (git, gh CLI). The Copilot SDK's own fallback
148
+ -- chain still picks them up at runtime if no per-tool token is set.)
149
+ UPDATE users SET data = jsonb_set(
150
+ data,
151
+ '{agentic_tools,copilot,COPILOT_GITHUB_TOKEN}',
152
+ COALESCE(
153
+ data->'api_keys'->'COPILOT_GITHUB_TOKEN',
154
+ CASE jsonb_typeof(data->'env_vars'->'COPILOT_GITHUB_TOKEN')
155
+ WHEN 'string' THEN data->'env_vars'->'COPILOT_GITHUB_TOKEN'
156
+ WHEN 'object' THEN data->'env_vars'->'COPILOT_GITHUB_TOKEN'->'value_encrypted'
157
+ END
158
+ ),
159
+ true
160
+ )
161
+ WHERE NOT (COALESCE(data->'agentic_tools'->'copilot', '{}'::jsonb) ? 'COPILOT_GITHUB_TOKEN')
162
+ AND COALESCE(
163
+ data->'api_keys'->'COPILOT_GITHUB_TOKEN',
164
+ CASE jsonb_typeof(data->'env_vars'->'COPILOT_GITHUB_TOKEN')
165
+ WHEN 'string' THEN data->'env_vars'->'COPILOT_GITHUB_TOKEN'
166
+ WHEN 'object' THEN data->'env_vars'->'COPILOT_GITHUB_TOKEN'->'value_encrypted'
167
+ END
168
+ ) IS NOT NULL;
169
+
170
+ -- ============================================================
171
+ -- Cleanup: remove now-redundant source entries.
172
+ -- Each runs only if the corresponding target is verifiably populated.
173
+ -- ============================================================
174
+
175
+ -- claude-code: ANTHROPIC_API_KEY
176
+ UPDATE users SET data = (data #- '{api_keys,ANTHROPIC_API_KEY}') #- '{env_vars,ANTHROPIC_API_KEY}'
177
+ WHERE data->'agentic_tools'->'claude-code'->'ANTHROPIC_API_KEY' IS NOT NULL;
178
+
179
+ -- claude-code: CLAUDE_CODE_OAUTH_TOKEN
180
+ UPDATE users SET data = (data #- '{api_keys,CLAUDE_CODE_OAUTH_TOKEN}') #- '{env_vars,CLAUDE_CODE_OAUTH_TOKEN}'
181
+ WHERE data->'agentic_tools'->'claude-code'->'CLAUDE_CODE_OAUTH_TOKEN' IS NOT NULL;
182
+
183
+ -- claude-code: ANTHROPIC_BASE_URL
184
+ UPDATE users SET data = data #- '{env_vars,ANTHROPIC_BASE_URL}'
185
+ WHERE data->'agentic_tools'->'claude-code'->'ANTHROPIC_BASE_URL' IS NOT NULL;
186
+
187
+ -- claude-code: ANTHROPIC_AUTH_TOKEN
188
+ UPDATE users SET data = data #- '{env_vars,ANTHROPIC_AUTH_TOKEN}'
189
+ WHERE data->'agentic_tools'->'claude-code'->'ANTHROPIC_AUTH_TOKEN' IS NOT NULL;
190
+
191
+ -- codex: OPENAI_API_KEY
192
+ UPDATE users SET data = (data #- '{api_keys,OPENAI_API_KEY}') #- '{env_vars,OPENAI_API_KEY}'
193
+ WHERE data->'agentic_tools'->'codex'->'OPENAI_API_KEY' IS NOT NULL;
194
+
195
+ -- gemini: GEMINI_API_KEY
196
+ UPDATE users SET data = (data #- '{api_keys,GEMINI_API_KEY}') #- '{env_vars,GEMINI_API_KEY}'
197
+ WHERE data->'agentic_tools'->'gemini'->'GEMINI_API_KEY' IS NOT NULL;
198
+
199
+ -- copilot: COPILOT_GITHUB_TOKEN
200
+ UPDATE users SET data = (data #- '{api_keys,COPILOT_GITHUB_TOKEN}') #- '{env_vars,COPILOT_GITHUB_TOKEN}'
201
+ WHERE data->'agentic_tools'->'copilot'->'COPILOT_GITHUB_TOKEN' IS NOT NULL;
@@ -197,6 +197,27 @@
197
197
  "when": 1777000000000,
198
198
  "tag": "0027_mcp_oauth_token_refresh",
199
199
  "breakpoints": true
200
+ },
201
+ {
202
+ "idx": 28,
203
+ "version": "7",
204
+ "when": 1777200000000,
205
+ "tag": "0028_queued_tasks",
206
+ "breakpoints": true
207
+ },
208
+ {
209
+ "idx": 29,
210
+ "version": "7",
211
+ "when": 1777200100000,
212
+ "tag": "0030_migrate_queued_messages",
213
+ "breakpoints": true
214
+ },
215
+ {
216
+ "idx": 30,
217
+ "version": "7",
218
+ "when": 1777300000000,
219
+ "tag": "0031_restructure_agentic_tool_config",
220
+ "breakpoints": true
200
221
  }
201
222
  ]
202
223
  }
@@ -0,0 +1,13 @@
1
+ -- Task-centric queue refactor (Section C of never-lose-prompt design) — part 1
2
+ --
3
+ -- Additive migration: introduces queue_position on tasks. The status enum
4
+ -- gains a 'queued' value at the application layer (tasks.status is `text NOT
5
+ -- NULL` with no DB-level CHECK).
6
+ --
7
+ -- The follow-up migration (0040) backfills queued *messages* into queued
8
+ -- *tasks* and drops `messages.status` / `messages.queue_position` once the
9
+ -- code base no longer reads them. Splitting it lets each migration be safely
10
+ -- deployable in isolation.
11
+
12
+ ALTER TABLE `tasks` ADD `queue_position` integer;--> statement-breakpoint
13
+ CREATE INDEX `tasks_queue_idx` ON `tasks` (`session_id`,`status`,`queue_position`);
@@ -0,0 +1,61 @@
1
+ -- Task-centric queue refactor (Section C of never-lose-prompt design) — part 2
2
+ --
3
+ -- Drops the legacy message-level queue (`messages.status='queued'`,
4
+ -- `messages.queue_position`). Queued rows are simply discarded — preserving
5
+ -- them across the upgrade is not a goal: any prompts queued at daemon
6
+ -- restart can be re-issued by the caller. Pairs with
7
+ -- postgres/0030_migrate_queued_messages.sql.
8
+ --
9
+ -- Belt-and-suspenders: a partial unique index on
10
+ -- (session_id, queue_position) WHERE status='queued' guards the new
11
+ -- `tasks.createPending` race fix at the storage layer, so even if a
12
+ -- transactional read-then-insert ever slipped, the DB would reject the
13
+ -- collision instead of silently double-queuing.
14
+
15
+ -- 1. Drop legacy queued message rows. They had `index = -1` and never
16
+ -- participated in the conversation, so they're safe to discard.
17
+ DELETE FROM `messages` WHERE `status` = 'queued';
18
+ --> statement-breakpoint
19
+
20
+ -- 2. Drop messages.status / messages.queue_position via SQLite's
21
+ -- table-rebuild idiom. The composite `messages_queue_idx` covered both
22
+ -- columns and goes away with them.
23
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
24
+ DROP INDEX IF EXISTS `messages_queue_idx`;--> statement-breakpoint
25
+ CREATE TABLE `__new_messages` (
26
+ `message_id` text(36) PRIMARY KEY NOT NULL,
27
+ `created_at` integer NOT NULL,
28
+ `session_id` text(36) NOT NULL,
29
+ `task_id` text(36),
30
+ `type` text NOT NULL,
31
+ `role` text NOT NULL,
32
+ `index` integer NOT NULL,
33
+ `timestamp` integer NOT NULL,
34
+ `content_preview` text,
35
+ `parent_tool_use_id` text,
36
+ `data` text NOT NULL,
37
+ FOREIGN KEY (`session_id`) REFERENCES `sessions`(`session_id`) ON UPDATE no action ON DELETE cascade,
38
+ FOREIGN KEY (`task_id`) REFERENCES `tasks`(`task_id`) ON UPDATE no action ON DELETE set null
39
+ );
40
+ --> statement-breakpoint
41
+ INSERT INTO `__new_messages` (
42
+ `message_id`, `created_at`, `session_id`, `task_id`, `type`, `role`,
43
+ `index`, `timestamp`, `content_preview`, `parent_tool_use_id`, `data`
44
+ ) SELECT
45
+ `message_id`, `created_at`, `session_id`, `task_id`, `type`, `role`,
46
+ `index`, `timestamp`, `content_preview`, `parent_tool_use_id`, `data`
47
+ FROM `messages`;
48
+ --> statement-breakpoint
49
+ DROP TABLE `messages`;--> statement-breakpoint
50
+ ALTER TABLE `__new_messages` RENAME TO `messages`;--> statement-breakpoint
51
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
52
+ CREATE INDEX `messages_session_id_idx` ON `messages` (`session_id`);--> statement-breakpoint
53
+ CREATE INDEX `messages_task_id_idx` ON `messages` (`task_id`);--> statement-breakpoint
54
+ CREATE INDEX `messages_session_index_idx` ON `messages` (`session_id`,`index`);--> statement-breakpoint
55
+
56
+ -- 3. Partial unique index — defense-in-depth for `tasks.createPending` race
57
+ -- serialization. Only QUEUED rows are constrained; CREATED/RUNNING/done
58
+ -- rows have NULL queue_position and are unaffected.
59
+ CREATE UNIQUE INDEX `tasks_queued_position_unique`
60
+ ON `tasks` (`session_id`, `queue_position`)
61
+ WHERE `status` = 'queued';
@@ -0,0 +1,204 @@
1
+ -- Restructure per-tool credentials into per-tool buckets.
2
+ --
3
+ -- Lifts encrypted credential strings from two legacy locations:
4
+ -- 1. data.api_keys.<FIELD> (flat map, current PR's intermediate shape)
5
+ -- 2. data.env_vars.<FIELD> (legacy plaintext form: string)
6
+ -- 3. data.env_vars.<FIELD>.value_encrypted (v0.5 object form)
7
+ --
8
+ -- ...into the new per-tool structure:
9
+ -- data.agentic_tools.<tool>.<FIELD> (encrypted string, uniform shape)
10
+ --
11
+ -- Source priority is api_keys > env_vars (api_keys is more recently/explicitly set).
12
+ -- All values stay encrypted at rest — the runtime decrypts on read; URL-typed
13
+ -- fields are still stored as encrypted blobs for shape uniformity.
14
+ --
15
+ -- Idempotency: per-field lift is skipped if the target is already populated.
16
+ -- Non-destructive: source rows are only removed AFTER the target is verified
17
+ -- populated, so a partial run can be safely retried.
18
+
19
+ -- ============================================================
20
+ -- Lift step: agentic_tools.<tool>.<FIELD> ← api_keys/env_vars
21
+ -- ============================================================
22
+
23
+ -- claude-code: ANTHROPIC_API_KEY
24
+ UPDATE users SET data = json_set(
25
+ data,
26
+ '$.agentic_tools."claude-code".ANTHROPIC_API_KEY',
27
+ COALESCE(
28
+ json_extract(data, '$.api_keys.ANTHROPIC_API_KEY'),
29
+ CASE json_type(data, '$.env_vars.ANTHROPIC_API_KEY')
30
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_API_KEY')
31
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_API_KEY.value_encrypted')
32
+ END
33
+ )
34
+ )
35
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_API_KEY') IS NULL
36
+ AND COALESCE(
37
+ json_extract(data, '$.api_keys.ANTHROPIC_API_KEY'),
38
+ CASE json_type(data, '$.env_vars.ANTHROPIC_API_KEY')
39
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_API_KEY')
40
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_API_KEY.value_encrypted')
41
+ END
42
+ ) IS NOT NULL;
43
+
44
+ -- claude-code: CLAUDE_CODE_OAUTH_TOKEN
45
+ UPDATE users SET data = json_set(
46
+ data,
47
+ '$.agentic_tools."claude-code".CLAUDE_CODE_OAUTH_TOKEN',
48
+ COALESCE(
49
+ json_extract(data, '$.api_keys.CLAUDE_CODE_OAUTH_TOKEN'),
50
+ CASE json_type(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN')
51
+ WHEN 'text' THEN json_extract(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN')
52
+ WHEN 'object' THEN json_extract(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN.value_encrypted')
53
+ END
54
+ )
55
+ )
56
+ WHERE json_extract(data, '$.agentic_tools."claude-code".CLAUDE_CODE_OAUTH_TOKEN') IS NULL
57
+ AND COALESCE(
58
+ json_extract(data, '$.api_keys.CLAUDE_CODE_OAUTH_TOKEN'),
59
+ CASE json_type(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN')
60
+ WHEN 'text' THEN json_extract(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN')
61
+ WHEN 'object' THEN json_extract(data, '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN.value_encrypted')
62
+ END
63
+ ) IS NOT NULL;
64
+
65
+ -- claude-code: ANTHROPIC_BASE_URL (env_vars only — was never in api_keys)
66
+ UPDATE users SET data = json_set(
67
+ data,
68
+ '$.agentic_tools."claude-code".ANTHROPIC_BASE_URL',
69
+ CASE json_type(data, '$.env_vars.ANTHROPIC_BASE_URL')
70
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_BASE_URL')
71
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_BASE_URL.value_encrypted')
72
+ END
73
+ )
74
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_BASE_URL') IS NULL
75
+ AND CASE json_type(data, '$.env_vars.ANTHROPIC_BASE_URL')
76
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_BASE_URL')
77
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_BASE_URL.value_encrypted')
78
+ ELSE NULL
79
+ END IS NOT NULL;
80
+
81
+ -- claude-code: ANTHROPIC_AUTH_TOKEN (env_vars only)
82
+ UPDATE users SET data = json_set(
83
+ data,
84
+ '$.agentic_tools."claude-code".ANTHROPIC_AUTH_TOKEN',
85
+ CASE json_type(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN')
86
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN')
87
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN.value_encrypted')
88
+ END
89
+ )
90
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_AUTH_TOKEN') IS NULL
91
+ AND CASE json_type(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN')
92
+ WHEN 'text' THEN json_extract(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN')
93
+ WHEN 'object' THEN json_extract(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN.value_encrypted')
94
+ ELSE NULL
95
+ END IS NOT NULL;
96
+
97
+ -- codex: OPENAI_API_KEY
98
+ UPDATE users SET data = json_set(
99
+ data,
100
+ '$.agentic_tools.codex.OPENAI_API_KEY',
101
+ COALESCE(
102
+ json_extract(data, '$.api_keys.OPENAI_API_KEY'),
103
+ CASE json_type(data, '$.env_vars.OPENAI_API_KEY')
104
+ WHEN 'text' THEN json_extract(data, '$.env_vars.OPENAI_API_KEY')
105
+ WHEN 'object' THEN json_extract(data, '$.env_vars.OPENAI_API_KEY.value_encrypted')
106
+ END
107
+ )
108
+ )
109
+ WHERE json_extract(data, '$.agentic_tools.codex.OPENAI_API_KEY') IS NULL
110
+ AND COALESCE(
111
+ json_extract(data, '$.api_keys.OPENAI_API_KEY'),
112
+ CASE json_type(data, '$.env_vars.OPENAI_API_KEY')
113
+ WHEN 'text' THEN json_extract(data, '$.env_vars.OPENAI_API_KEY')
114
+ WHEN 'object' THEN json_extract(data, '$.env_vars.OPENAI_API_KEY.value_encrypted')
115
+ END
116
+ ) IS NOT NULL;
117
+
118
+ -- gemini: GEMINI_API_KEY
119
+ UPDATE users SET data = json_set(
120
+ data,
121
+ '$.agentic_tools.gemini.GEMINI_API_KEY',
122
+ COALESCE(
123
+ json_extract(data, '$.api_keys.GEMINI_API_KEY'),
124
+ CASE json_type(data, '$.env_vars.GEMINI_API_KEY')
125
+ WHEN 'text' THEN json_extract(data, '$.env_vars.GEMINI_API_KEY')
126
+ WHEN 'object' THEN json_extract(data, '$.env_vars.GEMINI_API_KEY.value_encrypted')
127
+ END
128
+ )
129
+ )
130
+ WHERE json_extract(data, '$.agentic_tools.gemini.GEMINI_API_KEY') IS NULL
131
+ AND COALESCE(
132
+ json_extract(data, '$.api_keys.GEMINI_API_KEY'),
133
+ CASE json_type(data, '$.env_vars.GEMINI_API_KEY')
134
+ WHEN 'text' THEN json_extract(data, '$.env_vars.GEMINI_API_KEY')
135
+ WHEN 'object' THEN json_extract(data, '$.env_vars.GEMINI_API_KEY.value_encrypted')
136
+ END
137
+ ) IS NOT NULL;
138
+
139
+ -- copilot: COPILOT_GITHUB_TOKEN
140
+ -- (Note: GH_TOKEN / GITHUB_TOKEN are intentionally NOT migrated — they have
141
+ -- legitimate non-Copilot uses (git, gh CLI). The Copilot SDK's own fallback
142
+ -- chain still picks them up at runtime if no per-tool token is set.)
143
+ UPDATE users SET data = json_set(
144
+ data,
145
+ '$.agentic_tools.copilot.COPILOT_GITHUB_TOKEN',
146
+ COALESCE(
147
+ json_extract(data, '$.api_keys.COPILOT_GITHUB_TOKEN'),
148
+ CASE json_type(data, '$.env_vars.COPILOT_GITHUB_TOKEN')
149
+ WHEN 'text' THEN json_extract(data, '$.env_vars.COPILOT_GITHUB_TOKEN')
150
+ WHEN 'object' THEN json_extract(data, '$.env_vars.COPILOT_GITHUB_TOKEN.value_encrypted')
151
+ END
152
+ )
153
+ )
154
+ WHERE json_extract(data, '$.agentic_tools.copilot.COPILOT_GITHUB_TOKEN') IS NULL
155
+ AND COALESCE(
156
+ json_extract(data, '$.api_keys.COPILOT_GITHUB_TOKEN'),
157
+ CASE json_type(data, '$.env_vars.COPILOT_GITHUB_TOKEN')
158
+ WHEN 'text' THEN json_extract(data, '$.env_vars.COPILOT_GITHUB_TOKEN')
159
+ WHEN 'object' THEN json_extract(data, '$.env_vars.COPILOT_GITHUB_TOKEN.value_encrypted')
160
+ END
161
+ ) IS NOT NULL;
162
+
163
+ -- ============================================================
164
+ -- Cleanup: remove now-redundant source entries.
165
+ -- Each runs only if the corresponding target is verifiably populated.
166
+ -- ============================================================
167
+
168
+ -- claude-code: ANTHROPIC_API_KEY
169
+ UPDATE users SET data = json_remove(json_remove(data,
170
+ '$.api_keys.ANTHROPIC_API_KEY'),
171
+ '$.env_vars.ANTHROPIC_API_KEY')
172
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_API_KEY') IS NOT NULL;
173
+
174
+ -- claude-code: CLAUDE_CODE_OAUTH_TOKEN
175
+ UPDATE users SET data = json_remove(json_remove(data,
176
+ '$.api_keys.CLAUDE_CODE_OAUTH_TOKEN'),
177
+ '$.env_vars.CLAUDE_CODE_OAUTH_TOKEN')
178
+ WHERE json_extract(data, '$.agentic_tools."claude-code".CLAUDE_CODE_OAUTH_TOKEN') IS NOT NULL;
179
+
180
+ -- claude-code: ANTHROPIC_BASE_URL
181
+ UPDATE users SET data = json_remove(data, '$.env_vars.ANTHROPIC_BASE_URL')
182
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_BASE_URL') IS NOT NULL;
183
+
184
+ -- claude-code: ANTHROPIC_AUTH_TOKEN
185
+ UPDATE users SET data = json_remove(data, '$.env_vars.ANTHROPIC_AUTH_TOKEN')
186
+ WHERE json_extract(data, '$.agentic_tools."claude-code".ANTHROPIC_AUTH_TOKEN') IS NOT NULL;
187
+
188
+ -- codex: OPENAI_API_KEY
189
+ UPDATE users SET data = json_remove(json_remove(data,
190
+ '$.api_keys.OPENAI_API_KEY'),
191
+ '$.env_vars.OPENAI_API_KEY')
192
+ WHERE json_extract(data, '$.agentic_tools.codex.OPENAI_API_KEY') IS NOT NULL;
193
+
194
+ -- gemini: GEMINI_API_KEY
195
+ UPDATE users SET data = json_remove(json_remove(data,
196
+ '$.api_keys.GEMINI_API_KEY'),
197
+ '$.env_vars.GEMINI_API_KEY')
198
+ WHERE json_extract(data, '$.agentic_tools.gemini.GEMINI_API_KEY') IS NOT NULL;
199
+
200
+ -- copilot: COPILOT_GITHUB_TOKEN
201
+ UPDATE users SET data = json_remove(json_remove(data,
202
+ '$.api_keys.COPILOT_GITHUB_TOKEN'),
203
+ '$.env_vars.COPILOT_GITHUB_TOKEN')
204
+ WHERE json_extract(data, '$.agentic_tools.copilot.COPILOT_GITHUB_TOKEN') IS NOT NULL;
@@ -260,6 +260,27 @@
260
260
  "when": 1777000000000,
261
261
  "tag": "0038_mcp_oauth_token_refresh",
262
262
  "breakpoints": true
263
+ },
264
+ {
265
+ "idx": 39,
266
+ "version": "6",
267
+ "when": 1777200000000,
268
+ "tag": "0039_queued_tasks",
269
+ "breakpoints": true
270
+ },
271
+ {
272
+ "idx": 40,
273
+ "version": "6",
274
+ "when": 1777200100000,
275
+ "tag": "0040_migrate_queued_messages",
276
+ "breakpoints": true
277
+ },
278
+ {
279
+ "idx": 41,
280
+ "version": "6",
281
+ "when": 1777300000000,
282
+ "tag": "0041_restructure_agentic_tool_config",
283
+ "breakpoints": true
263
284
  }
264
285
  ]
265
286
  }
@@ -1,9 +1,9 @@
1
- import { C as ChannelType } from '../gateway-BnOlAelY.cjs';
1
+ import { C as ChannelType } from '../gateway-BWq4j_Ll.cjs';
2
2
  import '../agentic-tool-BulhIUGb.cjs';
3
3
  import '../id-CoIbY_uc.cjs';
4
4
  import '../session-MNU4BQv4.cjs';
5
5
  import '../context-BpkCELpO.cjs';
6
- import '../user-DkNdeFoz.cjs';
6
+ import '../user-CpfkcV2C.cjs';
7
7
 
8
8
  /**
9
9
  * Gateway Connector Interface
@@ -1,9 +1,9 @@
1
- import { C as ChannelType } from '../gateway-B_4X-v07.js';
1
+ import { C as ChannelType } from '../gateway-C3Jm_akw.js';
2
2
  import '../agentic-tool-cYqsU5i5.js';
3
3
  import '../id-CoIbY_uc.js';
4
4
  import '../session-CAfhv1qL.js';
5
5
  import '../context-BpkCELpO.js';
6
- import '../user-BfVWBmXA.js';
6
+ import '../user-DP-XZMIM.js';
7
7
 
8
8
  /**
9
9
  * Gateway Connector Interface
@@ -1,7 +1,7 @@
1
1
  import { c as AgenticToolName, g as CodexSandboxMode, d as CodexApprovalPolicy } from './agentic-tool-BulhIUGb.cjs';
2
2
  import { e as UUID, W as WorktreeID, f as UserID, S as SessionID } from './id-CoIbY_uc.cjs';
3
3
  import { P as PermissionMode } from './session-MNU4BQv4.cjs';
4
- import { c as DefaultModelConfig } from './user-DkNdeFoz.cjs';
4
+ import { l as DefaultModelConfig } from './user-CpfkcV2C.cjs';
5
5
 
6
6
  /**
7
7
  * Gateway Service Types
@@ -1,7 +1,7 @@
1
1
  import { c as AgenticToolName, g as CodexSandboxMode, d as CodexApprovalPolicy } from './agentic-tool-cYqsU5i5.js';
2
2
  import { e as UUID, W as WorktreeID, f as UserID, S as SessionID } from './id-CoIbY_uc.js';
3
3
  import { P as PermissionMode } from './session-CAfhv1qL.js';
4
- import { c as DefaultModelConfig } from './user-BfVWBmXA.js';
4
+ import { l as DefaultModelConfig } from './user-DP-XZMIM.js';
5
5
 
6
6
  /**
7
7
  * Gateway Service Types