@bryanhu/codexly 0.34.1 → 0.35.0

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 (419) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +3 -0
  3. package/README.zh-CN.md +3 -0
  4. package/dist/{chunk-CX3MHD3W.js → chunk-6TW6YUSL.js} +421 -325
  5. package/dist/{chunk-N244YZAA.js → chunk-BRKY2HKI.js} +23 -1
  6. package/dist/chunk-GBLVWFLZ.js +23 -0
  7. package/dist/{chunk-GTANGQWE.js → chunk-OM52Z4J7.js} +1 -1
  8. package/dist/{chunk-JHTU6235.js → chunk-RGMQBXXC.js} +699 -300
  9. package/dist/cli.js +6 -5
  10. package/dist/client/index.js +61 -12
  11. package/dist/historical-attachment-worker.js +94 -0
  12. package/dist/protocol/index.js +1 -1
  13. package/dist/providers/codex/index.js +3 -2
  14. package/dist/server/index.js +5 -4
  15. package/dist/web/.vite/manifest.json +211 -201
  16. package/dist/web/.vite/manifest.json.br +0 -0
  17. package/dist/web/.vite/manifest.json.gz +0 -0
  18. package/dist/web/assets/{abnfDiagram-N423BO3Z-CIs8hIzJ.js → abnfDiagram-N423BO3Z-DjEUmHES.js} +1 -1
  19. package/dist/web/assets/abnfDiagram-N423BO3Z-DjEUmHES.js.br +0 -0
  20. package/dist/web/assets/abnfDiagram-N423BO3Z-DjEUmHES.js.gz +0 -0
  21. package/dist/web/assets/{agent-settings-panel-nlSHgUSn.js → agent-settings-panel-CuLgzC2n.js} +1 -1
  22. package/dist/web/assets/agent-settings-panel-CuLgzC2n.js.br +0 -0
  23. package/dist/web/assets/agent-settings-panel-CuLgzC2n.js.gz +0 -0
  24. package/dist/web/assets/{architectureDiagram-T3A2C74G-Bs3ktNP5.js → architectureDiagram-T3A2C74G-DNtnW8Fq.js} +1 -1
  25. package/dist/web/assets/architectureDiagram-T3A2C74G-DNtnW8Fq.js.br +0 -0
  26. package/dist/web/assets/architectureDiagram-T3A2C74G-DNtnW8Fq.js.gz +0 -0
  27. package/dist/web/assets/{background-image-picker-qVC2tyE3.js → background-image-picker-D4xlUwrb.js} +1 -1
  28. package/dist/web/assets/background-image-picker-D4xlUwrb.js.br +0 -0
  29. package/dist/web/assets/background-image-picker-D4xlUwrb.js.gz +0 -0
  30. package/dist/web/assets/{chunk-5RXB4S5H-CZZnhtaV.js → chunk-5RXB4S5H-BDaXxnei.js} +1 -1
  31. package/dist/web/assets/chunk-5RXB4S5H-BDaXxnei.js.br +0 -0
  32. package/dist/web/assets/chunk-5RXB4S5H-BDaXxnei.js.gz +0 -0
  33. package/dist/web/assets/{chunk-6Q2QTUOP-F3pSVbiC.js → chunk-6Q2QTUOP-BcTojajm.js} +1 -1
  34. package/dist/web/assets/chunk-6Q2QTUOP-BcTojajm.js.br +0 -0
  35. package/dist/web/assets/chunk-6Q2QTUOP-BcTojajm.js.gz +0 -0
  36. package/dist/web/assets/{chunk-GF5L2VYU-DtEOvQdn.js → chunk-GF5L2VYU-XelwAXnk.js} +1 -1
  37. package/dist/web/assets/chunk-GF5L2VYU-XelwAXnk.js.br +0 -0
  38. package/dist/web/assets/chunk-GF5L2VYU-XelwAXnk.js.gz +0 -0
  39. package/dist/web/assets/{chunk-JQJVKLGR-BHL4KhjZ.js → chunk-JQJVKLGR-Cyok4-2b.js} +1 -1
  40. package/dist/web/assets/chunk-JQJVKLGR-Cyok4-2b.js.br +0 -0
  41. package/dist/web/assets/chunk-JQJVKLGR-Cyok4-2b.js.gz +0 -0
  42. package/dist/web/assets/{classDiagram-JCYQIIEL-CVbDkB9M.js → classDiagram-JCYQIIEL-B9HBTIG7.js} +1 -1
  43. package/dist/web/assets/classDiagram-JCYQIIEL-B9HBTIG7.js.br +0 -0
  44. package/dist/web/assets/classDiagram-JCYQIIEL-B9HBTIG7.js.gz +0 -0
  45. package/dist/web/assets/{classDiagram-v2-OCEON4UE-CVbDkB9M.js → classDiagram-v2-OCEON4UE-B9HBTIG7.js} +1 -1
  46. package/dist/web/assets/classDiagram-v2-OCEON4UE-B9HBTIG7.js.br +0 -0
  47. package/dist/web/assets/classDiagram-v2-OCEON4UE-B9HBTIG7.js.gz +0 -0
  48. package/dist/web/assets/code-highlighter-BDJkbu1d.js +3 -0
  49. package/dist/web/assets/code-highlighter-BDJkbu1d.js.br +0 -0
  50. package/dist/web/assets/code-highlighter-BDJkbu1d.js.gz +0 -0
  51. package/dist/web/assets/{commit-settings-panel-2rAqVa_3.js → commit-settings-panel-j2yqctr_.js} +1 -1
  52. package/dist/web/assets/commit-settings-panel-j2yqctr_.js.br +0 -0
  53. package/dist/web/assets/commit-settings-panel-j2yqctr_.js.gz +0 -0
  54. package/dist/web/assets/{cynefinDiagram-MW4NZA55-a8_N7W-y.js → cynefinDiagram-MW4NZA55-D9tIBEvv.js} +1 -1
  55. package/dist/web/assets/cynefinDiagram-MW4NZA55-D9tIBEvv.js.br +0 -0
  56. package/dist/web/assets/cynefinDiagram-MW4NZA55-D9tIBEvv.js.gz +0 -0
  57. package/dist/web/assets/{diagram-7IWD3JNH-B9Lkv0en.js → diagram-7IWD3JNH-BfnXF08-.js} +1 -1
  58. package/dist/web/assets/diagram-7IWD3JNH-BfnXF08-.js.br +0 -0
  59. package/dist/web/assets/diagram-7IWD3JNH-BfnXF08-.js.gz +0 -0
  60. package/dist/web/assets/{diagram-LBJQPF4R-CL0t6Ia0.js → diagram-LBJQPF4R-BlYQtbyl.js} +1 -1
  61. package/dist/web/assets/diagram-LBJQPF4R-BlYQtbyl.js.br +0 -0
  62. package/dist/web/assets/diagram-LBJQPF4R-BlYQtbyl.js.gz +0 -0
  63. package/dist/web/assets/{diagram-Q27KOJAE-D7QB_48L.js → diagram-Q27KOJAE-CDWObxjb.js} +1 -1
  64. package/dist/web/assets/diagram-Q27KOJAE-CDWObxjb.js.br +0 -0
  65. package/dist/web/assets/diagram-Q27KOJAE-CDWObxjb.js.gz +0 -0
  66. package/dist/web/assets/{diagram-UB23O5K3-DV58iDyq.js → diagram-UB23O5K3-DJnddvpy.js} +1 -1
  67. package/dist/web/assets/diagram-UB23O5K3-DJnddvpy.js.br +0 -0
  68. package/dist/web/assets/diagram-UB23O5K3-DJnddvpy.js.gz +0 -0
  69. package/dist/web/assets/{dist-jnof4ZZu.js → dist-Ci1kbFbB.js} +1 -1
  70. package/dist/web/assets/dist-Ci1kbFbB.js.br +0 -0
  71. package/dist/web/assets/dist-Ci1kbFbB.js.gz +0 -0
  72. package/dist/web/assets/{ebnfDiagram-BXEA7PRR-C54Dd_kV.js → ebnfDiagram-BXEA7PRR-D_b18zMS.js} +1 -1
  73. package/dist/web/assets/ebnfDiagram-BXEA7PRR-D_b18zMS.js.br +0 -0
  74. package/dist/web/assets/ebnfDiagram-BXEA7PRR-D_b18zMS.js.gz +0 -0
  75. package/dist/web/assets/{erDiagram-JOGREHBK-B83NMJhw.js → erDiagram-JOGREHBK-BOKR1NS3.js} +1 -1
  76. package/dist/web/assets/erDiagram-JOGREHBK-BOKR1NS3.js.br +0 -0
  77. package/dist/web/assets/erDiagram-JOGREHBK-BOKR1NS3.js.gz +0 -0
  78. package/dist/web/assets/file-review-dialog-DvgO1Ae8.js +2 -0
  79. package/dist/web/assets/file-review-dialog-DvgO1Ae8.js.br +0 -0
  80. package/dist/web/assets/file-review-dialog-DvgO1Ae8.js.gz +0 -0
  81. package/dist/web/assets/{flowDiagram-UKHOOZJN-4x6NyWk2.js → flowDiagram-UKHOOZJN-CEamRwMR.js} +1 -1
  82. package/dist/web/assets/flowDiagram-UKHOOZJN-CEamRwMR.js.br +0 -0
  83. package/dist/web/assets/flowDiagram-UKHOOZJN-CEamRwMR.js.gz +0 -0
  84. package/dist/web/assets/git-commit-review-D5ge3jwI.js +2 -0
  85. package/dist/web/assets/git-commit-review-D5ge3jwI.js.br +0 -0
  86. package/dist/web/assets/git-commit-review-D5ge3jwI.js.gz +0 -0
  87. package/dist/web/assets/git-history-panel-DsGqR_Zc.js +1 -0
  88. package/dist/web/assets/git-history-panel-DsGqR_Zc.js.br +0 -0
  89. package/dist/web/assets/git-history-panel-DsGqR_Zc.js.gz +0 -0
  90. package/dist/web/assets/global-search-dialog-JzDBjqX4.js +2 -0
  91. package/dist/web/assets/global-search-dialog-JzDBjqX4.js.br +0 -0
  92. package/dist/web/assets/global-search-dialog-JzDBjqX4.js.gz +0 -0
  93. package/dist/web/assets/{global-settings-about-QnPZzZuN.js → global-settings-about-CULXi1Dn.js} +1 -1
  94. package/dist/web/assets/global-settings-about-CULXi1Dn.js.br +0 -0
  95. package/dist/web/assets/global-settings-about-CULXi1Dn.js.gz +0 -0
  96. package/dist/web/assets/{global-settings-page-DYYJnyg0.js → global-settings-page-AK_j6aZC.js} +2 -2
  97. package/dist/web/assets/global-settings-page-AK_j6aZC.js.br +0 -0
  98. package/dist/web/assets/global-settings-page-AK_j6aZC.js.gz +0 -0
  99. package/dist/web/assets/{global-settings-pets-Bx1MItgn.js → global-settings-pets-hPG36aUL.js} +1 -1
  100. package/dist/web/assets/global-settings-pets-hPG36aUL.js.br +0 -0
  101. package/dist/web/assets/global-settings-pets-hPG36aUL.js.gz +0 -0
  102. package/dist/web/assets/{highlighted-body-OFNGDK62-DUyZcQSF.js → highlighted-body-OFNGDK62-CoO9fhim.js} +1 -1
  103. package/dist/web/assets/highlighted-body-OFNGDK62-CoO9fhim.js.br +0 -0
  104. package/dist/web/assets/highlighted-body-OFNGDK62-CoO9fhim.js.gz +0 -0
  105. package/dist/web/assets/{history-task-timeline-7DRGPm6t.js → history-task-timeline-CQphWf0m.js} +1 -1
  106. package/dist/web/assets/history-task-timeline-CQphWf0m.js.br +0 -0
  107. package/dist/web/assets/history-task-timeline-CQphWf0m.js.gz +0 -0
  108. package/dist/web/assets/{image-preview-DivFRWxv.js → image-preview-Dtx8uVmp.js} +2 -2
  109. package/dist/web/assets/image-preview-Dtx8uVmp.js.br +0 -0
  110. package/dist/web/assets/image-preview-Dtx8uVmp.js.gz +0 -0
  111. package/dist/web/assets/{image-preview-content-SHlFPatX.js → image-preview-content-zLsEpLCA.js} +2 -2
  112. package/dist/web/assets/image-preview-content-zLsEpLCA.js.br +0 -0
  113. package/dist/web/assets/image-preview-content-zLsEpLCA.js.gz +0 -0
  114. package/dist/web/assets/index-BUv6KmcO.css +2 -0
  115. package/dist/web/assets/index-BUv6KmcO.css.br +0 -0
  116. package/dist/web/assets/index-BUv6KmcO.css.gz +0 -0
  117. package/dist/web/assets/index-DR8WqP5v.js +4 -0
  118. package/dist/web/assets/index-DR8WqP5v.js.br +0 -0
  119. package/dist/web/assets/index-DR8WqP5v.js.gz +0 -0
  120. package/dist/web/assets/{infoDiagram-6WML65LV-Dudzuljd.js → infoDiagram-6WML65LV-DegAUKx4.js} +1 -1
  121. package/dist/web/assets/infoDiagram-6WML65LV-DegAUKx4.js.br +0 -0
  122. package/dist/web/assets/infoDiagram-6WML65LV-DegAUKx4.js.gz +0 -0
  123. package/dist/web/assets/{initial-deps-CjThEvcM.js → initial-deps-Be-R---T.js} +1 -1
  124. package/dist/web/assets/initial-deps-Be-R---T.js.br +0 -0
  125. package/dist/web/assets/initial-deps-Be-R---T.js.gz +0 -0
  126. package/dist/web/assets/initial-deps-DRuEePWq.js +2 -0
  127. package/dist/web/assets/initial-deps-DRuEePWq.js.br +0 -0
  128. package/dist/web/assets/initial-deps-DRuEePWq.js.gz +0 -0
  129. package/dist/web/assets/{installed-skills-pane-xlfIyXj3.js → installed-skills-pane-DBJ_KuXN.js} +1 -1
  130. package/dist/web/assets/installed-skills-pane-DBJ_KuXN.js.br +0 -0
  131. package/dist/web/assets/installed-skills-pane-DBJ_KuXN.js.gz +0 -0
  132. package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-DL-EqtUw.js → ishikawaDiagram-WSZJBQD7-CcWhd8w9.js} +1 -1
  133. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CcWhd8w9.js.br +0 -0
  134. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CcWhd8w9.js.gz +0 -0
  135. package/dist/web/assets/{kanban-definition-27J2QSJJ-C2eEzeXr.js → kanban-definition-27J2QSJJ-DEkge27F.js} +1 -1
  136. package/dist/web/assets/kanban-definition-27J2QSJJ-DEkge27F.js.br +0 -0
  137. package/dist/web/assets/kanban-definition-27J2QSJJ-DEkge27F.js.gz +0 -0
  138. package/dist/web/assets/lazy-message-response-3j-D3CVS.js +2 -0
  139. package/dist/web/assets/lazy-message-response-3j-D3CVS.js.br +0 -0
  140. package/dist/web/assets/lazy-message-response-3j-D3CVS.js.gz +0 -0
  141. package/dist/web/assets/markdown-finalization.worker-DzLgTkf3.js +65 -0
  142. package/dist/web/assets/markdown-finalization.worker-DzLgTkf3.js.br +0 -0
  143. package/dist/web/assets/markdown-finalization.worker-DzLgTkf3.js.gz +0 -0
  144. package/dist/web/assets/{mcp-management-pane-DkGnQLeq.js → mcp-management-pane-16qr0aVZ.js} +1 -1
  145. package/dist/web/assets/mcp-management-pane-16qr0aVZ.js.br +0 -0
  146. package/dist/web/assets/mcp-management-pane-16qr0aVZ.js.gz +0 -0
  147. package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js +1 -0
  148. package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js.br +0 -0
  149. package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js.gz +0 -0
  150. package/dist/web/assets/{message-response-Cmz2Diu3.js → message-response-DWYIVlqg.js} +74 -74
  151. package/dist/web/assets/message-response-DWYIVlqg.js.br +0 -0
  152. package/dist/web/assets/message-response-DWYIVlqg.js.gz +0 -0
  153. package/dist/web/assets/{mindmap-definition-FAOFIHXS-BYjrCygr.js → mindmap-definition-FAOFIHXS-DubrGaue.js} +1 -1
  154. package/dist/web/assets/mindmap-definition-FAOFIHXS-DubrGaue.js.br +0 -0
  155. package/dist/web/assets/mindmap-definition-FAOFIHXS-DubrGaue.js.gz +0 -0
  156. package/dist/web/assets/{official-plugins-pane-DAdYsWfC.js → official-plugins-pane-vADxh_le.js} +1 -1
  157. package/dist/web/assets/official-plugins-pane-vADxh_le.js.br +0 -0
  158. package/dist/web/assets/official-plugins-pane-vADxh_le.js.gz +0 -0
  159. package/dist/web/assets/{patch-diff-viewer-xS0oLx5O.js → patch-diff-viewer-C5hjChAK.js} +3 -3
  160. package/dist/web/assets/patch-diff-viewer-C5hjChAK.js.br +0 -0
  161. package/dist/web/assets/patch-diff-viewer-C5hjChAK.js.gz +0 -0
  162. package/dist/web/assets/pdf-preview-BG-XpATo.js +3 -0
  163. package/dist/web/assets/pdf-preview-BG-XpATo.js.br +0 -0
  164. package/dist/web/assets/pdf-preview-BG-XpATo.js.gz +0 -0
  165. package/dist/web/assets/{pegDiagram-VL7TDLO6-CtYRxL4U.js → pegDiagram-VL7TDLO6-CJodWN8I.js} +1 -1
  166. package/dist/web/assets/pegDiagram-VL7TDLO6-CJodWN8I.js.br +0 -0
  167. package/dist/web/assets/pegDiagram-VL7TDLO6-CJodWN8I.js.gz +0 -0
  168. package/dist/web/assets/{personalization-settings-panel-CT3SQ4Vu.js → personalization-settings-panel-Br7qXDQ7.js} +1 -1
  169. package/dist/web/assets/personalization-settings-panel-Br7qXDQ7.js.br +0 -0
  170. package/dist/web/assets/personalization-settings-panel-Br7qXDQ7.js.gz +0 -0
  171. package/dist/web/assets/{pieDiagram-7S7Q4E2Y-Bdq2vyip.js → pieDiagram-7S7Q4E2Y-CHATPeJh.js} +1 -1
  172. package/dist/web/assets/pieDiagram-7S7Q4E2Y-CHATPeJh.js.br +0 -0
  173. package/dist/web/assets/pieDiagram-7S7Q4E2Y-CHATPeJh.js.gz +0 -0
  174. package/dist/web/assets/{project-file-popup-page-zPj3Gecj.js → project-file-popup-page-CmNJLTSV.js} +1 -1
  175. package/dist/web/assets/project-file-popup-page-CmNJLTSV.js.br +0 -0
  176. package/dist/web/assets/project-file-popup-page-CmNJLTSV.js.gz +0 -0
  177. package/dist/web/assets/project-source-panel-ze7jsbMy.js +2 -0
  178. package/dist/web/assets/project-source-panel-ze7jsbMy.js.br +0 -0
  179. package/dist/web/assets/project-source-panel-ze7jsbMy.js.gz +0 -0
  180. package/dist/web/assets/{prompt-input-HHHMHdzj.js → prompt-input-Brfimssc.js} +1 -1
  181. package/dist/web/assets/prompt-input-Brfimssc.js.br +0 -0
  182. package/dist/web/assets/prompt-input-Brfimssc.js.gz +0 -0
  183. package/dist/web/assets/{railroadDiagram-AXF67PYL-C_xKQjH6.js → railroadDiagram-AXF67PYL-BOP9pMNb.js} +1 -1
  184. package/dist/web/assets/railroadDiagram-AXF67PYL-BOP9pMNb.js.br +0 -0
  185. package/dist/web/assets/railroadDiagram-AXF67PYL-BOP9pMNb.js.gz +0 -0
  186. package/dist/web/assets/{requirementDiagram-LRYGKXZP-B9-6SM38.js → requirementDiagram-LRYGKXZP-CG8KWt_j.js} +1 -1
  187. package/dist/web/assets/requirementDiagram-LRYGKXZP-CG8KWt_j.js.br +0 -0
  188. package/dist/web/assets/requirementDiagram-LRYGKXZP-CG8KWt_j.js.gz +0 -0
  189. package/dist/web/assets/{scheduled-task-date-time-picker-DtFk2PIk.js → scheduled-task-date-time-picker-DeOtns9O.js} +1 -1
  190. package/dist/web/assets/scheduled-task-date-time-picker-DeOtns9O.js.br +0 -0
  191. package/dist/web/assets/scheduled-task-date-time-picker-DeOtns9O.js.gz +0 -0
  192. package/dist/web/assets/{scheduled-task-floating-ui~scheduled-task-date-time-picker-C9XdROQX.js → scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js} +1 -1
  193. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js.br +0 -0
  194. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js.gz +0 -0
  195. package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js +2 -0
  196. package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js.br +0 -0
  197. package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js.gz +0 -0
  198. package/dist/web/assets/{sequenceDiagram-SI44F4Z6-DS13cFp5.js → sequenceDiagram-SI44F4Z6-DbZoTul2.js} +1 -1
  199. package/dist/web/assets/sequenceDiagram-SI44F4Z6-DbZoTul2.js.br +0 -0
  200. package/dist/web/assets/sequenceDiagram-SI44F4Z6-DbZoTul2.js.gz +0 -0
  201. package/dist/web/assets/{sheet-Byg2gkAE.js → sheet-B9MDuGoF.js} +1 -1
  202. package/dist/web/assets/sheet-B9MDuGoF.js.br +0 -0
  203. package/dist/web/assets/sheet-B9MDuGoF.js.gz +0 -0
  204. package/dist/web/assets/{shiki-bundle-CLewxArG.js → shiki-bundle-BlbGsyMZ.js} +1 -1
  205. package/dist/web/assets/shiki-bundle-BlbGsyMZ.js.br +0 -0
  206. package/dist/web/assets/shiki-bundle-BlbGsyMZ.js.gz +0 -0
  207. package/dist/web/assets/skills-market-container-CWO3CeMr.js +2 -0
  208. package/dist/web/assets/skills-market-container-CWO3CeMr.js.br +0 -0
  209. package/dist/web/assets/skills-market-container-CWO3CeMr.js.gz +0 -0
  210. package/dist/web/assets/split-workspace-menu-content-rImPq6wj.js +1 -0
  211. package/dist/web/assets/split-workspace-menu-content-rImPq6wj.js.br +0 -0
  212. package/dist/web/assets/split-workspace-menu-content-rImPq6wj.js.gz +0 -0
  213. package/dist/web/assets/{stateDiagram-OKZ733FA-Dc16lzBR.js → stateDiagram-OKZ733FA-BBZnBYr0.js} +1 -1
  214. package/dist/web/assets/stateDiagram-OKZ733FA-BBZnBYr0.js.br +0 -0
  215. package/dist/web/assets/stateDiagram-OKZ733FA-BBZnBYr0.js.gz +0 -0
  216. package/dist/web/assets/{stateDiagram-v2-UEYNNEHI-DMpPTWm4.js → stateDiagram-v2-UEYNNEHI-DrsX6D2d.js} +1 -1
  217. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DrsX6D2d.js.br +1 -0
  218. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DrsX6D2d.js.gz +0 -0
  219. package/dist/web/assets/{swimlanesDiagram-ULZ7WXOC-BFGAe9px.js → swimlanesDiagram-ULZ7WXOC-RILHYzJF.js} +1 -1
  220. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-RILHYzJF.js.br +0 -0
  221. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-RILHYzJF.js.gz +0 -0
  222. package/dist/web/assets/{third-party-marketplace-pane-Bt9mm_bV.js → third-party-marketplace-pane-DKWMNoa3.js} +1 -1
  223. package/dist/web/assets/third-party-marketplace-pane-DKWMNoa3.js.br +0 -0
  224. package/dist/web/assets/third-party-marketplace-pane-DKWMNoa3.js.gz +0 -0
  225. package/dist/web/assets/{timeline-definition-Z64GVDOM-B-ybp4wL.js → timeline-definition-Z64GVDOM-BQMes8Ld.js} +1 -1
  226. package/dist/web/assets/timeline-definition-Z64GVDOM-BQMes8Ld.js.br +0 -0
  227. package/dist/web/assets/timeline-definition-Z64GVDOM-BQMes8Ld.js.gz +0 -0
  228. package/dist/web/assets/{vennDiagram-T6HMQDX7-Du4Kq6DY.js → vennDiagram-T6HMQDX7-qBMuOWPn.js} +1 -1
  229. package/dist/web/assets/vennDiagram-T6HMQDX7-qBMuOWPn.js.br +0 -0
  230. package/dist/web/assets/vennDiagram-T6HMQDX7-qBMuOWPn.js.gz +0 -0
  231. package/dist/web/assets/{wardleyDiagram-T6FBY63Y-Dn8N9v_V.js → wardleyDiagram-T6FBY63Y-BXVFrJeX.js} +1 -1
  232. package/dist/web/assets/wardleyDiagram-T6FBY63Y-BXVFrJeX.js.br +0 -0
  233. package/dist/web/assets/wardleyDiagram-T6FBY63Y-BXVFrJeX.js.gz +0 -0
  234. package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js +2 -0
  235. package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js.br +0 -0
  236. package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js.gz +0 -0
  237. package/dist/web/assets/{workbench-pet-canvas-CEcRG47k.js → workbench-pet-canvas-BM6S31jL.js} +1 -1
  238. package/dist/web/assets/workbench-pet-canvas-BM6S31jL.js.br +0 -0
  239. package/dist/web/assets/workbench-pet-canvas-BM6S31jL.js.gz +0 -0
  240. package/dist/web/assets/workbench-shell-DEH5FG9a.js +14 -0
  241. package/dist/web/assets/workbench-shell-DEH5FG9a.js.br +0 -0
  242. package/dist/web/assets/workbench-shell-DEH5FG9a.js.gz +0 -0
  243. package/dist/web/assets/{xychartDiagram-ELKLHX3M-BUDqP7n9.js → xychartDiagram-ELKLHX3M-DT2u1V83.js} +1 -1
  244. package/dist/web/assets/xychartDiagram-ELKLHX3M-DT2u1V83.js.br +0 -0
  245. package/dist/web/assets/xychartDiagram-ELKLHX3M-DT2u1V83.js.gz +0 -0
  246. package/dist/web/index.html +5 -6
  247. package/dist/web/index.html.br +0 -0
  248. package/dist/web/index.html.gz +0 -0
  249. package/package.json +1 -1
  250. package/dist/web/assets/abnfDiagram-N423BO3Z-CIs8hIzJ.js.br +0 -0
  251. package/dist/web/assets/abnfDiagram-N423BO3Z-CIs8hIzJ.js.gz +0 -0
  252. package/dist/web/assets/agent-settings-panel-nlSHgUSn.js.br +0 -0
  253. package/dist/web/assets/agent-settings-panel-nlSHgUSn.js.gz +0 -0
  254. package/dist/web/assets/architectureDiagram-T3A2C74G-Bs3ktNP5.js.br +0 -0
  255. package/dist/web/assets/architectureDiagram-T3A2C74G-Bs3ktNP5.js.gz +0 -0
  256. package/dist/web/assets/background-image-picker-qVC2tyE3.js.br +0 -0
  257. package/dist/web/assets/background-image-picker-qVC2tyE3.js.gz +0 -0
  258. package/dist/web/assets/chunk-5RXB4S5H-CZZnhtaV.js.br +0 -0
  259. package/dist/web/assets/chunk-5RXB4S5H-CZZnhtaV.js.gz +0 -0
  260. package/dist/web/assets/chunk-6Q2QTUOP-F3pSVbiC.js.br +0 -0
  261. package/dist/web/assets/chunk-6Q2QTUOP-F3pSVbiC.js.gz +0 -0
  262. package/dist/web/assets/chunk-GF5L2VYU-DtEOvQdn.js.br +0 -0
  263. package/dist/web/assets/chunk-GF5L2VYU-DtEOvQdn.js.gz +0 -0
  264. package/dist/web/assets/chunk-JQJVKLGR-BHL4KhjZ.js.br +0 -0
  265. package/dist/web/assets/chunk-JQJVKLGR-BHL4KhjZ.js.gz +0 -0
  266. package/dist/web/assets/classDiagram-JCYQIIEL-CVbDkB9M.js.br +0 -0
  267. package/dist/web/assets/classDiagram-JCYQIIEL-CVbDkB9M.js.gz +0 -0
  268. package/dist/web/assets/classDiagram-v2-OCEON4UE-CVbDkB9M.js.br +0 -0
  269. package/dist/web/assets/classDiagram-v2-OCEON4UE-CVbDkB9M.js.gz +0 -0
  270. package/dist/web/assets/code-highlighter-DRXtndXt.js +0 -1
  271. package/dist/web/assets/code-highlighter-DRXtndXt.js.br +0 -0
  272. package/dist/web/assets/code-highlighter-DRXtndXt.js.gz +0 -0
  273. package/dist/web/assets/commit-settings-panel-2rAqVa_3.js.br +0 -0
  274. package/dist/web/assets/commit-settings-panel-2rAqVa_3.js.gz +0 -0
  275. package/dist/web/assets/cynefinDiagram-MW4NZA55-a8_N7W-y.js.br +0 -0
  276. package/dist/web/assets/cynefinDiagram-MW4NZA55-a8_N7W-y.js.gz +0 -0
  277. package/dist/web/assets/diagram-7IWD3JNH-B9Lkv0en.js.br +0 -0
  278. package/dist/web/assets/diagram-7IWD3JNH-B9Lkv0en.js.gz +0 -0
  279. package/dist/web/assets/diagram-LBJQPF4R-CL0t6Ia0.js.br +0 -0
  280. package/dist/web/assets/diagram-LBJQPF4R-CL0t6Ia0.js.gz +0 -0
  281. package/dist/web/assets/diagram-Q27KOJAE-D7QB_48L.js.br +0 -0
  282. package/dist/web/assets/diagram-Q27KOJAE-D7QB_48L.js.gz +0 -0
  283. package/dist/web/assets/diagram-UB23O5K3-DV58iDyq.js.br +0 -0
  284. package/dist/web/assets/diagram-UB23O5K3-DV58iDyq.js.gz +0 -0
  285. package/dist/web/assets/dist-jnof4ZZu.js.br +0 -0
  286. package/dist/web/assets/dist-jnof4ZZu.js.gz +0 -0
  287. package/dist/web/assets/ebnfDiagram-BXEA7PRR-C54Dd_kV.js.br +0 -0
  288. package/dist/web/assets/ebnfDiagram-BXEA7PRR-C54Dd_kV.js.gz +0 -0
  289. package/dist/web/assets/erDiagram-JOGREHBK-B83NMJhw.js.br +0 -0
  290. package/dist/web/assets/erDiagram-JOGREHBK-B83NMJhw.js.gz +0 -0
  291. package/dist/web/assets/file-review-dialog-CcxGGOW7.js +0 -2
  292. package/dist/web/assets/file-review-dialog-CcxGGOW7.js.br +0 -0
  293. package/dist/web/assets/file-review-dialog-CcxGGOW7.js.gz +0 -0
  294. package/dist/web/assets/flowDiagram-UKHOOZJN-4x6NyWk2.js.br +0 -2
  295. package/dist/web/assets/flowDiagram-UKHOOZJN-4x6NyWk2.js.gz +0 -0
  296. package/dist/web/assets/git-commit-review-sswj11C9.js +0 -2
  297. package/dist/web/assets/git-commit-review-sswj11C9.js.br +0 -0
  298. package/dist/web/assets/git-commit-review-sswj11C9.js.gz +0 -0
  299. package/dist/web/assets/git-history-panel-rd3E2f9s.js +0 -1
  300. package/dist/web/assets/git-history-panel-rd3E2f9s.js.br +0 -0
  301. package/dist/web/assets/git-history-panel-rd3E2f9s.js.gz +0 -0
  302. package/dist/web/assets/global-search-dialog-PwyNRt1N.js +0 -2
  303. package/dist/web/assets/global-search-dialog-PwyNRt1N.js.br +0 -0
  304. package/dist/web/assets/global-search-dialog-PwyNRt1N.js.gz +0 -0
  305. package/dist/web/assets/global-settings-about-QnPZzZuN.js.br +0 -0
  306. package/dist/web/assets/global-settings-about-QnPZzZuN.js.gz +0 -0
  307. package/dist/web/assets/global-settings-page-DYYJnyg0.js.br +0 -0
  308. package/dist/web/assets/global-settings-page-DYYJnyg0.js.gz +0 -0
  309. package/dist/web/assets/global-settings-pets-Bx1MItgn.js.br +0 -0
  310. package/dist/web/assets/global-settings-pets-Bx1MItgn.js.gz +0 -0
  311. package/dist/web/assets/highlighted-body-OFNGDK62-DUyZcQSF.js.br +0 -0
  312. package/dist/web/assets/highlighted-body-OFNGDK62-DUyZcQSF.js.gz +0 -0
  313. package/dist/web/assets/history-task-timeline-7DRGPm6t.js.br +0 -0
  314. package/dist/web/assets/history-task-timeline-7DRGPm6t.js.gz +0 -0
  315. package/dist/web/assets/image-preview-DivFRWxv.js.br +0 -0
  316. package/dist/web/assets/image-preview-DivFRWxv.js.gz +0 -0
  317. package/dist/web/assets/image-preview-content-SHlFPatX.js.br +0 -0
  318. package/dist/web/assets/image-preview-content-SHlFPatX.js.gz +0 -0
  319. package/dist/web/assets/index-BVD-j9ba.css +0 -2
  320. package/dist/web/assets/index-BVD-j9ba.css.br +0 -0
  321. package/dist/web/assets/index-BVD-j9ba.css.gz +0 -0
  322. package/dist/web/assets/index-C-YUvCZy.js +0 -4
  323. package/dist/web/assets/index-C-YUvCZy.js.br +0 -0
  324. package/dist/web/assets/index-C-YUvCZy.js.gz +0 -0
  325. package/dist/web/assets/infoDiagram-6WML65LV-Dudzuljd.js.br +0 -0
  326. package/dist/web/assets/infoDiagram-6WML65LV-Dudzuljd.js.gz +0 -0
  327. package/dist/web/assets/initial-deps-CANa4ch0.js +0 -2
  328. package/dist/web/assets/initial-deps-CANa4ch0.js.br +0 -0
  329. package/dist/web/assets/initial-deps-CANa4ch0.js.gz +0 -0
  330. package/dist/web/assets/initial-deps-CjThEvcM.js.br +0 -0
  331. package/dist/web/assets/initial-deps-CjThEvcM.js.gz +0 -0
  332. package/dist/web/assets/installed-skills-pane-xlfIyXj3.js.br +0 -0
  333. package/dist/web/assets/installed-skills-pane-xlfIyXj3.js.gz +0 -0
  334. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-DL-EqtUw.js.br +0 -0
  335. package/dist/web/assets/ishikawaDiagram-WSZJBQD7-DL-EqtUw.js.gz +0 -0
  336. package/dist/web/assets/kanban-definition-27J2QSJJ-C2eEzeXr.js.br +0 -0
  337. package/dist/web/assets/kanban-definition-27J2QSJJ-C2eEzeXr.js.gz +0 -0
  338. package/dist/web/assets/lazy-message-response-BHNzFjnC.js +0 -2
  339. package/dist/web/assets/lazy-message-response-BHNzFjnC.js.br +0 -0
  340. package/dist/web/assets/lazy-message-response-BHNzFjnC.js.gz +0 -0
  341. package/dist/web/assets/mcp-management-pane-DkGnQLeq.js.br +0 -0
  342. package/dist/web/assets/mcp-management-pane-DkGnQLeq.js.gz +0 -0
  343. package/dist/web/assets/mermaid-GHXKKRXX-D8qgMyDU.js +0 -1
  344. package/dist/web/assets/mermaid-GHXKKRXX-D8qgMyDU.js.br +0 -0
  345. package/dist/web/assets/mermaid-GHXKKRXX-D8qgMyDU.js.gz +0 -0
  346. package/dist/web/assets/message-response-Cmz2Diu3.js.br +0 -0
  347. package/dist/web/assets/message-response-Cmz2Diu3.js.gz +0 -0
  348. package/dist/web/assets/mindmap-definition-FAOFIHXS-BYjrCygr.js.br +0 -0
  349. package/dist/web/assets/mindmap-definition-FAOFIHXS-BYjrCygr.js.gz +0 -0
  350. package/dist/web/assets/official-plugins-pane-DAdYsWfC.js.br +0 -0
  351. package/dist/web/assets/official-plugins-pane-DAdYsWfC.js.gz +0 -0
  352. package/dist/web/assets/patch-diff-viewer-xS0oLx5O.js.br +0 -0
  353. package/dist/web/assets/patch-diff-viewer-xS0oLx5O.js.gz +0 -0
  354. package/dist/web/assets/pegDiagram-VL7TDLO6-CtYRxL4U.js.br +0 -0
  355. package/dist/web/assets/pegDiagram-VL7TDLO6-CtYRxL4U.js.gz +0 -0
  356. package/dist/web/assets/personalization-settings-panel-CT3SQ4Vu.js.br +0 -0
  357. package/dist/web/assets/personalization-settings-panel-CT3SQ4Vu.js.gz +0 -0
  358. package/dist/web/assets/pieDiagram-7S7Q4E2Y-Bdq2vyip.js.br +0 -0
  359. package/dist/web/assets/pieDiagram-7S7Q4E2Y-Bdq2vyip.js.gz +0 -0
  360. package/dist/web/assets/project-file-popup-page-zPj3Gecj.js.br +0 -0
  361. package/dist/web/assets/project-file-popup-page-zPj3Gecj.js.gz +0 -0
  362. package/dist/web/assets/project-source-panel-DMqwrWYJ.js +0 -3
  363. package/dist/web/assets/project-source-panel-DMqwrWYJ.js.br +0 -0
  364. package/dist/web/assets/project-source-panel-DMqwrWYJ.js.gz +0 -0
  365. package/dist/web/assets/prompt-input-HHHMHdzj.js.br +0 -0
  366. package/dist/web/assets/prompt-input-HHHMHdzj.js.gz +0 -0
  367. package/dist/web/assets/railroadDiagram-AXF67PYL-C_xKQjH6.js.br +0 -0
  368. package/dist/web/assets/railroadDiagram-AXF67PYL-C_xKQjH6.js.gz +0 -0
  369. package/dist/web/assets/requirementDiagram-LRYGKXZP-B9-6SM38.js.br +0 -0
  370. package/dist/web/assets/requirementDiagram-LRYGKXZP-B9-6SM38.js.gz +0 -0
  371. package/dist/web/assets/scheduled-task-date-time-picker-DtFk2PIk.js.br +0 -0
  372. package/dist/web/assets/scheduled-task-date-time-picker-DtFk2PIk.js.gz +0 -0
  373. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-C9XdROQX.js.br +0 -0
  374. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-C9XdROQX.js.gz +0 -0
  375. package/dist/web/assets/scheduled-tasks-container-CkXA7caR.js +0 -2
  376. package/dist/web/assets/scheduled-tasks-container-CkXA7caR.js.br +0 -0
  377. package/dist/web/assets/scheduled-tasks-container-CkXA7caR.js.gz +0 -0
  378. package/dist/web/assets/sequenceDiagram-SI44F4Z6-DS13cFp5.js.br +0 -0
  379. package/dist/web/assets/sequenceDiagram-SI44F4Z6-DS13cFp5.js.gz +0 -0
  380. package/dist/web/assets/sheet-Byg2gkAE.js.br +0 -0
  381. package/dist/web/assets/sheet-Byg2gkAE.js.gz +0 -0
  382. package/dist/web/assets/shiki-bundle-CLewxArG.js.br +0 -3
  383. package/dist/web/assets/shiki-bundle-CLewxArG.js.gz +0 -0
  384. package/dist/web/assets/skills-market-container-BQkCE5hm.js +0 -2
  385. package/dist/web/assets/skills-market-container-BQkCE5hm.js.br +0 -0
  386. package/dist/web/assets/skills-market-container-BQkCE5hm.js.gz +0 -0
  387. package/dist/web/assets/snapshot-memory-BU8oqjvK.js +0 -1
  388. package/dist/web/assets/snapshot-memory-BU8oqjvK.js.br +0 -0
  389. package/dist/web/assets/snapshot-memory-BU8oqjvK.js.gz +0 -0
  390. package/dist/web/assets/split-workspace-menu-content-6G08udT3.js +0 -1
  391. package/dist/web/assets/split-workspace-menu-content-6G08udT3.js.br +0 -0
  392. package/dist/web/assets/split-workspace-menu-content-6G08udT3.js.gz +0 -0
  393. package/dist/web/assets/stateDiagram-OKZ733FA-Dc16lzBR.js.br +0 -0
  394. package/dist/web/assets/stateDiagram-OKZ733FA-Dc16lzBR.js.gz +0 -0
  395. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DMpPTWm4.js.br +0 -0
  396. package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DMpPTWm4.js.gz +0 -0
  397. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-BFGAe9px.js.br +0 -0
  398. package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-BFGAe9px.js.gz +0 -0
  399. package/dist/web/assets/third-party-marketplace-pane-Bt9mm_bV.js.br +0 -0
  400. package/dist/web/assets/third-party-marketplace-pane-Bt9mm_bV.js.gz +0 -0
  401. package/dist/web/assets/timeline-definition-Z64GVDOM-B-ybp4wL.js.br +0 -0
  402. package/dist/web/assets/timeline-definition-Z64GVDOM-B-ybp4wL.js.gz +0 -0
  403. package/dist/web/assets/vennDiagram-T6HMQDX7-Du4Kq6DY.js.br +0 -0
  404. package/dist/web/assets/vennDiagram-T6HMQDX7-Du4Kq6DY.js.gz +0 -0
  405. package/dist/web/assets/wardleyDiagram-T6FBY63Y-Dn8N9v_V.js.br +0 -0
  406. package/dist/web/assets/wardleyDiagram-T6FBY63Y-Dn8N9v_V.js.gz +0 -0
  407. package/dist/web/assets/workbench-inspector-changes-Bz2Q8-Uy.js +0 -2
  408. package/dist/web/assets/workbench-inspector-changes-Bz2Q8-Uy.js.br +0 -0
  409. package/dist/web/assets/workbench-inspector-changes-Bz2Q8-Uy.js.gz +0 -0
  410. package/dist/web/assets/workbench-pet-canvas-CEcRG47k.js.br +0 -0
  411. package/dist/web/assets/workbench-pet-canvas-CEcRG47k.js.gz +0 -0
  412. package/dist/web/assets/workbench-shell-D01RgKwg.js +0 -14
  413. package/dist/web/assets/workbench-shell-D01RgKwg.js.br +0 -0
  414. package/dist/web/assets/workbench-shell-D01RgKwg.js.gz +0 -0
  415. package/dist/web/assets/xychartDiagram-ELKLHX3M-BUDqP7n9.js.br +0 -0
  416. package/dist/web/assets/xychartDiagram-ELKLHX3M-BUDqP7n9.js.gz +0 -0
  417. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~5gghezpc-ClgveiMa.js → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js} +0 -0
  418. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~5gghezpc-ClgveiMa.js.br → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js.br} +0 -0
  419. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~5gghezpc-ClgveiMa.js.gz → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js.gz} +0 -0
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from 'node:module';
2
- import { value_exports } from './chunk-GTANGQWE.js';
3
- import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-JHTU6235.js';
2
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-RGMQBXXC.js';
3
+ import { value_exports } from './chunk-OM52Z4J7.js';
4
4
  import { normalizeCustomModelReasoning, WorkbenchPetProviderError, listTaskCatalog, PendingRequestResolutionError, restoreAsyncQuestionAnswers, deleteArchivedTasks, queryCompletedTasks, CompletedTasksQueryError, submitTask, TaskSubmissionError, collectQuestionGroups, formatQuestionAnswers, ProjectTodoError, saveProjectTodo } from './chunk-REIMOLGX.js';
