dsh-cliworker-now 0.0.0-stage → 0.7.6

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 (285) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +344 -0
  3. package/README.md +346 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/account-models.mjs +259 -0
  6. package/lib/client.js +21542 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/grok-catalog.mjs +145 -0
  9. package/lib/hermes-native-entry.py +61 -0
  10. package/lib/index.js +12409 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/native-launch.mjs +179 -0
  13. package/lib/own-account-lease.mjs +105 -0
  14. package/lib/pi-installation.mjs +63 -0
  15. package/lib/pi-login.mjs +80 -0
  16. package/lib/pi-native-catalog.mjs +417 -0
  17. package/lib/pi-omp-bridge.mjs +602 -0
  18. package/lib/pi-omp-environment.mjs +15 -0
  19. package/lib/pi-omp-refresh.mjs +324 -0
  20. package/lib/private-launch.mjs +19 -0
  21. package/lib/terminal-bridge.mjs +18 -0
  22. package/lib/typert.host.d.ts +3 -0
  23. package/lib/typert.host.js +1358 -0
  24. package/lib/typert.remote-client.d.ts +70 -0
  25. package/lib/typert.remote-client.d.ts.map +1 -0
  26. package/lib/typert.remote-client.js +1190 -0
  27. package/lib/types/client/account-terminal-css.d.ts +1 -0
  28. package/lib/types/client/account-terminal-css.js +3 -0
  29. package/lib/types/client/account-terminal-css.js.map +1 -0
  30. package/lib/types/client/account-terminal.d.ts +13 -0
  31. package/lib/types/client/account-terminal.js +296 -0
  32. package/lib/types/client/account-terminal.js.map +1 -0
  33. package/lib/types/client/assets/antigravity.png +0 -0
  34. package/lib/types/client/assets/claude-code.png +0 -0
  35. package/lib/types/client/assets/cliworker-now-logo.png +0 -0
  36. package/lib/types/client/assets/codex.png +0 -0
  37. package/lib/types/client/assets/grok.png +0 -0
  38. package/lib/types/client/assets/hermes.png +0 -0
  39. package/lib/types/client/assets/kimi-dark.png +0 -0
  40. package/lib/types/client/assets/kimi-light.png +0 -0
  41. package/lib/types/client/assets/mimo-code.png +0 -0
  42. package/lib/types/client/assets/omp.png +0 -0
  43. package/lib/types/client/assets/opencode.png +0 -0
  44. package/lib/types/client/assets/pi.png +0 -0
  45. package/lib/types/client/assets/zcode.png +0 -0
  46. package/lib/types/client/composer-keymap.d.ts +18 -0
  47. package/lib/types/client/composer-keymap.js +49 -0
  48. package/lib/types/client/composer-keymap.js.map +1 -0
  49. package/lib/types/client/conversation-timeline.d.ts +6 -0
  50. package/lib/types/client/conversation-timeline.js +65 -0
  51. package/lib/types/client/conversation-timeline.js.map +1 -0
  52. package/lib/types/client/copy-text.d.ts +5 -0
  53. package/lib/types/client/copy-text.js +45 -0
  54. package/lib/types/client/copy-text.js.map +1 -0
  55. package/lib/types/client/icons.d.ts +21 -0
  56. package/lib/types/client/icons.js +68 -0
  57. package/lib/types/client/icons.js.map +1 -0
  58. package/lib/types/client/index.d.ts +3 -0
  59. package/lib/types/client/index.js +124 -0
  60. package/lib/types/client/index.js.map +1 -0
  61. package/lib/types/client/management-styles.d.ts +1 -0
  62. package/lib/types/client/management-styles.js +17 -0
  63. package/lib/types/client/management-styles.js.map +1 -0
  64. package/lib/types/client/name-copy.d.ts +5 -0
  65. package/lib/types/client/name-copy.js +107 -0
  66. package/lib/types/client/name-copy.js.map +1 -0
  67. package/lib/types/client/native-job-overlay.d.ts +11 -0
  68. package/lib/types/client/native-job-overlay.js +129 -0
  69. package/lib/types/client/native-job-overlay.js.map +1 -0
  70. package/lib/types/client/operation-error.d.ts +2 -0
  71. package/lib/types/client/operation-error.js +12 -0
  72. package/lib/types/client/operation-error.js.map +1 -0
  73. package/lib/types/client/panel.d.ts +8 -0
  74. package/lib/types/client/panel.js +310 -0
  75. package/lib/types/client/panel.js.map +1 -0
  76. package/lib/types/client/rename-copy-styles.d.ts +1 -0
  77. package/lib/types/client/rename-copy-styles.js +21 -0
  78. package/lib/types/client/rename-copy-styles.js.map +1 -0
  79. package/lib/types/client/rename-worker.d.ts +9 -0
  80. package/lib/types/client/rename-worker.js +53 -0
  81. package/lib/types/client/rename-worker.js.map +1 -0
  82. package/lib/types/client/role-presets.d.ts +6 -0
  83. package/lib/types/client/role-presets.js +111 -0
  84. package/lib/types/client/role-presets.js.map +1 -0
  85. package/lib/types/client/settings-dialog.d.ts +13 -0
  86. package/lib/types/client/settings-dialog.js +415 -0
  87. package/lib/types/client/settings-dialog.js.map +1 -0
  88. package/lib/types/client/stat-popover.d.ts +10 -0
  89. package/lib/types/client/stat-popover.js +32 -0
  90. package/lib/types/client/stat-popover.js.map +1 -0
  91. package/lib/types/client/styles.d.ts +9 -0
  92. package/lib/types/client/styles.js +221 -0
  93. package/lib/types/client/styles.js.map +1 -0
  94. package/lib/types/client/telemetry.d.ts +11 -0
  95. package/lib/types/client/telemetry.js +24 -0
  96. package/lib/types/client/telemetry.js.map +1 -0
  97. package/lib/types/client/worker-card.d.ts +10 -0
  98. package/lib/types/client/worker-card.js +75 -0
  99. package/lib/types/client/worker-card.js.map +1 -0
  100. package/lib/types/client/worker-model-menu.d.ts +9 -0
  101. package/lib/types/client/worker-model-menu.js +136 -0
  102. package/lib/types/client/worker-model-menu.js.map +1 -0
  103. package/lib/types/client/workers.d.ts +21 -0
  104. package/lib/types/client/workers.js +59 -0
  105. package/lib/types/client/workers.js.map +1 -0
  106. package/lib/types/host/account-identity.d.ts +16 -0
  107. package/lib/types/host/account-identity.js +126 -0
  108. package/lib/types/host/account-identity.js.map +1 -0
  109. package/lib/types/host/account-login.d.ts +10 -0
  110. package/lib/types/host/account-login.js +126 -0
  111. package/lib/types/host/account-login.js.map +1 -0
  112. package/lib/types/host/account-models.d.mts +19 -0
  113. package/lib/types/host/account-models.mjs +259 -0
  114. package/lib/types/host/accounts.d.ts +41 -0
  115. package/lib/types/host/accounts.js +838 -0
  116. package/lib/types/host/accounts.js.map +1 -0
  117. package/lib/types/host/adapters.d.ts +24 -0
  118. package/lib/types/host/adapters.js +331 -0
  119. package/lib/types/host/adapters.js.map +1 -0
  120. package/lib/types/host/agy-context.d.ts +8 -0
  121. package/lib/types/host/agy-context.js +122 -0
  122. package/lib/types/host/agy-context.js.map +1 -0
  123. package/lib/types/host/agy-models.d.ts +4 -0
  124. package/lib/types/host/agy-models.js +37 -0
  125. package/lib/types/host/agy-models.js.map +1 -0
  126. package/lib/types/host/authorized-catalog.d.ts +14 -0
  127. package/lib/types/host/authorized-catalog.js +26 -0
  128. package/lib/types/host/authorized-catalog.js.map +1 -0
  129. package/lib/types/host/bridge-protocol.d.ts +15 -0
  130. package/lib/types/host/bridge-protocol.js +80 -0
  131. package/lib/types/host/bridge-protocol.js.map +1 -0
  132. package/lib/types/host/cli-account-binding.d.ts +32 -0
  133. package/lib/types/host/cli-account-binding.js +502 -0
  134. package/lib/types/host/cli-account-binding.js.map +1 -0
  135. package/lib/types/host/cli-protocol.d.ts +27 -0
  136. package/lib/types/host/cli-protocol.js +212 -0
  137. package/lib/types/host/cli-protocol.js.map +1 -0
  138. package/lib/types/host/codex-account.d.ts +8 -0
  139. package/lib/types/host/codex-account.js +143 -0
  140. package/lib/types/host/codex-account.js.map +1 -0
  141. package/lib/types/host/codex-models.d.ts +6 -0
  142. package/lib/types/host/codex-models.js +165 -0
  143. package/lib/types/host/codex-models.js.map +1 -0
  144. package/lib/types/host/extended-adapters.d.ts +43 -0
  145. package/lib/types/host/extended-adapters.js +205 -0
  146. package/lib/types/host/extended-adapters.js.map +1 -0
  147. package/lib/types/host/first-party-account-context.d.ts +26 -0
  148. package/lib/types/host/first-party-account-context.js +55 -0
  149. package/lib/types/host/first-party-account-context.js.map +1 -0
  150. package/lib/types/host/first-party-models.d.ts +28 -0
  151. package/lib/types/host/first-party-models.js +370 -0
  152. package/lib/types/host/first-party-models.js.map +1 -0
  153. package/lib/types/host/grok-adapter.d.ts +44 -0
  154. package/lib/types/host/grok-adapter.js +293 -0
  155. package/lib/types/host/grok-adapter.js.map +1 -0
  156. package/lib/types/host/grok-models.d.ts +47 -0
  157. package/lib/types/host/grok-models.js +320 -0
  158. package/lib/types/host/grok-models.js.map +1 -0
  159. package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
  160. package/lib/types/host/harness-opencode-accounts.js +80 -0
  161. package/lib/types/host/harness-opencode-accounts.js.map +1 -0
  162. package/lib/types/host/hermes-account-context.d.ts +8 -0
  163. package/lib/types/host/hermes-account-context.js +99 -0
  164. package/lib/types/host/hermes-account-context.js.map +1 -0
  165. package/lib/types/host/hermes-accounts.d.ts +19 -0
  166. package/lib/types/host/hermes-accounts.js +342 -0
  167. package/lib/types/host/hermes-accounts.js.map +1 -0
  168. package/lib/types/host/hermes-adapter.d.ts +90 -0
  169. package/lib/types/host/hermes-adapter.js +446 -0
  170. package/lib/types/host/hermes-adapter.js.map +1 -0
  171. package/lib/types/host/hermes-env.d.ts +4 -0
  172. package/lib/types/host/hermes-env.js +22 -0
  173. package/lib/types/host/hermes-env.js.map +1 -0
  174. package/lib/types/host/hermes-installation.d.ts +10 -0
  175. package/lib/types/host/hermes-installation.js +162 -0
  176. package/lib/types/host/hermes-installation.js.map +1 -0
  177. package/lib/types/host/hermes-models.d.ts +26 -0
  178. package/lib/types/host/hermes-models.js +328 -0
  179. package/lib/types/host/hermes-models.js.map +1 -0
  180. package/lib/types/host/hermes-native-entry.py +61 -0
  181. package/lib/types/host/hermes-nous.d.ts +49 -0
  182. package/lib/types/host/hermes-nous.js +343 -0
  183. package/lib/types/host/hermes-nous.js.map +1 -0
  184. package/lib/types/host/hermes-suppression.d.ts +7 -0
  185. package/lib/types/host/hermes-suppression.js +69 -0
  186. package/lib/types/host/hermes-suppression.js.map +1 -0
  187. package/lib/types/host/index.d.ts +138 -0
  188. package/lib/types/host/index.js +932 -0
  189. package/lib/types/host/index.js.map +1 -0
  190. package/lib/types/host/kimi-accounts.d.ts +15 -0
  191. package/lib/types/host/kimi-accounts.js +218 -0
  192. package/lib/types/host/kimi-accounts.js.map +1 -0
  193. package/lib/types/host/managed-agent.d.ts +4 -0
  194. package/lib/types/host/managed-agent.js +127 -0
  195. package/lib/types/host/managed-agent.js.map +1 -0
  196. package/lib/types/host/mimo-configuration.d.ts +22 -0
  197. package/lib/types/host/mimo-configuration.js +258 -0
  198. package/lib/types/host/mimo-configuration.js.map +1 -0
  199. package/lib/types/host/native-launch.d.mts +2 -0
  200. package/lib/types/host/native-launch.mjs +179 -0
  201. package/lib/types/host/native-process.d.ts +3 -0
  202. package/lib/types/host/native-process.js +26 -0
  203. package/lib/types/host/native-process.js.map +1 -0
  204. package/lib/types/host/opencode-adapter.d.ts +94 -0
  205. package/lib/types/host/opencode-adapter.js +507 -0
  206. package/lib/types/host/opencode-adapter.js.map +1 -0
  207. package/lib/types/host/opencode-native.d.ts +27 -0
  208. package/lib/types/host/opencode-native.js +403 -0
  209. package/lib/types/host/opencode-native.js.map +1 -0
  210. package/lib/types/host/own-account-lease.d.mts +5 -0
  211. package/lib/types/host/own-account-lease.mjs +105 -0
  212. package/lib/types/host/pi-installation.d.mts +7 -0
  213. package/lib/types/host/pi-installation.mjs +63 -0
  214. package/lib/types/host/pi-omp-accounts.d.ts +28 -0
  215. package/lib/types/host/pi-omp-accounts.js +175 -0
  216. package/lib/types/host/pi-omp-accounts.js.map +1 -0
  217. package/lib/types/host/pi-omp-adapter.d.ts +32 -0
  218. package/lib/types/host/pi-omp-adapter.js +176 -0
  219. package/lib/types/host/pi-omp-adapter.js.map +1 -0
  220. package/lib/types/host/pi-omp-environment.d.mts +1 -0
  221. package/lib/types/host/pi-omp-environment.mjs +15 -0
  222. package/lib/types/host/pi-omp-identity.d.ts +2 -0
  223. package/lib/types/host/pi-omp-identity.js +142 -0
  224. package/lib/types/host/pi-omp-identity.js.map +1 -0
  225. package/lib/types/host/pi-omp-logout.d.ts +3 -0
  226. package/lib/types/host/pi-omp-logout.js +152 -0
  227. package/lib/types/host/pi-omp-logout.js.map +1 -0
  228. package/lib/types/host/pi-omp-native.d.ts +71 -0
  229. package/lib/types/host/pi-omp-native.js +753 -0
  230. package/lib/types/host/pi-omp-native.js.map +1 -0
  231. package/lib/types/host/pi-omp-refresh.d.mts +7 -0
  232. package/lib/types/host/pi-omp-refresh.mjs +324 -0
  233. package/lib/types/host/process.d.ts +43 -0
  234. package/lib/types/host/process.js +134 -0
  235. package/lib/types/host/process.js.map +1 -0
  236. package/lib/types/host/protocol.d.ts +23 -0
  237. package/lib/types/host/protocol.js +112 -0
  238. package/lib/types/host/protocol.js.map +1 -0
  239. package/lib/types/host/roles.d.ts +34 -0
  240. package/lib/types/host/roles.js +80 -0
  241. package/lib/types/host/roles.js.map +1 -0
  242. package/lib/types/host/routing.d.ts +31 -0
  243. package/lib/types/host/routing.js +225 -0
  244. package/lib/types/host/routing.js.map +1 -0
  245. package/lib/types/host/runtime.d.ts +60 -0
  246. package/lib/types/host/runtime.js +586 -0
  247. package/lib/types/host/runtime.js.map +1 -0
  248. package/lib/types/host/storage.d.ts +48 -0
  249. package/lib/types/host/storage.js +449 -0
  250. package/lib/types/host/storage.js.map +1 -0
  251. package/lib/types/host/telemetry.d.ts +17 -0
  252. package/lib/types/host/telemetry.js +158 -0
  253. package/lib/types/host/telemetry.js.map +1 -0
  254. package/lib/types/host/zcode-account-models.d.ts +16 -0
  255. package/lib/types/host/zcode-account-models.js +114 -0
  256. package/lib/types/host/zcode-account-models.js.map +1 -0
  257. package/lib/types/host/zcode-adapter.d.ts +93 -0
  258. package/lib/types/host/zcode-adapter.js +804 -0
  259. package/lib/types/host/zcode-adapter.js.map +1 -0
  260. package/lib/types/host/zcode-grok-accounts.d.ts +28 -0
  261. package/lib/types/host/zcode-grok-accounts.js +359 -0
  262. package/lib/types/host/zcode-grok-accounts.js.map +1 -0
  263. package/lib/types/shared/accounts.d.ts +43 -0
  264. package/lib/types/shared/accounts.js +2 -0
  265. package/lib/types/shared/accounts.js.map +1 -0
  266. package/lib/types/shared/builtin-presets.d.ts +2 -0
  267. package/lib/types/shared/builtin-presets.js +231 -0
  268. package/lib/types/shared/builtin-presets.js.map +1 -0
  269. package/lib/types/shared/cli-settings.d.ts +5 -0
  270. package/lib/types/shared/cli-settings.js +2 -0
  271. package/lib/types/shared/cli-settings.js.map +1 -0
  272. package/lib/types/shared/model-presentation.d.ts +10 -0
  273. package/lib/types/shared/model-presentation.js +95 -0
  274. package/lib/types/shared/model-presentation.js.map +1 -0
  275. package/lib/types/shared/models.d.ts +7 -0
  276. package/lib/types/shared/models.js +35 -0
  277. package/lib/types/shared/models.js.map +1 -0
  278. package/lib/types/shared/telemetry.d.ts +18 -0
  279. package/lib/types/shared/telemetry.js +16 -0
  280. package/lib/types/shared/telemetry.js.map +1 -0
  281. package/lib/types/shared/types.d.ts +127 -0
  282. package/lib/types/shared/types.js +147 -0
  283. package/lib/types/shared/types.js.map +1 -0
  284. package/lib/zcode-resume.mjs +423 -0
  285. package/package.json +109 -4
