@cloudcli-ai/cloudcli 1.37.2 → 1.37.4

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 (453) hide show
  1. package/README.md +269 -0
  2. package/dist/assets/{abnfDiagram-N423BO3Z-C4UAoHJb.js → abnfDiagram-N423BO3Z-Dmkwx38H.js} +1 -1
  3. package/dist/assets/{arc-B8jF-ja9.js → arc-DLe9AYuO.js} +1 -1
  4. package/dist/assets/{architectureDiagram-T3A2C74G-C_Wur_CU.js → architectureDiagram-T3A2C74G-CBbbbNUW.js} +1 -1
  5. package/dist/assets/{blockDiagram-VBNYF7ZC-Cq4P1i8t.js → blockDiagram-VBNYF7ZC-CaMEaWu4.js} +1 -1
  6. package/dist/assets/{c4Diagram-5PPSVZJV-C1wG4eUj.js → c4Diagram-5PPSVZJV-DhjMgNnR.js} +1 -1
  7. package/dist/assets/channel-CWrmwsir.js +1 -0
  8. package/dist/assets/{chunk-2GRJ4B5K-B8fnBG6E.js → chunk-2GRJ4B5K-yjl3-F-i.js} +1 -1
  9. package/dist/assets/{chunk-2Q5K7J3B-WdfPooPJ.js → chunk-2Q5K7J3B-DsAYaWEP.js} +1 -1
  10. package/dist/assets/{chunk-5RXB4S5H-DhZJuG2E.js → chunk-5RXB4S5H-Bt5qmqOX.js} +1 -1
  11. package/dist/assets/{chunk-5VM5RSS4-B0rjslal.js → chunk-5VM5RSS4-yWrWVvUt.js} +1 -1
  12. package/dist/assets/{chunk-6Q2QTUOP-CG2Oj4jL.js → chunk-6Q2QTUOP-Dt66K5xb.js} +1 -1
  13. package/dist/assets/{chunk-GF5L2VYU-rrl2lRxY.js → chunk-GF5L2VYU-DA0vzaj4.js} +1 -1
  14. package/dist/assets/{chunk-JWPE2WC7-CjVbrVMA.js → chunk-JWPE2WC7-CUkbx96V.js} +1 -1
  15. package/dist/assets/{chunk-KBJHAD2P-CRzKgU8S.js → chunk-KBJHAD2P-DWKxx1WH.js} +1 -1
  16. package/dist/assets/{chunk-RYQCIY6F-DBz4GTZF.js → chunk-RYQCIY6F-BqluplN0.js} +1 -1
  17. package/dist/assets/{chunk-XXDRQBXY-wHxalsXk.js → chunk-XXDRQBXY-DelKg3Xf.js} +1 -1
  18. package/dist/assets/classDiagram-JCYQIIEL-COAGCC6w.js +1 -0
  19. package/dist/assets/classDiagram-v2-OCEON4UE-COAGCC6w.js +1 -0
  20. package/dist/assets/{cose-bilkent-JH36ORCC-s1hygY8e.js → cose-bilkent-JH36ORCC-DHV93-Em.js} +1 -1
  21. package/dist/assets/{cynefin-VYW2F7L2-C4LGV15i.js → cynefin-VYW2F7L2-B9HZgoGX.js} +1 -1
  22. package/dist/assets/{cynefinDiagram-MW4NZA55-C5uhu7B3.js → cynefinDiagram-MW4NZA55-hFjjEQg8.js} +1 -1
  23. package/dist/assets/{dagre-VZM6K2ZE-B-OBTewm.js → dagre-VZM6K2ZE-CpeVOC7V.js} +1 -1
  24. package/dist/assets/{diagram-7IWD3JNH-BjGKQxih.js → diagram-7IWD3JNH-D0H1UoRA.js} +1 -1
  25. package/dist/assets/{diagram-B4RE2ZJO-BMKz1X2L.js → diagram-B4RE2ZJO-6Y7BQUup.js} +1 -1
  26. package/dist/assets/{diagram-LBJQPF4R-DNh-GhKC.js → diagram-LBJQPF4R-C0nNOwht.js} +1 -1
  27. package/dist/assets/{diagram-Q27KOJAE-BaTG9jPT.js → diagram-Q27KOJAE-En6QlOVX.js} +1 -1
  28. package/dist/assets/{diagram-UB23O5K3-BUwo2OvJ.js → diagram-UB23O5K3-CmPiNeGD.js} +1 -1
  29. package/dist/assets/{ebnfDiagram-BXEA7PRR-DAZgfzX2.js → ebnfDiagram-BXEA7PRR-Bygzp1Qt.js} +1 -1
  30. package/dist/assets/{erDiagram-JOGREHBK-1w1CcGEb.js → erDiagram-JOGREHBK-CwScRfzl.js} +1 -1
  31. package/dist/assets/{flowDiagram-UKHOOZJN-D4EII8Jj.js → flowDiagram-UKHOOZJN-bKX-0xP6.js} +1 -1
  32. package/dist/assets/{ganttDiagram-PKOTCBZU-ChvJZAgB.js → ganttDiagram-PKOTCBZU-DtZPKXGd.js} +1 -1
  33. package/dist/assets/{gitGraphDiagram-DS77QQ5N-DtOn41S8.js → gitGraphDiagram-DS77QQ5N-CUOtdL1o.js} +1 -1
  34. package/dist/assets/index-CdjIFxM2.js +5004 -0
  35. package/dist/assets/index-DgafhGTF.css +32 -0
  36. package/dist/assets/{infoDiagram-6WML65LV-DN_PVEJZ.js → infoDiagram-6WML65LV-ciRQTS0h.js} +1 -1
  37. package/dist/assets/{ishikawaDiagram-WSZJBQD7-DbkF1kXb.js → ishikawaDiagram-WSZJBQD7-CgjhQZ84.js} +1 -1
  38. package/dist/assets/{journeyDiagram-NVQOT4AX-pJwmhddE.js → journeyDiagram-NVQOT4AX-BsbQSeIW.js} +1 -1
  39. package/dist/assets/{kanban-definition-27J2QSJJ-PPAPgNp5.js → kanban-definition-27J2QSJJ-CrwzY9Jw.js} +1 -1
  40. package/dist/assets/{linear-iPR-J9f7.js → linear-BUaCDr6l.js} +1 -1
  41. package/dist/assets/{mermaid.core-BEUL86Z6.js → mermaid.core-ClgdUU0j.js} +5 -5
  42. package/dist/assets/{mindmap-definition-FAOFIHXS-BvZoBib7.js → mindmap-definition-FAOFIHXS-BictljY1.js} +1 -1
  43. package/dist/assets/{pegDiagram-VL7TDLO6-DhYreaUd.js → pegDiagram-VL7TDLO6-BXdByy_U.js} +1 -1
  44. package/dist/assets/{pieDiagram-7S7Q4E2Y-CrOHlyD0.js → pieDiagram-7S7Q4E2Y-uZsMfkRX.js} +1 -1
  45. package/dist/assets/{quadrantDiagram-CIZ2JOQS-D4g5yH3t.js → quadrantDiagram-CIZ2JOQS-7lCv4QIj.js} +1 -1
  46. package/dist/assets/{railroadDiagram-AXF67PYL-Dj39lHlf.js → railroadDiagram-AXF67PYL-07dxIWbi.js} +1 -1
  47. package/dist/assets/{requirementDiagram-LRYGKXZP-1AS4Zgm_.js → requirementDiagram-LRYGKXZP-Cb31Yv1_.js} +1 -1
  48. package/dist/assets/{sankeyDiagram-W5VNT64P-CKlMn19P.js → sankeyDiagram-W5VNT64P-X0YPSyF9.js} +1 -1
  49. package/dist/assets/{sequenceDiagram-SI44F4Z6-B_j3qyvo.js → sequenceDiagram-SI44F4Z6-BdBxSIlP.js} +1 -1
  50. package/dist/assets/server.browser-CtX3Hdl5.js +27 -0
  51. package/dist/assets/{sizeCapture-X5ZJPWSS-Bp2Op16v.js → sizeCapture-X5ZJPWSS-DQM5xAyD.js} +1 -1
  52. package/dist/assets/{stateDiagram-OKZ733FA-C0cN6DoY.js → stateDiagram-OKZ733FA-DJ3xkLUF.js} +1 -1
  53. package/dist/assets/stateDiagram-v2-UEYNNEHI-vAaE4zNo.js +1 -0
  54. package/dist/assets/{swimlanes-SLNWSIFB-BEvXOV9b.js → swimlanes-SLNWSIFB-rjfYdW0w.js} +2 -2
  55. package/dist/assets/swimlanesDiagram-ULZ7WXOC-TV2IF4Nq.js +8 -0
  56. package/dist/assets/{timeline-definition-Z64GVDOM-zdJQinvZ.js → timeline-definition-Z64GVDOM-DZMra5do.js} +1 -1
  57. package/dist/assets/{vendor-codemirror-OwyKSvPE.js → vendor-codemirror-CYrSt7-U.js} +18 -18
  58. package/dist/assets/{vennDiagram-T6HMQDX7-DuF1uZMY.js → vennDiagram-T6HMQDX7-BevD8uu0.js} +1 -1
  59. package/dist/assets/{wardleyDiagram-T6FBY63Y-B9AlLQup.js → wardleyDiagram-T6FBY63Y-DsIyXB7z.js} +1 -1
  60. package/dist/assets/{xychartDiagram-ELKLHX3M-DTJX48Qg.js → xychartDiagram-ELKLHX3M-G3PlF3ko.js} +1 -1
  61. package/dist/index.html +3 -3
  62. package/dist-server/server/index.js +11 -4
  63. package/dist-server/server/index.js.map +1 -1
  64. package/dist-server/server/modules/agent/agent.module.js +9 -2
  65. package/dist-server/server/modules/agent/agent.module.js.map +1 -1
  66. package/dist-server/server/modules/agent/agent.routes.js +177 -130
  67. package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
  68. package/dist-server/server/modules/agent/tests/agent-run-registration.test.js +306 -0
  69. package/dist-server/server/modules/agent/tests/agent-run-registration.test.js.map +1 -0
  70. package/dist-server/server/modules/agent/tests/agent.routes.test.js +48 -2
  71. package/dist-server/server/modules/agent/tests/agent.routes.test.js.map +1 -1
  72. package/dist-server/server/modules/browser-use/browser-use.routes.js +39 -33
  73. package/dist-server/server/modules/browser-use/browser-use.routes.js.map +1 -1
  74. package/dist-server/server/modules/database/connection.js +1 -1
  75. package/dist-server/server/modules/database/connection.js.map +1 -1
  76. package/dist-server/server/modules/database/index.js +5 -0
  77. package/dist-server/server/modules/database/index.js.map +1 -1
  78. package/dist-server/server/modules/database/migrations.js +45 -1
  79. package/dist-server/server/modules/database/migrations.js.map +1 -1
  80. package/dist-server/server/modules/database/repositories/provider-models.js +60 -6
  81. package/dist-server/server/modules/database/repositories/provider-models.js.map +1 -1
  82. package/dist-server/server/modules/database/repositories/scheduled-messages.db.js +71 -0
  83. package/dist-server/server/modules/database/repositories/scheduled-messages.db.js.map +1 -0
  84. package/dist-server/server/modules/database/repositories/session-drafts.db.js +105 -0
  85. package/dist-server/server/modules/database/repositories/session-drafts.db.js.map +1 -0
  86. package/dist-server/server/modules/database/repositories/sessions.db.js +144 -5
  87. package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
  88. package/dist-server/server/modules/database/repositories/user-preferences.db.js +65 -0
  89. package/dist-server/server/modules/database/repositories/user-preferences.db.js.map +1 -0
  90. package/dist-server/server/modules/database/schema.js +99 -0
  91. package/dist-server/server/modules/database/schema.js.map +1 -1
  92. package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +99 -0
  93. package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js.map +1 -1
  94. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +39 -0
  95. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
  96. package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js +105 -0
  97. package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js.map +1 -0
  98. package/dist-server/server/modules/file-tree/file-tree.module.js +2 -1
  99. package/dist-server/server/modules/file-tree/file-tree.module.js.map +1 -1
  100. package/dist-server/server/modules/file-tree/file-tree.service.js +44 -7
  101. package/dist-server/server/modules/file-tree/file-tree.service.js.map +1 -1
  102. package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js +126 -1
  103. package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js.map +1 -1
  104. package/dist-server/server/modules/git/git-branch-diff.service.js +142 -0
  105. package/dist-server/server/modules/git/git-branch-diff.service.js.map +1 -0
  106. package/dist-server/server/modules/git/git-branch.service.js.map +1 -1
  107. package/dist-server/server/modules/git/git.routes.js +92 -5
  108. package/dist-server/server/modules/git/git.routes.js.map +1 -1
  109. package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js +160 -0
  110. package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js.map +1 -0
  111. package/dist-server/server/modules/projects/project-clone.routes.js +108 -0
  112. package/dist-server/server/modules/projects/project-clone.routes.js.map +1 -0
  113. package/dist-server/server/modules/projects/projects.routes.js +13 -66
  114. package/dist-server/server/modules/projects/projects.routes.js.map +1 -1
  115. package/dist-server/server/modules/projects/services/project-clone-request.service.js +36 -0
  116. package/dist-server/server/modules/projects/services/project-clone-request.service.js.map +1 -0
  117. package/dist-server/server/modules/projects/services/project-clone.service.js +86 -32
  118. package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -1
  119. package/dist-server/server/modules/projects/services/project-delete.service.js +12 -1
  120. package/dist-server/server/modules/projects/services/project-delete.service.js.map +1 -1
  121. package/dist-server/server/modules/projects/services/project-star.service.js +2 -2
  122. package/dist-server/server/modules/projects/services/project-star.service.js.map +1 -1
  123. package/dist-server/server/modules/projects/tests/project-clone.routes.test.js +191 -0
  124. package/dist-server/server/modules/projects/tests/project-clone.routes.test.js.map +1 -0
  125. package/dist-server/server/modules/projects/tests/project-clone.service.test.js +275 -0
  126. package/dist-server/server/modules/projects/tests/project-clone.service.test.js.map +1 -1
  127. package/dist-server/server/modules/providers/index.js +3 -0
  128. package/dist-server/server/modules/providers/index.js.map +1 -1
  129. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +62 -9
  130. package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -1
  131. package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js +46 -0
  132. package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js.map +1 -0
  133. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +31 -12
  134. package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
  135. package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js +472 -53
  136. package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -1
  137. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +38 -11
  138. package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -1
  139. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +1007 -60
  140. package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
  141. package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js +4 -1
  142. package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js.map +1 -1
  143. package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
  144. package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
  145. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +204 -0
  146. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -0
  147. package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js +32 -0
  148. package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js.map +1 -0
  149. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +47 -0
  150. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  151. package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +71 -53
  152. package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
  153. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +8 -0
  154. package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
  155. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +1621 -431
  156. package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
  157. package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
  158. package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
  159. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js +9 -2
  160. package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js.map +1 -1
  161. package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js +16 -8
  162. package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js.map +1 -1
  163. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
  164. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +274 -9
  165. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
  166. package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
  167. package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js.map +1 -1
  168. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +19 -2
  169. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
  170. package/dist-server/server/modules/providers/provider.routes.js +134 -2
  171. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  172. package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js +100 -0
  173. package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js.map +1 -0
  174. package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js +97 -0
  175. package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js.map +1 -0
  176. package/dist-server/server/modules/providers/services/provider-capabilities.service.js +23 -1
  177. package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
  178. package/dist-server/server/modules/providers/services/provider-models.service.js +59 -5
  179. package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
  180. package/dist-server/server/modules/providers/services/provider-runtime.service.js +8 -0
  181. package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
  182. package/dist-server/server/modules/providers/services/provider-token-usage.service.js +139 -35
  183. package/dist-server/server/modules/providers/services/provider-token-usage.service.js.map +1 -1
  184. package/dist-server/server/modules/providers/services/session-conversations-search.service.js +2 -4
  185. package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
  186. package/dist-server/server/modules/providers/services/session-history-cache.service.js +91 -0
  187. package/dist-server/server/modules/providers/services/session-history-cache.service.js.map +1 -0
  188. package/dist-server/server/modules/providers/services/session-synchronizer.service.js +105 -32
  189. package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
  190. package/dist-server/server/modules/providers/services/sessions-watcher.service.js +3 -60
  191. package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
  192. package/dist-server/server/modules/providers/services/sessions.service.js +252 -12
  193. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
  194. package/dist-server/server/modules/providers/tests/claude-auth.test.js +183 -0
  195. package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
  196. package/dist-server/server/modules/providers/tests/claude-background-work.test.js +172 -0
  197. package/dist-server/server/modules/providers/tests/claude-background-work.test.js.map +1 -0
  198. package/dist-server/server/modules/providers/tests/claude-compaction.test.js +84 -0
  199. package/dist-server/server/modules/providers/tests/claude-compaction.test.js.map +1 -0
  200. package/dist-server/server/modules/providers/tests/claude-message-model.test.js +123 -0
  201. package/dist-server/server/modules/providers/tests/claude-message-model.test.js.map +1 -0
  202. package/dist-server/server/modules/providers/tests/claude-models.test.js +39 -0
  203. package/dist-server/server/modules/providers/tests/claude-models.test.js.map +1 -0
  204. package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js +265 -0
  205. package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js.map +1 -0
  206. package/dist-server/server/modules/providers/tests/claude-sessions.test.js +1815 -33
  207. package/dist-server/server/modules/providers/tests/claude-sessions.test.js.map +1 -1
  208. package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js +228 -0
  209. package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js.map +1 -0
  210. package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js +16 -0
  211. package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js.map +1 -0
  212. package/dist-server/server/modules/providers/tests/claude-token-budget.test.js +85 -0
  213. package/dist-server/server/modules/providers/tests/claude-token-budget.test.js.map +1 -0
  214. package/dist-server/server/modules/providers/tests/codex-message-editing.test.js +338 -0
  215. package/dist-server/server/modules/providers/tests/codex-message-editing.test.js.map +1 -0
  216. package/dist-server/server/modules/providers/tests/codex-models.test.js +25 -0
  217. package/dist-server/server/modules/providers/tests/codex-models.test.js.map +1 -0
  218. package/dist-server/server/modules/providers/tests/codex-runtime.test.js +83 -0
  219. package/dist-server/server/modules/providers/tests/codex-runtime.test.js.map +1 -0
  220. package/dist-server/server/modules/providers/tests/codex-session-fork.test.js +54 -0
  221. package/dist-server/server/modules/providers/tests/codex-session-fork.test.js.map +1 -0
  222. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +354 -15
  223. package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
  224. package/dist-server/server/modules/providers/tests/cursor-auth.test.js +167 -0
  225. package/dist-server/server/modules/providers/tests/cursor-auth.test.js.map +1 -0
  226. package/dist-server/server/modules/providers/tests/opencode-models.test.js +196 -4
  227. package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
  228. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +19 -1
  229. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
  230. package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js +30 -0
  231. package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js.map +1 -0
  232. package/dist-server/server/modules/providers/tests/provider-models.service.test.js +79 -1
  233. package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
  234. package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +164 -1
  235. package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js.map +1 -1
  236. package/dist-server/server/modules/providers/tests/provider.routes.test.js +190 -1
  237. package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -1
  238. package/dist-server/server/modules/providers/tests/session-fork.test.js +113 -0
  239. package/dist-server/server/modules/providers/tests/session-fork.test.js.map +1 -0
  240. package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js +139 -0
  241. package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js.map +1 -0
  242. package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js +90 -0
  243. package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js.map +1 -0
  244. package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js +122 -0
  245. package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js.map +1 -0
  246. package/dist-server/server/modules/providers/tests/sessions.service.test.js +219 -1
  247. package/dist-server/server/modules/providers/tests/sessions.service.test.js.map +1 -1
  248. package/dist-server/server/modules/providers/tests/skills.test.js +15 -3
  249. package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
  250. package/dist-server/server/modules/scheduled-messages/index.js +5 -0
  251. package/dist-server/server/modules/scheduled-messages/index.js.map +1 -0
  252. package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js +47 -0
  253. package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js.map +1 -0
  254. package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js +175 -0
  255. package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js.map +1 -0
  256. package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js +95 -0
  257. package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js.map +1 -0
  258. package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js +290 -0
  259. package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js.map +1 -0
  260. package/dist-server/server/modules/taskmaster/taskmaster.routes.js +23 -23
  261. package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -1
  262. package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js +48 -0
  263. package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js.map +1 -1
  264. package/dist-server/server/modules/user/tests/user.service.test.js +70 -0
  265. package/dist-server/server/modules/user/tests/user.service.test.js.map +1 -1
  266. package/dist-server/server/modules/user/user.module.js +10 -1
  267. package/dist-server/server/modules/user/user.module.js.map +1 -1
  268. package/dist-server/server/modules/user/user.routes.js +44 -0
  269. package/dist-server/server/modules/user/user.routes.js.map +1 -1
  270. package/dist-server/server/modules/user/user.service.js +75 -0
  271. package/dist-server/server/modules/user/user.service.js.map +1 -1
  272. package/dist-server/server/modules/voice/tests/voice.service.test.js +3 -2
  273. package/dist-server/server/modules/voice/tests/voice.service.test.js.map +1 -1
  274. package/dist-server/server/modules/websocket/index.js +7 -0
  275. package/dist-server/server/modules/websocket/index.js.map +1 -1
  276. package/dist-server/server/modules/websocket/services/chat-run-registry.service.js +37 -49
  277. package/dist-server/server/modules/websocket/services/chat-run-registry.service.js.map +1 -1
  278. package/dist-server/server/modules/websocket/services/chat-session-writer.service.js +35 -5
  279. package/dist-server/server/modules/websocket/services/chat-session-writer.service.js.map +1 -1
  280. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +204 -10
  281. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
  282. package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js +94 -0
  283. package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js.map +1 -0
  284. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +236 -20
  285. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
  286. package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js +137 -0
  287. package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js.map +1 -0
  288. package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js +263 -0
  289. package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js.map +1 -0
  290. package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js +29 -3
  291. package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js.map +1 -1
  292. package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +96 -0
  293. package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -0
  294. package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js +106 -0
  295. package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js.map +1 -0
  296. package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js +500 -0
  297. package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js.map +1 -1
  298. package/dist-server/server/shared/claude-cli-path.js +22 -5
  299. package/dist-server/server/shared/claude-cli-path.js.map +1 -1
  300. package/dist-server/server/shared/index.js +3 -0
  301. package/dist-server/server/shared/index.js.map +1 -0
  302. package/dist-server/server/shared/message-unification.js +376 -0
  303. package/dist-server/server/shared/message-unification.js.map +1 -0
  304. package/dist-server/server/shared/tests/claude-cli-path.test.js +45 -1
  305. package/dist-server/server/shared/tests/claude-cli-path.test.js.map +1 -1
  306. package/dist-server/server/shared/tests/message-unification.test.js +174 -0
  307. package/dist-server/server/shared/tests/message-unification.test.js.map +1 -0
  308. package/dist-server/server/shared/tests/read-only-roots.test.js +124 -0
  309. package/dist-server/server/shared/tests/read-only-roots.test.js.map +1 -0
  310. package/dist-server/server/shared/tests/strip-ansi-sequences.test.js +31 -0
  311. package/dist-server/server/shared/tests/strip-ansi-sequences.test.js.map +1 -0
  312. package/dist-server/server/shared/utils.js +160 -0
  313. package/dist-server/server/shared/utils.js.map +1 -1
  314. package/electron/desktopWindow.js +6 -0
  315. package/electron/viewHost.js +25 -2
  316. package/package.json +20 -17
  317. package/server/index.ts +16 -5
  318. package/server/modules/agent/agent.module.ts +11 -1
  319. package/server/modules/agent/agent.routes.ts +200 -142
  320. package/server/modules/agent/tests/agent-run-registration.test.ts +348 -0
  321. package/server/modules/agent/tests/agent.routes.test.ts +51 -2
  322. package/server/modules/browser-use/browser-use.routes.ts +96 -33
  323. package/server/modules/database/connection.ts +2 -1
  324. package/server/modules/database/index.ts +10 -0
  325. package/server/modules/database/migrations.ts +51 -0
  326. package/server/modules/database/repositories/provider-models.ts +79 -6
  327. package/server/modules/database/repositories/scheduled-messages.db.ts +127 -0
  328. package/server/modules/database/repositories/session-drafts.db.ts +171 -0
  329. package/server/modules/database/repositories/sessions.db.ts +204 -3
  330. package/server/modules/database/repositories/user-preferences.db.ts +80 -0
  331. package/server/modules/database/schema.ts +103 -0
  332. package/server/modules/database/tests/provider-models.db.integration.test.ts +113 -0
  333. package/server/modules/database/tests/sessions.db.integration.test.ts +52 -0
  334. package/server/modules/database/tests/user-preferences.db.integration.test.ts +135 -0
  335. package/server/modules/file-tree/file-tree.module.ts +2 -1
  336. package/server/modules/file-tree/file-tree.service.ts +49 -7
  337. package/server/modules/file-tree/tests/file-tree.service.test.ts +163 -1
  338. package/server/modules/git/git-branch-diff.service.ts +204 -0
  339. package/server/modules/git/git-branch.service.ts +2 -12
  340. package/server/modules/git/git.routes.ts +100 -6
  341. package/server/modules/git/tests/git-branch-diff.service.test.ts +210 -0
  342. package/server/modules/projects/project-clone.routes.ts +142 -0
  343. package/server/modules/projects/projects.routes.ts +16 -81
  344. package/server/modules/projects/services/project-clone-request.service.ts +56 -0
  345. package/server/modules/projects/services/project-clone.service.ts +102 -34
  346. package/server/modules/projects/services/project-delete.service.ts +13 -1
  347. package/server/modules/projects/services/project-star.service.ts +2 -2
  348. package/server/modules/projects/tests/project-clone.routes.test.ts +246 -0
  349. package/server/modules/projects/tests/project-clone.service.test.ts +376 -0
  350. package/server/modules/providers/index.ts +4 -0
  351. package/server/modules/providers/list/claude/claude-auth.provider.ts +81 -11
  352. package/server/modules/providers/list/claude/claude-fork.provider.ts +57 -0
  353. package/server/modules/providers/list/claude/claude-models.provider.ts +37 -17
  354. package/server/modules/providers/list/claude/claude-runtime.provider.js +510 -54
  355. package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +40 -14
  356. package/server/modules/providers/list/claude/claude-sessions.provider.ts +1195 -63
  357. package/server/modules/providers/list/claude/claude-skills.provider.ts +4 -1
  358. package/server/modules/providers/list/claude/claude.provider.ts +3 -0
  359. package/server/modules/providers/list/codex/codex-app-server.client.ts +243 -0
  360. package/server/modules/providers/list/codex/codex-fork.provider.ts +40 -0
  361. package/server/modules/providers/list/codex/codex-models.provider.ts +47 -0
  362. package/server/modules/providers/list/codex/{codex-runtime.provider.js → codex-runtime.provider.ts} +105 -70
  363. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +9 -0
  364. package/server/modules/providers/list/codex/codex-sessions.provider.ts +1847 -455
  365. package/server/modules/providers/list/codex/codex.provider.ts +3 -0
  366. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +10 -2
  367. package/server/modules/providers/list/cursor/cursor-runtime.provider.js +17 -8
  368. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +0 -1
  369. package/server/modules/providers/list/opencode/opencode-models.provider.ts +297 -9
  370. package/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
  371. package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +30 -2
  372. package/server/modules/providers/provider.routes.ts +162 -2
  373. package/server/modules/providers/services/claude-cli-liveness.service.ts +121 -0
  374. package/server/modules/providers/services/claude-settings-permissions.service.ts +127 -0
  375. package/server/modules/providers/services/provider-capabilities.service.ts +40 -1
  376. package/server/modules/providers/services/provider-models.service.ts +71 -4
  377. package/server/modules/providers/services/provider-runtime.service.ts +11 -0
  378. package/server/modules/providers/services/provider-token-usage.service.ts +166 -39
  379. package/server/modules/providers/services/session-conversations-search.service.ts +2 -5
  380. package/server/modules/providers/services/session-history-cache.service.ts +150 -0
  381. package/server/modules/providers/services/session-synchronizer.service.ts +125 -38
  382. package/server/modules/providers/services/sessions-watcher.service.ts +3 -64
  383. package/server/modules/providers/services/sessions.service.ts +309 -17
  384. package/server/modules/providers/tests/claude-auth.test.ts +208 -0
  385. package/server/modules/providers/tests/claude-background-work.test.ts +213 -0
  386. package/server/modules/providers/tests/claude-compaction.test.ts +101 -0
  387. package/server/modules/providers/tests/claude-message-model.test.ts +160 -0
  388. package/server/modules/providers/tests/claude-models.test.ts +87 -0
  389. package/server/modules/providers/tests/claude-runtime-hold.test.ts +309 -0
  390. package/server/modules/providers/tests/claude-sessions.test.ts +2167 -37
  391. package/server/modules/providers/tests/claude-settings-permissions.test.ts +271 -0
  392. package/server/modules/providers/tests/claude-subagent-echo.test.ts +25 -0
  393. package/server/modules/providers/tests/claude-token-budget.test.ts +104 -0
  394. package/server/modules/providers/tests/codex-message-editing.test.ts +419 -0
  395. package/server/modules/providers/tests/codex-models.test.ts +37 -0
  396. package/server/modules/providers/tests/codex-runtime.test.ts +94 -0
  397. package/server/modules/providers/tests/codex-session-fork.test.ts +59 -0
  398. package/server/modules/providers/tests/codex-sessions.test.ts +396 -15
  399. package/server/modules/providers/tests/cursor-auth.test.ts +187 -0
  400. package/server/modules/providers/tests/opencode-models.test.ts +266 -8
  401. package/server/modules/providers/tests/opencode-sessions.test.ts +40 -1
  402. package/server/modules/providers/tests/provider-capabilities.service.test.ts +37 -0
  403. package/server/modules/providers/tests/provider-models.service.test.ts +99 -1
  404. package/server/modules/providers/tests/provider-token-usage.service.test.ts +188 -1
  405. package/server/modules/providers/tests/provider.routes.test.ts +230 -1
  406. package/server/modules/providers/tests/session-fork.test.ts +173 -0
  407. package/server/modules/providers/tests/session-history-cache.service.test.ts +165 -0
  408. package/server/modules/providers/tests/session-orphan-prune.test.ts +107 -0
  409. package/server/modules/providers/tests/session-synchronizer-coalescing.test.ts +136 -0
  410. package/server/modules/providers/tests/sessions.service.test.ts +303 -1
  411. package/server/modules/providers/tests/skills.test.ts +21 -5
  412. package/server/modules/scheduled-messages/index.ts +8 -0
  413. package/server/modules/scheduled-messages/scheduled-messages.routes.ts +68 -0
  414. package/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.ts +216 -0
  415. package/server/modules/scheduled-messages/services/scheduled-messages.service.ts +121 -0
  416. package/server/modules/scheduled-messages/tests/scheduled-messages.test.ts +354 -0
  417. package/server/modules/taskmaster/taskmaster.routes.ts +23 -33
  418. package/server/modules/taskmaster/tests/taskmaster.routes.test.ts +57 -0
  419. package/server/modules/user/tests/user.service.test.ts +90 -0
  420. package/server/modules/user/user.module.ts +10 -1
  421. package/server/modules/user/user.routes.ts +44 -0
  422. package/server/modules/user/user.service.ts +105 -0
  423. package/server/modules/voice/tests/voice.service.test.ts +3 -2
  424. package/server/modules/websocket/README.md +4 -2
  425. package/server/modules/websocket/index.ts +8 -0
  426. package/server/modules/websocket/services/chat-run-registry.service.ts +45 -54
  427. package/server/modules/websocket/services/chat-session-writer.service.ts +36 -6
  428. package/server/modules/websocket/services/chat-websocket.service.ts +302 -16
  429. package/server/modules/websocket/services/session-upsert-broadcast.service.ts +108 -0
  430. package/server/modules/websocket/services/shell-websocket.service.ts +276 -22
  431. package/server/modules/websocket/tests/chat-background-subscribe.test.ts +167 -0
  432. package/server/modules/websocket/tests/chat-edit-send.test.ts +309 -0
  433. package/server/modules/websocket/tests/chat-run-registry.test.ts +34 -3
  434. package/server/modules/websocket/tests/chat-stop-task.test.ts +127 -0
  435. package/server/modules/websocket/tests/session-upsert-broadcast.test.ts +138 -0
  436. package/server/modules/websocket/tests/shell-websocket.service.test.ts +629 -0
  437. package/server/shared/claude-cli-path.ts +24 -6
  438. package/server/shared/index.ts +3 -0
  439. package/server/shared/interfaces.ts +91 -0
  440. package/server/shared/message-unification.ts +449 -0
  441. package/server/shared/tests/claude-cli-path.test.ts +58 -1
  442. package/server/shared/tests/message-unification.test.ts +218 -0
  443. package/server/shared/tests/read-only-roots.test.ts +139 -0
  444. package/server/shared/tests/strip-ansi-sequences.test.ts +42 -0
  445. package/server/shared/types.ts +382 -7
  446. package/server/shared/utils.ts +176 -0
  447. package/dist/assets/channel-_falYbU1.js +0 -1
  448. package/dist/assets/classDiagram-JCYQIIEL-Dn-3CfpR.js +0 -1
  449. package/dist/assets/classDiagram-v2-OCEON4UE-Dn-3CfpR.js +0 -1
  450. package/dist/assets/index-CzPLBvXT.css +0 -32
  451. package/dist/assets/index-DFkBBuSA.js +0 -1549
  452. package/dist/assets/stateDiagram-v2-UEYNNEHI-BvBxUUrZ.js +0 -1
  453. package/dist/assets/swimlanesDiagram-ULZ7WXOC-CsE-x4YK.js +0 -8
