dsh-cliworker-now 0.7.6 → 0.7.8

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 (181) hide show
  1. package/README.en.md +53 -11
  2. package/README.md +56 -11
  3. package/lib/account-models.mjs +49 -18
  4. package/lib/client.js +1221 -151
  5. package/lib/client.js.map +1 -1
  6. package/lib/grok-catalog.mjs +2 -2
  7. package/lib/hermes-native-entry.py +48 -13
  8. package/lib/hermes-nous-refresh.py +331 -0
  9. package/lib/index.js +9469 -6030
  10. package/lib/index.js.map +1 -1
  11. package/lib/native-launch.mjs +62 -7
  12. package/lib/native-spawn.mjs +32 -0
  13. package/lib/pi-installation.mjs +27 -3
  14. package/lib/pi-native-catalog.mjs +17 -7
  15. package/lib/pi-omp-bridge.mjs +2 -2
  16. package/lib/pi-omp-refresh.mjs +3 -3
  17. package/lib/private-launch.mjs +6 -2
  18. package/lib/terminal-bridge.mjs +2 -2
  19. package/lib/typert.host.js +265 -25
  20. package/lib/typert.remote-client.d.ts +8 -0
  21. package/lib/typert.remote-client.d.ts.map +1 -1
  22. package/lib/typert.remote-client.js +241 -25
  23. package/lib/types/client/account-query-queue.d.ts +16 -0
  24. package/lib/types/client/account-query-queue.js +61 -0
  25. package/lib/types/client/account-query-queue.js.map +1 -0
  26. package/lib/types/client/account-terminal.d.ts +6 -2
  27. package/lib/types/client/account-terminal.js +260 -31
  28. package/lib/types/client/account-terminal.js.map +1 -1
  29. package/lib/types/client/cli-executable-settings.d.ts +13 -0
  30. package/lib/types/client/cli-executable-settings.js +128 -0
  31. package/lib/types/client/cli-executable-settings.js.map +1 -0
  32. package/lib/types/client/management-styles.d.ts +1 -1
  33. package/lib/types/client/management-styles.js +4 -0
  34. package/lib/types/client/management-styles.js.map +1 -1
  35. package/lib/types/client/settings-dialog.js +196 -80
  36. package/lib/types/client/settings-dialog.js.map +1 -1
  37. package/lib/types/client/styles.d.ts +1 -1
  38. package/lib/types/client/styles.js +18 -16
  39. package/lib/types/client/styles.js.map +1 -1
  40. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  41. package/lib/types/client/zcode-login-link-provider.js +105 -0
  42. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  43. package/lib/types/client/zcode-login-link.d.ts +16 -0
  44. package/lib/types/client/zcode-login-link.js +194 -0
  45. package/lib/types/client/zcode-login-link.js.map +1 -0
  46. package/lib/types/host/account-models.d.mts +10 -2
  47. package/lib/types/host/account-models.mjs +49 -18
  48. package/lib/types/host/accounts.d.ts +3 -2
  49. package/lib/types/host/accounts.js +168 -29
  50. package/lib/types/host/accounts.js.map +1 -1
  51. package/lib/types/host/adapters.d.ts +3 -1
  52. package/lib/types/host/adapters.js +138 -11
  53. package/lib/types/host/adapters.js.map +1 -1
  54. package/lib/types/host/agy-background-environment.d.ts +2 -0
  55. package/lib/types/host/agy-background-environment.js +7 -0
  56. package/lib/types/host/agy-background-environment.js.map +1 -0
  57. package/lib/types/host/agy-models.d.ts +2 -1
  58. package/lib/types/host/agy-models.js +6 -6
  59. package/lib/types/host/agy-models.js.map +1 -1
  60. package/lib/types/host/agy-windows-account.d.ts +14 -0
  61. package/lib/types/host/agy-windows-account.js +104 -0
  62. package/lib/types/host/agy-windows-account.js.map +1 -0
  63. package/lib/types/host/authorized-catalog.js +13 -4
  64. package/lib/types/host/authorized-catalog.js.map +1 -1
  65. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  66. package/lib/types/host/claude-native-oauth.js +274 -0
  67. package/lib/types/host/claude-native-oauth.js.map +1 -0
  68. package/lib/types/host/claude-own-route.d.ts +45 -0
  69. package/lib/types/host/claude-own-route.js +375 -0
  70. package/lib/types/host/claude-own-route.js.map +1 -0
  71. package/lib/types/host/cli-account-binding.d.ts +2 -1
  72. package/lib/types/host/cli-account-binding.js +64 -21
  73. package/lib/types/host/cli-account-binding.js.map +1 -1
  74. package/lib/types/host/cli-executable-paths.d.ts +30 -0
  75. package/lib/types/host/cli-executable-paths.js +272 -0
  76. package/lib/types/host/cli-executable-paths.js.map +1 -0
  77. package/lib/types/host/codex-models.d.ts +3 -1
  78. package/lib/types/host/codex-models.js +41 -4
  79. package/lib/types/host/codex-models.js.map +1 -1
  80. package/lib/types/host/extended-adapters.d.ts +3 -2
  81. package/lib/types/host/extended-adapters.js +9 -7
  82. package/lib/types/host/extended-adapters.js.map +1 -1
  83. package/lib/types/host/first-party-models.d.ts +5 -0
  84. package/lib/types/host/first-party-models.js +173 -50
  85. package/lib/types/host/first-party-models.js.map +1 -1
  86. package/lib/types/host/hermes-accounts.js +68 -9
  87. package/lib/types/host/hermes-accounts.js.map +1 -1
  88. package/lib/types/host/hermes-adapter.d.ts +3 -0
  89. package/lib/types/host/hermes-adapter.js +13 -4
  90. package/lib/types/host/hermes-adapter.js.map +1 -1
  91. package/lib/types/host/hermes-installation.js +54 -35
  92. package/lib/types/host/hermes-installation.js.map +1 -1
  93. package/lib/types/host/hermes-models.js +21 -2
  94. package/lib/types/host/hermes-models.js.map +1 -1
  95. package/lib/types/host/hermes-native-entry.py +48 -13
  96. package/lib/types/host/hermes-nous-refresh.py +331 -0
  97. package/lib/types/host/hermes-nous.d.ts +5 -1
  98. package/lib/types/host/hermes-nous.js +5 -5
  99. package/lib/types/host/hermes-nous.js.map +1 -1
  100. package/lib/types/host/hermes-renewal.d.ts +27 -0
  101. package/lib/types/host/hermes-renewal.js +292 -0
  102. package/lib/types/host/hermes-renewal.js.map +1 -0
  103. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  104. package/lib/types/host/hermes-windows-installation.js +91 -0
  105. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  106. package/lib/types/host/index.d.ts +12 -0
  107. package/lib/types/host/index.js +138 -8
  108. package/lib/types/host/index.js.map +1 -1
  109. package/lib/types/host/kimi-accounts.d.ts +2 -0
  110. package/lib/types/host/kimi-accounts.js +4 -2
  111. package/lib/types/host/kimi-accounts.js.map +1 -1
  112. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  113. package/lib/types/host/kimi-oauth-models.js +246 -0
  114. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  115. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  116. package/lib/types/host/mimo-metadata-cache.js +121 -0
  117. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  118. package/lib/types/host/native-capability-cache.d.ts +11 -0
  119. package/lib/types/host/native-capability-cache.js +94 -0
  120. package/lib/types/host/native-capability-cache.js.map +1 -0
  121. package/lib/types/host/native-launch.mjs +62 -7
  122. package/lib/types/host/native-process.d.ts +3 -1
  123. package/lib/types/host/native-process.js +30 -5
  124. package/lib/types/host/native-process.js.map +1 -1
  125. package/lib/types/host/native-spawn.mjs +32 -0
  126. package/lib/types/host/opencode-native.js +13 -0
  127. package/lib/types/host/opencode-native.js.map +1 -1
  128. package/lib/types/host/pi-installation.d.mts +1 -1
  129. package/lib/types/host/pi-installation.mjs +27 -3
  130. package/lib/types/host/pi-omp-adapter.js +17 -3
  131. package/lib/types/host/pi-omp-adapter.js.map +1 -1
  132. package/lib/types/host/pi-omp-native.js +5 -3
  133. package/lib/types/host/pi-omp-native.js.map +1 -1
  134. package/lib/types/host/pi-omp-refresh.mjs +3 -3
  135. package/lib/types/host/private-launch.mjs +23 -0
  136. package/lib/types/host/process.d.ts +3 -0
  137. package/lib/types/host/process.js +3 -1
  138. package/lib/types/host/process.js.map +1 -1
  139. package/lib/types/host/routing.js +25 -2
  140. package/lib/types/host/routing.js.map +1 -1
  141. package/lib/types/host/runtime.js +21 -5
  142. package/lib/types/host/runtime.js.map +1 -1
  143. package/lib/types/host/settings-catalog-cache.d.ts +28 -0
  144. package/lib/types/host/settings-catalog-cache.js +189 -0
  145. package/lib/types/host/settings-catalog-cache.js.map +1 -0
  146. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  147. package/lib/types/host/windows-account-launch.mjs +47 -0
  148. package/lib/types/host/windows-account-owner.ps1 +137 -0
  149. package/lib/types/host/windows-account-stdio.mjs +19 -0
  150. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  151. package/lib/types/host/windows-account-terminal.js +208 -0
  152. package/lib/types/host/windows-account-terminal.js.map +1 -0
  153. package/lib/types/host/windows-agy-account.ps1 +81 -0
  154. package/lib/types/host/windows-cli-installation.d.ts +35 -0
  155. package/lib/types/host/windows-cli-installation.js +164 -0
  156. package/lib/types/host/windows-cli-installation.js.map +1 -0
  157. package/lib/types/host/windows-codex-launch.d.ts +9 -0
  158. package/lib/types/host/windows-codex-launch.js +216 -0
  159. package/lib/types/host/windows-codex-launch.js.map +1 -0
  160. package/lib/types/host/windows-desktop-cli-installation.d.ts +20 -0
  161. package/lib/types/host/windows-desktop-cli-installation.js +420 -0
  162. package/lib/types/host/windows-desktop-cli-installation.js.map +1 -0
  163. package/lib/types/host/windows-hidden-launch.mjs +51 -0
  164. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  165. package/lib/types/host/windows-hidden-process.js +116 -0
  166. package/lib/types/host/windows-hidden-process.js.map +1 -0
  167. package/lib/types/host/zcode-adapter.js +5 -1
  168. package/lib/types/host/zcode-adapter.js.map +1 -1
  169. package/lib/types/host/zcode-grok-accounts.d.ts +3 -1
  170. package/lib/types/host/zcode-grok-accounts.js +60 -11
  171. package/lib/types/host/zcode-grok-accounts.js.map +1 -1
  172. package/lib/types/shared/accounts.d.ts +4 -0
  173. package/lib/types/shared/cli-settings.d.ts +8 -0
  174. package/lib/windows-account-bootstrap.ps1 +44 -0
  175. package/lib/windows-account-launch.mjs +47 -0
  176. package/lib/windows-account-owner.ps1 +137 -0
  177. package/lib/windows-account-stdio.mjs +19 -0
  178. package/lib/windows-agy-account.ps1 +81 -0
  179. package/lib/windows-hidden-launch.mjs +51 -0
  180. package/lib/zcode-resume.mjs +2 -2
  181. package/package.json +2 -2
