@bryanhu/codexly 0.7.0 → 0.9.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 +24 -1
  2. package/README.md +2 -2
  3. package/README.zh-CN.md +2 -2
  4. package/dist/{chunk-NAHIDASP.js → chunk-7XFCPPAG.js} +37 -2
  5. package/dist/{chunk-CGZ44LHJ.js → chunk-HEWCIXCQ.js} +45 -12
  6. package/dist/cli.js +5 -4
  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-bEY6272A.js → chunk-BO2N2NFS-C9-C2tVf.js} +4 -4
  22. package/dist/web/assets/chunk-BO2N2NFS-C9-C2tVf.js.br +0 -0
  23. package/dist/web/assets/chunk-BO2N2NFS-C9-C2tVf.js.gz +0 -0
  24. package/dist/web/assets/{code-highlighter-Cm84nMIT.js → code-highlighter-Bc0RuXH6.js} +1 -1
  25. package/dist/web/assets/code-highlighter-Bc0RuXH6.js.br +0 -0
  26. package/dist/web/assets/code-highlighter-Bc0RuXH6.js.gz +0 -0
  27. package/dist/web/assets/{code-languages-D5Nrl7sO.js → code-languages-Dyc6uij-.js} +1 -1
  28. package/dist/web/assets/code-languages-Dyc6uij-.js.br +0 -0
  29. package/dist/web/assets/code-languages-Dyc6uij-.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-DO97in5h.js +2 -0
  49. package/dist/web/assets/file-review-dialog-DO97in5h.js.br +0 -0
  50. package/dist/web/assets/file-review-dialog-DO97in5h.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-CqKWTKwH.js +2 -0
  58. package/dist/web/assets/git-history-panel-CqKWTKwH.js.br +0 -0
  59. package/dist/web/assets/git-history-panel-CqKWTKwH.js.gz +0 -0
  60. package/dist/web/assets/global-settings-dialog-CcncTTuP.js +1 -0
  61. package/dist/web/assets/global-settings-dialog-CcncTTuP.js.br +0 -0
  62. package/dist/web/assets/global-settings-dialog-CcncTTuP.js.gz +0 -0
  63. package/dist/web/assets/{highlighted-body-OFNGDK62-oKnqW5V8.js → highlighted-body-OFNGDK62-D6sPM03A.js} +1 -1
  64. package/dist/web/assets/highlighted-body-OFNGDK62-D6sPM03A.js.br +0 -0
  65. package/dist/web/assets/highlighted-body-OFNGDK62-D6sPM03A.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-C1A_OTjT.js → index-D07js1WI.js} +3 -3
  70. package/dist/web/assets/index-D07js1WI.js.br +0 -0
  71. package/dist/web/assets/index-D07js1WI.js.gz +0 -0
  72. package/dist/web/assets/{lazy-message-response-DNUwJy0d.js → lazy-message-response-BCtctszr.js} +2 -2
  73. package/dist/web/assets/lazy-message-response-BCtctszr.js.br +0 -0
  74. package/dist/web/assets/lazy-message-response-BCtctszr.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-DPTLsg8Y.js +1 -0
  79. package/dist/web/assets/mermaid-GHXKKRXX-DPTLsg8Y.js.br +1 -0
  80. package/dist/web/assets/mermaid-GHXKKRXX-DPTLsg8Y.js.gz +0 -0
  81. package/dist/web/assets/{message-response-DVL8_J3z.js → message-response-Bx5gf4FU.js} +1 -1
  82. package/dist/web/assets/message-response-Bx5gf4FU.js.br +0 -0
  83. package/dist/web/assets/message-response-Bx5gf4FU.js.gz +0 -0
  84. package/dist/web/assets/{patch-diff-viewer-BgNx-ffs.js → patch-diff-viewer-DGu83IBP.js} +2 -2
  85. package/dist/web/assets/patch-diff-viewer-DGu83IBP.js.br +0 -0
  86. package/dist/web/assets/patch-diff-viewer-DGu83IBP.js.gz +0 -0
  87. package/dist/web/assets/{project-file-popup-page-BwPTSc8o.js → project-file-popup-page-CVtCt_XU.js} +1 -1
  88. package/dist/web/assets/project-file-popup-page-CVtCt_XU.js.br +0 -0
  89. package/dist/web/assets/project-file-popup-page-CVtCt_XU.js.gz +0 -0
  90. package/dist/web/assets/{project-source-panel-DWDcX3T9.js → project-source-panel-BEBbL2Id.js} +3 -3
  91. package/dist/web/assets/project-source-panel-BEBbL2Id.js.br +0 -0
  92. package/dist/web/assets/project-source-panel-BEBbL2Id.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-Dhkx9AYM.js → shiki-bundle-4bLwaf7_.js} +1 -1
  103. package/dist/web/assets/shiki-bundle-4bLwaf7_.js.br +0 -0
  104. package/dist/web/assets/shiki-bundle-4bLwaf7_.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-BLY-8Tfn.js +2 -0
  115. package/dist/web/assets/workbench-inspector-changes-BLY-8Tfn.js.br +0 -0
  116. package/dist/web/assets/workbench-inspector-changes-BLY-8Tfn.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-DVC3DE5a.js → workbench-shell-DSfvZh4Q.js} +8 -8
  121. package/dist/web/assets/workbench-shell-DSfvZh4Q.js.br +0 -0
  122. package/dist/web/assets/workbench-shell-DSfvZh4Q.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-bEY6272A.js.br +0 -0
  135. package/dist/web/assets/chunk-BO2N2NFS-bEY6272A.js.gz +0 -0
  136. package/dist/web/assets/code-highlighter-Cm84nMIT.js.br +0 -0
  137. package/dist/web/assets/code-highlighter-Cm84nMIT.js.gz +0 -0
  138. package/dist/web/assets/code-languages-D5Nrl7sO.js.br +0 -0
  139. package/dist/web/assets/code-languages-D5Nrl7sO.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-DVVtiNEL.js +0 -2
  154. package/dist/web/assets/file-review-dialog-DVVtiNEL.js.br +0 -0
  155. package/dist/web/assets/file-review-dialog-DVVtiNEL.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-4j8odsDb.js +0 -2
  161. package/dist/web/assets/git-history-panel-4j8odsDb.js.br +0 -0
  162. package/dist/web/assets/git-history-panel-4j8odsDb.js.gz +0 -0
  163. package/dist/web/assets/global-settings-dialog-Dhqfe3qK.js +0 -1
  164. package/dist/web/assets/global-settings-dialog-Dhqfe3qK.js.br +0 -0
  165. package/dist/web/assets/global-settings-dialog-Dhqfe3qK.js.gz +0 -0
  166. package/dist/web/assets/highlighted-body-OFNGDK62-oKnqW5V8.js.br +0 -0
  167. package/dist/web/assets/highlighted-body-OFNGDK62-oKnqW5V8.js.gz +0 -0
  168. package/dist/web/assets/index-C1A_OTjT.js.br +0 -0
  169. package/dist/web/assets/index-C1A_OTjT.js.gz +0 -0
  170. package/dist/web/assets/index-lKikkWES.css +0 -2
  171. package/dist/web/assets/index-lKikkWES.css.br +0 -0
  172. package/dist/web/assets/index-lKikkWES.css.gz +0 -0
  173. package/dist/web/assets/lazy-message-response-DNUwJy0d.js.br +0 -0
  174. package/dist/web/assets/lazy-message-response-DNUwJy0d.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-8A2qFznr.js +0 -1
  179. package/dist/web/assets/mermaid-GHXKKRXX-8A2qFznr.js.br +0 -0
  180. package/dist/web/assets/mermaid-GHXKKRXX-8A2qFznr.js.gz +0 -0
  181. package/dist/web/assets/message-response-DVL8_J3z.js.br +0 -0
  182. package/dist/web/assets/message-response-DVL8_J3z.js.gz +0 -0
  183. package/dist/web/assets/patch-diff-viewer-BgNx-ffs.js.br +0 -0
  184. package/dist/web/assets/patch-diff-viewer-BgNx-ffs.js.gz +0 -0
  185. package/dist/web/assets/project-file-popup-page-BwPTSc8o.js.br +0 -0
  186. package/dist/web/assets/project-file-popup-page-BwPTSc8o.js.gz +0 -0
  187. package/dist/web/assets/project-source-panel-DWDcX3T9.js.br +0 -0
  188. package/dist/web/assets/project-source-panel-DWDcX3T9.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-Dhkx9AYM.js.br +0 -0
  196. package/dist/web/assets/shiki-bundle-Dhkx9AYM.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-CWIx9Os6.js +0 -2
  204. package/dist/web/assets/workbench-inspector-changes-CWIx9Os6.js.br +0 -0
  205. package/dist/web/assets/workbench-inspector-changes-CWIx9Os6.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-DVC3DE5a.js.br +0 -0
  209. package/dist/web/assets/workbench-shell-DVC3DE5a.js.gz +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.0] - 2026-08-28
