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 +80 -14
- package/dist/agent.d.ts +5 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +29 -2
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +201 -13
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +38 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +132 -23
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/onboarding.d.ts +38 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +218 -0
- package/dist/onboarding.js.map +1 -0
- package/package.json +1 -1
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
|
-
###
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
|
105
|
+
node dist/cli.js # same zero-config auto-connect
|
|
54
106
|
```
|
|
55
107
|
|
|
56
108
|
## Configuration
|
|
57
109
|
|
|
58
|
-
Settings
|
|
59
|
-
|
|
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` |
|
|
64
|
-
| `--token <token>` | `YSAGC_TOKEN` | _(
|
|
65
|
-
| `--device-id <id>` | `DEVICE_ID` | host+pid
|
|
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
|
|
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,
|
|
148
|
-
It prints `PASS`/`FAIL` lines
|
|
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.
|
|
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.
|
|
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,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;
|
|
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.
|
|
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":"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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;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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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)({
|