agent-hitch 0.2.13 → 0.2.14

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 (126) hide show
  1. package/benchmark-packages/automationbench/RESOURCES.md +27 -0
  2. package/benchmark-packages/automationbench/resources.mjs +86 -0
  3. package/benchmark-packages/shared-tree/README.md +14 -0
  4. package/benchmark-packages/shared-tree/import.mjs +39 -0
  5. package/dist/scripts/canary-automation-resources.js +86 -0
  6. package/dist/scripts/canary-automation-resources.js.map +1 -0
  7. package/dist/scripts/canary-resource-empty-daemon.js +195 -0
  8. package/dist/scripts/canary-resource-empty-daemon.js.map +1 -0
  9. package/dist/scripts/canary-resources.js +89 -0
  10. package/dist/scripts/canary-resources.js.map +1 -0
  11. package/dist/scripts/check-architecture.js +6 -5
  12. package/dist/scripts/check-architecture.js.map +1 -1
  13. package/dist/scripts/resource-space-sampler.js +83 -0
  14. package/dist/scripts/resource-space-sampler.js.map +1 -0
  15. package/dist/src/backends/harbor/backend.js +5 -1
  16. package/dist/src/backends/harbor/backend.js.map +1 -1
  17. package/dist/src/backends/harbor/resource-admission.js +23 -0
  18. package/dist/src/backends/harbor/resource-admission.js.map +1 -0
  19. package/dist/src/cli/commands/resources.js +23 -0
  20. package/dist/src/cli/commands/resources.js.map +1 -0
  21. package/dist/src/cli/main.js +2 -0
  22. package/dist/src/cli/main.js.map +1 -1
  23. package/dist/src/control-plane/remote-offer-contract.js +11 -2
  24. package/dist/src/control-plane/remote-offer-contract.js.map +1 -1
  25. package/dist/src/control-plane/remote-result-transport.js +10 -0
  26. package/dist/src/control-plane/remote-result-transport.js.map +1 -1
  27. package/dist/src/control-plane/remote-work-coordinator.js +4 -1
  28. package/dist/src/control-plane/remote-work-coordinator.js.map +1 -1
  29. package/dist/src/control-plane/remote-work-inputs.js +16 -4
  30. package/dist/src/control-plane/remote-work-inputs.js.map +1 -1
  31. package/dist/src/control-plane/remote-worker-client.js +22 -0
  32. package/dist/src/control-plane/remote-worker-client.js.map +1 -1
  33. package/dist/src/control-plane/remote-worker-codecs.js +1 -1
  34. package/dist/src/control-plane/remote-worker-codecs.js.map +1 -1
  35. package/dist/src/control-plane/remote-worker-protocol.js +12 -2
  36. package/dist/src/control-plane/remote-worker-protocol.js.map +1 -1
  37. package/dist/src/control-plane/remote-worker-runner.js +1 -1
  38. package/dist/src/control-plane/remote-worker-runner.js.map +1 -1
  39. package/dist/src/control-plane/remote-workers.js +2 -1
  40. package/dist/src/control-plane/remote-workers.js.map +1 -1
  41. package/dist/src/evals/benchmark-adapter-manifest.js +4 -0
  42. package/dist/src/evals/benchmark-adapter-manifest.js.map +1 -1
  43. package/dist/src/evals/benchmark-candidate.js +11 -3
  44. package/dist/src/evals/benchmark-candidate.js.map +1 -1
  45. package/dist/src/evals/eval-result-builder.js +22 -1
  46. package/dist/src/evals/eval-result-builder.js.map +1 -1
  47. package/dist/src/evals/index.js +1 -0
  48. package/dist/src/evals/index.js.map +1 -1
  49. package/dist/src/evals/planned-execution.js +5 -14
  50. package/dist/src/evals/planned-execution.js.map +1 -1
  51. package/dist/src/evals/request.js +9 -0
  52. package/dist/src/evals/request.js.map +1 -1
  53. package/dist/src/evals/resource-eval-lifecycle.js +31 -0
  54. package/dist/src/evals/resource-eval-lifecycle.js.map +1 -0
  55. package/dist/src/evals/resource-legacy-export.js +57 -0
  56. package/dist/src/evals/resource-legacy-export.js.map +1 -0
  57. package/dist/src/evals/service.js +5 -20
  58. package/dist/src/evals/service.js.map +1 -1
  59. package/dist/src/evals/task-resources.js +12 -4
  60. package/dist/src/evals/task-resources.js.map +1 -1
  61. package/dist/src/evals/trial-bundle-files.js +81 -0
  62. package/dist/src/evals/trial-bundle-files.js.map +1 -0
  63. package/dist/src/evals/trial-import.js +7 -78
  64. package/dist/src/evals/trial-import.js.map +1 -1
  65. package/dist/src/foundation/durable-json.js +33 -0
  66. package/dist/src/foundation/durable-json.js.map +1 -0
  67. package/dist/src/foundation/index.js +2 -0
  68. package/dist/src/foundation/index.js.map +1 -1
  69. package/dist/src/foundation/resource-image-references.js +52 -0
  70. package/dist/src/foundation/resource-image-references.js.map +1 -0
  71. package/dist/src/images/gc.js +2 -2
  72. package/dist/src/images/gc.js.map +1 -1
  73. package/dist/src/images/registry.js +27 -2
  74. package/dist/src/images/registry.js.map +1 -1
  75. package/dist/src/resources/api.js +207 -0
  76. package/dist/src/resources/api.js.map +1 -0
  77. package/dist/src/resources/bundle.js +117 -0
  78. package/dist/src/resources/bundle.js.map +1 -0
  79. package/dist/src/resources/evidence.js +93 -0
  80. package/dist/src/resources/evidence.js.map +1 -0
  81. package/dist/src/resources/gc.js +123 -0
  82. package/dist/src/resources/gc.js.map +1 -0
  83. package/dist/src/resources/index.js +14 -0
  84. package/dist/src/resources/index.js.map +1 -0
  85. package/dist/src/resources/materialize.js +143 -0
  86. package/dist/src/resources/materialize.js.map +1 -0
  87. package/dist/src/resources/object-store.js +191 -0
  88. package/dist/src/resources/object-store.js.map +1 -0
  89. package/dist/src/resources/oci-layer-validation.js +202 -0
  90. package/dist/src/resources/oci-layer-validation.js.map +1 -0
  91. package/dist/src/resources/oci-provider.js +101 -0
  92. package/dist/src/resources/oci-provider.js.map +1 -0
  93. package/dist/src/resources/oci-registry-bundle.js +253 -0
  94. package/dist/src/resources/oci-registry-bundle.js.map +1 -0
  95. package/dist/src/resources/protocol.js +222 -0
  96. package/dist/src/resources/protocol.js.map +1 -0
  97. package/dist/src/resources/result-retention.js +93 -0
  98. package/dist/src/resources/result-retention.js.map +1 -0
  99. package/dist/src/resources/role-context.js +54 -0
  100. package/dist/src/resources/role-context.js.map +1 -0
  101. package/dist/src/resources/stats.js +36 -0
  102. package/dist/src/resources/stats.js.map +1 -0
  103. package/dist/src/resources/store.js +310 -0
  104. package/dist/src/resources/store.js.map +1 -0
  105. package/dist/src/resources/tasks.js +153 -0
  106. package/dist/src/resources/tasks.js.map +1 -0
  107. package/dist/src/resources/transfer.js +162 -0
  108. package/dist/src/resources/transfer.js.map +1 -0
  109. package/dist/src/resources/views.js +130 -0
  110. package/dist/src/resources/views.js.map +1 -0
  111. package/dist/src/workers/remote-harbor-work-spec.js +9 -3
  112. package/dist/src/workers/remote-harbor-work-spec.js.map +1 -1
  113. package/dist/src/workers/remote-harbor-worker.js +24 -9
  114. package/dist/src/workers/remote-harbor-worker.js.map +1 -1
  115. package/docs/resource-storage.zh-CN.md +95 -0
  116. package/docs/schemas/execution-provider-status.schema.json +20 -0
  117. package/docs/schemas/hitch-resource-dataset-v2.schema.json +590 -0
  118. package/docs/schemas/hitch-resource-lock-v1.schema.json +341 -0
  119. package/docs/schemas/hitch-resource-plan-v1.schema.json +423 -0
  120. package/docs/schemas/hitch-resource-selection-v1.schema.json +608 -0
  121. package/docs/schemas/hitch-tree-v1.schema.json +75 -0
  122. package/docs/schemas/remote-harbor-work-spec.schema.json +47 -3
  123. package/docs/schemas/remote-work-offer.schema.json +2 -1
  124. package/docs/schemas/remote-worker-registration.schema.json +20 -0
  125. package/package.json +9 -3
  126. package/test-contracts/hitch-resources-v1.json +197 -0