@@ -0,0 +1,375 @@
1
+ import { createConnection } from 'node:net';
2
+ import { homedir } from 'node:os';
3
+ import { join, isAbsolute, resolve } from 'node:path';
4
+ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
5
+ import { safePiOmpAncestors } from "./pi-omp-native.js";
6
+ import { accountEmail } from "./account-identity.js";
7
+ import { readFirstPartyJson, claudeManagedSettingsPath, } from "./first-party-models.js";
8
+ const record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
9
+ const literal = (v) => typeof v === 'string' && !!v.trim() && !/[\s\x00-\x1f{}$]/.test(v) && !v.startsWith('!');
10
+ const authOption = /ANTHROPIC|CLAUDE_CODE_(?:OAUTH|USE_|API|SKIP_(?:BEDROCK|VERTEX|FOUNDRY|AWS)_AUTH|PROVIDER_MANAGED_BY_HOST|GATEWAY)|AWS_|GOOGLE_|CLOUD_ML|API_KEY|BEARER_TOKEN/i;
11
+ const allowed = new Set(['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_BASE_URL']);
12
+ const families = ['HAIKU', 'SONNET', 'OPUS', 'FABLE'];
13
+ const modelOption = /^(?:ANTHROPIC_(?:MODEL|DEFAULT_MODEL|SMALL_FAST_MODEL|(?:DEFAULT_(?:HAIKU|SONNET|OPUS|FABLE)_MODEL|CUSTOM_MODEL_OPTION)(?:_NAME|_DESCRIPTION|_SUPPORTED_CAPABILITIES)?)|CLAUDE_CODE_SUBAGENT_MODEL(?:_FORCE)?)$/;
14
+ const claudeEnvironment = /^(?:ANTHROPIC_|CLAUDE_CODE_(?:OAUTH|USE_|API|SKIP_(?:BEDROCK|VERTEX|FOUNDRY|AWS)_AUTH|SUBAGENT_MODEL|MODEL|PROVIDER_MANAGED_BY_HOST|GATEWAY))/i;
15
+ const officialBase = 'https://api.anthropic.com';
16
+ const homeOption = /^(?:CLAUDE_CONFIG_DIR|HOME|USERPROFILE|XDG_CONFIG_HOME)$/i;
17
+ const modelKeys = [
18
+ 'ANTHROPIC_MODEL',
19
+ 'ANTHROPIC_DEFAULT_MODEL',
20
+ 'ANTHROPIC_SMALL_FAST_MODEL',
21
+ 'ANTHROPIC_CUSTOM_MODEL_OPTION',
22
+ 'CLAUDE_CODE_SUBAGENT_MODEL',
23
+ 'CLAUDE_CODE_SUBAGENT_MODEL_FORCE',
24
+ ...families.flatMap((family) => ['', '_NAME', '_DESCRIPTION', '_SUPPORTED_CAPABILITIES'].map((suffix) => `ANTHROPIC_DEFAULT_${family}_MODEL${suffix}`)),
25
+ ...['_NAME', '_DESCRIPTION', '_SUPPORTED_CAPABILITIES'].map((suffix) => `ANTHROPIC_CUSTOM_MODEL_OPTION${suffix}`),
26
+ ];
27
+ const routeEnvironment = {
28
+ CLAUDE_CODE_USE_BEDROCK: '',
29
+ CLAUDE_CODE_USE_VERTEX: '',
30
+ CLAUDE_CODE_USE_FOUNDRY: '',
31
+ CLAUDE_CODE_USE_AWS: '',
32
+ CLAUDE_CODE_OAUTH_TOKEN: '',
33
+ CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST: '',
34
+ CLAUDE_CODE_SKIP_BEDROCK_AUTH: '',
35
+ CLAUDE_CODE_SKIP_VERTEX_AUTH: '',
36
+ CLAUDE_CODE_SKIP_FOUNDRY_AUTH: '',
37
+ CLAUDE_CODE_SKIP_AWS_AUTH: '',
38
+ ANTHROPIC_AUTH_TOKEN: '',
39
+ ANTHROPIC_API_KEY: '',
40
+ ANTHROPIC_CUSTOM_HEADERS: '',
41
+ };
42
+ /** Only this Claude child is changed; inherited credentials are never account evidence. */
43
+ export function claudeLaunchEnvironment() {
44
+ return {
45
+ ...routeEnvironment,
46
+ ...Object.fromEntries(modelKeys.map((key) => [key, ''])),
47
+ ANTHROPIC_BASE_URL: '',
48
+ ...Object.fromEntries(Object.keys(process.env)
49
+ .filter((key) => claudeEnvironment.test(key))
50
+ .map((key) => [key, ''])),
51
+ };
52
+ }
53
+ export function claudeRemoteModelId(value) {
54
+ return value.replace(/\[1m\]$/i, '');
55
+ }
56
+ /** Exact settings IDs only. Labels and capability metadata never invent a model. */
57
+ export function claudeConfiguredModels(env, settingsModel) {
58
+ const secrets = ['ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_API_KEY', 'CLAUDE_CODE_OAUTH_TOKEN']
59
+ .map((key) => env[key])
60
+ .filter((value) => typeof value === 'string' && !!value);
61
+ const safe = (value, maximum) => typeof value === 'string' &&
62
+ value.length <= maximum &&
63
+ !/[\x00-\x1f]/.test(value) &&
64
+ !secrets.some((secret) => value === secret || (secret.length >= 12 && value.includes(secret)));
65
+ const valid = (value) => safe(value, 1024) &&
66
+ typeof value === 'string' &&
67
+ /^[A-Za-z0-9][A-Za-z0-9._:/@-]*(?:\[1m\])?$/i.test(value) &&
68
+ !/^(?:sk-|Bearer|oauth[_-]|PROXY_MANAGED$)/i.test(value);
69
+ const models = new Map();
70
+ const add = (value, name) => {
71
+ if (!valid(value))
72
+ return;
73
+ const base = claudeRemoteModelId(value), alias = base.toLowerCase();
74
+ if (['default', 'best', 'opusplan'].includes(alias))
75
+ return;
76
+ if (families.some((family) => family.toLowerCase() === alias)) {
77
+ const mapped = env[`ANTHROPIC_DEFAULT_${alias.toUpperCase()}_MODEL`];
78
+ if (!valid(mapped) ||
79
+ families.some((family) => family.toLowerCase() === claudeRemoteModelId(mapped).toLowerCase()))
80
+ return;
81
+ const id = /\[1m\]$/i.test(value) && !/\[1m\]$/i.test(mapped) ? `${mapped}${value.slice(-4)}` : mapped;
82
+ add(id, env[`ANTHROPIC_DEFAULT_${alias.toUpperCase()}_MODEL_NAME`]);
83
+ return;
84
+ }
85
+ if (models.has(value))
86
+ return;
87
+ models.set(value, {
88
+ remoteId: claudeRemoteModelId(value),
89
+ choice: {
90
+ id: value,
91
+ label: safe(name, 4096) && typeof name === 'string' && name.trim() ? name : value,
92
+ efforts: ['default'],
93
+ },
94
+ });
95
+ };
96
+ for (const family of families)
97
+ add(env[`ANTHROPIC_DEFAULT_${family}_MODEL`], env[`ANTHROPIC_DEFAULT_${family}_MODEL_NAME`]);
98
+ add(env.ANTHROPIC_CUSTOM_MODEL_OPTION, env.ANTHROPIC_CUSTOM_MODEL_OPTION_NAME);
99
+ add(env.ANTHROPIC_MODEL);
100
+ add(env.ANTHROPIC_DEFAULT_MODEL);
101
+ add(settingsModel);
102
+ return [...models.values()];
103
+ }
104
+ /** Public errors never interpolate native configuration or credentials. */
105
+ export class ClaudeOwnRouteError extends Error {
106
+ code = 'CLI_OWN_ACCOUNT_REQUIRED';
107
+ constructor(message = 'Claude 账号来源无法确认,请检查该 CLI 的配置') {
108
+ super(message);
109
+ this.name = 'ClaudeOwnRouteError';
110
+ }
111
+ }
112
+ /** Verified on native 2.1.296: empty settings.env unsets provider selectors for this process. */
113
+ export function claudeNativeSettingsArguments(configDirectory, suppressedEnvironment = {}) {
114
+ return [
115
+ '--settings',
116
+ JSON.stringify({
117
+ apiKeyHelper: '',
118
+ model: 'default',
119
+ env: {
120
+ ...claudeLaunchEnvironment(),
121
+ ...suppressedEnvironment,
122
+ ...(configDirectory ? { CLAUDE_CONFIG_DIR: configDirectory } : {}),
123
+ ANTHROPIC_BASE_URL: officialBase,
124
+ },
125
+ }),
126
+ ];
127
+ }
128
+ /** TCP only: a listening proxy remains selected even if its HTTP authentication fails. */
129
+ export async function claudeLoopbackAvailable(url, signal) {
130
+ signal.throwIfAborted();
131
+ return new Promise((resolve, reject) => {
132
+ const socket = createConnection({
133
+ host: url.hostname.replace(/^\[|\]$/g, ''),
134
+ port: Number(url.port || (url.protocol === 'https:' ? 443 : 80)),
135
+ });
136
+ let settled = false;
137
+ const done = (value, error) => {
138
+ if (settled)
139
+ return;
140
+ settled = true;
141
+ signal.removeEventListener('abort', abort);
142
+ socket.destroy();
143
+ error !== undefined ? reject(error) : resolve(value);
144
+ };
145
+ const abort = () => done(undefined, signal.reason ?? new Error('查询已取消'));
146
+ signal.addEventListener('abort', abort, { once: true });
147
+ socket.once('connect', () => done(true));
148
+ socket.setTimeout(1200, () => done(false));
149
+ socket.once('error', (error) => {
150
+ if (['ECONNREFUSED', 'ETIMEDOUT', 'EHOSTUNREACH', 'ENETUNREACH'].includes(error.code ?? ''))
151
+ done(false);
152
+ else
153
+ done(undefined, new ClaudeOwnRouteError('Claude 本地代理连接状态无法确认,请检查代理'));
154
+ });
155
+ if (signal.aborted)
156
+ abort();
157
+ });
158
+ }
159
+ async function readClaudeSettings(project, signal) {
160
+ signal.throwIfAborted();
161
+ const root = process.env.CLAUDE_CONFIG_DIR?.trim() || join(homedir(), '.claude');
162
+ if (!isAbsolute(root))
163
+ throw new ClaudeOwnRouteError('Claude 账号目录必须使用绝对路径');
164
+ const paths = [
165
+ join(root, 'settings.json'),
166
+ join(project, '.claude/settings.json'),
167
+ join(project, '.claude/settings.local.json'),
168
+ ];
169
+ const configured = Object.create(null), env = Object.create(null);
170
+ for (const path of paths) {
171
+ const settings = await readFirstPartyJson(path);
172
+ signal.throwIfAborted();
173
+ Object.assign(configured, settings);
174
+ if (record(settings.env))
175
+ Object.assign(env, settings.env);
176
+ }
177
+ const managed = await readFirstPartyJson(claudeManagedSettingsPath());
178
+ signal.throwIfAborted();
179
+ if (managed.apiKeyHelper ||
180
+ managed.forceLoginMethod ||
181
+ managed.forceLoginOrgUUID ||
182
+ managed.forceLoginGatewayUrl ||
183
+ (record(managed.env) &&
184
+ Object.entries(managed.env).some(([key, value]) => value && (authOption.test(key) || homeOption.test(key)))))
185
+ throw new ClaudeOwnRouteError();
186
+ if (Object.entries(env).some(([key, value]) => value && homeOption.test(key)))
187
+ throw new ClaudeOwnRouteError();
188
+ const suppressedEnvironment = Object.fromEntries(Object.keys(env)
189
+ .filter((key) => claudeEnvironment.test(key))
190
+ .map((key) => [key, '']));
191
+ return { root, paths, configured, env, suppressedEnvironment };
192
+ }
193
+ /** Official account operations never probe or require an API/proxy route. */
194
+ export async function readClaudeOfficialAccountRoute(project, signal) {
195
+ const { root, suppressedEnvironment } = await readClaudeSettings(project, signal);
196
+ return {
197
+ kind: 'native',
198
+ configDirectory: root,
199
+ sourceIds: [root, 'native:claude-official-login'],
200
+ suppressedEnvironment,
201
+ };
202
+ }
203
+ export async function readClaudeOwnRoute(project, signal, options = {}) {
204
+ const { root, paths, configured, env, suppressedEnvironment } = await readClaudeSettings(project, signal);
205
+ if (configured.apiKeyHelper)
206
+ throw new ClaudeOwnRouteError();
207
+ if (Object.entries(env).some(([key, value]) => value &&
208
+ (homeOption.test(key) || (authOption.test(key) && !allowed.has(key) && !modelOption.test(key)))))
209
+ throw new ClaudeOwnRouteError();
210
+ const key = env.ANTHROPIC_API_KEY, bearer = env.ANTHROPIC_AUTH_TOKEN;
211
+ if (key && bearer)
212
+ throw new ClaudeOwnRouteError('Claude 同时配置两种令牌,请先明确一种登录来源');
213
+ if ((key && !literal(key)) || (bearer && !literal(bearer)))
214
+ throw new ClaudeOwnRouteError();
215
+ let url;
216
+ try {
217
+ url = new URL(env.ANTHROPIC_BASE_URL || officialBase);
218
+ if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)
219
+ throw new Error();
220
+ }
221
+ catch {
222
+ throw new ClaudeOwnRouteError('Claude 服务地址无效,请检查该 CLI 的配置');
223
+ }
224
+ const loopback = ['localhost', '127.0.0.1', '[::1]', '::1'].includes(url.hostname.toLowerCase());
225
+ if (loopback && !(await (options.available ?? claudeLoopbackAvailable)(url, signal))) {
226
+ signal.throwIfAborted();
227
+ return {
228
+ kind: 'native',
229
+ configDirectory: root,
230
+ sourceIds: [root, 'native:claude-official-login'],
231
+ suppressedEnvironment,
232
+ };
233
+ }
234
+ signal.throwIfAborted();
235
+ if (!key && !bearer) {
236
+ if (loopback || url.href.replace(/\/$/, '') !== officialBase)
237
+ throw new ClaudeOwnRouteError('Claude 服务已配置,但无法确认该服务的自身凭据');
238
+ return {
239
+ kind: 'native',
240
+ configDirectory: root,
241
+ sourceIds: [root, 'native:claude-official-login'],
242
+ suppressedEnvironment,
243
+ };
244
+ }
245
+ const modelEnvironment = Object.fromEntries(Object.entries(env).filter(([name, value]) => modelOption.test(name) && typeof value === 'string'));
246
+ const model = typeof configured.model === 'string' ? configured.model : undefined;
247
+ const custom = loopback || url.href.replace(/\/$/, '') !== officialBase;
248
+ return {
249
+ kind: loopback ? 'proxy' : 'api',
250
+ configDirectory: root,
251
+ sourceIds: paths,
252
+ modelEnvironment,
253
+ model,
254
+ suppressedEnvironment,
255
+ source: {
256
+ provider: 'anthropic',
257
+ credential: { type: 'api', key: bearer || key },
258
+ baseUrl: url.href.replace(/\/$/, ''),
259
+ apiType: 'anthropic-messages',
260
+ ...(bearer ? { anthropicAuth: 'bearer' } : {}),
261
+ sourceIds: paths,
262
+ nativeModels: custom ? claudeConfiguredModels(env, model) : [],
263
+ nativeFullModelIds: true,
264
+ claudeRoute: loopback ? 'proxy' : 'api',
265
+ ...(custom ? { claudeConfiguredModels: true } : {}),
266
+ modelEnvironment,
267
+ model,
268
+ },
269
+ };
270
+ }
271
+ export function claudeRouteStatusArguments(executable, route) {
272
+ return [
273
+ executable,
274
+ ...(route.kind === 'native'
275
+ ? claudeNativeSettingsArguments(route.configDirectory, route.suppressedEnvironment)
276
+ : []),
277
+ 'auth',
278
+ 'status',
279
+ '--json',
280
+ ];
281
+ }
282
+ export function claudeRouteIdentity(route, raw, exitCode) {
283
+ let status;
284
+ try {
285
+ status = JSON.parse(raw);
286
+ }
287
+ catch {
288
+ throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');
289
+ }
290
+ if (!record(status))
291
+ throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');
292
+ if (status.apiProvider !== undefined && status.apiProvider !== 'firstParty')
293
+ throw new ClaudeOwnRouteError();
294
+ if (route.configDirectory && status.configDirectory !== undefined) {
295
+ const normalized = (path) => process.platform === 'win32' ? resolve(path).toLowerCase() : resolve(path);
296
+ if (typeof status.configDirectory !== 'string' ||
297
+ !isAbsolute(status.configDirectory) ||
298
+ normalized(status.configDirectory) !== normalized(route.configDirectory))
299
+ throw new ClaudeOwnRouteError('Claude 原生账号目录与选定来源不一致');
300
+ }
301
+ if (route.kind === 'native') {
302
+ if ([0, 1].includes(exitCode ?? -1) && status.loggedIn === false)
303
+ return { state: 'unconfigured', summary: 'Claude 官方账号未登录', verification: 'cli' };
304
+ if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== 'claude.ai')
305
+ throw new ClaudeOwnRouteError('Claude 官方登录来源无法确认,请使用原生登录');
306
+ const email = accountEmail(status.email);
307
+ return {
308
+ state: 'authenticated',
309
+ summary: 'Claude 官方账号登录',
310
+ authMethod: 'oauth',
311
+ accountLabel: email,
312
+ logins: [{ providerLabel: 'Claude 官方', authMethod: 'oauth', accountLabel: email }],
313
+ verification: 'cli',
314
+ };
315
+ }
316
+ const expected = route.source?.anthropicAuth === 'bearer' ? 'oauth_token' : 'api_key';
317
+ if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== expected)
318
+ throw new ClaudeOwnRouteError();
319
+ const label = route.kind === 'proxy' ? 'Claude 本地代理' : 'Claude 自身配置';
320
+ return {
321
+ state: 'authenticated',
322
+ summary: `${label} API 登录`,
323
+ authMethod: 'api',
324
+ logins: [{ providerLabel: label, authMethod: 'api' }],
325
+ verification: 'cli',
326
+ };
327
+ }
328
+ /** Pin one route before spawning; secrets are in a private temporary file, never argv. */
329
+ export async function prepareClaudeWorkerLaunch(route, argv, stateDirectory, signal) {
330
+ signal.throwIfAborted();
331
+ if (route.kind === 'native')
332
+ return {
333
+ argv: [
334
+ argv[0],
335
+ ...claudeNativeSettingsArguments(route.configDirectory, route.suppressedEnvironment),
336
+ ...argv.slice(1),
337
+ ],
338
+ env: claudeLaunchEnvironment(),
339
+ };
340
+ if (!route.source)
341
+ throw new ClaudeOwnRouteError();
342
+ const parent = join(stateDirectory, 'claude-route');
343
+ await safePiOmpAncestors(parent);
344
+ await mkdir(parent, { recursive: true, mode: 0o700 });
345
+ await safePiOmpAncestors(parent);
346
+ const directory = await mkdtemp(join(parent, 'run-'));
347
+ try {
348
+ const path = join(directory, 'settings.json');
349
+ await writeFile(path, JSON.stringify({
350
+ apiKeyHelper: '',
351
+ model: route.model ?? 'default',
352
+ env: {
353
+ ...claudeLaunchEnvironment(),
354
+ ...route.suppressedEnvironment,
355
+ ...route.modelEnvironment,
356
+ ...(route.configDirectory ? { CLAUDE_CONFIG_DIR: route.configDirectory } : {}),
357
+ ANTHROPIC_BASE_URL: route.source.baseUrl,
358
+ ANTHROPIC_AUTH_TOKEN: route.source.anthropicAuth === 'bearer' ? route.source.credential.key : '',
359
+ ANTHROPIC_API_KEY: route.source.anthropicAuth === 'bearer' ? '' : route.source.credential.key,
360
+ CLAUDE_CODE_OAUTH_TOKEN: '',
361
+ },
362
+ }), { mode: 0o600, flag: 'wx' });
363
+ signal.throwIfAborted();
364
+ return {
365
+ argv: [argv[0], '--settings', path, ...argv.slice(1)],
366
+ env: claudeLaunchEnvironment(),
367
+ cleanup: () => rm(directory, { recursive: true, force: true }),
368
+ };
369
+ }
370
+ catch (error) {
371
+ await rm(directory, { recursive: true, force: true });
372
+ throw error;
373
+ }
374
+ }
375
+ //# sourceMappingURL=claude-own-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-own-route.js","sourceRoot":"","sources":["../../../src/host/claude-own-route.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ClaudeOwnRoute } from './claude-own-route.ts';
1
2
  import { type CliId } from '../shared/types.ts';
