dsh-cliworker-now 0.7.6 → 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 (144) hide show
  1. package/README.en.md +29 -9
  2. package/README.md +31 -9
  3. package/lib/account-models.mjs +16 -13
  4. package/lib/client.js +658 -61
  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 +3724 -1589
  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 +2 -2
  15. package/lib/pi-omp-bridge.mjs +2 -2
  16. package/lib/private-launch.mjs +6 -2
  17. package/lib/terminal-bridge.mjs +2 -2
  18. package/lib/typert.host.js +83 -11
  19. package/lib/typert.remote-client.d.ts +2 -0
  20. package/lib/typert.remote-client.d.ts.map +1 -1
  21. package/lib/typert.remote-client.js +77 -11
  22. package/lib/types/client/account-query-queue.d.ts +16 -0
  23. package/lib/types/client/account-query-queue.js +61 -0
  24. package/lib/types/client/account-query-queue.js.map +1 -0
  25. package/lib/types/client/account-terminal.d.ts +6 -2
  26. package/lib/types/client/account-terminal.js +260 -31
  27. package/lib/types/client/account-terminal.js.map +1 -1
  28. package/lib/types/client/settings-dialog.js +65 -38
  29. package/lib/types/client/settings-dialog.js.map +1 -1
  30. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  31. package/lib/types/client/zcode-login-link-provider.js +105 -0
  32. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  33. package/lib/types/client/zcode-login-link.d.ts +16 -0
  34. package/lib/types/client/zcode-login-link.js +194 -0
  35. package/lib/types/client/zcode-login-link.js.map +1 -0
  36. package/lib/types/host/account-models.d.mts +3 -1
  37. package/lib/types/host/account-models.mjs +16 -13
  38. package/lib/types/host/accounts.d.ts +3 -2
  39. package/lib/types/host/accounts.js +129 -22
  40. package/lib/types/host/accounts.js.map +1 -1
  41. package/lib/types/host/adapters.d.ts +1 -1
  42. package/lib/types/host/adapters.js +60 -11
  43. package/lib/types/host/adapters.js.map +1 -1
  44. package/lib/types/host/agy-models.d.ts +2 -1
  45. package/lib/types/host/agy-models.js +6 -6
  46. package/lib/types/host/agy-models.js.map +1 -1
  47. package/lib/types/host/agy-windows-account.d.ts +14 -0
  48. package/lib/types/host/agy-windows-account.js +104 -0
  49. package/lib/types/host/agy-windows-account.js.map +1 -0
  50. package/lib/types/host/authorized-catalog.js +13 -4
  51. package/lib/types/host/authorized-catalog.js.map +1 -1
  52. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  53. package/lib/types/host/claude-native-oauth.js +272 -0
  54. package/lib/types/host/claude-native-oauth.js.map +1 -0
  55. package/lib/types/host/claude-own-route.d.ts +33 -0
  56. package/lib/types/host/claude-own-route.js +250 -0
  57. package/lib/types/host/claude-own-route.js.map +1 -0
  58. package/lib/types/host/cli-account-binding.d.ts +2 -1
  59. package/lib/types/host/cli-account-binding.js +59 -21
  60. package/lib/types/host/cli-account-binding.js.map +1 -1
  61. package/lib/types/host/codex-models.js +4 -0
  62. package/lib/types/host/codex-models.js.map +1 -1
  63. package/lib/types/host/extended-adapters.d.ts +3 -2
  64. package/lib/types/host/extended-adapters.js +9 -7
  65. package/lib/types/host/extended-adapters.js.map +1 -1
  66. package/lib/types/host/first-party-models.d.ts +1 -0
  67. package/lib/types/host/first-party-models.js +136 -47
  68. package/lib/types/host/first-party-models.js.map +1 -1
  69. package/lib/types/host/hermes-accounts.js +15 -1
  70. package/lib/types/host/hermes-accounts.js.map +1 -1
  71. package/lib/types/host/hermes-adapter.d.ts +3 -0
  72. package/lib/types/host/hermes-adapter.js +13 -4
  73. package/lib/types/host/hermes-adapter.js.map +1 -1
  74. package/lib/types/host/hermes-installation.js +54 -35
  75. package/lib/types/host/hermes-installation.js.map +1 -1
  76. package/lib/types/host/hermes-native-entry.py +48 -13
  77. package/lib/types/host/hermes-nous-refresh.py +331 -0
  78. package/lib/types/host/hermes-nous.d.ts +5 -1
  79. package/lib/types/host/hermes-nous.js +5 -5
  80. package/lib/types/host/hermes-nous.js.map +1 -1
  81. package/lib/types/host/hermes-renewal.d.ts +27 -0
  82. package/lib/types/host/hermes-renewal.js +292 -0
  83. package/lib/types/host/hermes-renewal.js.map +1 -0
  84. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  85. package/lib/types/host/hermes-windows-installation.js +91 -0
  86. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  87. package/lib/types/host/index.d.ts +2 -0
  88. package/lib/types/host/index.js +17 -2
  89. package/lib/types/host/index.js.map +1 -1
  90. package/lib/types/host/kimi-accounts.d.ts +2 -0
  91. package/lib/types/host/kimi-accounts.js +4 -2
  92. package/lib/types/host/kimi-accounts.js.map +1 -1
  93. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  94. package/lib/types/host/kimi-oauth-models.js +246 -0
  95. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  96. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  97. package/lib/types/host/mimo-metadata-cache.js +121 -0
  98. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  99. package/lib/types/host/native-capability-cache.d.ts +11 -0
  100. package/lib/types/host/native-capability-cache.js +94 -0
  101. package/lib/types/host/native-capability-cache.js.map +1 -0
  102. package/lib/types/host/native-launch.mjs +62 -7
  103. package/lib/types/host/native-process.d.ts +3 -1
  104. package/lib/types/host/native-process.js +18 -3
  105. package/lib/types/host/native-process.js.map +1 -1
  106. package/lib/types/host/native-spawn.mjs +32 -0
  107. package/lib/types/host/pi-installation.d.mts +1 -1
  108. package/lib/types/host/pi-installation.mjs +27 -3
  109. package/lib/types/host/pi-omp-adapter.js +15 -1
  110. package/lib/types/host/pi-omp-adapter.js.map +1 -1
  111. package/lib/types/host/private-launch.mjs +23 -0
  112. package/lib/types/host/routing.js +25 -2
  113. package/lib/types/host/routing.js.map +1 -1
  114. package/lib/types/host/runtime.js +17 -5
  115. package/lib/types/host/runtime.js.map +1 -1
  116. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  117. package/lib/types/host/windows-account-launch.mjs +47 -0
  118. package/lib/types/host/windows-account-owner.ps1 +137 -0
  119. package/lib/types/host/windows-account-stdio.mjs +19 -0
  120. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  121. package/lib/types/host/windows-account-terminal.js +208 -0
  122. package/lib/types/host/windows-account-terminal.js.map +1 -0
  123. package/lib/types/host/windows-agy-account.ps1 +81 -0
  124. package/lib/types/host/windows-cli-installation.d.ts +31 -0
  125. package/lib/types/host/windows-cli-installation.js +157 -0
  126. package/lib/types/host/windows-cli-installation.js.map +1 -0
  127. package/lib/types/host/windows-hidden-launch.mjs +49 -0
  128. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  129. package/lib/types/host/windows-hidden-process.js +116 -0
  130. package/lib/types/host/windows-hidden-process.js.map +1 -0
  131. package/lib/types/host/zcode-adapter.js +5 -1
  132. package/lib/types/host/zcode-adapter.js.map +1 -1
  133. package/lib/types/host/zcode-grok-accounts.d.ts +3 -1
  134. package/lib/types/host/zcode-grok-accounts.js +60 -11
  135. package/lib/types/host/zcode-grok-accounts.js.map +1 -1
  136. package/lib/types/shared/accounts.d.ts +4 -0
  137. package/lib/windows-account-bootstrap.ps1 +44 -0
  138. package/lib/windows-account-launch.mjs +47 -0
  139. package/lib/windows-account-owner.ps1 +137 -0
  140. package/lib/windows-account-stdio.mjs +19 -0
  141. package/lib/windows-agy-account.ps1 +81 -0
  142. package/lib/windows-hidden-launch.mjs +49 -0
  143. package/lib/zcode-resume.mjs +2 -2
  144. package/package.json +1 -1
