@codetreker/daynight 0.32.1 → 0.38.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.
Files changed (117) hide show
  1. package/README.md +266 -68
  2. package/dist/api/client.d.ts +7 -1
  3. package/dist/api/client.js +117 -21
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/json-source.d.ts +3 -0
  6. package/dist/api/json-source.js +113 -0
  7. package/dist/api/json-source.js.map +1 -0
  8. package/dist/api/parse.d.ts +2 -1
  9. package/dist/api/parse.js +16 -1
  10. package/dist/api/parse.js.map +1 -1
  11. package/dist/api/thread.d.ts +6 -0
  12. package/dist/api/thread.js +79 -0
  13. package/dist/api/thread.js.map +1 -0
  14. package/dist/api/types.d.ts +50 -0
  15. package/dist/cli/application.js +12 -2
  16. package/dist/cli/application.js.map +1 -1
  17. package/dist/cli/context.d.ts +9 -1
  18. package/dist/cli/context.js +3 -1
  19. package/dist/cli/context.js.map +1 -1
  20. package/dist/cli/schema.js +10 -10
  21. package/dist/cli/schema.js.map +1 -1
  22. package/dist/commands/cleanup-operation.d.ts +3 -0
  23. package/dist/commands/cleanup-operation.js +12 -0
  24. package/dist/commands/cleanup-operation.js.map +1 -0
  25. package/dist/commands/controller/provider-display.d.ts +2 -0
  26. package/dist/commands/controller/provider-display.js +63 -0
  27. package/dist/commands/controller/provider-display.js.map +1 -0
  28. package/dist/commands/controller/providers/projection.js +12 -0
  29. package/dist/commands/controller/providers/projection.js.map +1 -1
  30. package/dist/commands/controller/runtime.js +4 -2
  31. package/dist/commands/controller/runtime.js.map +1 -1
  32. package/dist/commands/server/runtime.d.ts +10 -1
  33. package/dist/commands/server/runtime.js +24 -7
  34. package/dist/commands/server/runtime.js.map +1 -1
  35. package/dist/commands/skill/skills/using-daynight/SKILL.md +5 -3
  36. package/dist/commands/skill/skills/using-daynight/references/authorization.md +2 -2
  37. package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +4 -3
  38. package/dist/commands/skill/skills/using-daynight/references/handbook.md +4 -1
  39. package/dist/commands/skill/skills/using-daynight/references/handoff.md +25 -15
  40. package/dist/commands/skill/skills/using-daynight/references/task-content.md +7 -4
  41. package/dist/commands/skill/skills/using-daynight/references/task-management.md +56 -6
  42. package/dist/commands/skill/skills/using-daynight/references/write-safety.md +22 -3
  43. package/dist/commands/skill/usage.md +84 -7
  44. package/dist/commands/task/command.js +28 -3
  45. package/dist/commands/task/command.js.map +1 -1
  46. package/dist/commands/task/definition.js +40 -6
  47. package/dist/commands/task/definition.js.map +1 -1
  48. package/dist/commands/task/rendering.js +4 -0
  49. package/dist/commands/task/rendering.js.map +1 -1
  50. package/dist/commands/task/thread-diagnostics.d.ts +5 -0
  51. package/dist/commands/task/thread-diagnostics.js +32 -0
  52. package/dist/commands/task/thread-diagnostics.js.map +1 -0
  53. package/dist/commands/task/thread-rendering.d.ts +8 -0
  54. package/dist/commands/task/thread-rendering.js +80 -0
  55. package/dist/commands/task/thread-rendering.js.map +1 -0
  56. package/dist/commands/task/thread.d.ts +11 -0
  57. package/dist/commands/task/thread.js +74 -0
  58. package/dist/commands/task/thread.js.map +1 -0
  59. package/dist/commands/worker/backends/session-api.d.ts +1 -1
  60. package/dist/commands/worker/backends/session-api.js +4 -4
  61. package/dist/commands/worker/backends/session-api.js.map +1 -1
  62. package/dist/commands/worker/backends/web-store.d.ts +4 -0
  63. package/dist/commands/worker/backends/web-store.js +40 -6
  64. package/dist/commands/worker/backends/web-store.js.map +1 -1
  65. package/dist/commands/worker/backends/web.js +248 -127
  66. package/dist/commands/worker/backends/web.js.map +1 -1
  67. package/dist/commands/worker/cleanup-error.d.ts +5 -0
  68. package/dist/commands/worker/cleanup-error.js +9 -0
  69. package/dist/commands/worker/cleanup-error.js.map +1 -0
  70. package/dist/commands/worker/cleanup-schedule.d.ts +3 -0
  71. package/dist/commands/worker/cleanup-schedule.js +11 -0
  72. package/dist/commands/worker/cleanup-schedule.js.map +1 -0
  73. package/dist/commands/worker/cleanup.js +47 -31
  74. package/dist/commands/worker/cleanup.js.map +1 -1
  75. package/dist/commands/worker/coordinator.js +186 -63
  76. package/dist/commands/worker/coordinator.js.map +1 -1
  77. package/dist/commands/worker/execution.d.ts +1 -1
  78. package/dist/commands/worker/execution.js +2 -2
  79. package/dist/commands/worker/execution.js.map +1 -1
  80. package/dist/commands/worker/prompts.js +2 -2
  81. package/dist/commands/worker/prompts.js.map +1 -1
  82. package/dist/commands/worker/remote.js +3 -4
  83. package/dist/commands/worker/remote.js.map +1 -1
  84. package/dist/commands/worker/remove-worktree-contents.d.ts +3 -0
  85. package/dist/commands/worker/remove-worktree-contents.js +106 -0
  86. package/dist/commands/worker/remove-worktree-contents.js.map +1 -0
  87. package/dist/commands/worker/runtime.js +1 -1
  88. package/dist/commands/worker/runtime.js.map +1 -1
  89. package/dist/commands/worker/sqlite/006-cleanup-schedules.sql +14 -0
  90. package/dist/commands/worker/store.d.ts +5 -1
  91. package/dist/commands/worker/store.js +53 -0
  92. package/dist/commands/worker/store.js.map +1 -1
  93. package/dist/commands/worker/types.d.ts +10 -0
  94. package/dist/commands/worker/worktrees.js +70 -24
  95. package/dist/commands/worker/worktrees.js.map +1 -1
  96. package/dist/platform/diagnostics.d.ts +5 -0
  97. package/dist/platform/diagnostics.js +12 -0
  98. package/dist/platform/diagnostics.js.map +1 -1
  99. package/dist/session/codex-subagent-activity.d.ts +4 -0
  100. package/dist/session/codex-subagent-activity.js +13 -0
  101. package/dist/session/codex-subagent-activity.js.map +1 -0
  102. package/dist/session/v2/archive.d.ts +6 -0
  103. package/dist/session/v2/archive.js +163 -0
  104. package/dist/session/v2/archive.js.map +1 -0
  105. package/dist/session/v2/protocol.d.ts +19 -0
  106. package/dist/session/v2/protocol.js +260 -0
  107. package/dist/session/v2/protocol.js.map +1 -0
  108. package/dist/session/v2/responsibility.d.ts +3 -0
  109. package/dist/session/v2/responsibility.js +12 -0
  110. package/dist/session/v2/responsibility.js.map +1 -0
  111. package/dist/session/v2/types.d.ts +293 -0
  112. package/dist/session/v2/types.js +2 -0
  113. package/dist/session/v2/types.js.map +1 -0
  114. package/dist/session/v2/values.d.ts +59 -0
  115. package/dist/session/v2/values.js +201 -0
  116. package/dist/session/v2/values.js.map +1 -0
  117. package/package.json +5 -3
@@ -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,3 @@
1
+ import type { SessionV2Archive } from "./types.js";
2
+ export declare const sourceDigest: (archive: SessionV2Archive, generation: string) => Promise<string>;
3
+ export declare const emptySourceDigest: () => Promise<string>;
@@ -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"}