ysagc-agent 0.6.0 → 0.7.1

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 CHANGED
@@ -10,6 +10,16 @@ well-scoped executor — all policy lives on the platform.
10
10
 
11
11
  ## Highlights
12
12
 
13
+ - **Zero-config startup** — a bare `ysagc-agent` (or `npx ysagc-agent`) starts
14
+ immediately with the default platform, a generated local device identity, `cwd`
15
+ as the authorization root, and connects — **no prompts, no wizard**.
16
+ - **One-line failure** — if a first-run connection/auth fails it prints a single
17
+ clear message and exits non-zero; it never cascades into a prompt.
18
+ - **Opt-in `--configure` wizard** — run `ysagc-agent --configure` to
19
+ interactively set the address / token / root.
20
+ - **No baked-in secrets** — the default server is the customer platform; the
21
+ device token is self-generated on a zero-config run, never logged, never
22
+ committed anywhere, and never a real platform secret.
13
23
  - **Authorization root** — every file operation is forced inside one directory tree.
14
24
  - **Danger-command guard** — destructive shell commands are detected and blocked.
15
25
  - **Sensitive-path guard** — credential/system paths are blocked regardless of mode.
@@ -31,16 +41,58 @@ well-scoped executor — all policy lives on the platform.
31
41
 
32
42
  ## Quick start
33
43
 
34
- ### Install globally and run
44
+ ### One-command startup (zero config)
35
45
 
36
46
  ```bash
37
47
  npm install -g ysagc-agent
48
+ ysagc-agent
49
+ ```
50
+
51
+ That's it. With no saved config the agent **silently builds defaults and
52
+ connects immediately** — no wizard, no prompts:
53
+
54
+ - **server** — defaults to `ws://interface.ysagi.cn/api/workbench/agent`
55
+ - **deviceId** — generated as `agent-<random>-<n>`
56
+ - **token** — a self-generated local identity (never a real platform secret)
57
+ - **root** — the current working directory (`process.cwd()`)
58
+
59
+ The resolved defaults are saved to `~/.ysagc-agent/config.json` (mode `0600`,
60
+ directory created if missing) so every later run connects the same way. A bare run
61
+ logs its config **without the token** (`describeConfig` omits it).
62
+
63
+ Referenced by `WS_URL`, `YSAGC_TOKEN`, `DEVICE_ID`/`WORKSPACE_ROOT` environment
64
+ variables and the `--server/--token/--device-id/--root` flags still win over the
65
+ defaults, and a silent-save never overrides them.
38
66
 
39
- ysagc-agent --server ws://platform.example.com/agent \
40
- --token <your-device-token> \
41
- --root ~/my-projects
67
+ ### Configure the address / token / root (opt-in)
68
+
69
+ The interactive wizard is **off by default**. Run it explicitly once to set the
70
+ platform address, device token and workspace root, which are then persisted and
71
+ used on every later run:
72
+
73
+ ```bash
74
+ ysagc-agent --configure
42
75
  ```
43
76
 
77
+ It asks, in order:
78
+
79
+ 1. **平台地址 / server URL** — the default is `ws://interface.ysagi.cn/api/workbench/agent`; press **Enter** to accept, or type another (`http`/`https` are accepted and converted to `ws`/`wss`).
80
+ 2. **设备 Token** — paste the device token copied from the workbench's「如何连接」. Input is **masked** (not echoed). Leave it empty to generate a local device id and a short pairing hint instead.
81
+ 3. **工作区目录 / workspace root** — defaults to the current directory; press **Enter** to accept or type an absolute path.
82
+
83
+ Any value already supplied by flags/env is used as-is and its prompt is skipped.
84
+
85
+ > **Non-interactive `--configure`:** `--configure` requires a real terminal. In a
86
+ > piped/non-TTY run it prints `--configure 需要一个交互式终端来运行。` and exits `1`
87
+ > instead of hanging.
88
+
89
+ `npx ysagc-agent` is the same entry and needs no flags either.
90
+
91
+ > **First-run connection failure:** if a zero-config run cannot connect or is
92
+ > rejected, it prints one clear line —
93
+ > `无法连接到平台(<err>)。如需指定地址/Token,请用 --server/--token 或运行 ysagc-agent --configure。`
94
+ > — and exits `1`. It does **not** prompt and does **not** silently keep retrying.
95
+
44
96
  Once connected the agent sends a `hello` frame, waits for `welcome`, then answers
