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,194 @@
1
+ const nativePrompt = 'Open this URL to sign in:';
2
+ const maxLineLength = 8_192;
3
+ // Fixed endpoints observed from the official CLI's provider-specific device
4
+ // flows. Preserve the server-returned URL; never construct or rewrite one.
5
+ const nativeEndpoints = {
6
+ zai: {
7
+ prefix: /^https:\/\/chat\.z\.ai(?::443)?\/api\/oauth\/authorize\?/,
8
+ origin: 'https://chat.z.ai',
9
+ path: '/api/oauth/authorize',
10
+ parameters: ['client_id', 'redirect_uri', 'state', 'response_type'],
11
+ },
12
+ bigmodel: {
13
+ prefix: /^https:\/\/bigmodel\.cn(?::443)?\/login\?/,
14
+ origin: 'https://bigmodel.cn',
15
+ path: '/login',
16
+ parameters: ['appId', 'redirect', 'state'],
17
+ },
18
+ };
19
+ /** Validate only the observed native authorization endpoint; return the original bytes. */
20
+ function nativeLoginUrl(line, provider) {
21
+ // Older callers retain their Z.AI-only contract. Unknown providers never
22
+ // broaden navigation to either region or a caller-supplied destination.
23
+ const selected = provider === undefined ? 'zai' : provider;
24
+ if (selected !== 'zai' && selected !== 'bigmodel')
25
+ return undefined;
26
+ const endpoint = nativeEndpoints[selected];
27
+ if (line.length > maxLineLength || !endpoint.prefix.test(line) || /[\s\p{C}<>"'\\#]/u.test(line))
28
+ return undefined;
29
+ try {
30
+ const url = new URL(line);
31
+ if (url.protocol !== 'https:' ||
32
+ url.origin !== endpoint.origin ||
33
+ url.pathname !== endpoint.path ||
34
+ url.username ||
35
+ url.password ||
36
+ url.hash ||
37
+ (url.port && url.port !== '443'))
38
+ return undefined;
39
+ for (const parameter of endpoint.parameters) {
40
+ const values = url.searchParams.getAll(parameter);
41
+ if (values.length !== 1 || !values[0]?.trim())
42
+ return undefined;
43
+ }
44
+ return line;
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ /**
51
+ * The caller must enable this only for a ZCode login session and pass the selected
52
+ * provider so one region cannot open the other region's URL. URLs stay in memory.
53
+ * Accept a single complete line immediately after the fixed native --no-browser
54
+ * prompt. SGR/cursor visibility do not affect text. The observed ConPTY blank
55
+ * screen initialization is accepted only before any prompt/URL text; arbitrary
56
+ * cursor edits do not become trusted text. OSC payloads are never stored.
57
+ */
58
+ export function createZcodeLoginLinkParser(provider) {
59
+ let mode = 'text';
60
+ let line = '';
61
+ let invalidLine = false;
62
+ let carriageReturn = false;
63
+ let csiParameters = true;
64
+ let csiLength = 0;
65
+ let csiSequence = '';
66
+ let oscCommand = '';
67
+ let oscCommandComplete = false;
68
+ let oscInitialization = false;
69
+ let awaitingUrl = false;
70
+ let previousUrl;
71
+ const reset = () => {
72
+ mode = 'text';
73
+ line = '';
74
+ invalidLine = false;
75
+ carriageReturn = false;
76
+ csiParameters = true;
77
+ csiLength = 0;
78
+ csiSequence = '';
79
+ oscCommand = '';
80
+ oscCommandComplete = false;
81
+ oscInitialization = false;
82
+ awaitingUrl = false;
83
+ previousUrl = undefined;
84
+ };
85
+ const finishLine = () => {
86
+ const complete = invalidLine ? '' : line.trim();
87
+ line = '';
88
+ invalidLine = false;
89
+ carriageReturn = false;
90
+ if (complete === nativePrompt) {
91
+ awaitingUrl = true;
92
+ return undefined;
93
+ }
94
+ const candidate = awaitingUrl ? nativeLoginUrl(complete, provider) : undefined;
95
+ awaitingUrl = false;
96
+ if (!candidate || candidate === previousUrl)
97
+ return undefined;
98
+ previousUrl = candidate;
99
+ return candidate;
100
+ };
101
+ return {
102
+ reset,
103
+ write(chunk) {
104
+ let result;
105
+ for (const character of chunk) {
106
+ if (mode === 'osc' || mode === 'osc-escape') {
107
+ if (character === '\x07' || (mode === 'osc-escape' && character === '\\')) {
108
+ // Only startup OSC 0/2 title metadata is inert here. In particular,
109
+ // OSC 8 hyperlink targets never supply or decorate a login link.
110
+ if (!oscInitialization || !oscCommandComplete || !['0', '2'].includes(oscCommand))
111
+ invalidLine = true;
112
+ mode = 'text';
113
+ }
114
+ else {
115
+ if (!oscCommandComplete) {
116
+ if (character === ';')
117
+ oscCommandComplete = true;
118
+ else if (oscCommand.length < 2)
119
+ oscCommand += character;
120
+ else
121
+ oscInitialization = false;
122
+ }
123
+ mode = character === '\x1b' ? 'osc-escape' : 'osc';
124
+ }
125
+ continue;
126
+ }
127
+ if (mode === 'escape') {
128
+ if (character === '[') {
129
+ mode = 'csi';
130
+ csiParameters = true;
131
+ csiLength = 0;
132
+ csiSequence = '';
133
+ continue;
134
+ }
135
+ if (character === ']') {
136
+ oscInitialization = !line && !awaitingUrl && !invalidLine;
137
+ oscCommand = '';
138
+ oscCommandComplete = false;
139
+ mode = 'osc';
140
+ }
141
+ else {
142
+ invalidLine = true;
143
+ mode = 'text';
144
+ }
145
+ if (character !== '\n')
146
+ continue;
147
+ }
148
+ else if (mode === 'csi') {
149
+ csiLength++;
150
+ if (character >= '@' && character <= '~') {
151
+ const sequence = csiSequence + character;
152
+ const decoration = character === 'm' && csiParameters;
153
+ const visibility = /^\?25[hl]$/.test(sequence);
154
+ const initialization = !line && !awaitingUrl && !invalidLine && /^(?:2J|0?K|(?:1;1)?H)$/.test(sequence);
155
+ if (csiLength > 64 || (!decoration && !visibility && !initialization))
156
+ invalidLine = true;
157
+ mode = 'text';
158
+ continue;
159
+ }
160
+ csiParameters &&= /^[0-9;:]$/.test(character);
161
+ if (csiLength <= 64)
162
+ csiSequence += character;
163
+ if (character !== '\n')
164
+ continue;
165
+ invalidLine = true;
166
+ mode = 'text';
167
+ }
168
+ if (character === '\n') {
169
+ const found = finishLine();
170
+ if (found)
171
+ result = found;
172
+ continue;
173
+ }
174
+ if (carriageReturn)
175
+ invalidLine = true;
176
+ carriageReturn = character === '\r';
177
+ if (carriageReturn)
178
+ continue;
179
+ if (character === '\x1b') {
180
+ mode = 'escape';
181
+ continue;
182
+ }
183
+ if (/[\p{C}]/u.test(character))
184
+ invalidLine = true;
185
+ if (line.length + character.length > maxLineLength)
186
+ invalidLine = true;
187
+ if (!invalidLine)
188
+ line += character;
189
+ }
190
+ return result;
191
+ },
192
+ };
193
+ }
194
+ //# sourceMappingURL=zcode-login-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zcode-login-link.js","sourceRoot":"","sources":["../../../src/client/zcode-login-link.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  export interface AccountModelScope {
2
2
  state: 'supported' | 'denied' | 'unknown'
3
3
  source: 'account-models' | 'configured-custom' | 'verified-route' | 'unknown'
4
+ /** Safe metadata classification; absent when the server did not establish a specific cause. */
5
+ denialReason?: 'authentication' | 'quota'
4
6
  models: { id: string; name?: string; cost: 'free' | 'paid' | 'unknown' }[]
5
7
  }
6
8
  export interface AccountModelInput {
@@ -9,7 +11,7 @@ export interface AccountModelInput {
9
11
  baseUrl?: string
10
12
  apiType?: string
11
13
  /** Mirror a native route that explicitly sends both Anthropic auth headers. */
12
- anthropicAuth?: 'api-key-and-bearer'
14
+ anthropicAuth?: 'api-key-and-bearer' | 'bearer'
13
15
  customModelIds?: string[]
14
16
  verifiedModelIds?: string[]
15
17
  }
@@ -1,7 +1,12 @@
1
1
  // Read-only account metadata. Never refresh OAuth, submit prompts, or return
2
2
  // credentials, account IDs, headers, endpoint URLs, or raw exception messages.
3
3
  const unknown = () => ({ state: 'unknown', source: 'unknown', models: [] })
4
- const denied = () => ({ state: 'denied', source: 'unknown', models: [] })
4
+ const denied = (denialReason) => ({
5
+ state: 'denied',
6
+ source: 'unknown',
7
+ models: [],
8
+ ...(denialReason ? { denialReason } : {}),
9
+ })
5
10
  const validId = (id) => typeof id === 'string' && !!id && id.length <= 1024 && !/[\s\x00-\x1f]/.test(id)
6
11
  const object = (value) => value && typeof value === 'object' && !Array.isArray(value)
7
12
  const unavailable = (model) =>
@@ -124,7 +129,7 @@ export async function probeAccountModels(input, options = {}) {
124
129
  if (typeof token !== 'string' || !token.trim() || token.trimStart().startsWith('!')) return unknown()
125
130
  // Near-expiry credentials cannot reliably finish the query. Do not renew them.
126
131
  if (oauth && (typeof credential.expires !== 'number' || credential.expires <= Date.now() + 30000))
127
- return denied()
132
+ return denied('authentication')
128
133
  const codex = oauth && ['openai', 'openai-codex'].includes(input.provider)
129
134
  // xAI/other subscription catalogs do not expose a verified per-account scope
130
135
  // contract here. Do not turn an OAuth login into their whole public catalog.
@@ -142,8 +147,8 @@ export async function probeAccountModels(input, options = {}) {
142
147
  if (input.apiType === 'anthropic-messages' && !oauth) {
143
148
  // ZCode's native Anthropic factory sends both headers. Other callers keep
144
149
  // the ordinary x-api-key contract unless they explicitly mirror that route.
145
- if (input.anthropicAuth !== 'api-key-and-bearer') delete headers.Authorization
146
- headers['x-api-key'] = token
150
+ if (!['api-key-and-bearer', 'bearer'].includes(input.anthropicAuth)) delete headers.Authorization
151
+ if (input.anthropicAuth !== 'bearer') headers['x-api-key'] = token
147
152
  headers['anthropic-version'] = '2023-06-01'
148
153
  }
149
154
  if (codex) {
@@ -179,7 +184,7 @@ export async function probeAccountModels(input, options = {}) {
179
184
  : '/models',
180
185
  ]) {
181
186
  modelResponse = await request(path)
182
- if (modelResponse.status === 401 || modelResponse.status === 403) return denied()
187
+ if (modelResponse.status === 401 || modelResponse.status === 403) return denied('authentication')
183
188
  if (modelResponse.status >= 200 && modelResponse.status < 300) break
184
189
  if (![404, 405].includes(modelResponse.status)) return unknown()
185
190
  }
@@ -191,7 +196,7 @@ export async function probeAccountModels(input, options = {}) {
191
196
  return ['invalid_api_key', 'authentication_failed', 'unauthorized', 'forbidden', 401, 403].includes(
192
197
  code,
193
198
  )
194
- ? denied()
199
+ ? denied('authentication')
195
200
  : unknown()
196
201
  }
197
202
  const models = normalize(envelope, oauth, token)
@@ -199,13 +204,11 @@ export async function probeAccountModels(input, options = {}) {
199
204
  if (codex) {
200
205
  const usage = await request('/wham/usage')
201
206
  const rate = usage.payload?.rate_limit
202
- if (
203
- usage.status === 401 ||
204
- usage.status === 403 ||
205
- rate?.allowed === false ||
206
- rate?.limit_reached === true
207
- )
208
- return denied()
207
+ if (usage.status === 401 || usage.status === 403) return denied('authentication')
208
+ // Only the authenticated usage response establishes exhausted quota.
209
+ // Keep an unclassified denial distinct from expiry/401/403 and network failure.
210
+ if (usage.status === 200 && rate?.limit_reached === true) return denied('quota')
211
+ if (rate?.allowed === false || rate?.limit_reached === true) return denied()
209
212
  // A catalog/menu is not evidence that the account has an executable quota.
210
213
  if (usage.status !== 200 || rate?.allowed !== true || rate?.limit_reached !== false) return unknown()
211
214
  const plan =
@@ -1,6 +1,6 @@
1
1
  import { type ProcessBackend, type RuntimeConfig } from './process.ts';
2
2
  import { type CliId } from '../shared/types.ts';
3
- import type { AccountAction, AccountFrame, AccountSource, AccountStatus } from '../shared/accounts.ts';
3
+ import type { AccountAction, AccountFrame, AccountSource, AccountStatus, ZCodeLoginProvider } from '../shared/accounts.ts';
4
4
  import { type AccountIdentitySource } from './account-identity.ts';
5
5
  /** User-only auth processes. Only allowlisted identity metadata leaves the Host. */
6
6
  export declare class AccountManager {
@@ -10,6 +10,7 @@ export declare class AccountManager {
10
10
  private readonly sessions;
11
11
  private readonly reserved;
12
12
  private readonly unsafeQueries;
13
+ private readonly unsafeTerminals;
13
14
  private readonly statusQueries;
14
15
  private readonly pending;
15
16
  private readonly parents;
@@ -21,7 +22,7 @@ export declare class AccountManager {
21
22
  status(cli: CliId, cwd: string, signal: AbortSignal): Promise<AccountStatus>;
22
23
  private readStatus;
23
24
  private hasCustomExecutable;
24
- start(parent: string, cli: CliId, action: AccountAction, cwd: string, signal: AbortSignal, source?: AccountSource): Promise<{
25
+ start(parent: string, cli: CliId, action: AccountAction, cwd: string, signal: AbortSignal, source?: AccountSource, provider?: ZCodeLoginProvider): Promise<{
25
26
  id: string;
26
27
  instruction: string;
27
28
  }>;