@bryanhu/codexly 0.38.0 → 0.40.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 +272 -474
- package/README.en.md +108 -0
- package/README.md +55 -118
- package/README.zh-CN.md +3 -148
- package/dist/chunk-5YNWOUR2.js +2 -0
- package/dist/{chunk-RWMSDM4X.js → chunk-BXOL6SUO.js} +1 -1
- package/dist/chunk-PZZN5FBZ.js +934 -0
- package/dist/chunk-Q2VQAUSH.js +19 -0
- package/dist/chunk-S7LPESTQ.js +3 -0
- package/dist/{chunk-LGFUYNXR.js → chunk-UFZBNM7A.js} +4 -3
- package/dist/chunk-UR6FEWGU.js +37 -0
- package/dist/chunk-VBTBWY72.js +8 -0
- package/dist/chunk-WE42CHL5.js +26 -0
- package/dist/cli.js +6 -6
- package/dist/client/index.js +2 -2
- package/dist/command-SFIOITEA.js +88 -0
- package/dist/core/index.js +1 -1
- package/dist/historical-attachment-worker.js +2 -2
- package/dist/protocol/index.js +1 -1
- package/dist/providers/claude/index.js +1 -0
- package/dist/providers/codex/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/sqlite-state-worker.js +58 -30
- package/dist/web/.vite/manifest.json +597 -356
- package/dist/web/.vite/manifest.json.br +0 -0
- package/dist/web/.vite/manifest.json.gz +0 -0
- package/dist/web/assets/{abnfDiagram-N423BO3Z-BA9G7eND.js → abnfDiagram-N423BO3Z-CEEQQmQS.js} +1 -1
- package/dist/web/assets/abnfDiagram-N423BO3Z-CEEQQmQS.js.br +0 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-CEEQQmQS.js.gz +0 -0
- package/dist/web/assets/agent-settings-panel-BpLGmoGs.js +1 -0
- package/dist/web/assets/agent-settings-panel-BpLGmoGs.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-BpLGmoGs.js.gz +0 -0
- package/dist/web/assets/api-connection-fields-BibbcpNv.js +1 -0
- package/dist/web/assets/api-connection-fields-BibbcpNv.js.br +0 -0
- package/dist/web/assets/api-connection-fields-BibbcpNv.js.gz +0 -0
- package/dist/web/assets/{app-update-dialog-BsIh1VPg.js → app-update-dialog-DQoACHXt.js} +1 -1
- package/dist/web/assets/app-update-dialog-DQoACHXt.js.br +0 -0
- package/dist/web/assets/app-update-dialog-DQoACHXt.js.gz +0 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js +1 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js.br +0 -0
- package/dist/web/assets/approval-mode-CKJY6q52.js.gz +0 -0
- package/dist/web/assets/{architectureDiagram-T3A2C74G-hY1IIQ-y.js → architectureDiagram-T3A2C74G-CF2Ovr5z.js} +1 -1
- package/dist/web/assets/architectureDiagram-T3A2C74G-CF2Ovr5z.js.br +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-CF2Ovr5z.js.gz +0 -0
- package/dist/web/assets/arrow-down-BiCRjuX3.js +1 -0
- package/dist/web/assets/arrow-down-BiCRjuX3.js.br +0 -0
- package/dist/web/assets/arrow-down-BiCRjuX3.js.gz +0 -0
- package/dist/web/assets/arrow-up-right-1gv4rBr2.js +1 -0
- package/dist/web/assets/arrow-up-right-1gv4rBr2.js.br +0 -0
- package/dist/web/assets/arrow-up-right-1gv4rBr2.js.gz +0 -0
- package/dist/web/assets/{background-image-picker-B1xDUft3.js → background-image-picker-BSsADQTT.js} +1 -1
- package/dist/web/assets/background-image-picker-BSsADQTT.js.br +0 -0
- package/dist/web/assets/background-image-picker-BSsADQTT.js.gz +0 -0
- package/dist/web/assets/{chunk-5RXB4S5H-fg31GjQR.js → chunk-5RXB4S5H-Bu1iYp4t.js} +1 -1
- package/dist/web/assets/chunk-5RXB4S5H-Bu1iYp4t.js.br +0 -0
- package/dist/web/assets/chunk-5RXB4S5H-Bu1iYp4t.js.gz +0 -0
- package/dist/web/assets/{chunk-6Q2QTUOP-UGVxaGe-.js → chunk-6Q2QTUOP-8pETCK89.js} +1 -1
- package/dist/web/assets/chunk-6Q2QTUOP-8pETCK89.js.br +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-8pETCK89.js.gz +0 -0
- package/dist/web/assets/{chunk-GF5L2VYU-iTLU6Gbu.js → chunk-GF5L2VYU-Clmi3b75.js} +1 -1
- package/dist/web/assets/chunk-GF5L2VYU-Clmi3b75.js.br +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-Clmi3b75.js.gz +0 -0
- package/dist/web/assets/{chunk-JQJVKLGR-DzWAKhHq.js → chunk-JQJVKLGR-TByUBa_A.js} +1 -1
- package/dist/web/assets/chunk-JQJVKLGR-TByUBa_A.js.br +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-TByUBa_A.js.gz +0 -0
- package/dist/web/assets/{classDiagram-JCYQIIEL-Cc_4r5xo.js → classDiagram-JCYQIIEL-CxEYeVQh.js} +1 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-CxEYeVQh.js.br +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-CxEYeVQh.js.gz +0 -0
- package/dist/web/assets/{classDiagram-v2-OCEON4UE-Cc_4r5xo.js → classDiagram-v2-OCEON4UE-CxEYeVQh.js} +1 -1
- package/dist/web/assets/classDiagram-v2-OCEON4UE-CxEYeVQh.js.br +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-CxEYeVQh.js.gz +0 -0
- package/dist/web/assets/claude-extensions-pane-CQr8ljAY.js +1 -0
- package/dist/web/assets/claude-extensions-pane-CQr8ljAY.js.br +0 -0
- package/dist/web/assets/claude-extensions-pane-CQr8ljAY.js.gz +0 -0
- package/dist/web/assets/claude-settings-panel-DXKvK9Cx.js +1 -0
- package/dist/web/assets/claude-settings-panel-DXKvK9Cx.js.br +0 -0
- package/dist/web/assets/claude-settings-panel-DXKvK9Cx.js.gz +0 -0
- package/dist/web/assets/clipboard-C55zlT9y.js +1 -0
- package/dist/web/assets/clipboard-C55zlT9y.js.br +0 -0
- package/dist/web/assets/clipboard-C55zlT9y.js.gz +0 -0
- package/dist/web/assets/{code-highlighter-kiC_chgH.js → code-highlighter-DLfpC-2j.js} +1 -1
- package/dist/web/assets/code-highlighter-DLfpC-2j.js.br +0 -0
- package/dist/web/assets/code-highlighter-DLfpC-2j.js.gz +0 -0
- package/dist/web/assets/codex-resources-pane-wsrvgVrc.js +1 -0
- package/dist/web/assets/codex-resources-pane-wsrvgVrc.js.br +0 -0
- package/dist/web/assets/codex-resources-pane-wsrvgVrc.js.gz +0 -0
- package/dist/web/assets/commit-settings-panel-CDFZi6_m.js +1 -0
- package/dist/web/assets/commit-settings-panel-CDFZi6_m.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-CDFZi6_m.js.gz +0 -0
- package/dist/web/assets/composer-git-menu-RXjhQAjt.js +1 -0
- package/dist/web/assets/composer-git-menu-RXjhQAjt.js.br +0 -0
- package/dist/web/assets/composer-git-menu-RXjhQAjt.js.gz +0 -0
- package/dist/web/assets/{cynefinDiagram-MW4NZA55-CarrAQe_.js → cynefinDiagram-MW4NZA55-BgrsE095.js} +1 -1
- package/dist/web/assets/cynefinDiagram-MW4NZA55-BgrsE095.js.br +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-BgrsE095.js.gz +0 -0
- package/dist/web/assets/{diagram-7IWD3JNH-CHgQ34Br.js → diagram-7IWD3JNH-d6DRTRQU.js} +1 -1
- package/dist/web/assets/diagram-7IWD3JNH-d6DRTRQU.js.br +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-d6DRTRQU.js.gz +0 -0
- package/dist/web/assets/{diagram-LBJQPF4R-Do0sclzV.js → diagram-LBJQPF4R-BTsB33l7.js} +1 -1
- package/dist/web/assets/diagram-LBJQPF4R-BTsB33l7.js.br +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-BTsB33l7.js.gz +0 -0
- package/dist/web/assets/{diagram-Q27KOJAE-CuX25bnK.js → diagram-Q27KOJAE-BR31NpE4.js} +1 -1
- package/dist/web/assets/diagram-Q27KOJAE-BR31NpE4.js.br +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-BR31NpE4.js.gz +0 -0
- package/dist/web/assets/{diagram-UB23O5K3-C8vf7TKH.js → diagram-UB23O5K3-Giiek6vS.js} +1 -1
- package/dist/web/assets/diagram-UB23O5K3-Giiek6vS.js.br +0 -0
- package/dist/web/assets/diagram-UB23O5K3-Giiek6vS.js.gz +0 -0
- package/dist/web/assets/{dist-DHnVkR1t.js → dist-DKGpvUu3.js} +3 -3
- package/dist/web/assets/dist-DKGpvUu3.js.br +0 -0
- package/dist/web/assets/dist-DKGpvUu3.js.gz +0 -0
- package/dist/web/assets/download-DSulXOCZ.js +1 -0
- package/dist/web/assets/download-DSulXOCZ.js.br +0 -0
- package/dist/web/assets/download-DSulXOCZ.js.gz +0 -0
- package/dist/web/assets/{ebnfDiagram-BXEA7PRR-DctRYehy.js → ebnfDiagram-BXEA7PRR-D1qXqma3.js} +1 -1
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-D1qXqma3.js.br +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-D1qXqma3.js.gz +0 -0
- package/dist/web/assets/engine-setup-gate-BMxHgUPX.js +1 -0
- package/dist/web/assets/engine-setup-gate-BMxHgUPX.js.br +0 -0
- package/dist/web/assets/engine-setup-gate-BMxHgUPX.js.gz +0 -0
- package/dist/web/assets/{erDiagram-JOGREHBK-BkfLzWvS.js → erDiagram-JOGREHBK-C3UtJXJx.js} +1 -1
- package/dist/web/assets/erDiagram-JOGREHBK-C3UtJXJx.js.br +0 -0
- package/dist/web/assets/erDiagram-JOGREHBK-C3UtJXJx.js.gz +0 -0
- package/dist/web/assets/extension-list-FpN59xyu.js +1 -0
- package/dist/web/assets/extension-list-FpN59xyu.js.br +0 -0
- package/dist/web/assets/extension-list-FpN59xyu.js.gz +0 -0
- package/dist/web/assets/extension-operation-C25lNEcc.js +1 -0
- package/dist/web/assets/extension-operation-C25lNEcc.js.br +3 -0
- package/dist/web/assets/extension-operation-C25lNEcc.js.gz +0 -0
- package/dist/web/assets/external-link-DTvUbh5p.js +1 -0
- package/dist/web/assets/external-link-DTvUbh5p.js.br +0 -0
- package/dist/web/assets/external-link-DTvUbh5p.js.gz +0 -0
- package/dist/web/assets/file-navigation-view-preference-D5PlYpLl.js +1 -0
- package/dist/web/assets/file-navigation-view-preference-D5PlYpLl.js.br +0 -0
- package/dist/web/assets/file-navigation-view-preference-D5PlYpLl.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-B0m1uX8I.js +2 -0
- package/dist/web/assets/file-review-dialog-B0m1uX8I.js.br +0 -0
- package/dist/web/assets/file-review-dialog-B0m1uX8I.js.gz +0 -0
- package/dist/web/assets/{flowDiagram-UKHOOZJN-CQWRJfj_.js → flowDiagram-UKHOOZJN-CkmFxY4S.js} +1 -1
- package/dist/web/assets/flowDiagram-UKHOOZJN-CkmFxY4S.js.br +0 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CkmFxY4S.js.gz +0 -0
- package/dist/web/assets/git-commit-review-BzmpTmCu.js +2 -0
- package/dist/web/assets/git-commit-review-BzmpTmCu.js.br +0 -0
- package/dist/web/assets/git-commit-review-BzmpTmCu.js.gz +0 -0
- package/dist/web/assets/git-history-panel-D0NtL4Ey.js +1 -0
- package/dist/web/assets/git-history-panel-D0NtL4Ey.js.br +0 -0
- package/dist/web/assets/git-history-panel-D0NtL4Ey.js.gz +0 -0
- package/dist/web/assets/global-search-dialog-CfUFXT2P.js +2 -0
- package/dist/web/assets/global-search-dialog-CfUFXT2P.js.br +0 -0
- package/dist/web/assets/global-search-dialog-CfUFXT2P.js.gz +0 -0
- package/dist/web/assets/global-settings-about-0K0nGRC-.js +1 -0
- package/dist/web/assets/global-settings-about-0K0nGRC-.js.br +0 -0
- package/dist/web/assets/global-settings-about-0K0nGRC-.js.gz +0 -0
- package/dist/web/assets/global-settings-fields-Bguzhix9.js +1 -0
- package/dist/web/assets/global-settings-fields-Bguzhix9.js.br +0 -0
- package/dist/web/assets/global-settings-fields-Bguzhix9.js.gz +0 -0
- package/dist/web/assets/global-settings-page-BpfeYCYG.js +2 -0
- package/dist/web/assets/global-settings-page-BpfeYCYG.js.br +0 -0
- package/dist/web/assets/global-settings-page-BpfeYCYG.js.gz +0 -0
- package/dist/web/assets/global-settings-pets-B43_pFUh.js +1 -0
- package/dist/web/assets/global-settings-pets-B43_pFUh.js.br +0 -0
- package/dist/web/assets/global-settings-pets-B43_pFUh.js.gz +0 -0
- package/dist/web/assets/{highlighted-body-OFNGDK62-CeVKUhHG.js → highlighted-body-OFNGDK62-DWnfzzs7.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-DWnfzzs7.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-DWnfzzs7.js.gz +0 -0
- package/dist/web/assets/history-task-timeline-BtWNWjvT.js +1 -0
- package/dist/web/assets/history-task-timeline-BtWNWjvT.js.br +0 -0
- package/dist/web/assets/history-task-timeline-BtWNWjvT.js.gz +0 -0
- package/dist/web/assets/{image-preview-Bez628xh.js → image-preview-DLbcm8V_.js} +2 -2
- package/dist/web/assets/image-preview-DLbcm8V_.js.br +0 -0
- package/dist/web/assets/image-preview-DLbcm8V_.js.gz +0 -0
- package/dist/web/assets/image-preview-content-B8t4zN2r.js +41 -0
- package/dist/web/assets/image-preview-content-B8t4zN2r.js.br +0 -0
- package/dist/web/assets/image-preview-content-B8t4zN2r.js.gz +0 -0
- package/dist/web/assets/index-BUna2uyD.js +4 -0
- package/dist/web/assets/index-BUna2uyD.js.br +0 -0
- package/dist/web/assets/index-BUna2uyD.js.gz +0 -0
- package/dist/web/assets/index-CB0Jmx2g.css +2 -0
- package/dist/web/assets/index-CB0Jmx2g.css.br +0 -0
- package/dist/web/assets/index-CB0Jmx2g.css.gz +0 -0
- package/dist/web/assets/{infoDiagram-6WML65LV-smD1e7u3.js → infoDiagram-6WML65LV-DuWGeyW3.js} +1 -1
- package/dist/web/assets/infoDiagram-6WML65LV-DuWGeyW3.js.br +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-DuWGeyW3.js.gz +0 -0
- package/dist/web/assets/{initial-deps-CW5Jl6i2.js → initial-deps-BeVJyoJH.js} +1 -1
- package/dist/web/assets/initial-deps-BeVJyoJH.js.br +0 -0
- package/dist/web/assets/initial-deps-BeVJyoJH.js.gz +0 -0
- package/dist/web/assets/initial-deps-CRaxZAOH.js +41 -0
- package/dist/web/assets/initial-deps-CRaxZAOH.js.br +0 -0
- package/dist/web/assets/initial-deps-CRaxZAOH.js.gz +0 -0
- package/dist/web/assets/{initial-deps-Cppvl2Gz.js → initial-deps-CilSILfP.js} +1 -1
- package/dist/web/assets/initial-deps-CilSILfP.js.br +0 -0
- package/dist/web/assets/initial-deps-CilSILfP.js.gz +0 -0
- package/dist/web/assets/initial-deps-CyMAtgCd.js +2 -0
- package/dist/web/assets/initial-deps-CyMAtgCd.js.br +0 -0
- package/dist/web/assets/initial-deps-CyMAtgCd.js.gz +0 -0
- package/dist/web/assets/{initial-deps-C0_XYRrC.js → initial-deps-DNAUCF1H.js} +1 -1
- package/dist/web/assets/initial-deps-DNAUCF1H.js.br +0 -0
- package/dist/web/assets/initial-deps-DNAUCF1H.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-Cp1c9O0j.js +1 -0
- package/dist/web/assets/installed-skills-pane-Cp1c9O0j.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-Cp1c9O0j.js.gz +0 -0
- package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js → ishikawaDiagram-WSZJBQD7-CKSQLCKs.js} +1 -1
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CKSQLCKs.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CKSQLCKs.js.gz +0 -0
- package/dist/web/assets/{kanban-definition-27J2QSJJ-pQQ3ybGq.js → kanban-definition-27J2QSJJ-Dy_spa9A.js} +1 -1
- package/dist/web/assets/kanban-definition-27J2QSJJ-Dy_spa9A.js.br +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-Dy_spa9A.js.gz +0 -0
- package/dist/web/assets/maximize-2-Fh0PepSo.js +1 -0
- package/dist/web/assets/maximize-2-Fh0PepSo.js.br +0 -0
- package/dist/web/assets/maximize-2-Fh0PepSo.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-C95hsTpS.js +1 -0
- package/dist/web/assets/mcp-management-pane-C95hsTpS.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-C95hsTpS.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CVt2koup.js +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CVt2koup.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-CVt2koup.js.gz +0 -0
- package/dist/web/assets/message-assistant-directive-DMoVi7q3.js +3 -0
- package/dist/web/assets/message-assistant-directive-DMoVi7q3.js.br +0 -0
- package/dist/web/assets/message-assistant-directive-DMoVi7q3.js.gz +0 -0
- package/dist/web/assets/{message-response-DTlvlBMa.js → message-response-BswwJ_0M.js} +25 -25
- package/dist/web/assets/message-response-BswwJ_0M.js.br +0 -0
- package/dist/web/assets/message-response-BswwJ_0M.js.gz +0 -0
- package/dist/web/assets/{mindmap-definition-FAOFIHXS-CgQ5woK5.js → mindmap-definition-FAOFIHXS-BT3bfYzH.js} +1 -1
- package/dist/web/assets/mindmap-definition-FAOFIHXS-BT3bfYzH.js.br +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-BT3bfYzH.js.gz +0 -0
- package/dist/web/assets/model-context-window-input-B1WfG4S_.js +1 -0
- package/dist/web/assets/model-context-window-input-B1WfG4S_.js.br +0 -0
- package/dist/web/assets/model-context-window-input-B1WfG4S_.js.gz +0 -0
- package/dist/web/assets/official-plugin-sheet-DIa2udRz.js +1 -0
- package/dist/web/assets/official-plugin-sheet-DIa2udRz.js.br +0 -0
- package/dist/web/assets/official-plugin-sheet-DIa2udRz.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-DcZytL9D.css +1 -0
- package/dist/web/assets/official-plugins-pane-DcZytL9D.css.br +0 -0
- package/dist/web/assets/official-plugins-pane-DcZytL9D.css.gz +0 -0
- package/dist/web/assets/official-plugins-pane-DoRHj17k.js +2 -0
- package/dist/web/assets/official-plugins-pane-DoRHj17k.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-DoRHj17k.js.gz +0 -0
- package/dist/web/assets/open-project-path-tkV3GG0_.js +1 -0
- package/dist/web/assets/open-project-path-tkV3GG0_.js.br +0 -0
- package/dist/web/assets/open-project-path-tkV3GG0_.js.gz +0 -0
- package/dist/web/assets/{patch-diff-viewer-fv2hVYyb.js → patch-diff-viewer-_6e4j2Xu.js} +2 -2
- package/dist/web/assets/patch-diff-viewer-_6e4j2Xu.js.br +0 -0
- package/dist/web/assets/{patch-diff-viewer-fv2hVYyb.js.gz → patch-diff-viewer-_6e4j2Xu.js.gz} +0 -0
- package/dist/web/assets/{pdf-preview-CEvfJiZa.js → pdf-preview-C7dU4MfB.js} +3 -3
- package/dist/web/assets/pdf-preview-C7dU4MfB.js.br +0 -0
- package/dist/web/assets/pdf-preview-C7dU4MfB.js.gz +0 -0
- package/dist/web/assets/{pegDiagram-VL7TDLO6-CEECg9Qv.js → pegDiagram-VL7TDLO6-BDpdrr1s.js} +1 -1
- package/dist/web/assets/pegDiagram-VL7TDLO6-BDpdrr1s.js.br +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-BDpdrr1s.js.gz +0 -0
- package/dist/web/assets/personalization-instructions-editor-CrllgQKz.js +1 -0
- package/dist/web/assets/personalization-instructions-editor-CrllgQKz.js.br +0 -0
- package/dist/web/assets/personalization-instructions-editor-CrllgQKz.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-Bn69EkZ8.js +1 -0
- package/dist/web/assets/personalization-settings-panel-Bn69EkZ8.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-Bn69EkZ8.js.gz +0 -0
- package/dist/web/assets/{pieDiagram-7S7Q4E2Y-C3L4IYmx.js → pieDiagram-7S7Q4E2Y-DCypkhSo.js} +1 -1
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-DCypkhSo.js.br +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-DCypkhSo.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-rkdge4He.js → project-file-popup-page-zQmKyPor.js} +1 -1
- package/dist/web/assets/project-file-popup-page-zQmKyPor.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-zQmKyPor.js.gz +0 -0
- package/dist/web/assets/project-source-panel-B073gmHb.js +2 -0
- package/dist/web/assets/project-source-panel-B073gmHb.js.br +0 -0
- package/dist/web/assets/project-source-panel-B073gmHb.js.gz +0 -0
- package/dist/web/assets/prompt-input-CppQfZJu.js +1 -0
- package/dist/web/assets/prompt-input-CppQfZJu.js.br +0 -0
- package/dist/web/assets/prompt-input-CppQfZJu.js.gz +0 -0
- package/dist/web/assets/provider-connection-panel-stjpuDi-.js +1 -0
- package/dist/web/assets/provider-connection-panel-stjpuDi-.js.br +0 -0
- package/dist/web/assets/provider-connection-panel-stjpuDi-.js.gz +0 -0
- package/dist/web/assets/provider-connection-queries-Bi1sUodL.js +1 -0
- package/dist/web/assets/provider-connection-queries-Bi1sUodL.js.br +0 -0
- package/dist/web/assets/provider-connection-queries-Bi1sUodL.js.gz +0 -0
- package/dist/web/assets/{railroadDiagram-AXF67PYL-CXSGJisB.js → railroadDiagram-AXF67PYL-d16J9qzD.js} +1 -1
- package/dist/web/assets/railroadDiagram-AXF67PYL-d16J9qzD.js.br +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-d16J9qzD.js.gz +0 -0
- package/dist/web/assets/{requirementDiagram-LRYGKXZP-uB3tW141.js → requirementDiagram-LRYGKXZP-C9hUbT7e.js} +1 -1
- package/dist/web/assets/requirementDiagram-LRYGKXZP-C9hUbT7e.js.br +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-C9hUbT7e.js.gz +0 -0
- package/dist/web/assets/resources-en-yeMes3Ah.js +1 -0
- package/dist/web/assets/resources-en-yeMes3Ah.js.br +0 -0
- package/dist/web/assets/resources-en-yeMes3Ah.js.gz +0 -0
- package/dist/web/assets/scan-DYCzmZAH.js +1 -0
- package/dist/web/assets/scan-DYCzmZAH.js.br +2 -0
- package/dist/web/assets/scan-DYCzmZAH.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-BDHyAcNa.js +1 -0
- package/dist/web/assets/scheduled-task-date-time-picker-BDHyAcNa.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-BDHyAcNa.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js → scheduled-task-floating-ui~scheduled-task-date-time-picker-cReLi3tI.js} +1 -1
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-cReLi3tI.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-cReLi3tI.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-BrEi6mNO.js +2 -0
- package/dist/web/assets/scheduled-tasks-container-BrEi6mNO.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-BrEi6mNO.js.gz +0 -0
- package/dist/web/assets/{sequenceDiagram-SI44F4Z6-BikVJyrh.js → sequenceDiagram-SI44F4Z6-CGA84wrP.js} +1 -1
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-CGA84wrP.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-CGA84wrP.js.gz +0 -0
- package/dist/web/assets/server-DkIJGjQG.js +1 -0
- package/dist/web/assets/server-DkIJGjQG.js.br +2 -0
- package/dist/web/assets/server-DkIJGjQG.js.gz +0 -0
- package/dist/web/assets/settings-mutation-status-Dke6ycgH.js +1 -0
- package/dist/web/assets/settings-mutation-status-Dke6ycgH.js.br +0 -0
- package/dist/web/assets/settings-mutation-status-Dke6ycgH.js.gz +0 -0
- package/dist/web/assets/settings-save-status-CUoSP7m5.js +1 -0
- package/dist/web/assets/settings-save-status-CUoSP7m5.js.br +0 -0
- package/dist/web/assets/settings-save-status-CUoSP7m5.js.gz +0 -0
- package/dist/web/assets/{shiki-bundle-CHd-S0Yk.js → shiki-bundle-DoOIe8qx.js} +1 -1
- package/dist/web/assets/shiki-bundle-DoOIe8qx.js.br +2 -0
- package/dist/web/assets/shiki-bundle-DoOIe8qx.js.gz +0 -0
- package/dist/web/assets/skills-market-container-BoEyKoRt.css +1 -0
- package/dist/web/assets/skills-market-container-BoEyKoRt.css.br +0 -0
- package/dist/web/assets/skills-market-container-BoEyKoRt.css.gz +0 -0
- package/dist/web/assets/skills-market-container-PCo27WKC.js +2 -0
- package/dist/web/assets/skills-market-container-PCo27WKC.js.br +0 -0
- package/dist/web/assets/skills-market-container-PCo27WKC.js.gz +0 -0
- package/dist/web/assets/sliders-horizontal-DFgw0FeX.js +1 -0
- package/dist/web/assets/sliders-horizontal-DFgw0FeX.js.br +0 -0
- package/dist/web/assets/sliders-horizontal-DFgw0FeX.js.gz +0 -0
- package/dist/web/assets/{split-workspace-menu-content-DgbECHxu.js → split-workspace-menu-content-Co-x9yyy.js} +1 -1
- package/dist/web/assets/split-workspace-menu-content-Co-x9yyy.js.br +2 -0
- package/dist/web/assets/split-workspace-menu-content-Co-x9yyy.js.gz +0 -0
- package/dist/web/assets/{stateDiagram-OKZ733FA-CBWRnaGO.js → stateDiagram-OKZ733FA-D0MVn7g1.js} +1 -1
- package/dist/web/assets/stateDiagram-OKZ733FA-D0MVn7g1.js.br +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-D0MVn7g1.js.gz +0 -0
- package/dist/web/assets/{stateDiagram-v2-UEYNNEHI-CJYWLmtB.js → stateDiagram-v2-UEYNNEHI-TUsb_3yM.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-TUsb_3yM.js.br +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-TUsb_3yM.js.gz +0 -0
- package/dist/web/assets/{swimlanesDiagram-ULZ7WXOC-5agQ3ner.js → swimlanesDiagram-ULZ7WXOC-8Qb6Pp_Z.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-8Qb6Pp_Z.js.br +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-8Qb6Pp_Z.js.gz +0 -0
- package/dist/web/assets/task-timeline-process-history-CZep5llt.js +1 -0
- package/dist/web/assets/task-timeline-process-history-CZep5llt.js.br +0 -0
- package/dist/web/assets/task-timeline-process-history-CZep5llt.js.gz +0 -0
- package/dist/web/assets/{timeline-definition-Z64GVDOM-D_09Q10V.js → timeline-definition-Z64GVDOM-DRC7HLeH.js} +1 -1
- package/dist/web/assets/timeline-definition-Z64GVDOM-DRC7HLeH.js.br +0 -0
- package/dist/web/assets/timeline-definition-Z64GVDOM-DRC7HLeH.js.gz +0 -0
- package/dist/web/assets/upload-BypRc41z.js +1 -0
- package/dist/web/assets/upload-BypRc41z.js.br +0 -0
- package/dist/web/assets/upload-BypRc41z.js.gz +0 -0
- package/dist/web/assets/useMutationState-CuY6Z3bo.js +1 -0
- package/dist/web/assets/useMutationState-CuY6Z3bo.js.br +0 -0
- package/dist/web/assets/useMutationState-CuY6Z3bo.js.gz +0 -0
- package/dist/web/assets/utils-BjjzKOgD.js +1 -0
- package/dist/web/assets/utils-BjjzKOgD.js.br +0 -0
- package/dist/web/assets/utils-BjjzKOgD.js.gz +0 -0
- package/dist/web/assets/{vennDiagram-T6HMQDX7-3WtBk1Fg.js → vennDiagram-T6HMQDX7-B5BRVmyv.js} +1 -1
- package/dist/web/assets/vennDiagram-T6HMQDX7-B5BRVmyv.js.br +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-B5BRVmyv.js.gz +0 -0
- package/dist/web/assets/{wardleyDiagram-T6FBY63Y-DBIzys3u.js → wardleyDiagram-T6FBY63Y-BVuPKOmW.js} +1 -1
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-BVuPKOmW.js.br +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-BVuPKOmW.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-C-xC1l-l.js +1 -0
- package/dist/web/assets/workbench-inspector-changes-C-xC1l-l.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-C-xC1l-l.js.gz +0 -0
- package/dist/web/assets/{workbench-pet-canvas-B5jypDil.js → workbench-pet-canvas-DfV_J-9g.js} +1 -1
- package/dist/web/assets/workbench-pet-canvas-DfV_J-9g.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-DfV_J-9g.js.gz +0 -0
- package/dist/web/assets/workbench-shell-BjJSD8dp.js +17 -0
- package/dist/web/assets/workbench-shell-BjJSD8dp.js.br +0 -0
- package/dist/web/assets/workbench-shell-BjJSD8dp.js.gz +0 -0
- package/dist/web/assets/{xychartDiagram-ELKLHX3M-DwDj5q-W.js → xychartDiagram-ELKLHX3M-Cyq1aXDR.js} +1 -1
- package/dist/web/assets/xychartDiagram-ELKLHX3M-Cyq1aXDR.js.br +0 -0
- package/dist/web/assets/xychartDiagram-ELKLHX3M-Cyq1aXDR.js.gz +0 -0
- package/dist/web/index.html +8 -8
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/docs/README.md +49 -0
- package/docs/agent-engines.md +154 -0
- package/docs/conversation-performance.md +37 -0
- package/docs/faq.md +63 -0
- package/docs/getting-started.en.md +54 -0
- package/docs/getting-started.md +54 -0
- package/docs/git-workflow.md +10 -0
- package/docs/global-search.md +49 -0
- package/docs/images/codexly-preview.png +0 -0
- package/docs/local-catalog.md +23 -1
- package/docs/model-context-window.md +25 -4
- package/docs/model-discovery.md +19 -5
- package/docs/scheduled-task-idempotency.md +28 -0
- package/docs/text-file-editing.md +97 -0
- package/docs/usage.en.md +65 -0
- package/docs/usage.md +67 -0
- package/docs/web-autostart.md +6 -2
- package/docs/web-autostart.zh-CN.md +6 -2
- package/docs/web.en.md +123 -0
- package/docs/web.md +123 -0
- package/package.json +32 -9
- package/dist/chunk-4RQ7HLCK.js +0 -3
- package/dist/chunk-GMNBWGMQ.js +0 -5
- package/dist/chunk-SNN2J7BU.js +0 -1061
- package/dist/chunk-YCHIPWV2.js +0 -40
- package/dist/command-2D66UEBJ.js +0 -84
- package/dist/web/assets/abnfDiagram-N423BO3Z-BA9G7eND.js.br +0 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-BA9G7eND.js.gz +0 -0
- package/dist/web/assets/agent-settings-panel-C9S0LXqi.js +0 -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.br +0 -0
- package/dist/web/assets/app-update-dialog-BsIh1VPg.js.gz +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-hY1IIQ-y.js.br +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-hY1IIQ-y.js.gz +0 -0
- package/dist/web/assets/arrow-down-DoJlTckg.js +0 -1
- package/dist/web/assets/arrow-down-DoJlTckg.js.br +0 -0
- package/dist/web/assets/arrow-down-DoJlTckg.js.gz +0 -0
- 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/chunk-5RXB4S5H-fg31GjQR.js.br +0 -0
- package/dist/web/assets/chunk-5RXB4S5H-fg31GjQR.js.gz +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-UGVxaGe-.js.br +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-UGVxaGe-.js.gz +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-iTLU6Gbu.js.br +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-iTLU6Gbu.js.gz +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-DzWAKhHq.js.br +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-DzWAKhHq.js.gz +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-Cc_4r5xo.js.br +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-Cc_4r5xo.js.gz +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-Cc_4r5xo.js.br +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-Cc_4r5xo.js.gz +0 -0
- package/dist/web/assets/clipboard-BxrWcnRh.js +0 -1
- package/dist/web/assets/clipboard-BxrWcnRh.js.br +0 -0
- package/dist/web/assets/clipboard-BxrWcnRh.js.gz +0 -0
- 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-Cdtyux2J.js +0 -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/cynefinDiagram-MW4NZA55-CarrAQe_.js.br +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-CarrAQe_.js.gz +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-CHgQ34Br.js.br +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-CHgQ34Br.js.gz +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-Do0sclzV.js.br +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-Do0sclzV.js.gz +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CuX25bnK.js.br +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CuX25bnK.js.gz +0 -0
- package/dist/web/assets/diagram-UB23O5K3-C8vf7TKH.js.br +0 -0
- package/dist/web/assets/diagram-UB23O5K3-C8vf7TKH.js.gz +0 -0
- package/dist/web/assets/dist-D2KGXHMS.js +0 -1
- package/dist/web/assets/dist-D2KGXHMS.js.br +0 -0
- package/dist/web/assets/dist-D2KGXHMS.js.gz +0 -0
- package/dist/web/assets/dist-DHnVkR1t.js.br +0 -0
- package/dist/web/assets/dist-DHnVkR1t.js.gz +0 -0
- package/dist/web/assets/download-05FmZQzE.js +0 -1
- package/dist/web/assets/download-05FmZQzE.js.br +0 -0
- package/dist/web/assets/download-05FmZQzE.js.gz +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-DctRYehy.js.br +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-DctRYehy.js.gz +0 -0
- package/dist/web/assets/erDiagram-JOGREHBK-BkfLzWvS.js.br +0 -0
- package/dist/web/assets/erDiagram-JOGREHBK-BkfLzWvS.js.gz +0 -0
- package/dist/web/assets/external-link-DQSTtNhw.js +0 -1
- package/dist/web/assets/external-link-DQSTtNhw.js.br +0 -0
- package/dist/web/assets/external-link-DQSTtNhw.js.gz +0 -0
- package/dist/web/assets/file-navigation-view-preference-BYYgwRsz.js +0 -1
- package/dist/web/assets/file-navigation-view-preference-BYYgwRsz.js.br +0 -0
- package/dist/web/assets/file-navigation-view-preference-BYYgwRsz.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-DaGgZASG.js +0 -2
- 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/flowDiagram-UKHOOZJN-CQWRJfj_.js.br +0 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CQWRJfj_.js.gz +0 -0
- package/dist/web/assets/git-commit-review-Bz8YDy59.js +0 -2
- 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-fork-CElzN7bT.js +0 -1
- package/dist/web/assets/git-fork-CElzN7bT.js.br +0 -1
- package/dist/web/assets/git-fork-CElzN7bT.js.gz +0 -0
- package/dist/web/assets/git-history-panel-QBsXgUT7.js +0 -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-DDaHRgce.js +0 -2
- 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 +0 -1
- 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-BEUBn7B5.js +0 -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-DBYFpNQk.js +0 -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-CeVKUhHG.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-CeVKUhHG.js.gz +0 -0
- package/dist/web/assets/history-location-C2XDYAuy.js +0 -1
- package/dist/web/assets/history-location-C2XDYAuy.js.br +0 -0
- package/dist/web/assets/history-location-C2XDYAuy.js.gz +0 -0
- package/dist/web/assets/history-task-timeline-Dl6to6Cp.js +0 -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-Bez628xh.js.br +0 -0
- package/dist/web/assets/image-preview-Bez628xh.js.gz +0 -0
- package/dist/web/assets/image-preview-content-TkopF2n1.js +0 -41
- 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 +0 -2
- 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 +0 -4
- package/dist/web/assets/index-DobF11m_.js.br +0 -0
- package/dist/web/assets/index-DobF11m_.js.gz +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-smD1e7u3.js.br +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-smD1e7u3.js.gz +0 -0
- package/dist/web/assets/initial-deps-B8FrcWWN.js +0 -41
- package/dist/web/assets/initial-deps-B8FrcWWN.js.br +0 -0
- package/dist/web/assets/initial-deps-B8FrcWWN.js.gz +0 -0
- package/dist/web/assets/initial-deps-C-3sxJvc.js +0 -2
- 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/initial-deps-C0_XYRrC.js.br +0 -0
- package/dist/web/assets/initial-deps-C0_XYRrC.js.gz +0 -0
- package/dist/web/assets/initial-deps-CW5Jl6i2.js.br +0 -0
- package/dist/web/assets/initial-deps-CW5Jl6i2.js.gz +0 -0
- package/dist/web/assets/initial-deps-Cppvl2Gz.js.br +0 -0
- package/dist/web/assets/initial-deps-Cppvl2Gz.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-yCfl2E4Z.js +0 -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/ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js.gz +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-pQQ3ybGq.js.br +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-pQQ3ybGq.js.gz +0 -0
- package/dist/web/assets/maximize-2-CawekEKe.js +0 -1
- package/dist/web/assets/maximize-2-CawekEKe.js.br +0 -0
- package/dist/web/assets/maximize-2-CawekEKe.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-D4fhknd1.js +0 -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/mermaid-GHXKKRXX-BL0SiEsb.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-BL0SiEsb.js.br +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-BL0SiEsb.js.gz +0 -0
- package/dist/web/assets/message-assistant-directive-r0UOX93m.js +0 -3
- 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.br +0 -0
- package/dist/web/assets/message-response-DTlvlBMa.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-CgQ5woK5.js.br +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-CgQ5woK5.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-BCxHJLaj.css +0 -1
- 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-CRnpq0MJ.js +0 -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-fv2hVYyb.js.br +0 -0
- 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/pegDiagram-VL7TDLO6-CEECg9Qv.js.br +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CEECg9Qv.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-CmNqDQg6.js +0 -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/pieDiagram-7S7Q4E2Y-C3L4IYmx.js.br +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-C3L4IYmx.js.gz +0 -0
- 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 +0 -2
- 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-rTS8jFNM.js +0 -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/railroadDiagram-AXF67PYL-CXSGJisB.js.br +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-CXSGJisB.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-uB3tW141.js.br +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-uB3tW141.js.gz +0 -0
- package/dist/web/assets/resources-en-DiMZyInt.js +0 -1
- 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/scan-DyLrpouW.js +0 -1
- package/dist/web/assets/scan-DyLrpouW.js.br +0 -3
- package/dist/web/assets/scan-DyLrpouW.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-8cWX1p1O.js +0 -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-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-BA7pSsmC.js +0 -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/sequenceDiagram-SI44F4Z6-BikVJyrh.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-BikVJyrh.js.gz +0 -0
- package/dist/web/assets/shiki-bundle-CHd-S0Yk.js.br +0 -2
- package/dist/web/assets/shiki-bundle-CHd-S0Yk.js.gz +0 -0
- package/dist/web/assets/skills-market-container-BdTREXZb.js +0 -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/skills-market-container-C8okZy75.css +0 -1
- 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/sliders-horizontal-C6QQuWdW.js +0 -1
- package/dist/web/assets/sliders-horizontal-C6QQuWdW.js.br +0 -0
- package/dist/web/assets/sliders-horizontal-C6QQuWdW.js.gz +0 -0
- 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/stateDiagram-OKZ733FA-CBWRnaGO.js.br +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-CBWRnaGO.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CJYWLmtB.js.br +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CJYWLmtB.js.gz +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-5agQ3ner.js.br +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-5agQ3ner.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-BPN-3gk1.js +0 -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/timeline-definition-Z64GVDOM-D_09Q10V.js.br +0 -0
- package/dist/web/assets/timeline-definition-Z64GVDOM-D_09Q10V.js.gz +0 -0
- package/dist/web/assets/upload-BQhbr7lC.js +0 -1
- package/dist/web/assets/upload-BQhbr7lC.js.br +0 -0
- package/dist/web/assets/upload-BQhbr7lC.js.gz +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-3WtBk1Fg.js.br +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-3WtBk1Fg.js.gz +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-DBIzys3u.js.br +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-DBIzys3u.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-D1rDsafv.js +0 -1
- 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-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 +0 -16
- 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/assets/xychartDiagram-ELKLHX3M-DwDj5q-W.js.br +0 -0
- package/dist/web/assets/xychartDiagram-ELKLHX3M-DwDj5q-W.js.gz +0 -0
- /package/dist/{chunk-XJOOU7A5.js → chunk-OILMAASC.js} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~dp1dands-ClgveiMa.js} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js.br → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~dp1dands-ClgveiMa.js.br} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js.gz → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~dp1dands-ClgveiMa.js.gz} +0 -0
package/README.en.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./apps/web/public/brand/codexly-mark.svg" alt="Codexly" width="88" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Codexly</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">A local AI coding workspace for Codex and Claude, on desktop, the Web, and mobile browsers.</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/BryanHoo/Codexly/releases">Download desktop</a> ·
|
|
11
|
+
<a href="#quick-start">Quick start</a> ·
|
|
12
|
+
<a href="./docs/README.md">Documentation</a> ·
|
|
13
|
+
<a href="./README.md">简体中文</a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
Codexly brings AI conversations, coding tasks, project files, changes, and Git into one workspace. Work on your computer, or follow progress, answer questions, and continue tasks from a phone or tablet on the same trusted network.
|
|
17
|
+
|
|
18
|
+
Projects and agent processes run on the computer hosting Codexly. Your phone needs no coding environment. Model requests and relevant context are still sent to the model service you configure.
|
|
19
|
+
|
|
20
|
+

