zcode-acp-server 0.1.0 → 0.3.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 (223) hide show
  1. package/README.md +192 -9
  2. package/README.zh-CN.md +143 -8
  3. package/dist/backend/client.d.ts +12 -4
  4. package/dist/backend/client.d.ts.map +1 -1
  5. package/dist/backend/client.js +72 -7
  6. package/dist/backend/client.js.map +1 -1
  7. package/dist/backend/credentials.d.ts.map +1 -1
  8. package/dist/backend/credentials.js +2 -1
  9. package/dist/backend/credentials.js.map +1 -1
  10. package/dist/backend/listener.d.ts +12 -4
  11. package/dist/backend/listener.d.ts.map +1 -1
  12. package/dist/backend/listener.js +68 -12
  13. package/dist/backend/listener.js.map +1 -1
  14. package/dist/backend/types.d.ts +1 -1
  15. package/dist/backend/types.d.ts.map +1 -1
  16. package/dist/bin/hub.d.ts +16 -0
  17. package/dist/bin/hub.d.ts.map +1 -0
  18. package/dist/bin/hub.js +41 -0
  19. package/dist/bin/hub.js.map +1 -0
  20. package/dist/bin/quota.d.ts +54 -0
  21. package/dist/bin/quota.d.ts.map +1 -0
  22. package/dist/bin/quota.js +333 -0
  23. package/dist/bin/quota.js.map +1 -0
  24. package/dist/config/auto-compact.d.ts +23 -0
  25. package/dist/config/auto-compact.d.ts.map +1 -0
  26. package/dist/config/auto-compact.js +67 -0
  27. package/dist/config/auto-compact.js.map +1 -0
  28. package/dist/config/mcp-discovery.d.ts +34 -0
  29. package/dist/config/mcp-discovery.d.ts.map +1 -0
  30. package/dist/config/mcp-discovery.js +153 -0
  31. package/dist/config/mcp-discovery.js.map +1 -0
  32. package/dist/config/model-cache.d.ts +12 -1
  33. package/dist/config/model-cache.d.ts.map +1 -1
  34. package/dist/config/model-cache.js +30 -8
  35. package/dist/config/model-cache.js.map +1 -1
  36. package/dist/config/options.d.ts +87 -9
  37. package/dist/config/options.d.ts.map +1 -1
  38. package/dist/config/options.js +248 -45
  39. package/dist/config/options.js.map +1 -1
  40. package/dist/config/plugin-commands.d.ts +24 -0
  41. package/dist/config/plugin-commands.d.ts.map +1 -0
  42. package/dist/config/plugin-commands.js +107 -0
  43. package/dist/config/plugin-commands.js.map +1 -0
  44. package/dist/config/provider-registry.d.ts +60 -0
  45. package/dist/config/provider-registry.d.ts.map +1 -0
  46. package/dist/config/provider-registry.js +128 -0
  47. package/dist/config/provider-registry.js.map +1 -0
  48. package/dist/config/runtime-model.d.ts +54 -18
  49. package/dist/config/runtime-model.d.ts.map +1 -1
  50. package/dist/config/runtime-model.js +105 -61
  51. package/dist/config/runtime-model.js.map +1 -1
  52. package/dist/config/skill-discovery.d.ts +35 -0
  53. package/dist/config/skill-discovery.d.ts.map +1 -0
  54. package/dist/config/skill-discovery.js +188 -0
  55. package/dist/config/skill-discovery.js.map +1 -0
  56. package/dist/handlers/account.d.ts +43 -0
  57. package/dist/handlers/account.d.ts.map +1 -0
  58. package/dist/handlers/account.js +59 -0
  59. package/dist/handlers/account.js.map +1 -0
  60. package/dist/handlers/background-tasks.d.ts +72 -0
  61. package/dist/handlers/background-tasks.d.ts.map +1 -0
  62. package/dist/handlers/background-tasks.js +330 -0
  63. package/dist/handlers/background-tasks.js.map +1 -0
  64. package/dist/handlers/dispatch.d.ts.map +1 -1
  65. package/dist/handlers/dispatch.js +134 -22
  66. package/dist/handlers/dispatch.js.map +1 -1
  67. package/dist/handlers/extensions.d.ts +15 -0
  68. package/dist/handlers/extensions.d.ts.map +1 -1
  69. package/dist/handlers/extensions.js +43 -27
  70. package/dist/handlers/extensions.js.map +1 -1
  71. package/dist/handlers/io.d.ts +31 -3
  72. package/dist/handlers/io.d.ts.map +1 -1
  73. package/dist/handlers/io.js +108 -9
  74. package/dist/handlers/io.js.map +1 -1
  75. package/dist/handlers/replay.d.ts +79 -0
  76. package/dist/handlers/replay.d.ts.map +1 -0
  77. package/dist/handlers/replay.js +252 -0
  78. package/dist/handlers/replay.js.map +1 -0
  79. package/dist/handlers/server-requests.d.ts +20 -4
  80. package/dist/handlers/server-requests.d.ts.map +1 -1
  81. package/dist/handlers/server-requests.js +293 -63
  82. package/dist/handlers/server-requests.js.map +1 -1
  83. package/dist/handlers/session.d.ts +113 -10
  84. package/dist/handlers/session.d.ts.map +1 -1
  85. package/dist/handlers/session.js +932 -277
  86. package/dist/handlers/session.js.map +1 -1
  87. package/dist/handlers/slash.d.ts +37 -1
  88. package/dist/handlers/slash.d.ts.map +1 -1
  89. package/dist/handlers/slash.js +143 -8
  90. package/dist/handlers/slash.js.map +1 -1
  91. package/dist/index.js +76 -12
  92. package/dist/index.js.map +1 -1
  93. package/dist/interaction/adapter.d.ts +19 -33
  94. package/dist/interaction/adapter.d.ts.map +1 -1
  95. package/dist/interaction/adapter.js +80 -79
  96. package/dist/interaction/adapter.js.map +1 -1
  97. package/dist/lazy-sessions.d.ts +35 -0
  98. package/dist/lazy-sessions.d.ts.map +1 -0
  99. package/dist/lazy-sessions.js +98 -0
  100. package/dist/lazy-sessions.js.map +1 -0
  101. package/dist/quota/cache.d.ts +18 -0
  102. package/dist/quota/cache.d.ts.map +1 -0
  103. package/dist/quota/cache.js +32 -0
  104. package/dist/quota/cache.js.map +1 -0
  105. package/dist/quota/client.d.ts +30 -0
  106. package/dist/quota/client.d.ts.map +1 -0
  107. package/dist/quota/client.js +57 -0
  108. package/dist/quota/client.js.map +1 -0
  109. package/dist/quota/color.d.ts +58 -0
  110. package/dist/quota/color.d.ts.map +1 -0
  111. package/dist/quota/color.js +95 -0
  112. package/dist/quota/color.js.map +1 -0
  113. package/dist/quota/combined.d.ts +66 -0
  114. package/dist/quota/combined.d.ts.map +1 -0
  115. package/dist/quota/combined.js +179 -0
  116. package/dist/quota/combined.js.map +1 -0
  117. package/dist/quota/format.d.ts +105 -0
  118. package/dist/quota/format.d.ts.map +1 -0
  119. package/dist/quota/format.js +219 -0
  120. package/dist/quota/format.js.map +1 -0
  121. package/dist/quota/index.d.ts +23 -0
  122. package/dist/quota/index.d.ts.map +1 -0
  123. package/dist/quota/index.js +42 -0
  124. package/dist/quota/index.js.map +1 -0
  125. package/dist/quota/opencode-go/cache.d.ts +17 -0
  126. package/dist/quota/opencode-go/cache.d.ts.map +1 -0
  127. package/dist/quota/opencode-go/cache.js +31 -0
  128. package/dist/quota/opencode-go/cache.js.map +1 -0
  129. package/dist/quota/opencode-go/client.d.ts +28 -0
  130. package/dist/quota/opencode-go/client.d.ts.map +1 -0
  131. package/dist/quota/opencode-go/client.js +48 -0
  132. package/dist/quota/opencode-go/client.js.map +1 -0
  133. package/dist/quota/opencode-go/config.d.ts +37 -0
  134. package/dist/quota/opencode-go/config.d.ts.map +1 -0
  135. package/dist/quota/opencode-go/config.js +58 -0
  136. package/dist/quota/opencode-go/config.js.map +1 -0
  137. package/dist/quota/opencode-go/format.d.ts +36 -0
  138. package/dist/quota/opencode-go/format.d.ts.map +1 -0
  139. package/dist/quota/opencode-go/format.js +87 -0
  140. package/dist/quota/opencode-go/format.js.map +1 -0
  141. package/dist/quota/opencode-go/index.d.ts +30 -0
  142. package/dist/quota/opencode-go/index.d.ts.map +1 -0
  143. package/dist/quota/opencode-go/index.js +108 -0
  144. package/dist/quota/opencode-go/index.js.map +1 -0
  145. package/dist/quota/opencode-go/parse.d.ts +41 -0
  146. package/dist/quota/opencode-go/parse.d.ts.map +1 -0
  147. package/dist/quota/opencode-go/parse.js +75 -0
  148. package/dist/quota/opencode-go/parse.js.map +1 -0
  149. package/dist/quota/opencode-go/types.d.ts +48 -0
  150. package/dist/quota/opencode-go/types.d.ts.map +1 -0
  151. package/dist/quota/opencode-go/types.js +11 -0
  152. package/dist/quota/opencode-go/types.js.map +1 -0
  153. package/dist/quota/parse.d.ts +33 -0
  154. package/dist/quota/parse.d.ts.map +1 -0
  155. package/dist/quota/parse.js +200 -0
  156. package/dist/quota/parse.js.map +1 -0
  157. package/dist/quota/types.d.ts +72 -0
  158. package/dist/quota/types.d.ts.map +1 -0
  159. package/dist/quota/types.js +10 -0
  160. package/dist/quota/types.js.map +1 -0
  161. package/dist/remote/broadcast.d.ts +47 -0
  162. package/dist/remote/broadcast.d.ts.map +1 -0
  163. package/dist/remote/broadcast.js +121 -0
  164. package/dist/remote/broadcast.js.map +1 -0
  165. package/dist/remote/config.d.ts +32 -0
  166. package/dist/remote/config.d.ts.map +1 -0
  167. package/dist/remote/config.js +65 -0
  168. package/dist/remote/config.js.map +1 -0
  169. package/dist/remote/endpoint.d.ts +30 -0
  170. package/dist/remote/endpoint.d.ts.map +1 -0
  171. package/dist/remote/endpoint.js +213 -0
  172. package/dist/remote/endpoint.js.map +1 -0
  173. package/dist/remote/hub-server.d.ts +41 -0
  174. package/dist/remote/hub-server.d.ts.map +1 -0
  175. package/dist/remote/hub-server.js +346 -0
  176. package/dist/remote/hub-server.js.map +1 -0
  177. package/dist/server.d.ts +139 -1
  178. package/dist/server.d.ts.map +1 -1
  179. package/dist/server.js +179 -4
  180. package/dist/server.js.map +1 -1
  181. package/dist/tasks-index.d.ts +14 -4
  182. package/dist/tasks-index.d.ts.map +1 -1
  183. package/dist/tasks-index.js +145 -46
  184. package/dist/tasks-index.js.map +1 -1
  185. package/dist/translators/event-translator.d.ts +33 -0
  186. package/dist/translators/event-translator.d.ts.map +1 -1
  187. package/dist/translators/event-translator.js +101 -0
  188. package/dist/translators/event-translator.js.map +1 -1
  189. package/dist/translators/index.d.ts +1 -1
  190. package/dist/translators/index.d.ts.map +1 -1
  191. package/dist/translators/index.js +1 -1
  192. package/dist/translators/index.js.map +1 -1
  193. package/dist/translators/projection-differ.d.ts +8 -0
  194. package/dist/translators/projection-differ.d.ts.map +1 -1
  195. package/dist/translators/projection-differ.js +19 -9
  196. package/dist/translators/projection-differ.js.map +1 -1
  197. package/dist/translators/tool-helpers.d.ts +28 -0
  198. package/dist/translators/tool-helpers.d.ts.map +1 -1
  199. package/dist/translators/tool-helpers.js +104 -0
  200. package/dist/translators/tool-helpers.js.map +1 -1
  201. package/dist/translators/types.d.ts +38 -1
  202. package/dist/translators/types.d.ts.map +1 -1
  203. package/dist/translators/types.js.map +1 -1
  204. package/dist/utils.d.ts +36 -7
  205. package/dist/utils.d.ts.map +1 -1
  206. package/dist/utils.js +69 -5
  207. package/dist/utils.js.map +1 -1
  208. package/docs/ARCHITECTURE.md +130 -40
  209. package/docs/BACKLOG.md +59 -0
  210. package/docs/DEVELOPMENT.md +31 -0
  211. package/docs/PROTOCOL.md +328 -23
  212. package/docs/REMOTE-CLIENTS.md +260 -0
  213. package/docs/REPLAY-GUIDE.md +131 -0
  214. package/docs/TROUBLESHOOTING.md +131 -14
  215. package/docs/adr/0001-bridge-lifetime-follows-primary-client.md +14 -0
  216. package/docs/adr/0002-stateless-hub-over-per-bridge-acp-endpoints.md +23 -0
  217. package/docs/adr/0003-tail-replay-meta-and-cursor-pagination.md +40 -0
  218. package/docs/agents/domain.md +51 -0
  219. package/docs/agents/issue-tracker.md +22 -0
  220. package/docs/agents/triage-labels.md +15 -0
  221. package/docs/proposals/0001-tail-session-replay.md +136 -0
  222. package/docs/proposals/0002-plan-quota-usage.md +81 -0
  223. package/package.json +10 -6
