@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.
Files changed (222) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +45 -3
  3. package/README.zh-CN.md +49 -7
  4. package/dist/{chunk-4VM2ZUPT.js → chunk-MDJUQPOL.js} +179 -125
  5. package/dist/{chunk-NUJPWN62.js → chunk-YG3QMLCD.js} +433 -43
  6. package/dist/cli.js +49 -21
  7. package/dist/providers/codex/index.js +1 -1
  8. package/dist/server/index.js +2 -2
  9. package/dist/web/.vite/manifest.json +111 -111
  10. package/dist/web/.vite/manifest.json.br +0 -0
  11. package/dist/web/.vite/manifest.json.gz +0 -0
  12. package/dist/web/assets/{agent-settings-panel-Ci9mJOS-.js → agent-settings-panel-STxloEc6.js} +1 -1
  13. package/dist/web/assets/agent-settings-panel-STxloEc6.js.br +0 -0
  14. package/dist/web/assets/agent-settings-panel-STxloEc6.js.gz +0 -0
  15. package/dist/web/assets/{attachments-uWbRsPJj.js → attachments-CSV8KBYa.js} +1 -1
  16. package/dist/web/assets/attachments-CSV8KBYa.js.br +0 -0
  17. package/dist/web/assets/attachments-CSV8KBYa.js.gz +0 -0
  18. package/dist/web/assets/{background-image-picker-qGpdQPQi.js → background-image-picker-JDrclQ6O.js} +1 -1
  19. package/dist/web/assets/background-image-picker-JDrclQ6O.js.br +0 -0
  20. package/dist/web/assets/background-image-picker-JDrclQ6O.js.gz +0 -0
  21. package/dist/web/assets/{bing-wallpaper-queries-uesKD16x.js → bing-wallpaper-queries-BqjgHv5k.js} +1 -1
  22. package/dist/web/assets/bing-wallpaper-queries-BqjgHv5k.js.br +0 -0
  23. package/dist/web/assets/bing-wallpaper-queries-BqjgHv5k.js.gz +0 -0
  24. package/dist/web/assets/{button-group-075rCj_f.js → button-group-mjeW2BTr.js} +1 -1
  25. package/dist/web/assets/button-group-mjeW2BTr.js.br +0 -0
  26. package/dist/web/assets/button-group-mjeW2BTr.js.gz +0 -0
  27. package/dist/web/assets/{code-block-C9eTeWWd.js → code-block-CmzWecTa.js} +1 -1
  28. package/dist/web/assets/code-block-CmzWecTa.js.br +0 -0
  29. package/dist/web/assets/code-block-CmzWecTa.js.gz +0 -0
  30. package/dist/web/assets/{commit-settings-panel-CaMMU0oA.js → commit-settings-panel-BQRIgAaq.js} +1 -1
  31. package/dist/web/assets/commit-settings-panel-BQRIgAaq.js.br +0 -0
  32. package/dist/web/assets/commit-settings-panel-BQRIgAaq.js.gz +0 -0
  33. package/dist/web/assets/{context-menu-Dj3lnor1.js → context-menu-Dfbnk16V.js} +1 -1
  34. package/dist/web/assets/context-menu-Dfbnk16V.js.br +0 -0
  35. package/dist/web/assets/context-menu-Dfbnk16V.js.gz +0 -0
  36. package/dist/web/assets/{file-review-dialog-D8XVZ21M.js → file-review-dialog-Bv3Hor8O.js} +1 -1
  37. package/dist/web/assets/file-review-dialog-Bv3Hor8O.js.br +0 -0
  38. package/dist/web/assets/file-review-dialog-Bv3Hor8O.js.gz +0 -0
  39. package/dist/web/assets/{git-history-panel-D2fKSR66.js → git-history-panel-CofR8yva.js} +1 -1
  40. package/dist/web/assets/git-history-panel-CofR8yva.js.br +0 -0
  41. package/dist/web/assets/git-history-panel-CofR8yva.js.gz +0 -0
  42. package/dist/web/assets/{global-search-dialog-BxT-UjpZ.js → global-search-dialog-m_blFw9z.js} +2 -2
  43. package/dist/web/assets/global-search-dialog-m_blFw9z.js.br +0 -0
  44. package/dist/web/assets/global-search-dialog-m_blFw9z.js.gz +0 -0
  45. package/dist/web/assets/{global-settings-about-DiblprcD.js → global-settings-about-CJkWRRdz.js} +1 -1
  46. package/dist/web/assets/global-settings-about-CJkWRRdz.js.br +0 -0
  47. package/dist/web/assets/global-settings-about-CJkWRRdz.js.gz +0 -0
  48. package/dist/web/assets/{global-settings-fields-D5T5SPXY.js → global-settings-fields-DqWp3WpN.js} +1 -1
  49. package/dist/web/assets/global-settings-fields-DqWp3WpN.js.br +0 -0
  50. package/dist/web/assets/global-settings-fields-DqWp3WpN.js.gz +0 -0
  51. package/dist/web/assets/{global-settings-model-COz331Sr.js → global-settings-model-CqgHQlxF.js} +1 -1
  52. package/dist/web/assets/global-settings-model-CqgHQlxF.js.br +0 -0
  53. package/dist/web/assets/global-settings-model-CqgHQlxF.js.gz +0 -0
  54. package/dist/web/assets/{global-settings-page-DEBGBxSg.js → global-settings-page-BiVZofyf.js} +2 -2
  55. package/dist/web/assets/global-settings-page-BiVZofyf.js.br +0 -0
  56. package/dist/web/assets/global-settings-page-BiVZofyf.js.gz +0 -0
  57. package/dist/web/assets/{global-settings-pets-DwJnj_6N.js → global-settings-pets-DkdiEzFY.js} +1 -1
  58. package/dist/web/assets/global-settings-pets-DkdiEzFY.js.br +0 -0
  59. package/dist/web/assets/global-settings-pets-DkdiEzFY.js.gz +0 -0
  60. package/dist/web/assets/{history-task-timeline-oQRRdMbY.js → history-task-timeline-BrLtwo5_.js} +1 -1
  61. package/dist/web/assets/history-task-timeline-BrLtwo5_.js.br +0 -0
  62. package/dist/web/assets/history-task-timeline-BrLtwo5_.js.gz +0 -0
  63. package/dist/web/assets/{index-DRfXjZ2a.js → index-D9lOU2_n.js} +3 -3
  64. package/dist/web/assets/index-D9lOU2_n.js.br +0 -0
  65. package/dist/web/assets/index-D9lOU2_n.js.gz +0 -0
  66. package/dist/web/assets/{installed-skills-pane-v1IcvRKL.js → installed-skills-pane-BRcMSvrv.js} +1 -1
  67. package/dist/web/assets/installed-skills-pane-BRcMSvrv.js.br +0 -0
  68. package/dist/web/assets/installed-skills-pane-BRcMSvrv.js.gz +0 -0
  69. package/dist/web/assets/{lazy-message-response-B6dT9kbf.js → lazy-message-response-C3PwDwxE.js} +2 -2
  70. package/dist/web/assets/lazy-message-response-C3PwDwxE.js.br +0 -0
  71. package/dist/web/assets/lazy-message-response-C3PwDwxE.js.gz +0 -0
  72. package/dist/web/assets/{mcp-management-pane-DiPUaZAO.js → mcp-management-pane-CIXkOpXu.js} +1 -1
  73. package/dist/web/assets/mcp-management-pane-CIXkOpXu.js.br +0 -0
  74. package/dist/web/assets/mcp-management-pane-CIXkOpXu.js.gz +0 -0
  75. package/dist/web/assets/message-response-AwJefMK2.js +7 -0
  76. package/dist/web/assets/message-response-AwJefMK2.js.br +0 -0
  77. package/dist/web/assets/message-response-AwJefMK2.js.gz +0 -0
  78. package/dist/web/assets/{official-plugins-pane-Cis1hRgm.js → official-plugins-pane-C4i4LhS5.js} +1 -1
  79. package/dist/web/assets/official-plugins-pane-C4i4LhS5.js.br +0 -0
  80. package/dist/web/assets/official-plugins-pane-C4i4LhS5.js.gz +0 -0
  81. package/dist/web/assets/{personalization-settings-panel-BB5nguhA.js → personalization-settings-panel-BVty2pDz.js} +1 -1
  82. package/dist/web/assets/personalization-settings-panel-BVty2pDz.js.br +0 -0
  83. package/dist/web/assets/personalization-settings-panel-BVty2pDz.js.gz +0 -0
  84. package/dist/web/assets/{project-file-popup-page-CAcF7DIa.js → project-file-popup-page-hTRv5v3H.js} +1 -1
  85. package/dist/web/assets/project-file-popup-page-hTRv5v3H.js.br +0 -0
  86. package/dist/web/assets/project-file-popup-page-hTRv5v3H.js.gz +0 -0
  87. package/dist/web/assets/{project-source-dialog-DbOmvJBS.js → project-source-dialog-wuXJolJb.js} +1 -1
  88. package/dist/web/assets/project-source-dialog-wuXJolJb.js.br +0 -0
  89. package/dist/web/assets/project-source-dialog-wuXJolJb.js.gz +0 -0
  90. package/dist/web/assets/{project-source-panel-DGafRUDi.js → project-source-panel-PKAa_dbo.js} +1 -1
  91. package/dist/web/assets/project-source-panel-PKAa_dbo.js.br +0 -0
  92. package/dist/web/assets/project-source-panel-PKAa_dbo.js.gz +0 -0
  93. package/dist/web/assets/{prompt-input-DwT-XwSc.js → prompt-input-BHn4OExn.js} +1 -1
  94. package/dist/web/assets/prompt-input-BHn4OExn.js.br +0 -0
  95. package/dist/web/assets/prompt-input-BHn4OExn.js.gz +0 -0
  96. package/dist/web/assets/{prompt-input-controls-CLasQrSj.js → prompt-input-controls-D4wqb_zQ.js} +1 -1
  97. package/dist/web/assets/prompt-input-controls-D4wqb_zQ.js.br +0 -0
  98. package/dist/web/assets/prompt-input-controls-D4wqb_zQ.js.gz +0 -0
  99. package/dist/web/assets/{scheduled-task-date-time-picker-CnSPVHna.js → scheduled-task-date-time-picker-jo6dkC-Z.js} +1 -1
  100. package/dist/web/assets/scheduled-task-date-time-picker-jo6dkC-Z.js.br +0 -0
  101. package/dist/web/assets/scheduled-task-date-time-picker-jo6dkC-Z.js.gz +0 -0
  102. package/dist/web/assets/{scheduled-task-schedule-BnMdRADi.js → scheduled-task-schedule-DD3Zt60h.js} +1 -1
  103. package/dist/web/assets/scheduled-task-schedule-DD3Zt60h.js.br +0 -0
  104. package/dist/web/assets/{scheduled-task-schedule-BnMdRADi.js.gz → scheduled-task-schedule-DD3Zt60h.js.gz} +0 -0
  105. package/dist/web/assets/{scheduled-tasks-container-CNCzsjiP.js → scheduled-tasks-container-CDsipwUR.js} +2 -2
  106. package/dist/web/assets/scheduled-tasks-container-CDsipwUR.js.br +0 -0
  107. package/dist/web/assets/scheduled-tasks-container-CDsipwUR.js.gz +0 -0
  108. package/dist/web/assets/{settings-personalization-CB_nnUys.js → settings-personalization-BbAIVND-.js} +1 -1
  109. package/dist/web/assets/settings-personalization-BbAIVND-.js.br +0 -0
  110. package/dist/web/assets/settings-personalization-BbAIVND-.js.gz +0 -0
  111. package/dist/web/assets/{sheet-JpH2S7eZ.js → sheet-C6eLtEHx.js} +1 -1
  112. package/dist/web/assets/sheet-C6eLtEHx.js.br +0 -0
  113. package/dist/web/assets/sheet-C6eLtEHx.js.gz +0 -0
  114. package/dist/web/assets/{skills-market-container-BgtnwdI7.js → skills-market-container-DFzLg008.js} +2 -2
  115. package/dist/web/assets/skills-market-container-DFzLg008.js.br +0 -0
  116. package/dist/web/assets/skills-market-container-DFzLg008.js.gz +0 -0
  117. package/dist/web/assets/{task-timeline-store-BN41mX3t.js → task-timeline-store-Cj_Bcaqi.js} +1 -1
  118. package/dist/web/assets/task-timeline-store-Cj_Bcaqi.js.br +0 -0
  119. package/dist/web/assets/task-timeline-store-Cj_Bcaqi.js.gz +0 -0
  120. package/dist/web/assets/{third-party-marketplace-pane-CAI6XIWR.js → third-party-marketplace-pane-CoP9DTWX.js} +1 -1
  121. package/dist/web/assets/third-party-marketplace-pane-CoP9DTWX.js.br +0 -0
  122. package/dist/web/assets/third-party-marketplace-pane-CoP9DTWX.js.gz +0 -0
  123. package/dist/web/assets/workbench-composer-C6Sv8xDL.js +8 -0
  124. package/dist/web/assets/workbench-composer-C6Sv8xDL.js.br +0 -0
  125. package/dist/web/assets/workbench-composer-C6Sv8xDL.js.gz +0 -0
  126. package/dist/web/assets/{workbench-inspector-changes-Bl5nS-_2.js → workbench-inspector-changes-7z5diDTC.js} +1 -1
  127. package/dist/web/assets/workbench-inspector-changes-7z5diDTC.js.br +0 -0
  128. package/dist/web/assets/workbench-inspector-changes-7z5diDTC.js.gz +0 -0
  129. package/dist/web/assets/{workbench-pet-canvas-CnwZR5HG.js → workbench-pet-canvas-dWliFlKE.js} +1 -1
  130. package/dist/web/assets/workbench-pet-canvas-dWliFlKE.js.br +0 -0
  131. package/dist/web/assets/workbench-pet-canvas-dWliFlKE.js.gz +0 -0
  132. package/dist/web/assets/workbench-shell-fA7tfnac.js +3 -0
  133. package/dist/web/assets/workbench-shell-fA7tfnac.js.br +0 -0
  134. package/dist/web/assets/workbench-shell-fA7tfnac.js.gz +0 -0
  135. package/dist/web/index.html +1 -1
  136. package/dist/web/index.html.br +0 -0
  137. package/dist/web/index.html.gz +0 -0
  138. package/package.json +4 -2
  139. package/dist/web/assets/agent-settings-panel-Ci9mJOS-.js.br +0 -0
  140. package/dist/web/assets/agent-settings-panel-Ci9mJOS-.js.gz +0 -0
  141. package/dist/web/assets/attachments-uWbRsPJj.js.br +0 -0
  142. package/dist/web/assets/attachments-uWbRsPJj.js.gz +0 -0
  143. package/dist/web/assets/background-image-picker-qGpdQPQi.js.br +0 -0
  144. package/dist/web/assets/background-image-picker-qGpdQPQi.js.gz +0 -0
  145. package/dist/web/assets/bing-wallpaper-queries-uesKD16x.js.br +0 -0
  146. package/dist/web/assets/bing-wallpaper-queries-uesKD16x.js.gz +0 -0
  147. package/dist/web/assets/button-group-075rCj_f.js.br +0 -0
  148. package/dist/web/assets/button-group-075rCj_f.js.gz +0 -0
  149. package/dist/web/assets/code-block-C9eTeWWd.js.br +0 -0
  150. package/dist/web/assets/code-block-C9eTeWWd.js.gz +0 -0
  151. package/dist/web/assets/commit-settings-panel-CaMMU0oA.js.br +0 -0
  152. package/dist/web/assets/commit-settings-panel-CaMMU0oA.js.gz +0 -0
  153. package/dist/web/assets/context-menu-Dj3lnor1.js.br +0 -0
  154. package/dist/web/assets/context-menu-Dj3lnor1.js.gz +0 -0
  155. package/dist/web/assets/file-review-dialog-D8XVZ21M.js.br +0 -0
  156. package/dist/web/assets/file-review-dialog-D8XVZ21M.js.gz +0 -0
  157. package/dist/web/assets/git-history-panel-D2fKSR66.js.br +0 -0
  158. package/dist/web/assets/git-history-panel-D2fKSR66.js.gz +0 -0
  159. package/dist/web/assets/global-search-dialog-BxT-UjpZ.js.br +0 -0
  160. package/dist/web/assets/global-search-dialog-BxT-UjpZ.js.gz +0 -0
  161. package/dist/web/assets/global-settings-about-DiblprcD.js.br +0 -0
  162. package/dist/web/assets/global-settings-about-DiblprcD.js.gz +0 -0
  163. package/dist/web/assets/global-settings-fields-D5T5SPXY.js.br +0 -0
  164. package/dist/web/assets/global-settings-fields-D5T5SPXY.js.gz +0 -0
  165. package/dist/web/assets/global-settings-model-COz331Sr.js.br +0 -0
  166. package/dist/web/assets/global-settings-model-COz331Sr.js.gz +0 -0
  167. package/dist/web/assets/global-settings-page-DEBGBxSg.js.br +0 -0
  168. package/dist/web/assets/global-settings-page-DEBGBxSg.js.gz +0 -0
  169. package/dist/web/assets/global-settings-pets-DwJnj_6N.js.br +0 -0
  170. package/dist/web/assets/global-settings-pets-DwJnj_6N.js.gz +0 -0
  171. package/dist/web/assets/history-task-timeline-oQRRdMbY.js.br +0 -0
  172. package/dist/web/assets/history-task-timeline-oQRRdMbY.js.gz +0 -0
  173. package/dist/web/assets/index-DRfXjZ2a.js.br +0 -0
  174. package/dist/web/assets/index-DRfXjZ2a.js.gz +0 -0
  175. package/dist/web/assets/installed-skills-pane-v1IcvRKL.js.br +0 -0
  176. package/dist/web/assets/installed-skills-pane-v1IcvRKL.js.gz +0 -0
  177. package/dist/web/assets/lazy-message-response-B6dT9kbf.js.br +0 -0
  178. package/dist/web/assets/lazy-message-response-B6dT9kbf.js.gz +0 -0
  179. package/dist/web/assets/mcp-management-pane-DiPUaZAO.js.br +0 -0
  180. package/dist/web/assets/mcp-management-pane-DiPUaZAO.js.gz +0 -0
  181. package/dist/web/assets/message-response-BZZGbaVm.js +0 -7
  182. package/dist/web/assets/message-response-BZZGbaVm.js.br +0 -0
  183. package/dist/web/assets/message-response-BZZGbaVm.js.gz +0 -0
  184. package/dist/web/assets/official-plugins-pane-Cis1hRgm.js.br +0 -0
  185. package/dist/web/assets/official-plugins-pane-Cis1hRgm.js.gz +0 -0
  186. package/dist/web/assets/personalization-settings-panel-BB5nguhA.js.br +0 -0
  187. package/dist/web/assets/personalization-settings-panel-BB5nguhA.js.gz +0 -0
  188. package/dist/web/assets/project-file-popup-page-CAcF7DIa.js.br +0 -0
  189. package/dist/web/assets/project-file-popup-page-CAcF7DIa.js.gz +0 -0
  190. package/dist/web/assets/project-source-dialog-DbOmvJBS.js.br +0 -0
  191. package/dist/web/assets/project-source-dialog-DbOmvJBS.js.gz +0 -0
  192. package/dist/web/assets/project-source-panel-DGafRUDi.js.br +0 -0
  193. package/dist/web/assets/project-source-panel-DGafRUDi.js.gz +0 -0
  194. package/dist/web/assets/prompt-input-DwT-XwSc.js.br +0 -0
  195. package/dist/web/assets/prompt-input-DwT-XwSc.js.gz +0 -0
  196. package/dist/web/assets/prompt-input-controls-CLasQrSj.js.br +0 -0
  197. package/dist/web/assets/prompt-input-controls-CLasQrSj.js.gz +0 -0
  198. package/dist/web/assets/scheduled-task-date-time-picker-CnSPVHna.js.br +0 -0
  199. package/dist/web/assets/scheduled-task-date-time-picker-CnSPVHna.js.gz +0 -0
  200. package/dist/web/assets/scheduled-task-schedule-BnMdRADi.js.br +0 -0
  201. package/dist/web/assets/scheduled-tasks-container-CNCzsjiP.js.br +0 -0
  202. package/dist/web/assets/scheduled-tasks-container-CNCzsjiP.js.gz +0 -0
  203. package/dist/web/assets/settings-personalization-CB_nnUys.js.br +0 -0
  204. package/dist/web/assets/settings-personalization-CB_nnUys.js.gz +0 -0
  205. package/dist/web/assets/sheet-JpH2S7eZ.js.br +0 -0
  206. package/dist/web/assets/sheet-JpH2S7eZ.js.gz +0 -0
  207. package/dist/web/assets/skills-market-container-BgtnwdI7.js.br +0 -0
  208. package/dist/web/assets/skills-market-container-BgtnwdI7.js.gz +0 -0
  209. package/dist/web/assets/task-timeline-store-BN41mX3t.js.br +0 -0
  210. package/dist/web/assets/task-timeline-store-BN41mX3t.js.gz +0 -0
  211. package/dist/web/assets/third-party-marketplace-pane-CAI6XIWR.js.br +0 -0
  212. package/dist/web/assets/third-party-marketplace-pane-CAI6XIWR.js.gz +0 -0
  213. package/dist/web/assets/workbench-composer-dKix0zGK.js +0 -8
  214. package/dist/web/assets/workbench-composer-dKix0zGK.js.br +0 -0
  215. package/dist/web/assets/workbench-composer-dKix0zGK.js.gz +0 -0
  216. package/dist/web/assets/workbench-inspector-changes-Bl5nS-_2.js.br +0 -0
  217. package/dist/web/assets/workbench-inspector-changes-Bl5nS-_2.js.gz +0 -0
  218. package/dist/web/assets/workbench-pet-canvas-CnwZR5HG.js.br +0 -0
  219. package/dist/web/assets/workbench-pet-canvas-CnwZR5HG.js.gz +0 -0
  220. package/dist/web/assets/workbench-shell-B8lBrj2O.js +0 -3
  221. package/dist/web/assets/workbench-shell-B8lBrj2O.js.br +0 -0
  222. package/dist/web/assets/workbench-shell-B8lBrj2O.js.gz +0 -0
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-4VM2ZUPT.js';
3
+ import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-MDJUQPOL.js';
4
4
  import './chunk-6JWQNFM2.js';
