saros-proxy 0.10.2 → 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.
Files changed (59) hide show
  1. package/README.md +175 -29
  2. package/dist/cli/daemon.d.ts +38 -6
  3. package/dist/cli/daemon.js +524 -109
  4. package/dist/cli/daemon.js.map +1 -1
  5. package/dist/cli/dsh-config.js +34 -9
  6. package/dist/cli/dsh-config.js.map +1 -1
  7. package/dist/cli/help.js +3 -0
  8. package/dist/cli/help.js.map +1 -1
  9. package/dist/cli/key-state.d.ts +21 -0
  10. package/dist/cli/key-state.js +57 -0
  11. package/dist/cli/key-state.js.map +1 -0
  12. package/dist/cli/keys.d.ts +28 -0
  13. package/dist/cli/keys.js +185 -0
  14. package/dist/cli/keys.js.map +1 -0
  15. package/dist/cli/overview.js +6 -1
  16. package/dist/cli/overview.js.map +1 -1
  17. package/dist/cli/secret.d.ts +31 -0
  18. package/dist/cli/secret.js +89 -0
  19. package/dist/cli/secret.js.map +1 -0
  20. package/dist/cli/usage.js +7 -0
  21. package/dist/cli/usage.js.map +1 -1
  22. package/dist/config.d.ts +15 -1
  23. package/dist/config.js +98 -25
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.d.ts +2 -0
  26. package/dist/constants.js +2 -0
  27. package/dist/constants.js.map +1 -1
  28. package/dist/debug-buffer.d.ts +58 -0
  29. package/dist/debug-buffer.js +42 -0
  30. package/dist/debug-buffer.js.map +1 -0
  31. package/dist/index.js +30 -4
  32. package/dist/index.js.map +1 -1
  33. package/dist/log-redact.d.ts +18 -0
  34. package/dist/log-redact.js +41 -0
  35. package/dist/log-redact.js.map +1 -0
  36. package/dist/logger.d.ts +6 -0
  37. package/dist/logger.js +30 -0
  38. package/dist/logger.js.map +1 -1
  39. package/dist/providers/infer.d.ts +11 -0
  40. package/dist/providers/infer.js.map +1 -1
  41. package/dist/proxy-logic.d.ts +74 -3
  42. package/dist/proxy-logic.js +111 -9
  43. package/dist/proxy-logic.js.map +1 -1
  44. package/dist/proxy.d.ts +33 -1
  45. package/dist/proxy.js +328 -45
  46. package/dist/proxy.js.map +1 -1
  47. package/dist/secrets/boot.d.ts +33 -0
  48. package/dist/secrets/boot.js +65 -0
  49. package/dist/secrets/boot.js.map +1 -0
  50. package/dist/secrets/envelope.d.ts +44 -0
  51. package/dist/secrets/envelope.js +132 -0
  52. package/dist/secrets/envelope.js.map +1 -0
  53. package/dist/secrets/source.d.ts +130 -0
  54. package/dist/secrets/source.js +332 -0
  55. package/dist/secrets/source.js.map +1 -0
  56. package/dist/validation.d.ts +3 -3
  57. package/dist/validation.js +3 -3
  58. package/dist/validation.js.map +1 -1
  59. package/package.json +1 -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"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"}
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((k) => ({ ...k, provider: inferProvider(k) })),
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 = resolveYamlPath(cliArgs.config, configPath);
180
+ const yamlPath = resolveConfigPath(configPath);
163
181
  const yaml = loadYamlOverrides(yamlPath);
