ysagc-agent 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,8 +10,18 @@ well-scoped executor — all policy lives on the platform.
10
10
 
11
11
  ## Highlights
12
12
 
13
- - **One-command startup** — `ysagc-agent` (or `npx ysagc-agent`) with **zero flags**. Interactive onboarding on the first run, then auto-connects on every later run.
14
- - **No baked-in secrets** — the default server is the customer platform; the device token is never defaulted, never logged, and never committed anywhere.
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
+ - **Auto-reconnect until connected** — if the first connection can't be
17
+ established it prints a single notice and then **retries every `--retry-interval`
18
+ (default 1000ms)** until it reaches the platform; it never exits and never
19
+ cascades into a prompt.
20
+ - **Opt-in `--configure` wizard** — run `ysagc-agent --configure` to
21
+ interactively set the address / token / root.
22
+ - **No baked-in secrets** — the default server is the customer platform; the
23
+ device token is self-generated on a zero-config run, never logged, never
24
+ committed anywhere, and never a real platform secret.
15
25
  - **Authorization root** — every file operation is forced inside one directory tree.
16
26
  - **Danger-command guard** — destructive shell commands are detected and blocked.
17
27
  - **Sensitive-path guard** — credential/system paths are blocked regardless of mode.
@@ -33,29 +43,63 @@ well-scoped executor — all policy lives on the platform.
33
43
 
34
44
  ## Quick start
35
45
 
36
- ### One-command startup (zero flags)
46
+ ### One-command startup (zero config)
37
47
 
38
48
  ```bash
39
49
  npm install -g ysagc-agent
40
50
  ysagc-agent
41
51
  ```
42
52
 
43
- That's it. On the **first run** the wizard asks, in order:
53
+ That's it. With no saved config the agent **silently builds defaults and
54
+ connects immediately** — no wizard, no prompts:
55
+
56
+ - **server** — defaults to `ws://interface.ysagi.cn/api/workbench/agent`, **but with
57
+ local/online auto-detection**: when the default platform URL is in use, the agent
58
+ first tries the **local dev backend** `ws://localhost:5000/api/workbench/agent`,
59
+ and falls through to the default if it's unreachable. So a bare `ysagc-agent`
60
+ works whether you're testing locally or connecting to the platform. If you pass an
61
+ explicit `--server`/`WS_URL`, that one is used exclusively.
62
+ - **deviceId** — generated as `agent-<random>-<n>`
63
+ - **token** — a self-generated local identity (never a real platform secret)
64
+ - **root** — the current working directory (`process.cwd()`)
65
+
66
+ The resolved defaults are saved to `~/.ysagc-agent/config.json` (mode `0600`,
67
+ directory created if missing) so every later run connects the same way. A bare run
68
+ logs its config **without the token** (`describeConfig` omits it).
69
+
70
+ Referenced by `WS_URL`, `YSAGC_TOKEN`, `DEVICE_ID`/`WORKSPACE_ROOT` environment
71
+ variables and the `--server/--token/--device-id/--root` flags still win over the
72
+ defaults, and a silent-save never overrides them.
73
+
74
+ ### Configure the address / token / root (opt-in)
75
+
76
+ The interactive wizard is **off by default**. Run it explicitly once to set the
77
+ platform address, device token and workspace root, which are then persisted and
78
+ used on every later run:
79
+
80
+ ```bash
81
+ ysagc-agent --configure
82
+ ```
83
+
84
+ It asks, in order:
44
85
 