@@ -9,12 +9,23 @@
9
9
  import type * as acp from "@agentclientprotocol/sdk";
10
10
  import type { ZcodeAcpServer } from "../server.js";
11
11
  import type { ProjectionDiffer } from "../translators/projection-differ.js";
12
- /** Read the session's current model id, with a per-session cache. */
12
+ /**
13
+ * Read the session's current model as an encoded `"providerId\modelId"` string,
14
+ * with a per-session cache. Returns the encoded form so callers can resolve the
15
+ * provider (for context-window lookup / model switching) without a second read.
16
+ */
13
17
  export declare function currentModelCached(server: ZcodeAcpServer, zcodeSid: string): Promise<string>;
14
18
  /**
15
19
  * Emit an initial usage_update after resume/load so the editor shows the
16
20
  * context bar. Skips when there's no token data (resume before any turn → 0).
17
21
  * Also syncs the differ's usage baseline so the first turn won't re-emit it.
22
+ *
23
+ * Note: the backend's `projection.contextUsed` is 0 after resume — it only
24
+ * updates after a new turn completes. So a resumed session with history won't
25
+ * show a context bar until the first post-resume message. That's acceptable:
26
+ * we don't have a reliable way to estimate the pre-resume context size, and
27
+ * guessing wrong (e.g. from per-turn token totals that include re-sent history)
28
+ * is worse than showing nothing.
18
29
  */
