@atomic-chat/core 0.17.0 → 0.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/app-daemon.js +7 -0
  2. package/dist/app-daemon.js.map +1 -1
  3. package/dist/backend/advisor/advisor.d.ts +6 -1
  4. package/dist/backend/advisor/advisor.js +69 -7
  5. package/dist/backend/advisor/advisor.js.map +1 -1
  6. package/dist/backend/catalog/prism-manifest.d.ts +2 -0
  7. package/dist/backend/catalog/prism-manifest.js +3 -2
  8. package/dist/backend/catalog/prism-manifest.js.map +1 -1
  9. package/dist/cli/main.d.ts +1 -1
  10. package/dist/cli/main.js +5 -0
  11. package/dist/cli/main.js.map +1 -1
  12. package/dist/client/control-client.d.ts +10 -1
  13. package/dist/client/control-client.js +15 -0
  14. package/dist/client/control-client.js.map +1 -1
  15. package/dist/cloud/registry.js +1 -0
  16. package/dist/cloud/registry.js.map +1 -1
  17. package/dist/config/paths.d.ts +4 -0
  18. package/dist/config/paths.js +11 -0
  19. package/dist/config/paths.js.map +1 -1
  20. package/dist/contracts/backend-advisor.d.ts +12 -0
  21. package/dist/contracts/engine-builds.d.ts +1 -1
  22. package/dist/contracts/engine-builds.js +1 -1
  23. package/dist/contracts/engine-builds.js.map +1 -1
  24. package/dist/contracts/engines.d.ts +1 -1
  25. package/dist/contracts/engines.js +2 -0
  26. package/dist/contracts/engines.js.map +1 -1
  27. package/dist/contracts/errors.d.ts +13 -2
  28. package/dist/contracts/errors.js.map +1 -1
  29. package/dist/contracts/events.d.ts +7 -0
  30. package/dist/contracts/foundry-local.d.ts +77 -0
  31. package/dist/contracts/foundry-local.js +17 -0
  32. package/dist/contracts/foundry-local.js.map +1 -0
  33. package/dist/contracts/index.d.ts +1 -0
  34. package/dist/contracts/index.js +1 -0
  35. package/dist/contracts/index.js.map +1 -1
  36. package/dist/contracts/model-yml.d.ts +28 -0
  37. package/dist/contracts/model-yml.js +11 -0
  38. package/dist/contracts/model-yml.js.map +1 -1
  39. package/dist/contracts/session.d.ts +5 -1
  40. package/dist/contracts/session.js.map +1 -1
  41. package/dist/contracts/settings.d.ts +5 -1
  42. package/dist/contracts/settings.js.map +1 -1
  43. package/dist/core/atomic-core.d.ts +1 -1
  44. package/dist/core/create.js +106 -5
  45. package/dist/core/create.js.map +1 -1
  46. package/dist/core/types.d.ts +9 -0
  47. package/dist/core/types.js.map +1 -1
  48. package/dist/diffusion/install.d.ts +0 -4
  49. package/dist/diffusion/install.js +5 -2
  50. package/dist/diffusion/install.js.map +1 -1
  51. package/dist/diffusion/server-process.d.ts +5 -2
  52. package/dist/diffusion/server-process.js +10 -2
  53. package/dist/diffusion/server-process.js.map +1 -1
  54. package/dist/downloads/archive.d.ts +1 -1
  55. package/dist/downloads/archive.js +2 -2
  56. package/dist/downloads/archive.js.map +1 -1
  57. package/dist/engine-builds/engines.d.ts +83 -0
  58. package/dist/engine-builds/engines.js +144 -0
  59. package/dist/engine-builds/engines.js.map +1 -0
  60. package/dist/engine-builds/foundry-local.d.ts +22 -0
  61. package/dist/engine-builds/foundry-local.js +100 -0
  62. package/dist/engine-builds/foundry-local.js.map +1 -0
  63. package/dist/engine-builds/manifest.d.ts +57 -6
  64. package/dist/engine-builds/manifest.js +109 -4
  65. package/dist/engine-builds/manifest.js.map +1 -1
  66. package/dist/engine-builds/order.d.ts +2 -1
  67. package/dist/engine-builds/order.js +11 -4
  68. package/dist/engine-builds/order.js.map +1 -1
  69. package/dist/engine-builds/select.d.ts +27 -0
  70. package/dist/engine-builds/select.js +45 -0
  71. package/dist/engine-builds/select.js.map +1 -1
  72. package/dist/engine-builds/service.d.ts +14 -15
  73. package/dist/engine-builds/service.js +68 -126
  74. package/dist/engine-builds/service.js.map +1 -1
  75. package/dist/engines/service.d.ts +6 -3
  76. package/dist/engines/service.js +6 -3
  77. package/dist/engines/service.js.map +1 -1
  78. package/dist/hardware/index.d.ts +1 -0
  79. package/dist/hardware/index.js +1 -0
  80. package/dist/hardware/index.js.map +1 -1
  81. package/dist/hardware/npu.d.ts +14 -0
  82. package/dist/hardware/npu.js +29 -0
  83. package/dist/hardware/npu.js.map +1 -0
  84. package/dist/host/recipes/executor-io-windows.d.ts +11 -0
  85. package/dist/host/recipes/executor-io-windows.js +23 -5
  86. package/dist/host/recipes/executor-io-windows.js.map +1 -1
  87. package/dist/integrations/detect.d.ts +2 -0
  88. package/dist/integrations/detect.js +4 -3
  89. package/dist/integrations/detect.js.map +1 -1
  90. package/dist/lock/instance-lock.js +5 -2
  91. package/dist/lock/instance-lock.js.map +1 -1
  92. package/dist/lock/process-identity.d.ts +9 -3
  93. package/dist/lock/process-identity.js +75 -9
  94. package/dist/lock/process-identity.js.map +1 -1
  95. package/dist/router/resolve.d.ts +2 -2
  96. package/dist/router/resolve.js +2 -1
  97. package/dist/router/resolve.js.map +1 -1
  98. package/dist/runtime/foundry-local/accelerators.d.ts +42 -0
  99. package/dist/runtime/foundry-local/accelerators.js +153 -0
  100. package/dist/runtime/foundry-local/accelerators.js.map +1 -0
  101. package/dist/runtime/foundry-local/check.d.ts +19 -0
  102. package/dist/runtime/foundry-local/check.js +69 -0
  103. package/dist/runtime/foundry-local/check.js.map +1 -0
  104. package/dist/runtime/foundry-local/foundry-host.d.ts +18 -0
  105. package/dist/runtime/foundry-local/foundry-host.js +23 -0
  106. package/dist/runtime/foundry-local/foundry-host.js.map +1 -0
  107. package/dist/runtime/foundry-local/host/args.d.ts +44 -0
  108. package/dist/runtime/foundry-local/host/args.js +109 -0
  109. package/dist/runtime/foundry-local/host/args.js.map +1 -0
  110. package/dist/runtime/foundry-local/host/execution-providers.d.ts +27 -0
  111. package/dist/runtime/foundry-local/host/execution-providers.js +43 -0
  112. package/dist/runtime/foundry-local/host/execution-providers.js.map +1 -0
  113. package/dist/runtime/foundry-local/host/ffi-bun.d.ts +17 -0
  114. package/dist/runtime/foundry-local/host/ffi-bun.js +256 -0
  115. package/dist/runtime/foundry-local/host/ffi-bun.js.map +1 -0
  116. package/dist/runtime/foundry-local/host/library.d.ts +61 -0
  117. package/dist/runtime/foundry-local/host/library.js +17 -0
  118. package/dist/runtime/foundry-local/host/library.js.map +1 -0
  119. package/dist/runtime/foundry-local/host/run.d.ts +54 -0
  120. package/dist/runtime/foundry-local/host/run.js +316 -0
  121. package/dist/runtime/foundry-local/host/run.js.map +1 -0
  122. package/dist/runtime/foundry-local/host-process.d.ts +81 -0
  123. package/dist/runtime/foundry-local/host-process.js +185 -0
  124. package/dist/runtime/foundry-local/host-process.js.map +1 -0
  125. package/dist/runtime/foundry-local/index.d.ts +10 -0
  126. package/dist/runtime/foundry-local/index.js +10 -0
  127. package/dist/runtime/foundry-local/index.js.map +1 -0
  128. package/dist/runtime/foundry-local/model-yml.d.ts +8 -0
  129. package/dist/runtime/foundry-local/model-yml.js +63 -0
  130. package/dist/runtime/foundry-local/model-yml.js.map +1 -0
  131. package/dist/runtime/foundry-local/runtime.d.ts +88 -0
  132. package/dist/runtime/foundry-local/runtime.js +321 -0
  133. package/dist/runtime/foundry-local/runtime.js.map +1 -0
  134. package/dist/runtime/llamacpp/args.d.ts +5 -0
  135. package/dist/runtime/llamacpp/args.js +7 -1
  136. package/dist/runtime/llamacpp/args.js.map +1 -1
  137. package/dist/runtime/llamacpp/errors.d.ts +1 -0
  138. package/dist/runtime/llamacpp/errors.js +10 -0
  139. package/dist/runtime/llamacpp/errors.js.map +1 -1
  140. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  141. package/dist/runtime/llamacpp/load-plan.js +8 -0
  142. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  143. package/dist/runtime/llamacpp/runtime-device.d.ts +8 -0
  144. package/dist/runtime/llamacpp/runtime-device.js +9 -3
  145. package/dist/runtime/llamacpp/runtime-device.js.map +1 -1
  146. package/dist/runtime/llamacpp/runtime.d.ts +6 -1
  147. package/dist/runtime/llamacpp/runtime.js +19 -3
  148. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  149. package/dist/runtime/managed-text/gateway.d.ts +2 -0
  150. package/dist/runtime/managed-text/gateway.js +1 -1
  151. package/dist/runtime/managed-text/gateway.js.map +1 -1
  152. package/dist/runtime/shared/external-sessions.js +1 -0
  153. package/dist/runtime/shared/external-sessions.js.map +1 -1
  154. package/dist/runtime/shared/process.d.ts +13 -1
  155. package/dist/runtime/shared/process.js +21 -12
  156. package/dist/runtime/shared/process.js.map +1 -1
  157. package/dist/server/control/router.js +2 -0
  158. package/dist/server/control/router.js.map +1 -1
  159. package/dist/server/control/routes/foundry-local.d.ts +10 -0
  160. package/dist/server/control/routes/foundry-local.js +42 -0
  161. package/dist/server/control/routes/foundry-local.js.map +1 -0
  162. package/dist/server/control/routes/models.js +6 -3
  163. package/dist/server/control/routes/models.js.map +1 -1
  164. package/dist/server/control/types.d.ts +17 -1
  165. package/dist/server/control/types.js.map +1 -1
  166. package/dist/server/http.js +45 -7
  167. package/dist/server/http.js.map +1 -1
  168. package/dist/server/public/errors.d.ts +1 -0
  169. package/dist/server/public/errors.js +18 -0
  170. package/dist/server/public/errors.js.map +1 -1
  171. package/dist/server/public/listing.js +1 -0
  172. package/dist/server/public/listing.js.map +1 -1
  173. package/dist/settings/public.d.ts +7 -0
  174. package/dist/settings/public.js +8 -0
  175. package/dist/settings/public.js.map +1 -0
  176. package/dist/settings/schema/foundry-local.json +14 -0
  177. package/dist/settings/schema.js +8 -0
  178. package/dist/settings/schema.js.map +1 -1
  179. package/dist/version.d.ts +1 -1
  180. package/dist/version.js +1 -1
  181. package/package.json +11 -3
  182. package/src/settings/schema/atomic-prism.json +0 -433
  183. package/src/settings/schema/foundation-models.json +0 -1
  184. package/src/settings/schema/llamacpp-upstream.json +0 -498
  185. package/src/settings/schema/llamacpp.json +0 -475
  186. package/src/settings/schema/mlx.json +0 -136
  187. package/src/settings/schema/sglang.json +0 -251
  188. package/src/settings/schema/tensorrt-llm.json +0 -253
  189. package/src/settings/schema/vllm.json +0 -273
