@threadplane/chat 0.0.49 → 0.0.50
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 +2 -0
- package/README.md +0 -1
- package/fesm2022/threadplane-chat.mjs +441 -76
- package/fesm2022/threadplane-chat.mjs.map +1 -1
- package/package.json +2 -2
- package/types/threadplane-chat.d.ts +182 -26
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@threadplane/chat",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.50",
|
|
4
4
|
"exports": {
|
|
5
5
|
"./chat.css": "./chat.css",
|
|
6
6
|
"./themes/default-dark.css": "./themes/default-dark.css",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"@threadplane/telemetry": "*"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
+
"zod": "^3.25.0",
|
|
33
34
|
"@angular/core": "^20.0.0 || ^21.0.0",
|
|
34
35
|
"@angular/common": "^20.0.0 || ^21.0.0",
|
|
35
|
-
"@angular/forms": "^20.0.0 || ^21.0.0",
|
|
36
36
|
"@angular/platform-browser": "^20.0.0 || ^21.0.0",
|
|
37
37
|
"@threadplane/licensing": "*",
|
|
38
38
|
"@threadplane/render": "*",
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { InjectionToken, Signal, TemplateRef, Type, WritableSignal } from '@angular/core';
|
|
3
3
|
import * as _threadplane_render from '@threadplane/render';
|
|
4
|
-
import { AngularRegistry, RenderEvent, ViewRegistry, RenderViewEntry } from '@threadplane/render';
|
|
4
|
+
import { AngularRegistry, StandardSchemaV1, RenderEvent, ViewRegistry, RenderViewEntry, RenderHost, StandardSchemaInferOutput } from '@threadplane/render';
|
|
5
5
|
export { ViewRegistry, toRenderRegistry, views, withViews, withoutViews } from '@threadplane/render';
|
|
6
6
|
import { Observable } from 'rxjs';
|
|
7
7
|
import * as _json_render_core from '@json-render/core';
|
|
8
8
|
import { StateStore, Spec } from '@json-render/core';
|
|
9
|
+
import * as _threadplane_chat from '@threadplane/chat';
|
|
9
10
|
import { A2uiComponentDef, A2uiSurface, A2uiMessage, A2uiActionMessage } from '@threadplane/a2ui';
|
|
10
11
|
export { A2uiAction, A2uiActionContextEntry, A2uiActionMessage, A2uiChildren, A2uiClientDataModel, A2uiComponent, A2uiComponentDef, A2uiSurface, A2uiTheme, DynamicBoolean, DynamicNumber, DynamicString, isLiteralBoolean, isLiteralNumber, isLiteralString, isPathRef } from '@threadplane/a2ui';
|
|
11
12
|
import { PartialJsonParser } from '@cacheplane/partial-json';
|
|
12
13
|
import { BaseMessage } from '@langchain/core/messages';
|
|
13
14
|
import * as _cacheplane_partial_markdown from '@cacheplane/partial-markdown';
|
|
14
15
|
import { CitationDefinition, MarkdownDocumentNode, MarkdownNode, MarkdownParagraphNode, MarkdownHeadingNode, MarkdownBlockquoteNode, MarkdownListNode, MarkdownListItemNode, MarkdownCodeBlockNode, MarkdownThematicBreakNode, MarkdownTextNode, MarkdownEmphasisNode, MarkdownStrongNode, MarkdownStrikethroughNode, MarkdownInlineCodeNode, MarkdownLinkNode, MarkdownAutolinkNode, MarkdownImageNode, MarkdownSoftBreakNode, MarkdownHardBreakNode, MarkdownCitationReferenceNode, MarkdownTableNode, MarkdownTableRowNode, MarkdownTableCellNode } from '@cacheplane/partial-markdown';
|
|
15
|
-
import * as _threadplane_chat from '@threadplane/chat';
|
|
16
16
|
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
17
17
|
|
|
18
18
|
interface ChatConfig {
|
|
@@ -210,6 +210,42 @@ interface AgentSubmitOptions {
|
|
|
210
210
|
signal?: AbortSignal;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
|
+
/** A client tool spec as shipped to the model / AG-UI RunAgentInput.tools. */
|
|
214
|
+
interface ClientToolSpec {
|
|
215
|
+
readonly name: string;
|
|
216
|
+
readonly description: string;
|
|
217
|
+
readonly parameters: Record<string, unknown>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Convert a Standard Schema to a JSON Schema for the model's `parameters`.
|
|
221
|
+
* Uses Zod's converter; throws a clear error for non-Zod validators (callers
|
|
222
|
+
* should supply a Zod schema — see the client-tools docs).
|
|
223
|
+
*/
|
|
224
|
+
declare function deriveJsonSchema(toolName: string, schema: StandardSchemaV1): Record<string, unknown>;
|
|
225
|
+
|
|
226
|
+
/** The outcome of running a client tool. */
|
|
227
|
+
type ClientToolResult = {
|
|
228
|
+
readonly ok: true;
|
|
229
|
+
readonly value: unknown;
|
|
230
|
+
} | {
|
|
231
|
+
readonly ok: false;
|
|
232
|
+
readonly error: string;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Optional Agent capability that lets the client declare tools to the model
|
|
236
|
+
* and return their results. Implemented per-transport by each adapter
|
|
237
|
+
* (AG-UI: native RunAgentInput.tools + addMessage/re-run; LangGraph: catalog
|
|
238
|
+
* via run input + ToolMessage re-run).
|
|
239
|
+
*/
|
|
240
|
+
interface ClientToolsCapability {
|
|
241
|
+
/** Ship the client tool catalog to the model at run start. */
|
|
242
|
+
setCatalog(specs: readonly ClientToolSpec[]): void;
|
|
243
|
+
/** Tool calls the model made for client tools that await a client result. */
|
|
244
|
+
readonly pending: Signal<readonly ToolCall[]>;
|
|
245
|
+
/** Return a client tool's result (or error) and continue the run. */
|
|
246
|
+
resolve(toolCallId: string, result: ClientToolResult): void;
|
|
247
|
+
}
|
|
248
|
+
|
|
213
249
|
/**
|
|
214
250
|
* Runtime-neutral contract chat primitives consume.
|
|
215
251
|
*
|
|
@@ -244,6 +280,8 @@ interface Agent {
|
|
|
244
280
|
regenerate: (assistantMessageIndex: number) => Promise<void>;
|
|
245
281
|
interrupt?: Signal<AgentInterrupt | undefined>;
|
|
246
282
|
subagents?: Signal<Map<string, Subagent>>;
|
|
283
|
+
/** Optional: client-declared, client-executed tools (see ClientToolsCapability). */
|
|
284
|
+
clientTools?: ClientToolsCapability;
|
|
247
285
|
events$: Observable<AgentEvent>;
|
|
248
286
|
}
|
|
249
287
|
|
|
@@ -472,6 +510,11 @@ declare class ChatInputComponent {
|
|
|
472
510
|
constructor();
|
|
473
511
|
focusTextarea(): void;
|
|
474
512
|
onSubmit(): void;
|
|
513
|
+
/** Sync the textarea's value into the signal on user input. A direct
|
|
514
|
+
* [value]/(input) pair is used instead of ngModel: NgModel does not
|
|
515
|
+
* reliably write a programmatic clear back to the view under zoneless
|
|
516
|
+
* + OnPush, leaving sent text visible in the composer (audit F1). */
|
|
517
|
+
protected onInput(event: Event): void;
|
|
475
518
|
/** Abort the current streaming response (if the adapter supports it). */
|
|
476
519
|
onStop(): void;
|
|
477
520
|
onKeydown(event: KeyboardEvent): void;
|
|
@@ -694,6 +737,7 @@ declare class ChatToolCallsComponent {
|
|
|
694
737
|
*/
|
|
695
738
|
declare class ChatToolViewsComponent {
|
|
696
739
|
readonly agent: _angular_core.InputSignal<Agent>;
|
|
740
|
+
readonly events: _angular_core.OutputEmitterRef<RenderEvent>;
|
|
697
741
|
readonly message: _angular_core.InputSignal<Message | undefined>;
|
|
698
742
|
readonly views: _angular_core.InputSignal<Readonly<Record<string, _angular_core.Type<unknown> | _threadplane_render.RenderViewEntry>> | undefined>;
|
|
699
743
|
readonly store: _angular_core.InputSignal<StateStore | undefined>;
|
|
@@ -705,7 +749,7 @@ declare class ChatToolViewsComponent {
|
|
|
705
749
|
spec: Spec;
|
|
706
750
|
}[]>;
|
|
707
751
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatToolViewsComponent, never>;
|
|
708
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatToolViewsComponent, "chat-tool-views", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "handlers": { "alias": "handlers"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
752
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatToolViewsComponent, "chat-tool-views", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "handlers": { "alias": "handlers"; "required": false; "isSignal": true; }; }, { "events": "events"; }, never, never, true, never>;
|
|
709
753
|
}
|
|
710
754
|
|
|
711
755
|
declare class ChatSubagentsComponent {
|
|
@@ -931,6 +975,17 @@ declare class ChatGenerativeUiComponent {
|
|
|
931
975
|
readonly handlers: _angular_core.InputSignal<Record<string, (params: Record<string, unknown>) => unknown | Promise<unknown>> | undefined>;
|
|
932
976
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
933
977
|
readonly events: _angular_core.OutputEmitterRef<RenderEvent>;
|
|
978
|
+
/** The bound spec with schema-documented `{ statePath }` prop refs
|
|
979
|
+
* rewritten to engine-native `{ $bindState }` + `_bindings` so values
|
|
980
|
+
* resolve against the state store instead of interpolating as
|
|
981
|
+
* "[object Object]" (F4). */
|
|
982
|
+
protected readonly normalizedSpec: _angular_core.Signal<Spec | null>;
|
|
983
|
+
/** Last value this component seeded per state path. Lets the seeding
|
|
984
|
+
* effect distinguish "still the value we wrote (possibly a partial
|
|
985
|
+
* chunk from streaming — safe to overwrite with the newer one)" from
|
|
986
|
+
* "user edited it via a bound control — leave it alone". */
|
|
987
|
+
private readonly seeded;
|
|
988
|
+
constructor();
|
|
934
989
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatGenerativeUiComponent, never>;
|
|
935
990
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatGenerativeUiComponent, "chat-generative-ui", never, { "spec": { "alias": "spec"; "required": false; "isSignal": true; }; "registry": { "alias": "registry"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "handlers": { "alias": "handlers"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "events": "events"; }, never, never, true, never>;
|
|
936
991
|
}
|
|
@@ -1161,6 +1216,14 @@ interface ChatRenderEvent {
|
|
|
1161
1216
|
declare class ChatComponent {
|
|
1162
1217
|
readonly agent: _angular_core.InputSignal<Agent>;
|
|
1163
1218
|
readonly views: _angular_core.InputSignal<Readonly<Record<string, _angular_core.Type<unknown> | _threadplane_render.RenderViewEntry>> | undefined>;
|
|
1219
|
+
/**
|
|
1220
|
+
* Client-declared tools (`view`/`ask`/`function`) the model may call. When
|
|
1221
|
+
* provided, a coordinator ships their catalog to the agent, runs `function`
|
|
1222
|
+
* tools in the browser, and renders/resolves `view`/`ask` tools through the
|
|
1223
|
+
* same tool-views pipeline as `views`. Additive — leave undefined for the
|
|
1224
|
+
* classic server-tools-only experience.
|
|
1225
|
+
*/
|
|
1226
|
+
readonly clientTools: _angular_core.InputSignal<Readonly<Record<string, _threadplane_chat.ClientToolDef>> | undefined>;
|
|
1164
1227
|
readonly store: _angular_core.InputSignal<StateStore | undefined>;
|
|
1165
1228
|
readonly handlers: _angular_core.InputSignal<Record<string, (params: Record<string, unknown>) => unknown | Promise<unknown>>>;
|
|
1166
1229
|
readonly threads: _angular_core.InputSignal<Thread[]>;
|
|
@@ -1209,10 +1272,26 @@ declare class ChatComponent {
|
|
|
1209
1272
|
}>;
|
|
1210
1273
|
private readonly _internalStore;
|
|
1211
1274
|
readonly resolvedStore: _angular_core.Signal<StateStore | undefined>;
|
|
1275
|
+
/**
|
|
1276
|
+
* Lazily-built client-tools coordinator, memoized on the `clientTools`
|
|
1277
|
+
* registry input. Undefined when no client tools are declared. The
|
|
1278
|
+
* coordinator owns the catalog/executor wiring and the view/ask render
|
|
1279
|
+
* registry; the composition merges and connects it below.
|
|
1280
|
+
*/
|
|
1281
|
+
private readonly coordinator;
|
|
1282
|
+
/**
|
|
1283
|
+
* The view registry actually used for rendering tool-views and for
|
|
1284
|
+
* excluding view-backed tool names from default tool-call cards. Merges
|
|
1285
|
+
* the coordinator's `view`/`ask` components (keyed by tool name) into the
|
|
1286
|
+
* user-supplied `views()` so client-declared component tools render through
|
|
1287
|
+
* the same pipeline. Falls back to `views()` when no client tools exist.
|
|
1288
|
+
*/
|
|
1289
|
+
protected readonly effectiveViews: _angular_core.Signal<Readonly<Record<string, _angular_core.Type<unknown> | _threadplane_render.RenderViewEntry>> | undefined>;
|
|
1212
1290
|
readonly renderRegistry: _angular_core.Signal<_threadplane_render.AngularRegistry | undefined>;
|
|
1213
|
-
/** Tool names that have a registered view (keys of the
|
|
1214
|
-
*
|
|
1215
|
-
* tool-
|
|
1291
|
+
/** Tool names that have a registered view (keys of the effective view
|
|
1292
|
+
* registry, including client-declared view/ask tools). These render as
|
|
1293
|
+
* inline tool-views and are excluded from the default tool-call card so
|
|
1294
|
+
* they don't render twice. */
|
|
1216
1295
|
readonly viewToolNames: _angular_core.Signal<readonly string[]>;
|
|
1217
1296
|
/** Union of GenUI dispatcher tool names and registered view tool names. */
|
|
1218
1297
|
readonly excludedToolNames: _angular_core.Signal<readonly string[]>;
|
|
@@ -1242,6 +1321,7 @@ declare class ChatComponent {
|
|
|
1242
1321
|
protected isReasoningStreaming(message: Message, index: number): boolean;
|
|
1243
1322
|
private readonly classifiers;
|
|
1244
1323
|
private readonly destroyRef;
|
|
1324
|
+
private readonly injector;
|
|
1245
1325
|
private readonly lifecycle;
|
|
1246
1326
|
private eventsSubscribed;
|
|
1247
1327
|
/**
|
|
@@ -1323,6 +1403,13 @@ declare class ChatComponent {
|
|
|
1323
1403
|
}): ContentClassifier;
|
|
1324
1404
|
clearClassifiers(): void;
|
|
1325
1405
|
onSpecEvent(event: RenderEvent, messageIndex: number): void;
|
|
1406
|
+
/**
|
|
1407
|
+
* Forwards a render event bubbled up from a `<chat-tool-views>` component
|
|
1408
|
+
* (a client-declared `view`/`ask` tool's rendered UI) to the client-tools
|
|
1409
|
+
* coordinator. The coordinator resolves the matching pending `ask` tool call
|
|
1410
|
+
* when the event is a `result`. No-op when no client tools are wired.
|
|
1411
|
+
*/
|
|
1412
|
+
protected onClientToolEvent(event: RenderEvent): void;
|
|
1326
1413
|
onA2uiAction(message: A2uiActionMessage): void;
|
|
1327
1414
|
onA2uiEvent(event: RenderEvent, messageIndex: number, surfaceId: string): void;
|
|
1328
1415
|
/** Regenerate the assistant response at the given message index. */
|
|
@@ -1330,7 +1417,7 @@ declare class ChatComponent {
|
|
|
1330
1417
|
onRate(message: unknown, value: 'up' | 'down'): void;
|
|
1331
1418
|
onCopy(message: unknown, content: string): void;
|
|
1332
1419
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatComponent, never>;
|
|
1333
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatComponent, "chat", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "handlers": { "alias": "handlers"; "required": false; "isSignal": true; }; "threads": { "alias": "threads"; "required": false; "isSignal": true; }; "activeThreadId": { "alias": "activeThreadId"; "required": false; "isSignal": true; }; "welcomeDisabled": { "alias": "welcomeDisabled"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "modelPickerPlaceholder": { "alias": "modelPickerPlaceholder"; "required": false; "isSignal": true; }; "genuiToolNames": { "alias": "genuiToolNames"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "threadSelected": "threadSelected"; "renderEvent": "renderEvent"; "regenerate": "regenerate"; "rate": "rate"; "messageCopy": "messageCopy"; }, never, ["[chatWelcomeSuggestions]", "[chatHeader]", "[chatToolCallTemplate]", "[chatInputModelSelect]"], true, never>;
|
|
1420
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatComponent, "chat", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "clientTools": { "alias": "clientTools"; "required": false; "isSignal": true; }; "store": { "alias": "store"; "required": false; "isSignal": true; }; "handlers": { "alias": "handlers"; "required": false; "isSignal": true; }; "threads": { "alias": "threads"; "required": false; "isSignal": true; }; "activeThreadId": { "alias": "activeThreadId"; "required": false; "isSignal": true; }; "welcomeDisabled": { "alias": "welcomeDisabled"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "modelPickerPlaceholder": { "alias": "modelPickerPlaceholder"; "required": false; "isSignal": true; }; "genuiToolNames": { "alias": "genuiToolNames"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "threadSelected": "threadSelected"; "renderEvent": "renderEvent"; "regenerate": "regenerate"; "rate": "rate"; "messageCopy": "messageCopy"; }, never, ["[chatWelcomeSuggestions]", "[chatHeader]", "[chatToolCallTemplate]", "[chatInputModelSelect]"], true, never>;
|
|
1334
1421
|
}
|
|
1335
1422
|
|
|
1336
1423
|
declare class ChatPopupComponent {
|
|
@@ -1339,6 +1426,8 @@ declare class ChatPopupComponent {
|
|
|
1339
1426
|
* messages classified as A2UI parse correctly but never mount a
|
|
1340
1427
|
* surface. Pass `a2uiBasicCatalog()` from `@threadplane/chat`. */
|
|
1341
1428
|
readonly views: _angular_core.InputSignal<Readonly<Record<string, _angular_core.Type<unknown> | _threadplane_render.RenderViewEntry>> | undefined>;
|
|
1429
|
+
/** Frontend-declared client tools forwarded to the inner `<chat>`. */
|
|
1430
|
+
readonly clientTools: _angular_core.InputSignal<Readonly<Record<string, _threadplane_chat.ClientToolDef>> | undefined>;
|
|
1342
1431
|
/** Forwarded to the inner <chat>. When non-empty, a model picker pill
|
|
1343
1432
|
* renders in the chat-input chrome. */
|
|
1344
1433
|
readonly modelOptions: _angular_core.InputSignal<readonly ChatSelectOption[]>;
|
|
@@ -1368,7 +1457,7 @@ declare class ChatPopupComponent {
|
|
|
1368
1457
|
openWindow(): void;
|
|
1369
1458
|
closeWindow(): void;
|
|
1370
1459
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatPopupComponent, never>;
|
|
1371
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatPopupComponent, "chat-popup", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "open": "openChange"; }, never, ["[chatHeader]", "[chatWelcomeSuggestions]"], true, never>;
|
|
1460
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatPopupComponent, "chat-popup", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "clientTools": { "alias": "clientTools"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "open": "openChange"; }, never, ["[chatHeader]", "[chatWelcomeSuggestions]"], true, never>;
|
|
1372
1461
|
}
|
|
1373
1462
|
|
|
1374
1463
|
declare class ChatSidebarComponent {
|
|
@@ -1377,6 +1466,8 @@ declare class ChatSidebarComponent {
|
|
|
1377
1466
|
* messages classified as A2UI parse correctly but never mount a
|
|
1378
1467
|
* surface. Pass `a2uiBasicCatalog()` from `@threadplane/chat`. */
|
|
1379
1468
|
readonly views: _angular_core.InputSignal<Readonly<Record<string, _angular_core.Type<unknown> | _threadplane_render.RenderViewEntry>> | undefined>;
|
|
1469
|
+
/** Frontend-declared client tools forwarded to the inner `<chat>`. */
|
|
1470
|
+
readonly clientTools: _angular_core.InputSignal<Readonly<Record<string, _threadplane_chat.ClientToolDef>> | undefined>;
|
|
1380
1471
|
/** Forwarded to the inner <chat>. When non-empty, a model picker pill
|
|
1381
1472
|
* renders in the chat-input chrome. */
|
|
1382
1473
|
readonly modelOptions: _angular_core.InputSignal<readonly ChatSelectOption[]>;
|
|
@@ -1400,7 +1491,7 @@ declare class ChatSidebarComponent {
|
|
|
1400
1491
|
openWindow(): void;
|
|
1401
1492
|
closeWindow(): void;
|
|
1402
1493
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatSidebarComponent, never>;
|
|
1403
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatSidebarComponent, "chat-sidebar", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "pushContent": { "alias": "pushContent"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "open": "openChange"; }, never, ["*", "[chatSidebarPanelTitle]", "[chatHeader]", "[chatWelcomeSuggestions]"], true, never>;
|
|
1494
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatSidebarComponent, "chat-sidebar", never, { "agent": { "alias": "agent"; "required": true; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "clientTools": { "alias": "clientTools"; "required": false; "isSignal": true; }; "modelOptions": { "alias": "modelOptions"; "required": false; "isSignal": true; }; "showModelPicker": { "alias": "showModelPicker"; "required": false; "isSignal": true; }; "selectedModel": { "alias": "selectedModel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "pushContent": { "alias": "pushContent"; "required": false; "isSignal": true; }; }, { "selectedModel": "selectedModelChange"; "open": "openChange"; }, never, ["*", "[chatSidebarPanelTitle]", "[chatHeader]", "[chatWelcomeSuggestions]"], true, never>;
|
|
1404
1495
|
}
|
|
1405
1496
|
|
|
1406
1497
|
declare class ChatTimelineSliderComponent {
|
|
@@ -1583,9 +1674,9 @@ declare const MARKDOWN_VIEW_REGISTRY: InjectionToken<Readonly<Record<string, _an
|
|
|
1583
1674
|
* registry. Each child's `type` is looked up in the registry; the resolved
|
|
1584
1675
|
* component is rendered with `[node]` bound to that child.
|
|
1585
1676
|
*
|
|
1586
|
-
*
|
|
1587
|
-
*
|
|
1588
|
-
*
|
|
1677
|
+
* Position-stable: `track $index` avoids NG0956 re-creation warnings that
|
|
1678
|
+
* occur when the markdown pipeline re-parses content on every stream delta,
|
|
1679
|
+
* producing new child object references even for unchanged nodes.
|
|
1589
1680
|
*/
|
|
1590
1681
|
declare class MarkdownChildrenComponent {
|
|
1591
1682
|
readonly parent: _angular_core.InputSignal<MarkdownNode>;
|
|
@@ -1916,14 +2007,15 @@ declare function buildA2uiActionMessage(params: Record<string, unknown>, surface
|
|
|
1916
2007
|
|
|
1917
2008
|
declare function a2uiBasicCatalog(): ViewRegistry;
|
|
1918
2009
|
|
|
1919
|
-
/**
|
|
1920
|
-
declare function emitBinding(
|
|
2010
|
+
/** Writes a typed value to the render state store if the prop has a binding path. */
|
|
2011
|
+
declare function emitBinding(host: RenderHost, bindings: Record<string, string> | undefined, prop: string, value: unknown): void;
|
|
1921
2012
|
|
|
1922
2013
|
/** v1 textFieldType values from A2uiTextField. */
|
|
1923
2014
|
type TextFieldType = 'date' | 'longText' | 'number' | 'shortText' | 'obscured';
|
|
1924
2015
|
declare class A2uiTextFieldComponent {
|
|
1925
2016
|
private static _idCounter;
|
|
1926
2017
|
protected readonly _inputId: string;
|
|
2018
|
+
private readonly host;
|
|
1927
2019
|
readonly label: _angular_core.InputSignal<string>;
|
|
1928
2020
|
/** v1 prop: text (resolved string value). */
|
|
1929
2021
|
readonly text: _angular_core.InputSignal<string>;
|
|
@@ -1933,7 +2025,6 @@ declare class A2uiTextFieldComponent {
|
|
|
1933
2025
|
readonly textFieldType: _angular_core.InputSignal<TextFieldType>;
|
|
1934
2026
|
readonly validationRegexp: _angular_core.InputSignal<string>;
|
|
1935
2027
|
readonly _bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1936
|
-
readonly emit: _angular_core.InputSignal<(event: string) => void>;
|
|
1937
2028
|
readonly bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1938
2029
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
1939
2030
|
readonly childKeys: _angular_core.InputSignal<string[]>;
|
|
@@ -1941,17 +2032,17 @@ declare class A2uiTextFieldComponent {
|
|
|
1941
2032
|
protected readonly htmlInputType: _angular_core.Signal<string>;
|
|
1942
2033
|
onInput(event: Event): void;
|
|
1943
2034
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<A2uiTextFieldComponent, never>;
|
|
1944
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiTextFieldComponent, "a2ui-text-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "textFieldType": { "alias": "textFieldType"; "required": false; "isSignal": true; }; "validationRegexp": { "alias": "validationRegexp"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "
|
|
2035
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiTextFieldComponent, "a2ui-text-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "textFieldType": { "alias": "textFieldType"; "required": false; "isSignal": true; }; "validationRegexp": { "alias": "validationRegexp"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1945
2036
|
}
|
|
1946
2037
|
|
|
1947
2038
|
declare class A2uiCheckBoxComponent {
|
|
2039
|
+
private readonly host;
|
|
1948
2040
|
readonly label: _angular_core.InputSignal<string>;
|
|
1949
2041
|
/** v1 canonical prop: boolean checked state. */
|
|
1950
2042
|
readonly value: _angular_core.InputSignal<boolean | undefined>;
|
|
1951
2043
|
/** Pre-v1 alias retained for back-compat. */
|
|
1952
2044
|
readonly checked: _angular_core.InputSignal<boolean>;
|
|
1953
2045
|
readonly _bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1954
|
-
readonly emit: _angular_core.InputSignal<(event: string) => void>;
|
|
1955
2046
|
readonly bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1956
2047
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
1957
2048
|
readonly childKeys: _angular_core.InputSignal<string[]>;
|
|
@@ -1959,7 +2050,7 @@ declare class A2uiCheckBoxComponent {
|
|
|
1959
2050
|
protected readonly effectiveValue: _angular_core.Signal<boolean>;
|
|
1960
2051
|
onChange(event: Event): void;
|
|
1961
2052
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<A2uiCheckBoxComponent, never>;
|
|
1962
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiCheckBoxComponent, "a2ui-check-box", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "
|
|
2053
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiCheckBoxComponent, "a2ui-check-box", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1963
2054
|
}
|
|
1964
2055
|
|
|
1965
2056
|
declare class A2uiButtonComponent {
|
|
@@ -1982,6 +2073,7 @@ interface ResolvedOption {
|
|
|
1982
2073
|
value: string;
|
|
1983
2074
|
}
|
|
1984
2075
|
declare class A2uiMultipleChoiceComponent {
|
|
2076
|
+
private readonly host;
|
|
1985
2077
|
readonly label: _angular_core.InputSignal<string>;
|
|
1986
2078
|
/** Resolved current selections from surface-to-spec. Normalized in
|
|
1987
2079
|
* `selectionsArray` because LLMs sometimes seed the data model with a
|
|
@@ -1994,7 +2086,6 @@ declare class A2uiMultipleChoiceComponent {
|
|
|
1994
2086
|
/** When ≤ 1 — render as single-select <select>; otherwise multi-select checkboxes. */
|
|
1995
2087
|
readonly maxAllowedSelections: _angular_core.InputSignal<number>;
|
|
1996
2088
|
readonly _bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1997
|
-
readonly emit: _angular_core.InputSignal<(event: string) => void>;
|
|
1998
2089
|
readonly bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
1999
2090
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
2000
2091
|
readonly childKeys: _angular_core.InputSignal<string[]>;
|
|
@@ -2004,12 +2095,13 @@ declare class A2uiMultipleChoiceComponent {
|
|
|
2004
2095
|
onSelectChange(event: Event): void;
|
|
2005
2096
|
onCheckChange(value: string, event: Event): void;
|
|
2006
2097
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<A2uiMultipleChoiceComponent, never>;
|
|
2007
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiMultipleChoiceComponent, "a2ui-multiple-choice", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "selections": { "alias": "selections"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "maxAllowedSelections": { "alias": "maxAllowedSelections"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "
|
|
2098
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiMultipleChoiceComponent, "a2ui-multiple-choice", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "selections": { "alias": "selections"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "maxAllowedSelections": { "alias": "maxAllowedSelections"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2008
2099
|
}
|
|
2009
2100
|
|
|
2010
2101
|
declare class A2uiSliderComponent {
|
|
2011
2102
|
private static _idCounter;
|
|
2012
2103
|
protected readonly _inputId: string;
|
|
2104
|
+
private readonly host;
|
|
2013
2105
|
readonly label: _angular_core.InputSignal<string>;
|
|
2014
2106
|
/** v1 prop: value (resolved DynamicNumber). */
|
|
2015
2107
|
readonly value: _angular_core.InputSignal<number>;
|
|
@@ -2019,19 +2111,19 @@ declare class A2uiSliderComponent {
|
|
|
2019
2111
|
readonly maxValue: _angular_core.InputSignal<number>;
|
|
2020
2112
|
readonly step: _angular_core.InputSignal<number>;
|
|
2021
2113
|
readonly _bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
2022
|
-
readonly emit: _angular_core.InputSignal<(event: string) => void>;
|
|
2023
2114
|
readonly bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
2024
2115
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
2025
2116
|
readonly childKeys: _angular_core.InputSignal<string[]>;
|
|
2026
2117
|
readonly spec: _angular_core.InputSignal<Spec | undefined>;
|
|
2027
2118
|
onInput(event: Event): void;
|
|
2028
2119
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<A2uiSliderComponent, never>;
|
|
2029
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiSliderComponent, "a2ui-slider", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "
|
|
2120
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiSliderComponent, "a2ui-slider", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2030
2121
|
}
|
|
2031
2122
|
|
|
2032
2123
|
declare class A2uiDateTimeInputComponent {
|
|
2033
2124
|
private static _idCounter;
|
|
2034
2125
|
protected readonly _inputId: string;
|
|
2126
|
+
private readonly host;
|
|
2035
2127
|
readonly label: _angular_core.InputSignal<string>;
|
|
2036
2128
|
/** v1 prop: value (resolved DynamicString). */
|
|
2037
2129
|
readonly value: _angular_core.InputSignal<string>;
|
|
@@ -2040,7 +2132,6 @@ declare class A2uiDateTimeInputComponent {
|
|
|
2040
2132
|
/** v1 prop: enableTime — include time portion. */
|
|
2041
2133
|
readonly enableTime: _angular_core.InputSignal<boolean>;
|
|
2042
2134
|
readonly _bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
2043
|
-
readonly emit: _angular_core.InputSignal<(event: string) => void>;
|
|
2044
2135
|
readonly bindings: _angular_core.InputSignal<Record<string, string>>;
|
|
2045
2136
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
2046
2137
|
readonly childKeys: _angular_core.InputSignal<string[]>;
|
|
@@ -2049,7 +2140,7 @@ declare class A2uiDateTimeInputComponent {
|
|
|
2049
2140
|
protected readonly htmlInputType: _angular_core.Signal<string>;
|
|
2050
2141
|
onChange(event: Event): void;
|
|
2051
2142
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<A2uiDateTimeInputComponent, never>;
|
|
2052
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiDateTimeInputComponent, "a2ui-date-time-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "enableDate": { "alias": "enableDate"; "required": false; "isSignal": true; }; "enableTime": { "alias": "enableTime"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "
|
|
2143
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiDateTimeInputComponent, "a2ui-date-time-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "enableDate": { "alias": "enableDate"; "required": false; "isSignal": true; }; "enableTime": { "alias": "enableTime"; "required": false; "isSignal": true; }; "_bindings": { "alias": "_bindings"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2053
2144
|
}
|
|
2054
2145
|
|
|
2055
2146
|
type UsageHint = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'caption' | 'body';
|
|
@@ -2257,6 +2348,71 @@ declare class A2uiVideoComponent {
|
|
|
2257
2348
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<A2uiVideoComponent, "a2ui-video", never, { "url": { "alias": "url"; "required": false; "isSignal": true; }; "autoPlay": { "alias": "autoPlay"; "required": false; "isSignal": true; }; "controls": { "alias": "controls"; "required": false; "isSignal": true; }; "bindings": { "alias": "bindings"; "required": false; "isSignal": true; }; "emit": { "alias": "emit"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "childKeys": { "alias": "childKeys"; "required": false; "isSignal": true; }; "spec": { "alias": "spec"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2258
2349
|
}
|
|
2259
2350
|
|
|
2351
|
+
/** A client tool the model can call; executed in the browser. */
|
|
2352
|
+
type ClientToolDef = FunctionToolDef | ViewToolDef | AskToolDef;
|
|
2353
|
+
interface FunctionToolDef<S extends StandardSchemaV1 = StandardSchemaV1> {
|
|
2354
|
+
readonly kind: 'function';
|
|
2355
|
+
readonly description: string;
|
|
2356
|
+
readonly schema: S;
|
|
2357
|
+
readonly handler: (args: StandardSchemaInferOutput<S>) => unknown | Promise<unknown>;
|
|
2358
|
+
}
|
|
2359
|
+
interface ViewToolDef {
|
|
2360
|
+
readonly kind: 'view';
|
|
2361
|
+
readonly description: string;
|
|
2362
|
+
readonly schema: StandardSchemaV1;
|
|
2363
|
+
readonly component: Type<unknown>;
|
|
2364
|
+
}
|
|
2365
|
+
interface AskToolDef {
|
|
2366
|
+
readonly kind: 'ask';
|
|
2367
|
+
readonly description: string;
|
|
2368
|
+
readonly schema: StandardSchemaV1;
|
|
2369
|
+
readonly component: Type<unknown>;
|
|
2370
|
+
}
|
|
2371
|
+
/** A frozen, name-keyed registry of client tools. */
|
|
2372
|
+
type ClientToolRegistry = Readonly<Record<string, ClientToolDef>>;
|
|
2373
|
+
|
|
2374
|
+
/** Async function tool — its resolved return value becomes the tool result. */
|
|
2375
|
+
declare function action<S extends StandardSchemaV1>(description: string, schema: S, handler: (args: StandardSchemaInferOutput<S>) => unknown | Promise<unknown>): FunctionToolDef<S>;
|
|
2376
|
+
/** Render-only component tool — the model fills its props; auto-acknowledged. */
|
|
2377
|
+
declare function view(description: string, schema: StandardSchemaV1, component: Type<unknown>): ClientToolDef;
|
|
2378
|
+
/** Interactive (HITL) component tool — the value it emits becomes the result. */
|
|
2379
|
+
declare function ask(description: string, schema: StandardSchemaV1, component: Type<unknown>): ClientToolDef;
|
|
2380
|
+
/** Collect named client tools into a frozen registry (the key is the tool name). */
|
|
2381
|
+
declare function tools(map: Record<string, ClientToolDef>): ClientToolRegistry;
|
|
2382
|
+
|
|
2383
|
+
/** Validate raw model args against a Standard Schema. */
|
|
2384
|
+
declare function validateArgs(schema: StandardSchemaV1, args: unknown): Promise<{
|
|
2385
|
+
ok: true;
|
|
2386
|
+
value: unknown;
|
|
2387
|
+
} | {
|
|
2388
|
+
ok: false;
|
|
2389
|
+
error: string;
|
|
2390
|
+
}>;
|
|
2391
|
+
/** Validate args, run the handler, and normalize the outcome to a ClientToolResult. */
|
|
2392
|
+
declare function executeFunctionTool(def: FunctionToolDef, rawArgs: unknown): Promise<ClientToolResult>;
|
|
2393
|
+
|
|
2394
|
+
/**
|
|
2395
|
+
* Watches the agent's pending client tool calls and auto-runs FUNCTION tools,
|
|
2396
|
+
* resolving each with its result. View/ask (component) tools are handled by the
|
|
2397
|
+
* rendering layer, not here. No-op if the agent lacks the clientTools
|
|
2398
|
+
* capability. MUST be called in an injection context (sets up an effect).
|
|
2399
|
+
*/
|
|
2400
|
+
declare function startClientToolExecutor(agent: Agent, registry: ClientToolRegistry): void;
|
|
2401
|
+
|
|
2402
|
+
interface ClientToolsCoordinator {
|
|
2403
|
+
/** Components for `view`/`ask` tools, keyed by tool name — merge into the chat `views`. */
|
|
2404
|
+
readonly viewRegistry: ViewRegistry;
|
|
2405
|
+
/** Wire the coordinator to an agent: ship the catalog, run function tools, auto-ack view tools.
|
|
2406
|
+
* MUST be called inside an injection context (sets up effects). Safe no-op if the agent lacks
|
|
2407
|
+
* the clientTools capability. */
|
|
2408
|
+
connect(agent: Agent): void;
|
|
2409
|
+
/** Handle a render event bubbled up from a mounted view/ask component (resolves `ask` results). */
|
|
2410
|
+
handleRenderEvent(agent: Agent, event: RenderEvent): void;
|
|
2411
|
+
}
|
|
2412
|
+
/** Build the catalog spec list shipped to the model. */
|
|
2413
|
+
declare function toClientToolSpecs(registry: ClientToolRegistry): ClientToolSpec[];
|
|
2414
|
+
declare function createClientToolsCoordinator(registry: ClientToolRegistry): ClientToolsCoordinator;
|
|
2415
|
+
|
|
2260
2416
|
interface MockAgent extends Agent {
|
|
2261
2417
|
messages: WritableSignal<Message[]>;
|
|
2262
2418
|
status: WritableSignal<AgentStatus>;
|
|
@@ -2308,5 +2464,5 @@ interface MockAgentOptions {
|
|
|
2308
2464
|
}
|
|
2309
2465
|
declare function mockAgent(opts?: MockAgentOptions): MockAgent;
|
|
2310
2466
|
|
|
2311
|
-
export { A2uiAudioPlayerComponent, A2uiButtonComponent, A2uiCardComponent, A2uiCheckBoxComponent, A2uiColumnComponent, A2uiDateTimeInputComponent, A2uiDividerComponent, A2uiIconComponent, A2uiImageComponent, A2uiListComponent, A2uiModalComponent, A2uiMultipleChoiceComponent, A2uiRowComponent, A2uiSliderComponent, A2uiSurfaceComponent, A2uiTabsComponent, A2uiTextComponent, A2uiTextFieldComponent, A2uiVideoComponent, CHAT_CONFIG, CHAT_LIFECYCLE, CHAT_MARKDOWN_STYLES, ChatApprovalCardComponent, ChatCitationCardTemplateDirective, ChatCitationsCardComponent, ChatCitationsComponent, ChatComponent, ChatConfirmDialogComponent, ChatErrorComponent, ChatGenerativeUiComponent, ChatGenuiSkeletonComponent, ChatHistorySearchPaletteComponent, ChatInputComponent, ChatInterruptComponent, ChatInterruptPanelComponent, ChatLauncherButtonComponent, ChatMessageActionsComponent, ChatMessageComponent, ChatMessageListComponent, ChatOverflowMenuComponent, ChatPopupComponent, ChatProjectListComponent, ChatReasoningComponent, ChatScrollBubbleComponent, ChatSelectComponent, ChatSidebarComponent, ChatSidenavComponent, ChatSidenavScrimComponent, ChatStreamingMdComponent, ChatSubagentCardComponent, ChatSubagentsComponent, ChatSuggestionsComponent, ChatThreadListComponent, ChatTimelineComponent, ChatTimelineSliderComponent, ChatToolCallCardComponent, ChatToolCallTemplateDirective, ChatToolCallsComponent, ChatToolViewsComponent, ChatTraceComponent, ChatTypingIndicatorComponent, ChatWelcomeComponent, ChatWelcomeSuggestionComponent, ChatWindowComponent, CitationsResolverService, ICON_AGENT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CHEVRON_UP, ICON_SEND, ICON_TOOL, ICON_WARNING, IS_HEADER_ROW, MARKDOWN_VIEW_REGISTRY, MarkdownAutolinkComponent, MarkdownBlockquoteComponent, MarkdownChildrenComponent, MarkdownCitationReferenceComponent, MarkdownCodeBlockComponent, MarkdownDocumentComponent, MarkdownEmphasisComponent, MarkdownHardBreakComponent, MarkdownHeadingComponent, MarkdownImageComponent, MarkdownInlineCodeComponent, MarkdownLinkComponent, MarkdownListComponent, MarkdownListItemComponent, MarkdownParagraphComponent, MarkdownSoftBreakComponent, MarkdownStrikethroughComponent, MarkdownStrongComponent, MarkdownTableCellComponent, MarkdownTableComponent, MarkdownTableRowComponent, MarkdownTextComponent, MarkdownThematicBreakComponent, MessageTemplateDirective, a2uiBasicCatalog, buildA2uiActionMessage, cacheplaneMarkdownViews, createA2uiSurfaceStore, createContentClassifier, createParseTreeStore, createPartialArgsBridge, emitBinding, extractErrorMessage, formatDuration, getInterrupt, getMessageType, isAssistantMessage, isSystemMessage, isToolMessage, isTyping, isUserMessage, messageContent, mockAgent, normalizeEnvelopeArgs, normalizeViewEntry, provideChat, renderMarkdown, statusColor, submitMessage, surfaceToSpec };
|
|
2312
|
-
export type { A2uiComponentView, A2uiSurfaceState, A2uiSurfaceStore, A2uiViewEntry, A2uiViews, Agent, AgentCheckpoint, AgentCustomEvent, AgentEvent, AgentInterrupt, AgentRuntimeTelemetryEvent, AgentRuntimeTelemetryPayload, AgentRuntimeTelemetryProperties, AgentRuntimeTelemetrySink, AgentStateUpdateEvent, AgentStatus, AgentSubmitInput, AgentSubmitOptions, AgentWithHistory, ChatApprovalAction, ChatConfig, ChatLifecycle, ChatMessageRole, ChatRenderEvent, ChatScrollBubbleMode, ChatSelectOption, ChatSidenavMode, ChatToolCallTemplateContext, Citation, ContentBlock, ContentClassifier, ContentType, ElementAccumulationState, InterruptAction, Message, MessageTemplateType, MockAgent, MockAgentOptions, OverflowMenuItem, ParseTreeStore, PartialArgsBridge, Project, ProjectActionAdapter, ResolvedCitation, Role, Subagent, SubagentStatus, Thread, ThreadActionAdapter, ThreadMatch, ToolCall, ToolCallInfo, ToolCallStatus, TraceState };
|
|
2467
|
+
export { A2uiAudioPlayerComponent, A2uiButtonComponent, A2uiCardComponent, A2uiCheckBoxComponent, A2uiColumnComponent, A2uiDateTimeInputComponent, A2uiDividerComponent, A2uiIconComponent, A2uiImageComponent, A2uiListComponent, A2uiModalComponent, A2uiMultipleChoiceComponent, A2uiRowComponent, A2uiSliderComponent, A2uiSurfaceComponent, A2uiTabsComponent, A2uiTextComponent, A2uiTextFieldComponent, A2uiVideoComponent, CHAT_CONFIG, CHAT_LIFECYCLE, CHAT_MARKDOWN_STYLES, ChatApprovalCardComponent, ChatCitationCardTemplateDirective, ChatCitationsCardComponent, ChatCitationsComponent, ChatComponent, ChatConfirmDialogComponent, ChatErrorComponent, ChatGenerativeUiComponent, ChatGenuiSkeletonComponent, ChatHistorySearchPaletteComponent, ChatInputComponent, ChatInterruptComponent, ChatInterruptPanelComponent, ChatLauncherButtonComponent, ChatMessageActionsComponent, ChatMessageComponent, ChatMessageListComponent, ChatOverflowMenuComponent, ChatPopupComponent, ChatProjectListComponent, ChatReasoningComponent, ChatScrollBubbleComponent, ChatSelectComponent, ChatSidebarComponent, ChatSidenavComponent, ChatSidenavScrimComponent, ChatStreamingMdComponent, ChatSubagentCardComponent, ChatSubagentsComponent, ChatSuggestionsComponent, ChatThreadListComponent, ChatTimelineComponent, ChatTimelineSliderComponent, ChatToolCallCardComponent, ChatToolCallTemplateDirective, ChatToolCallsComponent, ChatToolViewsComponent, ChatTraceComponent, ChatTypingIndicatorComponent, ChatWelcomeComponent, ChatWelcomeSuggestionComponent, ChatWindowComponent, CitationsResolverService, ICON_AGENT, ICON_CHECK, ICON_CHEVRON_DOWN, ICON_CHEVRON_UP, ICON_SEND, ICON_TOOL, ICON_WARNING, IS_HEADER_ROW, MARKDOWN_VIEW_REGISTRY, MarkdownAutolinkComponent, MarkdownBlockquoteComponent, MarkdownChildrenComponent, MarkdownCitationReferenceComponent, MarkdownCodeBlockComponent, MarkdownDocumentComponent, MarkdownEmphasisComponent, MarkdownHardBreakComponent, MarkdownHeadingComponent, MarkdownImageComponent, MarkdownInlineCodeComponent, MarkdownLinkComponent, MarkdownListComponent, MarkdownListItemComponent, MarkdownParagraphComponent, MarkdownSoftBreakComponent, MarkdownStrikethroughComponent, MarkdownStrongComponent, MarkdownTableCellComponent, MarkdownTableComponent, MarkdownTableRowComponent, MarkdownTextComponent, MarkdownThematicBreakComponent, MessageTemplateDirective, a2uiBasicCatalog, action, ask, buildA2uiActionMessage, cacheplaneMarkdownViews, createA2uiSurfaceStore, createClientToolsCoordinator, createContentClassifier, createParseTreeStore, createPartialArgsBridge, deriveJsonSchema, emitBinding, executeFunctionTool, extractErrorMessage, formatDuration, getInterrupt, getMessageType, isAssistantMessage, isSystemMessage, isToolMessage, isTyping, isUserMessage, messageContent, mockAgent, normalizeEnvelopeArgs, normalizeViewEntry, provideChat, renderMarkdown, startClientToolExecutor, statusColor, submitMessage, surfaceToSpec, toClientToolSpecs, tools, validateArgs, view };
|
|
2468
|
+
export type { A2uiComponentView, A2uiSurfaceState, A2uiSurfaceStore, A2uiViewEntry, A2uiViews, Agent, AgentCheckpoint, AgentCustomEvent, AgentEvent, AgentInterrupt, AgentRuntimeTelemetryEvent, AgentRuntimeTelemetryPayload, AgentRuntimeTelemetryProperties, AgentRuntimeTelemetrySink, AgentStateUpdateEvent, AgentStatus, AgentSubmitInput, AgentSubmitOptions, AgentWithHistory, AskToolDef, ChatApprovalAction, ChatConfig, ChatLifecycle, ChatMessageRole, ChatRenderEvent, ChatScrollBubbleMode, ChatSelectOption, ChatSidenavMode, ChatToolCallTemplateContext, Citation, ClientToolDef, ClientToolRegistry, ClientToolResult, ClientToolSpec, ClientToolsCapability, ClientToolsCoordinator, ContentBlock, ContentClassifier, ContentType, ElementAccumulationState, FunctionToolDef, InterruptAction, Message, MessageTemplateType, MockAgent, MockAgentOptions, OverflowMenuItem, ParseTreeStore, PartialArgsBridge, Project, ProjectActionAdapter, ResolvedCitation, Role, Subagent, SubagentStatus, Thread, ThreadActionAdapter, ThreadMatch, ToolCall, ToolCallInfo, ToolCallStatus, TraceState, ViewToolDef };
|