@bryanhu/codexly 0.12.0 → 0.13.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 (192) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +6 -4
  3. package/README.zh-CN.md +6 -4
  4. package/dist/{chunk-RGRRUTMD.js → chunk-G4BIMVEW.js} +67 -1
  5. package/dist/{chunk-7C6JMXNO.js → chunk-HHFZB7H6.js} +210 -17
  6. package/dist/{chunk-PBPNBQQH.js → chunk-OVQSIEIK.js} +1 -1
  7. package/dist/{chunk-LZVKMW5Y.js → chunk-TVRHN6RY.js} +165 -2
  8. package/dist/cli.js +49 -9
  9. package/dist/client/index.js +36 -2
  10. package/dist/protocol/index.js +1 -1
  11. package/dist/providers/codex/index.js +2 -2
  12. package/dist/server/index.js +4 -4
  13. package/dist/sqlite-state-worker.js +22 -5
  14. package/dist/web/.vite/manifest.json +184 -100
  15. package/dist/web/.vite/manifest.json.br +0 -0
  16. package/dist/web/.vite/manifest.json.gz +0 -0
  17. package/dist/web/assets/{button-group-C4BuwxSd.js → button-group-CaIXhcq-.js} +1 -1
  18. package/dist/web/assets/button-group-CaIXhcq-.js.br +0 -0
  19. package/dist/web/assets/button-group-CaIXhcq-.js.gz +0 -0
  20. package/dist/web/assets/context-menu-C6o4ShKC.js +1 -0
  21. package/dist/web/assets/context-menu-C6o4ShKC.js.br +0 -0
  22. package/dist/web/assets/context-menu-C6o4ShKC.js.gz +0 -0
  23. package/dist/web/assets/dist-Czw-hil0.js +1 -0
  24. package/dist/web/assets/dist-Czw-hil0.js.br +0 -0
  25. package/dist/web/assets/dist-Czw-hil0.js.gz +0 -0
  26. package/dist/web/assets/file-review-dialog-Cd_FWDJj.js +2 -0
  27. package/dist/web/assets/file-review-dialog-Cd_FWDJj.js.br +0 -0
  28. package/dist/web/assets/file-review-dialog-Cd_FWDJj.js.gz +0 -0
  29. package/dist/web/assets/git-history-panel-CkQhJ-Tz.js +2 -0
  30. package/dist/web/assets/git-history-panel-CkQhJ-Tz.js.br +0 -0
  31. package/dist/web/assets/git-history-panel-CkQhJ-Tz.js.gz +0 -0
  32. package/dist/web/assets/global-settings-dialog-B9ACq0CT.js +1 -0
  33. package/dist/web/assets/global-settings-dialog-B9ACq0CT.js.br +0 -0
  34. package/dist/web/assets/global-settings-dialog-B9ACq0CT.js.gz +0 -0
  35. package/dist/web/assets/index-CergXz2m.js +4 -0
  36. package/dist/web/assets/index-CergXz2m.js.br +0 -0
  37. package/dist/web/assets/index-CergXz2m.js.gz +0 -0
  38. package/dist/web/assets/index-jg-dNJI1.css +2 -0
  39. package/dist/web/assets/index-jg-dNJI1.css.br +0 -0
  40. package/dist/web/assets/index-jg-dNJI1.css.gz +0 -0
  41. package/dist/web/assets/info-whxTXvIJ.js +1 -0
  42. package/dist/web/assets/info-whxTXvIJ.js.br +0 -0
  43. package/dist/web/assets/info-whxTXvIJ.js.gz +0 -0
  44. package/dist/web/assets/initial-deps-CQxWMuPh.js +1 -0
  45. package/dist/web/assets/initial-deps-CQxWMuPh.js.br +0 -0
  46. package/dist/web/assets/initial-deps-CQxWMuPh.js.gz +0 -0
  47. package/dist/web/assets/initial-deps-Ds-edw-P.js +1 -0
  48. package/dist/web/assets/initial-deps-Ds-edw-P.js.br +0 -0
  49. package/dist/web/assets/initial-deps-Ds-edw-P.js.gz +0 -0
  50. package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js +1 -0
  51. package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js.br +0 -0
  52. package/dist/web/assets/installed-skills-pane-BmjTd0Qn.js.gz +0 -0
  53. package/dist/web/assets/{lazy-message-response-SxI8Oz6v.js → lazy-message-response-Cnc-bbSf.js} +2 -2
  54. package/dist/web/assets/lazy-message-response-Cnc-bbSf.js.br +0 -0
  55. package/dist/web/assets/lazy-message-response-Cnc-bbSf.js.gz +0 -0
  56. package/dist/web/assets/mcp-management-pane-CQPXfAO3.js +1 -0
  57. package/dist/web/assets/mcp-management-pane-CQPXfAO3.js.br +0 -0
  58. package/dist/web/assets/mcp-management-pane-CQPXfAO3.js.gz +0 -0
  59. package/dist/web/assets/{message-response-CTSQq8Ae.js → message-response-CamC0ebm.js} +1 -1
  60. package/dist/web/assets/message-response-CamC0ebm.js.br +0 -0
  61. package/dist/web/assets/message-response-CamC0ebm.js.gz +0 -0
  62. package/dist/web/assets/official-plugins-pane-BCxHJLaj.css +1 -0
  63. package/dist/web/assets/official-plugins-pane-BCxHJLaj.css.br +0 -0
  64. package/dist/web/assets/official-plugins-pane-BCxHJLaj.css.gz +0 -0
  65. package/dist/web/assets/official-plugins-pane-BqGBX0cD.js +1 -0
  66. package/dist/web/assets/official-plugins-pane-BqGBX0cD.js.br +0 -0
  67. package/dist/web/assets/official-plugins-pane-BqGBX0cD.js.gz +0 -0
  68. package/dist/web/assets/{project-file-popup-page-DX-AlvxF.js → project-file-popup-page-DCct78Pu.js} +1 -1
  69. package/dist/web/assets/project-file-popup-page-DCct78Pu.js.br +0 -0
  70. package/dist/web/assets/project-file-popup-page-DCct78Pu.js.gz +0 -0
  71. package/dist/web/assets/{project-source-panel-i4xpffAa.js → project-source-panel-BC6YVLSp.js} +2 -2
  72. package/dist/web/assets/project-source-panel-BC6YVLSp.js.br +0 -0
  73. package/dist/web/assets/project-source-panel-BC6YVLSp.js.gz +0 -0
  74. package/dist/web/assets/{prompt-input-CL1AA6_U.js → prompt-input-FNZNBIXc.js} +1 -1
  75. package/dist/web/assets/prompt-input-FNZNBIXc.js.br +0 -0
  76. package/dist/web/assets/prompt-input-FNZNBIXc.js.gz +0 -0
  77. package/dist/web/assets/{prompt-input-controls-Qsp2rk3i.js → prompt-input-controls-BTOpD8Y-.js} +1 -1
  78. package/dist/web/assets/prompt-input-controls-BTOpD8Y-.js.br +0 -0
  79. package/dist/web/assets/prompt-input-controls-BTOpD8Y-.js.gz +0 -0
  80. package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js +1 -0
  81. package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js.br +0 -0
  82. package/dist/web/assets/scheduled-task-date-time-picker-CL9Xb-R5.js.gz +0 -0
  83. package/dist/web/assets/{scheduled-task-floating-ui~scheduled-task-date-time-picker-BQ-Lfxrf.js → scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js} +1 -1
  84. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js.br +0 -0
  85. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BischM2-.js.gz +0 -0
  86. package/dist/web/assets/scheduled-task-schedule-DfXHCkgb.js +1 -0
  87. package/dist/web/assets/scheduled-task-schedule-DfXHCkgb.js.br +0 -0
  88. package/dist/web/assets/scheduled-task-schedule-DfXHCkgb.js.gz +0 -0
  89. package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js +2 -0
  90. package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js.br +0 -0
  91. package/dist/web/assets/scheduled-tasks-container-Bn6tqtCc.js.gz +0 -0
  92. package/dist/web/assets/sheet-CJD6cMoi.js +1 -0
  93. package/dist/web/assets/sheet-CJD6cMoi.js.br +0 -0
  94. package/dist/web/assets/sheet-CJD6cMoi.js.gz +0 -0
  95. package/dist/web/assets/skills-market-container-B8Mss3fh.js +2 -0
  96. package/dist/web/assets/skills-market-container-B8Mss3fh.js.br +0 -0
  97. package/dist/web/assets/skills-market-container-B8Mss3fh.js.gz +0 -0
  98. package/dist/web/assets/skills-market-container-C8okZy75.css +1 -0
  99. package/dist/web/assets/skills-market-container-C8okZy75.css.br +0 -0
  100. package/dist/web/assets/skills-market-container-C8okZy75.css.gz +0 -0
  101. package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js +1 -0
  102. package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js.br +0 -0
  103. package/dist/web/assets/third-party-marketplace-pane-BsSxaqQR.js.gz +0 -0
  104. package/dist/web/assets/workbench-composer-Co9mAWP_.js +10 -0
  105. package/dist/web/assets/workbench-composer-Co9mAWP_.js.br +0 -0
  106. package/dist/web/assets/workbench-composer-Co9mAWP_.js.gz +0 -0
  107. package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js +2 -0
  108. package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js.br +0 -0
  109. package/dist/web/assets/workbench-inspector-changes-DcJkQFAH.js.gz +0 -0
  110. package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js +1 -0
  111. package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js.br +0 -0
  112. package/dist/web/assets/workbench-pet-canvas-BR5AhUVL.js.gz +0 -0
  113. package/dist/web/assets/workbench-shell-5F-GWLMO.js +8 -0
  114. package/dist/web/assets/workbench-shell-5F-GWLMO.js.br +0 -0
  115. package/dist/web/assets/workbench-shell-5F-GWLMO.js.gz +0 -0
  116. package/dist/web/index.html +5 -5
  117. package/dist/web/index.html.br +0 -0
  118. package/dist/web/index.html.gz +0 -0
  119. package/package.json +1 -1
  120. package/dist/web/assets/button-group-C4BuwxSd.js.br +0 -0
  121. package/dist/web/assets/button-group-C4BuwxSd.js.gz +0 -0
  122. package/dist/web/assets/context-menu-DBdIkdO8.js +0 -1
  123. package/dist/web/assets/context-menu-DBdIkdO8.js.br +0 -0
  124. package/dist/web/assets/context-menu-DBdIkdO8.js.gz +0 -0
  125. package/dist/web/assets/dist-B5i0uBCy.js +0 -1
  126. package/dist/web/assets/dist-B5i0uBCy.js.br +0 -0
  127. package/dist/web/assets/dist-B5i0uBCy.js.gz +0 -0
  128. package/dist/web/assets/file-review-dialog-CfW8qcnH.js +0 -2
  129. package/dist/web/assets/file-review-dialog-CfW8qcnH.js.br +0 -0
  130. package/dist/web/assets/file-review-dialog-CfW8qcnH.js.gz +0 -0
  131. package/dist/web/assets/git-history-panel-DDCwLZ_v.js +0 -2
  132. package/dist/web/assets/git-history-panel-DDCwLZ_v.js.br +0 -0
  133. package/dist/web/assets/git-history-panel-DDCwLZ_v.js.gz +0 -0
  134. package/dist/web/assets/global-settings-dialog-Cw-2IvEc.js +0 -1
  135. package/dist/web/assets/global-settings-dialog-Cw-2IvEc.js.br +0 -0
  136. package/dist/web/assets/global-settings-dialog-Cw-2IvEc.js.gz +0 -0
  137. package/dist/web/assets/index-DZEhkOZz.js +0 -4
  138. package/dist/web/assets/index-DZEhkOZz.js.br +0 -0
  139. package/dist/web/assets/index-DZEhkOZz.js.gz +0 -0
  140. package/dist/web/assets/index-mb9dY6_F.css +0 -2
  141. package/dist/web/assets/index-mb9dY6_F.css.br +0 -0
  142. package/dist/web/assets/index-mb9dY6_F.css.gz +0 -0
  143. package/dist/web/assets/initial-deps-Ccn2HMTB.js +0 -1
  144. package/dist/web/assets/initial-deps-Ccn2HMTB.js.br +0 -0
  145. package/dist/web/assets/initial-deps-Ccn2HMTB.js.gz +0 -0
  146. package/dist/web/assets/initial-deps-D1tR2tqv.js +0 -1
  147. package/dist/web/assets/initial-deps-D1tR2tqv.js.br +0 -0
  148. package/dist/web/assets/initial-deps-D1tR2tqv.js.gz +0 -0
  149. package/dist/web/assets/lazy-message-response-SxI8Oz6v.js.br +0 -0
  150. package/dist/web/assets/lazy-message-response-SxI8Oz6v.js.gz +0 -0
  151. package/dist/web/assets/message-response-CTSQq8Ae.js.br +0 -0
  152. package/dist/web/assets/message-response-CTSQq8Ae.js.gz +0 -0
  153. package/dist/web/assets/project-file-popup-page-DX-AlvxF.js.br +0 -0
  154. package/dist/web/assets/project-file-popup-page-DX-AlvxF.js.gz +0 -0
  155. package/dist/web/assets/project-source-panel-i4xpffAa.js.br +0 -0
  156. package/dist/web/assets/project-source-panel-i4xpffAa.js.gz +0 -0
  157. package/dist/web/assets/prompt-input-CL1AA6_U.js.br +0 -0
  158. package/dist/web/assets/prompt-input-CL1AA6_U.js.gz +0 -0
  159. package/dist/web/assets/prompt-input-controls-Qsp2rk3i.js.br +0 -0
  160. package/dist/web/assets/prompt-input-controls-Qsp2rk3i.js.gz +0 -0
  161. package/dist/web/assets/scheduled-task-date-time-picker-B2_XJQa7.js +0 -1
  162. package/dist/web/assets/scheduled-task-date-time-picker-B2_XJQa7.js.br +0 -0
  163. package/dist/web/assets/scheduled-task-date-time-picker-B2_XJQa7.js.gz +0 -0
  164. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BQ-Lfxrf.js.br +0 -0
  165. package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-BQ-Lfxrf.js.gz +0 -0
  166. package/dist/web/assets/scheduled-task-schedule-DVyf2brf.js +0 -1
  167. package/dist/web/assets/scheduled-task-schedule-DVyf2brf.js.br +0 -0
  168. package/dist/web/assets/scheduled-task-schedule-DVyf2brf.js.gz +0 -0
  169. package/dist/web/assets/scheduled-tasks-container-DWk8eU-x.js +0 -2
  170. package/dist/web/assets/scheduled-tasks-container-DWk8eU-x.js.br +0 -0
  171. package/dist/web/assets/scheduled-tasks-container-DWk8eU-x.js.gz +0 -0
  172. package/dist/web/assets/skills-market-container-C9djEXQt.css +0 -1
  173. package/dist/web/assets/skills-market-container-C9djEXQt.css.br +0 -0
  174. package/dist/web/assets/skills-market-container-C9djEXQt.css.gz +0 -0
  175. package/dist/web/assets/skills-market-container-DGLB9mLM.js +0 -1
  176. package/dist/web/assets/skills-market-container-DGLB9mLM.js.br +0 -0
  177. package/dist/web/assets/skills-market-container-DGLB9mLM.js.gz +0 -0
  178. package/dist/web/assets/workbench-composer-BD9Ki4HB.js +0 -10
  179. package/dist/web/assets/workbench-composer-BD9Ki4HB.js.br +0 -0
  180. package/dist/web/assets/workbench-composer-BD9Ki4HB.js.gz +0 -0
  181. package/dist/web/assets/workbench-inspector-changes-DAh6jOqk.js +0 -2
  182. package/dist/web/assets/workbench-inspector-changes-DAh6jOqk.js.br +0 -0
  183. package/dist/web/assets/workbench-inspector-changes-DAh6jOqk.js.gz +0 -0
  184. package/dist/web/assets/workbench-pet-canvas-BDehkHlv.js +0 -1
  185. package/dist/web/assets/workbench-pet-canvas-BDehkHlv.js.br +0 -0
  186. package/dist/web/assets/workbench-pet-canvas-BDehkHlv.js.gz +0 -0
  187. package/dist/web/assets/workbench-shell-3eEtoMzo.js +0 -8
  188. package/dist/web/assets/workbench-shell-3eEtoMzo.js.br +0 -0
  189. package/dist/web/assets/workbench-shell-3eEtoMzo.js.gz +0 -0
  190. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~skills-market-container~workbench-inspecto~y5cwo2qi-DAfditVv.js → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js} +0 -0
  191. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~skills-market-container~workbench-inspecto~y5cwo2qi-DAfditVv.js.br → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js.br} +0 -0
  192. /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~skills-market-container~workbench-inspecto~y5cwo2qi-DAfditVv.js.gz → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-file-p~olri0nvu-DAfditVv.js.gz} +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.13.0] - 2026-09-07
