@bryanhu/codexly 0.22.1 → 0.24.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 +32 -0
- package/README.md +45 -3
- package/README.zh-CN.md +49 -7
- package/dist/{chunk-4VM2ZUPT.js → chunk-MDJUQPOL.js} +179 -125
- package/dist/{chunk-NUJPWN62.js → chunk-YG3QMLCD.js} +433 -43
- package/dist/cli.js +49 -21
- package/dist/providers/codex/index.js +1 -1
- package/dist/server/index.js +2 -2
- package/dist/web/.vite/manifest.json +111 -111
- 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-Ci9mJOS-.js → agent-settings-panel-STxloEc6.js} +1 -1
- package/dist/web/assets/agent-settings-panel-STxloEc6.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-STxloEc6.js.gz +0 -0
- package/dist/web/assets/{attachments-uWbRsPJj.js → attachments-CSV8KBYa.js} +1 -1
- package/dist/web/assets/attachments-CSV8KBYa.js.br +0 -0
- package/dist/web/assets/attachments-CSV8KBYa.js.gz +0 -0
- package/dist/web/assets/{background-image-picker-qGpdQPQi.js → background-image-picker-JDrclQ6O.js} +1 -1
- package/dist/web/assets/background-image-picker-JDrclQ6O.js.br +0 -0
- package/dist/web/assets/background-image-picker-JDrclQ6O.js.gz +0 -0
- package/dist/web/assets/{bing-wallpaper-queries-uesKD16x.js → bing-wallpaper-queries-BqjgHv5k.js} +1 -1
- package/dist/web/assets/bing-wallpaper-queries-BqjgHv5k.js.br +0 -0
- package/dist/web/assets/bing-wallpaper-queries-BqjgHv5k.js.gz +0 -0
- package/dist/web/assets/{button-group-075rCj_f.js → button-group-mjeW2BTr.js} +1 -1
- package/dist/web/assets/button-group-mjeW2BTr.js.br +0 -0
- package/dist/web/assets/button-group-mjeW2BTr.js.gz +0 -0
- package/dist/web/assets/{code-block-C9eTeWWd.js → code-block-CmzWecTa.js} +1 -1
- package/dist/web/assets/code-block-CmzWecTa.js.br +0 -0
- package/dist/web/assets/code-block-CmzWecTa.js.gz +0 -0
- package/dist/web/assets/{commit-settings-panel-CaMMU0oA.js → commit-settings-panel-BQRIgAaq.js} +1 -1
- package/dist/web/assets/commit-settings-panel-BQRIgAaq.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-BQRIgAaq.js.gz +0 -0
- package/dist/web/assets/{context-menu-Dj3lnor1.js → context-menu-Dfbnk16V.js} +1 -1
- package/dist/web/assets/context-menu-Dfbnk16V.js.br +0 -0
- package/dist/web/assets/context-menu-Dfbnk16V.js.gz +0 -0
- package/dist/web/assets/{file-review-dialog-D8XVZ21M.js → file-review-dialog-Bv3Hor8O.js} +1 -1
- package/dist/web/assets/file-review-dialog-Bv3Hor8O.js.br +0 -0
- package/dist/web/assets/file-review-dialog-Bv3Hor8O.js.gz +0 -0
- package/dist/web/assets/{git-history-panel-D2fKSR66.js → git-history-panel-CofR8yva.js} +1 -1
- package/dist/web/assets/git-history-panel-CofR8yva.js.br +0 -0
- package/dist/web/assets/git-history-panel-CofR8yva.js.gz +0 -0
- package/dist/web/assets/{global-search-dialog-BxT-UjpZ.js → global-search-dialog-m_blFw9z.js} +2 -2
- package/dist/web/assets/global-search-dialog-m_blFw9z.js.br +0 -0
- package/dist/web/assets/global-search-dialog-m_blFw9z.js.gz +0 -0
- package/dist/web/assets/{global-settings-about-DiblprcD.js → global-settings-about-CJkWRRdz.js} +1 -1
- package/dist/web/assets/global-settings-about-CJkWRRdz.js.br +0 -0
- package/dist/web/assets/global-settings-about-CJkWRRdz.js.gz +0 -0
- package/dist/web/assets/{global-settings-fields-D5T5SPXY.js → global-settings-fields-DqWp3WpN.js} +1 -1
- package/dist/web/assets/global-settings-fields-DqWp3WpN.js.br +0 -0
- package/dist/web/assets/global-settings-fields-DqWp3WpN.js.gz +0 -0
- package/dist/web/assets/{global-settings-model-COz331Sr.js → global-settings-model-CqgHQlxF.js} +1 -1
- package/dist/web/assets/global-settings-model-CqgHQlxF.js.br +0 -0
- package/dist/web/assets/global-settings-model-CqgHQlxF.js.gz +0 -0
- package/dist/web/assets/{global-settings-page-DEBGBxSg.js → global-settings-page-BiVZofyf.js} +2 -2
- package/dist/web/assets/global-settings-page-BiVZofyf.js.br +0 -0
- package/dist/web/assets/global-settings-page-BiVZofyf.js.gz +0 -0
- package/dist/web/assets/{global-settings-pets-DwJnj_6N.js → global-settings-pets-DkdiEzFY.js} +1 -1
- package/dist/web/assets/global-settings-pets-DkdiEzFY.js.br +0 -0
- package/dist/web/assets/global-settings-pets-DkdiEzFY.js.gz +0 -0
- package/dist/web/assets/{history-task-timeline-oQRRdMbY.js → history-task-timeline-BrLtwo5_.js} +1 -1
- package/dist/web/assets/history-task-timeline-BrLtwo5_.js.br +0 -0
- package/dist/web/assets/history-task-timeline-BrLtwo5_.js.gz +0 -0
- package/dist/web/assets/{index-DRfXjZ2a.js → index-D9lOU2_n.js} +3 -3
- package/dist/web/assets/index-D9lOU2_n.js.br +0 -0
- package/dist/web/assets/index-D9lOU2_n.js.gz +0 -0
- package/dist/web/assets/{installed-skills-pane-v1IcvRKL.js → installed-skills-pane-BRcMSvrv.js} +1 -1
- package/dist/web/assets/installed-skills-pane-BRcMSvrv.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-BRcMSvrv.js.gz +0 -0
- package/dist/web/assets/{lazy-message-response-B6dT9kbf.js → lazy-message-response-C3PwDwxE.js} +2 -2
- package/dist/web/assets/lazy-message-response-C3PwDwxE.js.br +0 -0
- package/dist/web/assets/lazy-message-response-C3PwDwxE.js.gz +0 -0
- package/dist/web/assets/{mcp-management-pane-DiPUaZAO.js → mcp-management-pane-CIXkOpXu.js} +1 -1
- package/dist/web/assets/mcp-management-pane-CIXkOpXu.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-CIXkOpXu.js.gz +0 -0
- package/dist/web/assets/message-response-AwJefMK2.js +7 -0
- package/dist/web/assets/message-response-AwJefMK2.js.br +0 -0
- package/dist/web/assets/message-response-AwJefMK2.js.gz +0 -0
- package/dist/web/assets/{official-plugins-pane-Cis1hRgm.js → official-plugins-pane-C4i4LhS5.js} +1 -1
- package/dist/web/assets/official-plugins-pane-C4i4LhS5.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-C4i4LhS5.js.gz +0 -0
- package/dist/web/assets/{personalization-settings-panel-BB5nguhA.js → personalization-settings-panel-BVty2pDz.js} +1 -1
- package/dist/web/assets/personalization-settings-panel-BVty2pDz.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-BVty2pDz.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-CAcF7DIa.js → project-file-popup-page-hTRv5v3H.js} +1 -1
- package/dist/web/assets/project-file-popup-page-hTRv5v3H.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-hTRv5v3H.js.gz +0 -0
- package/dist/web/assets/{project-source-dialog-DbOmvJBS.js → project-source-dialog-wuXJolJb.js} +1 -1
- package/dist/web/assets/project-source-dialog-wuXJolJb.js.br +0 -0
- package/dist/web/assets/project-source-dialog-wuXJolJb.js.gz +0 -0
- package/dist/web/assets/{project-source-panel-DGafRUDi.js → project-source-panel-PKAa_dbo.js} +1 -1
- package/dist/web/assets/project-source-panel-PKAa_dbo.js.br +0 -0
- package/dist/web/assets/project-source-panel-PKAa_dbo.js.gz +0 -0
- package/dist/web/assets/{prompt-input-DwT-XwSc.js → prompt-input-BHn4OExn.js} +1 -1
- package/dist/web/assets/prompt-input-BHn4OExn.js.br +0 -0
- package/dist/web/assets/prompt-input-BHn4OExn.js.gz +0 -0
- package/dist/web/assets/{prompt-input-controls-CLasQrSj.js → prompt-input-controls-D4wqb_zQ.js} +1 -1
- package/dist/web/assets/prompt-input-controls-D4wqb_zQ.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-D4wqb_zQ.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-date-time-picker-CnSPVHna.js → scheduled-task-date-time-picker-jo6dkC-Z.js} +1 -1
- package/dist/web/assets/scheduled-task-date-time-picker-jo6dkC-Z.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-jo6dkC-Z.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-schedule-BnMdRADi.js → scheduled-task-schedule-DD3Zt60h.js} +1 -1
- package/dist/web/assets/scheduled-task-schedule-DD3Zt60h.js.br +0 -0
- package/dist/web/assets/{scheduled-task-schedule-BnMdRADi.js.gz → scheduled-task-schedule-DD3Zt60h.js.gz} +0 -0
- package/dist/web/assets/{scheduled-tasks-container-CNCzsjiP.js → scheduled-tasks-container-CDsipwUR.js} +2 -2
- package/dist/web/assets/scheduled-tasks-container-CDsipwUR.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-CDsipwUR.js.gz +0 -0
- package/dist/web/assets/{settings-personalization-CB_nnUys.js → settings-personalization-BbAIVND-.js} +1 -1
- package/dist/web/assets/settings-personalization-BbAIVND-.js.br +0 -0
- package/dist/web/assets/settings-personalization-BbAIVND-.js.gz +0 -0
- package/dist/web/assets/{sheet-JpH2S7eZ.js → sheet-C6eLtEHx.js} +1 -1
- package/dist/web/assets/sheet-C6eLtEHx.js.br +0 -0
- package/dist/web/assets/sheet-C6eLtEHx.js.gz +0 -0
- package/dist/web/assets/{skills-market-container-BgtnwdI7.js → skills-market-container-DFzLg008.js} +2 -2
- package/dist/web/assets/skills-market-container-DFzLg008.js.br +0 -0
- package/dist/web/assets/skills-market-container-DFzLg008.js.gz +0 -0
- package/dist/web/assets/{task-timeline-store-BN41mX3t.js → task-timeline-store-Cj_Bcaqi.js} +1 -1
- package/dist/web/assets/task-timeline-store-Cj_Bcaqi.js.br +0 -0
- package/dist/web/assets/task-timeline-store-Cj_Bcaqi.js.gz +0 -0
- package/dist/web/assets/{third-party-marketplace-pane-CAI6XIWR.js → third-party-marketplace-pane-CoP9DTWX.js} +1 -1
- package/dist/web/assets/third-party-marketplace-pane-CoP9DTWX.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-CoP9DTWX.js.gz +0 -0
- package/dist/web/assets/workbench-composer-C6Sv8xDL.js +8 -0
- package/dist/web/assets/workbench-composer-C6Sv8xDL.js.br +0 -0
- package/dist/web/assets/workbench-composer-C6Sv8xDL.js.gz +0 -0
- package/dist/web/assets/{workbench-inspector-changes-Bl5nS-_2.js → workbench-inspector-changes-7z5diDTC.js} +1 -1
- package/dist/web/assets/workbench-inspector-changes-7z5diDTC.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-7z5diDTC.js.gz +0 -0
- package/dist/web/assets/{workbench-pet-canvas-CnwZR5HG.js → workbench-pet-canvas-dWliFlKE.js} +1 -1
- package/dist/web/assets/workbench-pet-canvas-dWliFlKE.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-dWliFlKE.js.gz +0 -0
- package/dist/web/assets/workbench-shell-fA7tfnac.js +3 -0
- package/dist/web/assets/workbench-shell-fA7tfnac.js.br +0 -0
- package/dist/web/assets/workbench-shell-fA7tfnac.js.gz +0 -0
- package/dist/web/index.html +1 -1
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/package.json +4 -2
- package/dist/web/assets/agent-settings-panel-Ci9mJOS-.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-Ci9mJOS-.js.gz +0 -0
- package/dist/web/assets/attachments-uWbRsPJj.js.br +0 -0
- package/dist/web/assets/attachments-uWbRsPJj.js.gz +0 -0
- package/dist/web/assets/background-image-picker-qGpdQPQi.js.br +0 -0
- package/dist/web/assets/background-image-picker-qGpdQPQi.js.gz +0 -0
- package/dist/web/assets/bing-wallpaper-queries-uesKD16x.js.br +0 -0
- package/dist/web/assets/bing-wallpaper-queries-uesKD16x.js.gz +0 -0
- package/dist/web/assets/button-group-075rCj_f.js.br +0 -0
- package/dist/web/assets/button-group-075rCj_f.js.gz +0 -0
- package/dist/web/assets/code-block-C9eTeWWd.js.br +0 -0
- package/dist/web/assets/code-block-C9eTeWWd.js.gz +0 -0
- package/dist/web/assets/commit-settings-panel-CaMMU0oA.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-CaMMU0oA.js.gz +0 -0
- package/dist/web/assets/context-menu-Dj3lnor1.js.br +0 -0
- package/dist/web/assets/context-menu-Dj3lnor1.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-D8XVZ21M.js.br +0 -0
- package/dist/web/assets/file-review-dialog-D8XVZ21M.js.gz +0 -0
- package/dist/web/assets/git-history-panel-D2fKSR66.js.br +0 -0
- package/dist/web/assets/git-history-panel-D2fKSR66.js.gz +0 -0
- package/dist/web/assets/global-search-dialog-BxT-UjpZ.js.br +0 -0
- package/dist/web/assets/global-search-dialog-BxT-UjpZ.js.gz +0 -0
- package/dist/web/assets/global-settings-about-DiblprcD.js.br +0 -0
- package/dist/web/assets/global-settings-about-DiblprcD.js.gz +0 -0
- package/dist/web/assets/global-settings-fields-D5T5SPXY.js.br +0 -0
- package/dist/web/assets/global-settings-fields-D5T5SPXY.js.gz +0 -0
- package/dist/web/assets/global-settings-model-COz331Sr.js.br +0 -0
- package/dist/web/assets/global-settings-model-COz331Sr.js.gz +0 -0
- package/dist/web/assets/global-settings-page-DEBGBxSg.js.br +0 -0
- package/dist/web/assets/global-settings-page-DEBGBxSg.js.gz +0 -0
- package/dist/web/assets/global-settings-pets-DwJnj_6N.js.br +0 -0
- package/dist/web/assets/global-settings-pets-DwJnj_6N.js.gz +0 -0
- package/dist/web/assets/history-task-timeline-oQRRdMbY.js.br +0 -0
- package/dist/web/assets/history-task-timeline-oQRRdMbY.js.gz +0 -0
- package/dist/web/assets/index-DRfXjZ2a.js.br +0 -0
- package/dist/web/assets/index-DRfXjZ2a.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-v1IcvRKL.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-v1IcvRKL.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-B6dT9kbf.js.br +0 -0
- package/dist/web/assets/lazy-message-response-B6dT9kbf.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-DiPUaZAO.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-DiPUaZAO.js.gz +0 -0
- package/dist/web/assets/message-response-BZZGbaVm.js +0 -7
- package/dist/web/assets/message-response-BZZGbaVm.js.br +0 -0
- package/dist/web/assets/message-response-BZZGbaVm.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-Cis1hRgm.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-Cis1hRgm.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-BB5nguhA.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-BB5nguhA.js.gz +0 -0
- package/dist/web/assets/project-file-popup-page-CAcF7DIa.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-CAcF7DIa.js.gz +0 -0
- package/dist/web/assets/project-source-dialog-DbOmvJBS.js.br +0 -0
- package/dist/web/assets/project-source-dialog-DbOmvJBS.js.gz +0 -0
- package/dist/web/assets/project-source-panel-DGafRUDi.js.br +0 -0
- package/dist/web/assets/project-source-panel-DGafRUDi.js.gz +0 -0
- package/dist/web/assets/prompt-input-DwT-XwSc.js.br +0 -0
- package/dist/web/assets/prompt-input-DwT-XwSc.js.gz +0 -0
- package/dist/web/assets/prompt-input-controls-CLasQrSj.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-CLasQrSj.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CnSPVHna.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CnSPVHna.js.gz +0 -0
- package/dist/web/assets/scheduled-task-schedule-BnMdRADi.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-CNCzsjiP.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-CNCzsjiP.js.gz +0 -0
- package/dist/web/assets/settings-personalization-CB_nnUys.js.br +0 -0
- package/dist/web/assets/settings-personalization-CB_nnUys.js.gz +0 -0
- package/dist/web/assets/sheet-JpH2S7eZ.js.br +0 -0
- package/dist/web/assets/sheet-JpH2S7eZ.js.gz +0 -0
- package/dist/web/assets/skills-market-container-BgtnwdI7.js.br +0 -0
- package/dist/web/assets/skills-market-container-BgtnwdI7.js.gz +0 -0
- package/dist/web/assets/task-timeline-store-BN41mX3t.js.br +0 -0
- package/dist/web/assets/task-timeline-store-BN41mX3t.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-CAI6XIWR.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-CAI6XIWR.js.gz +0 -0
- package/dist/web/assets/workbench-composer-dKix0zGK.js +0 -8
- package/dist/web/assets/workbench-composer-dKix0zGK.js.br +0 -0
- package/dist/web/assets/workbench-composer-dKix0zGK.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-Bl5nS-_2.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-Bl5nS-_2.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-CnwZR5HG.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-CnwZR5HG.js.gz +0 -0
- package/dist/web/assets/workbench-shell-B8lBrj2O.js +0 -3
- package/dist/web/assets/workbench-shell-B8lBrj2O.js.br +0 -0
- package/dist/web/assets/workbench-shell-B8lBrj2O.js.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,38 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.24.0] - 2026-09-20
|
|
8
|
+
|
|
9
|
+
### 新增
|
|
10
|
+
|
|
11
|
+
- 支持在 Docker 部署中保留宿主工作区绝对路径、挂载全局 Git 配置与 SSH 凭据,便于复用已有项目和访问远程仓库。
|
|
12
|
+
- 持久化 Thread 历史附件元数据与正文,使附件在任务恢复、分叉和服务重启后仍可安全读取。
|
|
13
|
+
|
|
14
|
+
### 优化
|
|
15
|
+
|
|
16
|
+
- 升级内置 Codex 至 `0.155.1`,刷新 App Server Schema 基线并适配 Thread Attachment 通知协议。
|
|
17
|
+
|
|
18
|
+
### 修复
|
|
19
|
+
|
|
20
|
+
- 放宽自定义局域网密码对 Shell 特殊字符的限制,并限制局域网客户端调用仅适用于宿主设备的操作。
|
|
21
|
+
- 修复流式 Markdown 强调标记跨片段到达时可能错误渲染的问题。
|
|
22
|
+
|
|
23
|
+
### 工程
|
|
24
|
+
|
|
25
|
+
- 升级 Docker 构建、登录、元数据与多架构模拟相关 GitHub Actions。
|
|
26
|
+
|
|
27
|
+
## [0.23.0] - 2026-09-18
|
|
28
|
+
|
|
29
|
+
### 新增
|
|
30
|
+
|
|
31
|
+
- 添加生产级 Docker 镜像与可独立下载的 Docker Compose 配置,支持自定义工作区、Codex Home、端口、配对密码及会话期限。
|
|
32
|
+
- 扩展发布流程,在 npm 包通过验证后同步发布带 SBOM 和 provenance 的 `linux/amd64`、`linux/arm64` GHCR 镜像。
|
|
33
|
+
|
|
34
|
+
### 修复
|
|
35
|
+
|
|
36
|
+
- 限制项目选择只能落在配置工作区的真实路径内,阻止通过符号链接越过工作区边界。
|
|
37
|
+
- 修复运行中切换自定义 API 后仍复用旧 ChatGPT 认证、导致部分自定义模型不可用的问题。
|
|
38
|
+
|
|
7
39
|
## [0.22.1] - 2026-09-16
|
|
8
40
|
|
|
9
41
|
### 修复
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<img src="https://img.shields.io/badge/TypeScript-6.0-3178c6" alt="TypeScript" />
|
|
11
11
|
<img src="https://img.shields.io/badge/Vite-8-646cff" alt="Vite" />
|
|
12
12
|
<img src="https://img.shields.io/badge/Fastify-5-000000" alt="Fastify" />
|
|
13
|
-
<img src="https://img.shields.io/badge/OpenAI_Codex-0.
|
|
13
|
+
<img src="https://img.shields.io/badge/OpenAI_Codex-0.155.1-412991" alt="OpenAI Codex" />
|
|
14
14
|
<a href="./LICENSE">
|
|
15
15
|
<img src="https://img.shields.io/badge/License-MIT-0f766e" alt="MIT" />
|
|
16
16
|
</a>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
- Node.js >=22.14.0
|
|
56
56
|
- Chrome/Chromium 116+, Firefox 124+, or Safari 17.4+
|
|
57
57
|
|
|
58
|
-
Codexly includes Codex CLI `0.
|
|
58
|
+
Codexly includes Codex CLI `0.155.1` through `@openai/codex`; a separate installation is not required. External binaries supplied through `--codex-bin <path>` or `CODEXLY_CODEX_BIN` must satisfy `>=0.155.0,<0.156.0`.
|
|
59
59
|
|
|
60
60
|
## Quick Start
|
|
61
61
|
|
|
@@ -80,6 +80,47 @@ codexly
|
|
|
80
80
|
|
|
81
81
|
The installation command tries the China mirror first, falls back to the official registry on failure, reuses the npm cache, and revalidates stale package metadata. `||` works in Bash, Zsh, cmd, and PowerShell 7+. In Windows PowerShell 5.1, run the command to the right of `||` separately if the first command fails.
|
|
82
82
|
|
|
83
|
+
## Docker
|
|
84
|
+
|
|
85
|
+
Download the user-facing Compose file and start the published image:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
mkdir codexly && cd codexly
|
|
89
|
+
curl -fsSLO https://raw.githubusercontent.com/BryanHoo/Codexly/main/compose.yaml
|
|
90
|
+
curl -fsSLo .env.example https://raw.githubusercontent.com/BryanHoo/Codexly/main/.env.example
|
|
91
|
+
cp .env.example .env
|
|
92
|
+
docker compose pull
|
|
93
|
+
docker compose up --detach
|
|
94
|
+
docker compose logs --tail=50 codexly
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Open `http://127.0.0.1:3210` and use the random pairing code printed in the logs. The default named volume preserves Codex login data and Codexly's SQLite state. On Linux and macOS, the Compose file mounts the host root at `/workspace`, so every mounted disk is available to the project picker. Set `CODEXLY_WORKSPACE` to expose only one directory and preserve its absolute path inside the container:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
CODEXLY_WORKSPACE=/path/to/projects docker compose up --detach
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
When binding the host `CODEXLY_CODEX_HOME`, also set `CODEXLY_WORKSPACE` to a common parent of the existing projects. Their absolute paths then remain identical on the host and in the container.
|
|
104
|
+
|
|
105
|
+
The container does not automatically inherit the host Git identity. Set `CODEXLY_GIT_CONFIG` to a global Git config file visible inside the container. With an identity-mapped Linux or macOS workspace, use the absolute path to the host `~/.gitconfig` directly. For SSH remotes, set `CODEXLY_SSH_HOME` to the absolute path of the host `~/.ssh` directory.
|
|
106
|
+
|
|
107
|
+
Docker can only access host paths shared with the Docker engine. On Windows, set `CODEXLY_WORKSPACE` to a shared drive such as `C:/` and set `CODEXLY_WORKSPACE_TARGET=/workspace`. Windows and Linux container paths use different absolute path formats, so a Codex Home containing host project records cannot be reused directly. Add extra bind mounts and repeat `--workspace` in `command` when multiple drives are required.
|
|
108
|
+
|
|
109
|
+
| Variable | Purpose |
|
|
110
|
+
| -------------------------- | ---------------------------------------------------------------------- |
|
|
111
|
+
| `CODEXLY_VERSION` | Select the GHCR image tag; defaults to `latest` |
|
|
112
|
+
| `CODEXLY_PORT` | Set both the host and container port; defaults to `3210` |
|
|
113
|
+
| `CODEXLY_WORKSPACE` | Restrict the workspace and preserve its absolute path; defaults to `/` |
|
|
114
|
+
| `CODEXLY_WORKSPACE_TARGET` | Override the container path; use `/workspace` on Windows |
|
|
115
|
+
| `CODEXLY_GIT_CONFIG` | Select a container-visible global Git config file |
|
|
116
|
+
| `CODEXLY_SSH_HOME` | Mount host SSH config, keys, and `known_hosts` read-only |
|
|
117
|
+
| `CODEXLY_CODEX_HOME` | Bind a host Codex home instead of the managed `codexly-data` volume |
|
|
118
|
+
| `CODEXLY_LAN_PASSWORD` | Set a strong fixed access password instead of the logged random code |
|
|
119
|
+
| `CODEXLY_ALLOWED_HOSTS` | Allow comma-separated exact reverse proxy domains |
|
|
120
|
+
| `CODEXLY_SESSION_TTL` | Set a fixed session lifetime such as `12h` |
|
|
121
|
+
|
|
122
|
+
The image entrypoint accepts all normal CLI arguments, so orchestration platforms can replace `command` when needed. See the [complete Docker Compose deployment guide](docs/docker-deployment.md) for workspace, multiple-disk, Codex Home, update, backup, and troubleshooting instructions. Run `pnpm docker:build && pnpm docker:test` in a development checkout to build and smoke-test the local image.
|
|
123
|
+
|
|
83
124
|
## Usage
|
|
84
125
|
|
|
85
126
|
Select **New task** for work that does not need a project. For repository work, add one or more host directories as ordered project roots, 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.
|
|
@@ -101,9 +142,10 @@ The terminal prints the LAN address and a random access password. Common options
|
|
|
101
142
|
| Option | Purpose |
|
|
102
143
|
| --------------------------- | ------------------------------------------------------------------------------------------ |
|
|
103
144
|
| `--port <port>` | Choose the starting port; occupied ports are skipped automatically |
|
|
104
|
-
| `--lan-password <password>` | Set a 16-128 character password containing uppercase, lowercase,
|
|
145
|
+
| `--lan-password <password>` | Set a 16-128 character password containing uppercase, lowercase, and number |
|
|
105
146
|
| `--allowed-host <domain>` | Allow an exact reverse proxy domain; repeat the option for multiple domains |
|
|
106
147
|
| `--session-ttl <duration>` | Set a fixed LAN session lifetime such as `12h`; omitted sessions last until server restart |
|
|
148
|
+
| `--workspace <path>` | Restrict project selection to this absolute root; repeat for multiple roots |
|
|
107
149
|
|
|
108
150
|
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 the password and all sessions.
|
|
109
151
|
|
package/README.zh-CN.md
CHANGED
|
@@ -25,7 +25,7 @@ Codexly 是一个在浏览器中使用 Codex 的本地 AI 编程工作台。它
|
|
|
25
25
|
- Node.js >=22.14.0
|
|
26
26
|
- Chrome/Chromium 116+、Firefox 124+ 或 Safari 17.4+
|
|
27
27
|
|
|
28
|
-
Codexly 通过 `@openai/codex` 自带 Codex CLI `0.
|
|
28
|
+
Codexly 通过 `@openai/codex` 自带 Codex CLI `0.155.1`,无需单独安装。通过 `--codex-bin <path>` 或 `CODEXLY_CODEX_BIN` 指定的外部版本必须满足 `>=0.155.0,<0.156.0`。
|
|
29
29
|
|
|
30
30
|
## 快速开始
|
|
31
31
|
|
|
@@ -50,6 +50,47 @@ codexly
|
|
|
50
50
|
|
|
51
51
|
安装命令优先使用国内镜像,失败后回退官方源,复用 npm 缓存并重新校验过期的包元数据。`||` 适用于 Bash、Zsh、cmd 和 PowerShell 7+;Windows PowerShell 5.1 请在第一条命令失败后单独执行 `||` 右侧的命令。
|
|
52
52
|
|
|
53
|
+
## Docker 部署
|
|
54
|
+
|
|
55
|
+
下载用户版 Compose 配置并启动已发布镜像:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
mkdir codexly && cd codexly
|
|
59
|
+
curl -fsSLO https://raw.githubusercontent.com/BryanHoo/Codexly/main/compose.yaml
|
|
60
|
+
curl -fsSLo .env.example https://raw.githubusercontent.com/BryanHoo/Codexly/main/.env.example
|
|
61
|
+
cp .env.example .env
|
|
62
|
+
docker compose pull
|
|
63
|
+
docker compose up --detach
|
|
64
|
+
docker compose logs --tail=50 codexly
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
打开 `http://127.0.0.1:3210`,使用日志中的随机配对码。默认命名卷会持久化 Codex 登录数据和 Codexly SQLite 状态。在 Linux 和 macOS 上,Compose 默认把宿主根目录挂载到 `/workspace`,项目选择器可读取所有已挂载磁盘。设置 `CODEXLY_WORKSPACE` 后只暴露指定目录,并在容器中保留其绝对路径:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
CODEXLY_WORKSPACE=/path/to/projects docker compose up --detach
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
绑定宿主 `CODEXLY_CODEX_HOME` 时,应同时把 `CODEXLY_WORKSPACE` 设置为已有项目的公共父目录。Codex 保存的项目绝对路径随后可在宿主和容器中保持一致。
|
|
74
|
+
|
|
75
|
+
容器不会自动继承宿主 Git 身份。将 `CODEXLY_GIT_CONFIG` 设置为容器可见的全局 Git 配置文件;在 Linux 和 macOS 的同路径工作区中可直接填写宿主 `~/.gitconfig` 的绝对路径。使用 SSH 远程时,将 `CODEXLY_SSH_HOME` 设置为宿主 `~/.ssh` 的绝对路径。
|
|
76
|
+
|
|
77
|
+
Docker 只能访问 Docker Engine 已共享的宿主路径。Windows 需将 `CODEXLY_WORKSPACE` 设置为已共享盘符(例如 `C:/`),并设置 `CODEXLY_WORKSPACE_TARGET=/workspace`。Windows 与 Linux 容器的绝对路径格式不同,不能直接复用包含宿主项目记录的 Codex Home;需要多个盘符时,在 Compose 中增加 bind mount,并在 `command` 中重复传入 `--workspace`。
|
|
78
|
+
|
|
79
|
+
| 变量 | 用途 |
|
|
80
|
+
| -------------------------- | --------------------------------------------------- |
|
|
81
|
+
| `CODEXLY_VERSION` | 指定 GHCR 镜像标签,默认 `latest` |
|
|
82
|
+
| `CODEXLY_PORT` | 同时设置宿主与容器端口,默认 `3210` |
|
|
83
|
+
| `CODEXLY_WORKSPACE` | 限制工作区并在容器内保留相同绝对路径,默认 `/` |
|
|
84
|
+
| `CODEXLY_WORKSPACE_TARGET` | 覆盖容器工作区路径,Windows 使用 `/workspace` |
|
|
85
|
+
| `CODEXLY_GIT_CONFIG` | 指定容器可见的全局 Git 配置文件 |
|
|
86
|
+
| `CODEXLY_SSH_HOME` | 只读挂载宿主 SSH 配置、私钥和 `known_hosts` |
|
|
87
|
+
| `CODEXLY_CODEX_HOME` | 绑定宿主 Codex Home,替代默认 `codexly-data` 命名卷 |
|
|
88
|
+
| `CODEXLY_LAN_PASSWORD` | 设置固定强密码,替代日志中生成的随机配对码 |
|
|
89
|
+
| `CODEXLY_ALLOWED_HOSTS` | 设置逗号分隔的反向代理精确域名 |
|
|
90
|
+
| `CODEXLY_SESSION_TTL` | 设置固定会话期限,例如 `12h` |
|
|
91
|
+
|
|
92
|
+
镜像入口支持全部 CLI 参数,编排平台可按需覆盖 `command`。工作区、多磁盘、Codex Home、更新、备份和故障排查参见[完整 Docker Compose 部署指南](docs/docker-deployment.md)。开发仓库可运行 `pnpm docker:build && pnpm docker:test` 构建并冒烟测试本地镜像。
|
|
93
|
+
|
|
53
94
|
## 使用方式
|
|
54
95
|
|
|
55
96
|
不依赖项目时,直接选择“新建任务”。处理仓库时,先添加一个或多个运行端目录作为有序的项目根,再创建任务,并按需附加文件、图片、项目引用或 Skills 后提交需求。归档的任务可以从项目任务列表中恢复或永久删除。
|
|
@@ -68,12 +109,13 @@ codexly start --lan
|
|
|
68
109
|
|
|
69
110
|
终端会输出局域网地址和随机访问密码。常用选项如下:
|
|
70
111
|
|
|
71
|
-
| 选项 | 用途
|
|
72
|
-
| --------------------------- |
|
|
73
|
-
| `--port <port>` | 指定起始端口;端口被占用时自动尝试后续端口
|
|
74
|
-
| `--lan-password <password>` | 设置 16 至 128
|
|
75
|
-
| `--allowed-host <domain>` | 允许精确的反向代理域名;多个域名可重复传入
|
|
76
|
-
| `--session-ttl <duration>` | 设置固定会话期限,如 `12h`;省略时持续到 Server 重启
|
|
112
|
+
| 选项 | 用途 |
|
|
113
|
+
| --------------------------- | ---------------------------------------------------- |
|
|
114
|
+
| `--port <port>` | 指定起始端口;端口被占用时自动尝试后续端口 |
|
|
115
|
+
| `--lan-password <password>` | 设置 16 至 128 位密码,必须包含大小写字母和数字 |
|
|
116
|
+
| `--allowed-host <domain>` | 允许精确的反向代理域名;多个域名可重复传入 |
|
|
117
|
+
| `--session-ttl <duration>` | 设置固定会话期限,如 `12h`;省略时持续到 Server 重启 |
|
|
118
|
+
| `--workspace <path>` | 限制项目选择的绝对根目录;多个根目录可重复传入 |
|
|
77
119
|
|
|
78
120
|
密码含 Shell 特殊字符时请使用引号。局域网模式使用未加密 HTTP,只能用于可信网络,禁止直接暴露到互联网。重启 Codexly 会使密码和全部会话失效。
|
|
79
121
|
|