openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
584 lines (583 loc) • 24.5 kB
JavaScript
import { t as closedObject } from "./closed-object-DGvQfpTV.mjs";
import { a as NonEmptyString, o as SecretInputSchema } from "./primitives-CYT6MDvz.mjs";
import { t as GatewayEventLoopHealthSchema } from "./runtime-vitals-BAzwMWci.mjs";
import { Type } from "typebox";
//#region packages/gateway-protocol/src/schema/channels.ts
const TalkModeParamsSchema = closedObject({
enabled: Type.Boolean(),
phase: Type.Optional(Type.String())
});
/** Reads Talk configuration; secrets are included only for trusted callers. */
const TalkConfigParamsSchema = closedObject({ includeSecrets: Type.Optional(Type.Boolean()) });
const TalkSpeakParamsSchema = closedObject({
text: NonEmptyString,
voiceId: Type.Optional(Type.String()),
modelId: Type.Optional(Type.String()),
outputFormat: Type.Optional(Type.String()),
speed: Type.Optional(Type.Number()),
rateWpm: Type.Optional(Type.Integer({ minimum: 1 })),
stability: Type.Optional(Type.Number()),
similarity: Type.Optional(Type.Number()),
style: Type.Optional(Type.Number()),
speakerBoost: Type.Optional(Type.Boolean()),
seed: Type.Optional(Type.Integer({ minimum: 0 })),
normalize: Type.Optional(Type.String()),
language: Type.Optional(Type.String()),
latencyTier: Type.Optional(Type.Integer({ minimum: 0 }))
});
/**
* One-shot text-to-speech request rendered with the configured TTS provider
* chain (unlike `talk.speak`, which pins the Talk-mode provider).
*/
const TtsSpeakParamsSchema = closedObject({ text: NonEmptyString });
const TalkModeSchema = Type.Union([
Type.Literal("realtime"),
Type.Literal("stt-tts"),
Type.Literal("transcription")
]);
/** Transport families; browser clients branch on this value to choose setup flow. */
const TalkTransportSchema = Type.Union([
Type.Literal("webrtc"),
Type.Literal("provider-websocket"),
Type.Literal("gateway-relay"),
Type.Literal("managed-room")
]);
const TalkBrainSchema = Type.Union([
Type.Literal("agent-consult"),
Type.Literal("direct-tools"),
Type.Literal("none")
]);
const TalkAgentControlModeSchema = Type.Union([
Type.Literal("status"),
Type.Literal("steer"),
Type.Literal("cancel"),
Type.Literal("followup")
]);
const TalkEventTypeSchema = Type.Union([
Type.Literal("session.started"),
Type.Literal("session.ready"),
Type.Literal("session.closed"),
Type.Literal("session.error"),
Type.Literal("session.replaced"),
Type.Literal("turn.started"),
Type.Literal("turn.ended"),
Type.Literal("turn.cancelled"),
Type.Literal("capture.started"),
Type.Literal("capture.stopped"),
Type.Literal("capture.cancelled"),
Type.Literal("capture.once"),
Type.Literal("input.audio.delta"),
Type.Literal("input.audio.committed"),
Type.Literal("transcript.delta"),
Type.Literal("transcript.done"),
Type.Literal("output.text.delta"),
Type.Literal("output.text.done"),
Type.Literal("output.audio.started"),
Type.Literal("output.audio.delta"),
Type.Literal("output.audio.done"),
Type.Literal("tool.call"),
Type.Literal("tool.progress"),
Type.Literal("tool.result"),
Type.Literal("tool.error"),
Type.Literal("usage.metrics"),
Type.Literal("latency.metrics"),
Type.Literal("health.changed")
]);
/** Event types that must carry a turn id for client-side stream correlation. */
const TURN_SCOPED_TALK_EVENT_TYPES = [
"turn.started",
"turn.ended",
"turn.cancelled",
"input.audio.delta",
"input.audio.committed",
"transcript.delta",
"transcript.done",
"output.text.delta",
"output.text.done",
"output.audio.started",
"output.audio.delta",
"output.audio.done",
"tool.call",
"tool.progress",
"tool.result",
"tool.error"
];
/** Capture lifecycle events must include capture id to avoid cross-turn ambiguity. */
const CAPTURE_SCOPED_TALK_EVENT_TYPES = [
"capture.started",
"capture.stopped",
"capture.cancelled",
"capture.once"
];
/** Builds JSON Schema conditional requirements while avoiding reserved word syntax. */
function requireJsonSchemaProperties(properties) {
const conditionalRequirementKey = ["th", "en"].join("");
return Object.fromEntries([[conditionalRequirementKey, { required: properties }]]);
}
/** Canonical Talk event envelope emitted to browser, relay, and channel consumers. */
const TalkEventSchema = Type.Object({
id: NonEmptyString,
type: TalkEventTypeSchema,
sessionId: NonEmptyString,
turnId: Type.Optional(Type.String()),
captureId: Type.Optional(Type.String()),
seq: Type.Integer({ minimum: 1 }),
timestamp: NonEmptyString,
mode: TalkModeSchema,
transport: TalkTransportSchema,
brain: TalkBrainSchema,
provider: Type.Optional(Type.String()),
final: Type.Optional(Type.Boolean()),
callId: Type.Optional(Type.String()),
itemId: Type.Optional(Type.String()),
parentId: Type.Optional(Type.String()),
payload: Type.Unknown()
}, {
additionalProperties: false,
allOf: [{
if: {
properties: { type: { enum: TURN_SCOPED_TALK_EVENT_TYPES } },
required: ["type"]
},
...requireJsonSchemaProperties(["turnId"])
}, {
if: {
properties: { type: { enum: CAPTURE_SCOPED_TALK_EVENT_TYPES } },
required: ["type"]
},
...requireJsonSchemaProperties(["captureId"])
}]
});
const VoiceIdString = Type.String({ pattern: "^[A-Za-z0-9_-]{1,128}$" });
const TalkClientCreateParamsSchema = closedObject({
sessionKey: Type.Optional(NonEmptyString),
voiceSessionId: Type.Optional(VoiceIdString),
voiceChangeId: Type.Optional(NonEmptyString),
provider: Type.Optional(Type.String()),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
vadThreshold: Type.Optional(Type.Number()),
silenceDurationMs: Type.Optional(Type.Integer({ minimum: 1 })),
prefixPaddingMs: Type.Optional(Type.Integer({ minimum: 0 })),
reasoningEffort: Type.Optional(Type.String()),
mode: Type.Optional(TalkModeSchema),
transport: Type.Optional(TalkTransportSchema),
brain: Type.Optional(TalkBrainSchema),
capabilities: Type.Optional(Type.Array(Type.Union([
Type.Literal("camera-frame"),
Type.Literal("voice-transcript"),
Type.Literal("gateway-control-v1"),
Type.Literal("voice-selection")
]), { uniqueItems: true }))
});
const TalkClientToolCallParamsSchema = closedObject({
sessionKey: NonEmptyString,
voiceSessionId: Type.Optional(VoiceIdString),
callId: NonEmptyString,
name: NonEmptyString,
args: Type.Optional(Type.Unknown()),
relaySessionId: Type.Optional(NonEmptyString)
});
/** One finalized transcript item from a client-owned Talk session. */
const TalkClientTranscriptParamsSchema = closedObject({
sessionKey: NonEmptyString,
voiceSessionId: VoiceIdString,
entryId: VoiceIdString,
role: Type.Union([Type.Literal("user"), Type.Literal("assistant")]),
text: NonEmptyString,
timestamp: Type.Optional(Type.Number())
});
const TalkClientCloseParamsSchema = closedObject({
sessionKey: NonEmptyString,
voiceSessionId: VoiceIdString
});
/** Result for client-owned transcript and close mutations. */
const TalkClientMutationResultSchema = closedObject({ ok: Type.Literal(true) });
const TalkClientToolCallResultSchema = closedObject({
runId: NonEmptyString,
idempotencyKey: NonEmptyString,
agentId: NonEmptyString,
agentSessionKey: NonEmptyString
});
const TalkClientSteerParamsSchema = closedObject({
sessionKey: NonEmptyString,
text: NonEmptyString,
mode: Type.Optional(TalkAgentControlModeSchema)
});
const TalkAgentControlResultSchema = closedObject({
ok: Type.Boolean(),
mode: TalkAgentControlModeSchema,
sessionKey: NonEmptyString,
sessionId: Type.Optional(NonEmptyString),
active: Type.Boolean(),
queued: Type.Optional(Type.Boolean()),
aborted: Type.Optional(Type.Boolean()),
target: Type.Optional(Type.Union([Type.Literal("embedded_run"), Type.Literal("reply_run")])),
reason: Type.Optional(Type.String()),
message: Type.String(),
speak: Type.Boolean(),
show: Type.Boolean(),
suppress: Type.Boolean(),
providerResult: Type.Optional(closedObject({
status: Type.Literal("cancelled"),
message: Type.String()
})),
enqueuedAtMs: Type.Optional(Type.Number()),
deliveredAtMs: Type.Optional(Type.Number())
});
const TalkSessionCreateParamsSchema = closedObject({
sessionKey: Type.Optional(Type.String()),
voiceChangeId: Type.Optional(NonEmptyString),
capabilities: Type.Optional(Type.Array(Type.Literal("voice-selection"), { uniqueItems: true })),
spawnedBy: Type.Optional(NonEmptyString),
provider: Type.Optional(Type.String()),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
language: Type.Optional(Type.String({ pattern: "^[a-z]{2}$" })),
vadThreshold: Type.Optional(Type.Number()),
silenceDurationMs: Type.Optional(Type.Integer({ minimum: 1 })),
prefixPaddingMs: Type.Optional(Type.Integer({ minimum: 0 })),
reasoningEffort: Type.Optional(Type.String()),
mode: Type.Optional(TalkModeSchema),
transport: Type.Optional(TalkTransportSchema),
brain: Type.Optional(TalkBrainSchema),
ttlMs: Type.Optional(Type.Integer({
minimum: 1e3,
maximum: 36e5
}))
});
const TalkSessionAppendAudioParamsSchema = closedObject({
sessionId: NonEmptyString,
audioBase64: NonEmptyString,
timestamp: Type.Optional(Type.Number())
});
/** Cancels currently streaming Talk output without necessarily ending the turn. */
const TalkSessionCancelOutputParamsSchema = closedObject({
sessionId: NonEmptyString,
turnId: Type.Optional(Type.String()),
reason: Type.Optional(Type.String())
});
/** Reports whether a Talk output cancellation applied to the requested turn. */
const TalkSessionCancelOutputResultSchema = closedObject({
ok: Type.Literal(true),
status: Type.Optional(Type.Union([
Type.Literal("applied"),
Type.Literal("stale"),
Type.Literal("idle")
])),
turnId: Type.Optional(NonEmptyString)
});
const TalkSessionSubmitToolResultParamsSchema = closedObject({
sessionId: NonEmptyString,
callId: NonEmptyString,
result: Type.Unknown(),
options: Type.Optional(closedObject({
suppressResponse: Type.Optional(Type.Boolean()),
willContinue: Type.Optional(Type.Boolean())
}))
});
const TalkSessionSteerParamsSchema = closedObject({
sessionId: NonEmptyString,
sessionKey: Type.Optional(NonEmptyString),
text: NonEmptyString,
mode: Type.Optional(TalkAgentControlModeSchema)
});
const TalkSessionCloseParamsSchema = closedObject({ sessionId: NonEmptyString });
const TalkCatalogParamsSchema = closedObject({
provider: Type.Optional(NonEmptyString),
model: Type.Optional(NonEmptyString)
});
const TalkCatalogAudioFormatProperties = {
encoding: Type.Union([Type.Literal("pcm16"), Type.Literal("g711_ulaw")]),
sampleRateHz: Type.Integer({ minimum: 1 }),
channels: Type.Integer({ minimum: 1 })
};
const TalkCatalogProviderSchema = closedObject({
id: NonEmptyString,
label: NonEmptyString,
configured: Type.Boolean(),
aliases: Type.Optional(Type.Array(NonEmptyString)),
models: Type.Optional(Type.Array(Type.String())),
voices: Type.Optional(Type.Array(Type.String())),
activeVoices: Type.Optional(Type.Array(Type.String())),
activeVoiceSelectionPolicy: Type.Optional(Type.Literal("allowlist-default")),
voicesByModel: Type.Optional(Type.Record(Type.String(), Type.Array(Type.String()))),
defaultModel: Type.Optional(Type.String()),
modes: Type.Optional(Type.Array(TalkModeSchema)),
transports: Type.Optional(Type.Array(TalkTransportSchema)),
brains: Type.Optional(Type.Array(TalkBrainSchema)),
inputAudioFormats: Type.Optional(Type.Array(closedObject(TalkCatalogAudioFormatProperties))),
outputAudioFormats: Type.Optional(Type.Array(closedObject(TalkCatalogAudioFormatProperties))),
supportsBrowserSession: Type.Optional(Type.Boolean()),
supportsBargeIn: Type.Optional(Type.Boolean()),
supportsToolCalls: Type.Optional(Type.Boolean()),
supportsVideoFrames: Type.Optional(Type.Boolean()),
supportsSessionResumption: Type.Optional(Type.Boolean())
});
const TalkCatalogProviderGroupSchema = closedObject({
ready: Type.Optional(Type.Boolean()),
activeProvider: Type.Optional(Type.String()),
providers: Type.Array(TalkCatalogProviderSchema)
});
const TalkCatalogResultSchema = closedObject({
modes: Type.Array(TalkModeSchema),
transports: Type.Array(TalkTransportSchema),
brains: Type.Array(TalkBrainSchema),
speech: TalkCatalogProviderGroupSchema,
transcription: TalkCatalogProviderGroupSchema,
realtime: TalkCatalogProviderGroupSchema
});
const BrowserRealtimeAudioContractSchema = closedObject({
inputEncoding: Type.Union([Type.Literal("pcm16"), Type.Literal("g711_ulaw")]),
inputSampleRateHz: Type.Integer({ minimum: 1 }),
outputEncoding: Type.Union([Type.Literal("pcm16"), Type.Literal("g711_ulaw")]),
outputSampleRateHz: Type.Integer({ minimum: 1 })
});
const TalkSessionCreateResultSchema = closedObject({
sessionId: NonEmptyString,
provider: Type.Optional(Type.String()),
mode: TalkModeSchema,
transport: TalkTransportSchema,
brain: TalkBrainSchema,
relaySessionId: Type.Optional(NonEmptyString),
transcriptionSessionId: Type.Optional(NonEmptyString),
handoffId: Type.Optional(NonEmptyString),
roomId: Type.Optional(NonEmptyString),
roomUrl: Type.Optional(NonEmptyString),
token: Type.Optional(NonEmptyString),
audio: Type.Optional(Type.Unknown()),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
expiresAt: Type.Optional(Type.Number())
});
/** Generic success result for Talk session lifecycle calls. */
const TalkSessionOkResultSchema = closedObject({ ok: Type.Boolean() });
const BrowserRealtimeWebRtcSdpSessionSchema = closedObject({
provider: NonEmptyString,
transport: Type.Literal("webrtc"),
voiceSessionId: NonEmptyString,
clientSecret: NonEmptyString,
offerUrl: Type.Optional(Type.String()),
offerHeaders: Type.Optional(Type.Record(Type.String(), Type.String())),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
expiresAt: Type.Optional(Type.Number()),
clientControl: Type.Optional(closedObject({ owner: Type.Literal("gateway") }))
});
const BrowserRealtimeJsonPcmWebSocketSessionSchema = closedObject({
provider: NonEmptyString,
transport: Type.Literal("provider-websocket"),
voiceSessionId: NonEmptyString,
protocol: NonEmptyString,
clientSecret: NonEmptyString,
websocketUrl: NonEmptyString,
audio: BrowserRealtimeAudioContractSchema,
initialMessage: Type.Optional(Type.Unknown()),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
expiresAt: Type.Optional(Type.Number())
});
const BrowserRealtimeGatewayRelaySessionSchema = closedObject({
provider: NonEmptyString,
transport: Type.Literal("gateway-relay"),
voiceSessionId: Type.Optional(NonEmptyString),
relaySessionId: NonEmptyString,
audio: BrowserRealtimeAudioContractSchema,
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
expiresAt: Type.Optional(Type.Number())
});
const BrowserRealtimeManagedRoomSessionSchema = closedObject({
provider: NonEmptyString,
transport: Type.Literal("managed-room"),
voiceSessionId: Type.Optional(NonEmptyString),
roomUrl: NonEmptyString,
token: Type.Optional(Type.String()),
model: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
expiresAt: Type.Optional(Type.Number())
});
const TalkClientCreateResultSchema = Type.Union([
BrowserRealtimeWebRtcSdpSessionSchema,
BrowserRealtimeJsonPcmWebSocketSessionSchema,
BrowserRealtimeGatewayRelaySessionSchema,
BrowserRealtimeManagedRoomSessionSchema
]);
/** Secret-bearing provider fields; extra provider options remain provider-owned. */
const TalkProviderConfigSchema = Type.Object({ apiKey: Type.Optional(SecretInputSchema) }, { additionalProperties: true });
const TalkRealtimeConfigSchema = closedObject({
provider: Type.Optional(Type.String()),
providers: Type.Optional(Type.Record(Type.String(), TalkProviderConfigSchema)),
model: Type.Optional(Type.String()),
speakerVoice: Type.Optional(Type.String()),
speakerVoiceId: Type.Optional(Type.String()),
voice: Type.Optional(Type.String()),
instructions: Type.Optional(Type.String()),
mode: Type.Optional(TalkModeSchema),
transport: Type.Optional(TalkTransportSchema),
vadThreshold: Type.Optional(Type.Number({
minimum: 0,
maximum: 1
})),
silenceDurationMs: Type.Optional(Type.Integer({ minimum: 1 })),
prefixPaddingMs: Type.Optional(Type.Integer({ minimum: 0 })),
reasoningEffort: Type.Optional(Type.String({ minLength: 1 })),
brain: Type.Optional(TalkBrainSchema),
consultRouting: Type.Optional(Type.Union([Type.Literal("provider-direct"), Type.Literal("force-agent-consult")]))
});
const ResolvedTalkConfigSchema = closedObject({
provider: Type.String(),
config: TalkProviderConfigSchema
});
const TalkConfigSchema = closedObject({
provider: Type.Optional(Type.String()),
providers: Type.Optional(Type.Record(Type.String(), TalkProviderConfigSchema)),
realtime: Type.Optional(TalkRealtimeConfigSchema),
resolved: Type.Optional(ResolvedTalkConfigSchema),
consultThinkingLevel: Type.Optional(Type.String()),
consultFastMode: Type.Optional(Type.Boolean()),
speechLocale: Type.Optional(Type.String()),
interruptOnSpeech: Type.Optional(Type.Boolean()),
silenceTimeoutMs: Type.Optional(Type.Integer({ minimum: 1 }))
});
const TalkConfigResultSchema = closedObject({ config: closedObject({
talk: Type.Optional(TalkConfigSchema),
session: Type.Optional(closedObject({ mainKey: Type.Optional(Type.String()) })),
ui: Type.Optional(closedObject({ seamColor: Type.Optional(Type.String()) })),
clientHints: Type.Optional(closedObject({ realtime: Type.Optional(closedObject({
modelSource: Type.Optional(Type.Literal("gateway")),
gatewayRelaySupported: Type.Optional(Type.Boolean())
})) }))
}) });
const TalkSpeakResultSchema = closedObject({
audioBase64: NonEmptyString,
provider: NonEmptyString,
outputFormat: Type.Optional(Type.String()),
voiceCompatible: Type.Optional(Type.Boolean()),
mimeType: Type.Optional(Type.String()),
fileExtension: Type.Optional(Type.String())
});
const TtsSpeakResultSchema = closedObject({
audioBase64: NonEmptyString,
provider: NonEmptyString,
outputFormat: Type.Optional(Type.String()),
mimeType: Type.Optional(Type.String()),
fileExtension: Type.Optional(Type.String())
});
const ChannelsStatusParamsSchema = closedObject({
probe: Type.Optional(Type.Boolean()),
timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
channel: Type.Optional(NonEmptyString)
});
/**
* Per-account channel status snapshot.
*
* This is intentionally schema-light so new channel-specific metadata can ship
* without a gateway protocol update; known fields stay documented for UI use.
*/
const ChannelAccountSnapshotSchema = Type.Object({
accountId: NonEmptyString,
name: Type.Optional(Type.String()),
enabled: Type.Optional(Type.Boolean()),
configured: Type.Optional(Type.Boolean()),
linked: Type.Optional(Type.Boolean()),
running: Type.Optional(Type.Boolean()),
connected: Type.Optional(Type.Boolean()),
reconnectAttempts: Type.Optional(Type.Integer({ minimum: 0 })),
lastConnectedAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastError: Type.Optional(Type.Union([Type.String(), Type.Null()])),
healthState: Type.Optional(Type.String()),
lastStartAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastStopAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastInboundAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastOutboundAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastTransportActivityAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
busy: Type.Optional(Type.Boolean()),
activeRuns: Type.Optional(Type.Integer({ minimum: 0 })),
lastRunActivityAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
activeRunStartedAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
lastProbeAt: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
mode: Type.Optional(Type.String()),
dmPolicy: Type.Optional(Type.String()),
allowFrom: Type.Optional(Type.Array(Type.String())),
tokenSource: Type.Optional(Type.String()),
botTokenSource: Type.Optional(Type.String()),
appTokenSource: Type.Optional(Type.String()),
credentialSource: Type.Optional(Type.Union([Type.String(), Type.Null()])),
audienceType: Type.Optional(Type.Union([Type.String(), Type.Null()])),
audience: Type.Optional(Type.Union([Type.String(), Type.Null()])),
webhookPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
webhookUrl: Type.Optional(Type.Union([Type.String(), Type.Null()])),
baseUrl: Type.Optional(Type.String()),
allowUnmentionedGroups: Type.Optional(Type.Boolean()),
cliPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
dbPath: Type.Optional(Type.Union([Type.String(), Type.Null()])),
port: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])),
probe: Type.Optional(Type.Unknown()),
audit: Type.Optional(Type.Unknown()),
application: Type.Optional(Type.Unknown())
}, { additionalProperties: true });
const ChannelUiMetaSchema = closedObject({
id: NonEmptyString,
label: NonEmptyString,
detailLabel: NonEmptyString,
systemImage: Type.Optional(Type.String())
});
const ChannelEventLoopHealthSchema = closedObject({
...GatewayEventLoopHealthSchema.properties,
intervalMs: Type.Integer({ minimum: 0 })
});
const ChannelsStatusResultSchema = closedObject({
ts: Type.Integer({ minimum: 0 }),
channelOrder: Type.Array(NonEmptyString),
channelLabels: Type.Record(NonEmptyString, NonEmptyString),
channelDetailLabels: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
channelSystemImages: Type.Optional(Type.Record(NonEmptyString, NonEmptyString)),
channelMeta: Type.Optional(Type.Array(ChannelUiMetaSchema)),
channels: Type.Record(NonEmptyString, Type.Unknown()),
channelAccounts: Type.Record(NonEmptyString, Type.Array(ChannelAccountSnapshotSchema)),
channelDefaultAccountId: Type.Record(NonEmptyString, NonEmptyString),
eventLoop: Type.Optional(ChannelEventLoopHealthSchema),
partial: Type.Optional(Type.Boolean()),
warnings: Type.Optional(Type.Array(Type.String())),
statusIssues: Type.Optional(Type.Array(closedObject({
channel: NonEmptyString,
accountId: NonEmptyString,
kind: Type.Union([
Type.Literal("intent"),
Type.Literal("permissions"),
Type.Literal("config"),
Type.Literal("auth"),
Type.Literal("runtime")
]),
message: Type.String(),
fix: Type.Optional(Type.String())
}), { maxItems: 50 }))
});
const ChannelsLogoutParamsSchema = closedObject({
channel: NonEmptyString,
accountId: Type.Optional(Type.String())
});
const ChannelsStopParamsSchema = closedObject(ChannelsLogoutParamsSchema.properties);
const ChannelsStartParamsSchema = closedObject(ChannelsLogoutParamsSchema.properties);
const WebLoginStartParamsSchema = closedObject({
channel: Type.Optional(NonEmptyString),
force: Type.Optional(Type.Boolean()),
timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
verbose: Type.Optional(Type.Boolean()),
accountId: Type.Optional(Type.String())
});
const QrDataUrlSchema = Type.String({
maxLength: 16384,
pattern: "^data:image/png;base64,"
});
/** Waits for web login completion or the next QR code. */
const WebLoginWaitParamsSchema = closedObject({
channel: Type.Optional(NonEmptyString),
sessionKey: Type.Optional(NonEmptyString),
timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })),
accountId: Type.Optional(Type.String()),
currentQrDataUrl: Type.Optional(QrDataUrlSchema)
});
//#endregion
export { TalkSpeakParamsSchema as A, TalkSessionCancelOutputResultSchema as C, TalkSessionOkResultSchema as D, TalkSessionCreateResultSchema as E, WebLoginWaitParamsSchema as F, TtsSpeakParamsSchema as M, TtsSpeakResultSchema as N, TalkSessionSteerParamsSchema as O, WebLoginStartParamsSchema as P, TalkSessionCancelOutputParamsSchema as S, TalkSessionCreateParamsSchema as T, TalkConfigParamsSchema as _, ChannelsStopParamsSchema as a, TalkModeParamsSchema as b, TalkCatalogResultSchema as c, TalkClientCreateResultSchema as d, TalkClientMutationResultSchema as f, TalkClientTranscriptParamsSchema as g, TalkClientToolCallResultSchema as h, ChannelsStatusResultSchema as i, TalkSpeakResultSchema as j, TalkSessionSubmitToolResultParamsSchema as k, TalkClientCloseParamsSchema as l, TalkClientToolCallParamsSchema as m, ChannelsStartParamsSchema as n, TalkAgentControlResultSchema as o, TalkClientSteerParamsSchema as p, ChannelsStatusParamsSchema as r, TalkCatalogParamsSchema as s, ChannelsLogoutParamsSchema as t, TalkClientCreateParamsSchema as u, TalkConfigResultSchema as v, TalkSessionCloseParamsSchema as w, TalkSessionAppendAudioParamsSchema as x, TalkEventSchema as y };