agent-hitch 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/README.md +16 -10
  2. package/README.zh-CN.md +13 -8
  3. package/dist/bin/hitch.js +1 -1
  4. package/dist/bin/hitch.js.map +1 -1
  5. package/dist/scripts/check-architecture.js +159 -0
  6. package/dist/scripts/check-architecture.js.map +1 -0
  7. package/dist/scripts/check-release.js +1 -1
  8. package/dist/scripts/check-release.js.map +1 -1
  9. package/dist/src/adapters/catalog.js +55 -0
  10. package/dist/src/adapters/catalog.js.map +1 -0
  11. package/dist/src/adapters/contract.js +2 -0
  12. package/dist/src/adapters/contract.js.map +1 -0
  13. package/dist/src/adapters/discovery.js +22 -0
  14. package/dist/src/adapters/discovery.js.map +1 -0
  15. package/dist/src/adapters/index.js +3 -0
  16. package/dist/src/adapters/index.js.map +1 -0
  17. package/dist/src/adapters/providers/claude.js +69 -0
  18. package/dist/src/adapters/providers/claude.js.map +1 -0
  19. package/dist/src/adapters/providers/codex.js +74 -0
  20. package/dist/src/adapters/providers/codex.js.map +1 -0
  21. package/dist/src/adapters/providers/deepseek.js +51 -0
  22. package/dist/src/adapters/providers/deepseek.js.map +1 -0
  23. package/dist/src/adapters/providers/opencode.js +73 -0
  24. package/dist/src/adapters/providers/opencode.js.map +1 -0
  25. package/dist/src/adapters/providers/pi.js +82 -0
  26. package/dist/src/adapters/providers/pi.js.map +1 -0
  27. package/dist/src/adapters/providers/shared.js +82 -0
  28. package/dist/src/adapters/providers/shared.js.map +1 -0
  29. package/dist/src/artifacts/index.js +3 -0
  30. package/dist/src/artifacts/index.js.map +1 -0
  31. package/dist/src/artifacts/integrity.js +188 -0
  32. package/dist/src/artifacts/integrity.js.map +1 -0
  33. package/dist/src/artifacts/preparer.js +379 -0
  34. package/dist/src/artifacts/preparer.js.map +1 -0
  35. package/dist/src/artifacts/store.js +87 -0
  36. package/dist/src/artifacts/store.js.map +1 -0
  37. package/dist/src/artifacts/types.js +2 -0
  38. package/dist/src/artifacts/types.js.map +1 -0
  39. package/dist/src/backends/contract.js +2 -0
  40. package/dist/src/backends/contract.js.map +1 -0
  41. package/dist/src/{harbor-backend.js → backends/harbor/backend.js} +39 -14
  42. package/dist/src/backends/harbor/backend.js.map +1 -0
  43. package/dist/src/backends/harbor/index.js +4 -0
  44. package/dist/src/backends/harbor/index.js.map +1 -0
  45. package/dist/src/backends/harbor/local-git-transport.js +447 -0
  46. package/dist/src/backends/harbor/local-git-transport.js.map +1 -0
  47. package/dist/src/{eval-tools.js → backends/harbor/tools.js} +2 -6
  48. package/dist/src/backends/harbor/tools.js.map +1 -0
  49. package/dist/src/backends/index.js +4 -0
  50. package/dist/src/backends/index.js.map +1 -0
  51. package/dist/src/cli/arguments.js +123 -0
  52. package/dist/src/cli/arguments.js.map +1 -0
  53. package/dist/src/cli/commands/compare.js +55 -0
  54. package/dist/src/cli/commands/compare.js.map +1 -0
  55. package/dist/src/cli/commands/daemon.js +106 -0
  56. package/dist/src/cli/commands/daemon.js.map +1 -0
  57. package/dist/src/cli/commands/eval.js +126 -0
  58. package/dist/src/cli/commands/eval.js.map +1 -0
  59. package/dist/src/cli/commands/feedback.js +84 -0
  60. package/dist/src/cli/commands/feedback.js.map +1 -0
  61. package/dist/src/cli/commands/inspect.js +20 -0
  62. package/dist/src/cli/commands/inspect.js.map +1 -0
  63. package/dist/src/cli/commands/list.js +17 -0
  64. package/dist/src/cli/commands/list.js.map +1 -0
  65. package/dist/src/cli/commands/prepare.js +21 -0
  66. package/dist/src/cli/commands/prepare.js.map +1 -0
  67. package/dist/src/cli/commands/resolve.js +17 -0
  68. package/dist/src/cli/commands/resolve.js.map +1 -0
  69. package/dist/src/cli/commands/run.js +83 -0
  70. package/dist/src/cli/commands/run.js.map +1 -0
  71. package/dist/src/cli/commands/runs.js +45 -0
  72. package/dist/src/cli/commands/runs.js.map +1 -0
  73. package/dist/src/cli/commands/trajectory.js +31 -0
  74. package/dist/src/cli/commands/trajectory.js.map +1 -0
  75. package/dist/src/cli/commands/workspace.js +44 -0
  76. package/dist/src/cli/commands/workspace.js.map +1 -0
  77. package/dist/src/cli/index.js +2 -0
  78. package/dist/src/cli/index.js.map +1 -0
  79. package/dist/src/cli/main.js +48 -0
  80. package/dist/src/cli/main.js.map +1 -0
  81. package/dist/src/cli/output.js +96 -0
  82. package/dist/src/cli/output.js.map +1 -0
  83. package/dist/src/controller-runtime/index.js +3 -0
  84. package/dist/src/controller-runtime/index.js.map +1 -0
  85. package/dist/src/controller-runtime/store.js +2 -7
  86. package/dist/src/controller-runtime/store.js.map +1 -1
  87. package/dist/src/daemon/auth.js +108 -0
  88. package/dist/src/daemon/auth.js.map +1 -0
  89. package/dist/src/daemon/client.js +76 -0
  90. package/dist/src/daemon/client.js.map +1 -0
  91. package/dist/src/daemon/index.js +5 -0
  92. package/dist/src/daemon/index.js.map +1 -0
  93. package/dist/src/daemon/launcher.js +24 -0
  94. package/dist/src/daemon/launcher.js.map +1 -0
  95. package/dist/src/{scheduler.js → daemon/scheduler.js} +6 -7
  96. package/dist/src/daemon/scheduler.js.map +1 -0
  97. package/dist/src/{daemon.js → daemon/server.js} +10 -155
  98. package/dist/src/daemon/server.js.map +1 -0
  99. package/dist/src/domain/artifacts.js +2 -0
  100. package/dist/src/domain/artifacts.js.map +1 -0
  101. package/dist/src/domain/controller-runtime.js +2 -0
  102. package/dist/src/domain/controller-runtime.js.map +1 -0
  103. package/dist/src/domain/eval-records.js +2 -0
  104. package/dist/src/domain/eval-records.js.map +1 -0
  105. package/dist/src/domain/evals.js +2 -0
  106. package/dist/src/domain/evals.js.map +1 -0
  107. package/dist/src/domain/feedback.js +2 -0
  108. package/dist/src/domain/feedback.js.map +1 -0
  109. package/dist/src/domain/{types.js → ids.js} +1 -1
  110. package/dist/src/domain/ids.js.map +1 -0
  111. package/dist/src/domain/index.js +11 -0
  112. package/dist/src/domain/index.js.map +1 -0
  113. package/dist/src/domain/revisions.js +2 -0
  114. package/dist/src/domain/revisions.js.map +1 -0
  115. package/dist/src/domain/runs.js +3 -0
  116. package/dist/src/domain/runs.js.map +1 -0
  117. package/dist/src/domain/trajectories.js +2 -0
  118. package/dist/src/domain/trajectories.js.map +1 -0
  119. package/dist/src/domain/{validate.js → validation.js} +194 -5
  120. package/dist/src/domain/validation.js.map +1 -0
  121. package/dist/src/domain/workspaces.js +2 -0
  122. package/dist/src/domain/workspaces.js.map +1 -0
  123. package/dist/src/evals/events.js +67 -0
  124. package/dist/src/evals/events.js.map +1 -0
  125. package/dist/src/evals/index.js +5 -0
  126. package/dist/src/evals/index.js.map +1 -0
  127. package/dist/src/evals/records.js +55 -0
  128. package/dist/src/evals/records.js.map +1 -0
  129. package/dist/src/evals/request.js +109 -0
  130. package/dist/src/evals/request.js.map +1 -0
  131. package/dist/src/evals/service.js +227 -0
  132. package/dist/src/evals/service.js.map +1 -0
  133. package/dist/src/evals/trial-import.js +394 -0
  134. package/dist/src/evals/trial-import.js.map +1 -0
  135. package/dist/src/feedback/index.js +2 -0
  136. package/dist/src/feedback/index.js.map +1 -0
  137. package/dist/src/feedback/service.js +3 -4
  138. package/dist/src/feedback/service.js.map +1 -1
  139. package/dist/src/{config.js → foundation/config.js} +1 -0
  140. package/dist/src/foundation/config.js.map +1 -0
  141. package/dist/src/foundation/errors.js.map +1 -0
  142. package/dist/src/foundation/executable.js +135 -0
  143. package/dist/src/foundation/executable.js.map +1 -0
  144. package/dist/src/foundation/fs.js.map +1 -0
  145. package/dist/src/foundation/hash.js +24 -0
  146. package/dist/src/foundation/hash.js.map +1 -0
  147. package/dist/src/foundation/index.js +11 -0
  148. package/dist/src/foundation/index.js.map +1 -0
  149. package/dist/src/foundation/line-stream.js.map +1 -0
  150. package/dist/src/foundation/locks.js +114 -0
  151. package/dist/src/foundation/locks.js.map +1 -0
  152. package/dist/src/{package-root.js → foundation/package-root.js} +3 -2
  153. package/dist/src/foundation/package-root.js.map +1 -0
  154. package/dist/src/foundation/process.js.map +1 -0
  155. package/dist/src/revisions/index.js +4 -0
  156. package/dist/src/revisions/index.js.map +1 -0
  157. package/dist/src/{harness-reference.js → revisions/reference.js} +16 -2
  158. package/dist/src/revisions/reference.js.map +1 -0
  159. package/dist/src/revisions/resolver.js +25 -0
  160. package/dist/src/revisions/resolver.js.map +1 -0
  161. package/dist/src/revisions/sources/git.js +180 -0
  162. package/dist/src/revisions/sources/git.js.map +1 -0
  163. package/dist/src/revisions/sources/installed.js +45 -0
  164. package/dist/src/revisions/sources/installed.js.map +1 -0
  165. package/dist/src/revisions/sources/npm.js +97 -0
  166. package/dist/src/revisions/sources/npm.js.map +1 -0
  167. package/dist/src/runs/compare.js +132 -0
  168. package/dist/src/runs/compare.js.map +1 -0
  169. package/dist/src/{events.js → runs/events.js} +1 -2
  170. package/dist/src/runs/events.js.map +1 -0
  171. package/dist/src/{engine.js → runs/executor.js} +166 -151
  172. package/dist/src/runs/executor.js.map +1 -0
  173. package/dist/src/runs/finalizer.js +22 -0
  174. package/dist/src/runs/finalizer.js.map +1 -0
  175. package/dist/src/runs/identity.js +35 -0
  176. package/dist/src/runs/identity.js.map +1 -0
  177. package/dist/src/runs/index.js +11 -0
  178. package/dist/src/runs/index.js.map +1 -0
  179. package/dist/src/runs/manifest.js +70 -0
  180. package/dist/src/runs/manifest.js.map +1 -0
  181. package/dist/src/runs/outcome.js +49 -0
  182. package/dist/src/runs/outcome.js.map +1 -0
  183. package/dist/src/runs/query.js +104 -0
  184. package/dist/src/runs/query.js.map +1 -0
  185. package/dist/src/runs/queued.js +54 -0
  186. package/dist/src/runs/queued.js.map +1 -0
  187. package/dist/src/runs/records.js +288 -0
  188. package/dist/src/runs/records.js.map +1 -0
  189. package/dist/src/runs/request.js +169 -0
  190. package/dist/src/runs/request.js.map +1 -0
  191. package/dist/src/trajectories/format.js +1 -1
  192. package/dist/src/trajectories/format.js.map +1 -1
  193. package/dist/src/trajectories/index.js +7 -0
  194. package/dist/src/trajectories/index.js.map +1 -0
  195. package/dist/src/trajectories/projector.js +1 -1
  196. package/dist/src/trajectories/projector.js.map +1 -1
  197. package/dist/src/trajectories/provider-capture.js +133 -0
  198. package/dist/src/trajectories/provider-capture.js.map +1 -0
  199. package/dist/src/trajectories/providers/deepseek.js +179 -0
  200. package/dist/src/trajectories/providers/deepseek.js.map +1 -0
  201. package/dist/src/trajectories/store.js +148 -8
  202. package/dist/src/trajectories/store.js.map +1 -1
  203. package/dist/src/workspaces/copy.js +142 -0
  204. package/dist/src/workspaces/copy.js.map +1 -0
  205. package/dist/src/workspaces/digest.js +47 -0
  206. package/dist/src/workspaces/digest.js.map +1 -0
  207. package/dist/src/workspaces/git.js +164 -0
  208. package/dist/src/workspaces/git.js.map +1 -0
  209. package/dist/src/workspaces/index.js +6 -0
  210. package/dist/src/workspaces/index.js.map +1 -0
  211. package/dist/src/workspaces/lifecycle.js +313 -0
  212. package/dist/src/workspaces/lifecycle.js.map +1 -0
  213. package/dist/src/workspaces/planner.js +80 -0
  214. package/dist/src/workspaces/planner.js.map +1 -0
  215. package/dist/src/workspaces/store.js +25 -0
  216. package/dist/src/workspaces/store.js.map +1 -0
  217. package/dist/src/workspaces/types.js +4 -0
  218. package/dist/src/workspaces/types.js.map +1 -0
  219. package/dist/src/workspaces/utils.js +56 -0
  220. package/dist/src/workspaces/utils.js.map +1 -0
  221. package/docs/schemas/eval-request.schema.json +2 -0
  222. package/docs/schemas/eval-result.schema.json +36 -1
  223. package/docs/schemas/local-git-transport-manifest.schema.json +34 -0
  224. package/docs/schemas/result.schema.json +9 -0
  225. package/docs/schemas/run-context.schema.json +39 -0
  226. package/docs/schemas/run-manifest.schema.json +81 -0
  227. package/docs/schemas/run-request.schema.json +16 -1
  228. package/docs/schemas/trajectory-ref.schema.json +66 -23
  229. package/integrations/harbor/hitch_harbor_agent.py +375 -1
  230. package/package.json +21 -3
  231. package/dist/src/adapters.js +0 -461
  232. package/dist/src/adapters.js.map +0 -1
  233. package/dist/src/artifacts.js +0 -1081
  234. package/dist/src/artifacts.js.map +0 -1
  235. package/dist/src/cli.js +0 -699
  236. package/dist/src/cli.js.map +0 -1
  237. package/dist/src/config.js.map +0 -1
  238. package/dist/src/daemon.js.map +0 -1
  239. package/dist/src/domain/types.js.map +0 -1
  240. package/dist/src/domain/validate.js.map +0 -1
  241. package/dist/src/engine.js.map +0 -1
  242. package/dist/src/errors.js.map +0 -1
  243. package/dist/src/eval-tools.js.map +0 -1
  244. package/dist/src/evals.js +0 -313
  245. package/dist/src/evals.js.map +0 -1
  246. package/dist/src/events.js.map +0 -1
  247. package/dist/src/fs.js.map +0 -1
  248. package/dist/src/harbor-backend.js.map +0 -1
  249. package/dist/src/harness-reference.js.map +0 -1
  250. package/dist/src/line-stream.js.map +0 -1
  251. package/dist/src/locks.js +0 -38
  252. package/dist/src/locks.js.map +0 -1
  253. package/dist/src/package-root.js.map +0 -1
  254. package/dist/src/process.js.map +0 -1
  255. package/dist/src/registry.js +0 -81
  256. package/dist/src/registry.js.map +0 -1
  257. package/dist/src/scheduler.js.map +0 -1
  258. package/dist/src/workspaces.js +0 -858
  259. package/dist/src/workspaces.js.map +0 -1
  260. /package/dist/src/{errors.js → foundation/errors.js} +0 -0
  261. /package/dist/src/{fs.js → foundation/fs.js} +0 -0
  262. /package/dist/src/{line-stream.js → foundation/line-stream.js} +0 -0
  263. /package/dist/src/{process.js → foundation/process.js} +0 -0
