agent-hitch 0.1.0 → 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 +240 -126
  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 -361
  75. package/src/artifacts.js +0 -948
  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 -386
  80. package/src/errors.js +0 -12
  81. package/src/eval-tools.js +0 -331
  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,465 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { stat } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { getAdapter, normalizeRequest } from "./adapters.js";
6
+ import { EventSink } from "./events.js";
7
+ import { HitchError, invalidInput } from "./errors.js";
8
+ import { atomicWriteJSON, ensureDir } from "./fs.js";
9
+ import { consumeLines } from "./line-stream.js";
10
+ import { terminateProcess } from "./process.js";
11
+ import { SCHEMA_VERSION } from "./config.js";
12
+ import { parseHarnessReference } from "./harness-reference.js";
13
+ import { prepareHarness, resolveHarness } from "./artifacts.js";
14
+ import { abandonPlannedWorkspace, finalizeWorkspace, inspectWorkspace, markWorkspaceRunning, markWorkspaceFinalizationFailed, planWorkspace, prepareWorkspace, WORKSPACE_MODES, workspaceManifestFields, workspaceRecordPath, } from "./workspaces.js";
15
+ import { TrajectoryProjector } from "./trajectories/projector.js";
16
+ import { TrajectoryWriter, trajectoryRef, trajectoryRefPath, trajectoryFileSha256 } from "./trajectories/store.js";
17
+ export async function validateRunRequest(input) {
18
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
19
+ throw invalidInput("run request must be a JSON object");
20
+ }
21
+ const allowedFields = new Set(["schema_version", "harness_ref", "agent", "model", "cwd", "workspace_mode", "prompt", "timeout_ms", "agent_args"]);
22
+ const unexpectedField = Object.keys(input).find((field) => !allowedFields.has(field));
23
+ if (unexpectedField)
24
+ throw invalidInput(`unknown run request field: ${unexpectedField}`);
25
+ if (input.schema_version !== undefined && input.schema_version !== SCHEMA_VERSION) {
26
+ throw invalidInput(`unsupported schema_version: ${input.schema_version}`);
27
+ }
28
+ if (input.harness_ref !== undefined && input.agent !== undefined) {
29
+ throw invalidInput("use only one of harness_ref and the legacy agent field");
30
+ }
31
+ if (typeof input.agent === "string" && input.agent.includes("@")) {
32
+ throw invalidInput("the legacy agent field accepts only a harness name; use harness_ref for revision selection");
33
+ }
34
+ const referenceValue = input.harness_ref ?? input.agent;
35
+ if (typeof referenceValue !== "string" || !referenceValue.trim()) {
36
+ throw invalidInput("harness_ref must be a non-empty string");
37
+ }
38
+ if (typeof input.prompt !== "string" || !input.prompt.trim())
39
+ throw invalidInput("prompt must be a non-empty string");
40
+ if (input.cwd !== undefined && (typeof input.cwd !== "string" || !input.cwd.trim())) {
41
+ throw invalidInput("cwd must be a non-empty string");
42
+ }
43
+ if (input.workspace_mode !== undefined && !WORKSPACE_MODES.has(input.workspace_mode)) {
44
+ throw invalidInput(`workspace_mode must be one of: ${[...WORKSPACE_MODES].join(", ")}`);
45
+ }
46
+ if (input.model !== undefined && typeof input.model !== "string")
47
+ throw invalidInput("model must be a string");
48
+ if (input.timeout_ms !== undefined && (typeof input.timeout_ms !== "number" || !Number.isFinite(input.timeout_ms) || input.timeout_ms < 0)) {
49
+ throw invalidInput("timeout_ms must be a non-negative number");
50
+ }
51
+ if (input.agent_args !== undefined && (!Array.isArray(input.agent_args) || input.agent_args.some((arg) => typeof arg !== "string"))) {
52
+ throw invalidInput("agent_args must be an array of strings");
53
+ }
54
+ const request = normalizeRequest(input);
55
+ const reference = parseHarnessReference(request.harness_ref);
56
+ getAdapter(reference.harness_id);
57
+ let workspace;
58
+ try {
59
+ workspace = await stat(request.cwd);
60
+ }
61
+ catch (error) {
62
+ throw invalidInput(`workspace does not exist: ${request.cwd}`, { cause: error });
63
+ }
64
+ if (!workspace.isDirectory())
65
+ throw invalidInput(`workspace is not a directory: ${request.cwd}`);
66
+ return request;
67
+ }
68
+ export function newRunId() {
69
+ return `run_${randomUUID().replaceAll("-", "")}`;
70
+ }
71
+ export function buildManifest(runId, request, workspacePlan) {
72
+ const reference = parseHarnessReference(request.harness_ref);
73
+ return {
74
+ schema_version: SCHEMA_VERSION,
75
+ run_id: runId,
76
+ status: "queued",
77
+ harness_id: reference.harness_id,
78
+ requested_harness_ref: reference.raw,
79
+ canonical_harness_ref: reference.canonical,
80
+ agent: reference.harness_id,
81
+ requested_model: request.model || null,
82
+ effective_model: request.model || null,
83
+ workspace: request.cwd,
84
+ workspace_mode: request.workspace_mode,
85
+ ...workspaceManifestFields(workspacePlan),
86
+ timeout_ms: request.timeout_ms,
87
+ agent_args_count: request.agent_args.length,
88
+ agent_args_sha256: request.agent_args.length > 0
89
+ ? createHash("sha256").update(JSON.stringify(request.agent_args)).digest("hex")
90
+ : null,
91
+ created_at: new Date().toISOString(),
92
+ };
93
+ }
94
+ export async function executeRun({ runId, request, runsRoot, root = path.dirname(runsRoot), resolvedRevision, workspacePlan, onEvent, onProcess, signal, }) {
95
+ const normalized = await validateRunRequest(request);
96
+ workspacePlan ||= await planWorkspace({ runId, sourceCwd: normalized.cwd, mode: normalized.workspace_mode, root });
97
+ const runDirectory = path.join(runsRoot, runId);
98
+ await ensureDir(runDirectory);
99
+ const workspacePath = workspaceRecordPath(root, runId);
100
+ await atomicWriteJSON(workspacePath, workspacePlan);
101
+ const manifestPath = path.join(runDirectory, "manifest.json");
102
+ const resultPath = path.join(runDirectory, "result.json");
103
+ const existingManifest = buildManifest(runId, normalized, workspacePlan);
104
+ let manifest = existingManifest;
105
+ const startedAt = new Date();
106
+ await atomicWriteJSON(path.join(runDirectory, "request.json"), {
107
+ schema_version: SCHEMA_VERSION,
108
+ ...normalized,
109
+ });
110
+ await atomicWriteJSON(manifestPath, existingManifest);
111
+ let sink;
112
+ let sinkOpened = false;
113
+ let child;
114
+ let timeout;
115
+ let timedOut = false;
116
+ let cancelled = false;
117
+ let finalMessage;
118
+ let abortHandler;
119
+ let result;
120
+ let stage = "event_setup";
121
+ let resolution = resolvedRevision;
122
+ let artifact;
123
+ let workspaceLease;
124
+ const projector = new TrajectoryProjector({
125
+ runId,
126
+ cwd: normalized.cwd,
127
+ prompt: normalized.prompt,
128
+ model: normalized.model,
129
+ fidelity: adapterFidelity(normalized.harness_ref),
130
+ });
131
+ let trajectoryWriter;
132
+ let trajectoryPathValue;
133
+ try {
134
+ sink = new EventSink(runDirectory, runId, onEvent);
135
+ await sink.open();
136
+ sinkOpened = true;
137
+ stage = "resolution";
138
+ const reference = parseHarnessReference(normalized.harness_ref);
139
+ resolution ||= await resolveHarness(reference, { root });
140
+ await atomicWriteJSON(path.join(runDirectory, "resolution.json"), resolution);
141
+ manifest = {
142
+ ...existingManifest,
143
+ status: "preparing",
144
+ resolved_revision: resolution,
145
+ revision_identity: resolution.identity,
146
+ };
147
+ await atomicWriteJSON(manifestPath, manifest);
148
+ stage = "preparation";
149
+ artifact = await prepareHarness(resolution, { root, ...(signal ? { signal } : {}) });
150
+ stage = "workspace_preparation";
151
+ workspaceLease = await prepareWorkspace(workspacePlan, { recordPath: workspacePath, ...(signal ? { signal } : {}) });
152
+ manifest = {
153
+ ...manifest,
154
+ status: "running",
155
+ artifact_id: artifact.artifact_id,
156
+ artifact_source_type: artifact.source_type,
157
+ executable: artifact.executable,
158
+ artifact_entrypoint: artifact.entrypoint_args?.[0] || artifact.executable,
159
+ agent_version: artifact.observed_version || resolution.revision.version || null,
160
+ agent_identity: resolution.identity,
161
+ ...workspaceManifestFields(workspaceLease),
162
+ started_at: startedAt.toISOString(),
163
+ };
164
+ await atomicWriteJSON(manifestPath, manifest);
165
+ sink.emit({
166
+ type: "workspace.ready",
167
+ mode: workspaceLease.mode,
168
+ workspace: workspaceLease.execution_workspace,
169
+ retained: workspaceLease.retained,
170
+ });
171
+ sink.emit({
172
+ type: "run.started",
173
+ harness: reference.harness_id,
174
+ agent: reference.harness_id,
175
+ model: normalized.model || null,
176
+ revision_identity: resolution.identity,
177
+ artifact_id: artifact.artifact_id,
178
+ workspace_mode: workspaceLease.mode,
179
+ workspace: workspaceLease.execution_workspace,
180
+ });
181
+ stage = "adapter_setup";
182
+ const adapter = getAdapter(reference.harness_id);
183
+ const adapterState = {};
184
+ const executionRequest = { ...normalized, cwd: workspaceLease.execution_workspace };
185
+ const specification = await adapter.process(executionRequest, artifact.executable, {
186
+ observed_version: artifact.observed_version ?? undefined,
187
+ resolution,
188
+ run_directory: runDirectory,
189
+ runtime_home: path.join(runDirectory, "runtime-home"),
190
+ });
191
+ if (artifact.entrypoint_args?.length)
192
+ specification.args.unshift(...artifact.entrypoint_args);
193
+ if (signal?.aborted) {
194
+ result = failureResult(runId, startedAt, "cancelled", "agent run cancelled before launch", 9);
195
+ sink.emit({ type: "run.failed", status: "cancelled", error: result.error });
196
+ }
197
+ else {
198
+ stage = "launch";
199
+ workspaceLease = await markWorkspaceRunning(workspaceLease, { recordPath: workspacePath });
200
+ const childEnvironment = {
201
+ ...process.env,
202
+ ...specification.env,
203
+ PWD: workspaceLease.execution_workspace,
204
+ };
205
+ delete childEnvironment.OLDPWD;
206
+ child = spawn(specification.executable, specification.args, {
207
+ cwd: workspaceLease.execution_workspace,
208
+ env: childEnvironment,
209
+ stdio: ["pipe", "pipe", "pipe"],
210
+ detached: process.platform !== "win32",
211
+ windowsHide: true,
212
+ });
213
+ const launched = child;
214
+ launched.stdin?.on("error", () => { });
215
+ onProcess?.({ child: launched });
216
+ abortHandler = () => {
217
+ cancelled = true;
218
+ terminateProcess(launched).catch(() => { });
219
+ };
220
+ signal?.addEventListener("abort", abortHandler, { once: true });
221
+ consumeLines(launched.stdout, (line) => {
222
+ sink?.writeStdout(line);
223
+ if (adapter.translateLine) {
224
+ for (const event of adapter.translateLine(line, adapterState)) {
225
+ if (event.type === "message.delta" && event.text) {
226
+ finalMessage = (finalMessage ?? "") + event.text;
227
+ }
228
+ if (event.type === "message.completed" && typeof event.text === "string")
229
+ finalMessage = event.text;
230
+ projector.feed(event);
231
+ sink?.emit(event);
232
+ }
233
+ return;
234
+ }
235
+ let native;
236
+ try {
237
+ native = JSON.parse(line);
238
+ }
239
+ catch {
240
+ sink?.emit({ type: "process.stdout", text: line });
241
+ projector.feedText(`${line}\n`);
242
+ return;
243
+ }
244
+ const record = typeof native === "object" && native !== null && !Array.isArray(native)
245
+ ? native
246
+ : { raw: native };
247
+ if (adapter.translate) {
248
+ for (const event of adapter.translate(record, adapterState)) {
249
+ if (event.type === "message.delta" && event.text) {
250
+ finalMessage = (finalMessage ?? "") + event.text;
251
+ }
252
+ if (event.type === "message.completed" && typeof event.text === "string")
253
+ finalMessage = event.text;
254
+ projector.feed(event);
255
+ sink?.emit(event);
256
+ }
257
+ }
258
+ else {
259
+ projector.feedText(line);
260
+ }
261
+ });
262
+ consumeLines(launched.stderr, (line) => {
263
+ sink?.writeStderr(line);
264
+ sink?.emit({ type: "process.stderr", text: line });
265
+ });
266
+ await new Promise((resolve, reject) => {
267
+ launched.once("spawn", resolve);
268
+ launched.once("error", reject);
269
+ });
270
+ stage = "running";
271
+ const close = new Promise((resolve, reject) => {
272
+ launched.once("error", reject);
273
+ launched.once("close", (code, processSignal) => resolve({ code, signal: processSignal }));
274
+ });
275
+ if (normalized.timeout_ms > 0) {
276
+ timeout = setTimeout(async () => {
277
+ timedOut = true;
278
+ await terminateProcess(launched).catch(() => { });
279
+ }, normalized.timeout_ms);
280
+ timeout.unref?.();
281
+ }
282
+ launched.stdin?.end(specification.input);
283
+ const exit = await close;
284
+ if (timeout)
285
+ clearTimeout(timeout);
286
+ if (timedOut) {
287
+ result = failureResult(runId, startedAt, "timed_out", "agent run timed out", 8, exit);
288
+ sink.emit({ type: "run.failed", status: "timed_out", error: result.error });
289
+ }
290
+ else if (cancelled) {
291
+ result = failureResult(runId, startedAt, "cancelled", "agent run cancelled", 9, exit);
292
+ sink.emit({ type: "run.failed", status: "cancelled", error: result.error });
293
+ }
294
+ else if (exit.code !== 0) {
295
+ const message = `agent exited with code ${exit.code ?? "null"}${exit.signal ? ` (${exit.signal})` : ""}`;
296
+ result = failureResult(runId, startedAt, "agent_failed", message, 7, exit);
297
+ sink.emit({ type: "run.failed", status: "failed", error: result.error });
298
+ }
299
+ else {
300
+ result = {
301
+ schema_version: SCHEMA_VERSION,
302
+ run_id: runId,
303
+ status: "succeeded",
304
+ exit_code: 0,
305
+ process_exit_code: exit.code,
306
+ output: finalMessage ?? "",
307
+ harness_id: reference.harness_id,
308
+ revision_identity: resolution.identity,
309
+ artifact_id: artifact.artifact_id,
310
+ started_at: startedAt.toISOString(),
311
+ completed_at: new Date().toISOString(),
312
+ };
313
+ sink.emit({ type: "run.completed", status: "succeeded", exit_code: 0 });
314
+ }
315
+ }
316
+ }
317
+ catch (error) {
318
+ if (timeout)
319
+ clearTimeout(timeout);
320
+ if (child)
321
+ await terminateProcess(child).catch(() => { });
322
+ const launchStage = stage === "adapter_setup" || stage === "launch";
323
+ const code = error instanceof HitchError ? error.code : launchStage ? "launch_failed" : "internal_error";
324
+ const exitCode = error instanceof HitchError ? error.exitCode : launchStage ? 6 : 12;
325
+ result = failureResult(runId, startedAt, code, error?.message || String(error), exitCode);
326
+ if (sinkOpened) {
327
+ try {
328
+ sink?.emit({ type: "run.failed", status: result.status, error: result.error });
329
+ }
330
+ catch { /* Finalization below remains authoritative. */ }
331
+ }
332
+ }
333
+ finally {
334
+ if (abortHandler)
335
+ signal?.removeEventListener("abort", abortHandler);
336
+ onProcess?.(null);
337
+ }
338
+ if (workspaceLease) {
339
+ try {
340
+ stage = "workspace_finalization";
341
+ const finalized = await finalizeWorkspace(workspaceLease, { recordPath: workspacePath });
342
+ if (finalized)
343
+ workspaceLease = finalized;
344
+ manifest = { ...manifest, ...workspaceManifestFields(workspaceLease) };
345
+ result.workspace = {
346
+ mode: workspaceLease.mode,
347
+ source: workspaceLease.source_workspace,
348
+ execution: workspaceLease.execution_workspace,
349
+ retained: workspaceLease.retained,
350
+ changed: workspaceLease.changed ?? null,
351
+ };
352
+ }
353
+ catch (error) {
354
+ const warning = { code: "workspace_finalization_failed", message: error?.message || String(error) };
355
+ try {
356
+ const marked = await markWorkspaceFinalizationFailed(workspaceLease, {
357
+ recordPath: workspacePath,
358
+ warning,
359
+ });
360
+ if (marked)
361
+ workspaceLease = marked;
362
+ }
363
+ catch {
364
+ workspaceLease = { ...workspaceLease, retained: workspaceLease.mode !== "shared", changed: null };
365
+ }
366
+ manifest = { ...manifest, ...workspaceManifestFields(workspaceLease), workspace_warning: warning };
367
+ result.workspace = {
368
+ mode: workspaceLease.mode,
369
+ source: workspaceLease.source_workspace,
370
+ execution: workspaceLease.execution_workspace,
371
+ retained: workspaceLease.retained,
372
+ changed: workspaceLease.changed ?? null,
373
+ };
374
+ result.workspace_warning = warning;
375
+ }
376
+ }
377
+ else {
378
+ const workspaceStatus = await inspectWorkspace({ root, runId }).catch(() => null);
379
+ const currentWorkspace = workspaceStatus?.status === "planned"
380
+ ? await abandonPlannedWorkspace({ root, runId, status: result.status === "cancelled" ? "cancelled" : "unused" })
381
+ : workspaceStatus;
382
+ manifest = { ...manifest, ...workspaceManifestFields(currentWorkspace) };
383
+ }
384
+ // Persist the canonical trajectory and derive the final output (spec §5.2, §5.6).
385
+ try {
386
+ const status = result.status;
387
+ const projected = projector.finalize(status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed");
388
+ trajectoryWriter = await TrajectoryWriter.open({
389
+ runDirectory,
390
+ cwd: normalized.cwd,
391
+ sessionId: projected.header.id,
392
+ fidelity: projected.fidelity,
393
+ header: projected.header,
394
+ });
395
+ for (const event of projected.events)
396
+ trajectoryWriter.append(event);
397
+ trajectoryPathValue = await trajectoryWriter.close();
398
+ const sha256 = await trajectoryFileSha256(trajectoryPathValue);
399
+ const ref = trajectoryRef(runId, projected.header.id, projected.fidelity, trajectoryPathValue, sha256, projected.providerSessionId);
400
+ await atomicWriteJSON(trajectoryRefPath(runDirectory), ref);
401
+ result.trajectory = {
402
+ session_id: projected.header.id,
403
+ path: trajectoryPathValue,
404
+ fidelity: projected.fidelity,
405
+ sha256,
406
+ };
407
+ if (status === "succeeded") {
408
+ // §5.6: `result.output` is the text of the last non-empty assistant
409
+ // message in the canonical trajectory.
410
+ result.output = projected.finalOutput || finalMessage || "";
411
+ }
412
+ sink?.emit({ type: "trajectory.recorded", path: trajectoryPathValue, fidelity: projected.fidelity });
413
+ }
414
+ catch (error) {
415
+ result = failureResult(runId, startedAt, "trajectory_recording_failed", error?.message || String(error), 12);
416
+ }
417
+ if (sinkOpened) {
418
+ try {
419
+ await sink?.close();
420
+ }
421
+ catch (error) {
422
+ result = failureResult(runId, startedAt, "event_recording_failed", error.message, 12);
423
+ }
424
+ }
425
+ if (!result)
426
+ result = failureResult(runId, startedAt, "internal_error", "run ended without a result", 12);
427
+ await atomicWriteJSON(resultPath, result);
428
+ await atomicWriteJSON(manifestPath, { ...manifest, status: result.status, completed_at: result.completed_at });
429
+ return result;
430
+ }
431
+ export async function createQueuedRun({ runId = newRunId(), request, runsRoot, root = path.dirname(runsRoot), }) {
432
+ const normalized = await validateRunRequest(request);
433
+ const resolvedRevision = await resolveHarness(normalized.harness_ref, { root });
434
+ const workspacePlan = await planWorkspace({ runId, sourceCwd: normalized.cwd, mode: normalized.workspace_mode, root });
435
+ const directory = await ensureDir(path.join(runsRoot, runId));
436
+ await atomicWriteJSON(workspaceRecordPath(root, runId), workspacePlan);
437
+ await atomicWriteJSON(path.join(directory, "manifest.json"), {
438
+ ...buildManifest(runId, normalized, workspacePlan),
439
+ resolved_revision: resolvedRevision,
440
+ revision_identity: resolvedRevision.identity,
441
+ });
442
+ await atomicWriteJSON(path.join(directory, "request.json"), { ...normalized, schema_version: SCHEMA_VERSION });
443
+ await atomicWriteJSON(path.join(directory, "resolution.json"), resolvedRevision);
444
+ return { runId, request: normalized, resolvedRevision, workspacePlan, directory };
445
+ }
446
+ function failureResult(runId, startedAt, code, message, exitCode, processExit = {}) {
447
+ return {
448
+ schema_version: SCHEMA_VERSION,
449
+ run_id: runId,
450
+ status: code === "cancelled" ? "cancelled" : code === "timed_out" ? "timed_out" : "failed",
451
+ exit_code: exitCode,
452
+ process_exit_code: processExit.code ?? null,
453
+ signal: processExit.signal ?? null,
454
+ error: { code, message },
455
+ started_at: startedAt.toISOString(),
456
+ completed_at: new Date().toISOString(),
457
+ };
458
+ }
459
+ function adapterFidelity(harnessRef) {
460
+ const reference = parseHarnessReference(harnessRef);
461
+ // The DeepSeek headless adapter emits plain text until DSH `--events jsonl`
462
+ // lands (spec §7.5); every structured adapter projects normalized events.
463
+ return reference.harness_id === "deepseek" ? "minimal" : "normalized";
464
+ }
465
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export class HitchError extends Error {
2
+ code;
3
+ exitCode;
4
+ constructor(message, { code = "internal_error", exitCode = 12, cause } = {}) {
5
+ super(message, cause === undefined ? undefined : { cause });
6
+ this.name = "HitchError";
7
+ this.code = code;
8
+ this.exitCode = exitCode;
9
+ }
10
+ }
11
+ export function invalidInput(message, { cause } = {}) {
12
+ return new HitchError(message, { code: "invalid_input", exitCode: 2, cause });
13
+ }
14
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IACb,QAAQ,CAAS;IAE1B,YAAY,OAAe,EAAE,EAAE,IAAI,GAAG,gBAAgB,EAAE,QAAQ,GAAG,EAAE,EAAE,KAAK,KAAwB,EAAE;QACpG,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,EAAE,KAAK,KAA0B,EAAE;IAC/E,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAChF,CAAC"}