@bryanhu/codexly 0.6.0 → 0.8.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 (209) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/README.md +3 -3
  3. package/README.zh-CN.md +3 -3
  4. package/dist/{chunk-NUY5U24W.js → chunk-CGZ44LHJ.js} +19 -15
  5. package/dist/{chunk-C3PIS4SQ.js → chunk-NAHIDASP.js} +4 -4
  6. package/dist/cli.js +5 -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 +176 -175
  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/{button-group-b2-xCzBP.js → button-group-CYhxptHg.js} +1 -1
  13. package/dist/web/assets/button-group-CYhxptHg.js.br +0 -0
  14. package/dist/web/assets/button-group-CYhxptHg.js.gz +0 -0
  15. package/dist/web/assets/check-BOdEYGxk.js +1 -0
  16. package/dist/web/assets/check-BOdEYGxk.js.br +0 -0
  17. package/dist/web/assets/check-BOdEYGxk.js.gz +0 -0
  18. package/dist/web/assets/{checkbox-Cft8ypsb.js → checkbox-nYXSVVQi.js} +1 -1
  19. package/dist/web/assets/checkbox-nYXSVVQi.js.br +0 -0
  20. package/dist/web/assets/checkbox-nYXSVVQi.js.gz +0 -0
  21. package/dist/web/assets/{chunk-BO2N2NFS-BZtBhhTV.js → chunk-BO2N2NFS-Du4ZYlrF.js} +4 -4
  22. package/dist/web/assets/chunk-BO2N2NFS-Du4ZYlrF.js.br +0 -0
  23. package/dist/web/assets/chunk-BO2N2NFS-Du4ZYlrF.js.gz +0 -0
  24. package/dist/web/assets/{code-highlighter-BG341hSJ.js → code-highlighter-CsBwNeVP.js} +1 -1
  25. package/dist/web/assets/code-highlighter-CsBwNeVP.js.br +0 -0
  26. package/dist/web/assets/code-highlighter-CsBwNeVP.js.gz +0 -0
  27. package/dist/web/assets/{code-languages-DA_FG9-T.js → code-languages-CPYTSY-8.js} +1 -1
  28. package/dist/web/assets/code-languages-CPYTSY-8.js.br +0 -0
  29. package/dist/web/assets/code-languages-CPYTSY-8.js.gz +0 -0
  30. package/dist/web/assets/{context-menu-CZuXyHCN.js → context-menu-B-oGuenT.js} +1 -1
  31. package/dist/web/assets/context-menu-B-oGuenT.js.br +0 -0
  32. package/dist/web/assets/context-menu-B-oGuenT.js.gz +0 -0
  33. package/dist/web/assets/{dist-ByRtqJXv.js → dist-CaAkD3UC.js} +1 -1
  34. package/dist/web/assets/dist-CaAkD3UC.js.br +0 -0
  35. package/dist/web/assets/dist-CaAkD3UC.js.gz +0 -0
  36. package/dist/web/assets/dist-Cib4eRMP.js +1 -0
  37. package/dist/web/assets/dist-Cib4eRMP.js.br +0 -0
  38. package/dist/web/assets/dist-Cib4eRMP.js.gz +0 -0
  39. package/dist/web/assets/{es2015-Cd8ehGwJ.js → es2015-Ru0tXs3G.js} +1 -1
  40. package/dist/web/assets/es2015-Ru0tXs3G.js.br +0 -0
  41. package/dist/web/assets/es2015-Ru0tXs3G.js.gz +0 -0
  42. package/dist/web/assets/{file-code-corner-D1h7_C7f.js → file-code-corner-Bs_lkoMS.js} +1 -1
  43. package/dist/web/assets/file-code-corner-Bs_lkoMS.js.br +0 -0
  44. package/dist/web/assets/file-code-corner-Bs_lkoMS.js.gz +0 -0
  45. package/dist/web/assets/{file-navigation-view-preference-BikLLmlP.js → file-navigation-view-preference-CMQ7btc9.js} +1 -1
  46. package/dist/web/assets/file-navigation-view-preference-CMQ7btc9.js.br +0 -0
  47. package/dist/web/assets/file-navigation-view-preference-CMQ7btc9.js.gz +0 -0
  48. package/dist/web/assets/file-review-dialog-CotyuYId.js +2 -0
  49. package/dist/web/assets/file-review-dialog-CotyuYId.js.br +0 -0
  50. package/dist/web/assets/file-review-dialog-CotyuYId.js.gz +0 -0
  51. package/dist/web/assets/{file-tree-CbuG5nkz.js → file-tree-CqppWhX1.js} +1 -1
  52. package/dist/web/assets/file-tree-CqppWhX1.js.br +0 -0
  53. package/dist/web/assets/file-tree-CqppWhX1.js.gz +0 -0
  54. package/dist/web/assets/{git-commit-horizontal-BJGxHnV4.js → git-commit-horizontal-BezTHHvd.js} +1 -1
  55. package/dist/web/assets/git-commit-horizontal-BezTHHvd.js.br +0 -0
  56. package/dist/web/assets/git-commit-horizontal-BezTHHvd.js.gz +0 -0
  57. package/dist/web/assets/git-history-panel-CUvtjCk7.js +2 -0
  58. package/dist/web/assets/git-history-panel-CUvtjCk7.js.br +0 -0
  59. package/dist/web/assets/git-history-panel-CUvtjCk7.js.gz +0 -0
  60. package/dist/web/assets/global-settings-dialog-B8gBgus7.js +1 -0
  61. package/dist/web/assets/global-settings-dialog-B8gBgus7.js.br +0 -0
  62. package/dist/web/assets/global-settings-dialog-B8gBgus7.js.gz +0 -0
  63. package/dist/web/assets/{highlighted-body-OFNGDK62-bj8RQV-D.js → highlighted-body-OFNGDK62-BoYHrzPS.js} +1 -1
  64. package/dist/web/assets/highlighted-body-OFNGDK62-BoYHrzPS.js.br +0 -0
  65. package/dist/web/assets/highlighted-body-OFNGDK62-BoYHrzPS.js.gz +0 -0
  66. package/dist/web/assets/index-C4ygqQbj.css +2 -0
  67. package/dist/web/assets/index-C4ygqQbj.css.br +0 -0
  68. package/dist/web/assets/index-C4ygqQbj.css.gz +0 -0
  69. package/dist/web/assets/{index-DTJVeg10.js → index-zqp46jqN.js} +3 -3
  70. package/dist/web/assets/index-zqp46jqN.js.br +0 -0
  71. package/dist/web/assets/index-zqp46jqN.js.gz +0 -0
  72. package/dist/web/assets/{lazy-message-response-8zk6PTbZ.js → lazy-message-response-CG0j4yJD.js} +2 -2
  73. package/dist/web/assets/lazy-message-response-CG0j4yJD.js.br +0 -0
  74. package/dist/web/assets/lazy-message-response-CG0j4yJD.js.gz +0 -0
  75. package/dist/web/assets/loader-circle-B1P6CG7G.js +1 -0
  76. package/dist/web/assets/loader-circle-B1P6CG7G.js.br +0 -0
  77. package/dist/web/assets/loader-circle-B1P6CG7G.js.gz +0 -0
  78. package/dist/web/assets/mermaid-GHXKKRXX-BRvawXSo.js +1 -0
  79. package/dist/web/assets/mermaid-GHXKKRXX-BRvawXSo.js.br +0 -0
  80. package/dist/web/assets/mermaid-GHXKKRXX-BRvawXSo.js.gz +0 -0
  81. package/dist/web/assets/{message-response-CKPW6CRi.js → message-response-HPRWZrlE.js} +1 -1
  82. package/dist/web/assets/message-response-HPRWZrlE.js.br +0 -0
  83. package/dist/web/assets/message-response-HPRWZrlE.js.gz +0 -0
  84. package/dist/web/assets/{patch-diff-viewer-CaWTvh9_.js → patch-diff-viewer-CMgdM7ny.js} +2 -2
  85. package/dist/web/assets/patch-diff-viewer-CMgdM7ny.js.br +0 -0
  86. package/dist/web/assets/patch-diff-viewer-CMgdM7ny.js.gz +0 -0
  87. package/dist/web/assets/{project-file-popup-page-Cmjoovjs.js → project-file-popup-page-DLcWrRDd.js} +1 -1
  88. package/dist/web/assets/project-file-popup-page-DLcWrRDd.js.br +0 -0
  89. package/dist/web/assets/project-file-popup-page-DLcWrRDd.js.gz +0 -0
  90. package/dist/web/assets/{project-source-panel-0Chmfe7s.js → project-source-panel-BAOR4fTj.js} +3 -3
  91. package/dist/web/assets/project-source-panel-BAOR4fTj.js.br +0 -0
  92. package/dist/web/assets/project-source-panel-BAOR4fTj.js.gz +0 -0
  93. package/dist/web/assets/{prompt-input-controls-CT6f-1tO.js → prompt-input-controls-CJyoVdGf.js} +1 -1
  94. package/dist/web/assets/prompt-input-controls-CJyoVdGf.js.br +0 -0
  95. package/dist/web/assets/prompt-input-controls-CJyoVdGf.js.gz +0 -0
  96. package/dist/web/assets/{prompt-reference-token-CTm_xv2R.js → prompt-reference-token-DvdGBAjJ.js} +1 -1
  97. package/dist/web/assets/prompt-reference-token-DvdGBAjJ.js.br +0 -0
  98. package/dist/web/assets/prompt-reference-token-DvdGBAjJ.js.gz +0 -0
  99. package/dist/web/assets/{provider-connection-queries-CLpiOnBN.js → provider-connection-queries-CSumXgIL.js} +1 -1
  100. package/dist/web/assets/provider-connection-queries-CSumXgIL.js.br +0 -0
  101. package/dist/web/assets/provider-connection-queries-CSumXgIL.js.gz +0 -0
  102. package/dist/web/assets/{shiki-bundle-BEmB8kBs.js → shiki-bundle-BD1THhST.js} +1 -1
  103. package/dist/web/assets/shiki-bundle-BD1THhST.js.br +0 -0
  104. package/dist/web/assets/shiki-bundle-BD1THhST.js.gz +0 -0
  105. package/dist/web/assets/{tooltip-BU1Qoscx.js → tooltip-D3tWiAWP.js} +1 -1
  106. package/dist/web/assets/tooltip-D3tWiAWP.js.br +0 -0
  107. package/dist/web/assets/tooltip-D3tWiAWP.js.gz +0 -0
  108. package/dist/web/assets/{upload-BDX8w8rQ.js → upload-C2JxJnmn.js} +1 -1
  109. package/dist/web/assets/upload-C2JxJnmn.js.br +0 -0
  110. package/dist/web/assets/upload-C2JxJnmn.js.gz +0 -0
  111. package/dist/web/assets/{useInfiniteQuery-Bj31MvqL.js → useInfiniteQuery-Bu9BuQ4a.js} +1 -1
  112. package/dist/web/assets/useInfiniteQuery-Bu9BuQ4a.js.br +0 -0
  113. package/dist/web/assets/useInfiniteQuery-Bu9BuQ4a.js.gz +0 -0
  114. package/dist/web/assets/workbench-inspector-changes-NQ5C_cXN.js +2 -0
  115. package/dist/web/assets/workbench-inspector-changes-NQ5C_cXN.js.br +0 -0
  116. package/dist/web/assets/workbench-inspector-changes-NQ5C_cXN.js.gz +0 -0
  117. package/dist/web/assets/{workbench-pet-canvas-CO4nVH5z.js → workbench-pet-canvas-BLh6Qsla.js} +1 -1
  118. package/dist/web/assets/workbench-pet-canvas-BLh6Qsla.js.br +0 -0
  119. package/dist/web/assets/workbench-pet-canvas-BLh6Qsla.js.gz +0 -0
  120. package/dist/web/assets/{workbench-shell-BOnddpen.js → workbench-shell-B5fsrpDH.js} +8 -8
  121. package/dist/web/assets/workbench-shell-B5fsrpDH.js.br +0 -0
  122. package/dist/web/assets/workbench-shell-B5fsrpDH.js.gz +0 -0
  123. package/dist/web/index.html +12 -12
  124. package/dist/web/index.html.br +0 -0
  125. package/dist/web/index.html.gz +0 -0
  126. package/package.json +1 -1
  127. package/dist/web/assets/button-group-b2-xCzBP.js.br +0 -0
  128. package/dist/web/assets/button-group-b2-xCzBP.js.gz +0 -0
  129. package/dist/web/assets/check-DExH7zwT.js +0 -1
  130. package/dist/web/assets/check-DExH7zwT.js.br +0 -0
  131. package/dist/web/assets/check-DExH7zwT.js.gz +0 -0
  132. package/dist/web/assets/checkbox-Cft8ypsb.js.br +0 -0
  133. package/dist/web/assets/checkbox-Cft8ypsb.js.gz +0 -0
  134. package/dist/web/assets/chunk-BO2N2NFS-BZtBhhTV.js.br +0 -0
  135. package/dist/web/assets/chunk-BO2N2NFS-BZtBhhTV.js.gz +0 -0
  136. package/dist/web/assets/code-highlighter-BG341hSJ.js.br +0 -0
  137. package/dist/web/assets/code-highlighter-BG341hSJ.js.gz +0 -0
  138. package/dist/web/assets/code-languages-DA_FG9-T.js.br +0 -0
  139. package/dist/web/assets/code-languages-DA_FG9-T.js.gz +0 -0
  140. package/dist/web/assets/context-menu-CZuXyHCN.js.br +0 -0
  141. package/dist/web/assets/context-menu-CZuXyHCN.js.gz +0 -0
  142. package/dist/web/assets/dist-ByRtqJXv.js.br +0 -0
  143. package/dist/web/assets/dist-ByRtqJXv.js.gz +0 -0
  144. package/dist/web/assets/dist-hozmU7_C.js +0 -1
  145. package/dist/web/assets/dist-hozmU7_C.js.br +0 -0
  146. package/dist/web/assets/dist-hozmU7_C.js.gz +0 -0
  147. package/dist/web/assets/es2015-Cd8ehGwJ.js.br +0 -0
  148. package/dist/web/assets/es2015-Cd8ehGwJ.js.gz +0 -0
  149. package/dist/web/assets/file-code-corner-D1h7_C7f.js.br +0 -0
  150. package/dist/web/assets/file-code-corner-D1h7_C7f.js.gz +0 -0
  151. package/dist/web/assets/file-navigation-view-preference-BikLLmlP.js.br +0 -0
  152. package/dist/web/assets/file-navigation-view-preference-BikLLmlP.js.gz +0 -0
  153. package/dist/web/assets/file-review-dialog-dlOxwNrj.js +0 -2
  154. package/dist/web/assets/file-review-dialog-dlOxwNrj.js.br +0 -0
  155. package/dist/web/assets/file-review-dialog-dlOxwNrj.js.gz +0 -0
  156. package/dist/web/assets/file-tree-CbuG5nkz.js.br +0 -0
  157. package/dist/web/assets/file-tree-CbuG5nkz.js.gz +0 -0
  158. package/dist/web/assets/git-commit-horizontal-BJGxHnV4.js.br +0 -0
  159. package/dist/web/assets/git-commit-horizontal-BJGxHnV4.js.gz +0 -0
  160. package/dist/web/assets/git-history-panel-DqiTnaf1.js +0 -2
  161. package/dist/web/assets/git-history-panel-DqiTnaf1.js.br +0 -0
  162. package/dist/web/assets/git-history-panel-DqiTnaf1.js.gz +0 -0
  163. package/dist/web/assets/global-settings-dialog-DFjxQX_B.js +0 -1
  164. package/dist/web/assets/global-settings-dialog-DFjxQX_B.js.br +0 -0
  165. package/dist/web/assets/global-settings-dialog-DFjxQX_B.js.gz +0 -0
  166. package/dist/web/assets/highlighted-body-OFNGDK62-bj8RQV-D.js.br +0 -0
  167. package/dist/web/assets/highlighted-body-OFNGDK62-bj8RQV-D.js.gz +0 -0
  168. package/dist/web/assets/index-BZYdzDQ3.css +0 -2
  169. package/dist/web/assets/index-BZYdzDQ3.css.br +0 -0
  170. package/dist/web/assets/index-BZYdzDQ3.css.gz +0 -0
  171. package/dist/web/assets/index-DTJVeg10.js.br +0 -0
  172. package/dist/web/assets/index-DTJVeg10.js.gz +0 -0
  173. package/dist/web/assets/lazy-message-response-8zk6PTbZ.js.br +0 -0
  174. package/dist/web/assets/lazy-message-response-8zk6PTbZ.js.gz +0 -0
  175. package/dist/web/assets/loader-circle-CYc50iXi.js +0 -1
  176. package/dist/web/assets/loader-circle-CYc50iXi.js.br +0 -0
  177. package/dist/web/assets/loader-circle-CYc50iXi.js.gz +0 -0
  178. package/dist/web/assets/mermaid-GHXKKRXX-BDoa2Ho_.js +0 -1
  179. package/dist/web/assets/mermaid-GHXKKRXX-BDoa2Ho_.js.br +0 -0
  180. package/dist/web/assets/mermaid-GHXKKRXX-BDoa2Ho_.js.gz +0 -0
  181. package/dist/web/assets/message-response-CKPW6CRi.js.br +0 -0
  182. package/dist/web/assets/message-response-CKPW6CRi.js.gz +0 -0
  183. package/dist/web/assets/patch-diff-viewer-CaWTvh9_.js.br +0 -0
  184. package/dist/web/assets/patch-diff-viewer-CaWTvh9_.js.gz +0 -0
  185. package/dist/web/assets/project-file-popup-page-Cmjoovjs.js.br +0 -0
  186. package/dist/web/assets/project-file-popup-page-Cmjoovjs.js.gz +0 -0
  187. package/dist/web/assets/project-source-panel-0Chmfe7s.js.br +0 -0
  188. package/dist/web/assets/project-source-panel-0Chmfe7s.js.gz +0 -0
  189. package/dist/web/assets/prompt-input-controls-CT6f-1tO.js.br +0 -0
  190. package/dist/web/assets/prompt-input-controls-CT6f-1tO.js.gz +0 -0
  191. package/dist/web/assets/prompt-reference-token-CTm_xv2R.js.br +0 -0
  192. package/dist/web/assets/prompt-reference-token-CTm_xv2R.js.gz +0 -0
  193. package/dist/web/assets/provider-connection-queries-CLpiOnBN.js.br +0 -0
  194. package/dist/web/assets/provider-connection-queries-CLpiOnBN.js.gz +0 -0
  195. package/dist/web/assets/shiki-bundle-BEmB8kBs.js.br +0 -0
  196. package/dist/web/assets/shiki-bundle-BEmB8kBs.js.gz +0 -0
  197. package/dist/web/assets/tooltip-BU1Qoscx.js.br +0 -0
  198. package/dist/web/assets/tooltip-BU1Qoscx.js.gz +0 -0
  199. package/dist/web/assets/upload-BDX8w8rQ.js.br +0 -0
  200. package/dist/web/assets/upload-BDX8w8rQ.js.gz +0 -0
  201. package/dist/web/assets/useInfiniteQuery-Bj31MvqL.js.br +0 -0
  202. package/dist/web/assets/useInfiniteQuery-Bj31MvqL.js.gz +0 -0
  203. package/dist/web/assets/workbench-inspector-changes-CWeWA-hv.js +0 -2
  204. package/dist/web/assets/workbench-inspector-changes-CWeWA-hv.js.br +0 -0
  205. package/dist/web/assets/workbench-inspector-changes-CWeWA-hv.js.gz +0 -0
  206. package/dist/web/assets/workbench-pet-canvas-CO4nVH5z.js.br +0 -0
  207. package/dist/web/assets/workbench-pet-canvas-CO4nVH5z.js.gz +0 -0
  208. package/dist/web/assets/workbench-shell-BOnddpen.js.br +0 -0
  209. package/dist/web/assets/workbench-shell-BOnddpen.js.gz +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,29 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.8.0] - 2026-08-27