8
+
9
+ ### 新增
10
+
11
+ - 支持使用 PNG 或 WebP 自定义宠物精灵图,并兼容 `spriteVersionNumber: 2` 的 8×11 帧网格清单。
12
+
13
+ ### 修复
14
+
15
+ - 修复 SQLite Worker 操作超时后 Repository 永久关闭的问题,终止状态未知的 Worker 并为后续请求自动重建连接。
16
+ - 修复检查更新后 registry 版本继续推进时旧页面无法安装更新的问题,重新校验并安装当前最新版本。
17
+
18
+ ## [0.8.0] - 2026-08-27
19
+
20
+ ### 新增
21
+
22
+ - 添加自定义工作台背景图片集合,支持批量添加、缩略图选择和单独删除,并将背景配置移至独立设置分类。
23
+
24
+ ### 修复
25
+
26
+ - 修复已水合任务在后台 Snapshot 重验证期间错误显示挂起状态的问题,使现有内容保持可用。
27
+
7
28
  ## [0.7.0] - 2026-08-27
8
29
 
9
30
  ### 新增
@@ -137,7 +158,9 @@
137
158
  - 拆分全栈测试套件并限制 Vitest 并发,提升跨平台门禁稳定性;GitHub Release 改为严格提取对应版本的完整更新日志。
