agent-hitch 0.2.0 → 0.2.2

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 (265) hide show
  1. package/README.md +88 -250
  2. package/README.zh-CN.md +84 -230
  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/handoff.js +12 -0
  30. package/dist/src/artifacts/handoff.js.map +1 -0
  31. package/dist/src/artifacts/index.js +5 -0
  32. package/dist/src/artifacts/index.js.map +1 -0
  33. package/dist/src/artifacts/integrity.js +188 -0
  34. package/dist/src/artifacts/integrity.js.map +1 -0
  35. package/dist/src/artifacts/preparer.js +379 -0
  36. package/dist/src/artifacts/preparer.js.map +1 -0
  37. package/dist/src/artifacts/store.js +157 -0
  38. package/dist/src/artifacts/store.js.map +1 -0
  39. package/dist/src/artifacts/types.js +2 -0
  40. package/dist/src/artifacts/types.js.map +1 -0
  41. package/dist/src/backends/contract.js +2 -0
  42. package/dist/src/backends/contract.js.map +1 -0
  43. package/dist/src/{harbor-backend.js → backends/harbor/backend.js} +52 -14
  44. package/dist/src/backends/harbor/backend.js.map +1 -0
  45. package/dist/src/backends/harbor/index.js +4 -0
  46. package/dist/src/backends/harbor/index.js.map +1 -0
  47. package/dist/src/backends/harbor/local-git-transport.js +447 -0
  48. package/dist/src/backends/harbor/local-git-transport.js.map +1 -0
  49. package/dist/src/{eval-tools.js → backends/harbor/tools.js} +2 -6
  50. package/dist/src/backends/harbor/tools.js.map +1 -0
  51. package/dist/src/backends/index.js +4 -0
  52. package/dist/src/backends/index.js.map +1 -0
  53. package/dist/src/cli/arguments.js +123 -0
  54. package/dist/src/cli/arguments.js.map +1 -0
  55. package/dist/src/cli/commands/compare.js +55 -0
  56. package/dist/src/cli/commands/compare.js.map +1 -0
  57. package/dist/src/cli/commands/daemon.js +106 -0
  58. package/dist/src/cli/commands/daemon.js.map +1 -0
  59. package/dist/src/cli/commands/eval.js +126 -0
  60. package/dist/src/cli/commands/eval.js.map +1 -0
  61. package/dist/src/cli/commands/feedback.js +84 -0
  62. package/dist/src/cli/commands/feedback.js.map +1 -0
  63. package/dist/src/cli/commands/inspect.js +20 -0
  64. package/dist/src/cli/commands/inspect.js.map +1 -0
  65. package/dist/src/cli/commands/list.js +17 -0
  66. package/dist/src/cli/commands/list.js.map +1 -0
  67. package/dist/src/cli/commands/prepare.js +21 -0
  68. package/dist/src/cli/commands/prepare.js.map +1 -0
  69. package/dist/src/cli/commands/resolve.js +17 -0
  70. package/dist/src/cli/commands/resolve.js.map +1 -0
  71. package/dist/src/cli/commands/run.js +145 -0
  72. package/dist/src/cli/commands/run.js.map +1 -0
  73. package/dist/src/cli/commands/runs.js +45 -0
  74. package/dist/src/cli/commands/runs.js.map +1 -0
  75. package/dist/src/cli/commands/trajectory.js +31 -0
  76. package/dist/src/cli/commands/trajectory.js.map +1 -0
  77. package/dist/src/cli/commands/workspace.js +44 -0
  78. package/dist/src/cli/commands/workspace.js.map +1 -0
  79. package/dist/src/cli/index.js +2 -0
  80. package/dist/src/cli/index.js.map +1 -0
  81. package/dist/src/cli/main.js +48 -0
  82. package/dist/src/cli/main.js.map +1 -0
  83. package/dist/src/cli/output.js +96 -0
  84. package/dist/src/cli/output.js.map +1 -0
  85. package/dist/src/controller-runtime/index.js +3 -0
  86. package/dist/src/controller-runtime/index.js.map +1 -0
  87. package/dist/src/controller-runtime/store.js +2 -7
  88. package/dist/src/controller-runtime/store.js.map +1 -1
  89. package/dist/src/daemon/auth.js +108 -0
  90. package/dist/src/daemon/auth.js.map +1 -0
  91. package/dist/src/daemon/client.js +76 -0
  92. package/dist/src/daemon/client.js.map +1 -0
  93. package/dist/src/daemon/index.js +5 -0
  94. package/dist/src/daemon/index.js.map +1 -0
  95. package/dist/src/daemon/launcher.js +24 -0
  96. package/dist/src/daemon/launcher.js.map +1 -0
  97. package/dist/src/{scheduler.js → daemon/scheduler.js} +6 -7
  98. package/dist/src/daemon/scheduler.js.map +1 -0
  99. package/dist/src/{daemon.js → daemon/server.js} +10 -155
  100. package/dist/src/daemon/server.js.map +1 -0
  101. package/dist/src/domain/artifacts.js +2 -0
  102. package/dist/src/domain/artifacts.js.map +1 -0
  103. package/dist/src/domain/controller-runtime.js +2 -0
  104. package/dist/src/domain/controller-runtime.js.map +1 -0
  105. package/dist/src/domain/eval-records.js +2 -0
  106. package/dist/src/domain/eval-records.js.map +1 -0
  107. package/dist/src/domain/evals.js +2 -0
  108. package/dist/src/domain/evals.js.map +1 -0
  109. package/dist/src/domain/feedback.js +2 -0
  110. package/dist/src/domain/feedback.js.map +1 -0
  111. package/dist/src/domain/{types.js → ids.js} +1 -1
  112. package/dist/src/domain/ids.js.map +1 -0
  113. package/dist/src/domain/index.js +11 -0
  114. package/dist/src/domain/index.js.map +1 -0
  115. package/dist/src/domain/revisions.js +2 -0
  116. package/dist/src/domain/revisions.js.map +1 -0
  117. package/dist/src/domain/runs.js +3 -0
  118. package/dist/src/domain/runs.js.map +1 -0
  119. package/dist/src/domain/trajectories.js +2 -0
  120. package/dist/src/domain/trajectories.js.map +1 -0
  121. package/dist/src/domain/{validate.js → validation.js} +194 -5
  122. package/dist/src/domain/validation.js.map +1 -0
  123. package/dist/src/domain/workspaces.js +2 -0
  124. package/dist/src/domain/workspaces.js.map +1 -0
  125. package/dist/src/evals/events.js +67 -0
  126. package/dist/src/evals/events.js.map +1 -0
  127. package/dist/src/evals/index.js +5 -0
  128. package/dist/src/evals/index.js.map +1 -0
  129. package/dist/src/evals/records.js +55 -0
  130. package/dist/src/evals/records.js.map +1 -0
  131. package/dist/src/evals/request.js +109 -0
  132. package/dist/src/evals/request.js.map +1 -0
  133. package/dist/src/evals/service.js +280 -0
  134. package/dist/src/evals/service.js.map +1 -0
  135. package/dist/src/evals/trial-import.js +394 -0
  136. package/dist/src/evals/trial-import.js.map +1 -0
  137. package/dist/src/feedback/index.js +2 -0
  138. package/dist/src/feedback/index.js.map +1 -0
  139. package/dist/src/feedback/service.js +3 -4
  140. package/dist/src/feedback/service.js.map +1 -1
  141. package/dist/src/{config.js → foundation/config.js} +1 -0
  142. package/dist/src/foundation/config.js.map +1 -0
  143. package/dist/src/foundation/errors.js.map +1 -0
  144. package/dist/src/foundation/executable.js +135 -0
  145. package/dist/src/foundation/executable.js.map +1 -0
  146. package/dist/src/foundation/fs.js.map +1 -0
  147. package/dist/src/foundation/hash.js +24 -0
  148. package/dist/src/foundation/hash.js.map +1 -0
  149. package/dist/src/foundation/index.js +11 -0
  150. package/dist/src/foundation/index.js.map +1 -0
  151. package/dist/src/foundation/line-stream.js.map +1 -0
  152. package/dist/src/foundation/locks.js +114 -0
  153. package/dist/src/foundation/locks.js.map +1 -0
  154. package/dist/src/{package-root.js → foundation/package-root.js} +3 -2
  155. package/dist/src/foundation/package-root.js.map +1 -0
  156. package/dist/src/foundation/process.js.map +1 -0
  157. package/dist/src/revisions/index.js +4 -0
  158. package/dist/src/revisions/index.js.map +1 -0
  159. package/dist/src/{harness-reference.js → revisions/reference.js} +16 -2
  160. package/dist/src/revisions/reference.js.map +1 -0
  161. package/dist/src/revisions/resolver.js +25 -0
  162. package/dist/src/revisions/resolver.js.map +1 -0
  163. package/dist/src/revisions/sources/git.js +180 -0
  164. package/dist/src/revisions/sources/git.js.map +1 -0
  165. package/dist/src/revisions/sources/installed.js +45 -0
  166. package/dist/src/revisions/sources/installed.js.map +1 -0
  167. package/dist/src/revisions/sources/npm.js +97 -0
  168. package/dist/src/revisions/sources/npm.js.map +1 -0
  169. package/dist/src/runs/compare.js +132 -0
  170. package/dist/src/runs/compare.js.map +1 -0
  171. package/dist/src/{events.js → runs/events.js} +1 -2
  172. package/dist/src/runs/events.js.map +1 -0
  173. package/dist/src/{engine.js → runs/executor.js} +172 -151
  174. package/dist/src/runs/executor.js.map +1 -0
  175. package/dist/src/runs/finalizer.js +22 -0
  176. package/dist/src/runs/finalizer.js.map +1 -0
  177. package/dist/src/runs/identity.js +35 -0
  178. package/dist/src/runs/identity.js.map +1 -0
  179. package/dist/src/runs/index.js +11 -0
  180. package/dist/src/runs/index.js.map +1 -0
  181. package/dist/src/runs/manifest.js +70 -0
  182. package/dist/src/runs/manifest.js.map +1 -0
  183. package/dist/src/runs/outcome.js +49 -0
  184. package/dist/src/runs/outcome.js.map +1 -0
  185. package/dist/src/runs/query.js +104 -0
  186. package/dist/src/runs/query.js.map +1 -0
  187. package/dist/src/runs/queued.js +54 -0
  188. package/dist/src/runs/queued.js.map +1 -0
  189. package/dist/src/runs/records.js +288 -0
  190. package/dist/src/runs/records.js.map +1 -0
  191. package/dist/src/runs/request.js +169 -0
  192. package/dist/src/runs/request.js.map +1 -0
  193. package/dist/src/trajectories/format.js +1 -1
  194. package/dist/src/trajectories/format.js.map +1 -1
  195. package/dist/src/trajectories/index.js +7 -0
  196. package/dist/src/trajectories/index.js.map +1 -0
  197. package/dist/src/trajectories/projector.js +1 -1
  198. package/dist/src/trajectories/projector.js.map +1 -1
  199. package/dist/src/trajectories/provider-capture.js +133 -0
  200. package/dist/src/trajectories/provider-capture.js.map +1 -0
  201. package/dist/src/trajectories/providers/deepseek.js +179 -0
  202. package/dist/src/trajectories/providers/deepseek.js.map +1 -0
  203. package/dist/src/trajectories/store.js +148 -8
  204. package/dist/src/trajectories/store.js.map +1 -1
  205. package/dist/src/workspaces/copy.js +142 -0
  206. package/dist/src/workspaces/copy.js.map +1 -0
  207. package/dist/src/workspaces/digest.js +47 -0
  208. package/dist/src/workspaces/digest.js.map +1 -0
  209. package/dist/src/workspaces/git.js +164 -0
  210. package/dist/src/workspaces/git.js.map +1 -0
  211. package/dist/src/workspaces/index.js +6 -0
  212. package/dist/src/workspaces/index.js.map +1 -0
  213. package/dist/src/workspaces/lifecycle.js +313 -0
  214. package/dist/src/workspaces/lifecycle.js.map +1 -0
  215. package/dist/src/workspaces/planner.js +80 -0
  216. package/dist/src/workspaces/planner.js.map +1 -0
  217. package/dist/src/workspaces/store.js +25 -0
  218. package/dist/src/workspaces/store.js.map +1 -0
  219. package/dist/src/workspaces/types.js +4 -0
  220. package/dist/src/workspaces/types.js.map +1 -0
  221. package/dist/src/workspaces/utils.js +56 -0
  222. package/dist/src/workspaces/utils.js.map +1 -0
  223. package/docs/schemas/eval-request.schema.json +2 -0
  224. package/docs/schemas/eval-result.schema.json +50 -1
  225. package/docs/schemas/local-git-transport-manifest.schema.json +34 -0
  226. package/docs/schemas/result.schema.json +9 -0
  227. package/docs/schemas/run-context.schema.json +39 -0
  228. package/docs/schemas/run-manifest.schema.json +81 -0
  229. package/docs/schemas/run-request.schema.json +16 -1
  230. package/docs/schemas/trajectory-ref.schema.json +66 -23
  231. package/integrations/harbor/hitch_harbor_agent.py +482 -10
  232. package/package.json +21 -3
  233. package/dist/src/adapters.js +0 -461
  234. package/dist/src/adapters.js.map +0 -1
  235. package/dist/src/artifacts.js +0 -1081
  236. package/dist/src/artifacts.js.map +0 -1
  237. package/dist/src/cli.js +0 -699
  238. package/dist/src/cli.js.map +0 -1
  239. package/dist/src/config.js.map +0 -1
  240. package/dist/src/daemon.js.map +0 -1
  241. package/dist/src/domain/types.js.map +0 -1
  242. package/dist/src/domain/validate.js.map +0 -1
  243. package/dist/src/engine.js.map +0 -1
  244. package/dist/src/errors.js.map +0 -1
  245. package/dist/src/eval-tools.js.map +0 -1
  246. package/dist/src/evals.js +0 -313
  247. package/dist/src/evals.js.map +0 -1
  248. package/dist/src/events.js.map +0 -1
  249. package/dist/src/fs.js.map +0 -1
  250. package/dist/src/harbor-backend.js.map +0 -1
  251. package/dist/src/harness-reference.js.map +0 -1
  252. package/dist/src/line-stream.js.map +0 -1
  253. package/dist/src/locks.js +0 -38
  254. package/dist/src/locks.js.map +0 -1
  255. package/dist/src/package-root.js.map +0 -1
  256. package/dist/src/process.js.map +0 -1
  257. package/dist/src/registry.js +0 -81
  258. package/dist/src/registry.js.map +0 -1
  259. package/dist/src/scheduler.js.map +0 -1
  260. package/dist/src/workspaces.js +0 -858
  261. package/dist/src/workspaces.js.map +0 -1
  262. /package/dist/src/{errors.js → foundation/errors.js} +0 -0
  263. /package/dist/src/{fs.js → foundation/fs.js} +0 -0
  264. /package/dist/src/{line-stream.js → foundation/line-stream.js} +0 -0
  265. /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 { assertPreparedArtifactRevision, 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, preparedArtifact, 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,20 @@ 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
+ if (preparedArtifact) {
90
+ assertPreparedArtifactRevision(preparedArtifact, resolution);
91
+ artifact = preparedArtifact;
92
+ }
93
+ else {
94
+ artifact = await prepareHarness(resolution, { root, ...(signal ? { signal } : {}), ...(verifiedLocalGitSource ? { verifiedLocalGitSource } : {}) });
95
+ }
150
96
  stage = "workspace_preparation";
151
97
  workspaceLease = await prepareWorkspace(workspacePlan, { recordPath: workspacePath, ...(signal ? { signal } : {}) });
152
98
  manifest = {
@@ -158,9 +104,21 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
158
104
  artifact_entrypoint: artifact.entrypoint_args?.[0] || artifact.executable,
159
105
  agent_version: artifact.observed_version || resolution.revision.version || null,
160
106
  agent_identity: resolution.identity,
107
+ harness: {
108
+ ...manifest.harness,
109
+ revision_identity: resolution.identity,
110
+ artifact_id: artifact.artifact_id,
111
+ },
161
112
  ...workspaceManifestFields(workspaceLease),
162
113
  started_at: startedAt.toISOString(),
163
114
  };
115
+ const initialWorkspaceDigest = workspaceLease.baseline_digest
116
+ || await workspaceDigest(workspaceLease.execution_workspace, { ...(signal ? { signal } : {}) });
117
+ manifest.protocol = {
118
+ ...manifest.protocol,
119
+ initial_workspace_digest: initialWorkspaceDigest,
120
+ };
121
+ manifest.initial_workspace_digest = initialWorkspaceDigest;
164
122
  await atomicWriteJSON(manifestPath, manifest);
165
123
  sink.emit({
166
124
  type: "workspace.ready",
@@ -179,14 +137,13 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
179
137
  workspace: workspaceLease.execution_workspace,
180
138
  });
181
139
  stage = "adapter_setup";
182
- const adapter = getAdapter(reference.harness_id);
183
140
  const adapterState = {};
184
141
  const executionRequest = { ...normalized, cwd: workspaceLease.execution_workspace };
185
142
  const specification = await adapter.process(executionRequest, artifact.executable, {
186
143
  observed_version: artifact.observed_version ?? undefined,
187
144
  resolution,
188
145
  run_directory: runDirectory,
189
- runtime_home: path.join(runDirectory, "runtime-home"),
146
+ runtime_home: runtimeHome,
190
147
  });
191
148
  if (artifact.entrypoint_args?.length)
192
149
  specification.args.unshift(...artifact.entrypoint_args);
@@ -219,9 +176,10 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
219
176
  };
