@sentropic/h2a-runtime 0.98.7-rc.1 → 0.98.7-rc.10

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 (213) hide show
  1. package/dist/agent-launch-args.d.ts.map +1 -1
  2. package/dist/agent-launch-args.js +5 -5
  3. package/dist/agent-launch-args.js.map +1 -1
  4. package/dist/agy-claude.d.ts +42 -0
  5. package/dist/agy-claude.d.ts.map +1 -0
  6. package/dist/agy-claude.js +148 -0
  7. package/dist/agy-claude.js.map +1 -0
  8. package/dist/agy-headless.d.ts +11 -0
  9. package/dist/agy-headless.d.ts.map +1 -0
  10. package/dist/agy-headless.js +104 -0
  11. package/dist/agy-headless.js.map +1 -0
  12. package/dist/attach.d.ts +3 -0
  13. package/dist/attach.d.ts.map +1 -1
  14. package/dist/attach.js +2 -0
  15. package/dist/attach.js.map +1 -1
  16. package/dist/central-mcp.d.ts +32 -0
  17. package/dist/central-mcp.d.ts.map +1 -1
  18. package/dist/central-mcp.js +186 -69
  19. package/dist/central-mcp.js.map +1 -1
  20. package/dist/claude-code-cli-isolation.d.ts +53 -0
  21. package/dist/claude-code-cli-isolation.d.ts.map +1 -0
  22. package/dist/claude-code-cli-isolation.js +277 -0
  23. package/dist/claude-code-cli-isolation.js.map +1 -0
  24. package/dist/claude-code-cli-lifecycle.d.ts +80 -0
  25. package/dist/claude-code-cli-lifecycle.d.ts.map +1 -0
  26. package/dist/claude-code-cli-lifecycle.js +402 -0
  27. package/dist/claude-code-cli-lifecycle.js.map +1 -0
  28. package/dist/claude-code-cli-runner.d.ts +89 -0
  29. package/dist/claude-code-cli-runner.d.ts.map +1 -0
  30. package/dist/claude-code-cli-runner.js +659 -0
  31. package/dist/claude-code-cli-runner.js.map +1 -0
  32. package/dist/claude-seat-input.d.ts +47 -0
  33. package/dist/claude-seat-input.d.ts.map +1 -0
  34. package/dist/claude-seat-input.js +272 -0
  35. package/dist/claude-seat-input.js.map +1 -0
  36. package/dist/claude-seat-mesh-contract.d.ts +88 -0
  37. package/dist/claude-seat-mesh-contract.d.ts.map +1 -0
  38. package/dist/claude-seat-mesh-contract.js +13 -0
  39. package/dist/claude-seat-mesh-contract.js.map +1 -0
  40. package/dist/cli-seat-codecs.d.ts +86 -0
  41. package/dist/cli-seat-codecs.d.ts.map +1 -0
  42. package/dist/cli-seat-codecs.js +255 -0
  43. package/dist/cli-seat-codecs.js.map +1 -0
  44. package/dist/cli-seat-fixtures.d.ts +86 -0
  45. package/dist/cli-seat-fixtures.d.ts.map +1 -0
  46. package/dist/cli-seat-fixtures.js +114 -0
  47. package/dist/cli-seat-fixtures.js.map +1 -0
  48. package/dist/cli-seat-materialization.d.ts +245 -0
  49. package/dist/cli-seat-materialization.d.ts.map +1 -0
  50. package/dist/cli-seat-materialization.js +646 -0
  51. package/dist/cli-seat-materialization.js.map +1 -0
  52. package/dist/conv-guard.d.ts.map +1 -1
  53. package/dist/conv-guard.js +6 -2
  54. package/dist/conv-guard.js.map +1 -1
  55. package/dist/delegate.d.ts +10 -0
  56. package/dist/delegate.d.ts.map +1 -1
  57. package/dist/delegate.js +29 -0
  58. package/dist/delegate.js.map +1 -1
  59. package/dist/file-lock.d.ts +4 -2
  60. package/dist/file-lock.d.ts.map +1 -1
  61. package/dist/file-lock.js +24 -10
  62. package/dist/file-lock.js.map +1 -1
  63. package/dist/gateway-host/claude-seat-client.d.ts +32 -0
  64. package/dist/gateway-host/claude-seat-client.d.ts.map +1 -0
  65. package/dist/gateway-host/claude-seat-client.js +38 -0
  66. package/dist/gateway-host/claude-seat-client.js.map +1 -0
  67. package/dist/gateway-host/config-file.d.ts +2 -0
  68. package/dist/gateway-host/config-file.d.ts.map +1 -1
  69. package/dist/gateway-host/config-file.js +5 -1
  70. package/dist/gateway-host/config-file.js.map +1 -1
  71. package/dist/gateway-host/daemon.d.ts.map +1 -1
  72. package/dist/gateway-host/daemon.js +1 -2
  73. package/dist/gateway-host/daemon.js.map +1 -1
  74. package/dist/gateway-host/host.d.ts +6 -0
  75. package/dist/gateway-host/host.d.ts.map +1 -1
  76. package/dist/gateway-host/host.js +24 -3
  77. package/dist/gateway-host/host.js.map +1 -1
  78. package/dist/gateway-host/live-auth.d.ts +62 -0
  79. package/dist/gateway-host/live-auth.d.ts.map +1 -0
  80. package/dist/gateway-host/live-auth.js +87 -0
  81. package/dist/gateway-host/live-auth.js.map +1 -0
  82. package/dist/gateway-host/live-declarations.d.ts.map +1 -1
  83. package/dist/gateway-host/live-declarations.js +13 -7
  84. package/dist/gateway-host/live-declarations.js.map +1 -1
  85. package/dist/gateway-host/live-disclosure.d.ts +124 -0
  86. package/dist/gateway-host/live-disclosure.d.ts.map +1 -0
  87. package/dist/gateway-host/live-disclosure.js +347 -0
  88. package/dist/gateway-host/live-disclosure.js.map +1 -0
  89. package/dist/gateway-host/live-github.d.ts +11 -0
  90. package/dist/gateway-host/live-github.d.ts.map +1 -0
  91. package/dist/gateway-host/live-github.js +374 -0
  92. package/dist/gateway-host/live-github.js.map +1 -0
  93. package/dist/gateway-host/live-host.d.ts +20 -0
  94. package/dist/gateway-host/live-host.d.ts.map +1 -0
  95. package/dist/gateway-host/live-host.js +14 -0
  96. package/dist/gateway-host/live-host.js.map +1 -0
  97. package/dist/gateway-host/live-object-store.d.ts +35 -0
  98. package/dist/gateway-host/live-object-store.d.ts.map +1 -0
  99. package/dist/gateway-host/live-object-store.js +447 -0
  100. package/dist/gateway-host/live-object-store.js.map +1 -0
  101. package/dist/gateway-model-catalog/model-catalog.d.ts +38 -0
  102. package/dist/gateway-model-catalog/model-catalog.d.ts.map +1 -0
  103. package/dist/gateway-model-catalog/model-catalog.js +167 -0
  104. package/dist/gateway-model-catalog/model-catalog.js.map +1 -0
  105. package/dist/identity-cull/cull.js +1 -1
  106. package/dist/identity-cull/cull.js.map +1 -1
  107. package/dist/identity-cull/identity-fence.d.ts +48 -0
  108. package/dist/identity-cull/identity-fence.d.ts.map +1 -0
  109. package/dist/identity-cull/identity-fence.js +221 -0
  110. package/dist/identity-cull/identity-fence.js.map +1 -0
  111. package/dist/identity-operator-break.d.ts +43 -0
  112. package/dist/identity-operator-break.d.ts.map +1 -0
  113. package/dist/identity-operator-break.js +85 -0
  114. package/dist/identity-operator-break.js.map +1 -0
  115. package/dist/index.d.ts +8 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +446 -131
  118. package/dist/index.js.map +1 -1
  119. package/dist/launch-layout.d.ts.map +1 -1
  120. package/dist/launch-layout.js +10 -2
  121. package/dist/launch-layout.js.map +1 -1
  122. package/dist/llm-mesh-accounts.d.ts +128 -6
  123. package/dist/llm-mesh-accounts.d.ts.map +1 -1
  124. package/dist/llm-mesh-accounts.js +370 -14
  125. package/dist/llm-mesh-accounts.js.map +1 -1
  126. package/dist/native-host.d.ts +25 -1
  127. package/dist/native-host.d.ts.map +1 -1
  128. package/dist/native-host.js +184 -23
  129. package/dist/native-host.js.map +1 -1
  130. package/dist/native-restart.d.ts +2 -0
  131. package/dist/native-restart.d.ts.map +1 -1
  132. package/dist/native-restart.js +7 -0
  133. package/dist/native-restart.js.map +1 -1
  134. package/dist/native-terminal/fleet.d.ts +11 -0
  135. package/dist/native-terminal/fleet.d.ts.map +1 -1
  136. package/dist/native-terminal/fleet.js +58 -1
  137. package/dist/native-terminal/fleet.js.map +1 -1
  138. package/dist/native-terminal/host-scope.d.ts +18 -0
  139. package/dist/native-terminal/host-scope.d.ts.map +1 -0
  140. package/dist/native-terminal/host-scope.js +65 -0
  141. package/dist/native-terminal/host-scope.js.map +1 -0
  142. package/dist/native-terminal/host.d.ts +7 -1
  143. package/dist/native-terminal/host.d.ts.map +1 -1
  144. package/dist/native-terminal/host.js +10 -26
  145. package/dist/native-terminal/host.js.map +1 -1
  146. package/dist/native-terminal/op.d.ts +36 -1
  147. package/dist/native-terminal/op.d.ts.map +1 -1
  148. package/dist/native-terminal/op.js +190 -33
  149. package/dist/native-terminal/op.js.map +1 -1
  150. package/dist/native-terminal/process.d.ts.map +1 -1
  151. package/dist/native-terminal/process.js +10 -1
  152. package/dist/native-terminal/process.js.map +1 -1
  153. package/dist/native-terminal/screen.d.ts.map +1 -1
  154. package/dist/native-terminal/screen.js +1 -1
  155. package/dist/native-terminal/screen.js.map +1 -1
  156. package/dist/native-terminal/server.d.ts +12 -2
  157. package/dist/native-terminal/server.d.ts.map +1 -1
  158. package/dist/native-terminal/server.js +143 -42
  159. package/dist/native-terminal/server.js.map +1 -1
  160. package/dist/native-terminal/session-scope.d.ts +2 -0
  161. package/dist/native-terminal/session-scope.d.ts.map +1 -0
  162. package/dist/native-terminal/session-scope.js +32 -0
  163. package/dist/native-terminal/session-scope.js.map +1 -0
  164. package/dist/proc-identity.d.ts +31 -0
  165. package/dist/proc-identity.d.ts.map +1 -1
  166. package/dist/proc-identity.js +54 -0
  167. package/dist/proc-identity.js.map +1 -1
  168. package/dist/prompt-delivery.d.ts +3 -0
  169. package/dist/prompt-delivery.d.ts.map +1 -1
  170. package/dist/prompt-delivery.js +8 -3
  171. package/dist/prompt-delivery.js.map +1 -1
  172. package/dist/protocol-local.d.ts +16 -0
  173. package/dist/protocol-local.d.ts.map +1 -1
  174. package/dist/protocol-local.js +14 -0
  175. package/dist/protocol-local.js.map +1 -1
  176. package/dist/registry.d.ts +16 -12
  177. package/dist/registry.d.ts.map +1 -1
  178. package/dist/registry.js +39 -5
  179. package/dist/registry.js.map +1 -1
  180. package/dist/relaunch.d.ts +16 -0
  181. package/dist/relaunch.d.ts.map +1 -1
  182. package/dist/relaunch.js +42 -1
  183. package/dist/relaunch.js.map +1 -1
  184. package/dist/restore.d.ts +4 -0
  185. package/dist/restore.d.ts.map +1 -1
  186. package/dist/restore.js +9 -37
  187. package/dist/restore.js.map +1 -1
  188. package/dist/resume-launch-options.d.ts +3 -3
  189. package/dist/resume-launch-options.d.ts.map +1 -1
  190. package/dist/resume-launch-options.js +7 -4
  191. package/dist/resume-launch-options.js.map +1 -1
  192. package/dist/run.d.ts +2 -0
  193. package/dist/run.d.ts.map +1 -1
  194. package/dist/run.js +9 -4
  195. package/dist/run.js.map +1 -1
  196. package/dist/soft-refresh.d.ts.map +1 -1
  197. package/dist/soft-refresh.js +6 -0
  198. package/dist/soft-refresh.js.map +1 -1
  199. package/dist/tmux.d.ts +31 -5
  200. package/dist/tmux.d.ts.map +1 -1
  201. package/dist/tmux.js +96 -20
  202. package/dist/tmux.js.map +1 -1
  203. package/dist/vendor/engram-live/contracts.d.ts +619 -2
  204. package/dist/vendor/engram-live/contracts.js +1201 -25
  205. package/dist/vendor/engram-live/integration.d.ts +44 -4
  206. package/dist/vendor/engram-live/integration.js +65 -5
  207. package/dist/vendor/engram-live/pr-sync.d.ts +144 -0
  208. package/dist/vendor/engram-live/pr-sync.js +411 -0
  209. package/dist/vendor/engram-live/registration.d.ts +2 -2
  210. package/dist/vendor/engram-live/registration.js +2 -4
  211. package/dist/vendor/engram-live/retention.d.ts +56 -0
  212. package/dist/vendor/engram-live/retention.js +179 -0
  213. package/package.json +5 -5