5
- import { Type, SkillInstallScopeSchema, ScheduledTaskSchema, SubmitTaskResponseSchema, AgentTaskSchema, AsyncQuestionGroupSchema, AnswerAsyncQuestionResultSchema, AgentTurnSchema, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, BingWallpaperCatalogSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, AgentMutationErrorSchema, InstallAppUpdateResponseSchema, InstallAppUpdateRequestSchema, EventStreamMetricsResponseSchema, AgentCapabilitiesSchema, AgentModelPageSchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_TEXT_BYTES, GlobalInstructionsSchema, MemorySettingsSchema, AgentPreferencesSchema, SaveGlobalInstructionsSchema, MemorySettingsUpdateSchema, PersonalizationResetSchema, HistoryCompressionResultSchema, AgentProviderConnectionStatusSchema, StartOfficialProviderLoginResponseSchema, StartOfficialProviderLoginRequestSchema, AgentProviderConnectionMutationResponseSchema, CancelProviderLoginRequestSchema, ConfigureCustomProviderResponseSchema, ConfigureCustomProviderRequestSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetDownloadRequestSchema, ProjectPageSchema, HostFileListingSchema, HostFileQuerySchema, ProjectDirectoryListingSchema, ProjectDirectoryQuerySchema, ProjectOpenCapabilitiesResponseSchema, OpenProjectResponseSchema, ProjectRootQuerySchema, OpenProjectRequestSchema, ReorderProjectsResponseSchema, ReorderProjectsRequestSchema, AgentSkillPageSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AddProjectResponseSchema, AddProjectRequestSchema, RenameProjectResponseSchema, RenameProjectRequestSchema, RemoveProjectResponseSchema, RemoveProjectRequestSchema, PluginReconcileResultSchema, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResponseSchema, OfficialPluginUninstallResponseSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResponseSchema, ScheduledTaskPreviewSchema, ScheduledTaskPreviewRequestSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, TaskSearchPageSchema, TaskSearchQuerySchema, SearchOccurrencesPageSchema, SearchOccurrencesQuerySchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, SubmitTaskRequestSchema, AsyncQuestionPageSchema, AnswerAsyncQuestionResponseSchema, AnswerAsyncQuestionRequestSchema, DismissAsyncQuestionsRequestSchema, ProjectTodoPageSchema, ProjectTodoResponseSchema, ProjectTodoDraftSchema, SaveProjectTodoRequestSchema, DeleteProjectTodoResponseSchema, DeleteProjectTodoRequestSchema, AgentQueuedSubmissionListSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, CODEXLY_USER_AGENT, CreateProjectDirectoryResponseSchema, CreateProjectDirectoryRequestSchema, isValidProjectDirectoryName, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectSourceFileQuerySchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, DeleteArchivedTasksResponseSchema, DeleteArchivedTasksRequestSchema, AgentTaskCatalogSchema, TaskCatalogQuerySchema, CompletedTasksPageSchema, CompletedTasksQuerySchema, UpdateTaskSettingsAndDefaultsResponseSchema, UpdateTaskSettingsAndDefaultsRequestSchema, NavigableAgentTaskResponseSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, ProjectTodoSchema, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, CreateTaskWorktreeResponseSchema, CreateProjectWorktreeRequestSchema, CreateProjectWorktreeResponseSchema, ProjectWorktreeMutationResponseSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE, ProjectTextFileRevisionSchema, ProjectTextFileSchema, SaveProjectTextFileResponseSchema, SaveProjectTextFileRequestSchema, MAX_TEXT_FILE_BYTES } from './chunk-N244YZAA.js';
5
+ import { Type, SkillInstallScopeSchema, ScheduledTaskSchema, SubmitTaskResponseSchema, AgentTaskSchema, AsyncQuestionGroupSchema, AnswerAsyncQuestionResultSchema, AgentTurnSchema, MAX_AGENT_EVENT_BYTES, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, BingWallpaperCatalogSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, AgentMutationErrorSchema, InstallAppUpdateResponseSchema, InstallAppUpdateRequestSchema, EventStreamMetricsResponseSchema, AgentCapabilitiesSchema, AgentModelPageSchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_TEXT_BYTES, GlobalInstructionsSchema, MemorySettingsSchema, AgentPreferencesSchema, SaveGlobalInstructionsSchema, MemorySettingsUpdateSchema, PersonalizationResetSchema, HistoryCompressionResultSchema, AgentProviderConnectionStatusSchema, StartOfficialProviderLoginResponseSchema, StartOfficialProviderLoginRequestSchema, AgentProviderConnectionMutationResponseSchema, CancelProviderLoginRequestSchema, ConfigureCustomProviderResponseSchema, ConfigureCustomProviderRequestSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetDownloadRequestSchema, ProjectPageSchema, HostFileListingSchema, HostFileQuerySchema, ProjectDirectoryListingSchema, ProjectDirectoryQuerySchema, ProjectOpenCapabilitiesResponseSchema, OpenProjectResponseSchema, ProjectRootQuerySchema, OpenProjectRequestSchema, ReorderProjectsResponseSchema, ReorderProjectsRequestSchema, AgentSkillPageSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AddProjectResponseSchema, AddProjectRequestSchema, RenameProjectResponseSchema, RenameProjectRequestSchema, RemoveProjectResponseSchema, RemoveProjectRequestSchema, PluginReconcileResultSchema, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResponseSchema, OfficialPluginUninstallResponseSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResponseSchema, ScheduledTaskPreviewSchema, ScheduledTaskPreviewRequestSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, TaskSearchPageSchema, TaskSearchQuerySchema, SearchOccurrencesPageSchema, SearchOccurrencesQuerySchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, SubmitTaskRequestSchema, AsyncQuestionPageSchema, AnswerAsyncQuestionResponseSchema, AnswerAsyncQuestionRequestSchema, DismissAsyncQuestionsRequestSchema, ProjectTodoPageSchema, ProjectTodoResponseSchema, ProjectTodoDraftSchema, SaveProjectTodoRequestSchema, DeleteProjectTodoResponseSchema, DeleteProjectTodoRequestSchema, AgentQueuedSubmissionListSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, CODEXLY_USER_AGENT, CreateProjectDirectoryResponseSchema, CreateProjectDirectoryRequestSchema, isValidProjectDirectoryName, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectSourceFileQuerySchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, DeleteArchivedTasksResponseSchema, DeleteArchivedTasksRequestSchema, AgentTaskCatalogSchema, TaskCatalogQuerySchema, CompletedTasksPageSchema, CompletedTasksQuerySchema, UpdateTaskSettingsAndDefaultsResponseSchema, UpdateTaskSettingsAndDefaultsRequestSchema, NavigableAgentTaskResponseSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, ProjectTodoSchema, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, CreateTaskWorktreeResponseSchema, CreateProjectWorktreeRequestSchema, CreateProjectWorktreeResponseSchema, ProjectWorktreeMutationResponseSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, ProjectTextFileRevisionSchema, ProjectTextFileSchema, SaveProjectTextFileResponseSchema, SaveProjectTextFileRequestSchema, MAX_TEXT_FILE_BYTES, MAX_EVENT_BATCH_BYTES, MAX_EVENT_BATCH_SIZE } from './chunk-BRKY2HKI.js';
6
6
  import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
