@assistant-ui/react-google-adk 0.0.31 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +1 -1
  2. package/dist/AdkClient.d.ts +24 -26
  3. package/dist/AdkClient.d.ts.map +1 -1
  4. package/dist/AdkClient.js +5 -3
  5. package/dist/AdkClient.js.map +1 -1
  6. package/dist/AdkEventAccumulator.d.ts +39 -41
  7. package/dist/AdkEventAccumulator.d.ts.map +1 -1
  8. package/dist/AdkSessionAdapter.d.ts +38 -39
  9. package/dist/AdkSessionAdapter.d.ts.map +1 -1
  10. package/dist/AdkSessionAdapter.js +4 -3
  11. package/dist/AdkSessionAdapter.js.map +1 -1
  12. package/dist/adkAuthRequest.d.ts +17 -0
  13. package/dist/adkAuthRequest.d.ts.map +1 -0
  14. package/dist/adkAuthRequest.js +45 -0
  15. package/dist/adkAuthRequest.js.map +1 -0
  16. package/dist/adkExtras.d.ts +1 -3
  17. package/dist/adkExtras.d.ts.map +1 -1
  18. package/dist/adkToolApproval.d.ts +12 -14
  19. package/dist/adkToolApproval.d.ts.map +1 -1
  20. package/dist/contentToParts.d.ts +1 -3
  21. package/dist/contentToParts.d.ts.map +1 -1
  22. package/dist/contentToParts.js +1 -0
  23. package/dist/contentToParts.js.map +1 -1
  24. package/dist/convertAdkMessages.d.ts +3 -5
  25. package/dist/convertAdkMessages.d.ts.map +1 -1
  26. package/dist/convertAdkMessages.js +8 -3
  27. package/dist/convertAdkMessages.js.map +1 -1
  28. package/dist/convertToAdkMessages.d.ts +32 -34
  29. package/dist/convertToAdkMessages.d.ts.map +1 -1
  30. package/dist/hooks.d.ts +10 -7
  31. package/dist/hooks.d.ts.map +1 -1
  32. package/dist/hooks.js +11 -9
  33. package/dist/hooks.js.map +1 -1
  34. package/dist/index.d.ts +11 -10
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/normalizeAdkPart.d.ts +0 -2
  37. package/dist/normalizeAdkPart.d.ts.map +1 -1
  38. package/dist/parseAdkEvent.d.ts +1 -3
  39. package/dist/parseAdkEvent.d.ts.map +1 -1
  40. package/dist/raceWithAbortSignal.d.ts +2 -0
  41. package/dist/raceWithAbortSignal.d.ts.map +1 -0
  42. package/dist/raceWithAbortSignal.js +45 -0
  43. package/dist/raceWithAbortSignal.js.map +1 -0
  44. package/dist/sdkIdentity.d.ts +1 -3
  45. package/dist/sdkIdentity.d.ts.map +1 -1
  46. package/dist/sdkIdentity.js +1 -1
  47. package/dist/server/adkEventStream.d.ts +23 -24
  48. package/dist/server/adkEventStream.d.ts.map +1 -1
  49. package/dist/server/adkEventStream.js +23 -15
  50. package/dist/server/adkEventStream.js.map +1 -1
  51. package/dist/server/createAdkApiRoute.d.ts +21 -22
  52. package/dist/server/createAdkApiRoute.d.ts.map +1 -1
  53. package/dist/server/index.d.ts +4 -4
  54. package/dist/server/index.d.ts.map +1 -0
  55. package/dist/server/parseAdkRequest.d.ts +16 -17
  56. package/dist/server/parseAdkRequest.d.ts.map +1 -1
  57. package/dist/structuredEvents.d.ts +1 -3
  58. package/dist/structuredEvents.d.ts.map +1 -1
  59. package/dist/toAdkFunctionResponse.d.ts +0 -2
  60. package/dist/toAdkFunctionResponse.d.ts.map +1 -1
  61. package/dist/trimTrailingSlashes.d.ts +0 -2
  62. package/dist/trimTrailingSlashes.d.ts.map +1 -1
  63. package/dist/types.d.ts +232 -234
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/useAdkMessages.d.ts +25 -27
  66. package/dist/useAdkMessages.d.ts.map +1 -1
  67. package/dist/useAdkMessages.js +6 -5
  68. package/dist/useAdkMessages.js.map +1 -1
  69. package/dist/useAdkRuntime.d.ts +48 -49
  70. package/dist/useAdkRuntime.d.ts.map +1 -1
  71. package/package.json +8 -5
  72. package/src/AdkClient.test.ts +50 -0
  73. package/src/AdkClient.ts +10 -3
  74. package/src/AdkSessionAdapter.test.ts +17 -0
  75. package/src/AdkSessionAdapter.ts +8 -3
  76. package/src/adkAuthRequest.test.ts +101 -0
  77. package/src/adkAuthRequest.ts +50 -0
  78. package/src/contentToParts.ts +2 -0
  79. package/src/convertAdkMessages.test.ts +54 -0
  80. package/src/convertAdkMessages.ts +24 -7
  81. package/src/convertToAdkMessages.test.ts +6 -0
  82. package/src/hooks.render.test.tsx +95 -2
  83. package/src/hooks.ts +12 -13
  84. package/src/raceWithAbortSignal.test.ts +73 -0
  85. package/src/raceWithAbortSignal.ts +48 -0
  86. package/src/server/adkEventStream.test.ts +147 -0
  87. package/src/server/adkEventStream.ts +27 -20
  88. package/src/tests/settleOutsideAct.ts +15 -0
  89. package/src/useAdkMessages.fast-refresh.test.tsx +114 -0
  90. package/src/useAdkMessages.test.ts +35 -0
  91. package/src/useAdkMessages.ts +5 -5
  92. package/src/useAdkRuntime.refetch.test.tsx +7 -6
  93. package/src/useAdkRuntime.replacement.test.tsx +4 -3
  94. package/src/useAdkRuntime.toolOwnership.test.tsx +4 -3
@@ -1,17 +1,16 @@
1
- import { AdkMessage } from "./types.js";
2
- import { ReadonlyJSONValue } from "assistant-stream/utils";
3
- import { RespondToToolApprovalOptions, ToolCallMessagePart } from "@assistant-ui/core";
4
- //#region src/adkToolApproval.d.ts
1
+ import type { RespondToToolApprovalOptions, ToolCallMessagePart } from "@assistant-ui/core";
2
+ import type { ReadonlyJSONValue } from "assistant-stream/utils";
3
+ import type { AdkMessage } from "./types.js";
5
4
  export type AdkToolApproval = NonNullable<ToolCallMessagePart["approval"]>;
6
5
  export declare const ADK_REQUEST_CONFIRMATION = "adk_request_confirmation";
7
6
  export type AdkToolApprovalProjection = {
8
- approvals: ReadonlyMap<string, AdkToolApproval>;
9
- /**
10
- * Identity of the decision state. Core re-converts a cached message object
11
- * only when the converter callback changes, so the callback is rebuilt when
12
- * this key moves rather than on every render.
13
- */
14
- key: string;
7
+ approvals: ReadonlyMap<string, AdkToolApproval>;
8
+ /**
9
+ * Identity of the decision state. Core re-converts a cached message object
10
+ * only when the converter callback changes, so the callback is rebuilt when
11
+ * this key moves rather than on every render.
12
+ */
13
+ key: string;
15
14
  };
16
15
  /**
17
16
  * ADK requests a confirmation by emitting a synthetic `adk_request_confirmation`
@@ -25,7 +24,7 @@ export type AdkToolApprovalProjection = {
25
24
  */
26
25
  export declare const projectAdkToolApprovals: (messages: readonly AdkMessage[]) => AdkToolApprovalProjection;
27
26
  export declare const toAdkConfirmationReply: (toolCallId: string, confirmed: boolean, payload?: ReadonlyJSONValue) => AdkMessage & {
28
- type: "tool";
27
+ type: "tool";
29
28
  };
30
29
  /**
31
30
  * ADK confirmations are a plain confirm/reject pair, so no option or reason
@@ -33,7 +32,6 @@ export declare const toAdkConfirmationReply: (toolCallId: string, confirmed: boo
33
32
  * reply ADK silently ignores, so it throws instead.
34
33
  */
35
34
  export declare const toAdkToolConfirmationReply: ({ approvalId, approved }: RespondToToolApprovalOptions, approvals: ReadonlyMap<string, AdkToolApproval>) => AdkMessage & {
36
- type: "tool";
35
+ type: "tool";
37
36
  };
