@better-agent/client 0.1.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,99 @@
1
+ import { E as UIMessage, K as AgentNameFromApp, M as BetterAgentClient, Y as ModalitiesForAgent, b as PendingToolApproval, f as SendResult, i as ApproveToolCallParams, k as AgentClientError, l as RetryResult, p as SetMessagesInput, r as AgentStatus, t as AgentChatControllerOptions, u as SendMessageInputForAgent } from "../controller-CJ79_cSR.mjs";
2
+ import { Accessor } from "solid-js";
3
+
4
+ //#region src/solid/types.d.ts
5
+ /** Plain value or Solid accessor. */
6
+ type MaybeAccessor<T> = T | Accessor<T>;
7
+ /** Options for `useAgent`. */
8
+ type UseAgentOptions<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> = AgentChatControllerOptions<TApp, TAgentName>;
9
+ /** Return type of `useAgent`. */
10
+ interface UseAgentResult<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> {
11
+ /** Stable local chat id. */
12
+ id: Accessor<string>;
13
+ /** Conversation messages. */
14
+ messages: Accessor<UIMessage[]>;
15
+ /** Current request status. */
16
+ status: Accessor<AgentStatus>;
17
+ /** Latest client error. */
18
+ error: Accessor<AgentClientError | undefined>;
19
+ /** Latest stream id. */
20
+ streamId: Accessor<string | undefined>;
21
+ /** Latest run id. */
22
+ runId: Accessor<string | undefined>;
23
+ /** Conversation id, when configured. */
24
+ conversationId: Accessor<string | undefined>;
25
+ /** True while a request is active. */
26
+ isLoading: Accessor<boolean>;
27
+ /** True while streaming events are being consumed. */
28
+ isStreaming: Accessor<boolean>;
29
+ /** Pending tool approvals. */
30
+ pendingToolApprovals: Accessor<PendingToolApproval[]>;
31
+ /** Sends a message. */
32
+ sendMessage<const TModalities extends ModalitiesForAgent<TApp, TAgentName> | undefined = undefined>(input: SendMessageInputForAgent<TApp, TAgentName, TModalities>, options?: {
33
+ signal?: AbortSignal;
34
+ }): Promise<SendResult>;
35
+ /** Retries the most recent user message. */
36
+ regenerate(): Promise<void>;
37
+ /** Retries one user message. */
38
+ retryMessage(localId: string): Promise<RetryResult>;
39
+ /** Stops the active run or stream. */
40
+ stop(): void;
41
+ /** Resumes one stream. */
42
+ resumeStream(options: {
43
+ streamId: string;
44
+ afterSeq?: number;
45
+ }): Promise<void>;
46
+ /** Resumes the active conversation stream. */
47
+ resumeConversation(options?: {
48
+ afterSeq?: number;
49
+ }): Promise<void>;
50
+ /** Approves or denies a tool call. */
51
+ approveToolCall(params: ApproveToolCallParams): Promise<void>;
52
+ /** Clears the latest error. */
53
+ clearError(): void;
54
+ /** Resets local state. */
55
+ reset(): void;
56
+ /** Replaces the local messages. */
57
+ setMessages(input: SetMessagesInput): void;
58
+ }
59
+ //#endregion
60
+ //#region src/solid/useAgent.d.ts
61
+ /**
62
+ * Solid primitive for talking to one Better Agent conversation.
63
+ *
64
+ * Returns reactive chat state and chat actions.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * const agent = useAgent(client, {
69
+ * agent: "assistant",
70
+ * conversationId: "conv_123",
71
+ * });
72
+ *
73
+ * await agent.sendMessage("Hello");
74
+ *
75
+ * console.log(agent.messages());
76
+ * console.log(agent.status());
77
+ * agent.stop();
78
+ * ```
79
+ *
80
+ * @example
81
+ * ```tsx
82
+ * function Chat() {
83
+ * const agent = useAgent(client, { agent: "assistant" });
84
+ *
85
+ * return (
86
+ * <div>
87
+ * <For each={agent.messages()}>
88
+ * {(message) => <div>{message.role}</div>}
89
+ * </For>
90
+ * <button onClick={() => agent.sendMessage("Hello")}>Send</button>
91
+ * </div>
92
+ * );
93
+ * }
94
+ * ```
95
+ */
96
+ declare function useAgent<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>>(client: MaybeAccessor<BetterAgentClient<TApp>>, options: MaybeAccessor<UseAgentOptions<TApp, TAgentName>>): UseAgentResult<TApp, TAgentName>;
97
+ //#endregion
98
+ export { type SetMessagesInput, type UseAgentOptions, type UseAgentResult, useAgent };
99
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/solid/types.ts","../../src/solid/useAgent.ts"],"mappings":";;;;;KAiBY,aAAA,MAAmB,CAAA,GAAI,QAAA,CAAS,CAAA;;KAGhC,eAAA,oCAEW,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,KAC7D,0BAAA,CAA2B,IAAA,EAAM,UAAA;;UAGpB,cAAA,oCAEM,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA;EAXvC;EActB,EAAA,EAAI,QAAA;EAd2B;EAgB/B,QAAA,EAAU,QAAA,CAAS,SAAA;EAhBsB;EAkBzC,MAAA,EAAQ,QAAA,CAAS,WAAA;EAfT;EAiBR,KAAA,EAAO,QAAA,CAAS,gBAAA;EAjBO;EAmBvB,QAAA,EAAU,QAAA;EAjBS;EAmBnB,KAAA,EAAO,QAAA;EAnBqC;EAqB5C,cAAA,EAAgB,QAAA;EApBiB;EAsBjC,SAAA,EAAW,QAAA;EAtBe;EAwB1B,WAAA,EAAa,QAAA;EA1Bb;EA4BA,oBAAA,EAAsB,QAAA,CAAS,mBAAA;EA3BZ;EA6BnB,WAAA,2BAC8B,kBAAA,CAAmB,IAAA,EAAM,UAAA,2BAEnD,KAAA,EAAO,wBAAA,CAAyB,IAAA,EAAM,UAAA,EAAY,WAAA,GAClD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACtB,OAAA,CAAQ,UAAA;EAjCX;EAmCA,UAAA,IAAc,OAAA;EAnCmB;EAqCjC,YAAA,CAAa,OAAA,WAAkB,OAAA,CAAQ,WAAA;EArCI;EAuC3C,IAAA;EApC2B;EAsC3B,YAAA,CAAa,OAAA;IAAW,QAAA;IAAkB,QAAA;EAAA,IAAsB,OAAA;EApCpB;EAsC5C,kBAAA,CAAmB,OAAA;IAAY,QAAA;EAAA,IAAsB,OAAA;EA/BpC;EAiCjB,eAAA,CAAgB,MAAA,EAAQ,qBAAA,GAAwB,OAAA;EA/BhC;EAiChB,UAAA;EA/BU;EAiCV,KAAA;EA7BgB;EA+BhB,WAAA,CAAY,KAAA,EAAO,gBAAA;AAAA;;;;AAzDvB;;;;;;;;;;;;;;AAGA;;;;;;;;;;;;;;;;;;;;iBC6BgB,QAAA,oCAEO,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,EAAA,CAE7D,MAAA,EAAQ,aAAA,CAAc,iBAAA,CAAkB,IAAA,IACxC,OAAA,EAAS,aAAA,CAAc,eAAA,CAAgB,IAAA,EAAM,UAAA,KAC9C,cAAA,CAAe,IAAA,EAAM,UAAA"}
@@ -0,0 +1,130 @@
1
+ import { t as AgentChatController } from "../controller-Cf_JhTdJ.mjs";
2
+ import { n as getLatestUserMessageId, r as normalizeSendInput, t as cloneControllerOptions } from "../utils-CiHUj_BW.mjs";
3
+ import { createRenderEffect, createSignal, onCleanup, onMount } from "solid-js";
4
+
5
+ //#region src/solid/useAgent.ts
6
+ const resolve = (value) => typeof value === "function" ? value() : value;
7
+ /**
8
+ * Solid primitive for talking to one Better Agent conversation.
9
+ *
10
+ * Returns reactive chat state and chat actions.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const agent = useAgent(client, {
15
+ * agent: "assistant",
16
+ * conversationId: "conv_123",
17
+ * });
18
+ *
19
+ * await agent.sendMessage("Hello");
20
+ *
21
+ * console.log(agent.messages());
22
+ * console.log(agent.status());
23
+ * agent.stop();
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * function Chat() {
29
+ * const agent = useAgent(client, { agent: "assistant" });
30
+ *
31
+ * return (
32
+ * <div>
33
+ * <For each={agent.messages()}>
34
+ * {(message) => <div>{message.role}</div>}
35
+ * </For>
36
+ * <button onClick={() => agent.sendMessage("Hello")}>Send</button>
37
+ * </div>
38
+ * );
39
+ * }
40
+ * ```
41
+ */
42
+ function useAgent(client, options) {
43
+ const controller = new AgentChatController(resolve(client), cloneControllerOptions(resolve(options)));
44
+ const [snapshot, setSnapshot] = createSignal(controller.getSnapshot());
45
+ /** Pushes the latest client and options into the controller. */
46
+ const syncController = () => {
47
+ controller.updateClient(resolve(client));
48
+ controller.updateOptions(cloneControllerOptions(resolve(options)));
49
+ };
50
+ const unsubscribe = controller.subscribe(() => {
51
+ setSnapshot(controller.getSnapshot());
52
+ });
53
+ createRenderEffect(() => {
54
+ syncController();
55
+ });
56
+ onMount(() => {
57
+ syncController();
58
+ controller.init();
59
+ });
60
+ onCleanup(() => {
61
+ unsubscribe();
62
+ controller.destroy();
63
+ });
64
+ const messages = () => snapshot().messages;
65
+ const id = () => snapshot().id;
66
+ const status = () => snapshot().status;
67
+ const error = () => snapshot().error;
68
+ const streamId = () => snapshot().streamId;
69
+ const runId = () => snapshot().runId;
70
+ const isLoading = () => snapshot().isLoading;
71
+ const isStreaming = () => snapshot().isStreaming;
72
+ const conversationId = () => snapshot().conversationId;
73
+ const pendingToolApprovals = () => snapshot().pendingToolApprovals;
74
+ return {
75
+ id,
76
+ messages,
77
+ status,
78
+ error,
79
+ streamId,
80
+ runId,
81
+ conversationId,
82
+ isLoading,
83
+ isStreaming,
84
+ pendingToolApprovals,
85
+ sendMessage: (input, requestOptions) => {
86
+ syncController();
87
+ return controller.sendMessage(normalizeSendInput(input), requestOptions);
88
+ },
89
+ regenerate: async () => {
90
+ syncController();
91
+ await controller.retryMessage(getLatestUserMessageId(controller));
92
+ },
93
+ retryMessage: (localId) => {
94
+ syncController();
95
+ return controller.retryMessage(localId);
96
+ },
97
+ stop: () => {
98
+ syncController();
99
+ controller.stop();
100
+ },
101
+ resumeStream: (resumeOptions) => {
102
+ syncController();
103
+ return controller.resumeStream(resumeOptions);
104
+ },
105
+ resumeConversation: (resumeOptions) => {
106
+ syncController();
107
+ return controller.resumeConversation(resumeOptions);
108
+ },
109
+ approveToolCall: (params) => {
110
+ syncController();
111
+ return controller.approveToolCall(params);
112
+ },
113
+ clearError: () => {
114
+ syncController();
115
+ controller.clearError();
116
+ },
117
+ reset: () => {
118
+ syncController();
119
+ controller.reset();
120
+ },
121
+ setMessages: (input) => {
122
+ syncController();
123
+ controller.setMessages(input);
124
+ }
125
+ };
126
+ }
127
+
128
+ //#endregion
129
+ export { useAgent };
130
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/solid/useAgent.ts"],"sourcesContent":["import { createRenderEffect, createSignal, onCleanup, onMount } from \"solid-js\";\nimport { AgentChatController } from \"../core/controller\";\nimport {\n cloneControllerOptions,\n getLatestUserMessageId,\n normalizeSendInput,\n} from \"../framework-internals/utils\";\nimport type { BetterAgentClient } from \"../types/client\";\nimport type { AgentNameFromApp } from \"../types/client-type-helpers\";\nimport type { MaybeAccessor, UseAgentOptions, UseAgentResult } from \"./types\";\n\nconst resolve = <T>(value: MaybeAccessor<T>): T =>\n typeof value === \"function\" ? (value as () => T)() : value;\n\n/**\n * Solid primitive for talking to one Better Agent conversation.\n *\n * Returns reactive chat state and chat actions.\n *\n * @example\n * ```ts\n * const agent = useAgent(client, {\n * agent: \"assistant\",\n * conversationId: \"conv_123\",\n * });\n *\n * await agent.sendMessage(\"Hello\");\n *\n * console.log(agent.messages());\n * console.log(agent.status());\n * agent.stop();\n * ```\n *\n * @example\n * ```tsx\n * function Chat() {\n * const agent = useAgent(client, { agent: \"assistant\" });\n *\n * return (\n * <div>\n * <For each={agent.messages()}>\n * {(message) => <div>{message.role}</div>}\n * </For>\n * <button onClick={() => agent.sendMessage(\"Hello\")}>Send</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useAgent<\n TApp = unknown,\n TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>,\n>(\n client: MaybeAccessor<BetterAgentClient<TApp>>,\n options: MaybeAccessor<UseAgentOptions<TApp, TAgentName>>,\n): UseAgentResult<TApp, TAgentName> {\n const controller = new AgentChatController<TApp, TAgentName>(\n resolve(client),\n cloneControllerOptions(resolve(options)),\n );\n const [snapshot, setSnapshot] = createSignal(controller.getSnapshot());\n\n /** Pushes the latest client and options into the controller. */\n const syncController = () => {\n controller.updateClient(resolve(client));\n controller.updateOptions(\n cloneControllerOptions(resolve(options)) as UseAgentOptions<TApp, TAgentName>,\n );\n };\n\n const unsubscribe = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n\n createRenderEffect(() => {\n syncController();\n });\n\n onMount(() => {\n syncController();\n controller.init();\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const messages = () => snapshot().messages;\n const id = () => snapshot().id;\n const status = () => snapshot().status;\n const error = () => snapshot().error;\n const streamId = () => snapshot().streamId;\n const runId = () => snapshot().runId;\n const isLoading = () => snapshot().isLoading;\n const isStreaming = () => snapshot().isStreaming;\n const conversationId = () => snapshot().conversationId;\n const pendingToolApprovals = () => snapshot().pendingToolApprovals;\n\n return {\n id,\n messages,\n status,\n error,\n streamId,\n runId,\n conversationId,\n isLoading,\n isStreaming,\n pendingToolApprovals,\n sendMessage: (input, requestOptions) => {\n syncController();\n return controller.sendMessage(normalizeSendInput(input), requestOptions);\n },\n regenerate: async () => {\n syncController();\n await controller.retryMessage(getLatestUserMessageId(controller));\n },\n retryMessage: (localId) => {\n syncController();\n return controller.retryMessage(localId);\n },\n stop: () => {\n syncController();\n controller.stop();\n },\n resumeStream: (resumeOptions) => {\n syncController();\n return controller.resumeStream(resumeOptions);\n },\n resumeConversation: (resumeOptions) => {\n syncController();\n return controller.resumeConversation(resumeOptions);\n },\n approveToolCall: (params) => {\n syncController();\n return controller.approveToolCall(params);\n },\n clearError: () => {\n syncController();\n controller.clearError();\n },\n reset: () => {\n syncController();\n controller.reset();\n },\n setMessages: (input) => {\n syncController();\n controller.setMessages(input);\n },\n };\n}\n"],"mappings":";;;;;AAWA,MAAM,WAAc,UAChB,OAAO,UAAU,aAAc,OAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCzD,SAAgB,SAIZ,QACA,SACgC;CAChC,MAAM,aAAa,IAAI,oBACnB,QAAQ,OAAO,EACf,uBAAuB,QAAQ,QAAQ,CAAC,CAC3C;CACD,MAAM,CAAC,UAAU,eAAe,aAAa,WAAW,aAAa,CAAC;;CAGtE,MAAM,uBAAuB;AACzB,aAAW,aAAa,QAAQ,OAAO,CAAC;AACxC,aAAW,cACP,uBAAuB,QAAQ,QAAQ,CAAC,CAC3C;;CAGL,MAAM,cAAc,WAAW,gBAAgB;AAC3C,cAAY,WAAW,aAAa,CAAC;GACvC;AAEF,0BAAyB;AACrB,kBAAgB;GAClB;AAEF,eAAc;AACV,kBAAgB;AAChB,aAAW,MAAM;GACnB;AAEF,iBAAgB;AACZ,eAAa;AACb,aAAW,SAAS;GACtB;CAEF,MAAM,iBAAiB,UAAU,CAAC;CAClC,MAAM,WAAW,UAAU,CAAC;CAC5B,MAAM,eAAe,UAAU,CAAC;CAChC,MAAM,cAAc,UAAU,CAAC;CAC/B,MAAM,iBAAiB,UAAU,CAAC;CAClC,MAAM,cAAc,UAAU,CAAC;CAC/B,MAAM,kBAAkB,UAAU,CAAC;CACnC,MAAM,oBAAoB,UAAU,CAAC;CACrC,MAAM,uBAAuB,UAAU,CAAC;CACxC,MAAM,6BAA6B,UAAU,CAAC;AAE9C,QAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,OAAO,mBAAmB;AACpC,mBAAgB;AAChB,UAAO,WAAW,YAAY,mBAAmB,MAAM,EAAE,eAAe;;EAE5E,YAAY,YAAY;AACpB,mBAAgB;AAChB,SAAM,WAAW,aAAa,uBAAuB,WAAW,CAAC;;EAErE,eAAe,YAAY;AACvB,mBAAgB;AAChB,UAAO,WAAW,aAAa,QAAQ;;EAE3C,YAAY;AACR,mBAAgB;AAChB,cAAW,MAAM;;EAErB,eAAe,kBAAkB;AAC7B,mBAAgB;AAChB,UAAO,WAAW,aAAa,cAAc;;EAEjD,qBAAqB,kBAAkB;AACnC,mBAAgB;AAChB,UAAO,WAAW,mBAAmB,cAAc;;EAEvD,kBAAkB,WAAW;AACzB,mBAAgB;AAChB,UAAO,WAAW,gBAAgB,OAAO;;EAE7C,kBAAkB;AACd,mBAAgB;AAChB,cAAW,YAAY;;EAE3B,aAAa;AACT,mBAAgB;AAChB,cAAW,OAAO;;EAEtB,cAAc,UAAU;AACpB,mBAAgB;AAChB,cAAW,YAAY,MAAM;;EAEpC"}
@@ -0,0 +1,83 @@
1
+ import { K as AgentNameFromApp, M as BetterAgentClient, Y as ModalitiesForAgent, f as SendResult, i as ApproveToolCallParams, l as RetryResult, m as SubmitInput, n as AgentChatSnapshot, p as SetMessagesInput, t as AgentChatControllerOptions, u as SendMessageInputForAgent } from "../controller-CJ79_cSR.mjs";
2
+ import { Readable } from "svelte/store";
3
+
4
+ //#region src/svelte/types.d.ts
5
+ /** Options for `createAgentChat`. */
6
+ type AgentChatOptions<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> = AgentChatControllerOptions<TApp, TAgentName>;
7
+ /** Snapshot shape exposed by the store. */
8
+ type AgentChatState = AgentChatSnapshot;
9
+ /** Return type of `createAgentChat`. */
10
+ interface AgentChatStore<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> extends Readable<AgentChatSnapshot> {
11
+ /** Sends a message. */
12
+ sendMessage<const TModalities extends ModalitiesForAgent<TApp, TAgentName> | undefined = undefined>(input: SendMessageInputForAgent<TApp, TAgentName, TModalities>, options?: {
13
+ signal?: AbortSignal;
14
+ }): Promise<SendResult>;
15
+ /** Retries the most recent user message. */
16
+ regenerate(): Promise<void>;
17
+ /** Retries one user message. */
18
+ retryMessage(localId: string): Promise<RetryResult>;
19
+ /** Stops the active run or stream. */
20
+ stop(): void;
21
+ /** Resumes one stream. */
22
+ resumeStream(options: {
23
+ streamId: string;
24
+ afterSeq?: number;
25
+ }): Promise<void>;
26
+ /** Resumes the active conversation stream. */
27
+ resumeConversation(options?: {
28
+ afterSeq?: number;
29
+ }): Promise<void>;
30
+ /** Approves or denies a tool call. */
31
+ approveToolCall(params: ApproveToolCallParams): Promise<void>;
32
+ /** Clears the latest error. */
33
+ clearError(): void;
34
+ /** Resets local state. */
35
+ reset(): void;
36
+ /** Replaces the local messages. */
37
+ setMessages(input: SetMessagesInput): void;
38
+ /** Updates controller options for future actions. */
39
+ updateOptions(input: Partial<AgentChatControllerOptions<TApp, TAgentName>>): void;
40
+ /** Replaces the transport client for future actions. */
41
+ updateClient(client: BetterAgentClient<TApp>): void;
42
+ }
43
+ //#endregion
44
+ //#region src/svelte/createAgentChat.d.ts
45
+ /**
46
+ * Creates a Svelte store for one Better Agent conversation.
47
+ *
48
+ * Returns a readable store plus chat actions.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const agent = createAgentChat(client, {
53
+ * agent: "assistant",
54
+ * conversationId: "conv_123",
55
+ * });
56
+ *
57
+ * await agent.sendMessage("Hello");
58
+ *
59
+ * const unsubscribe = agent.subscribe((snapshot) => {
60
+ * console.log(snapshot.messages);
61
+ * console.log(snapshot.status);
62
+ * });
63
+ *
64
+ * unsubscribe();
65
+ * ```
66
+ *
67
+ * @example
68
+ * ```svelte
69
+ * <script lang="ts">
70
+ * const agent = createAgentChat(client, { agent: "assistant" });
71
+ * </script>
72
+ *
73
+ * {#each $agent.messages as message}
74
+ * <div>{message.role}</div>
75
+ * {/each}
76
+ *
77
+ * <button on:click={() => agent.sendMessage("Hello")}>Send</button>
78
+ * ```
79
+ */
80
+ declare function createAgentChat<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>>(client: BetterAgentClient<TApp>, options: AgentChatOptions<TApp, TAgentName>): AgentChatStore<TApp, TAgentName>;
81
+ //#endregion
82
+ export { type AgentChatOptions, type AgentChatState, type AgentChatStore, type SetMessagesInput, type SubmitInput, createAgentChat };
83
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/svelte/types.ts","../../src/svelte/createAgentChat.ts"],"mappings":";;;;;KAgBY,gBAAA,oCAEW,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,KAC7D,0BAAA,CAA2B,IAAA,EAAM,UAAA;;KAGzB,cAAA,GAAiB,iBAAA;;UAGZ,cAAA,oCAEM,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,WACvD,QAAA,CAAS,iBAAA;EATY;EAW3B,WAAA,2BAC8B,kBAAA,CAAmB,IAAA,EAAM,UAAA,2BAEnD,KAAA,EAAO,wBAAA,CAAyB,IAAA,EAAM,UAAA,EAAY,WAAA,GAClD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACtB,OAAA,CAAQ,UAAA;EAhBe;EAkB1B,UAAA,IAAc,OAAA;EAnBd;EAqBA,YAAA,CAAa,OAAA,WAAkB,OAAA,CAAQ,WAAA;EArBH;EAuBpC,IAAA;EAvB6D;EAyB7D,YAAA,CAAa,OAAA;IAAW,QAAA;IAAkB,QAAA;EAAA,IAAsB,OAAA;EAxBrB;EA0B3C,kBAAA,CAAmB,OAAA;IAAY,QAAA;EAAA,IAAsB,OAAA;EAvB5B;EAyBzB,eAAA,CAAgB,MAAA,EAAQ,qBAAA,GAAwB,OAAA;EAtBnC;EAwBb,UAAA;EAxB2B;EA0B3B,KAAA;EAxBmB;EA0BnB,WAAA,CAAY,KAAA,EAAO,gBAAA;EA1ByB;EA4B5C,aAAA,CAAc,KAAA,EAAO,OAAA,CAAQ,0BAAA,CAA2B,IAAA,EAAM,UAAA;EAxBb;EA0BjD,YAAA,CAAa,MAAA,EAAQ,iBAAA,CAAkB,IAAA;AAAA;;;;AAzC3C;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;AAGA;;;;;;iBCqBgB,eAAA,oCAEO,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,EAAA,CAE7D,MAAA,EAAQ,iBAAA,CAAkB,IAAA,GAC1B,OAAA,EAAS,gBAAA,CAAiB,IAAA,EAAM,UAAA,IACjC,cAAA,CAAe,IAAA,EAAM,UAAA"}
@@ -0,0 +1,107 @@
1
+ import { t as AgentChatController } from "../controller-Cf_JhTdJ.mjs";
2
+ import { n as getLatestUserMessageId, r as normalizeSendInput, t as cloneControllerOptions } from "../utils-CiHUj_BW.mjs";
3
+ import { writable } from "svelte/store";
4
+
5
+ //#region src/svelte/createAgentChat.ts
6
+ /**
7
+ * Creates a Svelte store for one Better Agent conversation.
8
+ *
9
+ * Returns a readable store plus chat actions.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const agent = createAgentChat(client, {
14
+ * agent: "assistant",
15
+ * conversationId: "conv_123",
16
+ * });
17
+ *
18
+ * await agent.sendMessage("Hello");
19
+ *
20
+ * const unsubscribe = agent.subscribe((snapshot) => {
21
+ * console.log(snapshot.messages);
22
+ * console.log(snapshot.status);
23
+ * });
24
+ *
25
+ * unsubscribe();
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```svelte
30
+ * <script lang="ts">
31
+ * const agent = createAgentChat(client, { agent: "assistant" });
32
+ * <\/script>
33
+ *
34
+ * {#each $agent.messages as message}
35
+ * <div>{message.role}</div>
36
+ * {/each}
37
+ *
38
+ * <button on:click={() => agent.sendMessage("Hello")}>Send</button>
39
+ * ```
40
+ */
41
+ function createAgentChat(client, options) {
42
+ let currentClient = client;
43
+ let currentOptions = options;
44
+ let controller = null;
45
+ const getController = () => {
46
+ if (!controller) controller = new AgentChatController(currentClient, cloneControllerOptions(currentOptions));
47
+ return controller;
48
+ };
49
+ /** Pushes the latest client and options into the controller. */
50
+ const syncController = () => {
51
+ const activeController = getController();
52
+ activeController.updateClient(currentClient);
53
+ activeController.updateOptions(cloneControllerOptions(currentOptions));
54
+ return activeController;
55
+ };
56
+ return {
57
+ subscribe: writable(getController().getSnapshot(), (set) => {
58
+ const activeController = syncController();
59
+ const unsubscribe = activeController.subscribe(() => {
60
+ set(activeController.getSnapshot());
61
+ });
62
+ set(activeController.getSnapshot());
63
+ if (typeof window !== "undefined") activeController.init();
64
+ return () => {
65
+ unsubscribe();
66
+ activeController.destroy();
67
+ if (controller === activeController) controller = null;
68
+ };
69
+ }).subscribe,
70
+ sendMessage: (input, requestOptions) => syncController().sendMessage(normalizeSendInput(input), requestOptions),
71
+ regenerate: async () => {
72
+ const activeController = syncController();
73
+ await activeController.retryMessage(getLatestUserMessageId(activeController));
74
+ },
75
+ retryMessage: (localId) => syncController().retryMessage(localId),
76
+ stop: () => {
77
+ syncController().stop();
78
+ },
79
+ resumeStream: (resumeOptions) => syncController().resumeStream(resumeOptions),
80
+ resumeConversation: (resumeOptions) => syncController().resumeConversation(resumeOptions),
81
+ approveToolCall: (params) => syncController().approveToolCall(params),
82
+ clearError: () => {
83
+ syncController().clearError();
84
+ },
85
+ reset: () => {
86
+ syncController().reset();
87
+ },
88
+ setMessages: (input) => {
89
+ syncController().setMessages(input);
90
+ },
91
+ updateOptions: (input) => {
92
+ currentOptions = {
93
+ ...currentOptions,
94
+ ...input
95
+ };
96
+ syncController();
97
+ },
98
+ updateClient: (nextClient) => {
99
+ currentClient = nextClient;
100
+ syncController();
101
+ }
102
+ };
103
+ }
104
+
105
+ //#endregion
106
+ export { createAgentChat };
107
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/svelte/createAgentChat.ts"],"sourcesContent":["import { writable } from \"svelte/store\";\nimport { AgentChatController } from \"../core/controller\";\nimport {\n cloneControllerOptions,\n getLatestUserMessageId,\n normalizeSendInput,\n} from \"../framework-internals/utils\";\nimport type { BetterAgentClient } from \"../types/client\";\nimport type { AgentNameFromApp } from \"../types/client-type-helpers\";\nimport type { AgentChatOptions, AgentChatSnapshot, AgentChatStore } from \"./types\";\n\n/**\n * Creates a Svelte store for one Better Agent conversation.\n *\n * Returns a readable store plus chat actions.\n *\n * @example\n * ```ts\n * const agent = createAgentChat(client, {\n * agent: \"assistant\",\n * conversationId: \"conv_123\",\n * });\n *\n * await agent.sendMessage(\"Hello\");\n *\n * const unsubscribe = agent.subscribe((snapshot) => {\n * console.log(snapshot.messages);\n * console.log(snapshot.status);\n * });\n *\n * unsubscribe();\n * ```\n *\n * @example\n * ```svelte\n * <script lang=\"ts\">\n * const agent = createAgentChat(client, { agent: \"assistant\" });\n * </script>\n *\n * {#each $agent.messages as message}\n * <div>{message.role}</div>\n * {/each}\n *\n * <button on:click={() => agent.sendMessage(\"Hello\")}>Send</button>\n * ```\n */\nexport function createAgentChat<\n TApp = unknown,\n TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>,\n>(\n client: BetterAgentClient<TApp>,\n options: AgentChatOptions<TApp, TAgentName>,\n): AgentChatStore<TApp, TAgentName> {\n let currentClient = client;\n let currentOptions = options;\n let controller: AgentChatController<TApp, TAgentName> | null = null;\n\n const getController = () => {\n if (!controller) {\n controller = new AgentChatController<TApp, TAgentName>(\n currentClient,\n cloneControllerOptions(currentOptions),\n );\n }\n return controller;\n };\n\n /** Pushes the latest client and options into the controller. */\n const syncController = () => {\n const activeController = getController();\n activeController.updateClient(currentClient);\n activeController.updateOptions(\n cloneControllerOptions(currentOptions) as AgentChatOptions<TApp, TAgentName>,\n );\n return activeController;\n };\n\n const store = writable(\n getController().getSnapshot(),\n (set: (value: AgentChatSnapshot) => void) => {\n const activeController = syncController();\n const unsubscribe = activeController.subscribe(() => {\n set(activeController.getSnapshot());\n });\n\n set(activeController.getSnapshot());\n if (typeof window !== \"undefined\") {\n activeController.init();\n }\n\n return () => {\n unsubscribe();\n activeController.destroy();\n if (controller === activeController) {\n controller = null;\n }\n };\n },\n );\n\n return {\n subscribe: store.subscribe,\n sendMessage: (input, requestOptions) =>\n syncController().sendMessage(normalizeSendInput(input), requestOptions),\n regenerate: async () => {\n const activeController = syncController();\n await activeController.retryMessage(getLatestUserMessageId(activeController));\n },\n retryMessage: (localId) => syncController().retryMessage(localId),\n stop: () => {\n syncController().stop();\n },\n resumeStream: (resumeOptions) => syncController().resumeStream(resumeOptions),\n resumeConversation: (resumeOptions) => syncController().resumeConversation(resumeOptions),\n approveToolCall: (params) => syncController().approveToolCall(params),\n clearError: () => {\n syncController().clearError();\n },\n reset: () => {\n syncController().reset();\n },\n setMessages: (input) => {\n syncController().setMessages(input);\n },\n updateOptions: (input) => {\n currentOptions = {\n ...currentOptions,\n ...input,\n };\n syncController();\n },\n updateClient: (nextClient) => {\n currentClient = nextClient;\n syncController();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,SAAgB,gBAIZ,QACA,SACgC;CAChC,IAAI,gBAAgB;CACpB,IAAI,iBAAiB;CACrB,IAAI,aAA2D;CAE/D,MAAM,sBAAsB;AACxB,MAAI,CAAC,WACD,cAAa,IAAI,oBACb,eACA,uBAAuB,eAAe,CACzC;AAEL,SAAO;;;CAIX,MAAM,uBAAuB;EACzB,MAAM,mBAAmB,eAAe;AACxC,mBAAiB,aAAa,cAAc;AAC5C,mBAAiB,cACb,uBAAuB,eAAe,CACzC;AACD,SAAO;;AA0BX,QAAO;EACH,WAxBU,SACV,eAAe,CAAC,aAAa,GAC5B,QAA4C;GACzC,MAAM,mBAAmB,gBAAgB;GACzC,MAAM,cAAc,iBAAiB,gBAAgB;AACjD,QAAI,iBAAiB,aAAa,CAAC;KACrC;AAEF,OAAI,iBAAiB,aAAa,CAAC;AACnC,OAAI,OAAO,WAAW,YAClB,kBAAiB,MAAM;AAG3B,gBAAa;AACT,iBAAa;AACb,qBAAiB,SAAS;AAC1B,QAAI,eAAe,iBACf,cAAa;;IAI5B,CAGoB;EACjB,cAAc,OAAO,mBACjB,gBAAgB,CAAC,YAAY,mBAAmB,MAAM,EAAE,eAAe;EAC3E,YAAY,YAAY;GACpB,MAAM,mBAAmB,gBAAgB;AACzC,SAAM,iBAAiB,aAAa,uBAAuB,iBAAiB,CAAC;;EAEjF,eAAe,YAAY,gBAAgB,CAAC,aAAa,QAAQ;EACjE,YAAY;AACR,mBAAgB,CAAC,MAAM;;EAE3B,eAAe,kBAAkB,gBAAgB,CAAC,aAAa,cAAc;EAC7E,qBAAqB,kBAAkB,gBAAgB,CAAC,mBAAmB,cAAc;EACzF,kBAAkB,WAAW,gBAAgB,CAAC,gBAAgB,OAAO;EACrE,kBAAkB;AACd,mBAAgB,CAAC,YAAY;;EAEjC,aAAa;AACT,mBAAgB,CAAC,OAAO;;EAE5B,cAAc,UAAU;AACpB,mBAAgB,CAAC,YAAY,MAAM;;EAEvC,gBAAgB,UAAU;AACtB,oBAAiB;IACb,GAAG;IACH,GAAG;IACN;AACD,mBAAgB;;EAEpB,eAAe,eAAe;AAC1B,mBAAgB;AAChB,mBAAgB;;EAEvB"}
@@ -0,0 +1,34 @@
1
+ //#region src/framework-internals/utils.ts
2
+ /**
3
+ * Normalizes the public `sendMessage` shorthand into the controller's full input shape.
4
+ *
5
+ * Framework wrappers allow `sendMessage("hello")`, but the controller expects
6
+ * an object like `{ input: "hello" }`.
7
+ */
8
+ const normalizeSendInput = (input) => typeof input === "string" ? { input } : input;
9
+ /**
10
+ * Returns the newest user message id so integrations can implement `regenerate()`.
11
+ *
12
+ * Regeneration is modeled as "retry the last user-authored message". If the
13
+ * conversation has no user message yet, regeneration is not possible.
14
+ */
15
+ const getLatestUserMessageId = (controller) => {
16
+ const latestUserMessage = [...controller.getMessages()].reverse().find((message) => message.role === "user");
17
+ if (!latestUserMessage) throw new Error("Cannot regenerate without a prior user message.");
18
+ return latestUserMessage.localId;
19
+ };
20
+ /**
21
+ * Copies controller options before wrappers pass them into `AgentChatController`.
22
+ *
23
+ * This keeps the controller from sharing the same `resume` or
24
+ * `optimisticUserMessage` objects with the caller.
25
+ */
26
+ const cloneControllerOptions = (options) => ({
27
+ ...options,
28
+ ...typeof options.resume === "object" && options.resume !== null ? { resume: { ...options.resume } } : {},
29
+ ...typeof options.optimisticUserMessage === "object" && options.optimisticUserMessage !== null && !Array.isArray(options.optimisticUserMessage) ? { optimisticUserMessage: { ...options.optimisticUserMessage } } : {}
30
+ });
31
+
32
+ //#endregion
33
+ export { getLatestUserMessageId as n, normalizeSendInput as r, cloneControllerOptions as t };
34
+ //# sourceMappingURL=utils-CiHUj_BW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-CiHUj_BW.mjs","names":[],"sources":["../src/framework-internals/utils.ts"],"sourcesContent":["import type { AgentChatController } from \"../core/controller\";\nimport type { AgentNameFromApp } from \"../types/client-type-helpers\";\nimport type { AgentChatControllerOptions, ControllerRunInput } from \"../types/controller\";\n\n/**\n * Normalizes the public `sendMessage` shorthand into the controller's full input shape.\n *\n * Framework wrappers allow `sendMessage(\"hello\")`, but the controller expects\n * an object like `{ input: \"hello\" }`.\n */\nexport const normalizeSendInput = (input: ControllerRunInput | string): ControllerRunInput =>\n typeof input === \"string\" ? { input } : input;\n\n/**\n * Returns the newest user message id so integrations can implement `regenerate()`.\n *\n * Regeneration is modeled as \"retry the last user-authored message\". If the\n * conversation has no user message yet, regeneration is not possible.\n */\nexport const getLatestUserMessageId = <\n TApp,\n TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>,\n>(\n controller: AgentChatController<TApp, TAgentName>,\n): string => {\n const latestUserMessage = [...controller.getMessages()]\n .reverse()\n .find((message) => message.role === \"user\");\n\n if (!latestUserMessage) {\n throw new Error(\"Cannot regenerate without a prior user message.\");\n }\n\n return latestUserMessage.localId;\n};\n\n/**\n * Copies controller options before wrappers pass them into `AgentChatController`.\n *\n * This keeps the controller from sharing the same `resume` or\n * `optimisticUserMessage` objects with the caller.\n */\nexport const cloneControllerOptions = <\n TApp,\n TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>,\n>(\n options: AgentChatControllerOptions<TApp, TAgentName>,\n): AgentChatControllerOptions<TApp, TAgentName> => ({\n ...options,\n ...(typeof options.resume === \"object\" && options.resume !== null\n ? { resume: { ...options.resume } }\n : {}),\n ...(typeof options.optimisticUserMessage === \"object\" &&\n options.optimisticUserMessage !== null &&\n !Array.isArray(options.optimisticUserMessage)\n ? {\n optimisticUserMessage: {\n ...options.optimisticUserMessage,\n },\n }\n : {}),\n});\n"],"mappings":";;;;;;;AAUA,MAAa,sBAAsB,UAC/B,OAAO,UAAU,WAAW,EAAE,OAAO,GAAG;;;;;;;AAQ5C,MAAa,0BAIT,eACS;CACT,MAAM,oBAAoB,CAAC,GAAG,WAAW,aAAa,CAAC,CAClD,SAAS,CACT,MAAM,YAAY,QAAQ,SAAS,OAAO;AAE/C,KAAI,CAAC,kBACD,OAAM,IAAI,MAAM,kDAAkD;AAGtE,QAAO,kBAAkB;;;;;;;;AAS7B,MAAa,0BAIT,aACgD;CAChD,GAAG;CACH,GAAI,OAAO,QAAQ,WAAW,YAAY,QAAQ,WAAW,OACvD,EAAE,QAAQ,EAAE,GAAG,QAAQ,QAAQ,EAAE,GACjC,EAAE;CACR,GAAI,OAAO,QAAQ,0BAA0B,YAC7C,QAAQ,0BAA0B,QAClC,CAAC,MAAM,QAAQ,QAAQ,sBAAsB,GACvC,EACI,uBAAuB,EACnB,GAAG,QAAQ,uBACd,EACJ,GACD,EAAE;CACX"}
@@ -0,0 +1,95 @@
1
+ import { E as UIMessage, K as AgentNameFromApp, M as BetterAgentClient, Y as ModalitiesForAgent, b as PendingToolApproval, f as SendResult, i as ApproveToolCallParams, k as AgentClientError, l as RetryResult, p as SetMessagesInput, r as AgentStatus, t as AgentChatControllerOptions, u as SendMessageInputForAgent } from "../controller-CJ79_cSR.mjs";
2
+ import { ComputedRef, MaybeRefOrGetter } from "vue";
3
+
4
+ //#region src/vue/types.d.ts
5
+ /** Options for `useAgent`. */
6
+ type UseAgentOptions<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> = AgentChatControllerOptions<TApp, TAgentName>;
7
+ /** Return type of `useAgent`. */
8
+ interface UseAgentResult<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>> {
9
+ /** Stable local chat id. */
10
+ id: ComputedRef<string>;
11
+ /** Conversation messages. */
12
+ messages: ComputedRef<UIMessage[]>;
13
+ /** Current request status. */
14
+ status: ComputedRef<AgentStatus>;
15
+ /** Latest client error. */
16
+ error: ComputedRef<AgentClientError | undefined>;
17
+ /** Latest stream id. */
18
+ streamId: ComputedRef<string | undefined>;
19
+ /** Latest run id. */
20
+ runId: ComputedRef<string | undefined>;
21
+ /** Conversation id, when configured. */
22
+ conversationId: ComputedRef<string | undefined>;
23
+ /** True while a request is active. */
24
+ isLoading: ComputedRef<boolean>;
25
+ /** True while streaming events are being consumed. */
26
+ isStreaming: ComputedRef<boolean>;
27
+ /** Pending tool approvals. */
28
+ pendingToolApprovals: ComputedRef<PendingToolApproval[]>;
29
+ /** Sends a message. */
30
+ sendMessage<const TModalities extends ModalitiesForAgent<TApp, TAgentName> | undefined = undefined>(input: SendMessageInputForAgent<TApp, TAgentName, TModalities>, options?: {
31
+ signal?: AbortSignal;
32
+ }): Promise<SendResult>;
33
+ /** Retries the most recent user message. */
34
+ regenerate(): Promise<void>;
35
+ /** Retries one user message. */
36
+ retryMessage(localId: string): Promise<RetryResult>;
37
+ /** Stops the active run or stream. */
38
+ stop(): void;
39
+ /** Resumes one stream. */
40
+ resumeStream(options: {
41
+ streamId: string;
42
+ afterSeq?: number;
43
+ }): Promise<void>;
44
+ /** Resumes the active conversation stream. */
45
+ resumeConversation(options?: {
46
+ afterSeq?: number;
47
+ }): Promise<void>;
48
+ /** Approves or denies a tool call. */
49
+ approveToolCall(params: ApproveToolCallParams): Promise<void>;
50
+ /** Clears the latest error. */
51
+ clearError(): void;
52
+ /** Resets local state. */
53
+ reset(): void;
54
+ /** Replaces the local messages. */
55
+ setMessages(input: SetMessagesInput): void;
56
+ }
57
+ //#endregion
58
+ //#region src/vue/useAgent.d.ts
59
+ /**
60
+ * Vue composable for talking to one Better Agent conversation.
61
+ *
62
+ * Returns reactive chat state and chat actions.
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * const agent = useAgent(client, {
67
+ * agent: "assistant",
68
+ * conversationId: "conv_123",
69
+ * });
70
+ *
71
+ * await agent.sendMessage("Hello");
72
+ *
73
+ * console.log(agent.messages.value);
74
+ * console.log(agent.status.value);
75
+ * agent.stop();
76
+ * ```
77
+ *
78
+ * @example
79
+ * ```vue
80
+ * <script setup lang="ts">
81
+ * const agent = useAgent(client, { agent: "assistant" });
82
+ * </script>
83
+ *
84
+ * <template>
85
+ * <div v-for="message in agent.messages.value" :key="message.localId">
86
+ * {{ message.role }}
87
+ * </div>
88
+ * <button @click="agent.sendMessage('Hello')">Send</button>
89
+ * </template>
90
+ * ```
91
+ */
92
+ declare function useAgent<TApp = unknown, TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>>(client: MaybeRefOrGetter<BetterAgentClient<TApp>>, options: MaybeRefOrGetter<UseAgentOptions<TApp, TAgentName>>): UseAgentResult<TApp, TAgentName>;
93
+ //#endregion
94
+ export { type SetMessagesInput, type UseAgentOptions, type UseAgentResult, useAgent };
95
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/vue/types.ts","../../src/vue/useAgent.ts"],"mappings":";;;;;KAiBY,eAAA,oCAEW,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,KAC7D,0BAAA,CAA2B,IAAA,EAAM,UAAA;;UAGpB,cAAA,oCAEM,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA;EANjB;EAS5C,EAAA,EAAI,WAAA;EAR6B;EAUjC,QAAA,EAAU,WAAA,CAAY,SAAA;EAVI;EAY1B,MAAA,EAAQ,WAAA,CAAY,WAAA;EAdpB;EAgBA,KAAA,EAAO,WAAA,CAAY,gBAAA;EAfA;EAiBnB,QAAA,EAAU,WAAA;EAjBkC;EAmB5C,KAAA,EAAO,WAAA;EAlBP;EAoBA,cAAA,EAAgB,WAAA;EApBiB;EAsBjC,SAAA,EAAW,WAAA;EAtBgC;EAwB3C,WAAA,EAAa,WAAA;EArBc;EAuB3B,oBAAA,EAAsB,WAAA,CAAY,mBAAA;EArBE;EAuBpC,WAAA,2BAC8B,kBAAA,CAAmB,IAAA,EAAM,UAAA,2BAEnD,KAAA,EAAO,wBAAA,CAAyB,IAAA,EAAM,UAAA,EAAY,WAAA,GAClD,OAAA;IAAY,MAAA,GAAS,WAAA;EAAA,IACtB,OAAA,CAAQ,UAAA;EAzBP;EA2BJ,UAAA,IAAc,OAAA;EAzBJ;EA2BV,YAAA,CAAa,OAAA,WAAkB,OAAA,CAAQ,WAAA;EAzB/B;EA2BR,IAAA;EAzBO;EA2BP,YAAA,CAAa,OAAA;IAAW,QAAA;IAAkB,QAAA;EAAA,IAAsB,OAAA;EAjBnD;EAmBb,kBAAA,CAAmB,OAAA;IAAY,QAAA;EAAA,IAAsB,OAAA;EAdE;EAgBvD,eAAA,CAAgB,MAAA,EAAQ,qBAAA,GAAwB,OAAA;EAdZ;EAgBpC,UAAA;EAhBsD;EAkBtD,KAAA;EAjByB;EAmBzB,WAAA,CAAY,KAAA,EAAO,gBAAA;AAAA;;;AAtDvB;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;;;;;;AANA,iBC4BgB,QAAA,oCAEO,gBAAA,CAAiB,IAAA,IAAQ,gBAAA,CAAiB,IAAA,EAAA,CAE7D,MAAA,EAAQ,gBAAA,CAAiB,iBAAA,CAAkB,IAAA,IAC3C,OAAA,EAAS,gBAAA,CAAiB,eAAA,CAAgB,IAAA,EAAM,UAAA,KACjD,cAAA,CAAe,IAAA,EAAM,UAAA"}