@toddzheng024/dscode-desktop 0.0.0-stage → 0.7.33

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 (484) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -2
  3. package/THIRD_PARTY_NOTICES.md +30 -0
  4. package/bin/apply_patch +9 -0
  5. package/cordis.patch.yml +433 -0
  6. package/docs/CHANGELOG.md +641 -0
  7. package/docs/account-login.md +44 -0
  8. package/docs/auto-review.md +128 -0
  9. package/docs/browser-use.md +783 -0
  10. package/docs/computer-use.md +81 -0
  11. package/docs/custom-providers.md +88 -0
  12. package/docs/demo.md +76 -0
  13. package/docs/distribution.md +58 -0
  14. package/docs/dscode-ultra.md +75 -0
  15. package/docs/email.md +296 -0
  16. package/docs/exec.md +40 -0
  17. package/docs/hub-distribution.md +190 -0
  18. package/docs/memory.md +121 -0
  19. package/docs/opencode-go.md +61 -0
  20. package/docs/plugin-hub.md +68 -0
  21. package/docs/releases/0.2.0.md +28 -0
  22. package/docs/releases/0.3.0.md +21 -0
  23. package/docs/releases/0.4.0.md +20 -0
  24. package/docs/releases/0.5.0.md +19 -0
  25. package/docs/releases/0.6.0.md +20 -0
  26. package/docs/releases/0.7.0.md +22 -0
  27. package/docs/releases/0.7.1.md +20 -0
  28. package/docs/releases/0.7.10.md +10 -0
  29. package/docs/releases/0.7.11.md +17 -0
  30. package/docs/releases/0.7.12.md +11 -0
  31. package/docs/releases/0.7.13.md +12 -0
  32. package/docs/releases/0.7.14.md +11 -0
  33. package/docs/releases/0.7.15.md +11 -0
  34. package/docs/releases/0.7.16.md +10 -0
  35. package/docs/releases/0.7.17.md +12 -0
  36. package/docs/releases/0.7.18.md +13 -0
  37. package/docs/releases/0.7.19.md +8 -0
  38. package/docs/releases/0.7.2.md +19 -0
  39. package/docs/releases/0.7.20.md +10 -0
  40. package/docs/releases/0.7.21.md +9 -0
  41. package/docs/releases/0.7.22.md +11 -0
  42. package/docs/releases/0.7.23.md +14 -0
  43. package/docs/releases/0.7.24.md +11 -0
  44. package/docs/releases/0.7.25.md +8 -0
  45. package/docs/releases/0.7.26.md +18 -0
  46. package/docs/releases/0.7.27.md +8 -0
  47. package/docs/releases/0.7.28.md +22 -0
  48. package/docs/releases/0.7.29.md +12 -0
  49. package/docs/releases/0.7.3.md +23 -0
  50. package/docs/releases/0.7.30.md +19 -0
  51. package/docs/releases/0.7.31.md +14 -0
  52. package/docs/releases/0.7.32.md +14 -0
  53. package/docs/releases/0.7.33.md +30 -0
  54. package/docs/releases/0.7.4.md +16 -0
  55. package/docs/releases/0.7.5.md +18 -0
  56. package/docs/releases/0.7.6.md +29 -0
  57. package/docs/releases/0.7.7.md +36 -0
  58. package/docs/releases/0.7.8.md +14 -0
  59. package/docs/releases/0.7.9.md +15 -0
  60. package/docs/session-bridge.md +80 -0
  61. package/docs/session-cards.md +53 -0
  62. package/docs/session-communication.md +186 -0
  63. package/docs/session-metrics.md +41 -0
  64. package/docs/skills.md +81 -0
  65. package/docs/triggers.md +338 -0
  66. package/docs/tui-commands.md +204 -0
  67. package/extensions/browser/manifest.json +22 -0
  68. package/extensions/browser/popup.css +6 -0
  69. package/extensions/browser/popup.html +11 -0
  70. package/extensions/browser/popup.mjs +47 -0
  71. package/extensions/browser/protocol.mjs +168 -0
  72. package/extensions/browser/worker.mjs +94 -0
  73. package/icon.svg +7 -0
  74. package/locale/en.json +6 -0
  75. package/locale/zh-cn.json +6 -0
  76. package/node_modules/@deepseek-ai/node-addon-system/LICENSE +21 -0
  77. package/node_modules/@deepseek-ai/node-addon-system/README.i18n.yaml +6 -0
  78. package/node_modules/@deepseek-ai/node-addon-system/README.md +15 -0
  79. package/node_modules/@deepseek-ai/node-addon-system/README.zh.md +15 -0
  80. package/node_modules/@deepseek-ai/node-addon-system/lib/flock.d.ts +13 -0
  81. package/node_modules/@deepseek-ai/node-addon-system/lib/flock.js +51 -0
  82. package/node_modules/@deepseek-ai/node-addon-system/lib/index.d.ts +73 -0
  83. package/node_modules/@deepseek-ai/node-addon-system/lib/index.js +98 -0
  84. package/node_modules/@deepseek-ai/node-addon-system/package.json +45 -0
  85. package/node_modules/@deepseek-ai/node-addon-system/src/flock.c +164 -0
  86. package/node_modules/@deepseek-ai/node-addon-system/src/main.c +298 -0
  87. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/LICENSE +28 -0
  88. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.i18n.yaml +6 -0
  89. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.md +9 -0
  90. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/README.zh.md +9 -0
  91. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/bin/system.node +0 -0
  92. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/package.json +31 -0
  93. package/node_modules/@deepseek-ai/node-addon-system-darwin-arm64/prebuilds.json +6 -0
  94. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/LICENSE +28 -0
  95. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.i18n.yaml +6 -0
  96. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.md +9 -0
  97. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/README.zh.md +9 -0
  98. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/bin/system.node +0 -0
  99. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/package.json +31 -0
  100. package/node_modules/@deepseek-ai/node-addon-system-darwin-x64/prebuilds.json +6 -0
  101. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/LICENSE +28 -0
  102. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.i18n.yaml +6 -0
  103. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.md +11 -0
  104. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/README.zh.md +11 -0
  105. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/glibc/system.node +0 -0
  106. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/landlock-run +0 -0
  107. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/bin/musl/system.node +0 -0
  108. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/package.json +31 -0
  109. package/node_modules/@deepseek-ai/node-addon-system-linux-arm64/prebuilds.json +24 -0
  110. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/LICENSE +28 -0
  111. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.i18n.yaml +6 -0
  112. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.md +11 -0
  113. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/README.zh.md +11 -0
  114. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/glibc/system.node +0 -0
  115. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/landlock-run +0 -0
  116. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/bin/musl/system.node +0 -0
  117. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/package.json +31 -0
  118. package/node_modules/@deepseek-ai/node-addon-system-linux-x64/prebuilds.json +24 -0
  119. package/package.json +156 -4
  120. package/plugins/account/index.mjs +178 -0
  121. package/plugins/account/state.mjs +123 -0
  122. package/plugins/auto-review/audit.mjs +24 -0
  123. package/plugins/auto-review/index.mjs +267 -0
  124. package/plugins/auto-review/policy.mjs +92 -0
  125. package/plugins/browser/SKILL.md +158 -0
  126. package/plugins/browser/access.mjs +143 -0
  127. package/plugins/browser/config.mjs +60 -0
  128. package/plugins/browser/connection.mjs +385 -0
  129. package/plugins/browser/desktop-client.mjs +282 -0
  130. package/plugins/browser/desktop-host.mjs +74 -0
  131. package/plugins/browser/document-identity.mjs +57 -0
  132. package/plugins/browser/extension-relay.mjs +66 -0
  133. package/plugins/browser/files.mjs +32 -0
  134. package/plugins/browser/index.mjs +235 -0
  135. package/plugins/browser/mcp-entry.mjs +18 -0
  136. package/plugins/browser/mcp-tools.mjs +21 -0
  137. package/plugins/browser/presentation.mjs +45 -0
  138. package/plugins/browser/preview.mjs +77 -0
  139. package/plugins/browser/review.mjs +20 -0
  140. package/plugins/browser/screenshots.mjs +35 -0
  141. package/plugins/clipboard-image/clipboard-image.swift +56 -0
  142. package/plugins/clipboard-image/index.mjs +70 -0
  143. package/plugins/code-review/baseline.mjs +143 -0
  144. package/plugins/code-review/git.mjs +163 -0
  145. package/plugins/code-review/index.mjs +236 -0
  146. package/plugins/compaction/engine.mjs +304 -0
  147. package/plugins/compaction/tetris.mjs +65 -0
  148. package/plugins/compaction/threshold.mjs +98 -0
  149. package/plugins/computer-use/DESKTOP-SKILL.md +64 -0
  150. package/plugins/computer-use/desktop-host.mjs +75 -0
  151. package/plugins/computer-use/desktop-skill.mjs +28 -0
  152. package/plugins/computer-use/desktop-upstream.mjs +3 -0
  153. package/plugins/computer-use/index.mjs +37 -0
  154. package/plugins/cordis-config/plain.mjs +31 -0
  155. package/plugins/credentials/index.mjs +73 -0
  156. package/plugins/custom/adapter.mjs +110 -0
  157. package/plugins/custom/config.mjs +85 -0
  158. package/plugins/custom/desktop-client.mjs +150 -0
  159. package/plugins/custom/desktop-host.mjs +78 -0
  160. package/plugins/custom/images.mjs +32 -0
  161. package/plugins/custom/index.mjs +145 -0
  162. package/plugins/custom/wire.mjs +179 -0
  163. package/plugins/desktop/client.mjs +1041 -0
  164. package/plugins/desktop/index.mjs +10 -0
  165. package/plugins/desktop/shell-environment.mjs +9 -0
  166. package/plugins/desktop-workspace/hooks.mjs +29 -0
  167. package/plugins/desktop-workspace/index.mjs +37 -0
  168. package/plugins/dscode/board.mjs +260 -0
  169. package/plugins/dscode/child-target.mjs +11 -0
  170. package/plugins/dscode/control.mjs +17 -0
  171. package/plugins/dscode/desktop-client.mjs +55 -0
  172. package/plugins/dscode/desktop-host.mjs +37 -0
  173. package/plugins/dscode/index.mjs +270 -0
  174. package/plugins/email/cli.mjs +32 -0
  175. package/plugins/email/contacts.mjs +36 -0
  176. package/plugins/email/desktop-client.mjs +117 -0
  177. package/plugins/email/desktop-host.mjs +54 -0
  178. package/plugins/email/desktop-service.mjs +106 -0
  179. package/plugins/email/gmail-oauth.mjs +69 -0
  180. package/plugins/email/gmail-store.mjs +2 -0
  181. package/plugins/email/gmail.mjs +194 -0
  182. package/plugins/email/imap.mjs +136 -0
  183. package/plugins/email/inbox.d.mts +25 -0
  184. package/plugins/email/inbox.mjs +76 -0
  185. package/plugins/email/smtp.mjs +70 -0
  186. package/plugins/email/store.mjs +32 -0
  187. package/plugins/email-tools/index.mjs +46 -0
  188. package/plugins/exec/cli.mjs +64 -0
  189. package/plugins/exec/index.mjs +112 -0
  190. package/plugins/grok/adapter.mjs +114 -0
  191. package/plugins/grok/auth.mjs +76 -0
  192. package/plugins/grok/billing.mjs +146 -0
  193. package/plugins/grok/index.mjs +122 -0
  194. package/plugins/grok/models.mjs +129 -0
  195. package/plugins/grok/status.mjs +28 -0
  196. package/plugins/grok/wire.mjs +268 -0
  197. package/plugins/hub/catalog.mjs +82 -0
  198. package/plugins/hub/desktop-client.mjs +114 -0
  199. package/plugins/hub/desktop-host.mjs +129 -0
  200. package/plugins/i18n/messages.d.mts +21 -0
  201. package/plugins/i18n/messages.mjs +537 -0
  202. package/plugins/jev/approval.mjs +131 -0
  203. package/plugins/jev/client.mjs +74 -0
  204. package/plugins/jev/index.mjs +99 -0
  205. package/plugins/memory/content.mjs +57 -0
  206. package/plugins/memory/desktop-host.mjs +3 -0
  207. package/plugins/memory/index.mjs +168 -0
  208. package/plugins/memory/pipeline.mjs +79 -0
  209. package/plugins/memory/store.mjs +93 -0
  210. package/plugins/message-source/kind.mjs +20 -0
  211. package/plugins/opencode-go/adapter.mjs +96 -0
  212. package/plugins/opencode-go/command.mjs +128 -0
  213. package/plugins/opencode-go/index.mjs +120 -0
  214. package/plugins/opencode-go/models.mjs +58 -0
  215. package/plugins/opencode-go/oauth.mjs +194 -0
  216. package/plugins/opencode-go/search.mjs +86 -0
  217. package/plugins/opencode-go/usage.mjs +119 -0
  218. package/plugins/opencode-go/version.mjs +10 -0
  219. package/plugins/opencode-go/wire.mjs +73 -0
  220. package/plugins/openrouter/adapter.mjs +232 -0
  221. package/plugins/openrouter/index.mjs +123 -0
  222. package/plugins/openrouter/models.mjs +157 -0
  223. package/plugins/openrouter/search.mjs +113 -0
  224. package/plugins/openrouter/wire.mjs +101 -0
  225. package/plugins/providers/catalog.mjs +160 -0
  226. package/plugins/providers/chat-messages.mjs +120 -0
  227. package/plugins/providers/chat-stream.mjs +174 -0
  228. package/plugins/providers/desktop-client.mjs +84 -0
  229. package/plugins/providers/desktop-host.mjs +63 -0
  230. package/plugins/providers/effort.mjs +35 -0
  231. package/plugins/providers/http-errors.mjs +50 -0
  232. package/plugins/providers/openrouter-account.mjs +171 -0
  233. package/plugins/session-bridge/client.mjs +106 -0
  234. package/plugins/session-bridge/communication.mjs +260 -0
  235. package/plugins/session-bridge/index.mjs +68 -0
  236. package/plugins/session-bridge/mailbox.mjs +267 -0
  237. package/plugins/session-bridge/paths.mjs +21 -0
  238. package/plugins/session-bridge/server.mjs +172 -0
  239. package/plugins/session-bridge/tasks.mjs +229 -0
  240. package/plugins/session-cards/content.mjs +64 -0
  241. package/plugins/session-cards/index.mjs +38 -0
  242. package/plugins/session-cards/manager.mjs +140 -0
  243. package/plugins/session-metrics/attribution.mjs +30 -0
  244. package/plugins/session-metrics/balance.mjs +81 -0
  245. package/plugins/session-metrics/desktop-client.mjs +62 -0
  246. package/plugins/session-metrics/desktop-host.mjs +46 -0
  247. package/plugins/session-metrics/index.mjs +96 -0
  248. package/plugins/session-metrics/pricing.mjs +84 -0
  249. package/plugins/session-metrics/rate.mjs +59 -0
  250. package/plugins/session-metrics/store.mjs +75 -0
  251. package/plugins/session-metrics/turns.mjs +134 -0
  252. package/plugins/session-metrics/view.mjs +271 -0
  253. package/plugins/time-marks/desktop-host.mjs +2 -0
  254. package/plugins/time-marks/index.mjs +116 -0
  255. package/plugins/time-marks/marks.mjs +152 -0
  256. package/plugins/triggers/cli.mjs +558 -0
  257. package/plugins/triggers/commands.mjs +143 -0
  258. package/plugins/triggers/config.mjs +264 -0
  259. package/plugins/triggers/desktop-client.mjs +155 -0
  260. package/plugins/triggers/desktop-host.mjs +88 -0
  261. package/plugins/triggers/desktop-management.mjs +97 -0
  262. package/plugins/triggers/desktop-scheduler.mjs +125 -0
  263. package/plugins/triggers/host.mjs +24 -0
  264. package/plugins/triggers/index.mjs +27 -0
  265. package/plugins/triggers/job-cli.mjs +110 -0
  266. package/plugins/triggers/jobs.mjs +156 -0
  267. package/plugins/triggers/launchd.mjs +101 -0
  268. package/plugins/triggers/lease.mjs +24 -0
  269. package/plugins/triggers/log.mjs +104 -0
  270. package/plugins/triggers/management.mjs +181 -0
  271. package/plugins/triggers/options.mjs +117 -0
  272. package/plugins/triggers/overlay.mjs +7 -0
  273. package/plugins/triggers/poll.mjs +65 -0
  274. package/plugins/triggers/run.mjs +157 -0
  275. package/plugins/triggers/schedule.mjs +40 -0
  276. package/plugins/triggers/scheduler-service.mjs +46 -0
  277. package/plugins/triggers/scheduler.mjs +92 -0
  278. package/plugins/triggers/session-run.mjs +125 -0
  279. package/plugins/triggers/session.mjs +48 -0
  280. package/plugins/triggers/source-emit.mjs +19 -0
  281. package/plugins/triggers/source-host.mjs +78 -0
  282. package/plugins/triggers/source-ingress.mjs +70 -0
  283. package/plugins/triggers/source-sandbox.mjs +35 -0
  284. package/plugins/triggers/sources.mjs +45 -0
  285. package/plugins/triggers/spool.mjs +145 -0
  286. package/plugins/triggers/tools.mjs +67 -0
  287. package/plugins/triggers/unattended.mjs +18 -0
  288. package/plugins/tui-tools/composition.mjs +28 -0
  289. package/plugins/tui-tools/desktop-host.mjs +2 -0
  290. package/plugins/tui-tools/doctor-cli.mjs +22 -0
  291. package/plugins/tui-tools/doctor.mjs +148 -0
  292. package/plugins/tui-tools/hook-sources.mjs +113 -0
  293. package/plugins/tui-tools/hooks.mjs +23 -0
  294. package/plugins/tui-tools/index.mjs +268 -0
  295. package/plugins/tui-tools/sandbox-runner.mjs +123 -0
  296. package/plugins/tui-tools/shell.mjs +27 -0
  297. package/plugins/tui-tools/update.mjs +111 -0
  298. package/plugins/tui-tools/workspace-discovery.mjs +129 -0
  299. package/plugins/ultra/policy.mjs +42 -0
  300. package/plugins/worktree-subagent/worktree.mjs +56 -0
  301. package/runtime-sources.json +94 -0
  302. package/vendor/bash/LICENSE +21 -0
  303. package/vendor/bash/index.js +717 -0
  304. package/vendor/bash/types/background.d.ts +50 -0
  305. package/vendor/bash/types/index.d.ts +38 -0
  306. package/vendor/bash/types/render.d.ts +57 -0
  307. package/vendor/command-goal/LICENSE +21 -0
  308. package/vendor/command-goal/index.js +210 -0
  309. package/vendor/command-goal/types/index.d.ts +10 -0
  310. package/vendor/computer-use/LICENSE +21 -0
  311. package/vendor/computer-use/lib/approval-policy.js +12 -0
  312. package/vendor/computer-use/lib/approval-policy.js.map +1 -0
  313. package/vendor/computer-use/lib/artifacts.js +79 -0
  314. package/vendor/computer-use/lib/artifacts.js.map +1 -0
  315. package/vendor/computer-use/lib/backend.js +3 -0
  316. package/vendor/computer-use/lib/backend.js.map +1 -0
  317. package/vendor/computer-use/lib/client.js +369 -0
  318. package/vendor/computer-use/lib/client.js.map +1 -0
  319. package/vendor/computer-use/lib/config.js +159 -0
  320. package/vendor/computer-use/lib/config.js.map +1 -0
  321. package/vendor/computer-use/lib/confirmations.js +99 -0
  322. package/vendor/computer-use/lib/confirmations.js.map +1 -0
  323. package/vendor/computer-use/lib/diff.js +58 -0
  324. package/vendor/computer-use/lib/diff.js.map +1 -0
  325. package/vendor/computer-use/lib/errors.js +22 -0
  326. package/vendor/computer-use/lib/errors.js.map +1 -0
  327. package/vendor/computer-use/lib/exposure.js +244 -0
  328. package/vendor/computer-use/lib/exposure.js.map +1 -0
  329. package/vendor/computer-use/lib/index.js +66 -0
  330. package/vendor/computer-use/lib/index.js.map +1 -0
  331. package/vendor/computer-use/lib/leases.js +262 -0
  332. package/vendor/computer-use/lib/leases.js.map +1 -0
  333. package/vendor/computer-use/lib/providers/macos.js +243 -0
  334. package/vendor/computer-use/lib/providers/macos.js.map +1 -0
  335. package/vendor/computer-use/lib/providers/native-helper.js +726 -0
  336. package/vendor/computer-use/lib/providers/native-helper.js.map +1 -0
  337. package/vendor/computer-use/lib/providers/unsupported.js +51 -0
  338. package/vendor/computer-use/lib/providers/unsupported.js.map +1 -0
  339. package/vendor/computer-use/lib/service.js +608 -0
  340. package/vendor/computer-use/lib/service.js.map +1 -0
  341. package/vendor/computer-use/lib/skill.js +136 -0
  342. package/vendor/computer-use/lib/skill.js.map +1 -0
  343. package/vendor/computer-use/lib/target-resolver.js +180 -0
  344. package/vendor/computer-use/lib/target-resolver.js.map +1 -0
  345. package/vendor/computer-use/lib/tools.js +511 -0
  346. package/vendor/computer-use/lib/tools.js.map +1 -0
  347. package/vendor/computer-use/lib/types/approval-policy.d.ts +13 -0
  348. package/vendor/computer-use/lib/types/approval-policy.d.ts.map +1 -0
  349. package/vendor/computer-use/lib/types/artifacts.d.ts +10 -0
  350. package/vendor/computer-use/lib/types/artifacts.d.ts.map +1 -0
  351. package/vendor/computer-use/lib/types/backend.d.ts +124 -0
  352. package/vendor/computer-use/lib/types/backend.d.ts.map +1 -0
  353. package/vendor/computer-use/lib/types/client/index.d.ts +83 -0
  354. package/vendor/computer-use/lib/types/client/index.d.ts.map +1 -0
  355. package/vendor/computer-use/lib/types/config.d.ts +94 -0
  356. package/vendor/computer-use/lib/types/config.d.ts.map +1 -0
  357. package/vendor/computer-use/lib/types/confirmations.d.ts +23 -0
  358. package/vendor/computer-use/lib/types/confirmations.d.ts.map +1 -0
  359. package/vendor/computer-use/lib/types/diff.d.ts +5 -0
  360. package/vendor/computer-use/lib/types/diff.d.ts.map +1 -0
  361. package/vendor/computer-use/lib/types/errors.d.ts +15 -0
  362. package/vendor/computer-use/lib/types/errors.d.ts.map +1 -0
  363. package/vendor/computer-use/lib/types/exposure.d.ts +30 -0
  364. package/vendor/computer-use/lib/types/exposure.d.ts.map +1 -0
  365. package/vendor/computer-use/lib/types/index.d.ts +21 -0
  366. package/vendor/computer-use/lib/types/index.d.ts.map +1 -0
  367. package/vendor/computer-use/lib/types/leases.d.ts +81 -0
  368. package/vendor/computer-use/lib/types/leases.d.ts.map +1 -0
  369. package/vendor/computer-use/lib/types/providers/macos.d.ts +39 -0
  370. package/vendor/computer-use/lib/types/providers/macos.d.ts.map +1 -0
  371. package/vendor/computer-use/lib/types/providers/native-helper.d.ts +48 -0
  372. package/vendor/computer-use/lib/types/providers/native-helper.d.ts.map +1 -0
  373. package/vendor/computer-use/lib/types/providers/unsupported.d.ts +23 -0
  374. package/vendor/computer-use/lib/types/providers/unsupported.d.ts.map +1 -0
  375. package/vendor/computer-use/lib/types/service.d.ts +58 -0
  376. package/vendor/computer-use/lib/types/service.d.ts.map +1 -0
  377. package/vendor/computer-use/lib/types/skill.d.ts +14 -0
  378. package/vendor/computer-use/lib/types/skill.d.ts.map +1 -0
  379. package/vendor/computer-use/lib/types/target-resolver.d.ts +38 -0
  380. package/vendor/computer-use/lib/types/target-resolver.d.ts.map +1 -0
  381. package/vendor/computer-use/lib/types/tools.d.ts +6 -0
  382. package/vendor/computer-use/lib/types/tools.d.ts.map +1 -0
  383. package/vendor/computer-use/lib/types/types.d.ts +270 -0
  384. package/vendor/computer-use/lib/types/types.d.ts.map +1 -0
  385. package/vendor/computer-use/lib/types/web.d.ts +33 -0
  386. package/vendor/computer-use/lib/types/web.d.ts.map +1 -0
  387. package/vendor/computer-use/lib/types.js +9 -0
  388. package/vendor/computer-use/lib/types.js.map +1 -0
  389. package/vendor/computer-use/lib/web.js +188 -0
  390. package/vendor/computer-use/lib/web.js.map +1 -0
  391. package/vendor/computer-use/native/macos/Sources/Fixture/main.swift +412 -0
  392. package/vendor/computer-use/native/macos/Sources/Helper/CursorImage.swift +11 -0
  393. package/vendor/computer-use/native/macos/Sources/Helper/CursorMotion.swift +67 -0
  394. package/vendor/computer-use/native/macos/Sources/Helper/CursorOverlay.swift +840 -0
  395. package/vendor/computer-use/native/macos/Sources/Helper/TargetedPointer.swift +327 -0
  396. package/vendor/computer-use/native/macos/Sources/Helper/WindowNumberMatcher.swift +29 -0
  397. package/vendor/computer-use/native/macos/Sources/Helper/main.swift +1244 -0
  398. package/vendor/computer-use/native/macos/Sources/Monitor/main.swift +153 -0
  399. package/vendor/computer-use/native/macos/bin/dsh-computer-use-helper +0 -0
  400. package/vendor/computer-use/native/macos/manifest.json +14 -0
  401. package/vendor/persistent/LICENSE +21 -0
  402. package/vendor/persistent/index.js +411 -0
  403. package/vendor/persistent/types/index.d.ts +24 -0
  404. package/vendor/subagent/LICENSE +21 -0
  405. package/vendor/subagent/index.js +694 -0
  406. package/vendor/subagent/invariant.js +52 -0
  407. package/vendor/subagent/model-selection-settings.js +68 -0
  408. package/vendor/subagent/types/index.d.ts +82 -0
  409. package/vendor/subagent/types/invariant.d.ts +16 -0
  410. package/vendor/subagent/types/list-models.d.ts +10 -0
  411. package/vendor/subagent/types/model-selection-settings.d.ts +45 -0
  412. package/vendor/subagent/types/model-selection-state.d.ts +48 -0
  413. package/vendor/subagent/types/model-selection.d.ts +81 -0
  414. package/vendor/subagent-core/LICENSE +21 -0
  415. package/vendor/subagent-core/index.js +3202 -0
  416. package/vendor/subagent-core/invariant.js +76 -0
  417. package/vendor/subagent-core/typert.host.d.ts +3 -0
  418. package/vendor/subagent-core/typert.host.js +978 -0
  419. package/vendor/subagent-core/typert.remote-client.d.ts +25 -0
  420. package/vendor/subagent-core/typert.remote-client.js +114 -0
  421. package/vendor/subagent-core/types/archive-admission.d.ts +16 -0
  422. package/vendor/subagent-core/types/archive-admission.js +151 -0
  423. package/vendor/subagent-core/types/assistant-output.d.ts +48 -0
  424. package/vendor/subagent-core/types/assistant-output.js +73 -0
  425. package/vendor/subagent-core/types/catalog.d.ts +84 -0
  426. package/vendor/subagent-core/types/catalog.js +109 -0
  427. package/vendor/subagent-core/types/child-agent.d.ts +156 -0
  428. package/vendor/subagent-core/types/child-agent.js +213 -0
  429. package/vendor/subagent-core/types/client.d.ts +8 -0
  430. package/vendor/subagent-core/types/client.js +7 -0
  431. package/vendor/subagent-core/types/continuation-activation.d.ts +267 -0
  432. package/vendor/subagent-core/types/continuation-activation.js +700 -0
  433. package/vendor/subagent-core/types/continuation-messages.d.ts +62 -0
  434. package/vendor/subagent-core/types/continuation-messages.js +106 -0
  435. package/vendor/subagent-core/types/continuation.d.ts +124 -0
  436. package/vendor/subagent-core/types/continuation.js +455 -0
  437. package/vendor/subagent-core/types/control-types.d.ts +135 -0
  438. package/vendor/subagent-core/types/control-types.js +8 -0
  439. package/vendor/subagent-core/types/control.d.ts +45 -0
  440. package/vendor/subagent-core/types/control.js +79 -0
  441. package/vendor/subagent-core/types/depth.d.ts +31 -0
  442. package/vendor/subagent-core/types/depth.js +39 -0
  443. package/vendor/subagent-core/types/descriptor.d.ts +144 -0
  444. package/vendor/subagent-core/types/descriptor.js +193 -0
  445. package/vendor/subagent-core/types/error.d.ts +11 -0
  446. package/vendor/subagent-core/types/error.js +14 -0
  447. package/vendor/subagent-core/types/inbox.d.ts +43 -0
  448. package/vendor/subagent-core/types/inbox.js +61 -0
  449. package/vendor/subagent-core/types/index.d.ts +320 -0
  450. package/vendor/subagent-core/types/index.js +475 -0
  451. package/vendor/subagent-core/types/internal.d.ts +58 -0
  452. package/vendor/subagent-core/types/internal.js +58 -0
  453. package/vendor/subagent-core/types/invariant.d.ts +13 -0
  454. package/vendor/subagent-core/types/invariant.js +91 -0
  455. package/vendor/subagent-core/types/lifecycle.d.ts +113 -0
  456. package/vendor/subagent-core/types/lifecycle.js +180 -0
  457. package/vendor/subagent-core/types/list-children.d.ts +36 -0
  458. package/vendor/subagent-core/types/list-children.js +166 -0
  459. package/vendor/subagent-core/types/out-of-process.d.ts +118 -0
  460. package/vendor/subagent-core/types/out-of-process.js +219 -0
  461. package/vendor/subagent-core/types/projection-types.d.ts +82 -0
  462. package/vendor/subagent-core/types/projection-types.js +7 -0
  463. package/vendor/subagent-core/types/projection.d.ts +100 -0
  464. package/vendor/subagent-core/types/projection.js +157 -0
  465. package/vendor/subagent-core/types/run-settlement.d.ts +17 -0
  466. package/vendor/subagent-core/types/run-settlement.js +70 -0
  467. package/vendor/subagent-core/types/types.d.ts +377 -0
  468. package/vendor/subagent-core/types/types.js +19 -0
  469. package/vendor/subagent-driver/LICENSE +21 -0
  470. package/vendor/subagent-driver/index.js +255 -0
  471. package/vendor/subagent-driver/types/index.d.ts +33 -0
  472. package/vendor/subagent-driver/types/structured.d.ts +42 -0
  473. package/vendor/subagent-fork/LICENSE +21 -0
  474. package/vendor/subagent-fork/index.js +61 -0
  475. package/vendor/subagent-fork/types/index.d.ts +20 -0
  476. package/vendor/subagent-spawn/LICENSE +21 -0
  477. package/vendor/subagent-spawn/index.js +45 -0
  478. package/vendor/subagent-spawn/types/index.d.ts +19 -0
  479. package/vendor/terminal/LICENSE +21 -0
  480. package/vendor/terminal/index.js +1093 -0
  481. package/vendor/terminal/types/config.d.ts +82 -0
  482. package/vendor/terminal/types/index.d.ts +36 -0
  483. package/vendor/terminal/types/sanitize.d.ts +47 -0
  484. package/vendor/terminal/types/session.d.ts +87 -0
