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 +74 -21
- package/dist/agent.d.ts +5 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +55 -11
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +61 -32
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -5
- package/dist/config.js.map +1 -1
- package/dist/onboarding.d.ts +1 -0
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +1 -0
- package/dist/onboarding.js.map +1 -1
- package/dist/protocol.d.ts +2 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +116 -4
- package/dist/security.js.map +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +22 -4
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
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
|
-
- **
|
|
14
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
90
|
+
Any value already supplied by flags/env is used as-is and its prompt is skipped.
|
|
50
91
|
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
> **
|
|
58
|
-
>
|
|
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
|
|
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
|
-
|
|
99
|
-
(mode `0600`, directory created
|
|
100
|
-
|
|
101
|
-
first run
|
|
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
|
|
150
|
-
`git clean -fdx`, `find ... -delete`,
|
|
151
|
-
`diskpart`, `reg delete
|
|
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
|
|
175
|
-
over a real WebSocket connection. It prints `PASS`/`FAIL` lines
|
|
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.
|
|
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.
|
|
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. */
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";
|
|
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
|
|
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
|
|
143
|
-
*
|
|
144
|
-
*
|
|
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
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
174
|
-
return
|
|
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);
|