dsh-cliworker-now 0.0.0-stage → 0.7.7

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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +364 -0
  3. package/README.md +368 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/account-models.mjs +262 -0
  6. package/lib/client.js +22139 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/grok-catalog.mjs +145 -0
  9. package/lib/hermes-native-entry.py +96 -0
  10. package/lib/hermes-nous-refresh.py +331 -0
  11. package/lib/index.js +14544 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/native-launch.mjs +234 -0
  14. package/lib/native-spawn.mjs +32 -0
  15. package/lib/own-account-lease.mjs +105 -0
  16. package/lib/pi-installation.mjs +87 -0
  17. package/lib/pi-login.mjs +80 -0
  18. package/lib/pi-native-catalog.mjs +417 -0
  19. package/lib/pi-omp-bridge.mjs +602 -0
  20. package/lib/pi-omp-environment.mjs +15 -0
  21. package/lib/pi-omp-refresh.mjs +324 -0
  22. package/lib/private-launch.mjs +23 -0
  23. package/lib/terminal-bridge.mjs +18 -0
  24. package/lib/typert.host.d.ts +3 -0
  25. package/lib/typert.host.js +1430 -0
  26. package/lib/typert.remote-client.d.ts +72 -0
  27. package/lib/typert.remote-client.d.ts.map +1 -0
  28. package/lib/typert.remote-client.js +1256 -0
  29. package/lib/types/client/account-query-queue.d.ts +16 -0
  30. package/lib/types/client/account-query-queue.js +61 -0
  31. package/lib/types/client/account-query-queue.js.map +1 -0
  32. package/lib/types/client/account-terminal-css.d.ts +1 -0
  33. package/lib/types/client/account-terminal-css.js +3 -0
  34. package/lib/types/client/account-terminal-css.js.map +1 -0
  35. package/lib/types/client/account-terminal.d.ts +17 -0
  36. package/lib/types/client/account-terminal.js +525 -0
  37. package/lib/types/client/account-terminal.js.map +1 -0
  38. package/lib/types/client/assets/antigravity.png +0 -0
  39. package/lib/types/client/assets/claude-code.png +0 -0
  40. package/lib/types/client/assets/cliworker-now-logo.png +0 -0
  41. package/lib/types/client/assets/codex.png +0 -0
  42. package/lib/types/client/assets/grok.png +0 -0
  43. package/lib/types/client/assets/hermes.png +0 -0
  44. package/lib/types/client/assets/kimi-dark.png +0 -0
  45. package/lib/types/client/assets/kimi-light.png +0 -0
  46. package/lib/types/client/assets/mimo-code.png +0 -0
  47. package/lib/types/client/assets/omp.png +0 -0
  48. package/lib/types/client/assets/opencode.png +0 -0
  49. package/lib/types/client/assets/pi.png +0 -0
  50. package/lib/types/client/assets/zcode.png +0 -0
  51. package/lib/types/client/composer-keymap.d.ts +18 -0
  52. package/lib/types/client/composer-keymap.js +49 -0
  53. package/lib/types/client/composer-keymap.js.map +1 -0
  54. package/lib/types/client/conversation-timeline.d.ts +6 -0
  55. package/lib/types/client/conversation-timeline.js +65 -0
  56. package/lib/types/client/conversation-timeline.js.map +1 -0
  57. package/lib/types/client/copy-text.d.ts +5 -0
  58. package/lib/types/client/copy-text.js +45 -0
  59. package/lib/types/client/copy-text.js.map +1 -0
  60. package/lib/types/client/icons.d.ts +21 -0
  61. package/lib/types/client/icons.js +68 -0
  62. package/lib/types/client/icons.js.map +1 -0
  63. package/lib/types/client/index.d.ts +3 -0
  64. package/lib/types/client/index.js +124 -0
  65. package/lib/types/client/index.js.map +1 -0
  66. package/lib/types/client/management-styles.d.ts +1 -0
  67. package/lib/types/client/management-styles.js +17 -0
  68. package/lib/types/client/management-styles.js.map +1 -0
  69. package/lib/types/client/name-copy.d.ts +5 -0
  70. package/lib/types/client/name-copy.js +107 -0
  71. package/lib/types/client/name-copy.js.map +1 -0
  72. package/lib/types/client/native-job-overlay.d.ts +11 -0
  73. package/lib/types/client/native-job-overlay.js +129 -0
  74. package/lib/types/client/native-job-overlay.js.map +1 -0
  75. package/lib/types/client/operation-error.d.ts +2 -0
  76. package/lib/types/client/operation-error.js +12 -0
  77. package/lib/types/client/operation-error.js.map +1 -0
  78. package/lib/types/client/panel.d.ts +8 -0
  79. package/lib/types/client/panel.js +310 -0
  80. package/lib/types/client/panel.js.map +1 -0
  81. package/lib/types/client/rename-copy-styles.d.ts +1 -0
  82. package/lib/types/client/rename-copy-styles.js +21 -0
  83. package/lib/types/client/rename-copy-styles.js.map +1 -0
  84. package/lib/types/client/rename-worker.d.ts +9 -0
  85. package/lib/types/client/rename-worker.js +53 -0
  86. package/lib/types/client/rename-worker.js.map +1 -0
  87. package/lib/types/client/role-presets.d.ts +6 -0
  88. package/lib/types/client/role-presets.js +111 -0
  89. package/lib/types/client/role-presets.js.map +1 -0
  90. package/lib/types/client/settings-dialog.d.ts +13 -0
  91. package/lib/types/client/settings-dialog.js +442 -0
  92. package/lib/types/client/settings-dialog.js.map +1 -0
  93. package/lib/types/client/stat-popover.d.ts +10 -0
  94. package/lib/types/client/stat-popover.js +32 -0
  95. package/lib/types/client/stat-popover.js.map +1 -0
  96. package/lib/types/client/styles.d.ts +9 -0
  97. package/lib/types/client/styles.js +221 -0
  98. package/lib/types/client/styles.js.map +1 -0
  99. package/lib/types/client/telemetry.d.ts +11 -0
  100. package/lib/types/client/telemetry.js +24 -0
  101. package/lib/types/client/telemetry.js.map +1 -0
  102. package/lib/types/client/worker-card.d.ts +10 -0
  103. package/lib/types/client/worker-card.js +75 -0
  104. package/lib/types/client/worker-card.js.map +1 -0
  105. package/lib/types/client/worker-model-menu.d.ts +9 -0
  106. package/lib/types/client/worker-model-menu.js +136 -0
  107. package/lib/types/client/worker-model-menu.js.map +1 -0
  108. package/lib/types/client/workers.d.ts +21 -0
  109. package/lib/types/client/workers.js +59 -0
  110. package/lib/types/client/workers.js.map +1 -0
  111. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  112. package/lib/types/client/zcode-login-link-provider.js +105 -0
  113. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  114. package/lib/types/client/zcode-login-link.d.ts +16 -0
  115. package/lib/types/client/zcode-login-link.js +194 -0
  116. package/lib/types/client/zcode-login-link.js.map +1 -0
  117. package/lib/types/host/account-identity.d.ts +16 -0
  118. package/lib/types/host/account-identity.js +126 -0
  119. package/lib/types/host/account-identity.js.map +1 -0
  120. package/lib/types/host/account-login.d.ts +10 -0
  121. package/lib/types/host/account-login.js +126 -0
  122. package/lib/types/host/account-login.js.map +1 -0
  123. package/lib/types/host/account-models.d.mts +21 -0
  124. package/lib/types/host/account-models.mjs +262 -0
  125. package/lib/types/host/accounts.d.ts +42 -0
  126. package/lib/types/host/accounts.js +945 -0
  127. package/lib/types/host/accounts.js.map +1 -0
  128. package/lib/types/host/adapters.d.ts +24 -0
  129. package/lib/types/host/adapters.js +380 -0
  130. package/lib/types/host/adapters.js.map +1 -0
  131. package/lib/types/host/agy-context.d.ts +8 -0
  132. package/lib/types/host/agy-context.js +122 -0
  133. package/lib/types/host/agy-context.js.map +1 -0
  134. package/lib/types/host/agy-models.d.ts +5 -0
  135. package/lib/types/host/agy-models.js +37 -0
  136. package/lib/types/host/agy-models.js.map +1 -0
  137. package/lib/types/host/agy-windows-account.d.ts +14 -0
  138. package/lib/types/host/agy-windows-account.js +104 -0
  139. package/lib/types/host/agy-windows-account.js.map +1 -0
  140. package/lib/types/host/authorized-catalog.d.ts +14 -0
  141. package/lib/types/host/authorized-catalog.js +35 -0
  142. package/lib/types/host/authorized-catalog.js.map +1 -0
  143. package/lib/types/host/bridge-protocol.d.ts +15 -0
  144. package/lib/types/host/bridge-protocol.js +80 -0
  145. package/lib/types/host/bridge-protocol.js.map +1 -0
  146. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  147. package/lib/types/host/claude-native-oauth.js +272 -0
  148. package/lib/types/host/claude-native-oauth.js.map +1 -0
  149. package/lib/types/host/claude-own-route.d.ts +33 -0
  150. package/lib/types/host/claude-own-route.js +250 -0
  151. package/lib/types/host/claude-own-route.js.map +1 -0
  152. package/lib/types/host/cli-account-binding.d.ts +33 -0
  153. package/lib/types/host/cli-account-binding.js +540 -0
  154. package/lib/types/host/cli-account-binding.js.map +1 -0
  155. package/lib/types/host/cli-protocol.d.ts +27 -0
  156. package/lib/types/host/cli-protocol.js +212 -0
  157. package/lib/types/host/cli-protocol.js.map +1 -0
  158. package/lib/types/host/codex-account.d.ts +8 -0
  159. package/lib/types/host/codex-account.js +143 -0
  160. package/lib/types/host/codex-account.js.map +1 -0
  161. package/lib/types/host/codex-models.d.ts +6 -0
  162. package/lib/types/host/codex-models.js +169 -0
  163. package/lib/types/host/codex-models.js.map +1 -0
  164. package/lib/types/host/extended-adapters.d.ts +44 -0
  165. package/lib/types/host/extended-adapters.js +207 -0
  166. package/lib/types/host/extended-adapters.js.map +1 -0
  167. package/lib/types/host/first-party-account-context.d.ts +26 -0
  168. package/lib/types/host/first-party-account-context.js +55 -0
  169. package/lib/types/host/first-party-account-context.js.map +1 -0
  170. package/lib/types/host/first-party-models.d.ts +29 -0
  171. package/lib/types/host/first-party-models.js +459 -0
  172. package/lib/types/host/first-party-models.js.map +1 -0
  173. package/lib/types/host/grok-adapter.d.ts +44 -0
  174. package/lib/types/host/grok-adapter.js +293 -0
  175. package/lib/types/host/grok-adapter.js.map +1 -0
  176. package/lib/types/host/grok-models.d.ts +47 -0
  177. package/lib/types/host/grok-models.js +320 -0
  178. package/lib/types/host/grok-models.js.map +1 -0
  179. package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
  180. package/lib/types/host/harness-opencode-accounts.js +80 -0
  181. package/lib/types/host/harness-opencode-accounts.js.map +1 -0
  182. package/lib/types/host/hermes-account-context.d.ts +8 -0
  183. package/lib/types/host/hermes-account-context.js +99 -0
  184. package/lib/types/host/hermes-account-context.js.map +1 -0
  185. package/lib/types/host/hermes-accounts.d.ts +19 -0
  186. package/lib/types/host/hermes-accounts.js +356 -0
  187. package/lib/types/host/hermes-accounts.js.map +1 -0
  188. package/lib/types/host/hermes-adapter.d.ts +93 -0
  189. package/lib/types/host/hermes-adapter.js +455 -0
  190. package/lib/types/host/hermes-adapter.js.map +1 -0
  191. package/lib/types/host/hermes-env.d.ts +4 -0
  192. package/lib/types/host/hermes-env.js +22 -0
  193. package/lib/types/host/hermes-env.js.map +1 -0
  194. package/lib/types/host/hermes-installation.d.ts +10 -0
  195. package/lib/types/host/hermes-installation.js +181 -0
  196. package/lib/types/host/hermes-installation.js.map +1 -0
  197. package/lib/types/host/hermes-models.d.ts +26 -0
  198. package/lib/types/host/hermes-models.js +328 -0
  199. package/lib/types/host/hermes-models.js.map +1 -0
  200. package/lib/types/host/hermes-native-entry.py +96 -0
  201. package/lib/types/host/hermes-nous-refresh.py +331 -0
  202. package/lib/types/host/hermes-nous.d.ts +53 -0
  203. package/lib/types/host/hermes-nous.js +343 -0
  204. package/lib/types/host/hermes-nous.js.map +1 -0
  205. package/lib/types/host/hermes-renewal.d.ts +27 -0
  206. package/lib/types/host/hermes-renewal.js +292 -0
  207. package/lib/types/host/hermes-renewal.js.map +1 -0
  208. package/lib/types/host/hermes-suppression.d.ts +7 -0
  209. package/lib/types/host/hermes-suppression.js +69 -0
  210. package/lib/types/host/hermes-suppression.js.map +1 -0
  211. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  212. package/lib/types/host/hermes-windows-installation.js +91 -0
  213. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  214. package/lib/types/host/index.d.ts +140 -0
  215. package/lib/types/host/index.js +947 -0
  216. package/lib/types/host/index.js.map +1 -0
  217. package/lib/types/host/kimi-accounts.d.ts +17 -0
  218. package/lib/types/host/kimi-accounts.js +220 -0
  219. package/lib/types/host/kimi-accounts.js.map +1 -0
  220. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  221. package/lib/types/host/kimi-oauth-models.js +246 -0
  222. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  223. package/lib/types/host/managed-agent.d.ts +4 -0
  224. package/lib/types/host/managed-agent.js +127 -0
  225. package/lib/types/host/managed-agent.js.map +1 -0
  226. package/lib/types/host/mimo-configuration.d.ts +22 -0
  227. package/lib/types/host/mimo-configuration.js +258 -0
  228. package/lib/types/host/mimo-configuration.js.map +1 -0
  229. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  230. package/lib/types/host/mimo-metadata-cache.js +121 -0
  231. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  232. package/lib/types/host/native-capability-cache.d.ts +11 -0
  233. package/lib/types/host/native-capability-cache.js +94 -0
  234. package/lib/types/host/native-capability-cache.js.map +1 -0
  235. package/lib/types/host/native-launch.d.mts +2 -0
  236. package/lib/types/host/native-launch.mjs +234 -0
  237. package/lib/types/host/native-process.d.ts +5 -0
  238. package/lib/types/host/native-process.js +41 -0
  239. package/lib/types/host/native-process.js.map +1 -0
  240. package/lib/types/host/native-spawn.mjs +32 -0
  241. package/lib/types/host/opencode-adapter.d.ts +94 -0
  242. package/lib/types/host/opencode-adapter.js +507 -0
  243. package/lib/types/host/opencode-adapter.js.map +1 -0
  244. package/lib/types/host/opencode-native.d.ts +27 -0
  245. package/lib/types/host/opencode-native.js +403 -0
  246. package/lib/types/host/opencode-native.js.map +1 -0
  247. package/lib/types/host/own-account-lease.d.mts +5 -0
  248. package/lib/types/host/own-account-lease.mjs +105 -0
  249. package/lib/types/host/pi-installation.d.mts +7 -0
  250. package/lib/types/host/pi-installation.mjs +87 -0
  251. package/lib/types/host/pi-omp-accounts.d.ts +28 -0
  252. package/lib/types/host/pi-omp-accounts.js +175 -0
  253. package/lib/types/host/pi-omp-accounts.js.map +1 -0
  254. package/lib/types/host/pi-omp-adapter.d.ts +32 -0
  255. package/lib/types/host/pi-omp-adapter.js +190 -0
  256. package/lib/types/host/pi-omp-adapter.js.map +1 -0
  257. package/lib/types/host/pi-omp-environment.d.mts +1 -0
  258. package/lib/types/host/pi-omp-environment.mjs +15 -0
  259. package/lib/types/host/pi-omp-identity.d.ts +2 -0
  260. package/lib/types/host/pi-omp-identity.js +142 -0
  261. package/lib/types/host/pi-omp-identity.js.map +1 -0
  262. package/lib/types/host/pi-omp-logout.d.ts +3 -0
  263. package/lib/types/host/pi-omp-logout.js +152 -0
  264. package/lib/types/host/pi-omp-logout.js.map +1 -0
  265. package/lib/types/host/pi-omp-native.d.ts +71 -0
  266. package/lib/types/host/pi-omp-native.js +753 -0
  267. package/lib/types/host/pi-omp-native.js.map +1 -0
  268. package/lib/types/host/pi-omp-refresh.d.mts +7 -0
  269. package/lib/types/host/pi-omp-refresh.mjs +324 -0
  270. package/lib/types/host/private-launch.mjs +23 -0
  271. package/lib/types/host/process.d.ts +43 -0
  272. package/lib/types/host/process.js +134 -0
  273. package/lib/types/host/process.js.map +1 -0
  274. package/lib/types/host/protocol.d.ts +23 -0
  275. package/lib/types/host/protocol.js +112 -0
  276. package/lib/types/host/protocol.js.map +1 -0
  277. package/lib/types/host/roles.d.ts +34 -0
  278. package/lib/types/host/roles.js +80 -0
  279. package/lib/types/host/roles.js.map +1 -0
  280. package/lib/types/host/routing.d.ts +31 -0
  281. package/lib/types/host/routing.js +248 -0
  282. package/lib/types/host/routing.js.map +1 -0
  283. package/lib/types/host/runtime.d.ts +60 -0
  284. package/lib/types/host/runtime.js +598 -0
  285. package/lib/types/host/runtime.js.map +1 -0
  286. package/lib/types/host/storage.d.ts +48 -0
  287. package/lib/types/host/storage.js +449 -0
  288. package/lib/types/host/storage.js.map +1 -0
  289. package/lib/types/host/telemetry.d.ts +17 -0
  290. package/lib/types/host/telemetry.js +158 -0
  291. package/lib/types/host/telemetry.js.map +1 -0
  292. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  293. package/lib/types/host/windows-account-launch.mjs +47 -0
  294. package/lib/types/host/windows-account-owner.ps1 +137 -0
  295. package/lib/types/host/windows-account-stdio.mjs +19 -0
  296. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  297. package/lib/types/host/windows-account-terminal.js +208 -0
  298. package/lib/types/host/windows-account-terminal.js.map +1 -0
  299. package/lib/types/host/windows-agy-account.ps1 +81 -0
  300. package/lib/types/host/windows-cli-installation.d.ts +31 -0
  301. package/lib/types/host/windows-cli-installation.js +157 -0
  302. package/lib/types/host/windows-cli-installation.js.map +1 -0
  303. package/lib/types/host/windows-hidden-launch.mjs +49 -0
  304. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  305. package/lib/types/host/windows-hidden-process.js +116 -0
  306. package/lib/types/host/windows-hidden-process.js.map +1 -0
  307. package/lib/types/host/zcode-account-models.d.ts +16 -0
  308. package/lib/types/host/zcode-account-models.js +114 -0
  309. package/lib/types/host/zcode-account-models.js.map +1 -0
  310. package/lib/types/host/zcode-adapter.d.ts +93 -0
  311. package/lib/types/host/zcode-adapter.js +808 -0
  312. package/lib/types/host/zcode-adapter.js.map +1 -0
  313. package/lib/types/host/zcode-grok-accounts.d.ts +30 -0
  314. package/lib/types/host/zcode-grok-accounts.js +408 -0
  315. package/lib/types/host/zcode-grok-accounts.js.map +1 -0
  316. package/lib/types/shared/accounts.d.ts +47 -0
  317. package/lib/types/shared/accounts.js +2 -0
  318. package/lib/types/shared/accounts.js.map +1 -0
  319. package/lib/types/shared/builtin-presets.d.ts +2 -0
  320. package/lib/types/shared/builtin-presets.js +231 -0
  321. package/lib/types/shared/builtin-presets.js.map +1 -0
  322. package/lib/types/shared/cli-settings.d.ts +5 -0
  323. package/lib/types/shared/cli-settings.js +2 -0
  324. package/lib/types/shared/cli-settings.js.map +1 -0
  325. package/lib/types/shared/model-presentation.d.ts +10 -0
  326. package/lib/types/shared/model-presentation.js +95 -0
  327. package/lib/types/shared/model-presentation.js.map +1 -0
  328. package/lib/types/shared/models.d.ts +7 -0
  329. package/lib/types/shared/models.js +35 -0
  330. package/lib/types/shared/models.js.map +1 -0
  331. package/lib/types/shared/telemetry.d.ts +18 -0
  332. package/lib/types/shared/telemetry.js +16 -0
  333. package/lib/types/shared/telemetry.js.map +1 -0
  334. package/lib/types/shared/types.d.ts +127 -0
  335. package/lib/types/shared/types.js +147 -0
  336. package/lib/types/shared/types.js.map +1 -0
  337. package/lib/windows-account-bootstrap.ps1 +44 -0
  338. package/lib/windows-account-launch.mjs +47 -0
  339. package/lib/windows-account-owner.ps1 +137 -0
  340. package/lib/windows-account-stdio.mjs +19 -0
  341. package/lib/windows-agy-account.ps1 +81 -0
  342. package/lib/windows-hidden-launch.mjs +49 -0
  343. package/lib/zcode-resume.mjs +423 -0
  344. package/package.json +109 -4