45
97
  `ping`/`tool_call`/`cancel` frames.
46
98
 
@@ -50,29 +102,42 @@ Once connected the agent sends a `hello` frame, waits for `welcome`, then answer
50
102
  npm install
51
103
  npm run build # tsc -> dist/
52
104
  node dist/cli.js --selftest # run the smoke test
53
- node dist/cli.js --server ws://... --token ... --root ~/my-projects
105
+ node dist/cli.js # same zero-config auto-connect
54
106
  ```
55
107
 
56
108
  ## Configuration
57
109
 
58
- Settings come from defaults, then environment variables, then CLI flags
59
- (CLI wins). `--token` is **never logged**.
110
+ Settings are resolved in this precedence order:
111
+
112
+ **CLI flags > environment variables > saved config (`~/.ysagc-agent/config.json`) > defaults.**
113
+
114
+ The device token is **never logged** — `describeConfig` omits it and the logger
115
+ masks secret-looking values before they reach stdout/stderr.
60
116
 
61
117
  | CLI flag | Environment | Default | Description |
62
118
  | --------------------- | ------------------ | ----------------- | ---------------------------------------------------- |
63
- | `--server <url>` | `WS_URL` | _(required)_ | Platform WebSocket URL for the agent channel |
64
- | `--token <token>` | `YSAGC_TOKEN` | _(required)_ | Device/agent auth token |
65
- | `--device-id <id>` | `DEVICE_ID` | host+pid | Stable device identifier |
119
+ | `--server <url>` | `WS_URL` | `ws://interface.ysagi.cn/api/workbench/agent` | Platform WebSocket URL (http/https auto-converted to ws/wss) |
120
+ | `--token <token>` | `YSAGC_TOKEN` | _(saved config)_ | Device/agent auth token; **never** defaulted/baked-in |
121
+ | `--device-id <id>` | `DEVICE_ID` | host+pid / generated | Stable device identifier |
66
122
  | `--root <dir>` | `WORKSPACE_ROOT` | cwd | Authorization root (all file ops stay inside it) |
67
123
  | `--mode <mode>` | `PERMISSION_MODE` | `smart` | Permission mode (see below) |
68
124
  | `--web` | `YSAGC_WEB` | off | Enable the local web_search (stub) tool |
69
125
  | `--timeout <ms>` | `YSAGC_TIMEOUT` | `120000` | Command timeout in milliseconds |
70
126
  | `--max-bytes <n>` | `YSAGC_MAX_BYTES` | `64000` | Per-stream output cap before truncation |
71
127
  | `--log-level <level>` | `YSAGC_LOG_LEVEL` | `info` | `silent\|error\|warn\|info\|debug` |
128
+ | `--configure` | — | — | Run the interactive setup wizard and save the config (opt-in) |
72
129
  | `--selftest` | — | — | Run the local smoke test and exit |
73
130
  | `-V, --version` | — | — | Print version |
74
131
  | `-h, --help` | — | — | Print usage |
75
132
 
133
+ ### Saved config file
134
+
135
+ A zero-config run — or an explicit `ysagc-agent --configure` — persists the
136
+ resolved settings to `~/.ysagc-agent/config.json` (mode `0600`, directory created
137
+ if missing). Override the path with the `YSAGC_CONFIG` environment variable. A
138
+ missing or corrupt file is treated as a first run: the agent silently starts with
139
+ defaults again (it never prompts unless `--configure` is passed).
140
+
76
141
  ### Permission modes
77
142
 
78
143
  | Mode | Shell behaviour |
