@assistant-ui/react-google-adk 0.0.10 → 0.0.12

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 (69) hide show
  1. package/README.md +15 -128
  2. package/dist/AdkClient.d.ts +30 -26
  3. package/dist/AdkClient.d.ts.map +1 -1
  4. package/dist/AdkClient.js +131 -165
  5. package/dist/AdkClient.js.map +1 -1
  6. package/dist/AdkEventAccumulator.d.ts +43 -39
  7. package/dist/AdkEventAccumulator.d.ts.map +1 -1
  8. package/dist/AdkEventAccumulator.js +446 -531
  9. package/dist/AdkEventAccumulator.js.map +1 -1
  10. package/dist/AdkSessionAdapter.d.ts +40 -37
  11. package/dist/AdkSessionAdapter.d.ts.map +1 -1
  12. package/dist/AdkSessionAdapter.js +134 -155
  13. package/dist/AdkSessionAdapter.js.map +1 -1
  14. package/dist/contentToParts.d.ts +6 -2
  15. package/dist/contentToParts.d.ts.map +1 -1
  16. package/dist/contentToParts.js +37 -34
  17. package/dist/contentToParts.js.map +1 -1
  18. package/dist/convertAdkMessages.d.ts +7 -3
  19. package/dist/convertAdkMessages.d.ts.map +1 -1
  20. package/dist/convertAdkMessages.js +93 -86
  21. package/dist/convertAdkMessages.js.map +1 -1
  22. package/dist/hooks.d.ts +38 -35
  23. package/dist/hooks.d.ts.map +1 -1
  24. package/dist/hooks.js +132 -155
  25. package/dist/hooks.js.map +1 -1
  26. package/dist/index.d.ts +10 -11
  27. package/dist/index.js +10 -10
  28. package/dist/server/adkEventStream.d.ts +27 -25
  29. package/dist/server/adkEventStream.d.ts.map +1 -1
  30. package/dist/server/adkEventStream.js +91 -126
  31. package/dist/server/adkEventStream.js.map +1 -1
  32. package/dist/server/createAdkApiRoute.d.ts +26 -23
  33. package/dist/server/createAdkApiRoute.d.ts.map +1 -1
  34. package/dist/server/createAdkApiRoute.js +34 -37
  35. package/dist/server/createAdkApiRoute.js.map +1 -1
  36. package/dist/server/index.d.ts +4 -4
  37. package/dist/server/index.js +4 -4
  38. package/dist/server/parseAdkRequest.d.ts +21 -18
  39. package/dist/server/parseAdkRequest.d.ts.map +1 -1
  40. package/dist/server/parseAdkRequest.js +80 -88
  41. package/dist/server/parseAdkRequest.js.map +1 -1
  42. package/dist/structuredEvents.d.ts +6 -2
  43. package/dist/structuredEvents.d.ts.map +1 -1
  44. package/dist/structuredEvents.js +70 -75
  45. package/dist/structuredEvents.js.map +1 -1
  46. package/dist/types.d.ts +231 -227
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +15 -12
  49. package/dist/types.js.map +1 -1
  50. package/dist/useAdkMessages.d.ts +32 -26
  51. package/dist/useAdkMessages.d.ts.map +1 -1
  52. package/dist/useAdkMessages.js +155 -182
  53. package/dist/useAdkMessages.js.map +1 -1
  54. package/dist/useAdkRuntime.d.ts +43 -35
  55. package/dist/useAdkRuntime.d.ts.map +1 -1
  56. package/dist/useAdkRuntime.js +195 -273
  57. package/dist/useAdkRuntime.js.map +1 -1
  58. package/package.json +8 -8
  59. package/src/AdkEventAccumulator.test.ts +5 -5
  60. package/src/AdkSessionAdapter.test.ts +7 -7
  61. package/src/convertAdkMessages.test.ts +16 -16
  62. package/src/hooks.ts +0 -2
  63. package/src/index.ts +3 -12
  64. package/src/useAdkMessages.ts +0 -1
  65. package/src/useAdkRuntime.ts +9 -43
  66. package/dist/index.d.ts.map +0 -1
  67. package/dist/index.js.map +0 -1
  68. package/dist/server/index.d.ts.map +0 -1
  69. package/dist/server/index.js.map +0 -1