2
3
  import { type ProcessBackend, type RuntimeConfig } from './process.ts';
3
4
  /** Safe public error; neither secrets nor native paths are interpolated. */
@@ -29,4 +30,4 @@ export declare function readCodexOwnAccountSource(project: string, signal: Abort
29
30
  nativeRouteConfirmed: true;
30
31
  }>;
31
32
  /** Host-only account epoch. Never return it from a Gateway response or write credentials to storage. */
32
- export declare function readCliAccountBinding(cli: CliId, backend: ProcessBackend, config: RuntimeConfig, project: string, signal: AbortSignal): Promise<string>;
33
+ export declare function readCliAccountBinding(cli: CliId, backend: ProcessBackend, config: RuntimeConfig, project: string, signal: AbortSignal, selectedClaudeRoute?: ClaudeOwnRoute): Promise<string>;
@@ -1,3 +1,4 @@
1
+ import { readClaudeOwnRoute, claudeRouteStatusArguments, claudeRouteIdentity, ClaudeOwnRouteError, claudeLaunchEnvironment, } from "./claude-own-route.js";
1
2
  import { constants } from 'node:fs';
2
3
  import { lstat, open } from 'node:fs/promises';
3
4
  import { createHash } from 'node:crypto';
@@ -7,7 +8,9 @@ import { CLI_LABELS } from "../shared/types.js";
7
8
  import { captureCatalogMetadata, resolveCliExecutable } from "./adapters.js";