8
+
9
+ ### 新增
10
+
11
+ - 重构扩展中心,支持统一管理已安装 Skills、官方 Plugins、MCP Servers 和 ClawHub 第三方市场。
12
+ - 完善定时任务调度持久化与队列恢复,支持应用重启后继续执行待处理任务。
13
+ - 为应用更新添加 npm 镜像源回退,提高版本检查、下载与安装的可用性。
14
+
15
+ ### 优化
16
+
17
+ - 优化工作台侧栏的项目搜索与导航布局,提升项目切换和常用入口的可发现性。
18
+
7
19
  ## [0.12.0] - 2026-09-05
8
20
 
9
21
  ### 新增
package/README.md CHANGED
@@ -41,7 +41,7 @@
41
41
  - Track active work on a task board, maintain project to-dos, and schedule persistent one-time or recurring tasks
42
42
  - Attach files and images, reference project files with `@`, answer MCP input requests, and ask asynchronous questions while a task runs
43
43
  - Choose the model, reasoning effort, Fast mode, approval behavior, and file access level for each task
44
- - Browse and safely install compatible Skills from the ClawHub marketplace
44
+ - Manage installed Skills, official Plugins, MCP servers, and compatible third-party Skills from ClawHub in one extension center
45
45
  - Organize ordered multi-root projects, archive project or temporary tasks, and permanently delete tasks when needed
46
46
  - Inspect, preview, rename, and delete project files; review diffs; manage branches and worktrees; and commit or push changes
47
47
  - Fork a task from an AI response and continue it in a new Git worktree
@@ -71,10 +71,12 @@ On first launch, sign in with ChatGPT or configure an OpenAI-compatible service
71
71
  For regular use, install Codexly globally:
72
72
 
73
73
  ```bash
74
- npm install --global @bryanhu/codexly
74
+ npm install --global @bryanhu/codexly@latest --registry=https://registry.npmmirror.com --prefer-offline || npm install --global @bryanhu/codexly@latest --registry=https://registry.npmjs.org --prefer-offline
75
75
  codexly
76
76
  ```
