@oscharko-dev/keiko-contracts 0.2.8 → 0.2.9

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 (106) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/bff-wire.d.ts +33 -0
  3. package/dist/bff-wire.d.ts.map +1 -1
  4. package/dist/command-runner.d.ts +81 -0
  5. package/dist/command-runner.d.ts.map +1 -0
  6. package/dist/command-runner.js +209 -0
  7. package/dist/container-runtime.d.ts +125 -0
  8. package/dist/container-runtime.d.ts.map +1 -0
  9. package/dist/container-runtime.js +287 -0
  10. package/dist/context-engineering.js +2 -2
  11. package/dist/discussion-intelligence.d.ts +70 -0
  12. package/dist/discussion-intelligence.d.ts.map +1 -0
  13. package/dist/discussion-intelligence.js +440 -0
  14. package/dist/editor-agent-governance.d.ts +65 -0
  15. package/dist/editor-agent-governance.d.ts.map +1 -0
  16. package/dist/editor-agent-governance.js +180 -0
  17. package/dist/editor-agent.d.ts +29 -1
  18. package/dist/editor-agent.d.ts.map +1 -1
  19. package/dist/editor-agent.js +183 -6
  20. package/dist/editor-builtin-capabilities.d.ts +13 -0
  21. package/dist/editor-builtin-capabilities.d.ts.map +1 -0
  22. package/dist/editor-builtin-capabilities.js +135 -0
  23. package/dist/editor-language-mode-map.d.ts +11 -0
  24. package/dist/editor-language-mode-map.d.ts.map +1 -0
  25. package/dist/editor-language-mode-map.js +89 -0
  26. package/dist/editor-layout.d.ts +37 -0
  27. package/dist/editor-layout.d.ts.map +1 -1
  28. package/dist/editor-layout.js +125 -8
  29. package/dist/editor-workspace-path.d.ts +20 -0
  30. package/dist/editor-workspace-path.d.ts.map +1 -0
  31. package/dist/editor-workspace-path.js +133 -0
  32. package/dist/evidence.d.ts +3 -1
  33. package/dist/evidence.d.ts.map +1 -1
  34. package/dist/gateway.d.ts +72 -3
  35. package/dist/gateway.d.ts.map +1 -1
  36. package/dist/gateway.js +73 -3
  37. package/dist/git-commit-intent.d.ts +28 -0
  38. package/dist/git-commit-intent.d.ts.map +1 -0
  39. package/dist/git-commit-intent.js +155 -0
  40. package/dist/git-commit-policy.d.ts +29 -0
  41. package/dist/git-commit-policy.d.ts.map +1 -0
  42. package/dist/git-commit-policy.js +173 -0
  43. package/dist/git-delivery-action-sheet.d.ts +157 -0
  44. package/dist/git-delivery-action-sheet.d.ts.map +1 -0
  45. package/dist/git-delivery-action-sheet.js +430 -0
  46. package/dist/git-delivery-evidence.d.ts +92 -0
  47. package/dist/git-delivery-evidence.d.ts.map +1 -0
  48. package/dist/git-delivery-evidence.js +272 -0
  49. package/dist/git-delivery-policy.d.ts +40 -0
  50. package/dist/git-delivery-policy.d.ts.map +1 -0
  51. package/dist/git-delivery-policy.js +183 -0
  52. package/dist/git-delivery-provider.d.ts +53 -0
  53. package/dist/git-delivery-provider.d.ts.map +1 -0
  54. package/dist/git-delivery-provider.js +96 -0
  55. package/dist/git-delivery.d.ts +202 -0
  56. package/dist/git-delivery.d.ts.map +1 -0
  57. package/dist/git-delivery.js +410 -0
  58. package/dist/git-history.d.ts +27 -0
  59. package/dist/git-history.d.ts.map +1 -0
  60. package/dist/git-history.js +73 -0
  61. package/dist/git-merge.d.ts +67 -0
  62. package/dist/git-merge.d.ts.map +1 -0
  63. package/dist/git-merge.js +323 -0
  64. package/dist/git-pull-request.d.ts +112 -0
  65. package/dist/git-pull-request.d.ts.map +1 -0
  66. package/dist/git-pull-request.js +351 -0
  67. package/dist/git-repository-agent.d.ts +46 -0
  68. package/dist/git-repository-agent.d.ts.map +1 -0
  69. package/dist/git-repository-agent.js +198 -0
  70. package/dist/git-repository-summary.d.ts +54 -0
  71. package/dist/git-repository-summary.d.ts.map +1 -0
  72. package/dist/git-repository-summary.js +105 -0
  73. package/dist/git-repository.d.ts +60 -0
  74. package/dist/git-repository.d.ts.map +1 -0
  75. package/dist/git-repository.js +106 -0
  76. package/dist/git-sync.d.ts +49 -0
  77. package/dist/git-sync.d.ts.map +1 -0
  78. package/dist/git-sync.js +110 -0
  79. package/dist/index.d.ts +63 -9
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +33 -6
  82. package/dist/lsp-process.d.ts +38 -0
  83. package/dist/lsp-process.d.ts.map +1 -0
  84. package/dist/lsp-process.js +103 -0
  85. package/dist/runtime-capabilities.d.ts +44 -0
  86. package/dist/runtime-capabilities.d.ts.map +1 -0
  87. package/dist/runtime-capabilities.js +141 -0
  88. package/dist/task-workspace.d.ts +302 -0
  89. package/dist/task-workspace.d.ts.map +1 -0
  90. package/dist/task-workspace.js +1236 -0
  91. package/dist/voice-action-intent.d.ts +86 -0
  92. package/dist/voice-action-intent.d.ts.map +1 -0
  93. package/dist/voice-action-intent.js +387 -0
  94. package/dist/voice-playback.d.ts +50 -0
  95. package/dist/voice-playback.d.ts.map +1 -0
  96. package/dist/voice-playback.js +240 -0
  97. package/dist/voice-protocol.d.ts +165 -0
  98. package/dist/voice-protocol.d.ts.map +1 -0
  99. package/dist/voice-protocol.js +312 -0
  100. package/dist/voice-transcript.d.ts +57 -0
  101. package/dist/voice-transcript.d.ts.map +1 -0
  102. package/dist/voice-transcript.js +221 -0
  103. package/package.json +5 -1
  104. package/dist/conversation-budget.d.ts +0 -37
  105. package/dist/conversation-budget.d.ts.map +0 -1
  106. package/dist/conversation-budget.js +0 -97
