@bryanhu/codexly 0.37.0 → 0.38.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 +46 -16
- package/README.md +8 -47
- package/README.zh-CN.md +8 -47
- package/dist/chunk-4RQ7HLCK.js +3 -0
- package/dist/chunk-GMNBWGMQ.js +5 -0
- package/dist/{chunk-PQPYP3AR.js → chunk-LGFUYNXR.js} +1 -1
- package/dist/{chunk-JHBSDMIM.js → chunk-RWMSDM4X.js} +1 -1
- package/dist/{chunk-ZK5H37U3.js → chunk-SNN2J7BU.js} +187 -170
- package/dist/chunk-YCHIPWV2.js +40 -0
- package/dist/cli.js +5 -5
- package/dist/client/index.js +2 -2
- package/dist/{command-RGXPFWPR.js → command-2D66UEBJ.js} +1 -1
- package/dist/core/index.js +1 -1
- package/dist/protocol/index.js +1 -1
- package/dist/providers/codex/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/sqlite-state-worker.js +22 -18
- package/dist/web/.vite/manifest.json +128 -135
- 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-K1YqqkJL.js → agent-settings-panel-C9S0LXqi.js} +1 -1
- package/dist/web/assets/agent-settings-panel-C9S0LXqi.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-C9S0LXqi.js.gz +0 -0
- package/dist/web/assets/app-update-dialog-BsIh1VPg.js +1 -0
- package/dist/web/assets/app-update-dialog-BsIh1VPg.js.br +0 -0
- package/dist/web/assets/app-update-dialog-BsIh1VPg.js.gz +0 -0
- package/dist/web/assets/{background-image-picker-BHqZ3SX1.js → background-image-picker-B1xDUft3.js} +1 -1
- package/dist/web/assets/background-image-picker-B1xDUft3.js.br +0 -0
- package/dist/web/assets/background-image-picker-B1xDUft3.js.gz +0 -0
- package/dist/web/assets/{code-highlighter-DIfBIRTg.js → code-highlighter-kiC_chgH.js} +1 -1
- package/dist/web/assets/code-highlighter-kiC_chgH.js.br +0 -0
- package/dist/web/assets/code-highlighter-kiC_chgH.js.gz +0 -0
- package/dist/web/assets/{commit-settings-panel-B0i2Bqmu.js → commit-settings-panel-Cdtyux2J.js} +1 -1
- package/dist/web/assets/commit-settings-panel-Cdtyux2J.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-Cdtyux2J.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-DaGgZASG.js +2 -0
- package/dist/web/assets/file-review-dialog-DaGgZASG.js.br +0 -0
- package/dist/web/assets/file-review-dialog-DaGgZASG.js.gz +0 -0
- package/dist/web/assets/git-commit-review-Bz8YDy59.js +2 -0
- package/dist/web/assets/git-commit-review-Bz8YDy59.js.br +0 -0
- package/dist/web/assets/git-commit-review-Bz8YDy59.js.gz +0 -0
- package/dist/web/assets/{git-history-panel-Bk5XtV-h.js → git-history-panel-QBsXgUT7.js} +1 -1
- package/dist/web/assets/git-history-panel-QBsXgUT7.js.br +0 -0
- package/dist/web/assets/git-history-panel-QBsXgUT7.js.gz +0 -0
- package/dist/web/assets/{global-search-dialog-nP5Zoo16.js → global-search-dialog-DDaHRgce.js} +1 -1
- package/dist/web/assets/global-search-dialog-DDaHRgce.js.br +0 -0
- package/dist/web/assets/global-search-dialog-DDaHRgce.js.gz +0 -0
- package/dist/web/assets/global-settings-about-DpKyx3RM.js +1 -0
- package/dist/web/assets/global-settings-about-DpKyx3RM.js.br +0 -0
- package/dist/web/assets/global-settings-about-DpKyx3RM.js.gz +0 -0
- package/dist/web/assets/{global-settings-page-Bm6WTYej.js → global-settings-page-BEUBn7B5.js} +2 -2
- package/dist/web/assets/global-settings-page-BEUBn7B5.js.br +0 -0
- package/dist/web/assets/global-settings-page-BEUBn7B5.js.gz +0 -0
- package/dist/web/assets/{global-settings-pets-ChV29f_6.js → global-settings-pets-DBYFpNQk.js} +1 -1
- package/dist/web/assets/global-settings-pets-DBYFpNQk.js.br +0 -0
- package/dist/web/assets/global-settings-pets-DBYFpNQk.js.gz +0 -0
- package/dist/web/assets/{highlighted-body-OFNGDK62-D1VJUKau.js → highlighted-body-OFNGDK62-CeVKUhHG.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-CeVKUhHG.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-CeVKUhHG.js.gz +0 -0
- package/dist/web/assets/{history-task-timeline-CphChwX0.js → history-task-timeline-Dl6to6Cp.js} +1 -1
- package/dist/web/assets/history-task-timeline-Dl6to6Cp.js.br +0 -0
- package/dist/web/assets/history-task-timeline-Dl6to6Cp.js.gz +0 -0
- package/dist/web/assets/{image-preview-CZiY9KQs.js → image-preview-Bez628xh.js} +2 -2
- package/dist/web/assets/image-preview-Bez628xh.js.br +0 -0
- package/dist/web/assets/image-preview-Bez628xh.js.gz +0 -0
- package/dist/web/assets/{image-preview-content-D54Quns6.js → image-preview-content-TkopF2n1.js} +1 -1
- package/dist/web/assets/image-preview-content-TkopF2n1.js.br +0 -0
- package/dist/web/assets/image-preview-content-TkopF2n1.js.gz +0 -0
- package/dist/web/assets/index-CHJSDTYw.css +2 -0
- package/dist/web/assets/index-CHJSDTYw.css.br +0 -0
- package/dist/web/assets/index-CHJSDTYw.css.gz +0 -0
- package/dist/web/assets/index-DobF11m_.js +4 -0
- package/dist/web/assets/index-DobF11m_.js.br +0 -0
- package/dist/web/assets/index-DobF11m_.js.gz +0 -0
- package/dist/web/assets/initial-deps-C-3sxJvc.js +2 -0
- package/dist/web/assets/initial-deps-C-3sxJvc.js.br +0 -0
- package/dist/web/assets/initial-deps-C-3sxJvc.js.gz +0 -0
- package/dist/web/assets/{installed-skills-pane-DnKCXx4r.js → installed-skills-pane-yCfl2E4Z.js} +1 -1
- package/dist/web/assets/installed-skills-pane-yCfl2E4Z.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-yCfl2E4Z.js.gz +0 -0
- package/dist/web/assets/markdown-DVABVVc2.js +1 -0
- package/dist/web/assets/markdown-DVABVVc2.js.br +0 -0
- package/dist/web/assets/markdown-DVABVVc2.js.gz +0 -0
- package/dist/web/assets/{mcp-management-pane-CAcqH6Ft.js → mcp-management-pane-D4fhknd1.js} +1 -1
- package/dist/web/assets/mcp-management-pane-D4fhknd1.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-D4fhknd1.js.gz +0 -0
- package/dist/web/assets/mdx-BLuqtYwj.js +1 -0
- package/dist/web/assets/mdx-BLuqtYwj.js.br +0 -0
- package/dist/web/assets/mdx-BLuqtYwj.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BL0SiEsb.js +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BL0SiEsb.js.br +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-BL0SiEsb.js.gz +0 -0
- package/dist/web/assets/message-assistant-directive-r0UOX93m.js +3 -0
- package/dist/web/assets/message-assistant-directive-r0UOX93m.js.br +0 -0
- package/dist/web/assets/message-assistant-directive-r0UOX93m.js.gz +0 -0
- package/dist/web/assets/message-response-DTlvlBMa.js +151 -0
- package/dist/web/assets/message-response-DTlvlBMa.js.br +0 -0
- package/dist/web/assets/message-response-DTlvlBMa.js.gz +0 -0
- package/dist/web/assets/{official-plugins-pane-CBk4rbLt.js → official-plugins-pane-CRnpq0MJ.js} +1 -1
- package/dist/web/assets/official-plugins-pane-CRnpq0MJ.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-CRnpq0MJ.js.gz +0 -0
- package/dist/web/assets/{patch-diff-viewer-nIzfWkKE.js → patch-diff-viewer-fv2hVYyb.js} +3 -3
- package/dist/web/assets/patch-diff-viewer-fv2hVYyb.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-fv2hVYyb.js.gz +0 -0
- package/dist/web/assets/{pdf-preview-Zrj4u-KR.js → pdf-preview-CEvfJiZa.js} +3 -3
- package/dist/web/assets/pdf-preview-CEvfJiZa.js.br +0 -0
- package/dist/web/assets/pdf-preview-CEvfJiZa.js.gz +0 -0
- package/dist/web/assets/{personalization-settings-panel-D3OqsNUV.js → personalization-settings-panel-CmNqDQg6.js} +1 -1
- package/dist/web/assets/personalization-settings-panel-CmNqDQg6.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-CmNqDQg6.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-7yzFqPZq.js → project-file-popup-page-rkdge4He.js} +1 -1
- package/dist/web/assets/project-file-popup-page-rkdge4He.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-rkdge4He.js.gz +0 -0
- package/dist/web/assets/project-source-panel-Dfdd7hXf.js +2 -0
- package/dist/web/assets/project-source-panel-Dfdd7hXf.js.br +0 -0
- package/dist/web/assets/project-source-panel-Dfdd7hXf.js.gz +0 -0
- package/dist/web/assets/{prompt-input--2KQl6SR.js → prompt-input-rTS8jFNM.js} +1 -1
- package/dist/web/assets/prompt-input-rTS8jFNM.js.br +0 -0
- package/dist/web/assets/prompt-input-rTS8jFNM.js.gz +0 -0
- package/dist/web/assets/resources-en-DiMZyInt.js +1 -0
- package/dist/web/assets/resources-en-DiMZyInt.js.br +0 -0
- package/dist/web/assets/resources-en-DiMZyInt.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-date-time-picker-BVYVGT78.js → scheduled-task-date-time-picker-8cWX1p1O.js} +1 -1
- package/dist/web/assets/scheduled-task-date-time-picker-8cWX1p1O.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-8cWX1p1O.js.gz +0 -0
- package/dist/web/assets/{scheduled-tasks-container-CQkfAgKW.js → scheduled-tasks-container-BA7pSsmC.js} +2 -2
- package/dist/web/assets/scheduled-tasks-container-BA7pSsmC.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-BA7pSsmC.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-DrOJ_UbG.css +1 -0
- package/dist/web/assets/scheduled-tasks-container-DrOJ_UbG.css.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-DrOJ_UbG.css.gz +0 -0
- package/dist/web/assets/{shiki-bundle-COC_j-nR.js → shiki-bundle-CHd-S0Yk.js} +1 -1
- package/dist/web/assets/shiki-bundle-CHd-S0Yk.js.br +2 -0
- package/dist/web/assets/shiki-bundle-CHd-S0Yk.js.gz +0 -0
- package/dist/web/assets/{skills-market-container-_ME3wZFP.js → skills-market-container-BdTREXZb.js} +2 -2
- package/dist/web/assets/skills-market-container-BdTREXZb.js.br +0 -0
- package/dist/web/assets/skills-market-container-BdTREXZb.js.gz +0 -0
- package/dist/web/assets/{split-workspace-menu-content-CkpZv1Nz.js → split-workspace-menu-content-DgbECHxu.js} +1 -1
- package/dist/web/assets/split-workspace-menu-content-DgbECHxu.js.br +0 -0
- package/dist/web/assets/split-workspace-menu-content-DgbECHxu.js.gz +0 -0
- package/dist/web/assets/{third-party-marketplace-pane-D3AJNSoF.js → third-party-marketplace-pane-BPN-3gk1.js} +1 -1
- package/dist/web/assets/third-party-marketplace-pane-BPN-3gk1.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BPN-3gk1.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-D1rDsafv.js +1 -0
- package/dist/web/assets/workbench-inspector-changes-D1rDsafv.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-D1rDsafv.js.gz +0 -0
- package/dist/web/assets/{workbench-pet-canvas-Ct1J6Adp.js → workbench-pet-canvas-B5jypDil.js} +1 -1
- package/dist/web/assets/workbench-pet-canvas-B5jypDil.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-B5jypDil.js.gz +0 -0
- package/dist/web/assets/workbench-shell-B139izuR.js +16 -0
- package/dist/web/assets/workbench-shell-B139izuR.js.br +0 -0
- package/dist/web/assets/workbench-shell-B139izuR.js.gz +0 -0
- package/dist/web/index.html +3 -3
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/docs/local-catalog.md +51 -0
- package/docs/model-discovery.md +26 -0
- package/package.json +5 -4
- package/dist/chunk-3WW7LK46.js +0 -5
- package/dist/chunk-43QCECCY.js +0 -40
- package/dist/chunk-YAHXVRU3.js +0 -3
- package/dist/web/assets/agent-settings-panel-K1YqqkJL.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-K1YqqkJL.js.gz +0 -0
- package/dist/web/assets/background-image-picker-BHqZ3SX1.js.br +0 -0
- package/dist/web/assets/background-image-picker-BHqZ3SX1.js.gz +0 -0
- package/dist/web/assets/code-highlighter-DIfBIRTg.js.br +0 -0
- package/dist/web/assets/code-highlighter-DIfBIRTg.js.gz +0 -0
- package/dist/web/assets/commit-settings-panel-B0i2Bqmu.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-B0i2Bqmu.js.gz +0 -0
- package/dist/web/assets/dockerfile-IyjqRm3v.js +0 -1
- package/dist/web/assets/dockerfile-IyjqRm3v.js.br +0 -0
- package/dist/web/assets/dockerfile-IyjqRm3v.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-B3jUcADI.js +0 -2
- package/dist/web/assets/file-review-dialog-B3jUcADI.js.br +0 -0
- package/dist/web/assets/file-review-dialog-B3jUcADI.js.gz +0 -0
- package/dist/web/assets/git-commit-review-Bz_j3wJo.js +0 -2
- package/dist/web/assets/git-commit-review-Bz_j3wJo.js.br +0 -0
- package/dist/web/assets/git-commit-review-Bz_j3wJo.js.gz +0 -0
- package/dist/web/assets/git-history-panel-Bk5XtV-h.js.br +0 -0
- package/dist/web/assets/git-history-panel-Bk5XtV-h.js.gz +0 -0
- package/dist/web/assets/global-search-dialog-nP5Zoo16.js.br +0 -0
- package/dist/web/assets/global-search-dialog-nP5Zoo16.js.gz +0 -0
- package/dist/web/assets/global-settings-about-Bdzkr5Fi.js +0 -1
- package/dist/web/assets/global-settings-about-Bdzkr5Fi.js.br +0 -0
- package/dist/web/assets/global-settings-about-Bdzkr5Fi.js.gz +0 -0
- package/dist/web/assets/global-settings-page-Bm6WTYej.js.br +0 -0
- package/dist/web/assets/global-settings-page-Bm6WTYej.js.gz +0 -0
- package/dist/web/assets/global-settings-pets-ChV29f_6.js.br +0 -0
- package/dist/web/assets/global-settings-pets-ChV29f_6.js.gz +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-D1VJUKau.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-D1VJUKau.js.gz +0 -0
- package/dist/web/assets/history-task-timeline-CphChwX0.js.br +0 -0
- package/dist/web/assets/history-task-timeline-CphChwX0.js.gz +0 -0
- package/dist/web/assets/image-preview-CZiY9KQs.js.br +0 -4
- package/dist/web/assets/image-preview-CZiY9KQs.js.gz +0 -0
- package/dist/web/assets/image-preview-content-D54Quns6.js.br +0 -0
- package/dist/web/assets/image-preview-content-D54Quns6.js.gz +0 -0
- package/dist/web/assets/index-BJqxQCE6.css +0 -2
- package/dist/web/assets/index-BJqxQCE6.css.br +0 -0
- package/dist/web/assets/index-BJqxQCE6.css.gz +0 -0
- package/dist/web/assets/index-CV7PO8FJ.js +0 -4
- package/dist/web/assets/index-CV7PO8FJ.js.br +0 -0
- package/dist/web/assets/index-CV7PO8FJ.js.gz +0 -0
- package/dist/web/assets/initial-deps-DElr8S4a.js +0 -2
- package/dist/web/assets/initial-deps-DElr8S4a.js.br +0 -0
- package/dist/web/assets/initial-deps-DElr8S4a.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-DnKCXx4r.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-DnKCXx4r.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-S2-ZO_oT.js +0 -2
- package/dist/web/assets/lazy-message-response-S2-ZO_oT.js.br +0 -0
- package/dist/web/assets/lazy-message-response-S2-ZO_oT.js.gz +0 -0
- package/dist/web/assets/markdown-BYOwaDjH.js +0 -1
- package/dist/web/assets/markdown-BYOwaDjH.js.br +0 -0
- package/dist/web/assets/markdown-BYOwaDjH.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-CAcqH6Ft.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-CAcqH6Ft.js.gz +0 -0
- package/dist/web/assets/mdx-DQZ5AkYe.js +0 -1
- package/dist/web/assets/mdx-DQZ5AkYe.js.br +0 -0
- package/dist/web/assets/mdx-DQZ5AkYe.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CRcc_eOq.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-CRcc_eOq.js.br +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-CRcc_eOq.js.gz +0 -0
- package/dist/web/assets/message-assistant-directive-7AH4Pn2V.js +0 -3
- package/dist/web/assets/message-assistant-directive-7AH4Pn2V.js.br +0 -0
- package/dist/web/assets/message-assistant-directive-7AH4Pn2V.js.gz +0 -0
- package/dist/web/assets/message-response-D6AZoXZR.js +0 -151
- package/dist/web/assets/message-response-D6AZoXZR.js.br +0 -0
- package/dist/web/assets/message-response-D6AZoXZR.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-CBk4rbLt.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-CBk4rbLt.js.gz +0 -0
- package/dist/web/assets/patch-diff-viewer-nIzfWkKE.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-nIzfWkKE.js.gz +0 -0
- package/dist/web/assets/pdf-preview-Zrj4u-KR.js.br +0 -0
- package/dist/web/assets/pdf-preview-Zrj4u-KR.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-D3OqsNUV.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-D3OqsNUV.js.gz +0 -0
- package/dist/web/assets/project-file-popup-page-7yzFqPZq.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-7yzFqPZq.js.gz +0 -0
- package/dist/web/assets/project-source-panel-C1tTwC1j.js +0 -2
- package/dist/web/assets/project-source-panel-C1tTwC1j.js.br +0 -0
- package/dist/web/assets/project-source-panel-C1tTwC1j.js.gz +0 -0
- package/dist/web/assets/prompt-input--2KQl6SR.js.br +0 -0
- package/dist/web/assets/prompt-input--2KQl6SR.js.gz +0 -0
- package/dist/web/assets/resources-en-CNO1wrxl.js +0 -1
- package/dist/web/assets/resources-en-CNO1wrxl.js.br +0 -0
- package/dist/web/assets/resources-en-CNO1wrxl.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-BVYVGT78.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-BVYVGT78.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-CQkfAgKW.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-CQkfAgKW.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-CVGTy7-W.css +0 -1
- 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/shiki-bundle-COC_j-nR.js.br +0 -3
- package/dist/web/assets/shiki-bundle-COC_j-nR.js.gz +0 -0
- package/dist/web/assets/skills-market-container-_ME3wZFP.js.br +0 -0
- package/dist/web/assets/skills-market-container-_ME3wZFP.js.gz +0 -0
- package/dist/web/assets/split-workspace-menu-content-CkpZv1Nz.js.br +0 -0
- package/dist/web/assets/split-workspace-menu-content-CkpZv1Nz.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-D3AJNSoF.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-D3AJNSoF.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-DSbBqbXe.js +0 -1
- package/dist/web/assets/workbench-inspector-changes-DSbBqbXe.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-DSbBqbXe.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-Ct1J6Adp.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-Ct1J6Adp.js.gz +0 -0
- package/dist/web/assets/workbench-shell-CP0njkD8.js +0 -16
- package/dist/web/assets/workbench-shell-CP0njkD8.js.br +0 -0
- package/dist/web/assets/workbench-shell-CP0njkD8.js.gz +0 -0
|
Binary file
|
|
Binary file
|
package/dist/web/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<meta name="theme-color" content="#181818" media="(prefers-color-scheme: dark)" />
|
|
8
8
|
<link rel="icon" href="/favicon.svg?v=4" type="image/svg+xml" />
|
|
9
9
|
<title>Codexly</title>
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-DobF11m_.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-B0Z9INg1.js">
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/assets/initial-deps-CqwWvUnY.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/react-runtime-CMZHB3u8.js">
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/initial-deps-DFOart6r.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/initial-deps-Cppvl2Gz.js">
|
|
23
|
-
<link rel="modulepreload" crossorigin href="/assets/initial-deps-
|
|
24
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/initial-deps-C-3sxJvc.js">
|
|
24
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CHJSDTYw.css">
|
|
25
25
|
</head>
|
|
26
26
|
<body>
|
|
27
27
|
<div id="root"></div>
|
package/dist/web/index.html.br
CHANGED
|
Binary file
|
package/dist/web/index.html.gz
CHANGED
|
Binary file
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 本地目录与任务
|
|
2
|
+
|
|
3
|
+
Codexly 是目录、任务及其管理状态的唯一数据源。Web 和桌面端均使用应用自己的 SQLite 仓储;AI 引擎负责执行回合与保存其对话上下文。
|
|
4
|
+
|
|
5
|
+
## 设计依据
|
|
6
|
+
|
|
7
|
+
[Codex App Server](https://learn.chatgpt.com/docs/app-server) 提供 thread/start、thread/resume、thread/fork 和分页历史接口。[Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk/sessions) 也通过独立 session ID 恢复会话。因此应用任务和引擎会话采用两种身份:应用 ID 用于路由、偏好、附件和事件;provider + sessionId 只用于执行适配器。
|
|
8
|
+
|
|
9
|
+
目录与任务元数据采用 SQLite,沿用项目已有的 Worker 与异步 I/O 边界。SQLite 的 [WAL](https://www.sqlite.org/wal.html) 支持读写并行;[外键约束](https://www.sqlite.org/foreignkeys.html) 与事务保证迁移、目录删除及任务归属的一致性。实现不复制引擎的整个 Thread JSON,不新增轮询同步。
|
|
10
|
+
|
|
11
|
+
## 数据与边界
|
|
12
|
+
|
|
13
|
+
| 数据 | 权威位置 | 规则 |
|
|
14
|
+
| -------------------- | --------------------------- | -------------------------------------------------------- |
|
|
15
|
+
| 目录 | managed_projects | 一个应用 ID 对应一个规范化绝对路径,路径唯一 |
|
|
16
|
+
| 任务 | managed_tasks | 名称、目录归属、置顶、归档、更新时间和运行状态归应用管理 |
|
|
17
|
+
| 执行绑定 | 任务的 provider、session_id | 新任务独立生成 ID,首次执行才创建引擎会话 |
|
|
18
|
+
| 对话正文与执行上下文 | 对应引擎 | 通过适配器按需读取、恢复和分叉 |
|
|
19
|
+
| 导入标记 | managed_catalog_migration | 与全部导入记录在同一事务提交 |
|
|
20
|
+
|
|
21
|
+
Web 使用现有的 `CODEX_HOME/codexly/state.sqlite3`,保持现有安装与隔离参数兼容;桌面端使用应用数据目录中的 `catalog.sqlite3`。两者共用 `packages/protocol/src/local-catalog-schema.json` 的表定义。Web 数据库操作在 SQLite Worker 执行,桌面端在阻塞池执行,流式通知不读取完整任务目录。
|
|
22
|
+
|
|
23
|
+
公共 Project 暂时保留 `roots` 数组的传输形状,但输入、输出协议均要求恰好一项。两端选择器共用单选函数,选择新文件夹会替换旧选择。Git worktree 仍是任务的执行工作区,不增加项目根目录。
|
|
24
|
+
|
|
25
|
+
新目录的身份为独立生成的 `project-<UUID>`,任务外键、路由和设置关联均使用该 ID;路径唯一约束只负责防止同一文件夹重复注册。仓储保存磁盘真实路径并保留大小写和平台分隔符,不能保存仅用于比较的路径键。路径修复不得更换项目 ID。
|
|
26
|
+
|
|
27
|
+
Codex 适配边界负责翻译请求、响应、通知和审批请求中的任务引用。正文、工具文本和回合 ID 保持原值;不同 provider 的 session ID 不共享映射。适配器只为 Codex 任务执行请求,其他 provider 必须接入自己的执行适配器。
|
|
28
|
+
|
|
29
|
+
## 首次迁移
|
|
30
|
+
|
|
31
|
+
1. 读取原目录、活动任务、归档任务以及既有 Web 项目记录。仅首次导入需要上游列表接口。
|
|
32
|
+
2. 对目录路径规范化、去重;多文件夹目录拆成多个单文件夹目录。首个目录保留旧 ID,其余使用确定性的路径派生 ID。
|
|
33
|
+
3. 任务按原目录范围中的最长匹配工作路径归属;worktree 等不匹配路径保留原主目录归属。原独立聊天继续保留独立作用域。
|
|
34
|
+
4. 保留旧任务 ID 作为应用 ID,同时登记原 session ID,避免破坏现有链接与任务附件。新任务开始使用独立应用 ID。
|
|
35
|
+
5. Web 在同一事务迁移任务偏好、队列和异步问题的作用域;拆分目录复制项目默认值。桌面端复制任务偏好和项目默认值,保留旧文件以便失败重试。
|
|
36
|
+
6. 记录与完成标记同时提交。分页错误、约束失败或文件复制失败不会标记完成;成功后重启不再从上游重建目录或覆盖本地名称。
|
|
37
|
+
|
|
38
|
+
原 Codex 数据不作为删除目标。删除应用目录只移除应用记录及相关状态,不删除用户磁盘文件夹;删除任务也不会删除原引擎的历史记录。应用独占的临时任务工作区继续按现有安全边界清理。旧 Codex 归档会话在真正恢复执行时才调用 unarchive,以满足官方运行时约束。
|
|
39
|
+
|
|
40
|
+
早期本地迁移若把 macOS/Linux 的路径比较键写成小写反斜杠路径,启动时会根据原 Codex 目录恢复正确路径,同时保留本地项目 ID、名称、任务和设置。修复只在检测到这种异常时读取原目录,正常启动不重新同步上游管理状态。
|
|
41
|
+
|
|
42
|
+
## 接入其他引擎
|
|
43
|
+
|
|
44
|
+
新的执行适配器使用同一 LocalCatalogStore 契约,设置自己的 provider 与 sessionId,并在执行边界处理身份和通知。目录、任务列表、名称、置顶、归档和数据库迁移逻辑不应重新实现为引擎 API。Claude 执行器不在本次变更范围内。
|
|
45
|
+
|
|
46
|
+
## 验证
|
|
47
|
+
|
|
48
|
+
- `packages/server/src/local-catalog*.test.ts`:持久化、稳定分页、目录唯一性、迁移拆分与回滚、身份映射,以及引擎离线时的 HTTP 管理全流程。
|
|
49
|
+
- Rust `local_catalog` 测试:本地生命周期、创建空任务不发送 RPC、执行请求与通知身份转换。
|
|
50
|
+
- 单文件夹协议测试和共享选择器回归:拒绝多个根,不丢弃用户输入中的额外根后继续创建。
|
|
51
|
+
- 两端运行完整测试、类型检查、静态检查及构建;浏览器验证通过 chrome-devtools-mcp 连接运行中的 Chrome。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# 模型与思考强度
|
|
2
|
+
|
|
3
|
+
Web、移动端和桌面端均以 Codex App Server 的 `model/list` 为首选来源。按照返回的 `supportedReasoningEfforts`、`defaultReasoningEffort`、`isDefault` 和可见性展示模型,不维护模型名或思考档位白名单。
|
|
4
|
+
|
|
5
|
+
## 账号与自定义 API
|
|
6
|
+
|
|
7
|
+
- 官方账号:使用当前账号的原生目录及 Codex 自身的认证和目录缓存策略;失败时不复用自定义 API 的目录。
|
|
8
|
+
- 自定义 API:优先读取按当前配置创建的原生目录,失败或为空时尝试兼容 `/models`,再使用同一端点的持久化快照。重新连接后使用新认证刷新原生能力。
|
|
9
|
+
- 标准 OpenAI `/models` 只提供模型列表,不能假设每个模型支持低、中、高。兼容目录没有能力字段时保留空选项和空默认值,界面隐藏思考强度菜单;提交时转换为原生 `null`,保存全局设置时清除推理覆盖。
|
|
10
|
+
- 明确声明的 `none` 表示关闭推理,与未声明能力不同。`xhigh`、`max`、`ultra` 以及未来字符串均按目录原值保留。
|
|
11
|
+
- 手动命名可以覆盖展示名,不能清除已经取得的原生能力。切换端点不能复用旧凭据、旧目录地址或旧账号模型。
|
|
12
|
+
|
|
13
|
+
## 原生目录配置
|
|
14
|
+
|
|
15
|
+
`base_url` 是推理地址,`model_catalog_url` 可以是独立的目录地址。同端点重新连接和目录准备均保留用户配置的目录 URL。原生 Codex 会添加 `client_version`,处理 Provider 认证与目录协议;应用不自行复刻这套发现流程。`model_catalog_json` 的优先级仍由 Codex 决定。
|
|
16
|
+
|
|
17
|
+
保留目录 TTL 缓存、并发请求合并、响应大小和超时限制;不添加后台轮询或逐模型能力请求。
|
|
18
|
+
|
|
19
|
+
## 验证
|
|
20
|
+
|
|
21
|
+
共享样例位于 `packages/provider-codex/src/custom-model-catalog-fixtures.json`,由 TypeScript 与 Rust 测试同时读取。运行相关模型目录测试、协议测试、会话提交测试及两端类型检查。实际本机验证只读取目录,不创建付费推理回合。
|
|
22
|
+
|
|
23
|
+
## 官方依据
|
|
24
|
+
|
|
25
|
+
- [App Server model/list](https://learn.chatgpt.com/docs/app-server#list-models-modellist):从返回数据读取模型能力和默认值。
|
|
26
|
+
- [自定义网关目录](https://learn.chatgpt.com/docs/enterprise/roll-out-a-gateway#serve-a-remote-catalog):目录地址、完整元数据、认证与版本参数。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryanhu/codexly",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "通过 Web 操作本地 Coding Agent 的应用",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "BryanHu",
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
"README.md",
|
|
32
32
|
"README.zh-CN.md",
|
|
33
33
|
"docs/git-workflow.md",
|
|
34
|
+
"docs/local-catalog.md",
|
|
35
|
+
"docs/model-discovery.md",
|
|
34
36
|
"docs/model-context-window.md",
|
|
35
37
|
"docs/web-autostart.md",
|
|
36
38
|
"docs/web-autostart.zh-CN.md",
|
|
@@ -67,13 +69,11 @@
|
|
|
67
69
|
"build:node": "tsup",
|
|
68
70
|
"bundle:check": "node ./tools/verify-web-bundle.mjs --report .artifacts/web-bundle-report.json",
|
|
69
71
|
"bundle:report": "node ./tools/verify-web-bundle.mjs --read-report .artifacts/web-bundle-report.json",
|
|
70
|
-
"check": "pnpm run audit:prod && pnpm run codex:schema:check && pnpm run format:check && pnpm run lint && pnpm run lint:architecture && pnpm run test && pnpm run test:release && pnpm run test:performance && pnpm run build && pnpm run bundle:check && pnpm run package:check",
|
|
72
|
+
"check": "pnpm run audit:prod && pnpm run codex:schema:check && pnpm run format:check && pnpm run lint && pnpm run lint:architecture && pnpm run test && pnpm run test:release && pnpm run test:highlight && pnpm run test:performance && pnpm run build && pnpm run bundle:check && pnpm run package:check",
|
|
71
73
|
"clean": "node ./tools/clean.mjs",
|
|
72
74
|
"codex:schema:check": "node ./tools/verify-codex-schema.mjs",
|
|
73
75
|
"codex:schema:update": "node ./tools/verify-codex-schema.mjs --update",
|
|
74
76
|
"dev": "pnpm --filter @codexly/web dev",
|
|
75
|
-
"docker:build": "docker build --tag codexly:local .",
|
|
76
|
-
"docker:test": "node ./tools/test-docker-image.mjs",
|
|
77
77
|
"format": "prettier --write .",
|
|
78
78
|
"format:check": "prettier --check .",
|
|
79
79
|
"lint": "oxlint . --disable-nested-config --ignore-pattern 'desktop/**' --max-warnings 0 --report-unused-disable-directives",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"start": "pnpm run build && node ./dist/cli.js start",
|
|
83
83
|
"test": "vitest run --passWithNoTests",
|
|
84
84
|
"test:release": "node --test tools/joint-release.test.mjs",
|
|
85
|
+
"test:highlight": "node --test tools/project-language-plugin.test.mjs",
|
|
85
86
|
"test:coverage": "vitest run --coverage --passWithNoTests",
|
|
86
87
|
"test:e2e": "pnpm build && playwright test",
|
|
87
88
|
"test:performance": "node --expose-gc ./node_modules/vitest/vitest.mjs run --config vitest.performance.config.ts",
|
package/dist/chunk-3WW7LK46.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import {createRequire}from'node:module';createRequire(import.meta.url);
|
|
2
|
-
var v=class extends Error{constructor(r,e){super(e);this.code=r;this.name="WorkbenchPetProviderError";}code},T=class extends Error{constructor(r,e){super(e);this.code=r;this.name="PendingRequestResolutionError";}code};var A=class extends Error{constructor(r,e){super(e);this.code=r;}code};async function I(t,a,r,e,o,l){let s=await t.readSubmission(a,r);if(s!==void 0&&s.fingerprint!==e)throw new A("IDEMPOTENCY_CONFLICT","Submission key was used with another request");if(s?.stage==="creating"||s?.stage==="starting")throw new A("SUBMISSION_OUTCOME_UNKNOWN","Submission outcome is unknown; inspect the task before submitting again");if(s?.stage==="completed"&&s.result!==void 0)return s.result;let d=async n=>{await t.writeSubmission(a,r,n),s=n;};if(s?.stage!=="started"){if(await l.validate(),o.taskId===void 0&&s?.task===void 0){await d({fingerprint:e,stage:"creating"});let P=await l.createTask();await d({fingerprint:e,stage:"ready",task:P});}let n=s?.task,c=o.taskId??n?.id;if(c===void 0)throw new Error("Submission task is unavailable");let g=await l.prepare(c);await d({fingerprint:e,stage:"starting",attachmentIds:g,...n===void 0?{}:{task:n}});let m={...await l.execute(c),...n===void 0?{}:{createdTask:n}};await d({fingerprint:e,stage:"started",result:m,attachmentIds:g,...n===void 0?{}:{task:n}});}let i=s?.result;if(i===void 0)throw new Error("Submission result is unavailable");return await l.complete(i,s?.attachmentIds??[]),await d({...s,fingerprint:e,stage:"completed",result:i}),i}var y=class extends Error{constructor(r,e){super(e);this.code=r;}code};async function w(t,a,r,e,o,l,s){let d=(await t.listProjectTodos(a)).find(c=>c.id===r);if(o!==null&&d===void 0)throw new y("PROJECT_TODO_NOT_FOUND","Project todo not found");if((d?.version??null)!==o)throw new y("PROJECT_TODO_CHANGED","Project todo changed");let i={id:r,projectId:a,draft:e,createdAt:d?.createdAt??l,updatedAt:l,version:(d?.version??0)+1},n=await s();return await t.saveProjectTodo(i,o,n),i}var h=t=>JSON.stringify(t.map(({title:a,options:r})=>({title:a,options:r})));function E(t,a){return t.flatMap(r=>{let e=new Map;return r.items.flatMap(o=>{if(o.type!=="message"||o.role!=="assistant"||!o.questions?.length)return [];let l=o.questions.map(({title:i,options:n})=>({title:i,options:n})),s=h(l),d=e.get(s)??0;return e.set(s,d+1),[{id:a(JSON.stringify([r.id,s,d])),turnId:r.id,questions:l,createdAt:r.startedAt??"1970-01-01T00:00:00.000Z",status:"pending"}]})})}function O(t,a){if(a.length!==t.length||a.some(e=>e.trim().length===0||e.length>4e3))throw new Error("Invalid question answers");let r=t.map((e,o)=>`${e.title}
|
|
3
|
-
${a[o]?.trim()??""}`).join(`
|
|
4
|
-
|
|
5
|
-
`);if(r.length>1e5)throw new Error("Invalid question answers");return r}function M(t,a){let r=new Map,e=t.turns;for(let o of a){let l=h(o.group.questions),s=JSON.stringify([o.group.turnId,l]),d=r.get(s)??0;r.set(s,d+1);let i=o.result;if(o.group.status!=="answered"||i===void 0||i.turn!==null)continue;let n=e.findIndex(u=>u.id===i.turnId),c=e[n];if(n<0||c===void 0)continue;let m=c.items.flatMap((u,f)=>u.type==="message"&&u.role==="assistant"&&h(u.questions??[])===l?[f]:[])[d];if(m===void 0||c.items.slice(m+1).some(u=>u.type==="message"&&u.role==="user"&&u.text===i.input.text))continue;let p=[...c.items];p.splice(m+1,0,{id:i.messageId,role:"user",text:i.input.text,type:"message"}),e=e.map((u,f)=>f===n?{...c,items:p}:u);}return e===t.turns?t:{...t,turns:e}}async function q(t,a){let r=new Set,e=new Set,o;for(;;){if(e.size>=1e3)throw new Error("Archived task pagination exceeds the page limit");let i=await t.listTasks({archived:true,limit:100,...o===void 0?{}:{cursor:o}});for(let n of i.data){if(n.projectId!==a)throw new Error("Archived task listing crossed its scope");if(r.add(n.id),r.size>1e4)throw new Error("Archived task deletion exceeds the 10000 task limit")}if(i.nextCursor===null)break;if(e.has(i.nextCursor))throw new Error("Archived task pagination returned a repeated cursor");e.add(i.nextCursor),o=i.nextCursor;}let l=[...r],s=0,d=0;for(let i=0;i<l.length;i+=4){let n=await Promise.allSettled(l.slice(i,i+4).map(async c=>{if((await t.readTask(c))?.projectId!==a)throw new Error("Archived task is no longer in scope");await t.deleteTask(c);}));for(let c of n)c.status==="fulfilled"?s++:d++;}return {deletedCount:s,failedCount:d}}async function N(t,a,r={}){let e=new Map,o=new Set,l;for(;;){if(o.size>=1e3)throw new Error("Task catalog pagination exceeds the page limit");let s=await t.listTasks({limit:100,...r.pinned===true?{pinnedOnly:true}:{},...l===void 0?{}:{cursor:l}});for(let d of s.data){if(d.projectId!==a)throw new Error("Task catalog crossed its scope");if(e.has(d.id)||e.set(d.id,d),e.size>1e4)throw new Error("Task catalog exceeds the 10000 task limit")}if(s.nextCursor===null)return {data:[...e.values()]};if(o.has(s.nextCursor))throw new Error("Task catalog returned a repeated cursor");o.add(s.nextCursor),l=s.nextCursor;}}var k=class extends Error{};async function F(t,a){let{projectIds:r,cursor:e}=a,o=new Set(r);if(o.size!==r.length||o.size>100)throw new k("Invalid completed task scopes");if(e!==void 0&&(Object.keys(e).length!==o.size||Object.keys(e).some(n=>!o.has(n))))throw new k("Completed task cursor does not match its scopes");let l=r.filter(n=>e===void 0||e[n]!==null),s=Math.max(1,Math.ceil(10/Math.max(1,l.length))),d=Object.fromEntries(r.map(n=>[n,null])),i=new Map;for(let n=0;n<l.length;n+=4){let c=await Promise.all(l.slice(n,n+4).map(async g=>{let m=await t(g),P=e?.[g],p=await m.listTasks({completed:true,limit:s,...typeof P=="string"?{cursor:P}:{}});if(p.data.length>s)throw new Error("Completed task page exceeds its limit");if(p.nextCursor!==null&&p.nextCursor===P)throw new Error("Completed task page returned a repeated cursor");for(let u of p.data)if(u.projectId!==g)throw new Error("Completed task page crossed its scope");return {id:g,page:p}}));for(let{id:g,page:m}of c){d[g]=m.nextCursor;for(let P of m.data){let p=JSON.stringify([g,P.id]);i.has(p)||i.set(p,P);}}}return {data:[...i.values()].sort((n,c)=>Date.parse(c.updatedAt)-Date.parse(n.updatedAt)),nextCursor:Object.values(d).some(n=>n!==null)?d:null}}var R=[{description:"",id:"low"},{description:"",id:"medium"},{description:"",id:"high"}];function S(t){return t.supportedReasoningEfforts.length===0||t.supportedReasoningEfforts.every(a=>a.id==="none")}function G(t){if(!t.data.some(S))return t;let a=t.data.map(r=>S(r)?{...r,defaultReasoningEffort:"medium",supportedReasoningEfforts:R.map(e=>({...e}))}:r);return {...t,data:a}}export{v as a,T as b,A as c,I as d,y as e,w as f,E as g,O as h,M as i,q as j,N as k,k as l,F as m,R as n,G as o};
|