agent-hitch 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +229 -132
  2. package/README.zh-CN.md +330 -0
  3. package/dist/bin/hitch.js +9 -0
  4. package/dist/bin/hitch.js.map +1 -0
  5. package/dist/scripts/check-release.js +25 -0
  6. package/dist/scripts/check-release.js.map +1 -0
  7. package/dist/scripts/check-syntax.js +32 -0
  8. package/dist/scripts/check-syntax.js.map +1 -0
  9. package/dist/src/adapters.js +461 -0
  10. package/dist/src/adapters.js.map +1 -0
  11. package/dist/src/artifacts.js +1081 -0
  12. package/dist/src/artifacts.js.map +1 -0
  13. package/dist/src/cli.js +699 -0
  14. package/dist/src/cli.js.map +1 -0
  15. package/dist/src/config.js +53 -0
  16. package/dist/src/config.js.map +1 -0
  17. package/dist/src/controller-runtime/hash.js +353 -0
  18. package/dist/src/controller-runtime/hash.js.map +1 -0
  19. package/dist/src/controller-runtime/store.js +323 -0
  20. package/dist/src/controller-runtime/store.js.map +1 -0
  21. package/dist/src/daemon.js +461 -0
  22. package/dist/src/daemon.js.map +1 -0
  23. package/dist/src/domain/types.js +10 -0
  24. package/dist/src/domain/types.js.map +1 -0
  25. package/dist/src/domain/validate.js +240 -0
  26. package/dist/src/domain/validate.js.map +1 -0
  27. package/dist/src/engine.js +465 -0
  28. package/dist/src/engine.js.map +1 -0
  29. package/dist/src/errors.js +14 -0
  30. package/dist/src/errors.js.map +1 -0
  31. package/dist/src/eval-tools.js +318 -0
  32. package/dist/src/eval-tools.js.map +1 -0
  33. package/dist/src/evals.js +313 -0
  34. package/dist/src/evals.js.map +1 -0
  35. package/dist/src/events.js +80 -0
  36. package/dist/src/events.js.map +1 -0
  37. package/dist/src/feedback/service.js +315 -0
  38. package/dist/src/feedback/service.js.map +1 -0
  39. package/dist/src/fs.js +45 -0
  40. package/dist/src/fs.js.map +1 -0
  41. package/dist/src/harbor-backend.js +280 -0
  42. package/dist/src/harbor-backend.js.map +1 -0
  43. package/dist/src/harness-reference.js +83 -0
  44. package/dist/src/harness-reference.js.map +1 -0
  45. package/dist/src/line-stream.js +20 -0
  46. package/dist/src/line-stream.js.map +1 -0
  47. package/dist/src/locks.js +38 -0
  48. package/dist/src/locks.js.map +1 -0
  49. package/dist/src/package-root.js +40 -0
  50. package/dist/src/package-root.js.map +1 -0
  51. package/dist/src/process.js +50 -0
  52. package/dist/src/process.js.map +1 -0
  53. package/dist/src/registry.js +81 -0
  54. package/dist/src/registry.js.map +1 -0
  55. package/dist/src/scheduler.js +162 -0
  56. package/dist/src/scheduler.js.map +1 -0
  57. package/dist/src/trajectories/contract.js +17 -0
  58. package/dist/src/trajectories/contract.js.map +1 -0
  59. package/dist/src/trajectories/format.js +127 -0
  60. package/dist/src/trajectories/format.js.map +1 -0
  61. package/dist/src/trajectories/projector.js +385 -0
  62. package/dist/src/trajectories/projector.js.map +1 -0
  63. package/dist/src/trajectories/store.js +281 -0
  64. package/dist/src/trajectories/store.js.map +1 -0
  65. package/dist/src/workspaces.js +858 -0
  66. package/dist/src/workspaces.js.map +1 -0
  67. package/docs/schemas/controller-runtime-manifest.schema.json +57 -0
  68. package/docs/schemas/controller-runtime-ref.schema.json +16 -0
  69. package/docs/schemas/message-feedback.schema.json +37 -0
  70. package/docs/schemas/trajectory-ref.schema.json +30 -0
  71. package/integrations/harbor/hitch_harbor_agent.py +176 -4
  72. package/package.json +19 -11
  73. package/bin/hitch.js +0 -9
  74. package/src/adapters.js +0 -435
  75. package/src/artifacts.js +0 -949
  76. package/src/cli.js +0 -505
  77. package/src/config.js +0 -51
  78. package/src/daemon.js +0 -416
  79. package/src/engine.js +0 -400
  80. package/src/errors.js +0 -12
  81. package/src/eval-tools.js +0 -334
  82. package/src/evals.js +0 -276
  83. package/src/events.js +0 -69
  84. package/src/fs.js +0 -43
  85. package/src/harbor-backend.js +0 -285
  86. package/src/harness-reference.js +0 -78
  87. package/src/line-stream.js +0 -17
  88. package/src/locks.js +0 -33
  89. package/src/process.js +0 -49
  90. package/src/registry.js +0 -84
  91. package/src/scheduler.js +0 -156
  92. package/src/workspaces.js +0 -893
