@agimon-ai/po-voice 0.0.0-alpha.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/LICENSE +21 -0
- package/NOTICE +13 -0
- package/README.md +249 -0
- package/dist/apiContracts.cjs +809 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +53 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +805 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/assets/browserCaptureWorklet-Droj0fW0.js +13 -0
- package/dist/assets/silero_vad_v6.2.1-SjbCxFXk.onnx +0 -0
- package/dist/clientCaptureActivity-DN4xQtmw.d.mts +234 -0
- package/dist/clientCaptureActivity-DN4xQtmw.d.mts.map +1 -0
- package/dist/clientMedia-CfTfc9_4.mjs +49 -0
- package/dist/clientMedia-CfTfc9_4.mjs.map +1 -0
- package/dist/clientMedia-DuA4aYhD.cjs +156 -0
- package/dist/clientMedia-DuA4aYhD.cjs.map +1 -0
- package/dist/clientMedia.cjs +134 -0
- package/dist/clientMedia.cjs.map +1 -0
- package/dist/clientMedia.d.mts +2 -0
- package/dist/clientMedia.mjs +114 -0
- package/dist/clientMedia.mjs.map +1 -0
- package/dist/extensions/server.cjs +8975 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +8968 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/extensions/web.mjs +4530 -0
- package/dist/extensions/web.mjs.map +1 -0
- package/dist/index-C95HCjmT.d.mts +212 -0
- package/dist/index-C95HCjmT.d.mts.map +1 -0
- package/dist/index.cjs +637 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +603 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +557 -0
- package/dist/index.mjs.map +1 -0
- package/dist/narrationBargeIn-C_Po8fgw.mjs +62 -0
- package/dist/narrationBargeIn-C_Po8fgw.mjs.map +1 -0
- package/dist/narrationBargeIn-Dje82XOm.cjs +73 -0
- package/dist/narrationBargeIn-Dje82XOm.cjs.map +1 -0
- package/dist/sileroVadWorker-D894njUe.mjs +110 -0
- package/dist/sileroVadWorker-D894njUe.mjs.map +1 -0
- package/dist/vad-DDe4RIdW.mjs +315 -0
- package/dist/vad-DDe4RIdW.mjs.map +1 -0
- package/dist/vad-n2RlruzB.cjs +332 -0
- package/dist/vad-n2RlruzB.cjs.map +1 -0
- package/dist/voiceReloadHandoff.cjs +9 -0
- package/dist/voiceReloadHandoff.d.mts +1 -0
- package/dist/voiceReloadHandoff.mjs +2 -0
- package/dist/voiceTools-CRQHK_Uc.cjs +616 -0
- package/dist/voiceTools-CRQHK_Uc.cjs.map +1 -0
- package/dist/voiceTools-aCCREMjS.mjs +611 -0
- package/dist/voiceTools-aCCREMjS.mjs.map +1 -0
- package/dist/voiceTools.cjs +12 -0
- package/dist/voiceTools.d.mts +7 -0
- package/dist/voiceTools.d.mts.map +1 -0
- package/dist/voiceTools.mjs +3 -0
- package/dist/voiceWorker.cjs +1929 -0
- package/dist/voiceWorker.cjs.map +1 -0
- package/dist/voiceWorker.d.mts +200 -0
- package/dist/voiceWorker.d.mts.map +1 -0
- package/dist/voiceWorker.mjs +1925 -0
- package/dist/voiceWorker.mjs.map +1 -0
- package/dist/voiceWorkerProtocol-0H3czPjt.cjs +2385 -0
- package/dist/voiceWorkerProtocol-0H3czPjt.cjs.map +1 -0
- package/dist/voiceWorkerProtocol-B_4B2_fR.mjs +2085 -0
- package/dist/voiceWorkerProtocol-B_4B2_fR.mjs.map +1 -0
- package/dist/voiceWorkerSessionController-DaYemiL3.cjs +1800 -0
- package/dist/voiceWorkerSessionController-DaYemiL3.cjs.map +1 -0
- package/dist/voiceWorkerSessionController-GB3SJ6YE.mjs +1734 -0
- package/dist/voiceWorkerSessionController-GB3SJ6YE.mjs.map +1 -0
- package/licenses/Codex-Apache-2.0.txt +201 -0
- package/llms.txt +9 -0
- package/package.json +153 -0
- package/src/extensions/workspaces/sessions/(frontend)/lifecycle/_lib/models/README.md +11 -0
- package/src/extensions/workspaces/sessions/(frontend)/lifecycle/_lib/models/SILERO-LICENSE +21 -0
- package/src/prompts/po-use-voice/SKILL.md +35 -0
- package/src/types/clientCaptureActivity.ts +155 -0
- package/src/types/clientMedia.ts +226 -0
- package/src/types/manualTranscription.ts +53 -0
- package/src/types/realtime.ts +107 -0
- package/src/types/voiceOwnership.ts +315 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voiceTools-CRQHK_Uc.cjs","names":["VoiceToolError","VOICE_TOOL_MAX_IDENTIFIER_LENGTH","VOICE_TOOL_MAX_JSON_DEPTH","VOICE_TOOL_MAX_SCHEMA_BYTES","Check","VoiceToolDescriptorSchema","Errors","SAFE_IDENTIFIER","SAFE_NAME","VOICE_TOOL_MAX_LABEL_LENGTH","VOICE_TOOL_MAX_DESCRIPTION_LENGTH","VOICE_TOOL_MAX_TIMEOUT_MS","VOICE_TOOL_MAX_BATCH_ITEMS","VOICE_TOOL_MAX_ERROR_MESSAGE_LENGTH","VOICE_TOOL_DEFAULT_TIMEOUT_MS","VOICE_TOOL_MAX_INPUT_BYTES","VOICE_TOOL_MAX_BATCH_BYTES","VOICE_TOOL_TERMINAL_OPERATION_LIMIT"],"sources":["../src/services/voiceTools/index.ts"],"sourcesContent":["import {\n type DoomVoiceToolsService,\n type VoiceToolDefinition,\n type VoiceToolDescriptor,\n type VoiceToolExecuteOptions,\n type VoiceToolRegistrationHandle,\n type VoiceToolRegistrationOptions,\n type VoiceToolSessionHandle,\n VoiceToolError,\n} from '@agimon-ai/po-core/voiceTools';\nimport { type TSchema } from 'typebox';\nimport { Check, Errors } from 'typebox/value';\n\nexport * from '@agimon-ai/po-core/voiceTools';\n\nimport {\n VOICE_TOOL_DEFAULT_TIMEOUT_MS,\n VOICE_TOOL_MAX_TIMEOUT_MS,\n VOICE_TOOL_MAX_BATCH_ITEMS,\n VOICE_TOOL_MAX_INPUT_BYTES,\n VOICE_TOOL_MAX_BATCH_BYTES,\n VOICE_TOOL_MAX_SCHEMA_BYTES,\n VOICE_TOOL_MAX_JSON_DEPTH,\n VOICE_TOOL_TERMINAL_OPERATION_LIMIT,\n VOICE_TOOL_MAX_IDENTIFIER_LENGTH,\n VOICE_TOOL_MAX_LABEL_LENGTH,\n VOICE_TOOL_MAX_DESCRIPTION_LENGTH,\n VOICE_TOOL_MAX_ERROR_MESSAGE_LENGTH,\n SAFE_IDENTIFIER,\n SAFE_NAME,\n} from '@agimon-ai/po-core/voiceTools';\nimport {\n VoiceToolDescriptorSchema,\n type VoiceToolBatchCall,\n type VoiceToolUseInput,\n type VoiceToolErrorCode,\n type VoiceToolErrorPayload,\n type VoiceToolConflictDiagnostic,\n type VoiceToolCatalogEntry,\n type VoiceToolCatalogSnapshot,\n type VoiceToolBatchItemResult,\n type VoiceToolBatchResult,\n} from '@agimon-ai/po-core/voiceTools';\n\ninterface VoiceToolClaim<Context> {\n readonly descriptor: VoiceToolDescriptor;\n readonly execute: VoiceToolDefinition<Context>['execute'];\n readonly registrationGeneration: string;\n readonly sessionId?: string;\n readonly context?: Context;\n readonly fingerprint: string;\n}\n\ninterface VoiceToolOperation {\n readonly controller: AbortController;\n readonly registrationGeneration: string;\n}\n\ninterface VoiceToolSessionState<Context> {\n readonly token: symbol;\n readonly sessionId: string;\n readonly hostGeneration: string;\n readonly context: Context | undefined;\n active: boolean;\n revision: number;\n disposed: boolean;\n readonly operations: Map<string, VoiceToolOperation>;\n readonly terminal: Map<string, VoiceToolBatchResult>;\n readonly listeners: Set<() => void>;\n}\n\ninterface VoiceToolRegistryRoot {\n readonly generation: string;\n readonly claims: Map<string, VoiceToolClaim<unknown>[]>;\n readonly sessions: Map<string, VoiceToolSessionState<unknown>>;\n readonly sessionHandles: Map<string, VoiceToolSessionHandle<unknown>>;\n readonly sessionListeners: Map<string, Set<(session: VoiceToolSessionHandle<unknown> | undefined) => void>>;\n sequence: number;\n disposed: boolean;\n}\n\nfunction normalizedText(value: string, label: string, maximum: number, pattern?: RegExp): string {\n const normalized = value.trim();\n if (!normalized || normalized.length > maximum || hasControlCharacter(normalized)) {\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', `Invalid ${label}.`);\n }\n if (pattern && !pattern.test(normalized)) throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', `Invalid ${label}.`);\n return normalized;\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (const character of value) {\n const code = character.codePointAt(0);\n if (code !== undefined && (code <= 0x1f || code === 0x7f)) return true;\n }\n return false;\n}\n\nfunction validSessionId(value: string): string {\n return normalizedText(value, 'session id', 256);\n}\n\nfunction validOperationId(value: string): string {\n return normalizedText(value, 'operation id', VOICE_TOOL_MAX_IDENTIFIER_LENGTH);\n}\n\nfunction jsonText(value: unknown, maximumDepth = VOICE_TOOL_MAX_JSON_DEPTH): string {\n const seen = new WeakSet<object>();\n const visit = (candidate: unknown, depth: number): string => {\n if (depth > maximumDepth) throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'JSON nesting is too deep.');\n if (candidate === null) return 'null';\n if (typeof candidate === 'string') return JSON.stringify(candidate);\n if (typeof candidate === 'boolean') return candidate ? 'true' : 'false';\n if (typeof candidate === 'number') {\n if (!Number.isFinite(candidate))\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'JSON numbers must be finite.');\n return JSON.stringify(candidate);\n }\n if (typeof candidate !== 'object')\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'JSON values must be serializable.');\n if (seen.has(candidate))\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'Cyclic JSON values are not supported.');\n const prototype = Object.getPrototypeOf(candidate);\n if (prototype !== Object.prototype && prototype !== null && !Array.isArray(candidate)) {\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'Only JSON objects and arrays are supported.');\n }\n seen.add(candidate);\n let result: string;\n if (Array.isArray(candidate)) {\n result = `[${candidate.map((item) => visit(item, depth + 1)).join(',')}]`;\n } else {\n const entries = Object.keys(candidate)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${visit((candidate as Record<string, unknown>)[key], depth + 1)}`);\n result = `{${entries.join(',')}}`;\n }\n seen.delete(candidate);\n return result;\n };\n return visit(value, 0);\n}\n\nfunction cloneJson<T>(value: T, maximumBytes: number, message = 'JSON payload exceeds its limit.'): T {\n const text = jsonText(value);\n const bytes = new TextEncoder().encode(text).byteLength;\n if (bytes > maximumBytes) throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', message);\n return JSON.parse(text) as T;\n}\n\nfunction schemaClone(schema: TSchema): TSchema {\n const cloned = cloneJson(schema, VOICE_TOOL_MAX_SCHEMA_BYTES, 'Voice tool schema exceeds its limit.');\n if (typeof cloned !== 'object' || cloned === null || Array.isArray(cloned)) {\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', 'Voice tool schemas must be JSON objects.');\n }\n return cloned as TSchema;\n}\n\nfunction validateDescriptor(descriptor: VoiceToolDescriptor): VoiceToolDescriptor {\n if (!Check(VoiceToolDescriptorSchema, descriptor)) {\n const detail = Errors(VoiceToolDescriptorSchema, descriptor)\n .slice(0, 2)\n .map((error) => `${error.instancePath || '/'} ${error.message}`)\n .join('; ');\n throw new VoiceToolError('VOICE_TOOL_INVALID_REQUEST', `Invalid voice tool descriptor: ${detail}`);\n }\n const inputSchema = schemaClone(descriptor.inputSchema);\n const resultSchema = schemaClone(descriptor.resultSchema);\n return cloneJson(\n {\n ...descriptor,\n source: normalizedText(descriptor.source, 'voice tool source', VOICE_TOOL_MAX_IDENTIFIER_LENGTH, SAFE_IDENTIFIER),\n id: normalizedText(descriptor.id, 'voice tool id', VOICE_TOOL_MAX_IDENTIFIER_LENGTH, SAFE_IDENTIFIER),\n name: normalizedText(descriptor.name, 'voice tool name', VOICE_TOOL_MAX_IDENTIFIER_LENGTH, SAFE_NAME),\n label: normalizedText(descriptor.label, 'voice tool label', VOICE_TOOL_MAX_LABEL_LENGTH),\n description: normalizedText(descriptor.description, 'voice tool description', VOICE_TOOL_MAX_DESCRIPTION_LENGTH),\n inputSchema,\n resultSchema,\n ...(descriptor.timeoutMs === undefined\n ? {}\n : { timeoutMs: Math.min(descriptor.timeoutMs, VOICE_TOOL_MAX_TIMEOUT_MS) }),\n },\n VOICE_TOOL_MAX_SCHEMA_BYTES * 2,\n );\n}\n\nfunction descriptorFingerprint(descriptor: VoiceToolDescriptor): string {\n return jsonText(descriptor, VOICE_TOOL_MAX_SCHEMA_BYTES * 2);\n}\n\nfunction catalogToken(session: VoiceToolSessionState<unknown>): string {\n return `${session.hostGeneration}:${session.revision}`;\n}\n\nfunction notify(session: VoiceToolSessionState<unknown>): void {\n for (const listener of session.listeners) listener();\n}\n\nfunction abortOperations(\n session: VoiceToolSessionState<unknown>,\n reason: string,\n registrationGeneration?: string,\n): void {\n for (const [operationId, operation] of session.operations) {\n if (registrationGeneration !== undefined && operation.registrationGeneration !== registrationGeneration) continue;\n operation.controller.abort(reason);\n session.operations.delete(operationId);\n }\n}\n\nfunction abortRegistrationOperations(root: VoiceToolRegistryRoot, registrationGeneration: string): void {\n for (const session of root.sessions.values()) {\n if (!session.disposed) abortOperations(session, 'Voice tool registration was disposed.', registrationGeneration);\n }\n}\n\nfunction claimsForSession(root: VoiceToolRegistryRoot, sessionId: string, name?: string): VoiceToolClaim<unknown>[] {\n const source = root.claims;\n if (name) {\n return (source.get(name) ?? []).filter((claim) => claim.sessionId === undefined || claim.sessionId === sessionId);\n }\n return [...source.values()].flatMap((claims) =>\n claims.filter((claim) => claim.sessionId === undefined || claim.sessionId === sessionId),\n );\n}\n\nfunction activeClaim(\n root: VoiceToolRegistryRoot,\n sessionId: string,\n name: string,\n): { claim?: VoiceToolClaim<unknown>; conflict?: VoiceToolConflictDiagnostic } {\n const claims = claimsForSession(root, sessionId, name);\n if (claims.length === 0) return {};\n const fingerprints = new Set(claims.map((claim) => claim.fingerprint));\n if (fingerprints.size > 1) {\n return {\n conflict: {\n name,\n message: `Voice tool '${name}' has conflicting registrations.`,\n claims: claims\n .slice(0, VOICE_TOOL_MAX_BATCH_ITEMS)\n .map((claim) => ({ source: claim.descriptor.source, id: claim.descriptor.id })),\n },\n };\n }\n return { claim: claims[0] };\n}\n\nfunction catalog(\n root: VoiceToolRegistryRoot,\n session: VoiceToolSessionState<unknown>,\n names?: readonly string[],\n): VoiceToolCatalogSnapshot {\n const grouped = new Map<string, VoiceToolClaim<unknown>[]>();\n for (const claim of claimsForSession(root, session.sessionId)) {\n const current = grouped.get(claim.descriptor.name) ?? [];\n current.push(claim);\n grouped.set(claim.descriptor.name, current);\n }\n const conflicts: VoiceToolConflictDiagnostic[] = [];\n const tools: VoiceToolCatalogEntry[] = [];\n const selected = names ? new Set(names) : undefined;\n const unknownNames = names\n ? [...new Set(names)].filter((name) => !grouped.has(name)).slice(0, VOICE_TOOL_MAX_BATCH_ITEMS)\n : [];\n for (const [name, claims] of grouped) {\n if (selected && !selected.has(name)) continue;\n const fingerprints = new Set(claims.map((claim) => claim.fingerprint));\n if (fingerprints.size > 1) {\n conflicts.push({\n name,\n message: `Voice tool '${name}' has conflicting registrations.`,\n claims: claims\n .slice(0, VOICE_TOOL_MAX_BATCH_ITEMS)\n .map((claim) => ({ source: claim.descriptor.source, id: claim.descriptor.id })),\n });\n continue;\n }\n const descriptor = claims[0]?.descriptor;\n if (!descriptor) continue;\n tools.push({\n source: descriptor.source,\n id: descriptor.id,\n name: descriptor.name,\n label: descriptor.label,\n description: descriptor.description,\n order: descriptor.order,\n inputSchema: cloneJson(descriptor.inputSchema, VOICE_TOOL_MAX_SCHEMA_BYTES),\n enabled: session.active,\n });\n }\n if (names) {\n const requestedOrder = new Map([...new Set(names)].map((name, index) => [name, index]));\n tools.sort(\n (left, right) =>\n (requestedOrder.get(left.name) ?? Number.MAX_SAFE_INTEGER) -\n (requestedOrder.get(right.name) ?? Number.MAX_SAFE_INTEGER),\n );\n } else {\n tools.sort(\n (left, right) =>\n left.order - right.order ||\n left.name.localeCompare(right.name) ||\n left.source.localeCompare(right.source) ||\n left.id.localeCompare(right.id),\n );\n }\n conflicts.sort((left, right) => left.name.localeCompare(right.name));\n return {\n hostGeneration: session.hostGeneration,\n catalogRevision: session.revision,\n catalogToken: catalogToken(session),\n tools,\n conflicts,\n unknownNames,\n };\n}\n\nfunction refreshSessions(root: VoiceToolRegistryRoot): void {\n for (const session of root.sessions.values()) {\n if (!session.disposed) {\n session.revision += 1;\n notify(session);\n }\n }\n}\n\nfunction notifySessionListeners(root: VoiceToolRegistryRoot, sessionId: string): void {\n const session = root.sessionHandles.get(sessionId);\n for (const listener of root.sessionListeners.get(sessionId) ?? []) listener(session);\n}\n\nfunction errorPayload(\n error: unknown,\n fallbackCode: VoiceToolErrorCode = 'VOICE_TOOL_EXECUTION_FAILED',\n): VoiceToolErrorPayload {\n if (error instanceof VoiceToolError) {\n return {\n code: error.code,\n message: error.message.slice(0, VOICE_TOOL_MAX_ERROR_MESSAGE_LENGTH),\n retryable: error.retryable,\n };\n }\n return { code: fallbackCode, message: 'Voice tool execution failed.' };\n}\n\nfunction resultError(\n index: number,\n call: VoiceToolBatchCall,\n error: VoiceToolErrorPayload,\n status: VoiceToolBatchItemResult['status'] = 'failed',\n): VoiceToolBatchItemResult {\n return { index, name: call.name, status, error };\n}\n\nfunction timeoutFor(claim: VoiceToolClaim<unknown>): number {\n return Math.min(claim.descriptor.timeoutMs ?? VOICE_TOOL_DEFAULT_TIMEOUT_MS, VOICE_TOOL_MAX_TIMEOUT_MS);\n}\n\nfunction combineSignal(\n signal: AbortSignal | undefined,\n timeoutMs: number,\n): { signal: AbortSignal; controller: AbortController; dispose: () => void; timedOut: () => boolean } {\n const controller = new AbortController();\n const timeoutSignal = AbortSignal.timeout(timeoutMs);\n const abort = (reason: unknown) => controller.abort(reason);\n const abortFromCaller = () => abort(signal?.reason ?? 'Voice tool call aborted.');\n const abortFromTimeout = () => abort(timeoutSignal.reason ?? 'Voice tool call timed out.');\n if (signal) {\n signal.addEventListener('abort', abortFromCaller, { once: true });\n if (signal.aborted) abortFromCaller();\n }\n timeoutSignal.addEventListener('abort', abortFromTimeout, { once: true });\n return {\n signal: controller.signal,\n controller,\n timedOut: () => timeoutSignal.aborted,\n dispose: () => {\n signal?.removeEventListener('abort', abortFromCaller);\n timeoutSignal.removeEventListener('abort', abortFromTimeout);\n },\n };\n}\n\nfunction preflightInput(schema: TSchema, input: unknown): unknown {\n let cloned: unknown;\n try {\n cloned = cloneJson(input, VOICE_TOOL_MAX_INPUT_BYTES, 'Voice tool input exceeds its limit.');\n if (!Check(schema, cloned)) {\n const detail = Errors(schema, cloned)\n .slice(0, 2)\n .map((error) => `${error.instancePath || '/'} ${error.message}`)\n .join('; ');\n throw new VoiceToolError('VOICE_TOOL_INVALID_INPUT', `Voice tool input is invalid: ${detail}`);\n }\n } catch (error) {\n if (error instanceof VoiceToolError && error.code === 'VOICE_TOOL_INVALID_INPUT') throw error;\n throw new VoiceToolError('VOICE_TOOL_INVALID_INPUT', 'Voice tool input is invalid.');\n }\n return cloned;\n}\n\nfunction validateOutput(schema: TSchema, output: unknown): unknown {\n let cloned: unknown;\n try {\n cloned = cloneJson(output, VOICE_TOOL_MAX_INPUT_BYTES, 'Voice tool result exceeds its limit.');\n if (!Check(schema, cloned))\n throw new VoiceToolError('VOICE_TOOL_INVALID_RESULT', 'Voice tool returned an invalid result.');\n } catch (error) {\n if (error instanceof VoiceToolError && error.code === 'VOICE_TOOL_INVALID_RESULT') throw error;\n throw new VoiceToolError('VOICE_TOOL_INVALID_RESULT', 'Voice tool returned an invalid result.');\n }\n return cloned;\n}\n\nfunction requestErrors(session: VoiceToolSessionState<unknown>, input: VoiceToolUseInput): VoiceToolErrorPayload[] {\n const errors: VoiceToolErrorPayload[] = [];\n if (input.catalogToken !== catalogToken(session)) {\n errors.push({ code: 'VOICE_TOOL_STALE_CATALOG', message: 'The voice tool catalog is stale.', retryable: true });\n }\n if (!session.active)\n errors.push({ code: 'VOICE_TOOL_INACTIVE', message: 'Autonomous voice is not active.', retryable: true });\n return errors;\n}\n\nasync function runBatch<Context>(\n root: VoiceToolRegistryRoot,\n session: VoiceToolSessionState<Context>,\n input: VoiceToolUseInput,\n context: Context,\n options: VoiceToolExecuteOptions,\n): Promise<VoiceToolBatchResult> {\n const requestedOperationId = options.operationId ? validOperationId(options.operationId) : undefined;\n if (requestedOperationId) {\n const terminal = session.terminal.get(requestedOperationId);\n if (terminal) return cloneJson(terminal, VOICE_TOOL_MAX_BATCH_BYTES);\n }\n const globalErrors = requestErrors(session as VoiceToolSessionState<unknown>, input);\n if (input.calls.length > VOICE_TOOL_MAX_BATCH_ITEMS) {\n globalErrors.push({ code: 'VOICE_TOOL_INVALID_REQUEST', message: 'Voice tool batch contains too many calls.' });\n }\n let batchJson = '';\n try {\n batchJson = jsonText(input, VOICE_TOOL_MAX_JSON_DEPTH);\n if (new TextEncoder().encode(batchJson).byteLength > VOICE_TOOL_MAX_BATCH_BYTES) {\n globalErrors.push({ code: 'VOICE_TOOL_INVALID_REQUEST', message: 'Voice tool batch exceeds its limit.' });\n }\n } catch (error) {\n globalErrors.push(errorPayload(error, 'VOICE_TOOL_INVALID_REQUEST'));\n }\n void batchJson;\n\n const results: VoiceToolBatchItemResult[] = [];\n const preflight: Array<{\n call: VoiceToolBatchCall;\n claim?: VoiceToolClaim<unknown>;\n input?: unknown;\n error?: VoiceToolErrorPayload;\n }> = [];\n if (globalErrors.length === 0) {\n for (const [index, call] of input.calls.entries()) {\n const resolved = activeClaim(root, session.sessionId, call.name);\n if (resolved.conflict) {\n preflight.push({ call, error: { code: 'VOICE_TOOL_NAME_CONFLICT', message: resolved.conflict.message } });\n continue;\n }\n if (!resolved.claim) {\n preflight.push({\n call,\n error: { code: 'VOICE_TOOL_NOT_FOUND', message: `Unknown voice tool '${call.name}'.` },\n });\n continue;\n }\n if (\n !root.claims\n .get(call.name)\n ?.some((claim) => claim.registrationGeneration === resolved.claim?.registrationGeneration)\n ) {\n preflight.push({\n call,\n error: {\n code: 'VOICE_TOOL_REGISTRATION_DISPOSED',\n message: 'Voice tool registration was disposed.',\n retryable: true,\n },\n });\n continue;\n }\n try {\n preflight.push({\n call,\n claim: resolved.claim,\n input: preflightInput(resolved.claim.descriptor.inputSchema, call.input),\n });\n } catch (error) {\n preflight.push({ call, error: errorPayload(error, 'VOICE_TOOL_INVALID_INPUT') });\n }\n void index;\n }\n }\n if (globalErrors.length > 0 || preflight.some((item) => item.error)) {\n const errors = [...globalErrors, ...preflight.flatMap((item) => (item.error ? [item.error] : []))];\n for (const [index, call] of input.calls.entries()) {\n const item = preflight[index];\n results.push(\n item?.error\n ? resultError(index, call, item.error, 'preflight_failed')\n : resultError(\n index,\n call,\n errors[0] ?? { code: 'VOICE_TOOL_INVALID_REQUEST', message: 'Voice tool batch was rejected.' },\n 'not_executed',\n ),\n );\n }\n const rejected: VoiceToolBatchResult = {\n status: 'rejected',\n catalogToken: catalogToken(session as VoiceToolSessionState<unknown>),\n results,\n errors: errors.slice(0, VOICE_TOOL_MAX_BATCH_ITEMS),\n };\n if (requestedOperationId) {\n session.terminal.set(requestedOperationId, rejected);\n while (session.terminal.size > VOICE_TOOL_TERMINAL_OPERATION_LIMIT)\n session.terminal.delete(session.terminal.keys().next().value as string);\n }\n return rejected;\n }\n\n root.sequence += 1;\n const operationId = requestedOperationId ?? validOperationId(`voice:${root.sequence}`);\n const batchSize = input.calls.length;\n let status: VoiceToolBatchResult['status'] = 'completed';\n for (const [index, item] of preflight.entries()) {\n if (session.disposed) {\n status = 'cancelled';\n results.push(\n resultError(\n index,\n item.call,\n { code: 'VOICE_TOOL_SESSION_SHUTDOWN', message: 'Voice session is shutting down.', retryable: true },\n 'cancelled',\n ),\n );\n continue;\n }\n if (options.signal?.aborted) {\n status = 'cancelled';\n results.push(\n resultError(\n index,\n item.call,\n { code: 'VOICE_TOOL_CANCELLED', message: 'Voice tool batch was cancelled.', retryable: true },\n 'cancelled',\n ),\n );\n continue;\n }\n const claim = item.claim;\n if (!claim || item.input === undefined) {\n results.push(\n resultError(index, item.call, {\n code: 'VOICE_TOOL_INVALID_REQUEST',\n message: 'Voice tool call was not prepared.',\n }),\n );\n continue;\n }\n const operationKey = `${operationId}:${index}`;\n const combined = combineSignal(options.signal, timeoutFor(claim));\n session.operations.set(operationKey, {\n controller: combined.controller,\n registrationGeneration: claim.registrationGeneration,\n });\n let itemResult: VoiceToolBatchItemResult;\n try {\n const value = await Promise.race([\n Promise.resolve(\n claim.execute(item.input, {\n sessionId: session.sessionId,\n hostGeneration: session.hostGeneration,\n operationId,\n batchIndex: index,\n batchSize,\n signal: combined.signal,\n context: claim.context ?? context,\n }),\n ),\n new Promise<never>((_, reject) => {\n combined.signal.addEventListener(\n 'abort',\n () =>\n reject(\n new VoiceToolError(\n combined.timedOut() ? 'VOICE_TOOL_TIMEOUT' : 'VOICE_TOOL_ABORTED',\n combined.timedOut() ? 'Voice tool call timed out.' : 'Voice tool call was aborted.',\n true,\n ),\n ),\n { once: true },\n );\n }),\n ]);\n if (session.disposed)\n throw new VoiceToolError('VOICE_TOOL_SESSION_SHUTDOWN', 'Voice session is shutting down.', true);\n if (!session.active) throw new VoiceToolError('VOICE_TOOL_INACTIVE', 'Autonomous voice is not active.', true);\n if (catalogToken(session as VoiceToolSessionState<unknown>) !== input.catalogToken) {\n throw new VoiceToolError('VOICE_TOOL_STALE_CATALOG', 'The voice tool catalog is stale.', true);\n }\n const currentClaim = activeClaim(root, session.sessionId, item.call.name);\n if (currentClaim.conflict) throw new VoiceToolError('VOICE_TOOL_NAME_CONFLICT', currentClaim.conflict.message);\n if (!currentClaim.claim || currentClaim.claim.registrationGeneration !== claim.registrationGeneration) {\n throw new VoiceToolError('VOICE_TOOL_REGISTRATION_DISPOSED', 'Voice tool registration was disposed.', true);\n }\n const result = validateOutput(claim.descriptor.resultSchema, value);\n itemResult = { index, name: item.call.name, status: 'completed', result };\n if (\n typeof result === 'object' &&\n result !== null &&\n !Array.isArray(result) &&\n (result as { stopBatch?: unknown }).stopBatch === 'session-reload'\n ) {\n status = 'stopped';\n }\n } catch (error) {\n const payload = errorPayload(\n error,\n combined.timedOut()\n ? 'VOICE_TOOL_TIMEOUT'\n : options.signal?.aborted\n ? 'VOICE_TOOL_CANCELLED'\n : 'VOICE_TOOL_EXECUTION_FAILED',\n );\n const itemStatus: VoiceToolBatchItemResult['status'] =\n payload.code === 'VOICE_TOOL_CANCELLED' || payload.code === 'VOICE_TOOL_ABORTED' ? 'cancelled' : 'failed';\n if (itemStatus === 'cancelled') status = 'cancelled';\n itemResult = resultError(index, item.call, payload, itemStatus);\n } finally {\n combined.dispose();\n session.operations.delete(operationKey);\n }\n results.push(itemResult);\n if (status === 'stopped') {\n for (const [laterIndex, later] of preflight.entries()) {\n if (laterIndex <= index) continue;\n results.push(\n resultError(\n laterIndex,\n later.call,\n {\n code: 'VOICE_TOOL_BATCH_STOPPED',\n message: 'Batch stopped because a session reload was queued.',\n retryable: true,\n },\n 'not_executed',\n ),\n );\n }\n break;\n }\n }\n results.sort((left, right) => left.index - right.index);\n const result: VoiceToolBatchResult = {\n status,\n catalogToken: catalogToken(session as VoiceToolSessionState<unknown>),\n results,\n };\n session.terminal.set(operationId, result as VoiceToolBatchResult);\n while (session.terminal.size > VOICE_TOOL_TERMINAL_OPERATION_LIMIT)\n session.terminal.delete(session.terminal.keys().next().value as string);\n return result;\n}\n\nfunction createSession<Context>(\n root: VoiceToolRegistryRoot,\n sessionId: string,\n context: Context | undefined,\n): VoiceToolSessionHandle<Context> {\n root.sequence += 1;\n const state: VoiceToolSessionState<Context> = {\n token: Symbol(sessionId),\n sessionId,\n hostGeneration: `${root.generation}:voice-session:${root.sequence}`,\n context,\n active: false,\n revision: 0,\n disposed: false,\n operations: new Map(),\n terminal: new Map(),\n listeners: new Set(),\n };\n root.sessions.set(sessionId, state as VoiceToolSessionState<unknown>);\n const handle: VoiceToolSessionHandle<Context> = {\n sessionId,\n hostGeneration: state.hostGeneration,\n get active() {\n return state.active;\n },\n setActive(active) {\n if (state.disposed || state.active === active) return;\n state.active = active;\n state.revision += 1;\n if (!active) abortOperations(state as VoiceToolSessionState<unknown>, 'Voice host became inactive.');\n notify(state as VoiceToolSessionState<unknown>);\n },\n subscribe(listener) {\n if (state.disposed) return () => undefined;\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n },\n describe(input = {}) {\n const names = input.names\n ? [\n ...new Set(\n input.names.map((name) =>\n normalizedText(name, 'voice tool name', VOICE_TOOL_MAX_IDENTIFIER_LENGTH, SAFE_NAME),\n ),\n ),\n ]\n : undefined;\n return catalog(root, state as VoiceToolSessionState<unknown>, names);\n },\n executeBatch(input, executeContext, options = {}) {\n if (state.disposed) {\n return Promise.resolve({\n status: 'rejected',\n catalogToken: catalogToken(state as VoiceToolSessionState<unknown>),\n results: input.calls.map((call, index) =>\n resultError(\n index,\n call,\n { code: 'VOICE_TOOL_SESSION_SHUTDOWN', message: 'Voice session is shutting down.', retryable: true },\n 'not_executed',\n ),\n ),\n errors: [\n { code: 'VOICE_TOOL_SESSION_SHUTDOWN', message: 'Voice session is shutting down.', retryable: true },\n ],\n });\n }\n return runBatch(root, state, input, executeContext, options);\n },\n useVoiceTools(input, executeContext, options = {}) {\n return this.executeBatch(input, executeContext, options);\n },\n dispose() {\n if (state.disposed) return;\n state.disposed = true;\n state.active = false;\n abortOperations(state as VoiceToolSessionState<unknown>, 'Voice host session disposed.');\n state.listeners.clear();\n if (root.sessions.get(sessionId) === state) root.sessions.delete(sessionId);\n if (root.sessionHandles.get(sessionId) === handle) root.sessionHandles.delete(sessionId);\n notifySessionListeners(root, sessionId);\n },\n };\n root.sessionHandles.set(sessionId, handle as VoiceToolSessionHandle<unknown>);\n notifySessionListeners(root, sessionId);\n return handle;\n}\n\nfunction registerDefinition<Context = unknown>(\n root: VoiceToolRegistryRoot,\n definition: VoiceToolDefinition<Context>,\n options: VoiceToolRegistrationOptions<Context> = {},\n): VoiceToolRegistrationHandle {\n if (root.disposed) throw new VoiceToolError('VOICE_TOOL_HOST_UNAVAILABLE', 'Voice tools are disposed.');\n const descriptor = validateDescriptor(definition.descriptor);\n root.sequence += 1;\n const registrationGeneration = `${root.generation}:voice-tool:${root.sequence}`;\n const claim: VoiceToolClaim<Context> = {\n descriptor,\n execute: (input, execution) => definition.execute(input, execution),\n registrationGeneration,\n ...(options.sessionId === undefined ? {} : { sessionId: validSessionId(options.sessionId) }),\n ...(options.context === undefined ? {} : { context: options.context }),\n fingerprint: descriptorFingerprint(descriptor),\n };\n const key = descriptor.name;\n for (const [registeredName, registeredClaims] of root.claims) {\n const replaced = registeredClaims.filter(\n (candidate) => candidate.descriptor.source === descriptor.source && candidate.descriptor.id === descriptor.id,\n );\n if (replaced.length === 0) continue;\n for (const candidate of replaced) abortRegistrationOperations(root, candidate.registrationGeneration);\n const remaining = registeredClaims.filter((candidate) => !replaced.includes(candidate));\n if (remaining.length === 0) root.claims.delete(registeredName);\n else root.claims.set(registeredName, remaining);\n }\n const claims = root.claims.get(key) ?? [];\n claims.push(claim as VoiceToolClaim<unknown>);\n root.claims.set(key, claims);\n refreshSessions(root);\n let disposed = false;\n return {\n source: descriptor.source,\n id: descriptor.id,\n registrationGeneration,\n dispose() {\n if (disposed) return;\n disposed = true;\n abortRegistrationOperations(root, registrationGeneration);\n const current = root.claims.get(key);\n if (!current) return;\n const index = current.findIndex((candidate) => candidate.registrationGeneration === registrationGeneration);\n if (index < 0) return;\n current.splice(index, 1);\n if (current.length === 0) root.claims.delete(key);\n refreshSessions(root);\n },\n };\n}\n\n/** Creates the Voice-owned live registrar and session service. */\nexport function createDoomVoiceToolsService<SessionContext = unknown>(\n generation: string,\n): DoomVoiceToolsService<SessionContext> {\n const normalizedGeneration = normalizedText(generation, 'voice service generation', 256);\n const root: VoiceToolRegistryRoot = {\n generation: normalizedGeneration,\n claims: new Map(),\n sessions: new Map(),\n sessionHandles: new Map(),\n sessionListeners: new Map(),\n sequence: 0,\n disposed: false,\n };\n const service: DoomVoiceToolsService<SessionContext> = {\n generation: normalizedGeneration,\n register<ContributionContext = SessionContext>(\n definition: VoiceToolDefinition<ContributionContext>,\n options: VoiceToolRegistrationOptions<ContributionContext> = {},\n ) {\n return registerDefinition(root, definition, options);\n },\n bindSession(id, context) {\n if (root.disposed) throw new VoiceToolError('VOICE_TOOL_HOST_UNAVAILABLE', 'Voice tools are disposed.');\n const key = validSessionId(id);\n const existing = root.sessions.get(key);\n if (existing)\n throw new VoiceToolError('VOICE_TOOL_HOST_UNAVAILABLE', `Voice tool session '${key}' is already bound.`);\n return createSession(root, key, context);\n },\n readSession(id) {\n const key = validSessionId(id);\n return root.sessionHandles.get(key) as VoiceToolSessionHandle<SessionContext> | undefined;\n },\n subscribeSession(id, listener) {\n if (root.disposed) return () => undefined;\n const key = validSessionId(id);\n const listeners = root.sessionListeners.get(key) ?? new Set();\n listeners.add(listener as (session: VoiceToolSessionHandle<unknown> | undefined) => void);\n root.sessionListeners.set(key, listeners);\n listener(root.sessionHandles.get(key) as VoiceToolSessionHandle<SessionContext> | undefined);\n return () => {\n listeners.delete(listener as (session: VoiceToolSessionHandle<unknown> | undefined) => void);\n if (listeners.size === 0) root.sessionListeners.delete(key);\n };\n },\n dispose() {\n if (root.disposed) return;\n root.disposed = true;\n for (const session of root.sessionHandles.values()) session.dispose();\n for (const claim of root.claims.values()) {\n for (const registration of claim) {\n abortRegistrationOperations(root, registration.registrationGeneration);\n }\n }\n root.claims.clear();\n root.sessionListeners.clear();\n },\n };\n return Object.freeze(service);\n}\n"],"mappings":"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"}
|