@dsh-enhanced/coding-subscription-provider 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +204 -0
- package/cordis.patch.yml +3 -0
- package/lib/adapter.d.ts +76 -0
- package/lib/adapter.d.ts.map +1 -0
- package/lib/adapter.js +404 -0
- package/lib/adapter.js.map +1 -0
- package/lib/auth.d.ts +33 -0
- package/lib/auth.d.ts.map +1 -0
- package/lib/auth.js +101 -0
- package/lib/auth.js.map +1 -0
- package/lib/codex-catalog.d.ts +57 -0
- package/lib/codex-catalog.d.ts.map +1 -0
- package/lib/codex-catalog.js +368 -0
- package/lib/codex-catalog.js.map +1 -0
- package/lib/config.d.ts +48 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +66 -0
- package/lib/config.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +40 -0
- package/lib/index.js.map +1 -0
- package/lib/process.d.ts +114 -0
- package/lib/process.d.ts.map +1 -0
- package/lib/process.js +712 -0
- package/lib/process.js.map +1 -0
- package/lib/prompt.d.ts +4 -0
- package/lib/prompt.d.ts.map +1 -0
- package/lib/prompt.js +49 -0
- package/lib/prompt.js.map +1 -0
- package/lib/providers.d.ts +30 -0
- package/lib/providers.d.ts.map +1 -0
- package/lib/providers.js +61 -0
- package/lib/providers.js.map +1 -0
- package/lib/subscription-catalog.d.ts +51 -0
- package/lib/subscription-catalog.d.ts.map +1 -0
- package/lib/subscription-catalog.js +289 -0
- package/lib/subscription-catalog.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { isAbsolute } from 'node:path';
|
|
3
|
+
import { buildSubscriptionEnv } from './process.js';
|
|
4
|
+
const APP_SERVER_ARGS = ['app-server', '--config', 'model_provider="openai"'];
|
|
5
|
+
const MAX_CATALOG_PAGES = 20;
|
|
6
|
+
const MAX_CATALOG_MODELS = 1_000;
|
|
7
|
+
const defaults = {
|
|
8
|
+
timeoutMs: 10_000,
|
|
9
|
+
killGraceMs: 3_000,
|
|
10
|
+
maxLineBytes: 256 * 1024,
|
|
11
|
+
maxOutputBytes: 2 * 1024 * 1024,
|
|
12
|
+
maxStderrBytes: 32 * 1024,
|
|
13
|
+
};
|
|
14
|
+
const defaultSpawn = (command, args, options) => nodeSpawn(command, [...args], { ...options, stdio: [...options.stdio] });
|
|
15
|
+
/**
|
|
16
|
+
* Discover Codex's picker-visible subscription models through the stable app-server `model/list`
|
|
17
|
+
* method. The subprocess is forced to the built-in `openai` model provider, creates no thread or
|
|
18
|
+
* turn, and closes immediately after all catalog pages have been validated.
|
|
19
|
+
*/
|
|
20
|
+
export async function discoverCodexModels(invocation, options = {}) {
|
|
21
|
+
if (invocation.command.trim().length === 0 || !isAbsolute(invocation.cwd))
|
|
22
|
+
throw catalogError('protocol');
|
|
23
|
+
if (options.signal?.aborted)
|
|
24
|
+
throw abortError(options.signal);
|
|
25
|
+
const timeoutMs = positiveInteger(options.timeoutMs, defaults.timeoutMs);
|
|
26
|
+
const killGraceMs = positiveInteger(options.killGraceMs, defaults.killGraceMs);
|
|
27
|
+
const maxLineBytes = positiveInteger(options.maxLineBytes, defaults.maxLineBytes);
|
|
28
|
+
const maxOutputBytes = positiveInteger(options.maxOutputBytes, defaults.maxOutputBytes);
|
|
29
|
+
const maxStderrBytes = positiveInteger(options.maxStderrBytes, defaults.maxStderrBytes);
|
|
30
|
+
const spawn = options.spawn ?? defaultSpawn;
|
|
31
|
+
const child = spawn(invocation.command, APP_SERVER_ARGS, {
|
|
32
|
+
cwd: invocation.cwd,
|
|
33
|
+
shell: false,
|
|
34
|
+
detached: process.platform !== 'win32',
|
|
35
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
36
|
+
env: buildSubscriptionEnv(options.extraEnvNames),
|
|
37
|
+
});
|
|
38
|
+
let closed = false;
|
|
39
|
+
let closeResult;
|
|
40
|
+
const closePromise = new Promise(resolve => {
|
|
41
|
+
child.once('close', (code, signal) => {
|
|
42
|
+
closed = true;
|
|
43
|
+
closeResult = { code, signal };
|
|
44
|
+
resolve(closeResult);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
const spawnError = new Promise((_resolve, reject) => {
|
|
48
|
+
child.once('error', reject);
|
|
49
|
+
});
|
|
50
|
+
let rejectResponse;
|
|
51
|
+
let resolveResponse;
|
|
52
|
+
const response = new Promise((resolve, reject) => {
|
|
53
|
+
resolveResponse = resolve;
|
|
54
|
+
rejectResponse = reject;
|
|
55
|
+
});
|
|
56
|
+
let responseSettled = false;
|
|
57
|
+
let pending = Buffer.alloc(0);
|
|
58
|
+
let protocolBytes = 0;
|
|
59
|
+
let stderr = '';
|
|
60
|
+
let nextRequestId = 1;
|
|
61
|
+
let expectedResponseId = 0;
|
|
62
|
+
let pages = 0;
|
|
63
|
+
const cursors = new Set();
|
|
64
|
+
const models = [];
|
|
65
|
+
const defaultModels = [];
|
|
66
|
+
const fail = (error) => {
|
|
67
|
+
if (responseSettled)
|
|
68
|
+
return;
|
|
69
|
+
responseSettled = true;
|
|
70
|
+
rejectResponse(error);
|
|
71
|
+
};
|
|
72
|
+
const send = (message) => {
|
|
73
|
+
if (responseSettled)
|
|
74
|
+
return;
|
|
75
|
+
try {
|
|
76
|
+
child.stdin.write(`${JSON.stringify(message)}\n`);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
fail(error);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const requestPage = (cursor) => {
|
|
83
|
+
expectedResponseId = nextRequestId++;
|
|
84
|
+
send({
|
|
85
|
+
method: 'model/list',
|
|
86
|
+
id: expectedResponseId,
|
|
87
|
+
params: { limit: 100, includeHidden: false, ...(cursor === undefined ? {} : { cursor }) },
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
const acceptMessage = (message) => {
|
|
91
|
+
const envelope = jsonObject(message);
|
|
92
|
+
if (envelope === undefined || Object.hasOwn(envelope, 'jsonrpc'))
|
|
93
|
+
throw catalogError('protocol');
|
|
94
|
+
if (typeof envelope.method === 'string') {
|
|
95
|
+
// Notifications are informational during catalog discovery. A server-initiated request is
|
|
96
|
+
// never needed because this client advertises no corresponding capability.
|
|
97
|
+
if (Object.hasOwn(envelope, 'id'))
|
|
98
|
+
throw catalogError('protocol');
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (envelope.id !== expectedResponseId || Object.hasOwn(envelope, 'error') || !Object.hasOwn(envelope, 'result')) {
|
|
102
|
+
throw catalogError('protocol');
|
|
103
|
+
}
|
|
104
|
+
if (expectedResponseId === 0) {
|
|
105
|
+
validateInitializeResult(envelope.result);
|
|
106
|
+
send({ method: 'initialized', params: {} });
|
|
107
|
+
requestPage();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const page = validateCatalogPage(envelope.result);
|
|
111
|
+
pages += 1;
|
|
112
|
+
if (pages > MAX_CATALOG_PAGES || models.length + page.models.length > MAX_CATALOG_MODELS) {
|
|
113
|
+
throw catalogError('protocol');
|
|
114
|
+
}
|
|
115
|
+
models.push(...page.models);
|
|
116
|
+
defaultModels.push(...page.defaultModels);
|
|
117
|
+
if (page.nextCursor !== null) {
|
|
118
|
+
if (cursors.has(page.nextCursor))
|
|
119
|
+
throw catalogError('protocol');
|
|
120
|
+
cursors.add(page.nextCursor);
|
|
121
|
+
requestPage(page.nextCursor);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (models.length === 0 || new Set(models.map(model => model.id)).size !== models.length
|
|
125
|
+
|| defaultModels.length > 1) {
|
|
126
|
+
throw catalogError('protocol');
|
|
127
|
+
}
|
|
128
|
+
responseSettled = true;
|
|
129
|
+
resolveResponse({
|
|
130
|
+
models,
|
|
131
|
+
...(defaultModels[0] === undefined ? {} : { defaultModel: defaultModels[0] }),
|
|
132
|
+
observedAt: Date.now(),
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
const onStdout = (chunk) => {
|
|
136
|
+
if (responseSettled)
|
|
137
|
+
return;
|
|
138
|
+
try {
|
|
139
|
+
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
140
|
+
protocolBytes += bytes.length;
|
|
141
|
+
if (protocolBytes > maxOutputBytes)
|
|
142
|
+
throw catalogError('protocol');
|
|
143
|
+
pending = Buffer.concat([pending, bytes]);
|
|
144
|
+
while (true) {
|
|
145
|
+
const newline = pending.indexOf(0x0a);
|
|
146
|
+
if (newline < 0)
|
|
147
|
+
break;
|
|
148
|
+
if (newline > maxLineBytes)
|
|
149
|
+
throw catalogError('protocol');
|
|
150
|
+
const line = pending.subarray(0, newline);
|
|
151
|
+
pending = pending.subarray(newline + 1);
|
|
152
|
+
const text = line.toString('utf8').trim();
|
|
153
|
+
if (text.length === 0)
|
|
154
|
+
throw catalogError('protocol');
|
|
155
|
+
acceptMessage(JSON.parse(text));
|
|
156
|
+
}
|
|
157
|
+
if (pending.length > maxLineBytes)
|
|
158
|
+
throw catalogError('protocol');
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
fail(error instanceof SyntaxError ? catalogError('protocol') : error);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const onStdoutError = (error) => fail(error);
|
|
165
|
+
const onStderr = (chunk) => {
|
|
166
|
+
const text = Buffer.isBuffer(chunk) ? chunk.toString('utf8') : chunk;
|
|
167
|
+
stderr = `${stderr}${text}`;
|
|
168
|
+
while (Buffer.byteLength(stderr) > maxStderrBytes)
|
|
169
|
+
stderr = stderr.slice(Math.ceil(stderr.length / 8));
|
|
170
|
+
};
|
|
171
|
+
child.stdout.on('data', onStdout);
|
|
172
|
+
child.stdout.on('error', onStdoutError);
|
|
173
|
+
child.stderr.on('data', onStderr);
|
|
174
|
+
child.stderr.on('error', onStdoutError);
|
|
175
|
+
let operationTimer;
|
|
176
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
177
|
+
operationTimer = setTimeout(() => reject(catalogError('timeout')), timeoutMs);
|
|
178
|
+
operationTimer.unref?.();
|
|
179
|
+
});
|
|
180
|
+
let removeAbort = () => { };
|
|
181
|
+
const aborted = new Promise((_resolve, reject) => {
|
|
182
|
+
if (options.signal === undefined)
|
|
183
|
+
return;
|
|
184
|
+
const onAbort = () => reject(abortError(options.signal));
|
|
185
|
+
options.signal.addEventListener('abort', onAbort, { once: true });
|
|
186
|
+
removeAbort = () => options.signal?.removeEventListener('abort', onAbort);
|
|
187
|
+
});
|
|
188
|
+
const prematureClose = closePromise.then(result => {
|
|
189
|
+
throw result.code === 0 && result.signal === null ? catalogError('protocol') : processExitError(result);
|
|
190
|
+
});
|
|
191
|
+
send({
|
|
192
|
+
method: 'initialize',
|
|
193
|
+
id: 0,
|
|
194
|
+
params: {
|
|
195
|
+
clientInfo: {
|
|
196
|
+
name: 'dsh_enhanced',
|
|
197
|
+
title: 'DSH Enhanced',
|
|
198
|
+
version: '0.1.0',
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
try {
|
|
203
|
+
const catalog = await Promise.race([response, spawnError, prematureClose, timeout, aborted]);
|
|
204
|
+
child.stdin.end();
|
|
205
|
+
const result = closed ? closeResult : await waitForClose(child, closePromise, killGraceMs);
|
|
206
|
+
if (result.code !== 0 || result.signal !== null)
|
|
207
|
+
throw processExitError(result);
|
|
208
|
+
return catalog;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
try {
|
|
212
|
+
child.stdin.end();
|
|
213
|
+
}
|
|
214
|
+
catch { /* best-effort close */ }
|
|
215
|
+
if (!closed) {
|
|
216
|
+
child.kill('SIGINT');
|
|
217
|
+
if (!await closesWithin(closePromise, killGraceMs)) {
|
|
218
|
+
child.kill('SIGKILL');
|
|
219
|
+
await closesWithin(closePromise, killGraceMs);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
clearTimeout(operationTimer);
|
|
226
|
+
removeAbort();
|
|
227
|
+
child.stdout.off('data', onStdout);
|
|
228
|
+
child.stdout.off('error', onStdoutError);
|
|
229
|
+
child.stderr.off('data', onStderr);
|
|
230
|
+
child.stderr.off('error', onStdoutError);
|
|
231
|
+
if (stderr.trim().length > 0) {
|
|
232
|
+
try {
|
|
233
|
+
options.onDiagnostic?.(stderr.trim());
|
|
234
|
+
}
|
|
235
|
+
catch { /* diagnostics never affect discovery */ }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
async function waitForClose(child, closePromise, graceMs) {
|
|
240
|
+
const first = await closeWithin(closePromise, graceMs);
|
|
241
|
+
if (first !== undefined)
|
|
242
|
+
return first;
|
|
243
|
+
child.kill('SIGINT');
|
|
244
|
+
const afterInterrupt = await closeWithin(closePromise, graceMs);
|
|
245
|
+
if (afterInterrupt !== undefined)
|
|
246
|
+
return afterInterrupt;
|
|
247
|
+
child.kill('SIGKILL');
|
|
248
|
+
const afterKill = await closeWithin(closePromise, graceMs);
|
|
249
|
+
if (afterKill !== undefined)
|
|
250
|
+
return afterKill;
|
|
251
|
+
throw catalogError('process-exit');
|
|
252
|
+
}
|
|
253
|
+
async function closesWithin(closePromise, graceMs) {
|
|
254
|
+
return (await closeWithin(closePromise, graceMs)) !== undefined;
|
|
255
|
+
}
|
|
256
|
+
function closeWithin(closePromise, graceMs) {
|
|
257
|
+
return new Promise(resolve => {
|
|
258
|
+
let settled = false;
|
|
259
|
+
const timer = setTimeout(() => {
|
|
260
|
+
if (settled)
|
|
261
|
+
return;
|
|
262
|
+
settled = true;
|
|
263
|
+
resolve(undefined);
|
|
264
|
+
}, graceMs);
|
|
265
|
+
timer.unref?.();
|
|
266
|
+
void closePromise.then(result => {
|
|
267
|
+
if (settled)
|
|
268
|
+
return;
|
|
269
|
+
settled = true;
|
|
270
|
+
clearTimeout(timer);
|
|
271
|
+
resolve(result);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
function validateInitializeResult(value) {
|
|
276
|
+
const result = jsonObject(value);
|
|
277
|
+
if (result === undefined || typeof result.userAgent !== 'string' || result.userAgent.length === 0
|
|
278
|
+
|| typeof result.platformFamily !== 'string' || typeof result.platformOs !== 'string') {
|
|
279
|
+
throw catalogError('protocol');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
function validateCatalogPage(value) {
|
|
283
|
+
const result = jsonObject(value);
|
|
284
|
+
if (result === undefined || !Array.isArray(result.data)
|
|
285
|
+
|| (result.nextCursor !== null && typeof result.nextCursor !== 'string')) {
|
|
286
|
+
throw catalogError('protocol');
|
|
287
|
+
}
|
|
288
|
+
const models = [];
|
|
289
|
+
const defaultModels = [];
|
|
290
|
+
for (const item of result.data) {
|
|
291
|
+
const candidate = jsonObject(item);
|
|
292
|
+
if (candidate === undefined || typeof candidate.id !== 'string' || candidate.id.length === 0
|
|
293
|
+
|| typeof candidate.model !== 'string' || candidate.model.length === 0
|
|
294
|
+
|| typeof candidate.displayName !== 'string' || candidate.displayName.length === 0
|
|
295
|
+
|| candidate.hidden !== false || typeof candidate.isDefault !== 'boolean'
|
|
296
|
+
|| !Array.isArray(candidate.supportedReasoningEfforts)
|
|
297
|
+
|| !Array.isArray(candidate.inputModalities)
|
|
298
|
+
|| candidate.inputModalities.some(modality => typeof modality !== 'string' || modality.length === 0)) {
|
|
299
|
+
throw catalogError('protocol');
|
|
300
|
+
}
|
|
301
|
+
const efforts = candidate.supportedReasoningEfforts.map(rawEffort => {
|
|
302
|
+
const effort = jsonObject(rawEffort);
|
|
303
|
+
if (effort === undefined || typeof effort.reasoningEffort !== 'string' || effort.reasoningEffort.length === 0
|
|
304
|
+
|| (effort.description !== null && effort.description !== undefined && typeof effort.description !== 'string')) {
|
|
305
|
+
throw catalogError('protocol');
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
id: effort.reasoningEffort,
|
|
309
|
+
name: displayEffort(effort.reasoningEffort),
|
|
310
|
+
...(typeof effort.description === 'string' && effort.description.length > 0
|
|
311
|
+
? { description: effort.description }
|
|
312
|
+
: {}),
|
|
313
|
+
};
|
|
314
|
+
});
|
|
315
|
+
if (new Set(efforts.map(effort => effort.id)).size !== efforts.length
|
|
316
|
+
|| (candidate.defaultReasoningEffort !== null && candidate.defaultReasoningEffort !== undefined
|
|
317
|
+
&& (typeof candidate.defaultReasoningEffort !== 'string'
|
|
318
|
+
|| !efforts.some(effort => effort.id === candidate.defaultReasoningEffort)))) {
|
|
319
|
+
throw catalogError('protocol');
|
|
320
|
+
}
|
|
321
|
+
models.push({
|
|
322
|
+
id: candidate.model,
|
|
323
|
+
name: candidate.displayName,
|
|
324
|
+
...(typeof candidate.description === 'string' && candidate.description.length > 0
|
|
325
|
+
? { description: candidate.description }
|
|
326
|
+
: {}),
|
|
327
|
+
...(efforts.length === 0 ? {} : {
|
|
328
|
+
reasoning: {
|
|
329
|
+
efforts,
|
|
330
|
+
...(typeof candidate.defaultReasoningEffort === 'string'
|
|
331
|
+
? { defaultEffort: candidate.defaultReasoningEffort }
|
|
332
|
+
: {}),
|
|
333
|
+
},
|
|
334
|
+
}),
|
|
335
|
+
inputModalities: [...candidate.inputModalities],
|
|
336
|
+
});
|
|
337
|
+
if (candidate.isDefault)
|
|
338
|
+
defaultModels.push(candidate.model);
|
|
339
|
+
}
|
|
340
|
+
return { models, defaultModels, nextCursor: result.nextCursor };
|
|
341
|
+
}
|
|
342
|
+
function displayEffort(value) {
|
|
343
|
+
return value.split(/[-_]/).map(part => part.length === 0 ? part : `${part[0].toUpperCase()}${part.slice(1)}`).join(' ');
|
|
344
|
+
}
|
|
345
|
+
function jsonObject(value) {
|
|
346
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
347
|
+
? value
|
|
348
|
+
: undefined;
|
|
349
|
+
}
|
|
350
|
+
function positiveInteger(value, fallback) {
|
|
351
|
+
if (value === undefined)
|
|
352
|
+
return fallback;
|
|
353
|
+
if (!Number.isSafeInteger(value) || value <= 0)
|
|
354
|
+
throw catalogError('protocol');
|
|
355
|
+
return value;
|
|
356
|
+
}
|
|
357
|
+
function catalogError(cause) {
|
|
358
|
+
return new Error(`Codex model catalog ${cause}`, { cause });
|
|
359
|
+
}
|
|
360
|
+
function processExitError(result) {
|
|
361
|
+
return new Error(`Codex app-server exited before catalog completion (${result.code ?? 'null'}/${result.signal ?? 'none'})`, {
|
|
362
|
+
cause: 'process-exit',
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
function abortError(signal) {
|
|
366
|
+
return signal.reason instanceof Error ? signal.reason : new Error('Codex model catalog aborted', { cause: 'abort' });
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=codex-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-catalog.js","sourceRoot":"","sources":["../src/codex-catalog.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
2
|
+
import type { ProviderId } from './providers.js';
|
|
3
|
+
export interface ProviderConfig {
|
|
4
|
+
/** Register this local CLI as a selectable DSH provider. */
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
/** Executable name or absolute path. No shell parsing is performed. */
|
|
7
|
+
command: string;
|
|
8
|
+
/** Static aliases shown by DSH; every provider also merges its live CLI catalog. */
|
|
9
|
+
models: string[];
|
|
10
|
+
/** Maximum coding-agent turns when the CLI exposes that control. */
|
|
11
|
+
maxTurns: number;
|
|
12
|
+
}
|
|
13
|
+
export interface GrokProviderConfig extends ProviderConfig {
|
|
14
|
+
/** User attests that `grok inspect` shows session OAuth and no model API-key override. */
|
|
15
|
+
userVerifiedSubscription: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface CodingSubscriptionProviderConfig {
|
|
18
|
+
/** Working directory exposed to each coding CLI. */
|
|
19
|
+
cwd: string;
|
|
20
|
+
/** Whole invocation deadline. */
|
|
21
|
+
timeoutMs: number;
|
|
22
|
+
/** Deadline for a non-model authentication status probe. */
|
|
23
|
+
authProbeTimeoutMs: number;
|
|
24
|
+
/** Maximum stdout/stderr bytes captured from an authentication status probe. */
|
|
25
|
+
maxAuthProbeBytes: number;
|
|
26
|
+
/** Grace period between SIGINT and SIGKILL. */
|
|
27
|
+
killGraceMs: number;
|
|
28
|
+
/** Maximum UTF-8 bytes accepted in one stdout/stderr line. */
|
|
29
|
+
maxLineBytes: number;
|
|
30
|
+
/** Maximum UTF-8 bytes of assistant text accepted per invocation. */
|
|
31
|
+
maxOutputBytes: number;
|
|
32
|
+
/** Maximum UTF-8 bytes retained from stderr for a diagnostic. */
|
|
33
|
+
maxStderrBytes: number;
|
|
34
|
+
/** Maximum UTF-8 bytes in the serialized DSH request. */
|
|
35
|
+
maxPromptBytes: number;
|
|
36
|
+
/** Additional environment variable names inherited by the child process. */
|
|
37
|
+
extraEnvNames: string[];
|
|
38
|
+
/** Include a redacted tail of CLI stderr in host logs. */
|
|
39
|
+
logDiagnostics: boolean;
|
|
40
|
+
codex: ProviderConfig;
|
|
41
|
+
claude: ProviderConfig;
|
|
42
|
+
cursor: ProviderConfig;
|
|
43
|
+
grok: GrokProviderConfig;
|
|
44
|
+
}
|
|
45
|
+
export declare const Config: Schema<CodingSubscriptionProviderConfig>;
|
|
46
|
+
export declare function normalizeConfig(config?: CodingSubscriptionProviderConfig): CodingSubscriptionProviderConfig;
|
|
47
|
+
export declare function configForProvider(config: CodingSubscriptionProviderConfig, provider: ProviderId): ProviderConfig;
|
|
48
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAA;IACf,oFAAoF;IACpF,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,0FAA0F;IAC1F,wBAAwB,EAAE,OAAO,CAAA;CAClC;AAED,MAAM,WAAW,gCAAgC;IAC/C,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAA;IACX,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gFAAgF;IAChF,iBAAiB,EAAE,MAAM,CAAA;IACzB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,cAAc,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,0DAA0D;IAC1D,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,cAAc,CAAA;IACrB,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,kBAAkB,CAAA;CACzB;AAiCD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,gCAAgC,CAmBd,CAAA;AAE9C,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,gCAAgC,GAAG,gCAAgC,CAY3G;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gCAAgC,EAAE,QAAQ,EAAE,UAAU,GAAG,cAAc,CAEhH"}
|
package/lib/config.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
2
|
+
const modelId = Schema.string().min(1).pattern(/\S/);
|
|
3
|
+
const command = Schema.string().min(1).pattern(/\S/);
|
|
4
|
+
function providerSchema(defaultCommand, defaultEnabled = true) {
|
|
5
|
+
return Schema.object({
|
|
6
|
+
enabled: Schema.boolean().default(defaultEnabled),
|
|
7
|
+
command: command.default(defaultCommand),
|
|
8
|
+
models: Schema.array(modelId).min(1).default(['default']),
|
|
9
|
+
maxTurns: Schema.natural().min(1).max(100).default(1),
|
|
10
|
+
}).default({
|
|
11
|
+
enabled: defaultEnabled,
|
|
12
|
+
command: defaultCommand,
|
|
13
|
+
models: ['default'],
|
|
14
|
+
maxTurns: 1,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const grokProviderSchema = Schema.object({
|
|
18
|
+
enabled: Schema.boolean().default(false),
|
|
19
|
+
command: command.default('grok'),
|
|
20
|
+
models: Schema.array(modelId).min(1).default(['default']),
|
|
21
|
+
maxTurns: Schema.natural().min(1).max(100).default(1),
|
|
22
|
+
userVerifiedSubscription: Schema.boolean().default(false),
|
|
23
|
+
}).default({
|
|
24
|
+
enabled: false,
|
|
25
|
+
command: 'grok',
|
|
26
|
+
models: ['default'],
|
|
27
|
+
maxTurns: 1,
|
|
28
|
+
userVerifiedSubscription: false,
|
|
29
|
+
});
|
|
30
|
+
export const Config = Schema.object({
|
|
31
|
+
cwd: Schema.string().min(1).default('.'),
|
|
32
|
+
timeoutMs: Schema.natural().min(1_000).max(60 * 60_000).default(10 * 60_000),
|
|
33
|
+
authProbeTimeoutMs: Schema.natural().min(1_000).max(60_000).default(10_000),
|
|
34
|
+
maxAuthProbeBytes: Schema.natural().min(1_024).max(1024 * 1024).default(32 * 1024),
|
|
35
|
+
killGraceMs: Schema.natural().min(100).max(30_000).default(3_000),
|
|
36
|
+
maxLineBytes: Schema.natural().min(1_024).max(16 * 1024 * 1024).default(256 * 1024),
|
|
37
|
+
maxOutputBytes: Schema.natural().min(1_024).max(64 * 1024 * 1024).default(2 * 1024 * 1024),
|
|
38
|
+
maxStderrBytes: Schema.natural().min(256).max(4 * 1024 * 1024).default(32 * 1024),
|
|
39
|
+
maxPromptBytes: Schema.natural().min(1_024).max(64 * 1024 * 1024).default(128 * 1024),
|
|
40
|
+
extraEnvNames: Schema.array(Schema.string().pattern(/^[A-Za-z_][A-Za-z0-9_]*$/)).default([]),
|
|
41
|
+
logDiagnostics: Schema.boolean().default(false),
|
|
42
|
+
codex: providerSchema('codex'),
|
|
43
|
+
// Public third-party subscription delegation has an Anthropic policy caveat.
|
|
44
|
+
claude: providerSchema('claude', false),
|
|
45
|
+
cursor: providerSchema('cursor-agent'),
|
|
46
|
+
// Grok CLI config can override OAuth with a per-model API key, so opt in only
|
|
47
|
+
// after the local user verifies the effective model configuration.
|
|
48
|
+
grok: grokProviderSchema,
|
|
49
|
+
});
|
|
50
|
+
export function normalizeConfig(config) {
|
|
51
|
+
const normalized = Config(config);
|
|
52
|
+
for (const provider of ['codex', 'claude', 'cursor', 'grok']) {
|
|
53
|
+
const models = normalized[provider].models;
|
|
54
|
+
if (new Set(models).size !== models.length) {
|
|
55
|
+
throw new Error(`duplicate model id in ${provider}.models`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (normalized.grok.enabled && !normalized.grok.userVerifiedSubscription) {
|
|
59
|
+
throw new Error('grok.userVerifiedSubscription must be true after verifying session OAuth and model configuration');
|
|
60
|
+
}
|
|
61
|
+
return normalized;
|
|
62
|
+
}
|
|
63
|
+
export function configForProvider(config, provider) {
|
|
64
|
+
return config[provider];
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { CodingSubscriptionAdapter } from './adapter.js';
|
|
3
|
+
import { Config, type CodingSubscriptionProviderConfig } from './config.js';
|
|
4
|
+
export declare const name = "dsh-enhanced-coding-subscription-provider";
|
|
5
|
+
export declare const version = "0.1.0";
|
|
6
|
+
export declare const inject: string[];
|
|
7
|
+
export { CodingSubscriptionAdapter, Config };
|
|
8
|
+
export type { CodingSubscriptionProviderConfig };
|
|
9
|
+
export declare function apply(ctx: Context, input?: CodingSubscriptionProviderConfig): void;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAmC,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,MAAM,EAAmB,KAAK,gCAAgC,EAAE,MAAM,aAAa,CAAA;AAE5F,eAAO,MAAM,IAAI,8CAA8C,CAAA;AAC/D,eAAO,MAAM,OAAO,UAAU,CAAA;AAC9B,eAAO,MAAM,MAAM,UAAU,CAAA;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AAC5C,YAAY,EAAE,gCAAgC,EAAE,CAAA;AAEhD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,gCAAgC,GAAG,IAAI,CA8BlF"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CodingSubscriptionAdapter, enabledRoutes, redactDiagnostic } from './adapter.js';
|
|
2
|
+
import { Config, normalizeConfig } from './config.js';
|
|
3
|
+
export const name = 'dsh-enhanced-coding-subscription-provider';
|
|
4
|
+
export const version = '0.1.0';
|
|
5
|
+
export const inject = ['llm'];
|
|
6
|
+
export { CodingSubscriptionAdapter, Config };
|
|
7
|
+
export function apply(ctx, input) {
|
|
8
|
+
const config = normalizeConfig(input);
|
|
9
|
+
const routes = enabledRoutes(config);
|
|
10
|
+
if (routes.length === 0) {
|
|
11
|
+
ctx.logger.warn('dsh-enhanced-coding-subscription-provider: every provider is disabled');
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const adapter = new CodingSubscriptionAdapter(config, {
|
|
15
|
+
onDiagnostic(route, diagnostic) {
|
|
16
|
+
if (config.logDiagnostics) {
|
|
17
|
+
ctx.logger.warn(`${route} CLI diagnostic: ${redactDiagnostic(diagnostic)}`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
ctx.logger.warn(`${route} CLI wrote to stderr; content withheld (set logDiagnostics to inspect a redacted tail)`);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
onSettled(context) {
|
|
24
|
+
// Credential-free lifecycle facts only; useful for diagnosing which phase a route settled in.
|
|
25
|
+
const detail = `phase=${context.phase} submission=${context.promptSubmissionState}`
|
|
26
|
+
+ ` textForwarded=${context.assistantTextForwarded} teardown=${context.teardownState}`
|
|
27
|
+
+ (context.exitCode !== undefined ? ` exit=${context.exitCode ?? 'null'}` : '')
|
|
28
|
+
+ (context.signal != null ? ` signal=${context.signal}` : '')
|
|
29
|
+
+ (context.metrics !== undefined ? ` metrics=${JSON.stringify(context.metrics)}` : '');
|
|
30
|
+
if (context.outcome === 'ok')
|
|
31
|
+
ctx.logger.debug(`${context.route} settled ok (${detail})`);
|
|
32
|
+
else
|
|
33
|
+
ctx.logger.info(`${context.route} settled ${context.outcome} (${detail})`);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
ctx.llm.registerAdapter(routes, adapter);
|
|
37
|
+
ctx.effect(() => () => adapter.shutdown(), 'dsh-enhanced-coding-subscription-provider.processes');
|
|
38
|
+
ctx.logger.info(`Coding subscription providers registered: ${routes.join(', ')}`);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAyC,MAAM,aAAa,CAAA;AAE5F,MAAM,CAAC,MAAM,IAAI,GAAG,2CAA2C,CAAA;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAA;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AAG5C,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,KAAwC;IAC1E,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAA;QACxF,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC,MAAM,EAAE;QACpD,YAAY,CAAC,KAAK,EAAE,UAAU;YAC5B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,oBAAoB,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YAC7E,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,wFAAwF,CAAC,CAAA;YACnH,CAAC;QACH,CAAC;QACD,SAAS,CAAC,OAAO;YACf,8FAA8F;YAC9F,MAAM,MAAM,GAAG,SAAS,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,qBAAqB,EAAE;kBAC/E,kBAAkB,OAAO,CAAC,sBAAsB,aAAa,OAAO,CAAC,aAAa,EAAE;kBACpF,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;kBAC7E,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;kBAC3D,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACxF,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;gBAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,gBAAgB,MAAM,GAAG,CAAC,CAAA;;gBACpF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,YAAY,OAAO,CAAC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAA;QACjF,CAAC;KACF,CAAC,CAAA;IACF,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,qDAAqD,CAAC,CAAA;IACjG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACnF,CAAC"}
|