@artooi/ag-ui-web-component 0.3.0 → 0.3.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/CHANGELOG.md +43 -1
- package/README.md +9 -5
- package/dist/ag-ui-web-component.bundle.js +23 -23
- package/dist/ag-ui-web-component.bundle.js.map +4 -4
- package/dist/core/ag_ui_chat.d.ts +7 -0
- package/dist/core/ag_ui_chat.d.ts.map +1 -1
- package/dist/core/create_http_agent.d.ts +9 -0
- package/dist/core/create_http_agent.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -13
- package/dist/index.js.map +3 -3
- package/dist/ui/prettify_tool_name.d.ts +11 -0
- package/dist/ui/prettify_tool_name.d.ts.map +1 -0
- package/dist/ui/render_markdown.d.ts +10 -1
- package/dist/ui/render_markdown.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/core/ag_ui_chat.ts +18 -3
- package/src/core/create_http_agent.ts +23 -2
- package/src/index.ts +2 -1
- package/src/ui/prettify_tool_name.ts +16 -0
- package/src/ui/render_markdown.ts +37 -11
- package/src/version.ts +1 -1
|
@@ -36,6 +36,13 @@ export declare class AgUiChat extends HTMLElement {
|
|
|
36
36
|
agentFactory: AgentFactory;
|
|
37
37
|
/** Extra HTTP headers for the AG-UI endpoint (e.g. CSRF). */
|
|
38
38
|
headers: Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Permit `<img>` in rendered assistant markdown. **Off by default**: a
|
|
41
|
+
* model-controlled image URL is fetched with no user interaction, which
|
|
42
|
+
* makes it a zero-click exfiltration channel for prompt-injected page
|
|
43
|
+
* data. Enable only when the content source is trusted.
|
|
44
|
+
*/
|
|
45
|
+
allowImages: boolean;
|
|
39
46
|
/** When true, destructive tools execute without a confirmation modal. */
|
|
40
47
|
autoConfirm: boolean;
|
|
41
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag_ui_chat.d.ts","sourceRoot":"","sources":["../../src/core/ag_ui_chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,YAAY,EAOb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,kCAAkC,CAAC;AAGvF,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ag_ui_chat.d.ts","sourceRoot":"","sources":["../../src/core/ag_ui_chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,15 @@ import type { Message } from "@ag-ui/core";
|
|
|
4
4
|
export interface HttpAgentOptions {
|
|
5
5
|
endpoint: string;
|
|
6
6
|
headers?: Record<string, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Live header source, re-read on **every** request. `HttpAgent` bakes the
|
|
9
|
+
* static `headers` into its constructor and the element caches the agent
|
|
10
|
+
* for the whole conversation — so a rotated token (CSRF, short-lived JWT)
|
|
11
|
+
* would otherwise never reach the agent endpoint and a long session 401s
|
|
12
|
+
* mid-conversation. When set, the fetch wrapper overlays these values on
|
|
13
|
+
* each call; `headers` still seeds the initial/static configuration.
|
|
14
|
+
*/
|
|
15
|
+
getHeaders?: () => Record<string, string>;
|
|
7
16
|
/** Stable conversation id, so the agent's runs share a thread. */
|
|
8
17
|
threadId?: string;
|
|
9
18
|
/** Rehydrated history to seed the agent with (durable conversation). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_http_agent.d.ts","sourceRoot":"","sources":["../../src/core/create_http_agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAa,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"create_http_agent.d.ts","sourceRoot":"","sources":["../../src/core/create_http_agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAa,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CACtC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CA4BxE;AAED,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,aAAa,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,8 @@ export { parseToolCatalog, type ToolCatalogEntry } from "./tools/parse_tool_cata
|
|
|
16
16
|
export { createRouteTools, type Route, type RouteMap, type RouteWithParams, } from "./tools/route_map.js";
|
|
17
17
|
export { createStateHookTools, type StateHook } from "./tools/state_hook.js";
|
|
18
18
|
export { type ConfirmationRequest, requestConfirmation } from "./ui/confirmation_card.js";
|
|
19
|
-
export {
|
|
19
|
+
export { prettifyToolName } from "./ui/prettify_tool_name.js";
|
|
20
|
+
export { type RenderMarkdownOptions, renderMarkdown } from "./ui/render_markdown.js";
|
|
20
21
|
export { type SettledStatus, ToolCallCard, type ToolCallStatus, type ToolDisplayMode, } from "./ui/tool_call_card.js";
|
|
21
22
|
export { VERSION } from "./version.js";
|
|
22
23
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,YAAY,EACjB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,qBAAqB,EAC1B,kBAAkB,EAClB,KAAK,YAAY,EACjB,oBAAoB,EACpB,cAAc,EACd,KAAK,aAAa,EAClB,oBAAoB,EACpB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,aAAa,EACb,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,YAAY,EACjB,eAAe,EACf,KAAK,gBAAgB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,qBAAqB,EAC1B,kBAAkB,EAClB,KAAK,YAAY,EACjB,oBAAoB,EACpB,cAAc,EACd,KAAK,aAAa,EAClB,oBAAoB,EACpB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,aAAa,EACb,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,SAAS,EACT,WAAW,EACX,aAAa,EACb,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC1E,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,qBAAqB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -271,6 +271,15 @@ function requestConfirmation(host, request) {
|
|
|
271
271
|
});
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
+
// src/ui/prettify_tool_name.ts
|
|
275
|
+
function prettifyToolName(name) {
|
|
276
|
+
const spaced = name.replace(/[._-]+/g, " ").trim();
|
|
277
|
+
if (spaced === "") {
|
|
278
|
+
return name;
|
|
279
|
+
}
|
|
280
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
281
|
+
}
|
|
282
|
+
|
|
274
283
|
// node_modules/.pnpm/dompurify@3.4.7/node_modules/dompurify/dist/purify.es.mjs
|
|
275
284
|
function _arrayLikeToArray(r, a) {
|
|
276
285
|
(null == a || a > r.length) && (a = r.length);
|
|
@@ -2711,7 +2720,7 @@ var Vt = b.parse;
|
|
|
2711
2720
|
var Yt = x.lex;
|
|
2712
2721
|
|
|
2713
2722
|
// src/ui/render_markdown.ts
|
|
2714
|
-
|
|
2723
|
+
var parser = new q({ gfm: true, breaks: true });
|
|
2715
2724
|
var ALLOWED_TAGS = [
|
|
2716
2725
|
"a",
|
|
2717
2726
|
"p",
|
|
@@ -2742,13 +2751,18 @@ var ALLOWED_TAGS = [
|
|
|
2742
2751
|
"tbody",
|
|
2743
2752
|
"tr",
|
|
2744
2753
|
"th",
|
|
2745
|
-
"td"
|
|
2746
|
-
"img"
|
|
2754
|
+
"td"
|
|
2747
2755
|
];
|
|
2748
|
-
var ALLOWED_ATTR = ["href", "title", "class"
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2756
|
+
var ALLOWED_ATTR = ["href", "title", "class"];
|
|
2757
|
+
var ALLOWED_TAGS_WITH_IMAGES = [...ALLOWED_TAGS, "img"];
|
|
2758
|
+
var ALLOWED_ATTR_WITH_IMAGES = [...ALLOWED_ATTR, "src", "alt", "width", "height"];
|
|
2759
|
+
function renderMarkdown(text2, options) {
|
|
2760
|
+
const allowImages = options?.allowImages === true;
|
|
2761
|
+
const rendered = parser.parse(text2, { async: false });
|
|
2762
|
+
const clean = purify.sanitize(rendered, {
|
|
2763
|
+
ALLOWED_TAGS: allowImages ? ALLOWED_TAGS_WITH_IMAGES : ALLOWED_TAGS,
|
|
2764
|
+
ALLOWED_ATTR: allowImages ? ALLOWED_ATTR_WITH_IMAGES : ALLOWED_ATTR
|
|
2765
|
+
});
|
|
2752
2766
|
const template = document.createElement("template");
|
|
2753
2767
|
template.innerHTML = clean;
|
|
2754
2768
|
for (const anchor of template.content.querySelectorAll("a[href]")) {
|
|
@@ -3834,8 +3848,20 @@ function createHttpAgent(options) {
|
|
|
3834
3848
|
// HttpAgent invokes its configured fetch as a method (`this.fetch(...)`),
|
|
3835
3849
|
// which would rebind the global `fetch` to the agent instance and trigger
|
|
3836
3850
|
// "Illegal invocation" in browsers. Wrap it so `fetch` is always called as
|
|
3837
|
-
// a free function with the correct receiver.
|
|
3838
|
-
|
|
3851
|
+
// a free function with the correct receiver. The wrapper also overlays
|
|
3852
|
+
// `getHeaders()` per request, so header rotation (CSRF, short-lived JWT)
|
|
3853
|
+
// reaches the stream even though the agent instance is cached.
|
|
3854
|
+
fetch: (url, init) => {
|
|
3855
|
+
const fresh = options.getHeaders?.();
|
|
3856
|
+
if (fresh === void 0) {
|
|
3857
|
+
return fetch(url, init);
|
|
3858
|
+
}
|
|
3859
|
+
const headers = new Headers(init?.headers);
|
|
3860
|
+
for (const [name, value] of Object.entries(fresh)) {
|
|
3861
|
+
headers.set(name, value);
|
|
3862
|
+
}
|
|
3863
|
+
return fetch(url, { ...init, headers });
|
|
3864
|
+
},
|
|
3839
3865
|
// Spread conditionally: under `exactOptionalPropertyTypes` an explicit
|
|
3840
3866
|
// `undefined` is not assignable to these optional config fields.
|
|
3841
3867
|
...options.threadId !== void 0 ? { threadId: options.threadId } : {},
|
|
@@ -3850,6 +3876,13 @@ var AgUiChat = class extends HTMLElement {
|
|
|
3850
3876
|
agentFactory = createHttpAgent;
|
|
3851
3877
|
/** Extra HTTP headers for the AG-UI endpoint (e.g. CSRF). */
|
|
3852
3878
|
headers = {};
|
|
3879
|
+
/**
|
|
3880
|
+
* Permit `<img>` in rendered assistant markdown. **Off by default**: a
|
|
3881
|
+
* model-controlled image URL is fetched with no user interaction, which
|
|
3882
|
+
* makes it a zero-click exfiltration channel for prompt-injected page
|
|
3883
|
+
* data. Enable only when the content source is trusted.
|
|
3884
|
+
*/
|
|
3885
|
+
allowImages = false;
|
|
3853
3886
|
/** When true, destructive tools execute without a confirmation modal. */
|
|
3854
3887
|
autoConfirm = false;
|
|
3855
3888
|
/**
|
|
@@ -4287,7 +4320,7 @@ var AgUiChat = class extends HTMLElement {
|
|
|
4287
4320
|
const bubble = document.createElement("div");
|
|
4288
4321
|
bubble.className = `message message--${role}`;
|
|
4289
4322
|
if (role === MESSAGE_ROLE.ASSISTANT) {
|
|
4290
|
-
bubble.innerHTML = renderMarkdown(content);
|
|
4323
|
+
bubble.innerHTML = renderMarkdown(content, { allowImages: this.allowImages });
|
|
4291
4324
|
} else {
|
|
4292
4325
|
bubble.textContent = content;
|
|
4293
4326
|
}
|
|
@@ -4395,6 +4428,10 @@ var AgUiChat = class extends HTMLElement {
|
|
|
4395
4428
|
const agent = this.agentFactory({
|
|
4396
4429
|
endpoint: this.endpoint,
|
|
4397
4430
|
headers: this.headers,
|
|
4431
|
+
// Live getter: the client is built once and cached, but a rotated
|
|
4432
|
+
// token must still reach every request — the factory's fetch wrapper
|
|
4433
|
+
// re-reads this on each call.
|
|
4434
|
+
getHeaders: () => this.headers,
|
|
4398
4435
|
threadId: this.#threadId,
|
|
4399
4436
|
initialMessages: this.#initialMessages
|
|
4400
4437
|
});
|
|
@@ -4549,7 +4586,7 @@ var AgUiChat = class extends HTMLElement {
|
|
|
4549
4586
|
this.#streamingBubble = this.appendMessage(MESSAGE_ROLE.ASSISTANT, "");
|
|
4550
4587
|
this.#streamDeltas = 0;
|
|
4551
4588
|
}
|
|
4552
|
-
this.#streamingBubble.innerHTML = renderMarkdown(buffer);
|
|
4589
|
+
this.#streamingBubble.innerHTML = renderMarkdown(buffer, { allowImages: this.allowImages });
|
|
4553
4590
|
this.#messages.scrollTop = this.#messages.scrollHeight;
|
|
4554
4591
|
return this.#streamingBubble;
|
|
4555
4592
|
}
|
|
@@ -4565,7 +4602,7 @@ var AgUiChat = class extends HTMLElement {
|
|
|
4565
4602
|
return existing;
|
|
4566
4603
|
}
|
|
4567
4604
|
const labelled = this.#resolveTool(call.name)?.parameters[X_SUMMARY_KEY];
|
|
4568
|
-
const summary = typeof labelled === "string" ? labelled : this.toolSummaries[call.name] ?? this.#toolCatalog[call.name];
|
|
4605
|
+
const summary = typeof labelled === "string" ? labelled : this.toolSummaries[call.name] ?? this.#toolCatalog[call.name] ?? prettifyToolName(call.name);
|
|
4569
4606
|
const card = new ToolCallCard(call.name, call.args, this.toolDisplay, summary);
|
|
4570
4607
|
this.#toolCards.set(call.id, card);
|
|
4571
4608
|
this.#messages.appendChild(card.element);
|
|
@@ -4738,7 +4775,7 @@ function setControlValue(el, value) {
|
|
|
4738
4775
|
}
|
|
4739
4776
|
|
|
4740
4777
|
// src/version.ts
|
|
4741
|
-
var VERSION = "0.3.
|
|
4778
|
+
var VERSION = "0.3.1";
|
|
4742
4779
|
export {
|
|
4743
4780
|
AgUiChat,
|
|
4744
4781
|
AgUiClient,
|
|
@@ -4772,6 +4809,7 @@ export {
|
|
|
4772
4809
|
prefersReducedMotion,
|
|
4773
4810
|
pressButton,
|
|
4774
4811
|
pressThenClick,
|
|
4812
|
+
prettifyToolName,
|
|
4775
4813
|
renderMarkdown,
|
|
4776
4814
|
requestConfirmation,
|
|
4777
4815
|
scrollIntoCenterView,
|