138
159
  - 将最低 Node.js 版本调整为 `22.14.0`,同步 CLI、CI、发布环境和使用文档。
139
160
 
140
- [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.7.0...HEAD
161
+ [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.9.0...HEAD
162
+ [0.9.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.9.0
163
+ [0.8.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.8.0
141
164
  [0.7.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.7.0
142
165
  [0.6.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.6.0
143
166
  [0.5.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.5.0
package/README.md CHANGED
@@ -43,8 +43,8 @@
43
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 with separate activity bubbles for project and temporary tasks
47
- - Customize the workspace with image or Bing daily backgrounds, automatic foreground colors, overlay opacity, and background blur
46
+ - Add animated workspace pets with separate task activity bubbles and custom PNG or WebP sprite manifests
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
@@ -13,8 +13,8 @@ Codexly 是一个在浏览器中使用 Codex 的本地 AI 编程工作台。它
13
13
  - 组织有序的多根项目、归档项目或临时任务,并按需永久删除任务
14
14
  - 查看、预览、重命名和删除项目文件,审查差异,管理分支与 worktree,并提交或推送变更
15
15
  - 从 AI 回复处分叉任务,在新的 Git worktree 中继续工作
16
- - 添加工作台宠物动画,并用独立气泡区分项目与临时任务的活动状态
17
- - 使用图片或 Bing 每日壁纸自定义工作台,自动适配前景色并调节浮层遮罩与背景模糊
16
+ - 添加工作台宠物动画,用独立气泡区分任务活动,并支持自定义 PNG 或 WebP 精灵图清单
17
+ - 管理自定义工作台背景图片集合,或使用 Bing 每日壁纸,并自动适配前景色、浮层遮罩与背景模糊
18
18
  - 从可信局域网中的其他设备访问工作台
19
19
 
20
20
  ## 环境要求
@@ -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-CGZ44LHJ.js';
3
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-HEWCIXCQ.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';
@@ -61764,19 +61764,25 @@ function parseQueueWorkerRecord(record) {
61764
61764
  }
61765
61765
  var DEFAULT_SQLITE_REQUEST_TIMEOUT_MS = 1e4;
61766
61766
  var SqliteStateRepository = class _SqliteStateRepository {
61767
+ #databasePath;
61767
61768
  #now;
61769
+ #options;
61768
61770
  #pending = /* @__PURE__ */ new Map();
61769
61771
  #ready;
61770
61772
  #requestTimeoutMs;
61771
61773
  #worker;
61772
61774
  #workerExit;
61773
61775
  #closed = false;
61776
+ #closing = false;
61774
61777
  #nextRequestId = 1;
61778
+ #replacement;
61775
61779
  #workerExited = false;
61776
61780
  constructor(databasePath, options) {
61777
61781
  if (!isAbsolute(databasePath)) {
61778
61782
  throw new Error("SQLite database path must be absolute");
61779
61783
  }
61784
+ this.#databasePath = databasePath;
61785
+ this.#options = options;
61780
61786
  this.#requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_SQLITE_REQUEST_TIMEOUT_MS;
61781
61787
  if (!Number.isFinite(this.#requestTimeoutMs) || this.#requestTimeoutMs <= 0) {
61782
61788
  throw new RangeError("SQLite request timeout must be a positive number");
@@ -61873,6 +61879,15 @@ var SqliteStateRepository = class _SqliteStateRepository {
61873
61879
  }
61874
61880
  }
61875
61881
  async close() {
61882
+ if (this.#closing) {
61883
+ return;
61884
+ }
61885
+ this.#closing = true;
61886
+ if (this.#replacement !== void 0) {
61887
+ const replacement = await this.#replacement;
61888
+ await replacement.close();
61889
+ return;
61890
+ }
61876
61891
  if (this.#closed) {
61877
61892
  return;
61878
61893
  }
@@ -61996,6 +62011,13 @@ var SqliteStateRepository = class _SqliteStateRepository {
61996
62011
  });
61997
62012
  }
61998
62013
  async #call(operation, payload, allowClosed = false) {
62014
+ if (this.#closing && !allowClosed) {
62015
+ throw new Error("SQLite repository is closed");
62016
+ }
62017
+ if (this.#replacement !== void 0) {
62018
+ const replacement = await this.#replacement;
62019
+ return replacement.#call(operation, payload, allowClosed);
62020
+ }
61999
62021
  await this.#ready;
62000
62022
  if (this.#closed && !allowClosed) {
62001
62023
  throw new Error("SQLite repository is closed");
@@ -62010,8 +62032,15 @@ var SqliteStateRepository = class _SqliteStateRepository {
62010
62032
  `SQLite worker operation ${operation} timed out after ${String(this.#requestTimeoutMs)}ms`
62011
62033
  );
62012
62034
  this.#closed = true;
62035
+ if (!this.#closing) {
62036
+ const replacement = this.#replaceWorker();
62037
+ this.#replacement = replacement;
62038
+ void replacement.catch(() => void 0);
62039
+ }
62013
62040
  this.#rejectPending(error);
62014
- void this.#worker.terminate();
62041
+ if (this.#replacement === void 0) {
62042
+ void this.#worker.terminate();
62043
+ }
62015
62044
  }, this.#requestTimeoutMs);
62016
62045
  this.#pending.set(id, {
62017
62046
  reject: rejectRequest,
@@ -62036,6 +62065,12 @@ var SqliteStateRepository = class _SqliteStateRepository {
62036
62065
  }
62037
62066
  this.#pending.clear();
62038
62067
  }
62068
+ async #replaceWorker() {
62069
+ if (!this.#workerExited) {
62070
+ await this.#worker.terminate();
62071
+ }
62072
+ return _SqliteStateRepository.open(this.#databasePath, this.#options);
62073
+ }
62039
62074
  async #waitForWorkerExit() {
62040
62075
  let timeout;
62041
62076
  try {
@@ -13153,12 +13153,26 @@ function imageDimensionsFromData(bytes) {
13153
13153
  }
13154
13154
 
13155
13155
  // packages/provider-codex/src/workbench-pet-image.ts
13156
- function readWebpDimensions(data) {
13156
+ function readPetImageMetadata(data) {
13157
13157
  const dimensions = imageDimensionsFromData(data);
13158
- if (dimensions?.type !== "webp") {
13158
+ if (dimensions?.type !== "png" && dimensions?.type !== "webp") {
13159
+ throw new Error("Pet spritesheet must be a valid PNG or WebP image");
13160
+ }
13161
+ return {
13162
+ contentType: dimensions.type === "png" ? "image/png" : "image/webp",
13163
+ height: dimensions.height,
13164
+ width: dimensions.width
13165
+ };
13166
+ }
13167
+ async function readPetImageMetadataFromFile(path) {
13168
+ return readPetImageMetadata(await readFile(path));
13169
+ }
13170
+ function readWebpDimensions(data) {
13171
+ const metadata = readPetImageMetadata(data);
13172
+ if (metadata.contentType !== "image/webp") {
13159
13173
  throw new Error("Pet spritesheet must be a valid WebP image");
13160
13174
  }
13161
- return dimensions;
13175
+ return metadata;
13162
13176
  }
13163
13177
  async function readWebpDimensionsFromFile(path) {
13164
13178
  return readWebpDimensions(await readFile(path));
@@ -13167,6 +13181,7 @@ var MAX_MANIFEST_BYTES = 64 * 1024;
13167
13181
  var MAX_CUSTOM_ASSET_BYTES = 16 * 1024 * 1024;
13168
13182
  var MAX_FRAMES = 256;
13169
13183
  var MAX_FPS = 60;
13184
+ var PET_V2_ROWS = 11;
13170
13185
  async function loadCustomPet(input) {
13171
13186
  const baseDirectory = await realpath(input.directory);
13172
13187
  const manifestPath = resolve(baseDirectory, input.manifestName);
@@ -13186,14 +13201,16 @@ async function loadCustomPet(input) {
13186
13201
  if (!assetStats.isFile() || assetStats.size > MAX_CUSTOM_ASSET_BYTES) {
13187
13202
  throw new Error("Pet spritesheet is missing or too large");
13188
13203
  }
13189
- const dimensions = await readWebpDimensionsFromFile(path);
13190
- const frame = parseFrame(manifest["frame"]);
13191
- const frameCount = validateFrame(frame, dimensions.width, dimensions.height);
13204
+ const image = await readPetImageMetadataFromFile(path);
13205
+ const spriteVersion = parseSpriteVersion(manifest["spriteVersionNumber"]);
13206
+ const frame = parseFrame(manifest["frame"], spriteVersion);
13207
+ const frameCount = validateFrame(frame, image.width, image.height);
13192
13208
  const animations = parseAnimations(manifest["animations"], frameCount);
13193
13209
  const manifestId = readOptionalString(manifest, "id");
13194
13210
  return {
13195
13211
  assetId: input.assetId,
13196
13212
  baseDirectory,
13213
+ contentType: image.contentType,
13197
13214
  descriptor: {
13198
13215
  animations,
13199
13216
  assetId: input.assetId,
@@ -13217,12 +13234,17 @@ async function validatePetAsset(record) {
13217
13234
  if (!assetStats.isFile() || assetStats.size > MAX_CUSTOM_ASSET_BYTES) {
13218
13235
  throw new Error("Pet spritesheet is unavailable");
13219
13236
  }
13220
- const dimensions = await readWebpDimensionsFromFile(resolved);
13221
- validateFrame(record.descriptor.frame, dimensions.width, dimensions.height);
13237
+ const image = await readPetImageMetadataFromFile(resolved);
13238
+ if (image.contentType !== record.contentType) {
13239
+ throw new Error("Pet spritesheet format changed after discovery");
13240
+ }
13241
+ validateFrame(record.descriptor.frame, image.width, image.height);
13222
13242
  return { mtimeMs: assetStats.mtimeMs, size: assetStats.size };
13223
13243
  }
13224
- function parseFrame(value) {
13225
- if (value === void 0 || value === null) return PET_FRAME;
13244
+ function parseFrame(value, spriteVersion) {
13245
+ if (value === void 0 || value === null) {
13246
+ return spriteVersion === 2 ? { ...PET_FRAME, rows: PET_V2_ROWS } : PET_FRAME;
13247
+ }
13226
13248
  const frame = parseRecord(value, "Pet frame");
13227
13249
  return {
13228
13250
  columns: readPositiveInteger(frame, "columns"),
@@ -13231,6 +13253,11 @@ function parseFrame(value) {
13231
13253
  width: readPositiveInteger(frame, "width")
13232
13254
  };
13233
13255
  }
13256
+ function parseSpriteVersion(value) {
13257
+ if (value === void 0 || value === null || value === 1) return 1;
13258
+ if (value === 2) return 2;
13259
+ throw new Error("Pet spriteVersionNumber must be 1 or 2");
13260
+ }
13234
13261
  function validateFrame(frame, width, height) {
13235
13262
  if (width === void 0 || height === void 0 || frame.width * frame.columns !== width || frame.height * frame.rows !== height) {
13236
13263
  throw new Error("Pet frame grid must cover the spritesheet exactly");
@@ -13365,7 +13392,7 @@ var CodexWorkbenchPetProvider = class {
13365
13392
  const content = await readFile(record.path);
13366
13393
  return {
13367
13394
  content,
13368
- contentType: "image/webp",
13395
+ contentType: record.contentType,
13369
13396
  etag: `W/"${String(metadata.size)}-${String(Math.trunc(metadata.mtimeMs))}"`,
13370
13397
  size: metadata.size
13371
13398
  };
@@ -13384,7 +13411,13 @@ var CodexWorkbenchPetProvider = class {
13384
13411
  } catch {
13385
13412
  }
13386
13413
  const descriptor = createBuiltinDescriptor(pet, assetId, availability);
13387
- this.#assetRecords.set(assetId, { assetId, baseDirectory, descriptor, path });
13414
+ this.#assetRecords.set(assetId, {
13415
+ assetId,
13416
+ baseDirectory,
13417
+ contentType: "image/webp",
13418
+ descriptor,
13419
+ path
13420
+ });
13388
13421
  return descriptor;
13389
13422
  }
13390
13423
  async #ensureBuiltin(pet) {
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-NAHIDASP.js';
3
+ import { createCodexlyServer, SqliteStateRepository, normalizeAllowedHost } from './chunk-7XFCPPAG.js';
4
4
  import './chunk-DEKHLAWT.js';
5
- import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-CGZ44LHJ.js';
5
+ import { startCodexAppServer, locateCodexBinary, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, CodexProjectRepository, checkCodexVersion } from './chunk-HEWCIXCQ.js';
6
6
  import './chunk-RNTA4MFS.js';
7
7
  import './chunk-TEWPWZPG.js';
8
8
  import './chunk-K6J42667.js';
@@ -18,7 +18,7 @@ createRequire(import.meta.url);
18
18
 
19
19
  // package.json
20
20
  var package_default = {
21
- version: "0.7.0"};
21
+ version: "0.9.0"};
22
22
  var PACKAGE_NAME = "@bryanhu/codexly";
23
23
  var INITIAL_APP_VERSION = "0.1.0";
24
24
  var CHANGELOG_URL_PREFIX = "https://raw.githubusercontent.com/BryanHoo/Codexly/v";
@@ -174,7 +174,8 @@ function createAppUpdateService(options) {
174
174
  return {
175
175
  async install(version) {
176
176
  const latestVersion = await readLatest();
177
- if (version !== latestVersion || !isNewerVersion(latestVersion, options.appVersion)) {
177
+ const requestedVersionIsAvailable = isNewerVersion(version, options.appVersion) && !isNewerVersion(version, latestVersion);
178
+ if (!requestedVersionIsAvailable || !isNewerVersion(latestVersion, options.appVersion)) {
178
179
  throw new AppUpdateError("UPDATE_NOT_AVAILABLE", "The requested update is not available");
179
180
  }
180
181
  try {
@@ -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-CGZ44LHJ.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-HEWCIXCQ.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-NAHIDASP.js';
2
+ export { AccessSessionService, AgentEventStream, GitCommitError, GitCommitReviewError, SqliteStateRepository, commitSelectedProjectChanges, createCodexlyServer, normalizeAllowedHost, readProjectGitCommitFileDiff, readProjectGitCommitFiles } from '../chunk-7XFCPPAG.js';
3
3
  import '../chunk-DEKHLAWT.js';
4
- import '../chunk-CGZ44LHJ.js';
4
+ import '../chunk-HEWCIXCQ.js';
5
5
  import '../chunk-RNTA4MFS.js';
6
6
  import '../chunk-TEWPWZPG.js';
7
7
  import '../chunk-K6J42667.js';