@@ -0,0 +1,49 @@
1
+ import type { Effort } from '../shared/types.ts';
2
+ import type { AccountModelScope } from './account-models.mjs';
3
+ export declare const NOUS_PORTAL = "https://portal.nousresearch.com";
4
+ export declare const NOUS_INFERENCE = "https://inference-api.nousresearch.com/v1";
5
+ export declare class HermesNousError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export interface HermesNousSource {
9
+ /** Host only. Never serialize this object in a public response or on disk. */
10
+ access: string;
11
+ agentKey: string;
12
+ expires: number;
13
+ email?: string;
14
+ principal: {
15
+ kind: 'oauth';
16
+ subject: string;
17
+ organization: string;
18
+ issuer: string;
19
+ clientId?: string;
20
+ };
21
+ route: {
22
+ portal: string;
23
+ inference: string;
24
+ anthropicWire?: string;
25
+ };
26
+ paidAccess?: boolean;
27
+ modelCooldowns: Record<string, unknown>[];
28
+ }
29
+ /** Hermes 6c80c327: flat providers.nous, native device-code pool and invoke JWT.
30
+ * No refresh-only, guest, fallback store or different pooled principal is promoted. */
31
+ export declare function projectHermesNousSource(auth: any, minTtlSeconds?: number): HermesNousSource;
32
+ export declare function hermesNousMinimumTtl(env: Record<string, string>): number;
33
+ /** Runtime uses its supported MIN_KEY_TTL override (120s), matching the native
34
+ * invoke-JWT skew. The native default 1800s is a proactive-refresh optimization,
35
+ * not invalid-account evidence. An explicit own-home setting still takes precedence. */
36
+ export declare function selectHermesNousSource(material: {
37
+ config: any;
38
+ auth: any;
39
+ env: Record<string, string>;
40
+ }): HermesNousSource;
41
+ export declare function hermesNousEfforts(home: string, source: HermesNousSource, model: string): Effort[];
42
+ export declare function beginHermesNousCapabilities(home: string, source: HermesNousSource): symbol;
43
+ export declare function forgetHermesNousCapabilities(home: string, source: HermesNousSource, generation: symbol): void;
44
+ /** Two read-only, authenticated native endpoints. No public fallback, retry or OAuth refresh. */
45
+ export declare function fetchHermesNousModels(home: string, source: HermesNousSource, options?: {
46
+ signal?: AbortSignal;
47
+ fetch?: typeof fetch;
48
+ timeoutMs?: number;
49
+ }, generation?: symbol): Promise<AccountModelScope>;
@@ -0,0 +1,343 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { accountEmail } from "./account-identity.js";
3
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
4
+ const text = (value) => typeof value === 'string' && !!value.trim() && value.length <= 32768 && !/[\x00-\x20\x7f]/.test(value);
5
+ export const NOUS_PORTAL = 'https://portal.nousresearch.com';
6
+ export const NOUS_INFERENCE = 'https://inference-api.nousresearch.com/v1';
7
+ const canonical = (value, expected) => typeof value === 'string' && value.replace(/\/+$/, '') === expected;
8
+ export class HermesNousError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = 'HermesNousError';
12
+ }
13
+ }
14
+ const invalid = () => {
15
+ throw new HermesNousError('Nous 当前账号无法确认,请在 Hermes 登录设置中检查');
16
+ };
17
+ /** Unsigned native JWT claims are local identity/expiry metadata, never remote proof. */
18
+ function claims(token) {
19
+ if (!text(token) || !/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(token))
20
+ return {};
21
+ const bytes = Buffer.from(token.split('.')[1], 'base64url');
22
+ try {
23
+ const value = JSON.parse(bytes.toString('utf8'));
24
+ return object(value) ? value : {};
25
+ }
26
+ catch {
27
+ return {};
28
+ }
29
+ finally {
30
+ bytes.fill(0);
31
+ }
32
+ }
33
+ function scopes(value) {
34
+ return typeof value === 'string' ? value.split(/[\s,]+/) : Array.isArray(value) ? value.flatMap(scopes) : [];
35
+ }
36
+ function unavailable(row) {
37
+ if (row.disabled === true || row.status === 'exhausted' || row.last_status === 'dead')
38
+ return true;
39
+ if (row.last_status === 'exhausted') {
40
+ const until = Number(row.last_error_reset_at);
41
+ if (!Number.isFinite(until) || until <= 0 || until > Date.now() / 1000)
42
+ return true;
43
+ }
44
+ return false;
45
+ }
46
+ /** Hermes 6c80c327: flat providers.nous, native device-code pool and invoke JWT.
47
+ * No refresh-only, guest, fallback store or different pooled principal is promoted. */
48
+ export function projectHermesNousSource(auth, minTtlSeconds = 0) {
49
+ const state = auth?.providers?.nous;
50
+ if (!object(state) ||
51
+ auth.active_provider !== 'nous' ||
52
+ state.auth_method === 'anonymous' ||
53
+ state.account_tier === 'anonymous' ||
54
+ state.last_auth_error?.relogin_required === true ||
55
+ unavailable(state))
56
+ invalid();
57
+ const access = state.access_token, agentKey = state.agent_key;
58
+ const token = claims(agentKey);
59
+ if (!text(access) ||
60
+ !text(agentKey) ||
61
+ access !== agentKey ||
62
+ token.account_tier === 'anonymous' ||
63
+ !text(token.sub) ||
64
+ !text(token.org_id) ||
65
+ !text(token.iss) ||
66
+ typeof token.exp !== 'number' ||
67
+ !Number.isFinite(token.exp) ||
68
+ ![...scopes(state.scope), ...scopes(token.scope), ...scopes(token.scp)].includes('inference:invoke'))
69
+ invalid();
70
+ if (token.exp * 1000 <= Date.now() + minTtlSeconds * 1000)
71
+ throw new HermesNousError('Nous 登录即将过期或已过期,请在 Hermes 登录设置中重新登录');
72
+ if (!canonical(state.portal_base_url, NOUS_PORTAL) || !canonical(state.inference_base_url, NOUS_INFERENCE))
73
+ throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');
74
+ const pool = auth.credential_pool?.nous ?? [];
75
+ if (!Array.isArray(pool) ||
76
+ pool.length > 8 ||
77
+ pool.some((row) => !object(row) ||
78
+ row.auth_type !== 'oauth' ||
79
+ !['device_code', 'manual:device_code'].includes(row.source) ||
80
+ row.access_token !== access ||
81
+ row.agent_key !== agentKey ||
82
+ unavailable(row) ||
83
+ (row.portal_base_url && !canonical(row.portal_base_url, NOUS_PORTAL)) ||
84
+ (row.inference_base_url && !canonical(row.inference_base_url, NOUS_INFERENCE)) ||
85
+ (row.base_url && !canonical(row.base_url, NOUS_INFERENCE))))
86
+ invalid();
87
+ return {
88
+ access,
89
+ agentKey,
90
+ expires: token.exp * 1000,
91
+ email: accountEmail(token.email),
92
+ principal: {
93
+ kind: 'oauth',
94
+ subject: token.sub,
95
+ organization: token.org_id,
96
+ issuer: token.iss,
97
+ ...(text(token.client_id) ? { clientId: token.client_id } : {}),
98
+ },
99
+ route: { portal: NOUS_PORTAL, inference: NOUS_INFERENCE },
100
+ ...(typeof token.paid_access === 'boolean' ? { paidAccess: token.paid_access } : {}),
101
+ modelCooldowns: pool.map((row) => (object(row.model_cooldowns) ? row.model_cooldowns : {})),
102
+ };
103
+ }
104
+ export function hermesNousMinimumTtl(env) {
105
+ const setting = env.HERMES_NOUS_MIN_KEY_TTL_SECONDS;
106
+ const ttl = setting === undefined ? 120 : /^\d+$/.test(setting) ? Math.max(120, Number(setting)) : NaN;
107
+ if (!Number.isFinite(ttl))
108
+ invalid();
109
+ return ttl;
110
+ }
111
+ /** Runtime uses its supported MIN_KEY_TTL override (120s), matching the native
112
+ * invoke-JWT skew. The native default 1800s is a proactive-refresh optimization,
113
+ * not invalid-account evidence. An explicit own-home setting still takes precedence. */
114
+ export function selectHermesNousSource(material) {
115
+ const { config, auth, env } = material;
116
+ const cfg = config.model;
117
+ if (!object(cfg) || cfg.provider !== 'nous' || config.providers?.nous?.enabled === false)
118
+ invalid();
119
+ if (!Array.isArray(auth.credential_pool?.nous) || !auth.credential_pool.nous.length)
120
+ throw new HermesNousError('Nous 登录已保存,请在 Hermes 登录设置中完成原生账号初始化');
121
+ if ((cfg.extra_headers && Object.keys(cfg.extra_headers).length) ||
122
+ cfg.api_key ||
123
+ [env.NOUS_API_KEY, env.CUSTOM_API_KEY].some(Boolean) ||
124
+ Object.keys(env).some((key) => /^NOUS_API_KEY_\d+$/.test(key)))
125
+ throw new HermesNousError('Nous 含额外认证配置,请在 Hermes 登录设置中确认当前账号');
126
+ if ([cfg.base_url, env.NOUS_INFERENCE_BASE_URL, env.CUSTOM_BASE_URL].some((url) => url && !canonical(url, NOUS_INFERENCE)) ||
127
+ [env.NOUS_PORTAL_BASE_URL, env.HERMES_PORTAL_BASE_URL].some((url) => url && !canonical(url, NOUS_PORTAL)) ||
128
+ (cfg.api_mode && !['chat_completions', 'anthropic_messages'].includes(cfg.api_mode)))
129
+ throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');
130
+ const source = projectHermesNousSource(auth, hermesNousMinimumTtl(env));
131
+ const wire = config.nous?.anthropic_wire ?? 'chat';
132
+ if (!['chat', 'native', 'auto'].includes(wire))
133
+ throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');
134
+ source.route.anthropicWire = wire;
135
+ return source;
136
+ }
137
+ const capabilityCache = new Map();
138
+ function sourceKey(home, source) {
139
+ return createHash('sha256')
140
+ .update(JSON.stringify([home, source.principal, source.route, source.agentKey]))
141
+ .digest('hex');
142
+ }
143
+ export function hermesNousEfforts(home, source, model) {
144
+ const entry = capabilityCache.get(sourceKey(home, source));
145
+ return entry && Date.now() - entry.at < 60000 ? (entry.models.get(model) ?? ['default']) : ['default'];
146
+ }
147
+ export function beginHermesNousCapabilities(home, source) {
148
+ const generation = Symbol();
149
+ capabilityCache.set(sourceKey(home, source), { at: Date.now(), generation, models: new Map() });
150
+ return generation;
151
+ }
152
+ export function forgetHermesNousCapabilities(home, source, generation) {
153
+ const key = sourceKey(home, source);
154
+ if (capabilityCache.get(key)?.generation === generation)
155
+ capabilityCache.delete(key);
156
+ }
157
+ const generationTypes = new Set([
158
+ 'image',
159
+ 'image_generation',
160
+ 'image-generation',
161
+ 'image-gen',
162
+ 'video',
163
+ 'video_generation',
164
+ 'video-generation',
165
+ 'video-gen',
166
+ ]);
167
+ const generationId = /(?:^|[/_.-])(?:image(?:[/_.-]gen(?:eration)?)?|video(?:[/_.-]gen(?:eration)?)?|text[/_.-]to[/_.-](?:image|video)|stable-diffusion|sdxl|flux)(?=$|[/_.-])/i;
168
+ const tagsGeneration = (tags) => Array.isArray(tags) && tags.some((tag) => generationTypes.has(String(tag).toLowerCase()));
169
+ function chatCapable(row) {
170
+ const outputs = row.architecture?.output_modalities;
171
+ return (!/hermes/i.test(row.id) &&
172
+ !generationId.test(row.id) &&
173
+ !generationTypes.has(String(row.type).toLowerCase()) &&
174
+ !generationTypes.has(String(row.capabilities?.type).toLowerCase()) &&
175
+ ![row.tags, row.capabilities?.tags, row.metadata?.tags].some(tagsGeneration) &&
176
+ !(Array.isArray(outputs) &&
177
+ outputs.some((x) => ['image', 'video'].includes(x)) &&
178
+ !outputs.some((x) => ['text', 'chat'].includes(x))) &&
179
+ !(Array.isArray(row.supported_parameters) && !row.supported_parameters.includes('tools')));
180
+ }
181
+ function cost(row) {
182
+ if (!object(row.pricing))
183
+ return 'unknown';
184
+ const numeric = (value) => typeof value === 'number'
185
+ ? value
186
+ : typeof value === 'string' && /^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value)
187
+ ? Number(value)
188
+ : NaN;
189
+ const prompt = numeric(row.pricing.prompt), completion = numeric(row.pricing.completion);
190
+ if (![prompt, completion].every((n) => Number.isFinite(n) && n >= 0))
191
+ return 'unknown';
192
+ // Native pricing.original is sale display metadata, not a currently charged rate.
193
+ const extra = Object.entries(row.pricing)
194
+ .filter(([key]) => !['prompt', 'completion', 'original'].includes(key))
195
+ .map(([, value]) => numeric(value));
196
+ if (extra.some((n) => !Number.isFinite(n) || n < 0))
197
+ return 'unknown';
198
+ return [prompt, completion, ...extra].some((n) => n > 0) ? 'paid' : 'free';
199
+ }
200
+ // Native _parser accepts these levels; agent/reasoning_effort.OPENAI_COMPAT_WIRE_EFFORTS
201
+ // is the Nous transport vocabulary. `ultra` is internal and clamped, so never offer it.
202
+ const nativeNousWireEfforts = new Set(['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']);
203
+ function efforts(row) {
204
+ if (!Array.isArray(row.supported_parameters) ||
205
+ !row.supported_parameters.includes('reasoning') ||
206
+ !Array.isArray(row.reasoning?.supported_efforts))
207
+ return ['default'];
208
+ return [
209
+ ...new Set([
210
+ 'default',
211
+ ...row.reasoning.supported_efforts.filter((value) => typeof value === 'string' && nativeNousWireEfforts.has(value)),
212
+ ]),
213
+ ];
214
+ }
215
+ async function get(url, token, options) {
216
+ const controller = new AbortController();
217
+ const signal = options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;
218
+ const timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? 8000);
219
+ let reader;
220
+ const chunks = [];
221
+ try {
222
+ signal.throwIfAborted();
223
+ const response = await (options.fetch ?? fetch)(url, {
224
+ method: 'GET',
225
+ redirect: 'error',
226
+ signal,
227
+ headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
228
+ });
229
+ if (!response.ok || response.redirected) {
230
+ await response.body?.cancel();
231
+ throw new HermesNousError([401, 403].includes(response.status)
232
+ ? 'Nous 账号权限查询被拒绝,请检查登录状态'
233
+ : 'Nous 模型元数据查询失败,请稍后重试');
234
+ }
235
+ reader = response.body?.getReader();
236
+ if (!reader)
237
+ throw new Error('empty');
238
+ let length = 0;
239
+ const abort = () => {
240
+ void reader?.cancel().catch(() => { });
241
+ };
242
+ signal.addEventListener('abort', abort, { once: true });
243
+ try {
244
+ for (;;) {
245
+ signal.throwIfAborted();
246
+ const { done, value } = await reader.read();
247
+ signal.throwIfAborted();
248
+ if (done)
249
+ break;
250
+ length += value.length;
251
+ if (length > 1024 * 1024)
252
+ throw new Error('oversized');
253
+ chunks.push(value);
254
+ }
255
+ const bytes = Buffer.concat(chunks);
256
+ try {
257
+ return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
258
+ }
259
+ finally {
260
+ bytes.fill(0);
261
+ }
262
+ }
263
+ finally {
264
+ signal.removeEventListener('abort', abort);
265
+ }
266
+ }
267
+ catch (error) {
268
+ options.signal?.throwIfAborted();
269
+ if (error instanceof HermesNousError)
270
+ throw error;
271
+ throw new HermesNousError(controller.signal.aborted
272
+ ? 'Nous 模型元数据查询超时,请稍后重试'
273
+ : 'Nous 模型元数据无法读取,请稍后重试');
274
+ }
275
+ finally {
276
+ clearTimeout(timeout);
277
+ await reader?.cancel().catch(() => { });
278
+ reader?.releaseLock();
279
+ for (const chunk of chunks)
280
+ chunk.fill(0);
281
+ }
282
+ }
283
+ /** Two read-only, authenticated native endpoints. No public fallback, retry or OAuth refresh. */
284
+ export async function fetchHermesNousModels(home, source, options = {}, generation = beginHermesNousCapabilities(home, source)) {
285
+ const account = await get(`${NOUS_PORTAL}/api/oauth/account`, source.access, options);
286
+ const access = account?.paid_service_access;
287
+ const paid = typeof access?.allowed === 'boolean'
288
+ ? access.allowed
289
+ : typeof access?.paid_access === 'boolean'
290
+ ? access.paid_access
291
+ : undefined;
292
+ if (!object(account) ||
293
+ !object(access) ||
294
+ paid === undefined ||
295
+ (account.organisation?.id ?? access.organisation_id) !== source.principal.organization ||
296
+ (source.email && account.user?.email && account.user.email !== source.email) ||
297
+ (account.user?.privy_did && account.user.privy_did !== source.principal.subject) ||
298
+ account.account_tier === 'anonymous' ||
299
+ account.authenticated === false ||
300
+ account.error)
301
+ throw new HermesNousError('Nous 账号权限格式无法确认,请刷新登录后重试');
302
+ const data = await get(`${NOUS_INFERENCE}/models`, source.agentKey, options);
303
+ if (!object(data) ||
304
+ !Array.isArray(data.data) ||
305
+ data.data.length > 10000 ||
306
+ data.error ||
307
+ data.authenticated === false)
308
+ throw new HermesNousError('Nous 模型列表格式无法确认');
309
+ const cap = new Map(), ids = new Set();
310
+ const models = [];
311
+ for (const row of data.data) {
312
+ if (!object(row) ||
313
+ typeof row.id !== 'string' ||
314
+ !/^[A-Za-z0-9_./:+-]{1,256}$/.test(row.id) ||
315
+ ids.has(row.id) ||
316
+ row.id.includes(source.agentKey) ||
317
+ row.allowed === false ||
318
+ row.available === false ||
319
+ row.enabled === false ||
320
+ row.disabled === true ||
321
+ row.entitled === false ||
322
+ row.upgrade_required === true ||
323
+ !chatCapable(row) ||
324
+ source.modelCooldowns.some((cooldowns) => typeof cooldowns[row.id] === 'number' && cooldowns[row.id] > Date.now() / 1000))
325
+ continue;
326
+ const price = cost(row);
327
+ if (!paid && price !== 'free')
328
+ continue;
329
+ ids.add(row.id);
330
+ models.push({ id: row.id, cost: price });
331
+ cap.set(row.id, efforts(row));
332
+ }
333
+ for (const [key, entry] of capabilityCache)
334
+ if (Date.now() - entry.at >= 60000)
335
+ capabilityCache.delete(key);
336
+ if (capabilityCache.size >= 128)
337
+ capabilityCache.delete(capabilityCache.keys().next().value);
338
+ const key = sourceKey(home, source);
339
+ if (capabilityCache.get(key)?.generation === generation)
340
+ capabilityCache.set(key, { at: Date.now(), generation, models: cap });
341
+ return { state: 'supported', source: 'account-models', models };
342
+ }
343
+ //# sourceMappingURL=hermes-nous.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-nous.js","sourceRoot":"","sources":["../../../src/host/hermes-nous.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Native auth.py is_source_suppressed accepts provider-scoped lists and legacy
2
+ * dict keys. Removal retains config values; match the exact native source only. */
3
+ export declare function hermesSourceSuppressed(auth: unknown, provider: string, source: string): boolean;
4
+ /** Safe in-memory view only. Never rewrites native auth, config or environment. */
5
+ export declare function projectHermesUnsuppressedAuth(auth: unknown): Record<string, any>;
6
+ /** Only the selected provider's env:<NAME> record controls that provider's key. */
7
+ export declare function hermesUnsuppressedEnvironment(auth: unknown, env: Record<string, string>, provider: string): Record<string, string>;
@@ -0,0 +1,69 @@
1
+ const record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
2
+ const invalid = () => new Error('Hermes 账号退出记录无法确认,请检查原生账号设置');
3
+ /** Native auth.py is_source_suppressed accepts provider-scoped lists and legacy
4
+ * dict keys. Removal retains config values; match the exact native source only. */
5
+ export function hermesSourceSuppressed(auth, provider, source) {
6
+ if (!record(auth))
7
+ throw invalid();
8
+ const suppressed = auth.suppressed_sources;
9
+ if (suppressed === undefined)
10
+ return false;
11
+ if (!record(suppressed))
12
+ throw invalid();
13
+ const sources = suppressed[provider];
14
+ if (sources === undefined)
15
+ return false;
16
+ if (Array.isArray(sources)) {
17
+ if (sources.some((item) => typeof item !== 'string'))
18
+ throw invalid();
19
+ return sources.includes(source);
20
+ }
21
+ if (record(sources))
22
+ return Object.hasOwn(sources, source);
23
+ throw invalid();
24
+ }
25
+ /** Safe in-memory view only. Never rewrites native auth, config or environment. */
26
+ export function projectHermesUnsuppressedAuth(auth) {
27
+ if (!record(auth))
28
+ throw invalid();
29
+ if (auth.suppressed_sources !== undefined) {
30
+ if (!record(auth.suppressed_sources))
31
+ throw invalid();
32
+ for (const provider of Object.keys(auth.suppressed_sources))
33
+ hermesSourceSuppressed(auth, provider, '');
34
+ }
35
+ const providers = { ...(record(auth.providers) ? auth.providers : {}) };
36
+ // Exact seed keys in native credential_pool._seed_from_singletons.
37
+ for (const [provider, source] of [
38
+ ['nous', 'device_code'],
39
+ ['openai-codex', 'device_code'],
40
+ ['xai-oauth', 'device_code'],
41
+ ['minimax-oauth', 'oauth'],
42
+ ])
43
+ if (hermesSourceSuppressed(auth, provider, source))
44
+ delete providers[provider];
45
+ const pool = auth.credential_pool;
46
+ if (pool !== undefined && !record(pool))
47
+ throw invalid();
48
+ return {
49
+ ...auth,
50
+ providers,
51
+ ...(pool === undefined
52
+ ? {}
53
+ : {
54
+ credential_pool: Object.fromEntries(Object.entries(pool).map(([provider, entries]) => {
55
+ if (!Array.isArray(entries))
56
+ throw invalid();
57
+ return [
58
+ provider,
59
+ entries.filter((entry) => !record(entry) || !hermesSourceSuppressed(auth, provider, entry.source ?? 'manual')),
60
+ ];
61
+ })),
62
+ }),
63
+ };
64
+ }
65
+ /** Only the selected provider's env:<NAME> record controls that provider's key. */
66
+ export function hermesUnsuppressedEnvironment(auth, env, provider) {
67
+ return Object.fromEntries(Object.entries(env).filter(([name]) => !hermesSourceSuppressed(auth, provider, `env:${name}`)));
68
+ }
69
+ //# sourceMappingURL=hermes-suppression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-suppression.js","sourceRoot":"","sources":["../../../src/host/hermes-suppression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import { Context } from '@deepseek-ai/cordis';
2
+ import z from '@deepseek-ai/schemastery';
3
+ import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
4
+ export type { Preference, Worker, WorkerSnapshot, ModelChoice, TimelineItem, TaskMode, Effort, WorkerStatus, RolePreset, RoleSnapshot, } from '../shared/types.ts';
5
+ /** Deployment settings; all values are resolved by the plugin schema. */
6
+ export interface Config {
7
+ /** CLI binary or absolute path (default agy). */
8
+ executable?: string;
9
+ /** Codex CLI executable. */
10
+ codexExecutable?: string;
11
+ /** Claude Code executable. */
12
+ claudeExecutable?: string;
13
+ /** Kimi Code executable. */
14
+ kimiExecutable?: string;
15
+ /** Official Xiaomi MiMo Code executable. */
16
+ mimoExecutable?: string;
17
+ zcodeExecutable?: string;
18
+ grokExecutable?: string;
19
+ ompExecutable?: string;
20
+ piExecutable?: string;
21
+ hermesExecutable?: string;
22
+ hermesHome?: string;
23
+ opencodeExecutable?: string;
24
+ zcodeAuthDirectory?: string;
25
+ zcodeBuiltinConfig?: string;
26
+ /** @deprecated Accepted for old deployments only; never read or forwarded. */
27
+ zaiCredentialRef?: string;
28
+ /** Optional private state directory; defaults to DSH_HOME/cliworker-now. */
29
+ stateDirectory?: string;
30
+ /** Maximum concurrent processes (default 2). */
31
+ maxConcurrent?: number;
32
+ /** Maximum turn duration in milliseconds (default 1800000). */
33
+ timeoutMs?: number;
34
+ /** Process termination grace in milliseconds (default 5000). */
35
+ graceMs?: number;
36
+ /** Maximum NDJSON line bytes (default 1048576). */
37
+ maxLineBytes?: number;
38
+ /** Maximum output bytes per run (default 16777216). */
39
+ maxRunBytes?: number;
40
+ /** Maximum logical timeline rows in one live view (default 1000). */
41
+ maxTimelineItems?: number;
42
+ }
43
+ declare module '@deepseek-ai/cordis' {
44
+ interface Context {
45
+ /** CLI worker lifecycle and browser API. */ cliworker: CliWorkerService;
46
+ }
47
+ }
48
+ declare module '@deepseek-ai/dsh-jobs' {
49
+ interface JobKindMap {
50
+ cliworker: 'cliworker';
51
+ }
52
+ }
53
+ declare module '@deepseek-ai/dsh-typert-protocol' {
54
+ interface RemoteErrorDetailsMap {
55
+ /** CLI worker operation could not proceed. */ 'cliworker/unavailable': {
56
+ reason: string;
57
+ };
58
+ }
59
+ }
60
+ /** Host owner of CLI conversations, model tools and Remote streams. */
61
+ export declare class CliWorkerService extends TypertRemoteService {
62
+ static inject: string[];
63
+ static Config: z<Config>;
64
+ private runtime;
65
+ private accounts;
66
+ private accountParents;
67
+ private options;
68
+ private backend;
69
+ private pending;
70
+ private dispatchWaits;
71
+ private selectionBindings;
72
+ private selectionProjects;
73
+ private displayedBindings;
74
+ private disposed;
75
+ /** @param ctx - Harness services. @param config - Validated deployment options. */
76
+ constructor(ctx: Context, config: Config);
77
+ private parent;
78
+ private project;
79
+ private assertExecution;
80
+ private queryCatalog;
81
+ private querySelection;
82
+ /** Serialize only this conversation's selection; a cancelled waiter never owns the question. */
83
+ private chooseDispatch;
84
+ private launch;
85
+ private registerTools;
86
+ /** @param parentSessionId - Owning Harness session. @param workerId - Selected worker or empty string. @param signal - Stream lifetime. @returns JSON snapshots, initially and after changes. */
87
+ watch(parentSessionId: string, workerId: string, signal: AbortSignal): AsyncIterable<string>;
88
+ /** @param parentSessionId - Owning parent session. @param workerId - Worker identity. @param anchor - Stable logical row ID, excluded from the result. @param direction - before or after. @returns JSON historical page, at most 200 rows. */
89
+ history(parentSessionId: string, workerId: string, anchor: string, direction: string): Promise<string>;
90
+ /** @param parentSessionId - Owning Harness session. @param signal - Query lifetime. @returns Profile-wide CLI enablement JSON. */
91
+ cliSettings(parentSessionId: string, signal: AbortSignal): Promise<string>;
92
+ /** @param parentSessionId - Active parent. @param signal - Query lifetime. @returns JSON role preset library. */
93
+ rolePresets(parentSessionId: string, signal: AbortSignal): Promise<string>;
94
+ /** @param parentSessionId - Active parent. @param requestJSON - Preset fields, optional existing id. @param signal - Mutation lifetime. @returns Saved preset JSON. */
95
+ saveRolePreset(parentSessionId: string, requestJSON: string, signal: AbortSignal): Promise<string>;
96
+ /** @param parentSessionId - Active parent. @param presetId - Preset to delete. @param signal - Mutation lifetime. @returns Completion. */
97
+ deleteRolePreset(parentSessionId: string, presetId: string, signal: AbortSignal): Promise<void>;
98
+ /** @param parentSessionId - Owning parent. @param workerId - Worker identity. @param name - Unique readable name. @param signal - Mutation lifetime. @returns Completion. */
99
+ renameWorker(parentSessionId: string, workerId: string, name: string, signal: AbortSignal): Promise<void>;
100
+ /** @param parentSessionId - Owning parent. @param workerId - Worker identity. @param title - Single-line chat title, at most 160 characters. @param signal - Mutation lifetime. @returns Completion. */
101
+ renameWorkerTitle(parentSessionId: string, workerId: string, title: string, signal: AbortSignal): Promise<void>;
102
+ /** @param parentSessionId - Owning parent. @param workerId - Idle Worker to hide. @param signal - Mutation lifetime. @returns Completion without deleting native data. */
103
+ deleteWorker(parentSessionId: string, workerId: string, signal: AbortSignal): Promise<void>;
104
+ /** @param parentSessionId - Owning parent. @param workerId - Deleted Worker identity. @param signal - Mutation lifetime. @returns Completion with the original ID and history. */
105
+ restoreWorker(parentSessionId: string, workerId: string, signal: AbortSignal): Promise<void>;
106
+ /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param enabled - Allow new CLI operations. @param signal - Mutation admission lifetime. @returns Updated profile-wide CLI enablement JSON. */
107
+ setCliEnabled(parentSessionId: string, cli: string, enabled: boolean, signal: AbortSignal): Promise<string>;
108
+ /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param signal - Query lifetime. @returns Safe account status JSON. */
109
+ accountStatus(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
110
+ /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param action - Explicit human action. @param signal - Startup lifetime. @returns Managed account terminal identity and instruction JSON. */
111
+ accountStart(parentSessionId: string, cli: string, action: string, signal: AbortSignal): Promise<string>;
112
+ /** @param source - One current CLI-native source, never a filesystem path. */
113
+ accountStartForSource(parentSessionId: string, cli: string, action: string, source: string, signal: AbortSignal): Promise<string>;
114
+ private startAccount;
115
+ /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param signal - Stream lifetime. @returns Ephemeral terminal frame JSON. */
116
+ accountWatch(parentSessionId: string, accountId: string, signal: AbortSignal): AsyncIterable<string>;
117
+ /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param data - Human keyboard input. @returns Input accepted. */
118
+ accountWrite(parentSessionId: string, accountId: string, data: string): Promise<boolean>;
119
+ /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param cols - Visible columns. @param rows - Visible rows. @returns Resize accepted. */
120
+ accountResize(parentSessionId: string, accountId: string, cols: number, rows: number): Promise<boolean>;
121
+ /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @returns Process cleanup completed. */
122
+ accountStop(parentSessionId: string, accountId: string): Promise<boolean>;
123
+ /** @param parentSessionId - Parent session identity. @param signal - Caller lifetime. @returns JSON model catalog and project preference. */
124
+ catalog(parentSessionId: string, signal: AbortSignal): Promise<string>;
125
+ /** @param parentSessionId - Parent session identity. @param cli - Selected CLI. @param signal - Caller lifetime. @returns CLI catalog and saved project preference. */
126
+ catalogForCli(parentSessionId: string, cli: string, signal: AbortSignal): Promise<string>;
127
+ /** @param parentSessionId - Parent session identity. @param selection - JSON model and effort. @param signal - Caller lifetime. @returns Saved JSON preference. */
128
+ configure(parentSessionId: string, selection: string, signal: AbortSignal): Promise<string>;
129
+ /** @param parentSessionId - Owning session. @param workerId - Idle worker. @param selection - JSON preference. @param signal - Caller lifetime. @returns Saved worker configuration. */
130
+ configureWorker(parentSessionId: string, workerId: string, selection: string, signal: AbortSignal): Promise<string>;
131
+ /** @param parentSessionId - Parent session identity. @param workerId - Worker to continue. @param prompt - New task. @param signal - Admission lifetime. @returns Published background receipt. */
132
+ followup(parentSessionId: string, workerId: string, prompt: string, signal: AbortSignal): Promise<string>;
133
+ /** @param parentSessionId - Owning parent. @param workerId - Idle legacy history without an account binding. @param prompt - Explicit new-dialog task. @param signal - Admission lifetime. @returns JSON background receipt for a fresh Worker. */
134
+ restartWorker(parentSessionId: string, workerId: string, prompt: string, signal: AbortSignal): Promise<string>;
135
+ /** @param parentSessionId - Owning Harness session. @param workerId - Worker to stop. @returns Final worker state after cleanup. */
136
+ stop(parentSessionId: string, workerId: string): Promise<string>;
137
+ }
138
+ export default CliWorkerService;