saros-proxy 0.7.3 → 0.9.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 (78) hide show
  1. package/README.md +98 -47
  2. package/dist/cli/autostart.js.map +1 -1
  3. package/dist/cli/daemon.d.ts +31 -4
  4. package/dist/cli/daemon.js +124 -22
  5. package/dist/cli/daemon.js.map +1 -1
  6. package/dist/cli/dsh-config.d.ts +32 -0
  7. package/dist/cli/dsh-config.js +122 -0
  8. package/dist/cli/dsh-config.js.map +1 -0
  9. package/dist/cli/harness-models.d.ts +26 -2
  10. package/dist/cli/harness-models.js +192 -2
  11. package/dist/cli/harness-models.js.map +1 -1
  12. package/dist/cli/harness-sync.d.ts +27 -10
  13. package/dist/cli/harness-sync.js +70 -16
  14. package/dist/cli/harness-sync.js.map +1 -1
  15. package/dist/cli/help.js +4 -2
  16. package/dist/cli/help.js.map +1 -1
  17. package/dist/cli/omp-config.js +22 -5
  18. package/dist/cli/omp-config.js.map +1 -1
  19. package/dist/cli/opencode-config.js +22 -15
  20. package/dist/cli/opencode-config.js.map +1 -1
  21. package/dist/cli/overview.d.ts +10 -0
  22. package/dist/cli/overview.js +61 -0
  23. package/dist/cli/overview.js.map +1 -0
  24. package/dist/cli/pi-config.js +21 -5
  25. package/dist/cli/pi-config.js.map +1 -1
  26. package/dist/cli/setup.d.ts +6 -10
  27. package/dist/cli/setup.js +107 -233
  28. package/dist/cli/setup.js.map +1 -1
  29. package/dist/cli/ui.d.ts +0 -1
  30. package/dist/cli/ui.js +0 -16
  31. package/dist/cli/ui.js.map +1 -1
  32. package/dist/cli/update-check.js.map +1 -1
  33. package/dist/cli/usage.d.ts +12 -0
  34. package/dist/cli/usage.js +116 -0
  35. package/dist/cli/usage.js.map +1 -0
  36. package/dist/config.d.ts +13 -17
  37. package/dist/config.js +29 -78
  38. package/dist/config.js.map +1 -1
  39. package/dist/constants.d.ts +7 -6
  40. package/dist/constants.js +10 -5
  41. package/dist/constants.js.map +1 -1
  42. package/dist/index.d.ts +4 -4
  43. package/dist/index.js +34 -34
  44. package/dist/index.js.map +1 -1
  45. package/dist/model-stats.d.ts +20 -0
  46. package/dist/model-stats.js +135 -0
  47. package/dist/model-stats.js.map +1 -0
  48. package/dist/models-sync.js +10 -4
  49. package/dist/models-sync.js.map +1 -1
  50. package/dist/probe-cache.js.map +1 -1
  51. package/dist/providers/commandcode.d.ts +17 -0
  52. package/dist/providers/commandcode.js +232 -0
  53. package/dist/providers/commandcode.js.map +1 -0
  54. package/dist/providers/index.d.ts +43 -0
  55. package/dist/providers/index.js +75 -0
  56. package/dist/providers/index.js.map +1 -0
  57. package/dist/providers/infer.d.ts +23 -0
  58. package/dist/providers/infer.js +13 -0
  59. package/dist/providers/infer.js.map +1 -0
  60. package/dist/providers/opencode-go.d.ts +4 -0
  61. package/dist/providers/opencode-go.js +179 -0
  62. package/dist/providers/opencode-go.js.map +1 -0
  63. package/dist/providers/types.d.ts +118 -0
  64. package/dist/providers/types.js +10 -0
  65. package/dist/providers/types.js.map +1 -0
  66. package/dist/proxy-logic.d.ts +46 -22
  67. package/dist/proxy-logic.js +146 -106
  68. package/dist/proxy-logic.js.map +1 -1
  69. package/dist/proxy.d.ts +20 -2
  70. package/dist/proxy.js +231 -57
  71. package/dist/proxy.js.map +1 -1
  72. package/dist/usage-client.d.ts +41 -0
  73. package/dist/usage-client.js +124 -0
  74. package/dist/usage-client.js.map +1 -0
  75. package/dist/validation.d.ts +5 -5
  76. package/dist/validation.js +7 -9
  77. package/dist/validation.js.map +1 -1
  78. package/package.json +75 -77
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![Node.js Version](https://img.shields.io/badge/node-%3E%3D%2022.0.0-brightgreen.svg)](https://nodejs.org/)
7
7
 
8
- Saros — like the eclipse cycle, this proxy predicts exhaustion and rotates accounts before they run out. Built for the OpenCode-Go API.
8
+ Saros — like the eclipse cycle, this proxy predicts exhaustion and rotates accounts before they run out. Built for the OpenCode-Go API, now multi-provider.
9
9
 
10
- Manage multiple OpenCode-Go API keys behind a single endpoint. When one key gets rate-limited, revoked, or returns server errors, the proxy automatically fails over to the next healthy key — zero downtime.
10
+ Manage multiple API keys behind a single endpoint — OpenCode-Go **and** CommandCode keys can live in the same pool. When one key gets rate-limited, revoked, or returns server errors, the proxy automatically fails over to the next healthy key — zero downtime.
11
11
 
12
12
  ---
13
13
 
@@ -34,6 +34,8 @@ Manage multiple OpenCode-Go API keys behind a single endpoint. When one key gets
34
34
 
35
35
  ## Features
36
36
 
37
+ - **Multi-provider keys** — Mix OpenCode-Go (`sk-…`) and CommandCode (`user_…` / `sk-…`) keys in one pool.
38
+ - **Paste-a-key setup** — Drop any text containing keys into the setup wizard; Saros extracts them and identifies the provider by pinging each provider's API (smoke test).
37
39
  - **Multi-key rotation** — Round-robin across all your API keys.
38
40
  - **Auto failover** — Retry failed requests with the next healthy key.
39
41
  - **Circuit breaker** — Disable flaky keys after a configurable threshold, then lazily re-enable them after cooldown.
@@ -89,41 +91,29 @@ Manage multiple OpenCode-Go API keys behind a single endpoint. When one key gets
89
91
 
90
92
  ### How Request Distribution Works
91
93
 
92
- Here's how Saros picks which API key to use — it runs on two levels:
94
+ Here's how Saros picks which API key to use:
93
95
 
94
- #### Layer 1: Round-Robin (always on)
96
+ #### Usage-Weighted Rotation
95
97
 
96
- Every new request cycles to the next key in order:
98
+ Saros polls the upstream usage API for each key (5h / weekly / monthly windows)
99
+ and weights rotation by **remaining** quota. If key X is 30% used and key Y is
100
+ 70% used, 10 requests are distributed 7 → X and 3 → Y — proportional balancing,
101
+ not hard cutoffs, so neither key absorbs the full load when the other runs low.
97
102
 
98
- ```
99
- Request 1 → Key A
100
- Request 2 → Key B
101
- Request 3 → Key C
102
- Request 4 → Key A (wraps around)
103
- ```
104
-
105
- Even distribution by default. Got 2 accounts? Odd requests go to account 1, even to account 2. Simple.
106
-
107
- #### Layer 2: Usage-Based Gating (optional)
103
+ - Refreshed in the background every 60s (stale data keeps working).
104
+ - Without usage data, falls back to even round-robin.
108
105
 
109
- If you enable dashboard scraping, Saros checks each account's quota before picking a key:
106
+ #### Circuit Breaker
110
107
 
111
- - Usage **≥ threshold** (default 70%) → that key gets skipped
112
- - **All** keys over threshold → falls back to the lowest-usage key
113
- - No usage data available → pure round-robin, no change
114
-
115
- | Scenario | Behavior |
116
- |---|---|
117
- | Scraping off | Pure round-robin across all keys |
118
- | Scraping on + data available | Round-robin, skipping over-quota accounts |
119
- | Scraping on + no data | Falls back to pure round-robin |
108
+ Keys that return auth/quota errors (`401`, quota `4xx/5xx`) enter a cooldown
109
+ and are lazily re-enabled after it expires. Timeouts and connection errors do
110
+ **not** disable keys — they are shared-upstream failures, so Saros keeps
111
+ cycling instead of locking up with "all keys unavailable".
120
112
 
121
113
  #### Concurrent Request Safety
122
114
 
123
115
  Saros tracks which keys are currently in use. A key handling a streaming request won't get assigned another one until it finishes. No double-booking.
124
116
 
125
- ---
126
-
127
117
  ## Installation
128
118
 
129
119
  ### Prompt Install(for the lazy ones)
@@ -235,10 +225,11 @@ npx saros-proxy setup
235
225
 
236
226
  The wizard will:
237
227
  1. Ask for your proxy port (default: 3000)
238
- 2. Ask for your API keys (name + key)
239
- 3. Generate `config.yaml` automatically
240
- 4. Run a smoke test to verify everything works
241
- 5. Configure opencode.json with provider settings and model definitions
228
+ 2. Offer a **paste-a-key mode**: drop any text containing your keys (a `.env` dump, chat message, notes file) — Saros extracts every key and identifies its provider with a live smoke test, showing the detected provider and plan
229
+ 3. Ask for your API keys manually if you prefer (typed input also auto-detects `user_` CommandCode tokens)
230
+ 4. Generate `config.yaml` automatically
231
+ 5. Run a smoke test to verify everything works
232
+ 6. Configure opencode.json with provider settings and model definitions
242
233
 
243
234
  Want to run manually instead? Skip the wizard and just create a `config.yaml`:
244
235
 
@@ -251,6 +242,8 @@ keys:
251
242
  key: sk-your-primary-key-here-12345678
252
243
  - label: secondary
253
244
  key: sk-your-secondary-key-here-87654321
245
+ - label: commandcode
246
+ key: user_your-commandcode-token-here
254
247
  circuitBreakerThreshold: 3
255
248
  circuitBreakerCooldownMs: 60000
256
249
  requestTimeoutMs: 30000
@@ -299,23 +292,61 @@ Every option can be set via YAML (`config.yaml`), environment variables, or CLI
299
292
  | `circuitBreakerCooldownMs` | — | `CIRCUIT_BREAKER_COOLDOWN_MS` | `60000` | Cooldown before re-enabling (1000–3600000) |
300
293
  | `requestTimeoutMs` | — | `REQUEST_TIMEOUT_MS` | `30000` | Upstream timeout (1000–300000) |
301
294
  | `allowedOrigins` | — | — | `["http://localhost:*", "http://127.0.0.1:*"]` | CORS origins (`[]` = allow all) |
302
- | `keys` | — | `OPENCODE_GO_KEYS` | — | Array of `{label, key}` |
295
+ | `keys` | — | `OPENCODE_GO_KEYS` | — | Array of `{label, key, provider?}` |
296
+ | `upstreams` | — | — | provider defaults | Per-provider upstream URL overrides (HTTPS only) |
303
297
  | `config` | `--config` | — | `config.yaml` | Path to YAML config |
304
298
 
305
299
  ### API Key Format
306
300
 
307
- Keys must start with `sk-` and be at least 20 characters.
301
+ Saros accepts keys from multiple providers. A key must be at least 20 characters and match one of these formats:
302
+
303
+ | Prefix | Provider | Notes |
304
+ |---|---|---|
305
+ | `sk-…` | OpenCode-Go or CommandCode | `sk-` is shared by both providers; Saros infers OpenCode-Go unless an explicit `provider` is set |
306
+ | `user_…` | CommandCode | Always detected as CommandCode |
308
307
 
309
308
  **YAML:**
310
309
  ```yaml
311
310
  keys:
312
311
  - label: my-account
313
- key: sk-your-key-here...
312
+ key: sk-your-key-here... # opencode-go (default inference)
313
+ - label: cc-account
314
+ key: user_your-token-here... # commandcode (inferred from prefix)
315
+ - label: cc-console-key
316
+ key: sk-your-console-key-here... # ambiguous prefix → set provider explicitly
317
+ provider: commandcode
318
+ ```
319
+
320
+ The `provider` field is optional — it wins over prefix inference and is required only when a CommandCode `sk-` console key must be distinguished from an OpenCode-Go key. When keys are encrypted at rest (prefix hidden), the provider from setup time is persisted alongside.
321
+
322
+ **Per-provider upstream override (optional):**
323
+
324
+ ```yaml
325
+ upstreams:
326
+ commandcode: https://api.commandcode.ai # default
327
+ opencode-go: https://opencode.ai # default
314
328
  ```
315
329
 
316
330
  **Environment variable:**
317
331
  ```bash
318
- OPENCODE_GO_KEYS="account1:sk-xxx,account2:sk-yyy"
332
+ OPENCODE_GO_KEYS="account1:sk-xxx,cc:user_yyy"
333
+ ```
334
+
335
+ #### How multi-provider routing works
336
+
337
+ - Clients always speak the canonical OpenCode-Go shapes (`/zen/go/v1/...` or the `/v1/...` alias).
338
+ - When a request is served by a CommandCode key, Saros remaps the route to CommandCode's OpenAI-compatible surface (`/provider/v1/...`) and injects the provider's identity headers — transparent to the client.
339
+ - Models uniquely named by a provider (e.g. `claude-*` or vendor-prefixed ids on CommandCode) are routed to a key of that provider first; other providers remain as fallback.
340
+ - Synced harness configs may list provider-specific models as `model@commandcode`; the suffix selects the provider and is stripped before forwarding.
341
+ - The `/health` endpoint reports per-provider key counts under `providers`.
342
+ - Usage-based weighted rotation applies to providers with a queryable usage API (OpenCode-Go). CommandCode keys participate in rotation without usage data.
343
+
344
+ #### Smoke test (key identification)
345
+
346
+ `identifyKey` verifies a key by pinging each candidate provider with a cheap, read-only request (no token spend): OpenCode-Go `GET /zen/go/v1/usage`, CommandCode `GET /alpha/billing/subscriptions` (which also reports the subscription plan). `200` = valid, `401/403` = rejected, network error = inconclusive. The setup wizard uses this to label pasted keys; you can run it yourself:
347
+
348
+ ```bash
349
+ CC_KEY=user_your-token npx tsx scripts/live-identify-check.ts
319
350
  ```
320
351
 
321
352
  ### API Key Encryption
@@ -391,6 +422,9 @@ npx tsx src/index.ts --config /etc/saros/config.yaml
391
422
  The proxy ships with a built-in daemon. Once installed globally (`npm install -g saros-proxy`):
392
423
 
393
424
  ```bash
425
+ # Show the overview (running state, harnesses, API keys, config path)
426
+ saros-proxy
427
+
394
428
  # Start the daemon (background)
395
429
  saros-proxy start --port 3000
396
430
 
@@ -400,12 +434,13 @@ saros-proxy status
400
434
  # Stop it
401
435
  saros-proxy stop
402
436
 
403
- # Sync bundled models to all enabled harnesses
404
- saros-proxy sync-models
405
-
406
- # Set which harnesses get model sync (omp|ohmypi, pi, oc|opencode)
437
+ # Add harnesses to the model-sync selection (omp|ohmypi, pi, oc|opencode)
407
438
  saros-proxy configharness omp pi oc
408
439
 
440
+ # Remove a harness, or disable sync entirely
441
+ saros-proxy configharness --remove pi
442
+ saros-proxy configharness --clear
443
+
409
444
  # List the current harness selection
410
445
  saros-proxy configharness
411
446
 
@@ -415,6 +450,9 @@ saros-proxy probe [model-id]
415
450
  # Probe all models
416
451
  saros-proxy probe
417
452
 
453
+ # Show per-key quota usage and most-used models
454
+ saros-proxy usage
455
+
418
456
  # Install autostart (Windows: VBS script or Registry)
419
457
  saros-proxy autostart install [--port <port>] [--method vbs|registry|auto]
420
458
 
@@ -435,11 +473,12 @@ Saros keeps your harness configs in sync with the upstream API. Which harnesses
435
473
  # List which harnesses are enabled for model sync
436
474
  saros-proxy configharness
437
475
 
438
- # Enable sync for oh-my-pi, pi, and OpenCode (replaces the selection)
476
+ # Add oh-my-pi, pi, and OpenCode to the sync selection (additive)
439
477
  saros-proxy configharness omp pi oc
440
478
 
441
- # Sync bundled models to all enabled harnesses
442
- saros-proxy sync-models
479
+ # Remove a harness, or disable sync entirely
480
+ saros-proxy configharness --remove pi
481
+ saros-proxy configharness --clear
443
482
 
444
483
  # Sync the live model list from upstream into all enabled harnesses
445
484
  saros-proxy sync-upstream
@@ -449,11 +488,12 @@ saros-proxy probe [model-id]
449
488
 
450
489
  # Probe all configured models
451
490
  saros-proxy probe
452
- ```
453
491
 
454
- `sync-models` writes the bundled model definitions to each enabled harness's provider config.
492
+ # Show per-key quota usage and most-used models
493
+ saros-proxy usage
494
+ ```
455
495
  `sync-upstream` fetches the live model list from upstream and writes it to each enabled harness, with metadata from models.dev.
456
- Both only touch `providers["saros-proxy"].models` in the target configs and skip harnesses whose config file does not exist.
496
+ It only touches `providers["saros-proxy"].models` in the target configs and skips harnesses whose config file does not exist.
457
497
  `probe` tests each model's liveness, reasoning, and tool-calling capabilities via the proxy.
458
498
 
459
499
  **Daemon config path:** By default the daemon looks for `config.yaml` at:
@@ -465,7 +505,11 @@ Override with `--config`:
465
505
  saros-proxy start --port 3000 --config /path/to/config.yaml
466
506
  ```
467
507
 
468
- The PID file is stored at `~/.config/saros/daemon.pid`. The child process runs with `NODE_ENV=production` (JSON logging).
508
+ The PID file is stored at `~/.config/saros/daemon.pid`. The child process runs with `NODE_ENV=production` (JSON logging), and its stderr is appended to `~/.config/saros/daemon.log`.
509
+
510
+ `saros-proxy status` checks the PID file first, then falls back to an os-agnostic `GET /health` port probe — so it reports the truth even when the proxy was started outside the daemon (manually, via autostart, or in another session) and no PID file exists. It also prints the enabled harnesses (`configharness` selection). `saros-proxy start` refuses to start a second instance when the configured port is already serving.
511
+
512
+ Bare `saros-proxy` (no subcommand) prints the same overview without starting anything: running state, harnesses, masked API keys, and config path. To run the proxy in the foreground (e.g. for development or in a container), use `saros-proxy serve [--port <port>] [--config <path>]` — the daemon child and the Docker entrypoint run `serve` under the hood.
469
513
 
470
514
  ---
471
515
 
@@ -545,15 +589,21 @@ Besides OpenCode, Saros can keep its provider + model config in sync for the `pi
545
589
  Sync is opt-in per harness, configured with the `configharness` command. The selection is stored in `~/.config/saros/harnesses.json`:
546
590
 
547
591
  ```bash
548
- # Enable sync for omp + pi + opencode (replaces the previous selection)
592
+ # Add omp + pi + opencode to the sync selection (additive)
549
593
  saros-proxy configharness omp pi oc
550
594
 
595
+ # Remove a harness, or disable sync entirely
596
+ saros-proxy configharness --remove pi
597
+ saros-proxy configharness --clear
598
+
551
599
  # See the current selection
552
600
  saros-proxy configharness
553
601
 
554
602
  # Accepted names: omp | ohmypi, pi, oc | opencode
555
603
  ```
556
604
 
605
+ `configharness` is additive: each command adds the named harnesses to the current selection (running `configharness omp` then `configharness pi` enables both). Use `--remove <h>...` to disable specific harnesses or `--clear` to disable sync for every harness.
606
+
557
607
  Behavior:
558
608
 
559
609
  - If `harnesses.json` does not exist, only OpenCode is synced (the default).
@@ -653,6 +703,7 @@ src/
653
703
  config.ts — Config loading from YAML, env vars, CLI
654
704
  constants.ts — All defaults and configuration values
655
705
  logger.ts — Structured logging with Pino + key masking
706
+ providers/ — Multi-provider key abstraction (KeyProvider, adapters, identifyKey)
656
707
  models-fetcher.ts — Upstream model list fetching + caching
657
708
  models-sync.ts — Auto-sync models from upstream to opencode config
658
709
  cli/
@@ -1 +1 @@
1
- {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../../src/cli/autostart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../../src/cli/autostart.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,25 @@
8
8
  * saros-proxy status
9
9
  *
10
10
  * Daemon lifecycle:
11
- * start → spawns detached `node dist/index.js` process, saves PID
11
+ * start → refuses if the port is already serving, then spawns detached
12
+ * `node dist/index.js` process, saves PID, logs child stderr
12
13
  * stop → kills the process (taskkill /T /F on Windows), removes PID file
13
14
  * restart → kills running instance (if any), waits, then starts fresh
14
- * status → checks if the process is still alive
15
+ * status → checks PID file, falls back to an os-agnostic /health port
16
+ * probe (instances started outside the daemon have no PID file),
17
+ * and prints the enabled harnesses
15
18
  */
16
- export declare function daemonStart(port?: number, configPath?: string): void;
19
+ /**
20
+ * Probe the proxy's /health endpoint on a port. Returns the parsed body when
21
+ * the endpoint answers with status ok — the strongest cross-platform signal
22
+ * that a saros-proxy instance is actually serving there (PID files can go
23
+ * stale, and instances started outside the daemon never write one).
24
+ */
25
+ export declare function probeProxyHealth(port: number): Promise<{
26
+ ok: boolean;
27
+ body?: Record<string, unknown>;
28
+ }>;
29
+ export declare function daemonStart(port?: number, configPath?: string): Promise<void>;
17
30
  export declare function daemonStop(): void;
18
31
  /**
19
32
  * Restart the proxy daemon: stop the running instance (if any), wait
@@ -21,4 +34,18 @@ export declare function daemonStop(): void;
21
34
  * Reuses daemonStart which owns its own exit path via setTimeout.
22
35
  */
23
36
  export declare function daemonRestart(port?: number, configPath?: string): void;
24
- export declare function daemonStatus(): void;
37
+ export interface DaemonState {
38
+ running: boolean;
39
+ pid: string | null;
40
+ port: number;
41
+ stalePid: boolean;
42
+ health?: Record<string, unknown>;
43
+ }
44
+ /**
45
+ * Resolve the daemon state os-agnostically: PID file first (cleaning up a
46
+ * stale one), then a /health port probe for instances started outside the
47
+ * daemon (no PID file). Shared by `status` and the bare `saros-proxy`
48
+ * overview.
49
+ */
50
+ export declare function getDaemonState(): Promise<DaemonState>;
51
+ export declare function daemonStatus(): Promise<void>;
@@ -8,14 +8,17 @@
8
8
  * saros-proxy status
9
9
  *
10
10
  * Daemon lifecycle:
11
- * start → spawns detached `node dist/index.js` process, saves PID
11
+ * start → refuses if the port is already serving, then spawns detached
12
+ * `node dist/index.js` process, saves PID, logs child stderr
12
13
  * stop → kills the process (taskkill /T /F on Windows), removes PID file
13
14
  * restart → kills running instance (if any), waits, then starts fresh
14
- * status → checks if the process is still alive
15
+ * status → checks PID file, falls back to an os-agnostic /health port
16
+ * probe (instances started outside the daemon have no PID file),
17
+ * and prints the enabled harnesses
15
18
  */
16
19
  import { spawn, execFileSync } from 'node:child_process';
17
20
  import chalk from 'chalk';
18
- import { existsSync, writeFileSync, readFileSync, rmSync, mkdirSync, copyFileSync } from 'node:fs';
21
+ import { existsSync, writeFileSync, readFileSync, rmSync, mkdirSync, copyFileSync, createWriteStream } from 'node:fs';
19
22
  import { resolve as pathResolve, join as pathJoin } from 'node:path';
20
23
  import { homedir } from 'node:os';
21
24
  import { fileURLToPath } from 'node:url';
@@ -23,12 +26,13 @@ import { getModelsJsonPath } from './opencode-config.js';
23
26
  import { checkForUpdate } from './update-check.js';
24
27
  import { loadConfig } from '../config.js';
25
28
  import { DAEMON_SYNC_TIMEOUT_MS } from '../constants.js';
26
- import { syncModelsInAllHarnesses } from './harness-sync.js';
29
+ import { syncModelsInAllHarnesses, readHarnessSettings } from './harness-sync.js';
27
30
  // ---------------------------------------------------------------------------
28
31
  // Constants
29
32
  // ---------------------------------------------------------------------------
30
33
  const PID_DIR = pathJoin(homedir(), '.config', 'saros');
31
34
  const PID_FILE = pathJoin(PID_DIR, 'daemon.pid');
35
+ const DAEMON_LOG = pathJoin(PID_DIR, 'daemon.log');
32
36
  const PACKAGE_ROOT = pathResolve(fileURLToPath(import.meta.url), '..', '..', '..');
33
37
  const ENTRY_POINT = pathResolve(PACKAGE_ROOT, 'dist', 'index.js');
34
38
  // ---------------------------------------------------------------------------
@@ -158,6 +162,43 @@ function killProcess(pid) {
158
162
  }
159
163
  }
160
164
  // ---------------------------------------------------------------------------
165
+ // Port probing (os-agnostic — no platform-specific process tools)
166
+ // ---------------------------------------------------------------------------
167
+ /**
168
+ * Probe the proxy's /health endpoint on a port. Returns the parsed body when
169
+ * the endpoint answers with status ok — the strongest cross-platform signal
170
+ * that a saros-proxy instance is actually serving there (PID files can go
171
+ * stale, and instances started outside the daemon never write one).
172
+ */
173
+ export async function probeProxyHealth(port) {
174
+ try {
175
+ const res = await fetch(`http://127.0.0.1:${port}/health`, {
176
+ signal: AbortSignal.timeout(1500),
177
+ });
178
+ if (!res.ok)
179
+ return { ok: false };
180
+ const body = (await res.json());
181
+ return { ok: body?.status === 'ok', body };
182
+ }
183
+ catch {
184
+ return { ok: false };
185
+ }
186
+ }
187
+ /** The port the proxy binds by default: --port override, else config, else 3000. */
188
+ function getConfigPort(configPath) {
189
+ try {
190
+ return loadConfig(configPath)?.port ?? 3000;
191
+ }
192
+ catch {
193
+ return 3000;
194
+ }
195
+ }
196
+ /** Print the harness selection (which harnesses saros-proxy syncs into). */
197
+ function printHarnesses() {
198
+ const enabled = readHarnessSettings();
199
+ console.log(chalk.cyan(`Enabled harnesses: ${enabled.join(', ') || '(none)'}`));
200
+ }
201
+ // ---------------------------------------------------------------------------
161
202
  // Internal helpers