77
77
 
78
+ The installation command tries the China mirror first, falls back to the official registry on failure, and reuses the npm cache. `||` works in Bash, Zsh, cmd, and PowerShell 7+. In Windows PowerShell 5.1, run the command to the right of `||` separately if the first command fails.
79
+
78
80
  ## Usage
79
81
 
80
82
  Select **New task** for work that does not need a project. For repository work, add one or more host directories as ordered project roots, create a task, and submit your request with any required files, images, project references, or Skills. Archived tasks can be restored or permanently deleted from the project task list.
@@ -104,10 +106,10 @@ Quote passwords containing shell-special characters. LAN mode uses unencrypted H
104
106
 
105
107
  Run `codexly doctor` when startup, Codex, or local data checks fail. Run `codexly --help` for the current command and option reference.
106
108
 
107
- Interactive startup and **Settings > About** check for new releases. A global installation can also be updated with:
109
+ Interactive startup and **Settings > About** check for new releases. Built-in updates try the China mirror first for version checks, package downloads, and dependency installation, falling back to the official registry on failure and reusing your npm cache. New releases may appear later while the mirror synchronizes. A global installation can also be updated with:
108
110
 
109
111
  ```bash
110
- npm install --global @bryanhu/codexly@latest
112
+ npm install --global @bryanhu/codexly@latest --registry=https://registry.npmmirror.com --prefer-offline || npm install --global @bryanhu/codexly@latest --registry=https://registry.npmjs.org --prefer-offline
111
113
  ```
112
114
 
113
115
  ## Help
package/README.zh-CN.md CHANGED
@@ -11,7 +11,7 @@ Codexly 是一个在浏览器中使用 Codex 的本地 AI 编程工作台。它
11
11
  - 使用任务看板跟踪进行中的工作、维护项目待办,并创建持久化的一次性或周期定时任务
12
12
  - 添加文件与图片、使用 `@` 引用项目文件、回答 MCP 补充输入请求,并在任务执行期间异步提问
13
13
  - 为每个任务选择模型、思考量、快速模式、审批方式和文件访问范围
14
- - ClawHub Skill 市场浏览并安全安装兼容 Skills
14
+ - 在扩展中心统一管理已安装 Skills、官方 Plugins、MCP Servers,以及来自 ClawHub 的兼容第三方 Skills
15
15
  - 组织有序的多根项目、归档项目或临时任务,并按需永久删除任务
16
16
  - 查看、预览、重命名和删除项目文件,审查差异,管理分支与 worktree,并提交或推送变更
17
17
  - 从 AI 回复处分叉任务,在新的 Git worktree 中继续工作
@@ -41,10 +41,12 @@ Codexly 会自动打开浏览器。若未打开,请访问终端输出的地址
41
41
  经常使用时可以全局安装:
42
42
 
43
43
  ```bash
44
- npm install --global @bryanhu/codexly
44
+ npm install --global @bryanhu/codexly@latest --registry=https://registry.npmmirror.com --prefer-offline || npm install --global @bryanhu/codexly@latest --registry=https://registry.npmjs.org --prefer-offline
45
45
  codexly
46
46
  ```
47
47
 
48
+ 安装命令优先使用国内镜像,失败后回退官方源,并复用 npm 缓存。`||` 适用于 Bash、Zsh、cmd 和 PowerShell 7+;Windows PowerShell 5.1 请在第一条命令失败后单独执行 `||` 右侧的命令。
49
+
48
50
  ## 使用方式
49
51
 
50
52
  不依赖项目时,直接选择“新建任务”。处理仓库时,先添加一个或多个运行端目录作为有序的项目根,再创建任务,并按需附加文件、图片、项目引用或 Skills 后提交需求。归档的任务可以从项目任务列表中恢复或永久删除。
@@ -74,10 +76,10 @@ codexly start --lan
74
76
 
75
77
  启动、Codex 或本地数据检查失败时运行 `codexly doctor`。使用 `codexly --help` 查看当前命令和选项。
76
78
 
77
- 交互式启动和“设置 > 关于”会检查新版本。全局安装也可以通过以下命令更新:
79
+ 交互式启动和“设置 > 关于”会检查新版本。内置更新的版本查询、包下载和依赖安装优先使用国内镜像,失败后回退官方源;下载和安装复用用户的 npm 缓存。镜像同步期间可能稍晚显示新版本。全局安装也可以通过以下命令更新:
78
80
 
79
81
  ```bash
80
- npm install --global @bryanhu/codexly@latest
82
+ npm install --global @bryanhu/codexly@latest --registry=https://registry.npmmirror.com --prefer-offline || npm install --global @bryanhu/codexly@latest --registry=https://registry.npmjs.org --prefer-offline
81
83
  ```
82
84
 
83
85
  ## 获取帮助
@@ -2958,6 +2958,72 @@ var OpenSkillDirectoryResponseSchema = Type.Object(
2958
2958
  { status: Type.Literal("opened") },
2959
2959
  { additionalProperties: false }
2960
2960
  );
2961
+ var OfficialPluginAuthPolicySchema = Type.Union([
2962
+ Type.Literal("ON_INSTALL"),
2963
+ Type.Literal("ON_USE")
2964
+ ]);
2965
+ var OfficialPluginSummarySchema = Type.Object(
2966
+ {
2967
+ authPolicy: OfficialPluginAuthPolicySchema,
2968
+ availability: Type.Union([Type.Literal("AVAILABLE"), Type.Literal("DISABLED_BY_ADMIN")]),
2969
+ description: Type.String(),
2970
+ developerName: Type.Union([Type.String(), Type.Null()]),
2971
+ disabledReason: Type.Union([Type.String(), Type.Null()]),
2972
+ displayName: Type.String({ minLength: 1 }),
2973
+ enabled: Type.Boolean(),
2974
+ id: Type.String({ minLength: 1 }),
2975
+ installPolicy: Type.Union([
2976
+ Type.Literal("NOT_AVAILABLE"),
2977
+ Type.Literal("AVAILABLE"),
2978
+ Type.Literal("INSTALLED_BY_DEFAULT")
2979
+ ]),
2980
+ installed: Type.Boolean(),
2981
+ localVersion: Type.Union([Type.String(), Type.Null()]),
2982
+ logoUrl: Type.Union([Type.String(), Type.Null()]),
2983
+ marketplaceName: Type.String({ minLength: 1 }),
2984
+ marketplacePath: Type.Union([Type.String(), Type.Null()]),
2985
+ name: Type.String({ minLength: 1 }),
2986
+ pluginName: Type.String({ minLength: 1 }),
2987
+ version: Type.Union([Type.String(), Type.Null()])
2988
+ },
2989
+ { additionalProperties: false }
2990
+ );
2991
+ var OfficialPluginPageSchema = Type.Object(
2992
+ { data: Type.Array(OfficialPluginSummarySchema) },
2993
+ { additionalProperties: false }
2994
+ );
2995
+ var OfficialPluginAssetSchema = Type.Object(
2996
+ { description: Type.String(), name: Type.String({ minLength: 1 }) },
2997
+ { additionalProperties: false }
2998
+ );
2999
+ var OfficialPluginAppSchema = Type.Object(
3000
+ {
3001
+ description: Type.String(),
3002
+ id: Type.String({ minLength: 1 }),
3003
+ installUrl: Type.Union([Type.String(), Type.Null()]),
3004
+ name: Type.String({ minLength: 1 })
3005
+ },
3006
+ { additionalProperties: false }
3007
+ );
3008
+ var OfficialPluginDetailSchema = Type.Object(
3009
+ {
3010
+ ...OfficialPluginSummarySchema.properties,
3011
+ apps: Type.Array(OfficialPluginAppSchema),
3012
+ hooks: Type.Array(Type.String()),
3013
+ mcpServers: Type.Array(Type.String()),
3014
+ skills: Type.Array(OfficialPluginAssetSchema),
3015
+ websiteUrl: Type.Union([Type.String(), Type.Null()])
3016
+ },
3017
+ { additionalProperties: false }
3018
+ );
3019
+ var OfficialPluginInstallResultSchema = Type.Object(
3020
+ {
3021
+ appsNeedingAuth: Type.Array(OfficialPluginAppSchema),
3022
+ authPolicy: OfficialPluginAuthPolicySchema
3023
+ },
3024
+ { additionalProperties: false }
3025
+ );
3026
+ var OfficialPluginUninstallResultSchema = Type.Object({}, { additionalProperties: false });
2961
3027
 
2962
3028
  // packages/protocol/src/project-root.ts
