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.
Files changed (65) hide show
  1. package/README.md +1 -1
  2. package/dist/code-fingerprint.json +2 -2
  3. package/dist/config/auto-compact.d.ts.map +1 -1
  4. package/dist/config/auto-compact.js +31 -0
  5. package/dist/config/auto-compact.js.map +1 -1
  6. package/dist/config/user-config.d.ts +17 -0
  7. package/dist/config/user-config.d.ts.map +1 -1
  8. package/dist/config/user-config.js +26 -1
  9. package/dist/config/user-config.js.map +1 -1
  10. package/dist/config/workflow-gate.d.ts +82 -13
  11. package/dist/config/workflow-gate.d.ts.map +1 -1
  12. package/dist/config/workflow-gate.js +119 -27
  13. package/dist/config/workflow-gate.js.map +1 -1
  14. package/dist/handlers/sandbox-allow.d.ts.map +1 -1
  15. package/dist/handlers/sandbox-allow.js +11 -0
  16. package/dist/handlers/sandbox-allow.js.map +1 -1
  17. package/dist/handlers/server-requests.d.ts.map +1 -1
  18. package/dist/handlers/server-requests.js +7 -0
  19. package/dist/handlers/server-requests.js.map +1 -1
  20. package/dist/handlers/session.d.ts.map +1 -1
  21. package/dist/handlers/session.js +38 -20
  22. package/dist/handlers/session.js.map +1 -1
  23. package/dist/handlers/slash.d.ts.map +1 -1
  24. package/dist/handlers/slash.js +7 -6
  25. package/dist/handlers/slash.js.map +1 -1
  26. package/dist/push/config.d.ts +19 -0
  27. package/dist/push/config.d.ts.map +1 -1
  28. package/dist/push/config.js +20 -1
  29. package/dist/push/config.js.map +1 -1
  30. package/dist/push/push.d.ts +36 -7
  31. package/dist/push/push.d.ts.map +1 -1
  32. package/dist/push/push.js +112 -21
  33. package/dist/push/push.js.map +1 -1
  34. package/dist/remote/endpoint.d.ts.map +1 -1
  35. package/dist/remote/endpoint.js +5 -0
  36. package/dist/remote/endpoint.js.map +1 -1
  37. package/dist/remote/hub-server.d.ts.map +1 -1
  38. package/dist/remote/hub-server.js +44 -7
  39. package/dist/remote/hub-server.js.map +1 -1
  40. package/dist/remote/session-delete-endpoint.d.ts +21 -0
  41. package/dist/remote/session-delete-endpoint.d.ts.map +1 -0
  42. package/dist/remote/session-delete-endpoint.js +76 -0
  43. package/dist/remote/session-delete-endpoint.js.map +1 -0
  44. package/dist/remote/session-list-endpoint.d.ts +7 -0
  45. package/dist/remote/session-list-endpoint.d.ts.map +1 -1
  46. package/dist/remote/session-list-endpoint.js +19 -10
  47. package/dist/remote/session-list-endpoint.js.map +1 -1
  48. package/dist/remote/settings-endpoint.d.ts.map +1 -1
  49. package/dist/remote/settings-endpoint.js +49 -1
  50. package/dist/remote/settings-endpoint.js.map +1 -1
  51. package/dist/server.d.ts +16 -0
  52. package/dist/server.d.ts.map +1 -1
  53. package/dist/server.js +31 -8
  54. package/dist/server.js.map +1 -1
  55. package/dist/settings/workflow.d.ts +29 -10
  56. package/dist/settings/workflow.d.ts.map +1 -1
  57. package/dist/settings/workflow.js +58 -12
  58. package/dist/settings/workflow.js.map +1 -1
  59. package/dist/tasks-index.d.ts +38 -0
  60. package/dist/tasks-index.d.ts.map +1 -1
  61. package/dist/tasks-index.js +141 -4
  62. package/dist/tasks-index.js.map +1 -1
  63. package/docs/REMOTE-CLIENTS.md +42 -0
  64. package/docs/REMOTE.md +17 -0
  65. 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.51.1" alt="Contributors" /> <!-- x-release-please-version -->
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,4 +1,4 @@
1
1
  {
2
- "fingerprint": "037966242026451c289aa05000c3204629ef2caf98eea8480c286fca7eebecf2",
3
- "fileCount": 107
2
+ "fingerprint": "2cf24bc8d629e525be07994485451411adae50120ba6932a5bd5dbabead359e9",
3
+ "fileCount": 108
4
4
  }