8
9
  import { readCodexAccount } from "./codex-account.js";
9
10
  import { assertAgyNativeAccountRoute } from "./agy-models.js";
11
+ import { readWindowsAgyAccount } from "./agy-windows-account.js";
10
12
  import { readFirstPartyModelSources } from "./first-party-models.js";
13
+ import { KimiOAuthModelError } from "./kimi-oauth-models.js";
11
14
  import { readPiOmpAccountMaterial, safePiOmpAncestors } from "./pi-omp-native.js";
12
15
  import { readOpenCodeProfile, OPENCODE_OAUTH_UNSUPPORTED } from "./opencode-native.js";
13
16
  import { openCodeAuthDirectory } from "./opencode-adapter.js";
@@ -17,6 +20,7 @@ import { HermesNousError, selectHermesNousSource } from "./hermes-nous.js";
17
20
  import { hermesUnsuppressedEnvironment, projectHermesUnsuppressedAuth } from "./hermes-suppression.js";
18
21
  import { readZCodeBindingMaterial, zcodeAuthDirectory } from "./zcode-adapter.js";
19
22
  import { ProcessCleanupUnconfirmedError } from "./process.js";
23
+ import { ensureHermesNousFresh, HermesRenewalError } from "./hermes-renewal.js";
20
24
  const object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
