@bryanhu/codexly 0.3.0 → 0.4.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 (201) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/dist/{chunk-6HXWAD7A.js → chunk-63TSFHXS.js} +354 -77
  3. package/dist/{chunk-VZLNYRY3.js → chunk-6W2NSQP6.js} +1 -1
  4. package/dist/{chunk-Y7HG5THF.js → chunk-I5XCZA2U.js} +66 -31
  5. package/dist/{chunk-DR6HEQ7V.js → chunk-TGDKFWII.js} +9 -2
  6. package/dist/cli.js +5 -5
  7. package/dist/client/index.js +2 -2
  8. package/dist/protocol/index.js +1 -1
  9. package/dist/providers/codex/index.js +2 -2
  10. package/dist/server/index.js +4 -4
  11. package/dist/web/.vite/manifest.json +268 -261
  12. package/dist/web/.vite/manifest.json.br +0 -0
  13. package/dist/web/.vite/manifest.json.gz +0 -0
  14. package/dist/web/assets/{button-B0Zy5xUw.js → button-SdoQawHa.js} +1 -1
  15. package/dist/web/assets/button-SdoQawHa.js.br +0 -0
  16. package/dist/web/assets/{button-B0Zy5xUw.js.gz → button-SdoQawHa.js.gz} +0 -0
  17. package/dist/web/assets/button-group-cIDkfDF9.js +1 -0
  18. package/dist/web/assets/button-group-cIDkfDF9.js.br +0 -0
  19. package/dist/web/assets/button-group-cIDkfDF9.js.gz +0 -0
  20. package/dist/web/assets/{checkbox-J-dVFT8h.js → checkbox-BlpFo5_d.js} +1 -1
  21. package/dist/web/assets/checkbox-BlpFo5_d.js.br +0 -0
  22. package/dist/web/assets/checkbox-BlpFo5_d.js.gz +0 -0
  23. package/dist/web/assets/{chunk-BO2N2NFS-Cv0xdEIU.js → chunk-BO2N2NFS-D3J36g1Z.js} +4 -4
  24. package/dist/web/assets/chunk-BO2N2NFS-D3J36g1Z.js.br +0 -0
  25. package/dist/web/assets/{chunk-BO2N2NFS-Cv0xdEIU.js.gz → chunk-BO2N2NFS-D3J36g1Z.js.gz} +0 -0
  26. package/dist/web/assets/{code-highlighter-XA2cEb7n.js → code-highlighter-Cl_7OKC4.js} +1 -1
  27. package/dist/web/assets/code-highlighter-Cl_7OKC4.js.br +0 -0
  28. package/dist/web/assets/code-highlighter-Cl_7OKC4.js.gz +0 -0
  29. package/dist/web/assets/code-languages-CoeGleQS.js +2 -0
  30. package/dist/web/assets/code-languages-CoeGleQS.js.br +0 -0
  31. package/dist/web/assets/code-languages-CoeGleQS.js.gz +0 -0
  32. package/dist/web/assets/cpp-DrC1WCyF.js +1 -0
  33. package/dist/web/assets/cpp-DrC1WCyF.js.br +0 -0
  34. package/dist/web/assets/cpp-DrC1WCyF.js.gz +0 -0
  35. package/dist/web/assets/cpp-DuI2J82L.js +1 -0
  36. package/dist/web/assets/cpp-DuI2J82L.js.br +0 -0
  37. package/dist/web/assets/cpp-DuI2J82L.js.gz +0 -0
  38. package/dist/web/assets/{engine-compile-DQ0HPfe0.js → engine-compile-Bqjaa_8Z.js} +14 -14
  39. package/dist/web/assets/engine-compile-Bqjaa_8Z.js.br +0 -0
  40. package/dist/web/assets/engine-compile-Bqjaa_8Z.js.gz +0 -0
  41. package/dist/web/assets/es2015-B-skuqay.js +41 -0
  42. package/dist/web/assets/es2015-B-skuqay.js.br +0 -0
  43. package/dist/web/assets/es2015-B-skuqay.js.gz +0 -0
  44. package/dist/web/assets/{file-fDjkn3KE.js → file-DwOQ4CRt.js} +1 -1
  45. package/dist/web/assets/file-DwOQ4CRt.js.br +0 -0
  46. package/dist/web/assets/file-DwOQ4CRt.js.gz +0 -0
  47. package/dist/web/assets/{file-review-dialog-a4LVk4QA.js → file-review-dialog-BmXxZad1.js} +2 -2
  48. package/dist/web/assets/file-review-dialog-BmXxZad1.js.br +0 -0
  49. package/dist/web/assets/file-review-dialog-BmXxZad1.js.gz +0 -0
  50. package/dist/web/assets/{file-tree-Dh8mZi4H.js → file-tree-Bl6o98td.js} +1 -1
  51. package/dist/web/assets/file-tree-Bl6o98td.js.br +0 -0
  52. package/dist/web/assets/file-tree-Bl6o98td.js.gz +0 -0
  53. package/dist/web/assets/{git-commit-horizontal-DqCudnTd.js → git-commit-horizontal-1BtAo1_y.js} +1 -1
  54. package/dist/web/assets/git-commit-horizontal-1BtAo1_y.js.br +0 -0
  55. package/dist/web/assets/git-commit-horizontal-1BtAo1_y.js.gz +0 -0
  56. package/dist/web/assets/{git-history-panel-C0BqsVJw.js → git-history-panel-zXprGDsD.js} +2 -2
  57. package/dist/web/assets/git-history-panel-zXprGDsD.js.br +0 -0
  58. package/dist/web/assets/git-history-panel-zXprGDsD.js.gz +0 -0
  59. package/dist/web/assets/global-settings-dialog-CQK8OvfF.js +1 -0
  60. package/dist/web/assets/global-settings-dialog-CQK8OvfF.js.br +0 -0
  61. package/dist/web/assets/global-settings-dialog-CQK8OvfF.js.gz +0 -0
  62. package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js +1 -0
  63. package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js.br +0 -0
  64. package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js.gz +0 -0
  65. package/dist/web/assets/{highlighted-body-OFNGDK62-3Xd1uGCw.js → highlighted-body-OFNGDK62-DLuRF1Ir.js} +1 -1
  66. package/dist/web/assets/highlighted-body-OFNGDK62-DLuRF1Ir.js.br +0 -0
  67. package/dist/web/assets/highlighted-body-OFNGDK62-DLuRF1Ir.js.gz +0 -0
  68. package/dist/web/assets/index-BQDjXTIj.js +4 -0
  69. package/dist/web/assets/index-BQDjXTIj.js.br +0 -0
  70. package/dist/web/assets/index-BQDjXTIj.js.gz +0 -0
  71. package/dist/web/assets/index-Cg_JyLiC.css +2 -0
  72. package/dist/web/assets/index-Cg_JyLiC.css.br +0 -0
  73. package/dist/web/assets/index-Cg_JyLiC.css.gz +0 -0
  74. package/dist/web/assets/lazy-message-response-BAESsr6y.js +2 -0
  75. package/dist/web/assets/lazy-message-response-BAESsr6y.js.br +0 -0
  76. package/dist/web/assets/lazy-message-response-BAESsr6y.js.gz +0 -0
  77. package/dist/web/assets/mermaid-GHXKKRXX-D80VLkUl.js +1 -0
  78. package/dist/web/assets/mermaid-GHXKKRXX-D80VLkUl.js.br +0 -0
  79. package/dist/web/assets/mermaid-GHXKKRXX-D80VLkUl.js.gz +0 -0
  80. package/dist/web/assets/{message-response-DyFE9GSy.js → message-response-ll2GyVvz.js} +1 -1
  81. package/dist/web/assets/message-response-ll2GyVvz.js.br +0 -0
  82. package/dist/web/assets/message-response-ll2GyVvz.js.gz +0 -0
  83. package/dist/web/assets/{patch-diff-viewer-DHfvCO4S.js → patch-diff-viewer-7Ar-plzV.js} +2 -2
  84. package/dist/web/assets/patch-diff-viewer-7Ar-plzV.js.br +0 -0
  85. package/dist/web/assets/patch-diff-viewer-7Ar-plzV.js.gz +0 -0
  86. package/dist/web/assets/{perl-Br95gH8g.js → perl-C4NAnH_t.js} +1 -1
  87. package/dist/web/assets/perl-C4NAnH_t.js.br +0 -0
  88. package/dist/web/assets/{perl-Br95gH8g.js.gz → perl-C4NAnH_t.js.gz} +0 -0
  89. package/dist/web/assets/{php-CYrBA5iX.js → php-CQT4wx5i.js} +1 -1
  90. package/dist/web/assets/php-CQT4wx5i.js.br +0 -0
  91. package/dist/web/assets/{php-CYrBA5iX.js.gz → php-CQT4wx5i.js.gz} +0 -0
  92. package/dist/web/assets/prompt-input-controls-t69FYoWk.js +1 -0
  93. package/dist/web/assets/prompt-input-controls-t69FYoWk.js.br +0 -0
  94. package/dist/web/assets/prompt-input-controls-t69FYoWk.js.gz +0 -0
  95. package/dist/web/assets/{provider-connection-queries-C2Fn0xx2.js → provider-connection-queries-BKyJMJn1.js} +1 -1
  96. package/dist/web/assets/provider-connection-queries-BKyJMJn1.js.br +0 -0
  97. package/dist/web/assets/provider-connection-queries-BKyJMJn1.js.gz +0 -0
  98. package/dist/web/assets/{ruby-CbXu8Ywv.js → ruby-Oh3ZbUP2.js} +1 -1
  99. package/dist/web/assets/ruby-Oh3ZbUP2.js.br +0 -0
  100. package/dist/web/assets/ruby-Oh3ZbUP2.js.gz +0 -0
  101. package/dist/web/assets/{shiki-bundle-CNYWcrCX.js → shiki-bundle-UDLEjOL9.js} +1 -1
  102. package/dist/web/assets/shiki-bundle-UDLEjOL9.js.br +0 -0
  103. package/dist/web/assets/shiki-bundle-UDLEjOL9.js.gz +0 -0
  104. package/dist/web/assets/swift-CyEgAFGc.js +1 -0
  105. package/dist/web/assets/swift-CyEgAFGc.js.br +0 -0
  106. package/dist/web/assets/swift-CyEgAFGc.js.gz +0 -0
  107. package/dist/web/assets/upload-Bbk2LEzM.js +1 -0
  108. package/dist/web/assets/upload-Bbk2LEzM.js.br +0 -0
  109. package/dist/web/assets/upload-Bbk2LEzM.js.gz +0 -0
  110. package/dist/web/assets/{vue-BpAUjojh.js → vue-BcFuTOIy.js} +1 -1
  111. package/dist/web/assets/vue-BcFuTOIy.js.br +0 -0
  112. package/dist/web/assets/vue-BcFuTOIy.js.gz +0 -0
  113. package/dist/web/assets/workbench-inspector-changes-CumCxeA7.js +1 -0
  114. package/dist/web/assets/workbench-inspector-changes-CumCxeA7.js.br +0 -0
  115. package/dist/web/assets/workbench-inspector-changes-CumCxeA7.js.gz +0 -0
  116. package/dist/web/assets/workbench-shell-D21PPmmO.js +13 -0
  117. package/dist/web/assets/workbench-shell-D21PPmmO.js.br +0 -0
  118. package/dist/web/assets/workbench-shell-D21PPmmO.js.gz +0 -0
  119. package/dist/web/index.html +8 -8
  120. package/dist/web/index.html.br +0 -0
  121. package/dist/web/index.html.gz +0 -0
  122. package/package.json +7 -10
  123. package/dist/web/assets/button-B0Zy5xUw.js.br +0 -0
  124. package/dist/web/assets/button-group-Czp67RFV.js +0 -1
  125. package/dist/web/assets/button-group-Czp67RFV.js.br +0 -0
  126. package/dist/web/assets/button-group-Czp67RFV.js.gz +0 -0
  127. package/dist/web/assets/checkbox-J-dVFT8h.js.br +0 -0
  128. package/dist/web/assets/checkbox-J-dVFT8h.js.gz +0 -0
  129. package/dist/web/assets/chunk-BO2N2NFS-Cv0xdEIU.js.br +0 -0
  130. package/dist/web/assets/code-highlighter-XA2cEb7n.js.br +0 -0
  131. package/dist/web/assets/code-highlighter-XA2cEb7n.js.gz +0 -0
  132. package/dist/web/assets/code-languages-B1bG8xP9.js +0 -2
  133. package/dist/web/assets/code-languages-B1bG8xP9.js.br +0 -0
  134. package/dist/web/assets/code-languages-B1bG8xP9.js.gz +0 -0
  135. package/dist/web/assets/cpp-BcHBJY00.js +0 -1
  136. package/dist/web/assets/cpp-BcHBJY00.js.br +0 -0
  137. package/dist/web/assets/cpp-BcHBJY00.js.gz +0 -0
  138. package/dist/web/assets/cpp-CIkEvbIe.js +0 -1
  139. package/dist/web/assets/cpp-CIkEvbIe.js.br +0 -0
  140. package/dist/web/assets/cpp-CIkEvbIe.js.gz +0 -0
  141. package/dist/web/assets/engine-compile-DQ0HPfe0.js.br +0 -0
  142. package/dist/web/assets/engine-compile-DQ0HPfe0.js.gz +0 -0
  143. package/dist/web/assets/es2015-D1QRD4rq.js +0 -41
  144. package/dist/web/assets/es2015-D1QRD4rq.js.br +0 -0
  145. package/dist/web/assets/es2015-D1QRD4rq.js.gz +0 -0
  146. package/dist/web/assets/file-fDjkn3KE.js.br +0 -2
  147. package/dist/web/assets/file-fDjkn3KE.js.gz +0 -0
  148. package/dist/web/assets/file-review-dialog-a4LVk4QA.js.br +0 -0
  149. package/dist/web/assets/file-review-dialog-a4LVk4QA.js.gz +0 -0
  150. package/dist/web/assets/file-tree-Dh8mZi4H.js.br +0 -0
  151. package/dist/web/assets/file-tree-Dh8mZi4H.js.gz +0 -0
  152. package/dist/web/assets/git-commit-horizontal-DqCudnTd.js.br +0 -0
  153. package/dist/web/assets/git-commit-horizontal-DqCudnTd.js.gz +0 -0
  154. package/dist/web/assets/git-history-panel-C0BqsVJw.js.br +0 -0
  155. package/dist/web/assets/git-history-panel-C0BqsVJw.js.gz +0 -0
  156. package/dist/web/assets/global-settings-dialog-DAk0qzab.js +0 -1
  157. package/dist/web/assets/global-settings-dialog-DAk0qzab.js.br +0 -0
  158. package/dist/web/assets/global-settings-dialog-DAk0qzab.js.gz +0 -0
  159. package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js +0 -1
  160. package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js.br +0 -0
  161. package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js.gz +0 -0
  162. package/dist/web/assets/highlighted-body-OFNGDK62-3Xd1uGCw.js.br +0 -0
  163. package/dist/web/assets/highlighted-body-OFNGDK62-3Xd1uGCw.js.gz +0 -0
  164. package/dist/web/assets/index-C9MtcGVc.js +0 -4
  165. package/dist/web/assets/index-C9MtcGVc.js.br +0 -0
  166. package/dist/web/assets/index-C9MtcGVc.js.gz +0 -0
  167. package/dist/web/assets/index-DAs_avwK.css +0 -2
  168. package/dist/web/assets/index-DAs_avwK.css.br +0 -0
  169. package/dist/web/assets/index-DAs_avwK.css.gz +0 -0
  170. package/dist/web/assets/lazy-message-response-BDqsH4Ww.js +0 -2
  171. package/dist/web/assets/lazy-message-response-BDqsH4Ww.js.br +0 -0
  172. package/dist/web/assets/lazy-message-response-BDqsH4Ww.js.gz +0 -0
  173. package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js +0 -1
  174. package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js.br +0 -0
  175. package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js.gz +0 -0
  176. package/dist/web/assets/message-response-DyFE9GSy.js.br +0 -0
  177. package/dist/web/assets/message-response-DyFE9GSy.js.gz +0 -0
  178. package/dist/web/assets/patch-diff-viewer-DHfvCO4S.js.br +0 -0
  179. package/dist/web/assets/patch-diff-viewer-DHfvCO4S.js.gz +0 -0
  180. package/dist/web/assets/perl-Br95gH8g.js.br +0 -0
  181. package/dist/web/assets/php-CYrBA5iX.js.br +0 -0
  182. package/dist/web/assets/prompt-input-controls-CLj9lxlf.js +0 -1
  183. package/dist/web/assets/prompt-input-controls-CLj9lxlf.js.br +0 -0
  184. package/dist/web/assets/prompt-input-controls-CLj9lxlf.js.gz +0 -0
  185. package/dist/web/assets/provider-connection-queries-C2Fn0xx2.js.br +0 -0
  186. package/dist/web/assets/provider-connection-queries-C2Fn0xx2.js.gz +0 -0
  187. package/dist/web/assets/ruby-CbXu8Ywv.js.br +0 -0
  188. package/dist/web/assets/ruby-CbXu8Ywv.js.gz +0 -0
  189. package/dist/web/assets/shiki-bundle-CNYWcrCX.js.br +0 -0
  190. package/dist/web/assets/shiki-bundle-CNYWcrCX.js.gz +0 -0
  191. package/dist/web/assets/swift-DonLKvLd.js +0 -1
  192. package/dist/web/assets/swift-DonLKvLd.js.br +0 -0
  193. package/dist/web/assets/swift-DonLKvLd.js.gz +0 -0
  194. package/dist/web/assets/vue-BpAUjojh.js.br +0 -0
  195. package/dist/web/assets/vue-BpAUjojh.js.gz +0 -0
  196. package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js +0 -1
  197. package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js.br +0 -0
  198. package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js.gz +0 -0
  199. package/dist/web/assets/workbench-shell-eo1pFJFk.js +0 -13
  200. package/dist/web/assets/workbench-shell-eo1pFJFk.js.br +0 -0
  201. package/dist/web/assets/workbench-shell-eo1pFJFk.js.gz +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.4.0] - 2026-08-26