@@ -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;AAIrD,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,CAmEf;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"}
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":"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"}
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;AACtC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,oFAAoF;AACpF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAsB,EACtB,EAAoB,EACpB,MAAc,EACd,QAAgB;IAEhB,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,CAAC,WAAW;IAEvC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,sEAAsE;QACtE,yEAAyE;QACzE,kDAAkD;QAClD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,MAAM,CAAC,MAAM,EAAE,EACf,cAAc,EACd,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,EACxC,IAAI,CACL,CAAC;YACF,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO;YACvB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAA8C,CAAC;YAChF,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,WAAW,IAAI,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,sCAAsC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1F,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,SAAS;YAAE,OAAO;QAE7B,GAAG,CAAC,6BAA6B,IAAI,iBAAiB,SAAS,eAAe,CAAC,CAAC;QAChF,uEAAuE;QACvE,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACrB,MAAM,aAAa,CACjB,EAAE,EACF,MAAM,EACN,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,EACrE,KAAK,CACN,CAAC;QAEF,2EAA2E;QAC3E,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAG/D,CAAC;QACF,mEAAmE;QACnE,+DAA+D;QAC/D,yEAAyE;QACzE,yEAAyE;QACzE,mCAAmC;QACnC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YAC7D,WAAW,CAAC,MAAM,EAAE;gBAClB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtC,KAAK,EAAE,wBAAwB;aAChC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAClC,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,CAAC;YACxF,WAAW,CAAC,MAAM,EAAE;gBAClB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtC,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,CAAC,CAAC,wBAAwB;aACjC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAC1D,WAAW,CAAC,MAAM,EAAE;gBAClB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;gBACtC,KAAK,EAAE,wBAAwB;aAChC,CAAC,CAAC;QACL,CAAC;QACD,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,iCAAiC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrF,sEAAsE;QACtE,kEAAkE;QAClE,oBAAoB;QACpB,WAAW,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC;YACtC,KAAK,EAAE,qBAAqB;YAC5B,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SACjD,CAAC,CAAC;QACH,MAAM,aAAa,CACjB,EAAE,EACF,MAAM,EACN,QAAQ,EAAE,CAAC,iBAAiB,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACxE,KAAK,CACN,CAAC;QACF,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAsB,EACtB,EAAoB,EACpB,MAAc,EACd,QAAgB;IAEhB,IAAI,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO;IACrD,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,KAAK,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC;SAChD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,IAAI,CAAC,sCAAsC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5F,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAsB,EACtB,QAAgB,EAChB,SAAS,GAAG,sBAAsB;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ;YAAE,OAAO,KAAK,CAAC;QACzC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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":"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"}
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 — no local toggle, no env override in
7
- * production (packaged desktop builds strip `ZCODE_DYNAMIC_WORKFLOW_MODE`
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). The verdict is resolved ONCE per backend spawn
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; a server-side mode flip becomes visible at the
21
- * next respawn.
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: "disabled" | "onDemand" | "alwaysOn" | "unknown";
43
+ mode: DynamicWorkflowMode | "unknown";
25
44
  /** mode !== "disabled" — the consumption-side fold (onDemand ≡ alwaysOn today). */
26
45
  enabled: boolean;
27
- /** Observability only: "remote" verdict vs the fail-closed "default". */
28
- source: "remote" | "default";
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 gate from the anonymous client-config endpoint. NEVER throws —
32
- * every failure shape returns the disabled verdict. `fetchImpl` is injectable
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;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACvD,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC9B;AAaD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,GAAE,OAAO,KAAwB,GACzC,OAAO,CAAC,YAAY,CAAC,CA4BvB;AAYD,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAMjF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAEtF;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,GAAG,IAAI,CAU/E;AAKD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/D,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,SAAS,CAAC,EAAE,GACrB,CAAC,EAAE,CAGL;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACtE;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAoBf"}
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 — no local toggle, no env override in
7
- * production (packaged desktop builds strip `ZCODE_DYNAMIC_WORKFLOW_MODE`
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). The verdict is resolved ONCE per backend spawn
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; a server-side mode flip becomes visible at the
21
- * next respawn.
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
- /** The fail-closed verdict every failure path collapses to. */
28
- const GATE_DISABLED = { mode: "unknown", enabled: false, source: "default" };
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 gate from the anonymous client-config endpoint. NEVER throws —
37
- * every failure shape returns the disabled verdict. `fetchImpl` is injectable
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 GATE_DISABLED;
89
+ return GATE_UNRESOLVED;
54
90
  const body = (await resp.json());
55
- const mode = body?.data?.configs?.dynamicWorkflow?.mode;
56
- if (typeof mode !== "string" || !DYNAMIC_WORKFLOW_MODES.includes(mode)) {
57
- return GATE_DISABLED;
58
- }
59
- return {
60
- mode: mode,
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 GATE_DISABLED;
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, GATE_DISABLED));
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, GATE_DISABLED));
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 (workflowGateNow(server)?.enabled)
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