@@ -1,135 +1,100 @@
1
+ //#region src/server/adkEventStream.ts
1
2
  const convertSdkPart = (part) => {
2
- const result = {};
3
- if ("text" in part && typeof part.text === "string")
4
- result.text = part.text;
5
- if ("thought" in part && typeof part.thought === "boolean")
6
- result.thought = part.thought;
7
- if ("functionCall" in part && part.functionCall)
8
- result.functionCall = part.functionCall;
9
- if ("functionResponse" in part && part.functionResponse)
10
- result.functionResponse = part.functionResponse;
11
- if ("executableCode" in part && part.executableCode)
12
- result.executableCode = part.executableCode;
13
- if ("codeExecutionResult" in part && part.codeExecutionResult)
14
- result.codeExecutionResult = part.codeExecutionResult;
15
- if ("inlineData" in part && part.inlineData)
16
- result.inlineData = part.inlineData;
17
- if ("fileData" in part && part.fileData)
18
- result.fileData = part.fileData;
19
- return result;
3
+ const result = {};
4
+ if ("text" in part && typeof part.text === "string") result.text = part.text;
5
+ if ("thought" in part && typeof part.thought === "boolean") result.thought = part.thought;
6
+ if ("functionCall" in part && part.functionCall) result.functionCall = part.functionCall;
7
+ if ("functionResponse" in part && part.functionResponse) result.functionResponse = part.functionResponse;
8
+ if ("executableCode" in part && part.executableCode) result.executableCode = part.executableCode;
9
+ if ("codeExecutionResult" in part && part.codeExecutionResult) result.codeExecutionResult = part.codeExecutionResult;
10
+ if ("inlineData" in part && part.inlineData) result.inlineData = part.inlineData;
11
+ if ("fileData" in part && part.fileData) result.fileData = part.fileData;
12
+ return result;
20
13
  };
21
14
  const convertSdkActions = (actions) => {
22
- const result = {};
23
- if (actions.stateDelta != null)
24
- result.stateDelta = actions.stateDelta;
25
- if (actions.artifactDelta != null)
26
- result.artifactDelta = actions.artifactDelta;
27
- if (actions.transferToAgent != null)
28
- result.transferToAgent = actions.transferToAgent;
29
- if (actions.escalate != null)
30
- result.escalate = actions.escalate;
31
- if (actions.skipSummarization != null)
32
- result.skipSummarization = actions.skipSummarization;
33
- if (actions.requestedAuthConfigs != null)
34
- result.requestedAuthConfigs = actions.requestedAuthConfigs;
35
- if (actions.requestedToolConfirmations != null)
36
- result.requestedToolConfirmations = actions.requestedToolConfirmations;
37
- return result;
15
+ const result = {};
16
+ if (actions.stateDelta != null) result.stateDelta = actions.stateDelta;
17
+ if (actions.artifactDelta != null) result.artifactDelta = actions.artifactDelta;
18
+ if (actions.transferToAgent != null) result.transferToAgent = actions.transferToAgent;
19
+ if (actions.escalate != null) result.escalate = actions.escalate;
20
+ if (actions.skipSummarization != null) result.skipSummarization = actions.skipSummarization;
21
+ if (actions.requestedAuthConfigs != null) result.requestedAuthConfigs = actions.requestedAuthConfigs;
22
+ if (actions.requestedToolConfirmations != null) result.requestedToolConfirmations = actions.requestedToolConfirmations;
23
+ return result;
38
24
  };