45
86
  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`).
46
87
  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.
47
88
  3. **工作区目录 / workspace root** — defaults to the current directory; press **Enter** to accept or type an absolute path.
48
89
 
49
- The answers are saved to `~/.ysagc-agent/config.json` (mode `0600`) so every later run connects **without prompting**:
90
+ Any value already supplied by flags/env is used as-is and its prompt is skipped.
50
91
 
51
- ```bash
52
- ysagc-agent
53
- ```
92
+ > **Non-interactive `--configure`:** `--configure` requires a real terminal. In a
93
+ > piped/non-TTY run it prints `--configure 需要一个交互式终端来运行。` and exits `1`
94
+ > instead of hanging.
54
95
 
55
96
  `npx ysagc-agent` is the same entry and needs no flags either.
56
97
 
57
- > **Non-interactive first run:** if no config exists and stdin is not a terminal (e.g. a CI/piped run), `ysagc-agent` prints
58
- > `需要在你的终端里运行以完成首次引导(会向你询问地址/Token/工作区)` and exits `1` instead of hanging.
98
+ > **First-run connection failure:** if a zero-config run cannot connect or is
99
+ > rejected, it prints one clear line
100
+ > `暂未连接平台(<err>),正在每 1s 自动重试,直到连上为止…(Ctrl+C 退出)`
101
+ > — then **retries every `--retry-interval` (default 1000ms) until it connects**.
102
+ > It does **not** prompt and does **not** exit.
59
103
 
60
104
  Once connected the agent sends a `hello` frame, waits for `welcome`, then answers
61
105
  `ping`/`tool_call`/`cancel` frames.
@@ -66,7 +110,7 @@ Once connected the agent sends a `hello` frame, waits for `welcome`, then answer
66
110
  npm install
67
111
  npm run build # tsc -> dist/
68
112
  node dist/cli.js --selftest # run the smoke test
69
- node dist/cli.js # same interactive boot / auto-connect
113
+ node dist/cli.js # same zero-config auto-connect
70
114
  ```
71
115
 
72
116
  ## Configuration
@@ -89,16 +133,19 @@ masks secret-looking values before they reach stdout/stderr.
89
133
  | `--timeout <ms>` | `YSAGC_TIMEOUT` | `120000` | Command timeout in milliseconds |
90
134
  | `--max-bytes <n>` | `YSAGC_MAX_BYTES` | `64000` | Per-stream output cap before truncation |
91
135
  | `--log-level <level>` | `YSAGC_LOG_LEVEL` | `info` | `silent\|error\|warn\|info\|debug` |
136
+ | `--retry-interval <ms>` | `YSAGC_RETRY_MS` | `1000` | Connection retry interval (retries until connected) |
137
+ | `--configure` | — | — | Run the interactive setup wizard and save the config (opt-in) |
92
138
  | `--selftest` | — | — | Run the local smoke test and exit |
93
139
  | `-V, --version` | — | — | Print version |
94
140
  | `-h, --help` | — | — | Print usage |
95
141
 
96
142
  ### Saved config file
97
143
 
98
- The onboarding wizard persists the resolved settings to `~/.ysagc-agent/config.json`
99
- (mode `0600`, directory created if missing). Override the path with the
100
- `YSAGC_CONFIG` environment variable. A missing or corrupt file is treated as a
101
- first run and triggers onboarding again.
144
+ A zero-config run or an explicit `ysagc-agent --configure` — persists the
145
+ resolved settings to `~/.ysagc-agent/config.json` (mode `0600`, directory created
146
+ if missing). Override the path with the `YSAGC_CONFIG` environment variable. A
147
+ missing or corrupt file is treated as a first run: the agent silently starts with
148
+ defaults again (it never prompts unless `--configure` is passed).
102
149
 
103
150
  ### Permission modes
104
151
 
@@ -146,9 +193,14 @@ for approval when overwriting), and `delete_file` always requires approval in
146
193
  `isWithinRoot()` strictly checks the result is under the root. Writes equal
147
194
  to the root are rejected; `..` and symlink escapes are rejected too.
148
195
  2. **Danger-command detection** — `isDangerCommand()` flags `rm -rf`, `sudo`,