8
+
9
+ ### 新增
10
+
11
+ - 添加工作台背景设置,支持无背景、自定义图片和 Bing 每日壁纸,并提供全工作台遮罩调节。
12
+ - 添加独立 Chromium 浏览器性能诊断,覆盖长历史加载、连续对话与下一条消息渲染指标。
13
+
14
+ ### 优化
15
+
16
+ - 统一命令输出的 UTF-8 首尾保留策略,精确展示省略的字节数与行数,并优化任务 Store 的增量内存统计和 LRU 淘汰。
17
+ - 将任务快照所有权转移至归一化 Store,减少重复数据保留,并使用成熟依赖改进服务端并发与指纹序列化。
18
+ - 拆分日常增量构建与发布清理构建,将代码检查迁移至 Oxlint,并升级 Shiki 至 `4.4.3`。
19
+
20
+ ### 修复
21
+
22
+ - 修复旧任务快照回滚导致流式消息重复追加的问题。
23
+ - 修复 Git 混合状态文件提交时丢失未暂存内容的问题。
24
+ - 修复队列消息编辑期间的隐藏状态及外部删除后的状态同步问题。
25
+
7
26
  ## [0.3.0] - 2026-08-25
8
27
 
9
28
  ### 新增
@@ -65,7 +84,8 @@
65
84
  - 拆分全栈测试套件并限制 Vitest 并发,提升跨平台门禁稳定性;GitHub Release 改为严格提取对应版本的完整更新日志。