39
25
  const convertSdkEvent = (event) => {
40
- const result = { id: event.id ?? "" };
41
- if (event.invocationId != null)
42
- result.invocationId = event.invocationId;
43
- if (event.author != null)
44
- result.author = event.author;
45
- if (event.branch != null)
46
- result.branch = event.branch;
47
- if (event.partial != null)
48
- result.partial = event.partial;
49
- if (event.turnComplete != null)
50
- result.turnComplete = event.turnComplete;
51
- if (event.interrupted != null)
52
- result.interrupted = event.interrupted;
53
- if (event.finishReason != null)
54
- result.finishReason = event.finishReason;
55
- if (event.timestamp != null)
56
- result.timestamp = event.timestamp;
57
- if (event.content) {
58
- const content = {};
59
- if (event.content.role != null)
60
- content.role = event.content.role;
61
- if (event.content.parts)
62
- content.parts = event.content.parts.map(convertSdkPart);
63
- result.content = content;
64
- }
65
- if (event.actions)
66
- result.actions = convertSdkActions(event.actions);
67
- if (event.longRunningToolIds)
68
- result.longRunningToolIds = event.longRunningToolIds;
69
- if (event.errorCode != null)
70
- result.errorCode = event.errorCode;
71
- if (event.errorMessage != null)
72
- result.errorMessage = event.errorMessage;
73
- if (event.groundingMetadata != null)
74
- result.groundingMetadata = event.groundingMetadata;
75
- if (event.citationMetadata != null)
76
- result.citationMetadata = event.citationMetadata;
77
- if (event.usageMetadata != null)
78
- result.usageMetadata = event.usageMetadata;
79
- if (event.customMetadata != null)
80
- result.customMetadata = event.customMetadata;
81
- return result;
26
+ const result = { id: event.id ?? "" };
27
+ if (event.invocationId != null) result.invocationId = event.invocationId;
28
+ if (event.author != null) result.author = event.author;
29
+ if (event.branch != null) result.branch = event.branch;
30
+ if (event.partial != null) result.partial = event.partial;
31
+ if (event.turnComplete != null) result.turnComplete = event.turnComplete;
32
+ if (event.interrupted != null) result.interrupted = event.interrupted;
33
+ if (event.finishReason != null) result.finishReason = event.finishReason;
34
+ if (event.timestamp != null) result.timestamp = event.timestamp;
35
+ if (event.content) {
36
+ const content = {};
37
+ if (event.content.role != null) content.role = event.content.role;
38
+ if (event.content.parts) content.parts = event.content.parts.map(convertSdkPart);
39
+ result.content = content;
40
+ }
41
+ if (event.actions) result.actions = convertSdkActions(event.actions);
42
+ if (event.longRunningToolIds) result.longRunningToolIds = event.longRunningToolIds;
43
+ if (event.errorCode != null) result.errorCode = event.errorCode;
44
+ if (event.errorMessage != null) result.errorMessage = event.errorMessage;
45
+ if (event.groundingMetadata != null) result.groundingMetadata = event.groundingMetadata;
46
+ if (event.citationMetadata != null) result.citationMetadata = event.citationMetadata;
47
+ if (event.usageMetadata != null) result.usageMetadata = event.usageMetadata;
48
+ if (event.customMetadata != null) result.customMetadata = event.customMetadata;
49
+ return result;
82
50
  };