@@ -94,6 +94,13 @@ export type ProviderModelOption = {
94
94
  export type ProviderModelsDefinition = {
95
95
  OPTIONS: ProviderModelOption[];
96
96
  DEFAULT: string;
97
+ /**
98
+ * Reasoning-effort levels a custom entry of this catalog may declare, weakest
99
+ * first; empty for providers without effort support. The Providers service
100
+ * sets it on merged catalogs from the capability matrix, so the model
101
+ * library offers the same levels on every machine. Adapter catalogs omit it.
102
+ */
103
+ EFFORT_LEVELS?: string[];
97
104
  };
98
105
 
99
106
  /**
@@ -110,6 +117,22 @@ export type CustomProviderModelRecord = {
110
117
  modelId: string;
111
118
  model: string;
112
119
  sortOrder: number;
120
+ /** NULL for rows that never declared effort levels, including pre-existing rows. */
121
+ effort: CustomProviderModelEffort | null;
122
+ };
123
+
124
+ /**
125
+ * Reasoning-effort levels a user declared for one custom model.
126
+ *
127
+ * `values` holds unique, non-empty level ids drawn from the levels the
128
+ * provider's predefined models declare, and is never empty (an empty
129
+ * declaration is stored as NULL). `default`, when present, is one of `values`
130
+ * and documents the level the provider applies when the composer sends
131
+ * `Default`, mirroring `ProviderModelOption['effort'].default`.
132
+ */
133
+ export type CustomProviderModelEffort = {
134
+ values: string[];
135
+ default?: string;
113
136
  };