@@ -0,0 +1,694 @@
1
+ // dscode-child-name-v1
2
+ // dscode-child-worktree-v3
3
+ // dscode-child-effort-v2
4
+ import { createChildWorktree, discardCleanChildWorktree } from "../../plugins/worktree-subagent/worktree.mjs";
5
+ import z from "@deepseek-ai/schemastery";
6
+ import { scopeChainOf, scopeOf } from "@deepseek-ai/dsh-scope";
7
+ import { defineTool } from "@deepseek-ai/dsh-tools";
8
+ import { SessionSeq } from "@deepseek-ai/dsh-session";
9
+ import { assertSubagentMaxDepth, parentAgentOptionsForDelegation, settleRun } from "../subagent-core/index.js";
10
+ import { ReasoningEffortId } from "@deepseek-ai/dsh-llm";
11
+ import { z as z$1 } from "zod";
12
+ z.object({
13
+ provider: z.string().min(1).required(),
14
+ model: z.string().min(1).required()
15
+ });
16
+ /**
17
+ * Stable identity for one provider/model pair.
18
+ * @param route - Exact provider/model route.
19
+ * @returns Opaque key for equality checks.
20
+ */
21
+ function modelRouteKey(route) {
22
+ return `${route.provider}\0${route.model}`;
23
+ }
24
+ /**
25
+ * Reject malformed or duplicate route policy entries at a durable or configuration boundary.
26
+ * @param routes - Candidate exact routes to validate.
27
+ * @returns an assertion that the candidate is a validated exact-route array.
28
+ */
29
+ function assertAllowedModelRoutes(routes) {
30
+ if (!Array.isArray(routes)) throw new Error("subagent model selection requires an array of routes");
31
+ const seen = /* @__PURE__ */ new Set();
32
+ const candidates = routes;
33
+ for (const candidate of candidates) {
34
+ if (typeof candidate !== "object" || candidate === null || Array.isArray(candidate) || !("provider" in candidate) || typeof candidate.provider !== "string" || !("model" in candidate) || typeof candidate.model !== "string" || candidate.provider.length === 0 || candidate.model.length === 0) throw new Error("subagent model selection requires non-empty provider and model ids");
35
+ const route = {
36
+ provider: candidate.provider,
37
+ model: candidate.model
38
+ };
39
+ const key = modelRouteKey(route);
40
+ if (seen.has(key)) throw new Error(`subagent model selection repeats route "${route.provider}/${route.model}"`);
41
+ seen.add(key);
42
+ }
43
+ }
44
+ /**
45
+ * Whether a call explicitly selects any child LLM value.
46
+ * @param request - Model-facing route fields from the tool call.
47
+ * @returns Whether at least one route or effort field is present.
48
+ */
49
+ function hasDelegationModelRequest(request) {
50
+ return request.provider !== void 0 || request.model !== void 0 || request.reasoning_effort !== void 0;
51
+ }
52
+ /** Reject an empty model-facing route value at the tool JSON boundary. */
53
+ function assertNonEmpty(value, field) {
54
+ if (value !== void 0 && value.length === 0) throw new Error(`child LLM \`${field}\` must be non-empty`);
55
+ }
56
+ /**
57
+ * Merge model-supplied selection fields over configured child defaults.
58
+ * Provider and model form one route and must be supplied together. Changing
59
+ * that route without an effort clears the configured route-owned effort.
60
+ * @param parentOptions - Current parent values that supply missing child values.
61
+ * @param configured - Tool-instance child defaults.
62
+ * @param request - Model-facing route override.
63
+ * @param enabled - Whether this tool instance permits model-facing selection.
64
+ * @returns Child Agent options, preserving omission when no layer contributes one.
65
+ */
66
+ function requestedAgentOptions(parentOptions, configured, request, enabled) {
67
+ if (!hasDelegationModelRequest(request)) return configured;
68
+ if (!enabled) throw new Error("child model selection is disabled for this tool instance");
69
+ assertNonEmpty(request.provider, "provider");
70
+ assertNonEmpty(request.model, "model");
71
+ assertNonEmpty(request.reasoning_effort, "reasoning_effort");
72
+ if (request.provider === void 0 !== (request.model === void 0)) throw new Error("child LLM `provider` and `model` must be supplied together");
73
+ const baselineProvider = configured?.provider ?? parentOptions.provider;
74
+ const baselineModel = configured?.model ?? parentOptions.model;
75
+ const routeChanged = request.provider !== void 0 && (request.provider !== baselineProvider || request.model !== baselineModel);
76
+ const { reasoningEffort: _configuredReasoningEffort, ...configuredWithoutReasoning } = configured ?? {};
77
+ return {
78
+ ...routeChanged && request.reasoning_effort === void 0 ? configuredWithoutReasoning : configured,
79
+ ...request.provider === void 0 ? {} : {
80
+ provider: request.provider,
81
+ model: request.model
82
+ },
83
+ ...request.reasoning_effort === void 0 ? {} : { reasoningEffort: ReasoningEffortId(request.reasoning_effort) }
84
+ };
85
+ }
86
+ /**
87
+ * Enforce a settings-owned route list at the operation that creates the child.
88
+ * Pure inheritance remains outside this policy because no model-facing choice
89
+ * occurred; any explicit route or effort field must resolve to an allowed route.
90
+ * @param policy - Selection authority captured for this Session.
91
+ * @param parentOptions - Current parent values that supply missing child values.
92
+ * @param requested - Effective child options after request/config merging.
93
+ * @param request - Model-facing selection fields from the tool call.
94
+ */
95
+ function assertAllowedModelSelection(policy, parentOptions, requested, request) {
96
+ if (policy === void 0 || !hasDelegationModelRequest(request)) return;
97
+ const provider = requested?.provider ?? parentOptions.provider;
98
+ const model = requested?.model ?? parentOptions.model;
99
+ if (provider === void 0 || model === void 0) throw new Error("cannot select child LLM values without an effective provider and model");
100
+ if (policy.routes.some((route) => route.provider === provider && route.model === model)) return;
101
+ throw new Error(`child LLM route "${provider}/${model}" is not allowed for this Session`);
102
+ }
103
+ /**
104
+ * Whether configured Agent options require route validation before delegation.
105
+ * @param options - Tool-instance child defaults.
106
+ * @returns Whether configured provider, model, or effort values must be resolved.
107
+ */
108
+ function hasConfiguredLlmSelection(options) {
109
+ return options?.provider !== void 0 || options?.model !== void 0 || options?.reasoningEffort !== void 0;
110
+ }
111
+ /**
112
+ * Resolve an effective child route through its live adapter before the child is
113
+ * created. The LLM runtime owns provider lookup, exact-model metadata, effort
114
+ * validation, and adapter defaults.
115
+ * @param llm - Live LLM runtime.
116
+ * @param parentOptions - Current parent values whose compatible fields the child inherits.
117
+ * @param requested - Per-child options after request/config merging.
118
+ * @param signal - Tool-call cancellation signal.
119
+ * @param inheritParentReasoningEffort - Whether an omitted effort may inherit from the parent route.
120
+ */
121
+ async function preflightChildLlmRoute(llm, parentOptions, requested, signal, inheritParentReasoningEffort = true) {
122
+ const provider = requested?.provider ?? parentOptions.provider;
123
+ const model = requested?.model ?? parentOptions.model;
124
+ if (provider === void 0 || model === void 0) throw new Error("cannot select child LLM values without an effective provider and model");
125
+ const routeChanged = provider !== parentOptions.provider || model !== parentOptions.model;
126
+ const reasoningEffort = requested?.reasoningEffort ?? (inheritParentReasoningEffort && !routeChanged ? parentOptions.reasoningEffort : void 0);
127
+ await llm.resolveCallConfig({
128
+ provider,
129
+ model,
130
+ ...reasoningEffort === void 0 ? {} : { reasoningEffort }
131
+ }, signal);
132
+ }
133
+ //#endregion
134
+ //#region lib/types/list-models.js
135
+ /** Model-facing discovery of LLM routes available to child Agents. */
136
+ /** Resolve one registered provider with a model-correctable diagnostic. */
137
+ function registeredProvider(llm, policy, providerId) {
138
+ const providers = llm.listProviders();
139
+ const provider = providers.find((candidate) => candidate.id === providerId);
140
+ if (provider !== void 0) return provider;
141
+ const available = providers.filter((candidate) => policy.routes.some((route) => route.provider === candidate.id)).map((candidate) => candidate.id).join(", ") || "(none)";
142
+ throw new Error(`LLM provider "${providerId}" is not registered; available providers: ${available}`);
143
+ }
144
+ /** Render one advertised or resolved model. */
145
+ function modelLine(provider, model) {
146
+ return `${provider}/${model.id} — ${model.name}${model.description === void 0 ? "" : `: ${model.description}`}`;
147
+ }
148
+ /** Read the requested provider, advertised models, or exact-model efforts. */
149
+ async function listSubagentModels(ctx, policy, request, signal) {
150
+ const llm = ctx.get("llm");
151
+ if (llm === void 0) throw new Error("cannot discover child LLM routes because the `llm` service is unavailable");
152
+ if (request.model !== void 0 && request.provider === void 0) throw new Error("`model` requires `provider`");
153
+ if (request.provider === void 0) {
154
+ const providers = llm.listProviders().filter((provider) => policy.routes.some((route) => route.provider === provider.id));
155
+ return providers.length === 0 ? "(no LLM providers)" : providers.map((provider) => `${provider.id} — ${provider.name}`).join("\n");
156
+ }
157
+ if (request.provider.length === 0) throw new Error("`provider` must be non-empty");
158
+ const allowedRoutes = policy.routes.filter((route) => route.provider === request.provider);
159
+ if (allowedRoutes.length === 0) throw new Error(`LLM provider "${request.provider}" is not allowed for this Session`);
160
+ const provider = registeredProvider(llm, policy, request.provider);
161
+ if (request.model === void 0) {
162
+ const models = (await llm.listModels(provider.id)).filter((model) => allowedRoutes.some((route) => route.model === model.id));
163
+ return models.length === 0 ? `(no advertised models for ${provider.id})` : models.map((model) => modelLine(provider.id, model)).join("\n");
164
+ }
165
+ if (request.model.length === 0) throw new Error("`model` must be non-empty");
166
+ if (!allowedRoutes.some((route) => route.model === request.model)) throw new Error(`child LLM route "${provider.id}/${request.model}" is not allowed for this Session`);
167
+ const model = await llm.resolveModelInfo(provider.id, request.model, signal);
168
+ const efforts = model.reasoning?.efforts.map((effort) => `${effort.id}${model.reasoning?.defaultEffort === effort.id ? " (default)" : ""} — ${effort.name}` + (effort.description === void 0 ? "" : `: ${effort.description}`)).join("\n") || "(no advertised reasoning efforts)";
169
+ return `${modelLine(provider.id, model)}\nReasoning efforts:\n${efforts}`;
170
+ }
171
+ /**
172
+ * Register `list_subagent_models` for one owning delegation-tool instance.
173
+ * @param ctx - Context whose tool registry owns the fixed discovery definition.
174
+ * @param policy - Route policy captured for this Session.
175
+ */
176
+ function registerListSubagentModels(ctx, policy) {
177
+ ctx.tools.register(defineTool({
178
+ name: "list_subagent_models",
179
+ description: "Discover LLM routes for subagents without changing the current Agent. Call with no arguments to list registered providers, with `provider` to list its advertised models, or with `provider` and `model` to inspect that exact model and its reasoning efforts. Catalog membership is advisory: an adapter may accept an unlisted model id. Use the returned ids with a delegation tool's `provider`, `model`, and `reasoning_effort` fields.",
180
+ parameters: {
181
+ provider: {
182
+ type: "string",
183
+ description: "Registered LLM provider id. Omit to list providers."
184
+ },
185
+ model: {
186
+ type: "string",
187
+ description: "Exact model id to inspect. Requires provider; omit to list that provider's advertised models."
188
+ }
189
+ },
190
+ output: {
191
+ schema: { type: "string" },
192
+ render: (_args, result) => [{
193
+ type: "text",
194
+ text: result
195
+ }]
196
+ },
197
+ execute(args, exec) {
198
+ return listSubagentModels(ctx, policy, args, exec.signal);
199
+ }
200
+ }));
201
+ }
202
+ /** Host-only projection of the durable model-selection policy. */
203
+ const subagentModelSelectionProjectionDefinition = {
204
+ key: "subagentModelSelectionPolicy",
205
+ stateVersion: 1,
206
+ stateSchema: z$1.array(z$1.object({
207
+ provider: z$1.string().min(1),
208
+ model: z$1.string().min(1)
209
+ }).strict()).min(1).nullable(),
210
+ init: () => null,
211
+ apply: (policy, event) => {
212
+ if (policy !== null || event.type !== "subagent/model-selection-policy") return policy;
213
+ const { allowedModels } = event.data;
214
+ assertAllowedModelRoutes(allowedModels);
215
+ if (allowedModels.length === 0) throw new Error("subagent/model-selection-policy requires at least one route");
216
+ return allowedModels;
217
+ }
218
+ };
219
+ /**
220
+ * Read the exact route list captured for a model-selectable definition.
221
+ * @param projections - registry that owns the policy projection.
222
+ * @param session - session whose durable decision is read.
223
+ * @returns a detached route list, or undefined for the fixed-route definition.
224
+ */
225
+ function subagentModelSelectionPolicy(projections, session) {
226
+ return projections.stateOf(session, "subagentModelSelectionPolicy")?.map((route) => ({ ...route }));
227
+ }
228
+ /**
229
+ * Append the route policy once, before its definition can reach a model request.
230
+ * @param projections - registry that owns the policy projection.
231
+ * @param session - session receiving the model-selectable definition.
232
+ * @param allowedModels - exact routes the definition may select explicitly.
233
+ */
234
+ function recordSubagentModelSelection(projections, session, allowedModels) {
235
+ if (subagentModelSelectionPolicy(projections, session) !== void 0) return;
236
+ session.append("subagent/model-selection-policy", { allowedModels: allowedModels.map((route) => ({ ...route })) });
237
+ }
238
+ //#endregion
239
+ //#region lib/types/index.js
240
+ /**
241
+ * Model-facing delegation through one configured `ctx.subagents` provider.
242
+ * Provider lifecycle controls tool registration and context-sensitive schema
243
+ * wording. Foreground calls always dispose the run after collection.
244
+ * Background policy is selected by this plugin's configuration: one-shot
245
+ * calls own a plain Task, while continuable calls use
246
+ * `ctx.subagents.startContinuable()`.
247
+ * @module @deepseek-ai/dsh-tool-subagent
248
+ */
249
+ const name = "tool-subagent";
250
+ const inject = [
251
+ "tools",
252
+ "subagents",
253
+ "systemPrompt",
254
+ "sessionProjections"
255
+ ];
256
+ const Config = z.object({
257
+ provider: z.string().required(),
258
+ toolName: z.string().default("subagent"),
259
+ modelSelectionSettings: z.boolean().default(false),
260
+ enableRunInBackground: z.boolean().default(true),
261
+ backgroundMode: z.union(["one-shot", "continuable"]).default("one-shot"),
262
+ agentOptions: z.object({
263
+ provider: z.string(),
264
+ model: z.string(),
265
+ reasoningEffort: z.string().min(1),
266
+ maxTokens: z.number().step(1).min(1).max(Number.MAX_SAFE_INTEGER)
267
+ }).default(void 0),
268
+ persona: z.string(),
269
+ toolFilter: z.object({
270
+ allow: z.array(z.string()).default(void 0),
271
+ deny: z.array(z.string()).default(void 0)
272
+ }).default(void 0),
273
+ maxDepth: z.union([z.natural().max(Number.MAX_SAFE_INTEGER), z.const("provider-managed")])
274
+ });
275
+ /** Render text blocks from the canonical JSON block array without trusting arbitrary values. */
276
+ function outputValueText(values) {
277
+ return values.filter((value) => typeof value === "object" && value !== null && !Array.isArray(value) && value.type === "text" && typeof value.text === "string").map((value) => value.text).join("");
278
+ }
279
+ /** Settle pending startup without rejecting the task producer contract. */
280
+ async function settleStart(start, signal) {
281
+ try {
282
+ return await settleRun(await start);
283
+ } catch (error) {
284
+ return signal.aborted && !(error instanceof AggregateError) ? { status: "killed" } : {
285
+ status: "failed",
286
+ detail: String(error)
287
+ };
288
+ }
289
+ }
290
+ /** A non-`completed` stop reason means the child did not finish cleanly. */
291
+ function stopReasonError(result) {
292
+ switch (result.stopReason) {
293
+ case "completed": return;
294
+ case "aborted": return "subagent run was cancelled";
295
+ case "error": return "subagent run failed";
296
+ case "max-tokens": return "subagent run hit its token limit before finishing";
297
+ case "refusal": return "subagent declined the task";
298
+ default: return `subagent run ended abnormally (${String(result.stopReason)})`;
299
+ }
300
+ }
301
+ /**
302
+ * Append provider-authored failure detail and the child's preserved partial
303
+ * answer to a stop-reason error, keeping diagnostic text separate from the
304
+ * child's assistant output.
305
+ * @param error - the stop-reason headline.
306
+ * @param result - the child's terminal result.
307
+ * @returns the headline, diagnostic, and partial text that are present.
308
+ */
309
+ function withDiagnosticAndPartialText(error, result) {
310
+ const diagnostic = result.diagnostic === void 0 ? "" : `\nDiagnostic: ${result.diagnostic}`;
311
+ const text = result.output.filter((block) => block.type === "text").map((block) => block.text).join("");
312
+ return `${error}${diagnostic}${text.length === 0 ? "" : `\nPartial output before the run ended:\n${text}`}`;
313
+ }
314
+ /**
315
+ * Collect and release one foreground run without letting disposal replace an
316
+ * independent result failure.
317
+ */
318
+ async function settleForegroundRun(run) {
319
+ const [execution] = await Promise.allSettled([run.result.then((result) => {
320
+ const error = stopReasonError(result);
321
+ if (error !== void 0) throw new Error(withDiagnosticAndPartialText(error, result));
322
+ return {
323
+ kind: "foreground",
324
+ runId: run.id,
325
+ output: result.output
326
+ };
327
+ })]);
328
+ const [disposal] = await Promise.allSettled([Promise.resolve().then(() => run.dispose())]);
329
+ if (execution.status === "rejected") {
330
+ if (disposal.status === "rejected") throw new AggregateError([execution.reason, disposal.reason], `subagent run failed: ${String(execution.reason)}; dispose failed: ${String(disposal.reason)}`);
331
+ throw execution.reason;
332
+ }
333
+ if (disposal.status === "rejected") throw disposal.reason;
334
+ return execution.value;
335
+ }
336
+ /**
337
+ * Model-facing wording from the provider's conversation-history descriptor
338
+ * ({@link SubagentProvider.inheritsParentContext}).
339
+ * A fresh child needs a standalone prompt; a forked child already sees the
340
+ * conversation's completed turns — telling the model to restate everything
341
+ * (or, worse, that the child "does not see this conversation") would be false
342
+ * for a fork.
343
+ * @param inheritsConversation - whether the child's conversation is seeded
344
+ * with the parent's completed turns; this says nothing about tool, service,
345
+ * scope, or authority inheritance.
346
+ * @returns the tool `description` and the `prompt` parameter description.
347
+ */
348
+ function providerWording(inheritsConversation) {
349
+ if (inheritsConversation) return {
350
+ description: "Delegate a task to a subagent that inherits this conversation: a child agent seeded with all completed turns so far (it does not see the current in-flight turn). Use this when the subtask builds on this conversation's context — a follow-up analysis, a review, a continuation — without consuming this conversation's context for the work itself. You receive its result, not its intermediate steps.",
351
+ promptDescription: "The task for the subagent. It already sees this conversation's completed turns, so build on them freely and state only what is new."
352
+ };
353
+ return {
354
+ description: "Delegate a self-contained task to a subagent (a separate agent that works in its own context) to offload focused, independent work — research, a scoped implementation, an analysis — so it does not consume this conversation's context. The subagent returns its result, not its intermediate steps.",
355
+ promptDescription: "The complete, self-contained task for the subagent. It does not share this conversation's context, so include everything it needs."
356
+ };
357
+ }
358
+ /** Resolve the model's optional scheduling request into one execution route. */
359
+ function resolveDelegationRun(request, options) {
360
+ if (!options.backgroundEnabled) {
361
+ if (request.run_in_background === true) throw new Error("run_in_background is disabled for this tool instance (enableRunInBackground: false)");
362
+ return { runInBackground: false };
363
+ }
364
+ return { runInBackground: request.run_in_background ?? options.continuable };
365
+ }
366
+ /**
367
+ * Install one delegation-tool composition.
368
+ * @param ctx - Context that owns the registrations.
369
+ * @param config - delegation-tool configuration.
370
+ * @param session - unpublished Session supplied by a direct Agent setup; omit for a standing composition.
371
+ */
372
+ function apply(ctx, config, session) {
373
+ if (config.maxDepth !== "provider-managed") assertSubagentMaxDepth(config.maxDepth);
374
+ if (config.toolFilter !== void 0 && config.toolFilter.allow === void 0 && config.toolFilter.deny === void 0) throw new Error("tool-subagent: `toolFilter` is configured but names neither `allow` nor `deny` — remove the key or fill the filter");
375
+ const backgroundEnabled = config.enableRunInBackground !== false;
376
+ const continuable = (config.backgroundMode ?? "one-shot") === "continuable";
377
+ const toolName = config.toolName ?? "subagent";
378
+ const modelSelectionCapable = config.modelSelectionSettings === true;
379
+ ctx.sessionProjections.register(subagentModelSelectionProjectionDefinition);
380
+ const assertSubagentProviderConfiguration = (subagentProvider) => {
381
+ if (ctx.subagents.resolveMaxDepth(config.maxDepth) !== void 0 && !subagentProvider.capabilities.depthLimit) throw new Error(`tool-subagent: provider "${subagentProvider.name}" cannot enforce maxDepth (no depthLimit capability) — set maxDepth: 'provider-managed' to leave the recursion budget to the provider`);
382
+ if (config.agentOptions !== void 0 && !subagentProvider.capabilities.agentOptions) throw new Error(`tool-subagent: provider "${subagentProvider.name}" does not support child agentOptions`);
383
+ if (modelSelectionCapable && !subagentProvider.capabilities.agentOptions) throw new Error(`tool-subagent: provider "${subagentProvider.name}" does not support child model selection`);
384
+ if (continuable && subagentProvider.prepareContinuable === void 0) throw new Error(`tool-subagent: provider "${subagentProvider.name}" does not support \`backgroundMode: continuable\``);
385
+ };
386
+ ctx.on("subagent/provider-added", (subagentProvider) => {
387
+ if (subagentProvider.name === config.provider) assertSubagentProviderConfiguration(subagentProvider);
388
+ });
389
+ const initialProvider = ctx.subagents.getProvider(config.provider);
390
+ if (initialProvider !== void 0) assertSubagentProviderConfiguration(initialProvider);
391
+ const install = (runtimeCtx, modelSelectionPolicy) => {
392
+ const modelSelectionEnabled = modelSelectionPolicy !== void 0;
393
+ if (modelSelectionPolicy !== void 0) registerListSubagentModels(runtimeCtx, modelSelectionPolicy);
394
+ let mounted;
395
+ const mount = (subagentProvider) => {
396
+ assertSubagentProviderConfiguration(subagentProvider);
397
+ const wording = providerWording(subagentProvider.inheritsParentContext);
398
+ const providerRouteDefaults = subagentProvider.agentRouteDefaults;
399
+ const choiceDescription = !modelSelectionEnabled ? (subagentProvider.capabilities.agentOptions ? " Optionally set reasoning_effort for this child without changing its provider/model. Omit to inherit. Use a level the current model offers: the lowest that fits the task, raised only for difficult work or real uncertainty." : "") : (providerRouteDefaults !== void 0 ? " Child LLM selection is optional. Omit `provider`, `model`, and `reasoning_effort` to use configured child defaults and this provider's route defaults. Supply `provider` and `model` together after using `list_subagent_models` to inspect advertised routes and efforts. Changing the effective route without naming an effort uses the selected model's default effort." : " Child LLM selection is optional. Omit `provider`, `model`, and `reasoning_effort` to use configured child defaults and inherit compatible missing values from the parent Agent. Supply `provider` and `model` together after using `list_subagent_models` to inspect advertised routes and efforts. Changing the effective route without naming an effort uses the selected model's default effort.") + (subagentProvider.inheritsParentContext ? " Changing the route can prevent provider-side reuse of the inherited conversation prefix." : "");
400
+ mounted = {
401
+ subagentProvider,
402
+ disposeTool: runtimeCtx.tools.register(defineTool({
403
+ name: toolName,
404
+ description: wording.description + (backgroundEnabled ? continuable ? " It runs in the background by default and returns a subagent id you can continue with `send_message`; you are notified when the run settles." : " This call waits for the result by default." : " This call waits for the subagent and returns its result.") + choiceDescription + (continuable && (config.provider === "spawn" || config.provider === "fork") ? " Set worktree: true for an isolated Git checkout when agents edit in parallel. It starts at HEAD and refuses a dirty parent workspace; omit for read-only tasks or when the child needs uncommitted parent edits. You must inspect and integrate its changes; the worktree remains after completion." : ""),
405
+ parameters: {
406
+ name: {
407
+ type: "string",
408
+ required: true,
409
+ description: "Unique name you give this child: 1-10 characters, letters, digits and underscores only, starting and ending with a letter (for example read_code). Address the child as /name in send_message and interrupt_agent."
410
+ },
411
+ description: {
412
+ type: "string",
413
+ required: true,
414
+ description: "A short (3-5 word) description of the delegated task, for display."
415
+ },
416
+ prompt: {
417
+ type: "string",
418
+ required: true,
419
+ description: wording.promptDescription
420
+ },
421
+ ...modelSelectionEnabled ? {
422
+ provider: {
423
+ type: "string",
424
+ description: providerRouteDefaults !== void 0 ? "LLM provider route for the child. Supply together with model; omit both to use configured child defaults or this provider's route defaults." : "LLM provider route for the child. Supply together with model; omit both to use configured child defaults or inherit the parent route."
425
+ },
426
+ model: {
427
+ type: "string",
428
+ description: providerRouteDefaults !== void 0 ? "Model id interpreted by provider. Supply together with provider; omit both to use configured child defaults or this provider's route defaults." : "Model id interpreted by provider. Supply together with provider; omit both to use configured child defaults or inherit the parent route."
429
+ },
430
+ reasoning_effort: {
431
+ type: "string",
432
+ description: providerRouteDefaults !== void 0 ? "Adapter-owned reasoning effort for the effective child route. Omit to use a compatible configured effort or the selected model's default." : "Adapter-owned reasoning effort for the effective child route. Omit to inherit a compatible configured/parent effort or use a newly selected model's default."
433
+ }
434
+ } : {},
435
+ ...!modelSelectionEnabled && subagentProvider.capabilities.agentOptions ? { reasoning_effort: {
436
+ type: "string",
437
+ description: "Reasoning effort for this child only, validated against its model; use a level that model offers. Omit to inherit. Prefer the lowest level that fits the task and raise it only for difficult work or real uncertainty. Provider/model remain unchanged."
438
+ } } : {},
439
+ ...continuable && (config.provider === "spawn" || config.provider === "fork") ? { worktree: {
440
+ type: "boolean",
441
+ description: "Create an isolated Git worktree for this child at clean HEAD. Choose for parallel editing; omit or set false for read-only work or tasks requiring uncommitted parent changes. Parent must integrate the result."
442
+ } } : {},
443
+ ...backgroundEnabled ? { run_in_background: {
444
+ type: "boolean",
445
+ description: continuable ? "Defaults to true. Set false only when your next action depends on the result." : "Run as a background job and return its id (collect with job_output, stop with job_kill). Defaults to false."
446
+ } } : {}
447
+ },
448
+ output: {
449
+ schema: { oneOf: [
450
+ {
451
+ type: "object",
452
+ additionalProperties: false,
453
+ properties: {
454
+ kind: {
455
+ type: "string",
456
+ required: true,
457
+ const: "background"
458
+ },
459
+ worktree: { type: "string" },
460
+ jobId: {
461
+ type: "string",
462
+ required: true
463
+ }
464
+ }
465
+ },
466
+ {
467
+ type: "object",
468
+ additionalProperties: false,
469
+ properties: {
470
+ kind: {
471
+ type: "string",
472
+ required: true,
473
+ const: "continuable"
474
+ },
475
+ worktree: { type: "string" },
476
+ subagentId: {
477
+ type: "string",
478
+ required: true
479
+ }
480
+ }
481
+ },
482
+ {
483
+ type: "object",
484
+ additionalProperties: false,
485
+ properties: {
486
+ kind: {
487
+ type: "string",
488
+ required: true,
489
+ const: "foreground"
490
+ },
491
+ worktree: { type: "string" },
492
+ runId: {
493
+ type: "string",
494
+ required: true
495
+ },
496
+ output: {
497
+ type: "array",
498
+ required: true,
499
+ items: { type: "json" }
500
+ }
501
+ }
502
+ }
503
+ ] },
504
+ render: (_args, value) => [{
505
+ type: "text",
506
+ text: (value.kind === "background" ? `started background subagent job ${value.jobId}` : value.kind === "continuable" ? `started subagent /${_args.name} (${value.subagentId})` : outputValueText(value.output)) + (value.worktree ? `
507
+ Worktree: ${value.worktree}
508
+ Inspect and integrate its changes before removing it.` : "")
509
+ }]
510
+ },
511
+ isConcurrencySafe: () => true,
512
+ async execute(args, exec) {
513
+ const parent = exec.agent;
514
+ if (!parent) throw new Error("subagent tool requires a calling agent (exec.agent was undefined)");
515
+ if (typeof args.name !== "string" || !/^[A-Za-z](?:[A-Za-z0-9_]{0,8}[A-Za-z])?$/.test(args.name)) throw new Error("name must be 1-10 characters of letters, digits or underscores, starting and ending with a letter");
516
+ const modelRequest = args;
517
+ const parentOptions = parentAgentOptionsForDelegation(parent);
518
+ const requiresRoutePreflight = hasDelegationModelRequest(modelRequest) || hasConfiguredLlmSelection(config.agentOptions);
519
+ const requestedChildAgentOptions = requestedAgentOptions(parentOptions, requiresRoutePreflight && providerRouteDefaults !== void 0 ? {
520
+ ...providerRouteDefaults,
521
+ ...config.agentOptions
522
+ } : config.agentOptions, modelRequest, modelSelectionEnabled || subagentProvider.capabilities.agentOptions && modelRequest.provider === void 0 && modelRequest.model === void 0);
523
+ if (modelRequest.provider !== void 0 || modelRequest.model !== void 0) assertAllowedModelSelection(modelSelectionPolicy, parentOptions, requestedChildAgentOptions, modelRequest);
524
+ if (requiresRoutePreflight) {
525
+ const llm = runtimeCtx.get("llm");
526
+ if (llm === void 0) throw new Error("cannot resolve the selected child LLM route because the `llm` service is unavailable");
527
+ await preflightChildLlmRoute(llm, parentOptions, requestedChildAgentOptions, exec.signal, providerRouteDefaults === void 0);
528
+ if (runtimeCtx.subagents.getProvider(config.provider) !== subagentProvider) throw new Error(`subagent provider "${config.provider}" changed while resolving the child LLM route; retry the delegation`);
529
+ }
530
+ exec.signal.throwIfAborted();
531
+ if (args.worktree === true && !(continuable && (config.provider === "spawn" || config.provider === "fork"))) throw new Error("worktree is unavailable for this subagent provider");
532
+ const childWorktree = args.worktree === true ? await createChildWorktree(parent.session.header.cwd, exec.signal) : void 0;
533
+ const maxDepth = runtimeCtx.subagents.resolveMaxDepth(config.maxDepth);
534
+ const request = {
535
+ label: "/" + args.name + " · " + args.description,
536
+ ...childWorktree ? { workspaceCwd: childWorktree.cwd } : {},
537
+ prompt: [{
538
+ type: "text",
539
+ text: args.prompt
540
+ }],
541
+ parent,
542
+ ...requestedChildAgentOptions !== void 0 ? { agentOptions: requestedChildAgentOptions } : {},
543
+ ...config.persona !== void 0 ? { persona: config.persona } : {},
544
+ ...config.toolFilter !== void 0 ? { toolFilter: config.toolFilter } : {},
545
+ ...maxDepth !== void 0 ? { maxDepth } : {}
546
+ };
547
+ try {
548
+ if (resolveDelegationRun(args, {
549
+ backgroundEnabled,
550
+ continuable
551
+ }).runInBackground) {
552
+ if (continuable) return {
553
+ kind: "continuable",
554
+ subagentId: (await runtimeCtx.subagents.startContinuable({
555
+ provider: config.provider,
556
+ label: "/" + args.name + " · " + args.description,
557
+ request,
558
+ signal: exec.signal
559
+ })).childId,
560
+ ...childWorktree ? { worktree: childWorktree.cwd } : {}
561
+ };
562
+ const jobs = runtimeCtx.get("jobs");
563
+ if (jobs === void 0) throw new Error("background jobs unavailable: load @deepseek-ai/dsh-jobs and @deepseek-ai/dsh-tool-jobs");
564
+ return {
565
+ kind: "background",
566
+ jobId: jobs.start({
567
+ kind: "subagent",
568
+ label: "/" + args.name + " · " + args.description,
569
+ owner: parent.id,
570
+ run: () => {
571
+ const controller = new AbortController();
572
+ return {
573
+ cancel: (reason) => {
574
+ controller.abort(reason ?? "background subagent task killed");
575
+ },
576
+ done: settleStart(runtimeCtx.subagents.start(config.provider, {
577
+ ...request,
578
+ signal: controller.signal
579
+ }), controller.signal)
580
+ };
581
+ }
582
+ })
583
+ };
584
+ }
585
+ return { ...await settleForegroundRun(await runtimeCtx.subagents.start(config.provider, {
586
+ ...request,
587
+ signal: exec.signal
588
+ })), ...childWorktree ? { worktree: childWorktree.cwd } : {} };
589
+ } catch (error) {
590
+ if (childWorktree && !await discardCleanChildWorktree(childWorktree)) throw new Error(`${String(error)}; child worktree retained at ${childWorktree.cwd}`, { cause: error });
591
+ throw error;
592
+ }
593
+ }
594
+ }))
595
+ };
596
+ };
597
+ runtimeCtx.on("subagent/provider-added", (subagentProvider) => {
598
+ if (subagentProvider.name === config.provider && mounted === void 0) mount(subagentProvider);
599
+ });
600
+ runtimeCtx.on("subagent/provider-removed", (name) => {
601
+ if (name !== config.provider || mounted === void 0) return;
602
+ mounted.disposeTool();
603
+ mounted = void 0;
604
+ });
605
+ const present = runtimeCtx.subagents.getProvider(config.provider);
606
+ if (present !== void 0) mount(present);
607
+ else runtimeCtx.logger.info(`subagent provider "${config.provider}" not registered yet; the "${config.toolName ?? "subagent"}" tool will register when it appears`);
608
+ if (backgroundEnabled && continuable) runtimeCtx.systemPrompt.section({
609
+ name: `tool:${toolName}`,
610
+ order: runtimeCtx.systemPrompt.getSectionOrder("TOOL_SUBAGENT"),
611
+ text: (context) => mounted === void 0 || runtimeCtx.tools.get(toolName, context.scope) === void 0 ? "" : `Start independent ${toolName} delegations together in one assistant message and continue useful work while they run.`
612
+ });
613
+ };
614
+ if (config.modelSelectionSettings !== true) {
615
+ install(ctx, void 0);
616
+ return;
617
+ }
618
+ const settings = ctx.get("subagentModelSelection");
619
+ if (settings === void 0) throw new Error("tool-subagent: `modelSelectionSettings` requires @deepseek-ai/dsh-tool-subagent/model-selection-settings in the Host scope");
620
+ const selectForSession = (target) => {
621
+ const freshSession = target.firstLiveSeq === 0 && target.eventAt(SessionSeq(0))?.type !== "session/end-seed";
622
+ let allowedModels = subagentModelSelectionPolicy(ctx.sessionProjections, target);
623
+ if (allowedModels === void 0) {
624
+ const parentId = target.header.origin === "subagent" ? target.header.parentSession : void 0;
625
+ if (parentId !== void 0) {
626
+ const sessions = ctx.get("sessions");
627
+ if (sessions === void 0) throw new Error("tool-subagent: child model-selection inheritance requires the Session registry");
628
+ const parent = sessions.get(parentId);
629
+ allowedModels = parent === void 0 ? void 0 : subagentModelSelectionPolicy(ctx.sessionProjections, parent);
630
+ } else if (freshSession) {
631
+ const current = settings.current();
632
+ allowedModels = current.enabled ? current.allowedModels : void 0;
633
+ }
634
+ }
635
+ if (allowedModels !== void 0) recordSubagentModelSelection(ctx.sessionProjections, target, allowedModels);
636
+ return allowedModels === void 0 ? void 0 : { routes: allowedModels };
637
+ };
638
+ if (session !== void 0) {
639
+ install(ctx, selectForSession(session));
640
+ return;
641
+ }
642
+ const compositionScope = scopeOf(ctx);
643
+ if (compositionScope === void 0) throw new Error("tool-subagent: standing `modelSelectionSettings` requires a scoped preset Context");
644
+ const agents = ctx.get("agents");
645
+ /* v8 ignore next -- shipped preset compositions always include the Agent registry. */
646
+ if (agents === void 0) throw new Error("tool-subagent: standing `modelSelectionSettings` requires the Agent registry");
647
+ const scopedInstalls = /* @__PURE__ */ new WeakMap();
648
+ const installing = /* @__PURE__ */ new WeakSet();
649
+ const belongsToComposition = (candidate) => scopeChainOf(scopeOf(candidate.ctx)).includes(compositionScope);
650
+ const installScoped = (candidate) => {
651
+ const existing = scopedInstalls.get(candidate);
652
+ if (existing !== void 0) return existing;
653
+ if (installing.has(candidate)) return;
654
+ installing.add(candidate);
655
+ let fiber;
656
+ try {
657
+ const policy = selectForSession(candidate.session);
658
+ fiber = candidate.ctx.inject([
659
+ "tools",
660
+ "subagents",
661
+ "systemPrompt"
662
+ ], (runtimeCtx) => {
663
+ install(runtimeCtx, policy);
664
+ });
665
+ } finally {
666
+ installing.delete(candidate);
667
+ }
668
+ scopedInstalls.set(candidate, fiber);
669
+ return fiber;
670
+ };
671
+ const removeScoped = (candidate) => {
672
+ const fiber = scopedInstalls.get(candidate);
673
+ if (fiber === void 0) return;
674
+ scopedInstalls.delete(candidate);
675
+ /* v8 ignore next 3 -- Cordis Fiber disposal contains registration cleanup failures; this is the final diagnostic sink. */
676
+ fiber.dispose().catch((error) => {
677
+ ctx.logger.warn(`tool-subagent: failed to remove recomposed Agent "${candidate.id}" definitions: ${String(error)}`);
678
+ });
679
+ };
680
+ const reconcileComposedAgents = () => {
681
+ for (const candidate of agents.list()) if (belongsToComposition(candidate)) installScoped(candidate);
682
+ else removeScoped(candidate);
683
+ };
684
+ ctx.on("agent/created", async ({ agent: created }) => {
685
+ await installScoped(created);
686
+ });
687
+ ctx.on("agent/disposed", ({ agent: disposed }) => {
688
+ removeScoped(disposed);
689
+ });
690
+ ctx.on("tools/change", reconcileComposedAgents);
691
+ reconcileComposedAgents();
692
+ }
693
+ //#endregion
694
+ export { Config, apply, inject, name };