@better-agent/client 0.1.0-canary.5 → 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controller-B7G0xSYW.d.mts +365 -0
- package/dist/controller-B7G0xSYW.d.mts.map +1 -0
- package/dist/controller-xMlzSCc7.mjs +1342 -0
- package/dist/controller-xMlzSCc7.mjs.map +1 -0
- package/dist/index.d.mts +8 -262
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +240 -596
- package/dist/index.mjs.map +1 -1
- package/dist/preact/index.d.mts +21 -89
- package/dist/preact/index.d.mts.map +1 -1
- package/dist/preact/index.mjs +48 -122
- package/dist/preact/index.mjs.map +1 -1
- package/dist/react/index.d.mts +21 -89
- package/dist/react/index.d.mts.map +1 -1
- package/dist/react/index.mjs +47 -111
- package/dist/react/index.mjs.map +1 -1
- package/dist/solid/index.d.mts +27 -87
- package/dist/solid/index.d.mts.map +1 -1
- package/dist/solid/index.mjs +40 -108
- package/dist/solid/index.mjs.map +1 -1
- package/dist/svelte/index.d.mts +22 -75
- package/dist/svelte/index.d.mts.map +1 -1
- package/dist/svelte/index.mjs +18 -92
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/vue/index.d.mts +27 -84
- package/dist/vue/index.d.mts.map +1 -1
- package/dist/vue/index.mjs +43 -136
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +5 -9
- package/README.md +0 -3
- package/dist/controller-BrBUfjhZ.mjs +0 -2124
- package/dist/controller-BrBUfjhZ.mjs.map +0 -1
- package/dist/controller-CJ79_cSR.d.mts +0 -657
- package/dist/controller-CJ79_cSR.d.mts.map +0 -1
- package/dist/utils-CiHUj_BW.mjs +0 -34
- package/dist/utils-CiHUj_BW.mjs.map +0 -1
package/dist/solid/index.mjs
CHANGED
|
@@ -1,127 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as getLatestUserMessageId, r as normalizeSendInput, t as cloneControllerOptions } from "../utils-CiHUj_BW.mjs";
|
|
1
|
+
import { n as createAgentController } from "../controller-xMlzSCc7.mjs";
|
|
3
2
|
import { createRenderEffect, createSignal, onCleanup, onMount } from "solid-js";
|
|
4
3
|
|
|
5
4
|
//#region src/solid/useAgent.ts
|
|
6
5
|
const resolve = (value) => typeof value === "function" ? value() : value;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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)));
|
|
6
|
+
function useAgent(agent, options) {
|
|
7
|
+
const readOptions = () => options === void 0 ? {} : resolve(options) ?? {};
|
|
8
|
+
const toolHandlers = new Proxy({}, { get(_target, key) {
|
|
9
|
+
return readOptions().toolHandlers?.[key];
|
|
10
|
+
} });
|
|
11
|
+
const initialOptions = readOptions();
|
|
12
|
+
const controller = createAgentController(agent, {
|
|
13
|
+
initialMessages: initialOptions.initialMessages,
|
|
14
|
+
initialState: initialOptions.initialState,
|
|
15
|
+
initialInterruptState: initialOptions.initialInterruptState,
|
|
16
|
+
resume: initialOptions.resume,
|
|
17
|
+
context: initialOptions.context,
|
|
18
|
+
threadId: initialOptions.threadId,
|
|
19
|
+
toolHandlers,
|
|
20
|
+
onEvent: (event) => readOptions().onEvent?.(event),
|
|
21
|
+
onFinish: (finish) => readOptions().onFinish?.(finish),
|
|
22
|
+
onError: (error) => readOptions().onError?.(error)
|
|
23
|
+
});
|
|
44
24
|
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
25
|
const unsubscribe = controller.subscribe(() => {
|
|
51
26
|
setSnapshot(controller.getSnapshot());
|
|
52
27
|
});
|
|
53
28
|
createRenderEffect(() => {
|
|
54
|
-
|
|
29
|
+
readOptions();
|
|
55
30
|
});
|
|
56
31
|
onMount(() => {
|
|
57
|
-
|
|
58
|
-
controller.init();
|
|
32
|
+
controller.start();
|
|
59
33
|
});
|
|
60
34
|
onCleanup(() => {
|
|
61
35
|
unsubscribe();
|
|
62
|
-
controller.
|
|
36
|
+
controller.stop();
|
|
63
37
|
});
|
|
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
38
|
return {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
status,
|
|
78
|
-
error,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
}
|
|
39
|
+
messages: () => snapshot().messages,
|
|
40
|
+
state: () => snapshot().state,
|
|
41
|
+
status: () => snapshot().status,
|
|
42
|
+
error: () => snapshot().error,
|
|
43
|
+
runId: () => snapshot().runId,
|
|
44
|
+
threadId: () => snapshot().threadId,
|
|
45
|
+
isRunning: () => snapshot().isRunning,
|
|
46
|
+
pendingClientTools: () => snapshot().pendingClientTools,
|
|
47
|
+
pendingToolApprovals: () => snapshot().pendingToolApprovals,
|
|
48
|
+
sendMessage: (input, sendOptions) => controller.sendMessage(input, sendOptions),
|
|
49
|
+
stop: () => controller.stop(),
|
|
50
|
+
resume: (resume) => controller.resume(resume),
|
|
51
|
+
selectThread: (threadId) => controller.selectThread(threadId),
|
|
52
|
+
clearThread: () => controller.clearThread(),
|
|
53
|
+
loadMessages: (threadId) => controller.loadMessages(threadId),
|
|
54
|
+
approveToolCall: (interruptId, metadata) => controller.approveToolCall(interruptId, metadata),
|
|
55
|
+
rejectToolCall: (interruptId, metadata) => controller.rejectToolCall(interruptId, metadata),
|
|
56
|
+
setMessages: (messages) => controller.setMessages(messages)
|
|
125
57
|
};
|
|
126
58
|
}
|
|
127
59
|
|
package/dist/solid/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/solid/useAgent.ts"],"sourcesContent":["import { createRenderEffect, createSignal, onCleanup, onMount } from \"solid-js\";\nimport {
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/solid/useAgent.ts"],"sourcesContent":["import { createRenderEffect, createSignal, onCleanup, onMount } from \"solid-js\";\nimport { createAgentController } from \"../core/controller\";\nimport type { AgentNameOf } from \"../core/inference\";\nimport type {\n AgentControllerOptions,\n BetterAgentClientAgentHandle,\n BetterAgentClientAgentMemoryHandle,\n} from \"../types\";\nimport type { MaybeAccessor, UseAgentOptions, UseAgentResult } from \"./types\";\n\nconst resolve = <T>(value: MaybeAccessor<T>): T =>\n typeof value === \"function\" ? (value as () => T)() : value;\n\nexport function useAgent<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(\n agent: BetterAgentClientAgentMemoryHandle<TApp, TName>,\n options?: MaybeAccessor<UseAgentOptions<TApp, TName> | undefined>,\n): UseAgentResult<TApp, TName>;\nexport function useAgent<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(\n agent: BetterAgentClientAgentHandle<TApp, TName>,\n options?: MaybeAccessor<UseAgentOptions<TApp, TName> | undefined>,\n): UseAgentResult<TApp, TName>;\nexport function useAgent<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(\n agent: BetterAgentClientAgentHandle<TApp, TName>,\n options?: MaybeAccessor<UseAgentOptions<TApp, TName> | undefined>,\n): UseAgentResult<TApp, TName> {\n const readOptions = (): UseAgentOptions<TApp, TName> =>\n (options === undefined ? {} : (resolve(options) ?? {})) as UseAgentOptions<TApp, TName>;\n const toolHandlers = new Proxy(\n {},\n {\n get(_target, key) {\n const handlers = readOptions().toolHandlers as\n | Record<PropertyKey, unknown>\n | undefined;\n return handlers?.[key];\n },\n },\n ) as AgentControllerOptions<TApp, TName>[\"toolHandlers\"];\n\n const initialOptions = readOptions();\n const controller = createAgentController<TApp, TName>(agent, {\n initialMessages: initialOptions.initialMessages,\n initialState: initialOptions.initialState,\n initialInterruptState: initialOptions.initialInterruptState,\n resume: initialOptions.resume,\n context: initialOptions.context,\n threadId: initialOptions.threadId,\n toolHandlers,\n onEvent: (event) => readOptions().onEvent?.(event),\n onFinish: (finish) => readOptions().onFinish?.(finish),\n onError: (error) => readOptions().onError?.(error),\n });\n const [snapshot, setSnapshot] = createSignal(controller.getSnapshot());\n\n const unsubscribe = controller.subscribe(() => {\n setSnapshot(controller.getSnapshot());\n });\n\n createRenderEffect(() => {\n readOptions();\n });\n\n onMount(() => {\n controller.start();\n });\n\n onCleanup(() => {\n unsubscribe();\n controller.stop();\n });\n\n return {\n messages: () => snapshot().messages,\n state: () => snapshot().state,\n status: () => snapshot().status,\n error: () => snapshot().error,\n runId: () => snapshot().runId,\n threadId: () => snapshot().threadId,\n isRunning: () => snapshot().isRunning,\n pendingClientTools: () => snapshot().pendingClientTools,\n pendingToolApprovals: () => snapshot().pendingToolApprovals,\n sendMessage: (input, sendOptions) => controller.sendMessage(input, sendOptions),\n stop: () => controller.stop(),\n resume: (resume) => controller.resume(resume),\n selectThread: (threadId) => controller.selectThread(threadId),\n clearThread: () => controller.clearThread(),\n loadMessages: (threadId) => controller.loadMessages(threadId),\n approveToolCall: (interruptId, metadata) =>\n controller.approveToolCall(interruptId, metadata),\n rejectToolCall: (interruptId, metadata) => controller.rejectToolCall(interruptId, metadata),\n setMessages: (messages) => controller.setMessages(messages),\n };\n}\n"],"mappings":";;;;AAUA,MAAM,WAAc,UAChB,OAAO,UAAU,aAAc,OAAmB,GAAG;AAUzD,SAAgB,SACZ,OACA,SAC2B;CAC3B,MAAM,oBACD,YAAY,SAAY,EAAE,GAAI,QAAQ,QAAQ,IAAI,EAAE;CACzD,MAAM,eAAe,IAAI,MACrB,EAAE,EACF,EACI,IAAI,SAAS,KAAK;AAId,SAHiB,aAAa,CAAC,eAGb;IAEzB,CACJ;CAED,MAAM,iBAAiB,aAAa;CACpC,MAAM,aAAa,sBAAmC,OAAO;EACzD,iBAAiB,eAAe;EAChC,cAAc,eAAe;EAC7B,uBAAuB,eAAe;EACtC,QAAQ,eAAe;EACvB,SAAS,eAAe;EACxB,UAAU,eAAe;EACzB;EACA,UAAU,UAAU,aAAa,CAAC,UAAU,MAAM;EAClD,WAAW,WAAW,aAAa,CAAC,WAAW,OAAO;EACtD,UAAU,UAAU,aAAa,CAAC,UAAU,MAAM;EACrD,CAAC;CACF,MAAM,CAAC,UAAU,eAAe,aAAa,WAAW,aAAa,CAAC;CAEtE,MAAM,cAAc,WAAW,gBAAgB;AAC3C,cAAY,WAAW,aAAa,CAAC;GACvC;AAEF,0BAAyB;AACrB,eAAa;GACf;AAEF,eAAc;AACV,aAAW,OAAO;GACpB;AAEF,iBAAgB;AACZ,eAAa;AACb,aAAW,MAAM;GACnB;AAEF,QAAO;EACH,gBAAgB,UAAU,CAAC;EAC3B,aAAa,UAAU,CAAC;EACxB,cAAc,UAAU,CAAC;EACzB,aAAa,UAAU,CAAC;EACxB,aAAa,UAAU,CAAC;EACxB,gBAAgB,UAAU,CAAC;EAC3B,iBAAiB,UAAU,CAAC;EAC5B,0BAA0B,UAAU,CAAC;EACrC,4BAA4B,UAAU,CAAC;EACvC,cAAc,OAAO,gBAAgB,WAAW,YAAY,OAAO,YAAY;EAC/E,YAAY,WAAW,MAAM;EAC7B,SAAS,WAAW,WAAW,OAAO,OAAO;EAC7C,eAAe,aAAa,WAAW,aAAa,SAAS;EAC7D,mBAAmB,WAAW,aAAa;EAC3C,eAAe,aAAa,WAAW,aAAa,SAAS;EAC7D,kBAAkB,aAAa,aAC3B,WAAW,gBAAgB,aAAa,SAAS;EACrD,iBAAiB,aAAa,aAAa,WAAW,eAAe,aAAa,SAAS;EAC3F,cAAc,aAAa,WAAW,YAAY,SAAS;EAC9D"}
|
package/dist/svelte/index.d.mts
CHANGED
|
@@ -1,83 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { M as BetterAgentClientAgentMemoryHandle, U as AgentHasMemory, W as AgentNameOf, a as AgentControllerOptions, c as AgentInterruptState, j as BetterAgentClientAgentHandle, l as AgentMessageInput, o as AgentControllerSnapshot, p as SendOptions, t as AgentController, u as AgentStreamResume } from "../controller-B7G0xSYW.mjs";
|
|
2
2
|
import { Readable } from "svelte/store";
|
|
3
3
|
|
|
4
4
|
//#region src/svelte/types.d.ts
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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;
|
|
5
|
+
interface AgentChatOptions<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>> extends Pick<AgentControllerOptions<TApp, TName>, "context" | "threadId" | "toolHandlers" | "onEvent" | "onFinish" | "onError"> {
|
|
6
|
+
initialMessages?: AgentControllerOptions<TApp, TName>["initialMessages"];
|
|
7
|
+
initialState?: unknown;
|
|
8
|
+
resume?: AgentStreamResume;
|
|
9
|
+
initialInterruptState?: AgentInterruptState;
|
|
42
10
|
}
|
|
11
|
+
type AgentChatState = AgentControllerSnapshot;
|
|
12
|
+
type AgentChatStore<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>> = Readable<AgentControllerSnapshot> & {
|
|
13
|
+
sendMessage(input: AgentMessageInput, options?: SendOptions<TApp, TName>): Promise<void>;
|
|
14
|
+
stop(): void;
|
|
15
|
+
resume(input?: AgentStreamResume): Promise<void>;
|
|
16
|
+
approveToolCall(interruptId: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
17
|
+
rejectToolCall(interruptId: string, metadata?: Record<string, unknown> | string): Promise<void>;
|
|
18
|
+
setMessages: AgentController<TApp, TName>["setMessages"];
|
|
19
|
+
} & (AgentHasMemory<TApp, TName> extends true ? {
|
|
20
|
+
loadMessages(threadId?: string): Promise<void>;
|
|
21
|
+
selectThread(threadId: string): Promise<void>;
|
|
22
|
+
clearThread(): void;
|
|
23
|
+
} : Record<never, never>);
|
|
43
24
|
//#endregion
|
|
44
25
|
//#region src/svelte/createAgentChat.d.ts
|
|
45
|
-
|
|
46
|
-
|
|
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>;
|
|
26
|
+
declare function createAgentChat<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(agent: BetterAgentClientAgentMemoryHandle<TApp, TName>, options?: AgentChatOptions<TApp, TName>): AgentChatStore<TApp, TName>;
|
|
27
|
+
declare function createAgentChat<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(agent: BetterAgentClientAgentHandle<TApp, TName>, options?: AgentChatOptions<TApp, TName>): AgentChatStore<TApp, TName>;
|
|
81
28
|
//#endregion
|
|
82
|
-
export { type AgentChatOptions, type AgentChatState, type AgentChatStore,
|
|
29
|
+
export { type AgentChatOptions, type AgentChatState, type AgentChatStore, createAgentChat };
|
|
83
30
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/svelte/types.ts","../../src/svelte/createAgentChat.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/svelte/types.ts","../../src/svelte/createAgentChat.ts"],"mappings":";;;;UAYiB,gBAAA,+BAEC,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,WACxC,IAAA,CACF,sBAAA,CAAuB,IAAA,EAAM,KAAA;EAGjC,eAAA,GAAkB,sBAAA,CAAuB,IAAA,EAAM,KAAA;EAC/C,YAAA;EACA,MAAA,GAAS,iBAAA;EACT,qBAAA,GAAwB,mBAAA;AAAA;AAAA,KAGhB,cAAA,GAAiB,uBAAA;AAAA,KAEjB,cAAA,+BAEM,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,KAC9C,QAAA,CAAS,uBAAA;EACT,WAAA,CAAY,KAAA,EAAO,iBAAA,EAAmB,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,KAAA,IAAS,OAAA;EAC3E,IAAA;EACA,MAAA,CAAO,KAAA,GAAQ,iBAAA,GAAoB,OAAA;EACnC,eAAA,CAAgB,WAAA,UAAqB,QAAA,GAAW,MAAA,oBAA0B,OAAA;EAC1E,cAAA,CAAe,WAAA,UAAqB,QAAA,GAAW,MAAA,6BAAmC,OAAA;EAClF,WAAA,EAAa,eAAA,CAAgB,IAAA,EAAM,KAAA;AAAA,KAClC,cAAA,CAAe,IAAA,EAAM,KAAA;EAEZ,YAAA,CAAa,QAAA,YAAoB,OAAA;EACjC,YAAA,CAAa,QAAA,WAAmB,OAAA;EAChC,WAAA;AAAA,IAEJ,MAAA;;;iBCrCM,eAAA,+BAEE,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,EAAA,CAE9C,KAAA,EAAO,kCAAA,CAAmC,IAAA,EAAM,KAAA,GAChD,OAAA,GAAU,gBAAA,CAAiB,IAAA,EAAM,KAAA,IAClC,cAAA,CAAe,IAAA,EAAM,KAAA;AAAA,iBACR,eAAA,+BAEE,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,EAAA,CAE9C,KAAA,EAAO,4BAAA,CAA6B,IAAA,EAAM,KAAA,GAC1C,OAAA,GAAU,gBAAA,CAAiB,IAAA,EAAM,KAAA,IAClC,cAAA,CAAe,IAAA,EAAM,KAAA"}
|
package/dist/svelte/index.mjs
CHANGED
|
@@ -1,104 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as getLatestUserMessageId, r as normalizeSendInput, t as cloneControllerOptions } from "../utils-CiHUj_BW.mjs";
|
|
1
|
+
import { n as createAgentController } from "../controller-xMlzSCc7.mjs";
|
|
3
2
|
import { writable } from "svelte/store";
|
|
4
3
|
|
|
5
4
|
//#region src/svelte/createAgentChat.ts
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
};
|
|
5
|
+
function createAgentChat(agent, options = {}) {
|
|
6
|
+
const controller = createAgentController(agent, options);
|
|
56
7
|
return {
|
|
57
|
-
subscribe: writable(
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
set(activeController.getSnapshot());
|
|
8
|
+
subscribe: writable(controller.getSnapshot(), (set) => {
|
|
9
|
+
const unsubscribe = controller.subscribe(() => {
|
|
10
|
+
set(controller.getSnapshot());
|
|
61
11
|
});
|
|
62
|
-
set(
|
|
63
|
-
|
|
12
|
+
set(controller.getSnapshot());
|
|
13
|
+
controller.start();
|
|
64
14
|
return () => {
|
|
65
15
|
unsubscribe();
|
|
66
|
-
|
|
67
|
-
if (controller === activeController) controller = null;
|
|
16
|
+
controller.stop();
|
|
68
17
|
};
|
|
69
18
|
}).subscribe,
|
|
70
|
-
sendMessage: (input,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
}
|
|
19
|
+
sendMessage: (input, sendOptions) => controller.sendMessage(input, sendOptions),
|
|
20
|
+
stop: () => controller.stop(),
|
|
21
|
+
resume: (resume) => controller.resume(resume),
|
|
22
|
+
selectThread: (threadId) => controller.selectThread(threadId),
|
|
23
|
+
clearThread: () => controller.clearThread(),
|
|
24
|
+
loadMessages: (threadId) => controller.loadMessages(threadId),
|
|
25
|
+
approveToolCall: (interruptId, metadata) => controller.approveToolCall(interruptId, metadata),
|
|
26
|
+
rejectToolCall: (interruptId, metadata) => controller.rejectToolCall(interruptId, metadata),
|
|
27
|
+
setMessages: (messages) => controller.setMessages(messages)
|
|
102
28
|
};
|
|
103
29
|
}
|
|
104
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/svelte/createAgentChat.ts"],"sourcesContent":["import { writable } from \"svelte/store\";\nimport {
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/svelte/createAgentChat.ts"],"sourcesContent":["import { writable } from \"svelte/store\";\nimport { createAgentController } from \"../core/controller\";\nimport type { AgentNameOf } from \"../core/inference\";\nimport type { BetterAgentClientAgentHandle, BetterAgentClientAgentMemoryHandle } from \"../types\";\nimport type { AgentChatOptions, AgentChatState, AgentChatStore } from \"./types\";\n\nexport function createAgentChat<\n TApp = unknown,\n TName extends AgentNameOf<TApp> = AgentNameOf<TApp>,\n>(\n agent: BetterAgentClientAgentMemoryHandle<TApp, TName>,\n options?: AgentChatOptions<TApp, TName>,\n): AgentChatStore<TApp, TName>;\nexport function createAgentChat<\n TApp = unknown,\n TName extends AgentNameOf<TApp> = AgentNameOf<TApp>,\n>(\n agent: BetterAgentClientAgentHandle<TApp, TName>,\n options?: AgentChatOptions<TApp, TName>,\n): AgentChatStore<TApp, TName>;\nexport function createAgentChat<\n TApp = unknown,\n TName extends AgentNameOf<TApp> = AgentNameOf<TApp>,\n>(\n agent: BetterAgentClientAgentHandle<TApp, TName>,\n options: AgentChatOptions<TApp, TName> = {},\n): AgentChatStore<TApp, TName> {\n const controller = createAgentController<TApp, TName>(agent, options);\n const store = writable<AgentChatState>(controller.getSnapshot(), (set) => {\n const unsubscribe = controller.subscribe(() => {\n set(controller.getSnapshot());\n });\n\n set(controller.getSnapshot());\n controller.start();\n\n return () => {\n unsubscribe();\n controller.stop();\n };\n });\n\n return {\n subscribe: store.subscribe,\n sendMessage: (input, sendOptions) => controller.sendMessage(input, sendOptions),\n stop: () => controller.stop(),\n resume: (resume) => controller.resume(resume),\n selectThread: (threadId) => controller.selectThread(threadId),\n clearThread: () => controller.clearThread(),\n loadMessages: (threadId) => controller.loadMessages(threadId),\n approveToolCall: (interruptId, metadata) =>\n controller.approveToolCall(interruptId, metadata),\n rejectToolCall: (interruptId, metadata) => controller.rejectToolCall(interruptId, metadata),\n setMessages: (messages) => controller.setMessages(messages),\n };\n}\n"],"mappings":";;;;AAoBA,SAAgB,gBAIZ,OACA,UAAyC,EAAE,EAChB;CAC3B,MAAM,aAAa,sBAAmC,OAAO,QAAQ;AAerE,QAAO;EACH,WAfU,SAAyB,WAAW,aAAa,GAAG,QAAQ;GACtE,MAAM,cAAc,WAAW,gBAAgB;AAC3C,QAAI,WAAW,aAAa,CAAC;KAC/B;AAEF,OAAI,WAAW,aAAa,CAAC;AAC7B,cAAW,OAAO;AAElB,gBAAa;AACT,iBAAa;AACb,eAAW,MAAM;;IAEvB,CAGmB;EACjB,cAAc,OAAO,gBAAgB,WAAW,YAAY,OAAO,YAAY;EAC/E,YAAY,WAAW,MAAM;EAC7B,SAAS,WAAW,WAAW,OAAO,OAAO;EAC7C,eAAe,aAAa,WAAW,aAAa,SAAS;EAC7D,mBAAmB,WAAW,aAAa;EAC3C,eAAe,aAAa,WAAW,aAAa,SAAS;EAC7D,kBAAkB,aAAa,aAC3B,WAAW,gBAAgB,aAAa,SAAS;EACrD,iBAAiB,aAAa,aAAa,WAAW,eAAe,aAAa,SAAS;EAC3F,cAAc,aAAa,WAAW,YAAY,SAAS;EAC9D"}
|
package/dist/vue/index.d.mts
CHANGED
|
@@ -1,95 +1,38 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { M as BetterAgentClientAgentMemoryHandle, O as BetterAgentClientError, U as AgentHasMemory, W as AgentNameOf, a as AgentControllerOptions, c as AgentInterruptState, d as PendingClientTool, f as PendingToolApproval, j as BetterAgentClientAgentHandle, l as AgentMessageInput, p as SendOptions, s as AgentControllerStatus, t as AgentController, u as AgentStreamResume, w as UIMessage } from "../controller-B7G0xSYW.mjs";
|
|
2
2
|
import { ComputedRef, MaybeRefOrGetter } from "vue";
|
|
3
3
|
|
|
4
4
|
//#region src/vue/types.d.ts
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
interface UseAgentOptions<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>> extends Pick<AgentControllerOptions<TApp, TName>, "context" | "threadId" | "toolHandlers" | "onEvent" | "onFinish" | "onError"> {
|
|
6
|
+
initialMessages?: AgentControllerOptions<TApp, TName>["initialMessages"];
|
|
7
|
+
initialState?: unknown;
|
|
8
|
+
resume?: AgentStreamResume;
|
|
9
|
+
initialInterruptState?: AgentInterruptState;
|
|
10
|
+
}
|
|
11
|
+
type UseAgentResult<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>> = {
|
|
12
12
|
messages: ComputedRef<UIMessage[]>;
|
|
13
|
-
|
|
14
|
-
status: ComputedRef<
|
|
15
|
-
|
|
16
|
-
error: ComputedRef<AgentClientError | undefined>;
|
|
17
|
-
/** Latest stream id. */
|
|
18
|
-
streamId: ComputedRef<string | undefined>;
|
|
19
|
-
/** Latest run id. */
|
|
13
|
+
state: ComputedRef<unknown>;
|
|
14
|
+
status: ComputedRef<AgentControllerStatus>;
|
|
15
|
+
error: ComputedRef<BetterAgentClientError | undefined>;
|
|
20
16
|
runId: ComputedRef<string | undefined>;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
isLoading: ComputedRef<boolean>;
|
|
25
|
-
/** True while streaming events are being consumed. */
|
|
26
|
-
isStreaming: ComputedRef<boolean>;
|
|
27
|
-
/** Pending tool approvals. */
|
|
17
|
+
threadId: ComputedRef<string | undefined>;
|
|
18
|
+
isRunning: ComputedRef<boolean>;
|
|
19
|
+
pendingClientTools: ComputedRef<PendingClientTool[]>;
|
|
28
20
|
pendingToolApprovals: ComputedRef<PendingToolApproval[]>;
|
|
29
|
-
|
|
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. */
|
|
21
|
+
sendMessage(input: AgentMessageInput, options?: SendOptions<TApp, TName>): Promise<void>;
|
|
38
22
|
stop(): void;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
}
|
|
23
|
+
resume(input?: AgentStreamResume): Promise<void>;
|
|
24
|
+
approveToolCall(interruptId: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
25
|
+
rejectToolCall(interruptId: string, metadata?: Record<string, unknown> | string): Promise<void>;
|
|
26
|
+
setMessages: AgentController<TApp, TName>["setMessages"];
|
|
27
|
+
} & (AgentHasMemory<TApp, TName> extends true ? {
|
|
28
|
+
loadMessages(threadId?: string): Promise<void>;
|
|
29
|
+
selectThread(threadId: string): Promise<void>;
|
|
30
|
+
clearThread(): void;
|
|
31
|
+
} : Record<never, never>);
|
|
57
32
|
//#endregion
|
|
58
33
|
//#region src/vue/useAgent.d.ts
|
|
59
|
-
|
|
60
|
-
|
|
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>;
|
|
34
|
+
declare function useAgent<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(agent: BetterAgentClientAgentMemoryHandle<TApp, TName>, options?: MaybeRefOrGetter<UseAgentOptions<TApp, TName> | undefined>): UseAgentResult<TApp, TName>;
|
|
35
|
+
declare function useAgent<TApp = unknown, TName extends AgentNameOf<TApp> = AgentNameOf<TApp>>(agent: BetterAgentClientAgentHandle<TApp, TName>, options?: MaybeRefOrGetter<UseAgentOptions<TApp, TName> | undefined>): UseAgentResult<TApp, TName>;
|
|
93
36
|
//#endregion
|
|
94
|
-
export { type
|
|
37
|
+
export { type UseAgentOptions, type UseAgentResult, useAgent };
|
|
95
38
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/vue/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/vue/types.ts","../../src/vue/useAgent.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/vue/types.ts","../../src/vue/useAgent.ts"],"mappings":";;;;UAgBiB,eAAA,+BAEC,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,WACxC,IAAA,CACF,sBAAA,CAAuB,IAAA,EAAM,KAAA;EAGjC,eAAA,GAAkB,sBAAA,CAAuB,IAAA,EAAM,KAAA;EAC/C,YAAA;EACA,MAAA,GAAS,iBAAA;EACT,qBAAA,GAAwB,mBAAA;AAAA;AAAA,KAGhB,cAAA,+BAA6C,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA;EACrF,QAAA,EAAU,WAAA,CAAY,SAAA;EACtB,KAAA,EAAO,WAAA;EACP,MAAA,EAAQ,WAAA,CAAY,qBAAA;EACpB,KAAA,EAAO,WAAA,CAAY,sBAAA;EACnB,KAAA,EAAO,WAAA;EACP,QAAA,EAAU,WAAA;EACV,SAAA,EAAW,WAAA;EACX,kBAAA,EAAoB,WAAA,CAAY,iBAAA;EAChC,oBAAA,EAAsB,WAAA,CAAY,mBAAA;EAClC,WAAA,CAAY,KAAA,EAAO,iBAAA,EAAmB,OAAA,GAAU,WAAA,CAAY,IAAA,EAAM,KAAA,IAAS,OAAA;EAC3E,IAAA;EACA,MAAA,CAAO,KAAA,GAAQ,iBAAA,GAAoB,OAAA;EACnC,eAAA,CAAgB,WAAA,UAAqB,QAAA,GAAW,MAAA,oBAA0B,OAAA;EAC1E,cAAA,CAAe,WAAA,UAAqB,QAAA,GAAW,MAAA,6BAAmC,OAAA;EAClF,WAAA,EAAa,eAAA,CAAgB,IAAA,EAAM,KAAA;AAAA,KAClC,cAAA,CAAe,IAAA,EAAM,KAAA;EAEhB,YAAA,CAAa,QAAA,YAAoB,OAAA;EACjC,YAAA,CAAa,QAAA,WAAmB,OAAA;EAChC,WAAA;AAAA,IAEJ,MAAA;;;iBCxCU,QAAA,+BAAuC,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,EAAA,CACnF,KAAA,EAAO,kCAAA,CAAmC,IAAA,EAAM,KAAA,GAChD,OAAA,GAAU,gBAAA,CAAiB,eAAA,CAAgB,IAAA,EAAM,KAAA,iBAClD,cAAA,CAAe,IAAA,EAAM,KAAA;AAAA,iBACR,QAAA,+BAAuC,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,IAAA,EAAA,CACnF,KAAA,EAAO,4BAAA,CAA6B,IAAA,EAAM,KAAA,GAC1C,OAAA,GAAU,gBAAA,CAAiB,eAAA,CAAgB,IAAA,EAAM,KAAA,iBAClD,cAAA,CAAe,IAAA,EAAM,KAAA"}
|