21
25
  const text = (v) => typeof v === 'string' && !!v.trim();
22
26
  const literal = (v) => text(v) && !/^(?:!|\$|op:\/\/|<|your[_ -]|placeholder|changeme)/i.test(v.trim()) && !/[\x00-\x1f]/.test(v);
@@ -263,10 +267,19 @@ function ownKey(value, env) {
263
267
  return;
264
268
  return /^[A-Z][A-Z0-9_]*$/.test(value) ? (literal(env[value]) ? env[value] : undefined) : value;
265
269
  }
266
- async function material(cli, backend, config, project, signal) {
270
+ async function material(cli, backend, config, project, signal, selectedClaudeRoute) {
267
271
  const home = homedir();
268
272
  if (cli === 'antigravity') {
269
273
  await assertAgyNativeAccountRoute(signal, home);
274
+ if (process.platform === 'win32') {
275
+ const account = await readWindowsAgyAccount(backend, config, signal);
276
+ return {
277
+ sourceIds: ['windows-credential:gemini:antigravity'],
278
+ entries: account.identity.state === 'authenticated' && account.principalHash
279
+ ? [{ provider: 'antigravity', principal: { kind: 'oauth', subjectHash: account.principalHash } }]
280
+ : [],
281
+ };
282
+ }
270
283
  const root = join(home, '.gemini');
271
284
  const auth = await document(join(root, 'jetski-standalone-oauth-token'), signal);
272
285
  const principal = auth.auth_method === 'consumer' && object(auth.token)
@@ -301,24 +314,43 @@ async function material(cli, backend, config, project, signal) {
301
314
  if (cli === 'claude' || cli === 'kimi' || cli === 'mimo') {
302
315
  const executable = await resolveCliExecutable(cli, backend, config, signal);
303
316
  if (cli === 'claude') {
304
- const status = JSON.parse(await captureCatalogMetadata(backend, config, [executable, 'auth', 'status', '--json'], project, signal));
305
- if (status.loggedIn === true && status.authMethod === 'claude.ai' && text(status.email))
306
- return {
307
- sourceIds: [
308
- resolve(process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, '.claude')),
309
- 'native:claude-auth-status',
310
- ],
311
- entries: [
312
- {
313
- provider: 'anthropic',
314
- principal: {
315
- kind: 'oauth',
316
- email: status.email.toLowerCase(),
317
- ...(text(status.orgId) ? { organization: status.orgId } : {}),
317
+ const route = selectedClaudeRoute ?? (await readClaudeOwnRoute(project, signal));
318
+ if (route.kind === 'native') {
319
+ const status = JSON.parse(await captureCatalogMetadata(backend, config, claudeRouteStatusArguments(executable, route), project, signal, claudeLaunchEnvironment(), [0, 1]));
320
+ const identity = claudeRouteIdentity(route, JSON.stringify(status), status.loggedIn === true ? 0 : 1);
321
+ if (identity.state === 'authenticated' && identity.accountLabel)
322
+ return {
323
+ sourceIds: [
324
+ resolve(route.configDirectory || process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, '.claude')),
325
+ 'native:claude-auth-status',
326
+ ],
327
+ entries: [
328
+ {
329
+ provider: 'anthropic',
330
+ route: { source: 'official-native-login' },
331
+ principal: {
332
+ kind: 'oauth',
333
+ email: identity.accountLabel.toLowerCase(),
334
+ ...(text(status.orgId) ? { organization: status.orgId } : {}),
335
+ },
318
336
  },
319
- },
320
- ],
321
- };
337
+ ],
338
+ };
339
+ throw new ClaudeOwnRouteError('Claude 官方账号未登录,请使用原生登录');
340
+ }
341
+ {
342
+ const source = route.source;
343
+ if (!source)
344
+ throw new ClaudeOwnRouteError();
345
+ const entry = credentialEntry(source.provider, source.credential, {
346
+ baseUrl: source.baseUrl,
347
+ apiType: source.apiType,
348
+ anthropicAuth: source.anthropicAuth,
349
+ modelEnvironment: source.modelEnvironment,
350
+ model: source.model,
351
+ });
352
+ return { sourceIds: source.sourceIds, entries: entry ? [entry] : [] };
353
+ }
322
354
  }
323
355
  const sources = await readFirstPartyModelSources(cli, executable, project, (argv, env) => captureCatalogMetadata(backend, config, argv, project, signal, env), signal);
324
356
  return {
@@ -327,6 +359,7 @@ async function material(cli, backend, config, project, signal) {
327
359
  const entry = credentialEntry(source.provider, source.credential, {
328
360
  baseUrl: source.baseUrl,
329
361
  apiType: source.apiType,
362
+ anthropicAuth: source.anthropicAuth,
330
363
  });
331
364
  return entry ? [entry] : [];
332
365
  }),
@@ -421,6 +454,13 @@ async function material(cli, backend, config, project, signal) {
421
454
  }
422
455
  if (cli === 'hermes') {
423
456
  const root = effectiveHermesHome(config);
457
+ await ensureHermesNousFresh({
458
+ home: root,
459
+ backend,
460
+ signal,
461
+ graceMs: config.graceMs,
462
+ resolveExecutable: (control) => resolveCliExecutable(cli, backend, config, control),
463
+ });
424
464
  const raw = await assertHermesOwnAccounts(root, signal);
425
465
  const provider = raw.config.model?.provider;
426
466
  const source = {
@@ -477,10 +517,10 @@ async function material(cli, backend, config, project, signal) {
477
517
  return { sourceIds: [], entries: [] };
478
518
  }
479
519
  /** Host-only account epoch. Never return it from a Gateway response or write credentials to storage. */
480
- export async function readCliAccountBinding(cli, backend, config, project, signal) {
520
+ export async function readCliAccountBinding(cli, backend, config, project, signal, selectedClaudeRoute) {
481
521
  signal.throwIfAborted();
482
522
  try {
483
- const value = await material(cli, backend, config, project, signal);
523
+ const value = await material(cli, backend, config, project, signal, selectedClaudeRoute);
484
524
  signal.throwIfAborted();
485
525
  if (!value.entries.length || !value.sourceIds.length)
486
526
  throw new CliAccountBindingError(cli);
@@ -494,7 +534,10 @@ export async function readCliAccountBinding(cli, backend, config, project, signa
494
534
  if (error instanceof ProcessCleanupUnconfirmedError)
495
535
  throw error;
496
536
  signal.throwIfAborted();
497
- if (error instanceof CliAccountBindingError)
537
+ if (error instanceof CliAccountBindingError ||
538
+ error instanceof KimiOAuthModelError ||
539
+ error instanceof ClaudeOwnRouteError ||
540
+ error instanceof HermesRenewalError)
498
541
  throw error;
499
542
  throw new CliAccountBindingError(cli);
500
543
  }