114
137
 
115
138
  /**
@@ -122,6 +145,12 @@ export type CustomProviderModelRecord = {
122
145
  export type CustomProviderModelInput = {
123
146
  id: string;
124
147
  model: string;
148
+ /**
149
+ * Optional reasoning-effort declaration. `undefined` leaves stored metadata
150
+ * untouched on update (and stores none on create) so clients that predate
151
+ * effort metadata keep working; `null` clears it.
152
+ */
153
+ effort?: CustomProviderModelEffort | null;
125
154
  };
126
155
 
127
156
  // ---------------------------
@@ -186,10 +215,12 @@ export type MessageKind =
186
215
  | 'complete'
187
216
  | 'status'
188
217
  | 'permission_request'
218
+ | 'permission_resolved'
189
219
  | 'permission_cancelled'
190
220
  | 'session_created'
191
- | 'interactive_prompt'
192
- | 'task_notification';
221
+ | 'history_truncated'
222
+ | 'task_notification'
223
+ | 'task_status';
193
224
 
194
225
  /**
195
226
  * Event kinds added by the chat gateway layer on top of provider message kinds.
@@ -215,14 +246,75 @@ export type GatewayEventKind =
215
246
  */
216
247
  export type ServerEventKind = MessageKind | GatewayEventKind;
