zcode-acp-server 0.51.1 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/code-fingerprint.json +2 -2
- package/dist/config/auto-compact.d.ts.map +1 -1
- package/dist/config/auto-compact.js +31 -0
- package/dist/config/auto-compact.js.map +1 -1
- package/dist/config/user-config.d.ts +17 -0
- package/dist/config/user-config.d.ts.map +1 -1
- package/dist/config/user-config.js +26 -1
- package/dist/config/user-config.js.map +1 -1
- package/dist/config/workflow-gate.d.ts +82 -13
- package/dist/config/workflow-gate.d.ts.map +1 -1
- package/dist/config/workflow-gate.js +119 -27
- package/dist/config/workflow-gate.js.map +1 -1
- package/dist/handlers/sandbox-allow.d.ts.map +1 -1
- package/dist/handlers/sandbox-allow.js +11 -0
- package/dist/handlers/sandbox-allow.js.map +1 -1
- package/dist/handlers/server-requests.d.ts.map +1 -1
- package/dist/handlers/server-requests.js +7 -0
- package/dist/handlers/server-requests.js.map +1 -1
- package/dist/handlers/session.d.ts.map +1 -1
- package/dist/handlers/session.js +38 -20
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/slash.d.ts.map +1 -1
- package/dist/handlers/slash.js +7 -6
- package/dist/handlers/slash.js.map +1 -1
- package/dist/push/config.d.ts +19 -0
- package/dist/push/config.d.ts.map +1 -1
- package/dist/push/config.js +20 -1
- package/dist/push/config.js.map +1 -1
- package/dist/push/push.d.ts +36 -7
- package/dist/push/push.d.ts.map +1 -1
- package/dist/push/push.js +112 -21
- package/dist/push/push.js.map +1 -1
- package/dist/remote/endpoint.d.ts.map +1 -1
- package/dist/remote/endpoint.js +5 -0
- package/dist/remote/endpoint.js.map +1 -1
- package/dist/remote/hub-server.d.ts.map +1 -1
- package/dist/remote/hub-server.js +44 -7
- package/dist/remote/hub-server.js.map +1 -1
- package/dist/remote/session-delete-endpoint.d.ts +21 -0
- package/dist/remote/session-delete-endpoint.d.ts.map +1 -0
- package/dist/remote/session-delete-endpoint.js +76 -0
- package/dist/remote/session-delete-endpoint.js.map +1 -0
- package/dist/remote/session-list-endpoint.d.ts +7 -0
- package/dist/remote/session-list-endpoint.d.ts.map +1 -1
- package/dist/remote/session-list-endpoint.js +19 -10
- package/dist/remote/session-list-endpoint.js.map +1 -1
- package/dist/remote/settings-endpoint.d.ts.map +1 -1
- package/dist/remote/settings-endpoint.js +49 -1
- package/dist/remote/settings-endpoint.js.map +1 -1
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +31 -8
- package/dist/server.js.map +1 -1
- package/dist/settings/workflow.d.ts +29 -10
- package/dist/settings/workflow.d.ts.map +1 -1
- package/dist/settings/workflow.js +58 -12
- package/dist/settings/workflow.js.map +1 -1
- package/dist/tasks-index.d.ts +38 -0
- package/dist/tasks-index.d.ts.map +1 -1
- package/dist/tasks-index.js +141 -4
- package/dist/tasks-index.js.map +1 -1
- package/docs/REMOTE-CLIENTS.md +42 -0
- package/docs/REMOTE.md +17 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -285,7 +285,7 @@ Thanks to everyone who has contributed (updated automatically from the
|
|
|
285
285
|
<a href="https://github.com/william0wang/zcode-acp/graphs/contributors">
|
|
286
286
|
<!-- release-please re-stamps &v= on every release: the new URL busts the
|
|
287
287
|
contrib.rocks and GitHub camo image caches. -->
|
|
288
|
-
<img src="https://contrib.rocks/image?repo=william0wang/zcode-acp&v=0.
|
|
288
|
+
<img src="https://contrib.rocks/image?repo=william0wang/zcode-acp&v=0.53.0" alt="Contributors" /> <!-- x-release-please-version -->
|
|
289
289
|
</a>
|
|
290
290
|
|
|
291
291
|
## Related Projects
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-compact.d.ts","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAKrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAiGf;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,IAAI,CAQN;AAED,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAE9C;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,SAAyB,GACjC,OAAO,CAAC,OAAO,CAAC,CAOlB"}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
import { randomUUID } from "node:crypto";
|
|
20
20
|
import { compact } from "../handlers/extensions.js";
|
|
21
21
|
import { messages } from "../i18n.js";
|
|
22
|
+
import { pushSettled, pushSourceLabel } from "../push/push.js";
|
|
22
23
|
import { log, warn } from "../utils.js";
|
|
23
24
|
import { sendTextChunk } from "../handlers/io.js";
|
|
24
25
|
import { autoCompactThreshold } from "./settings.js";
|
|
@@ -63,21 +64,51 @@ export async function maybeAutoCompact(server, cx, acpSid, zcodeSid) {
|
|
|
63
64
|
await sendTextChunk(cx, acpSid, m.autoCompactStart(used.toLocaleString(), threshold.toLocaleString()), msgId);
|
|
64
65
|
// compact() handles: session/compact → waitForTurnIdle → emitInitialUsage.
|
|
65
66
|
const result = (await compact(server, { sessionId: acpSid }, cx));
|
|
67
|
+
// The phone mirrors the outcome the client sees (§5.2 settled kind
|
|
68
|
+
// `compact` — this is the AUTO path only; a manual /compact is
|
|
69
|
+
// user-initiated and watched, so it never pushes). The arming turn's own
|
|
70
|
+
// `turn` push already fired at its settle — this lands ~minutes later as
|
|
71
|
+
// the "everything settled" signal.
|
|
66
72
|
if (result.__lockTimeout) {
|
|
67
73
|
await sendTextChunk(cx, acpSid, m.autoCompactTimeout, msgId);
|
|
74
|
+
pushSettled(server, {
|
|
75
|
+
kind: "compact",
|
|
76
|
+
label: pushSourceLabel(server, acpSid),
|
|
77
|
+
title: "auto-compact timed out",
|
|
78
|
+
});
|
|
68
79
|
}
|
|
69
80
|
else if (result.__compactFailed) {
|
|
70
81
|
// The backend swallowed the failure into a state.updated notification —
|
|
71
82
|
// without this check the user saw "✓ compressed" while nothing shrank.
|
|
72
83
|
await sendTextChunk(cx, acpSid, m.autoCompactFailed(m.autoCompactBackendFailed), msgId);
|
|
84
|
+
pushSettled(server, {
|
|
85
|
+
kind: "compact",
|
|
86
|
+
label: pushSourceLabel(server, acpSid),
|
|
87
|
+
title: "auto-compact failed",
|
|
88
|
+
body: m.autoCompactBackendFailed,
|
|
89
|
+
});
|
|
73
90
|
}
|
|
74
91
|
else {
|
|
75
92
|
await sendTextChunk(cx, acpSid, m.autoCompactDone, msgId);
|
|
93
|
+
pushSettled(server, {
|
|
94
|
+
kind: "compact",
|
|
95
|
+
label: pushSourceLabel(server, acpSid),
|
|
96
|
+
title: "auto-compact completed",
|
|
97
|
+
});
|
|
76
98
|
}
|
|
77
99
|
log("auto-compact: done");
|
|
78
100
|
}
|
|
79
101
|
catch (e) {
|
|
80
102
|
warn(`auto-compact: compact failed (${e instanceof Error ? e.message : String(e)})`);
|
|
103
|
+
// Push BEFORE the outcome chunk: a dead client makes the chunk itself
|
|
104
|
+
// throw (the send chain rejects), and one push per settle beats a
|
|
105
|
+
// push-less settle.
|
|
106
|
+
pushSettled(server, {
|
|
107
|
+
kind: "compact",
|
|
108
|
+
label: pushSourceLabel(server, acpSid),
|
|
109
|
+
title: "auto-compact failed",
|
|
110
|
+
body: e instanceof Error ? e.message : String(e),
|
|
111
|
+
});
|
|
81
112
|
await sendTextChunk(cx, acpSid, messages().autoCompactFailed(e instanceof Error ? e.message : String(e)), msgId);
|
|
82
113
|
// Best-effort: never break the prompt response.
|
|
83
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-compact.js","sourceRoot":"","sources":["../../src/config/auto-compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,6 +121,9 @@ export interface PushNotifyUserConfig {
|
|
|
121
121
|
goal?: boolean;
|
|
122
122
|
run?: boolean;
|
|
123
123
|
task?: boolean;
|
|
124
|
+
compact?: boolean;
|
|
125
|
+
/** Pending interaction asks (permission/question): zero-client push + unanswered watchdog. */
|
|
126
|
+
ask?: boolean;
|
|
124
127
|
}
|
|
125
128
|
/** The `push` section: offline WeCom notifications (push-backend-requirements §8). */
|
|
126
129
|
export interface PushUserConfig {
|
|
@@ -133,9 +136,22 @@ export interface PushUserConfig {
|
|
|
133
136
|
toUser?: string;
|
|
134
137
|
/** "minimal" strips business strings from bodies (content transits Tencent). */
|
|
135
138
|
contentDetail?: "full" | "minimal";
|
|
139
|
+
/** Settled-push quiet window in ms after a user prompt/cancel (0 = always push). */
|
|
140
|
+
quietMs?: number;
|
|
141
|
+
/** Unanswered-ask watchdog delay in ms (0 = push at dispatch time; default 120s). */
|
|
142
|
+
askDelayMs?: number;
|
|
136
143
|
relay?: PushRelayUserConfig;
|
|
137
144
|
notify?: PushNotifyUserConfig;
|
|
138
145
|
}
|
|
146
|
+
/** The `workflow` section: dynamic-workflow gate override (the App settings toggle). */
|
|
147
|
+
export interface WorkflowUserConfig {
|
|
148
|
+
/**
|
|
149
|
+
* Local override of the dynamic-workflow remote gate. Domain mirrors upstream
|
|
150
|
+
* `ZCODE_DYNAMIC_WORKFLOW_MODE` (shared/dynamic-workflow-feature.ts); absent
|
|
151
|
+
* = follow the remote verdict. Written via PUT /settings/workflow-gate.
|
|
152
|
+
*/
|
|
153
|
+
mode?: "disabled" | "onDemand" | "alwaysOn";
|
|
154
|
+
}
|
|
139
155
|
export interface UserConfig {
|
|
140
156
|
remote?: RemoteUserConfig;
|
|
141
157
|
quota?: QuotaUserConfig;
|
|
@@ -150,6 +166,7 @@ export interface UserConfig {
|
|
|
150
166
|
sandbox?: SandboxUserConfig;
|
|
151
167
|
tui?: TuiUserConfig;
|
|
152
168
|
push?: PushUserConfig;
|
|
169
|
+
workflow?: WorkflowUserConfig;
|
|
153
170
|
}
|
|
154
171
|
/** Resolve the config file path: $XDG_CONFIG_HOME/zcode-acp or ~/.config/zcode-acp. */
|
|
155
172
|
export declare function userConfigPath(env?: NodeJS.ProcessEnv): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;mFAC+E;IAC/E,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qEAAqE;AACrE,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,gGAAgG;AAChG,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,13 @@ function isPlainObject(v) {
|
|
|
59
59
|
}
|
|
60
60
|
/** The session modes the backend's own mode select offers (mirrors CONFIG_META). */
|
|
61
61
|
const SESSION_MODES = new Set(["plan", "build", "edit", "yolo", "auto"]);
|
|
62
|
+
/**
|
|
63
|
+
* Dynamic-workflow gate override domain — mirrors upstream DYNAMIC_WORKFLOW_MODES
|
|
64
|
+
* (config/workflow-gate.ts). Duplicated instead of imported: user-config must
|
|
65
|
+
* not import utils-adjacent modules (see the warn() note above — the import
|
|
66
|
+
* graph stays acyclic by hand).
|
|
67
|
+
*/
|
|
68
|
+
const WORKFLOW_MODES = new Set(["disabled", "onDemand", "alwaysOn"]);
|
|
62
69
|
/** Normalized language pick: "zh*"/"en*" prefixes accepted, else undefined. */
|
|
63
70
|
function parseLang(v) {
|
|
64
71
|
if (typeof v !== "string")
|
|
@@ -205,6 +212,18 @@ export function loadUserConfig(env = process.env) {
|
|
|
205
212
|
warn(`config: ${label}.stats=${JSON.stringify(stats)} is not a string — ignoring`);
|
|
206
213
|
return {};
|
|
207
214
|
});
|
|
215
|
+
result.workflow = parseSection(parsed, "workflow", file, (body, label) => {
|
|
216
|
+
const w = {};
|
|
217
|
+
const mode = body["mode"];
|
|
218
|
+
if (mode !== undefined) {
|
|
219
|
+
const m = typeof mode === "string" ? mode.trim() : "";
|
|
220
|
+
if (WORKFLOW_MODES.has(m))
|
|
221
|
+
w.mode = m;
|
|
222
|
+
else
|
|
223
|
+
warn(`config: ${label}.mode=${JSON.stringify(mode)} is not a workflow mode — ignoring`);
|
|
224
|
+
}
|
|
225
|
+
return w;
|
|
226
|
+
});
|
|
208
227
|
result.push = parseSection(parsed, "push", file, (body, label) => {
|
|
209
228
|
const p = {};
|
|
210
229
|
if (body["enabled"] === undefined) {
|
|
@@ -231,6 +250,12 @@ export function loadUserConfig(env = process.env) {
|
|
|
231
250
|
else
|
|
232
251
|
warn(`config: ${label}.contentDetail=${JSON.stringify(detail)} is not "full"/"minimal" — ignoring`);
|
|
233
252
|
}
|
|
253
|
+
const quietMs = parseIntField(body["quietMs"], 0, `${label}.quietMs`, file);
|
|
254
|
+
if (quietMs !== undefined)
|
|
255
|
+
p.quietMs = quietMs;
|
|
256
|
+
const askDelayMs = parseIntField(body["askDelayMs"], 0, `${label}.askDelayMs`, file);
|
|
257
|
+
if (askDelayMs !== undefined)
|
|
258
|
+
p.askDelayMs = askDelayMs;
|
|
234
259
|
const relay = body["relay"];
|
|
235
260
|
if (relay !== undefined) {
|
|
236
261
|
if (!isPlainObject(relay)) {
|
|
@@ -254,7 +279,7 @@ export function loadUserConfig(env = process.env) {
|
|
|
254
279
|
}
|
|
255
280
|
else {
|
|
256
281
|
const n = {};
|
|
257
|
-
for (const key of ["turn", "goal", "run", "task"]) {
|
|
282
|
+
for (const key of ["turn", "goal", "run", "task", "compact", "ask"]) {
|
|
258
283
|
const v = notify[key];
|
|
259
284
|
if (v === undefined)
|
|
260
285
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/config/user-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,36 +3,75 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The desktop's Host utility process decides whether the dynamic-workflow
|
|
5
5
|
* feature (workflow tools, `/workflow` expansion) is available from an
|
|
6
|
-
* ANONYMOUS remote config endpoint
|
|
7
|
-
*
|
|
8
|
-
* on purpose). A headless app-server never resolves the gate itself
|
|
9
|
-
* (fail-closed false), so the bridge plays the Host:
|
|
6
|
+
* ANONYMOUS remote config endpoint; a headless app-server never resolves the
|
|
7
|
+
* gate itself (fail-closed false), so the bridge plays the Host:
|
|
10
8
|
*
|
|
11
9
|
* GET {origin}/api/v1/client/configs?app_version=&platform=
|
|
12
10
|
* → data.configs.dynamicWorkflow.mode ∈ disabled|onDemand|alwaysOn
|
|
13
11
|
* → enabled = mode !== "disabled"
|
|
14
12
|
*
|
|
13
|
+
* LOCAL OVERRIDE (upstream headless-host tier): upstream's shared contract
|
|
14
|
+
* (dynamic-workflow-feature.ts) defines a three-tier `ZCODE_DYNAMIC_WORKFLOW_MODE`
|
|
15
|
+
* env policy, and the tier for Hosts WITHOUT a desktop main — the bridge's
|
|
16
|
+
* exact position — reads the process env DIRECTLY as an ops/developer setting,
|
|
17
|
+
* short-circuiting before any network action. The bridge adds a config-file
|
|
18
|
+
* layer on top (workflow.mode in ~/.config/zcode-acp/config.json — the App
|
|
19
|
+
* settings toggle writes it via PUT /settings/workflow-gate) with the repo's
|
|
20
|
+
* usual precedence: config file > env > remote verdict.
|
|
21
|
+
*
|
|
15
22
|
* Fail-closed everywhere: a missing key, an unknown value, an HTTP error, a
|
|
16
23
|
* fetch throw, or the 6s timeout all read as disabled — a gray-flag read must
|
|
17
24
|
* never block ordinary chat (upstream returns the default verdict on failure
|
|
18
|
-
* for the same reason).
|
|
25
|
+
* for the same reason). "Key absent" and "fetch failed" stay distinguishable
|
|
26
|
+
* for observability (mode "disabled" vs "unknown", both source "default") —
|
|
27
|
+
* the upstream contract folds both to disabled, the split only feeds logs and
|
|
28
|
+
* the 403 error body. The REMOTE verdict is resolved ONCE per backend spawn
|
|
19
29
|
* (server.backendWorkflowGate, src/server.ts ensureBackend) and pinned to
|
|
20
|
-
* that backend's lifetime;
|
|
21
|
-
*
|
|
30
|
+
* that backend's lifetime; the override is re-read LIVE on every consumption
|
|
31
|
+
* (the user-config convention), so an App toggle flip takes effect on the
|
|
32
|
+
* next gate read without restarting the bridge.
|
|
33
|
+
*/
|
|
34
|
+
/** Remote verdict vocabulary (upstream DYNAMIC_WORKFLOW_MODES). */
|
|
35
|
+
export declare const DYNAMIC_WORKFLOW_MODES: readonly ["disabled", "onDemand", "alwaysOn"];
|
|
36
|
+
export type DynamicWorkflowMode = (typeof DYNAMIC_WORKFLOW_MODES)[number];
|
|
37
|
+
/**
|
|
38
|
+
* Upstream-parity normalization (`normalizeDynamicWorkflowMode`): trim + domain
|
|
39
|
+
* check; undefined for anything else. Invalid values are DROPPED, never fatal.
|
|
22
40
|
*/
|
|
41
|
+
export declare function normalizeWorkflowMode(value: unknown): DynamicWorkflowMode | undefined;
|
|
23
42
|
export interface WorkflowGate {
|
|
24
|
-
mode:
|
|
43
|
+
mode: DynamicWorkflowMode | "unknown";
|
|
25
44
|
/** mode !== "disabled" — the consumption-side fold (onDemand ≡ alwaysOn today). */
|
|
26
45
|
enabled: boolean;
|
|
27
|
-
/**
|
|
28
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Observability only (upstream vocabulary): "override" (local switch) vs
|
|
48
|
+
* "remote" verdict vs the fail-closed "default".
|
|
49
|
+
*/
|
|
50
|
+
source: "remote" | "override" | "default";
|
|
29
51
|
}
|
|
30
52
|
/**
|
|
31
|
-
* Resolve the
|
|
32
|
-
* every failure shape returns
|
|
33
|
-
* so tests run without network.
|
|
53
|
+
* Resolve the REMOTE verdict from the anonymous client-config endpoint. NEVER
|
|
54
|
+
* throws — every failure shape returns a disabled verdict. `fetchImpl` is
|
|
55
|
+
* injectable so tests run without network. The LOCAL override is layered on
|
|
56
|
+
* top by {@link workflowOverrideNow} / the effective-* folds, not here.
|
|
34
57
|
*/
|
|
35
58
|
export declare function resolveWorkflowGate(fetchImpl?: typeof fetch): Promise<WorkflowGate>;
|
|
59
|
+
/** The override verdict: always a CONCRETE mode (never "unknown"), source fixed. */
|
|
60
|
+
export interface WorkflowOverrideGate {
|
|
61
|
+
mode: DynamicWorkflowMode;
|
|
62
|
+
enabled: boolean;
|
|
63
|
+
source: "override";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The LOCAL switch, re-read LIVE on every call: config-file `workflow.mode`
|
|
67
|
+
* (the App settings toggle) over the upstream env var. Live reads are the
|
|
68
|
+
* user-config convention — a flip takes effect on the next gate consumption
|
|
69
|
+
* without restarting the bridge. Returns null when no override is set (the
|
|
70
|
+
* caller falls back to the pinned remote verdict). An invalid env value is
|
|
71
|
+
* silently dropped (upstream normalize semantics); an invalid file value never
|
|
72
|
+
* reaches here (the config loader already warned and ignored it).
|
|
73
|
+
*/
|
|
74
|
+
export declare function workflowOverrideNow(env?: NodeJS.ProcessEnv): WorkflowOverrideGate | null;
|
|
36
75
|
/** The gate-bearing half of ZcodeAcpServer (structural, for tests). */
|
|
37
76
|
export interface WorkflowGateHolder {
|
|
38
77
|
backendWorkflowGate: Promise<WorkflowGate> | null;
|
|
@@ -60,6 +99,19 @@ export declare function rememberGate(promise: Promise<WorkflowGate>, value: Work
|
|
|
60
99
|
* went through it.
|
|
61
100
|
*/
|
|
62
101
|
export declare function workflowGateNow(server: WorkflowGateHolder): WorkflowGate | null;
|
|
102
|
+
/**
|
|
103
|
+
* Synchronous EFFECTIVE verdict: local override (live) first, else the pinned
|
|
104
|
+
* remote verdict. null while the remote fetch is pending and no override is
|
|
105
|
+
* set (callers treat null as disabled — fail-closed).
|
|
106
|
+
*/
|
|
107
|
+
export declare function effectiveWorkflowGateNow(server: WorkflowGateHolder): WorkflowGate | null;
|
|
108
|
+
/**
|
|
109
|
+
* Awaited EFFECTIVE verdict: a set override short-circuits WITHOUT touching
|
|
110
|
+
* the backend or the network (upstream folds the override ahead of every
|
|
111
|
+
* network action — a cold App-only bridge answers the switch alone);
|
|
112
|
+
* otherwise the pinned remote verdict (null when none was ever started).
|
|
113
|
+
*/
|
|
114
|
+
export declare function effectiveWorkflowGate(server: WorkflowGateHolder): Promise<WorkflowGate | null>;
|
|
63
115
|
/**
|
|
64
116
|
* Send-time filter for the advertised `/` menu: the workflow commands ride the
|
|
65
117
|
* static list but must only reach clients when the gate is enabled (the list is
|
|
@@ -94,4 +146,21 @@ export interface WorkflowPolicyTarget {
|
|
|
94
146
|
* an older backend.
|
|
95
147
|
*/
|
|
96
148
|
export declare function pushDynamicWorkflowPolicy(backend: WorkflowPolicyTarget, nextId: () => number, cwd: string): Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* The policy-push half of the server (structural, for tests): the live backend
|
|
151
|
+
* plus the per-generation "already pushed" marker, reset at every spawn.
|
|
152
|
+
*/
|
|
153
|
+
export interface WorkflowPolicyServer extends WorkflowGateHolder {
|
|
154
|
+
readonly backend: WorkflowPolicyTarget | null;
|
|
155
|
+
workflowPolicyPushed: boolean;
|
|
156
|
+
nextId(): number;
|
|
157
|
+
projectCwd(): string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Flip-aware second enable channel: the spawn-time push only covers a backend
|
|
161
|
+
* born under an ENABLED verdict; a local override flipped on later (the App
|
|
162
|
+
* settings toggle) must still reach the backend process. Once per backend
|
|
163
|
+
* generation — the boolean check keeps the per-create/resume call site free.
|
|
164
|
+
*/
|
|
165
|
+
export declare function ensureWorkflowPolicyPushed(server: WorkflowPolicyServer): void;
|
|
97
166
|
//# sourceMappingURL=workflow-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-gate.d.ts","sourceRoot":"","sources":["../../src/config/workflow-gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflow-gate.d.ts","sourceRoot":"","sources":["../../src/config/workflow-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,29 +3,64 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The desktop's Host utility process decides whether the dynamic-workflow
|
|
5
5
|
* feature (workflow tools, `/workflow` expansion) is available from an
|
|
6
|
-
* ANONYMOUS remote config endpoint
|
|
7
|
-
*
|
|
8
|
-
* on purpose). A headless app-server never resolves the gate itself
|
|
9
|
-
* (fail-closed false), so the bridge plays the Host:
|
|
6
|
+
* ANONYMOUS remote config endpoint; a headless app-server never resolves the
|
|
7
|
+
* gate itself (fail-closed false), so the bridge plays the Host:
|
|
10
8
|
*
|
|
11
9
|
* GET {origin}/api/v1/client/configs?app_version=&platform=
|
|
12
10
|
* → data.configs.dynamicWorkflow.mode ∈ disabled|onDemand|alwaysOn
|
|
13
11
|
* → enabled = mode !== "disabled"
|
|
14
12
|
*
|
|
13
|
+
* LOCAL OVERRIDE (upstream headless-host tier): upstream's shared contract
|
|
14
|
+
* (dynamic-workflow-feature.ts) defines a three-tier `ZCODE_DYNAMIC_WORKFLOW_MODE`
|
|
15
|
+
* env policy, and the tier for Hosts WITHOUT a desktop main — the bridge's
|
|
16
|
+
* exact position — reads the process env DIRECTLY as an ops/developer setting,
|
|
17
|
+
* short-circuiting before any network action. The bridge adds a config-file
|
|
18
|
+
* layer on top (workflow.mode in ~/.config/zcode-acp/config.json — the App
|
|
19
|
+
* settings toggle writes it via PUT /settings/workflow-gate) with the repo's
|
|
20
|
+
* usual precedence: config file > env > remote verdict.
|
|
21
|
+
*
|
|
15
22
|
* Fail-closed everywhere: a missing key, an unknown value, an HTTP error, a
|
|
16
23
|
* fetch throw, or the 6s timeout all read as disabled — a gray-flag read must
|
|
17
24
|
* never block ordinary chat (upstream returns the default verdict on failure
|
|
18
|
-
* for the same reason).
|
|
25
|
+
* for the same reason). "Key absent" and "fetch failed" stay distinguishable
|
|
26
|
+
* for observability (mode "disabled" vs "unknown", both source "default") —
|
|
27
|
+
* the upstream contract folds both to disabled, the split only feeds logs and
|
|
28
|
+
* the 403 error body. The REMOTE verdict is resolved ONCE per backend spawn
|
|
19
29
|
* (server.backendWorkflowGate, src/server.ts ensureBackend) and pinned to
|
|
20
|
-
* that backend's lifetime;
|
|
21
|
-
*
|
|
30
|
+
* that backend's lifetime; the override is re-read LIVE on every consumption
|
|
31
|
+
* (the user-config convention), so an App toggle flip takes effect on the
|
|
32
|
+
* next gate read without restarting the bridge.
|
|
22
33
|
*/
|
|
23
34
|
import { arch, platform } from "node:os";
|
|
35
|
+
import { loadUserConfig } from "./user-config.js";
|
|
24
36
|
import { AGENT_INFO, log } from "../utils.js";
|
|
25
37
|
/** Remote verdict vocabulary (upstream DYNAMIC_WORKFLOW_MODES). */
|
|
26
|
-
const DYNAMIC_WORKFLOW_MODES = ["disabled", "onDemand", "alwaysOn"];
|
|
27
|
-
/**
|
|
28
|
-
|
|
38
|
+
export const DYNAMIC_WORKFLOW_MODES = ["disabled", "onDemand", "alwaysOn"];
|
|
39
|
+
/**
|
|
40
|
+
* Upstream-parity normalization (`normalizeDynamicWorkflowMode`): trim + domain
|
|
41
|
+
* check; undefined for anything else. Invalid values are DROPPED, never fatal.
|
|
42
|
+
*/
|
|
43
|
+
export function normalizeWorkflowMode(value) {
|
|
44
|
+
if (typeof value !== "string")
|
|
45
|
+
return undefined;
|
|
46
|
+
const trimmed = value.trim();
|
|
47
|
+
return DYNAMIC_WORKFLOW_MODES.includes(trimmed)
|
|
48
|
+
? trimmed
|
|
49
|
+
: undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The upstream fold for "server answered but the key is absent/invalid": a
|
|
53
|
+
* plain disabled verdict — "服务端撤掉 key 等于关闭" (dynamic-workflow-feature.ts),
|
|
54
|
+
* not a failure.
|
|
55
|
+
*/
|
|
56
|
+
const GATE_KEY_ABSENT = { mode: "disabled", enabled: false, source: "default" };
|
|
57
|
+
/**
|
|
58
|
+
* Bridge-only split: a fetch that never produced a verdict (HTTP error, throw,
|
|
59
|
+
* timeout, invalid envelope) is UNRESOLVED, not "server said off" — the 403
|
|
60
|
+
* body and /settings/all can tell "the feature was pulled" from "the config
|
|
61
|
+
* fetch is broken" (bug doc 2026-09-29 §5).
|
|
62
|
+
*/
|
|
63
|
+
const GATE_UNRESOLVED = { mode: "unknown", enabled: false, source: "default" };
|
|
29
64
|
/** API origin; overridable for testing and for a self-hosted gateway. */
|
|
30
65
|
function apiOrigin(env = process.env) {
|
|
31
66
|
return env.ZCODE_ENDPOINT_ORIGIN ?? env.ZCODE_BASE_URL ?? "https://zcode.z.ai";
|
|
@@ -33,9 +68,10 @@ function apiOrigin(env = process.env) {
|
|
|
33
68
|
const CLIENT_CONFIG_PATH = "/api/v1/client/configs";
|
|
34
69
|
const GATE_TIMEOUT_MS = 6000;
|
|
35
70
|
/**
|
|
36
|
-
* Resolve the
|
|
37
|
-
* every failure shape returns
|
|
38
|
-
* so tests run without network.
|
|
71
|
+
* Resolve the REMOTE verdict from the anonymous client-config endpoint. NEVER
|
|
72
|
+
* throws — every failure shape returns a disabled verdict. `fetchImpl` is
|
|
73
|
+
* injectable so tests run without network. The LOCAL override is layered on
|
|
74
|
+
* top by {@link workflowOverrideNow} / the effective-* folds, not here.
|
|
39
75
|
*/
|
|
40
76
|
export async function resolveWorkflowGate(fetchImpl = globalThis.fetch) {
|
|
41
77
|
try {
|
|
@@ -50,22 +86,36 @@ export async function resolveWorkflowGate(fetchImpl = globalThis.fetch) {
|
|
|
50
86
|
signal: AbortSignal.timeout(GATE_TIMEOUT_MS),
|
|
51
87
|
});
|
|
52
88
|
if (!resp.ok)
|
|
53
|
-
return
|
|
89
|
+
return GATE_UNRESOLVED;
|
|
54
90
|
const body = (await resp.json());
|
|
55
|
-
const mode = body?.data?.configs?.dynamicWorkflow?.mode;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
enabled: mode !== "disabled",
|
|
62
|
-
source: "remote",
|
|
63
|
-
};
|
|
91
|
+
const mode = normalizeWorkflowMode(body?.data?.configs?.dynamicWorkflow?.mode);
|
|
92
|
+
// Absent key or an invalid value are the SAME upstream fold: the server
|
|
93
|
+
// pulled the flag, the gate is off — not a fetch failure.
|
|
94
|
+
if (!mode)
|
|
95
|
+
return GATE_KEY_ABSENT;
|
|
96
|
+
return { mode, enabled: mode !== "disabled", source: "remote" };
|
|
64
97
|
}
|
|
65
98
|
catch {
|
|
66
|
-
return
|
|
99
|
+
return GATE_UNRESOLVED;
|
|
67
100
|
}
|
|
68
101
|
}
|
|
102
|
+
/** Upstream env (headless-host tier reads process env directly). */
|
|
103
|
+
const WORKFLOW_MODE_ENV = "ZCODE_DYNAMIC_WORKFLOW_MODE";
|
|
104
|
+
/**
|
|
105
|
+
* The LOCAL switch, re-read LIVE on every call: config-file `workflow.mode`
|
|
106
|
+
* (the App settings toggle) over the upstream env var. Live reads are the
|
|
107
|
+
* user-config convention — a flip takes effect on the next gate consumption
|
|
108
|
+
* without restarting the bridge. Returns null when no override is set (the
|
|
109
|
+
* caller falls back to the pinned remote verdict). An invalid env value is
|
|
110
|
+
* silently dropped (upstream normalize semantics); an invalid file value never
|
|
111
|
+
* reaches here (the config loader already warned and ignored it).
|
|
112
|
+
*/
|
|
113
|
+
export function workflowOverrideNow(env = process.env) {
|
|
114
|
+
const mode = loadUserConfig(env).workflow?.mode ?? normalizeWorkflowMode(env[WORKFLOW_MODE_ENV]);
|
|
115
|
+
if (!mode)
|
|
116
|
+
return null;
|
|
117
|
+
return { mode, enabled: mode !== "disabled", source: "override" };
|
|
118
|
+
}
|
|
69
119
|
/**
|
|
70
120
|
* Settled-gate snapshots, keyed by the (per-backend-generation) promise stored
|
|
71
121
|
* in `server.backendWorkflowGate`. A promise exposes no sync read, so the
|
|
@@ -82,7 +132,7 @@ const settledGates = new WeakMap();
|
|
|
82
132
|
* the moment it settles.
|
|
83
133
|
*/
|
|
84
134
|
export function captureGate(promise) {
|
|
85
|
-
void promise.then((gate) => settledGates.set(promise, gate), () => settledGates.set(promise,
|
|
135
|
+
void promise.then((gate) => settledGates.set(promise, gate), () => settledGates.set(promise, GATE_UNRESOLVED));
|
|
86
136
|
return promise;
|
|
87
137
|
}
|
|
88
138
|
/**
|
|
@@ -109,9 +159,34 @@ export function workflowGateNow(server) {
|
|
|
109
159
|
const settled = settledGates.get(promise);
|
|
110
160
|
if (settled)
|
|
111
161
|
return settled;
|
|
112
|
-
void promise.then((gate) => settledGates.set(promise, gate), () => settledGates.set(promise,
|
|
162
|
+
void promise.then((gate) => settledGates.set(promise, gate), () => settledGates.set(promise, GATE_UNRESOLVED));
|
|
113
163
|
return null;
|
|
114
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Synchronous EFFECTIVE verdict: local override (live) first, else the pinned
|
|
167
|
+
* remote verdict. null while the remote fetch is pending and no override is
|
|
168
|
+
* set (callers treat null as disabled — fail-closed).
|
|
169
|
+
*/
|
|
170
|
+
export function effectiveWorkflowGateNow(server) {
|
|
171
|
+
return workflowOverrideNow() ?? workflowGateNow(server);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Awaited EFFECTIVE verdict: a set override short-circuits WITHOUT touching
|
|
175
|
+
* the backend or the network (upstream folds the override ahead of every
|
|
176
|
+
* network action — a cold App-only bridge answers the switch alone);
|
|
177
|
+
* otherwise the pinned remote verdict (null when none was ever started).
|
|
178
|
+
*/
|
|
179
|
+
export async function effectiveWorkflowGate(server) {
|
|
180
|
+
const override = workflowOverrideNow();
|
|
181
|
+
if (override)
|
|
182
|
+
return override;
|
|
183
|
+
const promise = server.backendWorkflowGate;
|
|
184
|
+
if (!promise)
|
|
185
|
+
return null;
|
|
186
|
+
const gate = await promise;
|
|
187
|
+
rememberGate(promise, gate);
|
|
188
|
+
return gate;
|
|
189
|
+
}
|
|
115
190
|
/** Slash-command names advertised only while the workflow gate is enabled. */
|
|
116
191
|
const GATED_COMMAND_NAMES = new Set(["workflow", "workflows"]);
|
|
117
192
|
/**
|
|
@@ -122,7 +197,7 @@ const GATED_COMMAND_NAMES = new Set(["workflow", "workflows"]);
|
|
|
122
197
|
* helpers deliberately take no server.
|
|
123
198
|
*/
|
|
124
199
|
export function filterWorkflowCommands(server, commands) {
|
|
125
|
-
if (
|
|
200
|
+
if (effectiveWorkflowGateNow(server)?.enabled)
|
|
126
201
|
return [...commands];
|
|
127
202
|
return commands.filter((c) => !GATED_COMMAND_NAMES.has(c.name));
|
|
128
203
|
}
|
|
@@ -156,4 +231,21 @@ export async function pushDynamicWorkflowPolicy(backend, nextId, cwd) {
|
|
|
156
231
|
log(`workflow-gate: policy push threw (${e instanceof Error ? e.message : String(e)})`);
|
|
157
232
|
}
|
|
158
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Flip-aware second enable channel: the spawn-time push only covers a backend
|
|
236
|
+
* born under an ENABLED verdict; a local override flipped on later (the App
|
|
237
|
+
* settings toggle) must still reach the backend process. Once per backend
|
|
238
|
+
* generation — the boolean check keeps the per-create/resume call site free.
|
|
239
|
+
*/
|
|
240
|
+
export function ensureWorkflowPolicyPushed(server) {
|
|
241
|
+
if (server.workflowPolicyPushed)
|
|
242
|
+
return;
|
|
243
|
+
if (!effectiveWorkflowGateNow(server)?.enabled)
|
|
244
|
+
return;
|
|
245
|
+
const backend = server.backend;
|
|
246
|
+
if (!backend)
|
|
247
|
+
return;
|
|
248
|
+
server.workflowPolicyPushed = true;
|
|
249
|
+
void pushDynamicWorkflowPolicy(backend, () => server.nextId(), server.projectCwd());
|
|
250
|
+
}
|
|
159
251
|
//# sourceMappingURL=workflow-gate.js.map
|