@openpond/evals 0.11.21 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/connected-evidence/codex-command-observations.js +81 -0
- package/dist/connected-evidence/contracts.js +13 -0
- package/dist/connected-evidence/git-file-contracts.js +16 -0
- package/dist/connected-evidence/git-file-proof.js +86 -0
- package/dist/connected-evidence/git-starting-state.js +81 -0
- package/dist/connected-evidence/git.js +2 -0
- package/dist/connected-evidence/imports.js +2 -1
- package/dist/connected-evidence/index.js +1 -0
- package/dist/connected-evidence/normalize.js +1 -0
- package/dist/connected-evidence/sources/codex-metadata.js +33 -0
- package/dist/connected-evidence/sources/codex.js +16 -2
- package/dist/graders.js +10 -4
- package/dist/javascript-verifier.js +1 -0
- package/dist/native-conversations/codex-window-inventory.js +6 -7
- package/dist/native-conversations/git-assets.js +61 -0
- package/dist/native-conversations/index.js +1 -0
- package/dist/prepared-process-isolation.js +131 -0
- package/dist/rewards.js +17 -5
- package/dist/tasksets.js +6 -0
- package/dist/types/builtin-benchmarks/harness-refiner.d.ts +4 -0
- package/dist/types/builtin-benchmarks/harness-refiner.d.ts.map +1 -1
- package/dist/types/conformance.d.ts +8 -0
- package/dist/types/conformance.d.ts.map +1 -1
- package/dist/types/connected-evidence/codex-command-observations.d.ts +15 -0
- package/dist/types/connected-evidence/codex-command-observations.d.ts.map +1 -0
- package/dist/types/connected-evidence/contracts.d.ts +22 -0
- package/dist/types/connected-evidence/contracts.d.ts.map +1 -1
- package/dist/types/connected-evidence/git-file-contracts.d.ts +18 -0
- package/dist/types/connected-evidence/git-file-contracts.d.ts.map +1 -0
- package/dist/types/connected-evidence/git-file-proof.d.ts +13 -0
- package/dist/types/connected-evidence/git-file-proof.d.ts.map +1 -0
- package/dist/types/connected-evidence/git-starting-state.d.ts +28 -0
- package/dist/types/connected-evidence/git-starting-state.d.ts.map +1 -0
- package/dist/types/connected-evidence/git.d.ts +3 -0
- package/dist/types/connected-evidence/git.d.ts.map +1 -0
- package/dist/types/connected-evidence/imports.d.ts.map +1 -1
- package/dist/types/connected-evidence/index.d.ts +1 -0
- package/dist/types/connected-evidence/index.d.ts.map +1 -1
- package/dist/types/connected-evidence/normalize.d.ts +1 -0
- package/dist/types/connected-evidence/normalize.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/claude-code.d.ts +10 -0
- package/dist/types/connected-evidence/sources/claude-code.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/codex-metadata.d.ts +10 -0
- package/dist/types/connected-evidence/sources/codex-metadata.d.ts.map +1 -0
- package/dist/types/connected-evidence/sources/codex.d.ts +10 -0
- package/dist/types/connected-evidence/sources/codex.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/grok-build.d.ts +10 -0
- package/dist/types/connected-evidence/sources/grok-build.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/history.d.ts +20 -0
- package/dist/types/connected-evidence/sources/history.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/opencode.d.ts +10 -0
- package/dist/types/connected-evidence/sources/opencode.d.ts.map +1 -1
- package/dist/types/connected-evidence/sources/pi.d.ts +10 -0
- package/dist/types/connected-evidence/sources/pi.d.ts.map +1 -1
- package/dist/types/execution-contracts.d.ts +8 -0
- package/dist/types/execution-contracts.d.ts.map +1 -1
- package/dist/types/graders.d.ts +3 -0
- package/dist/types/graders.d.ts.map +1 -1
- package/dist/types/javascript-verifier.d.ts +1 -0
- package/dist/types/javascript-verifier.d.ts.map +1 -1
- package/dist/types/learning/admission.d.ts +1 -0
- package/dist/types/learning/admission.d.ts.map +1 -1
- package/dist/types/learning/authoring-service.d.ts +2 -0
- package/dist/types/learning/authoring-service.d.ts.map +1 -1
- package/dist/types/learning/authoring.d.ts +8 -0
- package/dist/types/learning/authoring.d.ts.map +1 -1
- package/dist/types/learning/batch-service.d.ts +4 -0
- package/dist/types/learning/batch-service.d.ts.map +1 -1
- package/dist/types/learning/contracts.d.ts +17 -0
- package/dist/types/learning/contracts.d.ts.map +1 -1
- package/dist/types/learning/operations.d.ts +8 -0
- package/dist/types/learning/operations.d.ts.map +1 -1
- package/dist/types/learning/repository.d.ts +14 -0
- package/dist/types/learning/repository.d.ts.map +1 -1
- package/dist/types/learning/reward-calibration-closure.d.ts +9 -1
- package/dist/types/learning/reward-calibration-closure.d.ts.map +1 -1
- package/dist/types/learning/reward-checks.d.ts +2 -0
- package/dist/types/learning/reward-checks.d.ts.map +1 -1
- package/dist/types/learning/transport.d.ts +18 -0
- package/dist/types/learning/transport.d.ts.map +1 -1
- package/dist/types/native-conversations/codex-window-inventory.d.ts.map +1 -1
- package/dist/types/native-conversations/git-assets.d.ts +32 -0
- package/dist/types/native-conversations/git-assets.d.ts.map +1 -0
- package/dist/types/native-conversations/index.d.ts +1 -0
- package/dist/types/native-conversations/index.d.ts.map +1 -1
- package/dist/types/prepared-process-isolation.d.ts +5 -0
- package/dist/types/prepared-process-isolation.d.ts.map +1 -0
- package/dist/types/review-conformance.d.ts +5 -5
- package/dist/types/rewards.d.ts +9 -0
- package/dist/types/rewards.d.ts.map +1 -1
- package/dist/types/tasksets.d.ts +16 -0
- package/dist/types/tasksets.d.ts.map +1 -1
- package/package.json +6 -1
- package/schemas/learning/v1/binding.schema.json +8 -0
- package/schemas/learning/v1/command-request.schema.json +8 -0
- package/schemas/learning/v1/decision.schema.json +5 -1
- package/schemas/learning/v1/draft.schema.json +8 -0
- package/schemas/learning/v1/grade.schema.json +5 -1
- package/schemas/learning/v1/package.schema.json +113 -93
- package/schemas/learning/v1/reward_check.schema.json +2 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** Staged by the private verifier owner. Untrusted policy programs run with no
|
|
2
|
+
* capabilities as a different UID, outside the sealed private verifier tree.
|
|
3
|
+
* The parent must assess returned behavior; an exit code is never correctness. */
|
|
4
|
+
export const PREPARED_PROCESS_ISOLATION_SOURCE = String.raw `
|
|
5
|
+
import fs from "node:fs/promises";
|
|
6
|
+
import os from "node:os";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { randomInt } from "node:crypto";
|
|
10
|
+
|
|
11
|
+
const MAX_BYTES = 15 * 1024 * 1024, MAX_OUTPUT = 1024 * 1024;
|
|
12
|
+
const usedUsers = new Set();
|
|
13
|
+
const safePath = value => typeof value === "string" && value.length > 0 && value.length <= 2000
|
|
14
|
+
&& !value.startsWith("/") && !/[\\\x00-\x1f\x7f]/.test(value)
|
|
15
|
+
&& value.split("/").every(part => part && part !== "." && part !== ".." && !part.startsWith(".env"));
|
|
16
|
+
|
|
17
|
+
/** files contain only public original/policy bytes and a public invocation
|
|
18
|
+
* adapter. Never stage independent assertions, expected answers or checkers. */
|
|
19
|
+
export async function runPolicyProgram(input) {
|
|
20
|
+
const privateRoot = path.dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
if (process.getuid?.() !== 0 || !path.basename(privateRoot).startsWith(".openpond-reward-verifier-"))
|
|
22
|
+
throw new Error("policy_process_isolation_runtime_unavailable");
|
|
23
|
+
if (!Array.isArray(input.files) || input.files.length < 1 || input.files.length > 100
|
|
24
|
+
|| !safePath(input.entrypoint) || !input.files.some(file => file.path === input.entrypoint)
|
|
25
|
+
|| !Number.isSafeInteger(input.timeoutMs) || input.timeoutMs < 1 || input.timeoutMs > 60000
|
|
26
|
+
|| !Array.isArray(input.args ?? []) || (input.args ?? []).length > 100
|
|
27
|
+
|| (input.args ?? []).some(arg => typeof arg !== "string" || arg.length > 2000 || arg.includes("\0")))
|
|
28
|
+
throw new Error("policy_process_isolation_input_invalid");
|
|
29
|
+
let total = 0;
|
|
30
|
+
const paths = new Set();
|
|
31
|
+
const files = input.files.map(file => {
|
|
32
|
+
if (!safePath(file.path) || paths.has(file.path) || typeof file.base64 !== "string")
|
|
33
|
+
throw new Error("policy_process_isolation_file_invalid");
|
|
34
|
+
paths.add(file.path);
|
|
35
|
+
const bytes = Buffer.from(file.base64, "base64");
|
|
36
|
+
if (bytes.toString("base64") !== file.base64) throw new Error("policy_process_isolation_file_invalid");
|
|
37
|
+
total += bytes.length;
|
|
38
|
+
if (total > MAX_BYTES) throw new Error("policy_process_isolation_file_limit");
|
|
39
|
+
return { path: file.path, bytes };
|
|
40
|
+
});
|
|
41
|
+
// Directory access seals request JSON, checker modules, helper source and
|
|
42
|
+
// private artifacts before any untrusted program can be spawned.
|
|
43
|
+
await fs.chmod(privateRoot, 0o700);
|
|
44
|
+
const stat = await fs.stat(privateRoot);
|
|
45
|
+
if (stat.uid !== 0 || (stat.mode & 0o777) !== 0o700) throw new Error("policy_process_private_tree_not_sealed");
|
|
46
|
+
for (const executable of ["/usr/bin/setsid", "/usr/bin/setpriv", "/usr/local/bin/bun"])
|
|
47
|
+
await fs.access(executable, 1);
|
|
48
|
+
const directory = await fs.mkdtemp(path.join(os.tmpdir(), "openpond-policy-"));
|
|
49
|
+
let user;
|
|
50
|
+
do { user = randomInt(1000000, 2000000); } while (usedUsers.has(user));
|
|
51
|
+
usedUsers.add(user);
|
|
52
|
+
let child, timer, timedOut = false;
|
|
53
|
+
const kill = () => {
|
|
54
|
+
if (!child) return;
|
|
55
|
+
try { process.kill(-child.pid, "SIGKILL"); } catch {}
|
|
56
|
+
try { child.kill("SIGKILL"); } catch {}
|
|
57
|
+
};
|
|
58
|
+
try {
|
|
59
|
+
await fs.chmod(directory, 0o700);
|
|
60
|
+
await fs.chown(directory, user, user);
|
|
61
|
+
for (const file of files) {
|
|
62
|
+
const target = path.join(directory, file.path);
|
|
63
|
+
const parent = path.dirname(target);
|
|
64
|
+
await fs.mkdir(parent, { recursive: true, mode: 0o700 });
|
|
65
|
+
let current = parent;
|
|
66
|
+
while (current !== directory) {
|
|
67
|
+
await fs.chmod(current, 0o700); await fs.chown(current, user, user);
|
|
68
|
+
current = path.dirname(current);
|
|
69
|
+
}
|
|
70
|
+
await fs.writeFile(target, file.bytes, { mode: 0o600, flag: "wx" });
|
|
71
|
+
await fs.chown(target, user, user);
|
|
72
|
+
}
|
|
73
|
+
child = Bun.spawn(["/usr/bin/setsid", "/usr/bin/setpriv", "--reuid=" + user, "--regid=" + user, "--clear-groups",
|
|
74
|
+
"--no-new-privs", "--bounding-set=-all", "--inh-caps=-all", "--ambient-caps=-all",
|
|
75
|
+
"/usr/local/bin/bun", path.join(directory, input.entrypoint), ...(input.args ?? [])], {
|
|
76
|
+
cwd: directory, env: { PATH: "/usr/local/bin:/usr/bin:/bin", TMPDIR: directory }, stdout: "pipe", stderr: "pipe", stdin: "ignore",
|
|
77
|
+
});
|
|
78
|
+
timer = setTimeout(() => { timedOut = true; kill(); }, input.timeoutMs);
|
|
79
|
+
const read = async stream => {
|
|
80
|
+
const reader = stream.getReader(), chunks = [];
|
|
81
|
+
let bytes = 0;
|
|
82
|
+
try {
|
|
83
|
+
while (true) {
|
|
84
|
+
const item = await reader.read(); if (item.done) break;
|
|
85
|
+
bytes += item.value.byteLength;
|
|
86
|
+
if (bytes > MAX_OUTPUT) { kill(); throw new Error("policy_process_output_limit"); }
|
|
87
|
+
chunks.push(item.value);
|
|
88
|
+
}
|
|
89
|
+
return new TextDecoder("utf8", { fatal: true }).decode(Buffer.concat(chunks));
|
|
90
|
+
} finally { await reader.cancel(); reader.releaseLock(); }
|
|
91
|
+
};
|
|
92
|
+
const [stdout, stderr, exitCode] = await Promise.all([read(child.stdout), read(child.stderr), child.exited]);
|
|
93
|
+
return { stdout, stderr, exitCode, timedOut, isolation: { uid: user, gid: user, privateTreeSealed: true } };
|
|
94
|
+
} finally {
|
|
95
|
+
if (timer) clearTimeout(timer);
|
|
96
|
+
kill();
|
|
97
|
+
// A policy child can call setsid and escape its initial process group.
|
|
98
|
+
// Drain every process with this invocation's unique real UID before the
|
|
99
|
+
// next call; namespaces cannot grant a different outside UID or privilege.
|
|
100
|
+
try { await drainPolicyProcesses(user); }
|
|
101
|
+
finally { await fs.rm(directory, { recursive: true, force: true }); }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async function drainPolicyProcesses(user) {
|
|
106
|
+
const deadline = Date.now() + 2000;
|
|
107
|
+
let empty = 0;
|
|
108
|
+
while (Date.now() < deadline) {
|
|
109
|
+
const entries = (await fs.readdir("/proc")).filter(value => /^\d+$/.test(value));
|
|
110
|
+
if (entries.length > 10000) throw new Error("policy_process_inventory_limit");
|
|
111
|
+
let owned = 0;
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
let status;
|
|
114
|
+
try { status = await fs.readFile("/proc/" + entry + "/status", "utf8"); }
|
|
115
|
+
catch (error) { if (["ENOENT", "ESRCH"].includes(error.code)) continue; throw error; }
|
|
116
|
+
const ids = /^Uid:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/m.exec(status);
|
|
117
|
+
if (ids && ids.slice(1).some(value => Number(value) === user)) {
|
|
118
|
+
// Zombies cannot fork, inspect a subsequent invocation or hold files.
|
|
119
|
+
if (/^State:\s+Z/m.test(status)) continue;
|
|
120
|
+
owned++;
|
|
121
|
+
try { process.kill(Number(entry), "SIGKILL"); }
|
|
122
|
+
catch (error) { if (error.code !== "ESRCH") throw error; }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
empty = owned === 0 ? empty + 1 : 0;
|
|
126
|
+
if (empty >= 2) return;
|
|
127
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
128
|
+
}
|
|
129
|
+
throw new Error("policy_process_cleanup_unconfirmed");
|
|
130
|
+
}
|
|
131
|
+
`;
|
package/dist/rewards.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ImmutableAssetRefSchema, ImmutableReleaseRefSchema, ReleaseHashSchema,
|
|
|
4
4
|
import { gradeEvidence, GraderEvidenceSchema } from "./graders.js";
|
|
5
5
|
import { CustomVerifierGraderSpecSchema, DeterministicGraderSpecSchema, GraderSpecSchema, HumanGraderSpecSchema, ModelJudgeGraderSpecSchema } from "./tasksets.js";
|
|
6
6
|
import { assertBoundedTaskJson, validateTaskSchema } from "./task-schema.js";
|
|
7
|
-
const bindingFields = { id: true, version: true, weight: true, hardGate: true, rewardEligible: true, privileged: true };
|
|
7
|
+
const bindingFields = { taskIds: true, id: true, version: true, weight: true, hardGate: true, rewardEligible: true, privileged: true };
|
|
8
8
|
export const FeedbackKeySchema = z.string().regex(/^[a-z][a-z0-9_]{0,79}$/);
|
|
9
9
|
export function feedbackKeyForReward(reward) {
|
|
10
10
|
return reward.feedbackKey ?? `reward_${contentHash(reward.id).slice(0, 24)}`;
|
|
@@ -49,6 +49,7 @@ export const RewardNormalizationSchema = z.discriminatedUnion("kind", [
|
|
|
49
49
|
]);
|
|
50
50
|
export const RewardBindingSourceSchema = z.object({
|
|
51
51
|
graderId: ReleaseIdSchema,
|
|
52
|
+
taskIds: z.array(ReleaseIdSchema).min(1).max(10_000).refine(ids => new Set(ids).size === ids.length, "Task scope must be unique.").optional(),
|
|
52
53
|
reward: RewardReleaseRefSchema,
|
|
53
54
|
role: z.enum(["training", "evaluation"]),
|
|
54
55
|
normalization: RewardNormalizationSchema,
|
|
@@ -87,7 +88,7 @@ export const BoundRewardResultSchema = z.object({
|
|
|
87
88
|
graderId: ReleaseIdSchema,
|
|
88
89
|
reward: RewardReleaseRefSchema,
|
|
89
90
|
role: z.enum(["training", "evaluation"]),
|
|
90
|
-
status: z.enum(["scored", "pending", "unavailable", "failed"]),
|
|
91
|
+
status: z.enum(["scored", "pending", "unavailable", "failed", "not_applicable"]),
|
|
91
92
|
rawScore: z.number().finite().nullable(),
|
|
92
93
|
normalizedScore: z.number().min(0).max(1).nullable(),
|
|
93
94
|
passed: z.boolean().nullable(),
|
|
@@ -99,6 +100,7 @@ export const RewardCompositionContentSchema = z.object({
|
|
|
99
100
|
schemaVersion: z.literal("openpond.rewardComposition.v1"),
|
|
100
101
|
binding: RewardReleaseRefSchema,
|
|
101
102
|
taskHash: ReleaseHashSchema,
|
|
103
|
+
taskId: ReleaseIdSchema.optional(),
|
|
102
104
|
outputHash: ReleaseHashSchema,
|
|
103
105
|
results: z.array(BoundRewardResultSchema).max(100),
|
|
104
106
|
training: z.object({ status: z.enum(["scored", "pending", "unscorable", "not_configured"]), score: z.number().min(0).max(1).nullable(), passed: z.boolean().nullable() }).strict(),
|
|
@@ -149,6 +151,10 @@ export async function executeRewardBinding(input) {
|
|
|
149
151
|
for (const { source, reward } of resolved) {
|
|
150
152
|
input.signal?.throwIfAborted();
|
|
151
153
|
const result = { graderId: source.graderId, reward: source.reward, role: source.role, status: "unavailable", rawScore: null, normalizedScore: null, passed: null, evidenceHashes: [], message: null };
|
|
154
|
+
if (source.taskIds && !source.taskIds.includes(input.task.id)) {
|
|
155
|
+
results.push({ ...result, status: "not_applicable" });
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
152
158
|
try {
|
|
153
159
|
if (reward.implementation.kind === "human") {
|
|
154
160
|
result.status = "pending";
|
|
@@ -183,11 +189,13 @@ export async function executeRewardBinding(input) {
|
|
|
183
189
|
}
|
|
184
190
|
results.push(BoundRewardResultSchema.parse(result));
|
|
185
191
|
}
|
|
186
|
-
return composeBoundRewards({ binding: input.binding, taskHash: contentHash(input.task), outputHash: contentHash(input.evidence), results });
|
|
192
|
+
return composeBoundRewards({ binding: input.binding, ...(input.binding.sources.some(source => source.taskIds) ? { taskId: input.task.id } : {}), taskHash: contentHash(input.task), outputHash: contentHash(input.evidence), results });
|
|
187
193
|
}
|
|
188
194
|
export function composeBoundRewards(input) {
|
|
189
195
|
const binding = RewardBindingSchema.parse(input.binding);
|
|
190
196
|
assertRewardHash(binding);
|
|
197
|
+
if (binding.sources.some(source => source.taskIds) && !input.taskId)
|
|
198
|
+
throw new LearningDomainError("reward_task_scope_missing");
|
|
191
199
|
const results = input.results.map((result) => BoundRewardResultSchema.parse(result));
|
|
192
200
|
if (results.length !== binding.sources.length || new Set(results.map((result) => result.graderId)).size !== results.length)
|
|
193
201
|
throw new LearningDomainError("reward_result_set_incomplete");
|
|
@@ -195,6 +203,9 @@ export function composeBoundRewards(input) {
|
|
|
195
203
|
const result = results.find((candidate) => candidate.graderId === source.graderId);
|
|
196
204
|
if (!result || contentHash(result.reward) !== contentHash(source.reward) || result.role !== source.role)
|
|
197
205
|
throw new LearningDomainError("reward_result_binding_mismatch");
|
|
206
|
+
const applicable = !source.taskIds || source.taskIds.includes(input.taskId);
|
|
207
|
+
if (applicable === (result.status === "not_applicable") || !applicable && (result.graderEvidence || result.evidenceHashes.length || result.message !== null))
|
|
208
|
+
throw new LearningDomainError("reward_result_task_scope_mismatch");
|
|
198
209
|
if (result.graderEvidence) {
|
|
199
210
|
const { contentHash: evidenceHash, ...body } = result.graderEvidence;
|
|
200
211
|
if (contentHash(body) !== evidenceHash || !result.evidenceHashes.includes(evidenceHash)
|
|
@@ -219,6 +230,7 @@ export function composeBoundRewards(input) {
|
|
|
219
230
|
schemaVersion: "openpond.rewardComposition.v1",
|
|
220
231
|
binding: { id: binding.id, revision: binding.revision, contentHash: binding.contentHash },
|
|
221
232
|
taskHash: input.taskHash,
|
|
233
|
+
...(input.taskId ? { taskId: input.taskId } : {}),
|
|
222
234
|
outputHash: input.outputHash,
|
|
223
235
|
results,
|
|
224
236
|
training: aggregate("training"),
|
|
@@ -226,7 +238,7 @@ export function composeBoundRewards(input) {
|
|
|
226
238
|
});
|
|
227
239
|
return RewardCompositionSchema.parse({ ...content, contentHash: contentHash(content) });
|
|
228
240
|
function aggregate(role) {
|
|
229
|
-
const selected = binding.sources.filter((source) => source.role === role).map((source) => ({ source, result: results.find((candidate) => candidate.graderId === source.graderId) }));
|
|
241
|
+
const selected = binding.sources.filter((source) => source.role === role && (!source.taskIds || source.taskIds.includes(input.taskId))).map((source) => ({ source, result: results.find((candidate) => candidate.graderId === source.graderId) }));
|
|
230
242
|
if (!selected.length)
|
|
231
243
|
return { status: "not_configured", score: null, passed: null };
|
|
232
244
|
if (selected.some(({ source, result }) => source.required && result.status !== "scored" && result.status !== "pending"))
|
|
@@ -250,5 +262,5 @@ function withoutRewardHash(value) { const { contentHash: _hash, ...content } = v
|
|
|
250
262
|
function compileSource(source, reward) {
|
|
251
263
|
if (reward.implementation.kind === "learned_model")
|
|
252
264
|
throw new LearningDomainError("learned_reward_requires_model_execution_adapter");
|
|
253
|
-
return GraderSpecSchema.parse({ ...reward.implementation, id: source.graderId, version: String(reward.revision), weight: source.weight, hardGate: source.hardGate, rewardEligible: source.role === "training", privileged: source.privileged });
|
|
265
|
+
return GraderSpecSchema.parse({ ...reward.implementation, ...(source.taskIds ? { taskIds: source.taskIds } : {}), id: source.graderId, version: String(reward.revision), weight: source.weight, hardGate: source.hardGate, rewardEligible: source.role === "training", privileged: source.privileged });
|
|
254
266
|
}
|
package/dist/tasksets.js
CHANGED
|
@@ -28,6 +28,7 @@ export const EnvironmentContractSchema = z.object({
|
|
|
28
28
|
}).strict();
|
|
29
29
|
const GraderBaseSchema = z.object({
|
|
30
30
|
id: ReleaseIdSchema,
|
|
31
|
+
taskIds: z.array(ReleaseIdSchema).min(1).max(10_000).refine(ids => new Set(ids).size === ids.length, "Grader task IDs must be unique.").optional(),
|
|
31
32
|
version: z.string().trim().min(1).max(100),
|
|
32
33
|
weight: z.number().nonnegative().max(1_000).default(1),
|
|
33
34
|
hardGate: z.boolean().default(false),
|
|
@@ -120,6 +121,11 @@ export function validateTasksetRelease(input) {
|
|
|
120
121
|
path: "environmentRelease",
|
|
121
122
|
});
|
|
122
123
|
}
|
|
124
|
+
const taskIds = new Set(taskset.tasks.map(task => task.id));
|
|
125
|
+
for (const grader of taskset.graders)
|
|
126
|
+
if (grader.taskIds?.some(id => !taskIds.has(id))) {
|
|
127
|
+
issues.push({ code: "grader_task_missing", severity: "error", message: `Grader ${grader.id} refers to a task outside this release.`, path: "graders" });
|
|
128
|
+
}
|
|
123
129
|
const clusterSplits = new Map();
|
|
124
130
|
for (const task of taskset.tasks) {
|
|
125
131
|
if (taskset.metrics?.aggregation === "weighted_mean" && !Object.hasOwn(taskset.metrics.taskWeights, task.id)) {
|
|
@@ -73,6 +73,7 @@ export declare const harnessRefinerBenchmarkRelease: {
|
|
|
73
73
|
privileged: boolean;
|
|
74
74
|
kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
|
|
75
75
|
config: Record<string, unknown>;
|
|
76
|
+
taskIds?: string[] | undefined;
|
|
76
77
|
} | {
|
|
77
78
|
id: string;
|
|
78
79
|
version: string;
|
|
@@ -90,6 +91,7 @@ export declare const harnessRefinerBenchmarkRelease: {
|
|
|
90
91
|
visibility: "policy" | "verifier" | "host_private";
|
|
91
92
|
};
|
|
92
93
|
calibrationStatus: "pending" | "passed" | "failed";
|
|
94
|
+
taskIds?: string[] | undefined;
|
|
93
95
|
model?: {
|
|
94
96
|
providerId: string;
|
|
95
97
|
modelId: string;
|
|
@@ -114,6 +116,7 @@ export declare const harnessRefinerBenchmarkRelease: {
|
|
|
114
116
|
};
|
|
115
117
|
timeoutMs: number;
|
|
116
118
|
networkPolicy: "none";
|
|
119
|
+
taskIds?: string[] | undefined;
|
|
117
120
|
runtime?: "isolated_javascript" | "sandbox_process" | undefined;
|
|
118
121
|
exportName?: string | undefined;
|
|
119
122
|
} | {
|
|
@@ -133,6 +136,7 @@ export declare const harnessRefinerBenchmarkRelease: {
|
|
|
133
136
|
visibility: "policy" | "verifier" | "host_private";
|
|
134
137
|
};
|
|
135
138
|
reviewerRole: string;
|
|
139
|
+
taskIds?: string[] | undefined;
|
|
136
140
|
form?: {
|
|
137
141
|
schemaVersion: "openpond.humanForm.v1";
|
|
138
142
|
mode: "individual" | "pairwise";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-refiner.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-benchmarks/harness-refiner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B
|
|
1
|
+
{"version":3,"file":"harness-refiner.d.ts","sourceRoot":"","sources":["../../../../../src/builtin-benchmarks/harness-refiner.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqqD1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASzE,CAAC"}
|
|
@@ -183,6 +183,7 @@ export declare const genericToolConformance: {
|
|
|
183
183
|
privileged: boolean;
|
|
184
184
|
kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
|
|
185
185
|
config: Record<string, unknown>;
|
|
186
|
+
taskIds?: string[] | undefined;
|
|
186
187
|
} | {
|
|
187
188
|
id: string;
|
|
188
189
|
version: string;
|
|
@@ -200,6 +201,7 @@ export declare const genericToolConformance: {
|
|
|
200
201
|
visibility: "policy" | "verifier" | "host_private";
|
|
201
202
|
};
|
|
202
203
|
calibrationStatus: "pending" | "passed" | "failed";
|
|
204
|
+
taskIds?: string[] | undefined;
|
|
203
205
|
model?: {
|
|
204
206
|
providerId: string;
|
|
205
207
|
modelId: string;
|
|
@@ -224,6 +226,7 @@ export declare const genericToolConformance: {
|
|
|
224
226
|
};
|
|
225
227
|
timeoutMs: number;
|
|
226
228
|
networkPolicy: "none";
|
|
229
|
+
taskIds?: string[] | undefined;
|
|
227
230
|
runtime?: "isolated_javascript" | "sandbox_process" | undefined;
|
|
228
231
|
exportName?: string | undefined;
|
|
229
232
|
} | {
|
|
@@ -243,6 +246,7 @@ export declare const genericToolConformance: {
|
|
|
243
246
|
visibility: "policy" | "verifier" | "host_private";
|
|
244
247
|
};
|
|
245
248
|
reviewerRole: string;
|
|
249
|
+
taskIds?: string[] | undefined;
|
|
246
250
|
form?: {
|
|
247
251
|
schemaVersion: "openpond.humanForm.v1";
|
|
248
252
|
mode: "individual" | "pairwise";
|
|
@@ -568,6 +572,7 @@ export declare const marketingPortfolioConformance: {
|
|
|
568
572
|
privileged: boolean;
|
|
569
573
|
kind: "content" | "schema" | "artifact" | "runtime_event" | "state";
|
|
570
574
|
config: Record<string, unknown>;
|
|
575
|
+
taskIds?: string[] | undefined;
|
|
571
576
|
} | {
|
|
572
577
|
id: string;
|
|
573
578
|
version: string;
|
|
@@ -585,6 +590,7 @@ export declare const marketingPortfolioConformance: {
|
|
|
585
590
|
visibility: "policy" | "verifier" | "host_private";
|
|
586
591
|
};
|
|
587
592
|
calibrationStatus: "pending" | "passed" | "failed";
|
|
593
|
+
taskIds?: string[] | undefined;
|
|
588
594
|
model?: {
|
|
589
595
|
providerId: string;
|
|
590
596
|
modelId: string;
|
|
@@ -609,6 +615,7 @@ export declare const marketingPortfolioConformance: {
|
|
|
609
615
|
};
|
|
610
616
|
timeoutMs: number;
|
|
611
617
|
networkPolicy: "none";
|
|
618
|
+
taskIds?: string[] | undefined;
|
|
612
619
|
runtime?: "isolated_javascript" | "sandbox_process" | undefined;
|
|
613
620
|
exportName?: string | undefined;
|
|
614
621
|
} | {
|
|
@@ -628,6 +635,7 @@ export declare const marketingPortfolioConformance: {
|
|
|
628
635
|
visibility: "policy" | "verifier" | "host_private";
|
|
629
636
|
};
|
|
630
637
|
reviewerRole: string;
|
|
638
|
+
taskIds?: string[] | undefined;
|
|
631
639
|
form?: {
|
|
632
640
|
schemaVersion: "openpond.humanForm.v1";
|
|
633
641
|
mode: "individual" | "pairwise";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../../../src/conformance.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../../../src/conformance.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAEjC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Interpret recorded syntax, never execute source code. Only sequential static
|
|
2
|
+
* exec_command calls have an unambiguous correspondence with retained results. */
|
|
3
|
+
export declare function recordedCodexCommands(source: string): {
|
|
4
|
+
cmd: string;
|
|
5
|
+
maxOutputTokens: number;
|
|
6
|
+
cwd: string | null;
|
|
7
|
+
}[];
|
|
8
|
+
/** This deliberately bounded read-only prefix establishes that no earlier
|
|
9
|
+
* recorded command modified the checkout before the status observation. */
|
|
10
|
+
export declare function isRecordedReadOnlyInventory(cmd: string): boolean;
|
|
11
|
+
export declare function recordedCodexCommandResults(value: unknown, count: number): {
|
|
12
|
+
output: string;
|
|
13
|
+
originalTokenCount: number;
|
|
14
|
+
}[];
|
|
15
|
+
//# sourceMappingURL=codex-command-observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-command-observations.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/codex-command-observations.ts"],"names":[],"mappings":"AAcA;kFACkF;AAClF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM;SAGrB,MAAM;qBAAmB,MAAM;SAAO,MAAM,GAAG,IAAI;IAiCjF;AAED;2EAC2E;AAC3E,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,WAEtD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;;;IAkBxE"}
|
|
@@ -111,6 +111,18 @@ export declare const ConnectedBoundarySchema: z.ZodObject<{
|
|
|
111
111
|
gaps: z.ZodArray<z.ZodString>;
|
|
112
112
|
}, z.core.$strict>;
|
|
113
113
|
}, z.core.$strict>;
|
|
114
|
+
/** Source-reported repository identity is reconstruction evidence, not an
|
|
115
|
+
* admitted checkout or proof that the working tree was clean. */
|
|
116
|
+
export declare const ConnectedRepositoryContextSchema: z.ZodObject<{
|
|
117
|
+
schemaVersion: z.ZodLiteral<"openpond.connectedRepositoryContext.v1">;
|
|
118
|
+
kind: z.ZodLiteral<"git">;
|
|
119
|
+
commitHash: z.ZodString;
|
|
120
|
+
branch: z.ZodNullable<z.ZodString>;
|
|
121
|
+
recordedAt: z.ZodNullable<z.ZodString>;
|
|
122
|
+
sourceFileHash: z.ZodString;
|
|
123
|
+
metadataHash: z.ZodString;
|
|
124
|
+
workingDirectoryHash: z.ZodOptional<z.ZodString>;
|
|
125
|
+
}, z.core.$strict>;
|
|
114
126
|
export declare const ConnectedSessionSchema: z.ZodObject<{
|
|
115
127
|
schemaVersion: z.ZodLiteral<"openpond.connectedEvidence.v1">;
|
|
116
128
|
normalizerVersion: z.ZodLiteral<"connected-evidence-1">;
|
|
@@ -134,6 +146,16 @@ export declare const ConnectedSessionSchema: z.ZodObject<{
|
|
|
134
146
|
machineId: z.ZodString;
|
|
135
147
|
sourceInstanceId: z.ZodString;
|
|
136
148
|
}, z.core.$strict>>;
|
|
149
|
+
repositoryContext: z.ZodOptional<z.ZodObject<{
|
|
150
|
+
schemaVersion: z.ZodLiteral<"openpond.connectedRepositoryContext.v1">;
|
|
151
|
+
kind: z.ZodLiteral<"git">;
|
|
152
|
+
commitHash: z.ZodString;
|
|
153
|
+
branch: z.ZodNullable<z.ZodString>;
|
|
154
|
+
recordedAt: z.ZodNullable<z.ZodString>;
|
|
155
|
+
sourceFileHash: z.ZodString;
|
|
156
|
+
metadataHash: z.ZodString;
|
|
157
|
+
workingDirectoryHash: z.ZodOptional<z.ZodString>;
|
|
158
|
+
}, z.core.$strict>>;
|
|
137
159
|
sourceFiles: z.ZodArray<z.ZodObject<{
|
|
138
160
|
path: z.ZodString;
|
|
139
161
|
contentHash: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B,EAAG,+BAAwC,CAAC;AACnF,eAAO,MAAM,4BAA4B,EAAG,sBAA+B,CAAC;AAC5E,eAAO,MAAM,yBAAyB;;;;;;;;;CACwF,CAAC;AAK/H,eAAO,MAAM,yBAAyB;;;;;;;;;;;EAAmI,CAAC;AAC1K,eAAO,MAAM,oBAAoB;;;;;;;;;;;kBAGtB,CAAC;AACZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AACZ,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQzB,CAAC;AACZ,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,0BAA0B,EAAG,+BAAwC,CAAC;AACnF,eAAO,MAAM,4BAA4B,EAAG,sBAA+B,CAAC;AAC5E,eAAO,MAAM,yBAAyB;;;;;;;;;CACwF,CAAC;AAK/H,eAAO,MAAM,yBAAyB;;;;;;;;;;;EAAmI,CAAC;AAC1K,eAAO,MAAM,oBAAoB;;;;;;;;;;;kBAGtB,CAAC;AACZ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAMtB,CAAC;AACZ,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAQzB,CAAC;AACZ;iEACiE;AACjE,eAAO,MAAM,gCAAgC;;;;;;;;;kBASlC,CAAC;AACZ,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWxB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,WAK/D;AAkBD;mFACmF;AACnF,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAE7G;AACD,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKjF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** A Git object proof pins bytes to recorded history. It does not establish
|
|
3
|
+
* that the historical working tree was clean or that these are all dependencies. */
|
|
4
|
+
export declare const ConnectedGitFileProofSchema: z.ZodObject<{
|
|
5
|
+
schemaVersion: z.ZodLiteral<"openpond.connectedGitFileProof.v1">;
|
|
6
|
+
path: z.ZodString;
|
|
7
|
+
commit: z.ZodObject<{
|
|
8
|
+
hash: z.ZodString;
|
|
9
|
+
base64: z.ZodString;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
trees: z.ZodArray<z.ZodObject<{
|
|
12
|
+
hash: z.ZodString;
|
|
13
|
+
base64: z.ZodString;
|
|
14
|
+
}, z.core.$strict>>;
|
|
15
|
+
contentsBase64: z.ZodString;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
export type ConnectedGitFileProof = z.infer<typeof ConnectedGitFileProofSchema>;
|
|
18
|
+
//# sourceMappingURL=git-file-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-file-contracts.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-file-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB;oFACoF;AACpF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;kBAM7B,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./git-file-contracts.js";
|
|
2
|
+
/** The caller must supply repositoryContext from an authorized, hash-verified
|
|
3
|
+
* connected snapshot. No filesystem access or caller-selected Git command occurs. */
|
|
4
|
+
export declare function verifyConnectedGitFileProof(repositoryContext: unknown, raw: unknown): {
|
|
5
|
+
path: string;
|
|
6
|
+
commitHash: string;
|
|
7
|
+
gitObjectHash: string;
|
|
8
|
+
mode: string;
|
|
9
|
+
sizeBytes: number;
|
|
10
|
+
sha256: string;
|
|
11
|
+
contentsBase64: string;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=git-file-proof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-file-proof.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-file-proof.ts"],"names":[],"mappings":"AAEA,cAAc,yBAAyB,CAAC;AAoCxC;qFACqF;AACrF,wBAAgB,2BAA2B,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;;;;;;;;EAwCnF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Verify only the original first-tool boundary. Later requests need their own
|
|
2
|
+
* captured state. Both the repository context and observations come from the
|
|
3
|
+
* authorized immutable snapshot, never caller-supplied cleanliness claims. */
|
|
4
|
+
export declare function verifyConnectedGitStartingAssets(input: {
|
|
5
|
+
session: unknown;
|
|
6
|
+
boundaryId: string;
|
|
7
|
+
proofs: unknown[];
|
|
8
|
+
}): {
|
|
9
|
+
schemaVersion: "openpond.connectedGitStartingAssets.v1";
|
|
10
|
+
sessionHash: string;
|
|
11
|
+
boundaryId: string;
|
|
12
|
+
inputHash: string;
|
|
13
|
+
revisionHash: string;
|
|
14
|
+
commitHash: string;
|
|
15
|
+
observationHash: string;
|
|
16
|
+
selectedPathsUnmodified: true;
|
|
17
|
+
dependencyClosureQualified: false;
|
|
18
|
+
assets: {
|
|
19
|
+
path: string;
|
|
20
|
+
commitHash: string;
|
|
21
|
+
gitObjectHash: string;
|
|
22
|
+
mode: string;
|
|
23
|
+
sizeBytes: number;
|
|
24
|
+
sha256: string;
|
|
25
|
+
contentsBase64: string;
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=git-starting-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-starting-state.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git-starting-state.ts"],"names":[],"mappings":"AA2BA;;8EAE8E;AAC9E,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE;;;;;;;;;;;;;;;;;;;EAiDlH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/git.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,mBAAmB,EACnB,aAAa,GAAG,aAAa,CAC9B,CAAC;AACF,oFAAoF;AACpF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,UAExE;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,gCAAgC,CAAC;IAChD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/imports.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,mBAAmB,EACnB,aAAa,GAAG,aAAa,CAC9B,CAAC;AACF,oFAAoF;AACpF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mBAAmB,UAExE;AACD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,gCAAgC,CAAC;IAChD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;KAAE,EAAE,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,GAAG,kBAAkB,CAiJrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mCAAmC,CAAC;AAClD,cAAc,yBAAyB,CAAC"}
|
|
@@ -24,6 +24,7 @@ export declare function normalizeConnectedSession(input: {
|
|
|
24
24
|
machineId: string;
|
|
25
25
|
sourceInstanceId: string;
|
|
26
26
|
};
|
|
27
|
+
repositoryContext?: ConnectedSession["repositoryContext"];
|
|
27
28
|
}): ConnectedSession;
|
|
28
29
|
export declare function connectedJsonLines(file: ConnectedFile): Record<string, unknown>[];
|
|
29
30
|
export declare function object(value: unknown): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/normalize.ts"],"names":[],"mappings":"AACA,OAAO,EACmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE3I,qBAAa,uCAAwC,SAAQ,KAAK;;CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,SAAS,GAAG,cAA+B,GAAG,MAAM,GAAG,IAAI,CAIpH;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa;;;;EAExD;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1G,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACjK,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../../src/connected-evidence/normalize.ts"],"names":[],"mappings":"AACA,OAAO,EACmB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE3I,qBAAa,uCAAwC,SAAQ,KAAK;;CAEjE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,SAAS,GAAG,cAA+B,GAAG,MAAM,GAAG,IAAI,CAIpH;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa;;;;EAExD;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1G,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACjK,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;IACjG,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;CAC3D,GAAG,gBAAgB,CAwDnB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAgBjF;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9D;AACD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,cAAc,CAEtH;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAsD"}
|
|
@@ -74,5 +74,15 @@ export declare function parseClaudeSession(file: ConnectedFile, rows: Record<str
|
|
|
74
74
|
machineId: string;
|
|
75
75
|
sourceInstanceId: string;
|
|
76
76
|
} | undefined;
|
|
77
|
+
repositoryContext?: {
|
|
78
|
+
schemaVersion: "openpond.connectedRepositoryContext.v1";
|
|
79
|
+
kind: "git";
|
|
80
|
+
commitHash: string;
|
|
81
|
+
branch: string | null;
|
|
82
|
+
recordedAt: string | null;
|
|
83
|
+
sourceFileHash: string;
|
|
84
|
+
metadataHash: string;
|
|
85
|
+
workingDirectoryHash?: string | undefined;
|
|
86
|
+
} | undefined;
|
|
77
87
|
};
|
|
78
88
|
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/claude-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCvG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Forked Codex rollouts retain their own header followed by ancestor headers.
|
|
2
|
+
* Only the declared, contiguous ancestry is metadata for that source. */
|
|
3
|
+
export declare class CodexMetadataChain {
|
|
4
|
+
metadata: Record<string, unknown> | null;
|
|
5
|
+
private parentId;
|
|
6
|
+
private closed;
|
|
7
|
+
private readonly ids;
|
|
8
|
+
accept(row: Record<string, unknown>): boolean;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=codex-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-metadata.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex-metadata.ts"],"names":[],"mappings":"AAAA;yEACyE;AACzE,qBAAa,kBAAkB;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IAEzC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;CAgB9C"}
|
|
@@ -74,5 +74,15 @@ export declare function parseCodexSession(file: ConnectedFile, rows: Record<stri
|
|
|
74
74
|
machineId: string;
|
|
75
75
|
sourceInstanceId: string;
|
|
76
76
|
} | undefined;
|
|
77
|
+
repositoryContext?: {
|
|
78
|
+
schemaVersion: "openpond.connectedRepositoryContext.v1";
|
|
79
|
+
kind: "git";
|
|
80
|
+
commitHash: string;
|
|
81
|
+
branch: string | null;
|
|
82
|
+
recordedAt: string | null;
|
|
83
|
+
sourceFileHash: string;
|
|
84
|
+
metadataHash: string;
|
|
85
|
+
workingDirectoryHash?: string | undefined;
|
|
86
|
+
} | undefined;
|
|
77
87
|
};
|
|
78
88
|
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMrE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CrF"}
|
|
@@ -75,5 +75,15 @@ export declare function parseGrokBuildSession(file: ConnectedFile, rows: Record<
|
|
|
75
75
|
machineId: string;
|
|
76
76
|
sourceInstanceId: string;
|
|
77
77
|
} | undefined;
|
|
78
|
+
repositoryContext?: {
|
|
79
|
+
schemaVersion: "openpond.connectedRepositoryContext.v1";
|
|
80
|
+
kind: "git";
|
|
81
|
+
commitHash: string;
|
|
82
|
+
branch: string | null;
|
|
83
|
+
recordedAt: string | null;
|
|
84
|
+
sourceFileHash: string;
|
|
85
|
+
metadataHash: string;
|
|
86
|
+
workingDirectoryHash?: string | undefined;
|
|
87
|
+
} | undefined;
|
|
78
88
|
};
|
|
79
89
|
//# sourceMappingURL=grok-build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grok-build.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/grok-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrE,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"grok-build.d.ts","sourceRoot":"","sources":["../../../../../../src/connected-evidence/sources/grok-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrE,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4JhC"}
|