@bryanhu/codexly 0.11.2 → 0.13.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 +38 -0
- package/README.md +10 -6
- package/README.zh-CN.md +9 -5
- package/dist/{chunk-2NJ4CTQP.js → chunk-G4BIMVEW.js} +1024 -740
- package/dist/{chunk-NPICM42L.js → chunk-HHFZB7H6.js} +17782 -4402
- package/dist/{chunk-GUHYAMAQ.js → chunk-OVQSIEIK.js} +1 -1
- package/dist/{chunk-YMFGL4ZR.js → chunk-TVRHN6RY.js} +586 -131
- package/dist/cli.js +51 -9
- package/dist/client/index.js +147 -4
- package/dist/protocol/index.js +1 -1
- package/dist/providers/codex/index.js +2 -2
- package/dist/server/index.js +4 -4
- package/dist/sqlite-state-worker.js +88 -5
- package/dist/web/.vite/manifest.json +476 -280
- package/dist/web/.vite/manifest.json.br +0 -0
- package/dist/web/.vite/manifest.json.gz +0 -0
- package/dist/web/assets/button-group-CaIXhcq-.js +1 -0
- package/dist/web/assets/button-group-CaIXhcq-.js.br +0 -0
- package/dist/web/assets/button-group-CaIXhcq-.js.gz +0 -0
- package/dist/web/assets/{chunk-BO2N2NFS-ng4dbem1.js → chunk-BO2N2NFS-CiutqNGv.js} +7 -7
- package/dist/web/assets/chunk-BO2N2NFS-CiutqNGv.js.br +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-CiutqNGv.js.gz +0 -0
- package/dist/web/assets/{code-highlighter-BMwFeSBd.js → code-highlighter-Bp23lvQ1.js} +1 -1
- package/dist/web/assets/code-highlighter-Bp23lvQ1.js.br +0 -0
- package/dist/web/assets/code-highlighter-Bp23lvQ1.js.gz +0 -0
- package/dist/web/assets/code-languages-DVcuYjhn.js +2 -0
- package/dist/web/assets/code-languages-DVcuYjhn.js.br +0 -0
- package/dist/web/assets/code-languages-DVcuYjhn.js.gz +0 -0
- package/dist/web/assets/context-menu-C6o4ShKC.js +1 -0
- package/dist/web/assets/context-menu-C6o4ShKC.js.br +0 -0
- package/dist/web/assets/context-menu-C6o4ShKC.js.gz +0 -0
- package/dist/web/assets/dist-Czw-hil0.js +1 -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/download-iHkzQYEd.js +1 -0
- package/dist/web/assets/download-iHkzQYEd.js.br +0 -0
- package/dist/web/assets/download-iHkzQYEd.js.gz +0 -0
- package/dist/web/assets/{engine-compile-Bqjaa_8Z.js → engine-compile-DcaAFSGO.js} +1 -1
- package/dist/web/assets/engine-compile-DcaAFSGO.js.br +0 -0
- package/dist/web/assets/engine-compile-DcaAFSGO.js.gz +0 -0
- package/dist/web/assets/external-link-xbPJFZkP.js +1 -0
- package/dist/web/assets/external-link-xbPJFZkP.js.br +0 -0
- package/dist/web/assets/external-link-xbPJFZkP.js.gz +0 -0
- package/dist/web/assets/file-code-corner-CYF-BidF.js +1 -0
- package/dist/web/assets/file-code-corner-CYF-BidF.js.br +0 -0
- package/dist/web/assets/file-code-corner-CYF-BidF.js.gz +0 -0
- package/dist/web/assets/file-navigation-view-preference-BRWa_l_a.js +1 -0
- package/dist/web/assets/file-navigation-view-preference-BRWa_l_a.js.br +0 -0
- package/dist/web/assets/file-navigation-view-preference-BRWa_l_a.js.gz +0 -0
- package/dist/web/assets/file-pen-line-B05lVjWh.js +1 -0
- package/dist/web/assets/file-pen-line-B05lVjWh.js.br +0 -0
- package/dist/web/assets/file-pen-line-B05lVjWh.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-Cd_FWDJj.js +2 -0
- package/dist/web/assets/file-review-dialog-Cd_FWDJj.js.br +0 -0
- package/dist/web/assets/file-review-dialog-Cd_FWDJj.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-CV-KjCHw.js +1 -0
- 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-CkQhJ-Tz.js +2 -0
- package/dist/web/assets/git-history-panel-CkQhJ-Tz.js.br +0 -0
- package/dist/web/assets/git-history-panel-CkQhJ-Tz.js.gz +0 -0
- package/dist/web/assets/global-settings-dialog-B9ACq0CT.js +1 -0
- package/dist/web/assets/global-settings-dialog-B9ACq0CT.js.br +0 -0
- package/dist/web/assets/global-settings-dialog-B9ACq0CT.js.gz +0 -0
- package/dist/web/assets/{highlighted-body-OFNGDK62-UIjGvJpu.js → highlighted-body-OFNGDK62-jfqTT7Zz.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-jfqTT7Zz.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-jfqTT7Zz.js.gz +0 -0
- package/dist/web/assets/index-CergXz2m.js +4 -0
- package/dist/web/assets/index-CergXz2m.js.br +0 -0
- package/dist/web/assets/index-CergXz2m.js.gz +0 -0
- package/dist/web/assets/index-jg-dNJI1.css +2 -0
- package/dist/web/assets/index-jg-dNJI1.css.br +0 -0
- package/dist/web/assets/index-jg-dNJI1.css.gz +0 -0
- package/dist/web/assets/info-whxTXvIJ.js +1 -0
- package/dist/web/assets/info-whxTXvIJ.js.br +0 -0
- package/dist/web/assets/info-whxTXvIJ.js.gz +0 -0
- package/dist/web/assets/initial-deps-BsEyuMB0.js +1 -0
- package/dist/web/assets/initial-deps-BsEyuMB0.js.br +0 -0
- package/dist/web/assets/initial-deps-BsEyuMB0.js.gz +0 -0
- package/dist/web/assets/initial-deps-Bx4af_YG.js +1 -0
- package/dist/web/assets/initial-deps-Bx4af_YG.js.br +0 -0
- package/dist/web/assets/initial-deps-Bx4af_YG.js.gz +0 -0
- package/dist/web/assets/initial-deps-CNK9MBOP.js +1 -0
- package/dist/web/assets/initial-deps-CNK9MBOP.js.br +0 -0
- package/dist/web/assets/initial-deps-CNK9MBOP.js.gz +0 -0
- package/dist/web/assets/initial-deps-CQxWMuPh.js +1 -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-CTprc_pY.js +1 -0
- package/dist/web/assets/initial-deps-CTprc_pY.js.br +0 -0
- package/dist/web/assets/initial-deps-CTprc_pY.js.gz +0 -0
- package/dist/web/assets/initial-deps-Cq4pSOi-.js +1 -0
- package/dist/web/assets/initial-deps-Cq4pSOi-.js.br +0 -0
- package/dist/web/assets/initial-deps-Cq4pSOi-.js.gz +0 -0
- package/dist/web/assets/initial-deps-DqJTHr9A.js +41 -0
- package/dist/web/assets/initial-deps-DqJTHr9A.js.br +0 -0
- package/dist/web/assets/initial-deps-DqJTHr9A.js.gz +0 -0
- package/dist/web/assets/initial-deps-Ds-edw-P.js +1 -0
- package/dist/web/assets/initial-deps-Ds-edw-P.js.br +0 -0
- package/dist/web/assets/initial-deps-Ds-edw-P.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js +1 -0
- package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-Cnc-bbSf.js +2 -0
- package/dist/web/assets/lazy-message-response-Cnc-bbSf.js.br +0 -0
- package/dist/web/assets/lazy-message-response-Cnc-bbSf.js.gz +0 -0
- package/dist/web/assets/{lib-DrPFkMXk.js → lib-DE0ZEvGM.js} +1 -1
- package/dist/web/assets/lib-DE0ZEvGM.js.br +0 -0
- package/dist/web/assets/lib-DE0ZEvGM.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-CQPXfAO3.js +1 -0
- package/dist/web/assets/mcp-management-pane-CQPXfAO3.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-CQPXfAO3.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BNLLThfI.js +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BNLLThfI.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BNLLThfI.js.gz +0 -0
- package/dist/web/assets/message-response-CamC0ebm.js +7 -0
- package/dist/web/assets/message-response-CamC0ebm.js.br +0 -0
- package/dist/web/assets/message-response-CamC0ebm.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-BCxHJLaj.css +1 -0
- package/dist/web/assets/official-plugins-pane-BCxHJLaj.css.br +0 -0
- package/dist/web/assets/official-plugins-pane-BCxHJLaj.css.gz +0 -0
- package/dist/web/assets/official-plugins-pane-BqGBX0cD.js +1 -0
- package/dist/web/assets/official-plugins-pane-BqGBX0cD.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-BqGBX0cD.js.gz +0 -0
- package/dist/web/assets/{patch-diff-viewer-BnoOysqK.js → patch-diff-viewer-CwDRm5oN.js} +3 -3
- package/dist/web/assets/patch-diff-viewer-CwDRm5oN.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-CwDRm5oN.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-C5dOvxw_.js → project-file-popup-page-DCct78Pu.js} +1 -1
- package/dist/web/assets/project-file-popup-page-DCct78Pu.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-DCct78Pu.js.gz +0 -0
- package/dist/web/assets/project-source-panel-BC6YVLSp.js +3 -0
- package/dist/web/assets/project-source-panel-BC6YVLSp.js.br +0 -0
- package/dist/web/assets/project-source-panel-BC6YVLSp.js.gz +0 -0
- package/dist/web/assets/prompt-input-FNZNBIXc.js +1 -0
- package/dist/web/assets/prompt-input-FNZNBIXc.js.br +0 -0
- package/dist/web/assets/prompt-input-FNZNBIXc.js.gz +0 -0
- package/dist/web/assets/prompt-input-controls-BTOpD8Y-.js +1 -0
- package/dist/web/assets/prompt-input-controls-BTOpD8Y-.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-BTOpD8Y-.js.gz +0 -0
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js +1 -0
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js.br +0 -0
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js.gz +0 -0
- package/dist/web/assets/{react-runtime-CVaUQXZF.js → react-runtime-DaCTDC27.js} +1 -1
- package/dist/web/assets/react-runtime-DaCTDC27.js.br +0 -0
- package/dist/web/assets/react-runtime-DaCTDC27.js.gz +0 -0
- package/dist/web/assets/rolldown-runtime-CNC7AqOf.js +1 -0
- package/dist/web/assets/rolldown-runtime-CNC7AqOf.js.br +0 -0
- package/dist/web/assets/rolldown-runtime-CNC7AqOf.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js +1 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-Wk3Ob2xl.css +1 -0
- package/dist/web/assets/scheduled-task-date-time-picker-Wk3Ob2xl.css.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-Wk3Ob2xl.css.gz +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js +1 -0
- package/dist/web/assets/scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-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 +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js +1 -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-DfXHCkgb.js +1 -0
- package/dist/web/assets/scheduled-task-schedule-DfXHCkgb.js.br +0 -0
- package/dist/web/assets/scheduled-task-schedule-DfXHCkgb.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js +2 -0
- package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-xtJWjMjU.css +1 -0
- 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-CJD6cMoi.js +1 -0
- package/dist/web/assets/sheet-CJD6cMoi.js.br +0 -0
- package/dist/web/assets/sheet-CJD6cMoi.js.gz +0 -0
- package/dist/web/assets/{shiki-bundle-CGkIRfLa.js → shiki-bundle-DdeD2OLK.js} +1 -1
- package/dist/web/assets/shiki-bundle-DdeD2OLK.js.br +0 -0
- package/dist/web/assets/shiki-bundle-DdeD2OLK.js.gz +0 -0
- package/dist/web/assets/skills-market-container-B8Mss3fh.js +2 -0
- package/dist/web/assets/skills-market-container-B8Mss3fh.js.br +0 -0
- package/dist/web/assets/skills-market-container-B8Mss3fh.js.gz +0 -0
- package/dist/web/assets/skills-market-container-C8okZy75.css +1 -0
- package/dist/web/assets/skills-market-container-C8okZy75.css.br +0 -0
- package/dist/web/assets/skills-market-container-C8okZy75.css.gz +0 -0
- package/dist/web/assets/sparkles-BLY9rqMO.js +1 -0
- package/dist/web/assets/sparkles-BLY9rqMO.js.br +0 -0
- package/dist/web/assets/sparkles-BLY9rqMO.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js +1 -0
- package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js.gz +0 -0
- package/dist/web/assets/upload-D_8Uk8f-.js +1 -0
- package/dist/web/assets/upload-D_8Uk8f-.js.br +0 -0
- package/dist/web/assets/upload-D_8Uk8f-.js.gz +0 -0
- package/dist/web/assets/workbench-composer-Co9mAWP_.js +10 -0
- package/dist/web/assets/workbench-composer-Co9mAWP_.js.br +0 -0
- package/dist/web/assets/workbench-composer-Co9mAWP_.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js +2 -0
- package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js +1 -0
- package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js.gz +0 -0
- package/dist/web/assets/workbench-shell-5F-GWLMO.js +8 -0
- package/dist/web/assets/workbench-shell-5F-GWLMO.js.br +0 -0
- package/dist/web/assets/workbench-shell-5F-GWLMO.js.gz +0 -0
- package/dist/web/index.html +13 -15
- 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/bundle-mjs-rHxsej31.js +0 -1
- package/dist/web/assets/bundle-mjs-rHxsej31.js.br +0 -0
- package/dist/web/assets/bundle-mjs-rHxsej31.js.gz +0 -0
- package/dist/web/assets/button-group-Bt_Rr9-f.js +0 -1
- package/dist/web/assets/button-group-Bt_Rr9-f.js.br +0 -0
- package/dist/web/assets/button-group-Bt_Rr9-f.js.gz +0 -0
- package/dist/web/assets/check-C92ZHwwX.js +0 -1
- package/dist/web/assets/check-C92ZHwwX.js.br +0 -0
- package/dist/web/assets/check-C92ZHwwX.js.gz +0 -0
- package/dist/web/assets/checkbox-BBHD70U-.js +0 -1
- package/dist/web/assets/checkbox-BBHD70U-.js.br +0 -0
- package/dist/web/assets/checkbox-BBHD70U-.js.gz +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-ng4dbem1.js.br +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-ng4dbem1.js.gz +0 -0
- package/dist/web/assets/code-highlighter-BMwFeSBd.js.br +0 -0
- package/dist/web/assets/code-highlighter-BMwFeSBd.js.gz +0 -0
- package/dist/web/assets/code-languages-rKSHZYzu.js +0 -2
- package/dist/web/assets/code-languages-rKSHZYzu.js.br +0 -0
- package/dist/web/assets/code-languages-rKSHZYzu.js.gz +0 -0
- package/dist/web/assets/context-menu-03SuSeWI.js +0 -1
- package/dist/web/assets/context-menu-03SuSeWI.js.br +0 -0
- package/dist/web/assets/context-menu-03SuSeWI.js.gz +0 -0
- package/dist/web/assets/dist-B_DB3jSu.js +0 -1
- package/dist/web/assets/dist-B_DB3jSu.js.br +0 -0
- package/dist/web/assets/dist-B_DB3jSu.js.gz +0 -0
- package/dist/web/assets/dist-DBbCRukl.js +0 -1
- package/dist/web/assets/dist-DBbCRukl.js.br +0 -0
- package/dist/web/assets/dist-DBbCRukl.js.gz +0 -0
- package/dist/web/assets/engine-compile-Bqjaa_8Z.js.br +0 -0
- package/dist/web/assets/engine-compile-Bqjaa_8Z.js.gz +0 -0
- package/dist/web/assets/es2015-BUwabepB.js +0 -41
- package/dist/web/assets/es2015-BUwabepB.js.br +0 -0
- package/dist/web/assets/es2015-BUwabepB.js.gz +0 -0
- package/dist/web/assets/file-code-corner-CJDhFrYy.js +0 -1
- package/dist/web/assets/file-code-corner-CJDhFrYy.js.br +0 -3
- package/dist/web/assets/file-code-corner-CJDhFrYy.js.gz +0 -0
- package/dist/web/assets/file-navigation-view-preference-DeIXQ8c4.js +0 -1
- package/dist/web/assets/file-navigation-view-preference-DeIXQ8c4.js.br +0 -0
- package/dist/web/assets/file-navigation-view-preference-DeIXQ8c4.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-L7snJJP8.js +0 -2
- package/dist/web/assets/file-review-dialog-L7snJJP8.js.br +0 -0
- package/dist/web/assets/file-review-dialog-L7snJJP8.js.gz +0 -0
- package/dist/web/assets/file-tree-DvTv0Re2.js +0 -1
- package/dist/web/assets/file-tree-DvTv0Re2.js.br +0 -0
- package/dist/web/assets/file-tree-DvTv0Re2.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-hgIO8zJZ.js +0 -1
- package/dist/web/assets/git-commit-horizontal-hgIO8zJZ.js.br +0 -0
- package/dist/web/assets/git-commit-horizontal-hgIO8zJZ.js.gz +0 -0
- package/dist/web/assets/git-history-panel-DZY20FzY.js +0 -2
- package/dist/web/assets/git-history-panel-DZY20FzY.js.br +0 -0
- package/dist/web/assets/git-history-panel-DZY20FzY.js.gz +0 -0
- package/dist/web/assets/global-settings-dialog-cA1SWDdi.js +0 -1
- package/dist/web/assets/global-settings-dialog-cA1SWDdi.js.br +0 -0
- package/dist/web/assets/global-settings-dialog-cA1SWDdi.js.gz +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-UIjGvJpu.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-UIjGvJpu.js.gz +0 -0
- package/dist/web/assets/index-CldcNq0q.css +0 -2
- package/dist/web/assets/index-CldcNq0q.css.br +0 -0
- package/dist/web/assets/index-CldcNq0q.css.gz +0 -0
- package/dist/web/assets/index-WZ8-8oYp.js +0 -4
- package/dist/web/assets/index-WZ8-8oYp.js.br +0 -0
- package/dist/web/assets/index-WZ8-8oYp.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-SjU6ZsaR.js +0 -2
- package/dist/web/assets/lazy-message-response-SjU6ZsaR.js.br +0 -0
- package/dist/web/assets/lazy-message-response-SjU6ZsaR.js.gz +0 -0
- package/dist/web/assets/lib-DrPFkMXk.js.br +0 -0
- package/dist/web/assets/lib-DrPFkMXk.js.gz +0 -0
- package/dist/web/assets/loader-circle-CJOhkEC8.js +0 -1
- package/dist/web/assets/loader-circle-CJOhkEC8.js.br +0 -0
- package/dist/web/assets/loader-circle-CJOhkEC8.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CDYc39nv.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-CDYc39nv.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CDYc39nv.js.gz +0 -0
- package/dist/web/assets/message-response-BXln58hx.js +0 -7
- package/dist/web/assets/message-response-BXln58hx.js.br +0 -0
- package/dist/web/assets/message-response-BXln58hx.js.gz +0 -0
- package/dist/web/assets/patch-diff-viewer-BnoOysqK.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-BnoOysqK.js.gz +0 -0
- package/dist/web/assets/project-file-popup-page-C5dOvxw_.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-C5dOvxw_.js.gz +0 -0
- package/dist/web/assets/project-source-panel-CDrU5_qN.js +0 -3
- package/dist/web/assets/project-source-panel-CDrU5_qN.js.br +0 -0
- package/dist/web/assets/project-source-panel-CDrU5_qN.js.gz +0 -0
- package/dist/web/assets/prompt-input-controls-C_Zm2pL8.js +0 -1
- package/dist/web/assets/prompt-input-controls-C_Zm2pL8.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-C_Zm2pL8.js.gz +0 -0
- package/dist/web/assets/prompt-reference-token-XDhhAENk.js +0 -1
- package/dist/web/assets/prompt-reference-token-XDhhAENk.js.br +0 -0
- package/dist/web/assets/prompt-reference-token-XDhhAENk.js.gz +0 -0
- package/dist/web/assets/provider-connection-queries-BBs1XjP6.js +0 -1
- package/dist/web/assets/provider-connection-queries-BBs1XjP6.js.br +0 -0
- package/dist/web/assets/provider-connection-queries-BBs1XjP6.js.gz +0 -0
- package/dist/web/assets/react-runtime-CVaUQXZF.js.br +0 -0
- package/dist/web/assets/react-runtime-CVaUQXZF.js.gz +0 -0
- package/dist/web/assets/rolldown-runtime-QTnfLwEv.js +0 -1
- package/dist/web/assets/rolldown-runtime-QTnfLwEv.js.br +0 -0
- package/dist/web/assets/rolldown-runtime-QTnfLwEv.js.gz +0 -0
- package/dist/web/assets/shiki-bundle-CGkIRfLa.js.br +0 -0
- package/dist/web/assets/shiki-bundle-CGkIRfLa.js.gz +0 -0
- package/dist/web/assets/tooltip-BPVbHVEF.js +0 -1
- package/dist/web/assets/tooltip-BPVbHVEF.js.br +0 -0
- package/dist/web/assets/tooltip-BPVbHVEF.js.gz +0 -0
- package/dist/web/assets/upload-Bz26q2Ar.js +0 -1
- package/dist/web/assets/upload-Bz26q2Ar.js.br +0 -0
- package/dist/web/assets/upload-Bz26q2Ar.js.gz +0 -0
- package/dist/web/assets/useInfiniteQuery-DJg78OO5.js +0 -1
- package/dist/web/assets/useInfiniteQuery-DJg78OO5.js.br +0 -0
- package/dist/web/assets/useInfiniteQuery-DJg78OO5.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-B4eOJNJh.js +0 -2
- package/dist/web/assets/workbench-inspector-changes-B4eOJNJh.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-B4eOJNJh.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-C_XAi7ez.js +0 -1
- package/dist/web/assets/workbench-pet-canvas-C_XAi7ez.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-C_XAi7ez.js.gz +0 -0
- package/dist/web/assets/workbench-shell-DQbj_ooS.js +0 -15
- package/dist/web/assets/workbench-shell-DQbj_ooS.js.br +0 -0
- package/dist/web/assets/workbench-shell-DQbj_ooS.js.gz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import { WorkbenchPetProviderError, PendingRequestResolutionError } from './chunk-RNTA4MFS.js';
|
|
3
|
-
import { TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, isAgentFastModeAvailable, MAX_REALTIME_FILE_CHANGES, MAX_REALTIME_DIFF_BYTES, stripLeadingAgentSkillReferences, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_TEXT_BYTES } from './chunk-
|
|
3
|
+
import { TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, isAgentFastModeAvailable, MAX_REALTIME_FILE_CHANGES, MAX_REALTIME_DIFF_BYTES, stripLeadingAgentSkillReferences, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_TEXT_BYTES } from './chunk-G4BIMVEW.js';
|
|
4
4
|
import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
|
|
5
5
|
import { execFile, spawn } from 'child_process';
|
|
6
6
|
import { constants, mkdtempSync, rmSync, createReadStream, mkdirSync, unlinkSync, renameSync, writeFileSync, openSync, readSync, closeSync, statSync } from 'fs';
|
|
@@ -4466,7 +4466,8 @@ var require_pino = __commonJS({
|
|
|
4466
4466
|
}
|
|
4467
4467
|
});
|
|
4468
4468
|
var execFileAsync = promisify(execFile);
|
|
4469
|
-
var SUPPORTED_CODEX_VERSION = "0.
|
|
4469
|
+
var SUPPORTED_CODEX_VERSION = "0.153.4";
|
|
4470
|
+
var SUPPORTED_CODEX_VERSION_RANGE = ">=0.153.4,<0.154.0";
|
|
4470
4471
|
var BUNDLED_CODEX_TARGETS = {
|
|
4471
4472
|
"darwin-arm64": {
|
|
4472
4473
|
executableName: "codex",
|
|
@@ -4580,7 +4581,9 @@ async function locateCodexBinary(options = {}) {
|
|
|
4580
4581
|
if (pathBinary) {
|
|
4581
4582
|
return { path: resolve(pathBinary), source: "path" };
|
|
4582
4583
|
}
|
|
4583
|
-
throw new Error(
|
|
4584
|
+
throw new Error(
|
|
4585
|
+
`Codex binary was not found; install @openai/codex@${SUPPORTED_CODEX_VERSION} or configure --codex-bin`
|
|
4586
|
+
);
|
|
4584
4587
|
}
|
|
4585
4588
|
async function executeCodexVersion(binaryPath) {
|
|
4586
4589
|
const { stdout } = await execFileAsync(binaryPath, ["--version"], {
|
|
@@ -4604,8 +4607,12 @@ async function checkCodexVersion(binaryPath, options = {}) {
|
|
|
4604
4607
|
if (!version) {
|
|
4605
4608
|
throw new Error(`Invalid Codex version output: ${raw || "<empty>"}`);
|
|
4606
4609
|
}
|
|
4607
|
-
|
|
4608
|
-
|
|
4610
|
+
const [major, minor, patch] = version.split("-", 1)[0]?.split(".").map(Number) ?? [];
|
|
4611
|
+
const isPrerelease = version.includes("-");
|
|
4612
|
+
if (major !== 0 || minor !== 153 || patch === void 0 || patch < 4 || isPrerelease) {
|
|
4613
|
+
throw new Error(
|
|
4614
|
+
`Unsupported Codex version ${version}; expected ${SUPPORTED_CODEX_VERSION_RANGE}`
|
|
4615
|
+
);
|
|
4609
4616
|
}
|
|
4610
4617
|
return { raw, version };
|
|
4611
4618
|
}
|
|
@@ -4617,6 +4624,7 @@ var CodexProtocolMappingError = class extends Error {
|
|
|
4617
4624
|
};
|
|
4618
4625
|
var MAX_COMMAND_OUTPUT_BYTES = 1048576;
|
|
4619
4626
|
var MAX_COMMAND_OUTPUT_LINES = 1e4;
|
|
4627
|
+
var CODEX_THREAD_CONFIG = Object.freeze({ "tools.update_plan.enabled": true });
|
|
4620
4628
|
var CODEX_MAPPED_NOTIFICATION_METHODS = /* @__PURE__ */ new Set([
|
|
4621
4629
|
"error",
|
|
4622
4630
|
"guardianWarning",
|
|
@@ -4674,6 +4682,8 @@ var CODEX_IGNORED_NOTIFICATION_METHODS = /* @__PURE__ */ new Set([
|
|
|
4674
4682
|
"item/fileChange/outputDelta",
|
|
4675
4683
|
"mcpServer/oauthLogin/completed",
|
|
4676
4684
|
"mcpServer/event/stream/notification",
|
|
4685
|
+
"modelProvider/authRecoveryCompleted",
|
|
4686
|
+
"modelProvider/authRecoveryStarted",
|
|
4677
4687
|
"process/exited",
|
|
4678
4688
|
"process/outputDelta",
|
|
4679
4689
|
"rawResponse/completed",
|
|
@@ -5094,7 +5104,7 @@ function mapMcpServerElicitationRequest(serverRequest, project) {
|
|
|
5094
5104
|
type: "mcp_elicitation"
|
|
5095
5105
|
};
|
|
5096
5106
|
const mode = expectString(params["mode"], "MCP elicitation mode");
|
|
5097
|
-
const request = mode === "form" ? { ...identity, fields: mapFormFields(params["requestedSchema"]), mode } : mode === "url" ? { ...identity, mode, url: mapSafeUrl(params["url"]) } : mode === "openai/form" ? { ...identity, mode: "unsupported" } : (() => {
|
|
5107
|
+
const request = mode === "form" ? { ...identity, fields: mapFormFields(params["requestedSchema"]), mode } : mode === "url" ? { ...identity, mode, url: mapSafeUrl(params["url"]) } : mode === "openai/form" || mode === "openaiForm" ? { ...identity, mode: "unsupported" } : (() => {
|
|
5098
5108
|
throw new CodexProtocolMappingError("MCP elicitation mode is unsupported");
|
|
5099
5109
|
})();
|
|
5100
5110
|
return { providerRequestId: serverRequest.id, request };
|
|
@@ -6291,6 +6301,37 @@ function mapApprovalReviewAction(value) {
|
|
|
6291
6301
|
}
|
|
6292
6302
|
throw new CodexProtocolMappingError("Codex automatic approval review action type is invalid");
|
|
6293
6303
|
}
|
|
6304
|
+
function mapAsyncUserInputQuestions(value) {
|
|
6305
|
+
if (value === null) {
|
|
6306
|
+
return void 0;
|
|
6307
|
+
}
|
|
6308
|
+
if (!Array.isArray(value)) {
|
|
6309
|
+
throw new CodexProtocolMappingError("Codex agent message questions must be an array or null");
|
|
6310
|
+
}
|
|
6311
|
+
return value.map((questionValue) => {
|
|
6312
|
+
const question = expectRecord(questionValue, "Codex asynchronous user input question");
|
|
6313
|
+
const title = expectString(question["title"], "Codex asynchronous user input question title");
|
|
6314
|
+
const options = question["options"];
|
|
6315
|
+
if (options !== null && !Array.isArray(options)) {
|
|
6316
|
+
throw new CodexProtocolMappingError(
|
|
6317
|
+
"Codex asynchronous user input question options must be an array or null"
|
|
6318
|
+
);
|
|
6319
|
+
}
|
|
6320
|
+
if (Array.isArray(options)) {
|
|
6321
|
+
for (const option of options) {
|
|
6322
|
+
if (typeof option !== "string") {
|
|
6323
|
+
throw new CodexProtocolMappingError(
|
|
6324
|
+
"Codex asynchronous user input question options must contain only strings"
|
|
6325
|
+
);
|
|
6326
|
+
}
|
|
6327
|
+
}
|
|
6328
|
+
}
|
|
6329
|
+
return {
|
|
6330
|
+
title,
|
|
6331
|
+
options: options === null ? null : options.map((option) => expectString(option, "Codex asynchronous user input option"))
|
|
6332
|
+
};
|
|
6333
|
+
});
|
|
6334
|
+
}
|
|
6294
6335
|
function mapApprovalReviewItem(params) {
|
|
6295
6336
|
const review = expectRecord(params["review"], "Codex automatic approval review");
|
|
6296
6337
|
const riskLevel = optionalString(review["riskLevel"]);
|
|
@@ -6334,6 +6375,7 @@ function mapAgentItem(value, subagentNicknames = /* @__PURE__ */ new Map(), mapI
|
|
|
6334
6375
|
}
|
|
6335
6376
|
case "agentMessage": {
|
|
6336
6377
|
const text = expectString(item["text"], "Codex agent message text");
|
|
6378
|
+
const questions = mapAsyncUserInputQuestions(item["questions"]);
|
|
6337
6379
|
if (item["delivery"] !== null && item["delivery"] !== "async") {
|
|
6338
6380
|
throw new CodexProtocolMappingError("Codex agent message delivery must be async or null");
|
|
6339
6381
|
}
|
|
@@ -6341,6 +6383,7 @@ function mapAgentItem(value, subagentNicknames = /* @__PURE__ */ new Map(), mapI
|
|
|
6341
6383
|
return {
|
|
6342
6384
|
id,
|
|
6343
6385
|
...phase === void 0 ? {} : { phase },
|
|
6386
|
+
...questions === void 0 ? {} : { questions },
|
|
6344
6387
|
role: "assistant",
|
|
6345
6388
|
text,
|
|
6346
6389
|
type: "message"
|
|
@@ -6482,6 +6525,60 @@ function normalizedTitle(thread) {
|
|
|
6482
6525
|
const preview = optionalString(thread["preview"])?.trim().split(/\r?\n/u)[0]?.trim();
|
|
6483
6526
|
return preview?.length ? preview : "\u65B0\u804A\u5929";
|
|
6484
6527
|
}
|
|
6528
|
+
var CODEX_PINNED_THREAD_SECTION_ID = "01984de2-8f74-7c91-a3b2-5c5e937cf318";
|
|
6529
|
+
function isPinnedThreadSection(value) {
|
|
6530
|
+
if (value === null) return false;
|
|
6531
|
+
const section = expectRecord(value, "Codex thread section");
|
|
6532
|
+
const sectionId = expectString(section["id"], "Codex thread section id");
|
|
6533
|
+
expectString(section["name"], "Codex thread section name");
|
|
6534
|
+
const appearance = section["appearance"];
|
|
6535
|
+
if (appearance !== null && (!isRecord(appearance) || appearance["icon"] !== null && typeof appearance["icon"] !== "string" || appearance["color"] !== null && typeof appearance["color"] !== "string")) {
|
|
6536
|
+
throw new CodexProtocolMappingError("Codex thread section appearance is invalid");
|
|
6537
|
+
}
|
|
6538
|
+
return sectionId === CODEX_PINNED_THREAD_SECTION_ID;
|
|
6539
|
+
}
|
|
6540
|
+
function isProjectThread(thread, project) {
|
|
6541
|
+
const nativeProjectId = thread["projectId"];
|
|
6542
|
+
if (nativeProjectId !== null && typeof nativeProjectId !== "string") {
|
|
6543
|
+
throw new CodexProtocolMappingError("Codex thread projectId must be a string or null");
|
|
6544
|
+
}
|
|
6545
|
+
if (project.kind === "project") {
|
|
6546
|
+
return nativeProjectId === project.id;
|
|
6547
|
+
}
|
|
6548
|
+
if (nativeProjectId !== null) {
|
|
6549
|
+
return false;
|
|
6550
|
+
}
|
|
6551
|
+
return true;
|
|
6552
|
+
}
|
|
6553
|
+
function assertProjectThread(thread, project) {
|
|
6554
|
+
if (!isProjectThread(thread, project)) {
|
|
6555
|
+
return Promise.reject(
|
|
6556
|
+
new CodexProtocolMappingError("Codex thread does not belong to the active project")
|
|
6557
|
+
);
|
|
6558
|
+
}
|
|
6559
|
+
return Promise.resolve();
|
|
6560
|
+
}
|
|
6561
|
+
async function mapAgentTask(thread, project) {
|
|
6562
|
+
await assertProjectThread(thread, project);
|
|
6563
|
+
if (thread["model"] !== null && typeof thread["model"] !== "string") {
|
|
6564
|
+
throw new CodexProtocolMappingError("Codex thread model must be a string or null");
|
|
6565
|
+
}
|
|
6566
|
+
if (thread["reasoningEffort"] !== null && typeof thread["reasoningEffort"] !== "string") {
|
|
6567
|
+
throw new CodexProtocolMappingError("Codex thread reasoningEffort must be a string or null");
|
|
6568
|
+
}
|
|
6569
|
+
return {
|
|
6570
|
+
id: expectString(thread["id"], "Codex thread id"),
|
|
6571
|
+
pinned: isPinnedThreadSection(thread["section"]),
|
|
6572
|
+
projectId: project.id,
|
|
6573
|
+
// 线程配置来自原生元数据,与应用内保存的下次提交设置分别保留。
|
|
6574
|
+
threadConfiguration: {
|
|
6575
|
+
model: thread["model"],
|
|
6576
|
+
reasoningEffort: thread["reasoningEffort"]
|
|
6577
|
+
},
|
|
6578
|
+
title: normalizedTitle(thread),
|
|
6579
|
+
updatedAt: toDateTime(thread["updatedAt"], "Codex thread updatedAt")
|
|
6580
|
+
};
|
|
6581
|
+
}
|
|
6485
6582
|
function mapAgentModel(value) {
|
|
6486
6583
|
const model = expectRecord(value, "Codex model");
|
|
6487
6584
|
const multiAgentVersion = model["multiAgentVersion"];
|
|
@@ -8991,20 +9088,6 @@ async function releaseCodexProjectThreads(client, logger, projectId, taskIds) {
|
|
|
8991
9088
|
}
|
|
8992
9089
|
|
|
8993
9090
|
// packages/provider-codex/src/agent-provider-base.ts
|
|
8994
|
-
var CODEX_PINNED_THREAD_SECTION_ID = "01984de2-8f74-7c91-a3b2-5c5e937cf318";
|
|
8995
|
-
function isPinnedThreadSection(value) {
|
|
8996
|
-
if (value === null) {
|
|
8997
|
-
return false;
|
|
8998
|
-
}
|
|
8999
|
-
const section = expectRecord(value, "Codex thread section");
|
|
9000
|
-
const sectionId = expectString(section["id"], "Codex thread section id");
|
|
9001
|
-
expectString(section["name"], "Codex thread section name");
|
|
9002
|
-
const appearance = section["appearance"];
|
|
9003
|
-
if (appearance !== null && (!isRecord(appearance) || appearance["icon"] !== null && typeof appearance["icon"] !== "string" || appearance["color"] !== null && typeof appearance["color"] !== "string")) {
|
|
9004
|
-
throw new CodexProtocolMappingError("Codex thread section appearance is invalid");
|
|
9005
|
-
}
|
|
9006
|
-
return sectionId === CODEX_PINNED_THREAD_SECTION_ID;
|
|
9007
|
-
}
|
|
9008
9091
|
async function canonicalPathIdentity(path) {
|
|
9009
9092
|
try {
|
|
9010
9093
|
return normalizedPathIdentity(await realpath(path));
|
|
@@ -9019,27 +9102,6 @@ async function isSameCanonicalPath(left, right) {
|
|
|
9019
9102
|
]);
|
|
9020
9103
|
return leftIdentity === rightIdentity;
|
|
9021
9104
|
}
|
|
9022
|
-
function isProjectThread(thread, project) {
|
|
9023
|
-
const nativeProjectId = thread["projectId"];
|
|
9024
|
-
if (nativeProjectId !== null && typeof nativeProjectId !== "string") {
|
|
9025
|
-
throw new CodexProtocolMappingError("Codex thread projectId must be a string or null");
|
|
9026
|
-
}
|
|
9027
|
-
if (project.kind === "project") {
|
|
9028
|
-
return nativeProjectId === project.id;
|
|
9029
|
-
}
|
|
9030
|
-
if (nativeProjectId !== null) {
|
|
9031
|
-
return false;
|
|
9032
|
-
}
|
|
9033
|
-
return true;
|
|
9034
|
-
}
|
|
9035
|
-
function assertProjectThread(thread, project) {
|
|
9036
|
-
if (!isProjectThread(thread, project)) {
|
|
9037
|
-
return Promise.reject(
|
|
9038
|
-
new CodexProtocolMappingError("Codex thread does not belong to the active project")
|
|
9039
|
-
);
|
|
9040
|
-
}
|
|
9041
|
-
return Promise.resolve();
|
|
9042
|
-
}
|
|
9043
9105
|
function isThreadNotLoadedError(error) {
|
|
9044
9106
|
return error instanceof RpcResponseError && error.code === -32600 && error.message.startsWith("thread not loaded:");
|
|
9045
9107
|
}
|
|
@@ -9065,16 +9127,6 @@ function createUnmaterializedTaskSnapshot(task) {
|
|
|
9065
9127
|
turnsNextCursor: null
|
|
9066
9128
|
};
|
|
9067
9129
|
}
|
|
9068
|
-
async function mapAgentTask(thread, project) {
|
|
9069
|
-
await assertProjectThread(thread, project);
|
|
9070
|
-
return {
|
|
9071
|
-
id: expectString(thread["id"], "Codex thread id"),
|
|
9072
|
-
pinned: isPinnedThreadSection(thread["section"]),
|
|
9073
|
-
projectId: project.id,
|
|
9074
|
-
title: normalizedTitle(thread),
|
|
9075
|
-
updatedAt: toDateTime(thread["updatedAt"], "Codex thread updatedAt")
|
|
9076
|
-
};
|
|
9077
|
-
}
|
|
9078
9130
|
var CodexAgentProviderBase = class {
|
|
9079
9131
|
client;
|
|
9080
9132
|
eventListenersIncludingEphemeral = /* @__PURE__ */ new Set();
|
|
@@ -9201,6 +9253,7 @@ var CodexAgentProviderBase = class {
|
|
|
9201
9253
|
this.assertKnownProjectTask(taskId);
|
|
9202
9254
|
const response = expectRecord(
|
|
9203
9255
|
await this.client.request("thread/fork", {
|
|
9256
|
+
config: CODEX_THREAD_CONFIG,
|
|
9204
9257
|
// 仅返回元数据并覆盖完整运行时根;历史统一分页读取,避免单个 JSONL 帧过大。
|
|
9205
9258
|
excludeTurns: true,
|
|
9206
9259
|
...lastTurnId === void 0 ? {} : { lastTurnId },
|
|
@@ -9394,10 +9447,10 @@ var CodexAgentProviderQueue = class extends CodexAgentProviderBase {
|
|
|
9394
9447
|
return { name: skill.name, path: skill.path, type: "skill" };
|
|
9395
9448
|
});
|
|
9396
9449
|
const images = input.images.map((image) => {
|
|
9397
|
-
if (
|
|
9398
|
-
throw new CodexProtocolMappingError("Provider image
|
|
9450
|
+
if (image.path.length === 0) {
|
|
9451
|
+
throw new CodexProtocolMappingError("Provider image path must not be empty");
|
|
9399
9452
|
}
|
|
9400
|
-
return {
|
|
9453
|
+
return { detail: image.detail, path: image.path, type: "localImage" };
|
|
9401
9454
|
});
|
|
9402
9455
|
const files = input.files.map(createCodexFileTextInput);
|
|
9403
9456
|
const textAttachments = input.textAttachments.map((attachment) => ({
|
|
@@ -9567,6 +9620,7 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
|
|
|
9567
9620
|
async startTask(options = {}) {
|
|
9568
9621
|
const response = expectRecord(
|
|
9569
9622
|
await this.client.request("thread/start", {
|
|
9623
|
+
config: CODEX_THREAD_CONFIG,
|
|
9570
9624
|
historyMode: "paginated",
|
|
9571
9625
|
...this.project.kind === "temporary" ? {} : {
|
|
9572
9626
|
cwd: this.project.rootPath,
|
|
@@ -9766,6 +9820,22 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
|
|
|
9766
9820
|
"turn/interrupt response"
|
|
9767
9821
|
);
|
|
9768
9822
|
}
|
|
9823
|
+
async updateTurnApprovalsReviewer(taskId, turnId, reviewer) {
|
|
9824
|
+
this.assertKnownProjectTask(taskId);
|
|
9825
|
+
const response = expectRecord(
|
|
9826
|
+
await this.client.request("turn/settings/update", {
|
|
9827
|
+
threadId: taskId,
|
|
9828
|
+
turnId,
|
|
9829
|
+
approvalsReviewer: reviewer
|
|
9830
|
+
}),
|
|
9831
|
+
"turn/settings/update response"
|
|
9832
|
+
);
|
|
9833
|
+
const status = response["status"];
|
|
9834
|
+
if (status !== "applied" && status !== "targetUnavailable") {
|
|
9835
|
+
throw new CodexProtocolMappingError("Codex turn settings update status is invalid");
|
|
9836
|
+
}
|
|
9837
|
+
return status;
|
|
9838
|
+
}
|
|
9769
9839
|
async listBackgroundTerminals(taskId) {
|
|
9770
9840
|
this.assertKnownProjectTask(taskId);
|
|
9771
9841
|
const terminals = [];
|
|
@@ -9826,6 +9896,9 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
|
|
|
9826
9896
|
}
|
|
9827
9897
|
}
|
|
9828
9898
|
async listTasks(input = {}) {
|
|
9899
|
+
if (input.completed === true) {
|
|
9900
|
+
return this.listCompletedTasks(input);
|
|
9901
|
+
}
|
|
9829
9902
|
const response = expectRecord(
|
|
9830
9903
|
await this.client.request("thread/list", {
|
|
9831
9904
|
...input.archived === true ? { archived: true } : {},
|
|
@@ -9862,6 +9935,49 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
|
|
|
9862
9935
|
const data = [...pendingTasks, ...nativeTasks];
|
|
9863
9936
|
return { data, nextCursor: nextCursor ?? null };
|
|
9864
9937
|
}
|
|
9938
|
+
async listCompletedTasks(input) {
|
|
9939
|
+
const limit = Math.min(100, Math.max(1, input.limit ?? 10));
|
|
9940
|
+
const requestedCursors = /* @__PURE__ */ new Set();
|
|
9941
|
+
const data = [];
|
|
9942
|
+
let cursor = input.cursor;
|
|
9943
|
+
while (data.length < limit) {
|
|
9944
|
+
const response = expectRecord(
|
|
9945
|
+
await this.client.request("thread/list", {
|
|
9946
|
+
...cursor === void 0 ? {} : { cursor },
|
|
9947
|
+
limit: limit - data.length,
|
|
9948
|
+
...this.project.kind === "temporary" ? { projectId: null } : { projectId: this.project.id },
|
|
9949
|
+
sortDirection: "desc",
|
|
9950
|
+
sortKey: "updated_at"
|
|
9951
|
+
}),
|
|
9952
|
+
"thread/list response"
|
|
9953
|
+
);
|
|
9954
|
+
if (!Array.isArray(response["data"])) {
|
|
9955
|
+
throw new CodexProtocolMappingError("thread/list data must be an array");
|
|
9956
|
+
}
|
|
9957
|
+
for (const value of response["data"]) {
|
|
9958
|
+
const thread = expectRecord(value, "Codex thread");
|
|
9959
|
+
const status = expectString(
|
|
9960
|
+
expectRecord(thread["status"], "Codex thread status")["type"],
|
|
9961
|
+
"Codex thread status type"
|
|
9962
|
+
);
|
|
9963
|
+
if (status !== "idle" && status !== "notLoaded") continue;
|
|
9964
|
+
data.push(await mapAgentTask(thread, this.project));
|
|
9965
|
+
if (data.length === limit) break;
|
|
9966
|
+
}
|
|
9967
|
+
const nextCursor = response["nextCursor"];
|
|
9968
|
+
if (nextCursor === null || nextCursor === void 0) {
|
|
9969
|
+
return { data, nextCursor: null };
|
|
9970
|
+
}
|
|
9971
|
+
const next = expectString(nextCursor, "thread/list nextCursor");
|
|
9972
|
+
if (requestedCursors.has(next)) {
|
|
9973
|
+
throw new CodexProtocolMappingError("thread/list returned a repeated cursor");
|
|
9974
|
+
}
|
|
9975
|
+
requestedCursors.add(next);
|
|
9976
|
+
cursor = next;
|
|
9977
|
+
if (data.length === limit) return { data, nextCursor: next };
|
|
9978
|
+
}
|
|
9979
|
+
return { data, nextCursor: null };
|
|
9980
|
+
}
|
|
9865
9981
|
};
|
|
9866
9982
|
|
|
9867
9983
|
// packages/provider-codex/src/task-history-pagination.ts
|
|
@@ -10584,6 +10700,7 @@ var CodexAgentProviderEvents = class extends CodexAgentProviderTasks {
|
|
|
10584
10700
|
const resumePromise = (async () => {
|
|
10585
10701
|
const response = expectRecord(
|
|
10586
10702
|
await this.client.request("thread/resume", {
|
|
10703
|
+
config: CODEX_THREAD_CONFIG,
|
|
10587
10704
|
// 恢复只负责加载运行时,Snapshot 历史继续通过分页接口获取。
|
|
10588
10705
|
excludeTurns: true,
|
|
10589
10706
|
// 恢复 Project Task 时覆盖旧运行时配置,使全部根立即生效。
|
|
@@ -10611,7 +10728,10 @@ var CodexAgentProviderEvents = class extends CodexAgentProviderTasks {
|
|
|
10611
10728
|
async resumeReviewWorker(workerTaskId) {
|
|
10612
10729
|
try {
|
|
10613
10730
|
const response = expectRecord(
|
|
10614
|
-
await this.client.request("thread/resume", {
|
|
10731
|
+
await this.client.request("thread/resume", {
|
|
10732
|
+
config: CODEX_THREAD_CONFIG,
|
|
10733
|
+
threadId: workerTaskId
|
|
10734
|
+
}),
|
|
10615
10735
|
"review worker thread/resume response"
|
|
10616
10736
|
);
|
|
10617
10737
|
const thread = expectRecord(response["thread"], "review worker thread/resume thread");
|
|
@@ -10812,12 +10932,99 @@ var CodexNativeStateSnapshot = class {
|
|
|
10812
10932
|
}
|
|
10813
10933
|
};
|
|
10814
10934
|
|
|
10935
|
+
// packages/provider-codex/src/provider-connection-config.ts
|
|
10936
|
+
var DEFAULT_CUSTOM_PROVIDER_ID = "OpenAI";
|
|
10937
|
+
function isRecord6(value) {
|
|
10938
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10939
|
+
}
|
|
10940
|
+
function optionalString3(value, maxLength) {
|
|
10941
|
+
return typeof value === "string" ? value.slice(0, maxLength) : null;
|
|
10942
|
+
}
|
|
10943
|
+
function nonEmptyString(value) {
|
|
10944
|
+
return typeof value === "string" && value.trim().length > 0 ? value : null;
|
|
10945
|
+
}
|
|
10946
|
+
function readConfiguredProviderId(config) {
|
|
10947
|
+
return nonEmptyString(config["model_provider"]);
|
|
10948
|
+
}
|
|
10949
|
+
function readModelProviderConfig(config, providerId) {
|
|
10950
|
+
const providers = isRecord6(config["model_providers"]) ? config["model_providers"] : null;
|
|
10951
|
+
const provider = providers?.[providerId];
|
|
10952
|
+
return isRecord6(provider) ? provider : null;
|
|
10953
|
+
}
|
|
10954
|
+
function readActiveProvider(config) {
|
|
10955
|
+
const providerId = readConfiguredProviderId(config) ?? "openai";
|
|
10956
|
+
const openaiBaseUrl = optionalString3(config["openai_base_url"], 2048);
|
|
10957
|
+
if (providerId === "openai") {
|
|
10958
|
+
return openaiBaseUrl === null || openaiBaseUrl.length === 0 ? { customBaseUrl: null, mode: "official" } : { customBaseUrl: openaiBaseUrl, mode: "custom" };
|
|
10959
|
+
}
|
|
10960
|
+
const provider = readModelProviderConfig(config, providerId);
|
|
10961
|
+
const baseUrl = optionalString3(provider?.["base_url"], 2048);
|
|
10962
|
+
return {
|
|
10963
|
+
customBaseUrl: baseUrl === null || baseUrl.length === 0 ? null : baseUrl,
|
|
10964
|
+
mode: "custom"
|
|
10965
|
+
};
|
|
10966
|
+
}
|
|
10967
|
+
function createCustomProviderConfigUpdate(config, baseUrl, hasApiKey) {
|
|
10968
|
+
const configuredProviderId = readConfiguredProviderId(config);
|
|
10969
|
+
const existingProviderId = readActiveProvider(config).mode === "custom" ? configuredProviderId : null;
|
|
10970
|
+
const providerId = existingProviderId ?? DEFAULT_CUSTOM_PROVIDER_ID;
|
|
10971
|
+
if (providerId === "openai") {
|
|
10972
|
+
return {
|
|
10973
|
+
edits: [{ keyPath: "openai_base_url", mergeStrategy: "upsert", value: baseUrl }],
|
|
10974
|
+
providerId,
|
|
10975
|
+
requiresOpenaiAuth: true,
|
|
10976
|
+
rollbackEdits: [
|
|
10977
|
+
{
|
|
10978
|
+
keyPath: "openai_base_url",
|
|
10979
|
+
mergeStrategy: "replace",
|
|
10980
|
+
value: config["openai_base_url"] ?? null
|
|
10981
|
+
}
|
|
10982
|
+
]
|
|
10983
|
+
};
|
|
10984
|
+
}
|
|
10985
|
+
const previousProvider = readModelProviderConfig(config, providerId);
|
|
10986
|
+
const previousRequiresOpenaiAuth = previousProvider?.["requires_openai_auth"];
|
|
10987
|
+
const requiresOpenaiAuth = hasApiKey ? true : typeof previousRequiresOpenaiAuth === "boolean" ? previousRequiresOpenaiAuth : false;
|
|
10988
|
+
const configuredName = nonEmptyString(previousProvider?.["name"]);
|
|
10989
|
+
const edits = [
|
|
10990
|
+
{
|
|
10991
|
+
keyPath: `model_providers.${providerId}`,
|
|
10992
|
+
mergeStrategy: "upsert",
|
|
10993
|
+
value: {
|
|
10994
|
+
base_url: baseUrl,
|
|
10995
|
+
name: configuredName ?? providerId,
|
|
10996
|
+
requires_openai_auth: requiresOpenaiAuth,
|
|
10997
|
+
wire_api: "responses"
|
|
10998
|
+
}
|
|
10999
|
+
}
|
|
11000
|
+
];
|
|
11001
|
+
const rollbackEdits = [
|
|
11002
|
+
{
|
|
11003
|
+
keyPath: `model_providers.${providerId}`,
|
|
11004
|
+
mergeStrategy: "replace",
|
|
11005
|
+
value: previousProvider
|
|
11006
|
+
}
|
|
11007
|
+
];
|
|
11008
|
+
if (existingProviderId === null) {
|
|
11009
|
+
edits.push({
|
|
11010
|
+
keyPath: "model_provider",
|
|
11011
|
+
mergeStrategy: "upsert",
|
|
11012
|
+
value: DEFAULT_CUSTOM_PROVIDER_ID
|
|
11013
|
+
});
|
|
11014
|
+
rollbackEdits.push({
|
|
11015
|
+
keyPath: "model_provider",
|
|
11016
|
+
mergeStrategy: "replace",
|
|
11017
|
+
value: config["model_provider"] ?? null
|
|
11018
|
+
});
|
|
11019
|
+
}
|
|
11020
|
+
return { edits, providerId, requiresOpenaiAuth, rollbackEdits };
|
|
11021
|
+
}
|
|
11022
|
+
|
|
10815
11023
|
// packages/provider-codex/src/provider-connection.ts
|
|
10816
|
-
var CUSTOM_PROVIDER_ID = "codexly_custom";
|
|
10817
11024
|
var DEFAULT_MODEL_REQUEST_TIMEOUT_MS = 1e4;
|
|
10818
11025
|
var DEFAULT_MODEL_RESPONSE_MAX_BYTES = 1 * 1024 * 1024;
|
|
10819
11026
|
var DEFAULT_MODEL_COUNT_LIMIT = 1e3;
|
|
10820
|
-
function
|
|
11027
|
+
function isRecord7(value) {
|
|
10821
11028
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
10822
11029
|
}
|
|
10823
11030
|
function requiredString(value, field) {
|
|
@@ -10826,7 +11033,7 @@ function requiredString(value, field) {
|
|
|
10826
11033
|
}
|
|
10827
11034
|
return value;
|
|
10828
11035
|
}
|
|
10829
|
-
function
|
|
11036
|
+
function optionalString4(value, maxLength) {
|
|
10830
11037
|
return typeof value === "string" ? value.slice(0, maxLength) : null;
|
|
10831
11038
|
}
|
|
10832
11039
|
function normalizeBaseUrl(value) {
|
|
@@ -10866,39 +11073,25 @@ async function readBoundedBody(response, maximumBytes) {
|
|
|
10866
11073
|
return Buffer$1.concat(chunks, total);
|
|
10867
11074
|
}
|
|
10868
11075
|
function mapAccount(value) {
|
|
10869
|
-
if (!
|
|
11076
|
+
if (!isRecord7(value)) return null;
|
|
10870
11077
|
if (value["type"] === "apiKey") return { type: "apiKey" };
|
|
10871
11078
|
if (value["type"] === "chatgpt") {
|
|
10872
11079
|
return {
|
|
10873
|
-
email:
|
|
10874
|
-
planType:
|
|
11080
|
+
email: optionalString4(value["email"], 320),
|
|
11081
|
+
planType: optionalString4(value["planType"], 64),
|
|
10875
11082
|
type: "chatgpt"
|
|
10876
11083
|
};
|
|
10877
11084
|
}
|
|
10878
11085
|
return null;
|
|
10879
11086
|
}
|
|
10880
11087
|
function readConfig(response) {
|
|
10881
|
-
if (!
|
|
11088
|
+
if (!isRecord7(response) || !isRecord7(response["config"])) {
|
|
10882
11089
|
throw new CodexProviderConnectionError("Codex returned an invalid config response");
|
|
10883
11090
|
}
|
|
10884
11091
|
return response["config"];
|
|
10885
11092
|
}
|
|
10886
|
-
function readActiveProvider(config) {
|
|
10887
|
-
const providerId = typeof config["model_provider"] === "string" ? config["model_provider"] : "openai";
|
|
10888
|
-
const openaiBaseUrl = optionalString3(config["openai_base_url"], 2048);
|
|
10889
|
-
if (providerId === "openai") {
|
|
10890
|
-
return openaiBaseUrl === null || openaiBaseUrl.length === 0 ? { customBaseUrl: null, mode: "official" } : { customBaseUrl: openaiBaseUrl, mode: "custom" };
|
|
10891
|
-
}
|
|
10892
|
-
const providers = isRecord6(config["model_providers"]) ? config["model_providers"] : null;
|
|
10893
|
-
const provider = providers && isRecord6(providers[providerId]) ? providers[providerId] : null;
|
|
10894
|
-
const baseUrl = optionalString3(provider?.["base_url"], 2048);
|
|
10895
|
-
return {
|
|
10896
|
-
customBaseUrl: baseUrl === null || baseUrl.length === 0 ? null : baseUrl,
|
|
10897
|
-
mode: "custom"
|
|
10898
|
-
};
|
|
10899
|
-
}
|
|
10900
11093
|
function readAccountResponse(response) {
|
|
10901
|
-
if (!
|
|
11094
|
+
if (!isRecord7(response) || typeof response["requiresOpenaiAuth"] !== "boolean") {
|
|
10902
11095
|
throw new CodexProviderConnectionError("Codex returned an invalid account response");
|
|
10903
11096
|
}
|
|
10904
11097
|
return {
|
|
@@ -10917,12 +11110,8 @@ function createConnectionStatus(config, accountState, pendingLogin) {
|
|
|
10917
11110
|
state: pendingLogin?.state ?? (connected ? "connected" : "disconnected")
|
|
10918
11111
|
};
|
|
10919
11112
|
}
|
|
10920
|
-
function readCustomProviderConfig(config) {
|
|
10921
|
-
const providers = isRecord6(config["model_providers"]) ? config["model_providers"] : null;
|
|
10922
|
-
return providers?.[CUSTOM_PROVIDER_ID] ?? null;
|
|
10923
|
-
}
|
|
10924
11113
|
function readProviderCapabilities(response) {
|
|
10925
|
-
if (!
|
|
11114
|
+
if (!isRecord7(response) || typeof response["namespaceTools"] !== "boolean" || typeof response["imageGeneration"] !== "boolean" || typeof response["webSearch"] !== "boolean") {
|
|
10926
11115
|
throw new CodexProviderConnectionError("Codex returned invalid model provider capabilities");
|
|
10927
11116
|
}
|
|
10928
11117
|
}
|
|
@@ -10949,13 +11138,13 @@ var CodexProviderConnectionService = class {
|
|
|
10949
11138
|
if (method === "account/updated") {
|
|
10950
11139
|
this.#nativeState.clear();
|
|
10951
11140
|
}
|
|
10952
|
-
if (method === "account/updated" &&
|
|
11141
|
+
if (method === "account/updated" && isRecord7(params) && params["authMode"] === "chatgpt") {
|
|
10953
11142
|
this.#pendingLogin = null;
|
|
10954
11143
|
return;
|
|
10955
11144
|
}
|
|
10956
11145
|
if (method !== "account/login/completed") return;
|
|
10957
11146
|
this.#nativeState.clear();
|
|
10958
|
-
if (!
|
|
11147
|
+
if (!isRecord7(params)) return;
|
|
10959
11148
|
const loginId = params["loginId"];
|
|
10960
11149
|
if (typeof loginId !== "string" || this.#pendingLogin?.loginId !== loginId) return;
|
|
10961
11150
|
if (params["success"] === true) {
|
|
@@ -10963,7 +11152,7 @@ var CodexProviderConnectionService = class {
|
|
|
10963
11152
|
return;
|
|
10964
11153
|
}
|
|
10965
11154
|
this.#pendingLogin = {
|
|
10966
|
-
error:
|
|
11155
|
+
error: optionalString4(params["error"], 1e3) ?? "Login failed",
|
|
10967
11156
|
loginId,
|
|
10968
11157
|
state: "failed"
|
|
10969
11158
|
};
|
|
@@ -10988,7 +11177,7 @@ var CodexProviderConnectionService = class {
|
|
|
10988
11177
|
type: "chatgpt",
|
|
10989
11178
|
useHostedLoginSuccessPage: true
|
|
10990
11179
|
});
|
|
10991
|
-
if (!
|
|
11180
|
+
if (!isRecord7(response) || response["type"] !== "chatgpt") {
|
|
10992
11181
|
throw new CodexProviderConnectionError("Codex returned an invalid login response");
|
|
10993
11182
|
}
|
|
10994
11183
|
const loginId = requiredString(response["loginId"], "login id");
|
|
@@ -11012,21 +11201,26 @@ var CodexProviderConnectionService = class {
|
|
|
11012
11201
|
async readConfig() {
|
|
11013
11202
|
return this.#nativeState.readConfig();
|
|
11014
11203
|
}
|
|
11015
|
-
async configureCustom(input) {
|
|
11204
|
+
async configureCustom(input, persistedModels) {
|
|
11016
11205
|
const baseUrl = normalizeBaseUrl(input.baseUrl);
|
|
11017
11206
|
const apiKey = input.apiKey;
|
|
11018
11207
|
if (apiKey?.trim().length === 0) {
|
|
11019
11208
|
throw new CodexProviderConnectionError("Custom API key cannot be blank");
|
|
11020
11209
|
}
|
|
11021
11210
|
const manualModels = normalizeManualModels(input.models ?? [], this.#modelCountLimit);
|
|
11022
|
-
let
|
|
11023
|
-
|
|
11024
|
-
|
|
11025
|
-
}
|
|
11026
|
-
|
|
11027
|
-
|
|
11211
|
+
let models;
|
|
11212
|
+
if (input.models === void 0 && persistedModels !== void 0) {
|
|
11213
|
+
models = persistedModels;
|
|
11214
|
+
} else {
|
|
11215
|
+
let discoveredModels;
|
|
11216
|
+
try {
|
|
11217
|
+
discoveredModels = await this.#discoverModels(baseUrl, apiKey);
|
|
11218
|
+
} catch (error) {
|
|
11219
|
+
if (manualModels.length === 0) throw error;
|
|
11220
|
+
discoveredModels = [];
|
|
11221
|
+
}
|
|
11222
|
+
models = mapCustomModels([...discoveredModels, ...manualModels], this.#modelCountLimit);
|
|
11028
11223
|
}
|
|
11029
|
-
const models = mapCustomModels([...discoveredModels, ...manualModels], this.#modelCountLimit);
|
|
11030
11224
|
this.#nativeState.clear();
|
|
11031
11225
|
const [configResponse, accountResponse] = await Promise.all([
|
|
11032
11226
|
this.#client.request("config/read", { includeLayers: false }),
|
|
@@ -11034,20 +11228,13 @@ var CodexProviderConnectionService = class {
|
|
|
11034
11228
|
]);
|
|
11035
11229
|
const previousConfig = readConfig(configResponse);
|
|
11036
11230
|
const previousAccountState = readAccountResponse(accountResponse);
|
|
11231
|
+
const configUpdate = createCustomProviderConfigUpdate(
|
|
11232
|
+
previousConfig,
|
|
11233
|
+
baseUrl,
|
|
11234
|
+
apiKey !== void 0
|
|
11235
|
+
);
|
|
11037
11236
|
await this.#client.request("config/batchWrite", {
|
|
11038
|
-
edits:
|
|
11039
|
-
{
|
|
11040
|
-
keyPath: `model_providers.${CUSTOM_PROVIDER_ID}`,
|
|
11041
|
-
mergeStrategy: "upsert",
|
|
11042
|
-
value: {
|
|
11043
|
-
base_url: baseUrl,
|
|
11044
|
-
name: "Codexly Custom API",
|
|
11045
|
-
requires_openai_auth: apiKey !== void 0,
|
|
11046
|
-
wire_api: "responses"
|
|
11047
|
-
}
|
|
11048
|
-
},
|
|
11049
|
-
{ keyPath: "model_provider", mergeStrategy: "upsert", value: CUSTOM_PROVIDER_ID }
|
|
11050
|
-
]
|
|
11237
|
+
edits: configUpdate.edits
|
|
11051
11238
|
});
|
|
11052
11239
|
this.#nativeState.clear();
|
|
11053
11240
|
try {
|
|
@@ -11057,7 +11244,7 @@ var CodexProviderConnectionService = class {
|
|
|
11057
11244
|
apiKey,
|
|
11058
11245
|
type: "apiKey"
|
|
11059
11246
|
});
|
|
11060
|
-
if (!
|
|
11247
|
+
if (!isRecord7(loginResponse) || loginResponse["type"] !== "apiKey") {
|
|
11061
11248
|
throw new CodexProviderConnectionError(
|
|
11062
11249
|
"Codex returned an invalid API key login response"
|
|
11063
11250
|
);
|
|
@@ -11066,18 +11253,7 @@ var CodexProviderConnectionService = class {
|
|
|
11066
11253
|
} catch (error) {
|
|
11067
11254
|
try {
|
|
11068
11255
|
await this.#client.request("config/batchWrite", {
|
|
11069
|
-
edits:
|
|
11070
|
-
{
|
|
11071
|
-
keyPath: `model_providers.${CUSTOM_PROVIDER_ID}`,
|
|
11072
|
-
mergeStrategy: "replace",
|
|
11073
|
-
value: readCustomProviderConfig(previousConfig)
|
|
11074
|
-
},
|
|
11075
|
-
{
|
|
11076
|
-
keyPath: "model_provider",
|
|
11077
|
-
mergeStrategy: "replace",
|
|
11078
|
-
value: previousConfig["model_provider"] ?? null
|
|
11079
|
-
}
|
|
11080
|
-
]
|
|
11256
|
+
edits: configUpdate.rollbackEdits
|
|
11081
11257
|
});
|
|
11082
11258
|
this.#nativeState.clear();
|
|
11083
11259
|
} catch {
|
|
@@ -11089,13 +11265,16 @@ var CodexProviderConnectionService = class {
|
|
|
11089
11265
|
}
|
|
11090
11266
|
this.#pendingLogin = null;
|
|
11091
11267
|
this.#nativeState.clear();
|
|
11092
|
-
const activeConfig = {
|
|
11093
|
-
model_provider:
|
|
11268
|
+
const activeConfig = configUpdate.providerId === "openai" ? { model_provider: "openai", openai_base_url: baseUrl } : {
|
|
11269
|
+
model_provider: configUpdate.providerId,
|
|
11094
11270
|
model_providers: {
|
|
11095
|
-
[
|
|
11271
|
+
[configUpdate.providerId]: { base_url: baseUrl }
|
|
11096
11272
|
}
|
|
11097
11273
|
};
|
|
11098
|
-
const activeAccountState = apiKey === void 0 ? {
|
|
11274
|
+
const activeAccountState = apiKey === void 0 ? {
|
|
11275
|
+
account: previousAccountState.account,
|
|
11276
|
+
requiresOpenaiAuth: configUpdate.requiresOpenaiAuth
|
|
11277
|
+
} : { account: { type: "apiKey" }, requiresOpenaiAuth: true };
|
|
11099
11278
|
return {
|
|
11100
11279
|
models,
|
|
11101
11280
|
status: createConnectionStatus(activeConfig, activeAccountState, null)
|
|
@@ -11224,6 +11403,10 @@ var CodexRuntimeProjectProvider = class {
|
|
|
11224
11403
|
this.#runtime.assertTaskOwner(this.#project, taskId);
|
|
11225
11404
|
return this.#delegate.interruptTurn(taskId, turnId);
|
|
11226
11405
|
}
|
|
11406
|
+
updateTurnApprovalsReviewer(taskId, turnId, reviewer) {
|
|
11407
|
+
this.#runtime.assertTaskOwner(this.#project, taskId);
|
|
11408
|
+
return this.#delegate.updateTurnApprovalsReviewer(taskId, turnId, reviewer);
|
|
11409
|
+
}
|
|
11227
11410
|
async listBackgroundTerminals(taskId) {
|
|
11228
11411
|
await this.#ensureTaskOwner(taskId);
|
|
11229
11412
|
return this.#delegate.listBackgroundTerminals(taskId);
|
|
@@ -11621,7 +11804,7 @@ var CodexFuzzyFileSearchService = class {
|
|
|
11621
11804
|
var DEFAULT_CHANGE_DEBOUNCE_MS = 100;
|
|
11622
11805
|
var MAX_GIT_REPOSITORIES_PER_ROOT = 32;
|
|
11623
11806
|
var MAX_CODEX_GIT_METADATA_WATCHES = 128;
|
|
11624
|
-
function
|
|
11807
|
+
function isRecord8(value) {
|
|
11625
11808
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
11626
11809
|
}
|
|
11627
11810
|
async function pathExists(path) {
|
|
@@ -11750,7 +11933,7 @@ var CodexGitMetadataWatchService = class {
|
|
|
11750
11933
|
await state.operation;
|
|
11751
11934
|
}
|
|
11752
11935
|
receiveNotification(method, params) {
|
|
11753
|
-
if (method !== "fs/changed" || !
|
|
11936
|
+
if (method !== "fs/changed" || !isRecord8(params) || typeof params["watchId"] !== "string" || !Array.isArray(params["changedPaths"]) || !params["changedPaths"].every((path) => typeof path === "string")) {
|
|
11754
11937
|
return;
|
|
11755
11938
|
}
|
|
11756
11939
|
const owner = this.#watchOwners.get(params["watchId"]);
|
|
@@ -11817,7 +12000,7 @@ var CodexGitMetadataWatchService = class {
|
|
|
11817
12000
|
path: descriptor.path,
|
|
11818
12001
|
watchId
|
|
11819
12002
|
});
|
|
11820
|
-
if (!
|
|
12003
|
+
if (!isRecord8(response) || typeof response["path"] !== "string") {
|
|
11821
12004
|
throw new TypeError("fs/watch response path is invalid");
|
|
11822
12005
|
}
|
|
11823
12006
|
} catch {
|
|
@@ -11861,6 +12044,240 @@ var CodexGitMetadataWatchService = class {
|
|
|
11861
12044
|
}
|
|
11862
12045
|
};
|
|
11863
12046
|
|
|
12047
|
+
// packages/provider-codex/src/skill-market-provider.ts
|
|
12048
|
+
var OFFICIAL_MARKETPLACES = /* @__PURE__ */ new Set([
|
|
12049
|
+
"openai-curated",
|
|
12050
|
+
"openai-api-curated",
|
|
12051
|
+
"openai-curated-remote"
|
|
12052
|
+
]);
|
|
12053
|
+
function nullableString(value) {
|
|
12054
|
+
return typeof value === "string" ? value : null;
|
|
12055
|
+
}
|
|
12056
|
+
function mapOfficialPluginSummary(value, marketplaceName, marketplacePath) {
|
|
12057
|
+
const plugin = expectRecord(value, "plugin summary");
|
|
12058
|
+
const name = expectString(plugin["name"], "plugin summary name");
|
|
12059
|
+
const view = plugin["interface"] === void 0 ? void 0 : expectRecord(plugin["interface"], "plugin summary interface");
|
|
12060
|
+
const authPolicy = expectString(plugin["authPolicy"], "plugin summary authPolicy");
|
|
12061
|
+
const installPolicy = expectString(plugin["installPolicy"], "plugin summary installPolicy");
|
|
12062
|
+
const availability = plugin["availability"] ?? "AVAILABLE";
|
|
12063
|
+
if (authPolicy !== "ON_INSTALL" && authPolicy !== "ON_USE") {
|
|
12064
|
+
throw new CodexProtocolMappingError("plugin summary authPolicy is invalid");
|
|
12065
|
+
}
|
|
12066
|
+
if (installPolicy !== "NOT_AVAILABLE" && installPolicy !== "AVAILABLE" && installPolicy !== "INSTALLED_BY_DEFAULT") {
|
|
12067
|
+
throw new CodexProtocolMappingError("plugin summary installPolicy is invalid");
|
|
12068
|
+
}
|
|
12069
|
+
if (availability !== "AVAILABLE" && availability !== "DISABLED_BY_ADMIN") {
|
|
12070
|
+
throw new CodexProtocolMappingError("plugin summary availability is invalid");
|
|
12071
|
+
}
|
|
12072
|
+
return {
|
|
12073
|
+
authPolicy,
|
|
12074
|
+
availability,
|
|
12075
|
+
description: typeof view?.["shortDescription"] === "string" ? view["shortDescription"] : "",
|
|
12076
|
+
developerName: nullableString(view?.["developerName"]),
|
|
12077
|
+
disabledReason: nullableString(plugin["disabledReason"]),
|
|
12078
|
+
displayName: typeof view?.["displayName"] === "string" ? view["displayName"] : name,
|
|
12079
|
+
enabled: typeof plugin["enabled"] === "boolean" ? plugin["enabled"] : false,
|
|
12080
|
+
id: expectString(plugin["id"], "plugin summary id"),
|
|
12081
|
+
installPolicy,
|
|
12082
|
+
installed: typeof plugin["installed"] === "boolean" ? plugin["installed"] : false,
|
|
12083
|
+
localVersion: nullableString(plugin["localVersion"]),
|
|
12084
|
+
logoUrl: nullableString(view?.["logoUrl"]),
|
|
12085
|
+
marketplaceName,
|
|
12086
|
+
marketplacePath,
|
|
12087
|
+
name,
|
|
12088
|
+
pluginName: typeof plugin["remotePluginId"] === "string" ? plugin["remotePluginId"] : name,
|
|
12089
|
+
version: nullableString(plugin["version"])
|
|
12090
|
+
};
|
|
12091
|
+
}
|
|
12092
|
+
function mapOfficialPluginApps(value) {
|
|
12093
|
+
if (!Array.isArray(value)) return [];
|
|
12094
|
+
return value.map((item) => {
|
|
12095
|
+
const app = expectRecord(item, "plugin app");
|
|
12096
|
+
return {
|
|
12097
|
+
description: typeof app["description"] === "string" ? app["description"] : "",
|
|
12098
|
+
id: expectString(app["id"], "plugin app id"),
|
|
12099
|
+
installUrl: nullableString(app["installUrl"]),
|
|
12100
|
+
name: expectString(app["name"], "plugin app name")
|
|
12101
|
+
};
|
|
12102
|
+
});
|
|
12103
|
+
}
|
|
12104
|
+
function remotePluginParams(marketplaceName, marketplacePath, pluginName) {
|
|
12105
|
+
return {
|
|
12106
|
+
marketplacePath,
|
|
12107
|
+
pluginName,
|
|
12108
|
+
remoteMarketplaceName: marketplacePath === null ? marketplaceName : null
|
|
12109
|
+
};
|
|
12110
|
+
}
|
|
12111
|
+
async function listCodexOfficialPlugins(client, projects, forceRefetch) {
|
|
12112
|
+
const response = expectRecord(
|
|
12113
|
+
await client.request("plugin/list", {
|
|
12114
|
+
cwds: projects.flatMap((project) => project.roots.map((root) => root.path)),
|
|
12115
|
+
forceRefetch,
|
|
12116
|
+
marketplaceKinds: null
|
|
12117
|
+
}),
|
|
12118
|
+
"plugin/list response"
|
|
12119
|
+
);
|
|
12120
|
+
if (!Array.isArray(response["marketplaces"])) {
|
|
12121
|
+
throw new CodexProtocolMappingError("plugin/list marketplaces must be an array");
|
|
12122
|
+
}
|
|
12123
|
+
const data = [];
|
|
12124
|
+
for (const value of response["marketplaces"]) {
|
|
12125
|
+
const marketplace = expectRecord(value, "plugin marketplace");
|
|
12126
|
+
const name = expectString(marketplace["name"], "plugin marketplace name");
|
|
12127
|
+
if (!OFFICIAL_MARKETPLACES.has(name)) continue;
|
|
12128
|
+
if (!Array.isArray(marketplace["plugins"])) {
|
|
12129
|
+
throw new CodexProtocolMappingError("plugin marketplace plugins must be an array");
|
|
12130
|
+
}
|
|
12131
|
+
const path = nullableString(marketplace["path"]);
|
|
12132
|
+
for (const plugin of marketplace["plugins"]) {
|
|
12133
|
+
data.push(mapOfficialPluginSummary(plugin, name, path));
|
|
12134
|
+
}
|
|
12135
|
+
}
|
|
12136
|
+
return { data };
|
|
12137
|
+
}
|
|
12138
|
+
async function getCodexOfficialPlugin(client, marketplaceName, marketplacePath, pluginName) {
|
|
12139
|
+
const response = expectRecord(
|
|
12140
|
+
await client.request(
|
|
12141
|
+
"plugin/read",
|
|
12142
|
+
remotePluginParams(marketplaceName, marketplacePath, pluginName)
|
|
12143
|
+
),
|
|
12144
|
+
"plugin/read response"
|
|
12145
|
+
);
|
|
12146
|
+
const plugin = expectRecord(response["plugin"], "plugin/read plugin");
|
|
12147
|
+
const summaryValue = expectRecord(plugin["summary"], "plugin/read summary");
|
|
12148
|
+
const summary = mapOfficialPluginSummary(
|
|
12149
|
+
summaryValue,
|
|
12150
|
+
expectString(plugin["marketplaceName"], "plugin/read marketplaceName"),
|
|
12151
|
+
nullableString(plugin["marketplacePath"])
|
|
12152
|
+
);
|
|
12153
|
+
const skills = Array.isArray(plugin["skills"]) ? plugin["skills"].map((value) => {
|
|
12154
|
+
const skill = expectRecord(value, "plugin skill");
|
|
12155
|
+
return {
|
|
12156
|
+
description: typeof skill["shortDescription"] === "string" ? skill["shortDescription"] : typeof skill["description"] === "string" ? skill["description"] : "",
|
|
12157
|
+
name: expectString(skill["name"], "plugin skill name")
|
|
12158
|
+
};
|
|
12159
|
+
}) : [];
|
|
12160
|
+
const mcpServers = Array.isArray(plugin["mcpServers"]) ? plugin["mcpServers"].map((value) => expectString(value, "plugin MCP server")) : [];
|
|
12161
|
+
const hooks = Array.isArray(plugin["hooks"]) ? plugin["hooks"].map(
|
|
12162
|
+
(value) => expectString(expectRecord(value, "plugin hook")["key"], "plugin hook key")
|
|
12163
|
+
) : [];
|
|
12164
|
+
const view = summaryValue["interface"] === void 0 ? void 0 : expectRecord(summaryValue["interface"], "plugin summary interface");
|
|
12165
|
+
return {
|
|
12166
|
+
...summary,
|
|
12167
|
+
apps: mapOfficialPluginApps(plugin["apps"]),
|
|
12168
|
+
description: typeof plugin["description"] === "string" ? plugin["description"] : summary.description,
|
|
12169
|
+
hooks,
|
|
12170
|
+
mcpServers,
|
|
12171
|
+
skills,
|
|
12172
|
+
websiteUrl: nullableString(view?.["websiteUrl"])
|
|
12173
|
+
};
|
|
12174
|
+
}
|
|
12175
|
+
async function installCodexOfficialPlugin(client, marketplaceName, marketplacePath, pluginName, installAttemptId) {
|
|
12176
|
+
const response = expectRecord(
|
|
12177
|
+
await client.request("plugin/install", {
|
|
12178
|
+
installAttemptId,
|
|
12179
|
+
...remotePluginParams(marketplaceName, marketplacePath, pluginName)
|
|
12180
|
+
}),
|
|
12181
|
+
"plugin/install response"
|
|
12182
|
+
);
|
|
12183
|
+
const authPolicy = expectString(response["authPolicy"], "plugin/install authPolicy");
|
|
12184
|
+
if (authPolicy !== "ON_INSTALL" && authPolicy !== "ON_USE") {
|
|
12185
|
+
throw new CodexProtocolMappingError("plugin/install authPolicy is invalid");
|
|
12186
|
+
}
|
|
12187
|
+
return { appsNeedingAuth: mapOfficialPluginApps(response["appsNeedingAuth"]), authPolicy };
|
|
12188
|
+
}
|
|
12189
|
+
async function uninstallCodexOfficialPlugin(client, pluginId) {
|
|
12190
|
+
await client.request("plugin/uninstall", { pluginId });
|
|
12191
|
+
return {};
|
|
12192
|
+
}
|
|
12193
|
+
async function listCodexInstalledSkills(client, projects, forceReload) {
|
|
12194
|
+
const roots = projects.flatMap(
|
|
12195
|
+
(project) => project.roots.map((root) => ({ path: root.path, project }))
|
|
12196
|
+
);
|
|
12197
|
+
const rootsByPath = new Map(roots.map((root) => [root.path, root]));
|
|
12198
|
+
const response = expectRecord(
|
|
12199
|
+
await client.request("skills/list", {
|
|
12200
|
+
cwds: roots.map((root) => root.path),
|
|
12201
|
+
forceReload
|
|
12202
|
+
}),
|
|
12203
|
+
"skills/list response"
|
|
12204
|
+
);
|
|
12205
|
+
if (!Array.isArray(response["data"])) {
|
|
12206
|
+
throw new CodexProtocolMappingError("skills/list data must be an array");
|
|
12207
|
+
}
|
|
12208
|
+
const seenPaths = /* @__PURE__ */ new Set();
|
|
12209
|
+
const data = [];
|
|
12210
|
+
for (const value of response["data"]) {
|
|
12211
|
+
const entry = expectRecord(value, "skills/list entry");
|
|
12212
|
+
const cwd = expectString(entry["cwd"], "skills/list cwd");
|
|
12213
|
+
if (!Array.isArray(entry["skills"])) {
|
|
12214
|
+
throw new CodexProtocolMappingError("skills/list skills must be an array");
|
|
12215
|
+
}
|
|
12216
|
+
for (const rawSkill of entry["skills"]) {
|
|
12217
|
+
const skill = mapCodexSkill(rawSkill);
|
|
12218
|
+
if (seenPaths.has(skill.path)) continue;
|
|
12219
|
+
seenPaths.add(skill.path);
|
|
12220
|
+
const root = skill.scope === "repo" ? rootsByPath.get(cwd) : void 0;
|
|
12221
|
+
data.push({
|
|
12222
|
+
...skill,
|
|
12223
|
+
...root === void 0 ? {} : {
|
|
12224
|
+
projectId: root.project.id,
|
|
12225
|
+
projectName: root.project.name,
|
|
12226
|
+
rootPath: root.path
|
|
12227
|
+
},
|
|
12228
|
+
source: "local"
|
|
12229
|
+
});
|
|
12230
|
+
}
|
|
12231
|
+
}
|
|
12232
|
+
return { data, nextCursor: null };
|
|
12233
|
+
}
|
|
12234
|
+
async function setCodexSkillEnabled(client, path, enabled) {
|
|
12235
|
+
const response = expectRecord(
|
|
12236
|
+
await client.request("skills/config/write", { enabled, name: null, path }),
|
|
12237
|
+
"skills/config/write response"
|
|
12238
|
+
);
|
|
12239
|
+
return {
|
|
12240
|
+
effectiveEnabled: expectBoolean(
|
|
12241
|
+
response["effectiveEnabled"],
|
|
12242
|
+
"skills/config/write effectiveEnabled"
|
|
12243
|
+
)
|
|
12244
|
+
};
|
|
12245
|
+
}
|
|
12246
|
+
async function listCodexConfiguredMcpServers(client) {
|
|
12247
|
+
const response = expectRecord(
|
|
12248
|
+
await client.request("config/read", { includeLayers: false }),
|
|
12249
|
+
"config/read response"
|
|
12250
|
+
);
|
|
12251
|
+
const config = expectRecord(response["config"], "config/read config");
|
|
12252
|
+
const rawServers = config["mcp_servers"];
|
|
12253
|
+
if (rawServers === void 0) return { data: [] };
|
|
12254
|
+
const servers = expectRecord(rawServers, "config/read mcp_servers");
|
|
12255
|
+
return {
|
|
12256
|
+
data: Object.entries(servers).map(([name, value]) => {
|
|
12257
|
+
const server = expectRecord(value, `config/read mcp_servers.${name}`);
|
|
12258
|
+
const configuredEnabled = server["enabled"];
|
|
12259
|
+
if (configuredEnabled !== void 0 && typeof configuredEnabled !== "boolean") {
|
|
12260
|
+
throw new CodexProtocolMappingError(`config/read mcp_servers.${name}.enabled is invalid`);
|
|
12261
|
+
}
|
|
12262
|
+
return { enabled: configuredEnabled ?? true, name };
|
|
12263
|
+
}).toSorted((left, right) => left.name.localeCompare(right.name))
|
|
12264
|
+
};
|
|
12265
|
+
}
|
|
12266
|
+
function quoteConfigKeySegment(value) {
|
|
12267
|
+
return `"${value.replaceAll("\\", "\\\\").replaceAll('"', '\\"')}"`;
|
|
12268
|
+
}
|
|
12269
|
+
async function setCodexMcpServerEnabled(client, name, enabled) {
|
|
12270
|
+
await client.request("config/value/write", {
|
|
12271
|
+
expectedVersion: null,
|
|
12272
|
+
filePath: null,
|
|
12273
|
+
keyPath: `mcp_servers.${quoteConfigKeySegment(name)}.enabled`,
|
|
12274
|
+
mergeStrategy: "replace",
|
|
12275
|
+
value: enabled
|
|
12276
|
+
});
|
|
12277
|
+
await client.request("config/mcpServer/reload");
|
|
12278
|
+
return { enabled };
|
|
12279
|
+
}
|
|
12280
|
+
|
|
11864
12281
|
// packages/provider-codex/src/runtime-provider.ts
|
|
11865
12282
|
function optionalNonEmptyString(value) {
|
|
11866
12283
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
@@ -11981,8 +12398,8 @@ var CodexRuntimeProvider = class {
|
|
|
11981
12398
|
cancelProviderLogin(loginId) {
|
|
11982
12399
|
return this.#providerConnection.cancelLogin(loginId);
|
|
11983
12400
|
}
|
|
11984
|
-
configureCustomProvider(input) {
|
|
11985
|
-
return this.#providerConnection.configureCustom(input);
|
|
12401
|
+
configureCustomProvider(input, persistedModels) {
|
|
12402
|
+
return this.#providerConnection.configureCustom(input, persistedModels);
|
|
11986
12403
|
}
|
|
11987
12404
|
forProject(project) {
|
|
11988
12405
|
const primaryRoot = project.roots[0];
|
|
@@ -12058,6 +12475,30 @@ var CodexRuntimeProvider = class {
|
|
|
12058
12475
|
subscribeRpc: false
|
|
12059
12476
|
}).listModels();
|
|
12060
12477
|
}
|
|
12478
|
+
listConfiguredMcpServers() {
|
|
12479
|
+
return listCodexConfiguredMcpServers(this.#client);
|
|
12480
|
+
}
|
|
12481
|
+
listInstalledSkills(projects, forceReload) {
|
|
12482
|
+
return listCodexInstalledSkills(this.#client, projects, forceReload);
|
|
12483
|
+
}
|
|
12484
|
+
listOfficialPlugins(projects, forceRefetch) {
|
|
12485
|
+
return listCodexOfficialPlugins(this.#client, projects, forceRefetch);
|
|
12486
|
+
}
|
|
12487
|
+
getOfficialPlugin(marketplaceName, marketplacePath, pluginName) {
|
|
12488
|
+
return getCodexOfficialPlugin(this.#client, marketplaceName, marketplacePath, pluginName);
|
|
12489
|
+
}
|
|
12490
|
+
installOfficialPlugin(marketplaceName, marketplacePath, pluginName, installAttemptId) {
|
|
12491
|
+
return installCodexOfficialPlugin(
|
|
12492
|
+
this.#client,
|
|
12493
|
+
marketplaceName,
|
|
12494
|
+
marketplacePath,
|
|
12495
|
+
pluginName,
|
|
12496
|
+
installAttemptId
|
|
12497
|
+
);
|
|
12498
|
+
}
|
|
12499
|
+
uninstallOfficialPlugin(pluginId) {
|
|
12500
|
+
return uninstallCodexOfficialPlugin(this.#client, pluginId);
|
|
12501
|
+
}
|
|
12061
12502
|
logoutProvider() {
|
|
12062
12503
|
return this.#providerConnection.logout();
|
|
12063
12504
|
}
|
|
@@ -12107,6 +12548,12 @@ var CodexRuntimeProvider = class {
|
|
|
12107
12548
|
startOfficialProviderLogin() {
|
|
12108
12549
|
return this.#providerConnection.startOfficialLogin();
|
|
12109
12550
|
}
|
|
12551
|
+
setMcpServerEnabled(name, enabled) {
|
|
12552
|
+
return setCodexMcpServerEnabled(this.#client, name, enabled);
|
|
12553
|
+
}
|
|
12554
|
+
setSkillEnabled(path, enabled) {
|
|
12555
|
+
return setCodexSkillEnabled(this.#client, path, enabled);
|
|
12556
|
+
}
|
|
12110
12557
|
beginTaskRead(project, taskId) {
|
|
12111
12558
|
return this.#owners.beginTaskRead(project, taskId);
|
|
12112
12559
|
}
|
|
@@ -12136,7 +12583,7 @@ function createCodexRuntimeProvider(options) {
|
|
|
12136
12583
|
...options.fetch === void 0 ? {} : { fetch: options.fetch }
|
|
12137
12584
|
});
|
|
12138
12585
|
}
|
|
12139
|
-
var APP_SERVER_ARGUMENTS = ["app-server", "--listen", "stdio://"];
|
|
12586
|
+
var APP_SERVER_ARGUMENTS = ["app-server", "--enable", "plugins", "--listen", "stdio://"];
|
|
12140
12587
|
var CodexAppServerExitedError = class extends RpcConnectionClosedError {
|
|
12141
12588
|
exitCode;
|
|
12142
12589
|
signal;
|
|
@@ -12340,6 +12787,13 @@ function mapUnixSeconds(value, context) {
|
|
|
12340
12787
|
}
|
|
12341
12788
|
return date.toISOString();
|
|
12342
12789
|
}
|
|
12790
|
+
function validateNullableUnixSeconds(value, context) {
|
|
12791
|
+
if (value === null) return;
|
|
12792
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 0) {
|
|
12793
|
+
throw new CodexProtocolMappingError(`${context} must be a Unix timestamp or null`);
|
|
12794
|
+
}
|
|
12795
|
+
mapUnixSeconds(value, context);
|
|
12796
|
+
}
|
|
12343
12797
|
function mapProjectRoot(value, index) {
|
|
12344
12798
|
const root = expectRecord(value, `Codex project root ${String(index)}`);
|
|
12345
12799
|
const path = expectNonEmptyString2(root["path"], `Codex project root ${String(index)} path`);
|
|
@@ -12369,6 +12823,7 @@ function mapCodexProject(value) {
|
|
|
12369
12823
|
}
|
|
12370
12824
|
validateMetadata(nativeProject["metadata"]);
|
|
12371
12825
|
mapUnixSeconds(nativeProject["updatedAt"], "Codex project updatedAt");
|
|
12826
|
+
validateNullableUnixSeconds(nativeProject["recencyAt"], "Codex project recencyAt");
|
|
12372
12827
|
return {
|
|
12373
12828
|
position: expectSafeInteger(nativeProject["position"], "Codex project position"),
|
|
12374
12829
|
project: {
|
|
@@ -13540,4 +13995,4 @@ function validateDownloadUrl(value) {
|
|
|
13540
13995
|
}
|
|
13541
13996
|
}
|
|
13542
13997
|
|
|
13543
|
-
export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, require_pino, require_safe_stable_stringify, startCodexAppServer };
|
|
13998
|
+
export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, SUPPORTED_CODEX_VERSION_RANGE, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, require_pino, require_safe_stable_stringify, startCodexAppServer };
|