217
248
 
249
+ /** The owning project as it appears inside a `session_upserted` delta. */
250
+ export type SessionUpsertedProject = {
251
+ projectId: string;
252
+ path: string;
253
+ fullPath: string;
254
+ displayName: string;
255
+ isStarred: boolean;
256
+ };
257
+
258
+ /**
259
+ * The `session_upserted` sidebar delta, built only by
260
+ * `modules/websocket/services/session-upsert-broadcast.service.ts`.
261
+ *
262
+ * Typed rather than assembled as an untyped object literal because the payload
263
+ * used to be built in two places and silently drifted apart: one copy set
264
+ * `providerSessionId` and the other did not, and nothing could detect it.
265
+ *
266
+ * `providerSessionId` is how a client recognises that a row it is currently
267
+ * showing has been merged into its canonical app-session row, so it is always
268
+ * present — `null` only while the provider has not reported an id yet.
269
+ */
270
+ export type SessionUpsertedEvent = {
271
+ kind: 'session_upserted';
272
+ sessionId: string;
273
+ providerSessionId: string | null;
274
+ provider: LLMProvider;
275
+ session: {
276
+ id: string;
277
+ summary: string;
278
+ messageCount: number;
279
+ lastActivity: string;
280
+ };
281
+ project: SessionUpsertedProject | null;
282
+ timestamp: string;
283
+ };
284
+
218
285
  /**
219
286
  * Provider-neutral message envelope used in REST responses and realtime channels.
220
287
  *
221
288
  * Every provider-specific message must be converted into this shape before being
222
289
  * emitted outside provider-specific modules.
223
290
  */