@@ -142,10 +207,11 @@ for approval when overwriting), and `delete_file` always requires approval in
142
207
  node dist/cli.js --selftest
143
208
  ```
144
209
 
145
- Runs 46 checks over path safety, danger-command detection, sensitive-path
210
+ Runs 53 checks over path safety, danger-command detection, sensitive-path
146
211
  detection, secret masking, the tool registry, command timeout/process-tree kill,
147
- environment sanitization, and idempotency over a real WebSocket connection.
148
- It prints `PASS`/`FAIL` lines and exits `0`/`1`.
212
+ environment sanitization, config resolution + save/load (never logging the token),
213
+ and idempotency over a real WebSocket connection. It prints `PASS`/`FAIL` lines
214
+ and exits `0`/`1`.
149
215
 
150
216
  ## Protocol
151
217
 
@@ -154,7 +220,7 @@ JSON text frames over a WebSocket.
154
220
  **Client → server**
155
221
 
156
222
  ```jsonc
157
- { "type": "hello", "token": "...", "deviceId": "...", "version": "0.6.0", "platform": "node" }
223
+ { "type": "hello", "token": "...", "deviceId": "...", "version": "0.7.1", "platform": "node" }
158
224
  { "type": "pong", "t": 42 } // reply to a server ping
159
225
  { "type": "tool_result", "jobId": "j1", "ok": true, "result": { }, "durationMs": 12 }
160
226
  { "type": "status", "state": "online" | "busy" | "error", "sessionId": "..." }
package/dist/agent.d.ts CHANGED
@@ -1,13 +1,17 @@
1
1
  import { type ClientState } from './protocol';
2
2
  import { type AgentConfig } from './config';
3
3
  /** Kept in sync with package.json. */
4
- export declare const AGENT_VERSION = "0.6.0";
4
+ export declare const AGENT_VERSION = "0.7.1";
5
5
  export interface AgentHandle {
6
6
  stop(): void;
7
7
  }
8
8
  export interface AgentEvents {
9
9
  /** Called when the agent transitions connectivity state. */
10
10
  onState?: (state: ClientState) => void;
11
+ /** Called once when the agent fails to connect/auth before it has ever reached
12
+ * `online`. A zero-config/default run supplies this so the CLI can print a
13
+ * one-line error and exit instead of reconnecting forever. */
14
+ onConnectFailed?: (error: string) => void;
11
15
  }
12
16
  /** Start the local agent. Throws {@link ConfigError} for missing required
13
17
  * config (no server/token/device-id) with a friendly message. */
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAYL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAgE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAI1G,sCAAsC;AACtC,eAAO,MAAM,aAAa,UAAU,CAAC;AAQrC,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACxC;AAoUD;iEACiE;AACjE,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAGjF;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAG/E"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAYL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAgE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAI1G,sCAAsC;AACtC,eAAO,MAAM,aAAa,UAAU,CAAC;AAQrC,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;mEAE+D;IAC/D,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AA+VD;iEACiE;AACjE,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAGjF;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAG/E"}
package/dist/agent.js CHANGED
@@ -12,7 +12,7 @@ const tools_1 = require("./tools");
12
12
  const config_1 = require("./config");
13
13
  const tokens_1 = require("./tokens");
14
14
  /** Kept in sync with package.json. */
15
- exports.AGENT_VERSION = '0.6.0';
15
+ exports.AGENT_VERSION = '0.7.1';
16
16
  const MAX_IDEMPOTENCY_ENTRIES = 512;
17
17
  const RECONNECT_BASE_MS = 1000;
18
18
  const RECONNECT_CAP_MS = 60000;
@@ -26,6 +26,8 @@ class Agent {
26
26
  this.stopped = false;
27
27
  this.intentionalClose = false;
28
28
  this.reconnectAttempt = 0;
29
+ this.everOnline = false;
30
+ this.connectFailedReported = false;
29
31
  this.jobs = new Map();
30
32
  this.idempotencyCache = new Map();
31
33
  this.config = config;
@@ -70,9 +72,15 @@ class Agent {
70
72
  });
