saros-proxy 0.10.1 → 0.11.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/README.md +187 -29
- package/dist/cli/daemon.d.ts +38 -6
- package/dist/cli/daemon.js +524 -109
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/dsh-config.js +34 -9
- package/dist/cli/dsh-config.js.map +1 -1
- package/dist/cli/help.js +3 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/key-state.d.ts +21 -0
- package/dist/cli/key-state.js +57 -0
- package/dist/cli/key-state.js.map +1 -0
- package/dist/cli/keys.d.ts +28 -0
- package/dist/cli/keys.js +185 -0
- package/dist/cli/keys.js.map +1 -0
- package/dist/cli/opencode-config.js +3 -3
- package/dist/cli/opencode-config.js.map +1 -1
- package/dist/cli/overview.js +6 -1
- package/dist/cli/overview.js.map +1 -1
- package/dist/cli/secret.d.ts +31 -0
- package/dist/cli/secret.js +89 -0
- package/dist/cli/secret.js.map +1 -0
- package/dist/cli/usage.js +7 -0
- package/dist/cli/usage.js.map +1 -1
- package/dist/config.d.ts +15 -1
- package/dist/config.js +98 -25
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +2 -1
- package/dist/constants.js +2 -160
- package/dist/constants.js.map +1 -1
- package/dist/debug-buffer.d.ts +58 -0
- package/dist/debug-buffer.js +42 -0
- package/dist/debug-buffer.js.map +1 -0
- package/dist/index.js +30 -4
- package/dist/index.js.map +1 -1
- package/dist/log-redact.d.ts +18 -0
- package/dist/log-redact.js +41 -0
- package/dist/log-redact.js.map +1 -0
- package/dist/logger.d.ts +6 -0
- package/dist/logger.js +30 -0
- package/dist/logger.js.map +1 -1
- package/dist/models-catalog.d.ts +20 -0
- package/dist/models-catalog.js +55 -0
- package/dist/models-catalog.js.map +1 -0
- package/dist/models-fetcher.d.ts +2 -2
- package/dist/models-fetcher.js +4 -4
- package/dist/models-fetcher.js.map +1 -1
- package/dist/models-sync.d.ts +1 -1
- package/dist/models-sync.js +3 -3
- package/dist/models-sync.js.map +1 -1
- package/dist/providers/infer.d.ts +11 -0
- package/dist/providers/infer.js.map +1 -1
- package/dist/proxy-logic.d.ts +74 -3
- package/dist/proxy-logic.js +111 -9
- package/dist/proxy-logic.js.map +1 -1
- package/dist/proxy.d.ts +33 -1
- package/dist/proxy.js +351 -49
- package/dist/proxy.js.map +1 -1
- package/dist/secrets/boot.d.ts +33 -0
- package/dist/secrets/boot.js +65 -0
- package/dist/secrets/boot.js.map +1 -0
- package/dist/secrets/envelope.d.ts +44 -0
- package/dist/secrets/envelope.js +132 -0
- package/dist/secrets/envelope.js.map +1 -0
- package/dist/secrets/source.d.ts +130 -0
- package/dist/secrets/source.js +332 -0
- package/dist/secrets/source.js.map +1 -0
- package/dist/token-usage.js +6 -3
- package/dist/token-usage.js.map +1 -1
- package/dist/validation.d.ts +3 -3
- package/dist/validation.js +3 -3
- package/dist/validation.js.map +1 -1
- package/models.json +1440 -0
- package/package.json +2 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* secret.ts — `saros-proxy secret set|status`.
|
|
3
|
+
*
|
|
4
|
+
* `set` stores the envelope passphrase through the platform's own credential
|
|
5
|
+
* CLI, so the user never edits a file and the value is never echoed or logged.
|
|
6
|
+
* `status` reports which source would win and whether the store is populated;
|
|
7
|
+
* it prints no secret material.
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { resolveConfigPath } from '../config.js';
|
|
11
|
+
import { configHasEnvelopeKeys } from '../secrets/boot.js';
|
|
12
|
+
import { getSecretStatus, isInteractive, promptHidden, readStdinLine, storePassphrase, } from '../secrets/source.js';
|
|
13
|
+
function storeOptions(options) {
|
|
14
|
+
return {
|
|
15
|
+
env: options.env,
|
|
16
|
+
platform: options.platform,
|
|
17
|
+
username: options.username,
|
|
18
|
+
run: options.run,
|
|
19
|
+
dpapiPath: options.dpapiPath,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** Prompt twice on a TTY; read one line when stdin is piped. */
|
|
23
|
+
export async function readNewPassphrase(options = {}) {
|
|
24
|
+
const input = options.input ?? process.stdin;
|
|
25
|
+
const output = options.output ?? process.stderr;
|
|
26
|
+
if (!isInteractive(input)) {
|
|
27
|
+
const line = await readStdinLine(input);
|
|
28
|
+
return line === null
|
|
29
|
+
? { ok: false, reason: 'no passphrase on stdin (pipe one line or run in a terminal)' }
|
|
30
|
+
: { ok: true, value: line };
|
|
31
|
+
}
|
|
32
|
+
const first = await promptHidden({ input, output, question: 'New passphrase: ' });
|
|
33
|
+
if (first === null)
|
|
34
|
+
return { ok: false, reason: 'no passphrase entered' };
|
|
35
|
+
const second = await promptHidden({ input, output, question: 'Confirm passphrase: ' });
|
|
36
|
+
if (second !== first)
|
|
37
|
+
return { ok: false, reason: 'passphrases do not match' };
|
|
38
|
+
return { ok: true, value: first };
|
|
39
|
+
}
|
|
40
|
+
/** Below this length the passphrase is the weak link, not scrypt. */
|
|
41
|
+
export const MIN_PASSPHRASE_LENGTH = 12;
|
|
42
|
+
/** Store the passphrase in the OS store. Returns the process exit code. */
|
|
43
|
+
export async function runSecretSet(options = {}) {
|
|
44
|
+
const resolved = await readNewPassphrase(options);
|
|
45
|
+
if (!resolved.ok) {
|
|
46
|
+
console.error(chalk.red(`✗ ${resolved.reason}`));
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
if (resolved.value.length < MIN_PASSPHRASE_LENGTH) {
|
|
50
|
+
console.error(chalk.yellow(`⚠ Passphrase is shorter than ${MIN_PASSPHRASE_LENGTH} characters. ` +
|
|
51
|
+
'scrypt makes offline guessing expensive, but passphrase entropy is what protects the keys.'));
|
|
52
|
+
}
|
|
53
|
+
const stored = storePassphrase(resolved.value, storeOptions(options));
|
|
54
|
+
if (!stored.ok) {
|
|
55
|
+
console.error(chalk.red(`✗ Could not store the passphrase: ${stored.reason}`));
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
console.log(chalk.green(`✓ Passphrase stored in ${stored.backend}.`));
|
|
59
|
+
console.log(chalk.dim('Resolution order: SAROS_PASSPHRASE > OS store > TTY prompt (foreground serve).'));
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
/** Which source would be used, without printing any value. Exit code 0. */
|
|
63
|
+
export async function runSecretStatus(options = {}) {
|
|
64
|
+
const status = getSecretStatus({ ...storeOptions(options), input: options.input ?? process.stdin });
|
|
65
|
+
const configPath = options.configPath ?? resolveConfigPath();
|
|
66
|
+
const encryptedConfig = configHasEnvelopeKeys(configPath);
|
|
67
|
+
console.log(chalk.bold('Passphrase sources') + chalk.dim(' (first match wins)'));
|
|
68
|
+
console.log(` env SAROS_PASSPHRASE: ${status.env ? chalk.green('set') : 'not set'}`);
|
|
69
|
+
console.log(` store ${status.store.backend}: ` +
|
|
70
|
+
(status.store.populated
|
|
71
|
+
? chalk.green('populated')
|
|
72
|
+
: chalk.yellow(`not populated — ${status.store.reason}`)));
|
|
73
|
+
console.log(` tty interactive prompt: ` +
|
|
74
|
+
(status.tty ? 'available (foreground serve only)' : 'not a TTY'));
|
|
75
|
+
console.log(`Config: ${encryptedConfig ? 'contains enc:v1 envelopes' : 'no enc:v1 envelopes'} ` +
|
|
76
|
+
chalk.dim(`(${configPath})`));
|
|
77
|
+
console.log(`Effective source: ${status.effective ?? 'none'}`);
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
export async function runSecretCommand(args, options = {}) {
|
|
81
|
+
const subcommand = args[0];
|
|
82
|
+
if (subcommand === 'set')
|
|
83
|
+
return runSecretSet(options);
|
|
84
|
+
if (subcommand === 'status')
|
|
85
|
+
return runSecretStatus(options);
|
|
86
|
+
console.error('Usage: saros-proxy secret <set|status>');
|
|
87
|
+
return 1;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/cli/secret.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/usage.js
CHANGED
|
@@ -13,6 +13,7 @@ import { fetchKeyUsage } from '../usage-client.js';
|
|
|
13
13
|
import { getProvider, inferProvider } from '../providers/index.js';
|
|
14
14
|
import { getModelStatsPath } from '../model-stats.js';
|
|
15
15
|
import { getTokenUsagePath } from '../token-usage.js';
|
|
16
|
+
import { SecretSourceError } from '../secrets/source.js';
|
|
16
17
|
/**
|
|
17
18
|
* Read the token totals the proxy persisted (the CLI is a separate process,
|
|
18
19
|
* so this file is the only shared state). Corrupt/missing files read as empty.
|
|
@@ -121,6 +122,12 @@ export async function runUsageCommand() {
|
|
|
121
122
|
config = loadConfig();
|
|
122
123
|
}
|
|
123
124
|
catch (err) {
|
|
125
|
+
if (err instanceof SecretSourceError) {
|
|
126
|
+
console.log(chalk.yellow('· Encrypted keys need a passphrase; showing local token totals only.'));
|
|
127
|
+
console.log(chalk.dim(' Set SAROS_PASSPHRASE, run `saros-proxy secret set`, or run `saros-proxy serve` in a terminal.'));
|
|
128
|
+
printModelStats();
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
124
131
|
console.error('Failed to load config:', err instanceof Error ? err.message : String(err));
|
|
125
132
|
return 1;
|
|
126
133
|
}
|
package/dist/cli/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAYzD;;;GAGG;AACH,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAmB,CAAC;QACzE,MAAM,IAAI,GAAkC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC;gBAAE,SAAS;YAClF,IAAI,CAAC,KAAK,CAAC,GAAG;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,CAAC;gBACrC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;gBAC7C,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;gBACnC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;aAC1B,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,MAAM,IAAI,SAAS;QAChC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QACvC,CAAC,CAAC,MAAM,IAAI,KAAK;YACf,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,4EAA4E;AAC5E,SAAS,iBAAiB,CAAC,KAAgC;IACzD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,OAAO,WAAW,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;UACnD,KAAK,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO;UACjG,IAAI,KAAK,CAAC,QAAQ,YAAY,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACnD,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,QAA4B;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,MAAM,OAAO,GAAG,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,MAAM,KAAK,GAAG,CAAC;IACtC,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAItB;IACC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC;SAC/E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IACnC,OAAO,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAmB,CAAC;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;aAChD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;aAC7D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;cAC1B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3E,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,sEAAsE,CACvE,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,iGAAiG,CAClG,CACF,CAAC;YACF,eAAe,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,wBAAwB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjD,MAAM,UAAU,GAAG,QAAQ,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAClC,4EAA4E;QAC5E,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9F,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;YAC5C,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,EAAE;gBAC1E,mEAAmE;gBACnE,qEAAqE;kBACnE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC,CAAC,oDAAoD,CAAC,CACxG,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,EAAE;kBACrE,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAC5E,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,wBAAwB,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,QAAQ,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;cACjH,aAAa,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;cAChD,cAAc,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;cAClD,KAAK,CAAC,GAAG,CAAC,sBAAsB,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;cACxD,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7C,CAAC;IACJ,CAAC;IAED,eAAe,EAAE,CAAC;IAElB,OAAO,QAAQ,GAAG,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -17,6 +17,14 @@ export interface ProxyConfig {
|
|
|
17
17
|
requestTimeoutMs: number;
|
|
18
18
|
allowedOrigins: string[];
|
|
19
19
|
}
|
|
20
|
+
export interface LoadConfigOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Passphrase already resolved by a foreground `serve` (which may have used
|
|
23
|
+
* the TTY prompt). When absent, loading uses SAROS_PASSPHRASE, then the OS
|
|
24
|
+
* store; it never prompts, so reporting commands cannot hang.
|
|
25
|
+
*/
|
|
26
|
+
passphrase?: string;
|
|
27
|
+
}
|
|
20
28
|
/**
|
|
21
29
|
* Return the OS-native user config directory path for saros.
|
|
22
30
|
*
|
|
@@ -43,4 +51,10 @@ export declare function validateConfig(config: Partial<ProxyConfig>): ProxyConfi
|
|
|
43
51
|
* 3. Environment variables
|
|
44
52
|
* 4. Hardcoded defaults
|
|
45
53
|
*/
|
|
46
|
-
export declare function loadConfig(configPath?: string): ProxyConfig;
|
|
54
|
+
export declare function loadConfig(configPath?: string, options?: LoadConfigOptions): ProxyConfig;
|
|
55
|
+
/**
|
|
56
|
+
* The path `loadConfig` would read, honouring `--config` and falling back to
|
|
57
|
+
* the OS config directory (or ./config.yaml when that is all that exists).
|
|
58
|
+
* Exported so `keys encrypt` rewrites the same file the proxy reads.
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveConfigPath(explicitPath?: string): string;
|
package/dist/config.js
CHANGED
|
@@ -6,7 +6,10 @@ import { homedir } from 'node:os';
|
|
|
6
6
|
import { join, dirname } from 'node:path';
|
|
7
7
|
import { parse as parseYaml } from 'yaml';
|
|
8
8
|
import { logger, maskKey } from './logger.js';
|
|
9
|
+
import { redactErrorMessage } from './log-redact.js';
|
|
9
10
|
import { decryptKey, isEncryptedKey } from './key-encryption.js';
|
|
11
|
+
import { decryptValue, isEnvelope } from './secrets/envelope.js';
|
|
12
|
+
import { NO_SOURCE_MESSAGE, SecretSourceError, decryptFailureMessage, readEnvPassphrase, readStorePassphrase, } from './secrets/source.js';
|
|
10
13
|
import { DEFAULT_PORT, DEFAULT_HOST, DEFAULT_UPSTREAM_URL, DEFAULT_CIRCUIT_BREAKER_COOLDOWN_MS, DEFAULT_REQUEST_TIMEOUT_MS, } from './constants.js';
|
|
11
14
|
import { isValidPort, isValidHttpsUrl, isValidApiKey } from './validation.js';
|
|
12
15
|
import { inferProvider } from './providers/infer.js';
|
|
@@ -56,6 +59,21 @@ function parseCliArgs() {
|
|
|
56
59
|
}
|
|
57
60
|
return args;
|
|
58
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Normalize one key entry: resolve its provider and drop a malformed `enabled`.
|
|
64
|
+
* A non-boolean `enabled` is a config typo, not a retirement order — warning and
|
|
65
|
+
* keeping the key enabled beats silently taking a credential out of rotation.
|
|
66
|
+
*/
|
|
67
|
+
function normalizeKeyEntry(entry) {
|
|
68
|
+
const provider = inferProvider(entry);
|
|
69
|
+
if (entry.enabled === undefined)
|
|
70
|
+
return { ...entry, provider };
|
|
71
|
+
if (typeof entry.enabled !== 'boolean') {
|
|
72
|
+
logger.warn('Key "%s": "enabled" must be true or false — ignoring it', entry.label);
|
|
73
|
+
return { ...entry, enabled: undefined, provider };
|
|
74
|
+
}
|
|
75
|
+
return { ...entry, provider };
|
|
76
|
+
}
|
|
59
77
|
/**
|
|
60
78
|
* Validate and normalize a partial config object.
|
|
61
79
|
* Logs warnings for invalid values that fall back to defaults.
|
|
@@ -137,7 +155,7 @@ export function validateConfig(config) {
|
|
|
137
155
|
return {
|
|
138
156
|
port,
|
|
139
157
|
host,
|
|
140
|
-
keys: validKeys.map(
|
|
158
|
+
keys: validKeys.map(normalizeKeyEntry),
|
|
141
159
|
circuitBreakerThreshold,
|
|
142
160
|
circuitBreakerCooldownMs,
|
|
143
161
|
upstreamBaseUrl,
|
|
@@ -155,21 +173,17 @@ export function validateConfig(config) {
|
|
|
155
173
|
* 3. Environment variables
|
|
156
174
|
* 4. Hardcoded defaults
|
|
157
175
|
*/
|
|
158
|
-
export function loadConfig(configPath) {
|
|
176
|
+
export function loadConfig(configPath, options = {}) {
|
|
159
177
|
const cliArgs = parseCliArgs();
|
|
160
178
|
const config = getBaseConfig();
|
|
161
179
|
applyEnvConfig(config);
|
|
162
|
-
const yamlPath =
|
|
180
|
+
const yamlPath = resolveConfigPath(configPath);
|
|
163
181
|
const yaml = loadYamlOverrides(yamlPath);
|
|
164
|
-
if (yaml)
|
|
182
|
+
if (yaml) {
|
|
165
183
|
applyYamlConfig(config, yaml);
|
|
166
|
-
|
|
167
|
-
if (encryptionKey) {
|
|
168
|
-
decryptConfigSecrets(config, encryptionKey);
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
assertNoEncryptedSecrets(config);
|
|
184
|
+
warnPlaintextKeys(yaml, yamlPath);
|
|
172
185
|
}
|
|
186
|
+
resolveEncryptedKeys(config, options.passphrase);
|
|
173
187
|
applyCliOverrides(config, cliArgs);
|
|
174
188
|
return validateConfig(config);
|
|
175
189
|
}
|
|
@@ -225,6 +239,14 @@ function resolveYamlPath(cliConfigArg, explicitPath) {
|
|
|
225
239
|
}
|
|
226
240
|
return defaultPath;
|
|
227
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* The path `loadConfig` would read, honouring `--config` and falling back to
|
|
244
|
+
* the OS config directory (or ./config.yaml when that is all that exists).
|
|
245
|
+
* Exported so `keys encrypt` rewrites the same file the proxy reads.
|
|
246
|
+
*/
|
|
247
|
+
export function resolveConfigPath(explicitPath) {
|
|
248
|
+
return resolveYamlPath(parseCliArgs().config, explicitPath);
|
|
249
|
+
}
|
|
228
250
|
function loadYamlOverrides(yamlPath) {
|
|
229
251
|
if (!existsSync(yamlPath)) {
|
|
230
252
|
logger.info('No config file found at %s, using env/defaults', yamlPath);
|
|
@@ -237,7 +259,8 @@ function loadYamlOverrides(yamlPath) {
|
|
|
237
259
|
return yaml;
|
|
238
260
|
}
|
|
239
261
|
catch (err) {
|
|
240
|
-
|
|
262
|
+
// YAMLParseError.message embeds the offending line — possibly a key.
|
|
263
|
+
logger.error('Failed to parse config file %s: %s', yamlPath, redactErrorMessage(err));
|
|
241
264
|
return null;
|
|
242
265
|
}
|
|
243
266
|
}
|
|
@@ -261,26 +284,76 @@ function applyYamlConfig(config, yaml) {
|
|
|
261
284
|
if (yaml.keys && yaml.keys.length > 0)
|
|
262
285
|
config.keys = yaml.keys;
|
|
263
286
|
}
|
|
264
|
-
|
|
265
|
-
|
|
287
|
+
/**
|
|
288
|
+
* Warn once at load time when the YAML file still holds plaintext credentials.
|
|
289
|
+
* Env-provided keys (`OPENCODE_GO_KEYS`) are plaintext by design and are not
|
|
290
|
+
* part of this warning.
|
|
291
|
+
*/
|
|
292
|
+
function warnPlaintextKeys(yaml, yamlPath) {
|
|
293
|
+
if (!Array.isArray(yaml.keys))
|
|
294
|
+
return;
|
|
295
|
+
const hasPlaintext = yaml.keys.some((entry) => typeof entry?.key === 'string' && !isEnvelope(entry.key) && !isEncryptedKey(entry.key));
|
|
296
|
+
if (!hasPlaintext)
|
|
297
|
+
return;
|
|
298
|
+
logger.warn({ evt: 'security.plaintext-keys' }, 'API keys are stored in plaintext in %s — run `saros-proxy keys encrypt` to encrypt them', yamlPath);
|
|
299
|
+
}
|
|
300
|
+
/** Plaintext entries must not be able to claim `encrypted: true` in YAML. */
|
|
301
|
+
function withoutEncryptedFlag(entry) {
|
|
302
|
+
const copy = { ...entry };
|
|
303
|
+
delete copy.encrypted;
|
|
304
|
+
return copy;
|
|
266
305
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
306
|
+
/** Resolve every `enc:` entry before validation; a failure aborts boot. */
|
|
307
|
+
function resolveEncryptedKeys(config, explicitPassphrase) {
|
|
308
|
+
const hasEnvelopes = config.keys.some((key) => isEnvelope(key.key));
|
|
309
|
+
const passphrase = hasEnvelopes ? resolveEnvelopePassphrase(explicitPassphrase) : '';
|
|
310
|
+
config.keys = config.keys.map((entry) => {
|
|
311
|
+
if (isEnvelope(entry.key))
|
|
312
|
+
return decryptEnvelopeEntry(entry, passphrase);
|
|
313
|
+
if (typeof entry.key === 'string' && isEncryptedKey(entry.key)) {
|
|
314
|
+
return { ...entry, key: decryptLegacyEntry(entry), encrypted: true };
|
|
315
|
+
}
|
|
316
|
+
return withoutEncryptedFlag(entry);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Envelope passphrase: the value already resolved by `serve`, then the env
|
|
321
|
+
* var, then the OS store. Deliberately never prompts — reporting commands and
|
|
322
|
+
* the daemon child must not block on a terminal that is not there.
|
|
323
|
+
*/
|
|
324
|
+
function resolveEnvelopePassphrase(explicitPassphrase) {
|
|
325
|
+
if (explicitPassphrase !== undefined && explicitPassphrase.length > 0)
|
|
326
|
+
return explicitPassphrase;
|
|
327
|
+
const env = readEnvPassphrase();
|
|
328
|
+
if (env.ok)
|
|
329
|
+
return env.value;
|
|
330
|
+
const store = readStorePassphrase();
|
|
331
|
+
if (store.ok)
|
|
332
|
+
return store.value;
|
|
333
|
+
throw new SecretSourceError(`${NO_SOURCE_MESSAGE}\nStore: ${store.reason}`);
|
|
334
|
+
}
|
|
335
|
+
function decryptEnvelopeEntry(entry, passphrase) {
|
|
336
|
+
const result = decryptValue(entry.key, passphrase, entry.label);
|
|
337
|
+
if (!result.ok) {
|
|
338
|
+
throw new SecretSourceError(decryptFailureMessage(entry.label, result.error.message));
|
|
339
|
+
}
|
|
340
|
+
return { ...entry, key: result.value, encrypted: true };
|
|
341
|
+
}
|
|
342
|
+
/** `enc:scrypt:` values predate the v1 envelope; keep them readable. */
|
|
343
|
+
function decryptLegacyEntry(entry) {
|
|
344
|
+
const legacyKey = process.env.OPENCODE_GO_ENCRYPTION_KEY;
|
|
345
|
+
if (!legacyKey) {
|
|
346
|
+
throw new Error('Found encrypted API key(s) but OPENCODE_GO_ENCRYPTION_KEY environment variable is not set');
|
|
347
|
+
}
|
|
270
348
|
try {
|
|
271
|
-
|
|
349
|
+
const plaintext = decryptKey(entry.key, legacyKey);
|
|
350
|
+
logger.warn({ evt: 'security.legacy-encryption' }, 'Key "%s" uses legacy enc:scrypt encryption with OPENCODE_GO_ENCRYPTION_KEY — replace it with plaintext and run `saros-proxy keys encrypt` to migrate', entry.label);
|
|
351
|
+
return plaintext;
|
|
272
352
|
}
|
|
273
|
-
catch
|
|
274
|
-
logger.error('Failed to decrypt key "%s": %s', entry.label, err instanceof Error ? err.message : String(err));
|
|
353
|
+
catch {
|
|
275
354
|
throw new Error(`Failed to decrypt API key "${entry.label}" — check OPENCODE_GO_ENCRYPTION_KEY`);
|
|
276
355
|
}
|
|
277
356
|
}
|
|
278
|
-
function assertNoEncryptedSecrets(config) {
|
|
279
|
-
const encryptedKeys = config.keys.filter((k) => isEncryptedKey(k.key));
|
|
280
|
-
if (encryptedKeys.length > 0) {
|
|
281
|
-
throw new Error(`Found ${encryptedKeys.length} encrypted API key(s) but OPENCODE_GO_ENCRYPTION_KEY environment variable is not set`);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
357
|
function applyCliOverrides(config, cliArgs) {
|
|
285
358
|
if (cliArgs.port) {
|
|
286
359
|
config.port = Number.parseInt(cliArgs.port, 10);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ export declare const RATE_LIMIT_WINDOW_MS = 60000;
|
|
|
21
21
|
export declare const RATE_LIMIT_MAX = 100;
|
|
22
22
|
export declare const FORCE_SHUTDOWN_TIMEOUT_MS = 5000;
|
|
23
23
|
export declare const MAX_STREAMING_BUFFER = 10000;
|
|
24
|
+
/** `GET /debug/recent` keeps this many proxied requests in memory. */
|
|
25
|
+
export declare const RECENT_REQUESTS_CAPACITY = 200;
|
|
24
26
|
export declare const MODELS_FETCH_TIMEOUT_MS = 5000;
|
|
25
27
|
export declare const MODELS_WARM_BUFFER_MS = 60000;
|
|
26
28
|
export declare const USAGE_REFRESH_TTL_MS = 60000;
|
|
@@ -39,4 +41,3 @@ export declare const PROBE_LIVENESS_PROMPT = "Reply with the word 'pong' and not
|
|
|
39
41
|
export declare const PROBE_REASONING_PROMPT = "What is 2+2? Think step by step.";
|
|
40
42
|
export declare const PROBE_TOOL_CALLING_PROMPT = "What is the weather in Paris?";
|
|
41
43
|
export declare const DAEMON_SYNC_TIMEOUT_MS = 30000;
|
|
42
|
-
export declare const OPENCODE_MODELS: Record<string, unknown>;
|
package/dist/constants.js
CHANGED
|
@@ -23,6 +23,8 @@ export const RATE_LIMIT_WINDOW_MS = 60_000;
|
|
|
23
23
|
export const RATE_LIMIT_MAX = 100;
|
|
24
24
|
export const FORCE_SHUTDOWN_TIMEOUT_MS = 5_000;
|
|
25
25
|
export const MAX_STREAMING_BUFFER = 10_000;
|
|
26
|
+
/** `GET /debug/recent` keeps this many proxied requests in memory. */
|
|
27
|
+
export const RECENT_REQUESTS_CAPACITY = 200;
|
|
26
28
|
export const MODELS_FETCH_TIMEOUT_MS = 5_000;
|
|
27
29
|
export const MODELS_WARM_BUFFER_MS = 60_000;
|
|
28
30
|
// Per-key usage tracking (upstream usage API + weighted rotation)
|
|
@@ -51,164 +53,4 @@ export const PROBE_REASONING_PROMPT = 'What is 2+2? Think step by step.';
|
|
|
51
53
|
export const PROBE_TOOL_CALLING_PROMPT = 'What is the weather in Paris?';
|
|
52
54
|
// Daemon auto-sync timeout (how long to wait for upstream sync before exiting)
|
|
53
55
|
export const DAEMON_SYNC_TIMEOUT_MS = 30_000;
|
|
54
|
-
// OpenCode client model definitions for proxy provider configuration
|
|
55
|
-
// Source: https://opencode.ai/zen/go/v1/models (18 models as of 2026-06-06)
|
|
56
|
-
export const OPENCODE_MODELS = {
|
|
57
|
-
// GLM series (Z.AI/Zhipu - 202K context, 32K output, text-only)
|
|
58
|
-
// Blocklisted in OpenCode — no auto variants; reasoning via interleaved reasoning_content only
|
|
59
|
-
'glm-5': {
|
|
60
|
-
id: 'glm-5',
|
|
61
|
-
name: 'GLM-5',
|
|
62
|
-
tool_call: true,
|
|
63
|
-
reasoning: true,
|
|
64
|
-
limit: { context: 202752, output: 32768 },
|
|
65
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
66
|
-
},
|
|
67
|
-
'glm-5.1': {
|
|
68
|
-
id: 'glm-5.1',
|
|
69
|
-
name: 'GLM-5.1',
|
|
70
|
-
tool_call: true,
|
|
71
|
-
reasoning: true,
|
|
72
|
-
limit: { context: 202752, output: 32768 },
|
|
73
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
74
|
-
},
|
|
75
|
-
'glm-5.2': {
|
|
76
|
-
id: 'glm-5.2',
|
|
77
|
-
name: 'GLM-5.2',
|
|
78
|
-
tool_call: true,
|
|
79
|
-
reasoning: true,
|
|
80
|
-
limit: { context: 1000000, output: 131072 },
|
|
81
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
82
|
-
},
|
|
83
|
-
// Kimi series (Moonshot - 262K context, 65K output, multimodal)
|
|
84
|
-
// Blocklisted in OpenCode — no reasoning_effort support via opencode-go
|
|
85
|
-
'kimi-k2.5': {
|
|
86
|
-
id: 'kimi-k2.5',
|
|
87
|
-
name: 'Kimi K2.5',
|
|
88
|
-
tool_call: true,
|
|
89
|
-
reasoning: true,
|
|
90
|
-
limit: { context: 262144, output: 65536 },
|
|
91
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
92
|
-
},
|
|
93
|
-
'kimi-k2.6': {
|
|
94
|
-
id: 'kimi-k2.6',
|
|
95
|
-
name: 'Kimi K2.6',
|
|
96
|
-
tool_call: true,
|
|
97
|
-
reasoning: true,
|
|
98
|
-
limit: { context: 262144, output: 65536 },
|
|
99
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
100
|
-
},
|
|
101
|
-
// DeepSeek V4 series (1M context, 384K output, text-only)
|
|
102
|
-
// NOT blocklisted - OpenCode auto-generates low/medium/high/max variants
|
|
103
|
-
'deepseek-v4-pro': {
|
|
104
|
-
id: 'deepseek-v4-pro',
|
|
105
|
-
name: 'DeepSeek V4 Pro',
|
|
106
|
-
tool_call: true,
|
|
107
|
-
reasoning: true,
|
|
108
|
-
limit: { context: 1000000, output: 384000 },
|
|
109
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
110
|
-
},
|
|
111
|
-
'deepseek-v4-flash': {
|
|
112
|
-
id: 'deepseek-v4-flash',
|
|
113
|
-
name: 'DeepSeek V4 Flash',
|
|
114
|
-
tool_call: true,
|
|
115
|
-
reasoning: true,
|
|
116
|
-
limit: { context: 1000000, output: 384000 },
|
|
117
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
118
|
-
},
|
|
119
|
-
// MiMo series (Xiaomi - 1M context except V2 Omni 262K)
|
|
120
|
-
// NOT blocklisted - OpenCode auto-generates low/medium/high variants (reasoning_effort supported)
|
|
121
|
-
'mimo-v2.5': {
|
|
122
|
-
id: 'mimo-v2.5',
|
|
123
|
-
name: 'MiMo V2.5',
|
|
124
|
-
tool_call: true,
|
|
125
|
-
reasoning: true,
|
|
126
|
-
limit: { context: 1000000, output: 128000 },
|
|
127
|
-
modalities: { input: ['text', 'image', 'audio', 'video'], output: ['text'] },
|
|
128
|
-
},
|
|
129
|
-
'mimo-v2.5-pro': {
|
|
130
|
-
id: 'mimo-v2.5-pro',
|
|
131
|
-
name: 'MiMo V2.5 Pro',
|
|
132
|
-
tool_call: true,
|
|
133
|
-
reasoning: true,
|
|
134
|
-
limit: { context: 1048576, output: 128000 },
|
|
135
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
136
|
-
},
|
|
137
|
-
'mimo-v2-pro': {
|
|
138
|
-
id: 'mimo-v2-pro',
|
|
139
|
-
name: 'MiMo V2 Pro',
|
|
140
|
-
tool_call: true,
|
|
141
|
-
reasoning: true,
|
|
142
|
-
limit: { context: 1048576, output: 128000 },
|
|
143
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
144
|
-
},
|
|
145
|
-
'mimo-v2-omni': {
|
|
146
|
-
id: 'mimo-v2-omni',
|
|
147
|
-
name: 'MiMo V2 Omni',
|
|
148
|
-
tool_call: true,
|
|
149
|
-
reasoning: true,
|
|
150
|
-
limit: { context: 262144, output: 128000 },
|
|
151
|
-
modalities: { input: ['text', 'image', 'audio', 'pdf'], output: ['text'] },
|
|
152
|
-
},
|
|
153
|
-
// MiniMax series (Anthropic-compatible - 512K context for M3, 204K for M2.x)
|
|
154
|
-
// Blocklisted in OpenCode — no auto variants; uses Anthropic thinking blocks, not reasoning_effort
|
|
155
|
-
'minimax-m3': {
|
|
156
|
-
id: 'minimax-m3',
|
|
157
|
-
name: 'MiniMax M3',
|
|
158
|
-
tool_call: true,
|
|
159
|
-
reasoning: true,
|
|
160
|
-
limit: { context: 512000, output: 131072 },
|
|
161
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
162
|
-
},
|
|
163
|
-
'minimax-m2.7': {
|
|
164
|
-
id: 'minimax-m2.7',
|
|
165
|
-
name: 'MiniMax M2.7',
|
|
166
|
-
tool_call: true,
|
|
167
|
-
reasoning: true,
|
|
168
|
-
limit: { context: 204800, output: 131072 },
|
|
169
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
170
|
-
},
|
|
171
|
-
'minimax-m2.5': {
|
|
172
|
-
id: 'minimax-m2.5',
|
|
173
|
-
name: 'MiniMax M2.5',
|
|
174
|
-
tool_call: true,
|
|
175
|
-
reasoning: true,
|
|
176
|
-
limit: { context: 204800, output: 65536 },
|
|
177
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
178
|
-
},
|
|
179
|
-
// Qwen series (Alibaba - Anthropic-compatible, 1M context except 3.5 Plus 262K)
|
|
180
|
-
// Blocklisted in OpenCode — no auto variants; uses Anthropic thinking blocks, not reasoning_effort
|
|
181
|
-
'qwen3.7-max': {
|
|
182
|
-
id: 'qwen3.7-max',
|
|
183
|
-
name: 'Qwen 3.7 Max',
|
|
184
|
-
tool_call: true,
|
|
185
|
-
reasoning: true,
|
|
186
|
-
limit: { context: 1000000, output: 65536 },
|
|
187
|
-
modalities: { input: ['text'], output: ['text'] },
|
|
188
|
-
},
|
|
189
|
-
'qwen3.7-plus': {
|
|
190
|
-
id: 'qwen3.7-plus',
|
|
191
|
-
name: 'Qwen 3.7 Plus',
|
|
192
|
-
tool_call: true,
|
|
193
|
-
reasoning: true,
|
|
194
|
-
limit: { context: 1000000, output: 65536 },
|
|
195
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
196
|
-
},
|
|
197
|
-
'qwen3.6-plus': {
|
|
198
|
-
id: 'qwen3.6-plus',
|
|
199
|
-
name: 'Qwen 3.6 Plus',
|
|
200
|
-
tool_call: true,
|
|
201
|
-
reasoning: true,
|
|
202
|
-
limit: { context: 1000000, output: 65536 },
|
|
203
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
204
|
-
},
|
|
205
|
-
'qwen3.5-plus': {
|
|
206
|
-
id: 'qwen3.5-plus',
|
|
207
|
-
name: 'Qwen 3.5 Plus',
|
|
208
|
-
tool_call: true,
|
|
209
|
-
reasoning: true,
|
|
210
|
-
limit: { context: 262144, output: 65536 },
|
|
211
|
-
modalities: { input: ['text', 'image', 'video'], output: ['text'] },
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
56
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AACpC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,0CAA0C;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAC/C,YAAY,EAAE,MAAM,EAAE,mBAAmB;IACzC,aAAa,EAAE,mBAAmB;CAC1B,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,8CAA8C,CAAC;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,MAAM,CAAC,MAAM,mCAAmC,GAAG,MAAM,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;AACpC,oFAAoF;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,sEAAsE;AACtE,oEAAoE;AACpE,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,4BAA4B,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAClC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,CAAC,0CAA0C;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAE7C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gCAAgC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAC5D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO;IAC/C,YAAY,EAAE,MAAM,EAAE,mBAAmB;IACzC,aAAa,EAAE,mBAAmB;CAC1B,CAAC;AAEX,kCAAkC;AAClC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,8CAA8C,CAAC;AACpF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC"}
|