5
- import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-NUJPWN62.js';
5
+ import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-YG3QMLCD.js';
6
6
  import './chunk-B2673ODM.js';
7
7
  import { DEFAULT_COMMIT_MESSAGE_MODEL } from './chunk-ZXTTTT25.js';
8
8
  import './chunk-GT7XTSEG.js';
@@ -22,7 +22,7 @@ createRequire(import.meta.url);
22
22
 
23
23
  // package.json
24
24
  var package_default = {
25
- version: "0.22.1"};
25
+ version: "0.24.0"};
26
26
  var INSTALL_TIMEOUT_MS = 2 * 6e4;
27
27
  function resolveNpmCommandInvocation(args, platform = process.platform, execPath = process.execPath, elevated = false) {
28
28
  const invocation = platform === "win32" ? {
@@ -428,14 +428,16 @@ Start options:
428
428
  Automatically increases the port when it is occupied.
429
429
  --lan Listen on all network interfaces for trusted LAN access.
430
430
  This disables automatic browser opening.
431
- --lan-password <password> Use a custom strong LAN access password instead of a random one.
432
- Requires 16-128 characters and all character types. Requires --lan.
431
+ --lan-password <password> Use a custom LAN access password instead of a random one.
432
+ Requires 16-128 characters with uppercase, lowercase, and number. Requires --lan.
433
433
  --allowed-host <domain> Allow an exact reverse proxy domain. May be repeated.
434
434
  --session-ttl <duration> Set the fixed LAN session lifetime using ms, s, m, h, or d.
435
435
  Sessions do not expire when omitted. Requires --lan.
436
436
  --codex-bin <path> Use the Codex executable at the specified path.
437
437
  --codex-home <path> Use a custom Codex home directory instead of CODEX_HOME
438
438
  or the default ~/.codex directory.
439
+ --workspace <path> Restrict project selection to an absolute workspace root.
440
+ May be repeated for multiple roots.
439
441
 
440
442
  Doctor options:
441
443
  --codex-bin <path> Check the Codex executable at the specified path.
@@ -450,6 +452,7 @@ Examples:
450
452
  codexly start --lan --lan-password 'Strong-Lan_Pass9!'
451
453
  codexly start --allowed-host code.example.com
452
454
  codexly start --lan --session-ttl 12h
455
+ codexly start --workspace /workspace
453
456
  codexly doctor --codex-bin /path/to/codex
454
457
  codexly version
455
458
 
@@ -463,7 +466,7 @@ function parseCommandOptions(args, valueOptions, flagOptions = /* @__PURE__ */ n
463
466
  if (!option || !valueOptions.has(option) && !flagOptions.has(option)) {
464
467
  throw new Error(`\u672A\u77E5\u9009\u9879: ${option ?? "<empty>"}`);
465
468
  }
466
- const repeatable = option === "--allowed-host";
469
+ const repeatable = option === "--allowed-host" || option === "--workspace";
467
470
  if (seen.has(option) && !repeatable) {
468
471
  throw new Error(`\u9009\u9879\u91CD\u590D: ${option}`);
469
472
  }
@@ -486,6 +489,8 @@ function parseCommandOptions(args, valueOptions, flagOptions = /* @__PURE__ */ n
486
489
  parsed.lanPassword = value;
487
490
  } else if (option === "--allowed-host") {
488
491
  parsed.allowedHosts = [...parsed.allowedHosts ?? [], value];
492
+ } else if (option === "--workspace") {
493
+ parsed.workspaceRoots = [...parsed.workspaceRoots ?? [], value];
489
494
  } else if (option === "--port") {
490
495
  if (!/^\d+$/u.test(value)) {
491
496
  throw new Error("--port \u5FC5\u987B\u662F 1 \u5230 65535 \u4E4B\u95F4\u7684\u6574\u6570");
@@ -502,6 +507,24 @@ function parseCommandOptions(args, valueOptions, flagOptions = /* @__PURE__ */ n
502
507
  }
503
508
  return parsed;
504
509
  }
510
+ function applyStartEnvironmentDefaults(options, environment) {
511
+ const environmentArgs = [];
512
+ const append = (option, value) => {
513
+ if (value !== void 0 && value.trim() !== "") environmentArgs.push(option, value.trim());
514
+ };
515
+ append("--lan-password", environment["CODEXLY_LAN_PASSWORD"]);
516
+ append("--port", environment["CODEXLY_PORT"]);
517
+ append("--session-ttl", environment["CODEXLY_SESSION_TTL"]);
518
+ append("--workspace", environment["CODEXLY_WORKSPACE"]);
519
+ for (const host of environment["CODEXLY_ALLOWED_HOSTS"]?.split(",") ?? []) {
520
+ append("--allowed-host", host);
521
+ }
522
+ const defaults = parseCommandOptions(
523
+ environmentArgs,
524
+ /* @__PURE__ */ new Set(["--allowed-host", "--lan-password", "--port", "--session-ttl", "--workspace"])
525
+ );
526
+ return { ...defaults, ...options };
527
+ }
505
528
 
506
529
  // src/cli-shutdown.ts
507
530
  function createProcessShutdownSignal() {
@@ -809,10 +832,10 @@ function parseSessionTtl(value) {
809
832
  return Number(milliseconds);
810
833
  }
811
834
  function validateLanPassword(value) {
812
- const hasRequiredStrength = value.length >= MIN_LAN_PASSWORD_LENGTH && value.length <= MAX_LAN_PASSWORD_LENGTH && /[A-Z]/u.test(value) && /[a-z]/u.test(value) && /[0-9]/u.test(value) && /[^A-Za-z0-9]/u.test(value);
835
+ const hasRequiredStrength = value.length >= MIN_LAN_PASSWORD_LENGTH && value.length <= MAX_LAN_PASSWORD_LENGTH && /[A-Z]/u.test(value) && /[a-z]/u.test(value) && /[0-9]/u.test(value);
813
836
  if (!hasRequiredStrength) {
814
837
  throw new Error(
815
- "Invalid LAN password; expected 16 to 128 characters with uppercase, lowercase, number, and symbol"
838
+ "Invalid LAN password; expected 16 to 128 characters with uppercase, lowercase, and number"
816
839
  );
817
840
  }
818
841
  }
@@ -920,17 +943,21 @@ async function runDoctor(args, dependencies, output) {
920
943
  return 0;
921
944
  }
922
945
  async function runStart(args, dependencies, signal, output) {
923
- const options = parseCommandOptions(
924
- args,
925
- /* @__PURE__ */ new Set([
926
- "--allowed-host",
927
- "--codex-bin",
928
- "--codex-home",
929
- "--lan-password",
930
- "--port",
931
- "--session-ttl"
932
- ]),
933
- /* @__PURE__ */ new Set(["--lan"])
946
+ const options = applyStartEnvironmentDefaults(
947
+ parseCommandOptions(
948
+ args,
949
+ /* @__PURE__ */ new Set([
950
+ "--allowed-host",
951
+ "--codex-bin",
952
+ "--codex-home",
953
+ "--lan-password",
954
+ "--port",
955
+ "--session-ttl",
956
+ "--workspace"
957
+ ]),
958
+ /* @__PURE__ */ new Set(["--lan"])
959
+ ),
960
+ process.env
934
961
  );
935
962
  if (options.sessionTtl !== void 0 && options.lan !== true) {
936
963
  throw new Error("--session-ttl \u53EA\u80FD\u4E0E --lan \u4E00\u8D77\u4F7F\u7528");
@@ -1036,8 +1063,9 @@ async function runStart(args, dependencies, signal, output) {
1036
1063
  projectTodoRepository: stateRepository,
1037
1064
  settingsRepository: stateRepository,
1038
1065
  staticRoot: dependencies.webRoot,
1039
- // Standalone Thread 继承 app-server 的 cwd,不再创建伪项目目录。
1040
- standaloneCwd: process.cwd()
1066
+ // 受限部署让临时任务继承首个工作区,避免绕过项目目录边界。
1067
+ standaloneCwd: options.workspaceRoots?.[0] ?? process.cwd(),
1068
+ ...options.workspaceRoots === void 0 ? {} : { workspaceRoots: options.workspaceRoots }
1041
1069
  });
1042
1070
  const host = options.lan === true ? "0.0.0.0" : "127.0.0.1";
1043
1071
  const activePort = await listenOnAvailablePort(server, host, port);
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'node:module';
2
- export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, SUPPORTED_CODEX_VERSION_RANGE, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-NUJPWN62.js';
2
+ export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, SUPPORTED_CODEX_VERSION_RANGE, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-YG3QMLCD.js';
3
3
  import '../../chunk-B2673ODM.js';
4
4
  import '../../chunk-ZXTTTT25.js';
5
5
  import '../../chunk-GT7XTSEG.js';
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';
2
- export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-4VM2ZUPT.js';
2
+ export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-MDJUQPOL.js';
3
3
  import '../chunk-6JWQNFM2.js';
4
- import '../chunk-NUJPWN62.js';
4
+ import '../chunk-YG3QMLCD.js';
5
5
  import '../chunk-B2673ODM.js';
6
6
  import '../chunk-ZXTTTT25.js';
7
7
  import '../chunk-GT7XTSEG.js';