@atomic-chat/core 0.20.7 → 0.21.1

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 (303) hide show
  1. package/dist/backend/install/service.d.ts +2 -20
  2. package/dist/backend/install/service.js +1 -0
  3. package/dist/backend/install/service.js.map +1 -1
  4. package/dist/cli/launch.d.ts +23 -3
  5. package/dist/cli/launch.js +59 -8
  6. package/dist/cli/launch.js.map +1 -1
  7. package/dist/cli/main.d.ts +1 -1
  8. package/dist/contracts/diagnostics.d.ts +21 -0
  9. package/dist/contracts/diagnostics.js +70 -0
  10. package/dist/contracts/diagnostics.js.map +1 -0
  11. package/dist/contracts/errors.d.ts +17 -75
  12. package/dist/contracts/errors.js +130 -2
  13. package/dist/contracts/errors.js.map +1 -1
  14. package/dist/contracts/events.d.ts +8 -0
  15. package/dist/contracts/index.d.ts +1 -0
  16. package/dist/contracts/index.js +1 -0
  17. package/dist/contracts/index.js.map +1 -1
  18. package/dist/contracts/settings.d.ts +5 -0
  19. package/dist/contracts/settings.js.map +1 -1
  20. package/dist/core/atomic-core.d.ts +3 -1
  21. package/dist/core/atomic-core.js +6 -2
  22. package/dist/core/atomic-core.js.map +1 -1
  23. package/dist/core/create.js +13 -3
  24. package/dist/core/create.js.map +1 -1
  25. package/dist/core/managed-environment.d.ts +2 -0
  26. package/dist/core/managed-environment.js +2 -0
  27. package/dist/core/managed-environment.js.map +1 -1
  28. package/dist/core/sessions.js +1 -0
  29. package/dist/core/sessions.js.map +1 -1
  30. package/dist/decision/service.d.ts +2 -23
  31. package/dist/decision/service.js +27 -0
  32. package/dist/decision/service.js.map +1 -1
  33. package/dist/decision/wiring.d.ts +2 -0
  34. package/dist/decision/wiring.js +1 -6
  35. package/dist/decision/wiring.js.map +1 -1
  36. package/dist/diffusion/errors.js +3 -3
  37. package/dist/diffusion/errors.js.map +1 -1
  38. package/dist/diffusion/jobs.js +1 -0
  39. package/dist/diffusion/jobs.js.map +1 -1
  40. package/dist/diffusion/remote-job.js +1 -0
  41. package/dist/diffusion/remote-job.js.map +1 -1
  42. package/dist/diffusion/service.d.ts +2 -6
  43. package/dist/diffusion/service.js +1 -0
  44. package/dist/diffusion/service.js.map +1 -1
  45. package/dist/diffusion/session.d.ts +2 -5
  46. package/dist/diffusion/session.js +1 -0
  47. package/dist/diffusion/session.js.map +1 -1
  48. package/dist/diffusion/wiring.d.ts +2 -0
  49. package/dist/diffusion/wiring.js +1 -5
  50. package/dist/diffusion/wiring.js.map +1 -1
  51. package/dist/downloads/downloader.d.ts +2 -18
  52. package/dist/downloads/downloader.js +204 -96
  53. package/dist/downloads/downloader.js.map +1 -1
  54. package/dist/downloads/protocol.d.ts +6 -2
  55. package/dist/downloads/protocol.js +27 -5
  56. package/dist/downloads/protocol.js.map +1 -1
  57. package/dist/embedding/service.d.ts +2 -18
  58. package/dist/embedding/service.js +21 -1
  59. package/dist/embedding/service.js.map +1 -1
  60. package/dist/embedding/wiring.d.ts +2 -0
  61. package/dist/embedding/wiring.js +1 -6
  62. package/dist/embedding/wiring.js.map +1 -1
  63. package/dist/integrations/catalog.d.ts +25 -8
  64. package/dist/integrations/catalog.js +105 -38
  65. package/dist/integrations/catalog.js.map +1 -1
  66. package/dist/integrations/configure/atomic-agent.d.ts +9 -1
  67. package/dist/integrations/configure/atomic-agent.js +42 -3
  68. package/dist/integrations/configure/atomic-agent.js.map +1 -1
  69. package/dist/integrations/configure/backup.d.ts +21 -0
  70. package/dist/integrations/configure/backup.js +52 -0
  71. package/dist/integrations/configure/backup.js.map +1 -0
  72. package/dist/integrations/configure/claude-code.d.ts +11 -4
  73. package/dist/integrations/configure/claude-code.js +73 -24
  74. package/dist/integrations/configure/claude-code.js.map +1 -1
  75. package/dist/integrations/configure/cline.d.ts +14 -4
  76. package/dist/integrations/configure/cline.js +78 -6
  77. package/dist/integrations/configure/cline.js.map +1 -1
  78. package/dist/integrations/configure/codex.d.ts +5 -3
  79. package/dist/integrations/configure/codex.js +12 -5
  80. package/dist/integrations/configure/codex.js.map +1 -1
  81. package/dist/integrations/configure/copilot.d.ts +28 -5
  82. package/dist/integrations/configure/copilot.js +124 -8
  83. package/dist/integrations/configure/copilot.js.map +1 -1
  84. package/dist/integrations/configure/droid.d.ts +13 -7
  85. package/dist/integrations/configure/droid.js +48 -17
  86. package/dist/integrations/configure/droid.js.map +1 -1
  87. package/dist/integrations/configure/dsh.d.ts +36 -20
  88. package/dist/integrations/configure/dsh.js +250 -48
  89. package/dist/integrations/configure/dsh.js.map +1 -1
  90. package/dist/integrations/configure/goose.d.ts +21 -7
  91. package/dist/integrations/configure/goose.js +141 -10
  92. package/dist/integrations/configure/goose.js.map +1 -1
  93. package/dist/integrations/configure/hermes.d.ts +63 -10
  94. package/dist/integrations/configure/hermes.js +360 -75
  95. package/dist/integrations/configure/hermes.js.map +1 -1
  96. package/dist/integrations/configure/json-backup.d.ts +73 -0
  97. package/dist/integrations/configure/json-backup.js +292 -0
  98. package/dist/integrations/configure/json-backup.js.map +1 -0
  99. package/dist/integrations/configure/json-key-backup.d.ts +43 -0
  100. package/dist/integrations/configure/json-key-backup.js +113 -0
  101. package/dist/integrations/configure/json-key-backup.js.map +1 -0
  102. package/dist/integrations/configure/kilo.d.ts +4 -4
  103. package/dist/integrations/configure/kilo.js +6 -9
  104. package/dist/integrations/configure/kilo.js.map +1 -1
  105. package/dist/integrations/configure/legacy-env-block.d.ts +18 -0
  106. package/dist/integrations/configure/legacy-env-block.js +47 -0
  107. package/dist/integrations/configure/legacy-env-block.js.map +1 -0
  108. package/dist/integrations/configure/mimo.d.ts +3 -2
  109. package/dist/integrations/configure/mimo.js +8 -9
  110. package/dist/integrations/configure/mimo.js.map +1 -1
  111. package/dist/integrations/configure/muse.d.ts +3 -3
  112. package/dist/integrations/configure/muse.js +5 -6
  113. package/dist/integrations/configure/muse.js.map +1 -1
  114. package/dist/integrations/configure/openclaude.d.ts +22 -7
  115. package/dist/integrations/configure/openclaude.js +132 -39
  116. package/dist/integrations/configure/openclaude.js.map +1 -1
  117. package/dist/integrations/configure/openclaw.d.ts +19 -5
  118. package/dist/integrations/configure/openclaw.js +79 -23
  119. package/dist/integrations/configure/openclaw.js.map +1 -1
  120. package/dist/integrations/configure/opencode-style.d.ts +53 -11
  121. package/dist/integrations/configure/opencode-style.js +218 -23
  122. package/dist/integrations/configure/opencode-style.js.map +1 -1
  123. package/dist/integrations/configure/opencode.d.ts +5 -4
  124. package/dist/integrations/configure/opencode.js +8 -10
  125. package/dist/integrations/configure/opencode.js.map +1 -1
  126. package/dist/integrations/configure/openhands.d.ts +5 -4
  127. package/dist/integrations/configure/openhands.js +7 -7
  128. package/dist/integrations/configure/openhands.js.map +1 -1
  129. package/dist/integrations/configure/pi.d.ts +6 -5
  130. package/dist/integrations/configure/pi.js +79 -30
  131. package/dist/integrations/configure/pi.js.map +1 -1
  132. package/dist/integrations/configure/poolside.d.ts +5 -4
  133. package/dist/integrations/configure/poolside.js +7 -7
  134. package/dist/integrations/configure/poolside.js.map +1 -1
  135. package/dist/integrations/configure/registry.d.ts +6 -0
  136. package/dist/integrations/configure/registry.js +1 -0
  137. package/dist/integrations/configure/registry.js.map +1 -1
  138. package/dist/integrations/configure/zcode.d.ts +6 -7
  139. package/dist/integrations/configure/zcode.js +26 -11
  140. package/dist/integrations/configure/zcode.js.map +1 -1
  141. package/dist/integrations/configure/zed.d.ts +16 -4
  142. package/dist/integrations/configure/zed.js +61 -13
  143. package/dist/integrations/configure/zed.js.map +1 -1
  144. package/dist/lock/instance-lock.js +7 -3
  145. package/dist/lock/instance-lock.js.map +1 -1
  146. package/dist/models/gguf/kv-cache.d.ts +20 -1
  147. package/dist/models/gguf/kv-cache.js +97 -7
  148. package/dist/models/gguf/kv-cache.js.map +1 -1
  149. package/dist/models/gguf/reader.d.ts +5 -3
  150. package/dist/models/gguf/reader.js +10 -6
  151. package/dist/models/gguf/reader.js.map +1 -1
  152. package/dist/remote-access/manager.d.ts +2 -0
  153. package/dist/remote-access/manager.js +18 -2
  154. package/dist/remote-access/manager.js.map +1 -1
  155. package/dist/runtime/environment/service.d.ts +2 -14
  156. package/dist/runtime/environment/service.js +10 -0
  157. package/dist/runtime/environment/service.js.map +1 -1
  158. package/dist/runtime/environment/wiring.d.ts +2 -23
  159. package/dist/runtime/environment/wiring.js +1 -0
  160. package/dist/runtime/environment/wiring.js.map +1 -1
  161. package/dist/runtime/llamacpp/args.d.ts +14 -0
  162. package/dist/runtime/llamacpp/args.js +48 -4
  163. package/dist/runtime/llamacpp/args.js.map +1 -1
  164. package/dist/runtime/llamacpp/ctx-ladder.d.ts +6 -3
  165. package/dist/runtime/llamacpp/ctx-ladder.js +6 -3
  166. package/dist/runtime/llamacpp/ctx-ladder.js.map +1 -1
  167. package/dist/runtime/llamacpp/errors.d.ts +2 -2
  168. package/dist/runtime/llamacpp/errors.js +29 -19
  169. package/dist/runtime/llamacpp/errors.js.map +1 -1
  170. package/dist/runtime/llamacpp/fit-margin.d.ts +24 -0
  171. package/dist/runtime/llamacpp/fit-margin.js +31 -0
  172. package/dist/runtime/llamacpp/fit-margin.js.map +1 -1
  173. package/dist/runtime/llamacpp/generation-limits.d.ts +45 -0
  174. package/dist/runtime/llamacpp/generation-limits.js +61 -0
  175. package/dist/runtime/llamacpp/generation-limits.js.map +1 -0
  176. package/dist/runtime/llamacpp/load-plan.d.ts +14 -2
  177. package/dist/runtime/llamacpp/load-plan.js +64 -13
  178. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  179. package/dist/runtime/llamacpp/runtime.d.ts +1 -0
  180. package/dist/runtime/llamacpp/runtime.js +2 -0
  181. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  182. package/dist/runtime/managed-engines/runtime.js +13 -2
  183. package/dist/runtime/managed-engines/runtime.js.map +1 -1
  184. package/dist/runtime/managed-engines/spec.d.ts +6 -0
  185. package/dist/runtime/managed-engines/spec.js.map +1 -1
  186. package/dist/runtime/managed-models/auto-limits.d.ts +47 -0
  187. package/dist/runtime/managed-models/auto-limits.js +60 -0
  188. package/dist/runtime/managed-models/auto-limits.js.map +1 -0
  189. package/dist/runtime/managed-models/index.d.ts +1 -0
  190. package/dist/runtime/managed-models/index.js +1 -0
  191. package/dist/runtime/managed-models/index.js.map +1 -1
  192. package/dist/runtime/mlx/config.d.ts +9 -5
  193. package/dist/runtime/mlx/config.js +12 -6
  194. package/dist/runtime/mlx/config.js.map +1 -1
  195. package/dist/runtime/mlx/model-files.d.ts +9 -0
  196. package/dist/runtime/mlx/model-files.js +26 -0
  197. package/dist/runtime/mlx/model-files.js.map +1 -1
  198. package/dist/runtime/mlx/runtime.d.ts +7 -0
  199. package/dist/runtime/mlx/runtime.js +24 -2
  200. package/dist/runtime/mlx/runtime.js.map +1 -1
  201. package/dist/runtime/sglang/adapter.d.ts +4 -0
  202. package/dist/runtime/sglang/adapter.js +9 -6
  203. package/dist/runtime/sglang/adapter.js.map +1 -1
  204. package/dist/runtime/sglang/engine.js +2 -1
  205. package/dist/runtime/sglang/engine.js.map +1 -1
  206. package/dist/runtime/sglang/memory.d.ts +11 -1
  207. package/dist/runtime/sglang/memory.js +34 -3
  208. package/dist/runtime/sglang/memory.js.map +1 -1
  209. package/dist/runtime/sglang/settings.d.ts +2 -1
  210. package/dist/runtime/sglang/settings.js +11 -7
  211. package/dist/runtime/sglang/settings.js.map +1 -1
  212. package/dist/runtime/vllm/adapter.d.ts +4 -0
  213. package/dist/runtime/vllm/adapter.js +9 -6
  214. package/dist/runtime/vllm/adapter.js.map +1 -1
  215. package/dist/runtime/vllm/engine.js +1 -0
  216. package/dist/runtime/vllm/engine.js.map +1 -1
  217. package/dist/runtime/vllm/memory.d.ts +12 -1
  218. package/dist/runtime/vllm/memory.js +44 -2
  219. package/dist/runtime/vllm/memory.js.map +1 -1
  220. package/dist/runtime/vllm/settings.d.ts +2 -1
  221. package/dist/runtime/vllm/settings.js +12 -7
  222. package/dist/runtime/vllm/settings.js.map +1 -1
  223. package/dist/server/public/context-window.d.ts +29 -0
  224. package/dist/server/public/context-window.js +77 -0
  225. package/dist/server/public/context-window.js.map +1 -0
  226. package/dist/server/public/decision-preview.js +1 -0
  227. package/dist/server/public/decision-preview.js.map +1 -1
  228. package/dist/server/public/errors.d.ts +17 -4
  229. package/dist/server/public/errors.js +58 -8
  230. package/dist/server/public/errors.js.map +1 -1
  231. package/dist/server/public/forward.js +86 -22
  232. package/dist/server/public/forward.js.map +1 -1
  233. package/dist/server/public/index.d.ts +1 -0
  234. package/dist/server/public/index.js +1 -0
  235. package/dist/server/public/index.js.map +1 -1
  236. package/dist/server/public/listing.d.ts +9 -2
  237. package/dist/server/public/listing.js +30 -9
  238. package/dist/server/public/listing.js.map +1 -1
  239. package/dist/server/public/responses.js +9 -5
  240. package/dist/server/public/responses.js.map +1 -1
  241. package/dist/server/public/system-messages.d.ts +39 -0
  242. package/dist/server/public/system-messages.js +166 -0
  243. package/dist/server/public/system-messages.js.map +1 -0
  244. package/dist/server/public/telemetry.d.ts +9 -0
  245. package/dist/server/public/telemetry.js +42 -6
  246. package/dist/server/public/telemetry.js.map +1 -1
  247. package/dist/server/public/thinking.d.ts +26 -0
  248. package/dist/server/public/thinking.js +62 -0
  249. package/dist/server/public/thinking.js.map +1 -0
  250. package/dist/server/public/trace.d.ts +8 -0
  251. package/dist/server/public/trace.js +17 -0
  252. package/dist/server/public/trace.js.map +1 -1
  253. package/dist/server/public/types.d.ts +8 -0
  254. package/dist/server/shims/index.d.ts +1 -0
  255. package/dist/server/shims/index.js +1 -0
  256. package/dist/server/shims/index.js.map +1 -1
  257. package/dist/server/shims/reminders.d.ts +8 -0
  258. package/dist/server/shims/reminders.js +14 -0
  259. package/dist/server/shims/reminders.js.map +1 -0
  260. package/dist/server/shims/responses.d.ts +33 -9
  261. package/dist/server/shims/responses.js +160 -36
  262. package/dist/server/shims/responses.js.map +1 -1
  263. package/dist/settings/default-migrations.d.ts +34 -0
  264. package/dist/settings/default-migrations.js +47 -0
  265. package/dist/settings/default-migrations.js.map +1 -0
  266. package/dist/settings/schema/atomic-prism.json +23 -9
  267. package/dist/settings/schema/llamacpp-upstream.json +23 -9
  268. package/dist/settings/schema/llamacpp.json +23 -9
  269. package/dist/settings/schema/sglang.json +8 -8
  270. package/dist/settings/schema/vllm.json +8 -8
  271. package/dist/settings/schema.js +1 -0
  272. package/dist/settings/schema.js.map +1 -1
  273. package/dist/settings/store.d.ts +6 -0
  274. package/dist/settings/store.js +19 -2
  275. package/dist/settings/store.js.map +1 -1
  276. package/dist/telemetry/diagnostics.d.ts +14 -0
  277. package/dist/telemetry/diagnostics.js +285 -0
  278. package/dist/telemetry/diagnostics.js.map +1 -0
  279. package/dist/telemetry/envelope.d.ts +1 -1
  280. package/dist/telemetry/envelope.js +57 -28
  281. package/dist/telemetry/envelope.js.map +1 -1
  282. package/dist/telemetry/index.d.ts +1 -0
  283. package/dist/telemetry/index.js +1 -0
  284. package/dist/telemetry/index.js.map +1 -1
  285. package/dist/telemetry/policy.d.ts +1 -1
  286. package/dist/telemetry/policy.js +45 -2
  287. package/dist/telemetry/policy.js.map +1 -1
  288. package/dist/telemetry/reporter.d.ts +1 -0
  289. package/dist/telemetry/reporter.js +0 -0
  290. package/dist/telemetry/reporter.js.map +1 -1
  291. package/dist/telemetry/reports.d.ts +2 -7
  292. package/dist/telemetry/reports.js +34 -29
  293. package/dist/telemetry/reports.js.map +1 -1
  294. package/dist/telemetry/stack.d.ts +1 -1
  295. package/dist/telemetry/stack.js +8 -1
  296. package/dist/telemetry/stack.js.map +1 -1
  297. package/dist/telemetry/subscribe.d.ts +1 -1
  298. package/dist/telemetry/subscribe.js +7 -5
  299. package/dist/telemetry/subscribe.js.map +1 -1
  300. package/dist/telemetry/types.d.ts +3 -2
  301. package/dist/version.d.ts +1 -1
  302. package/dist/version.js +1 -1
  303. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/runtime/vllm/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/runtime/vllm/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The context window a local session serves: what `/models` advertises (`context_length`,
3
+ * `meta.n_ctx`) so an agent can compact before it overflows, and what the request log keeps with each
4
+ * request.
5
+ *
6
+ * A session that declares its limits (`LocalTarget.policy`) says so itself. llama.cpp says it in
7
+ * `/props` (`default_generation_settings.n_ctx`, the window of one slot): under fit the core never
8
+ * chose it, so nothing else knows it. `/props` is answered from the server's metadata without a slot,
9
+ * so it is cheap even while a prompt is being processed, and it is read once per loaded session.
10
+ * Any other engine has no window the server can learn: none is advertised rather than a guess.
11
+ */
12
+ import type { LocalTarget, PublicServerDeps } from './types.js';
13
+ /** The window in a llama.cpp `/props` body; `undefined` when it does not say. */
14
+ export declare function windowFromProps(body: unknown): number | undefined;
15
+ /** What the core can learn of each session's window, asked once per session generation. */
16
+ export declare class SessionWindows {
17
+ private readonly known;
18
+ private readonly fetchImpl;
19
+ private readonly timeoutMs;
20
+ constructor(options?: {
21
+ fetch?: typeof fetch;
22
+ timeoutMs?: number;
23
+ });
24
+ /** The window `target` serves; `undefined` when its engine does not say or cannot be asked. */
25
+ of(target: LocalTarget): Promise<number | undefined>;
26
+ private readProps;
27
+ }
28
+ /** The window a request to `target` runs with: the one it declares, else what the host can learn. */
29
+ export declare function sessionWindow(deps: PublicServerDeps, target: LocalTarget): Promise<number | undefined>;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * The context window a local session serves: what `/models` advertises (`context_length`,
3
+ * `meta.n_ctx`) so an agent can compact before it overflows, and what the request log keeps with each
4
+ * request.
5
+ *
6
+ * A session that declares its limits (`LocalTarget.policy`) says so itself. llama.cpp says it in
7
+ * `/props` (`default_generation_settings.n_ctx`, the window of one slot): under fit the core never
8
+ * chose it, so nothing else knows it. `/props` is answered from the server's metadata without a slot,
9
+ * so it is cheap even while a prompt is being processed, and it is read once per loaded session.
10
+ * Any other engine has no window the server can learn: none is advertised rather than a guess.
11
+ */
12
+ import { isLlamaCppServer } from './thinking.js';
13
+ const PROPS_TIMEOUT_MS = 2000;
14
+ /** Sessions remembered at most; past it the cache starts over (every reload is a new session). */
15
+ const MAX_REMEMBERED = 64;
16
+ /** The window in a llama.cpp `/props` body; `undefined` when it does not say. */
17
+ export function windowFromProps(body) {
18
+ if (typeof body !== 'object' || body === null)
19
+ return undefined;
20
+ const props = body;
21
+ for (const value of [props.default_generation_settings?.n_ctx, props.n_ctx]) {
22
+ if (typeof value === 'number' && Number.isFinite(value) && value > 0)
23
+ return Math.floor(value);
24
+ }
25
+ return undefined;
26
+ }
27
+ /** What the core can learn of each session's window, asked once per session generation. */
28
+ export class SessionWindows {
29
+ known = new Map();
30
+ fetchImpl;
31
+ timeoutMs;
32
+ constructor(options = {}) {
33
+ this.fetchImpl = options.fetch ?? fetch;
34
+ this.timeoutMs = options.timeoutMs ?? PROPS_TIMEOUT_MS;
35
+ }
36
+ /** The window `target` serves; `undefined` when its engine does not say or cannot be asked. */
37
+ of(target) {
38
+ if (!isLlamaCppServer(target.provider))
39
+ return Promise.resolve(undefined);
40
+ // A reload gets a new generation (and port and key): the window it was loaded with may differ.
41
+ const key = [target.provider, target.modelId, target.port, target.generation ?? '', target.apiKey].join('\0');
42
+ const cached = this.known.get(key);
43
+ if (cached)
44
+ return cached;
45
+ if (this.known.size >= MAX_REMEMBERED)
46
+ this.known.clear();
47
+ const read = this.readProps(target);
48
+ this.known.set(key, read);
49
+ // An engine still starting, or one that did not answer, is asked again next time.
50
+ void read.then((window) => {
51
+ if (window === undefined && this.known.get(key) === read)
52
+ this.known.delete(key);
53
+ });
54
+ return read;
55
+ }
56
+ async readProps(target) {
57
+ try {
58
+ const response = await this.fetchImpl(`http://127.0.0.1:${target.port}/props`, {
59
+ headers: target.apiKey ? { Authorization: `Bearer ${target.apiKey}` } : {},
60
+ signal: AbortSignal.timeout(this.timeoutMs),
61
+ });
62
+ if (!response.ok)
63
+ return undefined;
64
+ return windowFromProps(await response.json());
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ }
70
+ }
71
+ /** The window a request to `target` runs with: the one it declares, else what the host can learn. */
72
+ export function sessionWindow(deps, target) {
73
+ if (target.policy?.contextLength !== undefined)
74
+ return Promise.resolve(target.policy.contextLength);
75
+ return deps.contextWindow?.(target) ?? Promise.resolve(undefined);
76
+ }
77
+ //# sourceMappingURL=context-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-window.js","sourceRoot":"","sources":["../../../src/server/public/context-window.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,7 @@ export function decisionReplyFields(body) {
75
75
  const fields = {
76
76
  ttft_ms: null,
77
77
  prompt_tokens: null,
78
+ cached_tokens: null,
78
79
  completion_tokens: null,
79
80
  total_tokens: null,
80
81
  tokens_estimated: false,
@@ -1 +1 @@
1
- {"version":3,"file":"decision-preview.js","sourceRoot":"","sources":["../../../src/server/public/decision-preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decision-preview.js","sourceRoot":"","sources":["../../../src/server/public/decision-preview.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@
11
11
  */
12
12
  import type { JsonValue } from '../shims/index.js';
13
13
  export declare const LLAMA_CONTEXT_OVERFLOW_TYPE = "exceed_context_size_error";
14
+ /** A specific engine refusal suitable for excluding an oversized prompt from error reporting. */
15
+ export declare function isLlamaContextOverflow(body: string): boolean;
14
16
  /** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
15
17
  export declare function isContextLimitError(status: number, body: string): boolean;
16
18
  export declare function bodyIndicatesOom(body: string): boolean;
@@ -39,6 +41,13 @@ export declare function selectedProviderUnavailableJson(modelId: string, provide
39
41
  */
40
42
  export declare function emptyMessagesRefusal(json: JsonValue): string | undefined;
41
43
  export declare function computeErrorEnvelope(oom: boolean): string;
44
+ /**
45
+ * A llama.cpp context overflow as the Anthropic API words one: a 400 `invalid_request_error` whose
46
+ * message is exactly `prompt is too long: N tokens > M maximum`. Claude Code matches that wording to
47
+ * compact the conversation and retry; any other text it shows as a failed turn. `undefined` for any
48
+ * other error, or an overflow that does not say both sizes.
49
+ */
50
+ export declare function anthropicPromptTooLong(status: number, body: string): string | undefined;
42
51
  /**
43
52
  * A local engine's error as the client receives it: an existing `{"error": {...}}` envelope passes
44
53
  * unchanged, anything else (plain stderr text, mlx-vlm's `{"detail": ...}`) is wrapped with a typed
@@ -48,8 +57,12 @@ export declare function structureBackendErrorBody(body: string, oom: boolean, ct
48
57
  export declare function clientMaxTokens(requestBody: Buffer): number | undefined;
49
58
  /**
50
59
  * A 200 whose `finish_reason` is `length` because the context window ran out rather than because
51
- * the client capped the output. With no client cap, `length` can only mean the window. With a cap,
52
- * only a stop clearly short of it counts; an unknown token count is taken as client-driven, so a
53
- * `max_tokens: 16` health check never grows the context.
60
+ * an output cap was reached. The cap is the client's `max_tokens` or, without one, the engine's own:
61
+ * core starts llama.cpp with `--n-predict` (DEFAULT_N_PREDICT unless the user set another,
62
+ * `engineCap`), so a `length` with no client cap is no longer always the window. Either way only a
63
+ * stop clearly short of the cap counts. An unknown token count is taken as client-driven under a
64
+ * client cap, so a `max_tokens: 16` health check never grows the context, and as the window under
65
+ * the engine's alone, as before. `engineCap` `null` (an engine started without a cap) keeps the
66
+ * old rule: with no client cap, `length` can only mean the window.
54
67
  */
55
- export declare function isContextOverflowFinishLength(response: JsonValue, requestBody: Buffer): boolean;
68
+ export declare function isContextOverflowFinishLength(response: JsonValue, requestBody: Buffer, engineCap?: number | null): boolean;
@@ -9,6 +9,7 @@
9
9
  * The wording of every message is part of the contract: the app's UI and external agents match on
10
10
  * it to decide whether to offer a larger context or a smaller model.
11
11
  */
12
+ import { DEFAULT_N_PREDICT } from '../../runtime/llamacpp/generation-limits.js';
12
13
  import { isJsonObject, serdeToString } from '../shims/index.js';
13
14
  /**
14
15
  * How llama.cpp says a prompt does not fit (upstream, TurboQuant and Prism alike): a 400 with
@@ -18,12 +19,16 @@ import { isJsonObject, serdeToString } from '../shims/index.js';
18
19
  */
19
20
  const LLAMA_CONTEXT_OVERFLOW = /request \(\d+ tokens\) exceeds the available context size/i;
20
21
  export const LLAMA_CONTEXT_OVERFLOW_TYPE = 'exceed_context_size_error';
22
+ /** A specific engine refusal suitable for excluding an oversized prompt from error reporting. */
23
+ export function isLlamaContextOverflow(body) {
24
+ return LLAMA_CONTEXT_OVERFLOW.test(body) || errorTypeOf(body) === LLAMA_CONTEXT_OVERFLOW_TYPE;
25
+ }
21
26
  /** A request that no longer fits the loaded context window, as llama.cpp and MLX word it. */
22
27
  export function isContextLimitError(status, body) {
23
28
  if (![400, 413, 500, 503].includes(status))
24
29
  return false;
25
30
  const b = body.toLowerCase();
26
- if (LLAMA_CONTEXT_OVERFLOW.test(body) || errorTypeOf(body) === LLAMA_CONTEXT_OVERFLOW_TYPE)
31
+ if (isLlamaContextOverflow(body))
27
32
  return true;
28
33
  // Older builds' wording.
29
34
  if (b.includes('the request exceeds the available context size'))
@@ -117,6 +122,43 @@ function errorTypeOf(body) {
117
122
  const type = isJsonObject(error) ? error['type'] : undefined;
118
123
  return typeof type === 'string' ? type : undefined;
119
124
  }
125
+ /** The prompt size and window of a llama.cpp context overflow, from its fields or its message. */
126
+ function llamaOverflowSizes(body) {
127
+ const parsed = parseJson(body);
128
+ const error = isJsonObject(parsed) ? parsed['error'] : undefined;
129
+ if (isJsonObject(error)) {
130
+ const prompt = asU64(error['n_prompt_tokens']);
131
+ const window = asU64(error['n_ctx']);
132
+ if (prompt !== undefined && window !== undefined && window > 0)
133
+ return { prompt, window };
134
+ }
135
+ const message = isJsonObject(error) && typeof error['message'] === 'string' ? error['message'] : body;
136
+ const sizes = /request \((\d+) tokens\) exceeds the available context size \((\d+) tokens\)/i.exec(message) ??
137
+ /input \((\d+) tokens\) is larger than the max context size \((\d+) tokens\)/i.exec(message);
138
+ return sizes ? { prompt: Number(sizes[1]), window: Number(sizes[2]) } : undefined;
139
+ }
140
+ /**
141
+ * A llama.cpp context overflow as the Anthropic API words one: a 400 `invalid_request_error` whose
142
+ * message is exactly `prompt is too long: N tokens > M maximum`. Claude Code matches that wording to
143
+ * compact the conversation and retry; any other text it shows as a failed turn. `undefined` for any
144
+ * other error, or an overflow that does not say both sizes.
145
+ */
146
+ export function anthropicPromptTooLong(status, body) {
147
+ if (status !== 400)
148
+ return undefined;
149
+ if (!isLlamaContextOverflow(body))
150
+ return undefined;
151
+ const sizes = llamaOverflowSizes(body);
152
+ if (sizes === undefined)
153
+ return undefined;
154
+ return serdeToString({
155
+ type: 'error',
156
+ error: {
157
+ type: 'invalid_request_error',
158
+ message: `prompt is too long: ${sizes.prompt} tokens > ${sizes.window} maximum`,
159
+ },
160
+ });
161
+ }
120
162
  function isStructuredErrorBody(body) {
121
163
  const parsed = parseJson(body);
122
164
  return isJsonObject(parsed) && isJsonObject(parsed['error']);
@@ -150,20 +192,28 @@ export function clientMaxTokens(requestBody) {
150
192
  }
151
193
  /**
152
194
  * A 200 whose `finish_reason` is `length` because the context window ran out rather than because
153
- * the client capped the output. With no client cap, `length` can only mean the window. With a cap,
154
- * only a stop clearly short of it counts; an unknown token count is taken as client-driven, so a
155
- * `max_tokens: 16` health check never grows the context.
195
+ * an output cap was reached. The cap is the client's `max_tokens` or, without one, the engine's own:
196
+ * core starts llama.cpp with `--n-predict` (DEFAULT_N_PREDICT unless the user set another,
197
+ * `engineCap`), so a `length` with no client cap is no longer always the window. Either way only a
198
+ * stop clearly short of the cap counts. An unknown token count is taken as client-driven under a
199
+ * client cap, so a `max_tokens: 16` health check never grows the context, and as the window under
200
+ * the engine's alone, as before. `engineCap` `null` (an engine started without a cap) keeps the
201
+ * old rule: with no client cap, `length` can only mean the window.
156
202
  */
157
- export function isContextOverflowFinishLength(response, requestBody) {
203
+ export function isContextOverflowFinishLength(response, requestBody, engineCap = DEFAULT_N_PREDICT) {
158
204
  const choices = isJsonObject(response) ? response['choices'] : undefined;
159
205
  const hasLength = Array.isArray(choices) && choices.some((c) => isJsonObject(c) && c['finish_reason'] === 'length');
160
206
  if (!hasLength)
161
207
  return false;
162
- const cap = clientMaxTokens(requestBody);
163
- if (cap === undefined)
208
+ const clientCap = clientMaxTokens(requestBody);
209
+ const cap = clientCap ?? engineCap;
210
+ if (cap === null)
164
211
  return true;
165
212
  const usage = isJsonObject(response) ? response['usage'] : undefined;
166
213
  const done = asU64(isJsonObject(usage) ? usage['completion_tokens'] : undefined);
167
- return done !== undefined && done + 1 < cap;
214
+ // Without a count, only the client's own cap is a known reason; the engine's is not proven.
215
+ if (done === undefined)
216
+ return clientCap === undefined;
217
+ return done + 1 < cap;
168
218
  }
169
219
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/server/public/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/server/public/errors.ts"],"names":[],"mappings":"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"}
@@ -24,12 +24,15 @@ import { AnthropicStreamConverter, anthropicRequestToChat, chatResponseToAnthrop
24
24
  import { LOCAL_SEARCH_ORDER, resolveRemoteProvider, resolveSelectedRoute } from '../../router/index.js';
25
25
  import { captureReport, inferenceFailureReport } from '../../telemetry/index.js';
26
26
  import { autoIncreaseCtx } from './ctx.js';
27
+ import { sessionWindow } from './context-window.js';
27
28
  import { SseLineReader } from './sse.js';
28
29
  import { StreamTelemetry, isUsageOnlyChunk, maybeInjectStreamUsage } from './telemetry.js';
29
30
  import { endpointFromPath } from './trace.js';
30
- import { bodyIndicatesOom, computeErrorEnvelope, emptyMessagesRefusal, isComputeBackendError, isContextLimitError, isContextOverflowFinishLength, modelNotFoundJson, selectedProviderUnavailableJson, structureBackendErrorBody, structuredErrorJson, } from './errors.js';
31
+ import { anthropicPromptTooLong, bodyIndicatesOom, computeErrorEnvelope, emptyMessagesRefusal, isComputeBackendError, isContextLimitError, isLlamaContextOverflow, isContextOverflowFinishLength, modelNotFoundJson, selectedProviderUnavailableJson, structureBackendErrorBody, structuredErrorJson, } from './errors.js';
31
32
  import { answer, clientGone, connectTimeoutMs, invalidJsonMessage } from './exchange.js';
32
33
  import { policyRefusal } from './policy.js';
34
+ import { placedSystemMessages } from './system-messages.js';
35
+ import { isLlamaCppServer, noThinkingTemplateKwargs } from './thinking.js';
33
36
  import { embeddingInputRefusal, messageRolesRefusal } from './validate.js';
34
37
  import { forwardableHeaders, pipeBody, readBody, readUpstreamText, relay, relayedHeaders, sendUpstream, } from './wire.js';
35
38
  const NO_SELECTION = new Map();
@@ -183,6 +186,7 @@ export async function serveForward(ex) {
183
186
  }
184
187
  backend = { kind: 'local', session };
185
188
  trace.backend = session.provider;
189
+ trace.recordWindow(() => sessionWindow(ex.deps, session));
186
190
  const refused = session.policy && policyRefusal(session.policy, ex.path, modelId, json);
187
191
  if (refused) {
188
192
  trace.errorKind = 'bad_request';
@@ -217,13 +221,22 @@ export async function serveForward(ex) {
217
221
  answer(ex, 500, 'Internal routing error');
218
222
  return;
219
223
  }
224
+ // An Anthropic request that asks for no thinking gets none from a llama.cpp chat template either
225
+ // (QA B08): on `/v1/messages` and on the chat-completions fallback alike.
226
+ const noThinking = isMessages && backend.kind === 'local'
227
+ ? noThinkingTemplateKwargs(backend.session.provider, json)
228
+ : undefined;
229
+ // System messages inside the conversation stay where they are, as reminders in a user turn, before a
230
+ // strict llama.cpp template sees them (QA B08, audit S1): on `/v1/messages` and on the fallback.
231
+ const placed = isMessages && backend.kind === 'local' ? placedSystemMessages(backend.session.provider, json) : undefined;
232
+ const messagesJson = placed !== undefined && isJsonObject(json) ? { ...json, ...placed } : json;
220
233
  // A session that declares its routes and has no `/v1/messages` of its own goes straight to the
221
234
  // chat-completions translation: asking it first would only be refused (findings-2.14-r1.md item 4).
222
235
  if (isMessages &&
223
236
  backend.kind === 'local' &&
224
237
  backend.session.policy &&
225
238
  !backend.session.policy.routes.some((r) => r.method === 'POST' && r.path === '/v1/messages')) {
226
- await messagesFallback(ex, backend, url, key, json);
239
+ await messagesFallback(ex, backend, url, key, messagesJson, noThinking);
227
240
  return;
228
241
  }
229
242
  // While the inspector watches, a local streaming chat is asked for real token counts. Only local
@@ -231,13 +244,19 @@ export async function serveForward(ex) {
231
244
  const injected = trace.inspecting && stream && ex.path === '/chat/completions' && backend.kind === 'local'
232
245
  ? maybeInjectStreamUsage(raw)
233
246
  : undefined;
247
+ const rewritten = (noThinking !== undefined || placed !== undefined) && isJsonObject(messagesJson)
248
+ ? Buffer.from(serdeToString({
249
+ ...messagesJson,
250
+ ...(noThinking !== undefined ? { chat_template_kwargs: noThinking } : {}),
251
+ }))
252
+ : undefined;
234
253
  const signal = clientGone(ex);
235
254
  let response;
236
255
  try {
237
256
  response = await sendUpstream(url, {
238
257
  method: ex.method,
239
258
  headers: outboundHeaders(ex, ['host', 'authorization'], backend, key),
240
- body: injected ?? raw,
259
+ body: injected ?? rewritten ?? raw,
241
260
  connectTimeoutMs: connectTimeoutMs(ex),
242
261
  signal,
243
262
  });
@@ -250,7 +269,7 @@ export async function serveForward(ex) {
250
269
  }
251
270
  if (!isSuccess(response.status)) {
252
271
  if (isMessages)
253
- await messagesFallback(ex, backend, url, key, json, response);
272
+ await messagesFallback(ex, backend, url, key, messagesJson, noThinking, response);
254
273
  else
255
274
  await upstreamError(ex, backend, modelId, raw, response);
256
275
  return;
@@ -378,6 +397,22 @@ async function growAndRetry(ex, provider, modelId, raw, trigger) {
378
397
  await relay(ex.res, retry, ex.cors);
379
398
  return true;
380
399
  }
400
+ /** Only a terminal failure from a local engine belongs to this core. Inspect its body here only. */
401
+ function reportInferenceFailure(ex, backend, status, body) {
402
+ if (backend.kind !== 'local' || status < 500)
403
+ return;
404
+ const oom = bodyIndicatesOom(body);
405
+ const compute = isComputeBackendError(status, body);
406
+ if (!oom && !compute && isLlamaContextOverflow(body))
407
+ return;
408
+ captureReport(ex.deps.errors, inferenceFailureReport({
409
+ provider: backend.session.provider,
410
+ modelId: backend.session.modelId,
411
+ status,
412
+ compute,
413
+ oom,
414
+ }));
415
+ }
381
416
  async function upstreamError(ex, backend, modelId, raw, response) {
382
417
  const errorBody = await readUpstreamText(response);
383
418
  const status = response.status;
@@ -396,14 +431,7 @@ async function upstreamError(ex, backend, modelId, raw, response) {
396
431
  // it started. An error it knows (a context overflow) gets its own OpenAI body; any other is
397
432
  // wrapped like every local engine's.
398
433
  recordFailure();
399
- captureReport(ex.deps.errors, inferenceFailureReport({
400
- provider,
401
- modelId,
402
- status,
403
- body: errorBody,
404
- compute: false,
405
- oom: trace.oomDetected,
406
- }));
434
+ reportInferenceFailure(ex, backend, status, errorBody);
407
435
  const mapped = policy.mapError(status, errorBody);
408
436
  if (mapped !== null) {
409
437
  answer(ex, status, serdeToString(mapped), [['Content-Type', 'application/json']]);
@@ -428,19 +456,12 @@ async function upstreamError(ex, backend, modelId, raw, response) {
428
456
  trace.oomDetected = true;
429
457
  trace.ctxOverflowDetected = false;
430
458
  const oom = bodyIndicatesOom(errorBody);
431
- captureReport(ex.deps.errors, inferenceFailureReport({ provider, modelId, status, body: errorBody, compute: true, oom }));
459
+ reportInferenceFailure(ex, backend, status, errorBody);
432
460
  answer(ex, 400, computeErrorEnvelope(oom));
433
461
  return;
434
462
  }
435
463
  recordFailure();
436
- captureReport(ex.deps.errors, inferenceFailureReport({
437
- provider,
438
- modelId,
439
- status,
440
- body: errorBody,
441
- compute: false,
442
- oom: trace.oomDetected,
443
- }));
464
+ reportInferenceFailure(ex, backend, status, errorBody);
444
465
  answer(ex, status, structureBackendErrorBody(errorBody, trace.oomDetected, trace.ctxOverflowDetected));
445
466
  return;
446
467
  }
@@ -482,13 +503,34 @@ async function inspectFinish(ex, session, modelId, raw, response) {
482
503
  * gets the original error; if it answers with an error, the client gets that one.
483
504
  */
484
505
  async function messagesFallback(ex, backend, url, key, json,
506
+ /** `chat_template_kwargs` that keep a llama.cpp template from thinking the request did not ask for. */
507
+ noThinking,
485
508
  /** The engine's own answer to `/messages`; absent when the session is known not to serve it. */
486
509
  response) {
487
510
  const errorBody = response === undefined ? undefined : await readUpstreamText(response);
488
511
  const trace = ex.trace;
489
- trace.anthropicFallback = true;
490
512
  const errorKind = backend.kind === 'local' ? 'local_model_error' : 'remote_provider_error';
513
+ // A prompt the engine's window cannot hold would not fit as chat completions either: the client is
514
+ // told in the Anthropic API's own words, which make Claude Code compact the conversation (audit X1).
515
+ if (response !== undefined &&
516
+ errorBody !== undefined &&
517
+ answeredPromptTooLong(ex, backend, response.status, errorBody))
518
+ return;
519
+ trace.anthropicFallback = true;
491
520
  const chat = anthropicRequestToChat(json);
521
+ if (isJsonObject(chat) && noThinking !== undefined)
522
+ chat['chat_template_kwargs'] = noThinking;
523
+ // llama.cpp's own `/v1/messages` stops at the request's `max_tokens`; the translation keeps that
524
+ // cap, or an engine started with `n_predict -1` writes until its context is full. Other engines
525
+ // keep the translation as the Rust proxy shipped it, without the cap.
526
+ const maxTokens = isJsonObject(json) ? json['max_tokens'] : undefined;
527
+ if (isJsonObject(chat) &&
528
+ backend.kind === 'local' &&
529
+ isLlamaCppServer(backend.session.provider) &&
530
+ typeof maxTokens === 'number' &&
531
+ maxTokens > 0) {
532
+ chat['max_tokens'] = maxTokens;
533
+ }
492
534
  if (chat !== null) {
493
535
  let base = url;
494
536
  while (base.endsWith('/messages'))
@@ -508,10 +550,13 @@ response) {
508
550
  });
509
551
  if (!isSuccess(fallback.status)) {
510
552
  const fallbackError = await readUpstreamText(fallback);
553
+ if (answeredPromptTooLong(ex, backend, fallback.status, fallbackError))
554
+ return;
511
555
  trace.errorKind = errorKind;
512
556
  trace.upstreamStatus = fallback.status;
513
557
  trace.oomDetected = bodyIndicatesOom(fallbackError);
514
558
  trace.ctxOverflowDetected = isContextLimitError(fallback.status, fallbackError);
559
+ reportInferenceFailure(ex, backend, fallback.status, fallbackError);
515
560
  // A declared session's own error wording (its context overflow) reads the same here as on
516
561
  // the chat route itself.
517
562
  const policy = backend.kind === 'local' ? backend.session.policy : undefined;
@@ -555,8 +600,27 @@ response) {
555
600
  trace.upstreamStatus = response.status;
556
601
  trace.oomDetected = bodyIndicatesOom(errorBody);
557
602
  trace.ctxOverflowDetected = isContextLimitError(response.status, errorBody);
603
+ reportInferenceFailure(ex, backend, response.status, errorBody);
558
604
  answer(ex, response.status, errorBody);
559
605
  }
606
+ /**
607
+ * Answer a local engine's context overflow on `/messages` as Anthropic's `prompt is too long`; `false`
608
+ * for any other error, which the caller handles as before. A remote provider words its own errors.
609
+ */
610
+ function answeredPromptTooLong(ex, backend, status, errorBody) {
611
+ if (backend.kind !== 'local')
612
+ return false;
613
+ const tooLong = anthropicPromptTooLong(status, errorBody);
614
+ if (tooLong === undefined)
615
+ return false;
616
+ const trace = ex.trace;
617
+ trace.errorKind = 'local_model_error';
618
+ trace.upstreamStatus = status;
619
+ trace.oomDetected = false;
620
+ trace.ctxOverflowDetected = true;
621
+ answer(ex, 400, tooLong, [['Content-Type', 'application/json']]);
622
+ return true;
623
+ }
560
624
  async function* anthropicStream(upstream) {
561
625
  const conv = new AnthropicStreamConverter();
562
626
  const decoder = new TextDecoder();