@@ -0,0 +1,323 @@
1
+ /**
2
+ * Controller runtime store: staging, promotion, cache lookup, and verified
3
+ * use of shared read-only controller runtime bundles (spec §4).
4
+ *
5
+ * New eval directories do not contain a complete Hitch runtime; they hold a
6
+ * durable `runtime.ref.json` reference. The shared bundle lives under
7
+ * `<hitch-root>/store/controller-runtimes/sha256/<64-hex>/`.
8
+ */
9
+ import { randomBytes } from "node:crypto";
10
+ import { createHash } from "node:crypto";
11
+ import { cp, mkdir, readFile, readdir, rename, rm, stat, chmod, open } from "node:fs/promises";
12
+ import path from "node:path";
13
+ import { statePaths, SCHEMA_VERSION } from "../config.js";
14
+ import { HitchError } from "../errors.js";
15
+ import { atomicWriteJSON, ensureDir, readJSON, removeIfExists } from "../fs.js";
16
+ import { delay } from "../process.js";
17
+ import { reclaimStaleLock } from "../locks.js";
18
+ import { packageRoot } from "../package-root.js";
19
+ import { ControllerRuntimeIntegrityError, RUNTIME_PAYLOAD_RULES, canonicalEncodeManifest, hashRuntimePayload, verifyRuntimePayload, } from "./hash.js";
20
+ import { validateControllerRuntimeManifest } from "../domain/validate.js";
21
+ /** The Hitch package root whose compiled payload is packaged as a controller runtime. */
22
+ export const PACKAGE_ROOT = packageRoot();
23
+ /**
24
+ * Ensure the shared controller runtime bundle for the current Hitch payload
25
+ * exists and is verified; returns its cache path and identity.
26
+ */
27
+ export async function ensureControllerRuntime({ root, payloadRoot = PACKAGE_ROOT, rules = RUNTIME_PAYLOAD_RULES }) {
28
+ if (!root)
29
+ throw new HitchError("a Hitch state root is required for the controller runtime", { code: "invalid_input", exitCode: 2 });
30
+ const paths = statePaths(root);
31
+ // Stage inside the state root's tmp/ directory so promotion is a same-
32
+ // filesystem atomic rename (spec §4.2 `tmp/runtime-staging-*`, §4.5).
33
+ const stagingBase = path.join(paths.temporary, "controller-runtime");
34
+ // Stage a fresh copy, hash it, and promote under a runtime-id lock.
35
+ const staging = await stagePayload(payloadRoot, rules, stagingBase);
36
+ try {
37
+ return await withRuntimeLock(paths, staging.runtimeId, async () => {
38
+ return promoteStagedRuntime(paths, staging);
39
+ });
40
+ }
41
+ finally {
42
+ await rm(staging.directory, { recursive: true, force: true }).catch(() => { });
43
+ }
44
+ }
45
+ async function stagePayload(payloadRoot, rules, stagingBase) {
46
+ const payloadRootReal = path.resolve(payloadRoot);
47
+ const hashResult = await hashRuntimePayload({ payloadRoot: payloadRootReal, rules });
48
+ const runtimeId = hashResult.runtimeId.replace("sha256:", "");
49
+ await ensureDir(stagingBase);
50
+ const staging = path.join(stagingBase, `runtime-staging-${runtimeId.slice(0, 12)}-${randomBytes(6).toString("hex")}`);
51
+ await mkdir(staging, { recursive: true });
52
+ // Copy the allowlisted payload into staging. Never hardlink from the
53
+ // development or installed package tree (spec §4.5).
54
+ const payloadDestination = path.join(staging, "payload");
55
+ await mkdir(payloadDestination, { recursive: true });
56
+ await copyPayload(payloadRootReal, payloadDestination, rules);
57
+ // Hash the staged payload and write its manifest; the complete tree is
58
+ // verified a second time during promotion.
59
+ const stagedHash = await hashRuntimePayload({ payloadRoot: payloadDestination, rules });
60
+ if (stagedHash.runtimeId !== hashResult.runtimeId) {
61
+ throw new ControllerRuntimeIntegrityError("staged runtime payload hash changed during staging");
62
+ }
63
+ await atomicWriteJSON(path.join(staging, "manifest.json"), stagedHash.manifest);
64
+ return { directory: staging, runtimeId };
65
+ }
66
+ async function copyPayload(sourceRoot, destinationRoot, rules) {
67
+ for (const rule of rules) {
68
+ const relative = rule.path || rule.directory || "";
69
+ const source = path.join(sourceRoot, ...relative.split("/"));
70
+ const destination = path.join(destinationRoot, ...relative.split("/"));
71
+ await ensureDir(path.dirname(destination));
72
+ await cp(source, destination, { recursive: true, force: false, errorOnExist: true });
73
+ }
74
+ }
75
+ async function promoteStagedRuntime(paths, staging) {
76
+ await ensureDir(paths.controllerRuntimes);
77
+ const destination = path.join(paths.controllerRuntimes, staging.runtimeId);
78
+ // If a valid bundle already exists, discard staging and return the cache hit
79
+ // (spec §4.5). Check first so a same-filesystem rename is never attempted
80
+ // onto an existing directory (POSIX rejects it).
81
+ if (await pathExists(destination)) {
82
+ try {
83
+ return await useControllerRuntimeById(paths, staging.runtimeId);
84
+ }
85
+ catch (error) {
86
+ if (error?.code !== "controller_runtime_integrity_mismatch")
87
+ throw error;
88
+ // The destination is corrupt: quarantine it before promoting the fresh
89
+ // staged bundle with the same runtime id (spec §4.5). The replacement
90
+ // carries the exact same bytes, so the id is never relabeled.
91
+ await quarantineInvalidRuntime(paths, destination, staging.runtimeId);
92
+ }
93
+ }
94
+ let promoted = false;
95
+ try {
96
+ await rename(staging.directory, destination);
97
+ promoted = true;
98
+ }
99
+ catch (error) {
100
+ if (error?.code !== "ENOTEMPTY" && error?.code !== "EEXIST")
101
+ throw error;
102
+ // A concurrent first use promoted first; validate the existing bundle.
103
+ }
104
+ if (promoted) {
105
+ const manifest = await loadManifest(destination);
106
+ await applyReadOnlyPermissions(destination, manifest.entrypoints.cli.path);
107
+ // Verify the promoted tree a second time before it can be used.
108
+ await verifyRuntimePayload(path.join(destination, "payload"), manifest);
109
+ return {
110
+ runtime_id: `sha256:${staging.runtimeId}`,
111
+ directory: destination,
112
+ manifest,
113
+ cache_hit: false,
114
+ manifest_digest: manifestDigest(manifest),
115
+ };
116
+ }
117
+ return useControllerRuntimeById(paths, staging.runtimeId);
118
+ }
119
+ async function quarantineInvalidRuntime(paths, destination, runtimeId) {
120
+ const quarantine = path.join(paths.temporary, `invalid-runtime-${runtimeId}-${randomBytes(6).toString("hex")}`);
121
+ await ensureDir(path.dirname(quarantine));
122
+ await rm(quarantine, { recursive: true, force: true }).catch(() => { });
123
+ try {
124
+ // The promoted bundle tree is read-only (0555/0444); make the root
125
+ // writable so the rename into quarantine is permitted on all platforms.
126
+ await chmod(destination, 0o755).catch(() => { });
127
+ await rename(destination, quarantine);
128
+ }
129
+ catch (error) {
130
+ if (error?.code === "ENOENT")
131
+ return;
132
+ throw error;
133
+ }
134
+ // Do not remove the quarantine eagerly; keep the corrupt bytes for
135
+ // diagnostics. A future GC command may reclaim it.
136
+ }
137
+ async function pathExists(file) {
138
+ try {
139
+ await stat(file);
140
+ return true;
141
+ }
142
+ catch (error) {
143
+ if (error?.code === "ENOENT")
144
+ return false;
145
+ throw error;
146
+ }
147
+ }
148
+ async function applyReadOnlyPermissions(directory, cliEntrypoint) {
149
+ if (process.platform === "win32")
150
+ return;
151
+ const stack = [directory];
152
+ while (stack.length > 0) {
153
+ const current = stack.pop();
154
+ const entries = await readdir(current, { withFileTypes: true });
155
+ for (const entry of entries) {
156
+ const absolute = path.join(current, entry.name);
157
+ if (entry.isDirectory()) {
158
+ stack.push(absolute);
159
+ }
160
+ else if (entry.isFile()) {
161
+ const payloadRelative = relativeToPayload(directory, absolute);
162
+ // Only the declared CLI entrypoint becomes executable (0555); sibling
163
+ // files such as .map sources stay read-only (0444) (spec §4.5).
164
+ const isEntrypoint = payloadRelative === cliEntrypoint;
165
+ await chmod(absolute, isEntrypoint ? 0o555 : 0o444);
166
+ }
167
+ }
168
+ await chmod(current, 0o555);
169
+ }
170
+ }
171
+ function relativeToPayload(directory, absolute) {
172
+ return path.relative(path.join(directory, "payload"), absolute);
173
+ }
174
+ async function withRuntimeLock(paths, runtimeId, operation) {
175
+ await ensureDir(paths.controllerRuntimeLocks);
176
+ const file = path.join(paths.controllerRuntimeLocks, `${runtimeId}.lock`);
177
+ const owner = randomBytes(12).toString("hex");
178
+ let handle;
179
+ for (let attempt = 0; attempt < 3_000; attempt += 1) {
180
+ try {
181
+ handle = await open(file, "wx", 0o600);
182
+ try {
183
+ await handle.writeFile(`${JSON.stringify({ owner, pid: process.pid, created_at: new Date().toISOString() })}\n`);
184
+ }
185
+ catch (error) {
186
+ await handle.close().catch(() => { });
187
+ handle = undefined;
188
+ await removeIfExists(file);
189
+ throw error;
190
+ }
191
+ break;
192
+ }
193
+ catch (error) {
194
+ if (error?.code !== "EEXIST")
195
+ throw error;
196
+ if (await staleRuntimeLock(file)) {
197
+ if (!await reclaimStaleLock(file, staleRuntimeLock))
198
+ await delay(100);
199
+ continue;
200
+ }
201
+ await delay(100);
202
+ }
203
+ }
204
+ if (!handle) {
205
+ throw new HitchError("timed out waiting for controller runtime lock", {
206
+ code: "controller_runtime_locked",
207
+ exitCode: 5,
208
+ });
209
+ }
210
+ try {
211
+ return await operation();
212
+ }
213
+ finally {
214
+ await handle.close().catch(() => { });
215
+ const current = await readJSON(file, null).catch(() => null);
216
+ if (current?.owner === owner)
217
+ await removeIfExists(file);
218
+ }
219
+ }
220
+ async function staleRuntimeLock(file) {
221
+ let lock;
222
+ try {
223
+ lock = JSON.parse(await readFile(file, "utf8"));
224
+ }
225
+ catch {
226
+ try {
227
+ return Date.now() - (await stat(file)).mtimeMs > 2_000;
228
+ }
229
+ catch {
230
+ return true;
231
+ }
232
+ }
233
+ if (!Number.isInteger(lock?.pid))
234
+ return true;
235
+ try {
236
+ process.kill(lock.pid, 0);
237
+ return false;
238
+ }
239
+ catch (error) {
240
+ return error?.code === "ESRCH";
241
+ }
242
+ }
243
+ async function loadManifest(directory) {
244
+ const raw = await readJSON(path.join(directory, "manifest.json"), null);
245
+ if (raw === null) {
246
+ throw new ControllerRuntimeIntegrityError(`controller runtime bundle is missing its manifest: ${directory}`);
247
+ }
248
+ return validateControllerRuntimeManifest(raw);
249
+ }
250
+ function manifestDigest(manifest) {
251
+ const encoding = canonicalEncodeManifest({ entrypoints: manifest.entrypoints, files: manifest.files });
252
+ return `sha256:${createHash("sha256").update(encoding).digest("hex")}`;
253
+ }
254
+ /**
255
+ * Verify and return a controller runtime bundle by id. A missing or corrupt
256
+ * expected runtime must not silently fall back to the installed Hitch version
257
+ * (spec §4.6) — it fails with `controller_runtime_integrity_mismatch`.
258
+ *
259
+ * The canonical manifest digest must equal BOTH the manifest's declared
260
+ * `runtime_id` and the directory id, so a runtime id can never be rebound to a
261
+ * different payload: editing the payload and rewriting the manifest's digest
262
+ * field is rejected because the recomputed digest no longer matches the
263
+ * declared `runtime_id` (spec §4.4, §11.1).
264
+ */
265
+ export async function useControllerRuntimeById(paths, runtimeId) {
266
+ const directory = path.join(paths.controllerRuntimes, runtimeId);
267
+ const manifest = await loadManifest(directory).catch(() => {
268
+ throw new HitchError(`controller runtime integrity mismatch for ${runtimeId}`, {
269
+ code: "controller_runtime_integrity_mismatch",
270
+ exitCode: 5,
271
+ });
272
+ });
273
+ const expectedId = `sha256:${runtimeId}`;
274
+ const recomputedDigest = manifestDigest(manifest);
275
+ if (manifest.runtime_id !== expectedId || recomputedDigest !== expectedId || recomputedDigest !== manifest.runtime_id) {
276
+ throw new HitchError(`controller runtime integrity mismatch for ${runtimeId}: manifest runtime_id ${manifest.runtime_id} does not match the recomputed identity ${recomputedDigest}`, { code: "controller_runtime_integrity_mismatch", exitCode: 5 });
277
+ }
278
+ try {
279
+ await verifyRuntimePayload(path.join(directory, "payload"), manifest);
280
+ }
281
+ catch (error) {
282
+ throw new HitchError(`controller runtime integrity mismatch for ${runtimeId}: ${error.message}`, {
283
+ code: "controller_runtime_integrity_mismatch",
284
+ exitCode: 5,
285
+ cause: error,
286
+ });
287
+ }
288
+ return {
289
+ runtime_id: `sha256:${runtimeId}`,
290
+ directory,
291
+ manifest,
292
+ cache_hit: true,
293
+ manifest_digest: manifestDigest(manifest),
294
+ };
295
+ }
296
+ export async function writeRuntimeReference(evalDirectory, use) {
297
+ const ref = {
298
+ schema_version: SCHEMA_VERSION,
299
+ storage: "controller-runtime-ref-v1",
300
+ runtime_id: use.runtime_id,
301
+ manifest_digest: use.manifest_digest,
302
+ created_at: new Date().toISOString(),
303
+ };
304
+ const file = path.join(evalDirectory, "runtime.ref.json");
305
+ await atomicWriteJSON(file, ref);
306
+ return file;
307
+ }
308
+ /** Detect which runtime storage kind an eval record uses (spec §4.7, §9). */
309
+ export async function inspectEvalRuntimeKind(evalDirectory) {
310
+ const ref = await readJSON(path.join(evalDirectory, "runtime.ref.json"), null);
311
+ if (ref?.storage === "controller-runtime-ref-v1")
312
+ return "controller-runtime-ref-v1";
313
+ try {
314
+ const info = await stat(path.join(evalDirectory, "runtime"));
315
+ if (info.isDirectory())
316
+ return "embedded-runtime-v1";
317
+ }
318
+ catch {
319
+ // Not an embedded runtime.
320
+ }
321
+ return "none";
322
+ }
323
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/controller-runtime/store.ts"],"names":[],"mappings":"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"}