8
+
9
+ ### 新增
10
+
11
+ - 添加自定义工作台背景图片集合,支持批量添加、缩略图选择和单独删除,并将背景配置移至独立设置分类。
12
+
13
+ ### 修复
14
+
15
+ - 修复已水合任务在后台 Snapshot 重验证期间错误显示挂起状态的问题,使现有内容保持可用。
16
+
17
+ ## [0.7.0] - 2026-08-27
18
+
19
+ ### 新增
20
+
21
+ - 添加临时任务归档入口,支持查看、恢复和永久删除已归档的 standalone Task。
22
+ - 为临时任务添加独立宠物活动气泡,使其与项目任务状态分别展示。
23
+ - 根据壁纸亮度自动切换完整前景色方案,保持文字与控件清晰可读。
24
+
25
+ ### 修复
26
+
27
+ - 修复 standalone Task 错误继承合成工作区上下文的问题,改用 Codex 原生运行时上下文。
28
+ - 固定 Inspector 标签栏,并让文件预览填充剩余高度,避免长内容挤压标签。
29
+
7
30
  ## [0.6.0] - 2026-08-27
8
31
 
9
32
  ### 新增
@@ -124,7 +147,9 @@
124
147
  - 拆分全栈测试套件并限制 Vitest 并发,提升跨平台门禁稳定性;GitHub Release 改为严格提取对应版本的完整更新日志。
