@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.
- package/README.md +3 -0
- package/dist/controller-CJ79_cSR.d.mts +657 -0
- package/dist/controller-CJ79_cSR.d.mts.map +1 -0
- package/dist/controller-Cf_JhTdJ.mjs +2123 -0
- package/dist/controller-Cf_JhTdJ.mjs.map +1 -0
- package/dist/index.d.mts +266 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +643 -0
- package/dist/index.mjs.map +1 -0
- package/dist/preact/index.d.mts +96 -0
- package/dist/preact/index.d.mts.map +1 -0
- package/dist/preact/index.mjs +134 -0
- package/dist/preact/index.mjs.map +1 -0
- package/dist/react/index.d.mts +96 -0
- package/dist/react/index.d.mts.map +1 -0
- package/dist/react/index.mjs +123 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/solid/index.d.mts +99 -0
- package/dist/solid/index.d.mts.map +1 -0
- package/dist/solid/index.mjs +130 -0
- package/dist/solid/index.mjs.map +1 -0
- package/dist/svelte/index.d.mts +83 -0
- package/dist/svelte/index.d.mts.map +1 -0
- package/dist/svelte/index.mjs +107 -0
- package/dist/svelte/index.mjs.map +1 -0
- package/dist/utils-CiHUj_BW.mjs +34 -0
- package/dist/utils-CiHUj_BW.mjs.map +1 -0
- package/dist/vue/index.d.mts +95 -0
- package/dist/vue/index.d.mts.map +1 -0
- package/dist/vue/index.mjs +155 -0
- package/dist/vue/index.mjs.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,155 @@
|
|
|
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 { computed, onMounted, onUnmounted, ref, toValue, watchEffect } from "vue";
|
|
4
|
+
|
|
5
|
+
//#region src/vue/useAgent.ts
|
|
6
|
+
/**
|
|
7
|
+
* Vue composable for talking to one Better Agent conversation.
|
|
8
|
+
*
|
|
9
|
+
* Returns reactive chat state and chat actions.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const agent = useAgent(client, {
|
|
14
|
+
* agent: "assistant",
|
|
15
|
+
* conversationId: "conv_123",
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* await agent.sendMessage("Hello");
|
|
19
|
+
*
|
|
20
|
+
* console.log(agent.messages.value);
|
|
21
|
+
* console.log(agent.status.value);
|
|
22
|
+
* agent.stop();
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```vue
|
|
27
|
+
* <script setup lang="ts">
|
|
28
|
+
* const agent = useAgent(client, { agent: "assistant" });
|
|
29
|
+
* <\/script>
|
|
30
|
+
*
|
|
31
|
+
* <template>
|
|
32
|
+
* <div v-for="message in agent.messages.value" :key="message.localId">
|
|
33
|
+
* {{ message.role }}
|
|
34
|
+
* </div>
|
|
35
|
+
* <button @click="agent.sendMessage('Hello')">Send</button>
|
|
36
|
+
* </template>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
function useAgent(client, options) {
|
|
40
|
+
const controller = new AgentChatController(toValue(client), cloneControllerOptions(toValue(options)));
|
|
41
|
+
const version = ref(0);
|
|
42
|
+
/** Pushes the latest client and options into the controller. */
|
|
43
|
+
const syncController = () => {
|
|
44
|
+
controller.updateClient(toValue(client));
|
|
45
|
+
controller.updateOptions(cloneControllerOptions(toValue(options)));
|
|
46
|
+
};
|
|
47
|
+
const unsubscribe = controller.subscribe(() => {
|
|
48
|
+
version.value++;
|
|
49
|
+
});
|
|
50
|
+
watchEffect(() => {
|
|
51
|
+
syncController();
|
|
52
|
+
});
|
|
53
|
+
onMounted(() => {
|
|
54
|
+
syncController();
|
|
55
|
+
controller.init();
|
|
56
|
+
});
|
|
57
|
+
onUnmounted(() => {
|
|
58
|
+
unsubscribe();
|
|
59
|
+
controller.destroy();
|
|
60
|
+
});
|
|
61
|
+
const messages = computed(() => {
|
|
62
|
+
version.value;
|
|
63
|
+
return controller.getMessages();
|
|
64
|
+
});
|
|
65
|
+
const id = computed(() => {
|
|
66
|
+
version.value;
|
|
67
|
+
return controller.getSnapshot().id;
|
|
68
|
+
});
|
|
69
|
+
const status = computed(() => {
|
|
70
|
+
version.value;
|
|
71
|
+
return controller.getStatus();
|
|
72
|
+
});
|
|
73
|
+
const error = computed(() => {
|
|
74
|
+
version.value;
|
|
75
|
+
return controller.getError();
|
|
76
|
+
});
|
|
77
|
+
const streamId = computed(() => {
|
|
78
|
+
version.value;
|
|
79
|
+
return controller.getStreamId();
|
|
80
|
+
});
|
|
81
|
+
const runId = computed(() => {
|
|
82
|
+
version.value;
|
|
83
|
+
return controller.getRunId();
|
|
84
|
+
});
|
|
85
|
+
const isLoading = computed(() => {
|
|
86
|
+
version.value;
|
|
87
|
+
return controller.isLoading;
|
|
88
|
+
});
|
|
89
|
+
const isStreaming = computed(() => {
|
|
90
|
+
version.value;
|
|
91
|
+
return controller.isStreaming;
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
id,
|
|
95
|
+
messages,
|
|
96
|
+
status,
|
|
97
|
+
error,
|
|
98
|
+
streamId,
|
|
99
|
+
runId,
|
|
100
|
+
conversationId: computed(() => {
|
|
101
|
+
version.value;
|
|
102
|
+
return controller.getSnapshot().conversationId;
|
|
103
|
+
}),
|
|
104
|
+
isLoading,
|
|
105
|
+
isStreaming,
|
|
106
|
+
pendingToolApprovals: computed(() => {
|
|
107
|
+
version.value;
|
|
108
|
+
return controller.getPendingToolApprovals();
|
|
109
|
+
}),
|
|
110
|
+
sendMessage: (input, requestOptions) => {
|
|
111
|
+
syncController();
|
|
112
|
+
return controller.sendMessage(normalizeSendInput(input), requestOptions);
|
|
113
|
+
},
|
|
114
|
+
regenerate: async () => {
|
|
115
|
+
syncController();
|
|
116
|
+
await controller.retryMessage(getLatestUserMessageId(controller));
|
|
117
|
+
},
|
|
118
|
+
retryMessage: (localId) => {
|
|
119
|
+
syncController();
|
|
120
|
+
return controller.retryMessage(localId);
|
|
121
|
+
},
|
|
122
|
+
stop: () => {
|
|
123
|
+
syncController();
|
|
124
|
+
controller.stop();
|
|
125
|
+
},
|
|
126
|
+
resumeStream: (resumeOptions) => {
|
|
127
|
+
syncController();
|
|
128
|
+
return controller.resumeStream(resumeOptions);
|
|
129
|
+
},
|
|
130
|
+
resumeConversation: (resumeOptions) => {
|
|
131
|
+
syncController();
|
|
132
|
+
return controller.resumeConversation(resumeOptions);
|
|
133
|
+
},
|
|
134
|
+
approveToolCall: (params) => {
|
|
135
|
+
syncController();
|
|
136
|
+
return controller.approveToolCall(params);
|
|
137
|
+
},
|
|
138
|
+
clearError: () => {
|
|
139
|
+
syncController();
|
|
140
|
+
controller.clearError();
|
|
141
|
+
},
|
|
142
|
+
reset: () => {
|
|
143
|
+
syncController();
|
|
144
|
+
controller.reset();
|
|
145
|
+
},
|
|
146
|
+
setMessages: (input) => {
|
|
147
|
+
syncController();
|
|
148
|
+
controller.setMessages(input);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//#endregion
|
|
154
|
+
export { useAgent };
|
|
155
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/vue/useAgent.ts"],"sourcesContent":["import { computed, onMounted, onUnmounted, ref, toValue, watchEffect } from \"vue\";\nimport type { MaybeRefOrGetter } from \"vue\";\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 { UseAgentOptions, UseAgentResult } from \"./types\";\n\n/**\n * Vue composable 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.value);\n * console.log(agent.status.value);\n * agent.stop();\n * ```\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * const agent = useAgent(client, { agent: \"assistant\" });\n * </script>\n *\n * <template>\n * <div v-for=\"message in agent.messages.value\" :key=\"message.localId\">\n * {{ message.role }}\n * </div>\n * <button @click=\"agent.sendMessage('Hello')\">Send</button>\n * </template>\n * ```\n */\nexport function useAgent<\n TApp = unknown,\n TAgentName extends AgentNameFromApp<TApp> = AgentNameFromApp<TApp>,\n>(\n client: MaybeRefOrGetter<BetterAgentClient<TApp>>,\n options: MaybeRefOrGetter<UseAgentOptions<TApp, TAgentName>>,\n): UseAgentResult<TApp, TAgentName> {\n const controller = new AgentChatController<TApp, TAgentName>(\n toValue(client),\n cloneControllerOptions(toValue(options)),\n );\n const version = ref(0);\n\n /** Pushes the latest client and options into the controller. */\n const syncController = () => {\n controller.updateClient(toValue(client));\n controller.updateOptions(\n cloneControllerOptions(toValue(options)) as UseAgentOptions<TApp, TAgentName>,\n );\n };\n\n const unsubscribe = controller.subscribe(() => {\n version.value++;\n });\n\n watchEffect(() => {\n syncController();\n });\n\n onMounted(() => {\n syncController();\n controller.init();\n });\n\n onUnmounted(() => {\n unsubscribe();\n controller.destroy();\n });\n\n const messages = computed(() => {\n void version.value;\n return controller.getMessages();\n });\n const id = computed(() => {\n void version.value;\n return controller.getSnapshot().id;\n });\n const status = computed(() => {\n void version.value;\n return controller.getStatus();\n });\n const error = computed(() => {\n void version.value;\n return controller.getError();\n });\n const streamId = computed(() => {\n void version.value;\n return controller.getStreamId();\n });\n const runId = computed(() => {\n void version.value;\n return controller.getRunId();\n });\n const isLoading = computed(() => {\n void version.value;\n return controller.isLoading;\n });\n const isStreaming = computed(() => {\n void version.value;\n return controller.isStreaming;\n });\n const conversationId = computed(() => {\n void version.value;\n return controller.getSnapshot().conversationId;\n });\n const pendingToolApprovals = computed(() => {\n void version.value;\n return controller.getPendingToolApprovals();\n });\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,SAIZ,QACA,SACgC;CAChC,MAAM,aAAa,IAAI,oBACnB,QAAQ,OAAO,EACf,uBAAuB,QAAQ,QAAQ,CAAC,CAC3C;CACD,MAAM,UAAU,IAAI,EAAE;;CAGtB,MAAM,uBAAuB;AACzB,aAAW,aAAa,QAAQ,OAAO,CAAC;AACxC,aAAW,cACP,uBAAuB,QAAQ,QAAQ,CAAC,CAC3C;;CAGL,MAAM,cAAc,WAAW,gBAAgB;AAC3C,UAAQ;GACV;AAEF,mBAAkB;AACd,kBAAgB;GAClB;AAEF,iBAAgB;AACZ,kBAAgB;AAChB,aAAW,MAAM;GACnB;AAEF,mBAAkB;AACd,eAAa;AACb,aAAW,SAAS;GACtB;CAEF,MAAM,WAAW,eAAe;AAC5B,EAAK,QAAQ;AACb,SAAO,WAAW,aAAa;GACjC;CACF,MAAM,KAAK,eAAe;AACtB,EAAK,QAAQ;AACb,SAAO,WAAW,aAAa,CAAC;GAClC;CACF,MAAM,SAAS,eAAe;AAC1B,EAAK,QAAQ;AACb,SAAO,WAAW,WAAW;GAC/B;CACF,MAAM,QAAQ,eAAe;AACzB,EAAK,QAAQ;AACb,SAAO,WAAW,UAAU;GAC9B;CACF,MAAM,WAAW,eAAe;AAC5B,EAAK,QAAQ;AACb,SAAO,WAAW,aAAa;GACjC;CACF,MAAM,QAAQ,eAAe;AACzB,EAAK,QAAQ;AACb,SAAO,WAAW,UAAU;GAC9B;CACF,MAAM,YAAY,eAAe;AAC7B,EAAK,QAAQ;AACb,SAAO,WAAW;GACpB;CACF,MAAM,cAAc,eAAe;AAC/B,EAAK,QAAQ;AACb,SAAO,WAAW;GACpB;AAUF,QAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA,gBAhBmB,eAAe;AAClC,GAAK,QAAQ;AACb,UAAO,WAAW,aAAa,CAAC;IAClC;EAcE;EACA;EACA,sBAfyB,eAAe;AACxC,GAAK,QAAQ;AACb,UAAO,WAAW,yBAAyB;IAC7C;EAaE,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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@better-agent/client",
|
|
3
|
+
"version": "0.1.0-canary.0",
|
|
4
|
+
"description": "Better Agent client TypeScript library",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/better-agent/better-agent.git",
|
|
9
|
+
"directory": "packages/client"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/better-agent/better-agent/tree/main/packages/client",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/better-agent/better-agent/issues"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"bun": ">=1.3.3",
|
|
17
|
+
"node": ">=20"
|
|
18
|
+
},
|
|
19
|
+
"type": "module",
|
|
20
|
+
"types": "./dist/index.d.mts",
|
|
21
|
+
"sideEffects": false,
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.mts",
|
|
25
|
+
"import": "./dist/index.mjs"
|
|
26
|
+
},
|
|
27
|
+
"./react": {
|
|
28
|
+
"types": "./dist/react/index.d.mts",
|
|
29
|
+
"import": "./dist/react/index.mjs"
|
|
30
|
+
},
|
|
31
|
+
"./preact": {
|
|
32
|
+
"types": "./dist/preact/index.d.mts",
|
|
33
|
+
"import": "./dist/preact/index.mjs"
|
|
34
|
+
},
|
|
35
|
+
"./svelte": {
|
|
36
|
+
"types": "./dist/svelte/index.d.mts",
|
|
37
|
+
"import": "./dist/svelte/index.mjs"
|
|
38
|
+
},
|
|
39
|
+
"./vue": {
|
|
40
|
+
"types": "./dist/vue/index.d.mts",
|
|
41
|
+
"import": "./dist/vue/index.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./solid": {
|
|
44
|
+
"types": "./dist/solid/index.d.mts",
|
|
45
|
+
"import": "./dist/solid/index.mjs"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"typesVersions": {
|
|
49
|
+
"*": {
|
|
50
|
+
".": ["dist/index.d.mts"],
|
|
51
|
+
"react": ["dist/react/index.d.mts"],
|
|
52
|
+
"preact": ["dist/preact/index.d.mts"],
|
|
53
|
+
"svelte": ["dist/svelte/index.d.mts"],
|
|
54
|
+
"vue": ["dist/vue/index.d.mts"],
|
|
55
|
+
"solid": ["dist/solid/index.d.mts"]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "bunx tsdown",
|
|
60
|
+
"dev": "bunx tsdown --watch --no-clean",
|
|
61
|
+
"test": "bun test",
|
|
62
|
+
"test:watch": "bun test --watch",
|
|
63
|
+
"test:coverage": "bun test --coverage",
|
|
64
|
+
"lint:package": "bunx publint run --strict",
|
|
65
|
+
"lint:types": "npm_config_cache=../../.npm-cache bunx attw --profile esm-only --pack .",
|
|
66
|
+
"lint": "bunx biome check .",
|
|
67
|
+
"typecheck": "bunx tsc -p tsconfig.json --noEmit",
|
|
68
|
+
"format": "bunx biome format --write .",
|
|
69
|
+
"clean": "bunx rimraf dist"
|
|
70
|
+
},
|
|
71
|
+
"files": ["dist"],
|
|
72
|
+
"publishConfig": {
|
|
73
|
+
"access": "public"
|
|
74
|
+
},
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"preact": "^10.0.0",
|
|
77
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
78
|
+
"solid-js": "^1.9.0",
|
|
79
|
+
"svelte": "^4.0.0 || ^5.0.0",
|
|
80
|
+
"vue": "^3.3.0"
|
|
81
|
+
},
|
|
82
|
+
"peerDependenciesMeta": {
|
|
83
|
+
"preact": {
|
|
84
|
+
"optional": true
|
|
85
|
+
},
|
|
86
|
+
"react": {
|
|
87
|
+
"optional": true
|
|
88
|
+
},
|
|
89
|
+
"solid-js": {
|
|
90
|
+
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"svelte": {
|
|
93
|
+
"optional": true
|
|
94
|
+
},
|
|
95
|
+
"vue": {
|
|
96
|
+
"optional": true
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"dependencies": {
|
|
100
|
+
"@better-agent/core": "0.0.1",
|
|
101
|
+
"@better-agent/shared": "0.0.1"
|
|
102
|
+
},
|
|
103
|
+
"devDependencies": {
|
|
104
|
+
"@types/bun": "^1.2.18",
|
|
105
|
+
"@types/node": "^22.15.30",
|
|
106
|
+
"@types/jsdom": "^28.0.0",
|
|
107
|
+
"@types/react": "^19.2.9",
|
|
108
|
+
"@types/react-dom": "19.2.2",
|
|
109
|
+
"jsdom": "^28.1.0",
|
|
110
|
+
"preact": "^10.27.2",
|
|
111
|
+
"react": "19.2.3",
|
|
112
|
+
"react-dom": "19.2.3",
|
|
113
|
+
"solid-js": "^1.9.11",
|
|
114
|
+
"svelte": "^5.39.6",
|
|
115
|
+
"vue": "^3.5.28"
|
|
116
|
+
}
|
|
117
|
+
}
|