@0xmaxma/claude-gateway 1.8.2 → 1.8.4
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 +63 -2
- package/config.template.json +4 -0
- package/dist/agent/dreaming/config.d.ts +6 -0
- package/dist/agent/dreaming/config.d.ts.map +1 -1
- package/dist/agent/dreaming/config.js +17 -24
- package/dist/agent/dreaming/config.js.map +1 -1
- package/dist/agent/knowledge/config.d.ts.map +1 -1
- package/dist/agent/knowledge/config.js +7 -13
- package/dist/agent/knowledge/config.js.map +1 -1
- package/dist/agent/runner.d.ts +87 -13
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +342 -117
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/turn-stream.d.ts +202 -0
- package/dist/agent/turn-stream.d.ts.map +1 -0
- package/dist/agent/turn-stream.js +322 -0
- package/dist/agent/turn-stream.js.map +1 -0
- package/dist/api/apps-router.d.ts.map +1 -1
- package/dist/api/apps-router.js +14 -2
- package/dist/api/apps-router.js.map +1 -1
- package/dist/api/gateway-router.d.ts.map +1 -1
- package/dist/api/gateway-router.js +2 -3
- package/dist/api/gateway-router.js.map +1 -1
- package/dist/api/line-webhook-router.d.ts +43 -1
- package/dist/api/line-webhook-router.d.ts.map +1 -1
- package/dist/api/line-webhook-router.js +286 -38
- package/dist/api/line-webhook-router.js.map +1 -1
- package/dist/api/router.d.ts +7 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +328 -114
- package/dist/api/router.js.map +1 -1
- package/dist/apps/agent-manager.d.ts.map +1 -1
- package/dist/apps/agent-manager.js +4 -1
- package/dist/apps/agent-manager.js.map +1 -1
- package/dist/apps/installer.d.ts +75 -2
- package/dist/apps/installer.d.ts.map +1 -1
- package/dist/apps/installer.js +198 -13
- package/dist/apps/installer.js.map +1 -1
- package/dist/cli/commands/debug-bundle.d.ts.map +1 -1
- package/dist/cli/commands/debug-bundle.js +9 -52
- package/dist/cli/commands/debug-bundle.js.map +1 -1
- package/dist/cli/commands/gateway.d.ts +6 -1
- package/dist/cli/commands/gateway.d.ts.map +1 -1
- package/dist/cli/commands/gateway.js +14 -3
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +37 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +356 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logs-dir.d.ts +69 -0
- package/dist/cli/logs-dir.d.ts.map +1 -0
- package/dist/cli/logs-dir.js +166 -0
- package/dist/cli/logs-dir.js.map +1 -0
- package/dist/config/agent-env.d.ts +41 -0
- package/dist/config/agent-env.d.ts.map +1 -0
- package/dist/config/agent-env.js +154 -0
- package/dist/config/agent-env.js.map +1 -0
- package/dist/config/loader.d.ts +33 -2
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +33 -9
- package/dist/config/loader.js.map +1 -1
- package/dist/config/watcher.d.ts +1 -0
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +22 -1
- package/dist/config/watcher.js.map +1 -1
- package/dist/index.js +50 -51
- package/dist/index.js.map +1 -1
- package/dist/load-dotenv.d.ts +17 -0
- package/dist/load-dotenv.d.ts.map +1 -1
- package/dist/load-dotenv.js +32 -9
- package/dist/load-dotenv.js.map +1 -1
- package/dist/logger.d.ts +52 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +264 -2
- package/dist/logger.js.map +1 -1
- package/dist/session/store.d.ts +9 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +12 -0
- package/dist/session/store.js.map +1 -1
- package/dist/shell/bypass-dialog.d.ts +234 -0
- package/dist/shell/bypass-dialog.d.ts.map +1 -0
- package/dist/shell/bypass-dialog.js +339 -0
- package/dist/shell/bypass-dialog.js.map +1 -0
- package/dist/shell/claude-pty-shell.js +67 -3
- package/dist/shell/claude-pty-shell.js.map +1 -1
- package/dist/shell/screen.d.ts +22 -11
- package/dist/shell/screen.d.ts.map +1 -1
- package/dist/shell/screen.js +50 -32
- package/dist/shell/screen.js.map +1 -1
- package/dist/types.d.ts +40 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/config-num.d.ts +22 -0
- package/dist/utils/config-num.d.ts.map +1 -0
- package/dist/utils/config-num.js +34 -0
- package/dist/utils/config-num.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -135,6 +135,7 @@ Once installed, drive it through the CLI — it detects whichever manager owns t
|
|
|
135
135
|
claude-gateway gateway status # manager, URL, health
|
|
136
136
|
claude-gateway gateway restart
|
|
137
137
|
claude-gateway gateway stop
|
|
138
|
+
claude-gateway gateway logs # tail the gateway's own log (works even when it is dead)
|
|
138
139
|
```
|
|
139
140
|
|
|
140
141
|
Managing PM2 directly still works too:
|
|
@@ -214,6 +215,12 @@ Config lives at `~/.claude-gateway/config.json` (or set `GATEWAY_CONFIG` env var
|
|
|
214
215
|
"configVersion": "1.0.0",
|
|
215
216
|
"gateway": {
|
|
216
217
|
"logDir": "~/.claude-gateway/logs",
|
|
218
|
+
"logs": {
|
|
219
|
+
"level": "info",
|
|
220
|
+
"maxFileBytes": 16777216,
|
|
221
|
+
"maxFiles": 3,
|
|
222
|
+
"retentionDays": 14
|
|
223
|
+
},
|
|
217
224
|
"timezone": "Asia/Bangkok",
|
|
218
225
|
"api": {
|
|
219
226
|
"keys": [
|
|
@@ -277,6 +284,31 @@ public base — e.g. LINE, which derives its host from the inbound webhook — b
|
|
|
277
284
|
`<base>/shared/<token>` themselves. HTTP is accepted only for local development
|
|
278
285
|
hosts such as `http://host.docker.internal:10850/gateway`.
|
|
279
286
|
|
|
287
|
+
### `gateway.logs` (optional)
|
|
288
|
+
|
|
289
|
+
Verbosity, rotation and retention for the files in `logDir`. The whole block is optional —
|
|
290
|
+
omit it and the defaults below apply.
|
|
291
|
+
|
|
292
|
+
| Field | Default | Description |
|
|
293
|
+
|-------|---------|-------------|
|
|
294
|
+
| `level` | `"info"` | Minimum level written, to both the file and stdout. One of `debug`, `info`, `warn`, `error` |
|
|
295
|
+
| `maxFileBytes` | `16777216` (16 MiB) | Rotate `<name>.log` to `<name>.log.1` once an append would carry it past this size |
|
|
296
|
+
| `maxFiles` | `3` | Rotated generations kept per stream; the oldest is deleted. Lowering it collects the generations it orphans at the next rotation. `0` = keep none |
|
|
297
|
+
| `retentionDays` | `14` | Delete logs (live and rotated) older than this, at boot and once a day. `0` = keep forever |
|
|
298
|
+
|
|
299
|
+
`level` is the one that governs disk usage. Session processes log every stream event at `debug`,
|
|
300
|
+
which on a live host measured 19,995 `debug` lines to 5 `info` lines inside a single 217 MB file —
|
|
301
|
+
so `debug` is off by default. Set `"level": "debug"` when you are actually chasing something, and
|
|
302
|
+
expect the directory to grow quickly while it is on. Rotation and retention bound what is *kept*;
|
|
303
|
+
only the level bounds what is *written*.
|
|
304
|
+
|
|
305
|
+
Retention is age-based because each session writes its own `<agent>:session:<uuid>.log` and never
|
|
306
|
+
returns to it — `maxFiles` prunes generations of one stream, so it can never reach them.
|
|
307
|
+
|
|
308
|
+
This block is **hot-reloaded**: edit it in `config.json` and it applies on the next config reload,
|
|
309
|
+
no restart. That matters because turning the level up is something you do while chasing a live
|
|
310
|
+
problem, and a restart would kill the sessions you are trying to observe.
|
|
311
|
+
|
|
280
312
|
### `session`
|
|
281
313
|
|
|
282
314
|
| Field | Default | Description |
|
|
@@ -348,6 +380,8 @@ Controls the Claude subprocess backend for all non-app agents.
|
|
|
348
380
|
|
|
349
381
|
`--dangerously-skip-permissions` is always injected by the gateway automatically — there is no per-agent config field for it.
|
|
350
382
|
|
|
383
|
+
In PTY mode that flag makes Claude Code open a "Bypass Permissions mode" confirmation dialog at startup, which the wrapper accepts on your behalf. How it is accepted depends on the Claude Code build: releases up to **2.1.247** render numbered options (`1. No, exit` / `2. Yes, I accept`) and are accepted with the digit, while **2.1.248 and newer** drop the numbers, so the wrapper walks the caret onto the accept row and only then presses Enter. If a future release changes the dialog beyond what the wrapper recognises, it deliberately sends **no** keystroke and leaves the dialog on screen rather than risk selecting "No, exit" (which would exit Claude Code) — set `PTY_SHELL_SKIP_DIALOG_DISMISS=1` to turn the auto-accept off entirely.
|
|
384
|
+
|
|
351
385
|
```json
|
|
352
386
|
{
|
|
353
387
|
"gateway": {
|
|
@@ -571,7 +605,9 @@ Each key has a `key` string (supports `${ENV_VAR}` interpolation), an optional `
|
|
|
571
605
|
|
|
572
606
|
### Bot tokens
|
|
573
607
|
|
|
574
|
-
Tokens are stored per-agent at `~/.claude-gateway/agents/<id>/.env` and auto-loaded at startup. Use `${AGENT_BOT_TOKEN}` syntax in config to reference them, or set them as shell environment variables.
|
|
608
|
+
Tokens are stored per-agent at `~/.claude-gateway/agents/<id>/.env` and auto-loaded at startup **and before every config reload** — so an agent added to `config.json` while the gateway is running starts without a restart, even though its token only exists in a brand-new `.env`. Use `${AGENT_BOT_TOKEN}` syntax in config to reference them, or set them as shell environment variables. Lines are `KEY=value`; `#` comments and blank lines are ignored, and surrounding quotes are stripped, the same as in `~/.claude-gateway/.env`.
|
|
609
|
+
|
|
610
|
+
A variable you exported yourself always wins over the `.env` file and is never replaced by a reload. A token the gateway did read from a `.env` is refreshed when that file changes, so **rotating a token takes effect on the next config reload** rather than at the next restart. Note that only `config.json` is watched — editing a `.env` by hand applies on the following reload, while the MCP `agent_create` / `agent_update` tools write both files and so take effect immediately. If a `${VAR}` cannot be resolved from anywhere, that one agent is skipped — the rest of the gateway starts normally — and the skip is logged to `logs/gateway.log` with the name of the missing variable.
|
|
575
611
|
|
|
576
612
|
---
|
|
577
613
|
|
|
@@ -711,6 +747,7 @@ The `claude-gateway` binary doubles as a command-line client for a running gatew
|
|
|
711
747
|
claude-gateway # help (never starts a server)
|
|
712
748
|
claude-gateway gateway start # run the gateway in the foreground
|
|
713
749
|
claude-gateway gateway status # is it running? which manager owns it?
|
|
750
|
+
claude-gateway gateway logs --follow # stream the gateway log (reads files, needs no server)
|
|
714
751
|
claude-gateway service install # run it as a systemd-user (or --manager pm2) service
|
|
715
752
|
claude-gateway update check # newer claude-gateway published?
|
|
716
753
|
claude-gateway claude update # update Claude Code via its own updater
|
|
@@ -723,6 +760,28 @@ claude-gateway debug-bundle # small redacted bundle for a stuck s
|
|
|
723
760
|
claude-gateway api GET /v1/agents # escape hatch: call any endpoint directly
|
|
724
761
|
```
|
|
725
762
|
|
|
763
|
+
### Reading the logs
|
|
764
|
+
|
|
765
|
+
`gateway logs` reads the log files directly, so it answers whether or not the gateway is
|
|
766
|
+
running — which is usually exactly when you need it.
|
|
767
|
+
|
|
768
|
+
```bash
|
|
769
|
+
claude-gateway gateway logs # last 50 lines of logs/gateway.log
|
|
770
|
+
claude-gateway gateway logs --lines 200 --follow # more history, then stream
|
|
771
|
+
claude-gateway gateway logs --agent alfred # that agent's stream instead
|
|
772
|
+
claude-gateway gateway logs --json # the stored JSON lines, verbatim
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
Each line is stored as one JSON object and rendered as `<ts> <LEVEL> <message>` with `data`
|
|
776
|
+
appended; `--json` prints the stored line unchanged, for piping into `jq`. `--agent <id>` takes
|
|
777
|
+
any stream id in the log directory — agents (`alfred`), receivers (`alfred:receiver`), and
|
|
778
|
+
sessions (`alfred:session:<uuid>`) each get their own file — and an unknown id lists the ids that
|
|
779
|
+
do exist rather than reporting an empty result. `--follow` survives a rotation: when the file it
|
|
780
|
+
is watching is renamed away it reopens the new one instead of going quiet.
|
|
781
|
+
|
|
782
|
+
Unlike `debug-bundle`, this output is **not redacted** — it is the local file you could already
|
|
783
|
+
`cat`. Skim before pasting it anywhere.
|
|
784
|
+
|
|
726
785
|
> **Upgrading from < 1.8:** a service unit that runs the binary with no command still starts the
|
|
727
786
|
> gateway, with a deprecation warning. Point `ExecStart` at `claude-gateway gateway start`, or
|
|
728
787
|
> reinstall the unit with `claude-gateway service install`.
|
|
@@ -957,6 +1016,7 @@ claude-gateway/
|
|
|
957
1016
|
├── config.json ← gateway config
|
|
958
1017
|
├── logs/
|
|
959
1018
|
│ ├── alfred.log
|
|
1019
|
+
│ ├── alfred.log.1 ← rotated generation (see `gateway.logs`)
|
|
960
1020
|
│ └── warrior.log
|
|
961
1021
|
├── shared-skills/ ← shared skills (synced to ~/.claude/skills/ on boot and on change)
|
|
962
1022
|
│ └── <skill-name>/
|
|
@@ -1146,7 +1206,8 @@ sees a message. If those aren't met the bot looks online but stays silent.
|
|
|
1146
1206
|
|
|
1147
1207
|
**LINE limits**
|
|
1148
1208
|
- Inbound arrives via the Express **webhook**, not polling; the signature is verified over the **exact raw bytes**. Front it with the bun CORS proxy (see `/tunnel`) — never point cloudflared straight at the gateway, or chunked bodies break the signature and webhooks are dropped.
|
|
1149
|
-
-
|
|
1209
|
+
- Handled inbound message types are **text, image, and file** (documents up to the 20 MB media cap). Sticker, video, audio, and location are ignored. LINE reports no MIME type for a file, so its extension is derived from the sender-supplied name and sanitized before use. A file the gateway cannot fetch (too large, empty, or a failed transfer) still reaches the agent — as a message that says the attachment is unavailable, rather than one that looks like a file waiting to be read.
|
|
1210
|
+
- Group/room `requireMention` uses LINE's **native mention** only (`mention.mentionees[].isSelf`). Typing the bot's name as plain text does **not** count, and `@All` does **not** count as a bot mention. LINE attaches mentions to **text messages only**, so an image or file posted in a group cannot satisfy the gate — send media in a DM, or set `requireMention: false` for that agent.
|
|
1150
1211
|
- Delivery is **reply-token-first (free) → push fallback (metered)**. The single-use reply token lives only ~1 min; after that, replies consume the OA's monthly push quota.
|
|
1151
1212
|
- Max **5 message objects** per reply/push request (the gateway auto-chunks to fit).
|
|
1152
1213
|
|
package/config.template.json
CHANGED
|
@@ -10,6 +10,12 @@ import type { DreamingConfig, ResolvedDreamingCfg, ResolvedStalenessCfg, Stalene
|
|
|
10
10
|
/** Built-in staleness-GC defaults (planning-66). */
|
|
11
11
|
export declare const STALENESS_DEFAULTS: ResolvedStalenessCfg;
|
|
12
12
|
export declare const DREAMING_DEFAULTS: ResolvedDreamingCfg;
|
|
13
|
+
/**
|
|
14
|
+
* Numeric config sanitation lives in {@link numOr} (`src/utils/config-num.ts`).
|
|
15
|
+
* Critical for `dreamHour`, which feeds the scheduler delay — a NaN there would
|
|
16
|
+
* make `setTimeout` fire immediately and the async reviewer fan out in a tight
|
|
17
|
+
* reschedule loop.
|
|
18
|
+
*/
|
|
13
19
|
/**
|
|
14
20
|
* Resolve the staleness-GC sub-config (planning-66). Booleans fall back to the
|
|
15
21
|
* default when absent/non-boolean; numerics are sanitized like the parent config.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent/dreaming/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent/dreaming/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1G,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,EAAE,oBAQhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,mBAe/B,CAAC;AASF;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,CAAC,EAAE,eAAe,EAC1B,SAAS,CAAC,EAAE,eAAe,GAC1B,oBAAoB,CAoBtB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,CAAC,EAAE,cAAc,EACzB,SAAS,CAAC,EAAE,cAAc,GACzB,mBAAmB,CA+BrB"}
|
|
@@ -12,6 +12,7 @@ exports.DREAMING_DEFAULTS = exports.STALENESS_DEFAULTS = void 0;
|
|
|
12
12
|
exports.resolveStalenessConfig = resolveStalenessConfig;
|
|
13
13
|
exports.resolveDreamingConfig = resolveDreamingConfig;
|
|
14
14
|
const config_1 = require("../skill-learning/config");
|
|
15
|
+
const config_num_1 = require("../../utils/config-num");
|
|
15
16
|
/** Built-in staleness-GC defaults (planning-66). */
|
|
16
17
|
exports.STALENESS_DEFAULTS = {
|
|
17
18
|
enabled: true,
|
|
@@ -47,19 +48,11 @@ function pick(agent, global, fallback) {
|
|
|
47
48
|
return fallback;
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* fan out in a tight reschedule loop.
|
|
51
|
+
* Numeric config sanitation lives in {@link numOr} (`src/utils/config-num.ts`).
|
|
52
|
+
* Critical for `dreamHour`, which feeds the scheduler delay — a NaN there would
|
|
53
|
+
* make `setTimeout` fire immediately and the async reviewer fan out in a tight
|
|
54
|
+
* reschedule loop.
|
|
55
55
|
*/
|
|
56
|
-
function numOr(value, fallback, min, max) {
|
|
57
|
-
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
58
|
-
return fallback;
|
|
59
|
-
if (value < min || value > max)
|
|
60
|
-
return fallback;
|
|
61
|
-
return value;
|
|
62
|
-
}
|
|
63
56
|
/**
|
|
64
57
|
* Resolve the staleness-GC sub-config (planning-66). Booleans fall back to the
|
|
65
58
|
* default when absent/non-boolean; numerics are sanitized like the parent config.
|
|
@@ -72,12 +65,12 @@ function resolveStalenessConfig(agentCfg, globalCfg) {
|
|
|
72
65
|
};
|
|
73
66
|
return {
|
|
74
67
|
enabled: bool(agentCfg?.enabled, globalCfg?.enabled, d.enabled),
|
|
75
|
-
staleTtlDays: numOr(pick(agentCfg?.staleTtlDays, globalCfg?.staleTtlDays, d.staleTtlDays), d.staleTtlDays, 0, Infinity),
|
|
76
|
-
keepImportance: numOr(pick(agentCfg?.keepImportance, globalCfg?.keepImportance, d.keepImportance), d.keepImportance, 0, 10),
|
|
77
|
-
minRetrievalKeep: numOr(pick(agentCfg?.minRetrievalKeep, globalCfg?.minRetrievalKeep, d.minRetrievalKeep), d.minRetrievalKeep, 0, Infinity),
|
|
68
|
+
staleTtlDays: (0, config_num_1.numOr)(pick(agentCfg?.staleTtlDays, globalCfg?.staleTtlDays, d.staleTtlDays), d.staleTtlDays, 0, Infinity),
|
|
69
|
+
keepImportance: (0, config_num_1.numOr)(pick(agentCfg?.keepImportance, globalCfg?.keepImportance, d.keepImportance), d.keepImportance, 0, 10),
|
|
70
|
+
minRetrievalKeep: (0, config_num_1.numOr)(pick(agentCfg?.minRetrievalKeep, globalCfg?.minRetrievalKeep, d.minRetrievalKeep), d.minRetrievalKeep, 0, Infinity),
|
|
78
71
|
supersession: bool(agentCfg?.supersession, globalCfg?.supersession, d.supersession),
|
|
79
72
|
recordRetrievals: bool(agentCfg?.recordRetrievals, globalCfg?.recordRetrievals, d.recordRetrievals),
|
|
80
|
-
maxInvalidationsPerRun: numOr(pick(agentCfg?.maxInvalidationsPerRun, globalCfg?.maxInvalidationsPerRun, d.maxInvalidationsPerRun), d.maxInvalidationsPerRun, 0, Infinity),
|
|
73
|
+
maxInvalidationsPerRun: (0, config_num_1.numOr)(pick(agentCfg?.maxInvalidationsPerRun, globalCfg?.maxInvalidationsPerRun, d.maxInvalidationsPerRun), d.maxInvalidationsPerRun, 0, Infinity),
|
|
81
74
|
};
|
|
82
75
|
}
|
|
83
76
|
function resolveDreamingConfig(agentCfg, globalCfg) {
|
|
@@ -88,21 +81,21 @@ function resolveDreamingConfig(agentCfg, globalCfg) {
|
|
|
88
81
|
enabled: pick(agentCfg?.enabled, globalCfg?.enabled, d.enabled),
|
|
89
82
|
mode: mode === 'auto' ? 'auto' : 'propose', // anything but 'auto' is 'propose'
|
|
90
83
|
// dreamHour feeds the scheduler delay — must be a finite hour 0..23.
|
|
91
|
-
dreamHour: numOr(pick(agentCfg?.dreamHour, globalCfg?.dreamHour, d.dreamHour), d.dreamHour, 0, 23),
|
|
84
|
+
dreamHour: (0, config_num_1.numOr)(pick(agentCfg?.dreamHour, globalCfg?.dreamHour, d.dreamHour), d.dreamHour, 0, 23),
|
|
92
85
|
// dreamMinute pairs with dreamHour for minute-level scheduling — clamp 0..59.
|
|
93
|
-
dreamMinute: numOr(pick(agentCfg?.dreamMinute, globalCfg?.dreamMinute, d.dreamMinute), d.dreamMinute, 0, 59),
|
|
86
|
+
dreamMinute: (0, config_num_1.numOr)(pick(agentCfg?.dreamMinute, globalCfg?.dreamMinute, d.dreamMinute), d.dreamMinute, 0, 59),
|
|
94
87
|
dreamTimezone: (0, config_1.isValidTimezone)(rawTz) ? rawTz : 'UTC',
|
|
95
|
-
quietMinutes: numOr(pick(agentCfg?.quietMinutes, globalCfg?.quietMinutes, d.quietMinutes), d.quietMinutes, 0, Infinity),
|
|
96
|
-
lookbackDays: numOr(pick(agentCfg?.lookbackDays, globalCfg?.lookbackDays, d.lookbackDays), d.lookbackDays, 0, Infinity),
|
|
97
|
-
maxChangesPerRun: numOr(pick(agentCfg?.maxChangesPerRun, globalCfg?.maxChangesPerRun, d.maxChangesPerRun), d.maxChangesPerRun, 0, Infinity),
|
|
88
|
+
quietMinutes: (0, config_num_1.numOr)(pick(agentCfg?.quietMinutes, globalCfg?.quietMinutes, d.quietMinutes), d.quietMinutes, 0, Infinity),
|
|
89
|
+
lookbackDays: (0, config_num_1.numOr)(pick(agentCfg?.lookbackDays, globalCfg?.lookbackDays, d.lookbackDays), d.lookbackDays, 0, Infinity),
|
|
90
|
+
maxChangesPerRun: (0, config_num_1.numOr)(pick(agentCfg?.maxChangesPerRun, globalCfg?.maxChangesPerRun, d.maxChangesPerRun), d.maxChangesPerRun, 0, Infinity),
|
|
98
91
|
reviewModel: pick(agentCfg?.reviewModel, globalCfg?.reviewModel, d.reviewModel),
|
|
99
|
-
promotionThreshold: numOr(pick(agentCfg?.promotionThreshold, globalCfg?.promotionThreshold, d.promotionThreshold), d.promotionThreshold, 0, 1),
|
|
100
|
-
minRecallCount: numOr(pick(agentCfg?.minRecallCount, globalCfg?.minRecallCount, d.minRecallCount), d.minRecallCount, 0, Infinity),
|
|
92
|
+
promotionThreshold: (0, config_num_1.numOr)(pick(agentCfg?.promotionThreshold, globalCfg?.promotionThreshold, d.promotionThreshold), d.promotionThreshold, 0, 1),
|
|
93
|
+
minRecallCount: (0, config_num_1.numOr)(pick(agentCfg?.minRecallCount, globalCfg?.minRecallCount, d.minRecallCount), d.minRecallCount, 0, Infinity),
|
|
101
94
|
// planning-67: boolean-safe (ignore non-boolean JSON), default true.
|
|
102
95
|
autoRouteOut: [agentCfg?.autoRouteOut, globalCfg?.autoRouteOut].find((v) => typeof v === 'boolean') ??
|
|
103
96
|
d.autoRouteOut,
|
|
104
97
|
// planning-68: clamp to [0,55] so the jitter never crosses into the next hour.
|
|
105
|
-
staggerWindowMinutes: numOr(pick(agentCfg?.staggerWindowMinutes, globalCfg?.staggerWindowMinutes, d.staggerWindowMinutes), d.staggerWindowMinutes, 0, 55),
|
|
98
|
+
staggerWindowMinutes: (0, config_num_1.numOr)(pick(agentCfg?.staggerWindowMinutes, globalCfg?.staggerWindowMinutes, d.staggerWindowMinutes), d.staggerWindowMinutes, 0, 55),
|
|
106
99
|
staleness: resolveStalenessConfig(agentCfg?.staleness, globalCfg?.staleness),
|
|
107
100
|
};
|
|
108
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/agent/dreaming/config.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/agent/dreaming/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent/knowledge/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/agent/knowledge/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,EAAE,2BAK9B,CAAC;AAWF,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,sBAAsB,EACjC,SAAS,CAAC,EAAE,sBAAsB,GACjC,2BAA2B,CAuB7B;AAID,eAAO,MAAM,eAAe,EAAE,0BAO7B,CAAC;AAcF,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,qBAAqB,EAChC,SAAS,CAAC,EAAE,qBAAqB,GAChC,0BAA0B,CAmB5B;AAID,eAAO,MAAM,mBAAmB,EAAE,8BAQjC,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,QAAQ,CAAC,EAAE,yBAAyB,EACpC,SAAS,CAAC,EAAE,yBAAyB,GACpC,8BAA8B,CAiBhC;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,GAAG,EAAE,0BAA0B,GAAG,MAAM,CAEtE;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,GAAG,EAAE,0BAA0B,GAAG,MAAM,CAEpE;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,0BAA0B,GAAG,MAAM,CAEtE"}
|
|
@@ -53,6 +53,7 @@ const path = __importStar(require("path"));
|
|
|
53
53
|
const config_1 = require("../dreaming/config");
|
|
54
54
|
const config_2 = require("../skill-learning/config");
|
|
55
55
|
const paths_1 = require("../../utils/paths");
|
|
56
|
+
const config_num_1 = require("../../utils/config-num");
|
|
56
57
|
exports.ARCHIVE_DEFAULTS = {
|
|
57
58
|
enabled: true,
|
|
58
59
|
tokenizer: 'unicode61', // "trigram" evaluated for Thai/CJK before locking (planning-64 D5)
|
|
@@ -68,21 +69,14 @@ function pick(agent, global, fallback) {
|
|
|
68
69
|
return global;
|
|
69
70
|
return fallback;
|
|
70
71
|
}
|
|
71
|
-
function numOr(value, fallback, min, max) {
|
|
72
|
-
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
73
|
-
return fallback;
|
|
74
|
-
if (value < min || value > max)
|
|
75
|
-
return fallback;
|
|
76
|
-
return value;
|
|
77
|
-
}
|
|
78
72
|
function resolveArchiveConfig(agentCfg, globalCfg) {
|
|
79
73
|
const d = exports.ARCHIVE_DEFAULTS;
|
|
80
74
|
const rawTokenizer = pick(agentCfg?.tokenizer, globalCfg?.tokenizer, d.tokenizer);
|
|
81
|
-
const chunkTokens = numOr(pick(agentCfg?.chunkTokens, globalCfg?.chunkTokens, d.chunkTokens), d.chunkTokens, 16, // a tokenizer window below this is not a meaningful chunk
|
|
75
|
+
const chunkTokens = (0, config_num_1.numOr)(pick(agentCfg?.chunkTokens, globalCfg?.chunkTokens, d.chunkTokens), d.chunkTokens, 16, // a tokenizer window below this is not a meaningful chunk
|
|
82
76
|
100000);
|
|
83
77
|
// Overlap must be strictly less than the chunk window, else the chunker cannot
|
|
84
78
|
// advance and would loop; clamp to [0, chunkTokens-1].
|
|
85
|
-
const rawOverlap = numOr(pick(agentCfg?.chunkOverlap, globalCfg?.chunkOverlap, d.chunkOverlap), d.chunkOverlap, 0, 100000);
|
|
79
|
+
const rawOverlap = (0, config_num_1.numOr)(pick(agentCfg?.chunkOverlap, globalCfg?.chunkOverlap, d.chunkOverlap), d.chunkOverlap, 0, 100000);
|
|
86
80
|
return {
|
|
87
81
|
enabled: pick(agentCfg?.enabled, globalCfg?.enabled, d.enabled),
|
|
88
82
|
tokenizer: ALLOWED_TOKENIZERS.has(rawTokenizer) ? rawTokenizer : d.tokenizer,
|
|
@@ -142,11 +136,11 @@ function resolveReflectionConfig(agentCfg, globalCfg) {
|
|
|
142
136
|
const rawTz = pick(agentCfg?.timezone, globalCfg?.timezone, d.timezone);
|
|
143
137
|
return {
|
|
144
138
|
enabled: pick(agentCfg?.enabled, globalCfg?.enabled, d.enabled),
|
|
145
|
-
dayOfWeek: numOr(pick(agentCfg?.dayOfWeek, globalCfg?.dayOfWeek, d.dayOfWeek), d.dayOfWeek, 0, 6),
|
|
146
|
-
hour: numOr(pick(agentCfg?.hour, globalCfg?.hour, d.hour), d.hour, 0, 23),
|
|
147
|
-
minute: numOr(pick(agentCfg?.minute, globalCfg?.minute, d.minute), d.minute, 0, 59),
|
|
139
|
+
dayOfWeek: (0, config_num_1.numOr)(pick(agentCfg?.dayOfWeek, globalCfg?.dayOfWeek, d.dayOfWeek), d.dayOfWeek, 0, 6),
|
|
140
|
+
hour: (0, config_num_1.numOr)(pick(agentCfg?.hour, globalCfg?.hour, d.hour), d.hour, 0, 23),
|
|
141
|
+
minute: (0, config_num_1.numOr)(pick(agentCfg?.minute, globalCfg?.minute, d.minute), d.minute, 0, 59),
|
|
148
142
|
timezone: (0, config_2.isValidTimezone)(rawTz) ? rawTz : d.timezone,
|
|
149
|
-
maxClustersPerRun: numOr(pick(agentCfg?.maxClustersPerRun, globalCfg?.maxClustersPerRun, d.maxClustersPerRun), d.maxClustersPerRun, 0, 1000),
|
|
143
|
+
maxClustersPerRun: (0, config_num_1.numOr)(pick(agentCfg?.maxClustersPerRun, globalCfg?.maxClustersPerRun, d.maxClustersPerRun), d.maxClustersPerRun, 0, 1000),
|
|
150
144
|
reviewModel: pick(agentCfg?.reviewModel, globalCfg?.reviewModel, d.reviewModel),
|
|
151
145
|
};
|
|
152
146
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/agent/knowledge/config.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/agent/knowledge/config.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/runner.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import { AgentConfig, GatewayConfig, Logger, ModelConfig,
|
|
2
|
+
import { AgentConfig, GatewayConfig, Logger, ModelConfig, ApiAttachment, ImageParams } from '../types';
|
|
3
3
|
import { type SkillRegistry } from '../skills';
|
|
4
|
+
import { type ApiStreamCallbacks, type TurnSink } from './turn-stream';
|
|
4
5
|
import { type CliChannel } from '../cli-viewer/pairing-store';
|
|
5
6
|
import { HistoryDB } from '../history/db';
|
|
6
7
|
import type { ChatChannel } from '../history/types';
|
|
@@ -45,6 +46,7 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
45
46
|
private readonly maxConcurrent;
|
|
46
47
|
private idleCleanerTimer;
|
|
47
48
|
private readonly pendingApiSessions;
|
|
49
|
+
private readonly turnStreams;
|
|
48
50
|
private readonly sessionSpawnLocks;
|
|
49
51
|
private readonly tooLargeRecoveries;
|
|
50
52
|
private readonly tooLargeExhausted;
|
|
@@ -161,6 +163,20 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
161
163
|
* a queued turn exists so no incoming message can inject concurrently.
|
|
162
164
|
*/
|
|
163
165
|
private flushNextTurn;
|
|
166
|
+
/**
|
|
167
|
+
* Delete a channel's throwaway staging copy of an inbound attachment, once
|
|
168
|
+
* MediaStore holds the permanent one.
|
|
169
|
+
*
|
|
170
|
+
* Opt-in via `meta.media_ephemeral === '1'` — only a channel that created the
|
|
171
|
+
* file under the system temp dir sets it, and only for a path it built itself.
|
|
172
|
+
* Meta arrives over the local /channel intake, so the flag alone is not
|
|
173
|
+
* authority to unlink: the path is resolved (symlinks included) and must sit
|
|
174
|
+
* INSIDE the real temp dir, which bounds a forged flag to deleting something
|
|
175
|
+
* already in a world-writable scratch directory. Every failure is swallowed —
|
|
176
|
+
* a leftover temp file is a wart, and a throw here would abort recording the
|
|
177
|
+
* turn that was already delivered.
|
|
178
|
+
*/
|
|
179
|
+
private static discardEphemeralStaging;
|
|
164
180
|
/**
|
|
165
181
|
* Inject one coalesced turn into the session immediately. The caller must have
|
|
166
182
|
* already marked the chat active in `turnActive`. Records each buffered message
|
|
@@ -441,24 +457,70 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
441
457
|
* Send a message to an API session and stream back events via callbacks.
|
|
442
458
|
*
|
|
443
459
|
* Returns a disconnect handler for the caller to wire to the SSE close event.
|
|
444
|
-
*
|
|
460
|
+
* It detaches this caller's sink; the turn keeps running, keeps buffering, and
|
|
461
|
+
* stays re-attachable via attachTurnStream() until the replay grace window
|
|
462
|
+
* expires (#421).
|
|
445
463
|
*/
|
|
446
|
-
sendApiMessageStream(sessionId: string, chatId: string, message: string, callbacks: {
|
|
447
|
-
onChunk: (event: StreamEvent) => void;
|
|
448
|
-
onDone: (fullText: string, attachments: ApiAttachment[]) => void;
|
|
449
|
-
onError: (err: Error) => void;
|
|
450
|
-
}, opts: {
|
|
464
|
+
sendApiMessageStream(sessionId: string, chatId: string, message: string, callbacks: ApiStreamCallbacks, opts: {
|
|
451
465
|
timeoutMs: number;
|
|
452
466
|
allowTools?: boolean;
|
|
453
467
|
mediaFiles?: string[];
|
|
454
468
|
model?: string;
|
|
455
469
|
skipUserMessage?: boolean;
|
|
456
470
|
imageParams?: ImageParams;
|
|
471
|
+
requestId?: string;
|
|
457
472
|
}): Promise<() => void>;
|
|
458
473
|
/**
|
|
459
474
|
* Check if a session has a pending API request (for preflight conflict check).
|
|
460
475
|
*/
|
|
461
476
|
hasActiveApiSession(sessionId: string): boolean;
|
|
477
|
+
/**
|
|
478
|
+
* Attach a sink to a session's current turn stream (#421) — the server half of
|
|
479
|
+
* "resume a turn on a new connection".
|
|
480
|
+
*
|
|
481
|
+
* Replays every buffered event after `afterSeq` and then, if the turn is still
|
|
482
|
+
* running, installs `sink` as the live one. Both happen in one synchronous
|
|
483
|
+
* block inside TurnStream.attach, so nothing can slip through the seam.
|
|
484
|
+
*
|
|
485
|
+
* Returns a `detach` handler on success, or a reason the attach could not be
|
|
486
|
+
* honoured:
|
|
487
|
+
* - `gone` — no record: the turn never existed, or its replay grace
|
|
488
|
+
* window has expired. The client should read history instead.
|
|
489
|
+
* - `mismatch` — a record exists but for a different request_id, i.e. the
|
|
490
|
+
* turn the client asked for is already over.
|
|
491
|
+
* - `truncated` — a non-zero cursor sits inside a region the bounded buffer
|
|
492
|
+
* has already evicted, so a gapless replay is impossible. A
|
|
493
|
+
* cursor-less attach is never truncated: it has no seam to
|
|
494
|
+
* keep, and takes whatever tail is still buffered.
|
|
495
|
+
*
|
|
496
|
+
* Looks only under the `api` namespace: this is the API resume endpoint, and a
|
|
497
|
+
* channel turn on the same session id is a different turn (see turnStreamKey).
|
|
498
|
+
*/
|
|
499
|
+
attachTurnStream(sessionId: string, sink: TurnSink, opts?: {
|
|
500
|
+
afterSeq?: number;
|
|
501
|
+
requestId?: string;
|
|
502
|
+
}): {
|
|
503
|
+
ok: true;
|
|
504
|
+
requestId: string;
|
|
505
|
+
detach: () => void;
|
|
506
|
+
} | {
|
|
507
|
+
ok: false;
|
|
508
|
+
reason: 'gone' | 'mismatch' | 'truncated' | 'ahead';
|
|
509
|
+
};
|
|
510
|
+
/**
|
|
511
|
+
* Identity and wall-clock start of the session's current API turn, or undefined
|
|
512
|
+
* when there is no resumable record.
|
|
513
|
+
*
|
|
514
|
+
* The resume endpoint needs both *before* it attaches, because attach() replays
|
|
515
|
+
* synchronously into a sink built from them: `startedAt` so a replayed terminal
|
|
516
|
+
* frame reports `duration_ms` for the turn rather than for the reconnect, and
|
|
517
|
+
* `requestId` so a client that reconnected without one still learns the token it
|
|
518
|
+
* needs to resume again from a cursor.
|
|
519
|
+
*/
|
|
520
|
+
turnStreamInfo(sessionId: string): {
|
|
521
|
+
requestId: string;
|
|
522
|
+
startedAt: number;
|
|
523
|
+
} | undefined;
|
|
462
524
|
/**
|
|
463
525
|
* Register file paths as attachments for the current API session turn.
|
|
464
526
|
* Called by the api_reply MCP tool via the attachments endpoint.
|
|
@@ -476,6 +538,12 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
476
538
|
* assistant row so history never ends on a dangling user message.
|
|
477
539
|
* System-initiated turns (skipUserMessage) have nothing dangling to close —
|
|
478
540
|
* only the buffer is drained.
|
|
541
|
+
*
|
|
542
|
+
* `partialText` is whatever the turn already streamed before it died. It is
|
|
543
|
+
* prepended rather than discarded, so the single row this writes carries both
|
|
544
|
+
* the work the client saw and the notice — never a failure row that erases a
|
|
545
|
+
* half-finished reply, and never a failure row *plus* a separate reply row
|
|
546
|
+
* (the callers' `settled` guard makes done() and fail() mutually exclusive).
|
|
479
547
|
*/
|
|
480
548
|
private persistFailedApiTurn;
|
|
481
549
|
popApiAttachments(sessionId: string): ApiAttachment[];
|
|
@@ -550,6 +618,12 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
550
618
|
private selectableModels;
|
|
551
619
|
setModel(newModel: string): Promise<void>;
|
|
552
620
|
listApiSessions(chatId: string): Promise<import('../types').SessionIndex>;
|
|
621
|
+
/**
|
|
622
|
+
* Does `sessionId` already exist under `chatId`? The API layer calls this before
|
|
623
|
+
* honouring a client-supplied `session_id`, so an unknown id is rejected instead
|
|
624
|
+
* of silently becoming a brand-new session. Read-only — it never registers.
|
|
625
|
+
*/
|
|
626
|
+
apiSessionExists(chatId: string, sessionId: string): Promise<boolean>;
|
|
553
627
|
createApiSession(chatId: string, prompt?: string, name?: string): Promise<import('../types').SessionMeta>;
|
|
554
628
|
private generateSessionNameInBackground;
|
|
555
629
|
getApiSessionInfo(chatId: string, sessionId: string): Promise<Record<string, unknown> | null>;
|
|
@@ -563,14 +637,14 @@ export declare class AgentRunner extends EventEmitter {
|
|
|
563
637
|
/**
|
|
564
638
|
* Send a message into an existing channel session (cross-channel continuation from UI).
|
|
565
639
|
* The session process receives full history context from the session JSON (Layer 1).
|
|
566
|
-
* The reply is streamed back via SSE callbacks
|
|
640
|
+
* The reply is streamed back via SSE callbacks; persistence is *not* this
|
|
641
|
+
* method's job. A channel session already has two session-bound writers — the
|
|
642
|
+
* long-lived output handler installed in spawnSession, and SessionProcess's own
|
|
643
|
+
* parser — and writing here as well produced a second row per turn. See done().
|
|
567
644
|
*/
|
|
568
|
-
sendMessageToSession(rawChatId: string, channel: ChatChannel, sessionId: string, message: string, senderName: string | undefined, callbacks: {
|
|
569
|
-
onChunk: (event: StreamEvent) => void;
|
|
570
|
-
onDone: (fullText: string) => void;
|
|
571
|
-
onError: (err: Error) => void;
|
|
572
|
-
}, opts: {
|
|
645
|
+
sendMessageToSession(rawChatId: string, channel: ChatChannel, sessionId: string, message: string, senderName: string | undefined, callbacks: ApiStreamCallbacks, opts: {
|
|
573
646
|
timeoutMs: number;
|
|
647
|
+
requestId?: string;
|
|
574
648
|
}): Promise<() => void>;
|
|
575
649
|
private _applyStreamEvent;
|
|
576
650
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
|