@@ -0,0 +1,240 @@
1
+ // Public type contract for the optional Voice Digital Twin assistant speech-output playback lifecycle
2
+ // (Epic #491, Issue #501, ADR-0064). This module DEFINES the provider-neutral semantics that let Keiko
3
+ // render and control an *optional* spoken assistant response — preparing, speaking, pausing, resuming,
4
+ // interrupting (barge-in), stopping, failing, and completing — WITHOUT deploying any new text-to-speech
5
+ // model and WITHOUT making speech a precondition for using Keiko. It is pure data + pure functions only:
6
+ // nothing performs IO, crypto, clock reads, randomness, or audio processing, and no provider base URL,
7
+ // credential, or raw audio buffer is ever a field on these types. The playback STATE is content-free by
8
+ // construction — raw assistant audio is media-plane only (`VOICE_MEDIA_PLANE`, `never-persisted`,
9
+ // `raw-media`) and is never a field here (AC3/AC4).
10
+ //
11
+ // It is layered ABOVE the #496 wire protocol (voice-protocol.ts): the wire carries five coarse playback
12
+ // states (`idle`, `playing`, `paused`, `stopped`, `interrupted`) on the single `playback.state` control
13
+ // message, whereas the lifecycle here has eight PHASES that additionally distinguish "not available for
14
+ // this turn" (`unavailable`), provider preparation (`preparing`), provider failure (`failed`), and a
15
+ // natural end (`complete`). Only the phases that have a wire counterpart project onto the wire
16
+ // (`mapVoicePlaybackPhaseToWireState`); `unavailable`, `preparing`, `failed`, and `complete` are derived
17
+ // or local phases, exactly as the #500 transcript lifecycle and the #499 turn manager map a richer
18
+ // semantic set onto the same coarse wire catalog (ADR-0062, ADR-0063). The stateful reducer that drives
19
+ // these phases lives in keiko-ui (`voice-playback-state.ts`) as a synchronous deterministic engine; this
20
+ // leaf contract holds the phase catalog, the classification tables, the legal-transition table, the
21
+ // capability-gating predicates, the effect vocabulary, the validators, and the content-free turn summary
22
+ // so later voice consumers (#502 discussion intelligence and memory review) can read playback outcomes
23
+ // without forking the reducer.
24
+ //
25
+ // `VOICE_PLAYBACK_SCHEMA_VERSION` follows the same evolution rule as `VOICE_PROTOCOL_VERSION` /
26
+ // `VOICE_TRANSCRIPT_SCHEMA_VERSION`: a breaking change introduces a NEW literal rather than mutating "1".
27
+ // It is INDEPENDENT of the wire `VOICE_PROTOCOL_VERSION` and of `CONVERSATION_CAPABILITY_CONTRACT_VERSION`.
28
+ // Leaf-package rule (ADR-0019 direction 1): no `@oscharko-dev/keiko-*` imports may appear here; sibling
29
+ // types are reached by relative path.
30
+ import { VOICE_MEDIA_PLANE, voiceMessageAllowedForProfile } from "./voice-protocol.js";
31
+ // ─── Schema version ───────────────────────────────────────────────────────────
32
+ export const VOICE_PLAYBACK_SCHEMA_VERSION = "1";
33
+ export function isVoicePlaybackSchemaVersionSupported(version) {
34
+ return version === VOICE_PLAYBACK_SCHEMA_VERSION;
35
+ }
36
+ export const VOICE_PLAYBACK_PHASES = [
37
+ "unavailable",
38
+ "preparing",
39
+ "speaking",
40
+ "paused",
41
+ "interrupted",
42
+ "canceled",
43
+ "failed",
44
+ "complete",
45
+ ];
46
+ // The phases in which audio is live or imminent. While active, the user-facing controls (pause / resume
47
+ // / stop / interrupt / mute) are meaningful; outside them the surface offers only replay-if-permitted
48
+ // and the always-present text fallback.
49
+ export const VOICE_PLAYBACK_ACTIVE_PHASES = [
50
+ "preparing",
51
+ "speaking",
52
+ "paused",
53
+ ];
54
+ // The terminal lifecycle facts of a single assistant turn's playback. These are the durable, content-free
55
+ // outcomes a turn summary or discussion-intelligence pass (#502) may read.
56
+ export const VOICE_PLAYBACK_SETTLED_PHASES = [
57
+ "interrupted",
58
+ "canceled",
59
+ "failed",
60
+ "complete",
61
+ ];
62
+ export const VOICE_PLAYBACK_FAILURE_KINDS = [
63
+ "rate-limited",
64
+ "timeout",
65
+ "provider-error",
66
+ "unavailable",
67
+ "internal",
68
+ ];
69
+ // ─── Per-phase classification tables (aligned to voice-protocol.ts) ─────────────
70
+ // Keyed by `VoicePlaybackPhase` so adding a phase without classifying it is a compile error (totality).
71
+ //
72
+ // Replay (AC5 reconnect semantics): the durable, settled lifecycle facts (`interrupted`, `canceled`,
73
+ // `failed`, `complete`) are `replayable` — a reconnect re-delivers that the assistant turn ended a
74
+ // certain way so turn accounting stays consistent. The in-flight phases (`preparing`,
75
+ // `speaking`, `paused`) are `ephemeral`: a reconnect never re-delivers them and never re-plays the
76
+ // audio, mirroring `transcript.partial`. `unavailable` is `ephemeral` (dormant, never a durable fact).
77
+ export const VOICE_PLAYBACK_PHASE_REPLAY = {
78
+ unavailable: "ephemeral",
79
+ preparing: "ephemeral",
80
+ speaking: "ephemeral",
81
+ paused: "ephemeral",
82
+ interrupted: "replayable",
83
+ canceled: "replayable",
84
+ failed: "replayable",
85
+ complete: "replayable",
86
+ };
87
+ // Redaction: EVERY playback phase is `content-free`. A playback phase is an enum literal describing
88
+ // control state; it never carries reviewable text, secret-bearing signaling, or raw audio. Raw assistant
89
+ // audio is media-plane only (`VOICE_MEDIA_PLANE`: `never-persisted`, `raw-media`) and is never a field on
90
+ // any type in this module. This table is the AC3/AC4 invariant expressed as data: no playback phase is
91
+ // ever anything but `content-free`, so a playback record can never become a channel for audio or
92
+ // credentials.
93
+ export const VOICE_PLAYBACK_PHASE_REDACTION = {
94
+ unavailable: "content-free",
95
+ preparing: "content-free",
96
+ speaking: "content-free",
97
+ paused: "content-free",
98
+ interrupted: "content-free",
99
+ canceled: "content-free",
100
+ failed: "content-free",
101
+ complete: "content-free",
102
+ };
103
+ // The media-plane descriptor that governs the raw assistant audio this lifecycle controls. Re-exported
104
+ // from the #496 protocol so the playback contract and the wire agree that audio is never-persisted,
105
+ // raw-media, media-plane only — the typed expression of AC4 ("raw assistant audio is not stored by
106
+ // default"). It is intentionally the SAME object the protocol pins; this module adds no new audio path.
107
+ export const VOICE_PLAYBACK_AUDIO_PLANE = VOICE_MEDIA_PLANE;
108
+ // ─── Legal transition table (Deliverable: reducer / state-machine rules) ────────
109
+ // The set of phases reachable from a given phase by a state-CHANGING transition. Mute is intentionally
110
+ // ABSENT: muting silences output without changing the phase (it is an orthogonal boolean), exactly as a
111
+ // backchannel never changes the turn manager's state. Keyed by phase for totality.
112
+ //
113
+ // `unavailable` → `preparing` arms a new turn; the capability gate (`voicePlaybackAllowedForProfile`)
114
+ // rejects that transition for a profile without speech output, so a no-capability deployment is pinned in
115
+ // `unavailable` permanently (AC1). Every settled phase can be re-armed to `preparing` (a fresh turn or a
116
+ // permitted replay). `preparing` may reach `complete` directly for an empty / instantly-finished
117
+ // utterance. `interrupted` / `canceled` / `failed` / `complete` are otherwise terminal for the turn.
118
+ export const VOICE_PLAYBACK_TRANSITIONS = {
119
+ unavailable: ["preparing"],
120
+ preparing: ["speaking", "complete", "canceled", "failed"],
121
+ speaking: ["paused", "interrupted", "canceled", "failed", "complete"],
122
+ paused: ["speaking", "interrupted", "canceled", "complete"],
123
+ interrupted: ["preparing"],
124
+ canceled: ["preparing"],
125
+ failed: ["preparing"],
126
+ complete: ["preparing"],
127
+ };
128
+ // ─── Type guards & lookups ───────────────────────────────────────────────────────
129
+ export function isVoicePlaybackPhase(value) {
130
+ return typeof value === "string" && VOICE_PLAYBACK_PHASES.includes(value);
131
+ }
132
+ export function isVoicePlaybackFailureKind(value) {
133
+ return (typeof value === "string" && VOICE_PLAYBACK_FAILURE_KINDS.includes(value));
134
+ }
135
+ export function voicePlaybackPhaseReplayClass(phase) {
136
+ return VOICE_PLAYBACK_PHASE_REPLAY[phase];
137
+ }
138
+ export function voicePlaybackPhaseRedactionClass(phase) {
139
+ return VOICE_PLAYBACK_PHASE_REDACTION[phase];
140
+ }
141
+ // Whether audio is live or imminent in this phase (the user-facing transport controls are meaningful).
142
+ export function isActiveVoicePlaybackPhase(phase) {
143
+ return VOICE_PLAYBACK_ACTIVE_PHASES.includes(phase);
144
+ }
145
+ // Whether this phase is a terminal lifecycle fact of the turn's playback (AC5 consumption).
146
+ export function isSettledVoicePlaybackPhase(phase) {
147
+ return VOICE_PLAYBACK_SETTLED_PHASES.includes(phase);
148
+ }
149
+ // Whether `to` is reachable from `from` by a legal state-changing transition.
150
+ export function canTransitionVoicePlayback(from, to) {
151
+ return VOICE_PLAYBACK_TRANSITIONS[from].includes(to);
152
+ }
153
+ // Exhaustiveness guard: a `default` / fall-through that reaches this fails to type-check if a new
154
+ // `VoicePlaybackPhase` is added without handling, mirroring `assertNeverVoiceTranscriptSegmentState`.
155
+ export function assertNeverVoicePlaybackPhase(phase) {
156
+ throw new Error(`unhandled voice playback phase: ${JSON.stringify(phase)}`);
157
+ }
158
+ // ─── Phase ↔ wire-state mapping ──────────────────────────────────────────────────
159
+ // The coarse wire `VoicePlaybackState` (`playback.state`, voice-protocol.ts) a phase projects onto.
160
+ // `unavailable` has no wire state (dormant — there is nothing to report on the wire) and returns
161
+ // `undefined`. `preparing` and `complete` both map to `idle` (nothing audible); `canceled` and `failed`
162
+ // both map to `stopped` (playback halted). A strict 1:1 phase↔wire map is impossible by design — the
163
+ // same lesson the #499 turn manager and #500 transcript lifecycle record.
164
+ export function mapVoicePlaybackPhaseToWireState(phase) {
165
+ switch (phase) {
166
+ case "unavailable":
167
+ return undefined;
168
+ case "preparing":
169
+ return "idle";
170
+ case "speaking":
171
+ return "playing";
172
+ case "paused":
173
+ return "paused";
174
+ case "interrupted":
175
+ return "interrupted";
176
+ case "canceled":
177
+ return "stopped";
178
+ case "failed":
179
+ return "stopped";
180
+ case "complete":
181
+ return "idle";
182
+ default:
183
+ return assertNeverVoicePlaybackPhase(phase);
184
+ }
185
+ }
186
+ export const VOICE_PLAYBACK_EFFECTS = [
187
+ "request-synthesis",
188
+ "start-output",
189
+ "pause-output",
190
+ "resume-output",
191
+ "stop-output",
192
+ "mute-output",
193
+ "unmute-output",
194
+ "notify-turn-speech-start",
195
+ "notify-turn-speech-completed",
196
+ "notify-turn-speech-stopped",
197
+ "notify-turn-interrupt",
198
+ ];
199
+ export function isVoicePlaybackEffect(value) {
200
+ return typeof value === "string" && VOICE_PLAYBACK_EFFECTS.includes(value);
201
+ }
202
+ // ─── Capability-gating predicates (AC1/AC2) — derived from the contract ─────────
203
+ // The single source of truth for capability gating is `voiceMessageAllowedForProfile`; these predicates
204
+ // derive the playback-relevant capabilities from it rather than re-encoding the profile table. A profile
205
+ // permits assistant speech output exactly when it permits the `playback.state` control message, and
206
+ // permits interruption (barge-in) exactly when it permits `control.interrupt`. By the #496 profile table
207
+ // `none` and `speech-to-text` permit neither (playback is dormant / `unavailable`), while `speech-output`
208
+ // and `full-realtime` permit both. This is why "the current known deployed voice capability is STT-only"
209
+ // renders no playback affordance (AC1) without any special case here.
210
+ export function voicePlaybackAllowedForProfile(profile) {
211
+ return voiceMessageAllowedForProfile("playback.state", profile);
212
+ }
213
+ export function voicePlaybackInterruptAllowedForProfile(profile) {
214
+ return voiceMessageAllowedForProfile("control.interrupt", profile);
215
+ }
216
+ // The phase a freshly constructed controller starts in for a profile: `unavailable` always, because no
217
+ // turn has produced audio yet. For a non-capable profile this is also the permanent phase (the gate
218
+ // rejects every arming transition); for a capable profile it is the disarmed resting phase from which a
219
+ // new turn arms `preparing`.
220
+ export function initialVoicePlaybackPhase(_profile) {
221
+ return "unavailable";
222
+ }
223
+ // Build the content-free summary for a turn from its final phase and content-free counters. `spoke` is
224
+ // true once the turn ever produced audible output (it reached at least `speaking`), which the caller
225
+ // tracks; `completed` / `interrupted` / `failed` are derived from the terminal phase so they cannot
226
+ // disagree with it.
227
+ export function summarizeVoicePlaybackTurn(input) {
228
+ return {
229
+ schemaVersion: VOICE_PLAYBACK_SCHEMA_VERSION,
230
+ phase: input.phase,
231
+ available: input.available,
232
+ spoke: input.spoke,
233
+ completed: input.phase === "complete",
234
+ interrupted: input.phase === "interrupted",
235
+ failed: input.phase === "failed",
236
+ interruptions: input.interruptions,
237
+ replays: input.replays,
238
+ failureKind: input.phase === "failed" ? input.failureKind : undefined,
239
+ };
240
+ }
@@ -0,0 +1,165 @@
1
+ import type { VoicePersona, VoiceProfile, VoiceProviderLocality, VoiceUnavailableReason } from "./gateway.js";
2
+ export declare const VOICE_PROTOCOL_VERSION: "1";
3
+ export declare function isVoiceProtocolVersionSupported(version: unknown): boolean;
4
+ export type VoicePlane = "control" | "media";
5
+ export declare const VOICE_PLANES: readonly VoicePlane[];
6
+ export type VoiceControlTransport = "loopback-http-sse" | "loopback-websocket";
7
+ export declare const VOICE_CONTROL_TRANSPORTS: readonly VoiceControlTransport[];
8
+ export declare const VOICE_CONTROL_TRANSPORT_V1: VoiceControlTransport;
9
+ export type VoiceMediaTransport = "none" | "gateway-batch" | "webrtc";
10
+ export declare const VOICE_MEDIA_TRANSPORTS: readonly VoiceMediaTransport[];
11
+ export type VoiceNegotiationMode = "proxied-sdp" | "direct-ephemeral" | "disabled";
12
+ export declare const VOICE_NEGOTIATION_MODES: readonly VoiceNegotiationMode[];
13
+ export declare const PREFERRED_VOICE_NEGOTIATION_MODE: VoiceNegotiationMode;
14
+ export type VoiceReplayClass = "replayable" | "ephemeral" | "never-persisted";
15
+ export declare const VOICE_REPLAY_CLASSES: readonly VoiceReplayClass[];
16
+ export type VoiceRedactionClass = "content-free" | "reviewable-text" | "secret-bearing" | "raw-media";
17
+ export declare const VOICE_REDACTION_CLASSES: readonly VoiceRedactionClass[];
18
+ export type VoiceMessageDirection = "client-to-host" | "host-to-client";
19
+ export declare const VOICE_MESSAGE_DIRECTIONS: readonly VoiceMessageDirection[];
20
+ export type VoiceMediaTrackKind = "audio-in" | "audio-out";
21
+ export declare const VOICE_MEDIA_TRACK_KINDS: readonly VoiceMediaTrackKind[];
22
+ export interface VoiceMediaPlaneDescriptor {
23
+ readonly plane: "media";
24
+ readonly transport: "webrtc";
25
+ readonly trackKinds: readonly VoiceMediaTrackKind[];
26
+ readonly replay: "never-persisted";
27
+ readonly redaction: "raw-media";
28
+ }
29
+ export declare const VOICE_MEDIA_PLANE: VoiceMediaPlaneDescriptor;
30
+ export type VoiceControlMessageKind = "session.create" | "session.created" | "session.close" | "session.closed" | "capability.offer" | "capability.select" | "signal.sdp.offer" | "signal.sdp.answer" | "signal.ice.candidate" | "media.track.state" | "control.cancel" | "control.interrupt" | "transcript.partial" | "transcript.committed" | "transcript.discarded" | "playback.state" | "policy.decision" | "error";
31
+ export declare const VOICE_CONTROL_MESSAGE_KINDS: readonly VoiceControlMessageKind[];
32
+ export type VoiceDataChannelEventKind = "control.interrupt" | "transcript.partial" | "playback.state";
33
+ export declare const VOICE_DATA_CHANNEL_EVENT_KINDS: readonly VoiceDataChannelEventKind[];
34
+ export type VoiceSessionCloseReason = "client-request" | "host-request" | "policy-disabled" | "provider-unreachable" | "timeout" | "protocol-error";
35
+ export declare const VOICE_SESSION_CLOSE_REASONS: readonly VoiceSessionCloseReason[];
36
+ export type VoiceMediaTrackState = "negotiating" | "live" | "muted" | "ended";
37
+ export declare const VOICE_MEDIA_TRACK_STATES: readonly VoiceMediaTrackState[];
38
+ export type VoicePlaybackState = "idle" | "playing" | "paused" | "stopped" | "interrupted";
39
+ export declare const VOICE_PLAYBACK_STATES: readonly VoicePlaybackState[];
40
+ export type VoicePolicyDecision = "allow" | "deny" | "degrade";
41
+ export declare const VOICE_POLICY_DECISIONS: readonly VoicePolicyDecision[];
42
+ export type VoiceProtocolErrorCode = "unsupported-version" | "invalid-message" | "capability-unavailable" | "not-allowed-for-profile" | "negotiation-failed" | "rate-limited" | "internal";
43
+ export declare const VOICE_PROTOCOL_ERROR_CODES: readonly VoiceProtocolErrorCode[];
44
+ interface VoiceControlEnvelope<K extends VoiceControlMessageKind> {
45
+ readonly protocolVersion: typeof VOICE_PROTOCOL_VERSION;
46
+ readonly sessionId: string;
47
+ readonly seq: number;
48
+ readonly direction: VoiceMessageDirection;
49
+ readonly kind: K;
50
+ }
51
+ export interface VoiceSessionMemoryContext {
52
+ readonly enabled: boolean;
53
+ readonly budgetTokens?: number | undefined;
54
+ }
55
+ export type VoiceSessionGroundingKind = "files" | "knowledge" | "hybrid" | "multi";
56
+ export interface VoiceSessionGroundingContext {
57
+ readonly enabled: boolean;
58
+ readonly sourceCount: number;
59
+ readonly kind: VoiceSessionGroundingKind;
60
+ }
61
+ export interface VoiceSessionChatContext {
62
+ readonly chatId: string;
63
+ readonly memory?: VoiceSessionMemoryContext | undefined;
64
+ readonly grounding?: VoiceSessionGroundingContext | undefined;
65
+ }
66
+ export interface VoiceSessionCreateMessage extends VoiceControlEnvelope<"session.create"> {
67
+ readonly idempotencyKey: string;
68
+ readonly requestedProfile: VoiceProfile;
69
+ readonly negotiationMode: VoiceNegotiationMode;
70
+ readonly persona?: VoicePersona | undefined;
71
+ readonly chatContext?: VoiceSessionChatContext | undefined;
72
+ }
73
+ export interface VoiceSessionCreatedMessage extends VoiceControlEnvelope<"session.created"> {
74
+ readonly profile: VoiceProfile;
75
+ readonly controlTransport: VoiceControlTransport;
76
+ readonly mediaTransport: VoiceMediaTransport;
77
+ readonly negotiationMode: VoiceNegotiationMode;
78
+ readonly providerLocality?: VoiceProviderLocality | undefined;
79
+ }
80
+ export interface VoiceSessionCloseMessage extends VoiceControlEnvelope<"session.close"> {
81
+ readonly reason: VoiceSessionCloseReason;
82
+ }
83
+ export interface VoiceSessionClosedMessage extends VoiceControlEnvelope<"session.closed"> {
84
+ readonly reason: VoiceSessionCloseReason;
85
+ }
86
+ export interface VoiceCapabilityOfferMessage extends VoiceControlEnvelope<"capability.offer"> {
87
+ readonly profile: VoiceProfile;
88
+ readonly capabilities: {
89
+ readonly speechToText: boolean;
90
+ readonly speechOutput: boolean;
91
+ readonly realtimeVoice: boolean;
92
+ };
93
+ }
94
+ export interface VoiceCapabilitySelectMessage extends VoiceControlEnvelope<"capability.select"> {
95
+ readonly profile: VoiceProfile;
96
+ }
97
+ export interface VoiceSdpOfferMessage extends VoiceControlEnvelope<"signal.sdp.offer"> {
98
+ readonly sdp: string;
99
+ }
100
+ export interface VoiceSdpAnswerMessage extends VoiceControlEnvelope<"signal.sdp.answer"> {
101
+ readonly sdp: string;
102
+ }
103
+ export interface VoiceIceCandidateMessage extends VoiceControlEnvelope<"signal.ice.candidate"> {
104
+ readonly candidate: string;
105
+ readonly sdpMid?: string | null | undefined;
106
+ readonly sdpMLineIndex?: number | null | undefined;
107
+ }
108
+ export interface VoiceMediaTrackStateMessage extends VoiceControlEnvelope<"media.track.state"> {
109
+ readonly track: VoiceMediaTrackKind;
110
+ readonly state: VoiceMediaTrackState;
111
+ }
112
+ export type VoiceControlCancelMessage = VoiceControlEnvelope<"control.cancel">;
113
+ export interface VoiceControlInterruptMessage extends VoiceControlEnvelope<"control.interrupt"> {
114
+ readonly atMs?: number | undefined;
115
+ }
116
+ export interface VoiceTranscriptPartialMessage extends VoiceControlEnvelope<"transcript.partial"> {
117
+ readonly text: string;
118
+ }
119
+ export interface VoiceTranscriptCommittedMessage extends VoiceControlEnvelope<"transcript.committed"> {
120
+ readonly text: string;
121
+ }
122
+ export type VoiceTranscriptDiscardedMessage = VoiceControlEnvelope<"transcript.discarded">;
123
+ export interface VoicePlaybackStateMessage extends VoiceControlEnvelope<"playback.state"> {
124
+ readonly state: VoicePlaybackState;
125
+ }
126
+ export interface VoicePolicyDecisionMessage extends VoiceControlEnvelope<"policy.decision"> {
127
+ readonly decision: VoicePolicyDecision;
128
+ readonly reason?: VoiceUnavailableReason | undefined;
129
+ }
130
+ export interface VoiceErrorMessage extends VoiceControlEnvelope<"error"> {
131
+ readonly code: VoiceProtocolErrorCode;
132
+ }
133
+ export type VoiceControlMessage = VoiceSessionCreateMessage | VoiceSessionCreatedMessage | VoiceSessionCloseMessage | VoiceSessionClosedMessage | VoiceCapabilityOfferMessage | VoiceCapabilitySelectMessage | VoiceSdpOfferMessage | VoiceSdpAnswerMessage | VoiceIceCandidateMessage | VoiceMediaTrackStateMessage | VoiceControlCancelMessage | VoiceControlInterruptMessage | VoiceTranscriptPartialMessage | VoiceTranscriptCommittedMessage | VoiceTranscriptDiscardedMessage | VoicePlaybackStateMessage | VoicePolicyDecisionMessage | VoiceErrorMessage;
134
+ export declare const VOICE_CONTROL_MESSAGE_REPLAY: Record<VoiceControlMessageKind, VoiceReplayClass>;
135
+ export declare const VOICE_CONTROL_MESSAGE_REDACTION: Record<VoiceControlMessageKind, VoiceRedactionClass>;
136
+ export declare const VOICE_PROFILE_ALLOWED_MESSAGE_KINDS: Record<VoiceProfile, readonly VoiceControlMessageKind[]>;
137
+ export declare const VOICE_PROFILE_MEDIA_TRANSPORT: Record<VoiceProfile, VoiceMediaTransport>;
138
+ export declare const VOICE_PROFILE_NEGOTIATION_MODE: Record<VoiceProfile, VoiceNegotiationMode>;
139
+ export interface VoiceProtocolTimeouts {
140
+ readonly sessionCreateMs: number;
141
+ readonly signalingMs: number;
142
+ readonly heartbeatIntervalMs: number;
143
+ readonly reconnectBackoffInitialMs: number;
144
+ readonly reconnectBackoffMaxMs: number;
145
+ readonly maxReconnectAttempts: number;
146
+ }
147
+ export declare const DEFAULT_VOICE_PROTOCOL_TIMEOUTS: VoiceProtocolTimeouts;
148
+ export type VoiceProtocolValidation = {
149
+ readonly ok: true;
150
+ } | {
151
+ readonly ok: false;
152
+ readonly reasons: readonly string[];
153
+ };
154
+ export declare function isVoiceControlMessageKind(value: unknown): value is VoiceControlMessageKind;
155
+ export declare function isVoiceMessageDirection(value: unknown): value is VoiceMessageDirection;
156
+ export declare function isVoiceNegotiationMode(value: unknown): value is VoiceNegotiationMode;
157
+ export declare function voiceControlMessageReplayClass(kind: VoiceControlMessageKind): VoiceReplayClass;
158
+ export declare function voiceControlMessageRedactionClass(kind: VoiceControlMessageKind): VoiceRedactionClass;
159
+ export declare function isVoiceReplayEligible(kind: VoiceControlMessageKind): boolean;
160
+ export declare function voiceMessageAllowedForProfile(kind: VoiceControlMessageKind, profile: VoiceProfile): boolean;
161
+ export declare function assertNeverVoiceControlMessageKind(kind: never): never;
162
+ export declare function isVoiceControlMessage(value: unknown): value is VoiceControlMessage;
163
+ export declare function validateVoiceControlMessage(value: unknown): VoiceProtocolValidation;
164
+ export {};
165
+ //# sourceMappingURL=voice-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-protocol.d.ts","sourceRoot":"","sources":["../src/voice-protocol.ts"],"names":[],"mappings":"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"}