19
30
  export declare function emitInitialUsage(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, zcodeSid: string, differ: ProjectionDiffer | undefined): Promise<void>;
20
31
  //# sourceMappingURL=model-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAKrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qEAAqE;AACrE,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAYrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
@@ -6,32 +6,52 @@
6
6
  * after resume/load so the editor shows the context bar immediately (only when
7
7
  * there's actual token data — resume before any turn has 0, which we skip).
8
8
  */
9
- import { modelContextWindow } from "./options.js";
9
+ import { DEFAULT_MODEL_ID, DEFAULT_PROVIDER_ID, formatModelValue, loadAllModels, modelContextWindow, parseModelValue, } from "./options.js";
10
10
  import { log } from "../utils.js";
11
11
  import { dispatchEvent } from "../handlers/dispatch.js";
12
- /** Read the session's current model id, with a per-session cache. */
12
+ /**
13
+ * Read the session's current model as an encoded `"providerId\modelId"` string,
14
+ * with a per-session cache. Returns the encoded form so callers can resolve the
15
+ * provider (for context-window lookup / model switching) without a second read.
16
+ */
13
17
  export async function currentModelCached(server, zcodeSid) {
14
18
  const cached = server.modelCache.get(zcodeSid);
15
19
  if (cached)
16
20
  return cached;
17
- let modelId = "GLM-5.2";
21
+ let providerId = "";
22
+ let modelId = DEFAULT_MODEL_ID;
18
23
  try {
19
24
  const read = await sessionRead(server, zcodeSid);
20
25
  const settings = (read.settings ?? {});
21
- const cur = settings.model?.current;
26
+ const cur = settings.model
27
+ ?.current;
28
+ if (cur?.providerId)
29
+ providerId = cur.providerId;
22
30
  if (cur?.modelId)
23
31
  modelId = cur.modelId;
24
32
  }
25
33
  catch (e) {
26
34
  log(`model-cache: session/read failed (${e instanceof Error ? e.message : String(e)})`);
27
35
  }
28
- server.modelCache.set(zcodeSid, modelId);
29
- return modelId;
36
+ if (!providerId) {
37
+ // Legacy session without a providerId — resolve to the first enabled provider.
38
+ providerId = loadAllModels()[0]?.providerId ?? DEFAULT_PROVIDER_ID;
39
+ }
40
+ const encoded = formatModelValue(providerId, modelId);
41
+ server.modelCache.set(zcodeSid, encoded);
42
+ return encoded;
30
43
  }
31
44
  /**
32
45
  * Emit an initial usage_update after resume/load so the editor shows the
33
46
  * context bar. Skips when there's no token data (resume before any turn → 0).
34
47
  * Also syncs the differ's usage baseline so the first turn won't re-emit it.
48
+ *
49
+ * Note: the backend's `projection.contextUsed` is 0 after resume — it only
50
+ * updates after a new turn completes. So a resumed session with history won't
51
+ * show a context bar until the first post-resume message. That's acceptable:
52
+ * we don't have a reliable way to estimate the pre-resume context size, and
53
+ * guessing wrong (e.g. from per-turn token totals that include re-sent history)
54
+ * is worse than showing nothing.
35
55
  */
36
56
  export async function emitInitialUsage(server, cx, acpSid, zcodeSid, differ) {
37
57
  try {
@@ -43,8 +63,10 @@ export async function emitInitialUsage(server, cx, acpSid, zcodeSid, differ) {
43
63
  if (!used)
44
64
  return; // resume before any turn: skip to avoid showing 0.
45
65
  let size = proj.contextWindow ?? 0;
46
- if (!size)
47
- size = modelContextWindow(await currentModelCached(server, zcodeSid));
66
+ if (!size) {
67
+ const { providerId, modelId } = parseModelValue(await currentModelCached(server, zcodeSid));
68
+ size = modelContextWindow(providerId, modelId);
69
+ }
48
70
  await dispatchEvent(server, cx, acpSid, { kind: "UsageDelta", used, size }, `init_${zcodeSid.slice(0, 8)}`);
49
71
  differ?.setLastUsage(used);
50
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;QAClE,MAAM,GAAG,GAAI,QAAQ,CAAC,KAA4C,EAAE,OAAO,CAAC;QAC5E,IAAI,GAAG,EAAE,OAAO;YAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,qCAAqC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAsB,EACtB,EAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,MAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAIlC,CAAC;QACF,2EAA2E;QAC3E,4EAA4E;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,mDAAmD;QACtE,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,kBAAkB,CAAC,MAAM,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjF,MAAM,aAAa,CACjB,MAAM,EACN,EAAE,EACF,MAAM,EACN,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,EAClC,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAC/B,CAAC;QACF,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,2CAA2C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAsB,EAAE,QAAgB;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,MAAM,CAAC,MAAM,EAAE,EACf,cAAc,EACd,EAAE,SAAS,EAAE,QAAQ,EAAE,EACvB,IAAI,CACL,CAAC;IACF,IAAI,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAoB,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"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"}
@@ -11,14 +11,87 @@
11
11
  */
12
12
  import type * as acp from "@agentclientprotocol/sdk";
13
13
  import type { ZcodeAcpServer } from "../server.js";
14
- /** Read the model id list for the enabled provider from config.json. */
15
- export declare function loadProviderModels(): string[];
16
- /** Read the context-window size for a model from config.json (limit.context). */
17
- export declare function modelContextWindow(modelId: string): number;
18
- /** Build the ACP SessionModeState ({currentModeId, availableModes}). */
19
- export declare function buildModes(server: ZcodeAcpServer, zcodeSid: string): Promise<acp.SessionModeState>;
20
- /** Build the ACP configOptions array (3 items: model/mode/thought). */
21
- export declare function buildConfigOptions(server: ZcodeAcpServer, zcodeSid: string): Promise<acp.SessionConfigOption[]>;
14
+ interface ProviderModelsJson {
15
+ [modelId: string]: {
16
+ limit?: {
17
+ context?: number;
18
+ };
19
+ } | undefined;
20
+ }
21
+ /** A single provider's entry in config.json (`provider.<providerId>`). */
22
+ interface ProviderEntry {
23
+ name?: string;
24
+ kind?: string;
25
+ enabled?: boolean;
26
+ options?: {
27
+ baseURL?: string;
28
+ apiKey?: string;
29
+ };
30
+ models?: ProviderModelsJson;
31
+ }
32
+ /**
33
+ * Fallback defaults for when config.json is unreadable or has no enabled
34
+ * provider — keeps a freshly-installed editor functional. Must stay in sync
35
+ * with the model the app ships first in its provider list.
36
+ */
37
+ export declare const DEFAULT_PROVIDER_ID = "builtin:bigmodel-coding-plan";
38
+ export declare const DEFAULT_PROVIDER_NAME = "BigModel";
39
+ export declare const DEFAULT_MODEL_ID = "GLM-5.3";
40
+ /** A model selectable in the dropdown, with its owning provider. */
41
+ export interface ModelRef {
42
+ providerId: string;
43
+ providerName: string;
44
+ modelId: string;
45
+ }
46
+ /**
47
+ * Collect models from config.json for the dropdown.
48
+ *
49
+ * Builtin providers (id prefix `builtin:`) must be `enabled: true` — they
50
+ * reflect the plans the user activated in the ZCode desktop app. Custom
51
+ * (third-party) providers are included UNLESS explicitly `enabled: false`:
52
+ * the newer CLI leaves the flag unset on active third-party providers, so
53
+ * treating "absent" as enabled keeps them in the dropdown while still
54
+ * honoring an explicit disable.
55
+ */
56
+ export declare function loadAllModels(): ModelRef[];
57
+ /** Look up a provider entry by id (any provider, not just enabled). */
58
+ export declare function findProviderConfig(providerId: string): ProviderEntry | null;
59
+ /** Read the context-window size for a provider+model from config.json. */
60
+ export declare function modelContextWindow(providerId: string, modelId: string): number;
61
+ /** Builtin providerIds are prefixed with `builtin:` (e.g. `builtin:bigmodel`). */
62
+ export declare function isBuiltinProvider(providerId: string): boolean;
63
+ /**
64
+ * Encode a provider+model pair into a configOption `value` string.
65
+ *
66
+ * Builtin providers encode as the bare modelId (legacy form, keeps the dropdown
67
+ * clean for the common case). Third-party providers encode as
68
+ * `providerId\modelId` — `\` is unambiguous because providerIds (UUIDs) and
69
+ * modelIds (`/`-separated) never contain it.
70
+ */
71
+ export declare function formatModelValue(providerId: string, modelId: string): string;
72
+ /**
73
+ * Parse a configOption `value` back into { providerId, modelId }.
74
+ *
75
+ * A value without `\` is a builtin modelId (legacy form) → resolve to the first
76
+ * enabled builtin provider. A value with `\` is a third-party provider+model.
77
+ */
78
+ export declare function parseModelValue(value: string): {
79
+ providerId: string;
80
+ modelId: string;
81
+ };
82
+ /** Build the ACP SessionModeState ({currentModeId, availableModes}).
83
+ * zcodeSid null = pending session (session/new not yet materialized) — skip
84
+ * the backend read and return defaults. */
85
+ export declare function buildModes(server: ZcodeAcpServer, zcodeSid: string | null): Promise<acp.SessionModeState>;
86
+ export declare function orderThoughtVariants(variants: string[]): Array<{
87
+ value: string;
88
+ name: string;
89
+ }>;
90
+ /** Build the ACP configOptions array (3 items: model/mode/thought).
91
+ * zcodeSid null = pending session — skip the backend read and use defaults;
92
+ * mode defaults to "yolo" (the mode session/create hardcodes) so the dropdown
93
+ * matches the mode indicator for a fresh session. */
94
+ export declare function buildConfigOptions(server: ZcodeAcpServer, zcodeSid: string | null): Promise<acp.SessionConfigOption[]>;
22
95
  /**
23
96
  * Dispatch session/set_config_option. mode/thought forward to setMode/
24
97
  * setThoughtLevel; model routes through applyModelSwitch (runtime-model.ts).
@@ -31,6 +104,11 @@ export declare function setConfigOption(server: ZcodeAcpServer, zcodeSid: string
31
104
  currentValue: string;
32
105
  } | null>;
33
106
  /** Emit a config_option_update (+ current_mode_update for mode) after a change.
34
- * Returns the rebuilt options so the caller can include them in the response. */
107
+ * Returns the rebuilt options so the caller can include them in the response.
108
+ *
109
+ * For model switches, also emit a usage_update with the NEW model's context
110
+ * window (from config.json) so the editor's context bar refreshes immediately
111
+ * instead of waiting for the next turn's UsageDelta. */
35
112
  export declare function emitConfigOptionUpdate(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, zcodeSid: string, kind: "model" | "mode" | "thought"): Promise<acp.SessionConfigOption[]>;
113
+ export {};
36
114
  //# sourceMappingURL=options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS1D;AAED,wEAAwE;AACxE,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAc/B;AAED,uEAAuE;AACvE,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAyDpC;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkB9E;AAED;kFACkF;AAClF,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAcpC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}
@@ -10,29 +10,85 @@
10
10
  * reflects the new state.
11
11
  */
12
12
  import { readFileSync } from "node:fs";
13
- import { CONFIG_DISPATCH, CONFIG_META, ZCODE_CREDS_PATH } from "../utils.js";
13
+ import { CONFIG_DISPATCH, CONFIG_META, log, ZCODE_CREDS_PATH } from "../utils.js";
14
14
  import { sendSessionUpdate } from "../handlers/io.js";
15
15
  /** Read the config.json contents (UTF-8). Throws on read/parse failure. */
16
16
  function readConfig() {
17
17
  return JSON.parse(readFileSync(ZCODE_CREDS_PATH, "utf8"));
18
18
  }
19
- /** Read the model id list for the enabled provider from config.json. */
20
- export function loadProviderModels() {
19
+ /**
20
+ * Fallback defaults for when config.json is unreadable or has no enabled
21
+ * provider — keeps a freshly-installed editor functional. Must stay in sync
22
+ * with the model the app ships first in its provider list.
23
+ */
24
+ export const DEFAULT_PROVIDER_ID = "builtin:bigmodel-coding-plan";
25
+ export const DEFAULT_PROVIDER_NAME = "BigModel";
26
+ export const DEFAULT_MODEL_ID = "GLM-5.3";
27
+ /**
28
+ * Collect models from config.json for the dropdown.
29
+ *
30
+ * Builtin providers (id prefix `builtin:`) must be `enabled: true` — they
31
+ * reflect the plans the user activated in the ZCode desktop app. Custom
32
+ * (third-party) providers are included UNLESS explicitly `enabled: false`:
33
+ * the newer CLI leaves the flag unset on active third-party providers, so
34
+ * treating "absent" as enabled keeps them in the dropdown while still
35
+ * honoring an explicit disable.
36
+ */
37
+ export function loadAllModels() {
38
+ try {
39
+ const cfg = readConfig();
40
+ const out = [];
41
+ for (const [pid, p] of Object.entries(cfg.provider ?? {})) {
42
+ if (isBuiltinProvider(pid)) {
43
+ if (p?.enabled !== true)
44
+ continue;
45
+ }
46
+ else if (p?.enabled === false) {
47
+ continue;
48
+ }
49
+ const providerName = p.name ?? pid;
50
+ for (const modelId of Object.keys(p.models ?? {})) {
51
+ out.push({ providerId: pid, providerName, modelId });
52
+ }
53
+ }
54
+ if (out.length === 0) {
55
+ // Fallback: config unreadable or no enabled provider — keep the legacy
56
+ // default so a freshly-installed editor still shows something.
57
+ return [
58
+ {
59
+ providerId: DEFAULT_PROVIDER_ID,
60
+ providerName: DEFAULT_PROVIDER_NAME,
61
+ modelId: DEFAULT_MODEL_ID,
62
+ },
63
+ ];
64
+ }
65
+ return out;
66
+ }
67
+ catch {
68
+ return [
69
+ {
70
+ providerId: DEFAULT_PROVIDER_ID,
71
+ providerName: DEFAULT_PROVIDER_NAME,
72
+ modelId: DEFAULT_MODEL_ID,
73
+ },
74
+ ];
75
+ }
76
+ }
77
+ /** Look up a provider entry by id (any provider, not just enabled). */
78
+ export function findProviderConfig(providerId) {
21
79
  try {
22
80
  const cfg = readConfig();
23
- const models = cfg.provider?.["builtin:bigmodel-coding-plan"]?.models ?? {};
24
- const keys = Object.keys(models);
25
- return keys.length > 0 ? keys : ["GLM-5.2"];
81
+ return cfg.provider?.[providerId] ?? null;
26
82
  }
27
83
  catch {
28
- return ["GLM-5.2"];
84
+ return null;
29
85
  }
30
86
  }
31
- /** Read the context-window size for a model from config.json (limit.context). */
32
- export function modelContextWindow(modelId) {
87
+ /** Read the context-window size for a provider+model from config.json. */
88
+ export function modelContextWindow(providerId, modelId) {
33
89
  try {
34
90
  const cfg = readConfig();
35
- const models = cfg.provider?.["builtin:bigmodel-coding-plan"]?.models ?? {};
91
+ const models = cfg.provider?.[providerId]?.models ?? {};
36
92
  const entry = models[modelId];
37
93
  return entry?.limit?.context ?? 0;
38
94
  }
@@ -40,52 +96,169 @@ export function modelContextWindow(modelId) {
40
96
  return 0;
41
97
  }
42
98
  }
43
- /** Build the ACP SessionModeState ({currentModeId, availableModes}). */
99
+ /** Builtin providerIds are prefixed with `builtin:` (e.g. `builtin:bigmodel`). */
100
+ export function isBuiltinProvider(providerId) {
101
+ return providerId.startsWith("builtin:");
102
+ }
103
+ /**
104
+ * Encode a provider+model pair into a configOption `value` string.
105
+ *
106
+ * Builtin providers encode as the bare modelId (legacy form, keeps the dropdown
107
+ * clean for the common case). Third-party providers encode as
108
+ * `providerId\modelId` — `\` is unambiguous because providerIds (UUIDs) and
109
+ * modelIds (`/`-separated) never contain it.
110
+ */
111
+ export function formatModelValue(providerId, modelId) {
112
+ if (isBuiltinProvider(providerId))
113
+ return modelId;
114
+ return `${providerId}\\${modelId}`;
115
+ }
116
+ /**
117
+ * Parse a configOption `value` back into { providerId, modelId }.
118
+ *
119
+ * A value without `\` is a builtin modelId (legacy form) → resolve to the first
120
+ * enabled builtin provider. A value with `\` is a third-party provider+model.
121
+ */
122
+ export function parseModelValue(value) {
123
+ const idx = value.indexOf("\\");
124
+ if (idx < 0) {
125
+ // Builtin plain modelId — resolve to the first enabled builtin provider
126
+ // (falling back to the legacy default if none configured).
127
+ const firstBuiltin = loadAllModels().find((m) => isBuiltinProvider(m.providerId));
128
+ return {
129
+ providerId: firstBuiltin?.providerId ?? DEFAULT_PROVIDER_ID,
130
+ modelId: value,
131
+ };
132
+ }
133
+ return { providerId: value.slice(0, idx), modelId: value.slice(idx + 1) };
134
+ }
135
+ /** Build the ACP SessionModeState ({currentModeId, availableModes}).
136
+ * zcodeSid null = pending session (session/new not yet materialized) — skip
137
+ * the backend read and return defaults. */
44
138
  export async function buildModes(server, zcodeSid) {
45
139
  let currentMode = "yolo";
46
- try {
47
- const read = await sessionRead(server, zcodeSid);
48
- const settings = (read.settings ?? {});
49
- const modeSet = settings.mode ?? {};
50
- currentMode = modeSet.current ?? currentMode;
51
- }
52
- catch {
53
- // keep default
140
+ if (zcodeSid !== null) {
141
+ try {
142
+ const read = await sessionRead(server, zcodeSid);
143
+ const settings = (read.settings ?? {});
144
+ const modeSet = settings.mode ?? {};
145
+ currentMode = modeSet.current ?? currentMode;
146
+ }
147
+ catch {
148
+ // keep default
149
+ }
54
150
  }
55
151
  return {
56
152
  currentModeId: currentMode,
57
- availableModes: ["plan", "build", "edit", "yolo"].map((m) => ({ id: m, name: capitalize(m) })),
153
+ // ZCode 3.3.0 mode enum: plan/build/edit/yolo/auto. settings.mode only
154
+ // carries `current` (no `available` list, unlike thoughtLevel), so the full
155
+ // enum is advertised here.
156
+ availableModes: ["plan", "build", "edit", "yolo", "auto"].map((m) => ({
157
+ id: m,
158
+ name: capitalize(m),
159
+ })),
58
160
  };
59
161
  }
60
- /** Build the ACP configOptions array (3 items: model/mode/thought). */
162
+ /**
163
+ * Canonical display order for thought-level tokens across models
164
+ * (GLM-5.3: low/high/max; GLM-5-Turbo: enabled/off; others may differ).
165
+ * Unknown tokens keep their config order after the known ones.
166
+ */
167
+ const THOUGHT_ORDER = ["low", "medium", "high", "xhigh", "max", "ultra", "enabled", "disabled", "off"];
168
+ export function orderThoughtVariants(variants) {
169
+ const known = THOUGHT_ORDER.filter((t) => variants.includes(t));
170
+ const extra = variants.filter((t) => !THOUGHT_ORDER.includes(t));
171
+ return [...known, ...extra].map((t) => ({ value: t, name: t }));
172
+ }
173
+ /** Build the ACP configOptions array (3 items: model/mode/thought).
174
+ * zcodeSid null = pending session — skip the backend read and use defaults;
175
+ * mode defaults to "yolo" (the mode session/create hardcodes) so the dropdown
176
+ * matches the mode indicator for a fresh session. */
61
177
  export async function buildConfigOptions(server, zcodeSid) {
62
- let currentModel = "GLM-5.2";
63
- let currentMode = "build";
64
- let currentThought = "high";
178
+ let currentProviderId = "";
179
+ let currentModelId = DEFAULT_MODEL_ID;
180
+ let currentMode = zcodeSid === null ? "yolo" : "build";
181
+ // Matches the enabled provider's default reasoning variants (GLM-5.3:
182
+ // max/high/low, default max). Pending sessions show this until the real
183
+ // session/read thoughtLevel arrives.
184
+ let currentThought = "max";
65
185
  let thoughtOptions = null;
66
- try {
67
- const read = await sessionRead(server, zcodeSid);
68
- const settings = (read.settings ?? {});
69
- const modeSet = settings.mode ?? {};
70
- currentMode = modeSet.current ?? currentMode;
71
- const modelSet = settings.model ?? {};
72
- const cur = modelSet.current ?? {};
73
- if (cur.modelId)
74
- currentModel = cur.modelId;
75
- const tlSet = settings.thoughtLevel ?? {};
76
- currentThought = tlSet.current ?? currentThought;
77
- const tlAvail = tlSet.available ?? [];
78
- if (tlAvail.length > 0) {
79
- thoughtOptions = tlAvail.map((a) => ({ value: a.value, name: a.label ?? a.value }));
186
+ if (zcodeSid === null) {
187
+ // Pending session no backend to read yet, but the thought vocabulary
188
+ // is per model and the runtime's own source of truth is the enabled
189
+ // provider's models[].reasoning.variants in the local config. Advertise
190
+ // THAT for the default model instead of a hardcoded list: a client that
191
+ // relays the options into a picker (Multica's effort selector) would
192
+ // otherwise offer tokens the runtime rejects ("nothink" was fiction,
193
+ // "low" was missing).
194
+ const cur = loadAllModels()[0];
195
+ if (cur) {
196
+ // The advertised current model follows the dropdown's leading entry
197
+ // (the enabled provider's first model — what the runtime actually
198
+ // starts sessions with) rather than the legacy hardcoded "GLM-5.2".
199
+ // ACP clients skip a requested model switch when it equals the
200
+ // advertised current value, so a stale fiction silently pinned the
201
+ // wrong model whenever the requested id happened to match it.
202
+ currentProviderId = cur.providerId;
203
+ currentModelId = cur.modelId;
204
+ try {
205
+ const cfg = readConfig();
206
+ const m = cfg.provider?.[cur.providerId]?.models?.[cur.modelId];
207
+ const reasoning = m?.reasoning;
208
+ const variants = reasoning?.variants;
209
+ if (reasoning?.enabled !== false && variants && variants.length > 0) {
210
+ thoughtOptions = orderThoughtVariants(variants);
211
+ currentThought = reasoning.defaultVariant ?? variants[0];
212
+ }
213
+ }
214
+ catch {
215
+ // unreadable config — the static fallback below applies
216
+ }
80
217
  }
81
218
  }
82
- catch {
83
- // keep defaults
219
+ if (zcodeSid !== null) {
220
+ try {
221
+ const read = await sessionRead(server, zcodeSid);
222
+ const settings = (read.settings ?? {});
223
+ const modeSet = settings.mode ?? {};
224
+ currentMode = modeSet.current ?? currentMode;
225
+ const modelSet = settings.model ?? {};
226
+ // settings.model.current is { providerId, modelId, variant? } — read BOTH so
227
+ // we can disambiguate same-named models across providers.
228
+ const cur = modelSet.current ?? {};
229
+ if (cur.providerId)
230
+ currentProviderId = cur.providerId;
231
+ if (cur.modelId)
232
+ currentModelId = cur.modelId;
233
+ const tlSet = settings.thoughtLevel ?? {};
234
+ // `current` is absent right after session/create — fall back to the
235
+ // backend's defaultLevel (the level the session actually runs at).
236
+ currentThought = tlSet.current ?? tlSet.defaultLevel ?? currentThought;
237
+ const tlAvail = tlSet.available ?? [];
238
+ if (tlAvail.length > 0) {
239
+ thoughtOptions = tlAvail.map((a) => ({ value: a.value, name: a.label ?? a.value }));
240
+ }
241
+ }
242
+ catch {
243
+ // keep defaults
244
+ }
84
245
  }
85
- // Model options: config.json is authoritative (settings.model.available is incomplete).
86
- let modelOptions = loadProviderModels().map((k) => ({ value: k, name: k }));
246
+ // currentValue encodes provider+model so the switch handler can locate the
247
+ // right provider (and its apiKey). Fall back to the first enabled provider
248
+ // when settings omits providerId (legacy sessions).
249
+ const currentModel = formatModelValue(currentProviderId || loadAllModels()[0]?.providerId || DEFAULT_PROVIDER_ID, currentModelId);
250
+ // Model options: config.json enabled providers are authoritative. Builtin
251
+ // models show as the bare modelId (clean dropdown for the common case);
252
+ // third-party models prefix the provider name so they're distinguishable.
253
+ let modelOptions = loadAllModels().map((m) => ({
254
+ value: formatModelValue(m.providerId, m.modelId),
255
+ name: isBuiltinProvider(m.providerId) ? m.modelId : `${m.providerName} › ${m.modelId}`,
256
+ }));
87
257
  if (!modelOptions.some((o) => o.value === currentModel)) {
88
- modelOptions = [{ value: currentModel, name: currentModel }, ...modelOptions];
258
+ // The current model isn't from an enabled provider (e.g. the session was
259
+ // created with a now-disabled provider). Append it so the dropdown still
260
+ // shows the active selection.
261
+ modelOptions = [{ value: currentModel, name: currentModelId }, ...modelOptions];
89
262
  }
90
263
  if (!thoughtOptions)
91
264
  thoughtOptions = [...CONFIG_META.thought.options];
@@ -109,7 +282,12 @@ export async function buildConfigOptions(server, zcodeSid) {
109
282
  {
110
283
  id: "thought",
111
284
  name: CONFIG_META.thought.name,
112
- category: "thought",
285
+ // Category thought_level (not "thought") so ACP clients recognise the
286
+ // option as the reasoning-effort selector: the shared matchers in
287
+ // editors and orchestrators (e.g. Multica's acpEffortOptionIDs) key on
288
+ // id/category "effort"/"thought_level". The id stays "thought" — it is
289
+ // what session/set_config_option addresses.
290
+ category: "thought_level",
113
291
  type: "select",
114
292
  currentValue: currentThought,
115
293
  options: thoughtOptions,
@@ -141,7 +319,11 @@ export async function setConfigOption(server, zcodeSid, configId, value) {
141
319
  return { kind: configId, currentValue: value };
142
320
  }
143
321
  /** Emit a config_option_update (+ current_mode_update for mode) after a change.
144
- * Returns the rebuilt options so the caller can include them in the response. */
322
+ * Returns the rebuilt options so the caller can include them in the response.
323
+ *
324
+ * For model switches, also emit a usage_update with the NEW model's context
325
+ * window (from config.json) so the editor's context bar refreshes immediately
326
+ * instead of waiting for the next turn's UsageDelta. */
145
327
  export async function emitConfigOptionUpdate(server, cx, acpSid, zcodeSid, kind) {
146
328
  const options = await buildConfigOptions(server, zcodeSid);
147
329
  await sendSessionUpdate(cx, acpSid, {
@@ -155,6 +337,27 @@ export async function emitConfigOptionUpdate(server, cx, acpSid, zcodeSid, kind)
155
337
  currentModeId: modes.currentModeId,
156
338
  });
157
339
  }
340
+ if (kind === "model") {
341
+ // Refresh the context bar: the backend's projection.contextWindow lags
342
+ // behind a model switch, so read the new model's limit from config.json.
343
+ try {
344
+ const read = await sessionRead(server, zcodeSid);
345
+ const proj = (read.projection ?? {});
346
+ const used = proj.contextUsed || proj.totalTokenCount || 0;
347
+ // The rebuilt options[0] (model) currentValue is the just-switched value.
348
+ const modelOpt = options.find((o) => o.id === "model");
349
+ const { providerId, modelId } = parseModelValue(String(modelOpt?.currentValue ?? ""));
350
+ const size = modelContextWindow(providerId, modelId);
351
+ await sendSessionUpdate(cx, acpSid, {
352
+ sessionUpdate: "usage_update",
353
+ used,
354
+ size,
355
+ });
356
+ }
357
+ catch (e) {
358
+ log(`options: usage_update after model switch failed (${e instanceof Error ? e.message : String(e)})`);
359
+ }
360
+ }
158
361
  return options;
159
362
  }
160
363
  // ---------- helpers ----------
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}