@codetreker/daynight 0.32.1 → 0.37.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -29
- package/dist/api/client.d.ts +7 -1
- package/dist/api/client.js +117 -21
- package/dist/api/client.js.map +1 -1
- package/dist/api/json-source.d.ts +3 -0
- package/dist/api/json-source.js +113 -0
- package/dist/api/json-source.js.map +1 -0
- package/dist/api/parse.d.ts +2 -1
- package/dist/api/parse.js +16 -1
- package/dist/api/parse.js.map +1 -1
- package/dist/api/thread.d.ts +6 -0
- package/dist/api/thread.js +79 -0
- package/dist/api/thread.js.map +1 -0
- package/dist/api/types.d.ts +50 -0
- package/dist/cli/application.js +12 -2
- package/dist/cli/application.js.map +1 -1
- package/dist/cli/context.d.ts +9 -1
- package/dist/cli/context.js +3 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/schema.js +10 -10
- package/dist/cli/schema.js.map +1 -1
- package/dist/commands/controller/providers/projection.js +12 -0
- package/dist/commands/controller/providers/projection.js.map +1 -1
- package/dist/commands/server/runtime.d.ts +10 -1
- package/dist/commands/server/runtime.js +24 -7
- package/dist/commands/server/runtime.js.map +1 -1
- package/dist/commands/skill/skills/using-daynight/SKILL.md +4 -2
- package/dist/commands/skill/skills/using-daynight/references/authorization.md +1 -1
- package/dist/commands/skill/skills/using-daynight/references/handbook.md +4 -1
- package/dist/commands/skill/skills/using-daynight/references/task-content.md +7 -4
- package/dist/commands/skill/skills/using-daynight/references/task-management.md +56 -6
- package/dist/commands/skill/skills/using-daynight/references/write-safety.md +22 -3
- package/dist/commands/skill/usage.md +82 -7
- package/dist/commands/task/command.js +26 -3
- package/dist/commands/task/command.js.map +1 -1
- package/dist/commands/task/definition.js +40 -6
- package/dist/commands/task/definition.js.map +1 -1
- package/dist/commands/task/rendering.js +4 -0
- package/dist/commands/task/rendering.js.map +1 -1
- package/dist/commands/task/thread-diagnostics.d.ts +5 -0
- package/dist/commands/task/thread-diagnostics.js +32 -0
- package/dist/commands/task/thread-diagnostics.js.map +1 -0
- package/dist/commands/task/thread-rendering.d.ts +8 -0
- package/dist/commands/task/thread-rendering.js +80 -0
- package/dist/commands/task/thread-rendering.js.map +1 -0
- package/dist/commands/task/thread.d.ts +11 -0
- package/dist/commands/task/thread.js +74 -0
- package/dist/commands/task/thread.js.map +1 -0
- package/dist/commands/worker/coordinator.js +14 -0
- package/dist/commands/worker/coordinator.js.map +1 -1
- package/dist/commands/worker/remote.js +3 -4
- package/dist/commands/worker/remote.js.map +1 -1
- package/dist/commands/worker/remove-worktree-contents.d.ts +3 -0
- package/dist/commands/worker/remove-worktree-contents.js +106 -0
- package/dist/commands/worker/remove-worktree-contents.js.map +1 -0
- package/dist/commands/worker/worktrees.js +69 -23
- package/dist/commands/worker/worktrees.js.map +1 -1
- package/dist/platform/diagnostics.d.ts +5 -0
- package/dist/platform/diagnostics.js +12 -0
- package/dist/platform/diagnostics.js.map +1 -1
- package/dist/session/codex-subagent-activity.d.ts +4 -0
- package/dist/session/codex-subagent-activity.js +13 -0
- package/dist/session/codex-subagent-activity.js.map +1 -0
- package/dist/session/v2/archive.d.ts +6 -0
- package/dist/session/v2/archive.js +163 -0
- package/dist/session/v2/archive.js.map +1 -0
- package/dist/session/v2/protocol.d.ts +19 -0
- package/dist/session/v2/protocol.js +260 -0
- package/dist/session/v2/protocol.js.map +1 -0
- package/dist/session/v2/responsibility.d.ts +3 -0
- package/dist/session/v2/responsibility.js +12 -0
- package/dist/session/v2/responsibility.js.map +1 -0
- package/dist/session/v2/types.d.ts +293 -0
- package/dist/session/v2/types.js +2 -0
- package/dist/session/v2/types.js.map +1 -0
- package/dist/session/v2/values.d.ts +59 -0
- package/dist/session/v2/values.js +201 -0
- package/dist/session/v2/values.js.map +1 -0
- package/package.json +5 -3
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// These labels describe the parent operation, not the child session's outcome.
|
|
2
|
+
export function codexSubagentActivity(value) {
|
|
3
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
4
|
+
return null;
|
|
5
|
+
const item = value;
|
|
6
|
+
if (item.type !== "subAgentActivity" || typeof item.id !== "string" || !item.id)
|
|
7
|
+
return null;
|
|
8
|
+
const text = (key) => typeof item[key] === "string" ? item[key] : "";
|
|
9
|
+
const kind = text("kind");
|
|
10
|
+
const name = kind === "started" ? "Start subagent" : kind === "interacted" ? "Interact with subagent" : kind === "interrupted" ? "Interrupt subagent" : "Subagent activity";
|
|
11
|
+
return { name, input: JSON.stringify({ path: text("agentPath"), agentThreadId: text("agentThreadId"), activityKind: kind, model: text("model"), reasoningEffort: text("reasoningEffort") }, null, 2) };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=codex-subagent-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-subagent-activity.js","sourceRoot":"","sources":["../../src/session/codex-subagent-activity.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7F,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC5K,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACzM,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SessionV2Archive } from "./types.js";
|
|
2
|
+
export type { SessionV2Archive, SessionV2BoundaryGap, SessionV2BoundaryEndpoint, SessionV2IntervalGap, SessionV2UnavailableRun, SessionV2FrameFile, SessionV2FrameIndex, SessionV2Gap, SessionV2Segment } from "./types.js";
|
|
3
|
+
/** Validates all references and decoded frames; call the byte decoder to also verify hashes. */
|
|
4
|
+
export declare const parseSessionV2Archive: (value: unknown) => SessionV2Archive;
|
|
5
|
+
export declare const verifySessionV2Archive: (archive: SessionV2Archive) => Promise<void>;
|
|
6
|
+
export declare const decodeSessionV2Archive: (input: string | Uint8Array) => Promise<SessionV2Archive>;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { assertNativeSessionIdProgression, assertTerminalBinding, parseSessionV2Owner, parseSessionV2Runs, parseSessionV2UnavailableEvidence, parseTerminalBinding, parseTerminalFrame } from "./protocol.js";
|
|
2
|
+
import { SESSION_V2_LIMITS, byteLength, canonicalSessionJson, choice, decodeStrictSessionJson, exact, fail, hash, hashSessionBytes, list, literal, nullable, seq, text, timestamp, unique, utf8, uuid } from "./values.js";
|
|
3
|
+
const inRange = (value, start, end) => Date.parse(value) >= Date.parse(start) && Date.parse(value) <= Date.parse(end);
|
|
4
|
+
const parseSegment = (value) => {
|
|
5
|
+
const o = exact(value, ["segmentId", "segmentOrdinal", "executionGeneration", "binding", "startedAt", "endedAt", "durationMs"]);
|
|
6
|
+
return { segmentId: uuid(o.segmentId), segmentOrdinal: seq(o.segmentOrdinal), executionGeneration: seq(o.executionGeneration), binding: parseTerminalBinding(o.binding), startedAt: timestamp(o.startedAt), endedAt: timestamp(o.endedAt), durationMs: seq(o.durationMs, true) };
|
|
7
|
+
};
|
|
8
|
+
const parseFile = (value) => {
|
|
9
|
+
const o = exact(value, ["fileId", "segmentId", "frameSeq", "sha256", "byteLength", "data"]);
|
|
10
|
+
return { fileId: uuid(o.fileId), segmentId: uuid(o.segmentId), frameSeq: seq(o.frameSeq), sha256: hash(o.sha256), byteLength: byteLength(o.byteLength, SESSION_V2_LIMITS.frameMaxBytes), data: text(o.data, SESSION_V2_LIMITS.frameMaxBytes) };
|
|
11
|
+
};
|
|
12
|
+
const parseIndex = (value) => {
|
|
13
|
+
const o = exact(value, ["segmentId", "frameSeq", "fileId", "firstElapsedMs", "lastElapsedMs"]);
|
|
14
|
+
return { segmentId: uuid(o.segmentId), frameSeq: seq(o.frameSeq), fileId: uuid(o.fileId), firstElapsedMs: seq(o.firstElapsedMs, true), lastElapsedMs: seq(o.lastElapsedMs, true) };
|
|
15
|
+
};
|
|
16
|
+
const parseEndpoint = (value) => {
|
|
17
|
+
const o = exact(value, ["executionGeneration", "segmentId"]);
|
|
18
|
+
return { executionGeneration: seq(o.executionGeneration), segmentId: nullable(o.segmentId, uuid) };
|
|
19
|
+
};
|
|
20
|
+
const parseGap = (value) => {
|
|
21
|
+
if (value && typeof value === "object" && Object.hasOwn(value, "kind")) {
|
|
22
|
+
const o = exact(value, ["kind", "reason", "from", "to"]);
|
|
23
|
+
return { kind: literal(o.kind, "boundary"), reason: literal(o.reason, "restart"), from: parseEndpoint(o.from), to: parseEndpoint(o.to) };
|
|
24
|
+
}
|
|
25
|
+
const o = exact(value, ["segmentId", "reason", "startElapsedMs", "endElapsedMs"]);
|
|
26
|
+
return { segmentId: uuid(o.segmentId), reason: choice(o.reason, ["restart", "read_interrupted", "recording_limit", "checkpoint_lost"]), startElapsedMs: seq(o.startElapsedMs, true), endElapsedMs: nullable(o.endElapsedMs, value => seq(value, true)) };
|
|
27
|
+
};
|
|
28
|
+
const parseUnavailableRun = (value) => {
|
|
29
|
+
const o = exact(value, ["executionGeneration", "reason", "evidence"]), reason = choice(o.reason, ["recording_not_enabled", "ended_before_first_sample"]);
|
|
30
|
+
return { executionGeneration: seq(o.executionGeneration), reason, evidence: parseSessionV2UnavailableEvidence(o.evidence, reason) };
|
|
31
|
+
};
|
|
32
|
+
/** Validates all references and decoded frames; call the byte decoder to also verify hashes. */
|
|
33
|
+
export const parseSessionV2Archive = (value) => {
|
|
34
|
+
const o = exact(value, ["schemaVersion", "projectionVersion", "contentKind", "agentControlMode", "sessionId", "claimId", "executionGeneration", "owner", "finalizationId", "startedAt", "endedAt", "completeness", "policy", "runs", "segments", "files", "index", "gaps", "unavailableRuns"]);
|
|
35
|
+
if (o.schemaVersion !== 2 || o.projectionVersion !== 1)
|
|
36
|
+
return fail("unsupported_protocol");
|
|
37
|
+
if (o.contentKind !== "terminal_recording" || o.agentControlMode !== "herdr")
|
|
38
|
+
return fail("unsupported_content_kind");
|
|
39
|
+
const policy = exact(o.policy, ["sampleIntervalMs", "checkpointIntervalMs"]), generation = seq(o.executionGeneration);
|
|
40
|
+
const archive = { schemaVersion: 2, projectionVersion: 1, contentKind: "terminal_recording", agentControlMode: "herdr", sessionId: uuid(o.sessionId), claimId: uuid(o.claimId), executionGeneration: generation, owner: parseSessionV2Owner(o.owner), finalizationId: uuid(o.finalizationId), startedAt: timestamp(o.startedAt), endedAt: timestamp(o.endedAt), completeness: choice(o.completeness, ["complete", "partial"]), policy: { sampleIntervalMs: literal(policy.sampleIntervalMs, 350), checkpointIntervalMs: literal(policy.checkpointIntervalMs, 5000) }, runs: parseSessionV2Runs(o.runs, generation, true), segments: unique(list(o.segments, parseSegment, SESSION_V2_LIMITS.maxSegments, 1), s => s.segmentId), files: unique(list(o.files, parseFile, SESSION_V2_LIMITS.maxFrames, 1), f => f.fileId), index: unique(list(o.index, parseIndex, SESSION_V2_LIMITS.maxFrames, 1), f => f.fileId), gaps: list(o.gaps, parseGap, SESSION_V2_LIMITS.maxGaps), unavailableRuns: unique(list(o.unavailableRuns, parseUnavailableRun, SESSION_V2_LIMITS.maxRuns), r => r.executionGeneration) };
|
|
41
|
+
if (Date.parse(archive.endedAt) < Date.parse(archive.startedAt) || canonicalSessionJson(archive.owner) !== canonicalSessionJson(archive.runs[0].owner) || (archive.completeness === "partial") !== (archive.gaps.length > 0))
|
|
42
|
+
return fail("source_corrupt");
|
|
43
|
+
const segments = new Map(archive.segments.map(s => [s.segmentId, s])), files = new Map(archive.files.map(f => [f.fileId, f]));
|
|
44
|
+
let ordinal = 0n, segmentGeneration = 0n;
|
|
45
|
+
for (const segment of archive.segments) {
|
|
46
|
+
const run = archive.runs.find(r => r.executionGeneration === segment.executionGeneration);
|
|
47
|
+
if (!run || BigInt(segment.executionGeneration) < segmentGeneration || BigInt(segment.segmentOrdinal) <= ordinal || !run.segmentIds.includes(segment.segmentId) || !inRange(segment.startedAt, run.startedAt, run.stoppedAt) || !inRange(segment.endedAt, segment.startedAt, run.stoppedAt))
|
|
48
|
+
return fail("source_corrupt");
|
|
49
|
+
assertTerminalBinding(run.binding, segment.binding);
|
|
50
|
+
ordinal = BigInt(segment.segmentOrdinal);
|
|
51
|
+
segmentGeneration = BigInt(segment.executionGeneration);
|
|
52
|
+
}
|
|
53
|
+
if (archive.segments[0].segmentOrdinal !== "1")
|
|
54
|
+
return fail("source_corrupt");
|
|
55
|
+
let nativeSession = null;
|
|
56
|
+
for (const run of archive.runs) {
|
|
57
|
+
assertNativeSessionIdProgression(nativeSession, run.binding.nativeSessionId);
|
|
58
|
+
nativeSession = run.binding.nativeSessionId;
|
|
59
|
+
for (const segment of archive.segments.filter(s => s.executionGeneration === run.executionGeneration)) {
|
|
60
|
+
assertNativeSessionIdProgression(nativeSession, segment.binding.nativeSessionId);
|
|
61
|
+
nativeSession = segment.binding.nativeSessionId;
|
|
62
|
+
}
|
|
63
|
+
assertNativeSessionIdProgression(nativeSession, run.stopProof.binding.nativeSessionId);
|
|
64
|
+
nativeSession = run.stopProof.binding.nativeSessionId;
|
|
65
|
+
if (!inRange(run.startedAt, archive.startedAt, archive.endedAt) || !inRange(run.stoppedAt, archive.startedAt, archive.endedAt) || canonicalSessionJson(run.segmentIds) !== canonicalSessionJson(archive.segments.filter(s => s.executionGeneration === run.executionGeneration).map(s => s.segmentId)))
|
|
66
|
+
return fail("source_corrupt");
|
|
67
|
+
}
|
|
68
|
+
const frames = new Map();
|
|
69
|
+
for (const file of archive.files) {
|
|
70
|
+
const segment = segments.get(file.segmentId);
|
|
71
|
+
if (!segment || String(utf8.encode(file.data).length) !== file.byteLength)
|
|
72
|
+
return fail("source_corrupt");
|
|
73
|
+
const frame = parseTerminalFrame(decodeStrictSessionJson(file.data, SESSION_V2_LIMITS.frameMaxBytes));
|
|
74
|
+
if (frame.frameSeq !== file.frameSeq || !inRange(frame.capturedAt, segment.startedAt, segment.endedAt))
|
|
75
|
+
return fail("source_corrupt");
|
|
76
|
+
frames.set(file.fileId, frame);
|
|
77
|
+
}
|
|
78
|
+
let previous;
|
|
79
|
+
for (const entry of archive.index) {
|
|
80
|
+
const segment = segments.get(entry.segmentId), file = files.get(entry.fileId), frame = frames.get(entry.fileId);
|
|
81
|
+
if (!segment || !file || !frame || file.segmentId !== entry.segmentId || file.frameSeq !== entry.frameSeq || entry.firstElapsedMs !== frame.elapsedMs || BigInt(entry.lastElapsedMs) < BigInt(entry.firstElapsedMs) || BigInt(entry.lastElapsedMs) > BigInt(segment.durationMs))
|
|
82
|
+
return fail("source_corrupt");
|
|
83
|
+
if (previous) {
|
|
84
|
+
const previousOrdinal = BigInt(segments.get(previous.segmentId).segmentOrdinal), currentOrdinal = BigInt(segment.segmentOrdinal);
|
|
85
|
+
if (currentOrdinal < previousOrdinal || currentOrdinal === previousOrdinal && (BigInt(entry.frameSeq) <= BigInt(previous.frameSeq) || BigInt(entry.firstElapsedMs) <= BigInt(previous.lastElapsedMs)))
|
|
86
|
+
return fail("source_corrupt");
|
|
87
|
+
}
|
|
88
|
+
previous = entry;
|
|
89
|
+
}
|
|
90
|
+
if (archive.index.length !== archive.files.length)
|
|
91
|
+
return fail("source_corrupt");
|
|
92
|
+
const expectedBoundaries = [];
|
|
93
|
+
const endpoint = (executionGeneration, segmentId) => ({ executionGeneration, segmentId });
|
|
94
|
+
for (let i = 0; i < archive.runs.length; i++) {
|
|
95
|
+
const run = archive.runs[i];
|
|
96
|
+
for (let j = 1; j < run.segmentIds.length; j++)
|
|
97
|
+
expectedBoundaries.push({ kind: "boundary", reason: "restart", from: endpoint(run.executionGeneration, run.segmentIds[j - 1]), to: endpoint(run.executionGeneration, run.segmentIds[j]) });
|
|
98
|
+
const next = archive.runs[i + 1];
|
|
99
|
+
if (next)
|
|
100
|
+
expectedBoundaries.push({ kind: "boundary", reason: "restart", from: endpoint(run.executionGeneration, run.segmentIds.at(-1) ?? null), to: endpoint(next.executionGeneration, next.segmentIds[0] ?? null) });
|
|
101
|
+
}
|
|
102
|
+
const intervalGaps = [], boundaries = [];
|
|
103
|
+
for (const gap of archive.gaps) {
|
|
104
|
+
if ("kind" in gap)
|
|
105
|
+
boundaries.push(gap);
|
|
106
|
+
else {
|
|
107
|
+
if (boundaries.length)
|
|
108
|
+
return fail();
|
|
109
|
+
intervalGaps.push(gap);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (canonicalSessionJson(boundaries) !== canonicalSessionJson(expectedBoundaries))
|
|
113
|
+
return fail();
|
|
114
|
+
const recordedRuns = new Set(archive.files.map(file => segments.get(file.segmentId).executionGeneration));
|
|
115
|
+
const emptyRuns = archive.runs.filter(run => !recordedRuns.has(run.executionGeneration)).map(run => run.executionGeneration);
|
|
116
|
+
if (canonicalSessionJson(archive.unavailableRuns.map(run => run.executionGeneration)) !== canonicalSessionJson(emptyRuns))
|
|
117
|
+
return fail();
|
|
118
|
+
let previousGap, gapFrameIndex = 0;
|
|
119
|
+
for (const gap of intervalGaps) {
|
|
120
|
+
const segment = segments.get(gap.segmentId);
|
|
121
|
+
if (!segment)
|
|
122
|
+
return fail("source_corrupt");
|
|
123
|
+
if (!recordedRuns.has(segment.executionGeneration) && gap.reason !== "restart")
|
|
124
|
+
return fail();
|
|
125
|
+
const start = BigInt(gap.startElapsedMs), end = BigInt(gap.endElapsedMs ?? segment.durationMs);
|
|
126
|
+
if (end < start || end > BigInt(segment.durationMs))
|
|
127
|
+
return fail("source_corrupt");
|
|
128
|
+
if (previousGap) {
|
|
129
|
+
const previousSegment = segments.get(previousGap.segmentId);
|
|
130
|
+
if (BigInt(segment.segmentOrdinal) < BigInt(previousSegment.segmentOrdinal) || segment.segmentId === previousGap.segmentId && start <= BigInt(previousGap.endElapsedMs ?? previousSegment.durationMs))
|
|
131
|
+
return fail("source_corrupt");
|
|
132
|
+
}
|
|
133
|
+
// Both streams are sorted by segment ordinal and monotonic time. Sweep once
|
|
134
|
+
// rather than rescanning up to 100000 frames for each of the 1000 gaps.
|
|
135
|
+
while (gapFrameIndex < archive.index.length) {
|
|
136
|
+
const entry = archive.index[gapFrameIndex], entryOrdinal = BigInt(segments.get(entry.segmentId).segmentOrdinal);
|
|
137
|
+
if (entryOrdinal < BigInt(segment.segmentOrdinal) || entry.segmentId === gap.segmentId && BigInt(entry.lastElapsedMs) < start)
|
|
138
|
+
gapFrameIndex++;
|
|
139
|
+
else
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
const nextFrame = archive.index[gapFrameIndex];
|
|
143
|
+
if (nextFrame?.segmentId === gap.segmentId && BigInt(nextFrame.firstElapsedMs) <= end)
|
|
144
|
+
return fail("source_corrupt");
|
|
145
|
+
previousGap = gap;
|
|
146
|
+
}
|
|
147
|
+
const recordingBytes = utf8.encode(canonicalSessionJson({ files: archive.files, index: archive.index })).length;
|
|
148
|
+
const totalBytes = utf8.encode(canonicalSessionJson(archive)).length;
|
|
149
|
+
if (recordingBytes > SESSION_V2_LIMITS.recordingMaxBytes || totalBytes - recordingBytes > SESSION_V2_LIMITS.metadataMaxBytes || totalBytes > SESSION_V2_LIMITS.archiveMaxBytes)
|
|
150
|
+
return fail("recording_limit");
|
|
151
|
+
return archive;
|
|
152
|
+
};
|
|
153
|
+
export const verifySessionV2Archive = async (archive) => {
|
|
154
|
+
for (const file of archive.files)
|
|
155
|
+
if (await hashSessionBytes(file.data) !== file.sha256)
|
|
156
|
+
return fail("source_corrupt");
|
|
157
|
+
};
|
|
158
|
+
export const decodeSessionV2Archive = async (input) => {
|
|
159
|
+
const result = parseSessionV2Archive(decodeStrictSessionJson(input, SESSION_V2_LIMITS.archiveMaxBytes));
|
|
160
|
+
await verifySessionV2Archive(result);
|
|
161
|
+
return result;
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/session/v2/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SessionV2Key, SessionV2Message, SessionV2Owner, SessionV2Payloads, SessionV2Run, SessionV2UnavailableEvidence, SessionV2UnavailableReason, TerminalBinding, TerminalFrame } from "./types.js";
|
|
2
|
+
export type * from "./types.js";
|
|
3
|
+
export declare const assertNativeSessionIdProgression: (previous: string | null, next: string | null) => void;
|
|
4
|
+
export declare const parseTerminalBinding: (value: unknown) => TerminalBinding;
|
|
5
|
+
export declare const assertTerminalBinding: (original: TerminalBinding, current: TerminalBinding) => void;
|
|
6
|
+
export declare const parseSessionV2Owner: (value: unknown) => SessionV2Owner;
|
|
7
|
+
export declare const parseTerminalFrame: (value: unknown) => TerminalFrame;
|
|
8
|
+
export declare const parseSessionV2Runs: (value: unknown, finalGeneration: string, allStopped: boolean) => SessionV2Run[];
|
|
9
|
+
export declare const SESSION_V2_KEYS: readonly SessionV2Key[];
|
|
10
|
+
export declare const parseSessionV2UnavailableEvidence: (value: unknown, reason: SessionV2UnavailableReason) => SessionV2UnavailableEvidence;
|
|
11
|
+
export declare const parseSessionV2Message: (value: unknown) => SessionV2Message;
|
|
12
|
+
export declare const sessionV2ReceiptDigest: (message: Extract<SessionV2Message, {
|
|
13
|
+
type: "receipt";
|
|
14
|
+
}>) => Promise<string>;
|
|
15
|
+
export declare const verifySessionV2Receipt: (message: Extract<SessionV2Message, {
|
|
16
|
+
type: "receipt";
|
|
17
|
+
}>) => Promise<void>;
|
|
18
|
+
export declare const decodeSessionV2Message: (input: string | Uint8Array) => Promise<SessionV2Message>;
|
|
19
|
+
export declare const controlRequestDigest: (actorUserId: string, request: SessionV2Payloads["control_request"]) => Promise<string>;
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { parseSessionSnapshot } from "../protocol.js";
|
|
2
|
+
import { SESSION_V2_PROTOCOL, SESSION_V2_LIMITS, bool, byteLength, canonicalSessionJson, choice, decodeStrictSessionJson, errorCode, exact, fail, hash, hashSessionBytes, integer, list, literal, nativeText, nullable, origin, seq, text, timestamp, unique, utf8 } from "./values.js";
|
|
3
|
+
export const assertNativeSessionIdProgression = (previous, next) => {
|
|
4
|
+
nullable(previous, nativeText);
|
|
5
|
+
nullable(next, nativeText);
|
|
6
|
+
if (previous !== null && previous !== next)
|
|
7
|
+
fail("target_changed");
|
|
8
|
+
};
|
|
9
|
+
export const parseTerminalBinding = (value) => {
|
|
10
|
+
const o = exact(value, ["instanceId", "sessionId", "workspaceId", "paneId", "terminalId", "nativeSessionId"]);
|
|
11
|
+
return { instanceId: nativeText(o.instanceId), sessionId: nativeText(o.sessionId), workspaceId: nativeText(o.workspaceId), paneId: typeof o.paneId === "number" ? integer(o.paneId, 0, 4294967295) : nativeText(o.paneId), terminalId: nativeText(o.terminalId), nativeSessionId: nullable(o.nativeSessionId, nativeText) };
|
|
12
|
+
};
|
|
13
|
+
export const assertTerminalBinding = (original, current) => {
|
|
14
|
+
const { nativeSessionId: before, ...a } = original, { nativeSessionId: after, ...b } = current;
|
|
15
|
+
if (canonicalSessionJson(a) !== canonicalSessionJson(b))
|
|
16
|
+
fail("target_changed");
|
|
17
|
+
assertNativeSessionIdProgression(before, after);
|
|
18
|
+
};
|
|
19
|
+
export const parseSessionV2Owner = (value) => {
|
|
20
|
+
const o = exact(value, ["projectId", "taskId", "workerId", "worktreeId", "ownerUserId", "serverOrigin", "provider"]);
|
|
21
|
+
return { projectId: uuidValue(o.projectId), taskId: uuidValue(o.taskId), workerId: uuidValue(o.workerId), worktreeId: uuidValue(o.worktreeId), ownerUserId: uuidValue(o.ownerUserId), serverOrigin: origin(o.serverOrigin), provider: choice(o.provider, ["codex", "claude", "copilot"]) };
|
|
22
|
+
};
|
|
23
|
+
import { uuid as uuidValue } from "./values.js";
|
|
24
|
+
const color = (value) => typeof value === "string" && /^#[0-9a-f]{6}$/.test(value) ? value : fail();
|
|
25
|
+
export const parseTerminalFrame = (value) => {
|
|
26
|
+
const o = exact(value, ["frameSeq", "capturedAt", "elapsedMs", "width", "height", "full", "rows"]);
|
|
27
|
+
const rows = list(o.rows, row => {
|
|
28
|
+
const runs = list(row, run => {
|
|
29
|
+
const p = exact(run, ["text", "foreground", "background", "bold", "italic", "underline", "inverse"]);
|
|
30
|
+
const content = text(p.text, SESSION_V2_LIMITS.maxRowBytes, true);
|
|
31
|
+
if (/\p{Cc}/u.test(content))
|
|
32
|
+
return fail();
|
|
33
|
+
return { text: content, foreground: nullable(p.foreground, color), background: nullable(p.background, color), bold: bool(p.bold), italic: bool(p.italic), underline: bool(p.underline), inverse: bool(p.inverse) };
|
|
34
|
+
}, SESSION_V2_LIMITS.maxTextRuns);
|
|
35
|
+
if (runs.reduce((sum, run) => sum + utf8.encode(run.text).length, 0) > SESSION_V2_LIMITS.maxRowBytes)
|
|
36
|
+
return fail();
|
|
37
|
+
return runs;
|
|
38
|
+
});
|
|
39
|
+
const result = { frameSeq: seq(o.frameSeq), capturedAt: timestamp(o.capturedAt), elapsedMs: seq(o.elapsedMs, true), width: integer(o.width, 1, 1000), height: integer(o.height, 1, 1000), full: literal(o.full, true), rows };
|
|
40
|
+
if (rows.length !== result.height || utf8.encode(canonicalSessionJson(result)).length > SESSION_V2_LIMITS.frameMaxBytes)
|
|
41
|
+
return fail("recording_limit");
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
const parseStopProof = (value) => {
|
|
45
|
+
const o = exact(value, ["recordId", "executionGeneration", "binding", "bootId", "stoppedAt", "method", "terminalStopped", "processes"]);
|
|
46
|
+
const processes = unique(list(o.processes, raw => {
|
|
47
|
+
const p = exact(raw, ["role", "pid", "birthToken", "bootId"]);
|
|
48
|
+
return { role: choice(p.role, ["shell", "agent"]), pid: integer(p.pid, 1, 2147483647), birthToken: nativeText(p.birthToken), bootId: nativeText(p.bootId) };
|
|
49
|
+
}, 1000, 2), p => canonicalSessionJson([p.bootId, p.pid, p.birthToken]));
|
|
50
|
+
const bootId = nativeText(o.bootId);
|
|
51
|
+
if (!processes.some(p => p.role === "shell") || !processes.some(p => p.role === "agent") || processes.some(p => p.bootId !== bootId))
|
|
52
|
+
return fail("stop_unknown");
|
|
53
|
+
return { recordId: uuidValue(o.recordId), executionGeneration: seq(o.executionGeneration), binding: parseTerminalBinding(o.binding), bootId, stoppedAt: timestamp(o.stoppedAt), method: choice(o.method, ["instances_exited", "boot_changed"]), terminalStopped: literal(o.terminalStopped, true), processes };
|
|
54
|
+
};
|
|
55
|
+
const parseRun = (value) => {
|
|
56
|
+
const o = exact(value, ["executionGeneration", "owner", "binding", "startedAt", "stoppedAt", "stopProof", "segmentIds"]);
|
|
57
|
+
const run = { executionGeneration: seq(o.executionGeneration), owner: parseSessionV2Owner(o.owner), binding: parseTerminalBinding(o.binding), startedAt: timestamp(o.startedAt), stoppedAt: nullable(o.stoppedAt, timestamp), stopProof: nullable(o.stopProof, parseStopProof), segmentIds: unique(list(o.segmentIds, uuidValue), v => v) };
|
|
58
|
+
if ((run.stoppedAt === null) !== (run.stopProof === null))
|
|
59
|
+
return fail("stop_unknown");
|
|
60
|
+
if (run.stopProof !== null) {
|
|
61
|
+
if (run.stopProof.executionGeneration !== run.executionGeneration || run.stopProof.stoppedAt !== run.stoppedAt || Date.parse(run.stoppedAt) < Date.parse(run.startedAt))
|
|
62
|
+
return fail("stop_unknown");
|
|
63
|
+
assertTerminalBinding(run.binding, run.stopProof.binding);
|
|
64
|
+
}
|
|
65
|
+
return run;
|
|
66
|
+
};
|
|
67
|
+
export const parseSessionV2Runs = (value, finalGeneration, allStopped) => {
|
|
68
|
+
const runs = list(value, parseRun, SESSION_V2_LIMITS.maxRuns, 1), seen = new Set();
|
|
69
|
+
let nativeSession = null;
|
|
70
|
+
for (let i = 0; i < runs.length; i++) {
|
|
71
|
+
const run = runs[i];
|
|
72
|
+
if (run.executionGeneration !== String(i + 1) || canonicalSessionJson(run.owner) !== canonicalSessionJson(runs[0].owner) || ((i < runs.length - 1 || allStopped) && run.stopProof === null))
|
|
73
|
+
return fail("stale_fence");
|
|
74
|
+
assertNativeSessionIdProgression(nativeSession, run.binding.nativeSessionId);
|
|
75
|
+
nativeSession = run.binding.nativeSessionId;
|
|
76
|
+
if (run.stopProof) {
|
|
77
|
+
assertNativeSessionIdProgression(nativeSession, run.stopProof.binding.nativeSessionId);
|
|
78
|
+
nativeSession = run.stopProof.binding.nativeSessionId;
|
|
79
|
+
}
|
|
80
|
+
for (const id of run.segmentIds) {
|
|
81
|
+
if (seen.has(id))
|
|
82
|
+
return fail("stale_fence");
|
|
83
|
+
seen.add(id);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (runs.at(-1).executionGeneration !== finalGeneration)
|
|
87
|
+
return fail("stale_fence");
|
|
88
|
+
return runs;
|
|
89
|
+
};
|
|
90
|
+
const parseLease = (value) => {
|
|
91
|
+
const o = exact(value, ["leaseId", "holderUserId", "browserClientId", "controlEpoch", "expiresAt"]);
|
|
92
|
+
return { leaseId: uuidValue(o.leaseId), holderUserId: uuidValue(o.holderUserId), browserClientId: uuidValue(o.browserClientId), controlEpoch: seq(o.controlEpoch), expiresAt: timestamp(o.expiresAt) };
|
|
93
|
+
};
|
|
94
|
+
const actions = ["acquire_control", "renew_control", "release_control", "resume_automation", "paste", "keys"];
|
|
95
|
+
export const SESSION_V2_KEYS = ["Enter", "Escape", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Tab", "Backspace", "Delete", "Home", "End", "PageUp", "PageDown", "Ctrl+C", "Ctrl+D", "Ctrl+U"];
|
|
96
|
+
const completeness = (value) => choice(value, ["complete", "partial"]);
|
|
97
|
+
const unavailableReason = (value) => choice(value, ["recording_not_enabled", "ended_before_first_sample"]);
|
|
98
|
+
export const parseSessionV2UnavailableEvidence = (value, reason) => {
|
|
99
|
+
const p = exact(value, ["recordingEnabled", "selectedFrameCount", "registeredFrameCount", "captureError"]);
|
|
100
|
+
const evidence = { recordingEnabled: bool(p.recordingEnabled), selectedFrameCount: seq(p.selectedFrameCount, true), registeredFrameCount: seq(p.registeredFrameCount, true), captureError: nullable(p.captureError, errorCode) };
|
|
101
|
+
if (evidence.selectedFrameCount !== "0" || evidence.registeredFrameCount !== "0" || evidence.captureError !== null || evidence.recordingEnabled !== (reason === "ended_before_first_sample"))
|
|
102
|
+
return fail();
|
|
103
|
+
return evidence;
|
|
104
|
+
};
|
|
105
|
+
const parseReceipt = (value) => {
|
|
106
|
+
const o = exact(value, ["finalizationId", "disposition", "dispositionDigest", "reason", "sha256", "byteLength", "completeness", "evidence"]);
|
|
107
|
+
const result = { finalizationId: uuidValue(o.finalizationId), disposition: choice(o.disposition, ["ready", "unavailable"]), dispositionDigest: hash(o.dispositionDigest), reason: nullable(o.reason, unavailableReason), sha256: nullable(o.sha256, hash), byteLength: nullable(o.byteLength, byteLength), completeness: nullable(o.completeness, completeness), evidence: o.evidence === null ? null : parseSessionV2UnavailableEvidence(o.evidence, unavailableReason(o.reason)) };
|
|
108
|
+
if (result.disposition === "ready") {
|
|
109
|
+
if (result.reason !== null || result.sha256 === null || result.byteLength === null || result.completeness === null || result.evidence !== null)
|
|
110
|
+
return fail();
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const e = result.evidence;
|
|
114
|
+
if (result.reason === null || result.sha256 !== null || result.byteLength !== null || result.completeness !== null || e === null || e.selectedFrameCount !== "0" || e.registeredFrameCount !== "0" || e.captureError !== null || e.recordingEnabled !== (result.reason === "ended_before_first_sample"))
|
|
115
|
+
return fail("source_corrupt");
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
};
|
|
119
|
+
const parsePayload = (kind, value, base) => {
|
|
120
|
+
// Each discriminant constructs only its exact typed payload; this local cast
|
|
121
|
+
// preserves the mapping without exposing an unvalidated generic wire object.
|
|
122
|
+
const result = () => {
|
|
123
|
+
switch (kind) {
|
|
124
|
+
case "registration": {
|
|
125
|
+
const o = exact(value, ["registrationId", "mode", "owner", "binding", "connectionEpoch", "capabilities"]), c = exact(o.capabilities, ["observe", "control", "archive"]);
|
|
126
|
+
const capabilities = { observe: bool(c.observe), control: bool(c.control), archive: bool(c.archive) }, mode = choice(o.mode, ["register", "reconnect"]), connectionEpoch = nullable(o.connectionEpoch, seq);
|
|
127
|
+
if ((mode === "register") !== (connectionEpoch === null) || (capabilities.control && !capabilities.observe))
|
|
128
|
+
return fail();
|
|
129
|
+
return { registrationId: uuidValue(o.registrationId), mode, owner: parseSessionV2Owner(o.owner), binding: parseTerminalBinding(o.binding), connectionEpoch, capabilities };
|
|
130
|
+
}
|
|
131
|
+
case "registration_ack": {
|
|
132
|
+
const o = exact(value, ["registrationId", "connectionEpoch"]);
|
|
133
|
+
return { registrationId: uuidValue(o.registrationId), connectionEpoch: seq(o.connectionEpoch) };
|
|
134
|
+
}
|
|
135
|
+
case "snapshot": {
|
|
136
|
+
const o = exact(value, ["connectionEpoch", "segmentId", "segmentOrdinal", "binding", "frame", "recorded"]);
|
|
137
|
+
return { connectionEpoch: seq(o.connectionEpoch), segmentId: uuidValue(o.segmentId), segmentOrdinal: seq(o.segmentOrdinal), binding: parseTerminalBinding(o.binding), frame: parseTerminalFrame(o.frame), recorded: bool(o.recorded) };
|
|
138
|
+
}
|
|
139
|
+
case "control_state": {
|
|
140
|
+
const o = exact(value, ["connectionEpoch", "controlEpoch", "state", "lease", "initialAssignment", "availableActions", "unavailableReason"]);
|
|
141
|
+
const parsed = { connectionEpoch: seq(o.connectionEpoch), controlEpoch: seq(o.controlEpoch), state: choice(o.state, ["automation", "manual", "suspended", "closing", "closed"]), lease: nullable(o.lease, parseLease), initialAssignment: choice(o.initialAssignment, ["pending", "dispatching", "transport_completed", "unknown", "unconfirmed"]), availableActions: unique(list(o.availableActions, v => choice(v, actions), 6), v => v), unavailableReason: nullable(o.unavailableReason, errorCode) };
|
|
142
|
+
if ((parsed.state === "manual") !== (parsed.lease !== null) || parsed.lease && parsed.lease.controlEpoch !== parsed.controlEpoch || ["closing", "closed"].includes(parsed.state) && parsed.availableActions.length || parsed.state !== "manual" && parsed.availableActions.some(a => a === "paste" || a === "keys") || parsed.state === "automation" && ["unknown", "unconfirmed"].includes(parsed.initialAssignment) || parsed.state === "manual" && parsed.initialAssignment === "dispatching")
|
|
143
|
+
return fail();
|
|
144
|
+
return parsed;
|
|
145
|
+
}
|
|
146
|
+
case "control_request": {
|
|
147
|
+
const o = exact(value, ["operationId", "connectionEpoch", "controlEpoch", "action", "browserClientId", "leaseId", "draftHandled", "initialUnknownDisposition"]);
|
|
148
|
+
const p = { operationId: uuidValue(o.operationId), connectionEpoch: seq(o.connectionEpoch), controlEpoch: seq(o.controlEpoch), action: choice(o.action, ["acquire_control", "renew_control", "release_control", "resume_automation"]), browserClientId: uuidValue(o.browserClientId), leaseId: nullable(o.leaseId, uuidValue), draftHandled: bool(o.draftHandled), initialUnknownDisposition: nullable(o.initialUnknownDisposition, v => literal(v, "delivered_continue")) };
|
|
149
|
+
if (p.action === "resume_automation" ? !p.draftHandled : p.draftHandled || p.initialUnknownDisposition !== null || (p.action === "acquire_control") !== (p.leaseId === null))
|
|
150
|
+
return fail();
|
|
151
|
+
return p;
|
|
152
|
+
}
|
|
153
|
+
case "control_dispatch": {
|
|
154
|
+
const o = exact(value, ["actorUserId", "requestDigest", "request"]);
|
|
155
|
+
return { actorUserId: uuidValue(o.actorUserId), requestDigest: hash(o.requestDigest), request: parsePayload("control_request", o.request, base) };
|
|
156
|
+
}
|
|
157
|
+
case "control_ack": {
|
|
158
|
+
const o = exact(value, ["requestDigest", "durable", "controlState", "result"]), result = parsePayload("operation_result", o.result, base);
|
|
159
|
+
if (result.state === "queued" || result.state === "dispatching")
|
|
160
|
+
return fail();
|
|
161
|
+
return { requestDigest: hash(o.requestDigest), durable: literal(o.durable, true), controlState: parsePayload("control_state", o.controlState, base), result };
|
|
162
|
+
}
|
|
163
|
+
case "recording_responsibility": {
|
|
164
|
+
const o = exact(value, ["responsibilityId", "recordingEnabled"]);
|
|
165
|
+
return { responsibilityId: uuidValue(o.responsibilityId), recordingEnabled: bool(o.recordingEnabled) };
|
|
166
|
+
}
|
|
167
|
+
case "recording_evidence": {
|
|
168
|
+
const o = exact(value, ["responsibilityId", "evidenceId", "revision", "selectedFrameCount", "registeredFrameCount", "captureError", "closed", "journalSha256", "sourceSha256"]);
|
|
169
|
+
const p = { responsibilityId: uuidValue(o.responsibilityId), evidenceId: uuidValue(o.evidenceId), revision: seq(o.revision), selectedFrameCount: seq(o.selectedFrameCount, true), registeredFrameCount: seq(o.registeredFrameCount, true), captureError: nullable(o.captureError, errorCode), closed: bool(o.closed), journalSha256: hash(o.journalSha256), sourceSha256: hash(o.sourceSha256) };
|
|
170
|
+
if (BigInt(p.registeredFrameCount) > BigInt(p.selectedFrameCount))
|
|
171
|
+
return fail();
|
|
172
|
+
return p;
|
|
173
|
+
}
|
|
174
|
+
case "operation": {
|
|
175
|
+
const o = exact(value, ["operationId", "connectionEpoch", "segmentId", "binding", "controlEpoch", "leaseId", "leaseSeq", "kind", "payload"]);
|
|
176
|
+
const common = { operationId: uuidValue(o.operationId), connectionEpoch: seq(o.connectionEpoch), segmentId: uuidValue(o.segmentId), binding: parseTerminalBinding(o.binding), controlEpoch: seq(o.controlEpoch), leaseId: uuidValue(o.leaseId), leaseSeq: seq(o.leaseSeq) };
|
|
177
|
+
if (o.kind === "paste") {
|
|
178
|
+
const p = exact(o.payload, ["text"]), content = text(p.text, SESSION_V2_LIMITS.inputMaxBytes);
|
|
179
|
+
if (/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/.test(content))
|
|
180
|
+
return fail();
|
|
181
|
+
return { ...common, kind: "paste", payload: { text: content } };
|
|
182
|
+
}
|
|
183
|
+
if (o.kind === "keys") {
|
|
184
|
+
const p = exact(o.payload, ["key"]);
|
|
185
|
+
return { ...common, kind: "keys", payload: { key: choice(p.key, SESSION_V2_KEYS) } };
|
|
186
|
+
}
|
|
187
|
+
return fail();
|
|
188
|
+
}
|
|
189
|
+
case "operation_result": {
|
|
190
|
+
const o = exact(value, ["operationId", "state", "errorCode"]), state = choice(o.state, ["queued", "dispatching", "transport_completed", "rejected", "unknown"]), error = nullable(o.errorCode, errorCode);
|
|
191
|
+
if (state === "unknown" ? error !== "input_unknown" : state === "rejected" ? error === null : error !== null)
|
|
192
|
+
return fail();
|
|
193
|
+
return { operationId: uuidValue(o.operationId), state, errorCode: error };
|
|
194
|
+
}
|
|
195
|
+
case "generation_ledger": {
|
|
196
|
+
const o = exact(value, ["runs", "finalizationId"]), finalizationId = nullable(o.finalizationId, uuidValue);
|
|
197
|
+
return { runs: parseSessionV2Runs(o.runs, base.executionGeneration, finalizationId !== null), finalizationId };
|
|
198
|
+
}
|
|
199
|
+
case "finalization": {
|
|
200
|
+
const o = exact(value, ["finalizationId", "claimTerminal", "runs"]);
|
|
201
|
+
return { finalizationId: uuidValue(o.finalizationId), claimTerminal: literal(o.claimTerminal, true), runs: parseSessionV2Runs(o.runs, base.executionGeneration, true) };
|
|
202
|
+
}
|
|
203
|
+
case "archive_status": {
|
|
204
|
+
const o = exact(value, ["state", "sha256", "byteLength", "completeness", "errorCode", "finalizationId"]);
|
|
205
|
+
const p = { state: choice(o.state, ["pending", "ready", "failed", "unavailable"]), sha256: nullable(o.sha256, hash), byteLength: nullable(o.byteLength, byteLength), completeness: nullable(o.completeness, completeness), errorCode: nullable(o.errorCode, errorCode), finalizationId: nullable(o.finalizationId, uuidValue) };
|
|
206
|
+
if (p.state === "ready") {
|
|
207
|
+
if (p.sha256 === null || p.byteLength === null || p.completeness === null || p.finalizationId === null || p.errorCode !== null)
|
|
208
|
+
return fail();
|
|
209
|
+
}
|
|
210
|
+
else if (p.sha256 !== null || p.byteLength !== null || p.completeness !== null || p.state === "failed" && p.errorCode === null || p.state === "unavailable" && (p.finalizationId === null || !["recording_not_enabled", "ended_before_first_sample"].includes(p.errorCode ?? "")))
|
|
211
|
+
return fail();
|
|
212
|
+
return p;
|
|
213
|
+
}
|
|
214
|
+
case "receipt": return parseReceipt(value);
|
|
215
|
+
case "native_snapshot": {
|
|
216
|
+
const snapshot = parseSessionSnapshot(value);
|
|
217
|
+
if (snapshot.sessionId !== base.sessionId || snapshot.claimId !== base.claimId || snapshot.executionGeneration !== base.executionGeneration)
|
|
218
|
+
return fail("stale_fence");
|
|
219
|
+
return snapshot;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return fail();
|
|
223
|
+
};
|
|
224
|
+
return result();
|
|
225
|
+
};
|
|
226
|
+
export const parseSessionV2Message = (value) => {
|
|
227
|
+
const o = exact(value, ["protocol", "schemaVersion", "projectionVersion", "type", "sessionId", "claimId", "executionGeneration", "agentControlMode", "contentKind", "payload"]);
|
|
228
|
+
if (o.protocol !== SESSION_V2_PROTOCOL || o.schemaVersion !== 2 || o.projectionVersion !== 1)
|
|
229
|
+
return fail("unsupported_protocol");
|
|
230
|
+
const base = { protocol: SESSION_V2_PROTOCOL, schemaVersion: 2, projectionVersion: 1, sessionId: uuidValue(o.sessionId), claimId: uuidValue(o.claimId), executionGeneration: seq(o.executionGeneration) };
|
|
231
|
+
const kind = choice(o.type, ["registration", "registration_ack", "snapshot", "control_state", "control_request", "control_dispatch", "control_ack", "recording_responsibility", "recording_evidence", "operation", "operation_result", "generation_ledger", "finalization", "archive_status", "receipt", "native_snapshot"]);
|
|
232
|
+
if (kind === "native_snapshot") {
|
|
233
|
+
if (o.agentControlMode !== "web" || o.contentKind !== "native_timeline")
|
|
234
|
+
return fail("unsupported_content_kind");
|
|
235
|
+
return { ...base, agentControlMode: "web", contentKind: "native_timeline", type: kind, payload: parsePayload(kind, o.payload, base) };
|
|
236
|
+
}
|
|
237
|
+
if (o.agentControlMode !== "herdr" || o.contentKind !== "terminal_recording")
|
|
238
|
+
return fail("unsupported_content_kind");
|
|
239
|
+
return { ...base, agentControlMode: "herdr", contentKind: "terminal_recording", type: kind, payload: parsePayload(kind, o.payload, base) };
|
|
240
|
+
};
|
|
241
|
+
export const sessionV2ReceiptDigest = async (message) => {
|
|
242
|
+
const { dispositionDigest: _, ...payload } = message.payload;
|
|
243
|
+
return hashSessionBytes(canonicalSessionJson({ ...message, payload }));
|
|
244
|
+
};
|
|
245
|
+
export const verifySessionV2Receipt = async (message) => {
|
|
246
|
+
if (await sessionV2ReceiptDigest(message) !== message.payload.dispositionDigest)
|
|
247
|
+
return fail("source_corrupt");
|
|
248
|
+
};
|
|
249
|
+
export const decodeSessionV2Message = async (input) => {
|
|
250
|
+
const result = parseSessionV2Message(decodeStrictSessionJson(input, SESSION_V2_LIMITS.metadataMaxBytes));
|
|
251
|
+
if (result.type === "receipt")
|
|
252
|
+
await verifySessionV2Receipt(result);
|
|
253
|
+
if (result.type === "control_dispatch" && result.payload.requestDigest !== await controlRequestDigest(result.payload.actorUserId, result.payload.request))
|
|
254
|
+
return fail("source_corrupt");
|
|
255
|
+
return result;
|
|
256
|
+
};
|
|
257
|
+
// The enclosing message carries the fence; the digest binds the authenticated
|
|
258
|
+
// actor to the exact control intent within that execution.
|
|
259
|
+
export const controlRequestDigest = async (actorUserId, request) => hashSessionBytes(canonicalSessionJson({ actorUserId, request }));
|
|
260
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/session/v2/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { canonicalSessionJson, fail, hashSessionBytes } from "./values.js";
|
|
2
|
+
// Validate the archive before selecting a run. This provenance digest does not
|
|
3
|
+
// replace the hash of the original archive bytes or attest to native disk facts.
|
|
4
|
+
export const sourceDigest = async (archive, generation) => {
|
|
5
|
+
const run = archive.runs.find(value => value.executionGeneration === generation);
|
|
6
|
+
if (!run)
|
|
7
|
+
return fail("stale_fence");
|
|
8
|
+
const segments = new Set(run.segmentIds);
|
|
9
|
+
return hashSessionBytes(canonicalSessionJson({ files: archive.files.filter(value => segments.has(value.segmentId)), index: archive.index.filter(value => segments.has(value.segmentId)) }));
|
|
10
|
+
};
|
|
11
|
+
export const emptySourceDigest = async () => hashSessionBytes('{"files":[],"index":[]}');
|
|
12
|
+
//# sourceMappingURL=responsibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsibility.js","sourceRoot":"","sources":["../../../src/session/v2/responsibility.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3E,+EAA+E;AAC/E,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAAyB,EAAE,UAAkB,EAAmB,EAAE;IACnG,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,KAAK,UAAU,CAAC,CAAC;IACjF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9L,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAqB,EAAE,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC"}
|