@te-river/opencode-team-mode 1.7.2 → 1.7.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 +1008 -849
- package/README.zh-CN.md +905 -756
- package/dist/host/v2-browser-gate.d.ts +4 -1
- package/dist/host/v2-browser-gate.d.ts.map +1 -1
- package/dist/host/v2-browser-gate.js +1 -1
- package/dist/host/v2-browser-gate.js.map +1 -1
- package/dist/host/v2-capabilities.js +1 -1
- package/dist/host/v2-capabilities.js.map +1 -1
- package/dist/host/v2-events.d.ts +8 -2
- package/dist/host/v2-events.d.ts.map +1 -1
- package/dist/host/v2-events.js +16 -2
- package/dist/host/v2-events.js.map +1 -1
- package/dist/host/v2-guard.d.ts +3 -45
- package/dist/host/v2-guard.d.ts.map +1 -1
- package/dist/host/v2-guard.js +10 -73
- package/dist/host/v2-guard.js.map +1 -1
- package/dist/host/v2-offload.d.ts +12 -2
- package/dist/host/v2-offload.d.ts.map +1 -1
- package/dist/host/v2-offload.js +9 -9
- package/dist/host/v2-offload.js.map +1 -1
- package/dist/host/v2-probe-chain.d.ts +5 -1
- package/dist/host/v2-probe-chain.d.ts.map +1 -1
- package/dist/host/v2-probe-chain.js +4 -6
- package/dist/host/v2-probe-chain.js.map +1 -1
- package/dist/host/v2-probe.d.ts.map +1 -1
- package/dist/host/v2-probe.js +2 -1
- package/dist/host/v2-probe.js.map +1 -1
- package/dist/host/v2-prune.d.ts +5 -1
- package/dist/host/v2-prune.d.ts.map +1 -1
- package/dist/host/v2-prune.js +8 -14
- package/dist/host/v2-prune.js.map +1 -1
- package/dist/host/v2-retry.d.ts +10 -3
- package/dist/host/v2-retry.d.ts.map +1 -1
- package/dist/host/v2-retry.js +14 -16
- package/dist/host/v2-retry.js.map +1 -1
- package/dist/host/v2-session.d.ts +6 -2
- package/dist/host/v2-session.d.ts.map +1 -1
- package/dist/host/v2-session.js +7 -13
- package/dist/host/v2-session.js.map +1 -1
- package/dist/host/v2.d.ts +0 -5
- package/dist/host/v2.d.ts.map +1 -1
- package/dist/host/v2.js +32 -73
- package/dist/host/v2.js.map +1 -1
- package/dist/prompts/lead.d.ts +1 -1
- package/dist/prompts/lead.d.ts.map +1 -1
- package/dist/prompts/lead.js +47 -19
- package/dist/prompts/lead.js.map +1 -1
- package/dist/prompts/shared.d.ts +1 -1
- package/dist/prompts/shared.d.ts.map +1 -1
- package/dist/prompts/shared.js +16 -0
- package/dist/prompts/shared.js.map +1 -1
- package/dist/prompts/specialists.d.ts +1 -1
- package/dist/prompts/specialists.d.ts.map +1 -1
- package/dist/prompts/specialists.js +1 -1
- package/dist/tm/args-schema.d.ts +1 -1
- package/dist/tm/args-schema.js +6 -6
- package/dist/tm/args-schema.js.map +1 -1
- package/dist/tm/board.js +2 -2
- package/dist/tm/board.js.map +1 -1
- package/dist/tm/config-files.d.ts +41 -17
- package/dist/tm/config-files.d.ts.map +1 -1
- package/dist/tm/config-files.js +68 -73
- package/dist/tm/config-files.js.map +1 -1
- package/dist/tm/config-layers.d.ts +65 -33
- package/dist/tm/config-layers.d.ts.map +1 -1
- package/dist/tm/config-layers.js +164 -81
- package/dist/tm/config-layers.js.map +1 -1
- package/dist/tm/config-template.d.ts +32 -0
- package/dist/tm/config-template.d.ts.map +1 -0
- package/dist/tm/config-template.js +74 -0
- package/dist/tm/config-template.js.map +1 -0
- package/dist/tm/config.d.ts +113 -140
- package/dist/tm/config.d.ts.map +1 -1
- package/dist/tm/config.js +100 -200
- package/dist/tm/config.js.map +1 -1
- package/dist/tm/dispatch.d.ts +0 -9
- package/dist/tm/dispatch.d.ts.map +1 -1
- package/dist/tm/dispatch.js +14 -16
- package/dist/tm/dispatch.js.map +1 -1
- package/dist/tm/index.d.ts +12 -12
- package/dist/tm/index.d.ts.map +1 -1
- package/dist/tm/index.js +48 -26
- package/dist/tm/index.js.map +1 -1
- package/dist/tm/ledger.d.ts +7 -3
- package/dist/tm/ledger.d.ts.map +1 -1
- package/dist/tm/ledger.js +5 -4
- package/dist/tm/ledger.js.map +1 -1
- package/dist/tm/memory.js +3 -3
- package/dist/tm/pipelines.js +1 -1
- package/dist/tm/search.js +6 -6
- package/dist/tm/search.js.map +1 -1
- package/dist/tm/stats.js +2 -2
- package/dist/tm/stats.js.map +1 -1
- package/dist/tm/tools.js +2 -2
- package/dist/tm/webfetch.d.ts +5 -2
- package/dist/tm/webfetch.d.ts.map +1 -1
- package/dist/tm/webfetch.js +24 -18
- package/dist/tm/webfetch.js.map +1 -1
- package/docs/installation-v2.md +59 -38
- package/docs/installation.md +4 -4
- package/package.json +1 -1
- package/scripts/gen-v2-config.mjs +8 -7
- package/dist/approval-gate.d.ts +0 -205
- package/dist/approval-gate.d.ts.map +0 -1
- package/dist/approval-gate.js +0 -627
- package/dist/approval-gate.js.map +0 -1
- package/dist/host/v1.d.ts +0 -14
- package/dist/host/v1.d.ts.map +0 -1
- package/dist/host/v1.js +0 -340
- package/dist/host/v1.js.map +0 -1
- package/dist/host/v2-client.d.ts +0 -53
- package/dist/host/v2-client.d.ts.map +0 -1
- package/dist/host/v2-client.js +0 -193
- package/dist/host/v2-client.js.map +0 -1
- package/dist/host/v2-transcript.d.ts +0 -73
- package/dist/host/v2-transcript.d.ts.map +0 -1
- package/dist/host/v2-transcript.js +0 -151
- package/dist/host/v2-transcript.js.map +0 -1
- package/dist/host-hooks.d.ts +0 -126
- package/dist/host-hooks.d.ts.map +0 -1
- package/dist/host-hooks.js +0 -284
- package/dist/host-hooks.js.map +0 -1
- package/dist/tm/bash-timeout.d.ts +0 -72
- package/dist/tm/bash-timeout.d.ts.map +0 -1
- package/dist/tm/bash-timeout.js +0 -100
- package/dist/tm/bash-timeout.js.map +0 -1
- package/dist/tm/browser.d.ts +0 -642
- package/dist/tm/browser.d.ts.map +0 -1
- package/dist/tm/browser.js +0 -2836
- package/dist/tm/browser.js.map +0 -1
- package/dist/tm/ptc/budgets.d.ts +0 -59
- package/dist/tm/ptc/budgets.d.ts.map +0 -1
- package/dist/tm/ptc/budgets.js +0 -138
- package/dist/tm/ptc/budgets.js.map +0 -1
- package/dist/tm/ptc/contract.d.ts +0 -171
- package/dist/tm/ptc/contract.d.ts.map +0 -1
- package/dist/tm/ptc/contract.js +0 -85
- package/dist/tm/ptc/contract.js.map +0 -1
- package/dist/tm/ptc/driver.d.ts +0 -40
- package/dist/tm/ptc/driver.d.ts.map +0 -1
- package/dist/tm/ptc/driver.js +0 -213
- package/dist/tm/ptc/driver.js.map +0 -1
- package/dist/tm/ptc/engines.d.ts +0 -43
- package/dist/tm/ptc/engines.d.ts.map +0 -1
- package/dist/tm/ptc/engines.js +0 -454
- package/dist/tm/ptc/engines.js.map +0 -1
- package/dist/tm/ptc/gate.d.ts +0 -28
- package/dist/tm/ptc/gate.d.ts.map +0 -1
- package/dist/tm/ptc/gate.js +0 -130
- package/dist/tm/ptc/gate.js.map +0 -1
- package/dist/tm/ptc/index.d.ts +0 -19
- package/dist/tm/ptc/index.d.ts.map +0 -1
- package/dist/tm/ptc/index.js +0 -15
- package/dist/tm/ptc/index.js.map +0 -1
- package/dist/tm/ptc/pscan.d.ts +0 -30
- package/dist/tm/ptc/pscan.d.ts.map +0 -1
- package/dist/tm/ptc/pscan.js +0 -341
- package/dist/tm/ptc/pscan.js.map +0 -1
- package/dist/tm/ptc/summary.d.ts +0 -17
- package/dist/tm/ptc/summary.d.ts.map +0 -1
- package/dist/tm/ptc/summary.js +0 -134
- package/dist/tm/ptc/summary.js.map +0 -1
- package/dist/tm/ptc/tool.d.ts +0 -66
- package/dist/tm/ptc/tool.d.ts.map +0 -1
- package/dist/tm/ptc/tool.js +0 -231
- package/dist/tm/ptc/tool.js.map +0 -1
- package/dist/tm/ptc.d.ts +0 -298
- package/dist/tm/ptc.d.ts.map +0 -1
- package/dist/tm/ptc.js +0 -865
- package/dist/tm/ptc.js.map +0 -1
- package/dist/tm/pty.d.ts +0 -70
- package/dist/tm/pty.d.ts.map +0 -1
- package/dist/tm/pty.js +0 -245
- package/dist/tm/pty.js.map +0 -1
- package/dist/tool-coerce.d.ts +0 -24
- package/dist/tool-coerce.d.ts.map +0 -1
- package/dist/tool-coerce.js +0 -63
- package/dist/tool-coerce.js.map +0 -1
package/dist/tm/config.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JIT layer-2 tools (T1.2 + T1.3) — configuration surface.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* `team-mode.jsonc` is the ONLY configuration source. The registry in
|
|
5
|
+
* `config-layers.ts` carries each key's default and doc; `resolveConfig`
|
|
6
|
+
* validates, clamps and fills defaults from it. There is no `TM_*` config
|
|
7
|
+
* env var any more (the three internal/test switches — TM_STORE_RECLAIM,
|
|
8
|
+
* TM_V2_PROBE, TM_CONFIG_AUTOCREATE — are read where they are used, not here).
|
|
9
|
+
*
|
|
10
|
+
* Invalid values never crash plugin startup: a non-numeric number falls back to
|
|
11
|
+
* its default, an out-of-range number is CLAMPED to `min`/`max`, a wrong
|
|
12
|
+
* type falls back to the default (same fail-soft philosophy as
|
|
13
|
+
* blackboard.resolveTtlMs and envprotect.resolveEnvProtectMode).
|
|
8
14
|
*
|
|
9
15
|
* Token 口径 (estimate basis): CJK-range code points ≈ one token each,
|
|
10
16
|
* everything else tokens ≈ chars/4, ceil. Pure chars/4 under-counted CJK
|
|
@@ -14,157 +20,21 @@
|
|
|
14
20
|
* (estimate == threshold still offloads) and the hard preview cap. This
|
|
15
21
|
* 口径 is pinned by test-tm-tools.mjs.
|
|
16
22
|
*
|
|
17
|
-
* Naming note:
|
|
23
|
+
* Naming note: `blackboardDir` (this module, run-payload store, default
|
|
18
24
|
* AUTO = `<repo>/.git/opencode-team/blackboard`) is a DIFFERENT artifact
|
|
19
25
|
* from the team blackboard in blackboard.ts (`.git/opencode-team/`,
|
|
20
26
|
* plugin options). They share a root philosophy (TTL sweeper is the sole
|
|
21
27
|
* cleanup path), not code.
|
|
22
28
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"Measure-Object", "Select-Object", "Where-Object", "Sort-Object",
|
|
29
|
-
"Group-Object", "Test-Path",
|
|
30
|
-
// Process LISTING, read-only and write-free. An agent verifying that a
|
|
31
|
-
// process really exited (a leftover browser, a stray server) had no allowed
|
|
32
|
-
// way to ask the OS, and a claim the user cannot check is worth less than one
|
|
33
|
-
// they can. findstr joins it for the same reason: `tasklist | findstr /i
|
|
34
|
-
// msedge` is the natural Windows spelling of that check, and refusing it only
|
|
35
|
-
// turned one call into two (live evidence: refused, then re-run with
|
|
36
|
-
// Select-String).
|
|
37
|
-
"tasklist", "ps", "findstr",
|
|
38
|
-
];
|
|
39
|
-
/**
|
|
40
|
-
* Seeded tm_webfetch / tm_search domain allowlist — every host the search
|
|
41
|
-
* engines and data sources ride (all reachable from mainland China without
|
|
42
|
-
* API keys): wiki term / bilibili search / bing CN + international / baidu /
|
|
43
|
-
* sogou / 360, the npm registry (JSON search + package metadata) and the
|
|
44
|
-
* GitHub (search API + repo pages + raw/gist content), its ghproxy.net
|
|
45
|
-
* mainland mirror, and PARENT domains for baidu/moegirl so every sibling
|
|
46
|
-
* subdomain (baike./tieba./mzh./mobile.) is covered — real sessions showed
|
|
47
|
-
* agents bouncing off baike.baidu.com and mzh.moegirl.org.cn (the agent-install flow points
|
|
48
|
-
* agents at the installation guide on exactly these hosts). A site's OWN
|
|
49
|
-
* asset CDN on a brand-unrelated domain has to be seeded too — same-site
|
|
50
|
-
* cannot infer it, and blocking it is what makes a page render blank
|
|
51
|
-
* (bdimg.com below is that case, measured). Subdomains of
|
|
52
|
-
* an entry are included;
|
|
53
|
-
* TM_WEBFETCH_ALLOWED_DOMAINS overrides the list (comma/semicolon
|
|
54
|
-
* separated; a lone "*" opens every host — keep the engine hosts or
|
|
55
|
-
* tm_search's engines lose their targets).
|
|
56
|
-
*/
|
|
57
|
-
export const DEFAULT_WEBFETCH_DOMAINS = [
|
|
58
|
-
// CN search engines + content (parent domains cover every sibling subdomain)
|
|
59
|
-
"baidu.com", // www. search / baike. encyclopedia / tieba. — real sessions hit baike.baidu.com
|
|
60
|
-
// Baidu's OWN static + anti-spam CDN. Not a subdomain of baidu.com, so a
|
|
61
|
-
// same-site subresource policy can never infer it, and a page whose own
|
|
62
|
-
// bundle we block is a blank page we then report as "no content" — that is
|
|
63
|
-
// the bug this seed closes (measured 2026-09-23: baike.baidu.com/ rendered 0
|
|
64
|
-
// addressable nodes while the identical client with this host allowed
|
|
65
|
-
// rendered 260).
|
|
66
|
-
"bdimg.com", // bkssl. challenge scripts / resource. / static. asset bundles
|
|
67
|
-
"moegirl.org.cn", // mobile. term / mzh. main site — real sessions hit mzh
|
|
68
|
-
"bilibili.com", // search. / www. video pages / space.
|
|
69
|
-
"www.sogou.com",
|
|
70
|
-
"www.so.com",
|
|
71
|
-
"cn.bing.com",
|
|
72
|
-
"www.bing.com",
|
|
73
|
-
"zhihu.com", // CN Q&A
|
|
74
|
-
"juejin.cn", // CN dev community
|
|
75
|
-
"csdn.net", // CN dev blogs
|
|
76
|
-
"cnblogs.com", // CN dev blogs
|
|
77
|
-
"gitee.com", // CN code hosting
|
|
78
|
-
// international dev sources (reachable from CN, no API keys)
|
|
79
|
-
"github.com",
|
|
80
|
-
"api.github.com",
|
|
81
|
-
"raw.githubusercontent.com",
|
|
82
|
-
"gist.githubusercontent.com",
|
|
83
|
-
"ghproxy.net", // mainland mirror for github raw
|
|
84
|
-
"stackoverflow.com",
|
|
85
|
-
"npmjs.org", // registry. + www. package pages
|
|
86
|
-
"pypi.org",
|
|
87
|
-
"learn.microsoft.com",
|
|
88
|
-
];
|
|
89
|
-
export const TM_CONFIG_DEFAULTS = {
|
|
90
|
-
offloadThreshold: 2000,
|
|
91
|
-
previewLines: 20,
|
|
92
|
-
previewMaxTokens: 80,
|
|
93
|
-
fetchMaxLines: 2000,
|
|
94
|
-
// Empty string = AUTO: resolve git-aware at runtime —
|
|
95
|
-
// <repo>/.git/opencode-team/{blackboard,trajectory} (tmpdir fallback for
|
|
96
|
-
// non-git workspaces). Keeps the payload/trajectory stores out of the
|
|
97
|
-
// user's working tree (user projects never had .blackboard/.trajectory
|
|
98
|
-
// gitignore entries). An explicit TM_BLACKBOARD_DIR / TM_TRAJECTORY_DIR
|
|
99
|
-
// keeps the old semantics: absolute, or relative to the project root.
|
|
100
|
-
blackboardDir: "",
|
|
101
|
-
trajectoryDir: "",
|
|
102
|
-
blackboardTtlDays: 7,
|
|
103
|
-
// ---- P0 upgrade knobs (see TmConfig doc comments for ownership) ----
|
|
104
|
-
memorySessionTtlMin: 240,
|
|
105
|
-
memoryMaxEntries: 200,
|
|
106
|
-
memoryStaleDays: 30,
|
|
107
|
-
memorySessionPersist: "",
|
|
108
|
-
searchDefaultEngine: "auto",
|
|
109
|
-
searchMaxHits: 10,
|
|
110
|
-
searchWeights: {},
|
|
111
|
-
searchDisabledEngines: [],
|
|
112
|
-
// 0.35: a hit with zero query overlap keeps just over a third of its
|
|
113
|
-
// engine weight — demoted, never deleted (see TmConfig.searchRelevanceFloor).
|
|
114
|
-
searchRelevanceFloor: 0.35,
|
|
115
|
-
// Literal fallbacks used ONLY when the global TM_OFFLOAD_THRESHOLD is
|
|
116
|
-
// unset. When the global IS set and a tier env is not, resolveTmConfig
|
|
117
|
-
// derives that tier from the global (inherit — Wave B M1) instead of
|
|
118
|
-
// applying these.
|
|
119
|
-
offloadThresholdText: 4000,
|
|
120
|
-
offloadThresholdData: 2000,
|
|
121
|
-
webCacheTtlSec: 300,
|
|
122
|
-
joinMaxWaitMs: 60_000,
|
|
123
|
-
boardMaxChars: 200_000,
|
|
124
|
-
boardMaxFiles: 200,
|
|
125
|
-
taskOffload: "on",
|
|
126
|
-
storeReclaim: "on",
|
|
127
|
-
// ORPHANED: approval-gate.ts resolveAskTimeoutMs (its only consumer) was
|
|
128
|
-
// deleted with the v1 personality. Kept so an existing config still parses.
|
|
129
|
-
askTimeoutFloorMin: 1,
|
|
130
|
-
// The GENERAL bash cap stays off by default (a real build may legitimately
|
|
131
|
-
// need minutes); the probe cap ships on because a read-only probe never
|
|
132
|
-
// needs the host's 120 s default. Both are ms; 0 = off.
|
|
133
|
-
bashTimeoutMaxMs: 0,
|
|
134
|
-
bashTimeoutProbeMs: 60_000,
|
|
135
|
-
};
|
|
136
|
-
function envInt(env, key, def, min, max) {
|
|
137
|
-
const raw = env[key];
|
|
138
|
-
if (typeof raw !== "string" || raw.trim() === "")
|
|
139
|
-
return def;
|
|
140
|
-
const n = Number(raw.trim());
|
|
141
|
-
if (!Number.isFinite(n))
|
|
142
|
-
return def;
|
|
143
|
-
const i = Math.trunc(n);
|
|
144
|
-
if (i < min || i > max)
|
|
145
|
-
return def;
|
|
146
|
-
return i;
|
|
147
|
-
}
|
|
148
|
-
function envStr(env, key, def) {
|
|
149
|
-
const raw = env[key];
|
|
150
|
-
if (typeof raw !== "string")
|
|
151
|
-
return def;
|
|
152
|
-
const v = raw.trim();
|
|
153
|
-
return v === "" ? def : v;
|
|
154
|
-
}
|
|
155
|
-
/** Float sibling of envInt (fraction knobs like the relevance floor). */
|
|
156
|
-
function envNum(env, key, def, min, max) {
|
|
157
|
-
const raw = env[key];
|
|
158
|
-
if (typeof raw !== "string" || raw.trim() === "")
|
|
159
|
-
return def;
|
|
160
|
-
const n = Number(raw.trim());
|
|
161
|
-
if (!Number.isFinite(n) || n < min || n > max)
|
|
162
|
-
return def;
|
|
163
|
-
return n;
|
|
164
|
-
}
|
|
29
|
+
import { CONFIG_KEYS, DEFAULT_BASH_READONLY_ALLOWED, DEFAULT_WEBFETCH_DOMAINS, isPlainObject, } from "./config-layers.js";
|
|
30
|
+
export { DEFAULT_BASH_READONLY_ALLOWED, DEFAULT_WEBFETCH_DOMAINS };
|
|
31
|
+
/** The registry's defaults, keyed by canonical key. Derived from
|
|
32
|
+
* `CONFIG_KEYS` so a default can never drift from its spec. */
|
|
33
|
+
export const TM_CONFIG_DEFAULTS = Object.fromEntries(CONFIG_KEYS.map((k) => [k.key, k.default]));
|
|
165
34
|
/** TM_SEARCH_WEIGHTS — `bing=0.2,hn=0.3` into a partial weight table. A
|
|
166
35
|
* malformed pair is dropped (not the whole var), so one typo cannot silently
|
|
167
|
-
* flatten every custom weight back to the built-in table.
|
|
36
|
+
* flatten every custom weight back to the built-in table. Kept for the
|
|
37
|
+
* string form; a file value is native JSON and skips this. */
|
|
168
38
|
export function parseWeightsEnv(raw) {
|
|
169
39
|
const out = {};
|
|
170
40
|
if (typeof raw !== "string")
|
|
@@ -180,10 +50,10 @@ export function parseWeightsEnv(raw) {
|
|
|
180
50
|
return out;
|
|
181
51
|
}
|
|
182
52
|
/**
|
|
183
|
-
* Parse a comma/semicolon-separated allowlist
|
|
53
|
+
* Parse a comma/semicolon-separated allowlist string. Unset/absent -> null
|
|
184
54
|
* (caller applies the default). An explicitly EMPTY string parses to []
|
|
185
|
-
* (deny-all) — an explicit user choice is respected.
|
|
186
|
-
*
|
|
55
|
+
* (deny-all) — an explicit user choice is respected. Kept for the string
|
|
56
|
+
* form; a file value is native JSON and skips this.
|
|
187
57
|
*/
|
|
188
58
|
export function parseAllowlistEnv(raw) {
|
|
189
59
|
if (typeof raw !== "string")
|
|
@@ -192,60 +62,90 @@ export function parseAllowlistEnv(raw) {
|
|
|
192
62
|
}
|
|
193
63
|
/** Historical alias — identical grammar to parseAllowlistEnv. */
|
|
194
64
|
export const parseWebfetchAllowlistEnv = parseAllowlistEnv;
|
|
195
|
-
/** Resolve the full tm-tools config from an env-like record (default: process.env). */
|
|
196
|
-
export function resolveTmConfig(env = process.env) {
|
|
197
|
-
const allowlist = parseAllowlistEnv(env.TM_BASH_READONLY_ALLOWED);
|
|
198
|
-
const globalOffload = envInt(env, "TM_OFFLOAD_THRESHOLD", TM_CONFIG_DEFAULTS.offloadThreshold, 0, 10_000_000);
|
|
199
|
-
// Wave B M1 fix — TIER INHERITANCE. The TEXT/DATA classes inherit the
|
|
200
|
-
// global boundary when the user set TM_OFFLOAD_THRESHOLD but left a tier
|
|
201
|
-
// env UNSET: a user who raised the global to 8000 to save tokens must not
|
|
202
|
-
// have prose silently capped back to 4000 (and json to 2000). With the
|
|
203
|
-
// global ALSO unset the documented per-class defaults stand (4000 text /
|
|
204
|
-
// 2000 data — data equals the old baseline so the no-env behavior is the
|
|
205
|
-
// T4 tiering the §6m-t tests pin). An explicit tier env always wins.
|
|
206
|
-
const globalOffloadSet = typeof env.TM_OFFLOAD_THRESHOLD === "string" && env.TM_OFFLOAD_THRESHOLD.trim() !== "";
|
|
207
|
-
const textTierDefault = globalOffloadSet ? globalOffload : TM_CONFIG_DEFAULTS.offloadThresholdText;
|
|
208
|
-
const dataTierDefault = globalOffloadSet ? globalOffload : TM_CONFIG_DEFAULTS.offloadThresholdData;
|
|
209
|
-
return {
|
|
210
|
-
offloadThreshold: globalOffload,
|
|
211
|
-
previewLines: envInt(env, "TM_PREVIEW_LINES", TM_CONFIG_DEFAULTS.previewLines, 1, 1000),
|
|
212
|
-
previewMaxTokens: envInt(env, "TM_PREVIEW_MAX_TOKENS", TM_CONFIG_DEFAULTS.previewMaxTokens, 10, 100_000),
|
|
213
|
-
fetchMaxLines: envInt(env, "TM_FETCH_MAX_LINES", TM_CONFIG_DEFAULTS.fetchMaxLines, 1, 1_000_000),
|
|
214
|
-
blackboardDir: envStr(env, "TM_BLACKBOARD_DIR", TM_CONFIG_DEFAULTS.blackboardDir),
|
|
215
|
-
trajectoryDir: envStr(env, "TM_TRAJECTORY_DIR", TM_CONFIG_DEFAULTS.trajectoryDir),
|
|
216
|
-
blackboardTtlDays: envInt(env, "TM_BLACKBOARD_TTL", TM_CONFIG_DEFAULTS.blackboardTtlDays, 1, 365),
|
|
217
|
-
bashReadonlyAllowed: allowlist ?? [...DEFAULT_BASH_READONLY_ALLOWED],
|
|
218
|
-
webfetchAllowedDomains: parseAllowlistEnv(env.TM_WEBFETCH_ALLOWED_DOMAINS) ?? [...DEFAULT_WEBFETCH_DOMAINS],
|
|
219
|
-
memoryGlobalDir: envStr(env, "TM_MEMORY_GLOBAL_DIR", ""),
|
|
220
|
-
// ---- P0 upgrade knobs (fail-soft like the rest: invalid -> default) ----
|
|
221
|
-
memorySessionTtlMin: envInt(env, "TM_MEMORY_SESSION_TTL_MIN", TM_CONFIG_DEFAULTS.memorySessionTtlMin, 1, 100_000),
|
|
222
|
-
memoryMaxEntries: envInt(env, "TM_MEMORY_MAX_ENTRIES", TM_CONFIG_DEFAULTS.memoryMaxEntries, 1, 100_000),
|
|
223
|
-
memoryStaleDays: envInt(env, "TM_MEMORY_STALE_DAYS", TM_CONFIG_DEFAULTS.memoryStaleDays, 0, 3650),
|
|
224
|
-
memorySessionPersist: envStr(env, "TM_MEMORY_SESSION_PERSIST", TM_CONFIG_DEFAULTS.memorySessionPersist),
|
|
225
|
-
searchDefaultEngine: envStr(env, "TM_SEARCH_DEFAULT_ENGINE", TM_CONFIG_DEFAULTS.searchDefaultEngine),
|
|
226
|
-
searchMaxHits: envInt(env, "TM_SEARCH_MAX_HITS", TM_CONFIG_DEFAULTS.searchMaxHits, 3, 30),
|
|
227
|
-
searchWeights: parseWeightsEnv(env.TM_SEARCH_WEIGHTS),
|
|
228
|
-
searchDisabledEngines: parseAllowlistEnv(env.TM_SEARCH_DISABLED_ENGINES) ?? [],
|
|
229
|
-
searchRelevanceFloor: envNum(env, "TM_SEARCH_RELEVANCE_FLOOR", TM_CONFIG_DEFAULTS.searchRelevanceFloor, 0, 1),
|
|
230
|
-
offloadThresholdText: envInt(env, "TM_OFFLOAD_THRESHOLD_TEXT", textTierDefault, 0, 10_000_000),
|
|
231
|
-
offloadThresholdData: envInt(env, "TM_OFFLOAD_THRESHOLD_DATA", dataTierDefault, 0, 10_000_000),
|
|
232
|
-
webCacheTtlSec: envInt(env, "TM_WEB_CACHE_TTL_SEC", TM_CONFIG_DEFAULTS.webCacheTtlSec, 0, 86_400),
|
|
233
|
-
joinMaxWaitMs: envInt(env, "TM_JOIN_MAX_WAIT_MS", TM_CONFIG_DEFAULTS.joinMaxWaitMs, 0, 600_000),
|
|
234
|
-
boardMaxChars: envInt(env, "TM_BOARD_MAX_CHARS", TM_CONFIG_DEFAULTS.boardMaxChars, 1_000, 2_000_000),
|
|
235
|
-
boardMaxFiles: envInt(env, "TM_BOARD_MAX_FILES", TM_CONFIG_DEFAULTS.boardMaxFiles, 4, 2_000),
|
|
236
|
-
taskOffload: resolveOnOff(env.TM_TASK_OFFLOAD),
|
|
237
|
-
storeReclaim: resolveOnOff(env.TM_STORE_RECLAIM),
|
|
238
|
-
askTimeoutFloorMin: envInt(env, "TM_ASK_TIMEOUT_FLOOR_MIN", TM_CONFIG_DEFAULTS.askTimeoutFloorMin, 1, 1440),
|
|
239
|
-
bashTimeoutMaxMs: envInt(env, "TM_BASH_TIMEOUT_MAX_MS", TM_CONFIG_DEFAULTS.bashTimeoutMaxMs, 0, 3_600_000),
|
|
240
|
-
bashTimeoutProbeMs: envInt(env, "TM_BASH_TIMEOUT_PROBE_MS", TM_CONFIG_DEFAULTS.bashTimeoutProbeMs, 0, 600_000),
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
65
|
/** TM_PTC_WEB_BRIDGE — off only on an explicit off-ish value; unset or
|
|
244
66
|
* invalid keeps the bridge on (fail-soft toward the newer default). */
|
|
245
|
-
function resolveOnOff(raw) {
|
|
67
|
+
export function resolveOnOff(raw) {
|
|
246
68
|
const v = typeof raw === "string" ? raw.trim().toLowerCase() : "";
|
|
247
69
|
return v === "off" || v === "0" || v === "false" ? "off" : "on";
|
|
248
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Coerce ONE raw value against its spec. `undefined`/`null` -> the default.
|
|
73
|
+
* A `number` is truncated when the default is an integer, then clamped to
|
|
74
|
+
* `min`/`max`; a non-numeric value falls back to the default. A `string`
|
|
75
|
+
* with an `enum` must match (case-insensitively; on/off also accept the
|
|
76
|
+
* 0/1/false/true/no/yes spellings); otherwise the default. A `string[]`
|
|
77
|
+
* must be an array of strings; a `record` a plain object of numbers.
|
|
78
|
+
*/
|
|
79
|
+
export function coerceValue(spec, raw) {
|
|
80
|
+
if (raw === undefined || raw === null)
|
|
81
|
+
return spec.default;
|
|
82
|
+
switch (spec.type) {
|
|
83
|
+
case "number": {
|
|
84
|
+
if (typeof raw === "string" && raw.trim() === "")
|
|
85
|
+
return spec.default;
|
|
86
|
+
const n = typeof raw === "number" ? raw : Number(String(raw).trim());
|
|
87
|
+
if (!Number.isFinite(n))
|
|
88
|
+
return spec.default;
|
|
89
|
+
let v = Number.isInteger(spec.default) ? Math.trunc(n) : n;
|
|
90
|
+
if (spec.min !== undefined)
|
|
91
|
+
v = Math.max(spec.min, v);
|
|
92
|
+
if (spec.max !== undefined)
|
|
93
|
+
v = Math.min(spec.max, v);
|
|
94
|
+
return v;
|
|
95
|
+
}
|
|
96
|
+
case "string": {
|
|
97
|
+
// A non-string raw (a number, a boolean) is a wrong TYPE, not a value
|
|
98
|
+
// to stringify: `searchDefaultEngine: 5` must fall back to the default,
|
|
99
|
+
// not become the string "5".
|
|
100
|
+
if (typeof raw !== "string")
|
|
101
|
+
return spec.default;
|
|
102
|
+
const s = raw.trim();
|
|
103
|
+
if (spec.enum) {
|
|
104
|
+
const hit = spec.enum.find((e) => e.toLowerCase() === s.toLowerCase());
|
|
105
|
+
if (hit)
|
|
106
|
+
return hit;
|
|
107
|
+
if (spec.enum.includes("on") && spec.enum.includes("off")) {
|
|
108
|
+
if (/^(0|false|no)$/i.test(s))
|
|
109
|
+
return "off";
|
|
110
|
+
if (/^(1|true|yes)$/i.test(s))
|
|
111
|
+
return "on";
|
|
112
|
+
}
|
|
113
|
+
return spec.default;
|
|
114
|
+
}
|
|
115
|
+
return s === "" ? spec.default : s;
|
|
116
|
+
}
|
|
117
|
+
case "string[]": {
|
|
118
|
+
if (!Array.isArray(raw) || !raw.every((x) => typeof x === "string"))
|
|
119
|
+
return spec.default;
|
|
120
|
+
return raw.map((x) => x);
|
|
121
|
+
}
|
|
122
|
+
case "record": {
|
|
123
|
+
if (!isPlainObject(raw) || !Object.values(raw).every((x) => typeof x === "number"))
|
|
124
|
+
return spec.default;
|
|
125
|
+
return { ...raw };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Resolve the full tm-tools config from an already-merged JSON value record
|
|
131
|
+
* (the file layers, plus any programmatic `configDefaults`). Registry-driven:
|
|
132
|
+
* every key gets its coerced value or its default. The two offload tiers
|
|
133
|
+
* INHERIT an explicitly-set `offloadThreshold` when they are not set
|
|
134
|
+
* themselves (Wave B M1) — a user who raised the global to save tokens must
|
|
135
|
+
* not have prose silently capped back to 4000.
|
|
136
|
+
*/
|
|
137
|
+
export function resolveConfig(values = {}) {
|
|
138
|
+
const out = {};
|
|
139
|
+
for (const spec of CONFIG_KEYS)
|
|
140
|
+
out[spec.key] = coerceValue(spec, values[spec.key]);
|
|
141
|
+
if (values.offloadThreshold !== undefined) {
|
|
142
|
+
if (values.offloadThresholdText === undefined)
|
|
143
|
+
out.offloadThresholdText = out.offloadThreshold;
|
|
144
|
+
if (values.offloadThresholdData === undefined)
|
|
145
|
+
out.offloadThresholdData = out.offloadThreshold;
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
249
149
|
/** Token cost of ONE code point — CJK-range ≈ 1 token (kana / Hangul /
|
|
250
150
|
* fullwidth / CJK punctuation all sit above U+2E80), everything else ≈ 0.25
|
|
251
151
|
* (chars/4). Shared by estimateTokens and preview.capTokens so the two
|
package/dist/tm/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/tm/config.ts"],"names":[],"mappings":"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"}
|
package/dist/tm/dispatch.d.ts
CHANGED
|
@@ -250,15 +250,6 @@ export declare function summarizeStates(children: readonly ChildRecord[]): {
|
|
|
250
250
|
idle: number;
|
|
251
251
|
error: number;
|
|
252
252
|
};
|
|
253
|
-
/**
|
|
254
|
-
* The children of ONE caller that are still running — the concurrency cap's
|
|
255
|
-
* data source (#49 feature 2). Pure, and reads the SAME registry `tm_join`
|
|
256
|
-
* uses rather than a second bookkeeping table: the rows already carry
|
|
257
|
-
* `parentSessionID`, so "how many of THIS session's children are live" is a
|
|
258
|
-
* filter, not a new store. An empty caller id matches nothing (never "all"),
|
|
259
|
-
* because a missing session id must not turn one session's cap into a global one.
|
|
260
|
-
*/
|
|
261
|
-
export declare function runningChildrenOf(children: readonly ChildRecord[], callerSessionID: string): ChildRecord[];
|
|
262
253
|
/** `ids` arrives in three shapes on the live host: a real array, a
|
|
263
254
|
* JSON-array STRING (`"[\"ses_x\"]"` — what a model actually sent on
|
|
264
255
|
* 2026-09-19), or a comma-separated list. Array.isArray alone silently
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tm/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AAMxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzE;6DAC6D;AAC7D,eAAO,MAAM,gBAAgB,2EAA4E,CAAA;AAEzG;;;4DAG4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;+CAE2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;8CAG0C;IAC1C,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB;;;;;yCAKqC;IACrC,YAAY,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,CAAA;IACpD;;mEAE+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;kDAGkD;AAClD,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnF,GAAG,GAAE,MAAM,MAAyB,GACnC,WAAW,GAAG,IAAI,CAapB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,WAAW,CAAA;IACtB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B;6EACyE;IACzE,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3D,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;wFACoF;IACpF,mBAAmB,CAAC,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnI;;sFAEkF;IAClF,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5C,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3C;yFACqF;IACrF,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;6EACyE;IACzE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C;;+BAE2B;IAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C;;;;yDAIqD;IACrD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACjD;;;;;;8DAM0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,4EAA4E;AAC5E,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,EAAE,CAUxD;AAED;;;+DAG+D;AAC/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAM/D;AAED;;;;;;;aAOa;AACb,wBAAgB,8BAA8B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAO5F;AAOD;;;;mDAImD;AACnD,eAAO,MAAM,cAAc,QAAS,CAAA;AACpC,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,GACzD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKrD;AAED;;;;;;;;;;;;;;;;uCAgBuC;AACvC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgBzC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgC9G;AAED,8CAA8C;AAC9C,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,SAAM,GAAG,MAAM,CA2BjE;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAczE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAUlH;
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/tm/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/tm/dispatch.js
CHANGED
|
@@ -295,20 +295,6 @@ export function summarizeStates(children) {
|
|
|
295
295
|
}
|
|
296
296
|
return { running, idle, error };
|
|
297
297
|
}
|
|
298
|
-
/**
|
|
299
|
-
* The children of ONE caller that are still running — the concurrency cap's
|
|
300
|
-
* data source (#49 feature 2). Pure, and reads the SAME registry `tm_join`
|
|
301
|
-
* uses rather than a second bookkeeping table: the rows already carry
|
|
302
|
-
* `parentSessionID`, so "how many of THIS session's children are live" is a
|
|
303
|
-
* filter, not a new store. An empty caller id matches nothing (never "all"),
|
|
304
|
-
* because a missing session id must not turn one session's cap into a global one.
|
|
305
|
-
*/
|
|
306
|
-
export function runningChildrenOf(children, callerSessionID) {
|
|
307
|
-
const caller = String(callerSessionID ?? "").trim();
|
|
308
|
-
if (!caller)
|
|
309
|
-
return [];
|
|
310
|
-
return children.filter((c) => c.parentSessionID === caller && c.state === "running");
|
|
311
|
-
}
|
|
312
298
|
/**
|
|
313
299
|
* Sleep used only by tm_join's bounded wait. Deliberately a plain timer:
|
|
314
300
|
* it never holds the event loop (the wait is awaited, not spun) and it is
|
|
@@ -1297,9 +1283,21 @@ export function buildDispatchTools(deps) {
|
|
|
1297
1283
|
},
|
|
1298
1284
|
};
|
|
1299
1285
|
const observeEvent = (event) => {
|
|
1300
|
-
const
|
|
1301
|
-
if (!
|
|
1286
|
+
const rawType = String(event?.type ?? "");
|
|
1287
|
+
if (!rawType.startsWith("session."))
|
|
1302
1288
|
return;
|
|
1289
|
+
// 2.0.28 renamed the completion/error events (measured off a live `v2-surface`
|
|
1290
|
+
// row, not guessed): the host publishes `session.execution.succeeded` /
|
|
1291
|
+
// `.failed` / `.interrupted` where older generations said `session.idle` /
|
|
1292
|
+
// `session.error`. The feed forwards the new spellings, but a forwarded name
|
|
1293
|
+
// with no branch below is a silent no-op — settle detection stayed broken while
|
|
1294
|
+
// `event_forwarded` climbed. Map the measured spellings onto the SAME
|
|
1295
|
+
// branches so the settle/error logic is shared, never duplicated.
|
|
1296
|
+
const type = rawType === "session.execution.succeeded" || rawType === "session.execution.interrupted"
|
|
1297
|
+
? "session.idle"
|
|
1298
|
+
: rawType === "session.execution.failed"
|
|
1299
|
+
? "session.error"
|
|
1300
|
+
: rawType;
|
|
1303
1301
|
const props = event?.properties;
|
|
1304
1302
|
const sid = String(props?.sessionID ?? "").trim();
|
|
1305
1303
|
if (!sid)
|