291
+ /**
292
+ * A compaction, as the transcript records it.
293
+ *
294
+ * `running` is the status the CLI sends when it starts compacting, `done` the
295
+ * boundary it sends when it has, `failed` a compaction that did not finish.
296
+ * The token counts and duration only come with a boundary.
297
+ */
298
+ export type CompactionInfo = {
299
+ phase: 'running' | 'done' | 'failed';
300
+ /** Whether the user asked for it or the context window did. */
301
+ trigger?: 'manual' | 'auto';
302
+ /** Tokens the conversation held before and after, when the boundary reports them. */
303
+ preTokens?: number;
304
+ postTokens?: number;
305
+ durationMs?: number;
306
+ error?: string | null;
307
+ };
308
+
224
309
  export type NormalizedMessage = {
225
310
  id: string;
311
+ /**
312
+ * The provider's own identifier for the transcript row this message came
313
+ * from, when the provider has stable per-row identity (today: Claude's
314
+ * `uuid`). It is what "edit this message" and "fork from here" address, so it
315
+ * has to survive a reload — never a value this app synthesized.
316
+ */
317
+ transcriptAnchorId?: string;
226
318
  sessionId: string;
227
319
  timestamp: string;
228
320
  provider: LLMProvider;
@@ -236,6 +328,15 @@ export type NormalizedMessage = {
236
328
  seq?: number;
237
329
  role?: 'user' | 'assistant';
238
330
  content?: string;
331
+ /**
332
+ * The model that produced this assistant message, as the provider reported
333
+ * it on the transcript row (today: Claude's `message.model`, e.g.
334
+ * `claude-opus-5`). Absent on user turns — no provider records which model a
335
+ * request went out with — and absent when the provider named a placeholder
336
+ * such as `<synthetic>`, so a locally-fabricated notice is never labelled
337
+ * with a model it did not run on.
338
+ */
339
+ model?: string;
239
340
  /**
240
341
  * Optional display-oriented metadata used by providers that need to expose
241
342
  * richer transcript artifacts without introducing a brand-new message kind.
@@ -251,6 +352,8 @@ export type NormalizedMessage = {
251
352
  isLocalCommand?: boolean;
252
353
  isLocalCommandStdout?: boolean;
253
354
  isCompactSummary?: boolean;
355
+ /** Set on the row that stands in for a compaction, so the UI can draw it as one. */
356
+ compact?: CompactionInfo;
254
357
  images?: unknown;
255
358
  /** Non-image files attached to a user turn after provider history normalization. */
256
359
  files?: unknown;
@@ -274,13 +377,226 @@ export type NormalizedMessage = {
274
377
  status?: string;
275
378
  summary?: string;
276
379
  tokenBudget?: unknown;
277
- subagentTools?: unknown;
380
+ /**
381
+ * Timeline of everything a subagent did, attached to the `tool_use` that
382
+ * spawned it. Present for Claude `Agent`/`Task` calls and Codex
383
+ * `spawn_agent` calls; absent for every other tool.
384
+ */
385
+ subagentTools?: SubagentActivity[];
386
+ /** Identity and lifecycle of the subagent this `tool_use` spawned. */
387
+ subagent?: SubagentInfo;
388
+ /** The workflow run this `tool_use` launched, read from its journal on disk. */
389
+ workflow?: WorkflowInfo;
390
+ /** Stored memory the reply drew on, when the provider reports it. */
391
+ memoryCitations?: MemoryCitation[];
278
392
  toolUseResult?: unknown;
279
393
  sequence?: number;
280
394
  rowid?: number;
395
+ /**
396
+ * `task_status` fields: one lifecycle event of a background task the live
397
+ * run is tracking. `taskId` is the provider's task handle; `toolUseId` names
398
+ * the call that launched it and is absent on `updated`, which the SDK keys by
399
+ * task id alone. `status` and `summary` above carry the event's own.
400
+ */
401
+ event?: 'started' | 'progress' | 'updated' | 'notification';
402
+ taskId?: string;
403
+ toolUseId?: string;
404
+ taskType?: string;
405
+ workflowName?: string;
406
+ description?: string;
407
+ usage?: TaskUsage;
408
+ outputFile?: string;
409
+ /** A workflow's `progress` only: where each agent the run spawned stands. */
410
+ agents?: WorkflowAgentProgress[];
281
411
  [key: string]: unknown;
282
412
  };
283
413
 
414
+ /**
415
+ * What a background task has spent so far, as the CLI reports it on
416
+ * `task_progress` and `task_notification`.
417
+ */
418
+ export type TaskUsage = {
419
+ totalTokens: number;
420
+ toolUses: number;
421
+ durationMs: number;
422
+ };
423
+
424
+ /**
425
+ * One background task a live session still has outstanding — a spawned
426
+ * agent, a workflow run or a backgrounded command — as the runtime tracks it
427
+ * from the stream's `task_started` until the event that settles it.
428
+ *
429
+ * `taskId` is the handle a stop request names; `toolUseId` is the call that
430
+ * launched it, which is how the client pairs the task with its card.
431
+ * `startedAt` is the server clock at `task_started`, so a session whose turn
432
+ * has ended can still report how long its work has been going.
433
+ */
434
+ export type BackgroundTaskSummary = {
435
+ taskId: string;
436
+ toolUseId: string;
437
+ taskType: string;
438
+ description: string;
439
+ workflowName?: string;
440
+ startedAt: number;
441
+ /**
442
+ * The task was launched by a subagent or workflow agent, not by the
443
+ * session's own turn: its `toolUseId` names a call in that agent's
444
+ * transcript, so no card in this session's transcript matches it. Listed so
445
+ * it can still be stopped; not counted as the session's own work.
446
+ */
447
+ nested?: boolean;
448
+ };
449
+
450
+ /**
451
+ * Where one agent of a running workflow stands, as the SDK reports it on the
452
+ * run's `task_progress` events.
453
+ *
454
+ * An entry the script has queued but not yet started has no `agentId` and is
455
+ * identified by `index` alone; once the agent runs, `agentId` names the
456
+ * transcript it writes. `lastToolName` and `lastToolSummary` are the agent's
457
+ * own latest tool call — unlike the event's task-level `last_tool_name`, which
458
+ * for a workflow is the current agent's label.
459
+ */
460
+ export type WorkflowAgentProgress = {
461
+ index: number;
462
+ label?: string;
463
+ /** The title of the script phase the agent runs under, when it has one. */
464
+ phase?: string;
465
+ agentId?: string;
466
+ model?: string;
467
+ state: 'queued' | 'running' | 'done' | 'failed';
468
+ startedAt?: number;
469
+ lastToolName?: string;
470
+ lastToolSummary?: string;
471
+ promptPreview?: string;
472
+ tokens?: number;
473
+ toolCalls?: number;
474
+ durationMs?: number;
475
+ resultPreview?: string;
476
+ };
477
+
478
+ /**
479
+ * One workflow agent's recorded timeline, read from its transcript on demand
480
+ * when the card is opened — the SDK never streams an agent's own rows to the
481
+ * parent session, so this is the only way to see what it did.
482
+ *
483
+ * `activityCount` is the full length of the timeline; `activity` is capped
484
+ * for transport like a subagent's `subagentTools`.
485
+ */
486
+ export type WorkflowAgentActivity = {
487
+ agent: {
488
+ id: string;
489
+ label?: string;
490
+ model?: string;
491
+ status: 'running' | 'completed' | 'failed' | 'stopped';
492
+ };
493
+ activity: SubagentActivity[];
494
+ activityCount: number;
495
+ };
496
+
497
+ /**
498
+ * One agent a workflow run spawned, as its journal records it.
499
+ *
500
+ * `label` and `phase` are whatever the script passed when it spawned the
501
+ * agent; older scripts passed neither. An agent with a `started` record and no
502
+ * `result` or `failed` one is still running as far as the journal knows.
503
+ */
504
+ export type WorkflowAgentInfo = {
505
+ id: string;
506
+ label?: string;
507
+ phase?: string;
508
+ /** `stopped` is an agent the journal never settled although the run itself has — abandoned by a stop or a resume that re-ran the step. */
509
+ status: 'running' | 'completed' | 'failed' | 'stopped';
510
+ };
511
+
512
+ /**
513
+ * A `Workflow` tool call's run, attached to the `tool_use` that launched it.
514
+ *
515
+ * `status` follows the same rule as a background agent's: the task
516
+ * notification's word when one exists, else `running` only while the process
517
+ * that launched it is still up, else `stopped`. The agent list and counts come
518
+ * from `<transcriptDir>/journal.jsonl`; both are empty when the run left no
519
+ * journal behind (a fork copies only the parent's transcript).
520
+ */
521
+ export type WorkflowInfo = {
522
+ runId: string;
523
+ name: string;
524
+ description?: string;
525
+ status: 'running' | 'completed' | 'failed' | 'stopped';
526
+ agents: WorkflowAgentInfo[];
527
+ agentCounts: { total: number; completed: number; failed: number; running: number; stopped: number };
528
+ scriptPath?: string;
529
+ };
530
+
531
+ /**
532
+ * One stored memory an assistant reply drew on.
533
+ *
534
+ * Codex appends these to a reply that used its memory files, naming the file
535
+ * and line range it read plus a short note on what it took from there. The
536
+ * transcript shows them as a footnote so a memory-derived claim is traceable
537
+ * rather than arriving as an unattributed assertion.
538
+ */
539
+ export type MemoryCitation = {
540
+ /** File and line range that was read, e.g. `MEMORY.md:137-142`. */
541
+ source: string;
542
+ /** What the reply took from that range, when the provider states it. */
543
+ note?: string;
544
+ };
545
+
546
+ /**
547
+ * One entry in a subagent's recorded timeline.
548
+ *
549
+ * Providers store a subagent's work in a separate transcript (Claude:
550
+ * `<session>/subagents/agent-<id>.jsonl`; Codex: a sibling rollout keyed by
551
+ * `agent_thread_id`). Both are flattened into this shape so the transcript can
552
+ * replay a subagent's run with the same renderers the main thread uses.
553
+ *
554
+ * `kind` decides which fields matter: `tool` uses the tool fields, `text` and
555
+ * `thinking` use `content`. Consumers must not assume tool fields exist on the
556
+ * text kinds.
557
+ */
558
+ export type SubagentActivity = {
559
+ kind: 'tool' | 'text' | 'thinking';
560
+ timestamp?: string;
561
+ /** Tool-call identity; only set when `kind` is `tool`. */
562
+ toolId?: string;
563
+ toolName?: string;
564
+ toolInput?: unknown;
565
+ toolResult?: { content?: string; isError?: boolean } | null;
566
+ /** Message body; only set when `kind` is `text` or `thinking`. */
567
+ content?: string;
568
+ };
569
+
570
+ /**
571
+ * Identity and lifecycle of one spawned subagent, normalized across providers.
572
+ *
573
+ * `status` is `running` until the call that spawned the agent resolves. After
574
+ * that it is whatever the provider reported — Claude's task notification
575
+ * carries one — and `completed` when the provider reported nothing. A failed
576
+ * tool call *inside* the agent is not a failed agent, so it is never inferred
577
+ * from the transcript. A background agent whose session process ended before
578
+ * it reported is `stopped`: no outcome exists and none is coming.
579
+ */
580
+ export type SubagentInfo = {
581
+ /** Provider-native agent id — Claude `agentId`, Codex `agent_thread_id`. */
582
+ id: string;
583
+ /** Human-facing label: Claude's agent type, or Codex's assigned nickname. */
584
+ name?: string;
585
+ /** Agent type/preset when the provider records one (Claude `agentType`). */
586
+ type?: string;
587
+ /** One-line task summary shown in the collapsed header. */
588
+ description?: string;
589
+ status: 'running' | 'completed' | 'failed' | 'stopped';
590
+ /** Model the subagent ran on, when the provider records it. */
591
+ model?: string;
592
+ /**
593
+ * How many activities the agent actually recorded. It exceeds
594
+ * `subagentTools.length` when a long run was truncated for transport, which
595
+ * lets the UI say so instead of silently showing a partial timeline.
596
+ */
597
+ activityCount?: number;
598
+ };
599
+
284
600
  /**
285
601
  * Output gateway shared by WebSocket and SSE provider runs.
286
602
  *
@@ -292,7 +608,6 @@ export type ProviderRuntimeWriter = {
292
608
  setSessionId?(sessionId: string): void;
293
609
  userId?: string | number | null;
294
610
  isWebSocketWriter?: boolean;
295
- isSSEStreamWriter?: boolean;
296
611
  };
297
612
 
298
613
  export type ProviderPermissionDecision = {
@@ -322,6 +637,15 @@ export type ProviderRuntimeContext = {
322
637
  getProviderModels(): Promise<ProviderModelsDefinition>;
323
638
  normalizeMessage(raw: unknown, sessionId: string | null): NormalizedMessage[];
324
639
  isProviderInstalled(): Promise<boolean>;
640
+ /**
641
+ * Builds the SDK query for a run. Production leaves this unset and the
642
+ * runtime uses the SDK's own; tests supply a scripted stream so the hold
643
+ * and background-work paths can be driven without a CLI process.
644
+ */
645
+ createQuery?: (input: { prompt: AsyncIterable<unknown>; options: AnyRecord }) => AsyncIterable<unknown> & {
646
+ interrupt(): Promise<void>;
647
+ stopTask?(taskId: string): Promise<void>;
648
+ };
325
649
  };
326
650
 
327
651
  export type ProviderRunFunction = (
@@ -546,6 +870,29 @@ export type UpsertProviderMcpServerInput = {
546
870
 
547
871
  // ---------------------------
548
872
  //----------------- PROVIDER AUTH TYPES ------------
873
+ /**
874
+ * Records that an API-key style credential is taking precedence over a
875
+ * still-valid subscription login in `~/.claude/.credentials.json`.
876
+ *
877
+ * Claude Code always prefers `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_API_KEY` over
878
+ * the OAuth login written by `claude /login`, so when both exist every request
879
+ * is billed to the key (pay-as-you-go) rather than the subscription — usually
880
+ * without the user realising it. The Claude auth provider fills this in so the
881
+ * settings UI can say which variable won and where it was found; the fix
882
+ * differs per source (unset the variable and restart the server for
883
+ * `process_env`, edit the `env` block of `~/.claude/settings.json` for
884
+ * `settings_file`). It is never set when the login in the credentials file is
885
+ * missing or expired, because then nothing is being bypassed.
886
+ */
887
+ export type ProviderAuthSubscriptionOverride = {
888
+ /** The environment variable Claude Code is using instead of the login. */
889
+ variable: 'ANTHROPIC_API_KEY' | 'ANTHROPIC_AUTH_TOKEN';
890
+ /** Where that variable was found: the server process env or the settings.json env block. */
891
+ source: 'process_env' | 'settings_file';
892
+ /** Email recorded in the credentials file for the bypassed login, when known. */
893
+ subscriptionEmail: string | null;
894
+ };
895
+
549
896
  /**
550
897
  * Authentication status result returned by provider health checks.
551
898
  *
@@ -559,6 +906,12 @@ export type ProviderAuthStatus = {
559
906
  email: string | null;
560
907
  method: string | null;
561
908
  error?: string;
909
+ /**
910
+ * Present only when `method` is `api_key` and a valid subscription login is
911
+ * being bypassed; see ProviderAuthSubscriptionOverride. Omitted otherwise so
912
+ * existing consumers that never look for it are unaffected.
913
+ */
914
+ subscriptionOverride?: ProviderAuthSubscriptionOverride;
562
915
  };
563
916
 
564
917
  // ---------------------------
@@ -642,12 +995,13 @@ export type WorkspacePathValidationResult = {
642
995
  };
643
996
 
644
997
  // ---------------------------
645
- //----------------- GIT WORKTREE MANAGEMENT ------------
998
+ //----------------- GIT COMMAND EXECUTION AND WORKTREE MANAGEMENT ------------
646
999
  /**
647
1000
  * Captured output of one completed `git` invocation.
648
1001
  *
649
- * Returned by `GitCommandRunner` implementations so worktree services can read
650
- * both streams without caring about process plumbing.
1002
+ * Returned by `GitCommandRunner` and `GitProcessRunner` implementations so the
1003
+ * git and worktree services can read both streams without caring about
1004
+ * process plumbing.
651
1005
  */
652
1006
  export type GitCommandResult = {
653
1007
  stdout: string;
@@ -664,6 +1018,20 @@ export type GitCommandResult = {
664
1018
  */
665
1019
  export type GitCommandRunner = (args: string[], cwd: string) => Promise<GitCommandResult>;
666
1020
 
1021
+ /**
1022
+ * Executes `command args...` inside `options.cwd` and resolves with the captured output.
1023
+ *
1024
+ * This is the `spawnAsync` shape the Git routes module injects into its typed
1025
+ * services (branch deletion, branch compare) so their tests can substitute a
1026
+ * fake runner. Like `GitCommandRunner`, the promise must reject on a non-zero
1027
+ * exit code, with `stderr` attached to the error when available.
1028
+ */
1029
+ export type GitProcessRunner = (
1030
+ command: string,
1031
+ args: string[],
1032
+ options: { cwd: string },
1033
+ ) => Promise<GitCommandResult>;
1034
+
667
1035
  /**
668
1036
  * One entry parsed from `git worktree list --porcelain`.
669
1037
  *
@@ -987,6 +1355,13 @@ export type FileTreeProjectGateway = {
987
1355
  export type FileTreeWorkspaceGateway = {
988
1356
  rootPath: string;
989
1357
  validatePath(candidatePath: string): Promise<WorkspacePathValidationResult>;
1358
+ /**
1359
+ * Resolves a path readable outside the workspace root — the system temp
1360
+ * directory and the Claude projects directory — or `null` when it is not
1361
+ * one. Read-only: the write policy is `validatePath` and it does not consult
1362
+ * this.
1363
+ */
1364
+ resolveReadOnlyRootPath(candidatePath: string): Promise<string | null>;
990
1365
  };
991
1366
 
992
1367
  /**