@@ -0,0 +1,447 @@
1
+ /** R1 (LIVE §4): host-owned committed objects, never an alternate or a checkout.
2
+ * The composition owner supplies an authorized clone/scope and local source.
3
+ * No source config, refs, hooks, transport or credentials are consulted here.
4
+ * Receipt publication follows pack verification, private pin and durable sync.
5
+ */
6
+ import { execFileSync, spawn } from "node:child_process";
7
+ import { createHash, randomUUID } from "node:crypto";
8
+ import { closeSync, createWriteStream, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, readdirSync, realpathSync, renameSync, rmdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
9
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
10
+ import { Transform } from "node:stream";
11
+ import { pipeline } from "node:stream/promises";
12
+ import { validateLiveScope, validateRetentionReceipt, validateRetentionRequest, } from "../vendor/engram-live/contracts.js";
13
+ const snapshot = (value) => JSON.parse(JSON.stringify(value));
14
+ const canonicalPath = (path) => existsSync(path) ? realpathSync(path) : resolve(path);
15
+ const within = (parent, child) => {
16
+ const tail = relative(parent, child);
17
+ return tail === "" || (!isAbsolute(tail) && tail !== ".." && !tail.startsWith(`..${sep}`));
18
+ };
19
+ function syncPath(path) {
20
+ const fd = openSync(path, "r");
21
+ try {
22
+ fsyncSync(fd);
23
+ }
24
+ finally {
25
+ closeSync(fd);
26
+ }
27
+ }
28
+ function durableJson(path, value, generation) {
29
+ const tmp = generation ? join(generation, `${randomUUID()}.tmp`) : `${path}.${randomUUID()}.tmp`;
30
+ try {
31
+ writeFileSync(tmp, JSON.stringify(value) + "\n", { mode: 0o600, flag: "wx" });
32
+ syncPath(tmp);
33
+ renameSync(tmp, path);
34
+ syncPath(resolve(path, ".."));
35
+ }
36
+ finally {
37
+ rmSync(tmp, { force: true });
38
+ }
39
+ }
40
+ function syncTree(path) {
41
+ for (const name of readdirSync(path)) {
42
+ const file = join(path, name);
43
+ if (statSync(file).isDirectory())
44
+ syncTree(file);
45
+ else
46
+ syncPath(file);
47
+ }
48
+ syncPath(path);
49
+ }
50
+ function bytesIn(path) {
51
+ return readdirSync(path).reduce((sum, name) => {
52
+ const file = join(path, name);
53
+ const stat = statSync(file);
54
+ return sum + (stat.isDirectory() ? bytesIn(file) : stat.size);
55
+ }, 0);
56
+ }
57
+ // Only the observed generation is removed; age authorizes fencing, never
58
+ // concurrent shared writes. Publications consume sources in that generation.
59
+ function takeoverStaleLock(lockPath) {
60
+ let observed;
61
+ try {
62
+ observed = readdirSync(lockPath);
63
+ if (Date.now() - statSync(lockPath).mtimeMs <= 60_000)
64
+ throw new Error("store_busy");
65
+ }
66
+ catch (error) {
67
+ if (error.message === "store_busy")
68
+ throw error;
69
+ if (error.code === "ENOENT" || !existsSync(lockPath))
70
+ throw new Error("store_busy");
71
+ throw error;
72
+ }
73
+ for (const oldToken of observed)
74
+ rmSync(join(lockPath, oldToken), { recursive: true, force: true });
75
+ try {
76
+ rmdirSync(lockPath);
77
+ }
78
+ catch (error) {
79
+ if (error.code !== "ENOENT")
80
+ throw new Error("store_busy");
81
+ }
82
+ }
83
+ export function createLiveObjectStore(options) {
84
+ const scope = snapshot(options.scope);
85
+ const algorithm = options.algorithm;
86
+ if (!validateLiveScope(scope).ok || scope.worktree !== undefined)
87
+ throw new Error("invalid retention scope");
88
+ if (algorithm !== "sha1" && algorithm !== "sha256")
89
+ throw new Error("invalid retention algorithm");
90
+ if (!Number.isSafeInteger(options.quotaBytes) || options.quotaBytes < 0)
91
+ throw new Error("invalid object quota");
92
+ const quota = options.quotaBytes;
93
+ const root = realpathSync(options.root);
94
+ const commonDir = canonicalPath(options.source.commonDir);
95
+ for (const source of [commonDir, ...options.source.worktreeRoots.map(canonicalPath)]) {
96
+ if (within(source, root) || within(root, source))
97
+ throw new Error("private object store must be outside source roots");
98
+ }
99
+ const scopeKey = createHash("sha256").update(JSON.stringify([scope.tenant, scope.clone])).digest("hex");
100
+ const metadataDir = join(root, "live-object-store", scopeKey, algorithm);
101
+ const gitDir = join(metadataDir, "objects.git");
102
+ const requests = join(metadataDir, "requests");
103
+ const receipts = join(metadataDir, "receipts");
104
+ const gaps = join(metadataDir, "gaps");
105
+ const empty = join(metadataDir, "empty");
106
+ for (const dir of [join(root, "live-object-store"), join(root, "live-object-store", scopeKey), metadataDir, requests, receipts, gaps, empty]) {
107
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
108
+ }
109
+ const noConfig = join(metadataDir, "no-config");
110
+ if (!existsSync(noConfig))
111
+ writeFileSync(noConfig, "", { mode: 0o600, flag: "wx" });
112
+ // Whitelist the environment: inherited Git config, alternates, SSH commands,
113
+ // credentials, templates and exec-path overrides must never reach Git.
114
+ const env = {
115
+ PATH: process.env.PATH, HOME: metadataDir, XDG_CONFIG_HOME: metadataDir,
116
+ XDG_RUNTIME_DIR: metadataDir, TMPDIR: metadataDir,
117
+ GIT_CONFIG_NOSYSTEM: "1", GIT_CONFIG_SYSTEM: noConfig, GIT_CONFIG_GLOBAL: noConfig,
118
+ GIT_TERMINAL_PROMPT: "0", GIT_NO_REPLACE_OBJECTS: "1", GIT_NO_LAZY_FETCH: "1",
119
+ GIT_OPTIONAL_LOCKS: "0", GIT_ATTR_NOSYSTEM: "1", LC_ALL: "C",
120
+ };
121
+ const flags = ["--no-optional-locks", "-c", `core.hooksPath=${empty}`, "-c", "core.fsmonitor=false",
122
+ "-c", "protocol.allow=never", "-c", "gc.auto=0", "-c", "maintenance.auto=false"];
123
+ const git = (dir, args, extraEnv = {}) => execFileSync("git", [...flags, `--git-dir=${dir}`, ...args], {
124
+ cwd: metadataDir, env: { ...env, ...extraEnv }, encoding: "utf8",
125
+ stdio: ["ignore", "pipe", "pipe"], timeout: 30_000, maxBuffer: 1024 * 1024,
126
+ }).trim();
127
+ const init = (dir) => {
128
+ git(dir, ["init", "--bare", `--object-format=${algorithm}`, `--template=${empty}`, dir]);
129
+ // git init honors the caller's umask for its top directory. Create that
130
+ // directory ourselves before invoking it (all descendants stay protected).
131
+ };
132
+ if (!existsSync(join(gitDir, "HEAD"))) {
133
+ mkdirSync(gitDir, { mode: 0o700 });
134
+ init(gitDir);
135
+ }
136
+ mkdirSync(join(gitDir, "refs", "h2a", "retained"), { recursive: true, mode: 0o700 });
137
+ const acquisitionLockPath = join(metadataDir, "acquisition.lock");
138
+ const checkScope = (candidate, format) => {
139
+ if (!validateLiveScope(candidate).ok || candidate.worktree !== undefined ||
140
+ candidate.tenant !== scope.tenant || candidate.clone !== scope.clone)
141
+ throw new Error("retention scope mismatch");
142
+ if (format !== algorithm)
143
+ throw new Error("retention algorithm mismatch");
144
+ };
145
+ const pin = (oid) => `refs/h2a/retained/${oid}`;
146
+ const backupRef = (oid) => `h2a-live-object:${scopeKey}:${algorithm}:${oid}`;
147
+ const requestPath = (oid) => join(requests, `${oid}.json`);
148
+ const receiptPath = (oid) => join(receipts, `${oid}.json`);
149
+ const acknowledgePin = (oid, generation) => {
150
+ durableJson(receiptPath(oid), { scope, algorithm, oid,
151
+ receivedAt: (options.now ?? Date.now)(), backupRef: backupRef(oid) }, generation);
152
+ };
153
+ const readRequest = (oid) => {
154
+ const request = JSON.parse(readFileSync(requestPath(oid), "utf8"));
155
+ if (!validateRetentionRequest(request).ok || request.oid !== oid)
156
+ throw new Error("invalid durable retention request");
157
+ checkScope(request.scope, request.algorithm);
158
+ return request;
159
+ };
160
+ const verified = (dir, oid) => {
161
+ if (git(dir, ["cat-file", "-t", oid]) !== "commit")
162
+ throw new Error("retention root must be committed history");
163
+ // Includes parents, trees and blobs. A tip alone is never sufficient.
164
+ git(dir, ["fsck", "--strict", "--no-reflogs", "--no-dangling", oid]);
165
+ };
166
+ async function recordReceipt(candidate) {
167
+ const receipt = snapshot(candidate);
168
+ if (!validateRetentionReceipt(receipt).ok)
169
+ throw new Error("invalid retention receipt scope or fields");
170
+ checkScope(receipt.scope, receipt.algorithm);
171
+ if (!existsSync(requestPath(receipt.oid)))
172
+ throw new Error("retention receipt has no recorded request");
173
+ readRequest(receipt.oid);
174
+ if (receipt.backupRef !== backupRef(receipt.oid))
175
+ throw new Error("retention backup reference mismatch");
176
+ if (git(gitDir, ["rev-parse", "--verify", pin(receipt.oid)]) !== receipt.oid)
177
+ throw new Error("unprotected retention pin");
178
+ if (hasReceipt(receipt.oid))
179
+ return { received: true };
180
+ await withAcquisitionLock(async (generation) => {
181
+ verified(gitDir, receipt.oid);
182
+ syncTree(gitDir);
183
+ durableJson(receiptPath(receipt.oid), receipt, generation);
184
+ });
185
+ return { received: true };
186
+ }
187
+ // Single-receipt fast path: one file read plus one rev-parse, no full scan
188
+ // and no fsck. recordRequest uses this instead of a full load per request.
189
+ function hasReceipt(oid) {
190
+ try {
191
+ if (!existsSync(receiptPath(oid)))
192
+ return false;
193
+ const receipt = JSON.parse(readFileSync(receiptPath(oid), "utf8"));
194
+ if (!validateRetentionReceipt(receipt).ok || receipt.oid !== oid)
195
+ return false;
196
+ if (receipt.scope.tenant !== scope.tenant || receipt.scope.clone !== scope.clone ||
197
+ receipt.scope.worktree !== undefined || receipt.algorithm !== algorithm)
198
+ return false;
199
+ if (receipt.backupRef !== backupRef(oid))
200
+ return false;
201
+ readRequest(oid);
202
+ return git(gitDir, ["rev-parse", "--verify", pin(oid)]) === oid;
203
+ }
204
+ catch {
205
+ return false;
206
+ }
207
+ }
208
+ async function loadReceipts(query) {
209
+ checkScope(query.scope, query.algorithm);
210
+ const loaded = [];
211
+ for (const name of readdirSync(receipts).filter((name) => name.endsWith(".json")).sort()) {
212
+ // Quarantine: one corrupt receipt, foreign receipt, missing request or
213
+ // missing pin skips that entry instead of failing the whole pass. The
214
+ // skipped OID stays pending and is reacquired on retry.
215
+ try {
216
+ const receipt = JSON.parse(readFileSync(join(receipts, name), "utf8"));
217
+ if (!validateRetentionReceipt(receipt).ok || name !== `${receipt.oid}.json`)
218
+ continue;
219
+ if (receipt.scope.tenant !== scope.tenant || receipt.scope.clone !== scope.clone ||
220
+ receipt.scope.worktree !== undefined || receipt.algorithm !== algorithm)
221
+ continue;
222
+ try {
223
+ readRequest(receipt.oid);
224
+ }
225
+ catch {
226
+ continue;
227
+ }
228
+ if (receipt.backupRef !== backupRef(receipt.oid))
229
+ continue;
230
+ let pinned;
231
+ try {
232
+ pinned = git(gitDir, ["rev-parse", "--verify", pin(receipt.oid)]);
233
+ }
234
+ catch {
235
+ continue;
236
+ }
237
+ if (pinned !== receipt.oid)
238
+ continue;
239
+ loaded.push(receipt);
240
+ }
241
+ catch {
242
+ continue;
243
+ }
244
+ }
245
+ return { receipts: loaded };
246
+ }
247
+ async function acquire(request, stage) {
248
+ // This git-dir has only host-created config. Only immutable source objects
249
+ // are exposed to pack-objects; source refs/config/index are never loaded.
250
+ const sourceObjects = join(commonDir, "objects");
251
+ // Borrowing a source alternate would make both authority and availability
252
+ // ambiguous. Report a gap; never create an alternate in the private store.
253
+ if (existsSync(join(sourceObjects, "info", "alternates")))
254
+ throw new Error("source alternates not authorized");
255
+ const remaining = quota - bytesIn(join(gitDir, "objects"));
256
+ if (remaining <= 0)
257
+ throw new Error("quota_exhausted");
258
+ // Exclude retained history using only host-owned refs. The private store
259
+ // is a read-only, ephemeral alternate for this command, so exclusions
260
+ // also work after the corresponding root disappeared from the source.
261
+ const incoming = join(stage, "incoming.pack");
262
+ const child = spawn("git", [...flags, `--git-dir=${stage}`, "pack-objects", "--stdout", "--revs",
263
+ "--no-use-bitmap-index", "--no-reuse-delta", "--no-reuse-object"], {
264
+ cwd: metadataDir, env: { ...env, GIT_OBJECT_DIRECTORY: sourceObjects, GIT_ALTERNATE_OBJECT_DIRECTORIES: join(gitDir, "objects") }, stdio: ["pipe", "pipe", "pipe"],
265
+ });
266
+ const closed = new Promise((resolve, reject) => {
267
+ child.once("error", reject);
268
+ child.once("close", resolve);
269
+ });
270
+ // Stream exclusions with backpressure: the number of retained refs has no
271
+ // fixed ceiling and must never be limited by execFileSync's maxBuffer.
272
+ const retained = spawn("git", [...flags, `--git-dir=${gitDir}`, "for-each-ref",
273
+ "--format=^%(objectname)", "refs/h2a/retained"], {
274
+ cwd: metadataDir, env, stdio: ["ignore", "pipe", "pipe"],
275
+ });
276
+ const retainedClosed = new Promise((resolve, reject) => {
277
+ retained.once("error", reject);
278
+ retained.once("close", resolve);
279
+ });
280
+ // Drain errors, but never retain/log potentially sensitive source text.
281
+ child.stderr.resume();
282
+ retained.stderr.resume();
283
+ child.stdin.on("error", () => { });
284
+ child.stdin.write(`${request.oid}\n`);
285
+ let count = 0;
286
+ let timedOut = false;
287
+ const timer = setTimeout(() => { timedOut = true; child.kill("SIGKILL"); retained.kill("SIGKILL"); }, 30_000);
288
+ const transfers = [
289
+ pipeline(retained.stdout, child.stdin),
290
+ pipeline(child.stdout, new Transform({ transform(chunk, _encoding, callback) {
291
+ count += chunk.length;
292
+ callback(count > remaining ? new Error("quota_exhausted") : null, count > remaining ? undefined : chunk);
293
+ } }), createWriteStream(incoming, { flags: "wx", mode: 0o600 })),
294
+ ];
295
+ try {
296
+ const [code, retainedCode] = await Promise.all([closed, retainedClosed, ...transfers]);
297
+ if (code !== 0 || retainedCode !== 0 || timedOut)
298
+ throw new Error("objects_unavailable");
299
+ }
300
+ finally {
301
+ clearTimeout(timer);
302
+ if (child.exitCode === null && child.signalCode === null)
303
+ child.kill("SIGKILL");
304
+ if (retained.exitCode === null && retained.signalCode === null)
305
+ retained.kill("SIGKILL");
306
+ await Promise.allSettled([closed, retainedClosed, ...transfers]);
307
+ }
308
+ // index-pack writes alongside incoming; move the complete verified
309
+ // pair into staging's object db before connectivity verification.
310
+ writeFileSync(join(stage, "objects", "info", "alternates"), join(gitDir, "objects") + "\n", { flag: "wx", mode: 0o600 });
311
+ const hash = git(stage, ["index-pack", "--strict", incoming]);
312
+ const stagedPacks = join(stage, "objects", "pack");
313
+ renameSync(incoming, join(stagedPacks, `pack-${hash}.pack`));
314
+ renameSync(join(stage, "incoming.idx"), join(stagedPacks, `pack-${hash}.idx`));
315
+ // Closure is verified over the incoming objects plus retained objects;
316
+ // this alternate exists only inside the disposable acquisition generation.
317
+ verified(stage, request.oid);
318
+ if (bytesIn(join(gitDir, "objects")) + bytesIn(stagedPacks) > quota)
319
+ throw new Error("quota_exhausted");
320
+ // Install the pack before its index. A crash can leave an unindexed
321
+ // orphan pack, never an index referring to an absent pack.
322
+ for (const name of readdirSync(stagedPacks).sort((a, b) => Number(b.endsWith(".pack")) - Number(a.endsWith(".pack")))) {
323
+ renameSync(join(stagedPacks, name), join(gitDir, "objects", "pack", name));
324
+ }
325
+ syncTree(join(gitDir, "objects"));
326
+ // Every publication consumes a source in this generation. A takeover
327
+ // removes those sources before a successor is admitted; even a holder
328
+ // suspended inside rename cannot publish after being fenced.
329
+ const stagedPin = join(stage, "pin");
330
+ writeFileSync(stagedPin, request.oid + "\n", { flag: "wx", mode: 0o600 });
331
+ syncPath(stagedPin);
332
+ renameSync(stagedPin, join(gitDir, pin(request.oid)));
333
+ syncPath(join(gitDir, "refs", "h2a", "retained"));
334
+ syncPath(join(gitDir, "refs", "h2a"));
335
+ syncPath(join(gitDir, "refs"));
336
+ syncPath(gitDir);
337
+ syncPath(metadataDir);
338
+ acknowledgePin(request.oid, stage);
339
+ }
340
+ async function withAcquisitionLock(action) {
341
+ const token = randomUUID();
342
+ const candidate = `${acquisitionLockPath}.${token}.candidate`;
343
+ const generation = join(acquisitionLockPath, token);
344
+ let locked = false;
345
+ try {
346
+ mkdirSync(candidate, { mode: 0o700 });
347
+ mkdirSync(join(candidate, token), { mode: 0o700 });
348
+ init(join(candidate, token));
349
+ for (;;) {
350
+ try {
351
+ renameSync(candidate, acquisitionLockPath);
352
+ locked = true;
353
+ break;
354
+ }
355
+ catch (error) {
356
+ if (!["EEXIST", "ENOTEMPTY"].includes(error.code ?? ""))
357
+ throw error;
358
+ }
359
+ takeoverStaleLock(acquisitionLockPath);
360
+ }
361
+ await action(generation);
362
+ }
363
+ finally {
364
+ rmSync(candidate, { recursive: true, force: true });
365
+ if (locked) {
366
+ rmSync(generation, { recursive: true, force: true });
367
+ try {
368
+ rmdirSync(acquisitionLockPath);
369
+ }
370
+ catch (error) {
371
+ if (!["ENOENT", "ENOTEMPTY", "EEXIST"].includes(error.code ?? ""))
372
+ throw error;
373
+ }
374
+ }
375
+ }
376
+ }
377
+ async function recordRequest(input) {
378
+ const request = snapshot(input);
379
+ if (!validateRetentionRequest(request).ok)
380
+ throw new Error("invalid retention request scope or fields");
381
+ checkScope(request.scope, request.algorithm);
382
+ if (!existsSync(requestPath(request.oid)))
383
+ durableJson(requestPath(request.oid), request);
384
+ else
385
+ readRequest(request.oid);
386
+ if (hasReceipt(request.oid))
387
+ return { received: true };
388
+ try {
389
+ await withAcquisitionLock(async (generation) => {
390
+ try {
391
+ let pinned = false;
392
+ try {
393
+ pinned = git(gitDir, ["rev-parse", "--verify", pin(request.oid)]) === request.oid;
394
+ }
395
+ catch { /* not acquired */ }
396
+ if (pinned) {
397
+ // Recover a pin whose receipt was interrupted, without the source.
398
+ verified(gitDir, request.oid);
399
+ syncTree(gitDir);
400
+ acknowledgePin(request.oid, generation);
401
+ }
402
+ else
403
+ await acquire(request, generation);
404
+ }
405
+ catch (error) {
406
+ const code = error.code;
407
+ if (code && ["EACCES", "EROFS", "EIO", "ENOSPC"].includes(code))
408
+ throw error;
409
+ // A fenced holder cannot overwrite its successor's gap or receipt.
410
+ if (!existsSync(generation))
411
+ return;
412
+ const reason = error.message === "quota_exhausted" ? "quota_exhausted" : "objects_unavailable";
413
+ try {
414
+ durableJson(join(gaps, `${request.oid}.json`), { reason }, generation);
415
+ }
416
+ catch (failure) {
417
+ if (failure.code !== "ENOENT")
418
+ throw failure;
419
+ }
420
+ }
421
+ });
422
+ }
423
+ catch (error) {
424
+ if (error.message !== "store_busy")
425
+ throw error;
426
+ // Durable request remains pending; contention never writes a shared gap.
427
+ }
428
+ return { received: true };
429
+ }
430
+ async function pending() {
431
+ const acknowledged = new Set((await loadReceipts({ scope, algorithm })).receipts.map((receipt) => receipt.oid));
432
+ return readdirSync(requests).filter((name) => name.endsWith(".json")).sort().flatMap((name) => {
433
+ const request = readRequest(name.slice(0, -5));
434
+ if (acknowledged.has(request.oid))
435
+ return [];
436
+ const gapPath = join(gaps, name);
437
+ const reason = existsSync(gapPath) ? JSON.parse(readFileSync(gapPath, "utf8")).reason : "store_busy";
438
+ return [{ request, reason }];
439
+ });
440
+ }
441
+ return { gitDir, acquisitionLockPath, recordRequest, recordReceipt, loadReceipts, pending,
442
+ async retryPending() { for (const { request } of await pending())
443
+ await recordRequest(request); },
444
+ backupManifest: () => ({ gitDir, metadataDir, scope: snapshot(scope) }),
445
+ };
446
+ }
447
+ //# sourceMappingURL=live-object-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-object-store.js","sourceRoot":"","sources":["../../src/gateway-host/live-object-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * h2a embedded gateway model catalog — H0 mirror of the published #662
3
+ * surface (llm-mesh 0.26.0 / llm-gateway 0.20.0).
4
+ *
5
+ * Canonical routing knowledge stays in llm-mesh; this module only names the
6
+ * model ids `h2a run --model` accepts and normalizes readable aliases to
7
+ * their exact canonical id (identity-only normalization, no cross-model
8
+ * mapping). Unknown names resolve to undefined so the exact-model default
9
+ * never silently maps them.
10
+ */
11
+ export declare const GEMINI_4_ARGON = "gemini-4-argon";
12
+ export declare const GEMINI_3_8_FLASH = "gemini-3.8-flash";
13
+ export declare const MUSE_SPARK_1_3 = "muse-spark-1.3";
14
+ export declare const MUSE_SPARK_1_3_CONTRIBUTOR = "muse-spark-1.3-contributor";
15
+ export declare const MUSE_WONDER_1_0 = "muse-wonder-1.0";
16
+ export declare const MUSE_WONDER_FULL_1_0 = "muse-wonder-full-1.0";
17
+ export declare const GATEWAY_MODEL_IDS: readonly ["gemini-4-argon", "gemini-3.8-flash", "muse-spark-1.3", "muse-spark-1.3-contributor", "muse-wonder-1.0", "muse-wonder-full-1.0"];
18
+ export type GatewayModelId = (typeof GATEWAY_MODEL_IDS)[number];
19
+ /** Readable aliases accepted by `h2a run --model` (spec §6.6). */
20
+ export declare const GATEWAY_MODEL_ALIASES: Readonly<Record<string, GatewayModelId>>;
21
+ export declare function isKnownGatewayModel(value: string): value is GatewayModelId;
22
+ /** Identity-only normalization: alias → canonical id, else undefined. */
23
+ export declare function resolveGatewayModelAlias(value: string): GatewayModelId | undefined;
24
+ /**
25
+ * Claude-family gateway mapping (spec §6.6): requested alias family →
26
+ * cloud slot (Gemini) and Muse slot. Effort is advisory; the mesh validates
27
+ * it against transport capability. Unmentioned legacy families keep llm-mesh's
28
+ * own table and are absent here by design.
29
+ */
30
+ export type ClaudeGatewaySlot = {
31
+ readonly cloud: GatewayModelId;
32
+ readonly cloudEffort: string;
33
+ readonly muse: GatewayModelId;
34
+ readonly museEffort: string;
35
+ };
36
+ export declare const CLAUDE_GATEWAY_MODEL_MAP: Readonly<Record<string, ClaudeGatewaySlot>>;
37
+ export declare function claudeGatewaySlot(family: string): ClaudeGatewaySlot | undefined;
38
+ //# sourceMappingURL=model-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../../src/gateway-model-catalog/model-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AACvE,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,4IAOpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAqBxE,CAAC;AAEJ,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAE1E;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,GACZ,cAAc,GAAG,SAAS,CAK5B;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAwGlC,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GACb,iBAAiB,GAAG,SAAS,CAK/B"}