@@ -0,0 +1,272 @@
1
+ import { StringDecoder } from 'node:string_decoder';
2
+ import { EFFORTS } from "../shared/types.js";
3
+ import { accountEmail } from "./account-identity.js";
4
+ import { ProcessCleanupUnconfirmedError } from "./process.js";
5
+ const record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
6
+ const id = (value) => typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(value);
7
+ const text = (value) => typeof value === 'string' && !!value.trim() && value.length <= 512 && !/[\x00-\x1f\x7f]/.test(value);
8
+ export class ClaudeNativeOAuthError extends Error {
9
+ code = 'CLAUDE_NATIVE_OAUTH_UNAVAILABLE';
10
+ constructor(message = 'Claude 原生账号模型或额度暂无法确认,请在账号终端检查后刷新') {
11
+ super(message);
12
+ this.name = 'ClaudeNativeOAuthError';
13
+ }
14
+ }
15
+ /** Native initialize is capability metadata: even an unauthenticated CLI returns models. */
16
+ function ownAccount(value) {
17
+ const email = record(value) ? accountEmail(value.email) : undefined;
18
+ if (!record(value) ||
19
+ value.apiProvider !== 'firstParty' ||
20
+ value.tokenSource !== 'claude.ai' ||
21
+ (value.apiKeySource !== undefined && value.apiKeySource !== 'none') ||
22
+ !email)
23
+ throw new ClaudeNativeOAuthError('Claude 尚未通过原生账号登录,请打开账号终端登录');
24
+ if (value.organization !== undefined && !text(value.organization))
25
+ throw new ClaudeNativeOAuthError();
26
+ return { email, ...(value.organization !== undefined && { organization: value.organization }) };
27
+ }
28
+ /**
29
+ * Claude 2.1.296's get_usage can fall back to stale persisted/header observations after a
30
+ * failed endpoint read. That fallback removes `limits`; never authorize from it. A native
31
+ * successful read can still use the CLI's own account-bound snapshot younger than 60s. We add
32
+ * no cache and make no claim of a separate live model entitlement API.
33
+ */
34
+ function remainingQuota(value, now) {
35
+ const unknown = () => new ClaudeNativeOAuthError('Claude 原生账号剩余额度暂无法确认,请检查登录与订阅后刷新');
36
+ if (!record(value) ||
37
+ value.rate_limits_available !== true ||
38
+ !['pro', 'max', 'team', 'enterprise'].includes(value.subscription_type) ||
39
+ !record(value.rate_limits) ||
40
+ !Array.isArray(value.rate_limits.limits))
41
+ throw unknown();
42
+ const limits = value.rate_limits;
43
+ const windows = ['five_hour', 'seven_day', 'seven_day_oauth_apps', 'seven_day_opus', 'seven_day_sonnet']
44
+ .filter((key) => limits[key] != null)
45
+ .map((key) => limits[key]);
46
+ // A billing balance or extra-usage wallet is not authorization to spend beyond a plan.
47
+ if (limits.five_hour == null || limits.seven_day == null)
48
+ throw unknown();
49
+ const percentages = [];
50
+ const window = (entry) => {
51
+ if (!record(entry) ||
52
+ typeof entry.utilization !== 'number' ||
53
+ !Number.isFinite(entry.utilization) ||
54
+ entry.utilization < 0 ||
55
+ (entry.resets_at !== null &&
56
+ (typeof entry.resets_at !== 'string' ||
57
+ !Number.isFinite(Date.parse(entry.resets_at)) ||
58
+ Date.parse(entry.resets_at) <= now)))
59
+ throw unknown();
60
+ percentages.push(entry.utilization);
61
+ };
62
+ windows.forEach(window);
63
+ if (limits.model_scoped !== undefined) {
64
+ if (!Array.isArray(limits.model_scoped))
65
+ throw unknown();
66
+ limits.model_scoped.forEach(window);
67
+ }
68
+ for (const entry of limits.limits) {
69
+ if (!record(entry) ||
70
+ typeof entry.percent !== 'number' ||
71
+ !Number.isFinite(entry.percent) ||
72
+ entry.percent < 0 ||
73
+ typeof entry.is_active !== 'boolean')
74
+ throw unknown();
75
+ if (entry.is_active)
76
+ percentages.push(entry.percent);
77
+ }
78
+ // Conservative across all returned plan windows; do not infer that a model bypasses a limit.
79
+ if (percentages.some((percent) => percent >= 100))
80
+ throw new ClaudeNativeOAuthError('Claude 当前账号存在已用尽的限额,请等待重置或检查订阅');
81
+ }
82
+ export function parseClaudeNativeOAuthCatalog(initialize, usage, now = Date.now()) {
83
+ if (!record(initialize))
84
+ throw new ClaudeNativeOAuthError();
85
+ const account = ownAccount(initialize.account);
86
+ remainingQuota(usage, now);
87
+ if (!Array.isArray(initialize.models))
88
+ throw new ClaudeNativeOAuthError();
89
+ const models = new Map();
90
+ for (const model of initialize.models) {
91
+ if (!record(model) ||
92
+ !id(model.value) ||
93
+ !id(model.resolvedModel) ||
94
+ model.disabled === true ||
95
+ model.hidden === true ||
96
+ model.entitled === false ||
97
+ model.available === false ||
98
+ model.allowed === false)
99
+ continue;
100
+ const efforts = model.supportsEffort === true && Array.isArray(model.supportedEffortLevels)
101
+ ? EFFORTS.filter((effort) => ['low', 'medium', 'high', 'xhigh', 'max'].includes(effort) &&
102
+ model.supportedEffortLevels.includes(effort))
103
+ : [];
104
+ // Default leaves the native CLI's own effort policy untouched.
105
+ const choice = {
106
+ id: model.value,
107
+ label: text(model.displayName) ? model.displayName : model.value,
108
+ efforts: ['default', ...efforts],
109
+ };
110
+ if (models.has(choice.id))
111
+ throw new ClaudeNativeOAuthError('Claude 原生模型目录存在重复选项,请刷新');
112
+ models.set(choice.id, choice);
113
+ }
114
+ if (!models.size)
115
+ throw new ClaudeNativeOAuthError('Claude 原生账号暂未返回可确认的模型,请刷新');
116
+ return { account, models: [...models.values()] };
117
+ }
118
+ /** Only initialize/get_usage controls are sent. No user message, token read, login or model request. */
119
+ export async function discoverClaudeNativeOAuth(backend, config, executable, cwd, signal, prefixArgs) {
120
+ signal.throwIfAborted();
121
+ // The caller supplies the same native-route overlay used for actual worker execution.
122
+ if (prefixArgs.length !== 2 || prefixArgs[0] !== '--settings')
123
+ throw new ClaudeNativeOAuthError();
124
+ let overlay;
125
+ try {
126
+ overlay = JSON.parse(prefixArgs[1]);
127
+ }
128
+ catch {
129
+ throw new ClaudeNativeOAuthError();
130
+ }
131
+ if (!record(overlay))
132
+ throw new ClaudeNativeOAuthError();
133
+ const control = AbortSignal.any([signal, AbortSignal.timeout(15_000)]);
134
+ const child = backend.spawn({
135
+ argv: [
136
+ executable,
137
+ '--settings',
138
+ JSON.stringify({ ...overlay, disableAllHooks: true, promptSuggestionEnabled: false }),
139
+ '--strict-mcp-config',
140
+ '--mcp-config',
141
+ '{"mcpServers":{}}',
142
+ '--print',
143
+ '--input-format',
144
+ 'stream-json',
145
+ '--output-format',
146
+ 'stream-json',
147
+ '--verbose',
148
+ '--no-session-persistence',
149
+ ],
150
+ cwd,
151
+ env: {
152
+ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1',
153
+ DISABLE_TELEMETRY: '1',
154
+ DISABLE_ERROR_REPORTING: '1',
155
+ DISABLE_AUTOUPDATER: '1',
156
+ CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: 'false',
157
+ },
158
+ stdio: { stdin: 'pipe', stdout: 'pipe', stderr: 'pipe' },
159
+ graceMs: config.graceMs,
160
+ signal: control,
161
+ });
162
+ void child.done.catch(() => undefined);
163
+ const inputError = () => undefined;
164
+ child.stdin?.on('error', inputError);
165
+ const write = (request_id, request) => new Promise((resolve, reject) => {
166
+ if (!child.stdin || child.stdin.destroyed)
167
+ return reject(new ClaudeNativeOAuthError());
168
+ child.stdin.write(JSON.stringify({ type: 'control_request', request_id, request }) + '\n', (error) => error ? reject(new ClaudeNativeOAuthError()) : resolve());
169
+ });
170
+ let bytes = 0;
171
+ const count = (chunk) => {
172
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
173
+ bytes += buffer.length;
174
+ if (bytes > Math.min(config.maxRunBytes, 2_097_152))
175
+ throw new ClaudeNativeOAuthError('Claude 账号目录响应过大');
176
+ return buffer;
177
+ };
178
+ const errors = (async () => {
179
+ if (child.stderr)
180
+ for await (const chunk of child.stderr)
181
+ count(chunk);
182
+ })();
183
+ void errors.catch(() => undefined);
184
+ const output = (async () => {
185
+ if (!child.stdout)
186
+ throw new ClaudeNativeOAuthError();
187
+ const decoder = new StringDecoder('utf8');
188
+ let pending = '', expected = 'native-initialize', initialize;
189
+ for await (const chunk of child.stdout) {
190
+ pending += decoder.write(count(chunk));
191
+ let newline;
192
+ while ((newline = pending.indexOf('\n')) >= 0) {
193
+ const line = pending.slice(0, newline);
194
+ pending = pending.slice(newline + 1);
195
+ let message;
196
+ try {
197
+ message = JSON.parse(line);
198
+ }
199
+ catch {
200
+ throw new ClaudeNativeOAuthError();
201
+ }
202
+ if (!record(message))
203
+ throw new ClaudeNativeOAuthError();
204
+ if (['assistant', 'user', 'stream_event', 'result', 'control_request'].includes(message.type))
205
+ throw new ClaudeNativeOAuthError('Claude 账号查询返回了非元数据事件,已停止查询');
206
+ if (message.type !== 'control_response')
207
+ continue;
208
+ const response = message.response;
209
+ if (!record(response) || response.request_id !== expected)
210
+ throw new ClaudeNativeOAuthError();
211
+ if (response.subtype !== 'success' || !record(response.response))
212
+ throw new ClaudeNativeOAuthError();
213
+ if (expected === 'native-initialize') {
214
+ initialize = response.response;
215
+ ownAccount(response.response.account);
216
+ expected = 'native-usage';
217
+ await write(expected, { subtype: 'get_usage', skip_behaviors: true });
218
+ }
219
+ else
220
+ return parseClaudeNativeOAuthCatalog(initialize, response.response);
221
+ }
222
+ }
223
+ throw new ClaudeNativeOAuthError('Claude 账号查询提前结束,请刷新');
224
+ })();
225
+ void output.catch(() => undefined);
226
+ let abort = () => { };
227
+ const cancelled = new Promise((_, reject) => {
228
+ abort = () => reject(new ClaudeNativeOAuthError(signal.aborted ? 'Claude 账号查询已取消' : 'Claude 账号查询超时,请刷新'));
229
+ control.addEventListener('abort', abort, { once: true });
230
+ if (control.aborted)
231
+ abort();
232
+ });
233
+ const failed = new Promise((_, reject) => {
234
+ void errors.catch(reject);
235
+ void child.done.catch(() => reject(new ClaudeNativeOAuthError()));
236
+ });
237
+ try {
238
+ await Promise.race([
239
+ write('native-initialize', {
240
+ subtype: 'initialize',
241
+ hooks: {},
242
+ sdkMcpServers: [],
243
+ promptSuggestions: false,
244
+ agentProgressSummaries: false,
245
+ }),
246
+ cancelled,
247
+ ]);
248
+ const result = await Promise.race([output, cancelled, failed]);
249
+ control.throwIfAborted();
250
+ return result;
251
+ }
252
+ catch (error) {
253
+ if (error instanceof ClaudeNativeOAuthError)
254
+ throw error;
255
+ signal.throwIfAborted();
256
+ throw new ClaudeNativeOAuthError();
257
+ }
258
+ finally {
259
+ control.removeEventListener('abort', abort);
260
+ try {
261
+ child.terminate();
262
+ if (!(await child.waitForExit()))
263
+ throw new ProcessCleanupUnconfirmedError();
264
+ }
265
+ catch {
266
+ throw new ProcessCleanupUnconfirmedError();
267
+ }
268
+ await Promise.allSettled([output, errors, child.done]);
269
+ child.stdin?.removeListener('error', inputError);
270
+ }
271
+ }
272
+ //# sourceMappingURL=claude-native-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-native-oauth.js","sourceRoot":"","sources":["../../../src/host/claude-native-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type AccountIdentity } from './account-identity.ts';
2
+ import { type FirstPartyModelSource } from './first-party-models.ts';
3
+ /** Public errors never interpolate native configuration or credentials. */
4
+ export declare class ClaudeOwnRouteError extends Error {
5
+ readonly code = "CLI_OWN_ACCOUNT_REQUIRED";
6
+ constructor(message?: string);
7
+ }
8
+ export interface ClaudeOwnRoute {
9
+ kind: 'native' | 'proxy' | 'api';
10
+ sourceIds: string[];
11
+ configDirectory?: string;
12
+ /** Host-only; never project this material to Gateway. */
13
+ source?: FirstPartyModelSource;
14
+ }
15
+ /** Verified on native 2.1.296: empty settings.env unsets provider selectors for this process. */
16
+ export declare function claudeNativeSettingsArguments(configDirectory?: string): string[];
17
+ /** TCP only: a listening proxy remains selected even if its HTTP authentication fails. */
18
+ export declare function claudeLoopbackAvailable(url: URL, signal: AbortSignal): Promise<boolean>;
19
+ export declare function readClaudeOwnRoute(project: string, signal: AbortSignal, options?: {
20
+ available?: typeof claudeLoopbackAvailable;
21
+ }): Promise<ClaudeOwnRoute>;
22
+ export declare function claudeRouteStatusArguments(executable: string, route: ClaudeOwnRoute): string[];
23
+ export declare function claudeRouteIdentity(route: ClaudeOwnRoute, raw: string, exitCode: number | null): AccountIdentity;
24
+ /** Pin one route before spawning; secrets are in a private temporary file, never argv. */
25
+ export declare function prepareClaudeWorkerLaunch(route: ClaudeOwnRoute, argv: string[], stateDirectory: string, signal: AbortSignal): Promise<{
26
+ argv: string[];
27
+ env: {};
28
+ cleanup?: undefined;
29
+ } | {
30
+ argv: string[];
31
+ env: {};
32
+ cleanup: () => Promise<void>;
33
+ }>;
@@ -0,0 +1,250 @@
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)|AWS_|GOOGLE_|CLOUD_ML|API_KEY|BEARER_TOKEN/;
11
+ const allowed = new Set(['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_BASE_URL']);
12
+ const modelOption = /^ANTHROPIC_(?:MODEL|SMALL_FAST_MODEL|DEFAULT_(?:HAIKU|SONNET|OPUS)_MODEL(?:_NAME)?)$/;
13
+ const officialBase = 'https://api.anthropic.com';
14
+ const homeOption = /^(?:CLAUDE_CONFIG_DIR|HOME|USERPROFILE|XDG_CONFIG_HOME)$/;
15
+ /** Public errors never interpolate native configuration or credentials. */
16
+ export class ClaudeOwnRouteError extends Error {
17
+ code = 'CLI_OWN_ACCOUNT_REQUIRED';
18
+ constructor(message = 'Claude 账号来源无法确认,请检查该 CLI 的配置') {
19
+ super(message);
20
+ this.name = 'ClaudeOwnRouteError';
21
+ }
22
+ }
23
+ /** Verified on native 2.1.296: empty settings.env unsets provider selectors for this process. */
24
+ export function claudeNativeSettingsArguments(configDirectory) {
25
+ return [
26
+ '--settings',
27
+ JSON.stringify({
28
+ apiKeyHelper: '',
29
+ env: {
30
+ ...(configDirectory ? { CLAUDE_CONFIG_DIR: configDirectory } : {}),
31
+ CLAUDE_CODE_USE_BEDROCK: '',
32
+ CLAUDE_CODE_USE_VERTEX: '',
33
+ CLAUDE_CODE_USE_FOUNDRY: '',
34
+ ANTHROPIC_AUTH_TOKEN: '',
35
+ ANTHROPIC_API_KEY: '',
36
+ CLAUDE_CODE_OAUTH_TOKEN: '',
37
+ ANTHROPIC_BASE_URL: officialBase,
38
+ ANTHROPIC_MODEL: '',
39
+ ANTHROPIC_SMALL_FAST_MODEL: '',
40
+ ANTHROPIC_DEFAULT_HAIKU_MODEL: '',
41
+ ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME: '',
42
+ ANTHROPIC_DEFAULT_SONNET_MODEL: '',
43
+ ANTHROPIC_DEFAULT_SONNET_MODEL_NAME: '',
44
+ ANTHROPIC_DEFAULT_OPUS_MODEL: '',
45
+ ANTHROPIC_DEFAULT_OPUS_MODEL_NAME: '',
46
+ },
47
+ }),
48
+ ];
49
+ }
50
+ /** TCP only: a listening proxy remains selected even if its HTTP authentication fails. */
51
+ export async function claudeLoopbackAvailable(url, signal) {
52
+ signal.throwIfAborted();
53
+ return new Promise((resolve, reject) => {
54
+ const socket = createConnection({
55
+ host: url.hostname.replace(/^\[|\]$/g, ''),
56
+ port: Number(url.port || (url.protocol === 'https:' ? 443 : 80)),
57
+ });
58
+ let settled = false;
59
+ const done = (value, error) => {
60
+ if (settled)
61
+ return;
62
+ settled = true;
63
+ signal.removeEventListener('abort', abort);
64
+ socket.destroy();
65
+ error !== undefined ? reject(error) : resolve(value);
66
+ };
67
+ const abort = () => done(undefined, signal.reason ?? new Error('查询已取消'));
68
+ signal.addEventListener('abort', abort, { once: true });
69
+ socket.once('connect', () => done(true));
70
+ socket.setTimeout(1200, () => done(false));
71
+ socket.once('error', (error) => {
72
+ if (['ECONNREFUSED', 'ETIMEDOUT', 'EHOSTUNREACH', 'ENETUNREACH'].includes(error.code ?? ''))
73
+ done(false);
74
+ else
75
+ done(undefined, new ClaudeOwnRouteError('Claude 本地代理连接状态无法确认,请检查代理'));
76
+ });
77
+ if (signal.aborted)
78
+ abort();
79
+ });
80
+ }
81
+ export async function readClaudeOwnRoute(project, signal, options = {}) {
82
+ signal.throwIfAborted();
83
+ const root = process.env.CLAUDE_CONFIG_DIR?.trim() || join(homedir(), '.claude');
84
+ if (!isAbsolute(root))
85
+ throw new ClaudeOwnRouteError('Claude 账号目录必须使用绝对路径');
86
+ const paths = [
87
+ join(root, 'settings.json'),
88
+ join(project, '.claude/settings.json'),
89
+ join(project, '.claude/settings.local.json'),
90
+ ];
91
+ const configured = Object.create(null), env = Object.create(null);
92
+ for (const path of paths) {
93
+ const settings = await readFirstPartyJson(path);
94
+ signal.throwIfAborted();
95
+ Object.assign(configured, settings);
96
+ if (record(settings.env))
97
+ Object.assign(env, settings.env);
98
+ }
99
+ const managed = await readFirstPartyJson(claudeManagedSettingsPath());
100
+ signal.throwIfAborted();
101
+ if (Object.entries(process.env).some(([key, value]) => value && authOption.test(key) && !modelOption.test(key)))
102
+ throw new ClaudeOwnRouteError('Claude 检测到环境账号覆盖,请先在该 CLI 自身设置中明确账号来源');
103
+ if (configured.apiKeyHelper ||
104
+ managed.apiKeyHelper ||
105
+ (record(managed.env) &&
106
+ Object.entries(managed.env).some(([key, value]) => value && (authOption.test(key) || homeOption.test(key)))))
107
+ throw new ClaudeOwnRouteError();
108
+ if (Object.entries(env).some(([key, value]) => value &&
109
+ (homeOption.test(key) || (authOption.test(key) && !allowed.has(key) && !modelOption.test(key)))))
110
+ throw new ClaudeOwnRouteError();
111
+ const key = env.ANTHROPIC_API_KEY, bearer = env.ANTHROPIC_AUTH_TOKEN;
112
+ if (key && bearer)
113
+ throw new ClaudeOwnRouteError('Claude 同时配置两种令牌,请先明确一种登录来源');
114
+ if ((key && !literal(key)) || (bearer && !literal(bearer)))
115
+ throw new ClaudeOwnRouteError();
116
+ let url;
117
+ try {
118
+ url = new URL(env.ANTHROPIC_BASE_URL || officialBase);
119
+ if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)
120
+ throw new Error();
121
+ }
122
+ catch {
123
+ throw new ClaudeOwnRouteError('Claude 服务地址无效,请检查该 CLI 的配置');
124
+ }
125
+ const loopback = ['localhost', '127.0.0.1', '[::1]', '::1'].includes(url.hostname.toLowerCase());
126
+ if (loopback && !(await (options.available ?? claudeLoopbackAvailable)(url, signal))) {
127
+ signal.throwIfAborted();
128
+ return { kind: 'native', configDirectory: root, sourceIds: [root, 'native:claude-official-login'] };
129
+ }
130
+ signal.throwIfAborted();
131
+ if (!key && !bearer) {
132
+ if (loopback || url.href.replace(/\/$/, '') !== officialBase)
133
+ throw new ClaudeOwnRouteError('Claude 服务已配置,但无法确认该服务的自身凭据');
134
+ return { kind: 'native', configDirectory: root, sourceIds: [root, 'native:claude-official-login'] };
135
+ }
136
+ return {
137
+ kind: loopback ? 'proxy' : 'api',
138
+ configDirectory: root,
139
+ sourceIds: paths,
140
+ source: {
141
+ provider: 'anthropic',
142
+ credential: { type: 'api', key: bearer || key },
143
+ baseUrl: url.href.replace(/\/$/, ''),
144
+ apiType: 'anthropic-messages',
145
+ ...(bearer ? { anthropicAuth: 'bearer' } : {}),
146
+ sourceIds: paths,
147
+ nativeModels: [],
148
+ nativeFullModelIds: true,
149
+ claudeRoute: loopback ? 'proxy' : 'api',
150
+ },
151
+ };
152
+ }
153
+ export function claudeRouteStatusArguments(executable, route) {
154
+ return [
155
+ executable,
156
+ ...(route.kind === 'native' ? claudeNativeSettingsArguments(route.configDirectory) : []),
157
+ 'auth',
158
+ 'status',
159
+ '--json',
160
+ ];
161
+ }
162
+ export function claudeRouteIdentity(route, raw, exitCode) {
163
+ let status;
164
+ try {
165
+ status = JSON.parse(raw);
166
+ }
167
+ catch {
168
+ throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');
169
+ }
170
+ if (!record(status))
171
+ throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');
172
+ if (status.apiProvider !== undefined && status.apiProvider !== 'firstParty')
173
+ throw new ClaudeOwnRouteError();
174
+ if (route.configDirectory && status.configDirectory !== undefined) {
175
+ const normalized = (path) => process.platform === 'win32' ? resolve(path).toLowerCase() : resolve(path);
176
+ if (typeof status.configDirectory !== 'string' ||
177
+ !isAbsolute(status.configDirectory) ||
178
+ normalized(status.configDirectory) !== normalized(route.configDirectory))
179
+ throw new ClaudeOwnRouteError('Claude 原生账号目录与选定来源不一致');
180
+ }
181
+ if (route.kind === 'native') {
182
+ if ([0, 1].includes(exitCode ?? -1) && status.loggedIn === false)
183
+ return { state: 'unconfigured', summary: 'Claude 官方账号未登录', verification: 'cli' };
184
+ if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== 'claude.ai')
185
+ throw new ClaudeOwnRouteError('Claude 官方登录来源无法确认,请使用原生登录');
186
+ const email = accountEmail(status.email);
187
+ return {
188
+ state: 'authenticated',
189
+ summary: 'Claude 官方账号登录',
190
+ authMethod: 'oauth',
191
+ accountLabel: email,
192
+ logins: [{ providerLabel: 'Claude 官方', authMethod: 'oauth', accountLabel: email }],
193
+ verification: 'cli',
194
+ };
195
+ }
196
+ const expected = route.source?.anthropicAuth === 'bearer' ? 'oauth_token' : 'api_key';
197
+ if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== expected)
198
+ throw new ClaudeOwnRouteError();
199
+ const label = route.kind === 'proxy' ? 'Claude 本地代理' : 'Claude 自身配置';
200
+ return {
201
+ state: 'authenticated',
202
+ summary: `${label} API 登录`,
203
+ authMethod: 'api',
204
+ logins: [{ providerLabel: label, authMethod: 'api' }],
205
+ verification: 'cli',
206
+ };
207
+ }
208
+ /** Pin one route before spawning; secrets are in a private temporary file, never argv. */
209
+ export async function prepareClaudeWorkerLaunch(route, argv, stateDirectory, signal) {
210
+ signal.throwIfAborted();
211
+ if (route.kind === 'native')
212
+ return {
213
+ argv: [argv[0], ...claudeNativeSettingsArguments(route.configDirectory), ...argv.slice(1)],
214
+ env: {},
215
+ };
216
+ if (!route.source)
217
+ throw new ClaudeOwnRouteError();
218
+ const parent = join(stateDirectory, 'claude-route');
219
+ await safePiOmpAncestors(parent);
220
+ await mkdir(parent, { recursive: true, mode: 0o700 });
221
+ await safePiOmpAncestors(parent);
222
+ const directory = await mkdtemp(join(parent, 'run-'));
223
+ try {
224
+ const path = join(directory, 'settings.json');
225
+ await writeFile(path, JSON.stringify({
226
+ apiKeyHelper: '',
227
+ env: {
228
+ ...(route.configDirectory ? { CLAUDE_CONFIG_DIR: route.configDirectory } : {}),
229
+ CLAUDE_CODE_USE_BEDROCK: '',
230
+ CLAUDE_CODE_USE_VERTEX: '',
231
+ CLAUDE_CODE_USE_FOUNDRY: '',
232
+ ANTHROPIC_BASE_URL: route.source.baseUrl,
233
+ ANTHROPIC_AUTH_TOKEN: route.source.anthropicAuth === 'bearer' ? route.source.credential.key : '',
234
+ ANTHROPIC_API_KEY: route.source.anthropicAuth === 'bearer' ? '' : route.source.credential.key,
235
+ CLAUDE_CODE_OAUTH_TOKEN: '',
236
+ },
237
+ }), { mode: 0o600, flag: 'wx' });
238
+ signal.throwIfAborted();
239
+ return {
240
+ argv: [argv[0], '--settings', path, ...argv.slice(1)],
241
+ env: {},
242
+ cleanup: () => rm(directory, { recursive: true, force: true }),
243
+ };
244
+ }
245
+ catch (error) {
246
+ await rm(directory, { recursive: true, force: true });
247
+ throw error;
248
+ }
249
+ }
250
+ //# 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>;