125
148
  - 将最低 Node.js 版本调整为 `22.14.0`,同步 CLI、CI、发布环境和使用文档。
126
149
 
127
- [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.6.0...HEAD
150
+ [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.8.0...HEAD
151
+ [0.8.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.8.0
152
+ [0.7.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.7.0
128
153
  [0.6.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.6.0
129
154
  [0.5.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.5.0
130
155
  [0.4.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.4.0
package/README.md CHANGED
@@ -40,11 +40,11 @@
40
40
  - Keep follow-up work in a persistent task queue, and edit queued messages and attachments before they run
41
41
  - Attach files and images, reference project files with `@`, and answer input requests from configured MCP servers
42
42
  - Choose the model, reasoning effort, Fast mode, approval behavior, and file access level for each task
43
- - Organize ordered multi-root projects, archive completed tasks, and permanently delete tasks when needed
43
+ - Organize ordered multi-root projects, archive project or temporary tasks, and permanently delete tasks when needed
44
44
  - Inspect, preview, rename, and delete project files; review diffs; manage branches and worktrees; and commit or push changes
45
45
  - Fork a task from an AI response and continue it in a new Git worktree
46
- - Add animated workspace pets that reflect active and completed task activity
47
- - Customize the workspace with image or Bing daily backgrounds, overlay opacity, and background blur
46
+ - Add animated workspace pets with separate activity bubbles for project and temporary tasks
47
+ - Manage a collection of custom workspace backgrounds, or use Bing daily images, with automatic foreground colors, overlay opacity, and blur
48
48
  - Access the workspace from another device on a trusted local network
49
49
 
50
50
  ## Requirements
package/README.zh-CN.md CHANGED
@@ -10,11 +10,11 @@ Codexly 是一个在浏览器中使用 Codex 的本地 AI 编程工作台。它
10
10
  - 使用持久化任务队列安排后续工作,并在执行前编辑排队消息和附件
11
11
  - 添加文件与图片、使用 `@` 引用项目文件,并回答已配置 MCP 服务的补充输入请求
12
12
  - 为每个任务选择模型、思考量、快速模式、审批方式和文件访问范围
13
- - 组织有序的多根项目、归档已完成任务,并按需永久删除任务
13
+ - 组织有序的多根项目、归档项目或临时任务,并按需永久删除任务
14
14
  - 查看、预览、重命名和删除项目文件,审查差异,管理分支与 worktree,并提交或推送变更
15
15
  - 从 AI 回复处分叉任务,在新的 Git worktree 中继续工作
16
- - 添加可反映任务执行与完成状态的工作台宠物动画
17
- - 使用图片或 Bing 每日壁纸自定义工作台,并调节浮层遮罩与背景模糊
16
+ - 添加工作台宠物动画,并用独立气泡区分项目与临时任务的活动状态
17
+ - 管理自定义工作台背景图片集合,或使用 Bing 每日壁纸,并自动适配前景色、浮层遮罩与背景模糊
18
18
  - 从可信局域网中的其他设备访问工作台
19
19
 
20
20
  ## 环境要求
@@ -9032,7 +9032,7 @@ async function isSameCanonicalPath(left, right) {
9032
9032
  ]);
9033
9033
  return leftIdentity === rightIdentity;
9034
9034
  }
9035
- async function isProjectThread(thread, project) {
9035
+ function isProjectThread(thread, project) {
9036
9036
  const nativeProjectId = thread["projectId"];
9037
9037
  if (nativeProjectId !== null && typeof nativeProjectId !== "string") {
9038
9038
  throw new CodexProtocolMappingError("Codex thread projectId must be a string or null");
@@ -9043,13 +9043,15 @@ async function isProjectThread(thread, project) {
9043
9043
  if (nativeProjectId !== null) {
9044
9044
  return false;
9045
9045
  }
9046
- const cwd = expectString(thread["cwd"], "Codex thread cwd");
9047
- return isSameCanonicalPath(cwd, project.rootPath);
9046
+ return true;
9048
9047
  }
9049
- async function assertProjectThread(thread, project) {
9050
- if (!await isProjectThread(thread, project)) {
9051
- throw new CodexProtocolMappingError("Codex thread does not belong to the active project");
9048
+ function assertProjectThread(thread, project) {
9049
+ if (!isProjectThread(thread, project)) {
9050
+ return Promise.reject(
9051
+ new CodexProtocolMappingError("Codex thread does not belong to the active project")
9052
+ );
9052
9053
  }
9054
+ return Promise.resolve();
9053
9055
  }
9054
9056
  function isThreadNotLoadedError(error) {
9055
9057
  return error instanceof RpcResponseError && error.code === -32600 && error.message.startsWith("thread not loaded:");
@@ -9214,7 +9216,7 @@ var CodexAgentProviderBase = class {
9214
9216
  await this.client.request("thread/fork", {
9215
9217
  ...lastTurnId === void 0 ? {} : { lastTurnId },
9216
9218
  // Fork 必须使用当前 Project 的完整运行时根,不能继承旧 Thread 的单根配置。
9217
- runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots],
9219
+ ...this.project.kind === "project" ? { runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots] } : {},
9218
9220
  threadId: taskId
9219
9221
  }),
9220
9222
  "thread/fork response"
@@ -9577,11 +9579,13 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
9577
9579
  async startTask(options = {}) {
9578
9580
  const response = expectRecord(
9579
9581
  await this.client.request("thread/start", {
9580
- cwd: this.project.rootPath,
9581
9582
  historyMode: "paginated",
9582
- ...this.project.kind === "temporary" ? {} : { projectId: this.project.id },
9583
- // Project 身份与运行时文件系统授权彼此独立,必须显式传递完整根列表。
9584
- runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots],
9583
+ ...this.project.kind === "temporary" ? {} : {
9584
+ cwd: this.project.rootPath,
9585
+ projectId: this.project.id,
9586
+ // Project 身份与运行时文件系统授权彼此独立,必须显式传递完整根列表。
9587
+ runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots]
9588
+ },
9585
9589
  ...options.ephemeral === true ? { ephemeral: true } : {}
9586
9590
  }),
9587
9591
  "thread/start response"
@@ -9838,7 +9842,7 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
9838
9842
  await this.client.request("thread/list", {
9839
9843
  ...input.archived === true ? { archived: true } : {},
9840
9844
  ...input.cursor === void 0 ? {} : { cursor: input.cursor },
9841
- ...this.project.kind === "temporary" ? { cwd: this.project.rootPath, projectId: null } : { projectId: this.project.id },
9845
+ ...this.project.kind === "temporary" ? { projectId: null } : { projectId: this.project.id },
9842
9846
  ...input.limit === void 0 ? {} : { limit: input.limit },
9843
9847
  // 锁定版本用稳定 Pinned Section 过滤,保证固定任务先过滤再分页。
9844
9848
  ...input.pinnedOnly === true ? { sectionId: CODEX_PINNED_THREAD_SECTION_ID } : {},
@@ -10058,7 +10062,7 @@ var CodexAgentProviderTasks = class extends CodexAgentProviderTurns {
10058
10062
  }
10059
10063
  const response = expectRecord(nativeResponse, "thread/read response");
10060
10064
  const thread = expectRecord(response["thread"], "thread/read thread");
10061
- if (!await isProjectThread(thread, this.project)) {
10065
+ if (!isProjectThread(thread, this.project)) {
10062
10066
  const unmaterializedTask = this.runtime.unmaterializedTasks.get(taskId);
10063
10067
  if (unmaterializedTask !== void 0 && thread["id"] === unmaterializedTask.id && thread["projectId"] === null) {
10064
10068
  projectOwnershipVerified = true;
@@ -10596,8 +10600,8 @@ var CodexAgentProviderEvents = class extends CodexAgentProviderTasks {
10596
10600
  const resumePromise = (async () => {
10597
10601
  const response = expectRecord(
10598
10602
  await this.client.request("thread/resume", {
10599
- // 恢复持久 Task 时覆盖旧运行时配置,使 Project 的全部根立即生效。
10600
- runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots],
10603
+ // 恢复 Project Task 时覆盖旧运行时配置,使全部根立即生效。
10604
+ ...this.project.kind === "project" ? { runtimeWorkspaceRoots: [...this.project.runtimeWorkspaceRoots] } : {},
10601
10605
  threadId: taskId
10602
10606
  }),
10603
10607
  "thread/resume response"
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { value_exports } from './chunk-DEKHLAWT.js';
3
- import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-NUY5U24W.js';
3
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-CGZ44LHJ.js';
4
4
  import { WorkbenchPetProviderError, PendingRequestResolutionError } from './chunk-RNTA4MFS.js';
5
5
  import { AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, HealthResponseSchema, AppInfoResponseSchema, AgentMutationErrorSchema, InstallAppUpdateResponseSchema, InstallAppUpdateRequestSchema, EventStreamMetricsResponseSchema, AgentCapabilitiesSchema, AgentModelPageSchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_TEXT_BYTES, AgentProviderConnectionStatusSchema, StartOfficialProviderLoginResponseSchema, StartOfficialProviderLoginRequestSchema, AgentProviderConnectionMutationResponseSchema, CancelProviderLoginRequestSchema, ConfigureCustomProviderResponseSchema, ConfigureCustomProviderRequestSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetDownloadRequestSchema, ProjectPageSchema, HostFileListingSchema, HostFileQuerySchema, ProjectDirectoryListingSchema, ProjectDirectoryQuerySchema, ProjectOpenCapabilitiesResponseSchema, OpenProjectResponseSchema, ProjectRootQuerySchema, OpenProjectRequestSchema, ReorderProjectsResponseSchema, ReorderProjectsRequestSchema, AgentSkillPageSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AddProjectResponseSchema, AddProjectRequestSchema, RenameProjectResponseSchema, RenameProjectRequestSchema, RemoveProjectResponseSchema, RemoveProjectRequestSchema, AgentTaskPageSchema, UnsubscribeAgentTaskResponseSchema, AgentTaskSnapshotResponseSchema, AgentMcpServerPageSchema, AgentBackgroundTerminalPageSchema, TerminateAgentBackgroundTerminalResponseSchema, PinAgentTaskResponseSchema, PinAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, ArchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, UnarchiveAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTaskRequestSchema, StartAgentTurnResponseSchema, StartAgentTurnRequestSchema, SteerAgentTurnResponseSchema, SteerAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, InterruptAgentTurnRequestSchema, ResolvePendingRequestResponseSchema, ResolvePendingRequestRequestSchema, AgentQueuedSubmissionPageSchema, AddAgentQueuedSubmissionResponseSchema, AddAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, DeleteAgentQueuedSubmissionResponseSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentQueuedSubmissionRequestSchema, AgentPromptInputSchema, AgentProviderConnectionRecordSchema, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, ProjectGitStatusSchema, ProjectGitStatusQuerySchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileDiffQuerySchema, SwitchProjectBranchRequestSchema, CreateProjectBranchRequestSchema, GenerateCommitMessageResponseSchema, GenerateCommitMessageRequestSchema, CommitProjectChangesResponseSchema, CommitProjectChangesRequestSchema, ProjectFileTreeSchema, ProjectFileTreeQuerySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, StopProjectFileSearchResponseSchema, StopProjectFileSearchRequestSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, AgentAttachmentUploadResponseSchema, HostFileKindSchema, ImportHostAttachmentRequestSchema, AgentAttachmentKindSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, ReloadAgentMcpServersResponseSchema, ReloadAgentMcpServersRequestSchema, ReviewAgentTaskResponseSchema, ReviewAgentTaskRequestSchema, CompactAgentTaskResponseSchema, CompactAgentTaskRequestSchema, ForkAgentTaskResponseSchema, ForkAgentTaskRequestSchema, UploadAgentFeedbackResponseSchema, UploadAgentFeedbackRequestSchema, OpenAgentTaskAttachmentResponseSchema, OpenAgentTaskAttachmentRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentGoalRequestSchema, ClearAgentGoalResponseSchema, ProjectGitWorktreePageSchema, ProjectWorktreeMutationResponseSchema, CreateProjectWorktreeRequestSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE } from './chunk-TEWPWZPG.js';
6
6
  import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
@@ -60917,12 +60917,12 @@ async function runSingleFlight(inFlight, key, operation) {
60917
60917
  async function resolveTaskScope(projectId, options) {
60918
60918
  if (projectId === TEMPORARY_TASK_SCOPE_ID) {
60919
60919
  return {
60920
- provider: options.provider.forTemporary(options.temporaryWorkspace),
60920
+ provider: options.provider.forTemporary(options.standaloneCwd),
60921
60921
  scope: {
60922
60922
  id: TEMPORARY_TASK_SCOPE_ID,
60923
60923
  kind: "temporary",
60924
- rootPath: options.temporaryWorkspace,
60925
- runtimeWorkspaceRoots: [options.temporaryWorkspace]
60924
+ rootPath: options.standaloneCwd,
60925
+ runtimeWorkspaceRoots: [options.standaloneCwd]
60926
60926
  }
60927
60927
  };
60928
60928
  }
package/dist/cli.js CHANGED
@@ -1,12 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-C3PIS4SQ.js';
3
+ import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-NAHIDASP.js';
4
4
  import './chunk-DEKHLAWT.js';
5
- import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-NUY5U24W.js';
5
+ import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-CGZ44LHJ.js';
6
6
  import './chunk-RNTA4MFS.js';
7
7
  import './chunk-TEWPWZPG.js';
8
8
  import './chunk-K6J42667.js';
9
- import { mkdir, lstat, chmod, realpath } from 'fs/promises';
10
9
  import { networkInterfaces, homedir } from 'os';
11
10
  import { join, win32 } from 'path';
12
11
  import { fileURLToPath } from 'url';
@@ -19,7 +18,7 @@ createRequire(import.meta.url);
19
18
 
20
19
  // package.json
21
20
  var package_default = {
22
- version: "0.6.0"};
21
+ version: "0.8.0"};
23
22
  var PACKAGE_NAME = "@bryanhu/codexly";
24
23
  var INITIAL_APP_VERSION = "0.1.0";
25
24
  var CHANGELOG_URL_PREFIX = "https://raw.githubusercontent.com/BryanHoo/Codexly/v";
@@ -579,7 +578,6 @@ var defaultDependencies = {
579
578
  listen: (options) => server.listen(options)
580
579
  };
581
580
  },
582
- ensureTemporaryWorkspace,
583
581
  generateLanPairingCode,
584
582
  listLanAccessUrls,
585
583
  locateCodexBinary,
@@ -590,18 +588,6 @@ var defaultDependencies = {
590
588
  startCodexAppServer,
591
589
  webRoot: fileURLToPath(new URL("../dist/web", import.meta.url))
592
590
  };
593
- async function ensureTemporaryWorkspace(path) {
594
- await mkdir(path, { mode: 448, recursive: true });
595
- const metadata = await lstat(path);
596
- if (metadata.isSymbolicLink()) {
597
- throw new Error("Temporary workspace must not be a symbolic link");
598
- }
599
- if (!metadata.isDirectory()) {
600
- throw new Error("Temporary workspace path must be a directory");
601
- }
602
- await chmod(path, 448);
603
- return realpath(path);
604
- }
605
591
  function assertSupportedNodeVersion(version) {
606
592
  const [major = Number.NaN, minor = Number.NaN] = version.split(".").map(Number);
607
593
  if (!(major > 22 || major === 22 && minor >= 14)) {
@@ -749,9 +735,6 @@ async function runStart(args, dependencies, signal, output) {
749
735
  stateRepository = await dependencies.createStateRepository(
750
736
  join(codexHome, "codexly", "state.sqlite3")
751
737
  );
752
- const temporaryWorkspace = await dependencies.ensureTemporaryWorkspace(
753
- join(codexHome, "codexly", "temporary-workspace")
754
- );
755
738
  runtime = await dependencies.startCodexAppServer({
756
739
  appVersion: dependencies.appVersion,
757
740
  env,
@@ -791,7 +774,8 @@ async function runStart(args, dependencies, signal, output) {
791
774
  queueRepository: stateRepository,
792
775
  settingsRepository: stateRepository,
793
776
  staticRoot: dependencies.webRoot,
794
- temporaryWorkspace
777
+ // Standalone Thread 继承 app-server 的 cwd,不再创建伪项目目录。
778
+ standaloneCwd: process.cwd()
795
779
  });
796
780
  const host = options.lan === true ? "0.0.0.0" : "127.0.0.1";
797
781
  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, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-NUY5U24W.js';
2
+ export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, startCodexAppServer } from '../../chunk-CGZ44LHJ.js';
3
3
  import '../../chunk-RNTA4MFS.js';
4
4
  import '../../chunk-TEWPWZPG.js';
5
5
  import '../../chunk-K6J42667.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-C3PIS4SQ.js';
2
+ export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-NAHIDASP.js';
3
3
  import '../chunk-DEKHLAWT.js';
4
- import '../chunk-NUY5U24W.js';
4
+ import '../chunk-CGZ44LHJ.js';
5
5
  import '../chunk-RNTA4MFS.js';
6
6
  import '../chunk-TEWPWZPG.js';
7
7
  import '../chunk-K6J42667.js';