@@ -1,111 +1,43 @@
1
- import { createHash, randomUUID } from "node:crypto";
2
- import { stat } from "node:fs/promises";
3
1
  import path from "node:path";
4
2
  import { spawn } from "node:child_process";
5
- import { getAdapter, normalizeRequest } from "./adapters.js";
3
+ import { getAdapter } from "../adapters/index.js";
6
4
  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, }) {
5
+ import { HitchError, SCHEMA_VERSION, atomicWriteJSON, consumeLines, ensureDir, readJSON, terminateProcess } from "../foundation/index.js";
6
+ import { parseHarnessReference } from "../revisions/index.js";
7
+ import { prepareHarness, resolveHarness } from "../artifacts/index.js";
8
+ import { abandonPlannedWorkspace, finalizeWorkspace, inspectWorkspace, markWorkspaceRunning, markWorkspaceFinalizationFailed, planWorkspace, prepareWorkspace, workspaceManifestFields, workspaceRecordPath, workspaceDigest, } from "../workspaces/index.js";
9
+ import { TrajectoryProjector, importDeepseekNativeSession } from "../trajectories/index.js";
10
+ import { TrajectoryWriter, canonicalTrajectoryFileRef, trajectoryRefPath, trajectoryRefV2, } from "../trajectories/index.js";
11
+ import { ProviderCaptureWriter, redactProviderText } from "../trajectories/index.js";
12
+ import { looksImmutableModelId } from "./identity.js";
13
+ import { validateRunRequest } from "./request.js";
14
+ import { buildManifest, safeAgentArgsForPersistence } from "./manifest.js";
15
+ import { assertQueuedRunIdentity } from "./queued.js";
16
+ import { adapterFidelity, failureResult, mergeRedactions, providerModelId } from "./outcome.js";
17
+ export async function executeRun({ runId, request, runsRoot, root = path.dirname(runsRoot), resolvedRevision, verifiedLocalGitSource, workspacePlan, onEvent, onProcess, signal, }) {
95
18
  const normalized = await validateRunRequest(request);
96
19
  workspacePlan ||= await planWorkspace({ runId, sourceCwd: normalized.cwd, mode: normalized.workspace_mode, root });
97
20
  const runDirectory = path.join(runsRoot, runId);
21
+ const runtimeHome = path.join(runDirectory, "runtime-home");
22
+ const priorManifest = await readJSON(path.join(runDirectory, "manifest.json"), null);
23
+ if (priorManifest && ["succeeded", "failed", "timed_out", "cancelled"].includes(String(priorManifest.status))) {
24
+ throw new HitchError(`run ${runId} is sealed and cannot be overwritten`, { code: "run_sealed", exitCode: 11 });
25
+ }
26
+ if (priorManifest)
27
+ assertQueuedRunIdentity(priorManifest, buildManifest(runId, normalized, workspacePlan));
98
28
  await ensureDir(runDirectory);
99
29
  const workspacePath = workspaceRecordPath(root, runId);
100
30
  await atomicWriteJSON(workspacePath, workspacePlan);
101
31
  const manifestPath = path.join(runDirectory, "manifest.json");
102
32
  const resultPath = path.join(runDirectory, "result.json");
103
- const existingManifest = buildManifest(runId, normalized, workspacePlan);
33
+ const existingManifest = priorManifest || buildManifest(runId, normalized, workspacePlan);
104
34
  let manifest = existingManifest;
105
35
  const startedAt = new Date();
106
36
  await atomicWriteJSON(path.join(runDirectory, "request.json"), {
107
37
  schema_version: SCHEMA_VERSION,
108
38
  ...normalized,
39
+ prompt: redactProviderText(normalized.prompt),
40
+ agent_args: safeAgentArgsForPersistence(normalized.agent_args),
109
41
  });
110
42
  await atomicWriteJSON(manifestPath, existingManifest);
111
43
  let sink;
@@ -115,6 +47,7 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
115
47
  let timedOut = false;
116
48
  let cancelled = false;
117
49
  let finalMessage;
50
+ let observedEffectiveModel;
118
51
  let abortHandler;
119
52
  let result;
120
53
  let stage = "event_setup";
@@ -124,18 +57,21 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
124
57
  const projector = new TrajectoryProjector({
125
58
  runId,
126
59
  cwd: normalized.cwd,
127
- prompt: normalized.prompt,
60
+ prompt: redactProviderText(normalized.prompt),
128
61
  model: normalized.model,
129
62
  fidelity: adapterFidelity(normalized.harness_ref),
130
63
  });
131
64
  let trajectoryWriter;
132
65
  let trajectoryPathValue;
66
+ let providerCapture;
67
+ const reference = parseHarnessReference(normalized.harness_ref);
68
+ const adapter = getAdapter(reference.harness_id);
133
69
  try {
134
70
  sink = new EventSink(runDirectory, runId, onEvent);
135
71
  await sink.open();
136
72
  sinkOpened = true;
73
+ providerCapture = await ProviderCaptureWriter.open({ runDirectory, structured: Boolean(adapter.translate) });
137
74
  stage = "resolution";
138
- const reference = parseHarnessReference(normalized.harness_ref);
139
75
  resolution ||= await resolveHarness(reference, { root });
140
76
  await atomicWriteJSON(path.join(runDirectory, "resolution.json"), resolution);
141
77
  manifest = {
@@ -143,10 +79,14 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
143
79
  status: "preparing",
144
80
  resolved_revision: resolution,
145
81
  revision_identity: resolution.identity,
82
+ harness: {
83
+ ...existingManifest.harness,
84
+ revision_identity: resolution.identity,
85
+ },
146
86
  };
147
87
  await atomicWriteJSON(manifestPath, manifest);
148
88
  stage = "preparation";
149
- artifact = await prepareHarness(resolution, { root, ...(signal ? { signal } : {}) });
89
+ artifact = await prepareHarness(resolution, { root, ...(signal ? { signal } : {}), ...(verifiedLocalGitSource ? { verifiedLocalGitSource } : {}) });
150
90
  stage = "workspace_preparation";
151
91
  workspaceLease = await prepareWorkspace(workspacePlan, { recordPath: workspacePath, ...(signal ? { signal } : {}) });
152
92
  manifest = {
@@ -158,9 +98,21 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
158
98
  artifact_entrypoint: artifact.entrypoint_args?.[0] || artifact.executable,
159
99
  agent_version: artifact.observed_version || resolution.revision.version || null,
160
100
  agent_identity: resolution.identity,
101
+ harness: {
102
+ ...manifest.harness,
103
+ revision_identity: resolution.identity,
104
+ artifact_id: artifact.artifact_id,
105
+ },
161
106
  ...workspaceManifestFields(workspaceLease),
162
107
  started_at: startedAt.toISOString(),
163
108
  };
109
+ const initialWorkspaceDigest = workspaceLease.baseline_digest
110
+ || await workspaceDigest(workspaceLease.execution_workspace, { ...(signal ? { signal } : {}) });
111
+ manifest.protocol = {
112
+ ...manifest.protocol,
113
+ initial_workspace_digest: initialWorkspaceDigest,
114
+ };
115
+ manifest.initial_workspace_digest = initialWorkspaceDigest;
164
116
  await atomicWriteJSON(manifestPath, manifest);
165
117
  sink.emit({
166
118
  type: "workspace.ready",
@@ -179,14 +131,13 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
179
131
  workspace: workspaceLease.execution_workspace,
180
132
  });
181
133
  stage = "adapter_setup";
182
- const adapter = getAdapter(reference.harness_id);
183
134
  const adapterState = {};
184
135
  const executionRequest = { ...normalized, cwd: workspaceLease.execution_workspace };
185
136
  const specification = await adapter.process(executionRequest, artifact.executable, {
186
137
  observed_version: artifact.observed_version ?? undefined,
187
138
  resolution,
188
139
  run_directory: runDirectory,
189
- runtime_home: path.join(runDirectory, "runtime-home"),
140
+ runtime_home: runtimeHome,
190
141
  });
191
142
  if (artifact.entrypoint_args?.length)
192
143
  specification.args.unshift(...artifact.entrypoint_args);
@@ -219,9 +170,10 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
219
170
  };
220
171
  signal?.addEventListener("abort", abortHandler, { once: true });
221
172
  consumeLines(launched.stdout, (line) => {
222
- sink?.writeStdout(line);
223
173
  if (adapter.translateLine) {
224
- for (const event of adapter.translateLine(line, adapterState)) {
174
+ const safeLine = providerCapture?.appendText(line) ?? redactProviderText(line);
175
+ sink?.writeStdout(safeLine);
176
+ for (const event of adapter.translateLine(safeLine, adapterState)) {
225
177
  if (event.type === "message.delta" && event.text) {
226
178
  finalMessage = (finalMessage ?? "") + event.text;
227
179
  }
@@ -237,13 +189,18 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
237
189
  native = JSON.parse(line);
238
190
  }
239
191
  catch {
240
- sink?.emit({ type: "process.stdout", text: line });
241
- projector.feedText(`${line}\n`);
192
+ const safeLine = providerCapture?.appendUnparsed(line) ?? redactProviderText(line);
193
+ sink?.writeStdout(safeLine);
194
+ sink?.emit({ type: "process.stdout", text: safeLine });
195
+ projector.feedText(`${safeLine}\n`);
242
196
  return;
243
197
  }
244
- const record = typeof native === "object" && native !== null && !Array.isArray(native)
245
- ? native
246
- : { raw: native };
198
+ const safeNative = providerCapture?.appendJSON(native) ?? native;
199
+ sink?.writeStdout(JSON.stringify(safeNative));
200
+ const record = typeof safeNative === "object" && safeNative !== null && !Array.isArray(safeNative)
201
+ ? safeNative
202
+ : { raw: safeNative };
203
+ observedEffectiveModel ||= providerModelId(record);
247
204
  if (adapter.translate) {
248
205
  for (const event of adapter.translate(record, adapterState)) {
249
206
  if (event.type === "message.delta" && event.text) {
@@ -260,8 +217,9 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
260
217
  }
261
218
  });
262
219
  consumeLines(launched.stderr, (line) => {
263
- sink?.writeStderr(line);
264
- sink?.emit({ type: "process.stderr", text: line });
220
+ const safeLine = redactProviderText(line);
221
+ sink?.writeStderr(safeLine);
222
+ sink?.emit({ type: "process.stderr", text: safeLine });
265
223
  });
266
224
  await new Promise((resolve, reject) => {
267
225
  launched.once("spawn", resolve);
@@ -381,10 +339,29 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
381
339
  : workspaceStatus;
382
340
  manifest = { ...manifest, ...workspaceManifestFields(currentWorkspace) };
383
341
  }
384
- // Persist the canonical trajectory and derive the final output (spec §5.2, §5.6).
342
+ // Seal the provider-native evidence together with its canonical projection.
385
343
  try {
386
344
  const status = result.status;
387
- const projected = projector.finalize(status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed");
345
+ const captured = providerCapture ? await providerCapture.close() : null;
346
+ providerCapture = undefined;
347
+ const deepseekNative = reference.harness_id === "deepseek"
348
+ ? await importDeepseekNativeSession({
349
+ runtimeHome,
350
+ runDirectory,
351
+ runId,
352
+ status: status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed",
353
+ })
354
+ : null;
355
+ const projected = deepseekNative
356
+ ? {
357
+ header: deepseekNative.header,
358
+ events: deepseekNative.events,
359
+ finalOutput: deepseekNative.finalOutput,
360
+ providerSessionId: deepseekNative.providerSessionId,
361
+ fidelity: "provider_native",
362
+ }
363
+ : projector.finalize(status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed");
364
+ observedEffectiveModel ||= deepseekNative?.effectiveModel;
388
365
  trajectoryWriter = await TrajectoryWriter.open({
389
366
  runDirectory,
390
367
  cwd: normalized.cwd,
@@ -395,24 +372,61 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
395
372
  for (const event of projected.events)
396
373
  trajectoryWriter.append(event);
397
374
  trajectoryPathValue = await trajectoryWriter.close();
398
- const sha256 = await trajectoryFileSha256(trajectoryPathValue);
399
- const ref = trajectoryRef(runId, projected.header.id, projected.fidelity, trajectoryPathValue, sha256, projected.providerSessionId);
375
+ const canonicalFile = await canonicalTrajectoryFileRef(runDirectory, trajectoryPathValue);
376
+ const fidelity = deepseekNative
377
+ ? "provider_native"
378
+ : captured && adapter.translate
379
+ ? "provider_native"
380
+ : projected.fidelity === "native" || projected.fidelity === "provider_native"
381
+ ? "normalized"
382
+ : projected.fidelity;
383
+ const redactions = mergeRedactions(captured?.redactions, deepseekNative?.redactions);
384
+ const ref = trajectoryRefV2({
385
+ runId,
386
+ fidelity,
387
+ provider: reference.harness_id,
388
+ ...(projected.providerSessionId ? { providerSessionId: projected.providerSessionId } : {}),
389
+ files: [
390
+ ...(captured ? [captured.file] : []),
391
+ ...(deepseekNative ? deepseekNative.providerFiles : []),
392
+ canonicalFile,
393
+ ],
394
+ ...(redactions.length ? { redactions } : {}),
395
+ });
400
396
  await atomicWriteJSON(trajectoryRefPath(runDirectory), ref);
401
397
  result.trajectory = {
402
398
  session_id: projected.header.id,
403
- path: trajectoryPathValue,
404
- fidelity: projected.fidelity,
405
- sha256,
399
+ path: canonicalFile.path,
400
+ fidelity,
401
+ sha256: canonicalFile.sha256,
406
402
  };
407
403
  if (status === "succeeded") {
408
404
  // §5.6: `result.output` is the text of the last non-empty assistant
409
405
  // message in the canonical trajectory.
410
406
  result.output = projected.finalOutput || finalMessage || "";
411
407
  }
412
- sink?.emit({ type: "trajectory.recorded", path: trajectoryPathValue, fidelity: projected.fidelity });
408
+ manifest = { ...manifest, trajectory_ref: "trajectory.ref.json" };
409
+ sink?.emit({ type: "trajectory.recorded", path: canonicalFile.path, fidelity });
413
410
  }
414
411
  catch (error) {
415
- result = failureResult(runId, startedAt, "trajectory_recording_failed", error?.message || String(error), 12);
412
+ if (providerCapture)
413
+ await providerCapture.close().catch(() => { });
414
+ providerCapture = undefined;
415
+ const warning = {
416
+ code: "trajectory_recording_failed",
417
+ message: error?.message || String(error),
418
+ };
419
+ if (result?.status === "timed_out") {
420
+ // The agent timeout is the authoritative terminal cause. Recording is a
421
+ // secondary failure and must not turn an attributable timeout into an
422
+ // infrastructure failure for downstream evaluators.
423
+ result.trajectory_warning = warning;
424
+ manifest = { ...manifest, trajectory_warning: warning };
425
+ sink?.emit({ type: "trajectory.recording_failed", status: "timed_out", error: warning });
426
+ }
427
+ else {
428
+ result = failureResult(runId, startedAt, warning.code, warning.message, 12);
429
+ }
416
430
  }
417
431
  if (sinkOpened) {
418
432
  try {
@@ -424,42 +438,43 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
424
438
  }
425
439
  if (!result)
426
440
  result = failureResult(runId, startedAt, "internal_error", "run ended without a result", 12);
441
+ if (!await readJSON(path.join(runDirectory, "resolution.json"), null)) {
442
+ await atomicWriteJSON(path.join(runDirectory, "resolution.json"), {
443
+ schema_version: SCHEMA_VERSION,
444
+ status: "unresolved",
445
+ requested_harness_ref: normalized.harness_ref,
446
+ error_code: (result.error?.code) || "resolution_unavailable",
447
+ });
448
+ }
449
+ if (observedEffectiveModel) {
450
+ const currentModel = (manifest.model || normalized.model_identity);
451
+ manifest.model = {
452
+ ...currentModel,
453
+ effective_id: observedEffectiveModel,
454
+ identity_resolved: currentModel.identity_resolved === true || looksImmutableModelId(observedEffectiveModel),
455
+ };
456
+ result.effective_model = observedEffectiveModel;
457
+ }
427
458
  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,
459
+ const terminalStatus = result.status;
460
+ const observation = normalized.context.kind === "benchmark_task" && !normalized.defer_benchmark_observation
461
+ ? {
462
+ status: "invalid",
463
+ invalid_reason: terminalStatus === "succeeded"
464
+ ? "verifier_result_missing"
465
+ : terminalStatus === "cancelled"
466
+ ? "cancelled"
467
+ : "infrastructure_failure",
468
+ }
469
+ : undefined;
470
+ await atomicWriteJSON(manifestPath, {
471
+ ...manifest,
472
+ status: terminalStatus,
473
+ result_ref: "result.json",
474
+ ...(observation ? { observation } : {}),
475
+ completed_at: result.completed_at,
476
+ sealed: !normalized.defer_benchmark_observation,
441
477
  });
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";
478
+ return result;
464
479
  }
465
- //# sourceMappingURL=engine.js.map
480
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/runs/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { validateRunContext } from "../domain/index.js";
2
+ export function sealTerminalManifest(manifest, status, completedAt) {
3
+ const context = (() => {
4
+ try {
5
+ return validateRunContext(manifest.context ?? { kind: "ad_hoc" });
6
+ }
7
+ catch {
8
+ return { kind: "ad_hoc" };
9
+ }
10
+ })();
11
+ return {
12
+ ...manifest,
13
+ status,
14
+ result_ref: "result.json",
15
+ ...(context.kind === "benchmark_task" && manifest.observation === undefined
16
+ ? { observation: { status: "invalid", invalid_reason: status === "cancelled" ? "cancelled" : "infrastructure_failure" } }
17
+ : {}),
18
+ completed_at: completedAt,
19
+ sealed: true,
20
+ };
21
+ }
22
+ //# sourceMappingURL=finalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finalizer.js","sourceRoot":"","sources":["../../../src/runs/finalizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAClC,QAAiC,EACjC,MAA0D,EAC1D,WAAmB;IAEnB,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC;YAAC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAkB,CAAC;QAAC,CAAC;IACjI,CAAC,CAAC,EAAE,CAAC;IACL,OAAO;QACL,GAAG,QAAQ;QACX,MAAM;QACN,UAAU,EAAE,aAAa;QACzB,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,gBAAgB,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS;YACzE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,EAAE,EAAE;YACzH,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,WAAW;QACzB,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { sha256JSON } from "../foundation/index.js";
2
+ export function inferModelProvider(modelId, harnessId) {
3
+ const prefix = modelId.includes("/") ? modelId.split("/", 1)[0]?.trim() : "";
4
+ if (prefix)
5
+ return prefix;
6
+ return { codex: "openai", claude: "anthropic", deepseek: "deepseek" }[harnessId];
7
+ }
8
+ /** Conservative: aliases are unresolved unless the caller/provider says otherwise. */
9
+ export function defaultModelIdentity(requestedId, harnessId, options = {}) {
10
+ const model = {
11
+ requested_id: requestedId,
12
+ effective_id: options.effectiveId ?? requestedId,
13
+ identity_resolved: options.resolved ?? looksImmutableModelId(options.effectiveId ?? requestedId),
14
+ };
15
+ const provider = options.provider ?? inferModelProvider(requestedId, harnessId);
16
+ if (provider)
17
+ model.provider = provider;
18
+ if (options.parametersSha256)
19
+ model.parameters_sha256 = options.parametersSha256;
20
+ return model;
21
+ }
22
+ export function looksImmutableModelId(modelId) {
23
+ if (!modelId)
24
+ return false;
25
+ return /^sha256:[0-9a-f]{64}$/.test(modelId)
26
+ || /(?:^|[-_.])\d{4}-\d{2}-\d{2}(?:$|[-_.])/.test(modelId)
27
+ || /@(?:snapshot|version|commit):[^@\s]+$/i.test(modelId);
28
+ }
29
+ export function benchmarkVerifierIdentity(benchmarkId, benchmarkRevision) {
30
+ return sha256JSON({ backend: "harbor", benchmark_id: benchmarkId, benchmark_revision: benchmarkRevision, verifier: "dataset" });
31
+ }
32
+ export function benchmarkTaskDigest(benchmarkId, benchmarkRevision, taskId) {
33
+ return sha256JSON({ benchmark_id: benchmarkId, benchmark_revision: benchmarkRevision, task_id: taskId });
34
+ }
35
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/runs/identity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,SAAiB;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAA6B,CAAC,SAAS,CAAC,CAAC;AAC/G,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,SAAiB,EACjB,UAAsG,EAAE;IAExG,MAAM,KAAK,GAAoB;QAC7B,YAAY,EAAE,WAAW;QACzB,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,WAAW;QAChD,iBAAiB,EAAE,OAAO,CAAC,QAAQ,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;KACjG,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChF,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxC,IAAI,OAAO,CAAC,gBAAgB;QAAE,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACjF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;WACvC,yCAAyC,CAAC,IAAI,CAAC,OAAO,CAAC;WACvD,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,WAAmB,EAAE,iBAAyB;IACtF,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAClI,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,iBAAyB,EAAE,MAAc;IAChG,OAAO,UAAU,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3G,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { EventSink } from "./events.js";
2
+ export { validateRunRequest } from "./request.js";
3
+ export { buildManifest, newRunId, safeAgentArgsForPersistence } from "./manifest.js";
4
+ export { sealTerminalManifest } from "./finalizer.js";
5
+ export { executeRun } from "./executor.js";
6
+ export { createQueuedRun } from "./queued.js";
7
+ export { canonicalJSON, isTerminal, loadRunRecord, projectRunRecord, sha256Bytes, sha256JSON, trajectoryRefV2 } from "./records.js";
8
+ export { benchmarkTaskDigest, benchmarkVerifierIdentity, defaultModelIdentity, inferModelProvider, looksImmutableModelId } from "./identity.js";
9
+ export { queryRuns, rebuildRunIndexes } from "./query.js";
10
+ export { compareRunRecords, compareRuns } from "./compare.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpI,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChJ,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}