@@ -0,0 +1,153 @@
1
+ import { resourceDescriptorDirectory } from "./views.js";
2
+ import { validateRoleContexts } from "./role-context.js";
3
+ import { lstat, readFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { canonical, identity, object, parseResourceLock, parseStrictJson, portablePath, resourceId, sha } from "./protocol.js";
6
+ export const RESOURCE_EXECUTION_CAPABILITIES = ["blob@1", "tree@1", "oci-image@1", "input-file@1", "input-tree@1", "environment-image@1", "private-copy@1", "harbor-role-context@1"];
7
+ export function parseResourceTask(value) {
8
+ const raw = object(value, ["task_id", "source_task_digest", "resource_closure_digest", "task_digest", "sourceTree", "lock"]);
9
+ const tree = object(raw.sourceTree, ["kind", "format", "manifestDigest"]);
10
+ if (tree.kind !== "tree" || tree.format !== "hitch-tree@1")
11
+ throw new TypeError("task source must be a versioned tree");
12
+ const sourceTree = { kind: "tree", format: "hitch-tree@1", manifestDigest: sha(tree.manifestDigest) };
13
+ const source = identity("hitch-source-task@1", sourceTree);
14
+ if (sha(raw.source_task_digest) !== source)
15
+ throw new TypeError("source task identity mismatch");
16
+ const resource_closure_digest = sha(raw.resource_closure_digest), task_digest = identity("hitch-task@2", { source_task_digest: source, resource_closure_digest });
17
+ if (sha(raw.task_digest) !== task_digest)
18
+ throw new TypeError("resource task identity mismatch");
19
+ return { task_id: portablePath(resourceId(raw.task_id)), sourceTree, source_task_digest: source, resource_closure_digest, task_digest, lock: parseResourceLock(raw.lock) };
20
+ }
21
+ export function parseResourceDataset(value) {
22
+ const raw = object(value, ["schema_version", "kind", "resource_protocol", "execution", "required_capabilities", "benchmark", "adapter", "scoring", "raw_metrics", "tasks", "dataset_digest"]);
23
+ if (raw.schema_version !== "2" || raw.kind !== "gear-harbor-benchmark" || raw.resource_protocol !== "hitch-resource-lock@1")
24
+ throw new TypeError("unsupported resource dataset");
25
+ const execution = object(raw.execution, ["backend", "resolver", "platform"]);
26
+ if (execution.backend !== "harbor-role-context@1" || execution.resolver !== "hitch-resource-resolver@1" || typeof execution.platform !== "string" || !/^linux\/(amd64|arm64)(\/v[0-9]+)?$/.test(execution.platform))
27
+ throw new TypeError("unsupported resource execution contract");
28
+ const benchmark = object(raw.benchmark, ["id", "revision"]), adapter = object(raw.adapter, ["id", "revision", "output_protocol"]);
29
+ for (const item of [benchmark, adapter])
30
+ if (typeof item.id !== "string" || !item.id || typeof item.revision !== "string" || !item.revision || item.revision === "latest")
31
+ throw new TypeError("invalid benchmark/adapter identity");
32
+ if (adapter.output_protocol !== "gear-harbor-eval-result-v1" || !Array.isArray(raw.tasks) || !raw.tasks.length)
33
+ throw new TypeError("invalid resource dataset tasks or adapter");
34
+ const scoring = object(raw.scoring, ["total_score", "process_score"]);
35
+ for (const key of ["total_score", ...(scoring.process_score === undefined ? [] : ["process_score"])]) {
36
+ const score = object(scoring[key], ["source_metric", "direction", "range", "reducer"]);
37
+ if (typeof score.source_metric !== "string" || !score.source_metric || !["maximize", "minimize"].includes(String(score.direction)) || score.reducer !== "task-macro-mean"
38
+ || !Array.isArray(score.range) || score.range.length !== 2 || !score.range.every(Number.isFinite) || score.range[0] >= score.range[1])
39
+ throw new TypeError("invalid resource scoring contract");
40
+ }
41
+ if (!Array.isArray(raw.required_capabilities) || raw.required_capabilities.some(c => typeof c !== "string") || new Set(raw.required_capabilities).size !== raw.required_capabilities.length)
42
+ throw new TypeError("invalid resource dataset capabilities");
43
+ if (raw.raw_metrics !== undefined) {
44
+ const registry = object(raw.raw_metrics, ["schema_version", "metrics"]);
45
+ if (registry.schema_version !== "1" || !Array.isArray(registry.metrics))
46
+ throw new TypeError("invalid raw metric registry");
47
+ }
48
+ const tasks = raw.tasks.map(parseResourceTask), ids = tasks.map(t => t.task_id);
49
+ if (new Set(ids.map(id => id.toLowerCase())).size !== ids.length || canonical(ids) !== canonical([...ids].sort()))
50
+ throw new TypeError("resource dataset tasks must be sorted and unique");
51
+ const { dataset_digest, ...body } = raw;
52
+ if (sha(dataset_digest) !== identity("hitch-resource-dataset@2", body))
53
+ throw new TypeError("resource dataset digest mismatch");
54
+ return { ...raw, tasks };
55
+ }
56
+ export function selectResources(dataset, ids) {
57
+ const sorted = [...ids].sort();
58
+ if (!sorted.length || new Set(ids.map(id => id.toLowerCase())).size !== ids.length || sorted.some(id => !dataset.tasks.some(t => t.task_id === id)))
59
+ throw new TypeError("invalid resource selection");
60
+ const { tasks, dataset_digest, ...manifest } = dataset;
61
+ const body = { protocol: "hitch-resource-selection@1", sourceDatasetDigest: dataset_digest, manifest, tasks: tasks.filter(t => sorted.includes(t.task_id)) };
62
+ return { ...body, digest: identity(body.protocol, body) };
63
+ }
64
+ export function parseResourceSelection(value) {
65
+ const raw = object(value, ["protocol", "sourceDatasetDigest", "manifest", "tasks", "digest"]);
66
+ if (raw.protocol !== "hitch-resource-selection@1")
67
+ throw new TypeError("unsupported resource selection");
68
+ const { digest, ...body } = raw;
69
+ if (sha(digest) !== identity(raw.protocol, body))
70
+ throw new TypeError("resource selection digest mismatch");
71
+ sha(raw.sourceDatasetDigest);
72
+ const manifest = object(raw.manifest, ["schema_version", "kind", "resource_protocol", "execution", "required_capabilities", "benchmark", "adapter", "scoring", "raw_metrics"]);
73
+ const datasetBody = { ...manifest, tasks: raw.tasks };
74
+ const dataset = parseResourceDataset({ ...datasetBody, dataset_digest: identity("hitch-resource-dataset@2", datasetBody) });
75
+ return { ...raw, tasks: dataset.tasks };
76
+ }
77
+ export async function readResourceInput(input) {
78
+ const info = await lstat(input).catch((e) => { if (e.code !== "ENOENT")
79
+ throw e; return undefined; });
80
+ if (!info)
81
+ return undefined;
82
+ if (info.isFile()) {
83
+ if (info.size > 16 * 1024 ** 2)
84
+ throw new Error("resource selection size limit exceeded");
85
+ return parseResourceSelection(parseStrictJson(await readFile(input, "utf8")));
86
+ }
87
+ if (!info.isDirectory())
88
+ throw new TypeError("resource input must be a regular file or directory");
89
+ try {
90
+ const file = path.join(input, "benchmark.adapter.json"), metadata = await lstat(file);
91
+ if (!metadata.isFile() || metadata.size > 16 * 1024 ** 2)
92
+ throw new Error("resource manifest must be a bounded regular file");
93
+ const text = await readFile(file, "utf8"), raw = parseStrictJson(text);
94
+ return raw.schema_version === "2" ? parseResourceDataset(raw) : undefined;
95
+ }
96
+ catch (error) {
97
+ if (error.code === "ENOENT")
98
+ return undefined;
99
+ throw error;
100
+ }
101
+ }
102
+ export async function sealResourceTask(store, directory, taskId, owner, signal) {
103
+ const lock = parseResourceLock(parseStrictJson(await readFile(path.join(directory, "resource.lock.json"), "utf8")));
104
+ const source = await store.import(directory, "tree", `${owner}:source`, signal);
105
+ if (source.resource.kind !== "tree")
106
+ throw new Error("invalid source import");
107
+ const acquired = await store.acquire(owner, lock, "preflight", signal);
108
+ const source_task_digest = identity("hitch-source-task@1", source.resource), resource_closure_digest = acquired.closure.digest;
109
+ const task = { task_id: resourceId(taskId), sourceTree: source.resource, lock, source_task_digest, resource_closure_digest,
110
+ task_digest: identity("hitch-task@2", { source_task_digest, resource_closure_digest }) };
111
+ // The producer's stable durable pin retains both source and runtime inputs.
112
+ await store.pin({ owner, generation: 1, purpose: "dataset-task", lock: taskClosureLock(task) }, signal);
113
+ await store.finishLease(source.leaseId, "ended");
114
+ await store.finishLease(acquired.lease.id, "ended");
115
+ return task;
116
+ }
117
+ export function taskClosureLock(task) {
118
+ if ("hitch-task-source" in task.lock.resources)
119
+ throw new TypeError("reserved resource ID hitch-task-source");
120
+ return { ...task.lock, resources: { ...task.lock.resources, "hitch-task-source": task.sourceTree } };
121
+ }
122
+ export async function preflightResourceTask(store, task, input) {
123
+ task = parseResourceTask(task);
124
+ for (const capability of task.lock.requiredCapabilities)
125
+ if (!RESOURCE_EXECUTION_CAPABILITIES.includes(capability))
126
+ throw new Error(`unsupported required resource capability: ${capability}`);
127
+ for (const binding of task.lock.bindings)
128
+ if (binding.use !== "environment-image" && binding.access === "read-only")
129
+ throw new Error("Harbor role-context backend cannot enforce read-only input bindings");
130
+ for (const resource of Object.values(task.lock.resources))
131
+ if (resource.kind === "oci-image" && resource.platform !== input.platform)
132
+ throw new Error("resource platform mismatch");
133
+ const root = await store.pin({ owner: input.owner, generation: input.generation, purpose: "frozen-task", lock: taskClosureLock(task) }, input.signal);
134
+ const runtime = await store.acquire(`${input.owner}:verification`, task.lock, "preflight", input.signal);
135
+ if (runtime.closure.digest !== task.resource_closure_digest)
136
+ throw new Error("resource runtime closure changed");
137
+ await store.finishLease(runtime.lease.id, "ended");
138
+ const tree = await store.objects.readTree(task.sourceTree.manifestDigest), entry = tree.entries.find(e => e.path === "resource.lock.json");
139
+ if (entry?.kind !== "file" || canonical(parseResourceLock(parseStrictJson(await readFile(store.objects.objectPath(entry.digest), "utf8")))) !== canonical(task.lock))
140
+ throw new Error("task lock does not match its sealed source tree");
141
+ await validateRoleContexts(await resourceDescriptorDirectory(store, task), task.lock.bindings, input.platform, root.closure.images);
142
+ for (const binding of task.lock.bindings)
143
+ if (binding.use !== "environment-image") {
144
+ const role = binding.consumer.role === "candidate" ? "environment/candidate" : binding.consumer.role === "verifier" ? "tests" : `environment/services/${binding.consumer.serviceId}`;
145
+ const target = `${role}/${binding.target}`.toLowerCase();
146
+ if (tree.entries.some(e => e.path.toLowerCase() === target || e.path.toLowerCase().startsWith(`${target}/`) || e.kind === "file" && target.startsWith(`${e.path.toLowerCase()}/`)))
147
+ throw new Error("resource target collides with source descriptor");
148
+ }
149
+ const body = { protocol: "hitch-resource-plan@1", resolver: "hitch-resource-resolver@1", backend: "harbor-role-context@1", platform: input.platform, task };
150
+ return { plan: { ...body, digest: identity(body.protocol, body) }, closure: root.closure };
151
+ }
152
+ export { resourceDescriptorDirectory } from "./views.js";
153
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/resources/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { lstat, mkdir, open, rename, rm, statfs } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { canonical, identity, natural, object, parseResource, sha } from "./protocol.js";
5
+ import { parseResourceSelection, preflightResourceTask } from "./tasks.js";
6
+ export function parseResourceDelivery(value) {
7
+ const raw = object(value, ["protocol", "selection", "objects", "images", "plans", "digest"]);
8
+ if (raw.protocol !== "hitch-resource-delivery@1" || !Array.isArray(raw.objects) || !Array.isArray(raw.images) || !Array.isArray(raw.plans))
9
+ throw new TypeError("invalid resource delivery");
10
+ const selection = parseResourceSelection(raw.selection);
11
+ const objects = raw.objects.map(v => { const o = object(v, ["digest", "size"]); return { digest: sha(o.digest), size: natural(o.size) }; });
12
+ if (canonical(objects.map(o => o.digest)) !== canonical([...new Set(objects.map(o => o.digest))].sort()))
13
+ throw new TypeError("delivery objects must be sorted and unique");
14
+ const images = raw.images.map(item => {
15
+ const i = object(item, ["resource", "reference", "configDigest"]), resource = parseResource(i.resource);
16
+ if (resource.kind !== "oci-image" || typeof i.reference !== "string" || !i.reference.endsWith(`@${resource.manifestDigest}`) || /[\s\0]/.test(i.reference))
17
+ throw new TypeError("invalid delivery image");
18
+ return { resource, reference: i.reference, configDigest: sha(i.configDigest) };
19
+ });
20
+ const expectedImages = [...new Set(selection.tasks.flatMap(task => Object.values(task.lock.resources)
21
+ .filter(resource => resource.kind === "oci-image").map(resource => canonical(resource))))].sort((a, b) => a.localeCompare(b));
22
+ if (canonical(images.map(image => canonical(image.resource))) !== canonical(expectedImages))
23
+ throw new TypeError("delivery images must exactly match the sorted unique selection closure");
24
+ const plans = raw.plans.map(v => { const p = object(v, ["taskId", "digest"]); if (typeof p.taskId !== "string")
25
+ throw new TypeError("invalid delivery plan"); return { taskId: p.taskId, digest: sha(p.digest) }; });
26
+ if (canonical(plans.map(p => p.taskId)) !== canonical(selection.tasks.map(t => t.task_id)))
27
+ throw new TypeError("delivery plans do not match selection");
28
+ const { digest, ...body } = raw;
29
+ if (sha(digest) !== identity(raw.protocol, body))
30
+ throw new TypeError("resource delivery digest mismatch");
31
+ return raw;
32
+ }
33
+ export async function createResourceDelivery(store, selection, owner, generation, signal) {
34
+ return store.admission(() => assembleResourceDelivery(store, selection, owner, generation, signal));
35
+ }
36
+ async function assembleResourceDelivery(store, selection, owner, generation, signal) {
37
+ selection = parseResourceSelection(selection);
38
+ const objects = new Map(), images = new Map(), plans = [];
39
+ for (const task of selection.tasks) {
40
+ const checked = await preflightResourceTask(store, task, { owner: `${owner}:${task.task_id}`, generation, platform: selection.manifest.execution.platform, ...(signal ? { signal } : {}) });
41
+ plans.push({ taskId: task.task_id, digest: checked.plan.digest });
42
+ for (const digest of checked.closure.objectDigests)
43
+ objects.set(digest, await store.objects.verify(digest));
44
+ for (const image of checked.closure.images) {
45
+ const resource = task.lock.resources[image.resource];
46
+ if (resource?.kind !== "oci-image")
47
+ throw new Error("delivery image not declared");
48
+ images.set(canonical(resource), { resource, reference: image.reference, configDigest: image.configDigest });
49
+ }
50
+ }
51
+ const body = { protocol: "hitch-resource-delivery@1", selection, objects: [...objects].sort(([a], [b]) => a.localeCompare(b)).map(([digest, size]) => ({ digest, size })), images: [...images].sort(([a], [b]) => a.localeCompare(b)).map(([, i]) => i), plans };
52
+ return parseResourceDelivery({ ...body, digest: identity(body.protocol, body) });
53
+ }
54
+ function interruptible(pending, signal) {
55
+ return new Promise((resolve, reject) => {
56
+ const abort = () => { signal.removeEventListener("abort", abort); reject(signal.reason); };
57
+ signal.addEventListener("abort", abort, { once: true });
58
+ pending.then(value => { signal.removeEventListener("abort", abort); resolve(value); }, error => { signal.removeEventListener("abort", abort); reject(error); });
59
+ if (signal.aborted)
60
+ abort();
61
+ });
62
+ }
63
+ async function* boundedRead(reader, item, signal) {
64
+ const opened = Promise.resolve().then(() => { signal.throwIfAborted(); return reader(item, signal); }).then(stream => stream[Symbol.asyncIterator]());
65
+ let finished = false;
66
+ try {
67
+ const iterator = await interruptible(opened, signal);
68
+ while (true) {
69
+ signal.throwIfAborted();
70
+ const next = await interruptible(Promise.resolve(iterator.next()), signal);
71
+ if (next.done) {
72
+ finished = true;
73
+ return;
74
+ }
75
+ yield next.value;
76
+ }
77
+ }
78
+ finally {
79
+ // Close late readers too, but never let uncooperative stream cleanup retain the store lock.
80
+ if (!finished)
81
+ void opened.then(iterator => iterator.return?.()).catch(() => { });
82
+ }
83
+ }
84
+ /** One bounded object stream at a time. Existing bytes are verified, never overwritten. */
85
+ export async function receiveResourceDelivery(store, value, reader, owner, generation, signal) {
86
+ const delivery = parseResourceDelivery(value), limits = store.objects.budget;
87
+ if (delivery.objects.length > limits.maxFiles || delivery.objects.some(o => o.size > limits.maxObjectBytes) || delivery.objects.reduce((n, o) => n + o.size, 0) > limits.maxTotalBytes)
88
+ throw new Error("resource transfer budget exceeded");
89
+ const received = await store.locked(async () => {
90
+ const lease = await store.beginLease(owner, "import"), staging = path.join(store.directory, "staging", lease.id);
91
+ let transferredBytes = 0, missingObjects = 0;
92
+ await mkdir(staging, { recursive: true });
93
+ try {
94
+ for (const item of delivery.objects) {
95
+ signal?.throwIfAborted();
96
+ await store.protect(lease, item.digest);
97
+ const target = store.objects.objectPath(item.digest), existing = await lstat(target).catch(e => { if (e.code !== "ENOENT")
98
+ throw e; return undefined; });
99
+ if (existing) {
100
+ await store.objects.verify(item.digest, item.size);
101
+ continue;
102
+ }
103
+ const quarantine = path.join(store.directory, "quarantine", item.digest.slice(7));
104
+ if (await lstat(quarantine).catch(e => { if (e.code !== "ENOENT")
105
+ throw e; return undefined; })) {
106
+ await store.objects.verify(item.digest, item.size, quarantine);
107
+ await mkdir(path.dirname(target), { recursive: true });
108
+ await rename(quarantine, target);
109
+ await rm(path.join(store.directory, "quarantine-index", `${item.digest.slice(7)}.json`), { force: true });
110
+ continue;
111
+ }
112
+ const space = await statfs(staging, { bigint: true });
113
+ if (space.bsize * space.bavail < BigInt(item.size + limits.minFreeBytes))
114
+ throw new Error("resource transfer free-space reserve exceeded");
115
+ const file = path.join(staging, randomUUID()), output = await open(file, "wx", 0o600);
116
+ let size = 0;
117
+ const timeout = AbortSignal.timeout(120_000), bounded = signal ? AbortSignal.any([signal, timeout]) : timeout;
118
+ try {
119
+ for await (const chunk of boundedRead(reader, item, bounded)) {
120
+ bounded.throwIfAborted();
121
+ size += chunk.byteLength;
122
+ if (size > item.size)
123
+ throw new Error("resource transfer exceeds declared size");
124
+ await output.writeFile(chunk);
125
+ }
126
+ bounded.throwIfAborted();
127
+ await output.sync();
128
+ }
129
+ finally {
130
+ await output.close();
131
+ }
132
+ if (size !== item.size)
133
+ throw new Error("resource transfer is truncated");
134
+ await store.objects.verify(item.digest, item.size, file);
135
+ signal?.throwIfAborted();
136
+ await store.objects.publish(file, item.digest, item.size, d => store.protect(lease, d));
137
+ missingObjects++;
138
+ transferredBytes += size;
139
+ }
140
+ return { leaseId: lease.id, transferredBytes, missingObjects };
141
+ }
142
+ finally {
143
+ await rm(staging, { recursive: true, force: true });
144
+ }
145
+ }, signal);
146
+ // Producer protection survives failures until an operator confirms recovery.
147
+ const expected = new Set();
148
+ for (const task of delivery.selection.tasks) {
149
+ const checked = await preflightResourceTask(store, task, { owner: `${owner}:${task.task_id}`, generation, platform: delivery.selection.manifest.execution.platform, ...(signal ? { signal } : {}) });
150
+ if (checked.plan.digest !== delivery.plans.find(p => p.taskId === task.task_id)?.digest)
151
+ throw new Error("remote resource plan changed");
152
+ checked.closure.objectDigests.forEach(d => expected.add(d));
153
+ for (const i of checked.closure.images)
154
+ if (!delivery.images.some(e => e.resource.manifestDigest === i.manifestDigest && e.resource.platform === i.platform && e.configDigest === i.configDigest))
155
+ throw new Error("remote OCI config changed");
156
+ }
157
+ if (canonical([...expected].sort()) !== canonical(delivery.objects.map(o => o.digest)))
158
+ throw new Error("delivery contains an incomplete or extraneous closure");
159
+ await store.finishLease(received.leaseId, "ended");
160
+ return received;
161
+ }
162
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/resources/transfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { constants } from "node:fs";
2
+ import { chmod, copyFile, lstat, mkdir, readFile, readdir, rename, rm, statfs } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { randomUUID } from "node:crypto";
5
+ import { durableWriteJSON } from "../foundation/index.js";
6
+ import { canonical, hash, object, parseStrictJson, parseTree } from "./protocol.js";
7
+ const names = (directory) => readdir(directory).catch(e => { if (e.code !== "ENOENT")
8
+ throw e; return []; });
9
+ async function verifyView(store, directory, tree) {
10
+ const expected = new Map(tree.entries.map(e => [e.path, e]));
11
+ const visit = async (dir, prefix = "") => {
12
+ if (!(await lstat(dir)).isDirectory())
13
+ throw new Error("descriptor view is not a directory");
14
+ for (const name of await readdir(dir)) {
15
+ const rel = prefix ? `${prefix}/${name}` : name, entry = expected.get(rel);
16
+ if (!entry)
17
+ throw new Error("descriptor view contains extra content");
18
+ expected.delete(rel);
19
+ const file = path.join(dir, name), info = await lstat(file);
20
+ if (entry.kind === "directory")
21
+ await visit(file, rel);
22
+ else if (!info.isFile() || Boolean(info.mode & 0o111) !== entry.executable || await store.objects.verify(entry.digest, entry.size, file) !== entry.size)
23
+ throw new Error("descriptor view changed");
24
+ }
25
+ };
26
+ await visit(directory);
27
+ if (expected.size)
28
+ throw new Error("descriptor view incomplete");
29
+ }
30
+ /** Bounded cache of small descriptors. Large external bindings never enter it. */
31
+ export async function resourceDescriptorDirectory(store, task) {
32
+ return store.locked(async () => {
33
+ const key = task.sourceTree.manifestDigest.slice(7), ref = path.join(store.directory, "descriptor-views", key), isolated = path.join(store.directory, "view-quarantine", key), tree = await store.objects.readTree(task.sourceTree.manifestDigest);
34
+ const size = tree.entries.reduce((n, e) => n + (e.kind === "file" ? e.size : 0), 0);
35
+ if (size > 32 * 1024 ** 2)
36
+ throw new Error("task descriptor exceeds 32 MiB; declare large inputs as resources");
37
+ if (await lstat(ref).catch(e => { if (e.code !== "ENOENT")
38
+ throw e; return undefined; })) {
39
+ await verifyView(store, ref, tree);
40
+ return ref;
41
+ }
42
+ if (await lstat(isolated).catch(e => { if (e.code !== "ENOENT")
43
+ throw e; return undefined; })) {
44
+ await verifyView(store, isolated, tree);
45
+ await mkdir(path.dirname(ref), { recursive: true });
46
+ await rename(isolated, ref);
47
+ await rm(path.join(store.directory, "view-quarantine-index", `${key}.json`), { force: true });
48
+ return ref;
49
+ }
50
+ let cached = 0;
51
+ const measure = async (dir) => { for (const name of await names(dir)) {
52
+ const file = path.join(dir, name), info = await lstat(file);
53
+ if (info.isDirectory())
54
+ await measure(file);
55
+ else if (info.isFile())
56
+ cached += info.size;
57
+ else
58
+ throw new Error("unsafe descriptor cache entry");
59
+ } };
60
+ await measure(path.dirname(ref));
61
+ await measure(path.dirname(isolated));
62
+ if (cached + size > store.objects.budget.maxViewBytes)
63
+ throw new Error("descriptor view cache budget exceeded; inspect and release unused roots before explicit GC");
64
+ const temp = `${ref}.${randomUUID()}.tmp`;
65
+ await mkdir(temp, { recursive: true, mode: 0o700 });
66
+ try {
67
+ const space = await statfs(temp, { bigint: true });
68
+ if (space.bsize * space.bavail < BigInt(size + store.objects.budget.minFreeBytes))
69
+ throw new Error("descriptor view free-space reserve exceeded");
70
+ for (const entry of tree.entries) {
71
+ const target = path.join(temp, entry.path);
72
+ if (entry.kind === "directory")
73
+ await mkdir(target);
74
+ else {
75
+ await store.objects.verify(entry.digest, entry.size);
76
+ await copyFile(store.objects.objectPath(entry.digest), target, constants.COPYFILE_EXCL);
77
+ await chmod(target, entry.executable ? 0o755 : 0o644);
78
+ }
79
+ }
80
+ await verifyView(store, temp, tree);
81
+ await rename(temp, ref);
82
+ return ref;
83
+ }
84
+ finally {
85
+ await rm(temp, { recursive: true, force: true });
86
+ }
87
+ });
88
+ }
89
+ /** Caller holds the same store lock used by view creation and root acquisition. */
90
+ export async function planViewGc(store, marked, graceMs) {
91
+ const active = path.join(store.directory, "descriptor-views"), quarantine = path.join(store.directory, "view-quarantine"), index = path.join(store.directory, "view-quarantine-index");
92
+ const isolated = new Map(), eligible = new Map();
93
+ for (const key of await names(quarantine)) {
94
+ if (!/^[a-f0-9]{64}$/.test(key))
95
+ throw new Error("unknown quarantined descriptor view");
96
+ const record = object(parseStrictJson(await readFile(path.join(index, `${key}.json`), "utf8")), ["protocol", "tree", "at"]), tree = parseTree(record.tree);
97
+ if (record.protocol !== "hitch-view-quarantine@1" || hash(canonical(tree)) !== `sha256:${key}` || !Number.isSafeInteger(record.at))
98
+ throw new Error("invalid descriptor quarantine identity");
99
+ await verifyView(store, path.join(quarantine, key), tree);
100
+ isolated.set(key, { tree, at: record.at });
101
+ }
102
+ for (const key of await names(active)) {
103
+ if (!/^[a-f0-9]{64}$/.test(key))
104
+ continue; // Interrupted private staging is retained for explicit recovery.
105
+ const tree = await store.objects.readTree(`sha256:${key}`);
106
+ await verifyView(store, path.join(active, key), tree);
107
+ if (!marked.has(`sha256:${key}`))
108
+ eligible.set(key, tree);
109
+ }
110
+ return async () => {
111
+ for (const [key, record] of isolated) {
112
+ if (marked.has(`sha256:${key}`)) {
113
+ await mkdir(active, { recursive: true });
114
+ await rename(path.join(quarantine, key), path.join(active, key));
115
+ await rm(path.join(index, `${key}.json`));
116
+ }
117
+ else if (Date.now() - record.at >= graceMs) {
118
+ await rm(path.join(quarantine, key), { recursive: true });
119
+ await rm(path.join(index, `${key}.json`));
120
+ }
121
+ }
122
+ for (const [key, tree] of eligible) {
123
+ await mkdir(quarantine, { recursive: true });
124
+ await durableWriteJSON(path.join(index, `${key}.json`), { protocol: "hitch-view-quarantine@1", tree, at: Date.now() });
125
+ await rename(path.join(active, key), path.join(quarantine, key));
126
+ }
127
+ return { quarantined: [...eligible.keys()] };
128
+ };
129
+ }
130
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/resources/views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAqB,MAAM,eAAe,CAAC;AAIvG,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAqB,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;IAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;AACvI,KAAK,UAAU,UAAU,CAAC,KAAoB,EAAE,SAAiB,EAAE,IAAkB;IACnF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,KAAK,EAAE,GAAW,EAAE,MAAM,GAAG,EAAE,EAAiB,EAAE;QAC9D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC7F,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxK,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,MAAM,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBAClD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,UAAU,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACtM,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IAAC,IAAI,QAAQ,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC3F,CAAC;AACD,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAAoB,EAAE,IAAkB;IACxF,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACnP,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QAChH,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAAC,OAAO,GAAG,CAAC;QAAC,CAAC;QAC7I,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,OAAO,GAAG,CAAC;QAAC,CAAC;QACxU,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE,GAAG,KAAK,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC;;gBAAM,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QACjT,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAAC,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;QACrK,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACtM,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;oBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;qBAAM,CAAC;oBAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;oBAAC,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YAAC,CAAC;YACrV,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAAC,OAAO,GAAG,CAAC;QAC3E,CAAC;gBAAS,CAAC;YAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AACD,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAoB,EAAE,MAAoC,EAAE,OAAe;IAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACvL,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8C,EAAE,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IACnH,KAAK,MAAM,GAAG,IAAI,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3J,IAAI,MAAM,CAAC,QAAQ,KAAK,yBAAyB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC9L,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAY,EAAE,CAAC,CAAC;IAClH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,iEAAiE;QAC5G,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAAC,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAClH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC;gBAAC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;iBACtL,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;gBAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YAAC,CAAC;QACvJ,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QAAC,CAAC;QAC/Q,OAAO,EAAE,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
@@ -2,9 +2,11 @@ import { HitchError, sha256JSON } from "../foundation/index.js";
2
2
  import { assertPhysicalWork, assertRemoteVerifierWork, parseEvalExecutionPlan, parsePhysicalExecution } from "../evals/index.js";
3
3
  import { parseRemoteModelBinding } from "../control-plane/index.js";
4
4
  export function parseRemoteHarborWorkSpec(value, offer) {
5
- const v2 = object(value) && value.schema_version === "2";
5
+ const v3 = object(value) && value.schema_version === "3";
6
+ const v2 = v3 || object(value) && value.schema_version === "2";
6
7
  const spec = exact(value, [
7
8
  "schema_version", "request", "plan", "work", "resolution", "harness_artifact", "controller_runtime", "task", "credential_names",
9
+ ...(v3 ? ["resource_delivery"] : []),
8
10
  ...(v2 ? ["model_binding", "physical_execution", "verifier_source", "verifier_only"] : []),
9
11
  ], "remote Harbor work spec", v2 ? ["model_binding", "physical_execution", "verifier_source", "verifier_only"] : ["credential_names"]);
10
12
  if (spec.schema_version !== "1" && !v2)
@@ -14,8 +16,12 @@ export function parseRemoteHarborWorkSpec(value, offer) {
14
16
  const capture = v2 && spec.verifier_source === "2";
15
17
  if (spec.verifier_source !== undefined && !capture)
16
18
  throw specError("remote verifier source version is invalid");
17
- if (v2 && !binding && !physical && !capture)
19
+ if (v2 && !v3 && !binding && !physical && !capture)
18
20
  throw specError("remote work spec v2 requires a model binding, physical execution or verifier source capture");
21
+ if (v3 && (!digest(spec.resource_delivery) || offer.inputs?.find(i => i.kind === "task-input")?.format !== "hitch-resource-delivery-v1" || spec.verifier_only !== undefined))
22
+ throw specError("invalid resource-aware work spec");
23
+ if (!v3 && offer.inputs?.some(i => i.format === "hitch-resource-delivery-v1"))
24
+ throw specError("resource inputs require work spec v3");
19
25
  const request = parseRequest(spec.request, v2);
20
26
  const plan = parseEvalExecutionPlan(spec.plan);
21
27
  const work = offer.work;
@@ -61,7 +67,7 @@ export function parseRemoteHarborWorkSpec(value, offer) {
61
67
  else if (plan.training_binding || request.model.startsWith("local/") || request.model.startsWith("training/"))
62
68
  throw specError("bound models require remote work spec v2");
63
69
  return {
64
- ...(v2 ? { schema_version: "2", ...(binding ? { model_binding: binding } : {}), ...(physical ? { physical_execution: physical } : {}), ...(capture ? { verifier_source: "2" } : {}), ...(verifier ? { verifier_only: verifier } : {}) } : { schema_version: "1" }),
70
+ ...(v2 ? { ...(v3 ? { schema_version: "3", resource_delivery: spec.resource_delivery } : { schema_version: "2" }), ...(binding ? { model_binding: binding } : {}), ...(physical ? { physical_execution: physical } : {}), ...(capture ? { verifier_source: "2" } : {}), ...(verifier ? { verifier_only: verifier } : {}) } : { schema_version: "1" }),
65
71
  request, plan, work, resolution, harness_artifact: harnessArtifact,
66
72
  controller_runtime: { runtime_id: runtime.runtime_id, directory: "controller-runtime" },
67
73
  task: { task_id: task.task_id, directory: "task-input" },
@@ -1 +1 @@
1
- {"version":3,"file":"remote-harbor-work-spec.js","sourceRoot":"","sources":["../../../src/workers/remote-harbor-work-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-harbor-work-spec.js","sourceRoot":"","sources":["../../../src/workers/remote-harbor-work-spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjI,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAuBpE,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,KAAwB;IAChF,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,GAAG,CAAC;IACzD,MAAM,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,GAAG,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE;QACxB,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,EAAE,kBAAkB;QAC/H,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACvI,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,IAAI,CAAC,EAAE;QAAE,MAAM,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjH,MAAM,QAAQ,GAAG,EAAE,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3H,MAAM,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,KAAK,GAAG,CAAC;IACnD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,OAAO;QAAE,MAAM,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACjH,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;QAAE,MAAM,SAAS,CAAC,6FAA6F,CAAC,CAAC;IACnK,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,MAAM,KAAK,4BAA4B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;QAAE,MAAM,SAAS,CAAC,kCAAkC,CAAC,CAAC;IAClO,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,4BAA4B,CAAC;QAAE,MAAM,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACvI,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC;QAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAAC,CAAC;IACjD,MAAM,CAAC;QAAC,MAAM,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAAC,CAAC;IACnF,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO;WACjF,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAClJ,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACzG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS;QACjG,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,SAAS,CAAC,qCAAqC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACpK,IAAI,OAAO,CAAC,SAAS,KAAK,oBAAoB,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;WACxI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;WAClG,eAAe,CAAC,SAAS,KAAK,kBAAkB,IAAI,eAAe,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU;WACxG,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,eAAe,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW;WAClF,eAAe,CAAC,iBAAiB,KAAK,UAAU,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,aAAa;WAC7G,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ;WACpG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,EAAE,CAAC;QACtF,MAAM,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa;QACrH,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,UAAoB,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ;QAAE,MAAM,SAAS,CAAC,yEAAyE,CAAC,CAAC;IACpJ,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,eAAe,CAAC,MAAM,IAAI,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAAE,MAAM,SAAS,CAAC,yDAAyD,CAAC,CAAC;IAChM,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAC3H,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;eACvI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YAAE,MAAM,SAAS,CAAC,oDAAoD,CAAC,CAAC;IAC7K,CAAC;SAAM,IAAI,OAAO;QAAE,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;SAC3E,IAAI,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAC3K,OAAO;QACL,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAuC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,GAAY,EAAE,CAAC;QAC/Y,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe;QAClE,kBAAkB,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE;QACvF,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAiB,EAAE,SAAS,EAAE,YAAY,EAAE;QAClE,gBAAgB,EAAE,eAAe;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,EAAW;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE;QAC3B,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB;QAC5F,wBAAwB,EAAE,iCAAiC,EAAE,YAAY,EAAE,kBAAkB;QAC7F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,oBAAoB;QAC9D,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,YAAY;WAC7G,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;WAC/D,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;WAChE,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,+BAA+B,CAAC;WACrG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;WAC1E,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;WAC9E,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAAE,MAAM,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACzH,OAAO,OAAiC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA6B,EAAE,OAAoB,EAAE,IAAyB,EAAE,eAAyB;IACnI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,KAAK,YAAY;WAC7H,eAAe,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,mFAAmF,CAAC,CAAC;IAC7J,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB;eAC7E,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;eAC3I,OAAO,CAAC,KAAK,KAAK,YAAY,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;eAC/G,OAAO,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,sBAAsB,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM;eAC3F,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,sBAAsB,KAAK,CAAC,EAAE,CAAC;YAC/G,MAAM,SAAS,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,gCAAgC,CAAC,CAAC;QAC5J,IAAI,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;eAC5H,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,SAAS;eACzG,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5H,MAAM,SAAS,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE;QAC9B,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa;KAC9H,EAAE,0BAA0B,CAAC,CAAC;IAC/B,IAAI,OAAO,UAAU,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;WAClH,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;WAC7H,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;WAClG,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,MAAM,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACxJ,OAAO,UAAyC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE;QAC5B,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB;QAC3G,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa;KAC/E,EAAE,0BAA0B,CAAC,CAAC;IAC/B,IAAI,QAAQ,CAAC,SAAS,KAAK,kBAAkB;WACxC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;WAC/G,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;WACpG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/H,MAAM,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,QAAgD,CAAC;AAC1D,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,IAAuB,EAAE,KAAa,EAAE,WAA8B,EAAE;IACrG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,SAAS,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,MAAM,SAAS,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;IAC5K,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,IAAsC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClJ,SAAS,MAAM,CAAC,KAAc,IAAa,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrH,SAAS,QAAQ,CAAC,KAAc,IAAa,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5G,SAAS,WAAW,CAAC,KAAc,IAAa,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/G,SAAS,IAAI,CAAC,KAAc,IAAa,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpJ,SAAS,WAAW,CAAC,KAAc,EAAE,OAAe;IAClD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChK,CAAC;AACD,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;AAC5L,CAAC;AACD,SAAS,SAAS,CAAC,OAAe,IAAgB,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC"}