@@ -12,15 +12,16 @@ import { homedir } from 'node:os';
12
12
  import { offPathCandidates } from './catalog.js';
13
13
  export const PATH_PROBE_TIMEOUT_MS = 5000;
14
14
  const defaultIsFile = (path) => stat(path).then((s) => s.isFile(), () => false);
15
- function defaultOnPath(bin, platform) {
15
+ function defaultOnPath(bin, platform, timeoutMs) {
16
16
  const probe = platform === 'win32' ? 'where' : 'which';
17
17
  return new Promise((resolve) => {
18
- execFile(probe, [bin], { timeout: PATH_PROBE_TIMEOUT_MS, windowsHide: true }, (err) => resolve(!err));
18
+ execFile(probe, [bin], { timeout: timeoutMs, windowsHide: true }, (err) => resolve(!err));
19
19
  });
20
20
  }
21
21
  export async function detectAgent(agent, deps = {}) {
22
22
  const platform = deps.platform ?? process.platform;
23
- const onPath = deps.onPath ?? ((bin) => defaultOnPath(bin, platform));
23
+ const timeoutMs = deps.pathProbeTimeoutMs ?? PATH_PROBE_TIMEOUT_MS;
24
+ const onPath = deps.onPath ?? ((bin) => defaultOnPath(bin, platform, timeoutMs));
24
25
  const isFile = deps.isFile ?? defaultIsFile;
25
26
  if (await onPath(agent.detectBin)) {
26
27
  return { installed: true, path: undefined, program: agent.detectBin };
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/integrations/detect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAoBzC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAoB,EAAE,CACvD,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EACjB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAA;AAEH,SAAS,aAAa,CAAC,GAAW,EAAE,QAAyB;IAC3D,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAA;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACvG,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAY,EAAE,OAAmB,EAAE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAA;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,aAAa,CAAA;IAC3C,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAA;IACnC,KAAK,MAAM,SAAS,IAAI,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpG,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;IAC9F,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;AACxE,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,OAAmB,EAAE;IAErB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAA;IAC7C,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC,CAAC,CACH,CAAA;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/integrations/detect.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ import { mkdir, open, readFile, rm, stat } from 'node:fs/promises';
15
15
  import { realpath } from 'node:fs/promises';
16
16
  import { AtomicCoreError, CONTROL_PROTOCOL_VERSION } from '../contracts/index.js';
17
17
  import { CORE_VERSION } from '../version.js';
18
- import { identityPermitsTakeover, processStartEpoch, processStartId, verifyProcessIdentity, } from './process-identity.js';
18
+ import { identityPermitsTakeover, processStartEpoch, processStartId, verifyProcessIdentity, verifyStartEpoch, } from './process-identity.js';
19
19
  /** How long a torn or unreadable lock is re-read before it counts as corrupt. */
20
20
  export const CORRUPT_LOCK_GRACE_MS = 500;
21
21
  /** A takeover mutex older than this belonged to a process that died mid-recovery. */
@@ -89,7 +89,10 @@ export async function inspectLock(layout, deps = {}) {
89
89
  return { kind: 'free' };
90
90
  if (record === 'corrupt')
91
91
  return { kind: 'corrupt' };
92
- const verdict = await verifyProcessIdentity(record.pid, record.process_start_id, deps);
92
+ // The start time decides when there is one: it reads the same for every reader (the desktop app
93
+ // decides the same way); the older start identity is the fallback.
94
+ const byEpoch = await verifyStartEpoch(record.pid, record.owner_started_at, deps);
95
+ const verdict = byEpoch === 'unknown' ? await verifyProcessIdentity(record.pid, record.process_start_id, deps) : byEpoch;
93
96
  return identityPermitsTakeover(verdict)
94
97
  ? { kind: 'stale', record, verdict: verdict }
95
98
  : { kind: 'owned', record, verdict: verdict };
@@ -1 +1 @@
1
- {"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../../src/lock/instance-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../../src/lock/instance-lock.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,8 @@ export interface IdentityDeps {
14
14
  platform?: NodeJS.Platform;
15
15
  /** Read a procfs entry (Linux). */
16
16
  readText?: (path: string) => Promise<string>;
17
- /** Run a probe and return its stdout. */
18
- run?: (file: string, args: string[]) => Promise<string>;
17
+ /** Run a probe and return its stdout; `env` is laid over this process's environment. */
18
+ run?: (file: string, args: string[], env?: Record<string, string>) => Promise<string>;
19
19
  /** Signal-0 liveness probe. */
20
20
  alive?: (pid: number) => boolean;
21
21
  }
@@ -27,7 +27,7 @@ export interface IdentityDeps {
27
27
  */
28
28
  export declare const IDENTITY_PROBE_TIMEOUT_MS = 15000;
29
29
  export declare function isProcessAlive(pid: number): boolean;
30
- export declare function runProbe(file: string, args: string[]): Promise<string>;
30
+ export declare function runProbe(file: string, args: string[], env?: Record<string, string>): Promise<string>;
31
31
  /**
32
32
  * An opaque, comparable token for "this incarnation of this PID", or `undefined` when the platform
33
33
  * cannot tell us. Only ever compared for equality, never parsed.
@@ -44,5 +44,11 @@ export declare function processStartEpoch(pid: number, deps?: IdentityDeps): Pro
44
44
  export declare function processName(pid: number, deps?: IdentityDeps): Promise<string | undefined>;
45
45
  /** Compare a recorded identity with the live process. `unknown` means "cannot prove"; treat as live. */
46
46
  export declare function verifyProcessIdentity(pid: number, expected: string | null | undefined, deps?: IdentityDeps): Promise<IdentityVerdict>;
47
+ /**
48
+ * Compare a recorded start time (`epoch:<seconds>`, `processStartEpoch`) with the live process. Seconds
49
+ * since the epoch read the same in every locale and zone, so a difference is proof of another process
50
+ * behind the PID; a second either way is the same start read at a different instant.
51
+ */
52
+ export declare function verifyStartEpoch(pid: number, expected: string | null | undefined, deps?: IdentityDeps): Promise<IdentityVerdict>;
47
53
  /** Only a proven-gone process releases what it held. */
48
54
  export declare function identityPermitsTakeover(verdict: IdentityVerdict): boolean;
@@ -30,9 +30,13 @@ export function isProcessAlive(pid) {
30
30
  return e.code === 'EPERM';
31
31
  }
32
32
  }
33
- export function runProbe(file, args) {
33
+ export function runProbe(file, args, env) {
34
34
  return new Promise((resolve, reject) => {
35
- execFile(file, args, { timeout: IDENTITY_PROBE_TIMEOUT_MS, windowsHide: true }, (err, stdout) => {
35
+ execFile(file, args, {
36
+ timeout: IDENTITY_PROBE_TIMEOUT_MS,
37
+ windowsHide: true,
38
+ ...(env ? { env: { ...process.env, ...env } } : {}),
39
+ }, (err, stdout) => {
36
40
  if (err)
37
41
  reject(err);
38
42
  else
@@ -40,6 +44,21 @@ export function runProbe(file, args) {
40
44
  });
41
45
  });
42
46
  }
47
+ /**
48
+ * What `ps` prints depends on the locale and the time zone of whoever runs it; an identity compared
49
+ * later by another process (a core started from another terminal, a laptop in another zone) must not.
50
+ */
51
+ const PINNED_PS_ENV = { LC_ALL: 'C', TZ: 'UTC' };
52
+ const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
53
+ /** `Mon Oct 19 10:33:52 2026` (C locale, UTC) → seconds since the epoch; `undefined` for anything else. */
54
+ function utcLstartSeconds(text) {
55
+ const m = /^[A-Z][a-z]{2} ([A-Z][a-z]{2}) +(\d{1,2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/.exec(text);
56
+ const month = m ? MONTHS.indexOf(m[1]) : -1;
57
+ if (!m || month < 0)
58
+ return undefined;
59
+ const [day, h, min, sec, year] = m.slice(2).map(Number);
60
+ return Date.UTC(year, month, day, h, min, sec) / 1000;
61
+ }
43
62
  /**
44
63
  * An opaque, comparable token for "this incarnation of this PID", or `undefined` when the platform
45
64
  * cannot tell us. Only ever compared for equality, never parsed.
@@ -65,19 +84,19 @@ export async function processStartId(pid, deps = {}) {
65
84
  if (platform === 'darwin') {
66
85
  // `lstart` has one-second resolution; a PID reused inside the same second is indistinguishable,
67
86
  // which the takeover path treats as "unknown", never as a free lock.
68
- const out = await run('/bin/ps', ['-o', 'lstart=', '-p', String(pid)]);
87
+ const out = await run('/bin/ps', ['-o', 'lstart=', '-p', String(pid)], PINNED_PS_ENV);
69
88
  const value = out.trim().replace(/\s+/g, ' ');
70
- return value ? `darwin:${value}` : undefined;
89
+ return value ? `darwin-utc:${value}` : undefined;
71
90
  }
72
91
  if (platform === 'win32') {
73
92
  const out = await run('powershell.exe', [
74
93
  '-NoProfile',
75
94
  '-NonInteractive',
76
95
  '-Command',
77
- `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.Ticks`,
96
+ `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`,
78
97
  ]);
79
98
  const value = out.trim();
80
- return /^\d+$/.test(value) ? `win32:${value}` : undefined;
99
+ return /^\d+$/.test(value) ? `win32-utc:${value}` : undefined;
81
100
  }
82
101
  }
83
102
  catch {
@@ -107,9 +126,9 @@ export async function processStartEpoch(pid, deps = {}) {
107
126
  return `epoch:${Math.floor(boot + ticks / 100)}`;
108
127
  }
109
128
  if (platform === 'darwin') {
110
- const out = (await run('/bin/ps', ['-o', 'lstart=', '-p', String(pid)])).trim();
111
- const epoch = Math.floor(Date.parse(out) / 1000);
112
- return Number.isFinite(epoch) ? `epoch:${epoch}` : undefined;
129
+ const out = await run('/bin/ps', ['-o', 'lstart=', '-p', String(pid)], PINNED_PS_ENV);
130
+ const epoch = utcLstartSeconds(out.trim().replace(/\s+/g, ' '));
131
+ return epoch === undefined ? undefined : `epoch:${epoch}`;
113
132
  }
114
133
  if (platform === 'win32') {
115
134
  const out = await run('powershell.exe', [
@@ -168,11 +187,58 @@ export async function verifyProcessIdentity(pid, expected, deps = {}) {
168
187
  return 'dead';
169
188
  if (!expected)
170
189
  return 'unknown';
190
+ // Written before identities were pinned: in the writer's locale and zone, which this reader cannot
191
+ // know. Equal still proves it; a difference proves nothing, so it never frees what the owner holds.
192
+ if (/^(darwin|win32):/.test(expected)) {
193
+ const legacy = await legacyStartId(pid, deps);
194
+ return legacy !== undefined && legacy === expected ? 'match' : 'unknown';
195
+ }
171
196
  const actual = await processStartId(pid, deps);
172
197
  if (!actual)
173
198
  return 'unknown';
174
199
  return actual === expected ? 'match' : 'mismatch';
175
200
  }
201
+ /** The identity as cores before 0.18.3 wrote it: `ps` in the C locale and local zone, local ticks. */
202
+ async function legacyStartId(pid, deps) {
203
+ const platform = deps.platform ?? process.platform;
204
+ const run = deps.run ?? runProbe;
205
+ try {
206
+ if (platform === 'darwin') {
207
+ const out = await run('/bin/ps', ['-o', 'lstart=', '-p', String(pid)], { LC_ALL: 'C' });
208
+ const value = out.trim().replace(/\s+/g, ' ');
209
+ return value ? `darwin:${value}` : undefined;
210
+ }
211
+ if (platform === 'win32') {
212
+ const out = await run('powershell.exe', [
213
+ '-NoProfile',
214
+ '-NonInteractive',
215
+ '-Command',
216
+ `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.Ticks`,
217
+ ]);
218
+ const value = out.trim();
219
+ return /^\d+$/.test(value) ? `win32:${value}` : undefined;
220
+ }
221
+ }
222
+ catch {
223
+ return undefined;
224
+ }
225
+ return undefined;
226
+ }
227
+ /**
228
+ * Compare a recorded start time (`epoch:<seconds>`, `processStartEpoch`) with the live process. Seconds
229
+ * since the epoch read the same in every locale and zone, so a difference is proof of another process
230
+ * behind the PID; a second either way is the same start read at a different instant.
231
+ */
232
+ export async function verifyStartEpoch(pid, expected, deps = {}) {
233
+ const alive = deps.alive ?? isProcessAlive;
234
+ if (!alive(pid))
235
+ return 'dead';
236
+ const want = Number(/^epoch:(\d+)$/.exec(expected ?? '')?.[1]);
237
+ const got = Number(/^epoch:(\d+)$/.exec((await processStartEpoch(pid, deps)) ?? '')?.[1]);
238
+ if (!Number.isFinite(want) || !Number.isFinite(got))
239
+ return 'unknown';
240
+ return Math.abs(want - got) <= 1 ? 'match' : 'mismatch';
241
+ }
176
242
  /** Only a proven-gone process releases what it held. */
177
243
  export function identityPermitsTakeover(verdict) {
178
244
  return verdict === 'dead' || verdict === 'mismatch';
@@ -1 +1 @@
1
- {"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../src/lock/process-identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-identity.js","sourceRoot":"","sources":["../../src/lock/process-identity.ts"],"names":[],"mappings":"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"}
@@ -21,14 +21,14 @@ export interface RemoteProvider {
21
21
  /** The image and video models enabled for this provider; never part of chat routing. */
22
22
  media?: CloudProviderMedia;
23
23
  }
24
- export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx' | 'tensorrt-llm' | 'atomic-prism' | 'vllm' | 'sglang';
24
+ export type LocalProvider = 'llamacpp' | 'llamacpp-upstream' | 'mlx' | 'tensorrt-llm' | 'atomic-prism' | 'vllm' | 'sglang' | 'foundry-local';
25
25
  /**
26
26
  * The order local providers are searched in when a request names only a model. The same model id
27
27
  * loaded under two engines resolves to the first; changing the order would silently move traffic.
28
28
  * `tensorrt-llm`, `atomic-prism`, `vllm` and `sglang` come last, in the order they were added, for
29
29
  * exactly that reason: adding a provider moves nothing that already resolved (`vllm` after
30
30
  * `atomic-prism`, which core 0.10.0 already shipped; change `add-vllm-runtime`, D11; `sglang` after
31
- * `vllm`, change `add-sglang-runtime`, D8). A Prism-only file never loads
31
+ * `vllm`, change `add-sglang-runtime`, D8; `foundry-local` after `sglang`, change `add-foundry-local`, D5). A Prism-only file never loads
32
32
  * under another engine (the compatibility gate), so its sessions are found here even near the end of
33
33
  * the list; one store model is never loaded in two managed providers at once, so their order never
34
34
  * decides between two live sessions of one id.
@@ -11,7 +11,7 @@
11
11
  * `tensorrt-llm`, `atomic-prism`, `vllm` and `sglang` come last, in the order they were added, for
12
12
  * exactly that reason: adding a provider moves nothing that already resolved (`vllm` after
13
13
  * `atomic-prism`, which core 0.10.0 already shipped; change `add-vllm-runtime`, D11; `sglang` after
14
- * `vllm`, change `add-sglang-runtime`, D8). A Prism-only file never loads
14
+ * `vllm`, change `add-sglang-runtime`, D8; `foundry-local` after `sglang`, change `add-foundry-local`, D5). A Prism-only file never loads
15
15
  * under another engine (the compatibility gate), so its sessions are found here even near the end of
16
16
  * the list; one store model is never loaded in two managed providers at once, so their order never
17
17
  * decides between two live sessions of one id.
@@ -24,6 +24,7 @@ export const LOCAL_SEARCH_ORDER = [
24
24
  'atomic-prism',
25
25
  'vllm',
26
26
  'sglang',
27
+ 'foundry-local',
27
28
  ];
28
29
  /**
29
30
  * The remote provider that owns `modelId`, if any. Remote wins over local — a model id the user
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/router/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6B;IAC1D,UAAU;IACV,mBAAmB;IACnB,KAAK;IACL,cAAc;IACd,cAAc;IACd,MAAM;IACN,QAAQ;CACT,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,SAA8C;IAE9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAA;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,KAAK,CAAC;YAAE,SAAQ;QACrB,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,SAAQ;QAClE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,IAAe,EACf,SAA8C;IAE9C,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAE,EAAU,EAAW,EAAE,CAC5D,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,CAAA;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACnF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;QACrC,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;IAClF,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/router/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA6B;IAC1D,UAAU;IACV,mBAAmB;IACnB,KAAK;IACL,cAAc;IACd,cAAc;IACd,MAAM;IACN,QAAQ;IACR,eAAe;CAChB,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,SAA8C;IAE9C,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAA;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACvD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;IAC/B,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS,EAAE,CAAS;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,IAAI,CAAC,KAAK,CAAC;YAAE,SAAQ;QACrB,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,SAAQ;QAClE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,IAAe,EACf,SAA8C;IAE9C,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAE,EAAU,EAAW,EAAE,CAC5D,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,CAAA;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IACnF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;QACrC,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAA;IAClF,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Foundry Local's accelerators (openspec change `add-foundry-local`, task 6.4, design D3). The
3
+ * library finds and downloads them itself; core only decides when: a `probe` of the active build
4
+ * when a client first asks or the active build changed, and a `prepare` when a client orders it — one
5
+ * at a time, each step published as `foundry-local:accelerators`.
6
+ *
7
+ * What is prepared is core's own record, `<data>/foundry-local/runtime/accelerators.json`: the
8
+ * library's "registered" flag lives only as long as one process (spike finding 18).
9
+ */
10
+ import type { CoreEvents, FoundryLocalAccelerators, FoundryLocalPrepareRequest, FoundryLocalPrepareResult } from '../../contracts/index.js';
11
+ import type { FoundryHostCommand } from './host-process.js';
12
+ export declare const ACCELERATORS_FILE = "accelerators.json";
13
+ export interface FoundryLocalAcceleratorDeps {
14
+ hostCommand: FoundryHostCommand;
15
+ /** The active build's directory, or nothing installed. */
16
+ resolveBuild: () => Promise<string | undefined>;
17
+ /** `<data>/foundry-local/runtime`: the library's data and core's `accelerators.json`. */
18
+ runtimeDir: string;
19
+ logsDir: string;
20
+ emit: (name: 'foundry-local:accelerators', payload: CoreEvents['foundry-local:accelerators']) => void;
21
+ env?: NodeJS.ProcessEnv;
22
+ now?: () => number;
23
+ }
24
+ export declare class FoundryLocalAcceleratorService {
25
+ private readonly deps;
26
+ private cache;
27
+ private preparing;
28
+ private readonly now;
29
+ constructor(deps: FoundryLocalAcceleratorDeps);
30
+ /** The names core recorded as prepared: what a load checks before it starts a host. */
31
+ prepared(): Promise<string[]>;
32
+ /** The last probe of the active build, with core's record of what is prepared; `force` probes again. */
33
+ list(options?: {
34
+ force?: boolean;
35
+ }): Promise<FoundryLocalAccelerators>;
36
+ /** Downloads and registers the accelerators named (none: all offered); one prepare at a time. */
37
+ prepare(request: FoundryLocalPrepareRequest): Promise<FoundryLocalPrepareResult>;
38
+ private withRecord;
39
+ private read;
40
+ /** Write-then-rename: a crash mid-write leaves the previous record, never half of one. */
41
+ private write;
42
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Foundry Local's accelerators (openspec change `add-foundry-local`, task 6.4, design D3). The
3
+ * library finds and downloads them itself; core only decides when: a `probe` of the active build
4
+ * when a client first asks or the active build changed, and a `prepare` when a client orders it — one
5
+ * at a time, each step published as `foundry-local:accelerators`.
6
+ *
7
+ * What is prepared is core's own record, `<data>/foundry-local/runtime/accelerators.json`: the
8
+ * library's "registered" flag lives only as long as one process (spike finding 18).
9
+ */
10
+ import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
11
+ import { basename, dirname, join } from 'node:path';
12
+ import { AtomicCoreError } from '../../contracts/index.js';
13
+ import { runFoundryHostPrepare, runFoundryHostProbe } from './host-process.js';
14
+ export const ACCELERATORS_FILE = 'accelerators.json';
15
+ const EMPTY = { prepared: [], failures: {}, updated_at: 0 };
16
+ export class FoundryLocalAcceleratorService {
17
+ deps;
18
+ cache = null;
19
+ preparing = false;
20
+ now;
21
+ constructor(deps) {
22
+ this.deps = deps;
23
+ this.now = deps.now ?? Date.now;
24
+ }
25
+ /** The names core recorded as prepared: what a load checks before it starts a host. */
26
+ async prepared() {
27
+ return [...(await this.read()).prepared];
28
+ }
29
+ /** The last probe of the active build, with core's record of what is prepared; `force` probes again. */
30
+ async list(options = {}) {
31
+ const build = await this.deps.resolveBuild();
32
+ if (!build)
33
+ return {
34
+ installed: false,
35
+ build: null,
36
+ version: null,
37
+ c_api_version: null,
38
+ probed_at: null,
39
+ accelerators: [],
40
+ error: null,
41
+ };
42
+ const record = await this.read();
43
+ if (!options.force && this.cache?.build === build)
44
+ return this.withRecord(this.cache.answer, record);
45
+ const name = `${basename(dirname(build))}/${basename(build)}`;
46
+ let answer;
47
+ try {
48
+ const probe = await runFoundryHostProbe(this.deps.hostCommand, {
49
+ libDir: build,
50
+ appDataDir: this.deps.runtimeDir,
51
+ logsDir: this.deps.logsDir,
52
+ prepared: record.prepared,
53
+ }, this.deps.env ? { env: this.deps.env } : {});
54
+ answer = {
55
+ installed: true,
56
+ build: name,
57
+ version: probe.version ?? null,
58
+ c_api_version: probe.c_api_version,
59
+ probed_at: this.now(),
60
+ accelerators: probe.accelerators.map((accelerator) => ({
61
+ name: accelerator.name,
62
+ execution_provider: (accelerator.execution_provider ??
63
+ null),
64
+ device: accelerator.device,
65
+ prepared: false,
66
+ })),
67
+ error: null,
68
+ };
69
+ }
70
+ catch (error) {
71
+ const details = error instanceof AtomicCoreError ? error.details : undefined;
72
+ answer = {
73
+ installed: true,
74
+ build: name,
75
+ version: null,
76
+ c_api_version: null,
77
+ probed_at: this.now(),
78
+ accelerators: [],
79
+ error: [error instanceof Error ? error.message : String(error), details].filter(Boolean).join(' '),
80
+ };
81
+ }
82
+ this.cache = { build, answer };
83
+ return this.withRecord(answer, record);
84
+ }
85
+ /** Downloads and registers the accelerators named (none: all offered); one prepare at a time. */
86
+ async prepare(request) {
87
+ if (this.preparing)
88
+ throw new AtomicCoreError('ENGINE_INSTALL_IN_PROGRESS', 'Foundry Local accelerators are already being prepared; wait for that to finish.');
89
+ this.preparing = true;
90
+ try {
91
+ const build = await this.deps.resolveBuild();
92
+ if (!build)
93
+ throw new AtomicCoreError('BINARY_NOT_FOUND', 'Foundry Local is not installed; install it before preparing accelerators.');
94
+ const summary = await runFoundryHostPrepare(this.deps.hostCommand, { libDir: build, appDataDir: this.deps.runtimeDir, logsDir: this.deps.logsDir }, request.accelerators ?? [], (step) => this.deps.emit('foundry-local:accelerators', step), this.deps.env ? { env: this.deps.env } : {});
95
+ const record = await this.read();
96
+ const prepared = new Set(record.prepared);
97
+ const failures = { ...record.failures };
98
+ for (const outcome of summary.accelerators) {
99
+ if (outcome.prepared) {
100
+ prepared.add(outcome.name);
101
+ delete failures[outcome.name];
102
+ }
103
+ else {
104
+ prepared.delete(outcome.name);
105
+ failures[outcome.name] = outcome.reason ?? 'Foundry Local did not register it.';
106
+ }
107
+ }
108
+ await this.write({ prepared: [...prepared], failures, updated_at: this.now() });
109
+ // The library state changed: the next request probes again (spec: after install, update, prepare).
110
+ this.cache = null;
111
+ return { accelerators: summary.accelerators };
112
+ }
113
+ finally {
114
+ this.preparing = false;
115
+ }
116
+ }
117
+ withRecord(answer, record) {
118
+ return {
119
+ ...answer,
120
+ accelerators: answer.accelerators.map((accelerator) => {
121
+ const reason = record.failures[accelerator.name];
122
+ const prepared = record.prepared.includes(accelerator.name);
123
+ return { ...accelerator, prepared, ...(!prepared && reason !== undefined ? { reason } : {}) };
124
+ }),
125
+ };
126
+ }
127
+ async read() {
128
+ try {
129
+ const raw = JSON.parse(await readFile(join(this.deps.runtimeDir, ACCELERATORS_FILE), 'utf8'));
130
+ return {
131
+ prepared: Array.isArray(raw.prepared)
132
+ ? raw.prepared.filter((name) => typeof name === 'string')
133
+ : [],
134
+ failures: raw.failures && typeof raw.failures === 'object' && !Array.isArray(raw.failures)
135
+ ? Object.fromEntries(Object.entries(raw.failures).filter(([, v]) => typeof v === 'string'))
136
+ : {},
137
+ updated_at: typeof raw.updated_at === 'number' ? raw.updated_at : 0,
138
+ };
139
+ }
140
+ catch {
141
+ return EMPTY;
142
+ }
143
+ }
144
+ /** Write-then-rename: a crash mid-write leaves the previous record, never half of one. */
145
+ async write(record) {
146
+ await mkdir(this.deps.runtimeDir, { recursive: true });
147
+ const path = join(this.deps.runtimeDir, ACCELERATORS_FILE);
148
+ const temporary = `${path}.tmp-${process.pid}`;
149
+ await writeFile(temporary, JSON.stringify(record, null, 2));
150
+ await rename(temporary, path);
151
+ }
152
+ }
153
+ //# sourceMappingURL=accelerators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accelerators.js","sourceRoot":"","sources":["../../../src/runtime/foundry-local/accelerators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `POST /models/foundry-local/check` (openspec change `add-foundry-local`, task 6.5): whether a variant
3
+ * would run here, from what core already knows — the platform, the installed build, the last
4
+ * accelerators probe and whether the machine has an NPU. Never the network.
5
+ */
6
+ import type { FoundryLocalAccelerator, FoundryLocalCheckRequest, FoundryLocalCheckResult } from '../../contracts/index.js';
7
+ export interface FoundryLocalCheckFacts {
8
+ platform: NodeJS.Platform;
9
+ arch: string;
10
+ /** A Foundry Local build is installed and active. */
11
+ installed: boolean;
12
+ /** The last probe's accelerators, with core's record of what is prepared. */
13
+ accelerators: readonly FoundryLocalAccelerator[];
14
+ /** An NPU on this machine (`probeNpu`); `null` when unknown — the probe's list decides then. */
15
+ npu: boolean | null;
16
+ }
17
+ export declare function foundryLocalVerdict(facts: FoundryLocalCheckFacts, request: FoundryLocalCheckRequest): FoundryLocalCheckResult;
18
+ /** The request body, strictly: the accelerator and the device as text, nothing else. */
19
+ export declare function parseFoundryLocalCheckRequest(body: unknown): FoundryLocalCheckRequest;