164
- if (yaml)
182
+ if (yaml) {
165
183
  applyYamlConfig(config, yaml);
166
- const encryptionKey = process.env.OPENCODE_GO_ENCRYPTION_KEY;
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
- logger.error({ err }, 'Failed to parse config file %s', yamlPath);
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
- function decryptConfigSecrets(config, encryptionKey) {
265
- config.keys = config.keys.map((k) => decryptApiKeyIfNeeded(k, encryptionKey));
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
- function decryptApiKeyIfNeeded(entry, encryptionKey) {
268
- if (!isEncryptedKey(entry.key))
269
- return entry;
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
- return { ...entry, key: decryptKey(entry.key, encryptionKey) };
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 (err) {
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);
@@ -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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"}
@@ -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;
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)
@@ -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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * debug-buffer.ts — In-memory ring buffer of the last proxied requests.
3
+ *
4
+ * Pure state: no Hono, no I/O. The proxy app owns one instance and pushes
5
+ * from the same place it emits `evt:"request.complete"`, so `GET /debug/recent`
6
+ * and the access log cannot drift.
7
+ *
8
+ * Never store credentials, headers or bodies — only the public key label.
9
+ */
10
+ /** One proxied request, exactly as it appears in the access log. */
11
+ export interface RecentRequestEntry {
12
+ requestId: string;
13
+ /**
14
+ * ISO timestamp of when the downstream response was produced (for a stream,
15
+ * its headers — not the end of the stream). Same instant as the
16
+ * `request.complete` line.
17
+ */
18
+ at: string;
19
+ method: string;
20
+ path: string;
21
+ /** Raw model id from the request body (`model@provider` keeps the suffix). */
22
+ model: string | null;
23
+ /** Provider of the key that served (or last tried) the request. */
24
+ provider: string | null;
25
+ /**
26
+ * Public key label — never the credential. The serving key, or the last key
27
+ * tried when the proxy answers 502 or a 503 raised after keys were tried;
28
+ * null only when no key was ever selected.
29
+ */
30
+ keyLabel: string | null;
31
+ status: number;
32
+ durationMs: number;
33
+ stream: boolean;
34
+ /** One-based attempt number. */
35
+ attempt: number;
36
+ }
37
+ export interface RecentRequestsSnapshot {
38
+ capacity: number;
39
+ count: number;
40
+ /** Oldest first (append order). */
41
+ entries: RecentRequestEntry[];
42
+ }
43
+ export interface RecentRequestBuffer {
44
+ readonly capacity: number;
45
+ push(entry: RecentRequestEntry): void;
46
+ snapshot(): RecentRequestsSnapshot;
47
+ }
48
+ /**
49
+ * `SAROS_DEBUG_BUFFER=0` disables the buffer (endpoint answers 404 and nothing
50
+ * is stored). Any other value, or unset, keeps it enabled.
51
+ */
52
+ export declare function isDebugBufferEnabled(env?: NodeJS.ProcessEnv): boolean;
53
+ /**
54
+ * Fixed-capacity buffer: once full, each push evicts the oldest entry.
55
+ * 200 entries of a dozen small fields is a few tens of KB — not worth a
56
+ * head-index ring; `shift()` on a 200-element array is noise.
57
+ */
58
+ export declare function createRecentRequestBuffer(capacity?: number): RecentRequestBuffer;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * debug-buffer.ts — In-memory ring buffer of the last proxied requests.
3
+ *
4
+ * Pure state: no Hono, no I/O. The proxy app owns one instance and pushes
5
+ * from the same place it emits `evt:"request.complete"`, so `GET /debug/recent`
6
+ * and the access log cannot drift.
7
+ *
8
+ * Never store credentials, headers or bodies — only the public key label.
9
+ */
10
+ import { RECENT_REQUESTS_CAPACITY } from './constants.js';
11
+ /**
12
+ * `SAROS_DEBUG_BUFFER=0` disables the buffer (endpoint answers 404 and nothing
13
+ * is stored). Any other value, or unset, keeps it enabled.
14
+ */
15
+ export function isDebugBufferEnabled(env = process.env) {
16
+ return env.SAROS_DEBUG_BUFFER !== '0';
17
+ }
18
+ /**
19
+ * Fixed-capacity buffer: once full, each push evicts the oldest entry.
20
+ * 200 entries of a dozen small fields is a few tens of KB — not worth a
21
+ * head-index ring; `shift()` on a 200-element array is noise.
22
+ */
23
+ export function createRecentRequestBuffer(capacity = RECENT_REQUESTS_CAPACITY) {
24
+ const entries = [];
25
+ return {
26
+ capacity,
27
+ push(entry) {
28
+ entries.push(entry);
29
+ if (entries.length > capacity)
30
+ entries.shift();
31
+ },
32
+ snapshot() {
33
+ return {
34
+ capacity,
35
+ count: entries.length,
36
+ // Detached copies: a caller must not mutate the buffer.
37
+ entries: entries.map((entry) => ({ ...entry })),
38
+ };
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=debug-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-buffer.js","sourceRoot":"","sources":["../src/debug-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AA2C1D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IACvE,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAQ,GAAW,wBAAwB;IAE3C,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,OAAO;QACL,QAAQ;QACR,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC;QACD,QAAQ;YACN,OAAO;gBACL,QAAQ;gBACR,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,wDAAwD;gBACxD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;aAChD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.js CHANGED
@@ -11,11 +11,12 @@
11
11
  import { serve } from '@hono/node-server';
12
12
  import { dirname, resolve } from 'node:path';
13
13
  import { fileURLToPath } from 'node:url';
14
- import { loadConfig } from './config.js';
14
+ import { loadConfig, resolveConfigPath } from './config.js';
15
15
  import { createProxyApp } from './proxy.js';
16
16
  import { flushModelStats } from './model-stats.js';
17
17
  import { flushTokenUsage } from './token-usage.js';
18
18
  import { logger, maskKey } from './logger.js';
19
+ import { redactSecrets } from './log-redact.js';
19
20
  import { FORCE_SHUTDOWN_TIMEOUT_MS } from './constants.js';
20
21
  import { daemonStart, daemonStop, daemonStatus, daemonRestart } from './cli/daemon.js';
21
22
  import { runUsageCommand } from './cli/usage.js';
@@ -26,6 +27,11 @@ import { getModelsFromOpencodeConfig } from './models-sync.js';
26
27
  import { readHarnessSettings, parseHarnessCommandArgs, updateHarnessSettings, syncModelsInAllHarnesses, } from './cli/harness-sync.js';
27
28
  import { probeModel } from './model-probe.js';
28
29
  import { getCachedProbe, setCachedProbe } from './probe-cache.js';
30
+ import { loadModelsCatalog } from './models-catalog.js';
31
+ import { getVersion } from './cli/overview.js';
32
+ import { runSecretCommand } from './cli/secret.js';
33
+ import { runKeysCommand } from './cli/keys.js';
34
+ import { buildBootLog, prepareBootPassphrase } from './secrets/boot.js';
29
35
  import chalk from 'chalk';
30
36
  import { printHelp } from './cli/help.js';
31
37
  import { readFileSync } from 'node:fs';
@@ -73,7 +79,7 @@ if (subcommand === 'start') {
73
79
  // daemonStart owns its own exit path via setTimeout
74
80
  }
75
81
  else if (subcommand === 'stop') {
76
- daemonStop();
82
+ await daemonStop();
77
83
  }
78
84
  else if (subcommand === 'status') {
79
85
  daemonStatus();
@@ -277,22 +283,42 @@ else if (subcommand === 'probe') {
277
283
  else if (subcommand === 'usage') {
278
284
  process.exit(await runUsageCommand());
279
285
  }
286
+ else if (subcommand === 'secret') {
287
+ process.exit(await runSecretCommand(process.argv.slice(3)));
288
+ }
289
+ else if (subcommand === 'keys') {
290
+ process.exit(await runKeysCommand(process.argv.slice(3)));
291
+ }
280
292
  else if (subcommand === 'serve') {
281
293
  // -----------------------------------------------------------------------
282
294
  // --port/--config are picked up by loadConfig()'s CLI-arg parsing.
283
295
  // -----------------------------------------------------------------------
284
296
  let config;
285
297
  try {
286
- config = loadConfig();
298
+ const passphrase = await prepareBootPassphrase();
299
+ config = loadConfig(undefined, { passphrase });
287
300
  }
288
301
  catch (err) {
289
- logger.error({ err }, 'Failed to load configuration');
302
+ // Keep the multi-line guidance (env/store/TTY options) but mask any
303
+ // credential-shaped substring before it reaches a terminal or the log.
304
+ const message = redactSecrets(err instanceof Error ? err.message : String(err));
305
+ console.error(chalk.red(`✗ ${message}`));
306
+ logger.error({ evt: 'boot.failed' }, 'Failed to load configuration: %s', message);
290
307
  process.exit(1);
291
308
  }
292
309
  logger.info('Loaded %d API key(s):', config.keys.length);
293
310
  for (const k of config.keys) {
294
311
  logger.info(' - %s: %s', k.label, maskKey(k.key));
295
312
  }
313
+ // One structured boot line, so daemon.log answers "did it start, from which
314
+ // config, with which keys?" without any traffic. Never carries the key.
315
+ logger.info(buildBootLog(config, resolveConfigPath(), {
316
+ version: getVersion(),
317
+ node: process.version,
318
+ platform: process.platform,
319
+ bundledModels: Object.keys(loadModelsCatalog()).length,
320
+ logLevel: process.env.LOG_LEVEL ?? 'info',
321
+ }), 'saros-proxy %s starting on %s:%d', getVersion(), config.host, config.port);
296
322
  // -----------------------------------------------------------------------
297
323
  // Security startup banner
298
324
  // -----------------------------------------------------------------------