@@ -0,0 +1,423 @@
1
+ // ZCode ignores configured defaults on --resume. Apply the selected native model
2
+ // through metadata RPC, close the server completely, then run the original argv.
3
+ // The Host owns the surrounding Seatbelt and process range; never detach or shell.
4
+ import { spawnNativeProcess } from './native-spawn.mjs'
5
+ import { constants } from 'node:fs'
6
+ import { open, lstat, realpath, unlink } from 'node:fs/promises'
7
+ import { dirname, isAbsolute, resolve } from 'node:path'
8
+ import { StringDecoder } from 'node:string_decoder'
9
+
10
+ process.umask(0o077)
11
+ const controller = new AbortController()
12
+ let active,
13
+ activeDone,
14
+ termination,
15
+ stopped = false,
16
+ resultSent = false
17
+ const failureText = 'ZCode 会话选型或协议验证失败,任务未成功执行,请检查原生配置'
18
+ const stoppedText = 'ZCode 任务已停止'
19
+ const output = (value) => process.stdout.write(JSON.stringify(value) + '\n')
20
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value)
21
+ const string = (value) => typeof value === 'string' && value.length > 0 && !/[\x00-\x1f]/u.test(value)
22
+ const checkActive = () => {
23
+ controller.signal.throwIfAborted()
24
+ }
25
+
26
+ function start(argv, project, pipes) {
27
+ checkActive()
28
+ const child = spawnNativeProcess(argv[0], argv.slice(1), {
29
+ cwd: project,
30
+ env: process.env,
31
+ detached: false,
32
+ stdio: pipes,
33
+ })
34
+ active = child
35
+ termination = undefined
36
+ activeDone = new Promise((fulfill) => {
37
+ child.once('error', () => fulfill({ code: null, signal: undefined }))
38
+ child.once('close', (code, signal) => fulfill({ code, signal }))
39
+ })
40
+ child.stdin?.on('error', () => {})
41
+ return { child, done: activeDone }
42
+ }
43
+
44
+ async function terminate() {
45
+ if (termination) return termination
46
+ const child = active,
47
+ done = activeDone
48
+ if (!child || !done) return
49
+ termination = (async () => {
50
+ child.stdin?.end()
51
+ child.kill('SIGTERM')
52
+ const force = setTimeout(() => child.kill('SIGKILL'), 1000)
53
+ try {
54
+ await done
55
+ } finally {
56
+ clearTimeout(force)
57
+ }
58
+ if (active === child) {
59
+ active = undefined
60
+ activeDone = undefined
61
+ }
62
+ })()
63
+ return termination
64
+ }
65
+
66
+ for (const signal of ['SIGTERM', 'SIGINT'])
67
+ process.on(signal, () => {
68
+ stopped = true
69
+ controller.abort(new Error(stoppedText))
70
+ void terminate()
71
+ })
72
+
73
+ async function readRequest(path) {
74
+ if (!isAbsolute(path ?? '') || !string(process.env.ZCODE_PERSONAL_PROVIDER_CONFIG_FILE))
75
+ throw new Error('Invalid private request')
76
+ const parent = await realpath(dirname(path))
77
+ const expected = await realpath(dirname(process.env.ZCODE_PERSONAL_PROVIDER_CONFIG_FILE))
78
+ if (parent !== expected || parent !== resolve(dirname(path)))
79
+ throw new Error('Request escaped private state')
80
+ const directory = await lstat(parent)
81
+ if (!directory.isDirectory() || directory.isSymbolicLink() || (process.platform !== 'win32' && (directory.mode & 0o077)))
82
+ throw new Error('Unsafe private request directory')
83
+ const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK)
84
+ let value
85
+ try {
86
+ const before = await file.stat()
87
+ if (!before.isFile() || before.nlink !== 1 || before.size > 1024 * 1024 || (process.platform !== 'win32' && (before.mode & 0o077)))
88
+ throw new Error('Unsafe private request')
89
+ const text = await file.readFile('utf8')
90
+ const after = await file.stat()
91
+ if (
92
+ before.size !== Buffer.byteLength(text) ||
93
+ before.size !== after.size ||
94
+ before.mtimeMs !== after.mtimeMs
95
+ )
96
+ throw new Error('Request changed during read')
97
+ value = JSON.parse(text)
98
+ } finally {
99
+ await file.close()
100
+ }
101
+ await unlink(path)
102
+ if (
103
+ !object(value) ||
104
+ !isAbsolute(value.executable ?? '') ||
105
+ !isAbsolute(value.project ?? '') ||
106
+ !string(value.conversationId) ||
107
+ !object(value.selection) ||
108
+ !string(value.selection.providerId) ||
109
+ !/^[A-Za-z0-9_.:-]+$/u.test(value.selection.providerId) ||
110
+ !string(value.selection.modelId) ||
111
+ !Array.isArray(value.argv) ||
112
+ value.argv.some((arg) => typeof arg !== 'string')
113
+ )
114
+ throw new Error('Invalid resume request')
115
+ const prefix = /\.[cm]?js$/u.test(value.executable)
116
+ ? [process.execPath, value.executable]
117
+ : [value.executable]
118
+ if (prefix.some((arg, index) => value.argv[index] !== arg)) throw new Error('Native executable changed')
119
+ const flags = new Map()
120
+ const args = value.argv.slice(prefix.length)
121
+ if (args.length % 2) throw new Error('Invalid native argv')
122
+ for (let index = 0; index < args.length; index += 2) {
123
+ if (
124
+ !['--cwd', '--mode', '--output-format', '--disallowedTools', '--resume', '--prompt'].includes(
125
+ args[index],
126
+ ) ||
127
+ flags.has(args[index])
128
+ )
129
+ throw new Error('Unexpected native option')
130
+ flags.set(args[index], args[index + 1])
131
+ }
132
+ if (
133
+ flags.size !== 6 ||
134
+ flags.get('--cwd') !== value.project ||
135
+ flags.get('--resume') !== value.conversationId ||
136
+ !['plan', 'edit'].includes(flags.get('--mode')) ||
137
+ flags.get('--output-format') !== 'stream-json' ||
138
+ !string(flags.get('--disallowedTools')) ||
139
+ !flags.get('--prompt')?.trim()
140
+ )
141
+ throw new Error('Native request identity or permission changed')
142
+ if (
143
+ value.selection.options !== undefined &&
144
+ (!object(value.selection.options) || !string(value.selection.options.reasoningLevel))
145
+ )
146
+ throw new Error('Invalid native reasoning evidence')
147
+ return {
148
+ ...value,
149
+ selection: {
150
+ providerId: value.selection.providerId,
151
+ modelId: value.selection.modelId,
152
+ ...(value.selection.options
153
+ ? { options: { reasoningLevel: value.selection.options.reasoningLevel } }
154
+ : {}),
155
+ },
156
+ serverArgv: [
157
+ ...prefix,
158
+ 'app-server',
159
+ '--cwd',
160
+ value.project,
161
+ '--disallowedTools',
162
+ flags.get('--disallowedTools'),
163
+ ],
164
+ }
165
+ }
166
+
167
+ function frames(child, consume, fail) {
168
+ const decoder = new StringDecoder('utf8')
169
+ let pending = '',
170
+ bytes = 0,
171
+ failed = false
172
+ const receive = (chunk) => {
173
+ if (failed) return
174
+ try {
175
+ bytes += chunk.length
176
+ if (bytes > 16 * 1024 * 1024) throw new Error('Native output limit')
177
+ pending += decoder.write(chunk)
178
+ let end
179
+ while ((end = pending.indexOf('\n')) >= 0) {
180
+ const line = pending.slice(0, end)
181
+ pending = pending.slice(end + 1)
182
+ if (Buffer.byteLength(line) > 1024 * 1024) throw new Error('Native frame limit')
183
+ if (line.trim()) consume(JSON.parse(line))
184
+ }
185
+ if (Buffer.byteLength(pending) > 1024 * 1024) throw new Error('Native pending frame limit')
186
+ } catch (error) {
187
+ failed = true
188
+ fail(error)
189
+ }
190
+ }
191
+ child.stdout.on('data', receive)
192
+ // Native errors/settings may contain credential data. Do not forward stderr.
193
+ child.stderr.on('data', (chunk) => {
194
+ bytes += chunk.length
195
+ if (bytes > 16 * 1024 * 1024 && !failed) {
196
+ failed = true
197
+ fail(new Error('Native stderr limit'))
198
+ }
199
+ })
200
+ return () => {
201
+ pending += decoder.end()
202
+ if (!failed && pending.trim()) throw new Error('Truncated native frame')
203
+ }
204
+ }
205
+
206
+ async function selectSession(request) {
207
+ const { child, done } = start(request.serverArgv, request.project, ['pipe', 'pipe', 'pipe'])
208
+ const pending = new Map()
209
+ let sequence = 0,
210
+ failed
211
+ const rejectAll = (error) => {
212
+ failed ??= error
213
+ for (const waiting of pending.values()) waiting.reject(error)
214
+ pending.clear()
215
+ }
216
+ const finishFrames = frames(
217
+ child,
218
+ (frame) => {
219
+ if (!object(frame)) throw new Error('Invalid metadata frame')
220
+ if (typeof frame.method === 'string') {
221
+ if (frame.id !== undefined)
222
+ child.stdin.write(
223
+ JSON.stringify({
224
+ id: frame.id,
225
+ ...(frame.method === 'session/requestRuntimePreferences'
226
+ ? {
227
+ result: {
228
+ nativeSearchEnhancementsEnabled: false,
229
+ memoryEnabled: false,
230
+ askUserQuestionAutoResolutionEnabled: false,
231
+ },
232
+ }
233
+ : {
234
+ error: {
235
+ code: -32601,
236
+ message: 'Interactive requests are disabled during metadata selection',
237
+ },
238
+ }),
239
+ }) + '\n',
240
+ )
241
+ return
242
+ }
243
+ const waiting = pending.get(frame.id)
244
+ if (!waiting) return
245
+ pending.delete(frame.id)
246
+ if (frame.error || !('result' in frame)) waiting.reject(new Error('Metadata request rejected'))
247
+ else waiting.resolve(frame.result)
248
+ },
249
+ (error) => {
250
+ rejectAll(error)
251
+ void terminate()
252
+ },
253
+ )
254
+ void done.then(() => rejectAll(new Error('Metadata server exited')))
255
+ const rpc = (method, params) =>
256
+ new Promise((fulfill, reject) => {
257
+ checkActive()
258
+ if (failed) {
259
+ reject(failed)
260
+ return
261
+ }
262
+ const id = `cliworker-resume-${++sequence}`
263
+ const abort = () => settle(reject, new Error(stoppedText))
264
+ const timer = setTimeout(() => settle(reject, new Error('Metadata request timeout')), 15000)
265
+ const settle = (callback, value) => {
266
+ clearTimeout(timer)
267
+ controller.signal.removeEventListener('abort', abort)
268
+ pending.delete(id)
269
+ callback(value)
270
+ }
271
+ pending.set(id, {
272
+ resolve: (value) => settle(fulfill, value),
273
+ reject: (error) => settle(reject, error),
274
+ })
275
+ controller.signal.addEventListener('abort', abort, { once: true })
276
+ if (controller.signal.aborted) {
277
+ abort()
278
+ return
279
+ }
280
+ child.stdin.write(JSON.stringify({ id, method, params }) + '\n')
281
+ })
282
+ try {
283
+ const resumed = await rpc('session/resume', {
284
+ sessionId: request.conversationId,
285
+ mcpServers: [],
286
+ toolAllowlist: [],
287
+ offPeakToolEnabled: false,
288
+ dynamicWorkflowEnabled: false,
289
+ })
290
+ if (resumed?.session?.sessionId !== request.conversationId) throw new Error('Resume identity mismatch')
291
+ if (!request.selection.options) {
292
+ const available = resumed.settings?.model?.available
293
+ const selected = Array.isArray(available)
294
+ ? available.find(
295
+ (model) =>
296
+ model.ref?.providerId === request.selection.providerId &&
297
+ model.ref?.modelId === request.selection.modelId,
298
+ )
299
+ : undefined
300
+ const nativeDefault = selected?.reasoning?.defaultLevel
301
+ if (
302
+ !string(nativeDefault) ||
303
+ !Array.isArray(selected?.reasoning?.levels) ||
304
+ !selected.reasoning.levels.some((level) => level.value === nativeDefault)
305
+ )
306
+ throw new Error('Missing native reasoning default')
307
+ request.selection.options = { reasoningLevel: nativeDefault }
308
+ }
309
+ await rpc('session/setModel', {
310
+ sessionId: request.conversationId,
311
+ model: request.selection,
312
+ persistAsWorkspaceLastUsed: false,
313
+ })
314
+ const snapshot = await rpc('session/read', { sessionId: request.conversationId, messageLimit: 1 })
315
+ const current = snapshot?.settings?.model?.current
316
+ if (
317
+ snapshot?.session?.sessionId !== request.conversationId ||
318
+ current?.providerId !== request.selection.providerId ||
319
+ current?.modelId !== request.selection.modelId ||
320
+ current?.options?.reasoningLevel !== request.selection.options.reasoningLevel
321
+ )
322
+ throw new Error('Native selected model or effort mismatch')
323
+ const closed = await rpc('session/close', { sessionId: request.conversationId })
324
+ if (closed?.closed !== true) throw new Error('Session did not close')
325
+ child.stdin.end()
326
+ const timeout = setTimeout(() => {
327
+ rejectAll(new Error('Metadata server did not exit'))
328
+ void terminate()
329
+ }, 5000)
330
+ let outcome
331
+ try {
332
+ outcome = await done
333
+ } finally {
334
+ clearTimeout(timeout)
335
+ }
336
+ finishFrames()
337
+ if (outcome.code !== 0 || outcome.signal || stopped)
338
+ throw new Error('Metadata server did not exit cleanly')
339
+ if (active === child) {
340
+ active = undefined
341
+ activeDone = undefined
342
+ termination = undefined
343
+ }
344
+ } finally {
345
+ rejectAll(new Error('Metadata selection ended'))
346
+ await terminate()
347
+ }
348
+ checkActive()
349
+ }
350
+
351
+ async function runHeadless(request) {
352
+ const { child, done } = start(request.argv, request.project, ['ignore', 'pipe', 'pipe'])
353
+ let failed, terminal
354
+ const finishFrames = frames(
355
+ child,
356
+ (frame) => {
357
+ if (!object(frame) || typeof frame.type !== 'string' || terminal)
358
+ throw new Error('Invalid native task frame')
359
+ if (frame.sessionId !== undefined && frame.sessionId !== request.conversationId)
360
+ throw new Error('Native task session changed')
361
+ const payload = object(frame.payload) ? frame.payload : {}
362
+ if (
363
+ frame.type === 'session.updated' &&
364
+ ((payload.providerId !== undefined && payload.providerId !== request.selection.providerId) ||
365
+ (payload.modelId !== undefined && payload.modelId !== request.selection.modelId))
366
+ )
367
+ throw new Error('Observed model differs from selected model')
368
+ if (frame.type === 'result') {
369
+ terminal = frame
370
+ return
371
+ }
372
+ output(
373
+ frame.type === 'error' || frame.type === 'turn.failed'
374
+ ? { type: frame.type, sessionId: request.conversationId, payload: { message: failureText } }
375
+ : frame,
376
+ )
377
+ },
378
+ (error) => {
379
+ failed ??= error
380
+ void terminate()
381
+ },
382
+ )
383
+ const outcome = await done
384
+ finishFrames()
385
+ if (
386
+ failed ||
387
+ stopped ||
388
+ outcome.code !== 0 ||
389
+ outcome.signal ||
390
+ !terminal ||
391
+ terminal.sessionId !== request.conversationId ||
392
+ typeof terminal.response !== 'string'
393
+ )
394
+ throw new Error('Native task did not finish correctly')
395
+ output(terminal)
396
+ resultSent = true
397
+ if (active === child) {
398
+ active = undefined
399
+ activeDone = undefined
400
+ termination = undefined
401
+ }
402
+ }
403
+
404
+ let request
405
+ try {
406
+ request = await readRequest(process.argv[2])
407
+ checkActive()
408
+ await selectSession(request)
409
+ checkActive()
410
+ await runHeadless(request)
411
+ } catch {
412
+ await terminate()
413
+ if (!resultSent) {
414
+ const sessionId = request?.conversationId
415
+ output({
416
+ type: 'error',
417
+ ...(sessionId ? { sessionId } : {}),
418
+ payload: { message: stopped ? stoppedText : failureText },
419
+ })
420
+ if (sessionId) output({ type: 'result', sessionId, response: '' })
421
+ }
422
+ process.exitCode = stopped ? 143 : 1
423
+ }
package/package.json CHANGED
@@ -1,6 +1,111 @@
1
1
  {
2
2
  "name": "dsh-cliworker-now",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.7.7",
4
+ "description": "Multiple agent CLI conversations in the DeepSeek Harness sidebar",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "engines": {
8
+ "node": ">=22.19.0"
9
+ },
10
+ "main": "./lib/index.js",
11
+ "types": "./lib/types/host/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./lib/types/host/index.d.ts",
15
+ "default": "./lib/index.js"
16
+ },
17
+ "./client": {
18
+ "types": "./lib/types/client/index.d.ts",
19
+ "default": "./lib/client.js"
20
+ },
21
+ "./typert": {
22
+ "types": "./lib/typert.host.d.ts",
23
+ "default": "./lib/typert.host.js"
24
+ },
25
+ "./remote": {
26
+ "types": "./lib/typert.remote-client.d.ts",
27
+ "default": "./lib/typert.remote-client.js"
28
+ }
29
+ },
30
+ "dsh": {
31
+ "bundle": {
32
+ "patch": "./cordis.patch.yml"
33
+ },
34
+ "client": {
35
+ "platform": "web",
36
+ "inject": [
37
+ "@deepseek-ai/dsh-api-remotes",
38
+ "@deepseek-ai/dsh-client-ui-sidebar-right",
39
+ "@deepseek-ai/dsh-client-ui-session",
40
+ "@deepseek-ai/dsh-client-locale",
41
+ "@deepseek-ai/dsh-client-ui-theme"
42
+ ]
43
+ }
44
+ },
45
+ "dependencies": {
46
+ "@deepseek-ai/schemastery": "3.18.4",
47
+ "@xterm/addon-fit": "0.11.0",
48
+ "@xterm/xterm": "6.0.0",
49
+ "yaml": "2.9.1",
50
+ "zod": "4.4.3"
51
+ },
52
+ "peerDependencies": {
53
+ "@deepseek-ai/cordis": "4.0.4",
54
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
55
+ "@deepseek-ai/dsh-api-gateway": "0.2.0-rc.2",
56
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
57
+ "@deepseek-ai/dsh-brand": "0.2.0-rc.2",
58
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
59
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.2",
60
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
61
+ "@deepseek-ai/dsh-client-ui-primitives": "0.2.0-rc.2",
62
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.2",
63
+ "@deepseek-ai/dsh-client-ui-session": "0.2.0-rc.2",
64
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2",
65
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.2.0-rc.2",
66
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
67
+ "@deepseek-ai/dsh-client-ui-theme": "0.2.0-rc.2",
68
+ "@deepseek-ai/dsh-jobs": "0.2.0-rc.2",
69
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
70
+ "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
71
+ "@deepseek-ai/dsh-sandbox": "0.2.0-rc.2",
72
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
73
+ "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
74
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
75
+ "@deepseek-ai/dsh-subprocess": "0.2.0-rc.2",
76
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
77
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
78
+ "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
79
+ "@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2",
80
+ "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
81
+ "@deepseek-ai/dsh-user-questions": "0.2.0-rc.2",
82
+ "@deepseek-ai/dsh-util-values": "0.2.0-rc.2",
83
+ "@deepseek-ai/dsh-workspace": "0.2.0-rc.2",
84
+ "react": "^18.2.0",
85
+ "react-dom": "^18.2.0"
86
+ },
87
+ "files": [
88
+ "lib",
89
+ "!lib/*.tsbuildinfo",
90
+ "cordis.patch.yml",
91
+ "README.md",
92
+ "README.en.md",
93
+ "lib/typert.host.js",
94
+ "lib/typert.host.d.ts",
95
+ "lib/typert.remote-client.js",
96
+ "lib/typert.remote-client.d.ts"
97
+ ],
98
+ "private": false,
99
+ "repository": {
100
+ "type": "git",
101
+ "url": "git+https://github.com/SuperWheel/cliworker-now.git"
102
+ },
103
+ "bugs": {
104
+ "url": "https://github.com/SuperWheel/cliworker-now/issues"
105
+ },
106
+ "homepage": "https://github.com/SuperWheel/cliworker-now#readme",
107
+ "publishConfig": {
108
+ "access": "public",
109
+ "registry": "https://registry.npmjs.org/"
110
+ }
111
+ }