83
51
  /**
84
- * Converts an AsyncGenerator of ADK SDK Events into an SSE Response.
85
- *
86
- * @example
87
- * ```ts
88
- * import { adkEventStream } from '@assistant-ui/react-google-adk/server';
89
- * const events = runner.runAsync({ userId, sessionId, newMessage });
90
- * return adkEventStream(events);
91
- * ```
92
- */
93
- export const adkEventStream = (events, options) => {
94
- const encoder = new TextEncoder();
95
- let cancelled = false;
96
- const stream = new ReadableStream({
97
- async start(controller) {
98
- // Initial SSE comment to keep connection alive through proxies
99
- controller.enqueue(encoder.encode(":ok\n\n"));
100
- try {
101
- for await (const event of events) {
102
- if (cancelled)
103
- break;
104
- const wireEvent = convertSdkEvent(event);
105
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(wireEvent)}\n\n`));
106
- }
107
- }
108
- catch (e) {
109
- if (!cancelled) {
110
- options?.onError?.(e);
111
- const errorEvent = {
112
- id: "",
113
- errorCode: "STREAM_ERROR",
114
- errorMessage: e instanceof Error ? e.message : "Unknown stream error",
115
- };
116
- controller.enqueue(encoder.encode(`data: ${JSON.stringify(errorEvent)}\n\n`));
117
- }
118
- }
119
- finally {
120
- controller.close();
121
- }
122
- },
123
- async cancel() {
124
- cancelled = true;
125
- await events.return?.(undefined);
126
- },
127
- });
128
- return new Response(stream, {
129
- headers: {
130
- "Content-Type": "text/event-stream",
131
- "Cache-Control": "no-cache",
132
- },
133
- });
52
+ * Converts an AsyncGenerator of ADK SDK Events into an SSE Response.
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * import { adkEventStream } from '@assistant-ui/react-google-adk/server';
57
+ * const events = runner.runAsync({ userId, sessionId, newMessage });
58
+ * return adkEventStream(events);
59
+ * ```
60
+ */
61
+ const adkEventStream = (events, options) => {
62
+ const encoder = new TextEncoder();
63
+ let cancelled = false;
64
+ const stream = new ReadableStream({
65
+ async start(controller) {
66
+ controller.enqueue(encoder.encode(":ok\n\n"));
67
+ try {
68
+ for await (const event of events) {
69
+ if (cancelled) break;
70
+ const wireEvent = convertSdkEvent(event);
71
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(wireEvent)}\n\n`));
72
+ }
73
+ } catch (e) {
74
+ if (!cancelled) {
75
+ options?.onError?.(e);
76
+ const errorEvent = {
77
+ id: "",
78
+ errorCode: "STREAM_ERROR",
79
+ errorMessage: e instanceof Error ? e.message : "Unknown stream error"
80
+ };
81
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify(errorEvent)}\n\n`));
82
+ }
83
+ } finally {
84
+ controller.close();
85
+ }
86
+ },
87
+ async cancel() {
88
+ cancelled = true;
89
+ await events.return?.(void 0);
90
+ }
91
+ });
92
+ return new Response(stream, { headers: {
93
+ "Content-Type": "text/event-stream",
94
+ "Cache-Control": "no-cache"
95
+ } });
134
96
  };
97
+ //#endregion
98
+ export { adkEventStream };
99
+
135
100
  //# sourceMappingURL=adkEventStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adkEventStream.js","sourceRoot":"","sources":["../../src/server/adkEventStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adkEventStream.js","names":[],"sources":["../../src/server/adkEventStream.ts"],"sourcesContent":["import type { AdkEvent, AdkEventActions, AdkEventPart } from \"../types\";\n\n/**\n * The ADK SDK Event type. Intentionally loose to avoid requiring @google/adk.\n */\ntype AdkSdkEvent = {\n id?: string;\n invocationId?: string;\n author?: string;\n branch?: string;\n partial?: boolean;\n turnComplete?: boolean;\n interrupted?: boolean;\n finishReason?: string;\n timestamp?: number;\n content?: {\n role?: string;\n parts?: Array<Record<string, unknown>>;\n };\n actions?: Record<string, unknown>;\n longRunningToolIds?: string[];\n errorCode?: string;\n errorMessage?: string;\n groundingMetadata?: unknown;\n citationMetadata?: unknown;\n usageMetadata?: unknown;\n customMetadata?: Record<string, unknown>;\n};\n\nconst convertSdkPart = (part: Record<string, unknown>): AdkEventPart => {\n const result: Record<string, unknown> = {};\n if (\"text\" in part && typeof part.text === \"string\") result.text = part.text;\n if (\"thought\" in part && typeof part.thought === \"boolean\")\n result.thought = part.thought;\n if (\"functionCall\" in part && part.functionCall)\n result.functionCall = part.functionCall;\n if (\"functionResponse\" in part && part.functionResponse)\n result.functionResponse = part.functionResponse;\n if (\"executableCode\" in part && part.executableCode)\n result.executableCode = part.executableCode;\n if (\"codeExecutionResult\" in part && part.codeExecutionResult)\n result.codeExecutionResult = part.codeExecutionResult;\n if (\"inlineData\" in part && part.inlineData)\n result.inlineData = part.inlineData;\n if (\"fileData\" in part && part.fileData) result.fileData = part.fileData;\n return result as AdkEventPart;\n};\n\nconst convertSdkActions = (\n actions: Record<string, unknown>,\n): AdkEventActions => {\n const result: Record<string, unknown> = {};\n if (actions.stateDelta != null) result.stateDelta = actions.stateDelta;\n if (actions.artifactDelta != null)\n result.artifactDelta = actions.artifactDelta;\n if (actions.transferToAgent != null)\n result.transferToAgent = actions.transferToAgent;\n if (actions.escalate != null) result.escalate = actions.escalate;\n if (actions.skipSummarization != null)\n result.skipSummarization = actions.skipSummarization;\n if (actions.requestedAuthConfigs != null)\n result.requestedAuthConfigs = actions.requestedAuthConfigs;\n if (actions.requestedToolConfirmations != null)\n result.requestedToolConfirmations = actions.requestedToolConfirmations;\n return result as AdkEventActions;\n};\n\nconst convertSdkEvent = (event: AdkSdkEvent): AdkEvent => {\n const result: Record<string, unknown> = { id: event.id ?? \"\" };\n if (event.invocationId != null) result.invocationId = event.invocationId;\n if (event.author != null) result.author = event.author;\n if (event.branch != null) result.branch = event.branch;\n if (event.partial != null) result.partial = event.partial;\n if (event.turnComplete != null) result.turnComplete = event.turnComplete;\n if (event.interrupted != null) result.interrupted = event.interrupted;\n if (event.finishReason != null) result.finishReason = event.finishReason;\n if (event.timestamp != null) result.timestamp = event.timestamp;\n if (event.content) {\n const content: Record<string, unknown> = {};\n if (event.content.role != null) content.role = event.content.role;\n if (event.content.parts)\n content.parts = event.content.parts.map(convertSdkPart);\n result.content = content;\n }\n if (event.actions) result.actions = convertSdkActions(event.actions);\n if (event.longRunningToolIds)\n result.longRunningToolIds = event.longRunningToolIds;\n if (event.errorCode != null) result.errorCode = event.errorCode;\n if (event.errorMessage != null) result.errorMessage = event.errorMessage;\n if (event.groundingMetadata != null)\n result.groundingMetadata = event.groundingMetadata;\n if (event.citationMetadata != null)\n result.citationMetadata = event.citationMetadata;\n if (event.usageMetadata != null) result.usageMetadata = event.usageMetadata;\n if (event.customMetadata != null)\n result.customMetadata = event.customMetadata;\n return result as AdkEvent;\n};\n\nexport type AdkEventStreamOptions = {\n onError?: (error: unknown) => void;\n};\n\n/**\n * Converts an AsyncGenerator of ADK SDK Events into an SSE Response.\n *\n * @example\n * ```ts\n * import { adkEventStream } from '@assistant-ui/react-google-adk/server';\n * const events = runner.runAsync({ userId, sessionId, newMessage });\n * return adkEventStream(events);\n * ```\n */\nexport const adkEventStream = (\n events: AsyncGenerator<AdkSdkEvent, void, undefined>,\n options?: AdkEventStreamOptions,\n): Response => {\n const encoder = new TextEncoder();\n let cancelled = false;\n const stream = new ReadableStream({\n async start(controller) {\n // Initial SSE comment to keep connection alive through proxies\n controller.enqueue(encoder.encode(\":ok\\n\\n\"));\n try {\n for await (const event of events) {\n if (cancelled) break;\n const wireEvent = convertSdkEvent(event);\n controller.enqueue(\n encoder.encode(`data: ${JSON.stringify(wireEvent)}\\n\\n`),\n );\n }\n } catch (e) {\n if (!cancelled) {\n options?.onError?.(e);\n const errorEvent: AdkEvent = {\n id: \"\",\n errorCode: \"STREAM_ERROR\",\n errorMessage:\n e instanceof Error ? e.message : \"Unknown stream error\",\n };\n controller.enqueue(\n encoder.encode(`data: ${JSON.stringify(errorEvent)}\\n\\n`),\n );\n }\n } finally {\n controller.close();\n }\n },\n async cancel() {\n cancelled = true;\n await events.return?.(undefined as any);\n },\n });\n\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n },\n });\n};\n"],"mappings":"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"}
@@ -1,30 +1,32 @@
1
- import { type AdkEventStreamOptions } from "./adkEventStream.js";
1
+ import { AdkEventStreamOptions } from "./adkEventStream.js";
2
+
3
+ //#region src/server/createAdkApiRoute.d.ts
2
4
  /**
3
5
  * Loose runner type matching the ADK SDK's Runner interface.
4
6
  * Avoids requiring `@google/adk` as a dependency.
5
7
  */
6
8
  type AdkRunner = {
7
- runAsync(options: Record<string, unknown>): AsyncGenerator<any, void, undefined>;
9
+ runAsync(options: Record<string, unknown>): AsyncGenerator<any, void, undefined>;
8
10
  };
9
- export type CreateAdkApiRouteOptions = {
10
- /**
11
- * ADK Runner instance.
12
- */
13
- runner: AdkRunner;
14
- /**
15
- * User ID to use for the ADK session. Can be a static string
16
- * or a function that extracts it from the request.
17
- */
18
- userId: string | ((req: Request) => string | Promise<string>);
19
- /**
20
- * Session ID to use. Can be a static string or a function
21
- * that extracts it from the request (e.g. from query params or headers).
22
- */
23
- sessionId: string | ((req: Request) => string | Promise<string>);
24
- /**
25
- * Error handler for stream errors.
26
- */
27
- onError?: AdkEventStreamOptions["onError"];
11
+ type CreateAdkApiRouteOptions = {
12
+ /**
13
+ * ADK Runner instance.
14
+ */
15
+ runner: AdkRunner;
16
+ /**
17
+ * User ID to use for the ADK session. Can be a static string
18
+ * or a function that extracts it from the request.
19
+ */
20
+ userId: string | ((req: Request) => string | Promise<string>);
21
+ /**
22
+ * Session ID to use. Can be a static string or a function
23
+ * that extracts it from the request (e.g. from query params or headers).
24
+ */
25
+ sessionId: string | ((req: Request) => string | Promise<string>);
26
+ /**
27
+ * Error handler for stream errors.
28
+ */
29
+ onError?: AdkEventStreamOptions["onError"];
28
30
  };
29
31
  /**
30
32
  * Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,
@@ -42,6 +44,7 @@ export type CreateAdkApiRouteOptions = {
42
44
  * });
43
45
  * ```
44
46
  */
45
- export declare function createAdkApiRoute(options: CreateAdkApiRouteOptions): (req: Request) => Promise<Response>;
46
- export {};
47
+ declare function createAdkApiRoute(options: CreateAdkApiRouteOptions): (req: Request) => Promise<Response>;
48
+ //#endregion
49
+ export { CreateAdkApiRouteOptions, createAdkApiRoute };
47
50
  //# sourceMappingURL=createAdkApiRoute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAdkApiRoute.d.ts","sourceRoot":"","sources":["../../src/server/createAdkApiRoute.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,4BAAyB;AAE9E;;;GAGG;AACH,KAAK,SAAS,GAAG;IACf,QAAQ,CACN,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;;OAGG;IACH,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9D;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjE;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA8BrC"}
1
+ {"version":3,"file":"createAdkApiRoute.d.ts","names":[],"sources":["../../src/server/createAdkApiRoute.ts"],"mappings":";;;;;AAC8E;;KAMzE,SAAA;EACH,QAAA,CACE,OAAA,EAAS,MAAA,oBACR,cAAc;AAAA;AAAA,KAGP,wBAAA;EAJR;;;EAQF,MAAA,EAAQ,SAAA;EAJE;;;;EAUV,MAAA,aAAmB,GAAA,EAAK,OAAA,cAAqB,OAAA;EAAA;;;;EAM7C,SAAA,aAAsB,GAAA,EAAK,OAAA,cAAqB,OAAA;EAKjB;;;EAA/B,OAAA,GAAU,qBAAA;AAAA;;;;;;;;;;AAAqB;AAmBjC;;;;;;iBAAgB,iBAAA,CACd,OAAA,EAAS,wBAAA,IACP,GAAA,EAAK,OAAA,KAAY,OAAA,CAAQ,QAAA"}
@@ -1,41 +1,38 @@
1
- import { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
2
1
  import { adkEventStream } from "./adkEventStream.js";
2
+ import { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
3
+ //#region src/server/createAdkApiRoute.ts
3
4
  /**
4
- * Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,
5
- * and `adkEventStream` into a single function.
6
- *
7
- * @example Next.js App Router
8
- * ```ts
9
- * import { createAdkApiRoute } from '@assistant-ui/react-google-adk/server';
10
- * import { runner } from './agent';
11
- *
12
- * export const POST = createAdkApiRoute({
13
- * runner,
14
- * userId: "default-user",
15
- * sessionId: (req) => new URL(req.url).searchParams.get("sessionId") ?? "default",
16
- * });
17
- * ```
18
- */
19
- export function createAdkApiRoute(options) {
20
- return async (req) => {
21
- const parsed = await parseAdkRequest(req);
22
- const newMessage = toAdkContent(parsed);
23
- const userId = typeof options.userId === "function"
24
- ? await options.userId(req)
25
- : options.userId;
26
- const sessionId = typeof options.sessionId === "function"
27
- ? await options.sessionId(req)
28
- : options.sessionId;
29
- const events = options.runner.runAsync({
30
- userId,
31
- sessionId,
32
- newMessage,
33
- ...(parsed.stateDelta != null && { stateDelta: parsed.stateDelta }),
34
- ...(parsed.config.runConfig != null && {
35
- runConfig: parsed.config.runConfig,
36
- }),
37
- });
38
- return adkEventStream(events, options.onError ? { onError: options.onError } : undefined);
39
- };
5
+ * Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,
6
+ * and `adkEventStream` into a single function.
7
+ *
8
+ * @example Next.js App Router
9
+ * ```ts
10
+ * import { createAdkApiRoute } from '@assistant-ui/react-google-adk/server';
11
+ * import { runner } from './agent';
12
+ *
13
+ * export const POST = createAdkApiRoute({
14
+ * runner,
15
+ * userId: "default-user",
16
+ * sessionId: (req) => new URL(req.url).searchParams.get("sessionId") ?? "default",
17
+ * });
18
+ * ```
19
+ */
20
+ function createAdkApiRoute(options) {
21
+ return async (req) => {
22
+ const parsed = await parseAdkRequest(req);
23
+ const newMessage = toAdkContent(parsed);
24
+ const userId = typeof options.userId === "function" ? await options.userId(req) : options.userId;
25
+ const sessionId = typeof options.sessionId === "function" ? await options.sessionId(req) : options.sessionId;
26
+ return adkEventStream(options.runner.runAsync({
27
+ userId,
28
+ sessionId,
29
+ newMessage,
30
+ ...parsed.stateDelta != null && { stateDelta: parsed.stateDelta },
31
+ ...parsed.config.runConfig != null && { runConfig: parsed.config.runConfig }
32
+ }), options.onError ? { onError: options.onError } : void 0);
33
+ };
40
34
  }
35
+ //#endregion
36
+ export { createAdkApiRoute };
37
+
41
38
  //# sourceMappingURL=createAdkApiRoute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAdkApiRoute.js","sourceRoot":"","sources":["../../src/server/createAdkApiRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,6BAA0B;AAClE,OAAO,EAAE,cAAc,EAA8B,4BAAyB;AAoC9E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiC;IAEjC,OAAO,KAAK,EAAE,GAAY,EAAqB,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,MAAM,GACV,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YAClC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAErB,MAAM,SAAS,GACb,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU;YACrC,CAAC,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAExB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YACrC,MAAM;YACN,SAAS;YACT,UAAU;YACV,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YACnE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI;gBACrC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;aACnC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,cAAc,CACnB,MAAM,EACN,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3D,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"createAdkApiRoute.js","names":[],"sources":["../../src/server/createAdkApiRoute.ts"],"sourcesContent":["import { parseAdkRequest, toAdkContent } from \"./parseAdkRequest\";\nimport { adkEventStream, type AdkEventStreamOptions } from \"./adkEventStream\";\n\n/**\n * Loose runner type matching the ADK SDK's Runner interface.\n * Avoids requiring `@google/adk` as a dependency.\n */\ntype AdkRunner = {\n runAsync(\n options: Record<string, unknown>,\n ): AsyncGenerator<any, void, undefined>;\n};\n\nexport type CreateAdkApiRouteOptions = {\n /**\n * ADK Runner instance.\n */\n runner: AdkRunner;\n\n /**\n * User ID to use for the ADK session. Can be a static string\n * or a function that extracts it from the request.\n */\n userId: string | ((req: Request) => string | Promise<string>);\n\n /**\n * Session ID to use. Can be a static string or a function\n * that extracts it from the request (e.g. from query params or headers).\n */\n sessionId: string | ((req: Request) => string | Promise<string>);\n\n /**\n * Error handler for stream errors.\n */\n onError?: AdkEventStreamOptions[\"onError\"];\n};\n\n/**\n * Creates a request handler that combines `parseAdkRequest`, `toAdkContent`,\n * and `adkEventStream` into a single function.\n *\n * @example Next.js App Router\n * ```ts\n * import { createAdkApiRoute } from '@assistant-ui/react-google-adk/server';\n * import { runner } from './agent';\n *\n * export const POST = createAdkApiRoute({\n * runner,\n * userId: \"default-user\",\n * sessionId: (req) => new URL(req.url).searchParams.get(\"sessionId\") ?? \"default\",\n * });\n * ```\n */\nexport function createAdkApiRoute(\n options: CreateAdkApiRouteOptions,\n): (req: Request) => Promise<Response> {\n return async (req: Request): Promise<Response> => {\n const parsed = await parseAdkRequest(req);\n const newMessage = toAdkContent(parsed);\n\n const userId =\n typeof options.userId === \"function\"\n ? await options.userId(req)\n : options.userId;\n\n const sessionId =\n typeof options.sessionId === \"function\"\n ? await options.sessionId(req)\n : options.sessionId;\n\n const events = options.runner.runAsync({\n userId,\n sessionId,\n newMessage,\n ...(parsed.stateDelta != null && { stateDelta: parsed.stateDelta }),\n ...(parsed.config.runConfig != null && {\n runConfig: parsed.config.runConfig,\n }),\n });\n\n return adkEventStream(\n events,\n options.onError ? { onError: options.onError } : undefined,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,kBACd,SACqC;CACrC,OAAO,OAAO,QAAoC;EAChD,MAAM,SAAS,MAAM,gBAAgB,GAAG;EACxC,MAAM,aAAa,aAAa,MAAM;EAEtC,MAAM,SACJ,OAAO,QAAQ,WAAW,aACtB,MAAM,QAAQ,OAAO,GAAG,IACxB,QAAQ;EAEd,MAAM,YACJ,OAAO,QAAQ,cAAc,aACzB,MAAM,QAAQ,UAAU,GAAG,IAC3B,QAAQ;EAYd,OAAO,eAVQ,QAAQ,OAAO,SAAS;GACrC;GACA;GACA;GACA,GAAI,OAAO,cAAc,QAAQ,EAAE,YAAY,OAAO,WAAW;GACjE,GAAI,OAAO,OAAO,aAAa,QAAQ,EACrC,WAAW,OAAO,OAAO,UAC3B;EACF,CAGO,GACL,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,KAAA,CACnD;CACF;AACF"}
@@ -1,4 +1,4 @@
1
- export { adkEventStream, type AdkEventStreamOptions } from "./adkEventStream.js";
2
- export { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
3
- export { createAdkApiRoute, type CreateAdkApiRouteOptions, } from "./createAdkApiRoute.js";
4
- //# sourceMappingURL=index.d.ts.map
1
+ import { AdkEventStreamOptions, adkEventStream } from "./adkEventStream.js";
2
+ import { CreateAdkApiRouteOptions, createAdkApiRoute } from "./createAdkApiRoute.js";
3
+ import { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
4
+ export { type AdkEventStreamOptions, type CreateAdkApiRouteOptions, adkEventStream, createAdkApiRoute, parseAdkRequest, toAdkContent };
@@ -1,4 +1,4 @@
1
- export { adkEventStream } from "./adkEventStream.js";
2
- export { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
3
- export { createAdkApiRoute, } from "./createAdkApiRoute.js";
4
- //# sourceMappingURL=index.js.map
1
+ import { adkEventStream } from "./adkEventStream.js";
2
+ import { parseAdkRequest, toAdkContent } from "./parseAdkRequest.js";
3
+ import { createAdkApiRoute } from "./createAdkApiRoute.js";
4
+ export { adkEventStream, createAdkApiRoute, parseAdkRequest, toAdkContent };
@@ -1,18 +1,20 @@
1
- import type { AdkSendMessageConfig } from "../types.js";
1
+ import { AdkSendMessageConfig } from "../types.js";
2
+
3
+ //#region src/server/parseAdkRequest.d.ts
2
4
  type ParsedAdkRequest = {
3
- type: "message";
4
- text: string;
5
- parts?: Array<Record<string, unknown>> | undefined;
6
- config: AdkSendMessageConfig;
7
- stateDelta?: Record<string, unknown> | undefined;
5
+ type: "message";
6
+ text: string;
7
+ parts?: Array<Record<string, unknown>> | undefined;
8
+ config: AdkSendMessageConfig;
9
+ stateDelta?: Record<string, unknown> | undefined;
8
10
  } | {
9
- type: "tool-result";
10
- toolCallId: string;
11
- toolName: string;
12
- result: unknown;
13
- isError: boolean;
14
- config: AdkSendMessageConfig;
15
- stateDelta?: Record<string, unknown> | undefined;
11
+ type: "tool-result";
12
+ toolCallId: string;
13
+ toolName: string;
14
+ result: unknown;
15
+ isError: boolean;
16
+ config: AdkSendMessageConfig;
17
+ stateDelta?: Record<string, unknown> | undefined;
16
18
  };
17
19
  /**
18
20
  * Parses an incoming HTTP request into a structured ADK request.
@@ -35,7 +37,7 @@ type ParsedAdkRequest = {
35
37
  * }
36
38
  * ```
37
39
  */
38
- export declare const parseAdkRequest: (request: Request) => Promise<ParsedAdkRequest>;
40
+ declare const parseAdkRequest: (request: Request) => Promise<ParsedAdkRequest>;
39
41
  /**
40
42
  * Converts a parsed ADK request into a Google GenAI Content object
41
43
  * suitable for `Runner.runAsync({ newMessage })`.
@@ -48,9 +50,10 @@ export declare const parseAdkRequest: (request: Request) => Promise<ParsedAdkReq
48
50
  * return adkEventStream(events);
49
51
  * ```
50
52
  */
51
- export declare const toAdkContent: (parsed: ParsedAdkRequest) => {
52
- role: string;
53
- parts: Array<Record<string, unknown>>;
53
+ declare const toAdkContent: (parsed: ParsedAdkRequest) => {
54
+ role: string;
55
+ parts: Array<Record<string, unknown>>;
54
56
  };
55
- export {};
57
+ //#endregion
58
+ export { parseAdkRequest, toAdkContent };
56
59
  //# sourceMappingURL=parseAdkRequest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseAdkRequest.d.ts","sourceRoot":"","sources":["../../src/server/parseAdkRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAiB;AAErD,KAAK,gBAAgB,GACjB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACnD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClD,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAClD,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,SAAS,OAAO,KACf,OAAO,CAAC,gBAAgB,CAwC1B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,gBAAgB,KACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAsBvD,CAAC"}
1
+ {"version":3,"file":"parseAdkRequest.d.ts","names":[],"sources":["../../src/server/parseAdkRequest.ts"],"mappings":";;;KAEK,gBAAA;EAEC,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,KAAA,CAAM,MAAA;EACd,MAAA,EAAQ,oBAAA;EACR,UAAA,GAAa,MAAA;AAAA;EAGb,IAAA;EACA,UAAA;EACA,QAAA;EACA,MAAA;EACA,OAAA;EACA,MAAA,EAAQ,oBAAA;EACR,UAAA,GAAa,MAAA;AAAA;;;;;;;;;;;;;;;;;;AAAM;AAwBzB;;;cAAa,eAAA,GACX,OAAA,EAAS,OAAA,KACR,OAAA,CAAQ,gBAAA;;;;;;;;;;AAAgB;AAsD3B;;cAAa,YAAA,GACX,MAAA,EAAQ,gBAAA;EACL,IAAA;EAAc,KAAA,EAAO,KAAA,CAAM,MAAA;AAAA"}