@better-agent/client 0.1.0-canary.6 → 0.2.0-beta.2

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.
@@ -1,127 +1,59 @@
1
- import { t as AgentChatController } from "../controller-BrBUfjhZ.mjs";
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
- * 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)));
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
- syncController();
29
+ readOptions();
55
30
  });
56
31
  onMount(() => {
57
- syncController();
58
- controller.init();
32
+ controller.start();
59
33
  });
60
34
  onCleanup(() => {
61
35
  unsubscribe();
62
- controller.destroy();
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
- 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
- }
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
 
@@ -1 +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"}
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"}
@@ -1,83 +1,30 @@
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";
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-BkCxCUpn.mjs";
2
2
  import { Readable } from "svelte/store";
3
3
 
4
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;
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
- * 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>;
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, type SetMessagesInput, type SubmitInput, createAgentChat };
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":";;;;;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"}
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"}
@@ -1,104 +1,30 @@
1
- import { t as AgentChatController } from "../controller-BrBUfjhZ.mjs";
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
- * 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
- };
5
+ function createAgentChat(agent, options = {}) {
6
+ const controller = createAgentController(agent, options);
56
7
  return {
57
- subscribe: writable(getController().getSnapshot(), (set) => {
58
- const activeController = syncController();
59
- const unsubscribe = activeController.subscribe(() => {
60
- set(activeController.getSnapshot());
8
+ subscribe: writable(controller.getSnapshot(), (set) => {
9
+ const unsubscribe = controller.subscribe(() => {
10
+ set(controller.getSnapshot());
61
11
  });
62
- set(activeController.getSnapshot());
63
- if (typeof window !== "undefined") activeController.init();
12
+ set(controller.getSnapshot());
13
+ controller.start();
64
14
  return () => {
65
15
  unsubscribe();
66
- activeController.destroy();
67
- if (controller === activeController) controller = null;
16
+ controller.stop();
68
17
  };
69
18
  }).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
- }
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 { 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"}
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"}
@@ -1,95 +1,38 @@
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";
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-BkCxCUpn.mjs";
2
2
  import { ComputedRef, MaybeRefOrGetter } from "vue";
3
3
 
4
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. */
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
- /** 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. */
13
+ state: ComputedRef<unknown>;
14
+ status: ComputedRef<AgentControllerStatus>;
15
+ error: ComputedRef<BetterAgentClientError | undefined>;
20
16
  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. */
17
+ threadId: ComputedRef<string | undefined>;
18
+ isRunning: ComputedRef<boolean>;
19
+ pendingClientTools: ComputedRef<PendingClientTool[]>;
28
20
  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. */
21
+ sendMessage(input: AgentMessageInput, options?: SendOptions<TApp, TName>): Promise<void>;
38
22
  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
- }
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
- * 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>;
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 SetMessagesInput, type UseAgentOptions, type UseAgentResult, useAgent };
37
+ export { type UseAgentOptions, type UseAgentResult, useAgent };
95
38
  //# sourceMappingURL=index.d.mts.map
@@ -1 +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"}
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"}