@bryanhu/codexly 0.16.0 → 0.18.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.
- package/CHANGELOG.md +27 -0
- package/README.md +2 -2
- package/README.zh-CN.md +1 -1
- package/dist/{chunk-I74DBIGI.js → chunk-2O7SN37L.js} +1 -1
- package/dist/{chunk-PJNYCTFC.js → chunk-3PU3WPOK.js} +234 -59
- package/dist/{chunk-P3ZQ3QOJ.js → chunk-M6GWGUSX.js} +105 -2
- package/dist/{chunk-HUKDTKO6.js → chunk-NROPHBJ7.js} +457 -89
- package/dist/cli.js +6 -5
- package/dist/client/index.js +136 -3
- package/dist/protocol/index.js +1 -1
- package/dist/providers/codex/index.js +2 -2
- package/dist/server/index.js +4 -4
- package/dist/web/.vite/manifest.json +299 -125
- package/dist/web/.vite/manifest.json.br +0 -0
- package/dist/web/.vite/manifest.json.gz +0 -0
- package/dist/web/assets/agent-settings-panel-BagNBAoe.js +1 -0
- package/dist/web/assets/agent-settings-panel-BagNBAoe.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-BagNBAoe.js.gz +0 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js +1 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js.br +0 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js.gz +0 -0
- package/dist/web/assets/background-image-picker-CjpS0dIk.js +1 -0
- package/dist/web/assets/background-image-picker-CjpS0dIk.js.br +0 -0
- package/dist/web/assets/background-image-picker-CjpS0dIk.js.gz +0 -0
- package/dist/web/assets/bing-wallpaper-queries-B-1L0OYP.js +1 -0
- package/dist/web/assets/bing-wallpaper-queries-B-1L0OYP.js.br +0 -0
- package/dist/web/assets/bing-wallpaper-queries-B-1L0OYP.js.gz +0 -0
- package/dist/web/assets/bot-nsMcDaYk.js +1 -0
- package/dist/web/assets/bot-nsMcDaYk.js.br +0 -0
- package/dist/web/assets/bot-nsMcDaYk.js.gz +0 -0
- package/dist/web/assets/{button-group-DxD1cvNd.js → button-group-DIxa2Erp.js} +1 -1
- package/dist/web/assets/button-group-DIxa2Erp.js.br +0 -0
- package/dist/web/assets/button-group-DIxa2Erp.js.gz +0 -0
- package/dist/web/assets/commit-settings-panel-Co1u5Lzc.js +1 -0
- package/dist/web/assets/commit-settings-panel-Co1u5Lzc.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-Co1u5Lzc.js.gz +0 -0
- package/dist/web/assets/{context-menu-BxBZqph_.js → context-menu-HaQeWpEd.js} +1 -1
- package/dist/web/assets/context-menu-HaQeWpEd.js.br +0 -0
- package/dist/web/assets/context-menu-HaQeWpEd.js.gz +0 -0
- package/dist/web/assets/{dist-Czw-hil0.js → dist-ClwyqJQu.js} +1 -1
- package/dist/web/assets/dist-ClwyqJQu.js.br +0 -0
- package/dist/web/assets/dist-ClwyqJQu.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-B-0RkLZR.js +2 -0
- package/dist/web/assets/file-review-dialog-B-0RkLZR.js.br +0 -0
- package/dist/web/assets/file-review-dialog-B-0RkLZR.js.gz +0 -0
- package/dist/web/assets/git-fork-D0BPqh18.js +1 -0
- package/dist/web/assets/git-fork-D0BPqh18.js.br +2 -0
- package/dist/web/assets/git-fork-D0BPqh18.js.gz +0 -0
- package/dist/web/assets/git-history-panel-QiNKxo_n.js +2 -0
- package/dist/web/assets/git-history-panel-QiNKxo_n.js.br +0 -0
- package/dist/web/assets/git-history-panel-QiNKxo_n.js.gz +0 -0
- package/dist/web/assets/global-settings-about-DWXfIOas.js +1 -0
- package/dist/web/assets/global-settings-about-DWXfIOas.js.br +0 -0
- package/dist/web/assets/global-settings-about-DWXfIOas.js.gz +0 -0
- package/dist/web/assets/global-settings-fields-CmEy5pOE.js +1 -0
- package/dist/web/assets/global-settings-fields-CmEy5pOE.js.br +0 -0
- package/dist/web/assets/global-settings-fields-CmEy5pOE.js.gz +0 -0
- package/dist/web/assets/global-settings-model-B49sZloO.js +1 -0
- package/dist/web/assets/global-settings-model-B49sZloO.js.br +0 -0
- package/dist/web/assets/global-settings-model-B49sZloO.js.gz +0 -0
- package/dist/web/assets/global-settings-page-BqzYrF2U.css +1 -0
- package/dist/web/assets/global-settings-page-BqzYrF2U.css.br +0 -0
- package/dist/web/assets/global-settings-page-BqzYrF2U.css.gz +0 -0
- package/dist/web/assets/global-settings-page-DKXRkWmd.js +2 -0
- package/dist/web/assets/global-settings-page-DKXRkWmd.js.br +0 -0
- package/dist/web/assets/global-settings-page-DKXRkWmd.js.gz +0 -0
- package/dist/web/assets/global-settings-pets-8bzx8OFf.css +1 -0
- package/dist/web/assets/global-settings-pets-8bzx8OFf.css.br +0 -0
- package/dist/web/assets/global-settings-pets-8bzx8OFf.css.gz +0 -0
- package/dist/web/assets/global-settings-pets-DP2AxhJW.js +1 -0
- package/dist/web/assets/global-settings-pets-DP2AxhJW.js.br +0 -0
- package/dist/web/assets/global-settings-pets-DP2AxhJW.js.gz +0 -0
- package/dist/web/assets/index-BGtID8VJ.css +2 -0
- package/dist/web/assets/index-BGtID8VJ.css.br +0 -0
- package/dist/web/assets/index-BGtID8VJ.css.gz +0 -0
- package/dist/web/assets/index-mkWzMsjN.js +4 -0
- package/dist/web/assets/index-mkWzMsjN.js.br +0 -0
- package/dist/web/assets/index-mkWzMsjN.js.gz +0 -0
- package/dist/web/assets/initial-deps-CDAJF_GU.js +1 -0
- package/dist/web/assets/initial-deps-CDAJF_GU.js.br +0 -0
- package/dist/web/assets/initial-deps-CDAJF_GU.js.gz +0 -0
- package/dist/web/assets/{initial-deps-CQxWMuPh.js → initial-deps-DeVnmDFC.js} +1 -1
- package/dist/web/assets/initial-deps-DeVnmDFC.js.br +0 -0
- package/dist/web/assets/initial-deps-DeVnmDFC.js.gz +0 -0
- package/dist/web/assets/{installed-skills-pane-yQ22YClZ.js → installed-skills-pane-CR2LbYh9.js} +1 -1
- package/dist/web/assets/installed-skills-pane-CR2LbYh9.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-CR2LbYh9.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-3Fr_a8du.js +2 -0
- package/dist/web/assets/lazy-message-response-3Fr_a8du.js.br +0 -0
- package/dist/web/assets/lazy-message-response-3Fr_a8du.js.gz +0 -0
- package/dist/web/assets/{mcp-management-pane-fBs42kaN.js → mcp-management-pane-DEuUn7Y6.js} +1 -1
- package/dist/web/assets/mcp-management-pane-DEuUn7Y6.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-DEuUn7Y6.js.gz +0 -0
- package/dist/web/assets/{message-response-BSFnyRiN.js → message-response-D3YFwFiE.js} +1 -1
- package/dist/web/assets/message-response-D3YFwFiE.js.br +0 -0
- package/dist/web/assets/message-response-D3YFwFiE.js.gz +0 -0
- package/dist/web/assets/{official-plugins-pane-DL3I574g.js → official-plugins-pane-k8o9gVMR.js} +1 -1
- package/dist/web/assets/official-plugins-pane-k8o9gVMR.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-k8o9gVMR.js.gz +0 -0
- package/dist/web/assets/paw-print-9SfXKttW.js +1 -0
- package/dist/web/assets/paw-print-9SfXKttW.js.br +0 -0
- package/dist/web/assets/paw-print-9SfXKttW.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-Cl4_Y5Uk.js +1 -0
- package/dist/web/assets/personalization-settings-panel-Cl4_Y5Uk.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-Cl4_Y5Uk.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-D7w0o_EU.js → project-file-popup-page-0uRpUcFH.js} +1 -1
- package/dist/web/assets/project-file-popup-page-0uRpUcFH.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-0uRpUcFH.js.gz +0 -0
- package/dist/web/assets/{project-source-panel-m_xiBT3O.js → project-source-panel-CEegjNVo.js} +2 -2
- package/dist/web/assets/project-source-panel-CEegjNVo.js.br +0 -0
- package/dist/web/assets/project-source-panel-CEegjNVo.js.gz +0 -0
- package/dist/web/assets/prompt-input-Bs_e51Ey.js +1 -0
- package/dist/web/assets/prompt-input-Bs_e51Ey.js.br +0 -0
- package/dist/web/assets/prompt-input-Bs_e51Ey.js.gz +0 -0
- package/dist/web/assets/{prompt-input-controls-BZ7R1d1q.js → prompt-input-controls-DMqyvYVY.js} +1 -1
- package/dist/web/assets/prompt-input-controls-DMqyvYVY.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-DMqyvYVY.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CHc9a7G1.js +1 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CHc9a7G1.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CHc9a7G1.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js → scheduled-task-floating-ui~scheduled-task-date-time-picker-Bz9LiWta.js} +1 -1
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-Bz9LiWta.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-Bz9LiWta.js.gz +0 -0
- package/dist/web/assets/scheduled-task-schedule-2Ugh5sqp.js +1 -0
- package/dist/web/assets/scheduled-task-schedule-2Ugh5sqp.js.br +0 -0
- package/dist/web/assets/scheduled-task-schedule-2Ugh5sqp.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-CVGTy7-W.css +1 -0
- package/dist/web/assets/scheduled-tasks-container-CVGTy7-W.css.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-CVGTy7-W.css.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-Ddieo85Q.js +2 -0
- package/dist/web/assets/scheduled-tasks-container-Ddieo85Q.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-Ddieo85Q.js.gz +0 -0
- package/dist/web/assets/settings-personalization-b55VcvKr.js +1 -0
- package/dist/web/assets/settings-personalization-b55VcvKr.js.br +0 -0
- package/dist/web/assets/settings-personalization-b55VcvKr.js.gz +0 -0
- package/dist/web/assets/{sheet-BD5Iohov.js → sheet-DbEBBgCs.js} +1 -1
- package/dist/web/assets/sheet-DbEBBgCs.js.br +0 -0
- package/dist/web/assets/sheet-DbEBBgCs.js.gz +0 -0
- package/dist/web/assets/{skills-market-container-E47PiSfc.js → skills-market-container-BwT-U8XF.js} +2 -2
- package/dist/web/assets/skills-market-container-BwT-U8XF.js.br +0 -0
- package/dist/web/assets/skills-market-container-BwT-U8XF.js.gz +0 -0
- package/dist/web/assets/sliders-horizontal-DfoeSLtp.js +1 -0
- package/dist/web/assets/sliders-horizontal-DfoeSLtp.js.br +0 -0
- package/dist/web/assets/sliders-horizontal-DfoeSLtp.js.gz +0 -0
- package/dist/web/assets/{third-party-marketplace-pane-BYKLDRVH.js → third-party-marketplace-pane-Cva9dfRn.js} +1 -1
- package/dist/web/assets/third-party-marketplace-pane-Cva9dfRn.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-Cva9dfRn.js.gz +0 -0
- package/dist/web/assets/workbench-composer-BxYlmKUq.js +10 -0
- package/dist/web/assets/workbench-composer-BxYlmKUq.js.br +0 -0
- package/dist/web/assets/workbench-composer-BxYlmKUq.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-DFZ_PDdt.js +2 -0
- package/dist/web/assets/workbench-inspector-changes-DFZ_PDdt.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-DFZ_PDdt.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-DwkSGxpw.js +1 -0
- package/dist/web/assets/workbench-pet-canvas-DwkSGxpw.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-DwkSGxpw.js.gz +0 -0
- package/dist/web/assets/workbench-shell-CnjG23lI.js +8 -0
- package/dist/web/assets/workbench-shell-CnjG23lI.js.br +0 -0
- package/dist/web/assets/workbench-shell-CnjG23lI.js.gz +0 -0
- package/dist/web/index.html +5 -5
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/package.json +2 -2
- package/dist/web/assets/button-group-DxD1cvNd.js.br +0 -0
- package/dist/web/assets/button-group-DxD1cvNd.js.gz +0 -0
- package/dist/web/assets/context-menu-BxBZqph_.js.br +0 -0
- package/dist/web/assets/context-menu-BxBZqph_.js.gz +0 -0
- package/dist/web/assets/dist-Czw-hil0.js.br +0 -0
- package/dist/web/assets/dist-Czw-hil0.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-4yb5qYp1.js +0 -2
- package/dist/web/assets/file-review-dialog-4yb5qYp1.js.br +0 -0
- package/dist/web/assets/file-review-dialog-4yb5qYp1.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-CV-KjCHw.js +0 -1
- package/dist/web/assets/git-commit-horizontal-CV-KjCHw.js.br +0 -0
- package/dist/web/assets/git-commit-horizontal-CV-KjCHw.js.gz +0 -0
- package/dist/web/assets/git-history-panel-CLWc1FLl.js +0 -2
- package/dist/web/assets/git-history-panel-CLWc1FLl.js.br +0 -0
- package/dist/web/assets/git-history-panel-CLWc1FLl.js.gz +0 -0
- package/dist/web/assets/global-settings-dialog-CzBgDgzH.js +0 -1
- package/dist/web/assets/global-settings-dialog-CzBgDgzH.js.br +0 -0
- package/dist/web/assets/global-settings-dialog-CzBgDgzH.js.gz +0 -0
- package/dist/web/assets/index-CROvcy96.css +0 -2
- package/dist/web/assets/index-CROvcy96.css.br +0 -0
- package/dist/web/assets/index-CROvcy96.css.gz +0 -0
- package/dist/web/assets/index-DuOx_QDa.js +0 -4
- package/dist/web/assets/index-DuOx_QDa.js.br +0 -0
- package/dist/web/assets/index-DuOx_QDa.js.gz +0 -0
- package/dist/web/assets/initial-deps-CQxWMuPh.js.br +0 -0
- package/dist/web/assets/initial-deps-CQxWMuPh.js.gz +0 -0
- package/dist/web/assets/initial-deps-Dr1AWuHB.js +0 -1
- package/dist/web/assets/initial-deps-Dr1AWuHB.js.br +0 -0
- package/dist/web/assets/initial-deps-Dr1AWuHB.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-yQ22YClZ.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-yQ22YClZ.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-DxkPeKeK.js +0 -2
- package/dist/web/assets/lazy-message-response-DxkPeKeK.js.br +0 -0
- package/dist/web/assets/lazy-message-response-DxkPeKeK.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-fBs42kaN.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-fBs42kaN.js.gz +0 -0
- package/dist/web/assets/message-response-BSFnyRiN.js.br +0 -0
- package/dist/web/assets/message-response-BSFnyRiN.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-DL3I574g.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-DL3I574g.js.gz +0 -0
- package/dist/web/assets/project-file-popup-page-D7w0o_EU.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-D7w0o_EU.js.gz +0 -0
- package/dist/web/assets/project-source-panel-m_xiBT3O.js.br +0 -0
- package/dist/web/assets/project-source-panel-m_xiBT3O.js.gz +0 -0
- package/dist/web/assets/prompt-input-BHBgVKPB.js +0 -1
- package/dist/web/assets/prompt-input-BHBgVKPB.js.br +0 -0
- package/dist/web/assets/prompt-input-BHBgVKPB.js.gz +0 -0
- package/dist/web/assets/prompt-input-controls-BZ7R1d1q.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-BZ7R1d1q.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CLz7pymx.js +0 -1
- package/dist/web/assets/scheduled-task-date-time-picker-CLz7pymx.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CLz7pymx.js.gz +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js.gz +0 -0
- package/dist/web/assets/scheduled-task-schedule-Cfuv_Kyf.js +0 -1
- package/dist/web/assets/scheduled-task-schedule-Cfuv_Kyf.js.br +0 -0
- package/dist/web/assets/scheduled-task-schedule-Cfuv_Kyf.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-DGrcqBWt.js +0 -2
- package/dist/web/assets/scheduled-tasks-container-DGrcqBWt.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-DGrcqBWt.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-xtJWjMjU.css +0 -1
- package/dist/web/assets/scheduled-tasks-container-xtJWjMjU.css.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-xtJWjMjU.css.gz +0 -0
- package/dist/web/assets/sheet-BD5Iohov.js.br +0 -0
- package/dist/web/assets/sheet-BD5Iohov.js.gz +0 -0
- package/dist/web/assets/skills-market-container-E47PiSfc.js.br +0 -0
- package/dist/web/assets/skills-market-container-E47PiSfc.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BYKLDRVH.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BYKLDRVH.js.gz +0 -0
- package/dist/web/assets/workbench-composer-DWYJJS3y.js +0 -10
- package/dist/web/assets/workbench-composer-DWYJJS3y.js.br +0 -0
- package/dist/web/assets/workbench-composer-DWYJJS3y.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-DS6N-4Ob.js +0 -2
- package/dist/web/assets/workbench-inspector-changes-DS6N-4Ob.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-DS6N-4Ob.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-DdVnx74p.js +0 -1
- package/dist/web/assets/workbench-pet-canvas-DdVnx74p.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-DdVnx74p.js.gz +0 -0
- package/dist/web/assets/workbench-shell-DXDRW3gW.js +0 -8
- package/dist/web/assets/workbench-shell-DXDRW3gW.js.br +0 -0
- package/dist/web/assets/workbench-shell-DXDRW3gW.js.gz +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~egzauog4-DAfditVv.js} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js.br → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~egzauog4-DAfditVv.js.br} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js.gz → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~egzauog4-DAfditVv.js.gz} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
-
import { value_exports } from './chunk-
|
|
3
|
-
import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-
|
|
2
|
+
import { value_exports } from './chunk-2O7SN37L.js';
|
|
3
|
+
import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-3PU3WPOK.js';
|
|
4
4
|
import { WorkbenchPetProviderError, PendingRequestResolutionError } from './chunk-RNTA4MFS.js';
|
|
5
|
-
import { Type, SkillInstallScopeSchema, ScheduledTaskSchema, AgentTurnSchema, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, AgentMutationErrorSchema, InstallAppUpdateResponseSchema, InstallAppUpdateRequestSchema, EventStreamMetricsResponseSchema, AgentCapabilitiesSchema, AgentModelPageSchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_TEXT_BYTES, 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, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResultSchema, OfficialPluginUninstallResultSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResultSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, AgentQueuedSubmissionPageSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, ProjectWorktreeMutationResponseSchema, CreateProjectWorktreeRequestSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE } from './chunk-
|
|
5
|
+
import { Type, SkillInstallScopeSchema, ScheduledTaskSchema, 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, 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, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResultSchema, OfficialPluginUninstallResultSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResultSchema, ScheduledTaskPreviewSchema, ScheduledTaskPreviewRequestSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, AgentQueuedSubmissionPageSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, zonedDateTime, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, ProjectWorktreeMutationResponseSchema, CreateProjectWorktreeRequestSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, wallTimeToUnix, MAX_EVENT_BATCH_SIZE } from './chunk-M6GWGUSX.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';
|
|
@@ -12,7 +12,7 @@ import { tmpdir, homedir } from 'os';
|
|
|
12
12
|
import { join, isAbsolute, dirname, resolve, relative, sep, basename, extname, normalize, win32, posix } from 'path';
|
|
13
13
|
import { Transform, Readable } from 'stream';
|
|
14
14
|
import { pipeline } from 'stream/promises';
|
|
15
|
-
import { TextDecoder as TextDecoder$1 } from 'util';
|
|
15
|
+
import { TextDecoder as TextDecoder$1, isDeepStrictEqual } from 'util';
|
|
16
16
|
import { spawn } from 'child_process';
|
|
17
17
|
import { EventEmitter } from 'events';
|
|
18
18
|
import { createRequire as createRequire$1 } from 'module';
|
|
@@ -56608,7 +56608,14 @@ var AttachmentStore = class {
|
|
|
56608
56608
|
}
|
|
56609
56609
|
async releaseQueue(projectId, queuedSubmissionId) {
|
|
56610
56610
|
const attachmentIds = this.#queueIndex.take(projectId, queuedSubmissionId);
|
|
56611
|
-
await Promise.all(
|
|
56611
|
+
await Promise.all(
|
|
56612
|
+
attachmentIds.map(async (attachmentId) => {
|
|
56613
|
+
const entry = this.#entries.get(attachmentId);
|
|
56614
|
+
if (entry?.projectId === projectId && entry.consumedTurnId === void 0) {
|
|
56615
|
+
await this.#delete(attachmentId);
|
|
56616
|
+
}
|
|
56617
|
+
})
|
|
56618
|
+
);
|
|
56612
56619
|
}
|
|
56613
56620
|
async discard(id) {
|
|
56614
56621
|
await this.#delete(id);
|
|
@@ -61944,7 +61951,7 @@ function createUntrackedTextDiff(path, content) {
|
|
|
61944
61951
|
);
|
|
61945
61952
|
}
|
|
61946
61953
|
function applyDiffBudget(changes, budget) {
|
|
61947
|
-
return changes.map((
|
|
61954
|
+
return changes.map((change2) => ({ ...change2, diff: budget.takeDiff(change2.diff) }));
|
|
61948
61955
|
}
|
|
61949
61956
|
function parseTrackedDiffs(output) {
|
|
61950
61957
|
if (output === "") {
|
|
@@ -62214,8 +62221,8 @@ async function readRepositoryBranches(repositoryRoot, gitCommandExecutor) {
|
|
|
62214
62221
|
}
|
|
62215
62222
|
return { baseBranches: branches, branch, branches: localBranches };
|
|
62216
62223
|
}
|
|
62217
|
-
function prefixRepositoryPath(repositoryName,
|
|
62218
|
-
return { ...
|
|
62224
|
+
function prefixRepositoryPath(repositoryName, change2) {
|
|
62225
|
+
return { ...change2, path: `${repositoryName}/${change2.path}` };
|
|
62219
62226
|
}
|
|
62220
62227
|
async function readImmediateChildRepositoryStatuses(projectRoot, gitCommandExecutor, budget, includeDiff) {
|
|
62221
62228
|
const childDirectories = (await readdir(projectRoot, { withFileTypes: true })).filter((entry) => entry.isDirectory()).toSorted((left, right) => left.name.localeCompare(right.name));
|
|
@@ -62251,9 +62258,9 @@ async function readImmediateChildRepositoryStatuses(projectRoot, gitCommandExecu
|
|
|
62251
62258
|
budget,
|
|
62252
62259
|
includeDiff
|
|
62253
62260
|
);
|
|
62254
|
-
staged.push(...status2.staged.map((
|
|
62261
|
+
staged.push(...status2.staged.map((change2) => prefixRepositoryPath(repository.name, change2)));
|
|
62255
62262
|
unstaged.push(
|
|
62256
|
-
...status2.unstaged.map((
|
|
62263
|
+
...status2.unstaged.map((change2) => prefixRepositoryPath(repository.name, change2))
|
|
62257
62264
|
);
|
|
62258
62265
|
}
|
|
62259
62266
|
}
|
|
@@ -62307,15 +62314,15 @@ async function readGitWorkingTreeStatus(projectRoot, gitCommandExecutor = execut
|
|
|
62307
62314
|
const unstaged = status2.unstaged.toSorted(comparePaths);
|
|
62308
62315
|
const snapshotHash = createHash("sha256");
|
|
62309
62316
|
snapshotHash.update(repositoryBranches.branch ?? "").update("\0").update(repositoryMode);
|
|
62310
|
-
const fingerprintChanges = async (location, changes) => mapWithConcurrency(changes, MAX_FILE_IO_CONCURRENCY, async (
|
|
62317
|
+
const fingerprintChanges = async (location, changes) => mapWithConcurrency(changes, MAX_FILE_IO_CONCURRENCY, async (change2) => {
|
|
62311
62318
|
let metadata = "missing";
|
|
62312
62319
|
try {
|
|
62313
|
-
const stats = await lstat(join(resolvedProjectRoot,
|
|
62320
|
+
const stats = await lstat(join(resolvedProjectRoot, change2.path), { bigint: true });
|
|
62314
62321
|
metadata = [stats.mode, stats.size, stats.mtimeNs, stats.ctimeNs].join(":");
|
|
62315
62322
|
} catch (error) {
|
|
62316
62323
|
if (error.code !== "ENOENT") throw error;
|
|
62317
62324
|
}
|
|
62318
|
-
return `${location}\0${
|
|
62325
|
+
return `${location}\0${change2.kind}\0${change2.path}\0${metadata}\0`;
|
|
62319
62326
|
});
|
|
62320
62327
|
for (const fingerprint of await fingerprintChanges("staged", staged)) {
|
|
62321
62328
|
snapshotHash.update(fingerprint);
|
|
@@ -62455,7 +62462,7 @@ async function commitSelectedProjectChanges(projectRoot, request2) {
|
|
|
62455
62462
|
if (status2.snapshot !== request2.expectedSnapshot) {
|
|
62456
62463
|
throw new GitCommitError("GIT_STATUS_CHANGED", "Git changes changed before the commit");
|
|
62457
62464
|
}
|
|
62458
|
-
const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((
|
|
62465
|
+
const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change2) => change2.path));
|
|
62459
62466
|
if (request2.paths.some((path) => !changedPaths.has(path))) {
|
|
62460
62467
|
throw new GitCommitError(
|
|
62461
62468
|
"GIT_PATH_UNAVAILABLE",
|
|
@@ -62463,7 +62470,7 @@ async function commitSelectedProjectChanges(projectRoot, request2) {
|
|
|
62463
62470
|
);
|
|
62464
62471
|
}
|
|
62465
62472
|
const selectedPaths = request2.paths.map(literalPath);
|
|
62466
|
-
const stagedPaths = new Set(status2.staged.map((
|
|
62473
|
+
const stagedPaths = new Set(status2.staged.map((change2) => change2.path));
|
|
62467
62474
|
const selectedStagedPaths = request2.paths.filter((path) => stagedPaths.has(path));
|
|
62468
62475
|
const selectedUnstagedPaths = request2.paths.filter((path) => !stagedPaths.has(path));
|
|
62469
62476
|
const temporaryIndexRoot = await mkdtemp(join(tmpdir(), "codexly-git-index-"));
|
|
@@ -62661,8 +62668,8 @@ var MAX_COMMIT_CHANGE_SUMMARY_BYTES = 20 * 1024;
|
|
|
62661
62668
|
var MAX_COMMIT_DIFF_EXCERPT_BYTES = 36 * 1024;
|
|
62662
62669
|
var MAX_EXCERPTED_COMMIT_CHANGES = 16;
|
|
62663
62670
|
function selectedCommitChanges(status2, paths) {
|
|
62664
|
-
const stagedByPath = new Map(status2.staged.map((
|
|
62665
|
-
const unstagedByPath = new Map(status2.unstaged.map((
|
|
62671
|
+
const stagedByPath = new Map(status2.staged.map((change2) => [change2.path, change2]));
|
|
62672
|
+
const unstagedByPath = new Map(status2.unstaged.map((change2) => [change2.path, change2]));
|
|
62666
62673
|
return paths.flatMap((path) => {
|
|
62667
62674
|
const staged = stagedByPath.get(path);
|
|
62668
62675
|
const unstaged = unstagedByPath.get(path);
|
|
@@ -62712,10 +62719,10 @@ function readDiffLineStats(diff) {
|
|
|
62712
62719
|
return { additions, deletions };
|
|
62713
62720
|
}
|
|
62714
62721
|
function buildSelectedChangeSummary(changes) {
|
|
62715
|
-
const lines = changes.map(({ change, location }) => {
|
|
62716
|
-
const { additions, deletions } = readDiffLineStats(
|
|
62717
|
-
const binary =
|
|
62718
|
-
return `[${location}] ${
|
|
62722
|
+
const lines = changes.map(({ change: change2, location }) => {
|
|
62723
|
+
const { additions, deletions } = readDiffLineStats(change2.diff);
|
|
62724
|
+
const binary = change2.diff.includes("Binary files ") ? ", binary" : "";
|
|
62725
|
+
return `[${location}] ${change2.kind} ${change2.path} (+${String(additions)} -${String(deletions)}, ${String(Buffer$1.byteLength(change2.diff, "utf8"))} diff bytes${binary})`;
|
|
62719
62726
|
});
|
|
62720
62727
|
const completeSummary = lines.join("\n");
|
|
62721
62728
|
if (Buffer$1.byteLength(completeSummary, "utf8") <= MAX_COMMIT_CHANGE_SUMMARY_BYTES) {
|
|
@@ -62746,7 +62753,7 @@ function representativeCommitChanges(changes) {
|
|
|
62746
62753
|
{ length: count },
|
|
62747
62754
|
(_2, index) => Math.round(index * (changes.length - 1) / (count - 1))
|
|
62748
62755
|
);
|
|
62749
|
-
return indexes.map((index) => changes[index]).filter((
|
|
62756
|
+
return indexes.map((index) => changes[index]).filter((change2) => change2 !== void 0);
|
|
62750
62757
|
}
|
|
62751
62758
|
function compactDiff(diff, maximumBytes) {
|
|
62752
62759
|
const diffBytes = Buffer$1.byteLength(diff, "utf8");
|
|
@@ -62771,28 +62778,28 @@ function buildSelectedDiffExcerpts(changes) {
|
|
|
62771
62778
|
const perChangeBudget = Math.floor(
|
|
62772
62779
|
(MAX_COMMIT_DIFF_EXCERPT_BYTES - separatorBytes) / representatives.length
|
|
62773
62780
|
);
|
|
62774
|
-
return representatives.map(({ change, location }) => {
|
|
62775
|
-
const header = `[${location}] ${
|
|
62781
|
+
return representatives.map(({ change: change2, location }) => {
|
|
62782
|
+
const header = `[${location}] ${change2.kind} ${change2.path}
|
|
62776
62783
|
`;
|
|
62777
62784
|
const headerBytes = Buffer$1.byteLength(header, "utf8");
|
|
62778
62785
|
if (headerBytes >= perChangeBudget) {
|
|
62779
62786
|
return takeUtf8Prefix(header, perChangeBudget);
|
|
62780
62787
|
}
|
|
62781
|
-
return `${header}${compactDiff(
|
|
62788
|
+
return `${header}${compactDiff(change2.diff, perChangeBudget - headerBytes)}`;
|
|
62782
62789
|
}).join("\n\n");
|
|
62783
62790
|
}
|
|
62784
62791
|
function buildInlineSelectedDiff(changes) {
|
|
62785
62792
|
const blocks = [];
|
|
62786
62793
|
let bytes = 0;
|
|
62787
|
-
for (const { change, location } of changes) {
|
|
62788
|
-
const header = `[${location}] ${
|
|
62794
|
+
for (const { change: change2, location } of changes) {
|
|
62795
|
+
const header = `[${location}] ${change2.path}
|
|
62789
62796
|
`;
|
|
62790
62797
|
const separatorBytes = blocks.length === 0 ? 0 : 2;
|
|
62791
|
-
bytes += separatorBytes + Buffer$1.byteLength(header, "utf8") + Buffer$1.byteLength(
|
|
62798
|
+
bytes += separatorBytes + Buffer$1.byteLength(header, "utf8") + Buffer$1.byteLength(change2.diff, "utf8");
|
|
62792
62799
|
if (bytes > MAX_INLINE_COMMIT_DIFF_BYTES) {
|
|
62793
62800
|
return void 0;
|
|
62794
62801
|
}
|
|
62795
|
-
blocks.push(`${header}${
|
|
62802
|
+
blocks.push(`${header}${change2.diff}`);
|
|
62796
62803
|
}
|
|
62797
62804
|
return blocks.join("\n\n");
|
|
62798
62805
|
}
|
|
@@ -63563,7 +63570,7 @@ function assertCommitSelection(status2, request2) {
|
|
|
63563
63570
|
409
|
|
63564
63571
|
);
|
|
63565
63572
|
}
|
|
63566
|
-
const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((
|
|
63573
|
+
const changedPaths = new Set([...status2.staged, ...status2.unstaged].map((change2) => change2.path));
|
|
63567
63574
|
if (request2.paths.some((path) => !changedPaths.has(path))) {
|
|
63568
63575
|
throw new MutationHttpError(
|
|
63569
63576
|
"GIT_PATH_UNAVAILABLE",
|
|
@@ -65713,11 +65720,11 @@ async function readOrigin(target) {
|
|
|
65713
65720
|
await readFile(join(target, ".clawhub/origin.json"), "utf8")
|
|
65714
65721
|
);
|
|
65715
65722
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
65716
|
-
const
|
|
65717
|
-
if (
|
|
65723
|
+
const origin2 = value;
|
|
65724
|
+
if (origin2["version"] !== 1 || typeof origin2["fingerprint"] !== "string" || typeof origin2["installedVersion"] !== "string" || typeof origin2["ownerHandle"] !== "string" || typeof origin2["slug"] !== "string") {
|
|
65718
65725
|
return void 0;
|
|
65719
65726
|
}
|
|
65720
|
-
return
|
|
65727
|
+
return origin2;
|
|
65721
65728
|
} catch {
|
|
65722
65729
|
return void 0;
|
|
65723
65730
|
}
|
|
@@ -65752,18 +65759,18 @@ async function skillContentHash(root) {
|
|
|
65752
65759
|
async function installClawhubArchive(archive, skillsRoot, owner, slug, version) {
|
|
65753
65760
|
await mkdir(skillsRoot, { recursive: true });
|
|
65754
65761
|
const target = join(skillsRoot, slug);
|
|
65755
|
-
const
|
|
65762
|
+
const origin2 = await readOrigin(target);
|
|
65756
65763
|
const targetExists = await stat(target).then(
|
|
65757
65764
|
() => true,
|
|
65758
65765
|
() => false
|
|
65759
65766
|
);
|
|
65760
|
-
if (targetExists && (
|
|
65767
|
+
if (targetExists && (origin2 === void 0 || origin2.ownerHandle !== owner || origin2.slug !== slug)) {
|
|
65761
65768
|
throw new SkillMarketError("SKILL_MARKET_CONFLICT", "Skill directory contains unrelated files");
|
|
65762
65769
|
}
|
|
65763
|
-
if (targetExists &&
|
|
65770
|
+
if (targetExists && origin2 !== void 0 && await skillContentHash(target) !== origin2.fingerprint) {
|
|
65764
65771
|
throw new SkillMarketError("SKILL_MARKET_CONFLICT", "Skill directory contains local changes");
|
|
65765
65772
|
}
|
|
65766
|
-
if (
|
|
65773
|
+
if (origin2?.installedVersion === version) return { path: target, status: "current", version };
|
|
65767
65774
|
const nonce = [String(process.pid), randomUUID()].join("-");
|
|
65768
65775
|
const staging = join(skillsRoot, `.${slug}.codexly-${nonce}`);
|
|
65769
65776
|
const backup = join(skillsRoot, `.${slug}.backup-${nonce}`);
|
|
@@ -65822,11 +65829,11 @@ async function readMarketplaceOrigin(path) {
|
|
|
65822
65829
|
if ((await stat(originPath)).size > ORIGIN_LIMIT) return void 0;
|
|
65823
65830
|
const value = JSON.parse(await readFile(originPath, "utf8"));
|
|
65824
65831
|
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
65825
|
-
const
|
|
65826
|
-
return typeof
|
|
65827
|
-
installedVersion:
|
|
65828
|
-
owner:
|
|
65829
|
-
slug:
|
|
65832
|
+
const origin2 = value;
|
|
65833
|
+
return typeof origin2["installedVersion"] === "string" && typeof origin2["ownerHandle"] === "string" && typeof origin2["slug"] === "string" ? {
|
|
65834
|
+
installedVersion: origin2["installedVersion"],
|
|
65835
|
+
owner: origin2["ownerHandle"],
|
|
65836
|
+
slug: origin2["slug"]
|
|
65830
65837
|
} : void 0;
|
|
65831
65838
|
} catch {
|
|
65832
65839
|
return void 0;
|
|
@@ -68524,6 +68531,30 @@ var registerPetRoutes = (app, { petProvider, runIdempotent }, done) => {
|
|
|
68524
68531
|
);
|
|
68525
68532
|
done();
|
|
68526
68533
|
};
|
|
68534
|
+
var agentFields = [
|
|
68535
|
+
"approvalPolicy",
|
|
68536
|
+
"approvalsReviewer",
|
|
68537
|
+
"model",
|
|
68538
|
+
"reasoningEffort",
|
|
68539
|
+
"sandboxMode",
|
|
68540
|
+
"fastMode"
|
|
68541
|
+
];
|
|
68542
|
+
function createGlobalSettingsWriter(context) {
|
|
68543
|
+
let queue = Promise.resolve();
|
|
68544
|
+
return (settings) => {
|
|
68545
|
+
const result = queue.catch(() => void 0).then(async () => {
|
|
68546
|
+
const current = await context.readEffectiveGlobalSettings();
|
|
68547
|
+
const changed = Object.fromEntries(
|
|
68548
|
+
agentFields.filter((key) => !isDeepStrictEqual(current[key], settings[key])).map((key) => [key, settings[key]])
|
|
68549
|
+
);
|
|
68550
|
+
if (Object.keys(changed).length > 0) await context.provider.updateDefaultSettings(changed);
|
|
68551
|
+
await context.settingsRepository.writeGlobalSettings(settings);
|
|
68552
|
+
return context.readEffectiveGlobalSettings();
|
|
68553
|
+
});
|
|
68554
|
+
queue = result;
|
|
68555
|
+
return result;
|
|
68556
|
+
};
|
|
68557
|
+
}
|
|
68527
68558
|
|
|
68528
68559
|
// packages/server/src/bing-wallpaper.ts
|
|
68529
68560
|
var BING_ORIGIN = "https://www.bing.com";
|
|
@@ -68628,6 +68659,104 @@ function createBingWallpaperService({
|
|
|
68628
68659
|
};
|
|
68629
68660
|
}
|
|
68630
68661
|
|
|
68662
|
+
// packages/server/src/bing-wallpaper-catalog.ts
|
|
68663
|
+
var origin = "https://www.bing.com";
|
|
68664
|
+
var metadataUrl = `${origin}/HPImageArchive.aspx?format=js&idx=0&n=8&mkt=zh-CN`;
|
|
68665
|
+
function parseCatalog(value) {
|
|
68666
|
+
if (!value || typeof value !== "object" || !("images" in value) || !Array.isArray(value.images))
|
|
68667
|
+
throw new Error("Invalid Bing wallpaper catalog");
|
|
68668
|
+
return value.images.slice(0, 9).map((item) => {
|
|
68669
|
+
if (!item || typeof item !== "object" || !("startdate" in item) || typeof item.startdate !== "string" || !/^\d{8}$/u.test(item.startdate) || !("url" in item) || typeof item.url !== "string" || !item.url.startsWith("/"))
|
|
68670
|
+
throw new Error("Invalid Bing wallpaper entry");
|
|
68671
|
+
const url = new URL(item.url, origin);
|
|
68672
|
+
if (url.origin !== origin || url.pathname !== "/th")
|
|
68673
|
+
throw new Error("Invalid Bing wallpaper URL");
|
|
68674
|
+
return {
|
|
68675
|
+
day: `${item.startdate.slice(0, 4)}-${item.startdate.slice(4, 6)}-${item.startdate.slice(6)}`,
|
|
68676
|
+
title: "title" in item && typeof item.title === "string" ? item.title : "",
|
|
68677
|
+
copyright: "copyright" in item && typeof item.copyright === "string" ? item.copyright : "",
|
|
68678
|
+
url: url.toString()
|
|
68679
|
+
};
|
|
68680
|
+
});
|
|
68681
|
+
}
|
|
68682
|
+
function createBingWallpaperCatalog(fetcher = (url, init) => fetch(url, init)) {
|
|
68683
|
+
let cached = [];
|
|
68684
|
+
let expires = 0;
|
|
68685
|
+
let pending;
|
|
68686
|
+
const images = /* @__PURE__ */ new Map();
|
|
68687
|
+
const readEntries = () => {
|
|
68688
|
+
if (Date.now() < expires) return Promise.resolve(cached);
|
|
68689
|
+
if (pending) return pending;
|
|
68690
|
+
pending = (async () => {
|
|
68691
|
+
const response = await fetcher(metadataUrl, {
|
|
68692
|
+
redirect: "error",
|
|
68693
|
+
signal: AbortSignal.timeout(1e4)
|
|
68694
|
+
});
|
|
68695
|
+
if (!response.headers.get("content-type")?.startsWith("application/json"))
|
|
68696
|
+
throw new Error("Invalid Bing metadata content type");
|
|
68697
|
+
const entries = parseCatalog(
|
|
68698
|
+
JSON.parse(
|
|
68699
|
+
(await readBoundedBody(response, 64 * 1024, "catalog")).toString("utf8")
|
|
68700
|
+
)
|
|
68701
|
+
);
|
|
68702
|
+
cached = entries;
|
|
68703
|
+
expires = Date.now() + 60 * 6e4;
|
|
68704
|
+
images.clear();
|
|
68705
|
+
return entries;
|
|
68706
|
+
})().finally(() => {
|
|
68707
|
+
pending = void 0;
|
|
68708
|
+
});
|
|
68709
|
+
return pending;
|
|
68710
|
+
};
|
|
68711
|
+
return {
|
|
68712
|
+
async list() {
|
|
68713
|
+
return (await readEntries()).map(({ day, title, copyright }) => ({ day, title, copyright }));
|
|
68714
|
+
},
|
|
68715
|
+
async read(day, thumbnail) {
|
|
68716
|
+
const entries = await readEntries();
|
|
68717
|
+
const entry = entries.find((item) => item.day === day);
|
|
68718
|
+
if (!entry)
|
|
68719
|
+
throw Object.assign(new Error("Bing wallpaper is no longer available"), {
|
|
68720
|
+
statusCode: 404
|
|
68721
|
+
});
|
|
68722
|
+
const key = `${day}:${String(thumbnail)}`;
|
|
68723
|
+
const existing = images.get(key);
|
|
68724
|
+
if (existing) return existing;
|
|
68725
|
+
const promise = (async () => {
|
|
68726
|
+
const url = new URL(entry.url);
|
|
68727
|
+
if (thumbnail) {
|
|
68728
|
+
url.searchParams.set("w", "480");
|
|
68729
|
+
url.searchParams.set("h", "270");
|
|
68730
|
+
}
|
|
68731
|
+
const response = await fetcher(url.toString(), {
|
|
68732
|
+
redirect: "error",
|
|
68733
|
+
signal: AbortSignal.timeout(1e4)
|
|
68734
|
+
});
|
|
68735
|
+
if (!response.headers.get("content-type")?.startsWith("image/jpeg"))
|
|
68736
|
+
throw new Error("Invalid Bing image content type");
|
|
68737
|
+
const body = await readBoundedBody(
|
|
68738
|
+
response,
|
|
68739
|
+
thumbnail ? 2 * 1024 * 1024 : 20 * 1024 * 1024,
|
|
68740
|
+
"image"
|
|
68741
|
+
);
|
|
68742
|
+
if (body.length < 4 || body[0] !== 255 || body[1] !== 216 || body[2] !== 255)
|
|
68743
|
+
throw new Error("Invalid Bing JPEG content");
|
|
68744
|
+
return body;
|
|
68745
|
+
})();
|
|
68746
|
+
images.set(key, promise);
|
|
68747
|
+
void promise.then(
|
|
68748
|
+
() => {
|
|
68749
|
+
if (!thumbnail) images.delete(key);
|
|
68750
|
+
},
|
|
68751
|
+
() => {
|
|
68752
|
+
images.delete(key);
|
|
68753
|
+
}
|
|
68754
|
+
);
|
|
68755
|
+
return promise;
|
|
68756
|
+
}
|
|
68757
|
+
};
|
|
68758
|
+
}
|
|
68759
|
+
|
|
68631
68760
|
// packages/server/src/routes/runtime-routes.ts
|
|
68632
68761
|
var APP_UPDATE_HANDLER_TIMEOUT_MS = 15e4;
|
|
68633
68762
|
var BingWallpaperQuerySchema = {
|
|
@@ -68638,6 +68767,29 @@ var BingWallpaperQuerySchema = {
|
|
|
68638
68767
|
};
|
|
68639
68768
|
var registerRuntimeRoutes = (app, context, done) => {
|
|
68640
68769
|
const bingWallpaper = createBingWallpaperService();
|
|
68770
|
+
const bingCatalog = createBingWallpaperCatalog();
|
|
68771
|
+
app.get(
|
|
68772
|
+
"/v1/workbench-background/bing/catalog",
|
|
68773
|
+
{ schema: { response: { 200: BingWallpaperCatalogSchema } } },
|
|
68774
|
+
() => bingCatalog.list()
|
|
68775
|
+
);
|
|
68776
|
+
app.get(
|
|
68777
|
+
"/v1/workbench-background/bing/image",
|
|
68778
|
+
{
|
|
68779
|
+
schema: {
|
|
68780
|
+
querystring: {
|
|
68781
|
+
type: "object",
|
|
68782
|
+
additionalProperties: false,
|
|
68783
|
+
required: ["day"],
|
|
68784
|
+
properties: {
|
|
68785
|
+
day: { type: "string", pattern: "^\\d{4}-\\d{2}-\\d{2}$" },
|
|
68786
|
+
thumbnail: { type: "boolean" }
|
|
68787
|
+
}
|
|
68788
|
+
}
|
|
68789
|
+
}
|
|
68790
|
+
},
|
|
68791
|
+
async (request2, reply) => reply.type("image/jpeg").send(await bingCatalog.read(request2.query.day, request2.query.thumbnail ?? false))
|
|
68792
|
+
);
|
|
68641
68793
|
const {
|
|
68642
68794
|
assertValidProjectDefaults: assertValidProjectDefaults2,
|
|
68643
68795
|
capabilities,
|
|
@@ -68648,9 +68800,9 @@ var registerRuntimeRoutes = (app, context, done) => {
|
|
|
68648
68800
|
readAppInfo,
|
|
68649
68801
|
readAppUpdateProgress,
|
|
68650
68802
|
readEffectiveGlobalSettings,
|
|
68651
|
-
runIdempotent
|
|
68652
|
-
settingsRepository
|
|
68803
|
+
runIdempotent
|
|
68653
68804
|
} = context;
|
|
68805
|
+
const writeGlobalSettings = createGlobalSettingsWriter(context);
|
|
68654
68806
|
app.get("/v1/health", { schema: { response: { 200: HealthResponseSchema } } }, () => ({
|
|
68655
68807
|
status: "ok",
|
|
68656
68808
|
version: 1
|
|
@@ -68758,7 +68910,7 @@ var registerRuntimeRoutes = (app, context, done) => {
|
|
|
68758
68910
|
async () => {
|
|
68759
68911
|
assertValidProjectDefaults2(await listModels(), request2.body);
|
|
68760
68912
|
return {
|
|
68761
|
-
settings: await
|
|
68913
|
+
settings: await writeGlobalSettings(request2.body)
|
|
68762
68914
|
};
|
|
68763
68915
|
}
|
|
68764
68916
|
)
|
|
@@ -69541,10 +69693,6 @@ var registerTaskRoutes = (app, context, done) => {
|
|
|
69541
69693
|
if (context2 === void 0) {
|
|
69542
69694
|
throw new MutationHttpError("PROJECT_NOT_FOUND", "Project not found", 404);
|
|
69543
69695
|
}
|
|
69544
|
-
const task = await context2.provider.readTask(request2.params.taskId);
|
|
69545
|
-
if (task?.projectId !== context2.scope.id) {
|
|
69546
|
-
throw new MutationHttpError("TASK_NOT_FOUND", "Task not found", 404);
|
|
69547
|
-
}
|
|
69548
69696
|
return { task: await context2.provider.unarchiveTask(request2.params.taskId) };
|
|
69549
69697
|
}
|
|
69550
69698
|
)
|
|
@@ -73232,27 +73380,62 @@ function rdatesToString(param, rdates, tzid) {
|
|
|
73232
73380
|
}).join(",");
|
|
73233
73381
|
return "".concat(header).concat(dateString);
|
|
73234
73382
|
}
|
|
73383
|
+
|
|
73384
|
+
// packages/server/src/scheduled-task-recurrence.ts
|
|
73235
73385
|
var MIN_RECURRENCE_MS = 6e4;
|
|
73236
|
-
function
|
|
73237
|
-
|
|
73238
|
-
|
|
73239
|
-
|
|
73240
|
-
|
|
73241
|
-
|
|
73242
|
-
|
|
73243
|
-
|
|
73244
|
-
|
|
73245
|
-
|
|
73246
|
-
|
|
73247
|
-
|
|
73248
|
-
|
|
73249
|
-
|
|
73250
|
-
|
|
73251
|
-
|
|
73252
|
-
|
|
73253
|
-
|
|
73386
|
+
function previewScheduledTask(schedule, afterUnixMs, limit = 5) {
|
|
73387
|
+
if (schedule.type === "once") return schedule.atUnixMs > afterUnixMs ? [schedule.atUnixMs] : [];
|
|
73388
|
+
const normalized = schedule.rrule.trim().replace(/^RRULE:/u, "");
|
|
73389
|
+
if (normalized === "" || /[\r\n]/u.test(normalized))
|
|
73390
|
+
throw new Error("Scheduled task RRULE is invalid");
|
|
73391
|
+
const start = zonedDateTime(schedule.startAtUnixMs, schedule.timezone).replace(/[-:]/gu, "");
|
|
73392
|
+
const rule = rrulestr(`DTSTART:${start}Z
|
|
73393
|
+
RRULE:${normalized}`, { cache: false });
|
|
73394
|
+
const until = rule.options.until?.getTime();
|
|
73395
|
+
const count = rule.options.count;
|
|
73396
|
+
if (!Number.isInteger(rule.options.interval) || rule.options.interval < 1)
|
|
73397
|
+
throw new Error("Scheduled task interval must be a positive integer");
|
|
73398
|
+
if (count !== null && (!Number.isInteger(count) || count < 1 || count > 1e4))
|
|
73399
|
+
throw new Error("Scheduled task count must be between 1 and 10000");
|
|
73400
|
+
if (until !== void 0) {
|
|
73401
|
+
rule.options.until = /* @__PURE__ */ new Date(`${zonedDateTime(until, schedule.timezone)}Z`);
|
|
73402
|
+
}
|
|
73403
|
+
const first2 = rule.all((_date, index) => index < 2);
|
|
73404
|
+
if (first2[0] !== void 0 && first2[1] !== void 0 && first2[1].getTime() - first2[0].getTime() < MIN_RECURRENCE_MS) {
|
|
73405
|
+
throw new Error("Scheduled task recurrence must be at least one minute");
|
|
73406
|
+
}
|
|
73407
|
+
if (until !== void 0 && until <= afterUnixMs) return [];
|
|
73408
|
+
const dates = [];
|
|
73409
|
+
const afterWall = Date.parse(`${zonedDateTime(afterUnixMs, schedule.timezone)}Z`);
|
|
73410
|
+
const lower = new Date(afterWall - 2 * 864e5);
|
|
73411
|
+
if (count === null) {
|
|
73412
|
+
const unit = rule.options.freq === RRule.HOURLY ? 36e5 : rule.options.freq === RRule.DAILY ? 864e5 : rule.options.freq === RRule.WEEKLY ? 7 * 864e5 : void 0;
|
|
73413
|
+
if (unit !== void 0) {
|
|
73414
|
+
const step = unit * rule.options.interval;
|
|
73415
|
+
const anchor = rule.options.dtstart.getTime();
|
|
73416
|
+
const cycles = Math.max(0, Math.floor((lower.getTime() - anchor) / step));
|
|
73417
|
+
rule.options.dtstart = new Date(anchor + cycles * step);
|
|
73418
|
+
}
|
|
73419
|
+
}
|
|
73420
|
+
if (count !== null) {
|
|
73421
|
+
rule.options.count = null;
|
|
73422
|
+
}
|
|
73423
|
+
let occurrences = 0;
|
|
73424
|
+
const accept = (date) => {
|
|
73425
|
+
const unixMs = wallTimeToUnix(date.toISOString().slice(0, 19), schedule.timezone);
|
|
73426
|
+
if (unixMs === void 0) return true;
|
|
73427
|
+
if (unixMs < schedule.startAtUnixMs) return true;
|
|
73428
|
+
if (until !== void 0 && unixMs > until) return false;
|
|
73429
|
+
occurrences += 1;
|
|
73430
|
+
if (unixMs > afterUnixMs) dates.push(unixMs);
|
|
73431
|
+
return dates.length < Math.min(limit, 5) && (count === null || occurrences < count);
|
|
73254
73432
|
};
|
|
73255
|
-
|
|
73433
|
+
if (count !== null) {
|
|
73434
|
+
rule.between(rule.options.dtstart, /* @__PURE__ */ new Date("9999-12-31T23:59:59Z"), true, accept);
|
|
73435
|
+
} else {
|
|
73436
|
+
rule.between(lower, /* @__PURE__ */ new Date("9999-12-31T23:59:59Z"), true, accept);
|
|
73437
|
+
}
|
|
73438
|
+
return dates;
|
|
73256
73439
|
}
|
|
73257
73440
|
function resolveNextScheduledRun(schedule, afterUnixMs) {
|
|
73258
73441
|
if (schedule.type === "once") {
|
|
@@ -73260,22 +73443,9 @@ function resolveNextScheduledRun(schedule, afterUnixMs) {
|
|
|
73260
73443
|
throw new Error("Scheduled task time must be in the future");
|
|
73261
73444
|
return schedule.atUnixMs;
|
|
73262
73445
|
}
|
|
73263
|
-
const
|
|
73264
|
-
if (
|
|
73265
|
-
|
|
73266
|
-
}
|
|
73267
|
-
const rule = rrulestr(
|
|
73268
|
-
`DTSTART;TZID=${schedule.timezone}:${rruleDateTime(schedule.startAtUnixMs, schedule.timezone)}
|
|
73269
|
-
RRULE:${normalized}`,
|
|
73270
|
-
{ forceset: true }
|
|
73271
|
-
);
|
|
73272
|
-
const first2 = rule.all((_date, index) => index < 2);
|
|
73273
|
-
if (first2[0] !== void 0 && first2[1] !== void 0 && first2[1].getTime() - first2[0].getTime() < MIN_RECURRENCE_MS) {
|
|
73274
|
-
throw new Error("Scheduled task recurrence must be at least one minute");
|
|
73275
|
-
}
|
|
73276
|
-
const next = rule.after(new Date(afterUnixMs), false);
|
|
73277
|
-
if (next === null) throw new Error("Scheduled task RRULE has no future occurrence");
|
|
73278
|
-
return next.getTime();
|
|
73446
|
+
const next = previewScheduledTask(schedule, afterUnixMs, 1)[0];
|
|
73447
|
+
if (next === void 0) throw new Error("Scheduled task RRULE has no future occurrence");
|
|
73448
|
+
return next;
|
|
73279
73449
|
}
|
|
73280
73450
|
function createScheduledTask2(id, input, nowUnixMs) {
|
|
73281
73451
|
const name = input.name.trim();
|
|
@@ -73407,6 +73577,7 @@ function createMemoryScheduledTaskRepository() {
|
|
|
73407
73577
|
};
|
|
73408
73578
|
}
|
|
73409
73579
|
var ScheduledTaskService = class {
|
|
73580
|
+
#listeners = /* @__PURE__ */ new Set();
|
|
73410
73581
|
#inFlight = /* @__PURE__ */ new Set();
|
|
73411
73582
|
#deleteTaskResources;
|
|
73412
73583
|
#now;
|
|
@@ -73444,6 +73615,12 @@ var ScheduledTaskService = class {
|
|
|
73444
73615
|
)
|
|
73445
73616
|
);
|
|
73446
73617
|
}
|
|
73618
|
+
subscribe(listener) {
|
|
73619
|
+
this.#listeners.add(listener);
|
|
73620
|
+
return () => {
|
|
73621
|
+
this.#listeners.delete(listener);
|
|
73622
|
+
};
|
|
73623
|
+
}
|
|
73447
73624
|
create(input) {
|
|
73448
73625
|
return this.#mutate(async () => {
|
|
73449
73626
|
let task;
|
|
@@ -73520,6 +73697,7 @@ var ScheduledTaskService = class {
|
|
|
73520
73697
|
}
|
|
73521
73698
|
async close() {
|
|
73522
73699
|
this.#closed = true;
|
|
73700
|
+
this.#listeners.clear();
|
|
73523
73701
|
if (this.#timer !== void 0) clearTimeout(this.#timer);
|
|
73524
73702
|
await Promise.allSettled(this.#inFlight);
|
|
73525
73703
|
await this.#mutation;
|
|
@@ -73593,8 +73771,13 @@ var ScheduledTaskService = class {
|
|
|
73593
73771
|
});
|
|
73594
73772
|
}
|
|
73595
73773
|
async #replace(tasks) {
|
|
73774
|
+
if (tasks.length === this.#tasks.length && tasks.every((task, index) => task === this.#tasks[index])) {
|
|
73775
|
+
this.#reschedule();
|
|
73776
|
+
return;
|
|
73777
|
+
}
|
|
73596
73778
|
this.#tasks = await this.#repository.replaceScheduledTasks(tasks);
|
|
73597
73779
|
this.#reschedule();
|
|
73780
|
+
for (const listener of this.#listeners) listener();
|
|
73598
73781
|
}
|
|
73599
73782
|
async #storeTask(tasks, task) {
|
|
73600
73783
|
const previous = this.#tasks;
|
|
@@ -73616,6 +73799,62 @@ var ScheduledTaskService = class {
|
|
|
73616
73799
|
}
|
|
73617
73800
|
};
|
|
73618
73801
|
|
|
73802
|
+
// packages/server/src/routes/scheduled-task-events.ts
|
|
73803
|
+
var change = { type: "scheduled-tasks.changed" };
|
|
73804
|
+
var frame = JSON.stringify(change);
|
|
73805
|
+
function registerScheduledTaskEvents(app, context) {
|
|
73806
|
+
app.get("/v1/scheduled-tasks/events", { websocket: true }, (socket, request2) => {
|
|
73807
|
+
const expiresAt = context.accessService?.expiresAt(request2.cookies[ACCESS_SESSION_COOKIE]);
|
|
73808
|
+
if (context.accessService !== void 0 && expiresAt === void 0) {
|
|
73809
|
+
socket.close(1008, "Access session expired");
|
|
73810
|
+
return;
|
|
73811
|
+
}
|
|
73812
|
+
const cancelExpiry = expiresAt == null ? () => void 0 : scheduleSessionExpiry(socket, expiresAt);
|
|
73813
|
+
let queued = false;
|
|
73814
|
+
let closed = false;
|
|
73815
|
+
const send = () => {
|
|
73816
|
+
if (closed || socket.readyState !== 1) return;
|
|
73817
|
+
if (socket.bufferedAmount > 65536) {
|
|
73818
|
+
socket.close(1013, "Slow client");
|
|
73819
|
+
return;
|
|
73820
|
+
}
|
|
73821
|
+
socket.send(frame, (error) => {
|
|
73822
|
+
if (error) socket.terminate();
|
|
73823
|
+
});
|
|
73824
|
+
};
|
|
73825
|
+
const unsubscribe = context.scheduledTaskService.subscribe(() => {
|
|
73826
|
+
if (queued || closed) return;
|
|
73827
|
+
queued = true;
|
|
73828
|
+
queueMicrotask(() => {
|
|
73829
|
+
queued = false;
|
|
73830
|
+
send();
|
|
73831
|
+
});
|
|
73832
|
+
});
|
|
73833
|
+
let alive = true;
|
|
73834
|
+
socket.on("pong", () => {
|
|
73835
|
+
alive = true;
|
|
73836
|
+
});
|
|
73837
|
+
const heartbeat = setInterval(() => {
|
|
73838
|
+
if (!alive) {
|
|
73839
|
+
socket.terminate();
|
|
73840
|
+
return;
|
|
73841
|
+
}
|
|
73842
|
+
alive = false;
|
|
73843
|
+
socket.ping();
|
|
73844
|
+
}, 3e4);
|
|
73845
|
+
heartbeat.unref();
|
|
73846
|
+
const cleanup = () => {
|
|
73847
|
+
closed = true;
|
|
73848
|
+
unsubscribe();
|
|
73849
|
+
cancelExpiry();
|
|
73850
|
+
clearInterval(heartbeat);
|
|
73851
|
+
};
|
|
73852
|
+
socket.once("close", cleanup);
|
|
73853
|
+
socket.once("error", cleanup);
|
|
73854
|
+
send();
|
|
73855
|
+
});
|
|
73856
|
+
}
|
|
73857
|
+
|
|
73619
73858
|
// packages/server/src/routes/scheduled-task-routes.ts
|
|
73620
73859
|
var ParamsSchema = Type.Object(
|
|
73621
73860
|
{ taskId: Type.String({ minLength: 1 }) },
|
|
@@ -73627,11 +73866,32 @@ function mapError(error) {
|
|
|
73627
73866
|
throw new MutationHttpError("INVALID_REQUEST", error.message, error.code === "busy" ? 409 : 400);
|
|
73628
73867
|
}
|
|
73629
73868
|
var registerScheduledTaskRoutes = (app, context, done) => {
|
|
73869
|
+
registerScheduledTaskEvents(app, context);
|
|
73630
73870
|
const response = {
|
|
73631
73871
|
400: AgentMutationErrorSchema,
|
|
73632
73872
|
404: AgentMutationErrorSchema,
|
|
73633
73873
|
409: AgentMutationErrorSchema
|
|
73634
73874
|
};
|
|
73875
|
+
app.post(
|
|
73876
|
+
"/v1/scheduled-tasks/preview",
|
|
73877
|
+
{
|
|
73878
|
+
schema: {
|
|
73879
|
+
body: ScheduledTaskPreviewRequestSchema,
|
|
73880
|
+
response: { 200: ScheduledTaskPreviewSchema, 400: AgentMutationErrorSchema }
|
|
73881
|
+
}
|
|
73882
|
+
},
|
|
73883
|
+
(request2) => {
|
|
73884
|
+
try {
|
|
73885
|
+
return { dates: previewScheduledTask(request2.body.schedule, Date.now()) };
|
|
73886
|
+
} catch (error) {
|
|
73887
|
+
throw new MutationHttpError(
|
|
73888
|
+
"INVALID_REQUEST",
|
|
73889
|
+
error instanceof Error ? error.message : String(error),
|
|
73890
|
+
400
|
|
73891
|
+
);
|
|
73892
|
+
}
|
|
73893
|
+
}
|
|
73894
|
+
);
|
|
73635
73895
|
app.get(
|
|
73636
73896
|
"/v1/scheduled-tasks",
|
|
73637
73897
|
{ schema: { response: { 200: ScheduledTaskPageSchema } } },
|
|
@@ -73999,9 +74259,9 @@ async function configureServerDelivery(app, options) {
|
|
|
73999
74259
|
}
|
|
74000
74260
|
const browserWrite = !["GET", "HEAD", "OPTIONS"].includes(request2.method) && (sessionId !== void 0 || request2.headers.origin !== void 0);
|
|
74001
74261
|
if (websocket || browserWrite) {
|
|
74002
|
-
const
|
|
74262
|
+
const origin2 = request2.headers.origin;
|
|
74003
74263
|
try {
|
|
74004
|
-
const parsedOrigin =
|
|
74264
|
+
const parsedOrigin = origin2 === void 0 ? void 0 : new URL(origin2);
|
|
74005
74265
|
if (parsedOrigin === void 0 || parsedOrigin.protocol !== "http:" && parsedOrigin.protocol !== "https:" || parsedOrigin.host !== requestHost.host) {
|
|
74006
74266
|
throw new Error("Origin mismatch");
|
|
74007
74267
|
}
|
|
@@ -74155,6 +74415,113 @@ function rewriteTemporaryTaskUrl(url) {
|
|
|
74155
74415
|
return `/v1/projects/${TEMPORARY_TASK_SCOPE_ID}${suffix}${query}`;
|
|
74156
74416
|
}
|
|
74157
74417
|
|
|
74418
|
+
// packages/server/src/routes/personalization-routes.ts
|
|
74419
|
+
var registerPersonalizationRoutes = (app, context, done) => {
|
|
74420
|
+
const provider = () => {
|
|
74421
|
+
if (!context.provider.personalization)
|
|
74422
|
+
throw new MutationHttpError("PROVIDER_ERROR", "Personalization is unavailable", 503, true);
|
|
74423
|
+
return context.provider.personalization;
|
|
74424
|
+
};
|
|
74425
|
+
const errors = {
|
|
74426
|
+
409: AgentMutationErrorSchema,
|
|
74427
|
+
502: AgentMutationErrorSchema,
|
|
74428
|
+
503: AgentMutationErrorSchema
|
|
74429
|
+
};
|
|
74430
|
+
const run = (key, id, body, action) => context.runIdempotent([key], id, body, async () => {
|
|
74431
|
+
try {
|
|
74432
|
+
return await action();
|
|
74433
|
+
} catch (error) {
|
|
74434
|
+
if (error instanceof MutationHttpError) throw error;
|
|
74435
|
+
if (error instanceof Error && "code" in error && error.code === "GLOBAL_INSTRUCTIONS_CHANGED")
|
|
74436
|
+
throw new MutationHttpError("GLOBAL_INSTRUCTIONS_CHANGED", error.message, 409);
|
|
74437
|
+
throw new MutationHttpError(
|
|
74438
|
+
"PROVIDER_ERROR",
|
|
74439
|
+
error instanceof Error ? error.message : "Personalization request failed",
|
|
74440
|
+
502,
|
|
74441
|
+
true
|
|
74442
|
+
);
|
|
74443
|
+
}
|
|
74444
|
+
});
|
|
74445
|
+
app.get(
|
|
74446
|
+
"/v1/personalization/instructions",
|
|
74447
|
+
{ schema: { response: { 200: GlobalInstructionsSchema } } },
|
|
74448
|
+
() => provider().getGlobalInstructions()
|
|
74449
|
+
);
|
|
74450
|
+
app.get(
|
|
74451
|
+
"/v1/personalization/memories",
|
|
74452
|
+
{ schema: { response: { 200: MemorySettingsSchema } } },
|
|
74453
|
+
() => provider().getMemorySettings()
|
|
74454
|
+
);
|
|
74455
|
+
app.get(
|
|
74456
|
+
"/v1/personalization/agent",
|
|
74457
|
+
{ schema: { response: { 200: AgentPreferencesSchema } } },
|
|
74458
|
+
() => provider().getAgentPreferences()
|
|
74459
|
+
);
|
|
74460
|
+
app.put(
|
|
74461
|
+
"/v1/personalization/instructions",
|
|
74462
|
+
{
|
|
74463
|
+
schema: {
|
|
74464
|
+
body: SaveGlobalInstructionsSchema,
|
|
74465
|
+
headers: IdempotencyHeadersSchema,
|
|
74466
|
+
response: { 200: GlobalInstructionsSchema, ...errors }
|
|
74467
|
+
}
|
|
74468
|
+
},
|
|
74469
|
+
(request2) => run(
|
|
74470
|
+
"save-global-instructions",
|
|
74471
|
+
request2.headers["idempotency-key"],
|
|
74472
|
+
request2.body,
|
|
74473
|
+
() => provider().saveGlobalInstructions(request2.body)
|
|
74474
|
+
)
|
|
74475
|
+
);
|
|
74476
|
+
app.put(
|
|
74477
|
+
"/v1/personalization/memories",
|
|
74478
|
+
{
|
|
74479
|
+
schema: {
|
|
74480
|
+
body: MemorySettingsUpdateSchema,
|
|
74481
|
+
headers: IdempotencyHeadersSchema,
|
|
74482
|
+
response: { 200: MemorySettingsSchema, ...errors }
|
|
74483
|
+
}
|
|
74484
|
+
},
|
|
74485
|
+
(request2) => run(
|
|
74486
|
+
"update-memory-settings",
|
|
74487
|
+
request2.headers["idempotency-key"],
|
|
74488
|
+
request2.body,
|
|
74489
|
+
() => provider().updateMemorySettings(request2.body)
|
|
74490
|
+
)
|
|
74491
|
+
);
|
|
74492
|
+
app.put(
|
|
74493
|
+
"/v1/personalization/agent",
|
|
74494
|
+
{
|
|
74495
|
+
schema: {
|
|
74496
|
+
body: AgentPreferencesSchema,
|
|
74497
|
+
headers: IdempotencyHeadersSchema,
|
|
74498
|
+
response: { 200: AgentPreferencesSchema, ...errors }
|
|
74499
|
+
}
|
|
74500
|
+
},
|
|
74501
|
+
(request2) => run(
|
|
74502
|
+
"update-agent-preferences",
|
|
74503
|
+
request2.headers["idempotency-key"],
|
|
74504
|
+
request2.body,
|
|
74505
|
+
() => provider().updateAgentPreferences(request2.body)
|
|
74506
|
+
)
|
|
74507
|
+
);
|
|
74508
|
+
app.post(
|
|
74509
|
+
"/v1/personalization/memories/reset",
|
|
74510
|
+
{
|
|
74511
|
+
schema: {
|
|
74512
|
+
body: { type: "object", additionalProperties: false },
|
|
74513
|
+
headers: IdempotencyHeadersSchema,
|
|
74514
|
+
response: { 200: PersonalizationResetSchema, ...errors }
|
|
74515
|
+
}
|
|
74516
|
+
},
|
|
74517
|
+
(request2) => run("reset-memories", request2.headers["idempotency-key"], request2.body, async () => {
|
|
74518
|
+
await provider().resetMemories();
|
|
74519
|
+
return { success: true };
|
|
74520
|
+
})
|
|
74521
|
+
);
|
|
74522
|
+
done();
|
|
74523
|
+
};
|
|
74524
|
+
|
|
74158
74525
|
// packages/server/src/app.ts
|
|
74159
74526
|
async function createCodexlyServer(options) {
|
|
74160
74527
|
const handlerTimeoutMs = options.handlerTimeoutMs ?? DEFAULT_HANDLER_TIMEOUT_MS;
|
|
@@ -74293,8 +74660,8 @@ async function createCodexlyServer(options) {
|
|
|
74293
74660
|
const readEffectiveGlobalSettings = async (models) => {
|
|
74294
74661
|
const catalog = models ?? await listModels();
|
|
74295
74662
|
const stored = await options.settingsRepository.readGlobalSettings();
|
|
74296
|
-
const runtimeDefaults =
|
|
74297
|
-
const requestedDefaults = stored
|
|
74663
|
+
const runtimeDefaults = await options.provider.readDefaultSettings();
|
|
74664
|
+
const requestedDefaults = { ...stored, ...runtimeDefaults };
|
|
74298
74665
|
const effectiveModel = resolveProjectDefaults(
|
|
74299
74666
|
catalog,
|
|
74300
74667
|
requestedDefaults,
|
|
@@ -74316,7 +74683,7 @@ async function createCodexlyServer(options) {
|
|
|
74316
74683
|
commitMessageModel: effectiveCommitModel.model,
|
|
74317
74684
|
commitMessagePrompt: stored?.commitMessagePrompt ?? "",
|
|
74318
74685
|
defaultOpenAppId: stored?.defaultOpenAppId ?? null,
|
|
74319
|
-
fastMode: stored?.fastMode ?? false,
|
|
74686
|
+
fastMode: runtimeDefaults.fastMode ?? stored?.fastMode ?? false,
|
|
74320
74687
|
followUpBehavior: stored?.followUpBehavior ?? "queue",
|
|
74321
74688
|
pet: stored?.pet ?? { enabled: false, selectedPetId: null },
|
|
74322
74689
|
...effectiveModel
|
|
@@ -74503,6 +74870,7 @@ async function createCodexlyServer(options) {
|
|
|
74503
74870
|
...accessService === void 0 ? {} : { service: accessService }
|
|
74504
74871
|
});
|
|
74505
74872
|
await app.register(registerRuntimeRoutes, routeContext);
|
|
74873
|
+
await app.register(registerPersonalizationRoutes, routeContext);
|
|
74506
74874
|
await app.register(registerProviderConnectionRoutes, routeContext);
|
|
74507
74875
|
await app.register(registerPetRoutes, routeContext);
|
|
74508
74876
|
await app.register(registerProjectRoutes, routeContext);
|