71
73
  ws.on('unexpected-response', (_req, res) => {
72
74
  this.log.warn('unexpected ws response', { status: res.statusCode });
75
+ if (!this.everOnline && this.events?.onConnectFailed) {
76
+ this.reportConnectFailure(`服务器返回 ${res.statusCode}`);
77
+ }
73
78
  });
74
79
  ws.on('error', (err) => {
75
80
  this.log.error('ws error', { error: err.message });
81
+ if (!this.everOnline && this.events?.onConnectFailed) {
82
+ this.reportConnectFailure(err.message);
83
+ }
76
84
  });
77
85
  ws.on('close', (code, reason) => {
78
86
  this.ws = null;
@@ -84,6 +92,12 @@ class Agent {
84
92
  this.abortAllJobs();
85
93
  if (this.intentionalClose || this.stopped)
86
94
  return;
95
+ // On a zero-config/default run that never connected, fail fast with a
96
+ // single message instead of reconnecting forever.
97
+ if (!this.everOnline && this.events?.onConnectFailed) {
98
+ this.reportConnectFailure(reasonText || `连接关闭 (${code})`);
99
+ return;
100
+ }
87
101
  this.scheduleReconnect();
88
102
  });
89
103
  }
@@ -133,8 +147,9 @@ class Agent {
133
147
  if (!(0, protocol_1.isWelcome)(msg))
134
148
  return;
135
149
  this.sessionId = msg.sessionId;
136
- // A successful handshake resets the backoff ramp.
150
+ // A successful handshake resets the backoff ramp and marks us reachable.
137
151
  this.reconnectAttempt = 0;
152
+ this.everOnline = true;
138
153
  this.setStatus('online');
139
154
  this.log.info('welcomed', { sessionId: this.sessionId });
140
155
  }
@@ -217,6 +232,18 @@ class Agent {
217
232
  this.log.warn('cancel for unknown/job already finished', { jobId: msg.jobId });
218
233
  }
219
234
  }
235
+ /**
236
+ * Report a first-connection failure exactly once and stop the agent so a
237
+ * zero-config/default run exits instead of silently reconnecting forever.
238
+ */
239
+ reportConnectFailure(msg) {
240
+ if (this.connectFailedReported)
241
+ return;
242
+ this.connectFailedReported = true;
243
+ this.stopped = true;
244
+ this.log.error('connect failed', { error: msg });
245
+ this.events?.onConnectFailed?.(msg);
246
+ }
220
247
  /** Stop every in-flight job (used on disconnect / shutdown). */