2963
3029
  var ProjectRootPathSchema = Type.String({
@@ -5625,4 +5691,4 @@ var EventStreamMetricsResponseSchema = Type.Object(
5625
5691
  { additionalProperties: false }
5626
5692
  );
5627
5693
 
5628
- export { AGENT_FILE_ACCEPT, AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, AGENT_IMAGE_ACCEPT, AccessModeSchema, AccessStatusResponseSchema, AddAgentQueuedSubmissionRequestSchema, AddAgentQueuedSubmissionResponseSchema, AddProjectRequestSchema, AddProjectResponseSchema, AgentActivityItemSchema, AgentApprovalReviewActionSchema, AgentApprovalReviewItemSchema, AgentApprovalReviewStatusSchema, AgentApprovalsReviewerSchema, AgentAttachmentKindSchema, AgentAttachmentMediaTypeSchema, AgentAttachmentSchema, AgentAttachmentUploadResponseSchema, AgentBackgroundTerminalPageSchema, AgentBackgroundTerminalSchema, AgentCapabilitiesSchema, AgentCommandItemSchema, AgentCommandOutputOmissionSchema, AgentContextUsageSchema, AgentEventSchema, AgentFileChangeItemSchema, AgentFileChangeSchema, AgentGlobalApprovalPolicySchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, AgentGoalSchema, AgentGoalStatusSchema, AgentGranularApprovalConfigSchema, AgentGranularApprovalPolicySchema, AgentImageMediaTypeSchema, AgentItemSchema, AgentItemStatusSchema, AgentMcpServerConnectionStatusSchema, AgentMcpServerFailureReasonSchema, AgentMcpServerPageSchema, AgentMcpServerSchema, AgentMcpServerStartupStatusSchema, AgentMessageAttachmentSchema, AgentMessageItemSchema, AgentMessagePhaseSchema, AgentMessageSkillSchema, AgentModelPageSchema, AgentModelSchema, AgentMutationErrorCodeSchema, AgentMutationErrorSchema, AgentPlanItemSchema, AgentPlanSchema, AgentPlanStepSchema, AgentPlanStepStatusSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AgentPromptInputSchema, AgentProviderAccountSchema, AgentProviderConnectionMutationResponseSchema, AgentProviderConnectionRecordSchema, AgentProviderConnectionStateSchema, AgentProviderConnectionStatusSchema, AgentProviderModeSchema, AgentProviderPendingLoginSchema, AgentQueuedSubmissionPageSchema, AgentQueuedSubmissionSchema, AgentQueuedSubmissionStatusSchema, AgentReasoningEffortOptionSchema, AgentReasoningItemSchema, AgentReviewItemSchema, AgentReviewTargetSchema, AgentSandboxModeSchema, AgentSkillPageSchema, AgentSkillReferenceSchema, AgentSkillSchema, AgentSkillScopeSchema, AgentTaskPageSchema, AgentTaskSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, AgentTaskSnapshotResponseSchema, AgentTaskSnapshotSchema, AgentToolItemSchema, AgentTurnApprovalPolicySchema, AgentTurnOptionsSchema, AgentTurnSchema, AgentTurnStatusSchema, AppInfoResponseSchema, AppUpdateProgressPhaseSchema, AppUpdateProgressResponseSchema, AppUpdateProgressSchema, AppUpdateStatusSchema, ArchiveAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, CancelProviderLoginRequestSchema, ClawhubSkillDetailSchema, ClawhubSkillPageSchema, ClawhubSkillSummarySchema, ClawhubSkillVersionSchema, ClearAgentGoalResponseSchema, CommandApprovalPendingRequestSchema, CommandOutputDeltaEventSchema, CommitProjectChangesRequestSchema, CommitProjectChangesResponseSchema, CompactAgentTaskRequestSchema, CompactAgentTaskResponseSchema, ConfigureCustomProviderRequestSchema, ConfigureCustomProviderResponseSchema, ConfiguredMcpServerPageSchema, ConfiguredMcpServerSchema, ConnectionReadySchema, CreateProjectBranchRequestSchema, CreateProjectWorktreeRequestSchema, DEFAULT_AGENT_GRANULAR_APPROVAL_POLICY, DEFAULT_COMMIT_MESSAGE_MODEL, DeleteAgentQueuedSubmissionResponseSchema, DeleteAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteScheduledTaskResponseSchema, EventBatchSchema, EventCheckpointSchema, EventStreamMessageSchema, EventStreamMetricsResponseSchema, EventStreamProjectMetricsSchema, FileChangeApprovalPendingRequestSchema, FileChangeUpdatedEventSchema, FilesystemRootSchema, ForkAgentTaskRequestSchema, ForkAgentTaskResponseSchema, GenerateCommitMessageRequestSchema, GenerateCommitMessageResponseSchema, GoalClearedEventSchema, GoalUpdatedEventSchema, HasPropertyKey2 as HasPropertyKey, HealthResponseSchema, HostFileEntrySchema, HostFileKindSchema, HostFileListingSchema, HostFileQuerySchema, ImportHostAttachmentRequestSchema, IndexFromPropertyKeys, InstallAppUpdateRequestSchema, InstallAppUpdateResponseSchema, InstalledSkillPageSchema, InstalledSkillSchema, InterruptAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, IsArray2 as IsArray, IsAsyncIterator2 as IsAsyncIterator, IsBigInt2 as IsBigInt, IsBoolean2 as IsBoolean, IsDate2 as IsDate, IsFunction2 as IsFunction, IsInteger, IsIterator2 as IsIterator, IsKind, IsMap, IsNull2 as IsNull, IsNumber2 as IsNumber, IsObject2 as IsObject, IsPromise, IsSchema, IsSet, IsStandardObject, IsString2 as IsString, IsSymbol2 as IsSymbol, IsTemplateLiteralFinite, IsTransform, IsTypedArray, IsUint8Array2 as IsUint8Array, IsUndefined2 as IsUndefined, IsUndefined3 as IsUndefined2, IsValueType, ItemCompletedEventSchema, ItemStartedEventSchema, KeyOfPattern, KeyOfPropertyKeys, Kind, Literal, LogoutAccessResponseSchema, MAX_AGENT_ATTACHMENT_BYTES, MAX_AGENT_FILE_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_TEXT_BYTES, MAX_EVENT_BATCH_SIZE, MAX_REALTIME_DIFF_BYTES, MAX_REALTIME_FILE_CHANGES, McpElicitationFieldSchema, McpElicitationOptionSchema, McpElicitationPendingRequestSchema, McpElicitationResolutionSchema, MessageDeltaEventSchema, Never, Object2 as Object, OpenAgentTaskAttachmentRequestSchema, OpenAgentTaskAttachmentResponseSchema, OpenProjectRequestSchema, OpenProjectResponseSchema, OpenSkillDirectoryResponseSchema, PairAccessRequestSchema, PairAccessResponseSchema, PendingApprovalDecisionSchema, PendingPermissionCategorySchema, PendingRequestCreatedEventSchema, PendingRequestExpiredEventSchema, PendingRequestResolvedEventSchema, PendingRequestSchema, PendingRequestStatusSchema, PendingUserInputOptionSchema, PendingUserInputQuestionSchema, PermissionApprovalPendingRequestSchema, PinAgentTaskRequestSchema, PinAgentTaskResponseSchema, PlanUpdatedEventSchema, ProjectDirectoryEntrySchema, ProjectDirectoryListingSchema, ProjectDirectoryPathSchema, ProjectDirectoryQuerySchema, ProjectFileNameSchema, ProjectFileReferencePathSchema, ProjectFileSearchEntrySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, ProjectFileSearchSessionIdSchema, ProjectFileTreeEntrySchema, ProjectFileTreeQuerySchema, ProjectFileTreeSchema, ProjectGitCommitFileDiffQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileSchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitSchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitMetadataChangedEventSchema, ProjectGitStatusQuerySchema, ProjectGitStatusSchema, ProjectGitWorktreePageSchema, ProjectGitWorktreeSchema, ProjectOpenAppIdSchema, ProjectOpenAppKindSchema, ProjectOpenAppSchema, ProjectOpenCapabilitiesResponseSchema, ProjectOpenPlatformSchema, ProjectPageSchema, ProjectRelativePathSchema, ProjectRootIdSchema, ProjectRootInputSchema, ProjectRootInputsSchema, ProjectRootPathSchema, ProjectRootQuerySchema, ProjectRootSchema, ProjectRootsSchema, ProjectSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, ProjectWorktreeMutationResponseSchema, ProviderErrorEventSchema, QueueChangedEventSchema, ReasoningDeltaEventSchema, ReloadAgentMcpServersRequestSchema, ReloadAgentMcpServersResponseSchema, RemoveProjectRequestSchema, RemoveProjectResponseSchema, RenameAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameProjectFileRequestSchema, RenameProjectFileResponseSchema, RenameProjectRequestSchema, RenameProjectResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderProjectsRequestSchema, ReorderProjectsResponseSchema, ResolvePendingRequestRequestSchema, ResolvePendingRequestResponseSchema, ResyncRequiredSchema, ReviewAgentTaskRequestSchema, ReviewAgentTaskResponseSchema, ScheduledTaskInputSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskPageSchema, ScheduledTaskRunSchema, ScheduledTaskRunStatusSchema, ScheduledTaskScheduleSchema, ScheduledTaskSchema, SetMcpServerEnabledResponseSchema, SetScheduledTaskEnabledRequestSchema, SetSkillEnabledResponseSchema, SkillInstallResultSchema, SkillInstallScopeSchema, SkillsChangedEventSchema, StartAgentQueuedSubmissionRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTurnRequestSchema, StartAgentTurnResponseSchema, StartOfficialProviderLoginRequestSchema, StartOfficialProviderLoginResponseSchema, SteerAgentTurnRequestSchema, SteerAgentTurnResponseSchema, StopProjectFileSearchRequestSchema, StopProjectFileSearchResponseSchema, String, SwitchProjectBranchRequestSchema, SwitchProjectWorktreeRequestSchema, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, TaskMetadataChangedEventSchema, TaskRemovedEventSchema, TaskStatusUpdatedEventSchema, TemplateLiteralGenerate, TerminateAgentBackgroundTerminalResponseSchema, TransformKind, TurnCompletedEventSchema, TurnStartedEventSchema, Type, TypeBoxError, TypeSystemPolicy, UnarchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, Union, Unknown, UnsubscribeAgentTaskResponseSchema, UpdateAgentGoalRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UploadAgentFeedbackRequestSchema, UploadAgentFeedbackResponseSchema, UsageUpdatedEventSchema, UserInputPendingRequestSchema, WorkbenchPetAnimationFrameSchema, WorkbenchPetAnimationSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDescriptorSchema, WorkbenchPetDownloadRequestSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetFrameSchema, WorkbenchPetSettingsSchema, format_exports, isAgentFastModeAvailable, stripLeadingAgentSkillReferences, type_exports2 as type_exports };
5694
+ export { AGENT_FILE_ACCEPT, AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, AGENT_IMAGE_ACCEPT, AccessModeSchema, AccessStatusResponseSchema, AddAgentQueuedSubmissionRequestSchema, AddAgentQueuedSubmissionResponseSchema, AddProjectRequestSchema, AddProjectResponseSchema, AgentActivityItemSchema, AgentApprovalReviewActionSchema, AgentApprovalReviewItemSchema, AgentApprovalReviewStatusSchema, AgentApprovalsReviewerSchema, AgentAttachmentKindSchema, AgentAttachmentMediaTypeSchema, AgentAttachmentSchema, AgentAttachmentUploadResponseSchema, AgentBackgroundTerminalPageSchema, AgentBackgroundTerminalSchema, AgentCapabilitiesSchema, AgentCommandItemSchema, AgentCommandOutputOmissionSchema, AgentContextUsageSchema, AgentEventSchema, AgentFileChangeItemSchema, AgentFileChangeSchema, AgentGlobalApprovalPolicySchema, AgentGlobalSettingsResponseSchema, AgentGlobalSettingsSchema, AgentGoalSchema, AgentGoalStatusSchema, AgentGranularApprovalConfigSchema, AgentGranularApprovalPolicySchema, AgentImageMediaTypeSchema, AgentItemSchema, AgentItemStatusSchema, AgentMcpServerConnectionStatusSchema, AgentMcpServerFailureReasonSchema, AgentMcpServerPageSchema, AgentMcpServerSchema, AgentMcpServerStartupStatusSchema, AgentMessageAttachmentSchema, AgentMessageItemSchema, AgentMessagePhaseSchema, AgentMessageSkillSchema, AgentModelPageSchema, AgentModelSchema, AgentMutationErrorCodeSchema, AgentMutationErrorSchema, AgentPlanItemSchema, AgentPlanSchema, AgentPlanStepSchema, AgentPlanStepStatusSchema, AgentProjectDefaultsResponseSchema, AgentProjectDefaultsSchema, AgentPromptInputSchema, AgentProviderAccountSchema, AgentProviderConnectionMutationResponseSchema, AgentProviderConnectionRecordSchema, AgentProviderConnectionStateSchema, AgentProviderConnectionStatusSchema, AgentProviderModeSchema, AgentProviderPendingLoginSchema, AgentQueuedSubmissionPageSchema, AgentQueuedSubmissionSchema, AgentQueuedSubmissionStatusSchema, AgentReasoningEffortOptionSchema, AgentReasoningItemSchema, AgentReviewItemSchema, AgentReviewTargetSchema, AgentSandboxModeSchema, AgentSkillPageSchema, AgentSkillReferenceSchema, AgentSkillSchema, AgentSkillScopeSchema, AgentTaskPageSchema, AgentTaskSchema, AgentTaskSettingsResponseSchema, AgentTaskSettingsSchema, AgentTaskSnapshotResponseSchema, AgentTaskSnapshotSchema, AgentToolItemSchema, AgentTurnApprovalPolicySchema, AgentTurnOptionsSchema, AgentTurnSchema, AgentTurnStatusSchema, AppInfoResponseSchema, AppUpdateProgressPhaseSchema, AppUpdateProgressResponseSchema, AppUpdateProgressSchema, AppUpdateStatusSchema, ArchiveAgentTaskRequestSchema, ArchiveAgentTaskResponseSchema, CancelProviderLoginRequestSchema, ClawhubSkillDetailSchema, ClawhubSkillPageSchema, ClawhubSkillSummarySchema, ClawhubSkillVersionSchema, ClearAgentGoalResponseSchema, CommandApprovalPendingRequestSchema, CommandOutputDeltaEventSchema, CommitProjectChangesRequestSchema, CommitProjectChangesResponseSchema, CompactAgentTaskRequestSchema, CompactAgentTaskResponseSchema, ConfigureCustomProviderRequestSchema, ConfigureCustomProviderResponseSchema, ConfiguredMcpServerPageSchema, ConfiguredMcpServerSchema, ConnectionReadySchema, CreateProjectBranchRequestSchema, CreateProjectWorktreeRequestSchema, DEFAULT_AGENT_GRANULAR_APPROVAL_POLICY, DEFAULT_COMMIT_MESSAGE_MODEL, DeleteAgentQueuedSubmissionResponseSchema, DeleteAgentTaskRequestSchema, DeleteAgentTaskResponseSchema, DeleteProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteScheduledTaskResponseSchema, EventBatchSchema, EventCheckpointSchema, EventStreamMessageSchema, EventStreamMetricsResponseSchema, EventStreamProjectMetricsSchema, FileChangeApprovalPendingRequestSchema, FileChangeUpdatedEventSchema, FilesystemRootSchema, ForkAgentTaskRequestSchema, ForkAgentTaskResponseSchema, GenerateCommitMessageRequestSchema, GenerateCommitMessageResponseSchema, GoalClearedEventSchema, GoalUpdatedEventSchema, HasPropertyKey2 as HasPropertyKey, HealthResponseSchema, HostFileEntrySchema, HostFileKindSchema, HostFileListingSchema, HostFileQuerySchema, ImportHostAttachmentRequestSchema, IndexFromPropertyKeys, InstallAppUpdateRequestSchema, InstallAppUpdateResponseSchema, InstalledSkillPageSchema, InstalledSkillSchema, InterruptAgentTurnRequestSchema, InterruptAgentTurnResponseSchema, IsArray2 as IsArray, IsAsyncIterator2 as IsAsyncIterator, IsBigInt2 as IsBigInt, IsBoolean2 as IsBoolean, IsDate2 as IsDate, IsFunction2 as IsFunction, IsInteger, IsIterator2 as IsIterator, IsKind, IsMap, IsNull2 as IsNull, IsNumber2 as IsNumber, IsObject2 as IsObject, IsPromise, IsSchema, IsSet, IsStandardObject, IsString2 as IsString, IsSymbol2 as IsSymbol, IsTemplateLiteralFinite, IsTransform, IsTypedArray, IsUint8Array2 as IsUint8Array, IsUndefined2 as IsUndefined, IsUndefined3 as IsUndefined2, IsValueType, ItemCompletedEventSchema, ItemStartedEventSchema, KeyOfPattern, KeyOfPropertyKeys, Kind, Literal, LogoutAccessResponseSchema, MAX_AGENT_ATTACHMENT_BYTES, MAX_AGENT_FILE_BYTES, MAX_AGENT_FILE_TOTAL_BYTES, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, MAX_AGENT_IMAGES, MAX_AGENT_IMAGE_BYTES, MAX_AGENT_IMAGE_TOTAL_BYTES, MAX_AGENT_TEXT_BYTES, MAX_EVENT_BATCH_SIZE, MAX_REALTIME_DIFF_BYTES, MAX_REALTIME_FILE_CHANGES, McpElicitationFieldSchema, McpElicitationOptionSchema, McpElicitationPendingRequestSchema, McpElicitationResolutionSchema, MessageDeltaEventSchema, Never, Object2 as Object, OfficialPluginAppSchema, OfficialPluginAssetSchema, OfficialPluginAuthPolicySchema, OfficialPluginDetailSchema, OfficialPluginInstallResultSchema, OfficialPluginPageSchema, OfficialPluginSummarySchema, OfficialPluginUninstallResultSchema, OpenAgentTaskAttachmentRequestSchema, OpenAgentTaskAttachmentResponseSchema, OpenProjectRequestSchema, OpenProjectResponseSchema, OpenSkillDirectoryResponseSchema, PairAccessRequestSchema, PairAccessResponseSchema, PendingApprovalDecisionSchema, PendingPermissionCategorySchema, PendingRequestCreatedEventSchema, PendingRequestExpiredEventSchema, PendingRequestResolvedEventSchema, PendingRequestSchema, PendingRequestStatusSchema, PendingUserInputOptionSchema, PendingUserInputQuestionSchema, PermissionApprovalPendingRequestSchema, PinAgentTaskRequestSchema, PinAgentTaskResponseSchema, PlanUpdatedEventSchema, ProjectDirectoryEntrySchema, ProjectDirectoryListingSchema, ProjectDirectoryPathSchema, ProjectDirectoryQuerySchema, ProjectFileNameSchema, ProjectFileReferencePathSchema, ProjectFileSearchEntrySchema, ProjectFileSearchPageSchema, ProjectFileSearchQuerySchema, ProjectFileSearchSessionIdSchema, ProjectFileTreeEntrySchema, ProjectFileTreeQuerySchema, ProjectFileTreeSchema, ProjectGitCommitFileDiffQuerySchema, ProjectGitCommitFileDiffSchema, ProjectGitCommitFileSchema, ProjectGitCommitFilesPageSchema, ProjectGitCommitFilesQuerySchema, ProjectGitCommitSchema, ProjectGitHistoryPageSchema, ProjectGitHistoryQuerySchema, ProjectGitMetadataChangedEventSchema, ProjectGitStatusQuerySchema, ProjectGitStatusSchema, ProjectGitWorktreePageSchema, ProjectGitWorktreeSchema, ProjectOpenAppIdSchema, ProjectOpenAppKindSchema, ProjectOpenAppSchema, ProjectOpenCapabilitiesResponseSchema, ProjectOpenPlatformSchema, ProjectPageSchema, ProjectRelativePathSchema, ProjectRootIdSchema, ProjectRootInputSchema, ProjectRootInputsSchema, ProjectRootPathSchema, ProjectRootQuerySchema, ProjectRootSchema, ProjectRootsSchema, ProjectSchema, ProjectSourceFileQuerySchema, ProjectSourceFileSchema, ProjectWorktreeMutationResponseSchema, ProviderErrorEventSchema, QueueChangedEventSchema, ReasoningDeltaEventSchema, ReloadAgentMcpServersRequestSchema, ReloadAgentMcpServersResponseSchema, RemoveProjectRequestSchema, RemoveProjectResponseSchema, RenameAgentTaskRequestSchema, RenameAgentTaskResponseSchema, RenameProjectFileRequestSchema, RenameProjectFileResponseSchema, RenameProjectRequestSchema, RenameProjectResponseSchema, ReorderAgentQueuedSubmissionsRequestSchema, ReorderAgentQueuedSubmissionsResponseSchema, ReorderProjectsRequestSchema, ReorderProjectsResponseSchema, ResolvePendingRequestRequestSchema, ResolvePendingRequestResponseSchema, ResyncRequiredSchema, ReviewAgentTaskRequestSchema, ReviewAgentTaskResponseSchema, ScheduledTaskInputSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskPageSchema, ScheduledTaskRunSchema, ScheduledTaskRunStatusSchema, ScheduledTaskScheduleSchema, ScheduledTaskSchema, SetMcpServerEnabledResponseSchema, SetScheduledTaskEnabledRequestSchema, SetSkillEnabledResponseSchema, SkillInstallResultSchema, SkillInstallScopeSchema, SkillsChangedEventSchema, StartAgentQueuedSubmissionRequestSchema, StartAgentQueuedSubmissionResponseSchema, StartAgentTaskRequestSchema, StartAgentTaskResponseSchema, StartAgentTurnRequestSchema, StartAgentTurnResponseSchema, StartOfficialProviderLoginRequestSchema, StartOfficialProviderLoginResponseSchema, SteerAgentTurnRequestSchema, SteerAgentTurnResponseSchema, StopProjectFileSearchRequestSchema, StopProjectFileSearchResponseSchema, String, SwitchProjectBranchRequestSchema, SwitchProjectWorktreeRequestSchema, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, TaskMetadataChangedEventSchema, TaskRemovedEventSchema, TaskStatusUpdatedEventSchema, TemplateLiteralGenerate, TerminateAgentBackgroundTerminalResponseSchema, TransformKind, TurnCompletedEventSchema, TurnStartedEventSchema, Type, TypeBoxError, TypeSystemPolicy, UnarchiveAgentTaskRequestSchema, UnarchiveAgentTaskResponseSchema, Union, Unknown, UnsubscribeAgentTaskResponseSchema, UpdateAgentGoalRequestSchema, UpdateAgentGoalResponseSchema, UpdateAgentQueuedSubmissionRequestSchema, UpdateAgentQueuedSubmissionResponseSchema, UploadAgentFeedbackRequestSchema, UploadAgentFeedbackResponseSchema, UsageUpdatedEventSchema, UserInputPendingRequestSchema, WorkbenchPetAnimationFrameSchema, WorkbenchPetAnimationSchema, WorkbenchPetCatalogResponseSchema, WorkbenchPetDescriptorSchema, WorkbenchPetDownloadRequestSchema, WorkbenchPetDownloadResponseSchema, WorkbenchPetFrameSchema, WorkbenchPetSettingsSchema, format_exports, isAgentFastModeAvailable, stripLeadingAgentSkillReferences, type_exports2 as type_exports };
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from 'node:module';
2
- import { value_exports } from './chunk-PBPNBQQH.js';
3
- import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-LZVKMW5Y.js';
2
+ import { value_exports } from './chunk-OVQSIEIK.js';
3
+ import { require_pino, require_safe_stable_stringify, CodexProtocolMappingError, CodexProviderConnectionError, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError } from './chunk-TVRHN6RY.js';
4
4
  import { WorkbenchPetProviderError, PendingRequestResolutionError } from './chunk-RNTA4MFS.js';
5
- import { AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, Type, SkillInstallScopeSchema, ScheduledTaskSchema, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, 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, InstalledSkillPageSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResultSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, 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, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, ProjectWorktreeMutationResponseSchema, CreateProjectWorktreeRequestSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE } from './chunk-RGRRUTMD.js';
5
+ import { AGENT_FILE_EXTENSIONS, AGENT_FILE_MEDIA_TYPES, Type, SkillInstallScopeSchema, ScheduledTaskSchema, AgentTurnSchema, DEFAULT_COMMIT_MESSAGE_MODEL, TEMPORARY_TASK_API_PATH, TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_FILE_BYTES, AccessStatusResponseSchema, PairAccessRequestSchema, HealthResponseSchema, AppInfoResponseSchema, AppUpdateProgressResponseSchema, 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, InstalledSkillPageSchema, OfficialPluginPageSchema, OfficialPluginDetailSchema, OfficialPluginInstallResultSchema, OfficialPluginUninstallResultSchema, ClawhubSkillPageSchema, ClawhubSkillDetailSchema, ConfiguredMcpServerPageSchema, OpenSkillDirectoryResponseSchema, SetSkillEnabledResponseSchema, SetMcpServerEnabledResponseSchema, SkillInstallResultSchema, ScheduledTaskPageSchema, ScheduledTaskMutationResponseSchema, ScheduledTaskInputSchema, DeleteScheduledTaskResponseSchema, SetScheduledTaskEnabledRequestSchema, 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, AgentMessageAttachmentSchema, ProjectGitWorktreePageSchema, ProjectWorktreeMutationResponseSchema, CreateProjectWorktreeRequestSchema, SwitchProjectWorktreeRequestSchema, RenameProjectFileResponseSchema, RenameProjectFileRequestSchema, DeleteProjectFileResponseSchema, DeleteProjectFileRequestSchema, MAX_EVENT_BATCH_SIZE } from './chunk-G4BIMVEW.js';
6
6
  import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
7
7
  import { Buffer as Buffer$1 } from 'buffer';
8
8
  import { randomBytes, createHash, timingSafeEqual, randomUUID } from 'crypto';
@@ -65860,6 +65860,7 @@ function createSkillMarketService(options) {
65860
65860
  };
65861
65861
  return {
65862
65862
  getSkill: (owner, slug) => options.catalog.getSkill(owner, slug),
65863
+ getOfficialPlugin: (marketplaceName, marketplacePath, pluginName) => options.provider.getOfficialPlugin(marketplaceName, marketplacePath, pluginName),
65863
65864
  async installSkill(owner, slug, input) {
65864
65865
  const detail = await options.catalog.getSkill(owner, slug);
65865
65866
  if (detail.scanStatus !== "clean") {
@@ -65886,11 +65887,21 @@ function createSkillMarketService(options) {
65886
65887
  await options.provider.listInstalledSkills(projects, true);
65887
65888
  return result;
65888
65889
  },
65890
+ installOfficialPlugin: (marketplaceName, marketplacePath, pluginName, installAttemptId) => options.provider.installOfficialPlugin(
65891
+ marketplaceName,
65892
+ marketplacePath,
65893
+ pluginName,
65894
+ installAttemptId
65895
+ ),
65889
65896
  listConfiguredMcpServers: () => options.provider.listConfiguredMcpServers(),
65890
65897
  async listInstalledSkills(forceReload) {
65891
65898
  const { page } = await discover(forceReload);
65892
65899
  return { ...page, data: await enrichInstalledSkills(page.data) };
65893
65900
  },
65901
+ async listOfficialPlugins(forceRefetch) {
65902
+ const projects = await options.projectRepository.list();
65903
+ return options.provider.listOfficialPlugins(projects, forceRefetch);
65904
+ },
65894
65905
  listSkills: (query, cursor, sort2) => options.catalog.listSkills(query, cursor, sort2),
65895
65906
  async openSkillDirectory(path) {
65896
65907
  const { page } = await discover(false);
@@ -65911,7 +65922,8 @@ function createSkillMarketService(options) {
65911
65922
  return { status: "opened" };
65912
65923
  },
65913
65924
  setMcpServerEnabled: (name, enabled) => options.provider.setMcpServerEnabled(name, enabled),
65914
- setSkillEnabled: (path, enabled) => options.provider.setSkillEnabled(path, enabled)
65925
+ setSkillEnabled: (path, enabled) => options.provider.setSkillEnabled(path, enabled),
65926
+ uninstallOfficialPlugin: (pluginId) => options.provider.uninstallOfficialPlugin(pluginId)
65915
65927
  };
65916
65928
  }
65917
65929
  function createProjectRuntimeContext(options) {
@@ -66048,7 +66060,7 @@ var ProjectRuntimeLifecycleLock = class {
66048
66060
  };
66049
66061
  var TaskQueueBlockedError = class extends Error {
66050
66062
  constructor() {
66051
- super("Task queue is blocked by an edited submission");
66063
+ super("Task queue is blocked by an edited or unresolved submission");
66052
66064
  this.name = "TaskQueueBlockedError";
66053
66065
  }
66054
66066
  };
@@ -66061,6 +66073,7 @@ var TaskQueueItemNotFoundError = class extends Error {
66061
66073
  var PersistentTaskQueue = class {
66062
66074
  #attachmentStore;
66063
66075
  #locks = /* @__PURE__ */ new Map();
66076
+ #startResults = /* @__PURE__ */ new Map();
66064
66077
  #readTaskSettings;
66065
66078
  #repository;
66066
66079
  #resolveProviderInput;
@@ -66098,6 +66111,7 @@ var PersistentTaskQueue = class {
66098
66111
  queuedSubmissionId
66099
66112
  );
66100
66113
  if (deleted) {
66114
+ this.#startResults.delete(queuedSubmissionId);
66101
66115
  await this.#attachmentStore.releaseQueue(runtime.projectId, queuedSubmissionId);
66102
66116
  this.#publishChanged(runtime);
66103
66117
  }
@@ -66133,6 +66147,10 @@ var PersistentTaskQueue = class {
66133
66147
  }
66134
66148
  async update(runtime, queuedSubmissionId, input, status2) {
66135
66149
  return this.#withTaskLock(runtime, async () => {
66150
+ const current = (await this.#repository.listQueue(runtime.projectId, runtime.taskId)).find(
66151
+ (record4) => record4.id === queuedSubmissionId
66152
+ );
66153
+ if (current?.execution !== void 0) throw new TaskQueueBlockedError();
66136
66154
  const { attachmentIds } = await this.#resolveProviderInput(
66137
66155
  runtime.projectId,
66138
66156
  input,
@@ -66184,6 +66202,9 @@ var PersistentTaskQueue = class {
66184
66202
  if (editingIndex >= 0 && selectedIndex >= editingIndex) throw new TaskQueueBlockedError();
66185
66203
  const selected = records[selectedIndex];
66186
66204
  if (selected?.status !== "queued") throw new TaskQueueBlockedError();
66205
+ const recovered = selected.execution?.state === "started" ? selected.execution.turn : this.#startResults.get(selected.id);
66206
+ if (recovered !== void 0) return this.#finishStart(runtime, selected, recovered);
66207
+ if (selected.execution !== void 0) throw new TaskQueueBlockedError();
66187
66208
  const task = await runtime.provider.readTask(runtime.taskId);
66188
66209
  if (task?.turns.some((turn2) => turn2.status === "running") === true) {
66189
66210
  throw new TaskQueueBlockedError();
@@ -66195,9 +66216,21 @@ var PersistentTaskQueue = class {
66195
66216
  runtime.taskId
66196
66217
  );
66197
66218
  const settings = await this.#readTaskSettings(runtime.projectId, runtime.taskId);
66219
+ if (this.#startResults.size >= 1e3) throw new TaskQueueBlockedError();
66220
+ if (!await this.#repository.setQueueExecution(selected, { state: "starting" })) {
66221
+ throw new TaskQueueBlockedError();
66222
+ }
66198
66223
  const turn = await runtime.provider.startTurn(runtime.taskId, providerInput, settings);
66199
- await this.#repository.deleteQueue(runtime.projectId, runtime.taskId, selected.id);
66224
+ this.#startResults.set(selected.id, turn);
66225
+ return this.#finishStart(runtime, selected, turn);
66226
+ }
66227
+ async #finishStart(runtime, selected, turn) {
66228
+ if (!await this.#repository.setQueueExecution(selected, { state: "started", turn })) {
66229
+ throw new TaskQueueItemNotFoundError();
66230
+ }
66231
+ this.#startResults.delete(selected.id);
66200
66232
  await this.#attachmentStore.startQueue(runtime.projectId, selected.id, turn.id);
66233
+ await this.#repository.deleteQueue(runtime.projectId, runtime.taskId, selected.id);
66201
66234
  this.#publishChanged(runtime);
66202
66235
  return turn;
66203
66236
  }
@@ -66225,6 +66258,15 @@ function createMemoryTaskQueueRepository() {
66225
66258
  const records = /* @__PURE__ */ new Map();
66226
66259
  const key = (projectId, taskId) => `${projectId}\0${taskId}`;
66227
66260
  return {
66261
+ setQueueExecution(record3, execution) {
66262
+ const queue = records.get(key(record3.projectId, record3.taskId)) ?? [];
66263
+ const index = queue.findIndex((item) => item.id === record3.id);
66264
+ const current = queue[index];
66265
+ if (current === void 0 || execution.state === "starting" && current.execution !== void 0)
66266
+ return Promise.resolve(false);
66267
+ queue[index] = { ...current, execution };
66268
+ return Promise.resolve(true);
66269
+ },
66228
66270
  addQueue(record3) {
66229
66271
  const queue = records.get(key(record3.projectId, record3.taskId)) ?? [];
66230
66272
  queue.push(record3);
@@ -66257,7 +66299,8 @@ function createMemoryTaskQueueRepository() {
66257
66299
  const queue = records.get(key(projectId, taskId)) ?? [];
66258
66300
  const index = queue.findIndex((record3) => record3.id === queuedSubmissionId);
66259
66301
  const current = queue[index];
66260
- if (current === void 0) return Promise.resolve(void 0);
66302
+ if (current === void 0 || current.execution !== void 0)
66303
+ return Promise.resolve(void 0);
66261
66304
  const updated = { ...current, input, status: status2 };
66262
66305
  queue[index] = updated;
66263
66306
  return Promise.resolve(updated);
@@ -70096,6 +70139,32 @@ var MarketQuerySchema = Type.Object(
70096
70139
  },
70097
70140
  { additionalProperties: false }
70098
70141
  );
70142
+ var OfficialPluginParamsSchema = Type.Object(
70143
+ {
70144
+ marketplaceName: Type.String({ maxLength: 160, minLength: 1 }),
70145
+ pluginName: Type.String({ maxLength: 240, minLength: 1 })
70146
+ },
70147
+ { additionalProperties: false }
70148
+ );
70149
+ var OfficialPluginQuerySchema = Type.Object(
70150
+ { marketplacePath: Type.Optional(Type.String({ maxLength: 4096, minLength: 1 })) },
70151
+ { additionalProperties: false }
70152
+ );
70153
+ var OfficialPluginListQuerySchema = Type.Object(
70154
+ { forceRefetch: Type.Optional(Type.Boolean()) },
70155
+ { additionalProperties: false }
70156
+ );
70157
+ var OfficialPluginInstallBodySchema = Type.Object(
70158
+ {
70159
+ installAttemptId: Type.String({ maxLength: 200, minLength: 1 }),
70160
+ marketplacePath: Type.Union([Type.String({ maxLength: 4096, minLength: 1 }), Type.Null()])
70161
+ },
70162
+ { additionalProperties: false }
70163
+ );
70164
+ var OfficialPluginUninstallBodySchema = Type.Object(
70165
+ { pluginId: Type.String({ maxLength: 300, minLength: 1 }) },
70166
+ { additionalProperties: false }
70167
+ );
70099
70168
  function toHttpError(error) {
70100
70169
  if (!(error instanceof SkillMarketError)) throw error;
70101
70170
  const statusByCode = {
@@ -70131,6 +70200,70 @@ var registerSkillMarketRoutes = (app, context, done) => {
70131
70200
  { schema: { response: { 200: InstalledSkillPageSchema } } },
70132
70201
  () => skillMarketService.listInstalledSkills(false)
70133
70202
  );
70203
+ app.get(
70204
+ "/v1/plugins/official",
70205
+ {
70206
+ schema: {
70207
+ querystring: OfficialPluginListQuerySchema,
70208
+ response: { 200: OfficialPluginPageSchema }
70209
+ }
70210
+ },
70211
+ (request2) => skillMarketService.listOfficialPlugins(request2.query.forceRefetch ?? false)
70212
+ );
70213
+ app.get(
70214
+ "/v1/plugins/official/:marketplaceName/:pluginName",
70215
+ {
70216
+ schema: {
70217
+ params: OfficialPluginParamsSchema,
70218
+ querystring: OfficialPluginQuerySchema,
70219
+ response: { 200: OfficialPluginDetailSchema, ...mutationErrors }
70220
+ }
70221
+ },
70222
+ (request2) => skillMarketService.getOfficialPlugin(
70223
+ request2.params.marketplaceName,
70224
+ request2.query.marketplacePath ?? null,
70225
+ request2.params.pluginName
70226
+ )
70227
+ );
70228
+ app.post(
70229
+ "/v1/plugins/official/:marketplaceName/:pluginName/install",
70230
+ {
70231
+ schema: {
70232
+ body: OfficialPluginInstallBodySchema,
70233
+ headers: IdempotencyHeadersSchema,
70234
+ params: OfficialPluginParamsSchema,
70235
+ response: { 200: OfficialPluginInstallResultSchema, ...mutationErrors }
70236
+ }
70237
+ },
70238
+ (request2) => runIdempotent(
70239
+ ["install-official-plugin", request2.params.marketplaceName, request2.params.pluginName],
70240
+ request2.headers["idempotency-key"],
70241
+ request2.body,
70242
+ () => skillMarketService.installOfficialPlugin(
70243
+ request2.params.marketplaceName,
70244
+ request2.body.marketplacePath,
70245
+ request2.params.pluginName,
70246
+ request2.body.installAttemptId
70247
+ )
70248
+ )
70249
+ );
70250
+ app.post(
70251
+ "/v1/plugins/official/:marketplaceName/:pluginName/uninstall",
70252
+ {
70253
+ schema: {
70254
+ body: OfficialPluginUninstallBodySchema,
70255
+ headers: IdempotencyHeadersSchema,
70256
+ params: OfficialPluginParamsSchema,
70257
+ response: { 200: OfficialPluginUninstallResultSchema, ...mutationErrors }
70258
+ }
70259
+ },
70260
+ (request2) => runIdempotent(
70261
+ ["uninstall-official-plugin", request2.params.marketplaceName, request2.params.pluginName],
70262
+ request2.headers["idempotency-key"],
70263
+ request2.body,
70264
+ () => skillMarketService.uninstallOfficialPlugin(request2.body.pluginId)
70265
+ )
70266
+ );
70134
70267
  app.get(
70135
70268
  "/v1/skills/market",
70136
70269
  { schema: { querystring: MarketQuerySchema, response: { 200: ClawhubSkillPageSchema } } },
@@ -73285,6 +73418,7 @@ var ScheduledTaskService = class {
73285
73418
  #repository;
73286
73419
  #persistTaskResources;
73287
73420
  #running = /* @__PURE__ */ new Set();
73421
+ #completions = /* @__PURE__ */ new Map();
73288
73422
  #startTask;
73289
73423
  #closed = false;
73290
73424
  #mutation = Promise.resolve();
@@ -73383,8 +73517,8 @@ var ScheduledTaskService = class {
73383
73517
  if (claim === void 0) {
73384
73518
  throw new ScheduledTaskServiceError("busy", "Scheduled task is already running");
73385
73519
  }
73386
- this.#running.add(id);
73387
73520
  await this.#replace(result.tasks);
73521
+ this.#running.add(id);
73388
73522
  this.#launch(claim);
73389
73523
  return claim.task;
73390
73524
  });
@@ -73402,14 +73536,41 @@ var ScheduledTaskService = class {
73402
73536
  return task;
73403
73537
  }
73404
73538
  #launch(claim) {
73405
- const launch = this.#startTask(claim.task).then((value) => ({ status: "fulfilled", value })).catch((reason) => ({ reason, status: "rejected" })).then(
73539
+ const launch = Promise.resolve().then(() => this.#startTask(claim.task)).then((value) => ({ status: "fulfilled", value })).catch((reason) => ({ reason, status: "rejected" })).then(
73406
73540
  (result) => this.#mutate(async () => {
73407
- this.#running.delete(claim.task.id);
73408
- await this.#replace(completeScheduledTaskRun(this.#tasks, claim, this.#now(), result));
73541
+ this.#completions.set(claim.task.id, { claim, finishedAtUnixMs: this.#now(), result });
73542
+ await this.#flushCompletions();
73409
73543
  })
73410
- ).finally(() => this.#inFlight.delete(launch));
73544
+ ).catch(() => {
73545
+ this.#scheduleRetry();
73546
+ }).finally(() => this.#inFlight.delete(launch));
73411
73547
  this.#inFlight.add(launch);
73412
73548
  }
73549
+ async #flushCompletions() {
73550
+ for (const [id, completion] of this.#completions) {
73551
+ await this.#replace(
73552
+ completeScheduledTaskRun(
73553
+ this.#tasks,
73554
+ completion.claim,
73555
+ completion.finishedAtUnixMs,
73556
+ completion.result
73557
+ )
73558
+ );
73559
+ this.#completions.delete(id);
73560
+ this.#running.delete(id);
73561
+ }
73562
+ }
73563
+ #scheduleRetry() {
73564
+ if (this.#timer !== void 0) clearTimeout(this.#timer);
73565
+ if (this.#closed) return;
73566
+ this.#timer = setTimeout(
73567
+ () => void this.#tick().catch(() => {
73568
+ this.#scheduleRetry();
73569
+ }),
73570
+ 1e3
73571
+ );
73572
+ this.#timer.unref();
73573
+ }
73413
73574
  #reschedule() {
73414
73575
  if (this.#timer !== void 0) clearTimeout(this.#timer);
73415
73576
  if (this.#closed) return;
@@ -73418,14 +73579,21 @@ var ScheduledTaskService = class {
73418
73579
  void 0
73419
73580
  );
73420
73581
  const delay2 = next === void 0 ? 24 * 60 * 60 * 1e3 : Math.max(1, next - this.#now());
73421
- this.#timer = setTimeout(() => void this.#tick(), Math.min(delay2, 2147483647));
73582
+ this.#timer = setTimeout(
73583
+ () => void this.#tick().catch(() => {
73584
+ this.#scheduleRetry();
73585
+ }),
73586
+ Math.min(delay2, this.#completions.size > 0 ? 1e3 : 2147483647)
73587
+ );
73422
73588
  this.#timer.unref();
73423
73589
  }
73424
73590
  async #tick() {
73425
73591
  await this.#mutate(async () => {
73592
+ if (this.#closed) return;
73593
+ await this.#flushCompletions();
73426
73594
  const result = claimScheduledTasks(this.#tasks, this.#running, this.#now());
73427
- for (const claim of result.claims) this.#running.add(claim.task.id);
73428
73595
  await this.#replace(result.tasks);
73596
+ for (const claim of result.claims) this.#running.add(claim.task.id);
73429
73597
  for (const claim of result.claims) this.#launch(claim);
73430
73598
  });
73431
73599
  }
@@ -74899,6 +75067,11 @@ var SQLITE_MIGRATIONS = [
74899
75067
  ON scheduled_task_attachments (project_id, attachment_id);
74900
75068
  `,
74901
75069
  version: 25
75070
+ },
75071
+ {
75072
+ name: "persist_queue_execution",
75073
+ sql: "ALTER TABLE task_queue ADD COLUMN execution_json TEXT;",
75074
+ version: 26
74902
75075
  }
74903
75076
  ];
74904
75077
 
@@ -74976,15 +75149,26 @@ var SqliteScheduledTaskRepository = class {
74976
75149
  }
74977
75150
  };
74978
75151
 
74979
- // packages/server/src/sqlite-state-repository.ts
75152
+ // packages/server/src/queue-record-persistence.ts
75153
+ var executionSchema = Type.Union([
75154
+ Type.Object({ state: Type.Literal("starting") }),
75155
+ Type.Object({ state: Type.Literal("started"), turn: AgentTurnSchema })
75156
+ ]);
74980
75157
  function parseQueueWorkerRecord(record3) {
74981
75158
  const input = JSON.parse(record3.inputJson);
74982
75159
  if (!value_exports.Check(AgentPromptInputSchema, input)) {
74983
75160
  throw new Error("Persisted task queue input is invalid");
74984
75161
  }
74985
- const { inputJson: _inputJson, ...identity } = record3;
74986
- return { ...identity, input };
75162
+ const { inputJson: _inputJson, executionJson, ...identity } = record3;
75163
+ if (executionJson === void 0) return { ...identity, input };
75164
+ const execution = JSON.parse(executionJson);
75165
+ if (!value_exports.Check(executionSchema, execution)) {
75166
+ throw new Error("Persisted task queue execution is invalid");
75167
+ }
75168
+ return { ...identity, execution, input };
74987
75169
  }
75170
+
75171
+ // packages/server/src/sqlite-state-repository.ts
74988
75172
  var DEFAULT_SQLITE_REQUEST_TIMEOUT_MS = 1e4;
74989
75173
  var SqliteStateRepository = class _SqliteStateRepository extends SqliteScheduledTaskRepository {
74990
75174
  #databasePath;
@@ -75166,6 +75350,15 @@ var SqliteStateRepository = class _SqliteStateRepository extends SqliteScheduled
75166
75350
  })
75167
75351
  );
75168
75352
  }
75353
+ setQueueExecution(record3, execution) {
75354
+ return this.#call("setTaskQueueExecution", {
75355
+ projectId: record3.projectId,
75356
+ taskId: record3.taskId,
75357
+ id: record3.id,
75358
+ executionJson: JSON.stringify(execution),
75359
+ claim: execution.state === "starting"
75360
+ });
75361
+ }
75169
75362
  deleteQueue(projectId, taskId, queuedSubmissionId) {
75170
75363
  return this.#call("deleteTaskQueueRecord", { projectId, queuedSubmissionId, taskId });
75171
75364
  }
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'node:module';
2
- import { IsArray, IsDate, IsTypedArray, IsMap, IsSet, IsObject, IsValueType, TypeBoxError, Object as Object$1, Unknown, String, Literal, Union, IsBoolean, IsBigInt, IsNull, IsNumber, IsString, IsSymbol, IsUint8Array, IsUndefined, Kind, type_exports, IsStandardObject, TypeSystemPolicy, format_exports, IsPromise, IsIterator, KeyOfPattern, IsSchema, IsInteger, IsFunction, IsAsyncIterator, Never, HasPropertyKey, IsTemplateLiteralFinite, TemplateLiteralGenerate, IsKind, KeyOfPropertyKeys, IsTransform, TransformKind, IsUndefined2, IndexFromPropertyKeys } from './chunk-RGRRUTMD.js';
2
+ import { IsArray, IsDate, IsTypedArray, IsMap, IsSet, IsObject, IsValueType, TypeBoxError, Object as Object$1, Unknown, String, Literal, Union, IsBoolean, IsBigInt, IsNull, IsNumber, IsString, IsSymbol, IsUint8Array, IsUndefined, Kind, type_exports, IsStandardObject, TypeSystemPolicy, format_exports, IsPromise, IsIterator, KeyOfPattern, IsSchema, IsInteger, IsFunction, IsAsyncIterator, Never, HasPropertyKey, IsTemplateLiteralFinite, TemplateLiteralGenerate, IsKind, KeyOfPropertyKeys, IsTransform, TransformKind, IsUndefined2, IndexFromPropertyKeys } from './chunk-G4BIMVEW.js';
3
3
  import { __export } from './chunk-K6J42667.js';
4
4
 
5
5
  createRequire(import.meta.url);