38
- //#endregion
39
37
  //# sourceMappingURL=adkToolApproval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adkToolApproval.d.ts","names":[],"sources":["../src/adkToolApproval.ts"],"mappings":";;;;YAQY,kBAAkB,YAAY;qBAE7B;YA2FD;EACV,WAAW,oBAAoB;;;;;;EAM/B;;;;;;;;;;;;qBAaW,0BACX,mBAAmB,iBAClB;qBAyDU,yBACX,oBACA,oBACA,UAAU,sBACT;EAAe;;;;;;;qBAiBL,+BACX,YAAA,YAA0B,8BAC1B,WAAW,oBAAoB,qBAC9B;EAAe"}
1
+ {"version":3,"file":"adkToolApproval.d.ts","sourceRoot":"","sources":["../src/adkToolApproval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAgB;AAE1C,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;AAE3E,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AA2FnE,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAChD;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,SAAS,UAAU,EAAE,KAC9B,yBAuDF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,YAAY,MAAM,EAClB,WAAW,OAAO,EAClB,UAAU,iBAAiB,KAC1B,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAU5B,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,0BAA0B,4BAA4B,EACtD,WAAW,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,KAC9C,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAQ7B,CAAC"}
@@ -1,5 +1,3 @@
1
- import { AdkEventPart, AdkMessage } from "./types.js";
2
- //#region src/contentToParts.d.ts
1
+ import type { AdkEventPart, AdkMessage } from "./types.js";
3
2
  export declare const contentToParts: (content: AdkMessage["content"]) => AdkEventPart[];
4
- //#endregion
5
3
  //# sourceMappingURL=contentToParts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contentToParts.d.ts","names":[],"sources":["../src/contentToParts.ts"],"mappings":";;qBAEa,iBACX,SAAS,0BACR"}
1
+ {"version":3,"file":"contentToParts.d.ts","sourceRoot":"","sources":["../src/contentToParts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAyB,mBAAgB;AAE/E,eAAO,MAAM,cAAc,GACzB,SAAS,UAAU,CAAC,SAAS,CAAC,KAC7B,YAAY,EAmCd,CAAC"}
@@ -29,6 +29,7 @@ const contentToParts = (content) => {
29
29
  output: part.output,
30
30
  outcome: part.outcome
31
31
  } };
32
+ case "activity": return { text: part.message };
32
33
  default: return { text: "" };
33
34
  }
34
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"contentToParts.js","names":[],"sources":["../src/contentToParts.ts"],"sourcesContent":["import type { AdkEventPart, AdkMessage, AdkMessageContentPart } from \"./types\";\n\nexport const contentToParts = (\n content: AdkMessage[\"content\"],\n): AdkEventPart[] => {\n if (typeof content === \"string\") return [{ text: content }];\n return (content as AdkMessageContentPart[]).map((part): AdkEventPart => {\n switch (part.type) {\n case \"text\":\n return { text: part.text };\n case \"reasoning\":\n return { text: part.text, thought: true };\n case \"image\":\n return { inlineData: { mimeType: part.mimeType, data: part.data } };\n case \"image_url\":\n return { fileData: { fileUri: part.url } };\n case \"file\":\n return { inlineData: { mimeType: part.mimeType, data: part.data } };\n case \"file_url\":\n return {\n fileData: {\n fileUri: part.url,\n ...(part.mimeType != null && { mimeType: part.mimeType }),\n },\n };\n case \"code\":\n return {\n executableCode: { code: part.code, language: part.language },\n };\n case \"code_result\":\n return {\n codeExecutionResult: { output: part.output, outcome: part.outcome },\n };\n default:\n return { text: \"\" };\n }\n });\n};\n"],"mappings":";AAEA,MAAa,kBACX,YACmB;CACnB,IAAI,OAAO,YAAY,UAAU,OAAO,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC1D,OAAQ,QAAoC,KAAK,SAAuB;EACtE,QAAQ,KAAK,MAAb;GACE,KAAK,QACH,OAAO,EAAE,MAAM,KAAK,KAAK;GAC3B,KAAK,aACH,OAAO;IAAE,MAAM,KAAK;IAAM,SAAS;GAAK;GAC1C,KAAK,SACH,OAAO,EAAE,YAAY;IAAE,UAAU,KAAK;IAAU,MAAM,KAAK;GAAK,EAAE;GACpE,KAAK,aACH,OAAO,EAAE,UAAU,EAAE,SAAS,KAAK,IAAI,EAAE;GAC3C,KAAK,QACH,OAAO,EAAE,YAAY;IAAE,UAAU,KAAK;IAAU,MAAM,KAAK;GAAK,EAAE;GACpE,KAAK,YACH,OAAO,EACL,UAAU;IACR,SAAS,KAAK;IACd,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;GACzD,EACF;GACF,KAAK,QACH,OAAO,EACL,gBAAgB;IAAE,MAAM,KAAK;IAAM,UAAU,KAAK;GAAS,EAC7D;GACF,KAAK,eACH,OAAO,EACL,qBAAqB;IAAE,QAAQ,KAAK;IAAQ,SAAS,KAAK;GAAQ,EACpE;GACF,SACE,OAAO,EAAE,MAAM,GAAG;EACtB;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"contentToParts.js","names":[],"sources":["../src/contentToParts.ts"],"sourcesContent":["import type { AdkEventPart, AdkMessage, AdkMessageContentPart } from \"./types\";\n\nexport const contentToParts = (\n content: AdkMessage[\"content\"],\n): AdkEventPart[] => {\n if (typeof content === \"string\") return [{ text: content }];\n return (content as AdkMessageContentPart[]).map((part): AdkEventPart => {\n switch (part.type) {\n case \"text\":\n return { text: part.text };\n case \"reasoning\":\n return { text: part.text, thought: true };\n case \"image\":\n return { inlineData: { mimeType: part.mimeType, data: part.data } };\n case \"image_url\":\n return { fileData: { fileUri: part.url } };\n case \"file\":\n return { inlineData: { mimeType: part.mimeType, data: part.data } };\n case \"file_url\":\n return {\n fileData: {\n fileUri: part.url,\n ...(part.mimeType != null && { mimeType: part.mimeType }),\n },\n };\n case \"code\":\n return {\n executableCode: { code: part.code, language: part.language },\n };\n case \"code_result\":\n return {\n codeExecutionResult: { output: part.output, outcome: part.outcome },\n };\n case \"activity\":\n return { text: part.message };\n default:\n return { text: \"\" };\n }\n });\n};\n"],"mappings":";AAEA,MAAa,kBACX,YACmB;CACnB,IAAI,OAAO,YAAY,UAAU,OAAO,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC1D,OAAQ,QAAoC,KAAK,SAAuB;EACtE,QAAQ,KAAK,MAAb;GACE,KAAK,QACH,OAAO,EAAE,MAAM,KAAK,KAAK;GAC3B,KAAK,aACH,OAAO;IAAE,MAAM,KAAK;IAAM,SAAS;GAAK;GAC1C,KAAK,SACH,OAAO,EAAE,YAAY;IAAE,UAAU,KAAK;IAAU,MAAM,KAAK;GAAK,EAAE;GACpE,KAAK,aACH,OAAO,EAAE,UAAU,EAAE,SAAS,KAAK,IAAI,EAAE;GAC3C,KAAK,QACH,OAAO,EAAE,YAAY;IAAE,UAAU,KAAK;IAAU,MAAM,KAAK;GAAK,EAAE;GACpE,KAAK,YACH,OAAO,EACL,UAAU;IACR,SAAS,KAAK;IACd,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;GACzD,EACF;GACF,KAAK,QACH,OAAO,EACL,gBAAgB;IAAE,MAAM,KAAK;IAAM,UAAU,KAAK;GAAS,EAC7D;GACF,KAAK,eACH,OAAO,EACL,qBAAqB;IAAE,QAAQ,KAAK;IAAQ,SAAS,KAAK;GAAQ,EACpE;GACF,KAAK,YACH,OAAO,EAAE,MAAM,KAAK,QAAQ;GAC9B,SACE,OAAO,EAAE,MAAM,GAAG;EACtB;CACF,CAAC;AACH"}
@@ -1,8 +1,6 @@
1
- import { AdkMessage } from "./types.js";
2
- import { AdkToolApproval } from "./adkToolApproval.js";
3
- import { useExternalMessageConverter } from "@assistant-ui/core/react";
4
- //#region src/convertAdkMessages.d.ts
1
+ import type { useExternalMessageConverter } from "@assistant-ui/core/react";
2
+ import { type AdkToolApproval } from "./adkToolApproval.js";
3
+ import type { AdkMessage } from "./types.js";
5
4
  export declare const createAdkMessageConverter: (approvals: ReadonlyMap<string, AdkToolApproval>) => useExternalMessageConverter.Callback<AdkMessage>;
6
5
  export declare const convertAdkMessage: useExternalMessageConverter.Callback<AdkMessage>;