221
248
  abortAllJobs() {
222
249
  if (this.jobs.size === 0)
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":";;;;;;AAyYA,gCAGC;AAGD,8CAGC;AAlZD,4CAA6C;AAC7C,yCAaoB;AACpB,mCAA8D;AAC9D,qCAA0G;AAC1G,qCAAwC;AAGxC,sCAAsC;AACzB,QAAA,aAAa,GAAG,OAAO,CAAC;AAErC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,iBAAiB,GAAG,IAAK,CAAC;AAChC,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAChC,MAAM,YAAY,GAAG,KAAM,CAAC;AAC5B,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,oBAAoB;AAe1C,MAAM,KAAK;IAkBT,YAAY,MAAmB,EAAE,MAAoB;QAf7C,OAAE,GAAqB,IAAI,CAAC;QAC5B,cAAS,GAAG,EAAE,CAAC;QACf,UAAK,GAAgB,OAAO,CAAC;QAC7B,YAAO,GAAG,KAAK,CAAC;QAChB,qBAAgB,GAAG,KAAK,CAAC;QACzB,qBAAgB,GAAG,CAAC,CAAC;QAGrB,eAAU,GAAG,KAAK,CAAC;QACnB,0BAAqB,GAAG,KAAK,CAAC;QACrB,SAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC1C,qBAAgB,GAAG,IAAI,GAAG,EAAsB,CAAC;QAKhE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,IAAA,yBAAgB,EAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAkB,EAAC;YACjC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,UAAU,EAAE,MAAM,CAAC,GAAG;YACtB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAA,uBAAc,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAA,uBAAc,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACrC,CAAC;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,IAAI,YAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,KAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACrG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;gBACrD,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;gBACrD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO;YAClD,sEAAsE;YACtE,kDAAkD;YAClD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;gBACrD,IAAI,CAAC,oBAAoB,CAAC,UAAU,IAAI,SAAS,IAAI,GAAG,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS;QACf,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,OAAO;YACb,KAAK;YACL,QAAQ;YACR,OAAO,EAAE,qBAAa;YACtB,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CAAC,GAAkB;QAC7B,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAA,wBAAa,EAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAa;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,SAAS;gBACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACpB,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnB,MAAM;YACR;gBACE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAG,GAAqB,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,GAAwC;QACxD,IAAI,CAAC,IAAA,oBAAS,EAAC,GAAG,CAAC;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAC/B,yEAAyE;QACzE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,GAAqC;QAClD,IAAI,CAAC,IAAA,iBAAM,EAAC,GAAG,CAAC;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,GAA0C;QACjE,IAAI,CAAC,IAAA,qBAAU,EAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;QAElD,MAAM,GAAG,GAAG,IAAA,gCAAqB,EAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACjF,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,iEAAiE;gBACjE,IAAI,CAAC,UAAU,CACb,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EAChF,KAAK,CACN,CAAC;gBACF,OAAO;YACT,CAAC;YACD,0EAA0E;YAC1E,yEAAyE;YACzE,wEAAwE;YACxE,iDAAiD;YACjD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/B,sEAAsE;YACtE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;gFAC4E;IACpE,SAAS,CAAC,KAAa,EAAE,KAAc,EAAE,MAAe;QAC9D,MAAM,KAAK,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1C,oEAAoE;QACpE,MAAM,OAAO,GAAiB;YAC5B,IAAI,EAAE,OAAO;YACb,KAAK;YACL,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,UAAU;YAClB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;SACf,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC/B,KAAK;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,GAAuC;QACtD,IAAI,CAAC,IAAA,mBAAQ,EAAC,GAAG,CAAC;YAAE,OAAO;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,oBAAoB,CAAC,GAAW;QACtC,IAAI,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACvC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,gEAAgE;IACxD,YAAY;QAClB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAClE,CAAC;IAEO,UAAU,CAAC,MAAkB,EAAE,KAAa;QAClD,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,aAAa;YACnB,KAAK;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5G,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,GAAW,EAAE,MAAkB;QACjD,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACzD,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,SAAS,CAAC,KAAkB;QAClC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7H,CAAC;QACH,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;IAChC,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC;IAChC,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;CACF;AAED,sDAAsD;AACtD,SAAS,WAAW,CAAC,IAAa;IAChC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,+BAA+B;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;iEACiE;AACjE,SAAgB,UAAU,CAAC,MAAmB,EAAE,MAAoB;IAClE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,+EAA+E;AAC/E,SAAgB,iBAAiB,CAAC,SAAgC;IAChE,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAeA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8PD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoSvD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA2BA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwVD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CA6YvD"}
package/dist/cli.js CHANGED
@@ -42,6 +42,7 @@ const path = __importStar(require("node:path"));
42
42
  const ws_1 = require("ws");
43
43
  const agent_1 = require("./agent");
44
44
  const config_1 = require("./config");
45
+ const onboarding_1 = require("./onboarding");
45
46
  const logger_1 = require("./logger");
46
47
  const path_utils_1 = require("./path-utils");
47
48
  const security_1 = require("./security");
@@ -63,6 +64,7 @@ program
63
64
  .option('--timeout <ms>', 'command timeout in milliseconds')
64
65
  .option('--max-bytes <n>', 'per-stream output cap in bytes')
65
66
  .option('--log-level <level>', 'silent | error | warn | info | debug', 'info')
67
+ .option('--configure', 'run the interactive setup wizard and save the config')
66
68
  .option('--selftest', 'run a local self-test and exit');
67
69
  program.parse(process.argv);
68
70
  const opts = program.opts();
@@ -75,6 +77,23 @@ function toInt(value) {
75
77
  function asStr(value) {
76
78
  return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
77
79
  }
80
+ function env(name) {
81
+ const v = process.env[name];
82
+ return v && v.trim() !== '' ? v.trim() : undefined;
83
+ }
84
+ function envBool(name) {
85
+ const v = env(name);
86
+ if (v === undefined)
87
+ return undefined;
88
+ return /^(1|true|yes|on)$/i.test(v);
89
+ }
90
+ function envInt(name) {
91
+ const v = env(name);
92
+ if (v === undefined)
93
+ return undefined;
94
+ const n = Number(v);
95
+ return Number.isFinite(n) && n > 0 ? Math.floor(n) : undefined;
96
+ }
78
97
  function shutdown(handle, signal) {
79
98
  // eslint-disable-next-line no-console
80
99
  console.log(`\n${signal} received; shutting down`);
@@ -87,24 +106,64 @@ async function main() {
87
106
  runAndPrintSelfTest(results);
88
107
  return;
89
108
  }
90
- try {
91
- const config = (0, config_1.loadConfig)({
92
- server: asStr(opts.server),
93
- token: asStr(opts.token),
94
- deviceId: asStr(opts.deviceId),
95
- root: asStr(opts.root),
96
- mode: asStr(opts.mode),
97
- preset: asStr(opts.permissionPreset),
98
- web: opts.web === true ? true : undefined,
99
- timeoutMs: toInt(opts.timeout),
100
- maxBytes: toInt(opts.maxBytes),
101
- logLevel: asStr(opts.logLevel),
102
- });
109
+ // CLI overrides always win over env/saved config.
110
+ const overrides = {
111
+ server: asStr(opts.server),
112
+ token: asStr(opts.token),
113
+ deviceId: asStr(opts.deviceId),
114
+ root: asStr(opts.root),
115
+ mode: asStr(opts.mode),
116
+ preset: asStr(opts.permissionPreset),
117
+ web: opts.web === true ? true : undefined,
118
+ timeoutMs: toInt(opts.timeout),
119
+ maxBytes: toInt(opts.maxBytes),
120
+ logLevel: asStr(opts.logLevel),
121
+ };
122
+ if (opts.configure) {
123
+ // Explicit opt-in wizard: prompts for address/token/root, persists, then
124
+ // connects. This is the ONLY path that ever prompts.
125
+ if (!(0, onboarding_1.isInteractiveStdin)()) {
126
+ // eslint-disable-next-line no-console
127
+ console.error('\n--configure 需要一个交互式终端来运行。');
128
+ process.exit(1);
129
+ }
130
+ const config = await (0, onboarding_1.runOnboarding)({
131
+ server: overrides.server ?? env('WS_URL'),
132
+ token: overrides.token ?? env('YSAGC_TOKEN'),
133
+ deviceId: overrides.deviceId ?? env('DEVICE_ID'),
134
+ root: overrides.root ?? env('WORKSPACE_ROOT'),
135
+ mode: overrides.mode ?? env('PERMISSION_MODE'),
136
+ preset: overrides.preset ?? env('YSAGC_PERMISSION_PRESET'),
137
+ web: overrides.web ?? envBool('YSAGC_WEB'),
138
+ timeoutMs: overrides.timeoutMs ?? envInt('YSAGC_TIMEOUT'),
139
+ maxBytes: overrides.maxBytes ?? envInt('YSAGC_MAX_BYTES'),
140
+ logLevel: overrides.logLevel ?? env('YSAGC_LOG_LEVEL'),
141
+ });
142
+ (0, config_1.saveConfig)(config);
103
143
  const log = new logger_1.Logger({ level: config.logLevel, name: 'cli' });
104
144
  log.info('agent config', (0, config_1.describeConfig)(config));
105
145
  const handle = (0, agent_1.startAgent)(config);
106
146
  process.on('SIGINT', () => shutdown(handle, 'SIGINT'));
107
147
  process.on('SIGTERM', () => shutdown(handle, 'SIGTERM'));
148
+ return;
149
+ }
150
+ try {
151
+ const saved = (0, config_1.loadSavedConfig)();
152
+ const { config, zeroConfig } = await resolveConfigForRun(overrides, saved);
153
+ const log = new logger_1.Logger({ level: config.logLevel, name: 'cli' });
154
+ log.info('agent config', (0, config_1.describeConfig)(config));
155
+ const events = zeroConfig
156
+ ? {
157
+ onConnectFailed: (err) => {
158
+ // eslint-disable-next-line no-console
159
+ console.error(`\n无法连接到平台(${err})。如需指定地址/Token,请用 --server/--token 或运行 ysagc-agent --configure。`);
160
+ process.exit(1);
161
+ },
162
+ }
163
+ : undefined;
164
+ const handle = (0, agent_1.startAgent)(config, events);
165
+ process.on('SIGINT', () => shutdown(handle, 'SIGINT'));
166
+ process.on('SIGTERM', () => shutdown(handle, 'SIGTERM'));
108
167
  }
109
168
  catch (err) {
110
169
  if (err instanceof config_1.ConfigError) {
@@ -117,6 +176,28 @@ async function main() {
117
176
  throw err;
118
177
  }
119
178
  }
179
+ /**
180
+ * Pick the config for a non-interactive run. When no saved config exists this is
181
+ * a zero-config first run: build from CLI/env/defaults, generate a local device
182
+ * identity (deviceId + self-generated token), persist it silently, and connect
183
+ * immediately — never prompting. When a config file exists, load it and let
184
+ * CLI/env overrides win on top.
185
+ */
186
+ async function resolveConfigForRun(overrides, saved) {
187
+ if (!saved) {
188
+ // Zero-config first run: no prompt. Defaults are used, a local identity is
189
+ // generated, and the resolved config is saved so later runs are zero-config
190
+ // too. CLI/env values already won inside loadConfig and are preserved.
191
+ const config = (0, config_1.loadConfig)(overrides);
192
+ if (!config.token) {
193
+ config.token = (0, config_1.generateDeviceToken)();
194
+ }
195
+ (0, config_1.saveConfig)(config);
196
+ return { config, zeroConfig: true };
197
+ }
198
+ // A config file exists: load it and let CLI/env overrides win on top.
199
+ return { config: (0, config_1.loadConfig)(overrides, saved), zeroConfig: false };
200
+ }
120
201
  function runAndPrintSelfTest(results) {
121
202
  let failed = 0;
122
203
  for (const r of results) {
@@ -360,6 +441,113 @@ async function runSelfTest() {
360
441
  const masked = (0, security_1.maskSecrets)('Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.sig');
361
442
  return !masked.includes('eyJhbGci') && masked.includes('***');
362
443
  });
444
+ // --- config loading / onboarding path ----------------------------------
445
+ sync('normalizeServerUrl: http -> ws', () => (0, config_1.normalizeServerUrl)('http://example.com/agent') === 'ws://example.com/agent');
446
+ sync('normalizeServerUrl: https -> wss', () => (0, config_1.normalizeServerUrl)('https://example.com/agent') === 'wss://example.com/agent');
447
+ sync('normalizeServerUrl: keeps ws scheme', () => (0, config_1.normalizeServerUrl)('ws://example.com/agent') === 'ws://example.com/agent');
448
+ sync('default server is the customer platform (no secret baked in)', () => config_1.DEFAULT_SERVER === 'ws://interface.ysagi.cn/api/workbench/agent');
449
+ sync('config save/load round-trip never logs the token', () => {
450
+ const prevCfg = process.env.YSAGC_CONFIG;
451
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'ysagc-cfg-'));
452
+ const cfgPath = path.join(tmp, 'config.json');
453
+ process.env.YSAGC_CONFIG = cfgPath;
454
+ try {
455
+ const cfg = {
456
+ server: 'ws://interface.ysagi.cn/api/workbench/agent',
457
+ token: 'super-secret-token-value',
458
+ deviceId: 'device-abc123',
459
+ root: dir,
460
+ mode: 'smart',
461
+ permissionPreset: 'workspace-write',
462
+ web: false,
463
+ timeoutMs: 120000,
464
+ maxBytes: 64000,
465
+ logLevel: 'info',
466
+ platform: 'node',
467
+ };
468
+ (0, config_1.saveConfig)(cfg);
469
+ const loaded = (0, config_1.loadSavedConfig)();
470
+ if (!loaded)
471
+ return false;
472
+ if (loaded.server !== cfg.server)
473
+ return false;
474
+ if (loaded.token !== cfg.token)
475
+ return false; // persisted as-is (required to send)
476
+ if (loaded.deviceId !== cfg.deviceId || loaded.root !== cfg.root)
477
+ return false;
478
+ // describeConfig must never expose the token.
479
+ const desc = (0, config_1.describeConfig)(cfg);
480
+ if ('token' in desc)
481
+ return false;
482
+ if (JSON.stringify(desc).includes('super-secret-token-value'))
483
+ return false;
484
+ return true;
485
+ }
486
+ finally {
487
+ if (prevCfg === undefined)
488
+ delete process.env.YSAGC_CONFIG;
489
+ else
490
+ process.env.YSAGC_CONFIG = prevCfg;
491
+ fs.rmSync(tmp, { recursive: true, force: true });
492
+ }
493
+ });
494
+ sync('loadConfig: CLI overrides saved config, saved fills the rest', () => {
495
+ const cfg = (0, config_1.loadConfig)({ server: 'ws://cli.example.com/agent' }, {
496
+ server: 'ws://saved.example.com/agent',
497
+ token: 'saved-token',
498
+ deviceId: 'saved-device',
499
+ root: dir,
500
+ });
501
+ if (cfg.server !== 'ws://cli.example.com/agent')
502
+ return false; // CLI wins
503
+ if (cfg.token !== 'saved-token')
504
+ return false; // no CLI token -> saved used
505
+ if (cfg.deviceId !== 'saved-device')
506
+ return false;
507
+ if (cfg.root !== dir)
508
+ return false;
509
+ return true;
510
+ });
511
+ sync('loadConfig: no environment ever provides a default token', () => {
512
+ const keys = [
513
+ 'WS_URL',
514
+ 'YSAGC_TOKEN',
515
+ 'DEVICE_ID',
516
+ 'WORKSPACE_ROOT',
517
+ 'PERMISSION_MODE',
518
+ 'YSAGC_PERMISSION_PRESET',
519
+ 'YSAGC_WEB',
520
+ 'YSAGC_TIMEOUT',
521
+ 'YSAGC_MAX_BYTES',
522
+ 'YSAGC_LOG_LEVEL',
523
+ 'YSAGC_CONFIG',
524
+ ];
525
+ const saved = {};
526
+ for (const k of keys) {
527
+ saved[k] = process.env[k];
528
+ delete process.env[k];
529
+ }
530
+ try {
531
+ const cfg = (0, config_1.loadConfig)({});
532
+ if (cfg.server !== config_1.DEFAULT_SERVER)
533
+ return false; // default customer platform
534
+ if (cfg.token !== '')
535
+ return false; // token is never defaulted
536
+ if (!cfg.deviceId)
537
+ return false; // device id always present
538
+ if (!path.isAbsolute(cfg.root))
539
+ return false; // root is absolute
540
+ return true;
541
+ }
542
+ finally {
543
+ for (const k of keys) {
544
+ if (saved[k] === undefined)
545
+ delete process.env[k];
546
+ else
547
+ process.env[k] = saved[k];
548
+ }
549
+ }
550
+ });
363
551
  // --- tools ------------------------------------------------------------
364
552
  const logger = new logger_1.Logger({ level: 'error', name: 'selftest' });
365
553
  const registry = (0, tools_1.createToolRegistry)({