7
7
  import { Buffer as Buffer$1 } from 'buffer';
8
8
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'crypto';
@@ -56184,6 +56184,9 @@ var require_websocket2 = __commonJS({
56184
56184
  });
56185
56185
  var EVENT_SOCKET_SOFT_BACKPRESSURE_BYTES = 256 * 1024;
56186
56186
  var EVENT_SOCKET_HARD_BACKPRESSURE_BYTES = 1024 * 1024;
56187
+ var EVENT_BATCH_PREFIX = '{"events":[';
56188
+ var EVENT_BATCH_SUFFIX = '],"type":"events.batch","version":3}';
56189
+ var EVENT_BATCH_ENVELOPE_BYTES = EVENT_BATCH_PREFIX.length + EVENT_BATCH_SUFFIX.length;
56187
56190
  var serializedMessages = /* @__PURE__ */ new WeakMap();
56188
56191
  var serializedEventBatches = /* @__PURE__ */ new WeakMap();
56189
56192
  function serializeEventStreamValue(value) {
@@ -56209,7 +56212,25 @@ function hasSameEvents(cachedEvents, events, offset, end) {
56209
56212
  return cachedEvents.every((event, index) => event === events[offset + index]);
56210
56213
  }
56211
56214
  function serializeEventBatch(events, offset) {
56212
- const end = Math.min(offset + MAX_EVENT_BATCH_SIZE, events.length);
56215
+ const maxEnd = Math.min(offset + MAX_EVENT_BATCH_SIZE, events.length);
56216
+ let end = offset;
56217
+ let byteLength = EVENT_BATCH_ENVELOPE_BYTES;
56218
+ const serializedEvents = [];
56219
+ for (; end < maxEnd; end += 1) {
56220
+ const agentEvent = events[end];
56221
+ if (agentEvent === void 0) {
56222
+ throw new RangeError("Event batch must contain defined events");
56223
+ }
56224
+ const event = serializeEventStreamValue(agentEvent);
56225
+ if (event.byteLength > MAX_AGENT_EVENT_BYTES) {
56226
+ if (end === offset) return void 0;
56227
+ break;
56228
+ }
56229
+ const nextByteLength = byteLength + event.byteLength + (end === offset ? 0 : 1);
56230
+ if (nextByteLength > MAX_EVENT_BATCH_BYTES) break;
56231
+ byteLength = nextByteLength;
56232
+ serializedEvents.push(event);
56233
+ }
56213
56234
  const firstEvent = events[offset];
56214
56235
  if (firstEvent === void 0) {
56215
56236
  throw new RangeError("Event batch must contain at least one event");
@@ -56218,24 +56239,18 @@ function serializeEventBatch(events, offset) {
56218
56239
  const cachedByCount = serializedEventBatches.get(firstEvent);
56219
56240
  const cached = cachedByCount?.get(eventCount);
56220
56241
  if (cached !== void 0 && hasSameEvents(cached.events, events, offset, end)) {
56221
- return cached.message;
56242
+ return cached;
56222
56243
  }
56223
56244
  const batchEvents = events.slice(offset, end);
56224
- const serializedEvents = batchEvents.map((event) => serializedMessages.get(event));
56225
- let message;
56226
- if (serializedEvents.every((event) => event !== void 0)) {
56227
- const data = `{"events":[${serializedEvents.map((event) => event.data).join(",")}],"type":"events.batch","version":3}`;
56228
- message = { byteLength: Buffer$1.byteLength(data), data };
56229
- } else {
56230
- const batch = { events: batchEvents, type: "events.batch", version: 3 };
56231
- message = serializeEventStreamValue(batch);
56232
- }
56245
+ const data = `${EVENT_BATCH_PREFIX}${serializedEvents.map((event) => event.data).join(",")}${EVENT_BATCH_SUFFIX}`;
56246
+ const message = { byteLength, data };
56247
+ const batch = { events: batchEvents, message };
56233
56248
  const batches = cachedByCount ?? /* @__PURE__ */ new Map();
56234
- batches.set(eventCount, { events: batchEvents, message });
56249
+ batches.set(eventCount, batch);
56235
56250
  if (cachedByCount === void 0) {
56236
56251
  serializedEventBatches.set(firstEvent, batches);
56237
56252
  }
56238
- return message;
56253
+ return batch;
56239
56254
  }
56240
56255
  function sendSerializedEventStreamMessage(socket, serialize, onSoftBackpressure, onSlowClientDisconnect) {
56241
56256
  if (socket.readyState !== 1) {
@@ -56246,37 +56261,61 @@ function sendSerializedEventStreamMessage(socket, serialize, onSoftBackpressure,
56246
56261
  socket.close(1013, "Client is too slow; refresh the snapshot");
56247
56262
  return false;
56248
56263
  }
56249
- if (socket.bufferedAmount > EVENT_SOCKET_SOFT_BACKPRESSURE_BYTES) {
56264
+ const message = serialize();
56265
+ if (message === void 0 || message.byteLength > MAX_EVENT_BATCH_BYTES) {
56266
+ socket.close(1009, "Event frame is too large; refresh the snapshot");
56267
+ return false;
56268
+ }
56269
+ const projectedBufferedAmount = socket.bufferedAmount + message.byteLength;
56270
+ if (projectedBufferedAmount > EVENT_SOCKET_HARD_BACKPRESSURE_BYTES) {
56271
+ onSlowClientDisconnect();
56272
+ socket.close(1013, "Client is too slow; refresh the snapshot");
56273
+ return false;
56274
+ }
56275
+ if (projectedBufferedAmount > EVENT_SOCKET_SOFT_BACKPRESSURE_BYTES) {
56250
56276
  onSoftBackpressure();
56251
56277
  }
56252
- socket.send(serialize().data);
56278
+ socket.send(message.data);
56253
56279
  return true;
56254
56280
  }
56255
56281
  function sendEventStreamMessage(socket, message, onSoftBackpressure, onSlowClientDisconnect) {
56256
56282
  return sendSerializedEventStreamMessage(
56257
56283
  socket,
56258
- () => serializeEventStreamMessage(message),
56284
+ () => {
56285
+ if (message.type === "events.batch" && message.events.some(
56286
+ (event) => getSerializedAgentEventByteLength(event) > MAX_AGENT_EVENT_BYTES
56287
+ ))
56288
+ return void 0;
56289
+ return serializeEventStreamMessage(message);
56290
+ },
56259
56291
  onSoftBackpressure,
56260
56292
  onSlowClientDisconnect
56261
56293
  );
56262
56294
  }
56263
56295
  function sendEventStreamEvents(socket, events, onSoftBackpressure, onSlowClientDisconnect) {
56264
- for (let offset = 0; offset < events.length; offset += MAX_EVENT_BATCH_SIZE) {
56296
+ for (let offset = 0; offset < events.length; ) {
56297
+ let nextOffset = offset;
56265
56298
  if (!sendSerializedEventStreamMessage(
56266
56299
  socket,
56267
- () => serializeEventBatch(events, offset),
56300
+ () => {
56301
+ const batch = serializeEventBatch(events, offset);
56302
+ if (batch === void 0) return void 0;
56303
+ nextOffset += batch.events.length;
56304
+ return batch.message;
56305
+ },
56268
56306
  onSoftBackpressure,
56269
56307
  onSlowClientDisconnect
56270
56308
  )) {
56271
56309
  return false;
56272
56310
  }
56311
+ offset = nextOffset;
56273
56312
  }
56274
56313
  return true;
56275
56314
  }
56276
56315
 
56277
56316
  // packages/server/src/agent-event-stream.ts
56278
56317
  var DEFAULT_COALESCING_WINDOW_MS = 16;
56279
- var DEFAULT_MAX_EVENT_BYTES = 1048576;
56318
+ var DEFAULT_MAX_EVENT_BYTES = MAX_AGENT_EVENT_BYTES;
56280
56319
  var DEFAULT_MAX_RETAINED_BYTES = 4 * 1048576;
56281
56320
  var DEFAULT_PRESSURE_COALESCING_WINDOW_MS = 32;
56282
56321
  function isCoalescedEvent(event) {
@@ -56709,6 +56748,322 @@ var registerHistoryStorageRoutes = (app, context, done) => {
56709
56748
  done();
56710
56749
  };
56711
56750
 
56751
+ // packages/server/src/workbench-changes.ts
56752
+ var WorkbenchChanges = class {
56753
+ #listeners = /* @__PURE__ */ new Set();
56754
+ subscribe(listener) {
56755
+ this.#listeners.add(listener);
56756
+ return () => {
56757
+ this.#listeners.delete(listener);
56758
+ };
56759
+ }
56760
+ publish(change) {
56761
+ for (const listener of this.#listeners) listener(change);
56762
+ }
56763
+ publishAgentEvent(projectId, event) {
56764
+ if (event.type === "turn.started" || event.type === "turn.completed" || event.type === "item.completed" && event.payload.item.type === "message" && (event.payload.item.questions?.length ?? 0) > 0) {
56765
+ this.publish({ type: "async-questions.changed", projectId, taskId: event.taskId });
56766
+ }
56767
+ }
56768
+ };
56769
+
56770
+ // packages/server/src/routes/access-routes.ts
56771
+ var ACCESS_SESSION_COOKIE = "codexly_session";
56772
+ function status(authenticated, mode) {
56773
+ return { authenticated, mode, version: 1 };
56774
+ }
56775
+ var registerAccessRoutes = (app, options, done) => {
56776
+ const { access: access3, service } = options;
56777
+ const mode = access3 === void 0 ? "local" : "lan";
56778
+ app.get(
56779
+ "/v1/access",
56780
+ { schema: { response: { 200: AccessStatusResponseSchema } } },
56781
+ (request2) => status(
56782
+ mode === "local" || service?.validate(request2.cookies[ACCESS_SESSION_COOKIE]) === true,
56783
+ mode
56784
+ )
56785
+ );
56786
+ app.post(
56787
+ "/v1/access/pair",
56788
+ {
56789
+ schema: {
56790
+ body: PairAccessRequestSchema,
56791
+ response: { 200: AccessStatusResponseSchema }
56792
+ }
56793
+ },
56794
+ (request2, reply) => {
56795
+ if (access3 === void 0 || service === void 0) {
56796
+ return status(true, "local");
56797
+ }
56798
+ const result = service.pair(request2.body.code, request2.ip);
56799
+ if (result.status !== "paired") {
56800
+ return reply.code(result.status === "rate_limited" ? 429 : 403).send({
56801
+ code: result.status === "rate_limited" ? "PAIRING_RATE_LIMITED" : "PAIRING_FAILED",
56802
+ message: "Pairing request failed",
56803
+ retryable: result.status === "rate_limited"
56804
+ });
56805
+ }
56806
+ reply.setCookie(ACCESS_SESSION_COOKIE, result.sessionId, {
56807
+ ...result.expiresAt === null || access3.sessionTtlMs === void 0 ? {} : {
56808
+ expires: new Date(result.expiresAt),
56809
+ maxAge: Math.ceil(access3.sessionTtlMs / 1e3)
56810
+ },
56811
+ httpOnly: true,
56812
+ path: "/",
56813
+ sameSite: "strict",
56814
+ secure: false
56815
+ });
56816
+ return status(true, "lan");
56817
+ }
56818
+ );
56819
+ app.post(
56820
+ "/v1/access/logout",
56821
+ { schema: { response: { 200: AccessStatusResponseSchema } } },
56822
+ (request2, reply) => {
56823
+ service?.logout(request2.cookies[ACCESS_SESSION_COOKIE]);
56824
+ reply.clearCookie(ACCESS_SESSION_COOKIE, { path: "/", sameSite: "strict" });
56825
+ return status(mode === "local", mode);
56826
+ }
56827
+ );
56828
+ done();
56829
+ };
56830
+
56831
+ // packages/server/src/routes/event-routes.ts
56832
+ var MAX_TIMER_DELAY_MS = 2147483647;
56833
+ function scheduleSessionExpiry(socket, expiresAt) {
56834
+ let timer;
56835
+ const expire = () => {
56836
+ const remainingMs = expiresAt - Date.now();
56837
+ if (remainingMs <= 0) {
56838
+ socket.close(1008, "Access session expired");
56839
+ return;
56840
+ }
56841
+ timer = setTimeout(expire, Math.min(remainingMs, MAX_TIMER_DELAY_MS));
56842
+ timer.unref();
56843
+ };
56844
+ expire();
56845
+ return () => {
56846
+ if (timer !== void 0) {
56847
+ clearTimeout(timer);
56848
+ }
56849
+ };
56850
+ }
56851
+ var registerEventRoutes = (app, context, done) => {
56852
+ const { accessService, getProjectContext, projectContexts } = context;
56853
+ app.get(
56854
+ "/v1/projects/:projectId/events",
56855
+ {
56856
+ async preValidation(request2, reply) {
56857
+ if (await getProjectContext(request2.params.projectId) === void 0) {
56858
+ return await reply.code(404).send({ code: "PROJECT_NOT_FOUND", message: "Project not found" });
56859
+ }
56860
+ },
56861
+ schema: { params: ProjectParamsSchema, querystring: EventQuerySchema },
56862
+ websocket: true
56863
+ },
56864
+ (socket, request2) => {
56865
+ const sessionExpiresAt = accessService?.expiresAt(request2.cookies[ACCESS_SESSION_COOKIE]);
56866
+ if (accessService !== void 0 && sessionExpiresAt === void 0) {
56867
+ socket.close(1008, "Access session expired");
56868
+ return;
56869
+ }
56870
+ const context2 = projectContexts.get(request2.params.projectId);
56871
+ if (context2 === void 0) {
56872
+ socket.close(1008, "Project not found");
56873
+ return;
56874
+ }
56875
+ const eventStream = context2.eventStream;
56876
+ context2.transportMetrics.activeClients += 1;
56877
+ let cleanedUp = false;
56878
+ let liveFlushScheduled = false;
56879
+ const liveEvents = [];
56880
+ let unsubscribe = () => void 0;
56881
+ let cancelInvalidation = () => void 0;
56882
+ const cancelSessionExpiry = sessionExpiresAt === void 0 || sessionExpiresAt === null ? () => void 0 : scheduleSessionExpiry(socket, sessionExpiresAt);
56883
+ const cleanup = () => {
56884
+ if (cleanedUp) {
56885
+ return;
56886
+ }
56887
+ cleanedUp = true;
56888
+ liveEvents.length = 0;
56889
+ cancelSessionExpiry();
56890
+ cancelInvalidation();
56891
+ unsubscribe();
56892
+ context2.transportMetrics.activeClients -= 1;
56893
+ };
56894
+ socket.once("close", cleanup);
56895
+ socket.once("error", cleanup);
56896
+ cancelInvalidation = accessService?.onInvalidated(request2.cookies[ACCESS_SESSION_COOKIE], () => {
56897
+ cleanup();
56898
+ socket.close(1008, "Access session expired");
56899
+ }) ?? (() => void 0);
56900
+ if (socket.readyState !== socket.OPEN) return;
56901
+ const send = (message) => sendEventStreamMessage(
56902
+ socket,
56903
+ message,
56904
+ () => {
56905
+ eventStream.noteBackpressure();
56906
+ },
56907
+ () => {
56908
+ context2.transportMetrics.slowClientDisconnects += 1;
56909
+ }
56910
+ );
56911
+ const sendEvents = (events) => sendEventStreamEvents(
56912
+ socket,
56913
+ events,
56914
+ () => {
56915
+ eventStream.noteBackpressure();
56916
+ },
56917
+ () => {
56918
+ context2.transportMetrics.slowClientDisconnects += 1;
56919
+ }
56920
+ );
56921
+ const flushLiveEvents = () => {
56922
+ liveFlushScheduled = false;
56923
+ if (cleanedUp || liveEvents.length === 0) {
56924
+ return;
56925
+ }
56926
+ const events = liveEvents.splice(0);
56927
+ sendEvents(events);
56928
+ };
56929
+ const enqueueLiveEvent = (event) => {
56930
+ liveEvents.push(event);
56931
+ if (liveEvents.length >= MAX_EVENT_BATCH_SIZE) {
56932
+ flushLiveEvents();
56933
+ return;
56934
+ }
56935
+ if (liveFlushScheduled) {
56936
+ return;
56937
+ }
56938
+ liveFlushScheduled = true;
56939
+ queueMicrotask(() => {
56940
+ if (liveFlushScheduled) {
56941
+ flushLiveEvents();
56942
+ }
56943
+ });
56944
+ };
56945
+ const replay = eventStream.replayAfter(request2.query.afterSequence);
56946
+ if (replay.type === "resync") {
56947
+ const sent = send({
56948
+ latestSequence: replay.latestSequence,
56949
+ reason: replay.reason,
56950
+ sessionId: eventStream.checkpoint.sessionId,
56951
+ type: "resync.required",
56952
+ version: 3
56953
+ });
56954
+ if (sent) {
56955
+ socket.close(1e3, "Snapshot resync required");
56956
+ }
56957
+ return;
56958
+ }
56959
+ const checkpoint = eventStream.checkpoint;
56960
+ const initializationEvents = [];
56961
+ let isInitializing = true;
56962
+ unsubscribe = eventStream.subscribe((event) => {
56963
+ if (isInitializing) {
56964
+ initializationEvents.push(event);
56965
+ return;
56966
+ }
56967
+ enqueueLiveEvent(event);
56968
+ });
56969
+ const readySent = send({
56970
+ latestSequence: checkpoint.sequence,
56971
+ sessionId: checkpoint.sessionId,
56972
+ type: "connection.ready",
56973
+ version: 3
56974
+ });
56975
+ if (!readySent) {
56976
+ return;
56977
+ }
56978
+ if (!sendEvents(replay.events)) {
56979
+ return;
56980
+ }
56981
+ isInitializing = false;
56982
+ if (!sendEvents(initializationEvents)) {
56983
+ return;
56984
+ }
56985
+ }
56986
+ );
56987
+ done();
56988
+ };
56989
+
56990
+ // packages/server/src/routes/resource-change-events.ts
56991
+ function registerWorkbenchEvents(app, context) {
56992
+ registerResourceChangeEvents(
56993
+ app,
56994
+ context,
56995
+ "/v1/workbench/events",
56996
+ { type: "workbench.ready" },
56997
+ (listener) => context.workbenchChanges.subscribe(listener)
56998
+ );
56999
+ }
57000
+ function registerResourceChangeEvents(app, context, path, initial, subscribe) {
57001
+ app.get(path, { websocket: true }, (socket, request2) => {
57002
+ const expiresAt = context.accessService?.expiresAt(request2.cookies[ACCESS_SESSION_COOKIE]);
57003
+ if (context.accessService !== void 0 && expiresAt === void 0) {
57004
+ socket.close(1008, "Access session expired");
57005
+ return;
57006
+ }
57007
+ const cancelExpiry = expiresAt == null ? () => void 0 : scheduleSessionExpiry(socket, expiresAt);
57008
+ const pending = /* @__PURE__ */ new Set();
57009
+ let closed = false;
57010
+ const send = (frame) => {
57011
+ if (closed || socket.readyState !== 1) return;
57012
+ if (socket.bufferedAmount > 65536) {
57013
+ socket.close(1013, "Slow client");
57014
+ return;
57015
+ }
57016
+ socket.send(frame, (error) => {
57017
+ if (error) socket.terminate();
57018
+ });
57019
+ };
57020
+ const unsubscribe = subscribe((change) => {
57021
+ if (closed) return;
57022
+ const queued = pending.size > 0;
57023
+ pending.add(JSON.stringify(change));
57024
+ if (pending.size > 256) {
57025
+ socket.close(1013, "Too many changes");
57026
+ return;
57027
+ }
57028
+ if (queued) return;
57029
+ queueMicrotask(() => {
57030
+ for (const frame of pending) send(frame);
57031
+ pending.clear();
57032
+ });
57033
+ });
57034
+ let alive = true;
57035
+ socket.on("pong", () => {
57036
+ alive = true;
57037
+ });
57038
+ const heartbeat = setInterval(() => {
57039
+ if (!alive) {
57040
+ socket.terminate();
57041
+ return;
57042
+ }
57043
+ alive = false;
57044
+ socket.ping();
57045
+ }, 3e4);
57046
+ heartbeat.unref();
57047
+ let cancelInvalidation = () => void 0;
57048
+ const cleanup = () => {
57049
+ if (closed) return;
57050
+ closed = true;
57051
+ unsubscribe();
57052
+ pending.clear();
57053
+ cancelExpiry();
57054
+ cancelInvalidation();
57055
+ clearInterval(heartbeat);
57056
+ };
57057
+ socket.once("close", cleanup);
57058
+ socket.once("error", cleanup);
57059
+ cancelInvalidation = context.accessService?.onInvalidated(request2.cookies[ACCESS_SESSION_COOKIE], () => {
57060
+ cleanup();
57061
+ socket.close(1008, "Access session expired");
57062
+ }) ?? (() => void 0);
57063
+ send(JSON.stringify(initial));
57064
+ });
57065
+ }
57066
+
56712
57067
  // packages/server/src/app.ts
56713
57068
  var import_fastify2 = __toESM(require_fastify(), 1);
56714
57069
 
@@ -61008,7 +61363,7 @@ function createUntrackedTextDiff(path, content) {
61008
61363
  );
61009
61364
  }
61010
61365
  function applyDiffBudget(changes, budget) {
61011
- return changes.map((change2) => ({ ...change2, diff: budget.takeDiff(change2.diff) }));
61366
+ return changes.map((change) => ({ ...change, diff: budget.takeDiff(change.diff) }));
61012
61367
  }
61013
61368
  function parseTrackedDiffs(output) {
61014
61369
  if (output === "") {
@@ -61312,17 +61667,17 @@ async function readResolvedGitWorkingTreeStatus(resolvedProjectRoot, gitCommandE
61312
61667
  snapshotHash.update(root).update("\0").update(fingerprint).update("\0");
61313
61668
  }
61314
61669
  snapshotHash.update(repositoryBranches.branch ?? "").update("\0").update(repositoryMode);
61315
- const fingerprintChanges = async (location, changes) => mapWithConcurrency(changes, MAX_FILE_IO_CONCURRENCY, async (change2) => {
61670
+ const fingerprintChanges = async (location, changes) => mapWithConcurrency(changes, MAX_FILE_IO_CONCURRENCY, async (change) => {
61316
61671
  let metadata = "missing";
61317
61672
  try {
61318
61673
  const stats = await limitGitFileIO(
61319
- () => lstat(join(resolvedProjectRoot, change2.path), { bigint: true })
61674
+ () => lstat(join(resolvedProjectRoot, change.path), { bigint: true })
61320
61675
  );
61321
61676
  metadata = [stats.mode, stats.size, stats.mtimeNs, stats.ctimeNs].join(":");
61322
61677
  } catch (error) {
61323
61678
  if (error.code !== "ENOENT") throw error;
61324
61679
  }
61325
- return `${location}\0${change2.kind}\0${change2.path}\0${metadata}\0`;
61680
+ return `${location}\0${change.kind}\0${change.path}\0${metadata}\0`;
61326
61681
  });
61327
61682
  for (const fingerprint of await fingerprintChanges("staged", staged)) {
61328
61683
  snapshotHash.update(fingerprint);
@@ -61472,7 +61827,7 @@ async function commitSelectedProjectChanges(projectRoot, request2) {
61472
61827
  if (status2.snapshot !== request2.expectedSnapshot) {
61473
61828
  throw new GitCommitError("GIT_STATUS_CHANGED", "Git changes changed before the commit");
61474
61829
  }
61475
- const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change2) => change2.path));
61830
+ const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change) => change.path));
61476
61831
  if (request2.paths.some((path) => !changedPaths.has(path))) {
61477
61832
  throw new GitCommitError(
61478
61833
  "GIT_PATH_UNAVAILABLE",
@@ -61480,7 +61835,7 @@ async function commitSelectedProjectChanges(projectRoot, request2) {
61480
61835
  );
61481
61836
  }
61482
61837
  const selectedPaths = request2.paths.map(literalPath);
61483
- const stagedPaths = new Set(status2.staged.map((change2) => change2.path));
61838
+ const stagedPaths = new Set(status2.staged.map((change) => change.path));
61484
61839
  const selectedStagedPaths = request2.paths.filter((path) => stagedPaths.has(path));
61485
61840
  const selectedUnstagedPaths = request2.paths.filter((path) => !stagedPaths.has(path));
61486
61841
  const temporaryIndexRoot = await mkdtemp(join(tmpdir(), "codexly-git-index-"));
@@ -61678,8 +62033,8 @@ var MAX_COMMIT_CHANGE_SUMMARY_BYTES = 20 * 1024;
61678
62033
  var MAX_COMMIT_DIFF_EXCERPT_BYTES = 36 * 1024;
61679
62034
  var MAX_EXCERPTED_COMMIT_CHANGES = 16;
61680
62035
  function selectedCommitChanges(status2, paths) {
61681
- const stagedByPath = new Map(status2.staged.map((change2) => [change2.path, change2]));
61682
- const unstagedByPath = new Map(status2.unstaged.map((change2) => [change2.path, change2]));
62036
+ const stagedByPath = new Map(status2.staged.map((change) => [change.path, change]));
62037
+ const unstagedByPath = new Map(status2.unstaged.map((change) => [change.path, change]));
61683
62038
  return paths.flatMap((path) => {
61684
62039
  const staged = stagedByPath.get(path);
61685
62040
  const unstaged = unstagedByPath.get(path);
@@ -61729,10 +62084,10 @@ function readDiffLineStats(diff) {
61729
62084
  return { additions, deletions };
61730
62085
  }
61731
62086
  function buildSelectedChangeSummary(changes) {
61732
- const lines = changes.map(({ change: change2, location }) => {
61733
- const { additions, deletions } = readDiffLineStats(change2.diff);
61734
- const binary = change2.diff.includes("Binary files ") ? ", binary" : "";
61735
- return `[${location}] ${change2.kind} ${change2.path} (+${String(additions)} -${String(deletions)}, ${String(Buffer$1.byteLength(change2.diff, "utf8"))} diff bytes${binary})`;
62087
+ const lines = changes.map(({ change, location }) => {
62088
+ const { additions, deletions } = readDiffLineStats(change.diff);
62089
+ const binary = change.diff.includes("Binary files ") ? ", binary" : "";
62090
+ return `[${location}] ${change.kind} ${change.path} (+${String(additions)} -${String(deletions)}, ${String(Buffer$1.byteLength(change.diff, "utf8"))} diff bytes${binary})`;
61736
62091
  });
61737
62092
  const completeSummary = lines.join("\n");
61738
62093
  if (Buffer$1.byteLength(completeSummary, "utf8") <= MAX_COMMIT_CHANGE_SUMMARY_BYTES) {
@@ -61763,7 +62118,7 @@ function representativeCommitChanges(changes) {
61763
62118
  { length: count },
61764
62119
  (_3, index) => Math.round(index * (changes.length - 1) / (count - 1))
61765
62120
  );
61766
- return indexes.map((index) => changes[index]).filter((change2) => change2 !== void 0);
62121
+ return indexes.map((index) => changes[index]).filter((change) => change !== void 0);
61767
62122
  }
61768
62123
  function compactDiff(diff, maximumBytes) {
61769
62124
  const diffBytes = Buffer$1.byteLength(diff, "utf8");
@@ -61788,28 +62143,28 @@ function buildSelectedDiffExcerpts(changes) {
61788
62143
  const perChangeBudget = Math.floor(
61789
62144
  (MAX_COMMIT_DIFF_EXCERPT_BYTES - separatorBytes) / representatives.length
61790
62145
  );
61791
- return representatives.map(({ change: change2, location }) => {
61792
- const header = `[${location}] ${change2.kind} ${change2.path}
62146
+ return representatives.map(({ change, location }) => {
62147
+ const header = `[${location}] ${change.kind} ${change.path}
61793
62148
  `;
61794
62149
  const headerBytes = Buffer$1.byteLength(header, "utf8");
61795
62150
  if (headerBytes >= perChangeBudget) {
61796
62151
  return takeUtf8Prefix(header, perChangeBudget);
61797
62152
  }
61798
- return `${header}${compactDiff(change2.diff, perChangeBudget - headerBytes)}`;
62153
+ return `${header}${compactDiff(change.diff, perChangeBudget - headerBytes)}`;
61799
62154
  }).join("\n\n");
61800
62155
  }
61801
62156
  function buildInlineSelectedDiff(changes) {
61802
62157
  const blocks = [];
61803
62158
  let bytes = 0;
61804
- for (const { change: change2, location } of changes) {
61805
- const header = `[${location}] ${change2.path}
62159
+ for (const { change, location } of changes) {
62160
+ const header = `[${location}] ${change.path}
61806
62161
  `;
61807
62162
  const separatorBytes = blocks.length === 0 ? 0 : 2;
61808
- bytes += separatorBytes + Buffer$1.byteLength(header, "utf8") + Buffer$1.byteLength(change2.diff, "utf8");
62163
+ bytes += separatorBytes + Buffer$1.byteLength(header, "utf8") + Buffer$1.byteLength(change.diff, "utf8");
61809
62164
  if (bytes > MAX_INLINE_COMMIT_DIFF_BYTES) {
61810
62165
  return void 0;
61811
62166
  }
61812
- blocks.push(`${header}${change2.diff}`);
62167
+ blocks.push(`${header}${change.diff}`);
61813
62168
  }
61814
62169
  return blocks.join("\n\n");
61815
62170
  }
@@ -62571,7 +62926,7 @@ function assertCommitSelection(status2, request2) {
62571
62926
  409
62572
62927
  );
62573
62928
  }
62574
- const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change2) => change2.path));
62929
+ const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change) => change.path));
62575
62930
  if (request2.paths.some((path) => !changedPaths.has(path))) {
62576
62931
  throw new MutationHttpError(
62577
62932
  "GIT_PATH_UNAVAILABLE",
@@ -65020,6 +65375,7 @@ function createProjectRuntimeContext(options) {
65020
65375
  invalidateProjectGitBranchCache(event.payload.rootPath);
65021
65376
  }
65022
65377
  eventStream.publish(event);
65378
+ options.workbenchChanges?.publishAgentEvent(scope.id, event);
65023
65379
  })
65024
65380
  };
65025
65381
  }
@@ -65491,226 +65847,6 @@ async function readProjectDirectory(requestedPath, options = {}) {
65491
65847
  roots
65492
65848
  };
65493
65849
  }
65494
-
65495
- // packages/server/src/routes/access-routes.ts
65496
- var ACCESS_SESSION_COOKIE = "codexly_session";
65497
- function status(authenticated, mode) {
65498
- return { authenticated, mode, version: 1 };
65499
- }
65500
- var registerAccessRoutes = (app, options, done) => {
65501
- const { access: access3, service } = options;
65502
- const mode = access3 === void 0 ? "local" : "lan";
65503
- app.get(
65504
- "/v1/access",
65505
- { schema: { response: { 200: AccessStatusResponseSchema } } },
65506
- (request2) => status(
65507
- mode === "local" || service?.validate(request2.cookies[ACCESS_SESSION_COOKIE]) === true,
65508
- mode
65509
- )
65510
- );
65511
- app.post(
65512
- "/v1/access/pair",
65513
- {
65514
- schema: {
65515
- body: PairAccessRequestSchema,
65516
- response: { 200: AccessStatusResponseSchema }
65517
- }
65518
- },
65519
- (request2, reply) => {
65520
- if (access3 === void 0 || service === void 0) {
65521
- return status(true, "local");
65522
- }
65523
- const result = service.pair(request2.body.code, request2.ip);
65524
- if (result.status !== "paired") {
65525
- return reply.code(result.status === "rate_limited" ? 429 : 403).send({
65526
- code: result.status === "rate_limited" ? "PAIRING_RATE_LIMITED" : "PAIRING_FAILED",
65527
- message: "Pairing request failed",
65528
- retryable: result.status === "rate_limited"
65529
- });
65530
- }
65531
- reply.setCookie(ACCESS_SESSION_COOKIE, result.sessionId, {
65532
- ...result.expiresAt === null || access3.sessionTtlMs === void 0 ? {} : {
65533
- expires: new Date(result.expiresAt),
65534
- maxAge: Math.ceil(access3.sessionTtlMs / 1e3)
65535
- },
65536
- httpOnly: true,
65537
- path: "/",
65538
- sameSite: "strict",
65539
- secure: false
65540
- });
65541
- return status(true, "lan");
65542
- }
65543
- );
65544
- app.post(
65545
- "/v1/access/logout",
65546
- { schema: { response: { 200: AccessStatusResponseSchema } } },
65547
- (request2, reply) => {
65548
- service?.logout(request2.cookies[ACCESS_SESSION_COOKIE]);
65549
- reply.clearCookie(ACCESS_SESSION_COOKIE, { path: "/", sameSite: "strict" });
65550
- return status(mode === "local", mode);
65551
- }
65552
- );
65553
- done();
65554
- };
65555
-
65556
- // packages/server/src/routes/event-routes.ts
65557
- var MAX_TIMER_DELAY_MS = 2147483647;
65558
- function scheduleSessionExpiry(socket, expiresAt) {
65559
- let timer;
65560
- const expire = () => {
65561
- const remainingMs = expiresAt - Date.now();
65562
- if (remainingMs <= 0) {
65563
- socket.close(1008, "Access session expired");
65564
- return;
65565
- }
65566
- timer = setTimeout(expire, Math.min(remainingMs, MAX_TIMER_DELAY_MS));
65567
- timer.unref();
65568
- };
65569
- expire();
65570
- return () => {
65571
- if (timer !== void 0) {
65572
- clearTimeout(timer);
65573
- }
65574
- };
65575
- }
65576
- var registerEventRoutes = (app, context, done) => {
65577
- const { accessService, getProjectContext, projectContexts } = context;
65578
- app.get(
65579
- "/v1/projects/:projectId/events",
65580
- {
65581
- async preValidation(request2, reply) {
65582
- if (await getProjectContext(request2.params.projectId) === void 0) {
65583
- return await reply.code(404).send({ code: "PROJECT_NOT_FOUND", message: "Project not found" });
65584
- }
65585
- },
65586
- schema: { params: ProjectParamsSchema, querystring: EventQuerySchema },
65587
- websocket: true
65588
- },
65589
- (socket, request2) => {
65590
- const sessionExpiresAt = accessService?.expiresAt(request2.cookies[ACCESS_SESSION_COOKIE]);
65591
- if (accessService !== void 0 && sessionExpiresAt === void 0) {
65592
- socket.close(1008, "Access session expired");
65593
- return;
65594
- }
65595
- const context2 = projectContexts.get(request2.params.projectId);
65596
- if (context2 === void 0) {
65597
- socket.close(1008, "Project not found");
65598
- return;
65599
- }
65600
- const eventStream = context2.eventStream;
65601
- context2.transportMetrics.activeClients += 1;
65602
- let cleanedUp = false;
65603
- let liveFlushScheduled = false;
65604
- const liveEvents = [];
65605
- let unsubscribe = () => void 0;
65606
- let cancelInvalidation = () => void 0;
65607
- const cancelSessionExpiry = sessionExpiresAt === void 0 || sessionExpiresAt === null ? () => void 0 : scheduleSessionExpiry(socket, sessionExpiresAt);
65608
- const cleanup = () => {
65609
- if (cleanedUp) {
65610
- return;
65611
- }
65612
- cleanedUp = true;
65613
- liveEvents.length = 0;
65614
- cancelSessionExpiry();
65615
- cancelInvalidation();
65616
- unsubscribe();
65617
- context2.transportMetrics.activeClients -= 1;
65618
- };
65619
- socket.once("close", cleanup);
65620
- socket.once("error", cleanup);
65621
- cancelInvalidation = accessService?.onInvalidated(request2.cookies[ACCESS_SESSION_COOKIE], () => {
65622
- cleanup();
65623
- socket.close(1008, "Access session expired");
65624
- }) ?? (() => void 0);
65625
- if (socket.readyState !== socket.OPEN) return;
65626
- const send = (message) => sendEventStreamMessage(
65627
- socket,
65628
- message,
65629
- () => {
65630
- eventStream.noteBackpressure();
65631
- },
65632
- () => {
65633
- context2.transportMetrics.slowClientDisconnects += 1;
65634
- }
65635
- );
65636
- const sendEvents = (events) => sendEventStreamEvents(
65637
- socket,
65638
- events,
65639
- () => {
65640
- eventStream.noteBackpressure();
65641
- },
65642
- () => {
65643
- context2.transportMetrics.slowClientDisconnects += 1;
65644
- }
65645
- );
65646
- const flushLiveEvents = () => {
65647
- liveFlushScheduled = false;
65648
- if (cleanedUp || liveEvents.length === 0) {
65649
- return;
65650
- }
65651
- const events = liveEvents.splice(0);
65652
- sendEvents(events);
65653
- };
65654
- const enqueueLiveEvent = (event) => {
65655
- liveEvents.push(event);
65656
- if (liveEvents.length >= MAX_EVENT_BATCH_SIZE) {
65657
- flushLiveEvents();
65658
- return;
65659
- }
65660
- if (liveFlushScheduled) {
65661
- return;
65662
- }
65663
- liveFlushScheduled = true;
65664
- queueMicrotask(() => {
65665
- if (liveFlushScheduled) {
65666
- flushLiveEvents();
65667
- }
65668
- });
65669
- };
65670
- const replay = eventStream.replayAfter(request2.query.afterSequence);
65671
- if (replay.type === "resync") {
65672
- const sent = send({
65673
- latestSequence: replay.latestSequence,
65674
- reason: replay.reason,
65675
- sessionId: eventStream.checkpoint.sessionId,
65676
- type: "resync.required",
65677
- version: 3
65678
- });
65679
- if (sent) {
65680
- socket.close(1e3, "Snapshot resync required");
65681
- }
65682
- return;
65683
- }
65684
- const checkpoint = eventStream.checkpoint;
65685
- const initializationEvents = [];
65686
- let isInitializing = true;
65687
- unsubscribe = eventStream.subscribe((event) => {
65688
- if (isInitializing) {
65689
- initializationEvents.push(event);
65690
- return;
65691
- }
65692
- enqueueLiveEvent(event);
65693
- });
65694
- const readySent = send({
65695
- latestSequence: checkpoint.sequence,
65696
- sessionId: checkpoint.sessionId,
65697
- type: "connection.ready",
65698
- version: 3
65699
- });
65700
- if (!readySent) {
65701
- return;
65702
- }
65703
- if (!sendEvents(replay.events)) {
65704
- return;
65705
- }
65706
- isInitializing = false;
65707
- if (!sendEvents(initializationEvents)) {
65708
- return;
65709
- }
65710
- }
65711
- );
65712
- done();
65713
- };
65714
65850
  var ProjectRootScopeError = class extends Error {
65715
65851
  constructor(code, message) {
65716
65852
  super(message);
@@ -69477,7 +69613,7 @@ var registerSearchRoutes = (app, context, done) => {
69477
69613
  { id: TEMPORARY_TASK_SCOPE_ID, kind: "temporary" },
69478
69614
  ...projects.map((project) => ({ id: project.id, kind: "project" }))
69479
69615
  ];
69480
- return provider.search.searchTasks(request2.query, scopes);
69616
+ return provider.search.searchTasks(request2.query, scopes, request2.signal);
69481
69617
  }
69482
69618
  );
69483
69619
  app.get(
@@ -69507,7 +69643,8 @@ var registerSearchRoutes = (app, context, done) => {
69507
69643
  return provider.search.searchTaskOccurrences(
69508
69644
  request2.params.taskId,
69509
69645
  request2.query,
69510
- project.scope
69646
+ project.scope,
69647
+ request2.signal
69511
69648
  );
69512
69649
  }
69513
69650
  );
@@ -70086,6 +70223,7 @@ var AsyncQuestionService = class {
70086
70223
  async dismiss(projectId, taskId, ids) {
70087
70224
  const { task } = await this.task(projectId, taskId);
70088
70225
  await this.repository().dismissAsyncQuestions(projectId, taskId, ids);
70226
+ this.context.workbenchChanges.publish({ type: "async-questions.changed", projectId, taskId });
70089
70227
  return this.pending(projectId, taskId, new Set(collectRunningTurnIds(task)));
70090
70228
  }
70091
70229
  async answer(projectId, taskId, id, answers) {
@@ -70130,6 +70268,7 @@ var AsyncQuestionService = class {
70130
70268
  409
70131
70269
  );
70132
70270
  const checkpoint = runtime.eventStream.checkpoint;
70271
+ this.context.workbenchChanges.publish({ type: "async-questions.changed", projectId, taskId });
70133
70272
  const providerInput = { text, skills: [], files: [], images: [], textAttachments: [] };
70134
70273
  try {
70135
70274
  const turn = running === void 0 ? await runtime.provider.startTurn(taskId, providerInput, settings) : null;
@@ -70146,6 +70285,7 @@ var AsyncQuestionService = class {
70146
70285
  "answering"
70147
70286
  ))
70148
70287
  throw new Error("Answer state changed unexpectedly");
70288
+ this.context.workbenchChanges.publish({ type: "async-questions.changed", projectId, taskId });
70149
70289
  return result;
70150
70290
  } catch {
70151
70291
  throw this.unknownOutcome();
@@ -70319,7 +70459,9 @@ var registerProjectTodoRoutes = (app, context, done) => {
70319
70459
  await assertProject(projectId);
70320
70460
  return context.runIdempotent(scope, key, payload, async () => {
70321
70461
  try {
70322
- return await action();
70462
+ const result = await action();
70463
+ context.workbenchChanges.publish({ type: "project-todos.changed", projectId });
70464
+ return result;
70323
70465
  } catch (error) {
70324
70466
  return toProjectTodoHttpError(error);
70325
70467
  }
@@ -71381,66 +71523,16 @@ var ScheduledTaskService = class {
71381
71523
  };
71382
71524
 
71383
71525
  // packages/server/src/routes/scheduled-task-events.ts
71384
- var change = { type: "scheduled-tasks.changed" };
71385
- var frame = JSON.stringify(change);
71386
71526
  function registerScheduledTaskEvents(app, context) {
71387
- app.get("/v1/scheduled-tasks/events", { websocket: true }, (socket, request2) => {
71388
- const expiresAt = context.accessService?.expiresAt(request2.cookies[ACCESS_SESSION_COOKIE]);
71389
- if (context.accessService !== void 0 && expiresAt === void 0) {
71390
- socket.close(1008, "Access session expired");
71391
- return;
71392
- }
71393
- const cancelExpiry = expiresAt == null ? () => void 0 : scheduleSessionExpiry(socket, expiresAt);
71394
- let queued = false;
71395
- let closed = false;
71396
- const send = () => {
71397
- if (closed || socket.readyState !== 1) return;
71398
- if (socket.bufferedAmount > 65536) {
71399
- socket.close(1013, "Slow client");
71400
- return;
71401
- }
71402
- socket.send(frame, (error) => {
71403
- if (error) socket.terminate();
71404
- });
71405
- };
71406
- const unsubscribe = context.scheduledTaskService.subscribe(() => {
71407
- if (queued || closed) return;
71408
- queued = true;
71409
- queueMicrotask(() => {
71410
- queued = false;
71411
- send();
71412
- });
71413
- });
71414
- let alive = true;
71415
- socket.on("pong", () => {
71416
- alive = true;
71417
- });
71418
- const heartbeat = setInterval(() => {
71419
- if (!alive) {
71420
- socket.terminate();
71421
- return;
71422
- }
71423
- alive = false;
71424
- socket.ping();
71425
- }, 3e4);
71426
- heartbeat.unref();
71427
- let cancelInvalidation = () => void 0;
71428
- const cleanup = () => {
71429
- if (closed) return;
71430
- closed = true;
71431
- unsubscribe();
71432
- cancelExpiry();
71433
- cancelInvalidation();
71434
- clearInterval(heartbeat);
71435
- };
71436
- socket.once("close", cleanup);
71437
- socket.once("error", cleanup);
71438
- cancelInvalidation = context.accessService?.onInvalidated(request2.cookies[ACCESS_SESSION_COOKIE], () => {
71439
- cleanup();
71440
- socket.close(1008, "Access session expired");
71441
- }) ?? (() => void 0);
71442
- send();
71443
- });
71527
+ registerResourceChangeEvents(
71528
+ app,
71529
+ context,
71530
+ "/v1/scheduled-tasks/events",
71531
+ { type: "scheduled-tasks.changed" },
71532
+ (listener) => context.scheduledTaskService.subscribe(() => {
71533
+ listener({ type: "scheduled-tasks.changed" });
71534
+ })
71535
+ );
71444
71536
  }
71445
71537
 
71446
71538
  // packages/server/src/routes/scheduled-task-routes.ts
@@ -72364,6 +72456,7 @@ async function createCodexlyServer(options) {
72364
72456
  provider: options.provider
72365
72457
  });
72366
72458
  const attachmentStore = new AttachmentStore();
72459
+ const workbenchChanges = new WorkbenchChanges();
72367
72460
  const resolveProviderTurnInput = createProviderTurnInputResolver(
72368
72461
  attachmentStore,
72369
72462
  (projectId, id) => options.projectTodoRepository?.readProjectTodoAttachment(projectId, id) ?? Promise.resolve(void 0)
@@ -72421,6 +72514,7 @@ async function createCodexlyServer(options) {
72421
72514
  );
72422
72515
  },
72423
72516
  onTurnCompleted: (runtime) => taskQueue.startNext(runtime),
72517
+ workbenchChanges,
72424
72518
  provider: resolved.provider,
72425
72519
  scope: resolved.scope
72426
72520
  });
@@ -72563,6 +72657,7 @@ async function createCodexlyServer(options) {
72563
72657
  ...options.staticRoot === void 0 ? {} : { staticRoot: options.staticRoot }
72564
72658
  });
72565
72659
  const routeContext = {
72660
+ workbenchChanges,
72566
72661
  ...options.asyncQuestionRepository === void 0 ? {} : { asyncQuestionRepository: options.asyncQuestionRepository },
72567
72662
  ...options.projectTodoRepository === void 0 ? {} : { projectTodoRepository: options.projectTodoRepository },
72568
72663
  submissionRepository: options.submissionRepository ?? createMemorySubmissionRepository(idempotencyCacheSize),
@@ -72647,6 +72742,7 @@ async function createCodexlyServer(options) {
72647
72742
  await app.register(registerSubmissionRoutes, routeContext);
72648
72743
  await app.register(registerAsyncQuestionRoutes, routeContext);
72649
72744
  await app.register(registerProjectTodoRoutes, routeContext);
72745
+ registerWorkbenchEvents(app, routeContext);
72650
72746
  await app.register(registerQueueRoutes, routeContext);
72651
72747
  await app.register(registerEventRoutes, routeContext);
72652
72748
  await app.ready();