7
- //#endregion
8
6
  //# sourceMappingURL=convertAdkMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertAdkMessages.d.ts","names":[],"sources":["../src/convertAdkMessages.ts"],"mappings":";;;;qBAyFa,4BAET,WAAW,oBAAoB,qBAC9B,4BAA4B,SAAS;qBAiE7B,mBAAmB,4BAA4B,SAAS"}
1
+ {"version":3,"file":"convertAdkMessages.d.ts","sourceRoot":"","sources":["../src/convertAdkMessages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAEL,KAAK,eAAe,EACrB,6BAA0B;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAyB,mBAAgB;AAiGjE,eAAO,MAAM,yBAAyB,GAElC,WAAW,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,KAC9C,2BAA2B,CAAC,QAAQ,CAAC,UAAU,CAgEjD,CAAC;AAEJ,eAAO,MAAM,iBAAiB,EAAE,2BAA2B,CAAC,QAAQ,CAAC,UAAU,CACnC,CAAC"}
@@ -6,15 +6,16 @@ const contentToParts = (content, role) => {
6
6
  type: "text",
7
7
  text: content
8
8
  }];
9
- return content.map((part) => {
9
+ if (!Array.isArray(content)) return [];
10
+ return content.filter((part) => typeof part === "object" && part !== null).map((part) => {
10
11
  switch (part.type) {
11
12
  case "text": return {
12
13
  type: "text",
13
- text: part.text
14
+ text: typeof part.text === "string" ? part.text : ""
14
15
  };
15
16
  case "reasoning": return {
16
17
  type: "reasoning",
17
- text: part.text
18
+ text: typeof part.text === "string" ? part.text : ""
18
19
  };
19
20
  case "image": return {
20
21
  type: "image",
@@ -61,6 +62,10 @@ const contentToParts = (content, role) => {
61
62
  outcome: part.outcome
62
63
  }
63
64
  };
65
+ case "activity": return {
66
+ type: "text",
67
+ text: typeof part.message === "string" ? part.message : ""
68
+ };
64
69
  default: return null;
65
70
  }
66
71
  }).filter((p) => p !== null);
@@ -1 +1 @@
1
- {"version":3,"file":"convertAdkMessages.js","names":[],"sources":["../src/convertAdkMessages.ts"],"sourcesContent":["\"use client\";\n\nimport type { ToolCallMessagePart } from \"@assistant-ui/core\";\nimport type { useExternalMessageConverter } from \"@assistant-ui/core/react\";\nimport {\n ADK_REQUEST_CONFIRMATION,\n type AdkToolApproval,\n} from \"./adkToolApproval\";\nimport type { AdkMessage, AdkMessageContentPart } from \"./types\";\n\ntype ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"image\"; image: string }\n | {\n type: \"file\";\n data: string;\n mimeType: string;\n filename?: string;\n sourceType?: \"url\";\n }\n | { type: \"data\"; name: string; data: unknown };\n\nconst contentToParts = (\n content: AdkMessage[\"content\"],\n role: \"user\" | \"assistant\",\n): ContentPart[] => {\n if (typeof content === \"string\")\n return [{ type: \"text\" as const, text: content }];\n\n return (content as AdkMessageContentPart[])\n .map((part): ContentPart | null => {\n switch (part.type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n case \"reasoning\":\n return { type: \"reasoning\", text: part.text };\n case \"image\":\n return {\n type: \"image\",\n image: `data:${part.mimeType};base64,${part.data}`,\n };\n case \"image_url\":\n return { type: \"image\", image: part.url };\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename != null && { filename: part.filename }),\n };\n case \"file_url\":\n if (role === \"user\") {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mimeType ?? \"application/octet-stream\",\n sourceType: \"url\",\n };\n }\n return {\n type: \"data\",\n name: \"file_url\",\n data: {\n url: part.url,\n ...(part.mimeType != null && { mimeType: part.mimeType }),\n },\n };\n case \"code\":\n return {\n type: \"data\",\n name: \"executable_code\",\n data: { code: part.code, language: part.language },\n };\n case \"code_result\":\n return {\n type: \"data\",\n name: \"code_execution_result\",\n data: { output: part.output, outcome: part.outcome },\n };\n default:\n return null;\n }\n })\n .filter((p): p is NonNullable<typeof p> => p !== null);\n};\n\nconst EMPTY_APPROVALS: ReadonlyMap<string, AdkToolApproval> = new Map();\n\nexport const createAdkMessageConverter =\n (\n approvals: ReadonlyMap<string, AdkToolApproval>,\n ): useExternalMessageConverter.Callback<AdkMessage> =>\n (message) => {\n switch (message.type) {\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: contentToParts(message.content, \"user\"),\n };\n\n case \"ai\": {\n const toolCallParts: ToolCallMessagePart[] =\n message.tool_calls?.map((tc) => {\n const approval = approvals.get(tc.id);\n return {\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.name,\n args: tc.args,\n argsText: tc.argsText ?? JSON.stringify(tc.args),\n ...(approval && { approval }),\n };\n }) ?? [];\n\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n ...contentToParts(message.content, \"assistant\"),\n ...toolCallParts,\n ],\n ...(message.status && { status: message.status }),\n ...(message.author && {\n metadata: {\n custom: { author: message.author, branch: message.branch },\n },\n }),\n };\n }\n\n case \"tool\": {\n // A confirmation reply ADK could not read leaves its gate undecided.\n // Any result settles the tool call in core, so the reply is dropped\n // here to keep the gate requiring action and answerable again. Only a\n // reply to the confirmation itself is dropped: the gated call carries\n // the same approval, and its own result is the agent's real output.\n const approval = approvals.get(message.tool_call_id);\n if (\n message.name === ADK_REQUEST_CONFIRMATION &&\n approval !== undefined &&\n approval.approved === undefined\n )\n return [];\n\n return {\n role: \"tool\",\n toolCallId: message.tool_call_id,\n toolName: message.name,\n result: message.content,\n isError: message.status === \"error\",\n };\n }\n }\n };\n\nexport const convertAdkMessage: useExternalMessageConverter.Callback<AdkMessage> =\n createAdkMessageConverter(EMPTY_APPROVALS);\n"],"mappings":";;;AAuBA,MAAM,kBACJ,SACA,SACkB;CAClB,IAAI,OAAO,YAAY,UACrB,OAAO,CAAC;EAAE,MAAM;EAAiB,MAAM;CAAQ,CAAC;CAElD,OAAQ,QACL,KAAK,SAA6B;EACjC,QAAQ,KAAK,MAAb;GACE,KAAK,QACH,OAAO;IAAE,MAAM;IAAQ,MAAM,KAAK;GAAK;GACzC,KAAK,aACH,OAAO;IAAE,MAAM;IAAa,MAAM,KAAK;GAAK;GAC9C,KAAK,SACH,OAAO;IACL,MAAM;IACN,OAAO,QAAQ,KAAK,SAAS,UAAU,KAAK;GAC9C;GACF,KAAK,aACH,OAAO;IAAE,MAAM;IAAS,OAAO,KAAK;GAAI;GAC1C,KAAK,QACH,OAAO;IACL,MAAM;IACN,MAAM,KAAK;IACX,UAAU,KAAK;IACf,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;GACzD;GACF,KAAK;IACH,IAAI,SAAS,QACX,OAAO;KACL,MAAM;KACN,MAAM,KAAK;KACX,UAAU,KAAK,YAAY;KAC3B,YAAY;IACd;IAEF,OAAO;KACL,MAAM;KACN,MAAM;KACN,MAAM;MACJ,KAAK,KAAK;MACV,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;KACzD;IACF;GACF,KAAK,QACH,OAAO;IACL,MAAM;IACN,MAAM;IACN,MAAM;KAAE,MAAM,KAAK;KAAM,UAAU,KAAK;IAAS;GACnD;GACF,KAAK,eACH,OAAO;IACL,MAAM;IACN,MAAM;IACN,MAAM;KAAE,QAAQ,KAAK;KAAQ,SAAS,KAAK;IAAQ;GACrD;GACF,SACE,OAAO;EACX;CACF,CAAC,CAAC,CACD,QAAQ,MAAkC,MAAM,IAAI;AACzD;AAEA,MAAM,kCAAwD,IAAI,IAAI;AAEtE,MAAa,6BAET,eAED,YAAY;CACX,QAAQ,QAAQ,MAAhB;EACE,KAAK,SACH,OAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,SAAS,eAAe,QAAQ,SAAS,MAAM;EACjD;EAEF,KAAK,MAAM;GACT,MAAM,gBACJ,QAAQ,YAAY,KAAK,OAAO;IAC9B,MAAM,WAAW,UAAU,IAAI,GAAG,EAAE;IACpC,OAAO;KACL,MAAM;KACN,YAAY,GAAG;KACf,UAAU,GAAG;KACb,MAAM,GAAG;KACT,UAAU,GAAG,YAAY,KAAK,UAAU,GAAG,IAAI;KAC/C,GAAI,YAAY,EAAE,SAAS;IAC7B;GACF,CAAC,KAAK,CAAC;GAET,OAAO;IACL,MAAM;IACN,IAAI,QAAQ;IACZ,SAAS,CACP,GAAG,eAAe,QAAQ,SAAS,WAAW,GAC9C,GAAG,aACL;IACA,GAAI,QAAQ,UAAU,EAAE,QAAQ,QAAQ,OAAO;IAC/C,GAAI,QAAQ,UAAU,EACpB,UAAU,EACR,QAAQ;KAAE,QAAQ,QAAQ;KAAQ,QAAQ,QAAQ;IAAO,EAC3D,EACF;GACF;EACF;EAEA,KAAK,QAAQ;GAMX,MAAM,WAAW,UAAU,IAAI,QAAQ,YAAY;GACnD,IACE,QAAQ,SAAA,8BACR,aAAa,KAAA,KACb,SAAS,aAAa,KAAA,GAEtB,OAAO,CAAC;GAEV,OAAO;IACL,MAAM;IACN,YAAY,QAAQ;IACpB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IAChB,SAAS,QAAQ,WAAW;GAC9B;EACF;CACF;AACF;AAEF,MAAa,oBACX,0BAA0B,eAAe"}
1
+ {"version":3,"file":"convertAdkMessages.js","names":[],"sources":["../src/convertAdkMessages.ts"],"sourcesContent":["\"use client\";\n\nimport type { ToolCallMessagePart } from \"@assistant-ui/core\";\nimport type { useExternalMessageConverter } from \"@assistant-ui/core/react\";\nimport {\n ADK_REQUEST_CONFIRMATION,\n type AdkToolApproval,\n} from \"./adkToolApproval\";\nimport type { AdkMessage, AdkMessageContentPart } from \"./types\";\n\ntype ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"reasoning\"; text: string }\n | { type: \"image\"; image: string }\n | {\n type: \"file\";\n data: string;\n mimeType: string;\n filename?: string;\n sourceType?: \"url\";\n }\n | { type: \"data\"; name: string; data: unknown };\n\nconst contentToParts = (\n content: AdkMessage[\"content\"],\n role: \"user\" | \"assistant\",\n): ContentPart[] => {\n if (typeof content === \"string\")\n return [{ type: \"text\" as const, text: content }];\n if (!Array.isArray(content)) return [];\n\n return content\n .filter(\n (part): part is AdkMessageContentPart =>\n typeof part === \"object\" && part !== null,\n )\n .map((part): ContentPart | null => {\n switch (part.type) {\n case \"text\":\n return {\n type: \"text\",\n text: typeof part.text === \"string\" ? part.text : \"\",\n };\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: typeof part.text === \"string\" ? part.text : \"\",\n };\n case \"image\":\n return {\n type: \"image\",\n image: `data:${part.mimeType};base64,${part.data}`,\n };\n case \"image_url\":\n return { type: \"image\", image: part.url };\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename != null && { filename: part.filename }),\n };\n case \"file_url\":\n if (role === \"user\") {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mimeType ?? \"application/octet-stream\",\n sourceType: \"url\",\n };\n }\n return {\n type: \"data\",\n name: \"file_url\",\n data: {\n url: part.url,\n ...(part.mimeType != null && { mimeType: part.mimeType }),\n },\n };\n case \"code\":\n return {\n type: \"data\",\n name: \"executable_code\",\n data: { code: part.code, language: part.language },\n };\n case \"code_result\":\n return {\n type: \"data\",\n name: \"code_execution_result\",\n data: { output: part.output, outcome: part.outcome },\n };\n case \"activity\":\n return {\n type: \"text\",\n text: typeof part.message === \"string\" ? part.message : \"\",\n };\n default:\n return null;\n }\n })\n .filter((p): p is NonNullable<typeof p> => p !== null);\n};\n\nconst EMPTY_APPROVALS: ReadonlyMap<string, AdkToolApproval> = new Map();\n\nexport const createAdkMessageConverter =\n (\n approvals: ReadonlyMap<string, AdkToolApproval>,\n ): useExternalMessageConverter.Callback<AdkMessage> =>\n (message) => {\n switch (message.type) {\n case \"human\":\n return {\n role: \"user\",\n id: message.id,\n content: contentToParts(message.content, \"user\"),\n };\n\n case \"ai\": {\n const toolCallParts: ToolCallMessagePart[] =\n message.tool_calls?.map((tc) => {\n const approval = approvals.get(tc.id);\n return {\n type: \"tool-call\",\n toolCallId: tc.id,\n toolName: tc.name,\n args: tc.args,\n argsText: tc.argsText ?? JSON.stringify(tc.args),\n ...(approval && { approval }),\n };\n }) ?? [];\n\n return {\n role: \"assistant\",\n id: message.id,\n content: [\n ...contentToParts(message.content, \"assistant\"),\n ...toolCallParts,\n ],\n ...(message.status && { status: message.status }),\n ...(message.author && {\n metadata: {\n custom: { author: message.author, branch: message.branch },\n },\n }),\n };\n }\n\n case \"tool\": {\n // A confirmation reply ADK could not read leaves its gate undecided.\n // The reply is not the agent's output, so it is dropped rather than\n // shown as the call's result while the gate waits to be answered again.\n // Only a reply to the confirmation itself is dropped: the gated call\n // carries the same approval, and its own result is the agent's real\n // output.\n const approval = approvals.get(message.tool_call_id);\n if (\n message.name === ADK_REQUEST_CONFIRMATION &&\n approval !== undefined &&\n approval.approved === undefined\n )\n return [];\n\n return {\n role: \"tool\",\n toolCallId: message.tool_call_id,\n toolName: message.name,\n result: message.content,\n isError: message.status === \"error\",\n };\n }\n }\n };\n\nexport const convertAdkMessage: useExternalMessageConverter.Callback<AdkMessage> =\n createAdkMessageConverter(EMPTY_APPROVALS);\n"],"mappings":";;;AAuBA,MAAM,kBACJ,SACA,SACkB;CAClB,IAAI,OAAO,YAAY,UACrB,OAAO,CAAC;EAAE,MAAM;EAAiB,MAAM;CAAQ,CAAC;CAClD,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG,OAAO,CAAC;CAErC,OAAO,QACJ,QACE,SACC,OAAO,SAAS,YAAY,SAAS,IACzC,CAAC,CACA,KAAK,SAA6B;EACjC,QAAQ,KAAK,MAAb;GACE,KAAK,QACH,OAAO;IACL,MAAM;IACN,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GACpD;GACF,KAAK,aACH,OAAO;IACL,MAAM;IACN,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GACpD;GACF,KAAK,SACH,OAAO;IACL,MAAM;IACN,OAAO,QAAQ,KAAK,SAAS,UAAU,KAAK;GAC9C;GACF,KAAK,aACH,OAAO;IAAE,MAAM;IAAS,OAAO,KAAK;GAAI;GAC1C,KAAK,QACH,OAAO;IACL,MAAM;IACN,MAAM,KAAK;IACX,UAAU,KAAK;IACf,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;GACzD;GACF,KAAK;IACH,IAAI,SAAS,QACX,OAAO;KACL,MAAM;KACN,MAAM,KAAK;KACX,UAAU,KAAK,YAAY;KAC3B,YAAY;IACd;IAEF,OAAO;KACL,MAAM;KACN,MAAM;KACN,MAAM;MACJ,KAAK,KAAK;MACV,GAAI,KAAK,YAAY,QAAQ,EAAE,UAAU,KAAK,SAAS;KACzD;IACF;GACF,KAAK,QACH,OAAO;IACL,MAAM;IACN,MAAM;IACN,MAAM;KAAE,MAAM,KAAK;KAAM,UAAU,KAAK;IAAS;GACnD;GACF,KAAK,eACH,OAAO;IACL,MAAM;IACN,MAAM;IACN,MAAM;KAAE,QAAQ,KAAK;KAAQ,SAAS,KAAK;IAAQ;GACrD;GACF,KAAK,YACH,OAAO;IACL,MAAM;IACN,MAAM,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;GAC1D;GACF,SACE,OAAO;EACX;CACF,CAAC,CAAC,CACD,QAAQ,MAAkC,MAAM,IAAI;AACzD;AAEA,MAAM,kCAAwD,IAAI,IAAI;AAEtE,MAAa,6BAET,eAED,YAAY;CACX,QAAQ,QAAQ,MAAhB;EACE,KAAK,SACH,OAAO;GACL,MAAM;GACN,IAAI,QAAQ;GACZ,SAAS,eAAe,QAAQ,SAAS,MAAM;EACjD;EAEF,KAAK,MAAM;GACT,MAAM,gBACJ,QAAQ,YAAY,KAAK,OAAO;IAC9B,MAAM,WAAW,UAAU,IAAI,GAAG,EAAE;IACpC,OAAO;KACL,MAAM;KACN,YAAY,GAAG;KACf,UAAU,GAAG;KACb,MAAM,GAAG;KACT,UAAU,GAAG,YAAY,KAAK,UAAU,GAAG,IAAI;KAC/C,GAAI,YAAY,EAAE,SAAS;IAC7B;GACF,CAAC,KAAK,CAAC;GAET,OAAO;IACL,MAAM;IACN,IAAI,QAAQ;IACZ,SAAS,CACP,GAAG,eAAe,QAAQ,SAAS,WAAW,GAC9C,GAAG,aACL;IACA,GAAI,QAAQ,UAAU,EAAE,QAAQ,QAAQ,OAAO;IAC/C,GAAI,QAAQ,UAAU,EACpB,UAAU,EACR,QAAQ;KAAE,QAAQ,QAAQ;KAAQ,QAAQ,QAAQ;IAAO,EAC3D,EACF;GACF;EACF;EAEA,KAAK,QAAQ;GAOX,MAAM,WAAW,UAAU,IAAI,QAAQ,YAAY;GACnD,IACE,QAAQ,SAAA,8BACR,aAAa,KAAA,KACb,SAAS,aAAa,KAAA,GAEtB,OAAO,CAAC;GAEV,OAAO;IACL,MAAM;IACN,YAAY,QAAQ;IACpB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IAChB,SAAS,QAAQ,WAAW;GAC9B;EACF;CACF;AACF;AAEF,MAAa,oBACX,0BAA0B,eAAe"}
@@ -1,41 +1,40 @@
1
- import { AdkMessage, AdkToolCall } from "./types.js";
2
- import { AppendMessage, ThreadMessage } from "@assistant-ui/core";
3
- //#region src/convertToAdkMessages.d.ts
1
+ import { type AppendMessage, type ThreadMessage } from "@assistant-ui/core";
2
+ import type { AdkMessage } from "./types.js";
4
3
  /** Exported for unit tests. */
5
4
  export declare const getMessageContent: (msg: AppendMessage) => string | ({
6
- type: "text";
7
- text: string;
8
- mimeType?: never;
9
- data?: never;
10
- url?: never;
5
+ type: "text";
6
+ text: string;
7
+ mimeType?: never;
8
+ data?: never;
9
+ url?: never;
11
10
  } | {
12
- type: "image";
13
- mimeType: string;
14
- data: string;
15
- text?: never;
16
- url?: never;
11
+ type: "image";
12
+ mimeType: string;
13
+ data: string;
14
+ text?: never;
15
+ url?: never;
17
16
  } | {
18
- type: "image_url";
19
- url: string;
20
- text?: never;
21
- mimeType?: never;
22
- data?: never;
17
+ type: "image_url";
18
+ url: string;
19
+ text?: never;
20
+ mimeType?: never;
21
+ data?: never;
23
22
  } | {
24
- type: "file_url";
25
- url: string;
26
- mimeType: string;
27
- text?: never;
28
- data?: never;
23
+ type: "file_url";
24
+ url: string;
25
+ mimeType: string;
26
+ text?: never;
27
+ data?: never;
29
28
  } | {
30
- filename?: string;
31
- type: "file";
32
- mimeType: string;
33
- data: string;
34
- text?: never;
35
- url?: never;
29
+ filename?: string;
30
+ type: "file";
31
+ mimeType: string;
32
+ data: string;
33
+ text?: never;
34
+ url?: never;
36
35
  })[];
37
36
  /** Exported for unit tests. */
38
- export declare const getPendingToolCalls: (messages: AdkMessage[]) => AdkToolCall[];
37
+ export declare const getPendingToolCalls: (messages: AdkMessage[]) => import("./types.js").AdkToolCall[];
39
38
  /**
40
39
  * Exported for unit tests.
41
40
  *
@@ -46,12 +45,11 @@ export declare const getPendingToolCalls: (messages: AdkMessage[]) => AdkToolCal
46
45
  * UI + submit helper, not auto-cancelled.
47
46
  */
48
47
  export declare const getPendingCancellations: (messages: AdkMessage[], longRunningToolIds: readonly string[]) => Array<AdkMessage & {
49
- type: "tool";
48
+ type: "tool";
50
49
  }>;
51
50
  export declare const truncateAdkMessages: (threadMessages: readonly ThreadMessage[], parentId: string | null) => AdkMessage[];
52
51
  export declare const toAdkUserMessage: (msg: AppendMessage, id?: string) => AdkMessage & {
53
- type: "human";
54
- id: string;
52
+ type: "human";
53
+ id: string;
55
54
  };
56
- //#endregion
57
55
  //# sourceMappingURL=convertToAdkMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertToAdkMessages.d.ts","names":[],"sources":["../src/convertToAdkMessages.ts"],"mappings":";;;;qBAgBa,oBAAqB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2E1B,sBAAuB,UAAU,iBAAA;;;;;;;;;;qBAyBjC,0BACX,UAAU,cACV,0CACC,MAAM;EAAe;;qBAaX,sBACX,yBAAyB,iBACzB,4BACC;qBAWU,mBACX,KAAK,eACL,gBACC;EAAe;EAAe"}
1
+ {"version":3,"file":"convertToAdkMessages.d.ts","sourceRoot":"","sources":["../src/convertToAdkMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAgB;AAE1C,+BAA+B;AAC/B,eAAO,MAAM,iBAAiB,GAAI,KAAK,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwEnD,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,mBAAmB,GAAI,UAAU,UAAU,EAAE,uCAczD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,UAAU,EAAE,EACtB,oBAAoB,SAAS,MAAM,EAAE,KACpC,KAAK,CAAC,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAWrC,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,gBAAgB,SAAS,aAAa,EAAE,EACxC,UAAU,MAAM,GAAG,IAAI,KACtB,UAAU,EASZ,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,KAAK,aAAa,EAClB,WAAiB,KAChB,UAAU,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAIzC,CAAC"}
package/dist/hooks.d.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { AdkAuthCredential, AdkAuthRequest, AdkMessage, AdkMessageMetadata, AdkSendMessageConfig, AdkToolConfirmation } from "./types.js";
2
- import { ReadonlyJSONValue } from "assistant-stream/utils";
3
- //#region src/hooks.d.ts
1
+ import type { ReadonlyJSONValue } from "assistant-stream/utils";
2
+ import type { AdkMessage, AdkSendMessageConfig, AdkToolConfirmation, AdkAuthCredential, AdkAuthRequest, AdkMessageMetadata } from "./types.js";
4
3
  /** Returns the name and branch of the currently active ADK agent. */
5
4
  export declare const useAdkAgentInfo: () => {
6
- name?: string | undefined;
7
- branch?: string | undefined;
5
+ name?: string | undefined;
6
+ branch?: string | undefined;
8
7
  } | undefined;
9
8
  /** Returns the accumulated session state delta from ADK events. */
10
9
  export declare const useAdkSessionState: () => Record<string, unknown>;
@@ -24,7 +23,12 @@ export declare const useAdkEscalation: () => boolean;
24
23
  export declare const useAdkMessageMetadata: () => Map<string, AdkMessageMetadata>;
25
24
  /** Returns a function to confirm or deny a pending tool confirmation. */
26
25
  export declare const useAdkConfirmTool: () => (toolCallId: string, confirmed: boolean, payload?: ReadonlyJSONValue) => Promise<void>;
27
- /** Returns a function to submit auth credentials for a pending auth request. */
26
+ /**
27
+ * Returns a function to submit auth credentials for a pending auth request.
28
+ * The reply carries the request's auth config with the credential as its
29
+ * `exchangedAuthCredential`, which is the shape ADK resumes the tool on, so the
30
+ * id must name a request `useAdkAuthRequests` currently lists.
31
+ */
28
32
  export declare const useAdkSubmitAuth: () => (toolCallId: string, credential: AdkAuthCredential) => Promise<void>;
29
33
  /** Returns a function to submit the user's answer for a pending `adk_request_input` HITL interrupt. */
30
34
  export declare const useAdkSubmitInput: () => (toolCallId: string, result: ReadonlyJSONValue) => Promise<void>;
@@ -34,5 +38,4 @@ export declare const useAdkAppState: () => Record<string, unknown>;
34
38
  export declare const useAdkUserState: () => Record<string, unknown>;
35
39
  /** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */
36
40
  export declare const useAdkTempState: () => Record<string, unknown>;
37
- //#endregion
38
41
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","names":[],"sources":["../src/hooks.ts"],"mappings":";;;;qBAwBa;EAAA;EAAA;;;qBAIA,0BAAkB;;qBAIlB,mBAEH,UAAU,cAAc,QAAQ,yBAAoB;;qBAKjD;;qBAIA,+BAAuB;;qBAIvB,0BAAkB;;qBAIlB,uBAAe;;qBAIf;;qBAGA,6BAAqB,YAAA;;qBAMrB,0BAGT,oBACA,oBACA,UAAU,sBAAiB;;qBAQlB,yBAEH,oBAAoB,YAAY,sBAAiB;;qBAiB9C,0BAEH,oBAAoB,QAAQ,sBAAiB;;qBAyC1C,sBAAc;;qBAGd,uBAAe;;qBAGf,uBAAe"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAEnB,mBAAgB;AASjB,qEAAqE;AACrE,eAAO,MAAM,eAAe;;;aACkB,CAAC;AAE/C,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,+BACwB,CAAC;AAExD,mDAAmD;AACnD,eAAO,MAAM,UAAU,SAEb,UAAU,UAAU,EAAE,EAAE,QAAQ,oBAAoB,kBAE7D,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,gBACoC,CAAC;AAE1E,4EAA4E;AAC5E,eAAO,MAAM,uBAAuB,6BACiC,CAAC;AAEtE,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,wBAC4B,CAAC;AAE5D,mEAAmE;AACnE,eAAO,MAAM,eAAe,8BACiC,CAAC;AAE9D,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,eAAiD,CAAC;AAE/E,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,uCAC+B,CAAC;AAIlE,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,SAG1B,YAAY,MAAM,EAClB,WAAW,OAAO,EAClB,UAAU,iBAAiB,kBAK9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SAEnB,YAAY,MAAM,EAAE,YAAY,iBAAiB,kBAO1D,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,iBAAiB,SAEpB,YAAY,MAAM,EAAE,QAAQ,iBAAiB,kBActD,CAAC;AA0BF,4EAA4E;AAC5E,eAAO,MAAM,cAAc,+BAAwC,CAAC;AAEpE,8EAA8E;AAC9E,eAAO,MAAM,eAAe,+BAAyC,CAAC;AAEtE,uFAAuF;AACvF,eAAO,MAAM,eAAe,+BAAyC,CAAC"}
package/dist/hooks.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { toAdkConfirmationReply } from "./adkToolApproval.js";
2
+ import { toAdkAuthReply } from "./adkAuthRequest.js";
2
3
  import { adkExtras } from "./adkExtras.js";
3
4
  import { generateId } from "@assistant-ui/core";
4
5
  import { useAui } from "@assistant-ui/store";
@@ -36,17 +37,18 @@ const useAdkConfirmTool = () => {
36
37
  const aui = useAui();
37
38
  return (toolCallId, confirmed, payload) => adkExtras.get(aui).send([toAdkConfirmationReply(toolCallId, confirmed, payload)], {});
38
39
  };
39
- /** Returns a function to submit auth credentials for a pending auth request. */
40
+ /**
41
+ * Returns a function to submit auth credentials for a pending auth request.
42
+ * The reply carries the request's auth config with the credential as its
43
+ * `exchangedAuthCredential`, which is the shape ADK resumes the tool on, so the
44
+ * id must name a request `useAdkAuthRequests` currently lists.
45
+ */
40
46
  const useAdkSubmitAuth = () => {
41
47
  const aui = useAui();
42
- return (toolCallId, credential) => adkExtras.get(aui).send([{
43
- id: generateId(),
44
- type: "tool",
45
- tool_call_id: toolCallId,
46
- name: "adk_request_credential",
47
- content: JSON.stringify(credential),
48
- status: "success"
49
- }], {});
48
+ return (toolCallId, credential) => {
49
+ const extras = adkExtras.get(aui);
50
+ return extras.send([toAdkAuthReply(toolCallId, credential, extras.authRequests)], {});
51
+ };
50
52
  };
51
53
  /** Returns a function to submit the user's answer for a pending `adk_request_input` HITL interrupt. */
52
54
  const useAdkSubmitInput = () => {
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","names":[],"sources":["../src/hooks.ts"],"sourcesContent":["import { generateId } from \"@assistant-ui/core\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useShallowSelector } from \"@assistant-ui/store/internal\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { adkExtras } from \"./adkExtras\";\nimport { toAdkConfirmationReply } from \"./adkToolApproval\";\nimport type {\n AdkMessage,\n AdkSendMessageConfig,\n AdkToolConfirmation,\n AdkAuthCredential,\n AdkAuthRequest,\n AdkMessageMetadata,\n AdkRuntimeExtras,\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\n .get(aui)\n .send([toAdkConfirmationReply(toolCallId, confirmed, payload)], {});\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: generateId(),\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: generateId(),\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 Object.fromEntries(\n Object.entries(state)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [key.slice(prefix.length), value]),\n );\n\nconst useAdkStateByPrefix = (prefix: string) =>\n adkExtras.use(\n useShallowSelector((e: AdkRuntimeExtras) =>\n filterByPrefix(e.stateDelta, prefix),\n ),\n EMPTY_STATE_DELTA,\n );\n\n/** Returns app-level state (keys prefixed with `app:`, prefix stripped). */\nexport const useAdkAppState = () => useAdkStateByPrefix(APP_PREFIX);\n\n/** Returns user-level state (keys prefixed with `user:`, prefix stripped). */\nexport const useAdkUserState = () => useAdkStateByPrefix(USER_PREFIX);\n\n/** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */\nexport const useAdkTempState = () => useAdkStateByPrefix(TEMP_PREFIX);\n"],"mappings":";;;;;;AAgBA,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,UACG,IAAI,GAAG,CAAC,CACR,KAAK,CAAC,uBAAuB,YAAY,WAAW,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE;;AAGA,MAAa,yBAAyB;CACpC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,eAC1B,UAAU,IAAI,GAAG,CAAC,CAAC,KACjB,CACE;EACE,IAAI,WAAW;EACf,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,IAAI,WAAW;EACf,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,WAEA,OAAO,YACL,OAAO,QAAQ,KAAK,CAAC,CAClB,QAAQ,CAAC,SAAS,IAAI,WAAW,MAAM,CAAC,CAAC,CACzC,KAAK,CAAC,KAAK,WAAW,CAAC,IAAI,MAAM,OAAO,MAAM,GAAG,KAAK,CAAC,CAC5D;AAEF,MAAM,uBAAuB,WAC3B,UAAU,IACR,oBAAoB,MAClB,eAAe,EAAE,YAAY,MAAM,CACrC,GACA,iBACF;;AAGF,MAAa,uBAAuB,oBAAoB,UAAU;;AAGlE,MAAa,wBAAwB,oBAAoB,WAAW;;AAGpE,MAAa,wBAAwB,oBAAoB,WAAW"}
1
+ {"version":3,"file":"hooks.js","names":[],"sources":["../src/hooks.ts"],"sourcesContent":["import { generateId } from \"@assistant-ui/core\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useShallowSelector } from \"@assistant-ui/store/internal\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport { toAdkAuthReply } from \"./adkAuthRequest\";\nimport { adkExtras } from \"./adkExtras\";\nimport { toAdkConfirmationReply } from \"./adkToolApproval\";\nimport type {\n AdkMessage,\n AdkSendMessageConfig,\n AdkToolConfirmation,\n AdkAuthCredential,\n AdkAuthRequest,\n AdkMessageMetadata,\n AdkRuntimeExtras,\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\n .get(aui)\n .send([toAdkConfirmationReply(toolCallId, confirmed, payload)], {});\n};\n\n/**\n * Returns a function to submit auth credentials for a pending auth request.\n * The reply carries the request's auth config with the credential as its\n * `exchangedAuthCredential`, which is the shape ADK resumes the tool on, so the\n * id must name a request `useAdkAuthRequests` currently lists.\n */\nexport const useAdkSubmitAuth = () => {\n const aui = useAui();\n return (toolCallId: string, credential: AdkAuthCredential) => {\n const extras = adkExtras.get(aui);\n return extras.send(\n [toAdkAuthReply(toolCallId, credential, extras.authRequests)],\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: generateId(),\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 Object.fromEntries(\n Object.entries(state)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [key.slice(prefix.length), value]),\n );\n\nconst useAdkStateByPrefix = (prefix: string) =>\n adkExtras.use(\n useShallowSelector((e: AdkRuntimeExtras) =>\n filterByPrefix(e.stateDelta, prefix),\n ),\n EMPTY_STATE_DELTA,\n );\n\n/** Returns app-level state (keys prefixed with `app:`, prefix stripped). */\nexport const useAdkAppState = () => useAdkStateByPrefix(APP_PREFIX);\n\n/** Returns user-level state (keys prefixed with `user:`, prefix stripped). */\nexport const useAdkUserState = () => useAdkStateByPrefix(USER_PREFIX);\n\n/** Returns temp state (keys prefixed with `temp:`, prefix stripped). Not persisted. */\nexport const useAdkTempState = () => useAdkStateByPrefix(TEMP_PREFIX);\n"],"mappings":";;;;;;;AAiBA,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,UACG,IAAI,GAAG,CAAC,CACR,KAAK,CAAC,uBAAuB,YAAY,WAAW,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE;;;;;;;AAQA,MAAa,yBAAyB;CACpC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,eAAkC;EAC5D,MAAM,SAAS,UAAU,IAAI,GAAG;EAChC,OAAO,OAAO,KACZ,CAAC,eAAe,YAAY,YAAY,OAAO,YAAY,CAAC,GAC5D,CAAC,CACH;CACF;AACF;;AAGA,MAAa,0BAA0B;CACrC,MAAM,MAAM,OAAO;CACnB,QAAQ,YAAoB,WAC1B,UAAU,IAAI,GAAG,CAAC,CAAC,KACjB,CACE;EACE,IAAI,WAAW;EACf,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,WAEA,OAAO,YACL,OAAO,QAAQ,KAAK,CAAC,CAClB,QAAQ,CAAC,SAAS,IAAI,WAAW,MAAM,CAAC,CAAC,CACzC,KAAK,CAAC,KAAK,WAAW,CAAC,IAAI,MAAM,OAAO,MAAM,GAAG,KAAK,CAAC,CAC5D;AAEF,MAAM,uBAAuB,WAC3B,UAAU,IACR,oBAAoB,MAClB,eAAe,EAAE,YAAY,MAAM,CACrC,GACA,iBACF;;AAGF,MAAa,uBAAuB,oBAAoB,UAAU;;AAGlE,MAAa,wBAAwB,oBAAoB,WAAW;;AAGpE,MAAa,wBAAwB,oBAAoB,WAAW"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import { AdkAuthCredential, AdkAuthCredentialType, AdkAuthRequest, AdkEvent, AdkEventActions, AdkEventPart, AdkEventType, AdkMessage, AdkMessageContentPart, AdkMessageMetadata, AdkRunConfig, AdkSendMessageConfig, AdkStreamCallback, AdkStructuredEvent, AdkThreadSnapshot, AdkToolCall, AdkToolConfirmation, OnAdkAgentTransferCallback, OnAdkCustomEventCallback, OnAdkErrorCallback } from "./types.js";
2
- import { CreateAdkStreamOptions, createAdkStream } from "./AdkClient.js";
3
- import { AdkEventAccumulator } from "./AdkEventAccumulator.js";
4
- import { AdkArtifactData, AdkSessionAdapterOptions, createAdkSessionAdapter } from "./AdkSessionAdapter.js";
5
- import { convertAdkMessage } from "./convertAdkMessages.js";
6
- import { useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState } from "./hooks.js";
7
- import { UseAdkRuntimeOptions, useAdkRuntime } from "./useAdkRuntime.js";
8
- import { UseAdkMessagesOptions, useAdkMessages } from "./useAdkMessages.js";
9
- import { toAdkStructuredEvents } from "./structuredEvents.js";
10
- export { type AdkArtifactData, type AdkAuthCredential, type AdkAuthCredentialType, type AdkAuthRequest, type AdkEvent, AdkEventAccumulator, type AdkEventActions, type AdkEventPart, AdkEventType, type AdkMessage, type AdkMessageContentPart, type AdkMessageMetadata, type AdkRunConfig, type AdkSendMessageConfig, type AdkSessionAdapterOptions, type AdkStreamCallback, type AdkStructuredEvent, type AdkThreadSnapshot, type AdkToolCall, type AdkToolConfirmation, type CreateAdkStreamOptions, type OnAdkAgentTransferCallback, type OnAdkCustomEventCallback, type OnAdkErrorCallback, type UseAdkMessagesOptions, type UseAdkRuntimeOptions, convertAdkMessage, createAdkSessionAdapter, createAdkStream, toAdkStructuredEvents, useAdkAgentInfo, useAdkAppState, useAdkArtifacts, useAdkAuthRequests, useAdkConfirmTool, useAdkEscalation, useAdkLongRunningToolIds, useAdkMessageMetadata, useAdkMessages, useAdkRuntime, useAdkSend, useAdkSessionState, useAdkSubmitAuth, useAdkSubmitInput, useAdkTempState, useAdkToolConfirmations, useAdkUserState };
1
+ export { useAdkRuntime, type UseAdkRuntimeOptions } from "./useAdkRuntime.js";
2
+ export { useAdkMessages, type UseAdkMessagesOptions } from "./useAdkMessages.js";
3
+ export { convertAdkMessage } from "./convertAdkMessages.js";
4
+ export type { AdkEvent, AdkEventPart, AdkEventActions, AdkMessage, AdkThreadSnapshot, AdkMessageContentPart, AdkToolCall, AdkToolConfirmation, AdkAuthCredential, AdkAuthCredentialType, AdkAuthRequest, AdkMessageMetadata, AdkRunConfig, AdkSendMessageConfig, AdkStreamCallback, AdkStructuredEvent, OnAdkErrorCallback, OnAdkCustomEventCallback, OnAdkAgentTransferCallback, } from "./types.js";
5
+ export { AdkEventType } from "./types.js";
6
+ export { toAdkStructuredEvents } from "./structuredEvents.js";
7
+ export { AdkEventAccumulator } from "./AdkEventAccumulator.js";
8
+ export { createAdkStream, type CreateAdkStreamOptions } from "./AdkClient.js";
9
+ export { createAdkSessionAdapter, type AdkSessionAdapterOptions, type AdkArtifactData, } from "./AdkSessionAdapter.js";
10
+ export { useAdkAgentInfo, useAdkSessionState, useAdkSend, useAdkLongRunningToolIds, useAdkToolConfirmations, useAdkAuthRequests, useAdkArtifacts, useAdkEscalation, useAdkMessageMetadata, useAdkConfirmTool, useAdkSubmitAuth, useAdkSubmitInput, useAdkAppState, useAdkUserState, useAdkTempState, } from "./hooks.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,2BAAwB;AAE3E,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,4BAAyB;AAE9E,OAAO,EAAE,iBAAiB,EAAE,gCAA6B;AAEzD,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,GAC3B,mBAAgB;AAEjB,OAAO,EAAE,YAAY,EAAE,mBAAgB;AAEvC,OAAO,EAAE,qBAAqB,EAAE,8BAA2B;AAE3D,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAE5D,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,uBAAoB;AAE3E,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,GACrB,+BAA4B;AAE7B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,GAChB,mBAAgB"}
@@ -1,4 +1,2 @@
1
- //#region src/normalizeAdkPart.d.ts
2
1
  export declare const normalizeAdkPart: (part: Record<string, unknown>) => Record<string, unknown>;
3
- //#endregion
4
2
  //# sourceMappingURL=normalizeAdkPart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeAdkPart.d.ts","names":[],"sources":["../src/normalizeAdkPart.ts"],"mappings":";qBAEa,mBACX,MAAM,4BACL"}
1
+ {"version":3,"file":"normalizeAdkPart.d.ts","sourceRoot":"","sources":["../src/normalizeAdkPart.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CA8BxB,CAAC"}
@@ -1,5 +1,3 @@
1
- import { AdkEvent } from "./types.js";
2
- //#region src/parseAdkEvent.d.ts
1
+ import type { AdkEvent } from "./types.js";
3
2
  export declare function parseAdkEventValue(value: unknown, errorPrefix: string): AdkEvent;
4
- //#endregion
5
3
  //# sourceMappingURL=parseAdkEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseAdkEvent.d.ts","names":[],"sources":["../src/parseAdkEvent.ts"],"mappings":";;wBAUgB,mBACd,gBACA,sBACC"}
1
+ {"version":3,"file":"parseAdkEvent.d.ts","sourceRoot":"","sources":["../src/parseAdkEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAgB;AASxC,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,GAClB,QAAQ,CAuDV"}
@@ -0,0 +1,2 @@
1
+ export declare const raceWithAbortSignal: <T>(signal: AbortSignal | undefined, operation: () => T | PromiseLike<T>) => Promise<T>;
2
+ //# sourceMappingURL=raceWithAbortSignal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raceWithAbortSignal.d.ts","sourceRoot":"","sources":["../src/raceWithAbortSignal.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,GAAI,CAAC,EACnC,QAAQ,WAAW,GAAG,SAAS,EAC/B,WAAW,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAClC,OAAO,CAAC,CAAC,CAqCX,CAAC"}
@@ -0,0 +1,45 @@
1
+ //#region src/raceWithAbortSignal.ts
2
+ const getAbortReason = (signal) => {
3
+ if (signal.reason !== void 0) return signal.reason;
4
+ const error = /* @__PURE__ */ new Error("The operation was aborted");
5
+ error.name = "AbortError";
6
+ return error;
7
+ };
8
+ const raceWithAbortSignal = (signal, operation) => {
9
+ if (!signal) try {
10
+ return Promise.resolve(operation());
11
+ } catch (error) {
12
+ return Promise.reject(error);
13
+ }
14
+ if (signal.aborted) return Promise.reject(getAbortReason(signal));
15
+ return new Promise((resolve, reject) => {
16
+ let settled = false;
17
+ const cleanup = () => signal.removeEventListener("abort", handleAbort);
18
+ const resolveOnce = (value) => {
19
+ if (settled) return;
20
+ settled = true;
21
+ cleanup();
22
+ resolve(value);
23
+ };
24
+ const rejectOnce = (error) => {
25
+ if (settled) return;
26
+ settled = true;
27
+ cleanup();
28
+ reject(error);
29
+ };
30
+ const handleAbort = () => rejectOnce(getAbortReason(signal));
31
+ signal.addEventListener("abort", handleAbort, { once: true });
32
+ let result;
33
+ try {
34
+ result = operation();
35
+ } catch (error) {
36
+ rejectOnce(error);
37
+ return;
38
+ }
39
+ Promise.resolve(result).then(resolveOnce, rejectOnce);
40
+ });
41
+ };
42
+ //#endregion
43
+ export { raceWithAbortSignal };
44
+
45
+ //# sourceMappingURL=raceWithAbortSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raceWithAbortSignal.js","names":[],"sources":["../src/raceWithAbortSignal.ts"],"sourcesContent":["const getAbortReason = (signal: AbortSignal): unknown => {\n if (signal.reason !== undefined) return signal.reason;\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n};\n\nexport const raceWithAbortSignal = <T>(\n signal: AbortSignal | undefined,\n operation: () => T | PromiseLike<T>,\n): Promise<T> => {\n if (!signal) {\n try {\n return Promise.resolve(operation());\n } catch (error) {\n return Promise.reject(error);\n }\n }\n if (signal.aborted) return Promise.reject(getAbortReason(signal));\n\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const cleanup = () => signal.removeEventListener(\"abort\", handleAbort);\n const resolveOnce = (value: T) => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve(value);\n };\n const rejectOnce = (error: unknown) => {\n if (settled) return;\n settled = true;\n cleanup();\n reject(error);\n };\n const handleAbort = () => rejectOnce(getAbortReason(signal));\n\n signal.addEventListener(\"abort\", handleAbort, { once: true });\n let result: T | PromiseLike<T>;\n try {\n result = operation();\n } catch (error) {\n rejectOnce(error);\n return;\n }\n Promise.resolve(result).then(resolveOnce, rejectOnce);\n });\n};\n"],"mappings":";AAAA,MAAM,kBAAkB,WAAiC;CACvD,IAAI,OAAO,WAAW,KAAA,GAAW,OAAO,OAAO;CAC/C,MAAM,wBAAQ,IAAI,MAAM,2BAA2B;CACnD,MAAM,OAAO;CACb,OAAO;AACT;AAEA,MAAa,uBACX,QACA,cACe;CACf,IAAI,CAAC,QACH,IAAI;EACF,OAAO,QAAQ,QAAQ,UAAU,CAAC;CACpC,SAAS,OAAO;EACd,OAAO,QAAQ,OAAO,KAAK;CAC7B;CAEF,IAAI,OAAO,SAAS,OAAO,QAAQ,OAAO,eAAe,MAAM,CAAC;CAEhE,OAAO,IAAI,SAAY,SAAS,WAAW;EACzC,IAAI,UAAU;EACd,MAAM,gBAAgB,OAAO,oBAAoB,SAAS,WAAW;EACrE,MAAM,eAAe,UAAa;GAChC,IAAI,SAAS;GACb,UAAU;GACV,QAAQ;GACR,QAAQ,KAAK;EACf;EACA,MAAM,cAAc,UAAmB;GACrC,IAAI,SAAS;GACb,UAAU;GACV,QAAQ;GACR,OAAO,KAAK;EACd;EACA,MAAM,oBAAoB,WAAW,eAAe,MAAM,CAAC;EAE3D,OAAO,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;EAC5D,IAAI;EACJ,IAAI;GACF,SAAS,UAAU;EACrB,SAAS,OAAO;GACd,WAAW,KAAK;GAChB;EACF;EACA,QAAQ,QAAQ,MAAM,CAAC,CAAC,KAAK,aAAa,UAAU;CACtD,CAAC;AACH"}
@@ -1,5 +1,3 @@
1
- import { SdkIdentity } from "assistant-cloud";
2
- //#region src/sdkIdentity.d.ts
1
+ import type { SdkIdentity } from "assistant-cloud";
3
2
  export declare const ADK_SDK: SdkIdentity;
4
- //#endregion
5
3
  //# sourceMappingURL=sdkIdentity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdkIdentity.d.ts","names":[],"sources":["../src/sdkIdentity.ts"],"mappings":";;qBAEa,SAAS"}
1
+ {"version":3,"file":"sdkIdentity.d.ts","sourceRoot":"","sources":["../src/sdkIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,WAMrB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  //#region src/sdkIdentity.ts
2
2
  const ADK_SDK = {
3
3
  name: "@assistant-ui/react-google-adk",
4
- version: "0.0.31"
4
+ version: "0.0.33"
5
5
  };
6
6
  //#endregion
7
7
  export { ADK_SDK };
@@ -1,32 +1,31 @@
1
- //#region src/server/adkEventStream.d.ts
2
1
  /**
3
2
  * The ADK SDK Event type. Intentionally loose to avoid requiring @google/adk.
4
3
  */
5
4
  type AdkSdkEvent = {
6
- id?: string;
7
- invocationId?: string;
8
- author?: string;
9
- branch?: string;
10
- partial?: boolean;
11
- turnComplete?: boolean;
12
- interrupted?: boolean;
13
- finishReason?: string;
14
- timestamp?: number;
15
- content?: {
16
- role?: string;
17
- parts?: Array<Record<string, unknown>>;
18
- };
19
- actions?: Record<string, unknown>;
20
- longRunningToolIds?: string[];
21
- errorCode?: string;
22
- errorMessage?: string;
23
- groundingMetadata?: unknown;
24
- citationMetadata?: unknown;
25
- usageMetadata?: unknown;
26
- customMetadata?: Record<string, unknown>;
5
+ id?: string;
6
+ invocationId?: string;
7
+ author?: string;
8
+ branch?: string;
9
+ partial?: boolean;
10
+ turnComplete?: boolean;
11
+ interrupted?: boolean;
12
+ finishReason?: string;
13
+ timestamp?: number;
14
+ content?: {
15
+ role?: string;
16
+ parts?: Array<Record<string, unknown>>;
17
+ };
18
+ actions?: Record<string, unknown>;
19
+ longRunningToolIds?: string[];
20
+ errorCode?: string;
21
+ errorMessage?: string;
22
+ groundingMetadata?: unknown;
23
+ citationMetadata?: unknown;
24
+ usageMetadata?: unknown;
25
+ customMetadata?: Record<string, unknown>;
27
26
  };
28
27
  export type AdkEventStreamOptions = {
29
- onError?: (error: unknown) => void;
28
+ onError?: (error: unknown) => void;
30
29
  };
31
30
  /**
32
31
  * Converts an AsyncGenerator of ADK SDK Events into an SSE Response.
@@ -39,5 +38,5 @@ export type AdkEventStreamOptions = {
39
38
  * ```
40
39
  */
41
40
  export declare const adkEventStream: (events: AsyncGenerator<AdkSdkEvent, void, undefined>, options?: AdkEventStreamOptions) => Response;
42
- //#endregion
41
+ export {};
43
42
  //# sourceMappingURL=adkEventStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adkEventStream.d.ts","names":[],"sources":["../../src/server/adkEventStream.ts"],"mappings":";;;;KAKK;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACE;IACA,QAAQ,MAAM;;EAEhB,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB;;YAyEP;EACV,WAAW;;;;;;;;;;;;qBA4BA,iBACX,QAAQ,eAAe,+BACvB,UAAU,0BACT"}
1
+ {"version":3,"file":"adkEventStream.d.ts","sourceRoot":"","sources":["../../src/server/adkEventStream.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,KAAK,WAAW,GAAG;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACxC,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAwEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAiBF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,EACpD,UAAU,qBAAqB,KAC9B,QAmDF,CAAC"}