|
|
21
|
+
|
|
22
|
+
## Choose how to use it
|
|
23
|
+
|
|
24
|
+
| Client | Best for | Get started |
|
|
25
|
+
| ------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
26
|
+
| Desktop | Daily local development with a project terminal, global shortcuts, a separate task window, and system tray | [Download for macOS, Windows, or Ubuntu](https://github.com/BryanHoo/Codexly/releases) · [Installation](desktop/docs/installation.en.md) |
|
|
27
|
+
| Web | Working in a computer browser or hosting a workspace on your LAN | Install Node.js 24+ and [start the Web server](#web) |
|
|
28
|
+
| Mobile | Following tasks, approving tools, and reviewing files and changes from a phone or tablet browser | Connect to a Web server with LAN access enabled; see [Mobile](#mobile) |
|
|
29
|
+
|
|
30
|
+
Desktop supports Windows 10/11 x64, Ubuntu 24.04+ x64, macOS 14.5+ on Apple Silicon or Intel, and a separate macOS 12.4+ Intel Legacy build. Packages include agent runtimes, with no separate Node.js or Bun installation. Legacy supports Codex only. Mobile uses a touch-friendly Web interface and requires no separate app.
|
|
31
|
+
|
|
32
|
+
## What you can do
|
|
33
|
+
|
|
34
|
+
- **Work with Codex or Claude**: configure either independently, or configure both and choose an engine for each new task. Existing tasks keep their engine.
|
|
35
|
+
- **Follow execution**: see streaming replies, commands, tools, plans, and file changes. Respond to approvals and questions, steer running work, or queue follow-up messages persistently.
|
|
36
|
+
- **Organize projects and tasks**: add local folders, search tasks and history, pin, archive, or restore conversations, and organize work with the task board and scheduled tasks.
|
|
37
|
+
- **Work in parallel**: open up to four task panes in the desktop app or a computer browser, each with its own draft and queue. Mobile uses a single-task view.
|
|
38
|
+
- **Read and edit project files**: browse code, Markdown, images, and PDFs, edit supported text files, attach files and images, and reference project files and Skills. LAN devices can download files that cannot be previewed through an explicit prompt.
|
|
39
|
+
- **Complete Git work**: review diffs and history, manage branches and worktrees, commit selected files, commit and push, or push existing commits.
|
|
40
|
+
- **Manage agent capabilities**: search, filter, and manage Skills, MCP, and official plugins by engine and global or project scope, with per-item operation status. Configure models, reasoning effort, permissions, and context settings.
|
|
41
|
+
|
|
42
|
+
Each engine retains its own models, permissions, and extension capabilities. Claude supports history recovery, live steering, forks, and compaction. Codex-specific sandbox and Review features do not map to Claude permission modes. Available actions follow the selected engine; see [agent setup](docs/getting-started.en.md).
|
|
43
|
+
|
|
44
|
+
## Quick start
|
|
45
|
+
|
|
46
|
+
### Desktop
|
|
47
|
+
|
|
48
|
+
1. Download the package for your system and architecture from [Releases](https://github.com/BryanHoo/Codexly/releases).
|
|
49
|
+
2. Install and open Codexly. Configure Codex, Claude, or both in Settings; supported existing local configurations can be reused.
|
|
50
|
+
3. Add a project folder, create a task, and send your request.
|
|
51
|
+
|
|
52
|
+
For Windows portable builds, extract the entire ZIP and keep the executable, Claude host, and `runtime` directory together. See [installation, updates, and uninstall](desktop/docs/installation.en.md).
|
|
53
|
+
|
|
54
|
+
### Web
|
|
55
|
+
|
|
56
|
+
On a computer with **Node.js 24+**, run:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npx --package @bryanhu/codexly@latest codexly start
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The browser opens automatically. Otherwise, use the address printed in the terminal, normally `http://127.0.0.1:3210`. Keep the terminal running; press `Ctrl+C` to stop. Complete agent setup on first use, then add a project.
|
|
63
|
+
|
|
64
|
+
For regular use, install globally:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm install --global @bryanhu/codexly@latest
|
|
68
|
+
codexly
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
See the [Web guide](docs/web.en.md) for options, background startup, and updates.
|
|
72
|
+
|
|
73
|
+
### Mobile
|
|
74
|
+
|
|
75
|
+
On the computer hosting your projects, run:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx --package @bryanhu/codexly@latest codexly start --lan
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Connect your phone or tablet to the same trusted LAN. Open the printed LAN address in its browser and enter the access password. Files, Git credentials, and agent settings belong to the host computer, which must remain awake with the service running.
|
|
82
|
+
|
|
83
|
+
LAN mode uses HTTP: use it only on trusted networks and never expose it directly to the internet. The desktop app does not host mobile connections; start the Web server for mobile access. See [mobile and LAN access](docs/web.en.md#mobile-and-lan-access).
|
|
84
|
+
|
|
85
|
+
## Connect Codex and Claude
|
|
86
|
+
|
|
87
|
+
| Agent | Connection |
|
|
88
|
+
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
89
|
+
| Codex | Sign in with ChatGPT, or configure an OpenAI-compatible service supporting the Responses API and a model list |
|
|
90
|
+
| Claude | Reuse supported local Claude Code credentials, or configure a service supporting the Anthropic Messages API and `/v1/models`; in-app Claude account login is not available |
|
|
91
|
+
|
|
92
|
+
Claude-only setups do not require Codex. Model availability, usage limits, and charges depend on your account or provider; Codexly does not include model credits. Desktop uses local settings; Web and mobile use settings on the Web host.
|
|
93
|
+
|
|
94
|
+
## Documentation and help
|
|
95
|
+
|
|
96
|
+
- [Documentation index](docs/README.md): installation, usage, configuration, and troubleshooting.
|
|
97
|
+
- [First task](docs/getting-started.en.md): connect an agent and start working.
|
|
98
|
+
- [Workspace guide](docs/usage.en.md): conversations, panes, files, Git, extensions, and schedules.
|
|
99
|
+
- [Web guide](docs/web.en.md): startup, mobile connections, and updates.
|
|
100
|
+
- [FAQ (中文)](docs/faq.md): storage, cross-client use, connections, and updates.
|
|
101
|
+
- [Changelog](CHANGELOG.md) · [Issues](https://github.com/BryanHoo/Codexly/issues) · [Security](SECURITY.md)
|
|
102
|
+
- [Contributing](CONTRIBUTING.md): development, verification, and releases.
|
|
103
|
+
|
|
104
|
+
Thanks to the [LinuxDO](https://linux.do/) community for their support.
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
[MIT](LICENSE)
|
package/README.md
CHANGED
|
@@ -4,167 +4,104 @@
|
|
|
4
4
|
|
|
5
5
|
<h1 align="center">Codexly</h1>
|
|
6
6
|
|
|
7
|
-
<p align="center">
|
|
8
|
-
A local AI coding workspace for desktop and browser.
|
|
9
|
-
</p>
|
|
10
|
-
|
|
11
|
-
Codexly keeps coding tasks, conversations, project files, and Git work in one place. Choose the desktop app for a self-contained workspace or run the Web edition locally and open it from a browser, including on a mobile device on your trusted network. Your projects and Codex runtime stay on the computer running Codexly.
|
|
7
|
+
<p align="center">支持 Codex 与 Claude 的本地 AI 编程工作台,在桌面、Web 和手机浏览器中处理项目。</p>
|
|
12
8
|
|
|
13
9
|
<p align="center">
|
|
14
|
-
<a href="
|
|
15
|
-
·
|
|
16
|
-
<a href="
|
|
17
|
-
|
|
18
|
-
<a href="./README.zh-CN.md">简体中文</a>
|
|
19
|
-
·
|
|
20
|
-
<a href="./LICENSE">License</a>
|
|
10
|
+
<a href="https://github.com/BryanHoo/Codexly/releases">下载桌面版</a> ·
|
|
11
|
+
<a href="#快速开始">快速开始</a> ·
|
|
12
|
+
<a href="./docs/README.md">使用文档</a> ·
|
|
13
|
+
<a href="./README.en.md">English</a>
|
|
21
14
|
</p>
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
## Get Codexly
|
|
16
|
+
Codexly 将 AI 对话、编程任务、项目文件、代码变更与 Git 操作集中在一个工作台。你可以在电脑上持续开发,也可以从同一可信局域网中的手机或平板查看进度、回答问题和继续任务。
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
| ------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
-
| Desktop | A native workspace with an integrated terminal, task window, system notifications, and tray controls | [Download for Windows, Ubuntu, or macOS](https://github.com/BryanHoo/Codexly/releases) and follow the [desktop installation guide](desktop/docs/installation.en.md) |
|
|
30
|
-
| Web | A local browser workspace accessible from your computer or another device on a trusted LAN | Install Node.js 24+ and [start the Web edition](#start-the-web-edition) |
|
|
18
|
+
项目文件与智能体在运行 Codexly 的电脑上处理;手机无需安装编程环境。使用模型时,相关请求与上下文仍会发送给你配置的模型服务。
|
|
31
19
|
|
|
32
|
-
|
|
20
|
+

|
|
33
21
|
|
|
34
|
-
##
|
|
22
|
+
## 选择你的使用方式
|
|
35
23
|
|
|
36
|
-
|
|
24
|
+
| 使用端 | 适合的场景 | 开始方式 |
|
|
25
|
+
| ------ | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
26
|
+
| 桌面端 | 在本机长期开发,使用集成终端、全局快捷键、独立任务窗口与系统托盘 | [下载 macOS、Windows 或 Ubuntu 版](https://github.com/BryanHoo/Codexly/releases) · [安装指南](desktop/docs/installation.md) |
|
|
27
|
+
| Web 端 | 在电脑浏览器中使用,或让一台电脑提供局域网工作台 | 安装 Node.js 24+ 后[启动 Web 服务](#web-端) |
|
|
28
|
+
| 移动端 | 在手机、平板浏览器中跟进任务、审批工具操作、查看文件与变更 | 连接已开启局域网访问的 Web 服务,见[移动端连接](#移动端) |
|
|
37
29
|
|
|
38
|
-
|
|
30
|
+
桌面版支持 Windows 10/11 x64、Ubuntu 24.04+ x64、macOS 14.5+(Apple Silicon / Intel),另有 macOS 12.4+ Intel Legacy 版。安装包内置智能体运行时,无需另装 Node.js 或 Bun;Legacy 仅支持 Codex。移动端使用适配小屏和触屏的 Web 界面,无需单独安装 App。
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
- Load recent conversation history first, fetch older turns from the top, and load execution details independently when expanding a process; long code previews use shared rendering and bounded highlighting. See [conversation loading and performance](docs/conversation-performance.md).
|
|
42
|
-
- Open up to four task panes in desktop browsers and the desktop app, each with its own draft and message queue. File and Git panels follow the focused task; mobile Web keeps a single-task view.
|
|
43
|
-
- Choose two, three, or four panes from **Split layout** in the task title bar, with auto fit, columns, rows, main-pane, or grid presets; keep the current chat and open new-task pages in the other panes. Available in desktop views.
|
|
44
|
-
- Resize task panes by dragging their dividers, create tasks from the title bar, and see the model and reasoning effort while the composer is collapsed.
|
|
45
|
-
- Edit project text files directly in the source preview on desktop or mobile, with undo, redo, and automatic saving when leaving the editor or switching windows.
|
|
46
|
-
- Read streaming Markdown responses and copy their source text; zoom and pan message images, project images, and wallpapers, or view them at their original size.
|
|
47
|
-
- Preview PDFs directly from chat attachments, file links, and the project file tree.
|
|
48
|
-
- View task-local images embedded in Markdown responses and open them in the image preview.
|
|
49
|
-
- Follow file citations, code review comments, and follow-up suggestions in assistant responses; selecting a suggestion fills the composer for further editing.
|
|
50
|
-
- Choose a model, reasoning effort, Fast mode, approval policy, and file access level for each task, and configure the global [context window](docs/model-context-window.md).
|
|
51
|
-
- Create projects and directories, search tasks, message history, and project files; inspect changes, work with branches and worktrees, commit selected files, commit and push, or push existing commits independently. See the [Git workflow guide](docs/git-workflow.md). Git actions require a repository at the project root; ordinary subdirectories do not use the parent repository.
|
|
52
|
-
- Switch tasks from the sidebar’s **Pinned** and **Running** shortcuts, with unread completions first, followed by pending approvals and running tasks; unread completions remain in the group count until viewed. Collapse previews or open the full list, even with projects collapsed.
|
|
53
|
-
- Identify each task's project through labels in the sidebar; collapsed projects still show unread completions, pending approvals, or running tasks.
|
|
54
|
-
- Manage Skills, plugins, MCP services, projects, archived tasks, notifications, and scheduled work. Refresh official plugins to synchronize their state and report partial failures.
|
|
55
|
-
- Request background compression of history files untouched for over 7 days under Settings → Agent → History storage. Web compresses server history; desktop compresses local history. Other Codex clients sharing that directory must support compressed history.
|
|
32
|
+
## 你可以用它做什么
|
|
56
33
|
|
|
57
|
-
|
|
34
|
+
- **用 Codex 或 Claude 处理项目**:独立配置任一引擎,也可同时配置并在新任务中选择;已有任务保留原引擎。
|
|
35
|
+
- **跟进执行过程**:实时查看回复、命令、工具调用、计划与文件变更,在需要时处理审批和提问;为运行中的任务补充要求,或将后续消息加入持久队列。
|
|
36
|
+
- **组织多项目任务**:添加本机目录,搜索任务与历史,置顶、归档或恢复对话;通过任务看板与定时任务安排工作。
|
|
37
|
+
- **并行推进工作**:桌面应用和电脑浏览器支持最多四个任务分屏,各自保留草稿与消息队列;移动端使用单任务视图。
|
|
38
|
+
- **查看与修改项目文件**:浏览文件树、预览代码、Markdown、图片与 PDF,直接编辑支持的文本文件;给对话附加文件或图片,引用项目文件与 Skills;局域网设备可按提示下载无法预览的文件。
|
|
39
|
+
- **完成 Git 工作流**:审阅差异与提交历史,管理分支和 worktree,选择文件提交、提交并推送,或独立推送已有提交。
|
|
40
|
+
- **管理智能体能力**:在扩展中心按引擎和全局/项目范围管理 Skills、MCP 与官方插件,搜索、筛选并查看操作状态;在设置中调整模型、思考强度、权限及上下文。
|
|
58
41
|
|
|
59
|
-
|
|
42
|
+
两种引擎保留各自的模型、权限和扩展能力,具体可用操作以界面为准。Claude 支持历史恢复、运行中引导、会话分叉与压缩;Codex 的沙盒、Review 等专属能力不等同于 Claude 权限模式。详见[智能体连接与配置](docs/getting-started.md#连接-codex-或-claude)。
|
|
60
43
|
|
|
61
|
-
|
|
44
|
+
## 快速开始
|
|
62
45
|
|
|
63
|
-
|
|
46
|
+
### 桌面端
|
|
64
47
|
|
|
65
|
-
|
|
48
|
+
1. 从 [Releases](https://github.com/BryanHoo/Codexly/releases) 下载对应系统和架构的安装包。
|
|
49
|
+
2. 安装并打开 Codexly,在设置中配置 Codex、Claude 或两者;已有的受支持本机配置可直接复用。
|
|
50
|
+
3. 添加项目文件夹,新建任务并发送需求。
|
|
66
51
|
|
|
67
|
-
|
|
52
|
+
Windows 便携版请完整解压 ZIP,保留程序、Claude 宿主和 `runtime` 目录。各平台安装、更新与卸载步骤见[桌面安装指南](desktop/docs/installation.md)。
|
|
68
53
|
|
|
69
|
-
|
|
54
|
+
### Web 端
|
|
70
55
|
|
|
71
|
-
|
|
56
|
+
在安装了 **Node.js 24+** 的电脑上运行:
|
|
72
57
|
|
|
73
58
|
```bash
|
|
74
59
|
npx --package @bryanhu/codexly@latest codexly start
|
|
75
60
|
```
|
|
76
61
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
Run `codexly --version` to check the installed version, or `codexly <command> --help` for command-specific options.
|
|
80
|
-
|
|
81
|
-
Multiple Web instances can run from the same launch directory and share the same Codex Home; occupied ports are skipped automatically. The launch directory does not determine internal configuration or the temporary task directory. Temporary tasks use the user's home directory by default, or the first explicit `--workspace` root. Use different `--codex-home <directory>` values to isolate data.
|
|
82
|
-
|
|
83
|
-
On first launch, sign in with ChatGPT or configure an OpenAI-compatible service that supports the Responses API and `GET /models`.
|
|
84
|
-
Custom providers discover available models and preserve declared capabilities and reasoning levels. The reasoning menu stays hidden when the catalog declares no reasoning support. See [models and reasoning effort](docs/model-discovery.md).
|
|
62
|
+
浏览器会自动打开。若未打开,请使用终端显示的地址,默认是 `http://127.0.0.1:3210`。保持终端运行,按 `Ctrl+C` 停止服务。首次使用时完成智能体连接,再添加项目。
|
|
85
63
|
|
|
86
|
-
|
|
64
|
+
经常使用时可全局安装:
|
|
87
65
|
|
|
88
66
|
```bash
|
|
89
67
|
npm install --global @bryanhu/codexly@latest
|
|
90
68
|
codexly
|
|
91
69
|
```
|
|
92
70
|
|
|
93
|
-
|
|
71
|
+
更多启动参数、后台运行和更新方法见 [Web 使用指南](docs/web.md)。
|
|
94
72
|
|
|
95
|
-
|
|
73
|
+
### 移动端
|
|
96
74
|
|
|
97
|
-
|
|
75
|
+
在提供项目的电脑上启动局域网服务:
|
|
98
76
|
|
|
99
77
|
```bash
|
|
100
|
-
|
|
101
|
-
codexly autostart enable --lan --now # LAN mode, also start now
|
|
102
|
-
codexly autostart status
|
|
103
|
-
codexly autostart credentials
|
|
104
|
-
codexly autostart logs
|
|
105
|
-
codexly autostart restart
|
|
106
|
-
codexly autostart disable
|
|
78
|
+
npx --package @bryanhu/codexly@latest codexly start --lan
|
|
107
79
|
```
|
|
108
80
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Temporary `npx` installations cannot register startup. Run `codexly autostart repair --now` after moving Node/npm, and disable before uninstalling the package. Use `codexly start --no-open` to suppress the browser during a foreground launch. See the [Web startup at login guide](docs/web-autostart.md) for configuration, environment handling, Linux linger restrictions, and troubleshooting.
|
|
112
|
-
|
|
113
|
-
## Using the Web Edition
|
|
114
|
-
|
|
115
|
-
Select **New task** for work that does not need a project. For repository work, add one host folder as the project directory, create a task, and submit your request with any required files, images, project references, or Skills. Archived tasks can be restored or permanently deleted from the project task list.
|
|
116
|
-
|
|
117
|
-
The Changes toolbar shows the branch, push destination, and incoming/outgoing counts, with remote configuration, branch publishing, fetch, fast-forward pull, and independent push actions. The footer edits the commit message; the main button commits and **More Git actions** offers **Commit and push**. Drafts persist on the current device by project, worktree, and branch; AI generation can be undone. A failed push preserves the local commit for retry. **Publish branch** establishes upstream tracking, and history marks unpushed commits.
|
|
118
|
-
|
|
119
|
-
Task controls set the model, reasoning, Fast mode, approval, and file access behavior. Notification preferences and the last complete project settings are saved for later tasks. The right inspector provides project files, sources, code changes, Git history, review, and commit actions. Project directories and files always come from the computer running Codexly, including when the UI is opened on another device.
|
|
120
|
-
|
|
121
|
-
Scheduled tasks with an unknown outcome pause further runs. Inspect the linked conversation before deleting and recreating the schedule. Tasks marked as finishing cleanup retry cleanup automatically without another launch.
|
|
122
|
-
|
|
123
|
-
Open a project text file in the source preview to edit it; switch Markdown to source mode first. Changes save when the editor loses focus, you leave the file, or you switch windows; use `⌘/Ctrl+S` to save manually. UTF-8 files up to 2 MiB are editable, with their line endings and BOM preserved. Larger or unsupported files remain read-only. Save errors and conflicts keep your draft in the current window and show recovery actions. Drafts are held in memory and are not guaranteed to survive a refresh, forced exit, or crash.
|
|
81
|
+
让手机或平板与电脑连接同一可信局域网,在浏览器中打开终端显示的局域网地址并输入访问密码。项目、Git 身份和智能体配置均来自这台电脑;使用期间电脑须保持开机、唤醒且服务运行。
|
|
124
82
|
|
|
125
|
-
|
|
83
|
+
局域网模式使用 HTTP,仅用于可信网络,不要直接暴露到公网。桌面应用本身不提供手机连接入口;需要移动访问时启动 Web 服务。详见[移动端与局域网访问](docs/web.md#移动端与局域网访问)。
|
|
126
84
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
codexly start --lan
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
The terminal prints the LAN address and a random access password. Common options are:
|
|
134
|
-
|
|
135
|
-
| Option | Purpose |
|
|
136
|
-
| --------------------------- | ------------------------------------------------------------------------------------------ |
|
|
137
|
-
| `--port <port>` | Choose the starting port; occupied ports are skipped automatically |
|
|
138
|
-
| `--lan-password <password>` | Set a 16-128 character password containing uppercase, lowercase, and number |
|
|
139
|
-
| `--allowed-host <domain>` | Allow an exact reverse proxy domain; repeat the option for multiple domains |
|
|
140
|
-
| `--session-ttl <duration>` | Set a fixed LAN session lifetime such as `12h`; omitted sessions last until server restart |
|
|
141
|
-
| `--workspace <path>` | Restrict project selection to this absolute root; repeat for multiple roots |
|
|
142
|
-
|
|
143
|
-
Quote passwords containing shell-special characters. LAN mode uses unencrypted HTTP, so use it only on a trusted network and never expose it directly to the internet. Restarting Codexly invalidates random pairing codes and all sessions; an explicitly configured fixed password remains valid.
|
|
144
|
-
|
|
145
|
-
## Web Diagnostics and Updates
|
|
146
|
-
|
|
147
|
-
Run `codexly doctor` when startup, Codex, or local data checks fail. Use `codexly --help` for all commands, `codexly start --help` or `codexly doctor --help` for command options, and `codexly --version` for the installed version.
|
|
148
|
-
|
|
149
|
-
Interactive startup and **Settings > About** check for new releases. When the sidebar shows an update, click the version to read its release notes and install it. Built-in updates probe the official registry and a mirror in parallel, use the first source that responds successfully, and fall back to the other source on failure. Package downloads and dependency installation reuse the selection for that update and your npm cache. New releases may appear later if the selected mirror is still synchronizing. A global installation can also be updated with:
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
npm install --global @bryanhu/codexly@latest
|
|
153
|
-
```
|
|
85
|
+
## 连接 Codex 与 Claude
|
|
154
86
|
|
|
155
|
-
|
|
87
|
+
| 智能体 | 连接方式 |
|
|
88
|
+
| ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
|
|
89
|
+
| Codex | 使用 ChatGPT 登录,或配置支持 Responses API 与模型列表的 OpenAI 兼容服务 |
|
|
90
|
+
| Claude | 复用受支持的本机 Claude Code 凭据,或填写支持 Anthropic Messages API 与 `/v1/models` 的服务地址和密钥;应用内不提供 Claude 账号登录 |
|
|
156
91
|
|
|
157
|
-
|
|
92
|
+
只使用 Claude 时无需配置 Codex。模型可用性、额度与费用由所用账号或服务决定,Codexly 不包含模型服务额度。桌面端在本机配置,Web 和移动端在 Web 服务所在电脑配置。
|
|
158
93
|
|
|
159
|
-
|
|
160
|
-
- [Contributing guide](CONTRIBUTING.md)
|
|
161
|
-
- [Security policy](SECURITY.md)
|
|
162
|
-
- [Changelog](CHANGELOG.md)
|
|
94
|
+
## 文档与帮助
|
|
163
95
|
|
|
164
|
-
|
|
96
|
+
- [文档导航](docs/README.md):按安装、日常使用、配置与排障查找说明。
|
|
97
|
+
- [首次使用](docs/getting-started.md):连接智能体并完成第一个任务。
|
|
98
|
+
- [工作台使用](docs/usage.md):对话、分屏、文件、Git、扩展与定时任务。
|
|
99
|
+
- [常见问题](docs/faq.md):数据保存、跨端使用、连接与更新。
|
|
100
|
+
- [更新日志](CHANGELOG.md) · [问题反馈](https://github.com/BryanHoo/Codexly/issues) · [安全策略](SECURITY.md)
|
|
101
|
+
- [参与贡献](CONTRIBUTING.md):源码开发、验证与发布入口。
|
|
165
102
|
|
|
166
|
-
|
|
103
|
+
感谢 [LinuxDO](https://linux.do/) 社区的支持。
|
|
167
104
|
|
|
168
|
-
##
|
|
105
|
+
## 许可证
|
|
169
106
|
|
|
170
107
|
[MIT](LICENSE)
|
package/README.zh-CN.md
CHANGED
|
@@ -1,152 +1,7 @@
|
|
|
1
1
|
# Codexly
|
|
2
2
|
|
|
3
|
-
[
|
|
3
|
+
中文说明已设为 GitHub 默认首页,请阅读 [中文 README](README.md)。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
支持 Codex 与 Claude,在桌面、Web 和移动浏览器中处理本地项目。
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## 获取 Codexly
|
|
10
|
-
|
|
11
|
-
| 版本 | 适用场景 | 开始使用 |
|
|
12
|
-
| ------ | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
13
|
-
| 桌面版 | 原生工作台、集成终端、独立任务窗口、系统通知与托盘 | [下载 Windows、Ubuntu 或 macOS 安装包](https://github.com/BryanHoo/Codexly/releases),按[桌面安装指南](desktop/docs/installation.md)安装 |
|
|
14
|
-
| Web 版 | 本机浏览器工作台,或从可信局域网内的其他设备访问 | 安装 Node.js 24+,按[Web 版启动步骤](#启动-web-版)运行 |
|
|
15
|
-
|
|
16
|
-
桌面安装包支持 Windows 10/11 x64、Ubuntu 24.04+ x64、macOS 14.5+(Apple Silicon / Intel),并提供 macOS 12.4+ Intel 的 Legacy 版本。安装步骤与各平台的系统提示见[安装指南](desktop/docs/installation.md)。桌面版首次启动会自动安装并校验应用私有的 Codex 运行时。
|
|
17
|
-
|
|
18
|
-
## 主要功能
|
|
19
|
-
|
|
20
|
-
- 实时查看任务回复、命令、审批、推理摘要和文件变更,查看文件编辑耗时与完成汇总,并用持久化队列安排后续消息。
|
|
21
|
-
- 优先加载最近的会话历史,顶部按需读取更早回合,展开过程后独立加载执行条目;长代码预览共用渲染与有界高亮。详见[会话加载与性能](docs/conversation-performance.md)。
|
|
22
|
-
- 在 Web 桌面浏览器与桌面应用中并行打开最多四个任务,各分屏保留独立草稿与消息队列;文件和 Git 面板跟随当前聚焦任务,Web 移动端保持单任务视图。
|
|
23
|
-
- 从任务标题栏的「分屏布局」选择双、三、四分屏的自适应、横排、竖排、主辅或田字布局;保留当前会话,其余分屏打开新建页。仅桌面视图提供此入口。
|
|
24
|
-
- 拖动分割线调整任务分屏尺寸,从任务标题栏新建任务;收起输入框后仍可查看当前模型与思考量。
|
|
25
|
-
- 在桌面或移动端的项目文件源码预览中直接编辑文本,支持撤销重做,并在离开编辑区或切换窗口时自动保存。
|
|
26
|
-
- 阅读流式 Markdown 回复并复制原始文本;缩放、拖动消息图片、项目图片与壁纸,或以原始尺寸查看。
|
|
27
|
-
- 直接预览聊天附件、文件链接与项目文件树中的 PDF。
|
|
28
|
-
- 查看 Markdown 回复中嵌入的任务本地图片,并打开图片预览。
|
|
29
|
-
- 使用助手回复中的文件引用、代码审查评论与后续建议;点击建议后可在输入框继续编辑。
|
|
30
|
-
- 为任务选择模型、思考量、快速模式、审批策略和文件访问范围,并在全局设置中配置[上下文窗口](docs/model-context-window.md)。
|
|
31
|
-
- 新建项目及目录,跨项目搜索任务、历史消息和文件;检查变更、管理分支与 worktree,选择文件后提交或提交并推送,也可独立推送已有提交;详见 [Git 操作指南](docs/git-workflow.md)。Git 操作仅作用于项目根目录对应的仓库,普通子目录不会借用父仓库。
|
|
32
|
-
- 在侧栏「已固定」与「运行中」快捷区切换任务,未查看的完成任务优先于待审批与运行任务展示,并保留在分组总数中,查看后清除完成提醒;可折叠预览或打开完整列表,项目收起时仍可访问。
|
|
33
|
-
- 通过侧栏任务的项目标签识别任务来源;项目收起时仍显示未读完成、等待审批或运行状态。
|
|
34
|
-
- 管理 Skills、插件、MCP 服务、项目、归档任务、通知与定时工作;刷新官方插件可同步状态,并提示部分失败。
|
|
35
|
-
- 在「设置 → 智能体配置 → 历史文件存储」手动请求后台压缩超过 7 天未写入的历史;Web 作用于服务端,桌面端作用于本机。共用历史目录的其他 Codex 客户端需支持压缩格式。
|
|
36
|
-
|
|
37
|
-
**桌面版**提供原生项目终端、全局快捷键、独立任务窗口、托盘集成和应用私有 Codex 安装。支持 Windows、Ubuntu 和 macOS;在通用设置中可启用登录系统后自动启动。完整功能与更新方式见[桌面版指南](desktop/README.md)。
|
|
38
|
-
|
|
39
|
-
**Web 版**在本机运行服务并由浏览器访问,支持手机等设备从可信局域网接入、任务看板、Mermaid 图表和自定义工作台背景。Web 版通过 `@openai/codex` 自带 Codex CLI `0.162.0`;使用 `--codex-bin <path>` 或 `CODEXLY_CODEX_BIN` 指定外部版本时,版本必须满足 `>=0.162.0,<0.163.0`。
|
|
40
|
-
|
|
41
|
-
连接同一 Web 服务的浏览器与设备会同步项目待办和异步问答变更;断线重连或页面恢复可见时刷新状态。
|
|
42
|
-
|
|
43
|
-
在支持分屏的工作台中,可从侧栏任务菜单打开任务分屏,也可在聊天空白处右键选择向上、向下、向左或向右分屏。快捷键为 macOS `⌘+⌥+方向键`,Windows / Linux `Ctrl+Alt+方向键`;最多四个分屏。
|
|
44
|
-
|
|
45
|
-
拖动分割线可调整相邻分屏尺寸;从通知、搜索或任务看板跳转时保留分屏布局。
|
|
46
|
-
|
|
47
|
-
## 启动 Web 版
|
|
48
|
-
|
|
49
|
-
需要 Node.js >=24.0.0,以及 Chrome/Chromium 116+、Firefox 124+ 或 Safari 17.4+。
|
|
50
|
-
|
|
51
|
-
无需安装,直接运行最新版本:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
npx --package @bryanhu/codexly@latest codexly start
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Codexly 会自动打开浏览器。若未打开,请访问终端输出的地址;默认地址为 `http://127.0.0.1:3210`。使用期间需保持终端运行,按 `Ctrl+C` 停止。
|
|
58
|
-
|
|
59
|
-
运行 `codexly --version` 查看安装版本,或使用 `codexly <command> --help` 查看命令专属选项。
|
|
60
|
-
|
|
61
|
-
可以在同一启动目录或同一 Codex Home 下同时运行多个 Web 实例;端口占用时自动递增。启动目录不决定应用内部配置或临时任务目录:临时任务默认使用用户主目录,显式指定 `--workspace` 时使用首个工作区。使用不同的 `--codex-home <目录>` 可隔离数据。
|
|
62
|
-
|
|
63
|
-
首次启动时,使用 ChatGPT 登录,或配置兼容 Responses API 和 `GET /models` 的 OpenAI-compatible 服务。
|
|
64
|
-
自定义 Provider 会发现可用模型,保留目录声明的能力与思考档位;未声明推理能力时隐藏思考强度菜单。详见[模型与思考强度](docs/model-discovery.md)。
|
|
65
|
-
|
|
66
|
-
经常使用时可以全局安装:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
npm install --global @bryanhu/codexly@latest
|
|
70
|
-
codexly
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
安装命令使用 npm 默认源(未自行配置时为官方源),复用 npm 缓存并重新校验过期的包元数据。
|
|
74
|
-
|
|
75
|
-
## Web 登录自启动
|
|
76
|
-
|
|
77
|
-
全局安装后,通过 CLI 配置当前用户登录系统时自动运行。支持 macOS、Windows 和带 systemd 用户服务的 Ubuntu;本机与 LAN 模式均不自动打开浏览器。
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# 本机模式;下次登录启动
|
|
81
|
-
codexly autostart enable
|
|
82
|
-
|
|
83
|
-
# LAN 模式;同时立即启动
|
|
84
|
-
codexly autostart enable --lan --now
|
|
85
|
-
|
|
86
|
-
codexly autostart status
|
|
87
|
-
codexly autostart credentials
|
|
88
|
-
codexly autostart logs
|
|
89
|
-
codexly autostart restart
|
|
90
|
-
codexly autostart disable
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
`enable` 保存本次提供的启动参数,默认本机模式和端口 3210;重复执行会更新同一个登录项。省略 `--now` 时,当前运行实例在重启或下次登录后应用新配置。端口占用会递增,请以 `status` 输出的实际地址为准。LAN 密码首次生成后保存复用,通过 `credentials` 显式查看;服务重启后需重新认证。
|
|
94
|
-
|
|
95
|
-
需要稳定的全局 npm 安装,不能从 `npx` 临时缓存登记。Node/npm 安装路径变化后运行 `codexly autostart repair --now`;卸载 npm 包前运行 `codexly autostart disable`。普通前台启动可用 `codexly start --no-open` 禁止打开浏览器。
|
|
96
|
-
|
|
97
|
-
配置位置、环境变量、Linux linger 限制和各系统故障排查见 [Web 登录自启动指南](docs/web-autostart.zh-CN.md)。
|
|
98
|
-
|
|
99
|
-
## 使用 Web 版
|
|
100
|
-
|
|
101
|
-
不依赖项目时,直接选择“新建任务”。处理仓库时,先添加一个运行端文件夹作为项目目录,再创建任务,并按需附加文件、图片、项目引用或 Skills 后提交需求。归档的任务可以从项目任务列表中恢复或永久删除。
|
|
102
|
-
|
|
103
|
-
Git 变更面板顶部显示分支、推送目标及待同步数量,提供远端配置、发布分支、获取更新、仅快进拉取与独立推送。底部编辑提交信息,主按钮执行「提交」,「更多 Git 操作」提供「提交并推送」。草稿按项目、worktree 和分支保存在当前设备;AI 生成可撤销,推送失败会保留本地提交并可单独重试。首次推送可通过「发布分支」建立上游,历史中可查看未推送标记。
|
|
104
|
-
|
|
105
|
-
任务控件用于设置模型、思考量、快速模式、审批方式和文件访问范围。通知偏好与项目最近一次完整设置会保存给后续任务。右侧检查器提供项目文件、来源、代码变更、Git 历史、审查和提交操作。即使从其他设备打开界面,项目目录和文件仍来自运行 Codexly 的电脑。
|
|
106
|
-
|
|
107
|
-
定时任务显示“结果未知”时会暂停后续运行,请先查看关联对话;确认后可删除该计划并重新创建。“已启动,正在收尾”会自动重试清理,无需再次运行。
|
|
108
|
-
|
|
109
|
-
打开项目文本文件的源码预览即可编辑,Markdown 需先切换到源码模式。编辑区失焦、离开文件或切换窗口时自动保存,也可按 `⌘/Ctrl+S` 手动保存。支持最大 2 MiB 的 UTF-8 文本,并保留换行与 BOM;更大或不支持的文件保持只读。保存失败或发生外部修改冲突时,当前窗口保留草稿并显示恢复操作。草稿仅保存在内存中,刷新、强制退出或崩溃后不保证恢复。
|
|
110
|
-
|
|
111
|
-
## Web 局域网访问
|
|
112
|
-
|
|
113
|
-
在可信局域网中启动:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
codexly start --lan
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
终端会输出局域网地址和随机访问密码。常用选项如下:
|
|
120
|
-
|
|
121
|
-
| 选项 | 用途 |
|
|
122
|
-
| --------------------------- | ---------------------------------------------------- |
|
|
123
|
-
| `--port <port>` | 指定起始端口;端口被占用时自动尝试后续端口 |
|
|
124
|
-
| `--lan-password <password>` | 设置 16 至 128 位密码,必须包含大小写字母和数字 |
|
|
125
|
-
| `--allowed-host <domain>` | 允许精确的反向代理域名;多个域名可重复传入 |
|
|
126
|
-
| `--session-ttl <duration>` | 设置固定会话期限,如 `12h`;省略时持续到 Server 重启 |
|
|
127
|
-
| `--workspace <path>` | 限制项目选择的绝对根目录;多个根目录可重复传入 |
|
|
128
|
-
|
|
129
|
-
密码含 Shell 特殊字符时请使用引号。局域网模式使用未加密 HTTP,只能用于可信网络,禁止直接暴露到互联网。重启 Codexly 会使随机配对码和全部会话失效;显式设置的固定密码保持有效。
|
|
130
|
-
|
|
131
|
-
## Web 诊断与更新
|
|
132
|
-
|
|
133
|
-
启动、Codex 或本地数据检查失败时运行 `codexly doctor`。使用 `codexly --help` 查看完整命令,`codexly start --help` 或 `codexly doctor --help` 查看对应选项,`codexly --version` 查看版本。
|
|
134
|
-
|
|
135
|
-
交互式启动和“设置 > 关于”会检查新版本。侧栏出现更新提示后,点击版本号即可查看更新日志并安装更新。内置更新会并行探测官方源和镜像源,优先使用最先成功响应的源,失败后切换另一个源;同一次更新的包下载和依赖安装复用选源结果及用户的 npm 缓存。若选中的镜像仍在同步,新版本可能稍晚显示。全局安装也可以通过以下命令更新:
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
npm install --global @bryanhu/codexly@latest
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
如果 Linux 上的旧版本通过 `sudo npm install --global` 安装到系统目录,首次升级到支持提权更新的版本时需要手动执行一次上述命令并在前面加上 `sudo`。后续内置更新会在需要时请求 `sudo` 权限。
|
|
142
|
-
|
|
143
|
-
## 获取帮助
|
|
144
|
-
|
|
145
|
-
- [问题反馈](https://github.com/BryanHoo/Codexly/issues)
|
|
146
|
-
- [贡献指南](CONTRIBUTING.md)
|
|
147
|
-
- [安全策略](SECURITY.md)
|
|
148
|
-
- [版本记录](CHANGELOG.md)
|
|
149
|
-
|
|
150
|
-
## 许可证
|
|
151
|
-
|
|
152
|
-
[MIT](LICENSE)
|
|
7
|
+
[下载桌面版](https://github.com/BryanHoo/Codexly/releases) · [使用文档](docs/README.md) · [English](README.en.md)
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {createRequire}from'node:module';import {C,D}from'./chunk-VBTBWY72.js';import {Nb,Qb,Lb,Sb,Tb}from'./chunk-S7LPESTQ.js';import {Buffer}from'buffer';import {randomUUID,createHash}from'crypto';import {rm,stat}from'fs/promises';import {join,isAbsolute,basename}from'path';import {openSync,readSync,closeSync,statSync}from'fs';import {availableParallelism}from'os';import {setTimeout as setTimeout$1}from'timers';import {Worker}from'worker_threads';createRequire(import.meta.url);
|
|
2
|
+
var ne={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},w={"image/gif":".gif","image/jpeg":".jpg","image/png":".png","image/webp":".webp"};function c(a,e){let t=a?.trim();return t===void 0||t.length===0?e:t.slice(0,255)}function se(a){let e=openSync(a,"r");try{let t=Buffer.alloc(12),i=readSync(e,t,0,t.byteLength,0);return t.subarray(0,i)}finally{closeSync(e);}}function ae(a){let e=statSync(a);return {isFile:e.isFile(),mtimeMs:e.mtimeMs,size:e.size}}async function oe(a){let e=await stat(a);return {isFile:e.isFile(),mtimeMs:e.mtimeMs,size:e.size}}var h=class extends Error{},x=class extends Error{name="AttachmentQueueFullError"},M=class extends Error{name="AttachmentJobTimeoutError"},U=new C({maxCount:256,maxBytes:128*1024*1024,maxTaskCount:64,maxTaskBytes:64*1024*1024}),v=class{constructor(e=Math.min(2,Math.max(1,availableParallelism()-1)),t=new URL(typeof CODEXLY_COMPILED_ATTACHMENT_WORKER>"u"?"./historical-attachment-worker.js":CODEXLY_COMPILED_ATTACHMENT_WORKER,import.meta.url),i={}){this.concurrency=e;this.workerUrl=t;if(!Number.isSafeInteger(e)||e<=0)throw new RangeError("Invalid attachment worker budget");if(this.#c=i.budget??U,this.#r=i.timeoutMs??3e4,!Number.isSafeInteger(this.#r)||this.#r<=0)throw new RangeError("Invalid attachment worker deadline")}concurrency;workerUrl;#e=new Set;#t=[];#a=false;#c;#r;run(e,t={}){if(this.#a)return Promise.reject(new Error("Attachment worker pool is closed"));if(t.signal?.aborted)return Promise.reject(this.#n());let i=D(e,128*1024*1024),r=this.#c.reserve(t.taskKey??e.directory??"unscoped",i);return r===void 0?Promise.reject(new x("Attachment queue budget exceeded")):new Promise((n,o)=>{let s={job:e.operation==="persist"?{...e,temporaryName:`${randomUUID()}.tmp`}:e,taskKey:t.taskKey??e.directory??"unscoped",resolve:n,reject:o,release:r};s.timer=setTimeout(()=>{this.#m(s,new M("Attachment job deadline exceeded"));},this.#r),s.timer.unref(),t.signal!==void 0&&(s.signal=t.signal,s.abort=()=>{this.#m(s,this.#n());},t.signal.addEventListener("abort",s.abort,{once:true})),this.#t.push(s),this.#o();})}dispose(){this.#a=true;let e=new Error("Attachment worker pool is closed");for(let t of this.#t.splice(0))this.#i(t,e);for(let t of this.#e)this.#s(t,e);return Promise.all([...this.#e].map(t=>t.termination??Promise.resolve())).then(()=>{})}cancelTask(e){for(let i of [...this.#t])i.taskKey===e&&this.#m(i,this.#n());let t=[...this.#e].filter(i=>i.request?.taskKey===e);for(let i of t)this.#s(i,this.#n());return Promise.all(t.map(i=>i.termination??Promise.resolve())).then(()=>{})}#n(){let e=new Error("Attachment job canceled");return e.name="AbortError",e}#i(e,t,i){e.settled||(e.settled=true,clearTimeout(e.timer),e.abort!==void 0&&e.signal?.removeEventListener("abort",e.abort),e.release(),t!==void 0?e.reject(t):i!==void 0&&e.resolve(i));}#m(e,t){let i=this.#t.indexOf(e);if(i>=0){this.#t.splice(i,1),this.#i(e,t);return}let r=[...this.#e].find(n=>n.request===e);r!==void 0&&this.#s(r,t);}#o(){for(;!this.#a&&this.#t.length>0;){let e=[...this.#e].find(i=>i.request===void 0&&!i.stopping);if(e===void 0){if(this.#e.size>=this.concurrency)return;try{e=this.#d();}catch(i){let r=this.#t.shift();r!==void 0&&this.#i(r,i instanceof Error?i:new Error(String(i)));continue}}clearTimeout(e.idleTimer);let t=this.#t.shift();if(t===void 0)return;e.request=t,e.worker.ref();try{e.worker.postMessage(e.request.job);}catch(i){this.#s(e,i instanceof Error?i:new Error(String(i)));}}}#d(){let e={worker:new Worker(this.workerUrl)};return this.#e.add(e),e.worker.on("message",t=>{if(e.stopping||!this.#e.has(e))return;let i=e.request;delete e.request,i!==void 0&&(t.result!==void 0?this.#i(i,void 0,t.result):this.#i(i,t.invalid===true?new h(t.error):new Error(t.error??"Invalid attachment worker response")),e.worker.unref(),e.idleTimer=setTimeout$1(()=>{this.#s(e,new Error("Attachment worker idle"));},3e4),e.idleTimer.unref(),this.#o());}),e.worker.once("error",t=>{this.#s(e,t);}),e.worker.once("exit",t=>{this.#s(e,new Error(`Attachment worker exited: ${String(t)}`));}),e}#s(e,t){if(!this.#e.has(e)||e.stopping)return;e.stopping=true,clearTimeout(e.idleTimer);let i=e.request;i!==void 0&&(clearTimeout(i.timer),i.abort!==void 0&&i.signal?.removeEventListener("abort",i.abort),i.reject(t)),e.termination=e.worker.terminate().catch(()=>{}).then(()=>{this.#e.delete(e),delete e.request,i!==void 0&&(i.job.temporaryName!==void 0&&i.job.directory!==void 0&&rm(join(i.job.directory,i.job.temporaryName),{force:true}).catch(()=>{}),this.#i(i,t)),this.#o();});}},f=new v;var m=(a,e)=>JSON.stringify([a,e]),H=class{constructor(e){this.directory=e;}directory;#e=new Map;#t=new Map;#a=0;#c=false;#r=new Map;#n=new Map;async addDataUrl(e,t,i,r){if(t.url.length>Math.ceil(Nb*4/3)+64)return;let n=t.url.indexOf(","),o=t.url.slice(0,n),s=/^data:(image\/(?:gif|jpeg|png|webp));base64$/u.exec(o);if(s!==null)return this.#i(e,"image",s[1],c(t.name,`\u56FE\u7247-${String(i+1)}`),{type:"base64",value:t.url.slice(n+1)},void 0,r)}async addBase64Image(e,t,i,r){if(!(t.encoded.length>Math.ceil(Nb*4/3)+4))return this.#i(e,"image",void 0,n=>c(t.name,`\u751F\u6210\u56FE\u7247-${String(i+1)}${w[n]}`),{type:"base64",value:t.encoded},void 0,r)}async addStagedImage(e,t,i,r,n){if(t.size<=0||t.size>Nb)return;let o=await this.#i(e,"image",t.mediaType,c(r,`\u751F\u6210\u56FE\u7247-${String(i+1)}${w[t.mediaType]}`),{type:"file",path:t.path},t,n);return o!==void 0&&await rm(t.path,{force:true}).catch(()=>{}),o}async addLocalImage(e,t,i,r){if(isAbsolute(t))return this.#i(e,"image",void 0,c(basename(t),`\u56FE\u7247-${String(i+1)}`),{type:"file",path:t},void 0,r)}async addText(e,t,i,r){if(!(t.text.length>Qb))return this.#i(e,"text","text/plain",c(t.name,`Pasted text-${String(i+1)}.txt`),{type:"text",value:t.text},void 0,r)}async addLocalFile(e,t,i){if(isAbsolute(t.path))return this.#i(e,"file",t.mediaType,c(t.name,"Attachment"),{type:"file",path:t.path},void 0,i)}async restoreTask(e,t){this.clearTask(e);let i=this.#o(e);for(let r of t){if(!this.#m(e,i))return;await this.restoreAttachment(e,r);}}async restoreAttachment(e,t){if(this.#c||!/^[a-f0-9]{64}$/u.test(t.blobKey))return;let i=this.#o(e),r=this.#s(e,t.blobKey);try{let n=await stat(r);if(!this.#m(e,i)||this.#e.has(m(e,t.attachment.id))||!n.isFile()||n.size!==t.attachment.size)return;this.#u(t.attachment.size),this.#g({attachment:t.attachment,blobKey:t.blobKey,path:r,taskId:e});}catch{}}pendingMetadata(e){return [...this.#t.get(e)?.values()??[]]}markPersisted(e,t){let i=this.#t.get(e);i?.delete(t),i?.size===0&&this.#t.delete(e);}async read(e,t){let i=m(e,t),r=this.#e.get(i);if(r?.taskId===e)try{let n=await f.run({operation:"read",source:{type:"file",path:r.path},kind:r.attachment.kind,mediaType:r.attachment.mediaType,maxBytes:r.attachment.size,size:r.attachment.size,digest:r.blobKey},{taskKey:this.#d(e),signal:this.#o(e).signal});return this.#e.get(i)!==r||n.content===void 0?void 0:(this.#h(r),{...r.attachment,content:Buffer.from(n.content)})}catch(n){n instanceof h&&this.#e.get(i)===r&&(this.#l(i),await rm(r.path,{force:true}).catch(()=>{}));return}}clearTask(e){this.#r.get(e)?.abort(),this.#r.delete(e);for(let[t,i]of this.#e)i.taskId===e&&this.#l(t);this.#t.delete(e);}deleteTask(e){this.removeTask(e).catch(()=>{});}async removeTask(e){this.clearTask(e);let t=[...this.#n.get(e)??[]];await Promise.allSettled(t),await f.cancelTask(this.#d(e)),await rm(this.#d(e),{force:true,recursive:true});}dispose(){this.#c=true;for(let e of this.#r.values())e.abort();this.#r.clear(),this.#e.clear(),this.#t.clear(),this.#a=0;}async#i(e,t,i,r,n,o,s){if(this.#c||s?.aborted)return;let p=this.#o(e),O=t==="image"?Nb:t==="text"?Qb:Lb,y=f.run({operation:"persist",source:n,directory:this.#d(e),kind:t,maxBytes:O,...i===void 0?{}:{mediaType:i},...o===void 0?{}:{size:o.size,digest:o.contentDigest}},{taskKey:this.#d(e),signal:s===void 0?p.signal:AbortSignal.any([p.signal,s])}),l=this.#n.get(e)??new Set;l.add(y),this.#n.set(e,l);try{let d=await y;if(s?.aborted||!this.#m(e,p)||d.path===void 0)return;let E=typeof r=="string"?r:r(d.mediaType),b=`history-${createHash("sha256").update(JSON.stringify([e,t,d.mediaType,E,d.size,d.blobKey])).digest("hex")}`,A=this.#e.get(m(e,b));if(A!==void 0)return this.#h(A),A.attachment;let u={id:b,kind:t,mediaType:d.mediaType,name:E,size:d.size};this.#u(u.size),this.#g({attachment:u,blobKey:d.blobKey,path:d.path,taskId:e});let R=this.#t.get(e)??new Map;return R.set(b,{attachment:u,blobKey:d.blobKey,schemaVersion:1}),this.#t.set(e,R),u}catch{return}finally{l.delete(y),l.size===0&&this.#n.get(e)===l&&this.#n.delete(e);}}#m(e,t){return !this.#c&&this.#r.get(e)===t}#o(e){let t=this.#r.get(e)??new AbortController;return this.#r.set(e,t),t}#d(e){return join(this.directory,createHash("sha256").update(e).digest("hex"))}#s(e,t){return join(this.#d(e),t)}#g(e){this.#e.set(m(e.taskId,e.attachment.id),e),this.#a+=e.attachment.size;}#h(e){this.#e.delete(m(e.taskId,e.attachment.id)),this.#e.set(m(e.taskId,e.attachment.id),e);}#l(e){let t=this.#e.get(e);t!==void 0&&(this.#e.delete(e),this.#a-=t.attachment.size);}#u(e){for(;this.#e.size>=Sb||this.#a+e>Tb;){let t=this.#e.keys().next().value;if(t===void 0)return;this.#l(t);}}};export{ne as a,w as b,c,se as d,ae as e,oe as f,H as g};
|