66
85
  - 将最低 Node.js 版本调整为 `22.14.0`,同步 CLI、CI、发布环境和使用文档。
67
86
 
68
- [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.3.0...HEAD
87
+ [Unreleased]: https://github.com/BryanHoo/Codexly/compare/v0.4.0...HEAD
88
+ [0.4.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.4.0
69
89
  [0.3.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.3.0
70
90
  [0.2.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.2.0
71
91
  [0.1.0]: https://github.com/BryanHoo/Codexly/releases/tag/v0.1.0
@@ -1,16 +1,16 @@
1
1
  import { createRequire } from 'node:module';
2
- import { value_exports } from './chunk-VZLNYRY3.js';
3
- import { require_pino, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-Y7HG5THF.js';
2
+ import { value_exports } from './chunk-6W2NSQP6.js';
3
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-I5XCZA2U.js';
4
4
  import { PendingRequestResolutionError } from './chunk-3OBVX5TN.js';
5
- import { AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, 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, 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, AgentProviderConnectionRecordSchema, 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, MAX_EVENT_BATCH_SIZE } from './chunk-DR6HEQ7V.js';
5
+ import { AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, 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, 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, AgentProviderConnectionRecordSchema, 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, MAX_EVENT_BATCH_SIZE } from './chunk-TGDKFWII.js';
6
6
  import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
7
7
  import { Buffer as Buffer$1 } from 'buffer';
8
8
  import { Readable, Transform } from 'stream';
9
9
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'crypto';
10
10
  import { createWriteStream, constants, createReadStream } from 'fs';
11
- import { realpath, lstat, stat, readFile, open, mkdir, rm, readdir, access, unlink, readlink } from 'fs/promises';
11
+ import { mkdtemp, rm, realpath, lstat, stat, readFile, open, mkdir, readdir, access, unlink, readlink } from 'fs/promises';
12
12
  import { tmpdir, homedir } from 'os';
13
- import { isAbsolute, join, dirname, resolve, relative, sep, basename, extname, normalize, win32, posix } from 'path';
13
+ import { join, isAbsolute, dirname, resolve, relative, sep, basename, extname, normalize, win32, posix } from 'path';
14
14
  import { pipeline } from 'stream/promises';
15
15
  import { TextDecoder as TextDecoder$1 } from 'util';
16
16
  import { spawn } from 'child_process';
@@ -9621,7 +9621,7 @@ var require_codegen = __commonJS({
9621
9621
  AND: new code_1._Code("&&"),
9622
9622
  ADD: new code_1._Code("+")
9623
9623
  };
9624
- var Node = class {
9624
+ var Node2 = class {
9625
9625
  optimizeNodes() {
9626
9626
  return this;
9627
9627
  }
@@ -9629,7 +9629,7 @@ var require_codegen = __commonJS({
9629
9629
  return this;
9630
9630
  }
9631
9631
  };
9632
- var Def = class extends Node {
9632
+ var Def = class extends Node2 {
9633
9633
  constructor(varKind, name, rhs) {
9634
9634
  super();
9635
9635
  this.varKind = varKind;
@@ -9652,7 +9652,7 @@ var require_codegen = __commonJS({
9652
9652
  return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};
9653
9653
  }
9654
9654
  };
9655
- var Assign = class extends Node {
9655
+ var Assign = class extends Node2 {
9656
9656
  constructor(lhs, rhs, sideEffects) {
9657
9657
  super();
9658
9658
  this.lhs = lhs;
@@ -9682,7 +9682,7 @@ var require_codegen = __commonJS({
9682
9682
  return `${this.lhs} ${this.op}= ${this.rhs};` + _n;
9683
9683
  }
9684
9684
  };
9685
- var Label = class extends Node {
9685
+ var Label = class extends Node2 {
9686
9686
  constructor(label) {
9687
9687
  super();
9688
9688
  this.label = label;
@@ -9692,7 +9692,7 @@ var require_codegen = __commonJS({
9692
9692
  return `${this.label}:` + _n;
9693
9693
  }
9694
9694
  };
9695
- var Break = class extends Node {
9695
+ var Break = class extends Node2 {
9696
9696
  constructor(label) {
9697
9697
  super();
9698
9698
  this.label = label;
@@ -9703,7 +9703,7 @@ var require_codegen = __commonJS({
9703
9703
  return `break${label};` + _n;
9704
9704
  }
9705
9705
  };
9706
- var Throw = class extends Node {
9706
+ var Throw = class extends Node2 {
9707
9707
  constructor(error) {
9708
9708
  super();
9709
9709
  this.error = error;
@@ -9715,7 +9715,7 @@ var require_codegen = __commonJS({
9715
9715
  return this.error.names;
9716
9716
  }
9717
9717
  };
9718
- var AnyCode = class extends Node {
9718
+ var AnyCode = class extends Node2 {
9719
9719
  constructor(code) {
9720
9720
  super();
9721
9721
  this.code = code;
@@ -9734,7 +9734,7 @@ var require_codegen = __commonJS({
9734
9734
  return this.code instanceof code_1._CodeOrName ? this.code.names : {};
9735
9735
  }
9736
9736
  };
9737
- var ParentNode = class extends Node {
9737
+ var ParentNode = class extends Node2 {
9738
9738
  constructor(nodes = []) {
9739
9739
  super();
9740
9740
  this.nodes = nodes;
@@ -26191,7 +26191,7 @@ var require_node = __commonJS({
26191
26191
  PARAMETRIC: 1,
26192
26192
  WILDCARD: 2
26193
26193
  };
26194
- var Node = class {
26194
+ var Node2 = class {
26195
26195
  constructor() {
26196
26196
  this.isLeafNode = false;
26197
26197
  this.routes = null;
@@ -26209,7 +26209,7 @@ var require_node = __commonJS({
26209
26209
  this.handlerStorage.addHandler(constrainer, route);
26210
26210
  }
26211
26211
  };
26212
- var ParentNode = class extends Node {
26212
+ var ParentNode = class extends Node2 {
26213
26213
  constructor() {
26214
26214
  super();
26215
26215
  this.staticChildren = {};
@@ -26359,7 +26359,7 @@ var require_node = __commonJS({
26359
26359
  return this.findStaticMatchingChild(path, pathIndex);
26360
26360
  }
26361
26361
  };
26362
- var WildcardNode = class extends Node {
26362
+ var WildcardNode = class extends Node2 {
26363
26363
  constructor() {
26364
26364
  super();
26365
26365
  this.kind = NODE_TYPES.WILDCARD;
@@ -35007,7 +35007,7 @@ var require_multipart2 = __commonJS({
35007
35007
  parts = this.parts(options2);
35008
35008
  }
35009
35009
  this.savedRequestFiles = [];
35010
- const tmpdir2 = options2?.tmpdir || os.tmpdir();
35010
+ const tmpdir3 = options2?.tmpdir || os.tmpdir();
35011
35011
  this.tmpUploads = [];
35012
35012
  let i2 = 0;
35013
35013
  for await (const part of parts) {
@@ -35015,7 +35015,7 @@ var require_multipart2 = __commonJS({
35015
35015
  if (!part.file) {
35016
35016
  continue;
35017
35017
  }
35018
- const filepath = path.join(tmpdir2, generateId() + path.extname(part.filename || "file" + i2++));
35018
+ const filepath = path.join(tmpdir3, generateId() + path.extname(part.filename || "file" + i2++));
35019
35019
  const target = createWriteStream2(filepath);
35020
35020
  try {
35021
35021
  this.tmpUploads.push(filepath);
@@ -39211,7 +39211,7 @@ var require_send = __commonJS({
39211
39211
  var { parseTokenList } = require_parseTokenList();
39212
39212
  var { createHttpError } = require_createHttpError();
39213
39213
  var extname3 = path.extname;
39214
- var join9 = path.join;
39214
+ var join10 = path.join;
39215
39215
  var normalize2 = path.normalize;
39216
39216
  var resolve7 = path.resolve;
39217
39217
  var sep5 = path.sep;
@@ -39298,7 +39298,7 @@ var require_send = __commonJS({
39298
39298
  return { statusCode: 403 };
39299
39299
  }
39300
39300
  parts = path2.split(sep5);
39301
- path2 = normalize2(join9(root, path2));
39301
+ path2 = normalize2(join10(root, path2));
39302
39302
  } else {
39303
39303
  if (UP_PATH_REGEXP.test(path2)) {
39304
39304
  debug2('malicious path "%s"', path2);
@@ -39581,7 +39581,7 @@ var require_send = __commonJS({
39581
39581
  let err;
39582
39582
  for (let i2 = 0; i2 < options.index.length; i2++) {
39583
39583
  const index = options.index[i2];
39584
- const p2 = join9(path2, index);
39584
+ const p2 = join10(path2, index);
39585
39585
  const { error, stat: stat4 } = await tryStat(p2);
39586
39586
  if (error) {
39587
39587
  err = error;
@@ -44718,7 +44718,7 @@ var require_buffer_list = __commonJS({
44718
44718
  }
44719
44719
  }, {
44720
44720
  key: "join",
44721
- value: function join9(s) {
44721
+ value: function join10(s) {
44722
44722
  if (this.length === 0) return "";
44723
44723
  var p2 = this.head;
44724
44724
  var ret = "" + p2.data;
@@ -53588,34 +53588,167 @@ function originalErrorMessage(error, fallback) {
53588
53588
  if (typeof error === "string" && error.length > 0) return error;
53589
53589
  return fallback;
53590
53590
  }
53591
+
53592
+ // node_modules/.pnpm/yocto-queue@1.2.2/node_modules/yocto-queue/index.js
53593
+ var Node = class {
53594
+ value;
53595
+ next;
53596
+ constructor(value) {
53597
+ this.value = value;
53598
+ }
53599
+ };
53600
+ var Queue = class {
53601
+ #head;
53602
+ #tail;
53603
+ #size;
53604
+ constructor() {
53605
+ this.clear();
53606
+ }
53607
+ enqueue(value) {
53608
+ const node = new Node(value);
53609
+ if (this.#head) {
53610
+ this.#tail.next = node;
53611
+ this.#tail = node;
53612
+ } else {
53613
+ this.#head = node;
53614
+ this.#tail = node;
53615
+ }
53616
+ this.#size++;
53617
+ }
53618
+ dequeue() {
53619
+ const current = this.#head;
53620
+ if (!current) {
53621
+ return;
53622
+ }
53623
+ this.#head = this.#head.next;
53624
+ this.#size--;
53625
+ if (!this.#head) {
53626
+ this.#tail = void 0;
53627
+ }
53628
+ return current.value;
53629
+ }
53630
+ peek() {
53631
+ if (!this.#head) {
53632
+ return;
53633
+ }
53634
+ return this.#head.value;
53635
+ }
53636
+ clear() {
53637
+ this.#head = void 0;
53638
+ this.#tail = void 0;
53639
+ this.#size = 0;
53640
+ }
53641
+ get size() {
53642
+ return this.#size;
53643
+ }
53644
+ *[Symbol.iterator]() {
53645
+ let current = this.#head;
53646
+ while (current) {
53647
+ yield current.value;
53648
+ current = current.next;
53649
+ }
53650
+ }
53651
+ *drain() {
53652
+ while (this.#head) {
53653
+ yield this.dequeue();
53654
+ }
53655
+ }
53656
+ };
53657
+
53658
+ // node_modules/.pnpm/p-limit@7.3.1/node_modules/p-limit/index.js
53659
+ function pLimit(concurrency) {
53660
+ let rejectOnClear = false;
53661
+ if (typeof concurrency === "object") {
53662
+ ({ concurrency, rejectOnClear = false } = concurrency);
53663
+ }
53664
+ validateConcurrency(concurrency);
53665
+ if (typeof rejectOnClear !== "boolean") {
53666
+ throw new TypeError("Expected `rejectOnClear` to be a boolean");
53667
+ }
53668
+ const queue = new Queue();
53669
+ let activeCount = 0;
53670
+ const resumeNext = () => {
53671
+ if (activeCount < concurrency && queue.size > 0) {
53672
+ activeCount++;
53673
+ queue.dequeue().run();
53674
+ }
53675
+ };
53676
+ const next = () => {
53677
+ activeCount--;
53678
+ resumeNext();
53679
+ };
53680
+ const run = async (function_, resolve7, arguments_) => {
53681
+ const result = (async () => function_(...arguments_))();
53682
+ resolve7(result);
53683
+ try {
53684
+ await result;
53685
+ } catch {
53686
+ }
53687
+ next();
53688
+ };
53689
+ const enqueue = (function_, resolve7, reject, arguments_) => {
53690
+ const queueItem = { reject };
53691
+ new Promise((internalResolve) => {
53692
+ queueItem.run = internalResolve;
53693
+ queue.enqueue(queueItem);
53694
+ }).then(run.bind(void 0, function_, resolve7, arguments_));
53695
+ if (activeCount < concurrency) {
53696
+ resumeNext();
53697
+ }
53698
+ };
53699
+ const generator = (function_, ...arguments_) => new Promise((resolve7, reject) => {
53700
+ enqueue(function_, resolve7, reject, arguments_);
53701
+ });
53702
+ Object.defineProperties(generator, {
53703
+ activeCount: {
53704
+ get: () => activeCount
53705
+ },
53706
+ pendingCount: {
53707
+ get: () => queue.size
53708
+ },
53709
+ clearQueue: {
53710
+ value() {
53711
+ if (!rejectOnClear) {
53712
+ queue.clear();
53713
+ return;
53714
+ }
53715
+ const abortError = AbortSignal.abort().reason;
53716
+ while (queue.size > 0) {
53717
+ queue.dequeue().reject(abortError);
53718
+ }
53719
+ }
53720
+ },
53721
+ concurrency: {
53722
+ get: () => concurrency,
53723
+ set(newConcurrency) {
53724
+ validateConcurrency(newConcurrency);
53725
+ concurrency = newConcurrency;
53726
+ queueMicrotask(() => {
53727
+ while (activeCount < concurrency && queue.size > 0) {
53728
+ resumeNext();
53729
+ }
53730
+ });
53731
+ }
53732
+ },
53733
+ map: {
53734
+ async value(iterable, function_) {
53735
+ const promises = Array.from(iterable, (value, index) => generator(function_, value, index));
53736
+ return Promise.all(promises);
53737
+ }
53738
+ }
53739
+ });
53740
+ return generator;
53741
+ }
53742
+ function validateConcurrency(concurrency) {
53743
+ if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {
53744
+ throw new TypeError("Expected `concurrency` to be a number from 1 and up");
53745
+ }
53746
+ }
53591
53747
  var MAX_GIT_COMMAND_CONCURRENCY = 4;
53592
53748
  var MAX_FILE_IO_CONCURRENCY = 8;
53593
53749
  var MAX_WORKING_TREE_DIFF_BYTES = 10 * 1024 * 1024;
53594
53750
  var MAX_WORKING_TREE_FILES = 1e3;
53595
53751
  var MAX_UNTRACKED_DIFF_BYTES = 5 * 1024 * 1024;
53596
- function createConcurrencyLimiter(maxConcurrency) {
53597
- let activeOperations = 0;
53598
- const pendingOperations = [];
53599
- const startNext = () => {
53600
- while (activeOperations < maxConcurrency) {
53601
- const startOperation = pendingOperations.shift();
53602
- if (startOperation === void 0) {
53603
- return;
53604
- }
53605
- startOperation();
53606
- }
53607
- };
53608
- return (operation) => new Promise((resolvePromise, rejectPromise) => {
53609
- pendingOperations.push(() => {
53610
- activeOperations += 1;
53611
- void Promise.resolve().then(operation).then(resolvePromise, rejectPromise).finally(() => {
53612
- activeOperations -= 1;
53613
- startNext();
53614
- });
53615
- });
53616
- startNext();
53617
- });
53618
- }
53619
53752
  async function mapWithConcurrency(items, maxConcurrency, mapper) {
53620
53753
  const results = new Array(items.length);
53621
53754
  let nextIndex = 0;
@@ -54077,7 +54210,7 @@ async function readGitWorkingTreeStatus(projectRoot, gitCommandExecutor = execut
54077
54210
  }
54078
54211
  const resolvedProjectRoot = await realpath(projectRoot);
54079
54212
  const budget = new WorkingTreeReadBudget();
54080
- const limitGitCommand = createConcurrencyLimiter(MAX_GIT_COMMAND_CONCURRENCY);
54213
+ const limitGitCommand = pLimit(MAX_GIT_COMMAND_CONCURRENCY);
54081
54214
  const limitedGitCommandExecutor = (repositoryRoot, arguments_) => limitGitCommand(() => gitCommandExecutor(repositoryRoot, arguments_));
54082
54215
  let status2;
54083
54216
  let repositoryBranches = {
@@ -54175,11 +54308,11 @@ var GitCommandError = class extends Error {
54175
54308
  function literalPath(path) {
54176
54309
  return `:(literal)${path}`;
54177
54310
  }
54178
- async function executeGit2(repositoryRoot, arguments_, input = "") {
54311
+ async function executeGit2(repositoryRoot, arguments_, input = "", environment = {}) {
54179
54312
  return new Promise((resolve7, reject) => {
54180
54313
  const consumesInput = input !== "";
54181
54314
  const child = spawn("git", ["-C", repositoryRoot, ...arguments_], {
54182
- env: { ...createGitEnvironment(), GIT_TERMINAL_PROMPT: "0" },
54315
+ env: { ...createGitEnvironment(), ...environment, GIT_TERMINAL_PROMPT: "0" },
54183
54316
  shell: false,
54184
54317
  // 无输入命令不创建 stdin pipe,避免短命令退出后写端异步触发 EPIPE。
54185
54318
  stdio: [consumesInput ? "pipe" : "ignore", "pipe", "pipe"],
@@ -54276,30 +54409,56 @@ async function commitSelectedProjectChanges(projectRoot, request) {
54276
54409
  }
54277
54410
  const selectedPaths = request.paths.map(literalPath);
54278
54411
  const stagedPaths = new Set(status2.staged.map((change) => change.path));
54279
- const untrackedPaths = status2.unstaged.filter(
54280
- (change) => change.kind === "create" && !stagedPaths.has(change.path) && request.paths.includes(change.path)
54281
- ).map((change) => literalPath(change.path));
54282
- if (untrackedPaths.length > 0) {
54283
- await executeGit2(repositoryRoot, ["add", "--intent-to-add", "--", ...untrackedPaths]).catch(
54284
- (error) => {
54285
- throw new GitCommitError(
54286
- "GIT_COMMIT_FAILED",
54287
- originalErrorMessage(error, "Selected files could not be prepared")
54412
+ const selectedStagedPaths = request.paths.filter((path) => stagedPaths.has(path));
54413
+ const selectedUnstagedPaths = request.paths.filter((path) => !stagedPaths.has(path));
54414
+ const temporaryIndexRoot = await mkdtemp(join(tmpdir(), "codexly-git-index-"));
54415
+ const temporaryIndexEnvironment = {
54416
+ GIT_INDEX_FILE: join(temporaryIndexRoot, "index")
54417
+ };
54418
+ try {
54419
+ await executeGit2(repositoryRoot, ["read-tree", "HEAD"], "", temporaryIndexEnvironment);
54420
+ if (selectedStagedPaths.length > 0) {
54421
+ const stagedEntries = await executeGit2(repositoryRoot, [
54422
+ "ls-files",
54423
+ "--stage",
54424
+ "-z",
54425
+ "--",
54426
+ ...selectedStagedPaths.map(literalPath)
54427
+ ]);
54428
+ await executeGit2(
54429
+ repositoryRoot,
54430
+ ["update-index", "--force-remove", "--", ...selectedStagedPaths],
54431
+ "",
54432
+ temporaryIndexEnvironment
54433
+ );
54434
+ if (stagedEntries.stdout.length > 0) {
54435
+ await executeGit2(
54436
+ repositoryRoot,
54437
+ ["update-index", "-z", "--index-info"],
54438
+ stagedEntries.stdout,
54439
+ temporaryIndexEnvironment
54288
54440
  );
54289
54441
  }
54290
- );
54291
- }
54292
- try {
54442
+ }
54443
+ if (selectedUnstagedPaths.length > 0) {
54444
+ await executeGit2(
54445
+ repositoryRoot,
54446
+ ["add", "--", ...selectedUnstagedPaths.map(literalPath)],
54447
+ "",
54448
+ temporaryIndexEnvironment
54449
+ );
54450
+ }
54293
54451
  await executeGit2(
54294
54452
  repositoryRoot,
54295
- ["commit", "--only", "--file=-", "--", ...selectedPaths],
54296
- request.message
54453
+ ["commit", "--file=-"],
54454
+ request.message,
54455
+ temporaryIndexEnvironment
54297
54456
  );
54457
+ await executeGit2(repositoryRoot, ["reset", "--quiet", "HEAD", "--", ...selectedPaths]);
54298
54458
  } catch (error) {
54299
- if (untrackedPaths.length > 0) {
54300
- await executeGit2(repositoryRoot, ["reset", "--", ...untrackedPaths]).catch(() => void 0);
54301
- }
54302
54459
  throw new GitCommitError("GIT_COMMIT_FAILED", originalErrorMessage(error, "Git commit failed"));
54460
+ } finally {
54461
+ await rm(temporaryIndexRoot, { force: true, recursive: true }).catch(() => void 0);
54303
54462
  }
54304
54463
  const commitSha = (await executeGit2(repositoryRoot, ["rev-parse", "HEAD"])).stdout.trim();
54305
54464
  let pushStatus = "not_requested";
@@ -55156,6 +55315,13 @@ function toMcpProviderHttpError(error) {
55156
55315
  return new MutationHttpError("PROVIDER_ERROR", message, 502, true);
55157
55316
  }
55158
55317
  var import_fastify = __toESM(require_fastify(), 1);
55318
+
55319
+ // node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/esm/wrapper.js
55320
+ var import__ = __toESM(require_safe_stable_stringify(), 1);
55321
+ import__.default.configure;
55322
+ var wrapper_default = import__.default;
55323
+
55324
+ // packages/server/src/server-runtime.ts
55159
55325
  var MULTIPART_ENVELOPE_BYTES = 64 * 1024;
55160
55326
  function maximumAttachmentBytes(kind) {
55161
55327
  if (kind === "image") {
@@ -55300,19 +55466,12 @@ var CodexlyLogController = class extends import_fastify.LogController {
55300
55466
  }
55301
55467
  }
55302
55468
  };
55303
- function normalizeJsonForFingerprint(value) {
55304
- if (Array.isArray(value)) {
55305
- return value.map(normalizeJsonForFingerprint);
55306
- }
55307
- if (typeof value !== "object" || value === null) {
55308
- return value;
55309
- }
55310
- return Object.fromEntries(
55311
- Object.entries(value).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, item]) => [key, normalizeJsonForFingerprint(item)])
55312
- );
55313
- }
55314
55469
  function fingerprintPayload(payload) {
55315
- return JSON.stringify(normalizeJsonForFingerprint(payload));
55470
+ const fingerprint = wrapper_default(payload);
55471
+ if (fingerprint === void 0) {
55472
+ throw new TypeError("Payload must be JSON-serializable");
55473
+ }
55474
+ return fingerprint;
55316
55475
  }
55317
55476
  function toPendingRequestHttpError(error) {
55318
55477
  switch (error.code) {
@@ -58378,9 +58537,119 @@ var registerProviderConnectionRoutes = (app, context, done) => {
58378
58537
  done();
58379
58538
  };
58380
58539
 
58540
+ // packages/server/src/bing-wallpaper.ts
58541
+ var BING_ORIGIN = "https://www.bing.com";
58542
+ var BING_METADATA_URL = `${BING_ORIGIN}/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN`;
58543
+ var FETCH_TIMEOUT_MS = 1e4;
58544
+ var MAX_METADATA_BYTES = 64 * 1024;
58545
+ var MAX_WALLPAPER_BYTES = 20 * 1024 * 1024;
58546
+ function fetchWithGlobal(input, init) {
58547
+ return globalThis.fetch(input, init);
58548
+ }
58549
+ async function readBoundedBody(response, maximumBytes, label) {
58550
+ if (!response.ok || response.body === null) {
58551
+ throw new Error(`Bing wallpaper ${label} request failed`);
58552
+ }
58553
+ const declaredLength = Number(response.headers.get("content-length"));
58554
+ if (Number.isFinite(declaredLength) && declaredLength > maximumBytes) {
58555
+ throw new Error(`Bing wallpaper ${label} response is too large`);
58556
+ }
58557
+ const chunks = [];
58558
+ let totalBytes = 0;
58559
+ const reader = response.body.getReader();
58560
+ let result = await reader.read();
58561
+ while (!result.done) {
58562
+ const chunk = result.value;
58563
+ totalBytes += chunk.byteLength;
58564
+ if (totalBytes > maximumBytes) {
58565
+ await reader.cancel();
58566
+ throw new Error(`Bing wallpaper ${label} response is too large`);
58567
+ }
58568
+ chunks.push(Buffer.from(chunk));
58569
+ result = await reader.read();
58570
+ }
58571
+ return Buffer.concat(chunks, totalBytes);
58572
+ }
58573
+ function readImageUrl(metadata) {
58574
+ let value;
58575
+ try {
58576
+ value = JSON.parse(metadata.toString("utf8"));
58577
+ } catch {
58578
+ throw new Error("Bing wallpaper returned invalid metadata");
58579
+ }
58580
+ const images = isRecord(value) ? value["images"] : null;
58581
+ const image = Array.isArray(images) ? images[0] : null;
58582
+ const path = isRecord(image) ? image["url"] : null;
58583
+ if (typeof path !== "string" || !path.startsWith("/")) {
58584
+ throw new Error("Bing wallpaper returned an invalid image URL");
58585
+ }
58586
+ const url = new URL(path, BING_ORIGIN);
58587
+ if (url.origin !== BING_ORIGIN || url.pathname !== "/th") {
58588
+ throw new Error("Bing wallpaper returned an invalid image URL");
58589
+ }
58590
+ return url.toString();
58591
+ }
58592
+ function isRecord(value) {
58593
+ return typeof value === "object" && value !== null && !Array.isArray(value);
58594
+ }
58595
+ async function loadWallpaper(fetcher) {
58596
+ const metadataResponse = await fetcher(BING_METADATA_URL, {
58597
+ redirect: "error",
58598
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
58599
+ });
58600
+ if (!metadataResponse.headers.get("content-type")?.startsWith("application/json")) {
58601
+ throw new Error("Bing wallpaper returned invalid metadata content type");
58602
+ }
58603
+ const metadata = await readBoundedBody(metadataResponse, MAX_METADATA_BYTES, "metadata");
58604
+ const imageUrl = readImageUrl(metadata);
58605
+ const imageResponse = await fetcher(imageUrl, {
58606
+ redirect: "error",
58607
+ signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)
58608
+ });
58609
+ if (!imageResponse.headers.get("content-type")?.startsWith("image/jpeg")) {
58610
+ throw new Error("Bing wallpaper returned invalid image content type");
58611
+ }
58612
+ const body = await readBoundedBody(imageResponse, MAX_WALLPAPER_BYTES, "image");
58613
+ if (body.length < 4 || body[0] !== 255 || body[1] !== 216 || body[2] !== 255) {
58614
+ throw new Error("Bing wallpaper returned invalid JPEG content");
58615
+ }
58616
+ return { body, contentType: "image/jpeg" };
58617
+ }
58618
+ function createBingWallpaperService({
58619
+ fetcher = fetchWithGlobal
58620
+ } = {}) {
58621
+ let cached = null;
58622
+ let pending = null;
58623
+ let loadGeneration = 0;
58624
+ return {
58625
+ read(day) {
58626
+ if (cached?.day === day) return Promise.resolve(cached.wallpaper);
58627
+ if (pending?.day === day) return pending.promise;
58628
+ const generation = ++loadGeneration;
58629
+ const promise = loadWallpaper(fetcher).then((wallpaper) => {
58630
+ if (generation === loadGeneration) cached = { day, wallpaper };
58631
+ return wallpaper;
58632
+ });
58633
+ pending = { day, promise };
58634
+ const clearPending = () => {
58635
+ if (pending?.promise === promise) pending = null;
58636
+ };
58637
+ void promise.then(clearPending, clearPending);
58638
+ return promise;
58639
+ }
58640
+ };
58641
+ }
58642
+
58381
58643
  // packages/server/src/routes/runtime-routes.ts
58382
58644
  var APP_UPDATE_HANDLER_TIMEOUT_MS = 15e4;
58645
+ var BingWallpaperQuerySchema = {
58646
+ additionalProperties: false,
58647
+ properties: { day: { pattern: "^\\d{4}-\\d{2}-\\d{2}$", type: "string" } },
58648
+ required: ["day"],
58649
+ type: "object"
58650
+ };
58383
58651
  var registerRuntimeRoutes = (app, context, done) => {
58652
+ const bingWallpaper = createBingWallpaperService();
58384
58653
  const {
58385
58654
  assertValidProjectDefaults: assertValidProjectDefaults2,
58386
58655
  capabilities,
@@ -58402,6 +58671,14 @@ var registerRuntimeRoutes = (app, context, done) => {
58402
58671
  { schema: { response: { 200: AppInfoResponseSchema } } },
58403
58672
  () => readAppInfo()
58404
58673
  );
58674
+ app.get(
58675
+ "/v1/workbench-background/bing",
58676
+ { schema: { querystring: BingWallpaperQuerySchema } },
58677
+ async (request, reply) => {
58678
+ const wallpaper = await bingWallpaper.read(request.query.day);
58679
+ return reply.type(wallpaper.contentType).send(wallpaper.body);
58680
+ }
58681
+ );
58405
58682
  app.post(
58406
58683
  "/v1/app-update",
58407
58684
  {