149
- `format`, `del /f`, `shutdown`, `reboot`, `git reset --hard`,
150
- `git clean -fdx`, `find ... -delete`, `Remove-Item -Recurse -Force`,
151
- `diskpart`, `reg delete`, `chmod -R 777 /`, `mkfs`, `dd of=/dev/...`,
196
+ `format <drive>`, `del /f`, `rd /s /q`, `shutdown`, `reboot`,
197
+ `git reset --hard`, `git clean -fdx`, `find ... -delete`,
198
+ `Remove-Item -Recurse -Force`, `diskpart`, `reg delete`/`reg add`,
199
+ `powershell -enc`, `iex`/`Invoke-Expression`, `certutil -decode`,
200
+ `regsvr32`/`rundll32`/`mshta`/`wmic`/`bitsadmin`, `curl|wget -> sh`,
201
+ `sh/bash -c`, `sc create`, `net user`, `schtasks /create`,
202
+ `icacls`/`cacls`, `takeown`, `vssadmin`, `bcdedit`, `cipher /w`,
203
+ `taskkill /f`, `chmod -R 777 /`, `mkfs`, `dd of=/dev/...`,
152
204
  redirects to block devices, fork bombs and more. Cross-platform
153
205
  (bash / PowerShell / cmd).
154
206
  3. **Sensitive-path detection** — `isSensitivePath()` blocks system and
@@ -171,8 +223,9 @@ node dist/cli.js --selftest
171
223
 
172
224
  Runs 53 checks over path safety, danger-command detection, sensitive-path
173
225
  detection, secret masking, the tool registry, command timeout/process-tree kill,
174
- environment sanitization, config save/load + onboarding path, and idempotency
175
- over a real WebSocket connection. It prints `PASS`/`FAIL` lines and exits `0`/`1`.
226
+ environment sanitization, config resolution + save/load (never logging the token),
227
+ and idempotency over a real WebSocket connection. It prints `PASS`/`FAIL` lines
228
+ and exits `0`/`1`.
176
229
 
177
230
  ## Protocol
178
231
 
@@ -181,7 +234,7 @@ JSON text frames over a WebSocket.
181
234
  **Client → server**
182
235
 