220
177
  signal?.addEventListener("abort", abortHandler, { once: true });
221
178
  consumeLines(launched.stdout, (line) => {
222
- sink?.writeStdout(line);
223
179
  if (adapter.translateLine) {
224
- for (const event of adapter.translateLine(line, adapterState)) {
180
+ const safeLine = providerCapture?.appendText(line) ?? redactProviderText(line);
181
+ sink?.writeStdout(safeLine);
182
+ for (const event of adapter.translateLine(safeLine, adapterState)) {
225
183
  if (event.type === "message.delta" && event.text) {
226
184
  finalMessage = (finalMessage ?? "") + event.text;
227
185
  }
@@ -237,13 +195,18 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
237
195
  native = JSON.parse(line);
238
196
  }
239
197
  catch {
240
- sink?.emit({ type: "process.stdout", text: line });
241
- projector.feedText(`${line}\n`);
198
+ const safeLine = providerCapture?.appendUnparsed(line) ?? redactProviderText(line);
199
+ sink?.writeStdout(safeLine);
200
+ sink?.emit({ type: "process.stdout", text: safeLine });
201
+ projector.feedText(`${safeLine}\n`);
242
202
  return;
243
203
  }
244
- const record = typeof native === "object" && native !== null && !Array.isArray(native)
245
- ? native
246
- : { raw: native };
204
+ const safeNative = providerCapture?.appendJSON(native) ?? native;
205
+ sink?.writeStdout(JSON.stringify(safeNative));
206
+ const record = typeof safeNative === "object" && safeNative !== null && !Array.isArray(safeNative)
207
+ ? safeNative
208
+ : { raw: safeNative };
209
+ observedEffectiveModel ||= providerModelId(record);
247
210
  if (adapter.translate) {
248
211
  for (const event of adapter.translate(record, adapterState)) {
249
212
  if (event.type === "message.delta" && event.text) {
@@ -260,8 +223,9 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
260
223
  }
261
224
  });
262
225
  consumeLines(launched.stderr, (line) => {
263
- sink?.writeStderr(line);
264
- sink?.emit({ type: "process.stderr", text: line });
226
+ const safeLine = redactProviderText(line);
227
+ sink?.writeStderr(safeLine);
228
+ sink?.emit({ type: "process.stderr", text: safeLine });
265
229
  });
266
230
  await new Promise((resolve, reject) => {
267
231
  launched.once("spawn", resolve);
@@ -381,10 +345,29 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
381
345
  : workspaceStatus;
382
346
  manifest = { ...manifest, ...workspaceManifestFields(currentWorkspace) };
383
347
  }
384
- // Persist the canonical trajectory and derive the final output (spec §5.2, §5.6).
348
+ // Seal the provider-native evidence together with its canonical projection.
385
349
  try {
386
350
  const status = result.status;
387
- const projected = projector.finalize(status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed");
351
+ const captured = providerCapture ? await providerCapture.close() : null;
352
+ providerCapture = undefined;
353
+ const deepseekNative = reference.harness_id === "deepseek"
354
+ ? await importDeepseekNativeSession({
355
+ runtimeHome,
356
+ runDirectory,
357
+ runId,
358
+ status: status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed",
359
+ })
360
+ : null;
361
+ const projected = deepseekNative
362
+ ? {
363
+ header: deepseekNative.header,
364
+ events: deepseekNative.events,
365
+ finalOutput: deepseekNative.finalOutput,
366
+ providerSessionId: deepseekNative.providerSessionId,
367
+ fidelity: "provider_native",
368
+ }
369
+ : projector.finalize(status === "cancelled" ? "cancelled" : status === "timed_out" ? "timed_out" : status === "succeeded" ? "succeeded" : "failed");
370
+ observedEffectiveModel ||= deepseekNative?.effectiveModel;
388
371
  trajectoryWriter = await TrajectoryWriter.open({
389
372
  runDirectory,
390
373
  cwd: normalized.cwd,
@@ -395,24 +378,61 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
395
378
  for (const event of projected.events)
396
379
  trajectoryWriter.append(event);
397
380
  trajectoryPathValue = await trajectoryWriter.close();
398
- const sha256 = await trajectoryFileSha256(trajectoryPathValue);
399
- const ref = trajectoryRef(runId, projected.header.id, projected.fidelity, trajectoryPathValue, sha256, projected.providerSessionId);
381
+ const canonicalFile = await canonicalTrajectoryFileRef(runDirectory, trajectoryPathValue);
382
+ const fidelity = deepseekNative
383
+ ? "provider_native"
384
+ : captured && adapter.translate
385
+ ? "provider_native"
386
+ : projected.fidelity === "native" || projected.fidelity === "provider_native"
387
+ ? "normalized"
388
+ : projected.fidelity;
389
+ const redactions = mergeRedactions(captured?.redactions, deepseekNative?.redactions);
390
+ const ref = trajectoryRefV2({
391
+ runId,
392
+ fidelity,
393
+ provider: reference.harness_id,
394
+ ...(projected.providerSessionId ? { providerSessionId: projected.providerSessionId } : {}),
395
+ files: [
396
+ ...(captured ? [captured.file] : []),
397
+ ...(deepseekNative ? deepseekNative.providerFiles : []),
398
+ canonicalFile,
399
+ ],
400
+ ...(redactions.length ? { redactions } : {}),
401
+ });
400
402
  await atomicWriteJSON(trajectoryRefPath(runDirectory), ref);
401
403
  result.trajectory = {
402
404
  session_id: projected.header.id,
403
- path: trajectoryPathValue,
404
- fidelity: projected.fidelity,
405
- sha256,
405
+ path: canonicalFile.path,
406
+ fidelity,
407
+ sha256: canonicalFile.sha256,
406
408
  };
407
409
  if (status === "succeeded") {
408
410
  // §5.6: `result.output` is the text of the last non-empty assistant
409
411
  // message in the canonical trajectory.
410
412
  result.output = projected.finalOutput || finalMessage || "";
411
413
  }
412
- sink?.emit({ type: "trajectory.recorded", path: trajectoryPathValue, fidelity: projected.fidelity });
414
+ manifest = { ...manifest, trajectory_ref: "trajectory.ref.json" };
415
+ sink?.emit({ type: "trajectory.recorded", path: canonicalFile.path, fidelity });
413
416
  }
414
417
  catch (error) {
415
- result = failureResult(runId, startedAt, "trajectory_recording_failed", error?.message || String(error), 12);
418
+ if (providerCapture)
419
+ await providerCapture.close().catch(() => { });
420
+ providerCapture = undefined;
421
+ const warning = {
422
+ code: "trajectory_recording_failed",
423
+ message: error?.message || String(error),
424
+ };
425
+ if (result?.status === "timed_out") {
426
+ // The agent timeout is the authoritative terminal cause. Recording is a
427
+ // secondary failure and must not turn an attributable timeout into an
428
+ // infrastructure failure for downstream evaluators.
429
+ result.trajectory_warning = warning;
430
+ manifest = { ...manifest, trajectory_warning: warning };
431
+ sink?.emit({ type: "trajectory.recording_failed", status: "timed_out", error: warning });
432
+ }
433
+ else {
434
+ result = failureResult(runId, startedAt, warning.code, warning.message, 12);
435
+ }
416
436
  }
417
437
  if (sinkOpened) {
418
438
  try {
@@ -424,42 +444,43 @@ export async function executeRun({ runId, request, runsRoot, root = path.dirname
424
444
  }
425
445
  if (!result)
426
446
  result = failureResult(runId, startedAt, "internal_error", "run ended without a result", 12);
447
+ if (!await readJSON(path.join(runDirectory, "resolution.json"), null)) {
448
+ await atomicWriteJSON(path.join(runDirectory, "resolution.json"), {
449
+ schema_version: SCHEMA_VERSION,
450
+ status: "unresolved",
451
+ requested_harness_ref: normalized.harness_ref,
452
+ error_code: (result.error?.code) || "resolution_unavailable",
453
+ });
454
+ }
455
+ if (observedEffectiveModel) {
456
+ const currentModel = (manifest.model || normalized.model_identity);
457
+ manifest.model = {
458
+ ...currentModel,
459
+ effective_id: observedEffectiveModel,
460
+ identity_resolved: currentModel.identity_resolved === true || looksImmutableModelId(observedEffectiveModel),
461
+ };
462
+ result.effective_model = observedEffectiveModel;
463
+ }
427
464
  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,
465
+ const terminalStatus = result.status;
466
+ const observation = normalized.context.kind === "benchmark_task" && !normalized.defer_benchmark_observation
467
+ ? {
468
+ status: "invalid",
469
+ invalid_reason: terminalStatus === "succeeded"
470
+ ? "verifier_result_missing"
471
+ : terminalStatus === "cancelled"
472
+ ? "cancelled"
473
+ : "infrastructure_failure",
474
+ }
475
+ : undefined;
476
+ await atomicWriteJSON(manifestPath, {
477
+ ...manifest,
478
+ status: terminalStatus,
479
+ result_ref: "result.json",
480
+ ...(observation ? { observation } : {}),
481
+ completed_at: result.completed_at,
482
+ sealed: !normalized.defer_benchmark_observation,
441
483
  });
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";
484
+ return result;
464
485
  }
465
- //# sourceMappingURL=engine.js.map
486
+ //# 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"}