@codetreker/daynight 0.25.2 → 0.26.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 +116 -8
- package/config.example.yml +3 -0
- package/dist/api/client.js +2 -2
- package/dist/api/client.js.map +1 -1
- package/dist/api/parse.js +14 -2
- package/dist/api/parse.js.map +1 -1
- package/dist/api/types.d.ts +4 -1
- package/dist/api/worker-mode.d.ts +6 -0
- package/dist/api/worker-mode.js +14 -0
- package/dist/api/worker-mode.js.map +1 -0
- package/dist/cli/commands.js +2 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/controller/command-controls.d.ts +4 -0
- package/dist/commands/controller/command-controls.js +33 -0
- package/dist/commands/controller/command-controls.js.map +1 -0
- package/dist/commands/controller/definition.d.ts +3 -0
- package/dist/commands/controller/definition.js +22 -0
- package/dist/commands/controller/definition.js.map +1 -0
- package/dist/commands/controller/independent.d.ts +3 -0
- package/dist/commands/controller/independent.js +344 -0
- package/dist/commands/controller/independent.js.map +1 -0
- package/dist/commands/controller/index.d.ts +12 -0
- package/dist/commands/controller/index.js +73 -0
- package/dist/commands/controller/index.js.map +1 -0
- package/dist/commands/controller/launch-ticket.d.ts +49 -0
- package/dist/commands/controller/launch-ticket.js +99 -0
- package/dist/commands/controller/launch-ticket.js.map +1 -0
- package/dist/commands/controller/lifecycle-store.d.ts +84 -0
- package/dist/commands/controller/lifecycle-store.js +278 -0
- package/dist/commands/controller/lifecycle-store.js.map +1 -0
- package/dist/commands/controller/local-client.d.ts +44 -0
- package/dist/commands/controller/local-client.js +75 -0
- package/dist/commands/controller/local-client.js.map +1 -0
- package/dist/commands/controller/local-content.d.ts +23 -0
- package/dist/commands/controller/local-content.js +103 -0
- package/dist/commands/controller/local-content.js.map +1 -0
- package/dist/commands/controller/process-proof.d.ts +13 -0
- package/dist/commands/controller/process-proof.js +121 -0
- package/dist/commands/controller/process-proof.js.map +1 -0
- package/dist/commands/controller/providers/claude.d.ts +2 -0
- package/dist/commands/controller/providers/claude.js +470 -0
- package/dist/commands/controller/providers/claude.js.map +1 -0
- package/dist/commands/controller/providers/codex.d.ts +2 -0
- package/dist/commands/controller/providers/codex.js +254 -0
- package/dist/commands/controller/providers/codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-claude.d.ts +26 -0
- package/dist/commands/controller/providers/controls-claude.js +138 -0
- package/dist/commands/controller/providers/controls-claude.js.map +1 -0
- package/dist/commands/controller/providers/controls-codex.d.ts +38 -0
- package/dist/commands/controller/providers/controls-codex.js +199 -0
- package/dist/commands/controller/providers/controls-codex.js.map +1 -0
- package/dist/commands/controller/providers/controls-copilot.d.ts +20 -0
- package/dist/commands/controller/providers/controls-copilot.js +143 -0
- package/dist/commands/controller/providers/controls-copilot.js.map +1 -0
- package/dist/commands/controller/providers/controls.d.ts +21 -0
- package/dist/commands/controller/providers/controls.js +53 -0
- package/dist/commands/controller/providers/controls.js.map +1 -0
- package/dist/commands/controller/providers/copilot-interactions.d.ts +47 -0
- package/dist/commands/controller/providers/copilot-interactions.js +295 -0
- package/dist/commands/controller/providers/copilot-interactions.js.map +1 -0
- package/dist/commands/controller/providers/copilot-projection.d.ts +11 -0
- package/dist/commands/controller/providers/copilot-projection.js +93 -0
- package/dist/commands/controller/providers/copilot-projection.js.map +1 -0
- package/dist/commands/controller/providers/copilot-runtime.d.ts +9 -0
- package/dist/commands/controller/providers/copilot-runtime.js +127 -0
- package/dist/commands/controller/providers/copilot-runtime.js.map +1 -0
- package/dist/commands/controller/providers/copilot.d.ts +2 -0
- package/dist/commands/controller/providers/copilot.js +309 -0
- package/dist/commands/controller/providers/copilot.js.map +1 -0
- package/dist/commands/controller/providers/interactions.d.ts +3 -0
- package/dist/commands/controller/providers/interactions.js +79 -0
- package/dist/commands/controller/providers/interactions.js.map +1 -0
- package/dist/commands/controller/providers/native-rpc.d.ts +28 -0
- package/dist/commands/controller/providers/native-rpc.js +85 -0
- package/dist/commands/controller/providers/native-rpc.js.map +1 -0
- package/dist/commands/controller/providers/projection.d.ts +23 -0
- package/dist/commands/controller/providers/projection.js +99 -0
- package/dist/commands/controller/providers/projection.js.map +1 -0
- package/dist/commands/controller/providers/turns.d.ts +7 -0
- package/dist/commands/controller/providers/turns.js +21 -0
- package/dist/commands/controller/providers/turns.js.map +1 -0
- package/dist/commands/controller/providers/types.d.ts +44 -0
- package/dist/commands/controller/providers/types.js +2 -0
- package/dist/commands/controller/providers/types.js.map +1 -0
- package/dist/commands/controller/recovery.d.ts +6 -0
- package/dist/commands/controller/recovery.js +22 -0
- package/dist/commands/controller/recovery.js.map +1 -0
- package/dist/commands/controller/relay.d.ts +18 -0
- package/dist/commands/controller/relay.js +299 -0
- package/dist/commands/controller/relay.js.map +1 -0
- package/dist/commands/controller/resume.d.ts +18 -0
- package/dist/commands/controller/resume.js +193 -0
- package/dist/commands/controller/resume.js.map +1 -0
- package/dist/commands/controller/runtime.d.ts +5 -0
- package/dist/commands/controller/runtime.js +455 -0
- package/dist/commands/controller/runtime.js.map +1 -0
- package/dist/commands/controller/windows-job.d.ts +3 -0
- package/dist/commands/controller/windows-job.js +59 -0
- package/dist/commands/controller/windows-job.js.map +1 -0
- package/dist/commands/controller/wire-display.d.ts +5 -0
- package/dist/commands/controller/wire-display.js +11 -0
- package/dist/commands/controller/wire-display.js.map +1 -0
- package/dist/commands/skill/skills/using-daynight/SKILL.md +24 -20
- package/dist/commands/skill/skills/using-daynight/references/autopilot-managed-task.md +16 -10
- package/dist/commands/skill/skills/using-daynight/references/create-task.md +40 -39
- package/dist/commands/skill/skills/using-daynight/references/goal.md +40 -29
- package/dist/commands/skill/skills/using-daynight/references/handbook.md +4 -3
- package/dist/commands/skill/skills/using-daynight/references/handoff.md +3 -0
- package/dist/commands/skill/skills/using-daynight/references/run-task.md +3 -3
- package/dist/commands/skill/skills/using-daynight/references/task-content.md +96 -51
- package/dist/commands/skill/skills/using-daynight/references/task-execution.md +28 -22
- package/dist/commands/worker/backend.d.ts +7 -0
- package/dist/commands/worker/backend.js +7 -0
- package/dist/commands/worker/backend.js.map +1 -0
- package/dist/commands/worker/backends/grant-renewal.d.ts +13 -0
- package/dist/commands/worker/backends/grant-renewal.js +42 -0
- package/dist/commands/worker/backends/grant-renewal.js.map +1 -0
- package/dist/commands/worker/backends/session-api.d.ts +66 -0
- package/dist/commands/worker/backends/session-api.js +84 -0
- package/dist/commands/worker/backends/session-api.js.map +1 -0
- package/dist/commands/worker/backends/web-process.d.ts +79 -0
- package/dist/commands/worker/backends/web-process.js +156 -0
- package/dist/commands/worker/backends/web-process.js.map +1 -0
- package/dist/commands/worker/backends/web-store.d.ts +49 -0
- package/dist/commands/worker/backends/web-store.js +323 -0
- package/dist/commands/worker/backends/web-store.js.map +1 -0
- package/dist/commands/worker/backends/web-types.d.ts +83 -0
- package/dist/commands/worker/backends/web-types.js +3 -0
- package/dist/commands/worker/backends/web-types.js.map +1 -0
- package/dist/commands/worker/backends/web.d.ts +26 -0
- package/dist/commands/worker/backends/web.js +178 -0
- package/dist/commands/worker/backends/web.js.map +1 -0
- package/dist/commands/worker/config.js +12 -5
- package/dist/commands/worker/config.js.map +1 -1
- package/dist/commands/worker/control.d.ts +2 -0
- package/dist/commands/worker/control.js +11 -4
- package/dist/commands/worker/control.js.map +1 -1
- package/dist/commands/worker/coordinator.d.ts +7 -0
- package/dist/commands/worker/coordinator.js +138 -19
- package/dist/commands/worker/coordinator.js.map +1 -1
- package/dist/commands/worker/herdr/agents.js +11 -8
- package/dist/commands/worker/herdr/agents.js.map +1 -1
- package/dist/commands/worker/herdr/arguments.js +10 -5
- package/dist/commands/worker/herdr/arguments.js.map +1 -1
- package/dist/commands/worker/herdr/claude-input.d.ts +2 -0
- package/dist/commands/worker/herdr/claude-input.js +20 -0
- package/dist/commands/worker/herdr/claude-input.js.map +1 -0
- package/dist/commands/worker/herdr/instance.js +1 -1
- package/dist/commands/worker/herdr/instance.js.map +1 -1
- package/dist/commands/worker/herdr/preflight.d.ts +1 -1
- package/dist/commands/worker/herdr/preflight.js +31 -10
- package/dist/commands/worker/herdr/preflight.js.map +1 -1
- package/dist/commands/worker/herdr.js +5 -1
- package/dist/commands/worker/herdr.js.map +1 -1
- package/dist/commands/worker/prompts.js +5 -1
- package/dist/commands/worker/prompts.js.map +1 -1
- package/dist/commands/worker/repositories.js +2 -2
- package/dist/commands/worker/repositories.js.map +1 -1
- package/dist/commands/worker/runtime.js +62 -10
- package/dist/commands/worker/runtime.js.map +1 -1
- package/dist/commands/worker/setup-environment.d.ts +2 -1
- package/dist/commands/worker/setup-environment.js +10 -4
- package/dist/commands/worker/setup-environment.js.map +1 -1
- package/dist/commands/worker/setup.js +5 -5
- package/dist/commands/worker/setup.js.map +1 -1
- package/dist/commands/worker/store.d.ts +2 -1
- package/dist/commands/worker/store.js +19 -9
- package/dist/commands/worker/store.js.map +1 -1
- package/dist/commands/worker/types.d.ts +4 -1
- package/dist/commands/worker/worktrees.js +9 -6
- package/dist/commands/worker/worktrees.js.map +1 -1
- package/dist/session/controller-protocol.d.ts +245 -0
- package/dist/session/controller-protocol.js +218 -0
- package/dist/session/controller-protocol.js.map +1 -0
- package/dist/session/controls.d.ts +28 -0
- package/dist/session/controls.js +37 -0
- package/dist/session/controls.js.map +1 -0
- package/dist/session/protocol.d.ts +290 -0
- package/dist/session/protocol.js +307 -0
- package/dist/session/protocol.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { sessionControlKeys, parseSessionControlFields } from "./protocol.js";
|
|
2
|
+
import { assertSessionFence, sessionBinding, sessionBindingKeys, sessionFence, SESSION_PROTOCOL, parseSessionSnapshot, parseSessionCommand, parseSessionEvent, parseSessionOperation, parseSessionResource, parseTimelineEntry } from "./protocol.js";
|
|
3
|
+
export const RELAY_LIMITS = { maxFrameBytes: 2_097_152, maxBatchEvents: 100, maxResourceBytes: 8_388_608, pollIntervalMs: 250 };
|
|
4
|
+
const fail = () => { throw new Error("Invalid Daynight relay protocol value."); };
|
|
5
|
+
const obj = (x, keys) => {
|
|
6
|
+
if (!x || typeof x !== "object" || Array.isArray(x))
|
|
7
|
+
return fail();
|
|
8
|
+
const o = x;
|
|
9
|
+
if (Object.keys(o).length !== keys.length || keys.some(k => !Object.hasOwn(o, k)))
|
|
10
|
+
return fail();
|
|
11
|
+
return o;
|
|
12
|
+
};
|
|
13
|
+
const str = (x, max = 256) => typeof x === "string" && x.length > 0 && /[^\p{White_Space}]/u.test(x) && x.isWellFormed() && !x.includes("\0") && new TextEncoder().encode(x).length <= max ? x : fail();
|
|
14
|
+
const id = (x) => /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(str(x)) ? x : fail();
|
|
15
|
+
const seq = (x, zero = false) => { const s = str(x); return /^(0|[1-9][0-9]*)$/.test(s) && s.length <= 19 && BigInt(s) <= 9223372036854775807n && (zero || s !== "0") ? s : fail(); };
|
|
16
|
+
const bool = (x) => typeof x === "boolean" ? x : fail();
|
|
17
|
+
const nullable = (x, f) => x === null ? null : f(x);
|
|
18
|
+
const choice = (x, choices) => typeof x === "string" && choices.includes(x) ? x : fail();
|
|
19
|
+
const protocol = (x) => x === SESSION_PROTOCOL ? x : fail();
|
|
20
|
+
const list = (x, f, max = 100) => Array.isArray(x) && x.length <= max ? x.map(f) : fail();
|
|
21
|
+
const fenceKeys = (value) => ["sessionId", ...sessionBindingKeys(value), "executionGeneration", "connectionEpoch"];
|
|
22
|
+
const fence = (o) => ({ sessionId: id(o.sessionId), ...sessionBinding(o), executionGeneration: seq(o.executionGeneration), connectionEpoch: seq(o.connectionEpoch) });
|
|
23
|
+
const timestamp = (x) => { const s = str(x); return /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(s) && Number.isFinite(Date.parse(s)) ? s : fail(); };
|
|
24
|
+
export const parseRegistrationRequest = (x) => {
|
|
25
|
+
const o = obj(x, ["protocol", "registrationId", "claimId", "workerId", "worktreeId", "provider", "controllerId", "controllerInstanceId"]);
|
|
26
|
+
return { protocol: protocol(o.protocol), registrationId: id(o.registrationId), claimId: id(o.claimId), workerId: id(o.workerId), worktreeId: id(o.worktreeId), provider: choice(o.provider, ["codex", "claude", "copilot"]), controllerId: id(o.controllerId), controllerInstanceId: id(o.controllerInstanceId) };
|
|
27
|
+
};
|
|
28
|
+
export const parseRegistrationResponse = (x) => ({ session: parseSessionSnapshot(obj(x, ["session"]).session) });
|
|
29
|
+
export const parseControllerGrantRequest = (x) => {
|
|
30
|
+
const o = obj(x, ["protocol", ...sessionBindingKeys(x), "controllerId", "controllerInstanceId", "executionGeneration", "kind", "previousGeneration", "stopProof"]);
|
|
31
|
+
const proof = nullable(o.stopProof, x => { const p = obj(x, ["recordId", "previousControllerInstanceId", "stoppedAt"]); return { recordId: id(p.recordId), previousControllerInstanceId: id(p.previousControllerInstanceId), stoppedAt: timestamp(p.stoppedAt) }; });
|
|
32
|
+
const previousGeneration = nullable(o.previousGeneration, seq);
|
|
33
|
+
if ((proof === null) !== (previousGeneration === null) || Object.hasOwn(o, "testExecutionId") && previousGeneration !== null)
|
|
34
|
+
return fail();
|
|
35
|
+
return { protocol: protocol(o.protocol), ...sessionBinding(o), controllerId: id(o.controllerId), controllerInstanceId: id(o.controllerInstanceId), executionGeneration: seq(o.executionGeneration), kind: choice(o.kind, ["bootstrap", "reconnect"]), previousGeneration, stopProof: proof };
|
|
36
|
+
};
|
|
37
|
+
export const parseControllerGrantResponse = (x) => {
|
|
38
|
+
const o = obj(x, ["token", "expiresAt", "sessionId", ...sessionBindingKeys(x), "executionGeneration", "controllerId", "controllerInstanceId"]);
|
|
39
|
+
return { token: str(o.token), expiresAt: timestamp(o.expiresAt), sessionId: id(o.sessionId), ...sessionBinding(o), executionGeneration: seq(o.executionGeneration), controllerId: id(o.controllerId), controllerInstanceId: id(o.controllerInstanceId) };
|
|
40
|
+
};
|
|
41
|
+
export const parseCurrentSessionResponse = (x) => {
|
|
42
|
+
if (!x || typeof x !== "object" || !("status" in x))
|
|
43
|
+
return fail();
|
|
44
|
+
if (x.status === "registered") {
|
|
45
|
+
const session = parseSessionSnapshot(obj(x, ["status", "session"]).session);
|
|
46
|
+
if (session.claimId === undefined)
|
|
47
|
+
return fail();
|
|
48
|
+
return { status: "registered", session };
|
|
49
|
+
}
|
|
50
|
+
const o = obj(x, ["status", "claimId", "agentControlMode"]);
|
|
51
|
+
if (o.status === "not_registered" && o.agentControlMode === "web")
|
|
52
|
+
return { status: "not_registered", claimId: id(o.claimId), agentControlMode: "web" };
|
|
53
|
+
if (o.status !== "not_applicable" || !(o.agentControlMode === null || o.agentControlMode === "herdr"))
|
|
54
|
+
return fail();
|
|
55
|
+
return { status: "not_applicable", claimId: nullable(o.claimId, id), agentControlMode: o.agentControlMode };
|
|
56
|
+
};
|
|
57
|
+
export const parseTimelinePage = (x) => {
|
|
58
|
+
const o = obj(x, ["sessionId", "historyEpoch", "items", "resources", "beforeCursor", "afterCursor", "hasMoreBefore", "hasMoreAfter", "lastEventSeq"]);
|
|
59
|
+
return { sessionId: id(o.sessionId), historyEpoch: str(o.historyEpoch), items: list(o.items, parseTimelineEntry, 200), resources: list(o.resources, parseSessionResource, 1000), beforeCursor: nullable(o.beforeCursor, str), afterCursor: nullable(o.afterCursor, str), hasMoreBefore: bool(o.hasMoreBefore), hasMoreAfter: bool(o.hasMoreAfter), lastEventSeq: seq(o.lastEventSeq, true) };
|
|
60
|
+
};
|
|
61
|
+
export const parseOperationResponse = (x) => ({ operation: parseSessionOperation(obj(x, ["operation"]).operation) });
|
|
62
|
+
export const parseCommandResponse = (x) => { const o = obj(x, ["operation", "operationUrl"]); return { operation: parseSessionOperation(o.operation), operationUrl: str(o.operationUrl, 2048) }; };
|
|
63
|
+
export const parseControllerState = (x) => {
|
|
64
|
+
const o = obj(x, [...sessionControlKeys(x), "nativeSessionId", "initialInputState", "synchronized", "activity", "currentTurnId", "capabilities", ...(x && typeof x === "object" && Object.hasOwn(x, "cleanupInteractionIds") ? ["cleanupInteractionIds"] : [])]);
|
|
65
|
+
const c = obj(o.capabilities, ["send", "steer", "cancel", "respond"]);
|
|
66
|
+
const cleanup = Object.hasOwn(o, "cleanupInteractionIds") ? list(o.cleanupInteractionIds, id, 1000) : undefined;
|
|
67
|
+
if (cleanup && new Set(cleanup).size !== cleanup.length)
|
|
68
|
+
return fail();
|
|
69
|
+
return { ...parseSessionControlFields(o), ...(cleanup ? { cleanupInteractionIds: cleanup } : {}), nativeSessionId: nullable(o.nativeSessionId, str), initialInputState: choice(o.initialInputState, ["not_required", "not_submitted", "dispatching", "provider_accepted", "confirmed", "failed", "unknown"]), synchronized: bool(o.synchronized), activity: choice(o.activity, ["initializing", "idle", "working", "waiting_input", "stopped", "unknown"]), currentTurnId: nullable(o.currentTurnId, str), capabilities: { send: bool(c.send), steer: bool(c.steer), cancel: bool(c.cancel), respond: bool(c.respond) } };
|
|
70
|
+
};
|
|
71
|
+
export const parseSourceEvent = (x) => {
|
|
72
|
+
const o = obj(x, ["sourceSeq", "kind", "payload"]), sourceSeq = seq(o.sourceSeq);
|
|
73
|
+
if (o.kind === "state")
|
|
74
|
+
return { sourceSeq, kind: "state", payload: parseControllerState(o.payload) };
|
|
75
|
+
if (o.kind === "resource")
|
|
76
|
+
return { sourceSeq, kind: "resource", payload: parseSessionResource(o.payload) };
|
|
77
|
+
if (o.kind === "gap")
|
|
78
|
+
return { sourceSeq, kind: "gap", payload: { reason: str(obj(o.payload, ["reason"]).reason, 1_048_576) } };
|
|
79
|
+
if (o.kind !== "timeline_upsert" || !o.payload || typeof o.payload !== "object")
|
|
80
|
+
return fail();
|
|
81
|
+
const { entrySeq, ...payload } = parseTimelineEntry({ ...o.payload, entrySeq: "entrySeq" in o.payload ? o.payload.entrySeq : "1" });
|
|
82
|
+
return { sourceSeq, kind: "timeline_upsert", payload: { ...payload, ...("entrySeq" in o.payload ? { entrySeq } : {}) } };
|
|
83
|
+
};
|
|
84
|
+
const parseContentResult = (value) => {
|
|
85
|
+
if (!value || typeof value !== "object" || !("kind" in value))
|
|
86
|
+
return fail();
|
|
87
|
+
if (value.kind === "timeline") {
|
|
88
|
+
const o = obj(value, ["kind", "historyEpoch", "items", "resources", "beforeCursor", "afterCursor", "hasMoreBefore", "hasMoreAfter"]);
|
|
89
|
+
return { kind: "timeline", historyEpoch: id(o.historyEpoch), items: list(o.items, parseTimelineEntry, 200), resources: list(o.resources, parseSessionResource, 1000), beforeCursor: nullable(o.beforeCursor, str), afterCursor: nullable(o.afterCursor, str), hasMoreBefore: bool(o.hasMoreBefore), hasMoreAfter: bool(o.hasMoreAfter) };
|
|
90
|
+
}
|
|
91
|
+
const o = obj(value, ["kind", "resource", "offset", "data", "eof"]);
|
|
92
|
+
if (o.kind !== "resource" || typeof o.data !== "string" || o.data.length > 699052 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(o.data))
|
|
93
|
+
return fail();
|
|
94
|
+
return { kind: "resource", resource: parseSessionResource(o.resource), offset: seq(o.offset, true), data: o.data, eof: bool(o.eof) };
|
|
95
|
+
};
|
|
96
|
+
export const parseControllerMessage = (x) => {
|
|
97
|
+
if (!x || typeof x !== "object" || !("type" in x))
|
|
98
|
+
return fail();
|
|
99
|
+
if (x.type === "hello") {
|
|
100
|
+
const o = obj(x, ["type", "protocol", "schemaVersion", "projectionVersion", "sessionId", ...sessionBindingKeys(x), "executionGeneration", "controllerId", "controllerInstanceId", "provider", "sourceEpoch", "lastAckedSourceSeq", ...("sourceFloor" in x ? ["sourceFloor"] : [])]);
|
|
101
|
+
if (o.schemaVersion !== 1 || o.projectionVersion !== 1)
|
|
102
|
+
return fail();
|
|
103
|
+
return { type: "hello", protocol: protocol(o.protocol), schemaVersion: 1, projectionVersion: 1, sessionId: id(o.sessionId), ...sessionBinding(o), executionGeneration: seq(o.executionGeneration), controllerId: id(o.controllerId), controllerInstanceId: id(o.controllerInstanceId), provider: choice(o.provider, ["codex", "claude", "copilot"]), sourceEpoch: id(o.sourceEpoch), lastAckedSourceSeq: seq(o.lastAckedSourceSeq, true), ...("sourceFloor" in o ? { sourceFloor: seq(o.sourceFloor, true) } : {}) };
|
|
104
|
+
}
|
|
105
|
+
const extras = { events: ["batchId", "sourceEpoch", "events"], source_reset: ["previousSourceEpoch", "newSourceEpoch", "reason"], operation_begin: ["operationId"], operation_receipt: ["operation"], reconcile: ["operations", "final"], sync_state: ["state", "pendingInteractions"], content_response: ["requestId", "sourceThrough", "result", "error"], heartbeat: [] };
|
|
106
|
+
if (typeof x.type !== "string" || !Object.hasOwn(extras, x.type))
|
|
107
|
+
return fail();
|
|
108
|
+
const o = obj(x, ["type", "protocol", ...fenceKeys(x), ...extras[x.type]]), base = { protocol: protocol(o.protocol), ...fence(o) };
|
|
109
|
+
switch (x.type) {
|
|
110
|
+
case "events": {
|
|
111
|
+
const events = list(o.events, parseSourceEvent);
|
|
112
|
+
if (!events.length || base.claimId !== undefined && events.some(event => event.kind === "state" && event.payload.initialInputState === "not_required"))
|
|
113
|
+
return fail();
|
|
114
|
+
return { ...base, type: "events", batchId: id(o.batchId), sourceEpoch: id(o.sourceEpoch), events };
|
|
115
|
+
}
|
|
116
|
+
case "source_reset": return { ...base, type: "source_reset", previousSourceEpoch: id(o.previousSourceEpoch), newSourceEpoch: id(o.newSourceEpoch), reason: str(o.reason, 1_048_576) };
|
|
117
|
+
case "operation_begin": return { ...base, type: "operation_begin", operationId: id(o.operationId) };
|
|
118
|
+
case "operation_receipt": {
|
|
119
|
+
const operation = parseSessionOperation(o.operation);
|
|
120
|
+
assertSessionFence(operation, sessionFence(base));
|
|
121
|
+
return { ...base, type: "operation_receipt", operation };
|
|
122
|
+
}
|
|
123
|
+
case "sync_state": {
|
|
124
|
+
const pendingInteractions = list(o.pendingInteractions, parseTimelineEntry);
|
|
125
|
+
if (pendingInteractions.some(entry => entry.kind !== "interaction" || entry.interaction.state !== "pending") || new Set(pendingInteractions.map(entry => entry.entryId)).size !== pendingInteractions.length)
|
|
126
|
+
return fail();
|
|
127
|
+
return { ...base, type: "sync_state", state: parseControllerState(o.state), pendingInteractions };
|
|
128
|
+
}
|
|
129
|
+
case "content_response": {
|
|
130
|
+
if ((o.result === null) === (o.error === null))
|
|
131
|
+
return fail();
|
|
132
|
+
return { ...base, type: "content_response", requestId: id(o.requestId), sourceThrough: seq(o.sourceThrough, true), result: nullable(o.result, parseContentResult), error: nullable(o.error, value => { const e = obj(value, ["code", "message"]); return { code: str(e.code), message: str(e.message, 4096) }; }) };
|
|
133
|
+
}
|
|
134
|
+
case "heartbeat": return { ...base, type: "heartbeat" };
|
|
135
|
+
case "reconcile": return { ...base, type: "reconcile", final: bool(o.final), operations: list(o.operations, x => { const p = obj(x, ["operationId", "state", "providerResult", "error"]); const state = choice(p.state, ["not_submitted", "dispatching", "provider_accepted", "confirmed", "failed", "rejected", "expired", "unknown"]); const parsed = parseSessionOperation({ protocol: SESSION_PROTOCOL, ...sessionFence(base), operationId: p.operationId, kind: "send_message", state: state === "not_submitted" ? "accepted" : state, providerResult: p.providerResult, error: p.error }); return { operationId: parsed.operationId, state, providerResult: parsed.providerResult, error: parsed.error }; }) };
|
|
136
|
+
}
|
|
137
|
+
return fail();
|
|
138
|
+
};
|
|
139
|
+
export const parseRelayMessage = (x) => {
|
|
140
|
+
if (!x || typeof x !== "object" || !("type" in x))
|
|
141
|
+
return fail();
|
|
142
|
+
if (x.type === "welcome") {
|
|
143
|
+
const o = obj(x, ["type", "protocol", "connectionEpoch", "session", "lastAckedSourceSeq", "limits", ...("requiresLiveSync" in x ? ["requiresLiveSync"] : [])]);
|
|
144
|
+
if ("requiresLiveSync" in o && o.requiresLiveSync !== true)
|
|
145
|
+
return fail();
|
|
146
|
+
const limits = obj(o.limits, Object.keys(RELAY_LIMITS));
|
|
147
|
+
for (const [k, v] of Object.entries(RELAY_LIMITS))
|
|
148
|
+
if (limits[k] !== v)
|
|
149
|
+
return fail();
|
|
150
|
+
return { type: "welcome", protocol: protocol(o.protocol), connectionEpoch: seq(o.connectionEpoch), session: parseSessionSnapshot(o.session), lastAckedSourceSeq: seq(o.lastAckedSourceSeq, true), limits: RELAY_LIMITS, ...("requiresLiveSync" in o ? { requiresLiveSync: true } : {}) };
|
|
151
|
+
}
|
|
152
|
+
const extras = { events_ack: ["batchId", "sourceEpoch", "lastAckedSourceSeq", "lastEventSeq"], source_reset_ack: ["sourceEpoch", "lastEventSeq"], operation_offer: ["operationSeq", "command"], operation_authorized: ["operationId"], receipt_ack: ["operation"], reconcile_result: ["operations"], sync_ack: [], content_request: ["requestId", "kind", ...("kind" in x && x.kind === "timeline" ? ["historyEpoch", "direction", "cursor", "limit"] : ["resourceId", "offset", "limit"])], heartbeat_ack: [], error: ["code", "message"] };
|
|
153
|
+
if (typeof x.type !== "string" || !Object.hasOwn(extras, x.type))
|
|
154
|
+
return fail();
|
|
155
|
+
const o = obj(x, ["type", "protocol", ...fenceKeys(x), ...extras[x.type]]), base = { protocol: protocol(o.protocol), ...fence(o) };
|
|
156
|
+
switch (x.type) {
|
|
157
|
+
case "events_ack": return { ...base, type: "events_ack", batchId: id(o.batchId), sourceEpoch: id(o.sourceEpoch), lastAckedSourceSeq: seq(o.lastAckedSourceSeq, true), lastEventSeq: seq(o.lastEventSeq, true) };
|
|
158
|
+
case "source_reset_ack": return { ...base, type: "source_reset_ack", sourceEpoch: id(o.sourceEpoch), lastEventSeq: seq(o.lastEventSeq, true) };
|
|
159
|
+
case "operation_offer": {
|
|
160
|
+
const command = parseSessionCommand(o.command);
|
|
161
|
+
assertSessionFence(command, sessionFence(base));
|
|
162
|
+
return { ...base, type: "operation_offer", operationSeq: seq(o.operationSeq), command };
|
|
163
|
+
}
|
|
164
|
+
case "operation_authorized": return { ...base, type: "operation_authorized", operationId: id(o.operationId) };
|
|
165
|
+
case "receipt_ack": {
|
|
166
|
+
const operation = parseSessionOperation(o.operation);
|
|
167
|
+
assertSessionFence(operation, sessionFence(base));
|
|
168
|
+
return { ...base, type: "receipt_ack", operation };
|
|
169
|
+
}
|
|
170
|
+
case "reconcile_result": {
|
|
171
|
+
const operations = list(o.operations, parseSessionOperation, 200);
|
|
172
|
+
for (const operation of operations) {
|
|
173
|
+
// Durable receipts retain their original generation across controller recovery.
|
|
174
|
+
if (BigInt(operation.executionGeneration) > BigInt(base.executionGeneration))
|
|
175
|
+
return fail();
|
|
176
|
+
assertSessionFence(operation, { ...sessionFence(base), executionGeneration: operation.executionGeneration });
|
|
177
|
+
}
|
|
178
|
+
return { ...base, type: "reconcile_result", operations };
|
|
179
|
+
}
|
|
180
|
+
case "sync_ack": return { ...base, type: "sync_ack" };
|
|
181
|
+
case "content_request": {
|
|
182
|
+
if (typeof o.limit !== "number" || !Number.isSafeInteger(o.limit) || o.limit < 1)
|
|
183
|
+
return fail();
|
|
184
|
+
if (o.kind === "timeline") {
|
|
185
|
+
if (o.limit > 200)
|
|
186
|
+
return fail();
|
|
187
|
+
const direction = choice(o.direction, ["tail", "before", "after"]);
|
|
188
|
+
const cursor = nullable(o.cursor, str);
|
|
189
|
+
if ((direction === "tail") !== (cursor === null))
|
|
190
|
+
return fail();
|
|
191
|
+
return { ...base, type: "content_request", requestId: id(o.requestId), kind: "timeline", historyEpoch: id(o.historyEpoch), direction, cursor, limit: o.limit };
|
|
192
|
+
}
|
|
193
|
+
if (o.kind !== "resource" || o.limit > 524288)
|
|
194
|
+
return fail();
|
|
195
|
+
return { ...base, type: "content_request", requestId: id(o.requestId), kind: "resource", resourceId: id(o.resourceId), offset: seq(o.offset, true), limit: o.limit };
|
|
196
|
+
}
|
|
197
|
+
case "heartbeat_ack": return { ...base, type: "heartbeat_ack" };
|
|
198
|
+
case "error": return { ...base, type: "error", code: str(o.code), message: str(o.message, 1_048_576) };
|
|
199
|
+
}
|
|
200
|
+
return fail();
|
|
201
|
+
};
|
|
202
|
+
export const parseBrowserMessage = (x) => {
|
|
203
|
+
if (!x || typeof x !== "object" || !("type" in x))
|
|
204
|
+
return fail();
|
|
205
|
+
if (x.type === "snapshot") {
|
|
206
|
+
const o = obj(x, ["type", "protocol", "userId", "snapshot", "cursor"]);
|
|
207
|
+
return { type: "snapshot", protocol: protocol(o.protocol), userId: id(o.userId), snapshot: parseSessionSnapshot(o.snapshot), cursor: str(o.cursor) };
|
|
208
|
+
}
|
|
209
|
+
if (x.type === "event") {
|
|
210
|
+
const o = obj(x, ["type", "protocol", "event", "cursor"]);
|
|
211
|
+
return { type: "event", protocol: protocol(o.protocol), event: parseSessionEvent(o.event), cursor: str(o.cursor) };
|
|
212
|
+
}
|
|
213
|
+
const o = obj(x, ["type", "protocol", "reason"]);
|
|
214
|
+
if (o.type !== "reset_required")
|
|
215
|
+
return fail();
|
|
216
|
+
return { type: "reset_required", protocol: protocol(o.protocol), reason: str(o.reason, 1_048_576) };
|
|
217
|
+
};
|
|
218
|
+
//# sourceMappingURL=controller-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller-protocol.js","sourceRoot":"","sources":["../../src/session/controller-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type SessionSetting = {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly category: "model" | "reasoning" | "permission";
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly description: string | null;
|
|
6
|
+
readonly value: string | null;
|
|
7
|
+
readonly options: readonly {
|
|
8
|
+
readonly value: string;
|
|
9
|
+
readonly label: string;
|
|
10
|
+
}[];
|
|
11
|
+
readonly mutable: boolean;
|
|
12
|
+
readonly scope: "session" | "next_turn";
|
|
13
|
+
};
|
|
14
|
+
export type SessionNativeCommand = {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly description: string;
|
|
18
|
+
readonly argumentHint: string | null;
|
|
19
|
+
readonly available: boolean;
|
|
20
|
+
};
|
|
21
|
+
export type SessionControls = {
|
|
22
|
+
readonly revision: string;
|
|
23
|
+
readonly settings: readonly SessionSetting[];
|
|
24
|
+
readonly commands: readonly SessionNativeCommand[];
|
|
25
|
+
readonly settingsError: string | null;
|
|
26
|
+
readonly commandsError: string | null;
|
|
27
|
+
};
|
|
28
|
+
export declare const parseSessionControls: (value: unknown) => SessionControls;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const invalid = () => { throw new Error("Invalid session controls."); };
|
|
2
|
+
const object = (value, keys) => {
|
|
3
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
4
|
+
return invalid();
|
|
5
|
+
const result = value;
|
|
6
|
+
if (Object.keys(result).length !== keys.length || keys.some(key => !Object.hasOwn(result, key)))
|
|
7
|
+
return invalid();
|
|
8
|
+
return result;
|
|
9
|
+
};
|
|
10
|
+
const text = (value, maximum = 4096) => typeof value === "string" && value.isWellFormed() && !value.includes("\0") && /[^\p{White_Space}]/u.test(value) && new TextEncoder().encode(value).length <= maximum ? value : invalid();
|
|
11
|
+
const nullable = (value) => value === null ? null : text(value);
|
|
12
|
+
const bool = (value) => typeof value === "boolean" ? value : invalid();
|
|
13
|
+
const choice = (value, options) => options.includes(value) ? value : invalid();
|
|
14
|
+
const list = (value, parse, key, maximum) => {
|
|
15
|
+
if (!Array.isArray(value) || value.length > maximum)
|
|
16
|
+
return invalid();
|
|
17
|
+
const result = value.map(parse);
|
|
18
|
+
if (new Set(result.map(key)).size !== result.length)
|
|
19
|
+
return invalid();
|
|
20
|
+
return result;
|
|
21
|
+
};
|
|
22
|
+
export const parseSessionControls = (value) => {
|
|
23
|
+
const data = object(value, ["revision", "settings", "commands", "settingsError", "commandsError"]);
|
|
24
|
+
const revision = text(data.revision, 19);
|
|
25
|
+
if (!/^[1-9][0-9]{0,18}$/.test(revision) || BigInt(revision) > 9223372036854775807n)
|
|
26
|
+
return invalid();
|
|
27
|
+
return {
|
|
28
|
+
revision,
|
|
29
|
+
settings: list(data.settings, raw => {
|
|
30
|
+
const setting = object(raw, ["id", "category", "label", "description", "value", "options", "mutable", "scope"]);
|
|
31
|
+
return { id: text(setting.id, 256), category: choice(setting.category, ["model", "reasoning", "permission"]), label: text(setting.label), description: nullable(setting.description), value: nullable(setting.value), options: list(setting.options, raw => { const option = object(raw, ["value", "label"]); return { value: text(option.value), label: text(option.label) }; }, option => option.value, 500), mutable: bool(setting.mutable), scope: choice(setting.scope, ["session", "next_turn"]) };
|
|
32
|
+
}, setting => setting.id, 32),
|
|
33
|
+
commands: list(data.commands, raw => { const command = object(raw, ["id", "name", "description", "argumentHint", "available"]); return { id: text(command.id, 256), name: text(command.name, 256), description: text(command.description), argumentHint: nullable(command.argumentHint), available: bool(command.available) }; }, command => command.id, 500),
|
|
34
|
+
settingsError: nullable(data.settingsError), commandsError: nullable(data.commandsError),
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=controls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/session/controls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { type SessionControls } from "./controls.js";
|
|
2
|
+
export declare const SESSION_PROTOCOL: "daynight.session.v1";
|
|
3
|
+
export declare const SESSION_SCHEMA_VERSION: 1;
|
|
4
|
+
export declare const SESSION_PROJECTION_VERSION: 1;
|
|
5
|
+
export type SessionProvider = "codex" | "claude" | "copilot";
|
|
6
|
+
export type DecimalSequence = string;
|
|
7
|
+
export type SessionBinding = {
|
|
8
|
+
readonly claimId: string;
|
|
9
|
+
readonly testExecutionId?: never;
|
|
10
|
+
} | {
|
|
11
|
+
readonly testExecutionId: string;
|
|
12
|
+
readonly claimId?: never;
|
|
13
|
+
};
|
|
14
|
+
export type SessionFence = SessionBinding & {
|
|
15
|
+
readonly sessionId: string;
|
|
16
|
+
readonly executionGeneration: DecimalSequence;
|
|
17
|
+
};
|
|
18
|
+
export type ControllerFence = SessionFence & {
|
|
19
|
+
readonly connectionEpoch: DecimalSequence;
|
|
20
|
+
};
|
|
21
|
+
export type InitialInputState = "not_required" | "not_submitted" | "dispatching" | "provider_accepted" | "confirmed" | "failed" | "unknown";
|
|
22
|
+
export type SessionCapabilities = {
|
|
23
|
+
readonly send: boolean;
|
|
24
|
+
readonly steer: boolean;
|
|
25
|
+
readonly cancel: boolean;
|
|
26
|
+
readonly respond: boolean;
|
|
27
|
+
};
|
|
28
|
+
export type SessionOperations = {
|
|
29
|
+
readonly canSend: boolean;
|
|
30
|
+
readonly canCancel: boolean;
|
|
31
|
+
readonly canRespond: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type SessionSnapshot = ControllerFence & {
|
|
34
|
+
readonly controls?: SessionControls;
|
|
35
|
+
readonly turnStartedAt?: string | null;
|
|
36
|
+
readonly protocol: typeof SESSION_PROTOCOL;
|
|
37
|
+
readonly schemaVersion: typeof SESSION_SCHEMA_VERSION;
|
|
38
|
+
readonly projectionVersion: typeof SESSION_PROJECTION_VERSION;
|
|
39
|
+
readonly identity: ({
|
|
40
|
+
readonly projectId: string;
|
|
41
|
+
readonly taskId: string;
|
|
42
|
+
readonly workerId: string;
|
|
43
|
+
readonly worktreeId: string;
|
|
44
|
+
readonly ownerUserId?: never;
|
|
45
|
+
} | {
|
|
46
|
+
readonly ownerUserId: string;
|
|
47
|
+
readonly projectId?: never;
|
|
48
|
+
readonly taskId?: never;
|
|
49
|
+
readonly workerId?: never;
|
|
50
|
+
readonly worktreeId?: never;
|
|
51
|
+
}) & {
|
|
52
|
+
readonly controllerId: string;
|
|
53
|
+
readonly controllerInstanceId: string;
|
|
54
|
+
readonly agentControlMode: "web";
|
|
55
|
+
readonly provider: SessionProvider;
|
|
56
|
+
readonly nativeSessionId: string | null;
|
|
57
|
+
};
|
|
58
|
+
readonly sessionRevision: DecimalSequence;
|
|
59
|
+
readonly historyEpoch: string;
|
|
60
|
+
readonly lastEventSeq: DecimalSequence;
|
|
61
|
+
readonly lastTimelineSeq: DecimalSequence;
|
|
62
|
+
readonly initialInputState: InitialInputState;
|
|
63
|
+
readonly synchronized: boolean;
|
|
64
|
+
readonly lifecycle: "active" | "draining" | "archived";
|
|
65
|
+
readonly connectionState: "connected" | "disconnected" | "synchronizing";
|
|
66
|
+
readonly activity: "initializing" | "idle" | "working" | "waiting_input" | "stopped" | "unknown";
|
|
67
|
+
readonly currentTurnId: string | null;
|
|
68
|
+
readonly capabilities: SessionCapabilities;
|
|
69
|
+
readonly operations: SessionOperations;
|
|
70
|
+
readonly cleanupInteractionIds?: readonly string[];
|
|
71
|
+
};
|
|
72
|
+
export type TextPart = {
|
|
73
|
+
readonly type: "text";
|
|
74
|
+
readonly text: string;
|
|
75
|
+
};
|
|
76
|
+
export type ResourcePart = {
|
|
77
|
+
readonly type: "resource";
|
|
78
|
+
readonly resourceId: string;
|
|
79
|
+
readonly label: string;
|
|
80
|
+
};
|
|
81
|
+
export type MessagePart = TextPart | ResourcePart;
|
|
82
|
+
export type ApprovalAction = "allow_once" | "allow_session" | "reject";
|
|
83
|
+
export type FormValue = string | number | boolean | readonly string[];
|
|
84
|
+
export type InteractionResponse = {
|
|
85
|
+
readonly kind: "approval";
|
|
86
|
+
readonly action: ApprovalAction;
|
|
87
|
+
} | {
|
|
88
|
+
readonly kind: "question";
|
|
89
|
+
readonly answers: readonly {
|
|
90
|
+
readonly questionId: string;
|
|
91
|
+
readonly optionIds: readonly string[];
|
|
92
|
+
readonly text: string | null;
|
|
93
|
+
}[];
|
|
94
|
+
} | {
|
|
95
|
+
readonly kind: "form";
|
|
96
|
+
readonly values: readonly {
|
|
97
|
+
readonly fieldId: string;
|
|
98
|
+
readonly value: FormValue;
|
|
99
|
+
}[];
|
|
100
|
+
} | {
|
|
101
|
+
readonly kind: "dismiss";
|
|
102
|
+
};
|
|
103
|
+
export type SessionCommand = SessionFence & {
|
|
104
|
+
readonly protocol: typeof SESSION_PROTOCOL;
|
|
105
|
+
readonly requestId: string;
|
|
106
|
+
readonly operationId: string;
|
|
107
|
+
} & ({
|
|
108
|
+
readonly kind: "send_message";
|
|
109
|
+
readonly payload: {
|
|
110
|
+
readonly content: readonly TextPart[];
|
|
111
|
+
readonly expectedTurnId: string | null;
|
|
112
|
+
};
|
|
113
|
+
} | {
|
|
114
|
+
readonly kind: "update_setting";
|
|
115
|
+
readonly payload: {
|
|
116
|
+
readonly settingId: string;
|
|
117
|
+
readonly value: string;
|
|
118
|
+
readonly expectedControlsRevision: string;
|
|
119
|
+
};
|
|
120
|
+
} | {
|
|
121
|
+
readonly kind: "execute_command";
|
|
122
|
+
readonly payload: {
|
|
123
|
+
readonly commandId: string;
|
|
124
|
+
readonly arguments: string;
|
|
125
|
+
readonly expectedControlsRevision: string;
|
|
126
|
+
readonly expectedTurnId: string | null;
|
|
127
|
+
};
|
|
128
|
+
} | {
|
|
129
|
+
readonly kind: "refresh_controls";
|
|
130
|
+
readonly payload: Record<string, never>;
|
|
131
|
+
} | {
|
|
132
|
+
readonly kind: "cancel";
|
|
133
|
+
readonly payload: {
|
|
134
|
+
readonly expectedTurnId: string;
|
|
135
|
+
};
|
|
136
|
+
} | {
|
|
137
|
+
readonly kind: "interaction_response";
|
|
138
|
+
readonly payload: {
|
|
139
|
+
readonly interactionId: string;
|
|
140
|
+
readonly interactionRevision: DecimalSequence;
|
|
141
|
+
readonly submissionId: string;
|
|
142
|
+
readonly response: InteractionResponse;
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
export type OperationState = "accepted" | "offered" | "dispatching" | "provider_accepted" | "confirmed" | "failed" | "rejected" | "expired" | "unknown";
|
|
146
|
+
export type SessionOperation = SessionFence & {
|
|
147
|
+
readonly protocol: typeof SESSION_PROTOCOL;
|
|
148
|
+
readonly operationId: string;
|
|
149
|
+
readonly kind: SessionCommand["kind"];
|
|
150
|
+
readonly state: OperationState;
|
|
151
|
+
readonly providerResult: "started" | "queued" | "handled" | null;
|
|
152
|
+
readonly error: {
|
|
153
|
+
readonly code: string;
|
|
154
|
+
readonly message: string;
|
|
155
|
+
} | null;
|
|
156
|
+
};
|
|
157
|
+
export type SessionResource = {
|
|
158
|
+
readonly resourceId: string;
|
|
159
|
+
readonly status: "pending" | "available" | "failed" | "unavailable";
|
|
160
|
+
readonly name: string;
|
|
161
|
+
readonly mediaType: string | null;
|
|
162
|
+
readonly byteLength: DecimalSequence | null;
|
|
163
|
+
readonly sha256: string | null;
|
|
164
|
+
readonly error: string | null;
|
|
165
|
+
};
|
|
166
|
+
export type InteractionOption = {
|
|
167
|
+
readonly id: string;
|
|
168
|
+
readonly label: string;
|
|
169
|
+
};
|
|
170
|
+
export type FormField = {
|
|
171
|
+
readonly fieldId: string;
|
|
172
|
+
readonly label: string;
|
|
173
|
+
readonly required: boolean;
|
|
174
|
+
} & ({
|
|
175
|
+
readonly type: "text";
|
|
176
|
+
readonly sensitive: boolean;
|
|
177
|
+
} | {
|
|
178
|
+
readonly type: "number";
|
|
179
|
+
readonly min: number | null;
|
|
180
|
+
readonly max: number | null;
|
|
181
|
+
} | {
|
|
182
|
+
readonly type: "boolean";
|
|
183
|
+
} | {
|
|
184
|
+
readonly type: "select" | "multiselect";
|
|
185
|
+
readonly options: readonly InteractionOption[];
|
|
186
|
+
});
|
|
187
|
+
export type SessionInteraction = {
|
|
188
|
+
readonly interactionId: string;
|
|
189
|
+
readonly revision: DecimalSequence;
|
|
190
|
+
readonly state: "pending" | "resolved" | "expired";
|
|
191
|
+
readonly title: string;
|
|
192
|
+
} & ({
|
|
193
|
+
readonly kind: "approval";
|
|
194
|
+
readonly detail: string;
|
|
195
|
+
readonly actions: readonly ApprovalAction[];
|
|
196
|
+
} | {
|
|
197
|
+
readonly kind: "question";
|
|
198
|
+
readonly questions: readonly {
|
|
199
|
+
readonly questionId: string;
|
|
200
|
+
readonly label: string;
|
|
201
|
+
readonly options: readonly InteractionOption[];
|
|
202
|
+
readonly multiple: boolean;
|
|
203
|
+
readonly allowCustom: boolean;
|
|
204
|
+
readonly required: boolean;
|
|
205
|
+
readonly sensitive: boolean;
|
|
206
|
+
}[];
|
|
207
|
+
readonly canDismiss: boolean;
|
|
208
|
+
} | {
|
|
209
|
+
readonly kind: "form";
|
|
210
|
+
readonly fields: readonly FormField[];
|
|
211
|
+
readonly canDismiss: boolean;
|
|
212
|
+
});
|
|
213
|
+
export type TimelineEntry = {
|
|
214
|
+
readonly entryId: string;
|
|
215
|
+
readonly entrySeq: DecimalSequence;
|
|
216
|
+
readonly revision: DecimalSequence;
|
|
217
|
+
} & ({
|
|
218
|
+
readonly kind: "user_message" | "assistant_message";
|
|
219
|
+
readonly content: readonly MessagePart[];
|
|
220
|
+
} | {
|
|
221
|
+
readonly kind: "reasoning";
|
|
222
|
+
readonly text: string;
|
|
223
|
+
} | {
|
|
224
|
+
readonly kind: "tool_call";
|
|
225
|
+
readonly callId: string;
|
|
226
|
+
readonly name: string;
|
|
227
|
+
readonly input: string;
|
|
228
|
+
readonly output: readonly MessagePart[];
|
|
229
|
+
readonly status: "running" | "completed" | "failed";
|
|
230
|
+
readonly truncated: boolean;
|
|
231
|
+
} | {
|
|
232
|
+
readonly kind: "interaction";
|
|
233
|
+
readonly interaction: SessionInteraction;
|
|
234
|
+
} | {
|
|
235
|
+
readonly kind: "error";
|
|
236
|
+
readonly code: string;
|
|
237
|
+
readonly message: string;
|
|
238
|
+
} | {
|
|
239
|
+
readonly kind: "compaction";
|
|
240
|
+
readonly summary: string;
|
|
241
|
+
} | {
|
|
242
|
+
readonly kind: "todo";
|
|
243
|
+
readonly items: readonly {
|
|
244
|
+
readonly id: string;
|
|
245
|
+
readonly text: string;
|
|
246
|
+
readonly status: "pending" | "in_progress" | "completed";
|
|
247
|
+
}[];
|
|
248
|
+
});
|
|
249
|
+
export type SessionEvent = ControllerFence & {
|
|
250
|
+
readonly protocol: typeof SESSION_PROTOCOL;
|
|
251
|
+
readonly eventSeq: DecimalSequence;
|
|
252
|
+
readonly historyEpoch: string;
|
|
253
|
+
} & ({
|
|
254
|
+
readonly kind: "timeline_upsert";
|
|
255
|
+
readonly payload: TimelineEntry;
|
|
256
|
+
} | {
|
|
257
|
+
readonly kind: "snapshot";
|
|
258
|
+
readonly payload: SessionSnapshot;
|
|
259
|
+
} | {
|
|
260
|
+
readonly kind: "operation";
|
|
261
|
+
readonly payload: SessionOperation;
|
|
262
|
+
} | {
|
|
263
|
+
readonly kind: "resource";
|
|
264
|
+
readonly payload: SessionResource;
|
|
265
|
+
} | {
|
|
266
|
+
readonly kind: "gap";
|
|
267
|
+
readonly payload: {
|
|
268
|
+
readonly reason: string;
|
|
269
|
+
readonly cursor: string | null;
|
|
270
|
+
};
|
|
271
|
+
});
|
|
272
|
+
export declare const sessionBindingKeys: (value: unknown) => readonly string[];
|
|
273
|
+
export declare const sessionBinding: (value: unknown) => SessionBinding;
|
|
274
|
+
export declare const sessionFence: (data: SessionFence) => SessionFence;
|
|
275
|
+
export declare const sessionFenceKey: (data: SessionFence) => string;
|
|
276
|
+
export declare const assertSessionFence: (actual: SessionFence & {
|
|
277
|
+
readonly connectionEpoch?: string;
|
|
278
|
+
}, expected: SessionFence & {
|
|
279
|
+
readonly connectionEpoch?: string;
|
|
280
|
+
}) => void;
|
|
281
|
+
export declare const parseInteractionResponse: (value: unknown) => InteractionResponse;
|
|
282
|
+
export declare const parseSessionCommand: (value: unknown) => SessionCommand;
|
|
283
|
+
export declare const sessionControlKeys: (value: unknown) => string[];
|
|
284
|
+
export declare const parseSessionControlFields: (data: Record<string, unknown>) => Pick<SessionSnapshot, "controls" | "turnStartedAt">;
|
|
285
|
+
export declare const parseSessionSnapshot: (value: unknown) => SessionSnapshot;
|
|
286
|
+
export declare const parseSessionOperation: (value: unknown) => SessionOperation;
|
|
287
|
+
export declare const parseSessionResource: (value: unknown) => SessionResource;
|
|
288
|
+
export declare const parseSessionInteraction: (value: unknown) => SessionInteraction;
|
|
289
|
+
export declare const parseTimelineEntry: (value: unknown) => TimelineEntry;
|
|
290
|
+
export declare const parseSessionEvent: (value: unknown) => SessionEvent;
|