183
236
  ```jsonc
184
- { "type": "hello", "token": "...", "deviceId": "...", "version": "0.7.0", "platform": "node" }
237
+ { "type": "hello", "token": "...", "deviceId": "...", "version": "0.7.1", "platform": "node" }
185
238
  { "type": "pong", "t": 42 } // reply to a server ping
186
239
  { "type": "tool_result", "jobId": "j1", "ok": true, "result": { }, "durationMs": 12 }
187
240
  { "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.7.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,EAAkG,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAI5I,sCAAsC;AACtC,eAAO,MAAM,aAAa,UAAU,CAAC;AAMrC,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;AAkXD;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,10 +12,8 @@ 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.7.0';
15
+ exports.AGENT_VERSION = '0.7.1';
16
16
  const MAX_IDEMPOTENCY_ENTRIES = 512;
17
- const RECONNECT_BASE_MS = 1000;
18
- const RECONNECT_CAP_MS = 60000;
19
17
  const HEARTBEAT_MS = 30000;
20
18
  const READY_OPEN = 1; // ws.WebSocket.OPEN
21
19
  class Agent {
@@ -26,11 +24,18 @@ class Agent {
26
24
  this.stopped = false;
27
25
  this.intentionalClose = false;
28
26
  this.reconnectAttempt = 0;
27
+ this.everOnline = false;
28
+ this.connectFailedReported = false;
29
29
  this.jobs = new Map();
30
30
  this.idempotencyCache = new Map();
31
+ this.candidateIndex = 0;
31
32
  this.config = config;
32
33
  this.events = events;
33
34
  this.log = (0, config_1.loggerFromConfig)(config);
35
+ // 若用的是默认线上平台地址(未自定义),则本地也兼容:先试本地 dev 后端,失败再落到默认。
36
+ const isDefault = config.server === config_1.DEFAULT_SERVER;
37
+ this.serverCandidates = isDefault ? [config_1.LOCAL_DEV_SERVER, config_1.DEFAULT_SERVER] : [config.server];
38
+ this.activeServer = this.serverCandidates[0];
34
39
  this.registry = (0, tools_1.createToolRegistry)({
35
40
  root: config.root,
36
41
  mode: config.mode,
@@ -44,6 +49,13 @@ class Agent {
44
49
  start() {
45
50
  (0, config_1.validateConfig)(this.config);
46
51
  this.log.info('starting agent', (0, config_1.describeConfig)(this.config));
52
+ // 安全提示:默认服务器是 ws://(明文)。发送设备 Token 时若目标非回环地址,
53
+ // 强烈建议用 wss://,避免企业网络中 Token 被窃听。这里仅告警,不擅自改默认值。
54
+ const host = (this.activeServer.match(/^ws:\/\/([^/:]+)/i)?.[1] || '').toLowerCase();
55
+ const loopback = host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '';
56
+ if (this.activeServer.startsWith('ws://') && !loopback && this.config.token) {
57
+ this.log.warn('正在通过明文 ws:// 发送设备 Token(非回环地址)。建议使用 wss:// 以防凭证被窃听。');
58
+ }
47
59
  this.connect();
48
60
  this.startHeartbeat();
49
61
  return { stop: () => this.stop() };
@@ -55,8 +67,9 @@ class Agent {
55
67
  this.log.debug('already connected, ignoring connect()');
56
68
  return;
57
69
  }
58
- this.log.info('connecting', { url: this.config.server });
59
- const ws = new ws_1.default(this.config.server, { handshakeTimeout: 15000, perMessageDeflate: false });
70
+ const url = this.activeServer;
71
+ this.log.info('connecting', { url });
72
+ const ws = new ws_1.default(url, { handshakeTimeout: 15000, perMessageDeflate: false });
60
73
  this.ws = ws;
61
74
  ws.on('open', () => {
62
75
  this.log.info('socket open; sending hello');
@@ -70,9 +83,13 @@ class Agent {
70
83
  });
71
84
  ws.on('unexpected-response', (_req, res) => {
72
85
  this.log.warn('unexpected ws response', { status: res.statusCode });
86
+ if (!this.everOnline)
87
+ this.reportConnectFailure(`服务器返回 ${res.statusCode}`);
73
88
  });
74
89
  ws.on('error', (err) => {
75
90
  this.log.error('ws error', { error: err.message });
91
+ if (!this.everOnline)
92
+ this.reportConnectFailure(err.message);
76
93
  });
77
94
  ws.on('close', (code, reason) => {
78
95
  this.ws = null;
@@ -84,6 +101,9 @@ class Agent {
84
101
  this.abortAllJobs();
85
102
  if (this.intentionalClose || this.stopped)
86
103
  return;
104
+ // 未连上时报告一次,然后固定间隔自动重试,直到连上为止。
105
+ if (!this.everOnline)
106
+ this.reportConnectFailure(reasonText || `连接关闭 (${code})`);
87
107
  this.scheduleReconnect();
88
108
  });
89
109
  }
@@ -133,8 +153,9 @@ class Agent {
133
153
  if (!(0, protocol_1.isWelcome)(msg))
134
154
  return;
135
155
  this.sessionId = msg.sessionId;
136
- // A successful handshake resets the backoff ramp.
156
+ // A successful handshake resets the backoff ramp and marks us reachable.
137
157
  this.reconnectAttempt = 0;
158
+ this.everOnline = true;
138
159
  this.setStatus('online');
139
160
  this.log.info('welcomed', { sessionId: this.sessionId });
140
161
  }
@@ -147,7 +168,7 @@ class Agent {
147
168
  async onToolCall(msg) {
148
169
  if (!(0, protocol_1.isToolCall)(msg))
149
170
  return;
150
- const { jobId, tool, args, idempotencyKey } = msg;
171
+ const { jobId, tool, args, idempotencyKey, root } = msg;
151
172
  const key = (0, protocol_1.computeIdempotencyKey)(tool, args ?? {}, idempotencyKey);
152
173
  if (this.idempotencyCache.has(key)) {
153
174
  const cached = this.idempotencyCache.get(key);
@@ -160,7 +181,7 @@ class Agent {
160
181
  this.jobs.set(jobId, controller);
161
182
  this.log.info('running tool', { jobId, tool });
162
183
  try {
163
- const result = await this.registry.dispatch(tool, args ?? {}, controller.signal);
184
+ const result = await this.registry.dispatch(tool, args ?? {}, controller.signal, root);
164
185
  if (controller.signal.aborted) {
165
186
  // The platform sent a cancel for this job; report it explicitly.
166
187
  this.sendResult({ ok: false, error: 'Job cancelled by platform', durationMs: result.durationMs }, jobId);
@@ -217,6 +238,21 @@ class Agent {
217
238
  this.log.warn('cancel for unknown/job already finished', { jobId: msg.jobId });
218
239
  }
219
240
  }
241
+ /**
242
+ * Report a first-connection failure exactly once and stop the agent so a
243
+ * zero-config/default run exits instead of silently reconnecting forever.
244
+ */
245
+ /**
246
+ * 报告“首次连接未建立”(仅一次),但不停止 agent:默认会按 retryMs 固定间隔自动重试,
247
+ * 直到连上平台为止(零配置/默认启动的期望行为)。
248
+ */
249
+ reportConnectFailure(msg) {
250
+ if (this.connectFailedReported)
251
+ return;
252
+ this.connectFailedReported = true;
253
+ this.log.warn('connect not established yet; will keep retrying', { error: msg });
254
+ this.events?.onConnectFailed?.(msg);
255
+ }
220
256
  /** Stop every in-flight job (used on disconnect / shutdown). */
221
257
  abortAllJobs() {
222
258
  if (this.jobs.size === 0)
@@ -275,14 +311,22 @@ class Agent {
275
311
  return;
276
312
  if (this.reconnectTimer)
277
313
  return;
278
- const delay = Math.min(RECONNECT_CAP_MS, RECONNECT_BASE_MS * Math.pow(2, this.reconnectAttempt));
314
+ // 未连上时轮流尝试候选地址(本地 dev 线上兜底,双向循环);一旦连上就固定在成功那个地址。
315
+ if (!this.everOnline && this.serverCandidates.length > 1) {
316
+ this.candidateIndex = (this.candidateIndex + 1) % this.serverCandidates.length;
317
+ this.activeServer = this.serverCandidates[this.candidateIndex];
318
+ this.log.info('trying next server candidate', { url: this.activeServer, index: this.candidateIndex });
319
+ }
320
+ // 固定间隔重试(默认 1000ms),直到连上为止;不再指数退避。
321
+ const delay = Math.max(200, this.config.retryMs);
279
322
  this.reconnectAttempt += 1;
280
- this.log.info('reconnecting', { delayMs: delay, attempt: this.reconnectAttempt });
323
+ this.log.info('reconnecting', { delayMs: delay, attempt: this.reconnectAttempt, url: this.activeServer });
281
324
  this.reconnectTimer = setTimeout(() => {
282
325
  this.reconnectTimer = undefined;
283
326
  this.connect();
284
327
  }, delay);
285
- this.reconnectTimer.unref?.();
328
+ // 注意:不要把 reconnect 计时器 unref —— 否则 socket 关闭、无其它句柄时,
329
+ // 事件循环会在重试间隔期间 drain 并退出,导致长驻 agent 无法重连。
286
330
  }
287
331
  stop() {
288
332
  this.log.info('stopping agent');
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":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA0BA,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;AAgUD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CA6YvD"}
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;AA8VD;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CA8YvD"}
package/dist/cli.js CHANGED
@@ -64,6 +64,8 @@ program
64
64
  .option('--timeout <ms>', 'command timeout in milliseconds')
65
65
  .option('--max-bytes <n>', 'per-stream output cap in bytes')
66
66
  .option('--log-level <level>', 'silent | error | warn | info | debug', 'info')
67
+ .option('--retry-interval <ms>', 'connection retry interval in milliseconds (default 1000)', '1000')
68
+ .option('--configure', 'run the interactive setup wizard and save the config')
67
69
  .option('--selftest', 'run a local self-test and exit');
68
70
  program.parse(process.argv);
69
71
  const opts = program.opts();
@@ -117,13 +119,54 @@ async function main() {
117
119
  timeoutMs: toInt(opts.timeout),
118
120
  maxBytes: toInt(opts.maxBytes),
119
121
  logLevel: asStr(opts.logLevel),
122
+ retryMs: toInt(opts.retryInterval) ?? envInt('YSAGC_RETRY_MS'),
120
123
  };
124
+ if (opts.configure) {
125
+ // Explicit opt-in wizard: prompts for address/token/root, persists, then
126
+ // connects. This is the ONLY path that ever prompts.
127
+ if (!(0, onboarding_1.isInteractiveStdin)()) {
128
+ // eslint-disable-next-line no-console
129
+ console.error('\n--configure 需要一个交互式终端来运行。');
130
+ process.exit(1);
131
+ }
132
+ const config = await (0, onboarding_1.runOnboarding)({
133
+ server: overrides.server ?? env('WS_URL'),
134
+ token: overrides.token ?? env('YSAGC_TOKEN'),
135
+ deviceId: overrides.deviceId ?? env('DEVICE_ID'),
136
+ root: overrides.root ?? env('WORKSPACE_ROOT'),
137
+ mode: overrides.mode ?? env('PERMISSION_MODE'),
138
+ preset: overrides.preset ?? env('YSAGC_PERMISSION_PRESET'),
139
+ web: overrides.web ?? envBool('YSAGC_WEB'),
140
+ timeoutMs: overrides.timeoutMs ?? envInt('YSAGC_TIMEOUT'),
141
+ maxBytes: overrides.maxBytes ?? envInt('YSAGC_MAX_BYTES'),
142
+ logLevel: overrides.logLevel ?? env('YSAGC_LOG_LEVEL'),
143
+ retryMs: overrides.retryMs ?? envInt('YSAGC_RETRY_MS'),
144
+ });
145
+ (0, config_1.saveConfig)(config);
146
+ const log = new logger_1.Logger({ level: config.logLevel, name: 'cli' });
147
+ log.info('agent config', (0, config_1.describeConfig)(config));
148
+ const handle = (0, agent_1.startAgent)(config);
149
+ process.on('SIGINT', () => shutdown(handle, 'SIGINT'));
150
+ process.on('SIGTERM', () => shutdown(handle, 'SIGTERM'));
151
+ return;
152
+ }
121
153
  try {
122
154
  const saved = (0, config_1.loadSavedConfig)();
123
- const config = await resolveConfigForRun(overrides, saved);
155
+ const { config, zeroConfig } = await resolveConfigForRun(overrides, saved);
124
156
  const log = new logger_1.Logger({ level: config.logLevel, name: 'cli' });
125
157
  log.info('agent config', (0, config_1.describeConfig)(config));
126
- const handle = (0, agent_1.startAgent)(config);
158
+ const events = zeroConfig
159
+ ? {
160
+ onConnectFailed: (err) => {
161
+ // 不再退出:默认每 retryMs(默认1s) 自动重连,直到连上为止。
162
+ const secs = (config.retryMs || 1000) / 1000;
163
+ const label = secs % 1 === 0 ? String(secs) : secs.toFixed(1);
164
+ // eslint-disable-next-line no-console
165
+ console.error(`\n暂未连接平台(${err}),正在每 ${label}s 自动重试,直到连上为止…(Ctrl+C 退出)`);
166
+ },
167
+ }
168
+ : undefined;
169
+ const handle = (0, agent_1.startAgent)(config, events);
127
170
  process.on('SIGINT', () => shutdown(handle, 'SIGINT'));
128
171
  process.on('SIGTERM', () => shutdown(handle, 'SIGTERM'));
129
172
  }
@@ -139,42 +182,26 @@ async function main() {
139
182
  }
140
183
  }
141
184
  /**
142
- * Pick the config for a run: onboard on the first run (no saved config) only
143
- * when something is missing, otherwise connect with the saved config and let
144
- * CLI/env overrides win. Never hangs on a non-interactive first run.
185
+ * Pick the config for a non-interactive run. When no saved config exists this is
186
+ * a zero-config first run: build from CLI/env/defaults, generate a local device
187
+ * identity (deviceId + self-generated token), persist it silently, and connect
188
+ * immediately — never prompting. When a config file exists, load it and let
189
+ * CLI/env overrides win on top.
145
190
  */
146
191
  async function resolveConfigForRun(overrides, saved) {
147
- const serverProvided = overrides.server ?? env('WS_URL');
148
- const tokenProvided = overrides.token ?? env('YSAGC_TOKEN');
149
192
  if (!saved) {
150
- // First run with no persisted config.
151
- const needOnboarding = !serverProvided || !tokenProvided;
152
- if (needOnboarding) {
153
- if (!(0, onboarding_1.isInteractiveStdin)()) {
154
- // eslint-disable-next-line no-console
155
- console.error('\n需要在你的终端里运行以完成首次引导(会向你询问地址/Token/工作区)');
156
- process.exit(1);
157
- }
158
- const config = await (0, onboarding_1.runOnboarding)({
159
- server: serverProvided,
160
- token: tokenProvided,
161
- deviceId: overrides.deviceId ?? env('DEVICE_ID'),
162
- root: overrides.root ?? env('WORKSPACE_ROOT'),
163
- mode: overrides.mode ?? env('PERMISSION_MODE'),
164
- preset: overrides.preset ?? env('YSAGC_PERMISSION_PRESET'),
165
- web: overrides.web ?? envBool('YSAGC_WEB'),
166
- timeoutMs: overrides.timeoutMs ?? envInt('YSAGC_TIMEOUT'),
167
- maxBytes: overrides.maxBytes ?? envInt('YSAGC_MAX_BYTES'),
168
- logLevel: overrides.logLevel ?? env('YSAGC_LOG_LEVEL'),
169
- });
170
- (0, config_1.saveConfig)(config);
171
- return config;
193
+ // Zero-config first run: no prompt. Defaults are used, a local identity is
194
+ // generated, and the resolved config is saved so later runs are zero-config
195
+ // too. CLI/env values already won inside loadConfig and are preserved.
196
+ const config = (0, config_1.loadConfig)(overrides);
197
+ if (!config.token) {
198
+ config.token = (0, config_1.generateDeviceToken)();
172
199
  }
173
- // Everything required was supplied via CLI/env; connect without onboarding.
174
- return (0, config_1.loadConfig)(overrides);
200
+ (0, config_1.saveConfig)(config);
201
+ return { config, zeroConfig: true };
175
202
  }
176
203
  // A config file exists: load it and let CLI/env overrides win on top.
177
- return (0, config_1.loadConfig)(overrides, saved);
204
+ return { config: (0, config_1.loadConfig)(overrides, saved), zeroConfig: false };
178
205
  }
179
206
  function runAndPrintSelfTest(results) {
180
207
  let failed = 0;
@@ -281,6 +308,7 @@ async function runAgentIdempotencyScenario(root) {
281
308
  timeoutMs: 10000,
282
309
  maxBytes: 8000,
283
310
  logLevel: 'error',
311
+ retryMs: 1000,
284
312
  platform: 'node',
285
313
  });
286
314
  try {
@@ -441,6 +469,7 @@ async function runSelfTest() {
441
469
  timeoutMs: 120000,
442
470
  maxBytes: 64000,
443
471
  logLevel: 'info',
472
+ retryMs: 1000,
444
473
  platform: 'node',
445
474
  };
446
475
  (0, config_1.saveConfig)(cfg);