@assistant-ui/react-google-adk 0.0.15 → 0.0.16

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.
@@ -11,7 +11,7 @@ const isFinalResponse = (event) => {
11
11
  const parts = event.content?.parts;
12
12
  return !event.partial && (parts?.length ?? 0) > 0 && !parts.some((p) => p.functionCall) && !parts.some((p) => p.functionResponse) && !parts[parts.length - 1]?.codeExecutionResult;
13
13
  };
14
- const CONTENT_FILTER_REASONS = new Set([
14
+ const CONTENT_FILTER_REASONS = /* @__PURE__ */ new Set([
15
15
  "SAFETY",
16
16
  "RECITATION",
17
17
  "BLOCKLIST",
@@ -23,7 +23,7 @@ const CONTENT_FILTER_REASONS = new Set([
23
23
  "IMAGE_OTHER",
24
24
  "IMAGE_PROHIBITED_CONTENT"
25
25
  ]);
26
- const ERROR_REASONS = new Set(["MALFORMED_FUNCTION_CALL", "UNEXPECTED_TOOL_CALL"]);
26
+ const ERROR_REASONS = /* @__PURE__ */ new Set(["MALFORMED_FUNCTION_CALL", "UNEXPECTED_TOOL_CALL"]);
27
27
  const finishReasonToStatus = (finishReason) => {
28
28
  if (finishReason === "MAX_TOKENS") return {
29
29
  type: "incomplete",
@@ -1 +1 @@
1
- {"version":3,"file":"AdkEventAccumulator.js","names":["uuidv4"],"sources":["../src/AdkEventAccumulator.ts"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport type { MessageStatus } from \"@assistant-ui/core\";\nimport type {\n AdkEvent,\n AdkEventPart,\n AdkMessage,\n AdkMessageContentPart,\n AdkToolCall,\n AdkToolConfirmation,\n AdkAuthRequest,\n AdkMessageMetadata,\n} from \"./types\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\ntype InProgressMessage = AdkMessage & { type: \"ai\" };\n\nconst ADK_REQUEST_CONFIRMATION = \"adk_request_confirmation\";\nconst ADK_REQUEST_CREDENTIAL = \"adk_request_credential\";\n\n/**\n * Checks if an event is a final response using the same logic as ADK's\n * `isFinalResponse()`.\n */\nexport const isFinalResponse = (event: AdkEvent): boolean => {\n if (\n event.actions?.skipSummarization ||\n (event.longRunningToolIds && event.longRunningToolIds.length > 0)\n ) {\n return true;\n }\n\n const parts = event.content?.parts;\n return (\n !event.partial &&\n (parts?.length ?? 0) > 0 &&\n !parts!.some((p) => p.functionCall) &&\n !parts!.some((p) => p.functionResponse) &&\n !parts![parts!.length - 1]?.codeExecutionResult\n );\n};\n\nconst CONTENT_FILTER_REASONS = new Set([\n \"SAFETY\",\n \"RECITATION\",\n \"BLOCKLIST\",\n \"PROHIBITED_CONTENT\",\n \"SPII\",\n \"LANGUAGE\",\n \"IMAGE_SAFETY\",\n \"IMAGE_RECITATION\",\n \"IMAGE_OTHER\",\n \"IMAGE_PROHIBITED_CONTENT\",\n]);\n\nconst ERROR_REASONS = new Set([\n \"MALFORMED_FUNCTION_CALL\",\n \"UNEXPECTED_TOOL_CALL\",\n]);\n\nconst finishReasonToStatus = (\n finishReason: string | undefined,\n): MessageStatus => {\n if (finishReason === \"MAX_TOKENS\") {\n return { type: \"incomplete\", reason: \"length\" };\n }\n if (finishReason && CONTENT_FILTER_REASONS.has(finishReason)) {\n return {\n type: \"incomplete\",\n reason: \"content-filter\",\n error: `Content filtered: ${finishReason}`,\n };\n }\n if (finishReason && ERROR_REASONS.has(finishReason)) {\n return {\n type: \"incomplete\",\n reason: \"error\",\n error: `LLM error: ${finishReason}`,\n };\n }\n return { type: \"complete\", reason: \"stop\" };\n};\n\nconst inlineDataToPart = (\n mimeType: string,\n data: string,\n): AdkMessageContentPart =>\n mimeType.startsWith(\"image/\")\n ? { type: \"image\", mimeType, data }\n : { type: \"file\", mimeType, data };\n\nconst fileDataToPart = (\n fileUri: string,\n mimeType: string | undefined,\n): AdkMessageContentPart =>\n mimeType == null || mimeType.startsWith(\"image/\")\n ? { type: \"image_url\", url: fileUri }\n : { type: \"file_url\", url: fileUri, mimeType };\n\n// ── Snake_case normalization ──\n\nconst normalizeEventPart = (part: AdkEventPart): AdkEventPart => {\n const p = part as Record<string, unknown>;\n const result: Record<string, unknown> = { ...p };\n if (\"function_call\" in p && !(\"functionCall\" in p))\n result.functionCall = p.function_call;\n if (\"function_response\" in p && !(\"functionResponse\" in p))\n result.functionResponse = p.function_response;\n if (\"inline_data\" in p && !(\"inlineData\" in p))\n result.inlineData = p.inline_data;\n if (\"file_data\" in p && !(\"fileData\" in p)) result.fileData = p.file_data;\n if (\"executable_code\" in p && !(\"executableCode\" in p))\n result.executableCode = p.executable_code;\n if (\"code_execution_result\" in p && !(\"codeExecutionResult\" in p))\n result.codeExecutionResult = p.code_execution_result;\n return result as AdkEventPart;\n};\n\nconst normalizeEvent = (event: AdkEvent): AdkEvent => {\n const e = event as Record<string, unknown>;\n const result: Record<string, unknown> = { ...e };\n if (\"error_code\" in e && !(\"errorCode\" in e)) result.errorCode = e.error_code;\n if (\"error_message\" in e && !(\"errorMessage\" in e))\n result.errorMessage = e.error_message;\n if (\"long_running_tool_ids\" in e && !(\"longRunningToolIds\" in e))\n result.longRunningToolIds = e.long_running_tool_ids;\n if (\"turn_complete\" in e && !(\"turnComplete\" in e))\n result.turnComplete = e.turn_complete;\n if (\"finish_reason\" in e && !(\"finishReason\" in e))\n result.finishReason = e.finish_reason;\n if (\"invocation_id\" in e && !(\"invocationId\" in e))\n result.invocationId = e.invocation_id;\n if (\"custom_metadata\" in e && !(\"customMetadata\" in e))\n result.customMetadata = e.custom_metadata;\n if (\"grounding_metadata\" in e && !(\"groundingMetadata\" in e))\n result.groundingMetadata = e.grounding_metadata;\n if (\"citation_metadata\" in e && !(\"citationMetadata\" in e))\n result.citationMetadata = e.citation_metadata;\n if (\"usage_metadata\" in e && !(\"usageMetadata\" in e))\n result.usageMetadata = e.usage_metadata;\n\n if (result.actions) {\n const a = result.actions as Record<string, unknown>;\n const na: Record<string, unknown> = { ...a };\n if (\"state_delta\" in a && !(\"stateDelta\" in a))\n na.stateDelta = a.state_delta;\n if (\"artifact_delta\" in a && !(\"artifactDelta\" in a))\n na.artifactDelta = a.artifact_delta;\n if (\"transfer_to_agent\" in a && !(\"transferToAgent\" in a))\n na.transferToAgent = a.transfer_to_agent;\n if (\"skip_summarization\" in a && !(\"skipSummarization\" in a))\n na.skipSummarization = a.skip_summarization;\n if (\"requested_auth_configs\" in a && !(\"requestedAuthConfigs\" in a))\n na.requestedAuthConfigs = a.requested_auth_configs;\n if (\n \"requested_tool_confirmations\" in a &&\n !(\"requestedToolConfirmations\" in a)\n )\n na.requestedToolConfirmations = a.requested_tool_confirmations;\n result.actions = na;\n }\n\n if (result.content && (result.content as Record<string, unknown>).parts) {\n const content = result.content as Record<string, unknown>;\n const parts = content.parts as AdkEventPart[];\n result.content = { ...content, parts: parts.map(normalizeEventPart) };\n }\n\n return result as AdkEvent;\n};\n\n// ── Accumulator ──\n\nexport class AdkEventAccumulator {\n private messagesMap = new Map<string, AdkMessage>();\n private currentMessageId: string | null = null;\n private partialTextBuffer = \"\";\n private partialReasoningBuffer = \"\";\n private accumulatedStateDelta: Record<string, unknown> = {};\n private accumulatedArtifactDelta: Record<string, number> = {};\n private lastAgentInfo: {\n name?: string | undefined;\n branch?: string | undefined;\n } = {};\n private lastTransferToAgent: string | undefined;\n private pendingLongRunningToolIds = new Set<string>();\n private toolConfirmations: AdkToolConfirmation[] = [];\n private authRequests: AdkAuthRequest[] = [];\n private escalated = false;\n private messageMetadataMap = new Map<string, AdkMessageMetadata>();\n constructor(initialMessages?: AdkMessage[]) {\n if (initialMessages) {\n for (const msg of initialMessages) {\n this.messagesMap.set(msg.id, msg);\n }\n }\n }\n\n processEvent(rawEvent: AdkEvent): AdkMessage[] {\n const event = normalizeEvent(rawEvent);\n\n // Accumulate state delta\n if (event.actions?.stateDelta) {\n Object.assign(this.accumulatedStateDelta, event.actions.stateDelta);\n }\n\n // Accumulate artifact delta\n if (event.actions?.artifactDelta) {\n Object.assign(this.accumulatedArtifactDelta, event.actions.artifactDelta);\n }\n\n // Track escalation\n if (event.actions?.escalate) {\n this.escalated = true;\n }\n\n // Track agent transfer\n if (event.actions?.transferToAgent) {\n this.lastTransferToAgent = event.actions.transferToAgent;\n }\n\n // Track long-running tool IDs. Accumulate across events so that multiple\n // HITL interrupts emitted in the same turn are all tracked — a\n // single-event replacement would drop earlier ids.\n if (event.longRunningToolIds?.length) {\n for (const id of event.longRunningToolIds) {\n this.pendingLongRunningToolIds.add(id);\n }\n }\n\n // Track tool confirmations from actions\n if (event.actions?.requestedToolConfirmations) {\n for (const [tcId, conf] of Object.entries(\n event.actions.requestedToolConfirmations,\n )) {\n const c = conf as Record<string, unknown>;\n this.toolConfirmations.push({\n toolCallId: tcId,\n toolName: \"\",\n args: {},\n hint: (c.hint as string) ?? \"\",\n confirmed: false,\n payload: c.payload,\n });\n }\n }\n\n // Track auth requests from actions\n if (event.actions?.requestedAuthConfigs) {\n for (const [tcId, authConf] of Object.entries(\n event.actions.requestedAuthConfigs,\n )) {\n this.authRequests.push({ toolCallId: tcId, authConfig: authConf });\n }\n }\n\n // Track agent info\n if (event.author && event.author !== \"user\") {\n this.lastAgentInfo = {\n name: event.author ?? undefined,\n branch: event.branch ?? undefined,\n };\n }\n\n // Handle interrupted events\n if (event.interrupted) {\n if (this.currentMessageId) {\n const msg = this.messagesMap.get(this.currentMessageId);\n if (msg && msg.type === \"ai\" && !msg.status) {\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n status: { type: \"incomplete\", reason: \"cancelled\" },\n };\n this.messagesMap.set(updated.id, updated);\n }\n }\n this.finalizeCurrentMessage();\n return this.getMessages();\n }\n\n // Handle error events\n if (event.errorCode || event.errorMessage) {\n this.finalizeCurrentMessage();\n const errorMsg = this.getOrCreateAiMessage(event);\n const errorText =\n event.errorMessage ?? event.errorCode ?? \"Unknown error\";\n const updated: InProgressMessage = {\n ...errorMsg,\n content: [\n ...this.getContentArray(errorMsg),\n { type: \"text\", text: errorText },\n ],\n status: { type: \"incomplete\", reason: \"error\", error: errorText },\n };\n this.messagesMap.set(updated.id, updated);\n this.currentMessageId = null;\n return this.getMessages();\n }\n\n const parts = event.content?.parts;\n if (!parts?.length) {\n // Track metadata even for content-less events (e.g. turnComplete)\n this.trackMessageMetadata(event);\n return this.getMessages();\n }\n\n // User-authored events → create human message, not AI.\n // Without this, user events fall through to processPart →\n // getOrCreateAiMessage, producing type:\"ai\" messages that\n // convertAdkMessage maps to role:\"assistant\".\n if (event.author === \"user\") {\n this.finalizeCurrentMessage();\n const humanParts: AdkMessageContentPart[] = [];\n for (const part of parts) {\n if (part.text != null && !part.thought) {\n humanParts.push({ type: \"text\", text: part.text });\n } else if (part.inlineData) {\n humanParts.push(\n inlineDataToPart(part.inlineData.mimeType, part.inlineData.data),\n );\n } else if (part.fileData) {\n humanParts.push(\n fileDataToPart(part.fileData.fileUri, part.fileData.mimeType),\n );\n }\n }\n if (humanParts.length > 0) {\n const id = event.id ?? uuidv4();\n const first = humanParts[0];\n const content: string | AdkMessageContentPart[] =\n humanParts.length === 1 && first?.type === \"text\"\n ? first.text\n : humanParts;\n this.messagesMap.set(id, { id, type: \"human\", content });\n }\n return this.getMessages();\n }\n\n // If author changed, finalize previous message\n if (this.currentMessageId && event.author && event.author !== \"user\") {\n const current = this.messagesMap.get(this.currentMessageId);\n if (current && current.type === \"ai\" && current.author !== event.author) {\n this.finalizeCurrentMessage();\n }\n }\n\n for (const part of parts) {\n this.processPart(part, event);\n }\n\n // Track per-message metadata (grounding, citation, usage)\n this.trackMessageMetadata(event);\n\n // Check isFinalResponse (can be true even for partial events via skipSummarization/longRunningToolIds)\n if (isFinalResponse(event) && this.currentMessageId) {\n const msg = this.messagesMap.get(this.currentMessageId);\n // Skip manual \"complete\" when longRunningToolIds is the sole reason for\n // isFinalResponse — let auto-status apply requires-action for pending tool calls.\n const isHitlOnly =\n event.longRunningToolIds &&\n event.longRunningToolIds.length > 0 &&\n !event.actions?.skipSummarization;\n if (msg && msg.type === \"ai\" && !msg.status && !isHitlOnly) {\n const status = finishReasonToStatus(event.finishReason);\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n status,\n };\n this.messagesMap.set(updated.id, updated);\n }\n }\n\n // Non-partial event finalizes the current message\n if (!event.partial || isFinalResponse(event)) {\n this.finalizeCurrentMessage();\n }\n\n return this.getMessages();\n }\n\n private processPart(part: AdkEventPart, event: AdkEvent): void {\n // Detect special ADK function calls\n if (part.functionCall && !event.partial) {\n const name = part.functionCall.name;\n\n // Tool confirmation request\n if (name === ADK_REQUEST_CONFIRMATION) {\n const callArgs = part.functionCall.args;\n // ADK JS: args keys are \"originalFunctionCall\" and \"toolConfirmation\"\n // ADK Python: args keys are \"original_function_call\" and \"tool_confirmation\"\n const original =\n (callArgs.originalFunctionCall as Record<string, unknown>) ??\n (callArgs.original_function_call as Record<string, unknown>);\n const conf =\n (callArgs.toolConfirmation as Record<string, unknown>) ??\n (callArgs.tool_confirmation as Record<string, unknown>);\n this.toolConfirmations.push({\n toolCallId: part.functionCall.id ?? \"\",\n toolName: (original?.name as string) ?? \"\",\n args: (original?.args as Record<string, unknown>) ?? {},\n hint: (conf?.hint as string) ?? \"\",\n confirmed: false,\n payload: conf?.payload,\n });\n }\n\n // Auth credential request\n if (name === ADK_REQUEST_CREDENTIAL) {\n const credArgs = part.functionCall.args;\n // ADK JS: args keys are \"function_call_id\" and \"auth_config\"\n const originalToolCallId =\n (credArgs.function_call_id as string) ?? part.functionCall.id ?? \"\";\n const authConfig = credArgs.auth_config ?? credArgs;\n this.authRequests.push({\n toolCallId: originalToolCallId,\n authConfig,\n });\n }\n }\n\n // Text with thought=true → reasoning (accumulated)\n if (part.text != null && part.thought) {\n const msg = this.getOrCreateAiMessage(event);\n if (event.partial) {\n this.partialReasoningBuffer += part.text;\n this.replaceLastReasoningContent(msg, this.partialReasoningBuffer);\n } else {\n this.partialReasoningBuffer = \"\";\n this.replaceLastReasoningContent(msg, part.text);\n }\n return;\n }\n\n // Regular text\n if (part.text != null) {\n const msg = this.getOrCreateAiMessage(event);\n if (event.partial) {\n this.partialTextBuffer += part.text;\n this.replaceLastTextContent(msg, this.partialTextBuffer);\n } else {\n this.partialTextBuffer = \"\";\n this.replaceLastTextContent(msg, part.text);\n }\n return;\n }\n\n // Function call — skip partial events (args may be incomplete)\n if (part.functionCall) {\n if (event.partial) return;\n const msg = this.getOrCreateAiMessage(event);\n const toolCall: AdkToolCall = {\n id: part.functionCall.id ?? uuidv4(),\n name: part.functionCall.name,\n args: part.functionCall.args as ReadonlyJSONObject,\n argsText: JSON.stringify(part.functionCall.args),\n };\n const existing = [...(msg.tool_calls ?? [])];\n const idx = existing.findIndex((tc) => tc.id === toolCall.id);\n if (idx >= 0) {\n existing[idx] = toolCall;\n } else {\n existing.push(toolCall);\n }\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n tool_calls: existing,\n };\n this.messagesMap.set(updated.id, updated);\n return;\n }\n\n // Function response → tool message\n if (part.functionResponse) {\n this.finalizeCurrentMessage();\n const toolMsg: AdkMessage = {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: part.functionResponse.id ?? \"\",\n name: part.functionResponse.name,\n content: JSON.stringify(part.functionResponse.response),\n status: \"success\",\n };\n this.messagesMap.set(toolMsg.id, toolMsg);\n return;\n }\n\n // Executable code\n if (part.executableCode) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(msg, {\n type: \"code\",\n code: part.executableCode.code,\n language: part.executableCode.language ?? \"python\",\n });\n return;\n }\n\n // Code execution result\n if (part.codeExecutionResult) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(msg, {\n type: \"code_result\",\n output: part.codeExecutionResult.output,\n outcome: part.codeExecutionResult.outcome ?? \"OUTCOME_OK\",\n });\n return;\n }\n\n if (part.inlineData) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(\n msg,\n inlineDataToPart(part.inlineData.mimeType, part.inlineData.data),\n );\n return;\n }\n\n if (part.fileData) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(\n msg,\n fileDataToPart(part.fileData.fileUri, part.fileData.mimeType),\n );\n }\n }\n\n private trackMessageMetadata(event: AdkEvent): void {\n if (\n !this.currentMessageId ||\n (!event.groundingMetadata &&\n !event.citationMetadata &&\n !event.usageMetadata)\n )\n return;\n\n const existing = this.messageMetadataMap.get(this.currentMessageId) ?? {};\n const updated: AdkMessageMetadata = { ...existing };\n if (event.groundingMetadata)\n updated.groundingMetadata = event.groundingMetadata;\n if (event.citationMetadata)\n updated.citationMetadata = event.citationMetadata;\n if (event.usageMetadata) updated.usageMetadata = event.usageMetadata;\n this.messageMetadataMap.set(this.currentMessageId, updated);\n }\n\n private getContentArray(msg: AdkMessage): AdkMessageContentPart[] {\n return Array.isArray(msg.content)\n ? (msg.content as AdkMessageContentPart[])\n : [];\n }\n\n private getOrCreateAiMessage(event: AdkEvent): InProgressMessage {\n if (this.currentMessageId) {\n const existing = this.messagesMap.get(this.currentMessageId);\n if (existing && existing.type === \"ai\") {\n return existing;\n }\n }\n\n const id = uuidv4();\n const msg: InProgressMessage = {\n id,\n type: \"ai\",\n content: [] as AdkMessageContentPart[],\n ...(event.author != null && { author: event.author }),\n ...(event.branch != null && { branch: event.branch }),\n };\n this.messagesMap.set(id, msg);\n this.currentMessageId = id;\n this.partialTextBuffer = \"\";\n this.partialReasoningBuffer = \"\";\n return msg;\n }\n\n private appendContent(\n msg: InProgressMessage,\n part: AdkMessageContentPart,\n ): void {\n const content = [...this.getContentArray(msg), part];\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private replaceLastTextContent(msg: InProgressMessage, text: string): void {\n const content = [...this.getContentArray(msg)];\n const lastTextIdx = content.findLastIndex((p) => p.type === \"text\");\n if (lastTextIdx >= 0) {\n content[lastTextIdx] = { type: \"text\", text };\n } else {\n content.push({ type: \"text\", text });\n }\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private replaceLastReasoningContent(\n msg: InProgressMessage,\n text: string,\n ): void {\n const content = [...this.getContentArray(msg)];\n const lastIdx = content.findLastIndex((p) => p.type === \"reasoning\");\n if (lastIdx >= 0) {\n content[lastIdx] = { type: \"reasoning\", text };\n } else {\n content.push({ type: \"reasoning\", text });\n }\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private finalizeCurrentMessage(): void {\n this.partialTextBuffer = \"\";\n this.partialReasoningBuffer = \"\";\n this.currentMessageId = null;\n }\n\n getMessages(): AdkMessage[] {\n return [...this.messagesMap.values()];\n }\n\n getStateDelta(): Record<string, unknown> {\n return { ...this.accumulatedStateDelta };\n }\n\n getArtifactDelta(): Record<string, number> {\n return { ...this.accumulatedArtifactDelta };\n }\n\n getAgentInfo(): { name?: string | undefined; branch?: string | undefined } {\n return { ...this.lastAgentInfo };\n }\n\n getLastTransferToAgent(): string | undefined {\n return this.lastTransferToAgent;\n }\n\n getLongRunningToolIds(): string[] {\n return [...this.pendingLongRunningToolIds];\n }\n\n getToolConfirmations(): AdkToolConfirmation[] {\n return [...this.toolConfirmations];\n }\n\n getAuthRequests(): AdkAuthRequest[] {\n return [...this.authRequests];\n }\n\n isEscalated(): boolean {\n return this.escalated;\n }\n\n getMessageMetadata(): Map<string, AdkMessageMetadata> {\n return new Map(this.messageMetadataMap);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdkEventAccumulator.js","names":["uuidv4"],"sources":["../src/AdkEventAccumulator.ts"],"sourcesContent":["import { v4 as uuidv4 } from \"uuid\";\nimport type { MessageStatus } from \"@assistant-ui/core\";\nimport type {\n AdkEvent,\n AdkEventPart,\n AdkMessage,\n AdkMessageContentPart,\n AdkToolCall,\n AdkToolConfirmation,\n AdkAuthRequest,\n AdkMessageMetadata,\n} from \"./types\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\ntype InProgressMessage = AdkMessage & { type: \"ai\" };\n\nconst ADK_REQUEST_CONFIRMATION = \"adk_request_confirmation\";\nconst ADK_REQUEST_CREDENTIAL = \"adk_request_credential\";\n\n/**\n * Checks if an event is a final response using the same logic as ADK's\n * `isFinalResponse()`.\n */\nexport const isFinalResponse = (event: AdkEvent): boolean => {\n if (\n event.actions?.skipSummarization ||\n (event.longRunningToolIds && event.longRunningToolIds.length > 0)\n ) {\n return true;\n }\n\n const parts = event.content?.parts;\n return (\n !event.partial &&\n (parts?.length ?? 0) > 0 &&\n !parts!.some((p) => p.functionCall) &&\n !parts!.some((p) => p.functionResponse) &&\n !parts![parts!.length - 1]?.codeExecutionResult\n );\n};\n\nconst CONTENT_FILTER_REASONS = new Set([\n \"SAFETY\",\n \"RECITATION\",\n \"BLOCKLIST\",\n \"PROHIBITED_CONTENT\",\n \"SPII\",\n \"LANGUAGE\",\n \"IMAGE_SAFETY\",\n \"IMAGE_RECITATION\",\n \"IMAGE_OTHER\",\n \"IMAGE_PROHIBITED_CONTENT\",\n]);\n\nconst ERROR_REASONS = new Set([\n \"MALFORMED_FUNCTION_CALL\",\n \"UNEXPECTED_TOOL_CALL\",\n]);\n\nconst finishReasonToStatus = (\n finishReason: string | undefined,\n): MessageStatus => {\n if (finishReason === \"MAX_TOKENS\") {\n return { type: \"incomplete\", reason: \"length\" };\n }\n if (finishReason && CONTENT_FILTER_REASONS.has(finishReason)) {\n return {\n type: \"incomplete\",\n reason: \"content-filter\",\n error: `Content filtered: ${finishReason}`,\n };\n }\n if (finishReason && ERROR_REASONS.has(finishReason)) {\n return {\n type: \"incomplete\",\n reason: \"error\",\n error: `LLM error: ${finishReason}`,\n };\n }\n return { type: \"complete\", reason: \"stop\" };\n};\n\nconst inlineDataToPart = (\n mimeType: string,\n data: string,\n): AdkMessageContentPart =>\n mimeType.startsWith(\"image/\")\n ? { type: \"image\", mimeType, data }\n : { type: \"file\", mimeType, data };\n\nconst fileDataToPart = (\n fileUri: string,\n mimeType: string | undefined,\n): AdkMessageContentPart =>\n mimeType == null || mimeType.startsWith(\"image/\")\n ? { type: \"image_url\", url: fileUri }\n : { type: \"file_url\", url: fileUri, mimeType };\n\n// ── Snake_case normalization ──\n\nconst normalizeEventPart = (part: AdkEventPart): AdkEventPart => {\n const p = part as Record<string, unknown>;\n const result: Record<string, unknown> = { ...p };\n if (\"function_call\" in p && !(\"functionCall\" in p))\n result.functionCall = p.function_call;\n if (\"function_response\" in p && !(\"functionResponse\" in p))\n result.functionResponse = p.function_response;\n if (\"inline_data\" in p && !(\"inlineData\" in p))\n result.inlineData = p.inline_data;\n if (\"file_data\" in p && !(\"fileData\" in p)) result.fileData = p.file_data;\n if (\"executable_code\" in p && !(\"executableCode\" in p))\n result.executableCode = p.executable_code;\n if (\"code_execution_result\" in p && !(\"codeExecutionResult\" in p))\n result.codeExecutionResult = p.code_execution_result;\n return result as AdkEventPart;\n};\n\nconst normalizeEvent = (event: AdkEvent): AdkEvent => {\n const e = event as Record<string, unknown>;\n const result: Record<string, unknown> = { ...e };\n if (\"error_code\" in e && !(\"errorCode\" in e)) result.errorCode = e.error_code;\n if (\"error_message\" in e && !(\"errorMessage\" in e))\n result.errorMessage = e.error_message;\n if (\"long_running_tool_ids\" in e && !(\"longRunningToolIds\" in e))\n result.longRunningToolIds = e.long_running_tool_ids;\n if (\"turn_complete\" in e && !(\"turnComplete\" in e))\n result.turnComplete = e.turn_complete;\n if (\"finish_reason\" in e && !(\"finishReason\" in e))\n result.finishReason = e.finish_reason;\n if (\"invocation_id\" in e && !(\"invocationId\" in e))\n result.invocationId = e.invocation_id;\n if (\"custom_metadata\" in e && !(\"customMetadata\" in e))\n result.customMetadata = e.custom_metadata;\n if (\"grounding_metadata\" in e && !(\"groundingMetadata\" in e))\n result.groundingMetadata = e.grounding_metadata;\n if (\"citation_metadata\" in e && !(\"citationMetadata\" in e))\n result.citationMetadata = e.citation_metadata;\n if (\"usage_metadata\" in e && !(\"usageMetadata\" in e))\n result.usageMetadata = e.usage_metadata;\n\n if (result.actions) {\n const a = result.actions as Record<string, unknown>;\n const na: Record<string, unknown> = { ...a };\n if (\"state_delta\" in a && !(\"stateDelta\" in a))\n na.stateDelta = a.state_delta;\n if (\"artifact_delta\" in a && !(\"artifactDelta\" in a))\n na.artifactDelta = a.artifact_delta;\n if (\"transfer_to_agent\" in a && !(\"transferToAgent\" in a))\n na.transferToAgent = a.transfer_to_agent;\n if (\"skip_summarization\" in a && !(\"skipSummarization\" in a))\n na.skipSummarization = a.skip_summarization;\n if (\"requested_auth_configs\" in a && !(\"requestedAuthConfigs\" in a))\n na.requestedAuthConfigs = a.requested_auth_configs;\n if (\n \"requested_tool_confirmations\" in a &&\n !(\"requestedToolConfirmations\" in a)\n )\n na.requestedToolConfirmations = a.requested_tool_confirmations;\n result.actions = na;\n }\n\n if (result.content && (result.content as Record<string, unknown>).parts) {\n const content = result.content as Record<string, unknown>;\n const parts = content.parts as AdkEventPart[];\n result.content = { ...content, parts: parts.map(normalizeEventPart) };\n }\n\n return result as AdkEvent;\n};\n\n// ── Accumulator ──\n\nexport class AdkEventAccumulator {\n private messagesMap = new Map<string, AdkMessage>();\n private currentMessageId: string | null = null;\n private partialTextBuffer = \"\";\n private partialReasoningBuffer = \"\";\n private accumulatedStateDelta: Record<string, unknown> = {};\n private accumulatedArtifactDelta: Record<string, number> = {};\n private lastAgentInfo: {\n name?: string | undefined;\n branch?: string | undefined;\n } = {};\n private lastTransferToAgent: string | undefined;\n private pendingLongRunningToolIds = new Set<string>();\n private toolConfirmations: AdkToolConfirmation[] = [];\n private authRequests: AdkAuthRequest[] = [];\n private escalated = false;\n private messageMetadataMap = new Map<string, AdkMessageMetadata>();\n constructor(initialMessages?: AdkMessage[]) {\n if (initialMessages) {\n for (const msg of initialMessages) {\n this.messagesMap.set(msg.id, msg);\n }\n }\n }\n\n processEvent(rawEvent: AdkEvent): AdkMessage[] {\n const event = normalizeEvent(rawEvent);\n\n // Accumulate state delta\n if (event.actions?.stateDelta) {\n Object.assign(this.accumulatedStateDelta, event.actions.stateDelta);\n }\n\n // Accumulate artifact delta\n if (event.actions?.artifactDelta) {\n Object.assign(this.accumulatedArtifactDelta, event.actions.artifactDelta);\n }\n\n // Track escalation\n if (event.actions?.escalate) {\n this.escalated = true;\n }\n\n // Track agent transfer\n if (event.actions?.transferToAgent) {\n this.lastTransferToAgent = event.actions.transferToAgent;\n }\n\n // Track long-running tool IDs. Accumulate across events so that multiple\n // HITL interrupts emitted in the same turn are all tracked — a\n // single-event replacement would drop earlier ids.\n if (event.longRunningToolIds?.length) {\n for (const id of event.longRunningToolIds) {\n this.pendingLongRunningToolIds.add(id);\n }\n }\n\n // Track tool confirmations from actions\n if (event.actions?.requestedToolConfirmations) {\n for (const [tcId, conf] of Object.entries(\n event.actions.requestedToolConfirmations,\n )) {\n const c = conf as Record<string, unknown>;\n this.toolConfirmations.push({\n toolCallId: tcId,\n toolName: \"\",\n args: {},\n hint: (c.hint as string) ?? \"\",\n confirmed: false,\n payload: c.payload,\n });\n }\n }\n\n // Track auth requests from actions\n if (event.actions?.requestedAuthConfigs) {\n for (const [tcId, authConf] of Object.entries(\n event.actions.requestedAuthConfigs,\n )) {\n this.authRequests.push({ toolCallId: tcId, authConfig: authConf });\n }\n }\n\n // Track agent info\n if (event.author && event.author !== \"user\") {\n this.lastAgentInfo = {\n name: event.author ?? undefined,\n branch: event.branch ?? undefined,\n };\n }\n\n // Handle interrupted events\n if (event.interrupted) {\n if (this.currentMessageId) {\n const msg = this.messagesMap.get(this.currentMessageId);\n if (msg && msg.type === \"ai\" && !msg.status) {\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n status: { type: \"incomplete\", reason: \"cancelled\" },\n };\n this.messagesMap.set(updated.id, updated);\n }\n }\n this.finalizeCurrentMessage();\n return this.getMessages();\n }\n\n // Handle error events\n if (event.errorCode || event.errorMessage) {\n this.finalizeCurrentMessage();\n const errorMsg = this.getOrCreateAiMessage(event);\n const errorText =\n event.errorMessage ?? event.errorCode ?? \"Unknown error\";\n const updated: InProgressMessage = {\n ...errorMsg,\n content: [\n ...this.getContentArray(errorMsg),\n { type: \"text\", text: errorText },\n ],\n status: { type: \"incomplete\", reason: \"error\", error: errorText },\n };\n this.messagesMap.set(updated.id, updated);\n this.currentMessageId = null;\n return this.getMessages();\n }\n\n const parts = event.content?.parts;\n if (!parts?.length) {\n // Track metadata even for content-less events (e.g. turnComplete)\n this.trackMessageMetadata(event);\n return this.getMessages();\n }\n\n // User-authored events → create human message, not AI.\n // Without this, user events fall through to processPart →\n // getOrCreateAiMessage, producing type:\"ai\" messages that\n // convertAdkMessage maps to role:\"assistant\".\n if (event.author === \"user\") {\n this.finalizeCurrentMessage();\n const humanParts: AdkMessageContentPart[] = [];\n for (const part of parts) {\n if (part.text != null && !part.thought) {\n humanParts.push({ type: \"text\", text: part.text });\n } else if (part.inlineData) {\n humanParts.push(\n inlineDataToPart(part.inlineData.mimeType, part.inlineData.data),\n );\n } else if (part.fileData) {\n humanParts.push(\n fileDataToPart(part.fileData.fileUri, part.fileData.mimeType),\n );\n }\n }\n if (humanParts.length > 0) {\n const id = event.id ?? uuidv4();\n const first = humanParts[0];\n const content: string | AdkMessageContentPart[] =\n humanParts.length === 1 && first?.type === \"text\"\n ? first.text\n : humanParts;\n this.messagesMap.set(id, { id, type: \"human\", content });\n }\n return this.getMessages();\n }\n\n // If author changed, finalize previous message\n if (this.currentMessageId && event.author && event.author !== \"user\") {\n const current = this.messagesMap.get(this.currentMessageId);\n if (current && current.type === \"ai\" && current.author !== event.author) {\n this.finalizeCurrentMessage();\n }\n }\n\n for (const part of parts) {\n this.processPart(part, event);\n }\n\n // Track per-message metadata (grounding, citation, usage)\n this.trackMessageMetadata(event);\n\n // Check isFinalResponse (can be true even for partial events via skipSummarization/longRunningToolIds)\n if (isFinalResponse(event) && this.currentMessageId) {\n const msg = this.messagesMap.get(this.currentMessageId);\n // Skip manual \"complete\" when longRunningToolIds is the sole reason for\n // isFinalResponse — let auto-status apply requires-action for pending tool calls.\n const isHitlOnly =\n event.longRunningToolIds &&\n event.longRunningToolIds.length > 0 &&\n !event.actions?.skipSummarization;\n if (msg && msg.type === \"ai\" && !msg.status && !isHitlOnly) {\n const status = finishReasonToStatus(event.finishReason);\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n status,\n };\n this.messagesMap.set(updated.id, updated);\n }\n }\n\n // Non-partial event finalizes the current message\n if (!event.partial || isFinalResponse(event)) {\n this.finalizeCurrentMessage();\n }\n\n return this.getMessages();\n }\n\n private processPart(part: AdkEventPart, event: AdkEvent): void {\n // Detect special ADK function calls\n if (part.functionCall && !event.partial) {\n const name = part.functionCall.name;\n\n // Tool confirmation request\n if (name === ADK_REQUEST_CONFIRMATION) {\n const callArgs = part.functionCall.args;\n // ADK JS: args keys are \"originalFunctionCall\" and \"toolConfirmation\"\n // ADK Python: args keys are \"original_function_call\" and \"tool_confirmation\"\n const original =\n (callArgs.originalFunctionCall as Record<string, unknown>) ??\n (callArgs.original_function_call as Record<string, unknown>);\n const conf =\n (callArgs.toolConfirmation as Record<string, unknown>) ??\n (callArgs.tool_confirmation as Record<string, unknown>);\n this.toolConfirmations.push({\n toolCallId: part.functionCall.id ?? \"\",\n toolName: (original?.name as string) ?? \"\",\n args: (original?.args as Record<string, unknown>) ?? {},\n hint: (conf?.hint as string) ?? \"\",\n confirmed: false,\n payload: conf?.payload,\n });\n }\n\n // Auth credential request\n if (name === ADK_REQUEST_CREDENTIAL) {\n const credArgs = part.functionCall.args;\n // ADK JS: args keys are \"function_call_id\" and \"auth_config\"\n const originalToolCallId =\n (credArgs.function_call_id as string) ?? part.functionCall.id ?? \"\";\n const authConfig = credArgs.auth_config ?? credArgs;\n this.authRequests.push({\n toolCallId: originalToolCallId,\n authConfig,\n });\n }\n }\n\n // Text with thought=true → reasoning (accumulated)\n if (part.text != null && part.thought) {\n const msg = this.getOrCreateAiMessage(event);\n if (event.partial) {\n this.partialReasoningBuffer += part.text;\n this.replaceLastReasoningContent(msg, this.partialReasoningBuffer);\n } else {\n this.partialReasoningBuffer = \"\";\n this.replaceLastReasoningContent(msg, part.text);\n }\n return;\n }\n\n // Regular text\n if (part.text != null) {\n const msg = this.getOrCreateAiMessage(event);\n if (event.partial) {\n this.partialTextBuffer += part.text;\n this.replaceLastTextContent(msg, this.partialTextBuffer);\n } else {\n this.partialTextBuffer = \"\";\n this.replaceLastTextContent(msg, part.text);\n }\n return;\n }\n\n // Function call — skip partial events (args may be incomplete)\n if (part.functionCall) {\n if (event.partial) return;\n const msg = this.getOrCreateAiMessage(event);\n const toolCall: AdkToolCall = {\n id: part.functionCall.id ?? uuidv4(),\n name: part.functionCall.name,\n args: part.functionCall.args as ReadonlyJSONObject,\n argsText: JSON.stringify(part.functionCall.args),\n };\n const existing = [...(msg.tool_calls ?? [])];\n const idx = existing.findIndex((tc) => tc.id === toolCall.id);\n if (idx >= 0) {\n existing[idx] = toolCall;\n } else {\n existing.push(toolCall);\n }\n const updated: InProgressMessage = {\n ...msg,\n content: [...this.getContentArray(msg)],\n tool_calls: existing,\n };\n this.messagesMap.set(updated.id, updated);\n return;\n }\n\n // Function response → tool message\n if (part.functionResponse) {\n this.finalizeCurrentMessage();\n const toolMsg: AdkMessage = {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: part.functionResponse.id ?? \"\",\n name: part.functionResponse.name,\n content: JSON.stringify(part.functionResponse.response),\n status: \"success\",\n };\n this.messagesMap.set(toolMsg.id, toolMsg);\n return;\n }\n\n // Executable code\n if (part.executableCode) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(msg, {\n type: \"code\",\n code: part.executableCode.code,\n language: part.executableCode.language ?? \"python\",\n });\n return;\n }\n\n // Code execution result\n if (part.codeExecutionResult) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(msg, {\n type: \"code_result\",\n output: part.codeExecutionResult.output,\n outcome: part.codeExecutionResult.outcome ?? \"OUTCOME_OK\",\n });\n return;\n }\n\n if (part.inlineData) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(\n msg,\n inlineDataToPart(part.inlineData.mimeType, part.inlineData.data),\n );\n return;\n }\n\n if (part.fileData) {\n const msg = this.getOrCreateAiMessage(event);\n this.appendContent(\n msg,\n fileDataToPart(part.fileData.fileUri, part.fileData.mimeType),\n );\n }\n }\n\n private trackMessageMetadata(event: AdkEvent): void {\n if (\n !this.currentMessageId ||\n (!event.groundingMetadata &&\n !event.citationMetadata &&\n !event.usageMetadata)\n )\n return;\n\n const existing = this.messageMetadataMap.get(this.currentMessageId) ?? {};\n const updated: AdkMessageMetadata = { ...existing };\n if (event.groundingMetadata)\n updated.groundingMetadata = event.groundingMetadata;\n if (event.citationMetadata)\n updated.citationMetadata = event.citationMetadata;\n if (event.usageMetadata) updated.usageMetadata = event.usageMetadata;\n this.messageMetadataMap.set(this.currentMessageId, updated);\n }\n\n private getContentArray(msg: AdkMessage): AdkMessageContentPart[] {\n return Array.isArray(msg.content)\n ? (msg.content as AdkMessageContentPart[])\n : [];\n }\n\n private getOrCreateAiMessage(event: AdkEvent): InProgressMessage {\n if (this.currentMessageId) {\n const existing = this.messagesMap.get(this.currentMessageId);\n if (existing && existing.type === \"ai\") {\n return existing;\n }\n }\n\n const id = uuidv4();\n const msg: InProgressMessage = {\n id,\n type: \"ai\",\n content: [] as AdkMessageContentPart[],\n ...(event.author != null && { author: event.author }),\n ...(event.branch != null && { branch: event.branch }),\n };\n this.messagesMap.set(id, msg);\n this.currentMessageId = id;\n this.partialTextBuffer = \"\";\n this.partialReasoningBuffer = \"\";\n return msg;\n }\n\n private appendContent(\n msg: InProgressMessage,\n part: AdkMessageContentPart,\n ): void {\n const content = [...this.getContentArray(msg), part];\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private replaceLastTextContent(msg: InProgressMessage, text: string): void {\n const content = [...this.getContentArray(msg)];\n const lastTextIdx = content.findLastIndex((p) => p.type === \"text\");\n if (lastTextIdx >= 0) {\n content[lastTextIdx] = { type: \"text\", text };\n } else {\n content.push({ type: \"text\", text });\n }\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private replaceLastReasoningContent(\n msg: InProgressMessage,\n text: string,\n ): void {\n const content = [...this.getContentArray(msg)];\n const lastIdx = content.findLastIndex((p) => p.type === \"reasoning\");\n if (lastIdx >= 0) {\n content[lastIdx] = { type: \"reasoning\", text };\n } else {\n content.push({ type: \"reasoning\", text });\n }\n const updated: InProgressMessage = { ...msg, content };\n this.messagesMap.set(updated.id, updated);\n }\n\n private finalizeCurrentMessage(): void {\n this.partialTextBuffer = \"\";\n this.partialReasoningBuffer = \"\";\n this.currentMessageId = null;\n }\n\n getMessages(): AdkMessage[] {\n return [...this.messagesMap.values()];\n }\n\n getStateDelta(): Record<string, unknown> {\n return { ...this.accumulatedStateDelta };\n }\n\n getArtifactDelta(): Record<string, number> {\n return { ...this.accumulatedArtifactDelta };\n }\n\n getAgentInfo(): { name?: string | undefined; branch?: string | undefined } {\n return { ...this.lastAgentInfo };\n }\n\n getLastTransferToAgent(): string | undefined {\n return this.lastTransferToAgent;\n }\n\n getLongRunningToolIds(): string[] {\n return [...this.pendingLongRunningToolIds];\n }\n\n getToolConfirmations(): AdkToolConfirmation[] {\n return [...this.toolConfirmations];\n }\n\n getAuthRequests(): AdkAuthRequest[] {\n return [...this.authRequests];\n }\n\n isEscalated(): boolean {\n return this.escalated;\n }\n\n getMessageMetadata(): Map<string, AdkMessageMetadata> {\n return new Map(this.messageMetadataMap);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AdkRuntimeExtras } from "./types.js";
2
+
3
+ //#region src/adkExtras.d.ts
4
+ declare const adkExtras: import("@assistant-ui/core/internal").RuntimeExtras<AdkRuntimeExtras>;
5
+ //#endregion
6
+ export { adkExtras };
7
+ //# sourceMappingURL=adkExtras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adkExtras.d.ts","names":[],"sources":["../src/adkExtras.ts"],"mappings":";;;cAGa,SAAA,wCAAS,aAAA,CAAA,gBAAA"}
@@ -0,0 +1,7 @@
1
+ import { createRuntimeExtras } from "@assistant-ui/core/internal";
2
+ //#region src/adkExtras.ts
3
+ const adkExtras = createRuntimeExtras("useAdkRuntime");
4
+ //#endregion
5
+ export { adkExtras };
6
+
7
+ //# sourceMappingURL=adkExtras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adkExtras.js","names":[],"sources":["../src/adkExtras.ts"],"sourcesContent":["import { createRuntimeExtras } from \"@assistant-ui/core/internal\";\nimport type { AdkRuntimeExtras } from \"./types\";\n\nexport const adkExtras = createRuntimeExtras<AdkRuntimeExtras>(\"useAdkRuntime\");\n"],"mappings":";;AAGA,MAAa,YAAY,oBAAsC,eAAe"}
package/dist/hooks.d.ts CHANGED
@@ -2,22 +2,6 @@ import { AdkAuthCredential, AdkAuthRequest, AdkMessage, AdkMessageMetadata, AdkS
2
2
  import { ReadonlyJSONValue } from "assistant-stream/utils";
3
3
 
4
4
  //#region src/hooks.d.ts
5
- declare const symbolAdkRuntimeExtras: unique symbol;
6
- type AdkRuntimeExtras = {
7
- [symbolAdkRuntimeExtras]: true;
8
- send: (messages: AdkMessage[], config: AdkSendMessageConfig) => Promise<void>;
9
- agentInfo: {
10
- name?: string | undefined;
11
- branch?: string | undefined;
12
- };
13
- stateDelta: Record<string, unknown>;
14
- artifactDelta: Record<string, number>;
15
- longRunningToolIds: string[];
16
- toolConfirmations: AdkToolConfirmation[];
17
- authRequests: AdkAuthRequest[];
18
- escalated: boolean;
19
- messageMetadata: Map<string, AdkMessageMetadata>;
20
- };
21
5
  /** Returns the name and branch of the currently active ADK agent. */
22
6
  declare const useAdkAgentInfo: () => {
23
7
  name?: string | undefined;
@@ -52,5 +36,5 @@ declare const useAdkUserState: () => Record<string, unknown>;
52
36
  /** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */
53
37
  declare const useAdkTempState: () => Record<string, unknown>;
54
38
  //#endregion
55
- export { AdkRuntimeExtras, symbolAdkRuntimeExtras, useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState };
39
+ export { useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState };
56
40
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","names":[],"sources":["../src/hooks.ts"],"mappings":";;;;cAYa,sBAAA;AAAA,KAED,gBAAA;EAAA,CACT,sBAAA;EACD,IAAA,GAAO,QAAA,EAAU,UAAA,IAAc,MAAA,EAAQ,oBAAA,KAAyB,OAAA;EAChE,SAAA;IAAa,IAAA;IAA2B,MAAA;EAAA;EACxC,UAAA,EAAY,MAAA;EACZ,aAAA,EAAe,MAAA;EACf,kBAAA;EACA,iBAAA,EAAmB,mBAAA;EACnB,YAAA,EAAc,cAAA;EACd,SAAA;EACA,eAAA,EAAiB,GAAA,SAAY,kBAAA;AAAA;;cAiBlB,eAAA;EAMZ,IAAA;EAAA,MAAA;AAAA;;cAGY,kBAAA,QAAkB,MAAA;;cASlB,UAAA,SAEH,QAAA,EAAU,UAAA,IAAc,MAAA,EAAQ,oBAAA,KAAoB,OAAA;;cAQjD,wBAAA;;cASA,uBAAA,QAAuB,mBAAA;;cASvB,kBAAA,QAAkB,cAAA;;cASlB,eAAA,QAAe,MAAA;;cASf,gBAAA;;cASA,qBAAA,QAAqB,GAAA,SAAA,kBAAA;;cAWrB,iBAAA,SAGT,UAAA,UACA,SAAA,WACA,OAAA,GAAU,iBAAA,KAAiB,OAAA;;cAwBlB,gBAAA,SAEH,UAAA,UAAoB,UAAA,EAAY,iBAAA,KAAiB,OAAA;;cAoB9C,iBAAA,SAEH,UAAA,UAAoB,MAAA,EAAQ,iBAAA,KAAiB,OAAA;;cAuC1C,cAAA,QAAc,MAAA;;cASd,eAAA,QAAe,MAAA;AAzL5B;AAAA,cAkMa,eAAA,QAAe,MAAA"}
1
+ {"version":3,"file":"hooks.d.ts","names":[],"sources":["../src/hooks.ts"],"mappings":";;;;;cAqBa,eAAA;EACiC,IAAA;EAAA,MAAA;AAAA;;cAGjC,kBAAA,QAAkB,MAAA;AAA/B;AAAA,cAIa,UAAA,SAEH,QAAA,EAAU,UAAA,IAAc,MAAA,EAAQ,oBAAA,KAAoB,OAAA;;cAKjD,wBAAA;AAXkB;AAAA,cAelB,uBAAA,QAAuB,mBAAA;;cAIvB,kBAAA,QAAkB,cAAA;;cAIlB,eAAA,QAAe,MAAA;;cAIf,gBAAA;;cAGA,qBAAA,QAAqB,GAAA,SAAA,kBAAA;;cAMrB,iBAAA,SAGT,UAAA,UACA,SAAA,WACA,OAAA,GAAU,iBAAA,KAAiB,OAAA;;cAqBlB,gBAAA,SAEH,UAAA,UAAoB,UAAA,EAAY,iBAAA,KAAiB,OAAA;;cAiB9C,iBAAA,SAEH,UAAA,UAAoB,MAAA,EAAQ,iBAAA,KAAiB,OAAA;AAxEvD;AAAA,cA4Ga,cAAA,QAAc,MAAA;;cAOd,eAAA,QAAe,MAAA;AAlH6C;AAAA,cAyH5D,eAAA,QAAe,MAAA"}
package/dist/hooks.js CHANGED
@@ -1,134 +1,72 @@
1
+ import { adkExtras } from "./adkExtras.js";
1
2
  import { v4 } from "uuid";
2
- import { useAui, useAuiState } from "@assistant-ui/store";
3
+ import { useAui } from "@assistant-ui/store";
3
4
  //#region src/hooks.ts
4
- const symbolAdkRuntimeExtras = Symbol("adk-runtime-extras");
5
- const asAdkRuntimeExtras = (extras) => {
6
- if (typeof extras !== "object" || extras == null || !(symbolAdkRuntimeExtras in extras)) throw new Error("This method can only be called when you are using useAdkRuntime");
7
- return extras;
8
- };
5
+ const EMPTY_STATE_DELTA = {};
6
+ const EMPTY_ARTIFACT_DELTA = {};
7
+ const EMPTY_LONG_RUNNING_TOOL_IDS = [];
8
+ const EMPTY_TOOL_CONFIRMATIONS = [];
9
+ const EMPTY_AUTH_REQUESTS = [];
10
+ const EMPTY_MESSAGE_METADATA = /* @__PURE__ */ new Map();
9
11
  /** Returns the name and branch of the currently active ADK agent. */
10
- const useAdkAgentInfo = () => {
11
- return useAuiState((s) => {
12
- const extras = s.thread.extras;
13
- if (!extras) return void 0;
14
- return asAdkRuntimeExtras(extras).agentInfo;
15
- });
16
- };
12
+ const useAdkAgentInfo = () => adkExtras.use((e) => e.agentInfo, void 0);
17
13
  /** Returns the accumulated session state delta from ADK events. */
18
- const useAdkSessionState = () => {
19
- return useAuiState((s) => {
20
- const extras = s.thread.extras;
21
- if (!extras) return {};
22
- return asAdkRuntimeExtras(extras).stateDelta;
23
- });
24
- };
14
+ const useAdkSessionState = () => adkExtras.use((e) => e.stateDelta, EMPTY_STATE_DELTA);
25
15
  /** Returns a function to send raw ADK messages. */
26
16
  const useAdkSend = () => {
27
17
  const aui = useAui();
28
- return (messages, config) => {
29
- const extras = aui.thread().getState().extras;
30
- const { send } = asAdkRuntimeExtras(extras);
31
- return send(messages, config);
32
- };
18
+ return (messages, config) => adkExtras.get(aui).send(messages, config);
33
19
  };
34
20
  /** Returns the IDs of long-running tools awaiting external input. */
35
- const useAdkLongRunningToolIds = () => {
36
- return useAuiState((s) => {
37
- const extras = s.thread.extras;
38
- if (!extras) return [];
39
- return asAdkRuntimeExtras(extras).longRunningToolIds;
40
- });
41
- };
21
+ const useAdkLongRunningToolIds = () => adkExtras.use((e) => e.longRunningToolIds, EMPTY_LONG_RUNNING_TOOL_IDS);
42
22
  /** Returns pending tool confirmation requests (from SecurityPlugin etc). */
43
- const useAdkToolConfirmations = () => {
44
- return useAuiState((s) => {
45
- const extras = s.thread.extras;
46
- if (!extras) return [];
47
- return asAdkRuntimeExtras(extras).toolConfirmations;
48
- });
49
- };
23
+ const useAdkToolConfirmations = () => adkExtras.use((e) => e.toolConfirmations, EMPTY_TOOL_CONFIRMATIONS);
50
24
  /** Returns pending auth credential requests from tools. */
51
- const useAdkAuthRequests = () => {
52
- return useAuiState((s) => {
53
- const extras = s.thread.extras;
54
- if (!extras) return [];
55
- return asAdkRuntimeExtras(extras).authRequests;
56
- });
57
- };
25
+ const useAdkAuthRequests = () => adkExtras.use((e) => e.authRequests, EMPTY_AUTH_REQUESTS);
58
26
  /** Returns the accumulated artifact delta (filename → version). */
59
- const useAdkArtifacts = () => {
60
- return useAuiState((s) => {
61
- const extras = s.thread.extras;
62
- if (!extras) return {};
63
- return asAdkRuntimeExtras(extras).artifactDelta;
64
- });
65
- };
27
+ const useAdkArtifacts = () => adkExtras.use((e) => e.artifactDelta, EMPTY_ARTIFACT_DELTA);
66
28
  /** Returns whether any agent has escalated (requested human handoff). */
67
- const useAdkEscalation = () => {
68
- return useAuiState((s) => {
69
- const extras = s.thread.extras;
70
- if (!extras) return false;
71
- return asAdkRuntimeExtras(extras).escalated;
72
- });
73
- };
29
+ const useAdkEscalation = () => adkExtras.use((e) => e.escalated, false);
74
30
  /** Returns per-message metadata (grounding, citation, usage). Keyed by message ID. */
75
- const useAdkMessageMetadata = () => {
76
- return useAuiState((s) => {
77
- const extras = s.thread.extras;
78
- if (!extras) return /* @__PURE__ */ new Map();
79
- return asAdkRuntimeExtras(extras).messageMetadata;
80
- });
81
- };
31
+ const useAdkMessageMetadata = () => adkExtras.use((e) => e.messageMetadata, EMPTY_MESSAGE_METADATA);
82
32
  /** Returns a function to confirm or deny a pending tool confirmation. */
83
33
  const useAdkConfirmTool = () => {
84
34
  const aui = useAui();
85
- return (toolCallId, confirmed, payload) => {
86
- const extras = aui.thread().getState().extras;
87
- const { send } = asAdkRuntimeExtras(extras);
88
- return send([{
89
- id: v4(),
90
- type: "tool",
91
- tool_call_id: toolCallId,
92
- name: "adk_request_confirmation",
93
- content: JSON.stringify({
94
- confirmed,
95
- ...payload != null && { payload }
96
- }),
97
- status: "success"
98
- }], {});
99
- };
35
+ return (toolCallId, confirmed, payload) => adkExtras.get(aui).send([{
36
+ id: v4(),
37
+ type: "tool",
38
+ tool_call_id: toolCallId,
39
+ name: "adk_request_confirmation",
40
+ content: JSON.stringify({
41
+ confirmed,
42
+ ...payload != null && { payload }
43
+ }),
44
+ status: "success"
45
+ }], {});
100
46
  };
101
47
  /** Returns a function to submit auth credentials for a pending auth request. */
102
48
  const useAdkSubmitAuth = () => {
103
49
  const aui = useAui();
104
- return (toolCallId, credential) => {
105
- const extras = aui.thread().getState().extras;
106
- const { send } = asAdkRuntimeExtras(extras);
107
- return send([{
108
- id: v4(),
109
- type: "tool",
110
- tool_call_id: toolCallId,
111
- name: "adk_request_credential",
112
- content: JSON.stringify(credential),
113
- status: "success"
114
- }], {});
115
- };
50
+ return (toolCallId, credential) => adkExtras.get(aui).send([{
51
+ id: v4(),
52
+ type: "tool",
53
+ tool_call_id: toolCallId,
54
+ name: "adk_request_credential",
55
+ content: JSON.stringify(credential),
56
+ status: "success"
57
+ }], {});
116
58
  };
117
59
  /** Returns a function to submit the user's answer for a pending `adk_request_input` HITL interrupt. */
118
60
  const useAdkSubmitInput = () => {
119
61
  const aui = useAui();
120
- return (toolCallId, result) => {
121
- const extras = aui.thread().getState().extras;
122
- const { send } = asAdkRuntimeExtras(extras);
123
- return send([{
124
- id: v4(),
125
- type: "tool",
126
- tool_call_id: toolCallId,
127
- name: "adk_request_input",
128
- content: JSON.stringify({ result }),
129
- status: "success"
130
- }], {});
131
- };
62
+ return (toolCallId, result) => adkExtras.get(aui).send([{
63
+ id: v4(),
64
+ type: "tool",
65
+ tool_call_id: toolCallId,
66
+ name: "adk_request_input",
67
+ content: JSON.stringify({ result }),
68
+ status: "success"
69
+ }], {});
132
70
  };
133
71
  const APP_PREFIX = "app:";
134
72
  const USER_PREFIX = "user:";
@@ -139,30 +77,12 @@ const filterByPrefix = (state, prefix) => {
139
77
  return result;
140
78
  };
141
79
  /** Returns app-level state (keys prefixed with `app:`, prefix stripped). */
142
- const useAdkAppState = () => {
143
- return useAuiState((s) => {
144
- const extras = s.thread.extras;
145
- if (!extras) return {};
146
- return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, APP_PREFIX);
147
- });
148
- };
80
+ const useAdkAppState = () => adkExtras.use((e) => filterByPrefix(e.stateDelta, APP_PREFIX), EMPTY_STATE_DELTA);
149
81
  /** Returns user-level state (keys prefixed with `user:`, prefix stripped). */
150
- const useAdkUserState = () => {
151
- return useAuiState((s) => {
152
- const extras = s.thread.extras;
153
- if (!extras) return {};
154
- return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, USER_PREFIX);
155
- });
156
- };
82
+ const useAdkUserState = () => adkExtras.use((e) => filterByPrefix(e.stateDelta, USER_PREFIX), EMPTY_STATE_DELTA);
157
83
  /** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */
158
- const useAdkTempState = () => {
159
- return useAuiState((s) => {
160
- const extras = s.thread.extras;
161
- if (!extras) return {};
162
- return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, TEMP_PREFIX);
163
- });
164
- };
84
+ const useAdkTempState = () => adkExtras.use((e) => filterByPrefix(e.stateDelta, TEMP_PREFIX), EMPTY_STATE_DELTA);
165
85
  //#endregion
166
- export { symbolAdkRuntimeExtras, useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState };
86
+ export { useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState };
167
87
 
168
88
  //# sourceMappingURL=hooks.js.map
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","names":["uuidv4"],"sources":["../src/hooks.ts"],"sourcesContent":["import { useAui, useAuiState } from \"@assistant-ui/store\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type {\n AdkMessage,\n AdkSendMessageConfig,\n AdkToolConfirmation,\n AdkAuthCredential,\n AdkAuthRequest,\n AdkMessageMetadata,\n} from \"./types\";\n\nexport const symbolAdkRuntimeExtras = Symbol(\"adk-runtime-extras\");\n\nexport type AdkRuntimeExtras = {\n [symbolAdkRuntimeExtras]: true;\n send: (messages: AdkMessage[], config: AdkSendMessageConfig) => Promise<void>;\n agentInfo: { name?: string | undefined; branch?: string | undefined };\n stateDelta: Record<string, unknown>;\n artifactDelta: Record<string, number>;\n longRunningToolIds: string[];\n toolConfirmations: AdkToolConfirmation[];\n authRequests: AdkAuthRequest[];\n escalated: boolean;\n messageMetadata: Map<string, AdkMessageMetadata>;\n};\n\nconst asAdkRuntimeExtras = (extras: unknown): AdkRuntimeExtras => {\n if (\n typeof extras !== \"object\" ||\n extras == null ||\n !(symbolAdkRuntimeExtras in extras)\n )\n throw new Error(\n \"This method can only be called when you are using useAdkRuntime\",\n );\n\n return extras as AdkRuntimeExtras;\n};\n\n/** Returns the name and branch of the currently active ADK agent. */\nexport const useAdkAgentInfo = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return undefined;\n return asAdkRuntimeExtras(extras).agentInfo;\n });\n};\n\n/** Returns the accumulated session state delta from ADK events. */\nexport const useAdkSessionState = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return {};\n return asAdkRuntimeExtras(extras).stateDelta;\n });\n};\n\n/** Returns a function to send raw ADK messages. */\nexport const useAdkSend = () => {\n const aui = useAui();\n return (messages: AdkMessage[], config: AdkSendMessageConfig) => {\n const extras = aui.thread().getState().extras;\n const { send } = asAdkRuntimeExtras(extras);\n return send(messages, config);\n };\n};\n\n/** Returns the IDs of long-running tools awaiting external input. */\nexport const useAdkLongRunningToolIds = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return [];\n return asAdkRuntimeExtras(extras).longRunningToolIds;\n });\n};\n\n/** Returns pending tool confirmation requests (from SecurityPlugin etc). */\nexport const useAdkToolConfirmations = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return [];\n return asAdkRuntimeExtras(extras).toolConfirmations;\n });\n};\n\n/** Returns pending auth credential requests from tools. */\nexport const useAdkAuthRequests = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return [];\n return asAdkRuntimeExtras(extras).authRequests;\n });\n};\n\n/** Returns the accumulated artifact delta (filename → version). */\nexport const useAdkArtifacts = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return {};\n return asAdkRuntimeExtras(extras).artifactDelta;\n });\n};\n\n/** Returns whether any agent has escalated (requested human handoff). */\nexport const useAdkEscalation = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return false;\n return asAdkRuntimeExtras(extras).escalated;\n });\n};\n\n/** Returns per-message metadata (grounding, citation, usage). Keyed by message ID. */\nexport const useAdkMessageMetadata = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return new Map<string, AdkMessageMetadata>();\n return asAdkRuntimeExtras(extras).messageMetadata;\n });\n};\n\n// ── Convenience helpers for interactive flows ──\n\n/** Returns a function to confirm or deny a pending tool confirmation. */\nexport const useAdkConfirmTool = () => {\n const aui = useAui();\n return (\n toolCallId: string,\n confirmed: boolean,\n payload?: ReadonlyJSONValue,\n ) => {\n const extras = aui.thread().getState().extras;\n const { send } = asAdkRuntimeExtras(extras);\n return send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_confirmation\",\n content: JSON.stringify({\n confirmed,\n ...(payload != null && { payload }),\n }),\n status: \"success\",\n },\n ],\n {},\n );\n };\n};\n\n/** Returns a function to submit auth credentials for a pending auth request. */\nexport const useAdkSubmitAuth = () => {\n const aui = useAui();\n return (toolCallId: string, credential: AdkAuthCredential) => {\n const extras = aui.thread().getState().extras;\n const { send } = asAdkRuntimeExtras(extras);\n return send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_credential\",\n content: JSON.stringify(credential),\n status: \"success\",\n },\n ],\n {},\n );\n };\n};\n\n/** Returns a function to submit the user's answer for a pending `adk_request_input` HITL interrupt. */\nexport const useAdkSubmitInput = () => {\n const aui = useAui();\n return (toolCallId: string, result: ReadonlyJSONValue) => {\n const extras = aui.thread().getState().extras;\n const { send } = asAdkRuntimeExtras(extras);\n return send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_input\",\n content: JSON.stringify({ result }),\n status: \"success\",\n },\n ],\n {},\n );\n };\n};\n\n// ── State prefix helpers ──\n\nconst APP_PREFIX = \"app:\";\nconst USER_PREFIX = \"user:\";\nconst TEMP_PREFIX = \"temp:\";\n\nconst filterByPrefix = (\n state: Record<string, unknown>,\n prefix: string,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(state)) {\n if (key.startsWith(prefix)) {\n result[key.slice(prefix.length)] = state[key];\n }\n }\n return result;\n};\n\n/** Returns app-level state (keys prefixed with `app:`, prefix stripped). */\nexport const useAdkAppState = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return {};\n return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, APP_PREFIX);\n });\n};\n\n/** Returns user-level state (keys prefixed with `user:`, prefix stripped). */\nexport const useAdkUserState = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return {};\n return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, USER_PREFIX);\n });\n};\n\n/** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */\nexport const useAdkTempState = () => {\n return useAuiState((s) => {\n const extras = s.thread.extras;\n if (!extras) return {};\n return filterByPrefix(asAdkRuntimeExtras(extras).stateDelta, TEMP_PREFIX);\n });\n};\n"],"mappings":";;;AAYA,MAAa,yBAAyB,OAAO,oBAAoB;AAejE,MAAM,sBAAsB,WAAsC;CAChE,IACE,OAAO,WAAW,YAClB,UAAU,QACV,EAAE,0BAA0B,SAE5B,MAAM,IAAI,MACR,iEACF;CAEF,OAAO;AACT;;AAGA,MAAa,wBAAwB;CACnC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,KAAA;EACpB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,2BAA2B;CACtC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,mBAAmB;CAC9B,MAAM,MAAM,OAAO;CACnB,QAAQ,UAAwB,WAAiC;EAC/D,MAAM,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;EACvC,MAAM,EAAE,SAAS,mBAAmB,MAAM;EAC1C,OAAO,KAAK,UAAU,MAAM;CAC9B;AACF;;AAGA,MAAa,iCAAiC;CAC5C,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,gCAAgC;CAC3C,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,2BAA2B;CACtC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,wBAAwB;CACnC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,yBAAyB;CACpC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO;EACpB,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAGA,MAAa,8BAA8B;CACzC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,uBAAO,IAAI,IAAgC;EACxD,OAAO,mBAAmB,MAAM,CAAC,CAAC;CACpC,CAAC;AACH;;AAKA,MAAa,0BAA0B;CACrC,MAAM,MAAM,OAAO;CACnB,QACE,YACA,WACA,YACG;EACH,MAAM,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;EACvC,MAAM,EAAE,SAAS,mBAAmB,MAAM;EAC1C,OAAO,KACL,CACE;GACE,IAAIA,GAAO;GACX,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS,KAAK,UAAU;IACtB;IACA,GAAI,WAAW,QAAQ,EAAE,QAAQ;GACnC,CAAC;GACD,QAAQ;EACV,CACF,GACA,CAAC,CACH;CACF;AACF;;AAGA,MAAa,yBAAyB;CACpC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,eAAkC;EAC5D,MAAM,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;EACvC,MAAM,EAAE,SAAS,mBAAmB,MAAM;EAC1C,OAAO,KACL,CACE;GACE,IAAIA,GAAO;GACX,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS,KAAK,UAAU,UAAU;GAClC,QAAQ;EACV,CACF,GACA,CAAC,CACH;CACF;AACF;;AAGA,MAAa,0BAA0B;CACrC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,WAA8B;EACxD,MAAM,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;EACvC,MAAM,EAAE,SAAS,mBAAmB,MAAM;EAC1C,OAAO,KACL,CACE;GACE,IAAIA,GAAO;GACX,MAAM;GACN,cAAc;GACd,MAAM;GACN,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC;GAClC,QAAQ;EACV,CACF,GACA,CAAC,CACH;CACF;AACF;AAIA,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,cAAc;AAEpB,MAAM,kBACJ,OACA,WAC4B;CAC5B,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GACjC,IAAI,IAAI,WAAW,MAAM,GACvB,OAAO,IAAI,MAAM,OAAO,MAAM,KAAK,MAAM;CAG7C,OAAO;AACT;;AAGA,MAAa,uBAAuB;CAClC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,eAAe,mBAAmB,MAAM,CAAC,CAAC,YAAY,UAAU;CACzE,CAAC;AACH;;AAGA,MAAa,wBAAwB;CACnC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,eAAe,mBAAmB,MAAM,CAAC,CAAC,YAAY,WAAW;CAC1E,CAAC;AACH;;AAGA,MAAa,wBAAwB;CACnC,OAAO,aAAa,MAAM;EACxB,MAAM,SAAS,EAAE,OAAO;EACxB,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,OAAO,eAAe,mBAAmB,MAAM,CAAC,CAAC,YAAY,WAAW;CAC1E,CAAC;AACH"}
1
+ {"version":3,"file":"hooks.js","names":["uuidv4"],"sources":["../src/hooks.ts"],"sourcesContent":["import { useAui } from \"@assistant-ui/store\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { adkExtras } from \"./adkExtras\";\nimport type {\n AdkMessage,\n AdkSendMessageConfig,\n AdkToolConfirmation,\n AdkAuthCredential,\n AdkAuthRequest,\n AdkMessageMetadata,\n} from \"./types\";\n\nconst EMPTY_STATE_DELTA: Record<string, unknown> = {};\nconst EMPTY_ARTIFACT_DELTA: Record<string, number> = {};\nconst EMPTY_LONG_RUNNING_TOOL_IDS: string[] = [];\nconst EMPTY_TOOL_CONFIRMATIONS: AdkToolConfirmation[] = [];\nconst EMPTY_AUTH_REQUESTS: AdkAuthRequest[] = [];\nconst EMPTY_MESSAGE_METADATA = new Map<string, AdkMessageMetadata>();\n\n/** Returns the name and branch of the currently active ADK agent. */\nexport const useAdkAgentInfo = () =>\n adkExtras.use((e) => e.agentInfo, undefined);\n\n/** Returns the accumulated session state delta from ADK events. */\nexport const useAdkSessionState = () =>\n adkExtras.use((e) => e.stateDelta, EMPTY_STATE_DELTA);\n\n/** Returns a function to send raw ADK messages. */\nexport const useAdkSend = () => {\n const aui = useAui();\n return (messages: AdkMessage[], config: AdkSendMessageConfig) =>\n adkExtras.get(aui).send(messages, config);\n};\n\n/** Returns the IDs of long-running tools awaiting external input. */\nexport const useAdkLongRunningToolIds = () =>\n adkExtras.use((e) => e.longRunningToolIds, EMPTY_LONG_RUNNING_TOOL_IDS);\n\n/** Returns pending tool confirmation requests (from SecurityPlugin etc). */\nexport const useAdkToolConfirmations = () =>\n adkExtras.use((e) => e.toolConfirmations, EMPTY_TOOL_CONFIRMATIONS);\n\n/** Returns pending auth credential requests from tools. */\nexport const useAdkAuthRequests = () =>\n adkExtras.use((e) => e.authRequests, EMPTY_AUTH_REQUESTS);\n\n/** Returns the accumulated artifact delta (filename → version). */\nexport const useAdkArtifacts = () =>\n adkExtras.use((e) => e.artifactDelta, EMPTY_ARTIFACT_DELTA);\n\n/** Returns whether any agent has escalated (requested human handoff). */\nexport const useAdkEscalation = () => adkExtras.use((e) => e.escalated, false);\n\n/** Returns per-message metadata (grounding, citation, usage). Keyed by message ID. */\nexport const useAdkMessageMetadata = () =>\n adkExtras.use((e) => e.messageMetadata, EMPTY_MESSAGE_METADATA);\n\n// ── Convenience helpers for interactive flows ──\n\n/** Returns a function to confirm or deny a pending tool confirmation. */\nexport const useAdkConfirmTool = () => {\n const aui = useAui();\n return (\n toolCallId: string,\n confirmed: boolean,\n payload?: ReadonlyJSONValue,\n ) =>\n adkExtras.get(aui).send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_confirmation\",\n content: JSON.stringify({\n confirmed,\n ...(payload != null && { payload }),\n }),\n status: \"success\",\n },\n ],\n {},\n );\n};\n\n/** Returns a function to submit auth credentials for a pending auth request. */\nexport const useAdkSubmitAuth = () => {\n const aui = useAui();\n return (toolCallId: string, credential: AdkAuthCredential) =>\n adkExtras.get(aui).send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_credential\",\n content: JSON.stringify(credential),\n status: \"success\",\n },\n ],\n {},\n );\n};\n\n/** Returns a function to submit the user's answer for a pending `adk_request_input` HITL interrupt. */\nexport const useAdkSubmitInput = () => {\n const aui = useAui();\n return (toolCallId: string, result: ReadonlyJSONValue) =>\n adkExtras.get(aui).send(\n [\n {\n id: uuidv4(),\n type: \"tool\",\n tool_call_id: toolCallId,\n name: \"adk_request_input\",\n content: JSON.stringify({ result }),\n status: \"success\",\n },\n ],\n {},\n );\n};\n\n// ── State prefix helpers ──\n\nconst APP_PREFIX = \"app:\";\nconst USER_PREFIX = \"user:\";\nconst TEMP_PREFIX = \"temp:\";\n\nconst filterByPrefix = (\n state: Record<string, unknown>,\n prefix: string,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(state)) {\n if (key.startsWith(prefix)) {\n result[key.slice(prefix.length)] = state[key];\n }\n }\n return result;\n};\n\n/** Returns app-level state (keys prefixed with `app:`, prefix stripped). */\nexport const useAdkAppState = () =>\n adkExtras.use(\n (e) => filterByPrefix(e.stateDelta, APP_PREFIX),\n EMPTY_STATE_DELTA,\n );\n\n/** Returns user-level state (keys prefixed with `user:`, prefix stripped). */\nexport const useAdkUserState = () =>\n adkExtras.use(\n (e) => filterByPrefix(e.stateDelta, USER_PREFIX),\n EMPTY_STATE_DELTA,\n );\n\n/** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */\nexport const useAdkTempState = () =>\n adkExtras.use(\n (e) => filterByPrefix(e.stateDelta, TEMP_PREFIX),\n EMPTY_STATE_DELTA,\n );\n"],"mappings":";;;;AAaA,MAAM,oBAA6C,CAAC;AACpD,MAAM,uBAA+C,CAAC;AACtD,MAAM,8BAAwC,CAAC;AAC/C,MAAM,2BAAkD,CAAC;AACzD,MAAM,sBAAwC,CAAC;AAC/C,MAAM,yCAAyB,IAAI,IAAgC;;AAGnE,MAAa,wBACX,UAAU,KAAK,MAAM,EAAE,WAAW,KAAA,CAAS;;AAG7C,MAAa,2BACX,UAAU,KAAK,MAAM,EAAE,YAAY,iBAAiB;;AAGtD,MAAa,mBAAmB;CAC9B,MAAM,MAAM,OAAO;CACnB,QAAQ,UAAwB,WAC9B,UAAU,IAAI,GAAG,CAAC,CAAC,KAAK,UAAU,MAAM;AAC5C;;AAGA,MAAa,iCACX,UAAU,KAAK,MAAM,EAAE,oBAAoB,2BAA2B;;AAGxE,MAAa,gCACX,UAAU,KAAK,MAAM,EAAE,mBAAmB,wBAAwB;;AAGpE,MAAa,2BACX,UAAU,KAAK,MAAM,EAAE,cAAc,mBAAmB;;AAG1D,MAAa,wBACX,UAAU,KAAK,MAAM,EAAE,eAAe,oBAAoB;;AAG5D,MAAa,yBAAyB,UAAU,KAAK,MAAM,EAAE,WAAW,KAAK;;AAG7E,MAAa,8BACX,UAAU,KAAK,MAAM,EAAE,iBAAiB,sBAAsB;;AAKhE,MAAa,0BAA0B;CACrC,MAAM,MAAM,OAAO;CACnB,QACE,YACA,WACA,YAEA,UAAU,IAAI,GAAG,CAAC,CAAC,KACjB,CACE;EACE,IAAIA,GAAO;EACX,MAAM;EACN,cAAc;EACd,MAAM;EACN,SAAS,KAAK,UAAU;GACtB;GACA,GAAI,WAAW,QAAQ,EAAE,QAAQ;EACnC,CAAC;EACD,QAAQ;CACV,CACF,GACA,CAAC,CACH;AACJ;;AAGA,MAAa,yBAAyB;CACpC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,eAC1B,UAAU,IAAI,GAAG,CAAC,CAAC,KACjB,CACE;EACE,IAAIA,GAAO;EACX,MAAM;EACN,cAAc;EACd,MAAM;EACN,SAAS,KAAK,UAAU,UAAU;EAClC,QAAQ;CACV,CACF,GACA,CAAC,CACH;AACJ;;AAGA,MAAa,0BAA0B;CACrC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,WAC1B,UAAU,IAAI,GAAG,CAAC,CAAC,KACjB,CACE;EACE,IAAIA,GAAO;EACX,MAAM;EACN,cAAc;EACd,MAAM;EACN,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC;EAClC,QAAQ;CACV,CACF,GACA,CAAC,CACH;AACJ;AAIA,MAAM,aAAa;AACnB,MAAM,cAAc;AACpB,MAAM,cAAc;AAEpB,MAAM,kBACJ,OACA,WAC4B;CAC5B,MAAM,SAAkC,CAAC;CACzC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GACjC,IAAI,IAAI,WAAW,MAAM,GACvB,OAAO,IAAI,MAAM,OAAO,MAAM,KAAK,MAAM;CAG7C,OAAO;AACT;;AAGA,MAAa,uBACX,UAAU,KACP,MAAM,eAAe,EAAE,YAAY,UAAU,GAC9C,iBACF;;AAGF,MAAa,wBACX,UAAU,KACP,MAAM,eAAe,EAAE,YAAY,WAAW,GAC/C,iBACF;;AAGF,MAAa,wBACX,UAAU,KACP,MAAM,eAAe,EAAE,YAAY,WAAW,GAC/C,iBACF"}
package/dist/types.d.ts CHANGED
@@ -261,6 +261,21 @@ type AdkStreamCallback = (messages: AdkMessage[], config: AdkSendMessageConfig &
261
261
  type OnAdkErrorCallback = (error: unknown) => void | Promise<void>;
262
262
  type OnAdkCustomEventCallback = (type: string, data: unknown) => void | Promise<void>;
263
263
  type OnAdkAgentTransferCallback = (toAgent: string) => void | Promise<void>;
264
+ /** Private state and actions `useAdkRuntime` exposes through `thread.extras`. */
265
+ type AdkRuntimeExtras = {
266
+ send: (messages: AdkMessage[], config: AdkSendMessageConfig) => Promise<void>;
267
+ agentInfo: {
268
+ name?: string | undefined;
269
+ branch?: string | undefined;
270
+ };
271
+ stateDelta: Record<string, unknown>;
272
+ artifactDelta: Record<string, number>;
273
+ longRunningToolIds: string[];
274
+ toolConfirmations: AdkToolConfirmation[];
275
+ authRequests: AdkAuthRequest[];
276
+ escalated: boolean;
277
+ messageMetadata: Map<string, AdkMessageMetadata>;
278
+ };
264
279
  //#endregion
265
- export { AdkAuthCredential, AdkAuthCredentialType, AdkAuthRequest, AdkEvent, AdkEventActions, AdkEventPart, AdkEventType, AdkMessage, AdkMessageContentPart, AdkMessageMetadata, AdkRunConfig, AdkSendMessageConfig, AdkStreamCallback, AdkStructuredEvent, AdkToolCall, AdkToolConfirmation, OnAdkAgentTransferCallback, OnAdkCustomEventCallback, OnAdkErrorCallback };
280
+ export { AdkAuthCredential, AdkAuthCredentialType, AdkAuthRequest, AdkEvent, AdkEventActions, AdkEventPart, AdkEventType, AdkMessage, AdkMessageContentPart, AdkMessageMetadata, AdkRunConfig, AdkRuntimeExtras, AdkSendMessageConfig, AdkStreamCallback, AdkStructuredEvent, AdkToolCall, AdkToolConfirmation, OnAdkAgentTransferCallback, OnAdkCustomEventCallback, OnAdkErrorCallback };
266
281
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { MessageStatus } from \"@assistant-ui/core\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\n// ── ADK Event wire types (lightweight, no @google/adk dependency) ──\n\nexport type AdkEventPart = {\n text?: string;\n thought?: boolean;\n functionCall?: {\n name: string;\n id?: string;\n args: Record<string, unknown>;\n };\n functionResponse?: {\n name: string;\n id?: string;\n response: unknown;\n };\n executableCode?: {\n code: string;\n language?: string;\n };\n codeExecutionResult?: {\n output: string;\n outcome?: string;\n };\n inlineData?: {\n mimeType: string;\n data: string;\n };\n fileData?: {\n fileUri: string;\n mimeType?: string;\n };\n};\n\nexport type AdkEventActions = {\n stateDelta?: Record<string, unknown> | undefined;\n artifactDelta?: Record<string, number> | undefined;\n transferToAgent?: string | undefined;\n escalate?: boolean | undefined;\n skipSummarization?: boolean | undefined;\n requestedAuthConfigs?: Record<string, unknown> | undefined;\n requestedToolConfirmations?: Record<string, unknown> | undefined;\n};\n\nexport type AdkEvent = {\n id: string;\n invocationId?: string | undefined;\n author?: string | undefined;\n branch?: string | undefined;\n partial?: boolean | undefined;\n turnComplete?: boolean | undefined;\n interrupted?: boolean | undefined;\n finishReason?: string | undefined;\n timestamp?: number | undefined;\n content?:\n | {\n role?: string | undefined;\n parts?: AdkEventPart[] | undefined;\n }\n | undefined;\n actions?: AdkEventActions | undefined;\n longRunningToolIds?: string[] | undefined;\n errorCode?: string | undefined;\n errorMessage?: string | undefined;\n groundingMetadata?: unknown;\n citationMetadata?: unknown;\n usageMetadata?: unknown;\n customMetadata?: Record<string, unknown> | undefined;\n};\n\n// ── ADK Message types (accumulated from events) ──\n\nexport type AdkToolCall = {\n id: string;\n name: string;\n args: ReadonlyJSONObject;\n argsText?: string;\n};\n\nexport type AdkMessage =\n | {\n id: string;\n type: \"human\";\n content: string | AdkMessageContentPart[];\n }\n | {\n id: string;\n type: \"ai\";\n content: string | AdkMessageContentPart[];\n tool_calls?: AdkToolCall[] | undefined;\n author?: string | undefined;\n branch?: string | undefined;\n status?: MessageStatus | undefined;\n }\n | {\n id: string;\n type: \"tool\";\n content: string;\n tool_call_id: string;\n name: string;\n status?: \"success\" | \"error\" | undefined;\n artifact?: unknown;\n };\n\nexport type AdkMessageContentPart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"image\"; mimeType: string; data: string }\n | { type: \"image_url\"; url: string }\n | {\n type: \"file\";\n mimeType: string;\n data: string;\n filename?: string | undefined;\n }\n | {\n type: \"file_url\";\n url: string;\n mimeType?: string | undefined;\n }\n | { type: \"code\"; code: string; language: string }\n | { type: \"code_result\"; output: string; outcome: string }\n | { type: \"activity\"; message: string };\n\n// ── ADK-specific state types ──\n\nexport type AdkToolConfirmation = {\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n hint: string;\n confirmed: boolean;\n payload?: unknown;\n};\n\nexport type AdkAuthCredentialType =\n | \"apiKey\"\n | \"http\"\n | \"oauth2\"\n | \"openIdConnect\"\n | \"serviceAccount\";\n\nexport type AdkAuthCredential = {\n authType: AdkAuthCredentialType;\n resourceRef?: string | undefined;\n apiKey?: string | undefined;\n http?:\n | {\n scheme: string;\n credentials: {\n username?: string;\n password?: string;\n token?: string;\n };\n }\n | undefined;\n oauth2?:\n | {\n clientId?: string;\n clientSecret?: string;\n authUri?: string;\n state?: string;\n redirectUri?: string;\n authResponseUri?: string;\n authCode?: string;\n accessToken?: string;\n refreshToken?: string;\n expiresAt?: number;\n expiresIn?: number;\n }\n | undefined;\n serviceAccount?: unknown;\n};\n\nexport type AdkAuthRequest = {\n toolCallId: string;\n authConfig: unknown;\n};\n\nexport type AdkMessageMetadata = {\n groundingMetadata?: unknown;\n citationMetadata?: unknown;\n usageMetadata?: unknown;\n};\n\n// ── RunConfig ──\n\nexport type AdkRunConfig = {\n streamingMode?: \"none\" | \"sse\" | \"bidi\" | undefined;\n pauseOnToolCalls?: boolean | undefined;\n maxLlmCalls?: number | undefined;\n saveInputBlobsAsArtifacts?: boolean | undefined;\n supportCfc?: boolean | undefined;\n speechConfig?: unknown;\n responseModalities?: string[] | undefined;\n outputAudioTranscription?: unknown;\n inputAudioTranscription?: unknown;\n enableAffectiveDialog?: boolean | undefined;\n proactivity?: unknown;\n realtimeInputConfig?: unknown;\n};\n\n// ── Stream callback types ──\n\nexport type AdkSendMessageConfig = {\n /**\n * ADK RunConfig. Typed as `unknown` for compatibility with\n * assistant-ui core's RunConfig type. Use `AdkRunConfig` when\n * constructing configs manually for type safety.\n */\n runConfig?: unknown;\n checkpointId?: string | undefined;\n stateDelta?: Record<string, unknown> | undefined;\n};\n\n// ── Structured events ──\n\nexport const AdkEventType = {\n THOUGHT: \"thought\",\n CONTENT: \"content\",\n TOOL_CALL: \"tool_call\",\n TOOL_RESULT: \"tool_result\",\n CALL_CODE: \"call_code\",\n CODE_RESULT: \"code_result\",\n ERROR: \"error\",\n ACTIVITY: \"activity\",\n TOOL_CONFIRMATION: \"tool_confirmation\",\n FINISHED: \"finished\",\n} as const;\n\nexport type AdkStructuredEvent =\n | { type: \"thought\"; content: string }\n | { type: \"content\"; content: string }\n | {\n type: \"tool_call\";\n call: { name: string; id?: string; args: Record<string, unknown> };\n }\n | {\n type: \"tool_result\";\n result: { name: string; id?: string; response: unknown };\n }\n | { type: \"call_code\"; code: { code: string; language?: string } }\n | { type: \"code_result\"; result: { output: string; outcome?: string } }\n | { type: \"error\"; errorCode?: string; errorMessage?: string }\n | { type: \"activity\"; message: string }\n | {\n type: \"tool_confirmation\";\n confirmations: Record<string, unknown>;\n }\n | { type: \"finished\" };\n\nexport type AdkStreamCallback = (\n messages: AdkMessage[],\n config: AdkSendMessageConfig & {\n abortSignal: AbortSignal;\n initialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n },\n) => Promise<AsyncGenerator<AdkEvent>> | AsyncGenerator<AdkEvent>;\n\n// ── Event handler callbacks ──\n\nexport type OnAdkErrorCallback = (error: unknown) => void | Promise<void>;\n\nexport type OnAdkCustomEventCallback = (\n type: string,\n data: unknown,\n) => void | Promise<void>;\n\nexport type OnAdkAgentTransferCallback = (\n toAgent: string,\n) => void | Promise<void>;\n"],"mappings":";AA2NA,MAAa,eAAe;CAC1B,SAAS;CACT,SAAS;CACT,WAAW;CACX,aAAa;CACb,WAAW;CACX,aAAa;CACb,OAAO;CACP,UAAU;CACV,mBAAmB;CACnB,UAAU;AACZ"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import type { MessageStatus } from \"@assistant-ui/core\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\n\n// ── ADK Event wire types (lightweight, no @google/adk dependency) ──\n\nexport type AdkEventPart = {\n text?: string;\n thought?: boolean;\n functionCall?: {\n name: string;\n id?: string;\n args: Record<string, unknown>;\n };\n functionResponse?: {\n name: string;\n id?: string;\n response: unknown;\n };\n executableCode?: {\n code: string;\n language?: string;\n };\n codeExecutionResult?: {\n output: string;\n outcome?: string;\n };\n inlineData?: {\n mimeType: string;\n data: string;\n };\n fileData?: {\n fileUri: string;\n mimeType?: string;\n };\n};\n\nexport type AdkEventActions = {\n stateDelta?: Record<string, unknown> | undefined;\n artifactDelta?: Record<string, number> | undefined;\n transferToAgent?: string | undefined;\n escalate?: boolean | undefined;\n skipSummarization?: boolean | undefined;\n requestedAuthConfigs?: Record<string, unknown> | undefined;\n requestedToolConfirmations?: Record<string, unknown> | undefined;\n};\n\nexport type AdkEvent = {\n id: string;\n invocationId?: string | undefined;\n author?: string | undefined;\n branch?: string | undefined;\n partial?: boolean | undefined;\n turnComplete?: boolean | undefined;\n interrupted?: boolean | undefined;\n finishReason?: string | undefined;\n timestamp?: number | undefined;\n content?:\n | {\n role?: string | undefined;\n parts?: AdkEventPart[] | undefined;\n }\n | undefined;\n actions?: AdkEventActions | undefined;\n longRunningToolIds?: string[] | undefined;\n errorCode?: string | undefined;\n errorMessage?: string | undefined;\n groundingMetadata?: unknown;\n citationMetadata?: unknown;\n usageMetadata?: unknown;\n customMetadata?: Record<string, unknown> | undefined;\n};\n\n// ── ADK Message types (accumulated from events) ──\n\nexport type AdkToolCall = {\n id: string;\n name: string;\n args: ReadonlyJSONObject;\n argsText?: string;\n};\n\nexport type AdkMessage =\n | {\n id: string;\n type: \"human\";\n content: string | AdkMessageContentPart[];\n }\n | {\n id: string;\n type: \"ai\";\n content: string | AdkMessageContentPart[];\n tool_calls?: AdkToolCall[] | undefined;\n author?: string | undefined;\n branch?: string | undefined;\n status?: MessageStatus | undefined;\n }\n | {\n id: string;\n type: \"tool\";\n content: string;\n tool_call_id: string;\n name: string;\n status?: \"success\" | \"error\" | undefined;\n artifact?: unknown;\n };\n\nexport type AdkMessageContentPart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"image\"; mimeType: string; data: string }\n | { type: \"image_url\"; url: string }\n | {\n type: \"file\";\n mimeType: string;\n data: string;\n filename?: string | undefined;\n }\n | {\n type: \"file_url\";\n url: string;\n mimeType?: string | undefined;\n }\n | { type: \"code\"; code: string; language: string }\n | { type: \"code_result\"; output: string; outcome: string }\n | { type: \"activity\"; message: string };\n\n// ── ADK-specific state types ──\n\nexport type AdkToolConfirmation = {\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n hint: string;\n confirmed: boolean;\n payload?: unknown;\n};\n\nexport type AdkAuthCredentialType =\n | \"apiKey\"\n | \"http\"\n | \"oauth2\"\n | \"openIdConnect\"\n | \"serviceAccount\";\n\nexport type AdkAuthCredential = {\n authType: AdkAuthCredentialType;\n resourceRef?: string | undefined;\n apiKey?: string | undefined;\n http?:\n | {\n scheme: string;\n credentials: {\n username?: string;\n password?: string;\n token?: string;\n };\n }\n | undefined;\n oauth2?:\n | {\n clientId?: string;\n clientSecret?: string;\n authUri?: string;\n state?: string;\n redirectUri?: string;\n authResponseUri?: string;\n authCode?: string;\n accessToken?: string;\n refreshToken?: string;\n expiresAt?: number;\n expiresIn?: number;\n }\n | undefined;\n serviceAccount?: unknown;\n};\n\nexport type AdkAuthRequest = {\n toolCallId: string;\n authConfig: unknown;\n};\n\nexport type AdkMessageMetadata = {\n groundingMetadata?: unknown;\n citationMetadata?: unknown;\n usageMetadata?: unknown;\n};\n\n// ── RunConfig ──\n\nexport type AdkRunConfig = {\n streamingMode?: \"none\" | \"sse\" | \"bidi\" | undefined;\n pauseOnToolCalls?: boolean | undefined;\n maxLlmCalls?: number | undefined;\n saveInputBlobsAsArtifacts?: boolean | undefined;\n supportCfc?: boolean | undefined;\n speechConfig?: unknown;\n responseModalities?: string[] | undefined;\n outputAudioTranscription?: unknown;\n inputAudioTranscription?: unknown;\n enableAffectiveDialog?: boolean | undefined;\n proactivity?: unknown;\n realtimeInputConfig?: unknown;\n};\n\n// ── Stream callback types ──\n\nexport type AdkSendMessageConfig = {\n /**\n * ADK RunConfig. Typed as `unknown` for compatibility with\n * assistant-ui core's RunConfig type. Use `AdkRunConfig` when\n * constructing configs manually for type safety.\n */\n runConfig?: unknown;\n checkpointId?: string | undefined;\n stateDelta?: Record<string, unknown> | undefined;\n};\n\n// ── Structured events ──\n\nexport const AdkEventType = {\n THOUGHT: \"thought\",\n CONTENT: \"content\",\n TOOL_CALL: \"tool_call\",\n TOOL_RESULT: \"tool_result\",\n CALL_CODE: \"call_code\",\n CODE_RESULT: \"code_result\",\n ERROR: \"error\",\n ACTIVITY: \"activity\",\n TOOL_CONFIRMATION: \"tool_confirmation\",\n FINISHED: \"finished\",\n} as const;\n\nexport type AdkStructuredEvent =\n | { type: \"thought\"; content: string }\n | { type: \"content\"; content: string }\n | {\n type: \"tool_call\";\n call: { name: string; id?: string; args: Record<string, unknown> };\n }\n | {\n type: \"tool_result\";\n result: { name: string; id?: string; response: unknown };\n }\n | { type: \"call_code\"; code: { code: string; language?: string } }\n | { type: \"code_result\"; result: { output: string; outcome?: string } }\n | { type: \"error\"; errorCode?: string; errorMessage?: string }\n | { type: \"activity\"; message: string }\n | {\n type: \"tool_confirmation\";\n confirmations: Record<string, unknown>;\n }\n | { type: \"finished\" };\n\nexport type AdkStreamCallback = (\n messages: AdkMessage[],\n config: AdkSendMessageConfig & {\n abortSignal: AbortSignal;\n initialize: () => Promise<{\n remoteId: string;\n externalId: string | undefined;\n }>;\n },\n) => Promise<AsyncGenerator<AdkEvent>> | AsyncGenerator<AdkEvent>;\n\n// ── Event handler callbacks ──\n\nexport type OnAdkErrorCallback = (error: unknown) => void | Promise<void>;\n\nexport type OnAdkCustomEventCallback = (\n type: string,\n data: unknown,\n) => void | Promise<void>;\n\nexport type OnAdkAgentTransferCallback = (\n toAgent: string,\n) => void | Promise<void>;\n\n/** Private state and actions `useAdkRuntime` exposes through `thread.extras`. */\nexport type AdkRuntimeExtras = {\n send: (messages: AdkMessage[], config: AdkSendMessageConfig) => Promise<void>;\n agentInfo: { name?: string | undefined; branch?: string | undefined };\n stateDelta: Record<string, unknown>;\n artifactDelta: Record<string, number>;\n longRunningToolIds: string[];\n toolConfirmations: AdkToolConfirmation[];\n authRequests: AdkAuthRequest[];\n escalated: boolean;\n messageMetadata: Map<string, AdkMessageMetadata>;\n};\n"],"mappings":";AA2NA,MAAa,eAAe;CAC1B,SAAS;CACT,SAAS;CACT,WAAW;CACX,aAAa;CACb,WAAW;CACX,aAAa;CACb,OAAO;CACP,UAAU;CACV,mBAAmB;CACnB,UAAU;AACZ"}
@@ -5,6 +5,15 @@ import { AssistantCloud } from "assistant-cloud";
5
5
  //#region src/useAdkRuntime.d.ts
6
6
  type UseAdkRuntimeOptions = ExternalStoreSharedOptions & {
7
7
  stream: AdkStreamCallback;
8
+ /**
9
+ * Called whenever the active thread's canonical (remote) ID changes, so the
10
+ * value can be treated as a managed/controlled variable (e.g. synced to a URL
11
+ * query param). Only the settled remote ID is emitted: while a freshly created
12
+ * thread is still optimistic the value is `undefined`, and the real ID is
13
+ * emitted once the thread is initialized; the transient local ID is never
14
+ * surfaced.
15
+ */
16
+ onThreadIdChange?: ((threadId: string | undefined) => void) | undefined;
8
17
  autoCancelPendingToolCalls?: boolean | undefined;
9
18
  unstable_allowCancellation?: boolean | undefined;
10
19
  getCheckpointId?: (threadId: string, parentMessages: AdkMessage[]) => Promise<string | null>;
@@ -39,6 +48,7 @@ declare const useAdkRuntime: ({
39
48
  sessionAdapter,
40
49
  create,
41
50
  delete: deleteFn,
51
+ onThreadIdChange,
42
52
  ...options
43
53
  }: UseAdkRuntimeOptions) => import("@assistant-ui/core").AssistantRuntime;
44
54
  //#endregion