162
203
  // ---------------------------------------------------------------------------
163
204
  /**
@@ -183,10 +224,20 @@ function killRunningDaemon() {
183
224
  // ---------------------------------------------------------------------------
184
225
  // Public API
185
226
  // ---------------------------------------------------------------------------
186
- export function daemonStart(port, configPath) {
227
+ export async function daemonStart(port, configPath) {
187
228
  ensurePidDir();
188
- // Build args for the child process — pass through any overrides
189
- const args = [ENTRY_POINT];
229
+ const effectivePort = port ?? getConfigPort(configPath);
230
+ // Refuse to start when the port is already serving: a second instance
231
+ // would die with EADDRINUSE, which the old code misreported as
232
+ // "exited shortly after starting. Check your config."
233
+ const probe = await probeProxyHealth(effectivePort);
234
+ if (probe.ok) {
235
+ console.error(chalk.red(`✗ Port ${effectivePort} is already in use — a proxy instance appears to be running. Run \`saros-proxy status\` to check.`));
236
+ process.exit(1);
237
+ }
238
+ // Build args for the child process — `serve` runs the foreground server,
239
+ // which bare `saros-proxy` (overview) must no longer do.
240
+ const args = [ENTRY_POINT, 'serve'];
190
241
  if (port)
191
242
  args.push('--port', String(port));
192
243
  if (configPath)
@@ -197,13 +248,25 @@ export function daemonStart(port, configPath) {
197
248
  const encKey = getEnv('OPENCODE_GO_ENCRYPTION_KEY');
198
249
  if (encKey)
199
250
  env.OPENCODE_GO_ENCRYPTION_KEY = encKey;
251
+ // Capture child stderr (also appended to daemon.log) so startup failures
252
+ // can be diagnosed instead of swallowed by stdio ignore.
253
+ // Best-effort: an unopenable log (dir deleted under us, permissions) must
254
+ // not crash the starter — the stream open is async and can lose the race
255
+ // with cleanup in tests.
256
+ const logStream = createWriteStream(DAEMON_LOG, { flags: 'a' });
257
+ logStream.on('error', () => { });
258
+ let stderrBuf = '';
200
259
  const child = spawn('node', args, {
201
260
  cwd: PACKAGE_ROOT,
202
- stdio: ['ignore', 'ignore', 'ignore'], // child logs to its own stderr via pino
261
+ stdio: ['ignore', 'ignore', 'pipe'],
203
262
  detached: true,
204
263
  windowsHide: true,
205
264
  env,
206
265
  });
266
+ child.stderr?.on('data', (chunk) => {
267
+ stderrBuf += chunk.toString();
268
+ logStream.write(chunk);
269
+ });
207
270
  // Allow parent to exit independently while child continues
208
271
  child.unref();
209
272
  const pid = child.pid;
@@ -211,7 +274,7 @@ export function daemonStart(port, configPath) {
211
274
  // Wait briefly then verify the process is alive
212
275
  setTimeout(async () => {
213
276
  if (isProcessAlive(pid)) {
214
- console.log(chalk.green(`✓ Proxy started (PID ${pid}) on port ${port ?? 3000}`));
277
+ console.log(chalk.green(`✓ Proxy started (PID ${pid}) on port ${effectivePort}.`));
215
278
  // Sync models to all enabled harnesses — await with timeout before exit
216
279
  ensureModelsJson();
217
280
  try {
@@ -229,14 +292,28 @@ export function daemonStart(port, configPath) {
229
292
  process.exit(0);
230
293
  }
231
294
  else {
232
- console.error(chalk.red('✗ Proxy exited shortly after starting. Check your config.'));
295
+ // Surface the real startup failure from the child's stderr.
296
+ if (stderrBuf.includes('EADDRINUSE')) {
297
+ console.error(chalk.red(`✗ Port ${effectivePort} is already in use. Choose a different port (\`--port <port>\`), or stop the running proxy first.`));
298
+ }
299
+ else if (stderrBuf.includes('No valid API keys')) {
300
+ console.error(chalk.red('✗ No valid API keys found. Ensure keys start with "sk-" and are at least 20 characters.'));
301
+ }
302
+ else if (stderrBuf.trim()) {
303
+ const tail = stderrBuf.trim().split('\n').slice(-6).join('\n');
304
+ console.error(chalk.red('✗ Proxy exited shortly after starting. Last output:'));
305
+ console.error(chalk.dim(tail));
306
+ }
307
+ else {
308
+ console.error(chalk.red('✗ Proxy exited shortly after starting. Check your config.'));
309
+ }
233
310
  deletePid();
234
311
  process.exit(1);
235
312
  }
236
313
  }, 2000);
237
314
  }
238
315
  export function daemonStop() {
239
- const { pid, wasRunning, wasStale } = killRunningDaemon();
316
+ const { pid, wasStale } = killRunningDaemon();
240
317
  if (pid === null) {
241
318
  console.log(chalk.yellow('No running proxy daemon found.'));
242
319
  process.exit(0);
@@ -281,21 +358,46 @@ export function daemonRestart(port, configPath) {
281
358
  daemonStart(port, configPath);
282
359
  }
283
360
  }
284
- export function daemonStatus() {
361
+ /**
362
+ * Resolve the daemon state os-agnostically: PID file first (cleaning up a
363
+ * stale one), then a /health port probe for instances started outside the
364
+ * daemon (no PID file). Shared by `status` and the bare `saros-proxy`
365
+ * overview.
366
+ */
367
+ export async function getDaemonState() {
368
+ const port = getConfigPort();
285
369
  const pid = readPid();
286
- if (!pid) {
287
- console.log(chalk.yellow('Daemon is not running.'));
288
- process.exit(0);
289
- }
290
- const pidNum = Number(pid);
291
- if (isProcessAlive(pidNum)) {
292
- console.log(chalk.green(`✓ Proxy is running (PID ${pid}).`));
370
+ const pidAlive = pid !== null && isProcessAlive(Number(pid));
371
+ const stalePid = pid !== null && !pidAlive;
372
+ if (stalePid)
373
+ deletePid();
374
+ const probe = await probeProxyHealth(port);
375
+ return {
376
+ running: pidAlive || probe.ok,
377
+ pid: pidAlive ? pid : null,
378
+ port,
379
+ stalePid,
380
+ health: probe.ok ? probe.body : undefined,
381
+ };
382
+ }
383
+ export async function daemonStatus() {
384
+ const state = await getDaemonState();
385
+ if (state.running) {
386
+ if (state.pid) {
387
+ console.log(chalk.green(`✓ Proxy is running (PID ${state.pid}) on port ${state.port}.`));
388
+ }
389
+ else {
390
+ console.log(chalk.green(`✓ Proxy is running on port ${state.port} (no PID file — started outside \`saros-proxy start\`).`));
391
+ }
392
+ printHarnesses();
293
393
  process.exit(0);
294
394
  }
295
- else {
296
- console.log(chalk.yellow(`Stale PID file (PID ${pid} is gone). Cleaning up.`));
297
- deletePid();
395
+ if (state.stalePid) {
396
+ console.log(chalk.yellow('Daemon is not running (stale PID cleaned up).'));
298
397
  process.exit(1);
299
398
  }
399
+ console.log(chalk.yellow('Daemon is not running.'));
400
+ printHarnesses();
401
+ process.exit(0);
300
402
  }
301
403
  //# sourceMappingURL=daemon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}