@artooi/ag-ui-web-component 0.5.0 → 0.7.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/CHANGELOG.md +73 -1
- package/README.md +208 -7
- package/dist/ag-ui-web-component.bundle.js +268 -58
- package/dist/ag-ui-web-component.bundle.js.map +4 -4
- package/dist/constants.d.ts +16 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/core/ag_ui_chat.d.ts +33 -1
- package/dist/core/ag_ui_chat.d.ts.map +1 -1
- package/dist/core/agui_client.d.ts +23 -1
- package/dist/core/agui_client.d.ts.map +1 -1
- package/dist/core/attachment.d.ts +35 -0
- package/dist/core/attachment.d.ts.map +1 -0
- package/dist/core/upload_attachment.d.ts +32 -0
- package/dist/core/upload_attachment.d.ts.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1247 -245
- package/dist/index.js.map +4 -4
- package/dist/tools/page_action_tools.d.ts +31 -0
- package/dist/tools/page_action_tools.d.ts.map +1 -0
- package/dist/ui/attachment_chips.d.ts +13 -0
- package/dist/ui/attachment_chips.d.ts.map +1 -0
- package/dist/ui/attachment_tray.d.ts +45 -0
- package/dist/ui/attachment_tray.d.ts.map +1 -0
- package/dist/ui/confirmation_card.d.ts +4 -1
- package/dist/ui/confirmation_card.d.ts.map +1 -1
- package/dist/ui/relative_time.d.ts +5 -3
- package/dist/ui/relative_time.d.ts.map +1 -1
- package/dist/ui/styles.d.ts +1 -1
- package/dist/ui/styles.d.ts.map +1 -1
- package/dist/ui/thread_drawer.d.ts +7 -1
- package/dist/ui/thread_drawer.d.ts.map +1 -1
- package/dist/ui/tool_call_card.d.ts +6 -2
- package/dist/ui/tool_call_card.d.ts.map +1 -1
- package/dist/ui/ui_strings.d.ts +126 -0
- package/dist/ui/ui_strings.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/constants.ts +18 -0
- package/src/core/ag_ui_chat.ts +389 -51
- package/src/core/agui_client.ts +48 -4
- package/src/core/attachment.ts +39 -0
- package/src/core/upload_attachment.ts +113 -0
- package/src/index.ts +13 -0
- package/src/tools/page_action_tools.ts +130 -0
- package/src/ui/attachment_chips.ts +68 -0
- package/src/ui/attachment_tray.ts +243 -0
- package/src/ui/confirmation_card.ts +15 -5
- package/src/ui/relative_time.ts +15 -8
- package/src/ui/styles.ts +208 -0
- package/src/ui/thread_drawer.ts +53 -25
- package/src/ui/tool_call_card.ts +40 -17
- package/src/ui/ui_strings.ts +208 -0
- package/src/version.ts +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -57,6 +57,22 @@ export declare const TOOL_CALL_STATUS: {
|
|
|
57
57
|
readonly ERROR: "error";
|
|
58
58
|
readonly DECLINED: "declined";
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Lifecycle status of a pending-attachment chip in the composer tray. A chip
|
|
62
|
+
* opens as `UPLOADING` (with a progress bar), then settles to `READY` (a durable
|
|
63
|
+
* ref) or `ERROR` (with a retry control).
|
|
64
|
+
*/
|
|
65
|
+
export declare const ATTACHMENT_STATUS: {
|
|
66
|
+
readonly UPLOADING: "uploading";
|
|
67
|
+
readonly READY: "ready";
|
|
68
|
+
readonly ERROR: "error";
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Default client-side upload size cap (10 MiB), matching django-ag-ui's
|
|
72
|
+
* `ATTACHMENT_MAX_BYTES` default. Overridable per element via
|
|
73
|
+
* `data-attachment-max-bytes`; the server stays authoritative.
|
|
74
|
+
*/
|
|
75
|
+
export declare const DEFAULT_ATTACHMENT_MAX_BYTES: number;
|
|
60
76
|
/**
|
|
61
77
|
* How much detail a tool-call card shows. Set via the `data-tool-display`
|
|
62
78
|
* attribute on `<ag-ui-chat>`; defaults to `full` (back-compatible).
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,wEAAwE;AACxE,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,qCAAqC;AACrC,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY;;;;CAIf,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,wEAAwE;AACxE,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,qCAAqC;AACrC,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;GAIG;AACH,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,yEAAyE;AACzE,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;CAKnB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,QAAmB,CAAC;AAE7D;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY;;;;CAIf,CAAC"}
|
|
@@ -2,17 +2,23 @@ import type { Context, Tool } from "@ag-ui/core";
|
|
|
2
2
|
import { MESSAGE_ROLE } from "../constants.js";
|
|
3
3
|
import type { Skill } from "../skills/skill.js";
|
|
4
4
|
import { type ClientTool } from "../tools/client_tool_registry.js";
|
|
5
|
+
import { type ResolvePageTarget } from "../tools/page_action_tools.js";
|
|
5
6
|
import { type PageMap } from "../tools/page_map.js";
|
|
6
7
|
import { type RouteMap } from "../tools/route_map.js";
|
|
7
8
|
import { type StateHook } from "../tools/state_hook.js";
|
|
8
9
|
import { type ToolDisplayMode } from "../ui/tool_call_card.js";
|
|
10
|
+
import { type UiStrings } from "../ui/ui_strings.js";
|
|
11
|
+
import { type AttachmentRef } from "./attachment.js";
|
|
9
12
|
import { type ClientConversationStore, type NavigationCheckpoint } from "./conversation_store.js";
|
|
10
13
|
import { type AgentFactory } from "./create_http_agent.js";
|
|
14
|
+
import { type UploadHandler } from "./upload_attachment.js";
|
|
11
15
|
/** The role a rendered chat message takes. */
|
|
12
16
|
export type MessageRole = (typeof MESSAGE_ROLE)[keyof typeof MESSAGE_ROLE];
|
|
13
17
|
/** `detail` shape of the {@link SUBMIT_EVENT} CustomEvent. */
|
|
14
18
|
export interface SubmitDetail {
|
|
15
19
|
readonly content: string;
|
|
20
|
+
/** Durable refs for the files attached to this message (empty when none). */
|
|
21
|
+
readonly attachments: readonly AttachmentRef[];
|
|
16
22
|
}
|
|
17
23
|
/** `detail` shape of the {@link TOGGLE_EVENT} CustomEvent. */
|
|
18
24
|
export interface ToggleDetail {
|
|
@@ -62,7 +68,9 @@ export declare class AgUiChat extends HTMLElement {
|
|
|
62
68
|
getTools: () => Tool[];
|
|
63
69
|
/**
|
|
64
70
|
* Per-run context provider. Defaults to the compact page map (when a
|
|
65
|
-
* {@link getPageMap} provider is set and {@link autoInjectPageMap} is on)
|
|
71
|
+
* {@link getPageMap} provider is set and {@link autoInjectPageMap} is on)
|
|
72
|
+
* plus a one-line manifest of the files attached to the message being sent,
|
|
73
|
+
* so the agent knows which `read_attachment` ids are available.
|
|
66
74
|
*/
|
|
67
75
|
getContext: () => Context[];
|
|
68
76
|
/**
|
|
@@ -86,6 +94,16 @@ export declare class AgUiChat extends HTMLElement {
|
|
|
86
94
|
* server-backed store for cross-tab/device durability.
|
|
87
95
|
*/
|
|
88
96
|
conversationStore: ClientConversationStore;
|
|
97
|
+
/**
|
|
98
|
+
* How attached files are uploaded. `null` (default) uses the built-in
|
|
99
|
+
* multipart `POST` to `data-attachments-url`. Set a custom
|
|
100
|
+
* {@link UploadHandler} — `(file, onProgress) => Promise<AttachmentRef>` — to
|
|
101
|
+
* swap the transport (e.g. a `tus-js-client` resumable adapter or
|
|
102
|
+
* direct-to-S3 multipart) without changing the tray, the chips, or the AG-UI
|
|
103
|
+
* wire (refs are transport-agnostic). When set, the 📎 affordance appears even
|
|
104
|
+
* with no `data-attachments-url`; the handler owns its own endpoint + headers.
|
|
105
|
+
*/
|
|
106
|
+
uploadHandler: UploadHandler | null;
|
|
89
107
|
/**
|
|
90
108
|
* Builds the tool result a navigating tool resumes with after the page
|
|
91
109
|
* reloads. Defaults to the landed URL; a host (e.g. the admin package) can
|
|
@@ -107,6 +125,20 @@ export declare class AgUiChat extends HTMLElement {
|
|
|
107
125
|
* schema; this map is the seam for everything else.
|
|
108
126
|
*/
|
|
109
127
|
toolSummaries: Record<string, string>;
|
|
128
|
+
/**
|
|
129
|
+
* Localizable UI strings — a partial override merged over the English
|
|
130
|
+
* {@link DEFAULT_UI_STRINGS}. Resolved once on connect (so set it before the
|
|
131
|
+
* element is appended); the `data-strings` JSON attribute is the markup
|
|
132
|
+
* equivalent, and this property wins key-by-key over it.
|
|
133
|
+
*/
|
|
134
|
+
strings: Partial<UiStrings>;
|
|
135
|
+
/**
|
|
136
|
+
* Resolve a `scroll_to` / `drag_and_drop` target string to a host-page
|
|
137
|
+
* element (or `null`). Defaults to a CSS-selector lookup; override to map
|
|
138
|
+
* page-map element ids. The page-action tools are opt-in via the
|
|
139
|
+
* `data-page-actions` attribute (`"scroll"` / `"drag"`).
|
|
140
|
+
*/
|
|
141
|
+
resolvePageTarget: ResolvePageTarget;
|
|
110
142
|
constructor();
|
|
111
143
|
/** Attributes whose late changes must reflect in already-rendered chrome. */
|
|
112
144
|
static get observedAttributes(): string[];
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"ag_ui_chat.d.ts","sourceRoot":"","sources":["../../src/core/ag_ui_chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AbstractAgent } from "@ag-ui/client";
|
|
2
2
|
import type { Context, Message, Tool } from "@ag-ui/core";
|
|
3
|
+
import type { AttachmentRef } from "./attachment.js";
|
|
3
4
|
/** A tool call surfaced to the host by {@link AgUiClient}. */
|
|
4
5
|
export interface AgUiToolCall {
|
|
5
6
|
readonly id: string;
|
|
@@ -85,6 +86,22 @@ export interface AgUiClientConfig extends AgUiRunInputs {
|
|
|
85
86
|
* conversation in-memory only.
|
|
86
87
|
*/
|
|
87
88
|
onPersist?: (messages: readonly Message[]) => void;
|
|
89
|
+
/**
|
|
90
|
+
* Error text surfaced to {@link AgUiClientHandlers.onError} when a run's
|
|
91
|
+
* stream closes without a terminal AG-UI event (`RUN_FINISHED`/`RUN_ERROR`) —
|
|
92
|
+
* a dropped connection. Defaults to `"Connection lost"`; the host passes its
|
|
93
|
+
* localized string.
|
|
94
|
+
*/
|
|
95
|
+
connectionLostMessage?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Raised when a run's stream closes cleanly at the transport level but never
|
|
99
|
+
* emits a terminal AG-UI event, so the run neither finished nor errored. Routed
|
|
100
|
+
* to {@link AgUiClientHandlers.onError} (it is not an abort), turning a silent
|
|
101
|
+
* "stuck pending" into a visible "connection lost".
|
|
102
|
+
*/
|
|
103
|
+
export declare class ConnectionLostError extends Error {
|
|
104
|
+
constructor(message: string);
|
|
88
105
|
}
|
|
89
106
|
/**
|
|
90
107
|
* Thin orchestration layer over an AG-UI {@link AbstractAgent}.
|
|
@@ -106,8 +123,13 @@ export declare class AgUiClient {
|
|
|
106
123
|
* When the agent calls frontend tools, this executes them and re-runs the
|
|
107
124
|
* agent with the results, looping until the agent stops calling frontend
|
|
108
125
|
* tools (bounded by {@link MAX_TOOL_ROUNDS}).
|
|
126
|
+
*
|
|
127
|
+
* `attachments` ride on the user message as a non-standard field so the
|
|
128
|
+
* default client store round-trips them for history replay; the agent learns
|
|
129
|
+
* the ids from the run context (the server's strict validation ignores the
|
|
130
|
+
* unknown message field), then reads bytes via the `read_attachment` tool.
|
|
109
131
|
*/
|
|
110
|
-
send(content: string): Promise<void>;
|
|
132
|
+
send(content: string, attachments?: readonly AttachmentRef[]): Promise<void>;
|
|
111
133
|
/**
|
|
112
134
|
* Resume the run loop after a navigating tool's result was supplied
|
|
113
135
|
* post-reload (via {@link addToolResult}). Unlike {@link send}, adds no user
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agui_client.d.ts","sourceRoot":"","sources":["../../src/core/agui_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAoC,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agui_client.d.ts","sourceRoot":"","sources":["../../src/core/agui_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAoC,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,IAAI,IAAI,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gFAAgF;IAChF,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+EAA+E;IAC/E,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,QAAQ,IAAI,IAAI,CAAC;IACjB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,WAAW,IAAI,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,SAAS,IAAI,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,sEAAsE;IACtE,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,KAAK,IAAI,CAAC;IACnD;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;;gBAYT,MAAM,EAAE,gBAAgB;IAUpC,4CAA4C;IAC5C,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,wEAAwE;IACxE,IAAI,QAAQ,IAAI,SAAS,OAAO,EAAE,CAEjC;IAED;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,SAAS,aAAa,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAatF;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,0EAA0E;IAC1E,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKxD;;;;;;OAMG;IACH,MAAM,IAAI,IAAI;CAyHf"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Message } from "@ag-ui/core";
|
|
2
|
+
/**
|
|
3
|
+
* A durable, lightweight reference to one uploaded file — what an upload
|
|
4
|
+
* returns and what rides on a sent message, never the bytes.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors django-ag-ui's `AttachmentRef`: a file uploads out-of-band to the
|
|
7
|
+
* attachments endpoint, the server hands back this ref, and the agent reads the
|
|
8
|
+
* actual content server-side via the `read_attachment` tool. Keeping the AG-UI
|
|
9
|
+
* message stream free of base64 mirrors how the tool catalog keeps schemas off
|
|
10
|
+
* the wire.
|
|
11
|
+
*/
|
|
12
|
+
export interface AttachmentRef {
|
|
13
|
+
/** Opaque, owner-scoped handle the server resolves back to bytes. */
|
|
14
|
+
readonly id: string;
|
|
15
|
+
/** Original filename, for display on the chip. */
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** Declared content type (a hint — the server is authoritative). */
|
|
18
|
+
readonly mime: string;
|
|
19
|
+
/** Size in bytes. */
|
|
20
|
+
readonly size: number;
|
|
21
|
+
/** Optional direct fetch URL (the owner-checked download endpoint). */
|
|
22
|
+
readonly url?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The attachment refs a user message carries.
|
|
26
|
+
*
|
|
27
|
+
* Refs are stored on the user message as a non-standard `attachments` field: a
|
|
28
|
+
* web-component augmentation that the default client store round-trips and
|
|
29
|
+
* `@ag-ui/client` preserves through `addMessage` / `structuredClone`, so a
|
|
30
|
+
* restored conversation re-renders its attachment chips. The server's strict
|
|
31
|
+
* `RunAgentInput` validation ignores the unknown field — the model learns the
|
|
32
|
+
* ids from the run context manifest instead.
|
|
33
|
+
*/
|
|
34
|
+
export declare function messageAttachments(message: Message): readonly AttachmentRef[];
|
|
35
|
+
//# sourceMappingURL=attachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/core/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,aAAa,EAAE,CAG7E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AttachmentRef } from "./attachment.js";
|
|
2
|
+
/**
|
|
3
|
+
* The composer's upload contract: take a `File`, report `0..1` progress, and
|
|
4
|
+
* resolve to a durable {@link AttachmentRef}. The built-in handler is
|
|
5
|
+
* {@link uploadAttachment} (multipart POST); a host swaps in its own — e.g. a
|
|
6
|
+
* `tus-js-client` or direct-to-S3 adapter — via `AgUiChat.uploadHandler`,
|
|
7
|
+
* **without** touching the tray, the chips, or the AG-UI wire (refs are
|
|
8
|
+
* transport-agnostic).
|
|
9
|
+
*/
|
|
10
|
+
export type UploadHandler = (file: File, onProgress: (fraction: number) => void) => Promise<AttachmentRef>;
|
|
11
|
+
/** Options for {@link uploadAttachment}. */
|
|
12
|
+
export interface UploadOptions {
|
|
13
|
+
/** The attachments endpoint (`data-attachments-url`). */
|
|
14
|
+
readonly url: string;
|
|
15
|
+
/** Extra HTTP headers (CSRF / auth), read fresh per upload. */
|
|
16
|
+
readonly headers?: Record<string, string>;
|
|
17
|
+
/** Progress callback, `0..1`, fired as the body uploads. */
|
|
18
|
+
readonly onProgress?: (fraction: number) => void;
|
|
19
|
+
/** Abort signal to cancel the in-flight upload. */
|
|
20
|
+
readonly signal?: AbortSignal;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Upload one file to the attachments endpoint and resolve to its durable
|
|
24
|
+
* {@link AttachmentRef}.
|
|
25
|
+
*
|
|
26
|
+
* Uses `XMLHttpRequest` (not `fetch`) for real upload-progress events: the file
|
|
27
|
+
* is sent as multipart under the `file` field, with the element's `headers` so
|
|
28
|
+
* CSRF / auth ride along exactly like the skills/tools fetches. A non-2xx
|
|
29
|
+
* response or a network/abort error rejects, so the tray can show an error chip.
|
|
30
|
+
*/
|
|
31
|
+
export declare function uploadAttachment(file: File, options: UploadOptions): Promise<AttachmentRef>;
|
|
32
|
+
//# sourceMappingURL=upload_attachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload_attachment.d.ts","sourceRoot":"","sources":["../../src/core/upload_attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACnC,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAyC3F"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export { ELEMENT_TAG, MAX_TOOL_ROUNDS, MESSAGE_ROLE, SUBMIT_EVENT, TOGGLE_EVENT, TOOL_CALL_STATUS, TOOL_DISPLAY, X_CONFIRM_KEY, X_DESTRUCTIVE_KEY, X_NAVIGATES_KEY, X_SUMMARY_KEY, } from "./constants.js";
|
|
2
2
|
export { AgUiChat, type MessageRole, type SubmitDetail, type ToggleDetail, } from "./core/ag_ui_chat.js";
|
|
3
|
-
export { AgUiClient, type AgUiClientConfig, type AgUiClientHandlers, type AgUiRunInputs, type AgUiToolCall, type ExecuteTool, type ToolExecution, } from "./core/agui_client.js";
|
|
3
|
+
export { AgUiClient, type AgUiClientConfig, type AgUiClientHandlers, type AgUiRunInputs, type AgUiToolCall, ConnectionLostError, type ExecuteTool, type ToolExecution, } from "./core/agui_client.js";
|
|
4
|
+
export { type AttachmentRef, messageAttachments } from "./core/attachment.js";
|
|
4
5
|
export { type ClientConversationStore, type NavigationCheckpoint, SessionStorageStore, type ThreadMeta, } from "./core/conversation_store.js";
|
|
5
6
|
export { type AgentFactory, createHttpAgent, type HttpAgentOptions, } from "./core/create_http_agent.js";
|
|
6
7
|
export { defineAgUiChat } from "./core/define_ag_ui_chat.js";
|
|
7
8
|
export { RemoteConversationStore } from "./core/remote_conversation_store.js";
|
|
9
|
+
export { type UploadHandler, type UploadOptions, uploadAttachment, } from "./core/upload_attachment.js";
|
|
8
10
|
export { type FlashOptions, focusWithFlash, type HighlightClickOptions, highlightThenClick, type PressOptions, prefersReducedMotion, pressThenClick, type SelectOptions, scrollIntoCenterView, selectOption, type TextLikeElement, type ToggleOptions, type TypeOptions, toggleControl, typeInto, } from "./dom/animations.js";
|
|
9
11
|
export { clickElement, type FillFieldOptions, fillField, pressButton, selectControl, setControlValue, toggleCheckbox, } from "./dom/dom_driver.js";
|
|
10
12
|
export { setNativeChecked, setNativeValue } from "./dom/native_setter.js";
|
|
@@ -12,6 +14,7 @@ export type { Skill } from "./skills/skill.js";
|
|
|
12
14
|
export { type ClientTool, ClientToolRegistry } from "./tools/client_tool_registry.js";
|
|
13
15
|
export { isDestructive } from "./tools/is_destructive.js";
|
|
14
16
|
export { isNavigates } from "./tools/is_navigates.js";
|
|
17
|
+
export { createPageActionTools, PAGE_ACTIONS, type ResolvePageTarget, } from "./tools/page_action_tools.js";
|
|
15
18
|
export { createPageMapContext, type PageMap } from "./tools/page_map.js";
|
|
16
19
|
export { parseToolCatalog, type ToolCatalogEntry } from "./tools/parse_tool_catalog.js";
|
|
17
20
|
export { createRouteTools, type Route, type RouteMap, type RouteWithParams, } from "./tools/route_map.js";
|
|
@@ -20,5 +23,6 @@ export { type ConfirmationOptions, type ConfirmationRequest, requestConfirmation
|
|
|
20
23
|
export { prettifyToolName } from "./ui/prettify_tool_name.js";
|
|
21
24
|
export { type RenderMarkdownOptions, renderMarkdown } from "./ui/render_markdown.js";
|
|
22
25
|
export { type SettledStatus, ToolCallCard, type ToolCallStatus, type ToolDisplayMode, } from "./ui/tool_call_card.js";
|
|
26
|
+
export { DEFAULT_UI_STRINGS, mergeUiStrings, type UiStrings } from "./ui/ui_strings.js";
|
|
23
27
|
export { VERSION } from "./version.js";
|
|
24
28
|
//# 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,EACnB,KAAK,UAAU,GAChB,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,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,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,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|