@runtypelabs/persona 4.23.1 → 4.24.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/dist/animations/glyph-cycle.d.cts +1 -1
- package/dist/animations/glyph-cycle.d.ts +1 -1
- package/dist/animations/{types-9Vxm-PPz.d.cts → types-Db61aI9J.d.cts} +25 -2
- package/dist/animations/{types-9Vxm-PPz.d.ts → types-Db61aI9J.d.ts} +25 -2
- package/dist/animations/wipe.d.cts +1 -1
- package/dist/animations/wipe.d.ts +1 -1
- package/dist/animations-extra.d.cts +25 -2
- package/dist/animations-extra.d.ts +25 -2
- package/dist/approval-ui-3NMYNXBD.js +1 -0
- package/dist/approval-ui.cjs +2 -2
- package/dist/approval-ui.d.cts +261 -40
- package/dist/approval-ui.d.ts +261 -40
- package/dist/approval-ui.js +2 -2
- package/dist/{artifacts-ui-F4N6VMKF.js → artifacts-ui-IGB5YKLO.js} +4 -4
- package/dist/artifacts-ui.d.cts +256 -28
- package/dist/artifacts-ui.d.ts +256 -28
- package/dist/{chunk-NIKYKSNZ.js → chunk-7CO4T5KB.js} +1 -1
- package/dist/codegen.cjs +11 -11
- package/dist/codegen.js +13 -13
- package/dist/context-mentions.d.cts +256 -28
- package/dist/context-mentions.d.ts +256 -28
- package/dist/event-stream-view.d.cts +256 -28
- package/dist/event-stream-view.d.ts +256 -28
- package/dist/forms-ui.d.cts +291 -30
- package/dist/forms-ui.d.ts +291 -30
- package/dist/history-view.d.cts +25 -2
- package/dist/history-view.d.ts +25 -2
- package/dist/index.cjs +70 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +337 -51
- package/dist/index.d.ts +337 -51
- package/dist/index.global.js +57 -54
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +70 -69
- package/dist/index.js.map +1 -1
- package/dist/install.global.js +1 -1
- package/dist/install.global.js.map +1 -1
- package/dist/launcher.global.js +2 -2
- package/dist/launcher.global.js.map +1 -1
- package/dist/session-reconnect.d.cts +256 -28
- package/dist/session-reconnect.d.ts +256 -28
- package/dist/smart-dom-reader.d.cts +256 -28
- package/dist/smart-dom-reader.d.ts +256 -28
- package/dist/theme-editor-preview.cjs +74 -73
- package/dist/theme-editor-preview.d.cts +263 -28
- package/dist/theme-editor-preview.d.ts +263 -28
- package/dist/theme-editor-preview.js +51 -50
- package/dist/theme-editor.cjs +10 -10
- package/dist/theme-editor.d.cts +276 -30
- package/dist/theme-editor.d.ts +276 -30
- package/dist/theme-editor.js +10 -10
- package/dist/theme-reference.cjs +1 -1
- package/dist/theme-reference.d.cts +1522 -11
- package/dist/theme-reference.d.ts +1522 -11
- package/dist/theme-reference.js +1 -1
- package/dist/widget.css +1 -1
- package/package.json +3 -2
- package/src/__fixtures__/defaults-parity.v4.json +776 -0
- package/src/approval-ui-entry.ts +0 -1
- package/src/approval-ui-loader.ts +5 -4
- package/src/approval-ui.ts +0 -1
- package/src/client-identity-proof.test.ts +193 -0
- package/src/client-session-warm.test.ts +216 -0
- package/src/client-visitor-history.test.ts +6 -0
- package/src/client.tool-pair-replay.test.ts +325 -0
- package/src/client.ts +154 -61
- package/src/codegen.test.ts +24 -0
- package/src/components/activity-row.test.ts +100 -0
- package/src/components/activity-row.ts +136 -0
- package/src/components/approval-actions.test.ts +8 -5
- package/src/components/approval-actions.ts +19 -6
- package/src/components/approval-bubble.test.ts +56 -9
- package/src/components/approval-bubble.ts +36 -41
- package/src/components/composer-builder.ts +5 -2
- package/src/components/composer-parts.ts +10 -2
- package/src/components/header-builder.test.ts +32 -0
- package/src/components/header-builder.ts +7 -4
- package/src/components/header-layouts.test.ts +12 -0
- package/src/components/header-layouts.ts +3 -2
- package/src/components/launcher.ts +11 -2
- package/src/components/message-bubble.test.ts +22 -0
- package/src/components/message-bubble.ts +7 -3
- package/src/components/panel.test.ts +52 -1
- package/src/components/panel.ts +47 -8
- package/src/components/pill-composer-builder.test.ts +2 -0
- package/src/components/pill-composer-builder.ts +0 -1
- package/src/components/reasoning-bubble.ts +29 -17
- package/src/components/suggestions.test.ts +1 -0
- package/src/components/suggestions.ts +0 -16
- package/src/components/tool-bubble.ts +131 -114
- package/src/components/tool-details.test.ts +87 -0
- package/src/components/tool-details.ts +102 -0
- package/src/components/welcome.test.ts +8 -0
- package/src/components/welcome.ts +4 -2
- package/src/defaults-parity.test.ts +158 -0
- package/src/defaults.test.ts +69 -0
- package/src/defaults.ts +128 -49
- package/src/generated/runtype-openapi-contract.ts +28 -13
- package/src/index-core.ts +2 -0
- package/src/install.test.ts +24 -0
- package/src/install.ts +3 -1
- package/src/launcher-global.ts +2 -1
- package/src/launcher-variants.test.ts +52 -0
- package/src/runtime/init-update-reset.test.ts +21 -0
- package/src/session.ts +61 -9
- package/src/styles/widget-styles.test.ts +19 -0
- package/src/styles/widget.css +295 -23
- package/src/theme-editor/index.ts +2 -0
- package/src/theme-editor/preview-utils.test.ts +8 -0
- package/src/theme-editor/preview-utils.ts +7 -3
- package/src/theme-editor/sections.test.ts +31 -0
- package/src/theme-editor/sections.ts +55 -1
- package/src/theme-editor/state-preferences.test.ts +49 -0
- package/src/theme-editor/state.ts +73 -15
- package/src/theme-reference.test.ts +20 -0
- package/src/theme-reference.ts +11 -5
- package/src/tool-call-display-defaults.test.ts +33 -1
- package/src/types/theme.ts +80 -3
- package/src/types.ts +179 -23
- package/src/ui.activity-row.test.ts +91 -0
- package/src/ui.approval-plugin.test.ts +63 -0
- package/src/ui.composer-compact.test.ts +24 -2
- package/src/ui.composer-placement.test.ts +23 -0
- package/src/ui.detached-panel.test.ts +33 -6
- package/src/ui.docked.test.ts +19 -0
- package/src/ui.header-update-stability.test.ts +25 -0
- package/src/ui.identity-proof.test.ts +58 -0
- package/src/ui.launcher-teaser.test.ts +25 -0
- package/src/ui.message-width.test.ts +17 -2
- package/src/ui.reasoning-display.test.ts +92 -0
- package/src/ui.rebuild-composer.test.ts +20 -3
- package/src/ui.scroll.test.ts +32 -0
- package/src/ui.session-init.test.ts +312 -0
- package/src/ui.status-indicator.test.ts +82 -0
- package/src/ui.suggest-replies.test.ts +11 -0
- package/src/ui.ts +363 -74
- package/src/ui.v5-defaults.test.ts +144 -0
- package/src/ui.welcome.test.ts +92 -3
- package/src/utils/__snapshots__/tokens-parity.test.ts.snap +811 -140
- package/src/utils/code-generators.ts +14 -0
- package/src/utils/composer-compact.test.ts +0 -2
- package/src/utils/composer-compact.ts +2 -4
- package/src/utils/composer-placement.ts +2 -3
- package/src/utils/config-merge.test.ts +81 -5
- package/src/utils/config-merge.ts +13 -3
- package/src/utils/defaults-provenance.ts +67 -0
- package/src/utils/dock.ts +7 -1
- package/src/utils/launcher-variant.ts +16 -0
- package/src/utils/panel-config.ts +97 -0
- package/src/utils/status-indicator.ts +39 -0
- package/src/utils/theme.test.ts +182 -0
- package/src/utils/theme.ts +131 -18
- package/src/utils/tokens.test.ts +122 -1
- package/src/utils/tokens.ts +177 -17
- package/src/utils/tool-pair-replay.ts +100 -0
- package/src/welcome.test.ts +23 -0
- package/src/welcome.ts +16 -9
- package/dist/approval-ui-K7R5Q5OC.js +0 -1
package/dist/artifacts-ui.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ interface ResolvedWelcomeConfig {
|
|
|
23
23
|
* Optional on the interface, always populated by `resolveWelcomeConfig`:
|
|
24
24
|
* a plugin literal built against an older minor must still type-check.
|
|
25
25
|
*/
|
|
26
|
+
layout?: "top" | "centered";
|
|
26
27
|
anchor?: AgentWidgetWelcomeAnchor;
|
|
27
28
|
/** Percentage string; validated, falls back to "44%". */
|
|
28
29
|
anchorComposerTop?: string;
|
|
@@ -794,6 +795,8 @@ interface InputTokens extends ComponentTokenSet {
|
|
|
794
795
|
backdropFilter?: string;
|
|
795
796
|
}
|
|
796
797
|
interface LauncherTokens extends ComponentTokenSet {
|
|
798
|
+
/** Distance from the viewport edges. Circle default: 20px; pill: 24px. */
|
|
799
|
+
offset?: string;
|
|
797
800
|
size: string;
|
|
798
801
|
iconSize: string;
|
|
799
802
|
shadow: TokenReference<'shadow'>;
|
|
@@ -816,6 +819,15 @@ interface PanelTokens extends ComponentTokenSet {
|
|
|
816
819
|
inset?: string;
|
|
817
820
|
/** Background of the region revealed behind a detached panel. */
|
|
818
821
|
canvasBackground?: string;
|
|
822
|
+
/** Chrome defaults by rendered panel mode. */
|
|
823
|
+
modes?: Partial<Record<'floating' | 'inline' | 'sidebar' | 'docked' | 'mobile', {
|
|
824
|
+
/** Full border shorthand (for example, `"1px solid var(--persona-border)"`). */
|
|
825
|
+
border?: string;
|
|
826
|
+
/** Box-shadow token reference or raw CSS shadow. */
|
|
827
|
+
shadow?: string;
|
|
828
|
+
/** Corner radius token reference or raw CSS radius. */
|
|
829
|
+
borderRadius?: TokenReference<'radius'>;
|
|
830
|
+
}>>;
|
|
819
831
|
}
|
|
820
832
|
/** Per-element text styling shared by themable text surfaces. */
|
|
821
833
|
interface TextStyleTokens {
|
|
@@ -842,10 +854,16 @@ interface HeaderTokens extends ComponentTokenSet {
|
|
|
842
854
|
*/
|
|
843
855
|
border?: TokenReference<'color'>;
|
|
844
856
|
borderRadius: TokenReference<'radius'>;
|
|
857
|
+
/** Standard-header padding. @default "20px 24px" */
|
|
858
|
+
padding?: string;
|
|
859
|
+
/** Minimal-header padding. Explicitly wins over `padding`. @default "16px 24px" */
|
|
860
|
+
minimalPadding?: string;
|
|
845
861
|
/** Background of the rounded avatar tile next to the title (Lucide / emoji / image). */
|
|
846
862
|
iconBackground: TokenReference<'color'>;
|
|
847
863
|
/** Foreground (glyph stroke or emoji text) on the header avatar tile. */
|
|
848
864
|
iconForeground: TokenReference<'color'>;
|
|
865
|
+
/** Header identity glyph size as a fraction of its icon box. @default "0.6" */
|
|
866
|
+
iconScale?: string;
|
|
849
867
|
/**
|
|
850
868
|
* Legacy alias of `title.color`; `title.color` wins when both are set.
|
|
851
869
|
* Unset, the title takes `foreground`, then the primary color.
|
|
@@ -884,6 +902,14 @@ interface HeaderTokens extends ComponentTokenSet {
|
|
|
884
902
|
* sibling. @default "1.5"
|
|
885
903
|
*/
|
|
886
904
|
controlStrokeWidth?: string;
|
|
905
|
+
/** Header control corner radius. Per-control radius overrides win. */
|
|
906
|
+
controlBorderRadius?: string;
|
|
907
|
+
/** Default control hover/focus fill. Explicit button backgrounds win. */
|
|
908
|
+
controlHoverBackground?: TokenReference<'color'>;
|
|
909
|
+
/** Default control hover/focus icon color. Explicit button colors win. */
|
|
910
|
+
controlHoverForeground?: TokenReference<'color'>;
|
|
911
|
+
/** Keyboard focus outline; unset preserves the browser default. */
|
|
912
|
+
controlFocusOutline?: string;
|
|
887
913
|
/** Box-shadow on the header (e.g., a fade shadow to replace the default border). */
|
|
888
914
|
shadow?: string;
|
|
889
915
|
/** Override the header bottom border (e.g., `none`). */
|
|
@@ -1058,6 +1084,12 @@ interface MessageGeometryTokens {
|
|
|
1058
1084
|
lineHeight?: string;
|
|
1059
1085
|
}
|
|
1060
1086
|
interface MessageTokens {
|
|
1087
|
+
/** Height of the optional transcript top fade. Default 18px. */
|
|
1088
|
+
topFadeHeight?: string;
|
|
1089
|
+
/** Vertical gap between transcript turns. @default "12px" */
|
|
1090
|
+
gap?: string;
|
|
1091
|
+
/** Gap between turns in fullscreen mode; falls back to `gap`. */
|
|
1092
|
+
fullscreenGap?: string;
|
|
1061
1093
|
user: MessageGeometryTokens & {
|
|
1062
1094
|
background: TokenReference<'color'>;
|
|
1063
1095
|
text: TokenReference<'color'>;
|
|
@@ -1071,6 +1103,8 @@ interface MessageTokens {
|
|
|
1071
1103
|
borderRadius: TokenReference<'radius'>;
|
|
1072
1104
|
/** Assistant bubble border color (CSS color). */
|
|
1073
1105
|
border?: TokenReference<'color'>;
|
|
1106
|
+
/** Border width; set to 0px for a flat assistant response. @default "1px" */
|
|
1107
|
+
borderWidth?: string;
|
|
1074
1108
|
/** Assistant bubble box-shadow (token ref or raw CSS, e.g. `none`). */
|
|
1075
1109
|
shadow?: string;
|
|
1076
1110
|
};
|
|
@@ -1189,12 +1223,40 @@ interface AttachmentTokens {
|
|
|
1189
1223
|
};
|
|
1190
1224
|
}
|
|
1191
1225
|
/** Tool-call row chrome (collapsible tool bubbles). */
|
|
1192
|
-
interface
|
|
1226
|
+
interface ActivityTokens {
|
|
1227
|
+
/** Minimum activity row height. */
|
|
1228
|
+
rowHeight?: string;
|
|
1229
|
+
/** Group child indentation; falls back to indent when unset. V5: 0px. */
|
|
1230
|
+
groupIndent?: string;
|
|
1231
|
+
/** Extra vertical gap between grouped rows. V5: 0px. */
|
|
1232
|
+
groupGap?: string;
|
|
1233
|
+
/** Padding around expanded group children. V5: 0px. */
|
|
1234
|
+
groupPadding?: string;
|
|
1235
|
+
/** Gap between consecutive activity entries. V5: 0px. */
|
|
1236
|
+
transcriptGap?: string;
|
|
1237
|
+
/** Gap from activity to an assistant response. V5: 12px. */
|
|
1238
|
+
responseGap?: string;
|
|
1239
|
+
/** Expanded body padding. V5: 4px 0. */
|
|
1240
|
+
bodyPadding?: string;
|
|
1241
|
+
/** Expanded reasoning text size. V5: 13px. */
|
|
1242
|
+
bodySize?: string;
|
|
1243
|
+
/** Expanded reasoning line height. V5: 1.5. */
|
|
1244
|
+
bodyLineHeight?: string;
|
|
1245
|
+
/** Expanded reasoning font weight. V5: 400. */
|
|
1246
|
+
bodyFontWeight?: string;
|
|
1247
|
+
/** Gap between expanded detail sections. V5: 8px. */
|
|
1248
|
+
sectionGap?: string;
|
|
1249
|
+
labelSize?: string;
|
|
1250
|
+
iconSize?: string;
|
|
1251
|
+
indent?: string;
|
|
1252
|
+
bodySurface?: TokenReference<'color'>;
|
|
1253
|
+
}
|
|
1254
|
+
interface ToolBubbleTokens extends ActivityTokens {
|
|
1193
1255
|
/** Box-shadow for tool bubbles (token ref or raw CSS, e.g. `none`). */
|
|
1194
1256
|
shadow: string;
|
|
1195
1257
|
}
|
|
1196
1258
|
/** Reasoning / “thinking” row chrome. */
|
|
1197
|
-
interface ReasoningBubbleTokens {
|
|
1259
|
+
interface ReasoningBubbleTokens extends ActivityTokens {
|
|
1198
1260
|
shadow: string;
|
|
1199
1261
|
}
|
|
1200
1262
|
/** One event-stream badge chip: fill + text pair. The chip border derives
|
|
@@ -1328,6 +1390,10 @@ interface ComposerChromeTokens {
|
|
|
1328
1390
|
shadow: string;
|
|
1329
1391
|
/** Border color of the composer form. @default semantic.colors.border */
|
|
1330
1392
|
borderColor?: TokenReference<'color'>;
|
|
1393
|
+
/** Focused form border color; falls back to borderColor. V5: a stronger neutral border. */
|
|
1394
|
+
focusBorderColor?: TokenReference<'color'>;
|
|
1395
|
+
/** Outer focus ring (CSS outline shorthand). V4: none; V5: a thin neutral ring. */
|
|
1396
|
+
focusRing?: string;
|
|
1331
1397
|
/** Inner padding of the composer form (raw CSS shorthand). @default "0.75rem 1rem" */
|
|
1332
1398
|
padding?: string;
|
|
1333
1399
|
/** Gap between the textarea row and the actions row. @default "0.5rem" */
|
|
@@ -1346,12 +1412,18 @@ interface ComposerChromeTokens {
|
|
|
1346
1412
|
controlSize?: string;
|
|
1347
1413
|
/** Glyph box inside those controls. @default "24px" */
|
|
1348
1414
|
controlIconSize?: string;
|
|
1415
|
+
/** Send/stop glyph size. Explicit sendButton.iconSize wins. V5: 18px. */
|
|
1416
|
+
sendIconSize?: string;
|
|
1417
|
+
/** Icon-mode submit button radius. V4 inherits the primary button; V5: 9999px. */
|
|
1418
|
+
sendButtonRadius?: string;
|
|
1419
|
+
/** Footer top border (CSS shorthand). V4: 1px solid divider; V5: none. */
|
|
1420
|
+
footerBorder?: string;
|
|
1349
1421
|
/**
|
|
1350
1422
|
* Background painted behind an overlaid composer footer
|
|
1351
1423
|
* (`composer.placement: "overlay"`). Any CSS `background` value, gradients
|
|
1352
1424
|
* included — same convention as the shadow tokens. Inert under
|
|
1353
1425
|
* `placement: "block"`.
|
|
1354
|
-
* @default "transparent"
|
|
1426
|
+
* @default "transparent" (V4); a theme-aware 24px fade (V5)
|
|
1355
1427
|
*/
|
|
1356
1428
|
overlayBand?: string;
|
|
1357
1429
|
/** Segmented mode-group track. */
|
|
@@ -1527,6 +1599,8 @@ interface ScrollToBottomTokens extends ComponentTokenSet {
|
|
|
1527
1599
|
}
|
|
1528
1600
|
/** Visual tokens shared by one suggestion presentation variant. */
|
|
1529
1601
|
interface SuggestionVariantTokens extends ComponentTokenSet {
|
|
1602
|
+
/** Label weight. V4: 500; V5: 400. */
|
|
1603
|
+
fontWeight?: string;
|
|
1530
1604
|
/** Space inside one item, between its icon and its copy. */
|
|
1531
1605
|
gap?: string;
|
|
1532
1606
|
/** Space between suggestion items in the container. */
|
|
@@ -1575,6 +1649,7 @@ interface ComponentTokens {
|
|
|
1575
1649
|
voice: VoiceTokens;
|
|
1576
1650
|
approval: ApprovalTokens;
|
|
1577
1651
|
attachment: AttachmentTokens;
|
|
1652
|
+
activity?: ActivityTokens;
|
|
1578
1653
|
toolBubble: ToolBubbleTokens;
|
|
1579
1654
|
reasoningBubble: ReasoningBubbleTokens;
|
|
1580
1655
|
/** Event-stream inspector badge chips. */
|
|
@@ -1704,6 +1779,7 @@ type RuntypeExecutionStreamEvent = ({
|
|
|
1704
1779
|
turnIndex?: number;
|
|
1705
1780
|
type: "turn_start";
|
|
1706
1781
|
}) | ({
|
|
1782
|
+
attributes?: Record<string, string | number | boolean>;
|
|
1707
1783
|
completedAt?: string;
|
|
1708
1784
|
content?: string;
|
|
1709
1785
|
cost?: number;
|
|
@@ -1762,7 +1838,8 @@ type RuntypeExecutionStreamEvent = ({
|
|
|
1762
1838
|
};
|
|
1763
1839
|
turnId?: string;
|
|
1764
1840
|
type: "model_call_start";
|
|
1765
|
-
} | {
|
|
1841
|
+
} | ({
|
|
1842
|
+
attributes?: Record<string, string | number | boolean>;
|
|
1766
1843
|
completedAt?: string;
|
|
1767
1844
|
cost?: number;
|
|
1768
1845
|
durationMs?: number;
|
|
@@ -1786,10 +1863,11 @@ type RuntypeExecutionStreamEvent = ({
|
|
|
1786
1863
|
cacheWrite?: number;
|
|
1787
1864
|
input: number;
|
|
1788
1865
|
output: number;
|
|
1866
|
+
reasoning?: number;
|
|
1789
1867
|
};
|
|
1790
1868
|
turnId?: string;
|
|
1791
1869
|
type: "model_call_complete";
|
|
1792
|
-
} | {
|
|
1870
|
+
}) | {
|
|
1793
1871
|
executionId: string;
|
|
1794
1872
|
id: string;
|
|
1795
1873
|
index?: number;
|
|
@@ -2889,10 +2967,32 @@ type AgentWidgetContextMentionTokenRenderContext = {
|
|
|
2889
2967
|
ref: AgentWidgetContextMentionRef;
|
|
2890
2968
|
readonly: boolean;
|
|
2891
2969
|
};
|
|
2970
|
+
/** One earlier client-tool call replayed to the model, in `/v1/dispatch` shape. */
|
|
2971
|
+
type AgentWidgetReplayedToolCall = {
|
|
2972
|
+
toolCallId: string;
|
|
2973
|
+
/** Model-facing (sanitized) name, e.g. `webmcp_search`. */
|
|
2974
|
+
toolName: string;
|
|
2975
|
+
args: Record<string, unknown>;
|
|
2976
|
+
};
|
|
2977
|
+
/** The browser's answer to an {@link AgentWidgetReplayedToolCall}. */
|
|
2978
|
+
type AgentWidgetReplayedToolResult = {
|
|
2979
|
+
toolCallId: string;
|
|
2980
|
+
toolName: string;
|
|
2981
|
+
result: unknown;
|
|
2982
|
+
};
|
|
2983
|
+
/**
|
|
2984
|
+
* A message in the proxy/agent request payload. Earlier client-tool calls the
|
|
2985
|
+
* browser answered replay as an assistant message carrying `toolCalls`,
|
|
2986
|
+
* followed by a `tool` message carrying the matching `toolResults`; both have
|
|
2987
|
+
* empty `content`. Client-token mode never sends them: the server replays
|
|
2988
|
+
* from its own stored transcript there.
|
|
2989
|
+
*/
|
|
2892
2990
|
type AgentWidgetRequestPayloadMessage = {
|
|
2893
|
-
role: AgentWidgetMessageRole;
|
|
2991
|
+
role: AgentWidgetMessageRole | "tool";
|
|
2894
2992
|
content: MessageContent;
|
|
2895
2993
|
createdAt: string;
|
|
2994
|
+
toolCalls?: AgentWidgetReplayedToolCall[];
|
|
2995
|
+
toolResults?: AgentWidgetReplayedToolResult[];
|
|
2896
2996
|
};
|
|
2897
2997
|
type AgentWidgetRequestPayload = {
|
|
2898
2998
|
messages: AgentWidgetRequestPayloadMessage[];
|
|
@@ -3255,6 +3355,24 @@ type AgentMessageMetadata = {
|
|
|
3255
3355
|
* never re-resume the call.
|
|
3256
3356
|
*/
|
|
3257
3357
|
suggestRepliesResolved?: boolean;
|
|
3358
|
+
/**
|
|
3359
|
+
* The client-tool answer the server accepted through `/resume`, kept so
|
|
3360
|
+
* later proxy/agent turns can replay the call and its result to the model.
|
|
3361
|
+
* `toolName` is the widget's internal name (`webmcp:<name>` or a bare
|
|
3362
|
+
* built-in). Set only after the resume succeeds; preserved across
|
|
3363
|
+
* re-emissions of the tool message.
|
|
3364
|
+
*/
|
|
3365
|
+
clientToolAnswer?: {
|
|
3366
|
+
toolCallId: string;
|
|
3367
|
+
toolName: string;
|
|
3368
|
+
args: unknown;
|
|
3369
|
+
result: unknown;
|
|
3370
|
+
/**
|
|
3371
|
+
* Shared by the answers posted in one `/resume`, i.e. one assistant
|
|
3372
|
+
* turn's parallel calls; a chained call gets a new batch.
|
|
3373
|
+
*/
|
|
3374
|
+
batch?: string;
|
|
3375
|
+
};
|
|
3258
3376
|
};
|
|
3259
3377
|
type AgentWidgetRequestMiddlewareContext = {
|
|
3260
3378
|
payload: AgentWidgetRequestPayload;
|
|
@@ -4252,6 +4370,14 @@ type AgentWidgetToolCallCollapsedMode = "tool-call" | "tool-name" | "tool-previe
|
|
|
4252
4370
|
*/
|
|
4253
4371
|
type AgentWidgetToolCallLoadingAnimation = "none" | "pulse" | "shimmer" | "shimmer-color" | "rainbow";
|
|
4254
4372
|
type AgentWidgetToolCallDisplayFeature = {
|
|
4373
|
+
/** Activity chrome. Defaults to card in V4 and row with future.v5Defaults. */
|
|
4374
|
+
variant?: "card" | "row";
|
|
4375
|
+
/** Row status icons: always, active/attention-needed only, or never. V5 defaults to active; V4 to always. */
|
|
4376
|
+
iconVisibility?: "always" | "active" | "never";
|
|
4377
|
+
/** Row variant: open when the first content chunk arrives. Default false in V5; true in V4. */
|
|
4378
|
+
autoExpand?: boolean;
|
|
4379
|
+
/** Row variant: collapse once after completion, in ms; false disables. Default 1000. */
|
|
4380
|
+
autoCollapseDelay?: number | false;
|
|
4255
4381
|
/**
|
|
4256
4382
|
* Controls what collapsed tool call rows show in their header/summary area.
|
|
4257
4383
|
* @default "tool-call"
|
|
@@ -4282,9 +4408,10 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4282
4408
|
* Controls how a grouped tool sequence is rendered.
|
|
4283
4409
|
* - `"stack"`: show the group summary and each child tool row.
|
|
4284
4410
|
* - `"summary"`: show one consolidated summary row only.
|
|
4411
|
+
* - `"collapsible"`: expandable activity group (V5 default).
|
|
4285
4412
|
* @default "stack"
|
|
4286
4413
|
*/
|
|
4287
|
-
groupedMode?: "stack" | "summary";
|
|
4414
|
+
groupedMode?: "stack" | "summary" | "collapsible";
|
|
4288
4415
|
/**
|
|
4289
4416
|
* What happens to a tool call row once it completes.
|
|
4290
4417
|
*
|
|
@@ -4315,6 +4442,14 @@ type AgentWidgetToolCallDisplayFeature = {
|
|
|
4315
4442
|
/** See `features.toolCallDisplay.completedVisibility`. */
|
|
4316
4443
|
type AgentWidgetToolCallCompletedVisibility = "kept" | "removed";
|
|
4317
4444
|
type AgentWidgetReasoningDisplayFeature = {
|
|
4445
|
+
/** Activity chrome. Defaults to card in V4 and row with future.v5Defaults. */
|
|
4446
|
+
variant?: "card" | "row";
|
|
4447
|
+
/** Row status icons: always, active/attention-needed only, or never. V5 defaults to active; V4 to always. */
|
|
4448
|
+
iconVisibility?: "always" | "active" | "never";
|
|
4449
|
+
/** Row variant: open when the first content chunk arrives. Default false in V5; true in V4. */
|
|
4450
|
+
autoExpand?: boolean;
|
|
4451
|
+
/** Row variant: collapse once after completion, in ms; false disables. Default 1000. */
|
|
4452
|
+
autoCollapseDelay?: number | false;
|
|
4318
4453
|
/**
|
|
4319
4454
|
* When true, active collapsed reasoning rows can render a lightweight preview block.
|
|
4320
4455
|
* @default false
|
|
@@ -5010,8 +5145,8 @@ interface AgentWidgetHistoryFeature {
|
|
|
5010
5145
|
* otherwise `"browser"`) and narrows it to what the provider advertises, so a
|
|
5011
5146
|
* browser-only provider is never asked for a scope it cannot serve. An
|
|
5012
5147
|
* explicit `features.history.scope` is a hard request and still fails closed
|
|
5013
|
-
* with `unsupported_scope`.
|
|
5014
|
-
*
|
|
5148
|
+
* with `unsupported_scope`. History operations on a supplied provider never
|
|
5149
|
+
* call `getIdentityProof`, and `HistoryOperationContext` carries only the resolved scope;
|
|
5015
5150
|
* report your own identity through `getIdentityStatus()` /
|
|
5016
5151
|
* `subscribeIdentityStatus()`, which is what the scope banner and its retry
|
|
5017
5152
|
* affordance read.
|
|
@@ -5395,7 +5530,7 @@ type EventStreamConfig = {
|
|
|
5395
5530
|
/**
|
|
5396
5531
|
* Fields to extract from event payloads for description text.
|
|
5397
5532
|
* The first matching field value is displayed after the badge.
|
|
5398
|
-
* @default ["flowName", "stepName", "name", "tool", "toolName"]
|
|
5533
|
+
* @default ["flowName", "stepName", "reasoningText", "text", "name", "tool", "toolName"]
|
|
5399
5534
|
*/
|
|
5400
5535
|
descriptionFields?: string[];
|
|
5401
5536
|
/**
|
|
@@ -5606,6 +5741,8 @@ type AgentWidgetComposerBarPeekConfig = {
|
|
|
5606
5741
|
streamAnimation?: AgentWidgetStreamAnimationFeature;
|
|
5607
5742
|
};
|
|
5608
5743
|
type AgentWidgetLauncherConfig = {
|
|
5744
|
+
/** Collapsed launcher shape. V4 defaults to pill; V5 defaults to circle. */
|
|
5745
|
+
variant?: "pill" | "circle";
|
|
5609
5746
|
enabled?: boolean;
|
|
5610
5747
|
title?: string;
|
|
5611
5748
|
subtitle?: string;
|
|
@@ -6349,9 +6486,9 @@ type AgentWidgetComposerConfig = {
|
|
|
6349
6486
|
/**
|
|
6350
6487
|
* Where the composer footer sits relative to the transcript.
|
|
6351
6488
|
*
|
|
6352
|
-
* - `"block"` (default): the footer is a flex sibling below the scroll body.
|
|
6489
|
+
* - `"block"` (V4 default): the footer is a flex sibling below the scroll body.
|
|
6353
6490
|
* Nothing scrolls behind it.
|
|
6354
|
-
* - `"overlay"
|
|
6491
|
+
* - `"overlay"` (V5 default): the footer is absolutely overlaid on the scroll body, so the
|
|
6355
6492
|
* transcript scrolls behind it (the chatgpt.com / claude.ai model, where the
|
|
6356
6493
|
* composer is sticky inside the scroller). The widget reserves the footer's
|
|
6357
6494
|
* live height as bottom padding on the scroll body and on a plugin welcome
|
|
@@ -6363,7 +6500,7 @@ type AgentWidgetComposerConfig = {
|
|
|
6363
6500
|
* included) and `theme.components.input.backdropFilter`.
|
|
6364
6501
|
*
|
|
6365
6502
|
* Ignored in composer-bar mount mode, which owns its own geometry.
|
|
6366
|
-
* @default "block"
|
|
6503
|
+
* @default "block" (V4), "overlay" (V5)
|
|
6367
6504
|
*/
|
|
6368
6505
|
placement?: ComposerPlacement;
|
|
6369
6506
|
/**
|
|
@@ -6377,8 +6514,9 @@ type AgentWidgetComposerConfig = {
|
|
|
6377
6514
|
*
|
|
6378
6515
|
* `"single-row"` describes the IDLE composer only. It composes with the
|
|
6379
6516
|
* compact state, so a wrapped draft, chips, attachment previews, a quote, a
|
|
6380
|
-
* pending card
|
|
6381
|
-
* as `data-persona-composer-compact` does today.
|
|
6517
|
+
* pending card all fall back to the stacked card, exactly
|
|
6518
|
+
* as `data-persona-composer-compact` does today. Recording alone does not
|
|
6519
|
+
* expand the composer; dictated text expands it when it wraps.
|
|
6382
6520
|
*
|
|
6383
6521
|
* Ignored in composer-bar mount mode, whose pill is already one row.
|
|
6384
6522
|
* @default "stacked"
|
|
@@ -6420,7 +6558,14 @@ type AgentWidgetClearChatConfig = {
|
|
|
6420
6558
|
showTooltip?: boolean;
|
|
6421
6559
|
};
|
|
6422
6560
|
type AgentWidgetStatusIndicatorConfig = {
|
|
6561
|
+
/** Show the indicator. Explicit false also hides transient connection states. */
|
|
6423
6562
|
visible?: boolean;
|
|
6563
|
+
/**
|
|
6564
|
+
* "always" shows status beneath the composer; "transient" shows connecting,
|
|
6565
|
+
* reconnecting, and error status above it, hiding normal idle/streaming status.
|
|
6566
|
+
* Available in both defaults states. Default: "always" in v4, "transient" in v5.
|
|
6567
|
+
*/
|
|
6568
|
+
mode?: "always" | "transient";
|
|
6424
6569
|
/** Text alignment. Default: 'right'. */
|
|
6425
6570
|
align?: 'left' | 'center' | 'right';
|
|
6426
6571
|
idleText?: string;
|
|
@@ -7195,7 +7340,8 @@ type AgentWidgetResolvedSuggestion = {
|
|
|
7195
7340
|
};
|
|
7196
7341
|
/** Presentation keys shared by every suggestion surface. */
|
|
7197
7342
|
type AgentWidgetSuggestionSurfaceConfig = {
|
|
7198
|
-
/** Item density.
|
|
7343
|
+
/** Item density. V4 starters: card. V5 starters: chip, or card in fullscreen.
|
|
7344
|
+
* Follow-ups default to chip. */
|
|
7199
7345
|
variant?: AgentWidgetSuggestionVariant;
|
|
7200
7346
|
/** Default click behavior, overridable per item. Defaults to `send`. */
|
|
7201
7347
|
behavior?: AgentWidgetSuggestionBehavior;
|
|
@@ -7206,7 +7352,7 @@ type AgentWidgetSuggestionSurfaceConfig = {
|
|
|
7206
7352
|
* own stacking.
|
|
7207
7353
|
*/
|
|
7208
7354
|
overflow?: "scroll" | "wrap";
|
|
7209
|
-
/** Maximum visible items. Defaults to 4. */
|
|
7355
|
+
/** Maximum visible items. Defaults to 4, or 3 for V5 non-fullscreen starters. */
|
|
7210
7356
|
maxItems?: number;
|
|
7211
7357
|
};
|
|
7212
7358
|
type AgentWidgetStarterSuggestionsConfig = AgentWidgetSuggestionSurfaceConfig & {
|
|
@@ -7260,8 +7406,8 @@ type AgentWidgetSuggestionsConfig = {
|
|
|
7260
7406
|
type AgentWidgetWelcomeVariant = "card" | "hero" | "none";
|
|
7261
7407
|
/**
|
|
7262
7408
|
* When the welcome surface goes away. `"never"` is the default for `"card"`;
|
|
7263
|
-
* `"on-first-message"` is
|
|
7264
|
-
*
|
|
7409
|
+
* `"on-first-message"` is forced for legacy V4 `"hero"`. V5 defaults every
|
|
7410
|
+
* variant to `"on-first-message"`. Explicit layout opts into overridable dismissal.
|
|
7265
7411
|
*/
|
|
7266
7412
|
type AgentWidgetWelcomeDismiss = "never" | "on-first-message";
|
|
7267
7413
|
/**
|
|
@@ -7315,7 +7461,10 @@ type AgentWidgetWelcomeAlign = "start" | "center";
|
|
|
7315
7461
|
* host-set value from a filled-in default.
|
|
7316
7462
|
*/
|
|
7317
7463
|
interface AgentWidgetWelcomeConfig {
|
|
7318
|
-
/**
|
|
7464
|
+
/** Vertical placement: V4 defaults to top; V5 to centered. Fullscreen centered
|
|
7465
|
+
* welcomes also raise the empty composer unless `anchor` is explicitly set. */
|
|
7466
|
+
layout?: "top" | "centered";
|
|
7467
|
+
/** Card or hero title. V4: "Hello 👋". V5: "What can I help with?". */
|
|
7319
7468
|
title?: string;
|
|
7320
7469
|
/**
|
|
7321
7470
|
* Small muted line above the title, e.g. a section name. Omitted when unset
|
|
@@ -7328,19 +7477,22 @@ interface AgentWidgetWelcomeConfig {
|
|
|
7328
7477
|
icon?: AgentWidgetWelcomeIcon;
|
|
7329
7478
|
/**
|
|
7330
7479
|
* Horizontal alignment of the kicker, title, subtitle, and starter
|
|
7331
|
-
* suggestions.
|
|
7480
|
+
* suggestions. Centered layouts default to center. Otherwise unset follows
|
|
7481
|
+
* the variant: `card` starts, `hero` centers.
|
|
7332
7482
|
*/
|
|
7333
7483
|
align?: AgentWidgetWelcomeAlign;
|
|
7334
7484
|
/** @default "card" */
|
|
7335
7485
|
variant?: AgentWidgetWelcomeVariant;
|
|
7336
|
-
/**
|
|
7486
|
+
/** V4: never for card, forced on-first-message for hero. V5: on-first-message
|
|
7487
|
+
* for all variants; explicit values win. Explicit layout also allows overriding
|
|
7488
|
+
* the legacy hero dismissal in V4. */
|
|
7337
7489
|
dismiss?: AgentWidgetWelcomeDismiss;
|
|
7338
7490
|
/**
|
|
7339
7491
|
* Vertical anchoring of the greeting-plus-composer pair in the EMPTY
|
|
7340
7492
|
* conversation only. On the first message the pair drops to the bottom
|
|
7341
7493
|
* (animated; see `data-persona-conversation-state`).
|
|
7342
7494
|
*
|
|
7343
|
-
* - `"bottom"
|
|
7495
|
+
* - `"bottom"`: the composer stays pinned at the bottom.
|
|
7344
7496
|
* - `"center"`: greeting and composer float together so the composer's top
|
|
7345
7497
|
* edge lands at `anchorComposerTop` of the panel column, and the welcome
|
|
7346
7498
|
* surface is end-anchored `composerGap` above it.
|
|
@@ -7348,7 +7500,8 @@ interface AgentWidgetWelcomeConfig {
|
|
|
7348
7500
|
* Composes with either `composer.placement`. Ignored in composer-bar mount
|
|
7349
7501
|
* mode. `renderWelcome` plugin content inherits the anchor: the widget
|
|
7350
7502
|
* positions the overlay host and reserves the composer zone.
|
|
7351
|
-
*
|
|
7503
|
+
* Defaults to bottom, except centered fullscreen layouts, which center the
|
|
7504
|
+
* measured greeting/composer group when no anchor override is supplied.
|
|
7352
7505
|
*/
|
|
7353
7506
|
anchor?: AgentWidgetWelcomeAnchor;
|
|
7354
7507
|
/**
|
|
@@ -7840,6 +7993,9 @@ type AgentWidgetLayoutConfig = {
|
|
|
7840
7993
|
* `launcher.composerBar.contentMaxWidth`)
|
|
7841
7994
|
*/
|
|
7842
7995
|
contentMaxWidth?: string;
|
|
7996
|
+
/** Fade the transcript's top edge when content is scrolled above it.
|
|
7997
|
+
* Defaults to false in V4 and true with future.v5Defaults. */
|
|
7998
|
+
topFade?: boolean;
|
|
7843
7999
|
};
|
|
7844
8000
|
/**
|
|
7845
8001
|
* Token types for marked renderer methods
|
|
@@ -8453,7 +8609,30 @@ type AgentWidgetLoadingIndicatorConfig = {
|
|
|
8453
8609
|
*/
|
|
8454
8610
|
renderIdle?: (context: IdleIndicatorRenderContext) => HTMLElement | null;
|
|
8455
8611
|
};
|
|
8612
|
+
/** Built-in `sessionInit` triggers. See {@link AgentWidgetConfig.sessionInit}. */
|
|
8613
|
+
type AgentWidgetSessionInitTrigger = 'input' | 'focus' | 'mount' | 'send';
|
|
8614
|
+
/**
|
|
8615
|
+
* Custom `sessionInit` trigger. Runs when the widget mounts in client token mode,
|
|
8616
|
+
* and again if `update()` swaps in a different function. Call `warm()` whenever
|
|
8617
|
+
* the visitor shows intent (it is safe to call repeatedly). Return a cleanup to
|
|
8618
|
+
* run when the widget is destroyed or the hook is replaced.
|
|
8619
|
+
*/
|
|
8620
|
+
type AgentWidgetSessionInitHook = (context: {
|
|
8621
|
+
/** Fire-and-forget early session init; latched and error-swallowing. */
|
|
8622
|
+
warm: () => void;
|
|
8623
|
+
/** The widget's mount element. */
|
|
8624
|
+
mount: HTMLElement;
|
|
8625
|
+
}) => void | (() => void);
|
|
8456
8626
|
type AgentWidgetConfig = {
|
|
8627
|
+
/** Opt in to upcoming major-version defaults without changing explicit settings. */
|
|
8628
|
+
future?: {
|
|
8629
|
+
/**
|
|
8630
|
+
* Use the v5 default styling as it rolls out in 4.x. Every affected setting
|
|
8631
|
+
* remains independently configurable. Explicit options and theme tokens win.
|
|
8632
|
+
* @default false
|
|
8633
|
+
*/
|
|
8634
|
+
v5Defaults?: boolean;
|
|
8635
|
+
};
|
|
8457
8636
|
apiUrl?: string;
|
|
8458
8637
|
flowId?: string;
|
|
8459
8638
|
/**
|
|
@@ -8608,6 +8787,46 @@ type AgentWidgetConfig = {
|
|
|
8608
8787
|
* ```
|
|
8609
8788
|
*/
|
|
8610
8789
|
onSessionExpired?: () => void;
|
|
8790
|
+
/**
|
|
8791
|
+
* When the widget calls `/v1/client/init` in client token mode, ahead of the
|
|
8792
|
+
* first send. Ignored outside client token mode.
|
|
8793
|
+
*
|
|
8794
|
+
* - `'input'` (default): on the composer's first user keystroke that leaves
|
|
8795
|
+
* non-empty text. Programmatic value changes (restored drafts,
|
|
8796
|
+
* `setMessage()`, history recall) do not count.
|
|
8797
|
+
* - `'focus'`: when the visitor focuses the composer by pointer or Tab (and
|
|
8798
|
+
* on first input, as a fallback). Programmatic focus, such as
|
|
8799
|
+
* `autoFocusInput` on open or mount, does not count.
|
|
8800
|
+
* - `'mount'`: as soon as the widget mounts (the behavior before this option
|
|
8801
|
+
* existed). Use it when a server-configured welcome message, which arrives
|
|
8802
|
+
* with the init response, must show before the visitor types.
|
|
8803
|
+
* - `'send'`: no early init; the first send initializes the session.
|
|
8804
|
+
* - A function: custom trigger. Called on mount (and when `update()` swaps
|
|
8805
|
+
* in a different function) with a `warm` callback to call whenever you
|
|
8806
|
+
* decide (e.g. on hover); may return a cleanup that runs on destroy or
|
|
8807
|
+
* replacement. Replaces the built-in triggers.
|
|
8808
|
+
*
|
|
8809
|
+
* The early init is fire-and-forget: it runs at most once per session
|
|
8810
|
+
* lifetime (re-armed after expiry or a new conversation), sends exactly the
|
|
8811
|
+
* same request the send would, and swallows errors. A failure resurfaces
|
|
8812
|
+
* when the send retries init. A send during an in-flight early init reuses
|
|
8813
|
+
* it, so only one `/v1/client/init` is issued. When visitor history is
|
|
8814
|
+
* enabled the widget still initializes on mount to restore the conversation.
|
|
8815
|
+
* Hosts can also trigger it imperatively with `controller.warmSession()`.
|
|
8816
|
+
*
|
|
8817
|
+
* @default 'input'
|
|
8818
|
+
*
|
|
8819
|
+
* @example
|
|
8820
|
+
* ```typescript
|
|
8821
|
+
* config: {
|
|
8822
|
+
* clientToken: 'ct_live_...',
|
|
8823
|
+
* sessionInit: ({ warm, mount }) => {
|
|
8824
|
+
* mount.addEventListener('pointerenter', warm, { once: true });
|
|
8825
|
+
* }
|
|
8826
|
+
* }
|
|
8827
|
+
* ```
|
|
8828
|
+
*/
|
|
8829
|
+
sessionInit?: AgentWidgetSessionInitTrigger | AgentWidgetSessionInitHook;
|
|
8611
8830
|
/**
|
|
8612
8831
|
* Get stored session ID for session resumption (client token mode only).
|
|
8613
8832
|
* Called when initializing a new session to check if there's a previous session_id
|
|
@@ -8640,13 +8859,20 @@ type AgentWidgetConfig = {
|
|
|
8640
8859
|
*/
|
|
8641
8860
|
setStoredSessionId?: (sessionId: string) => void;
|
|
8642
8861
|
/**
|
|
8643
|
-
*
|
|
8862
|
+
* With identityProvider, called before every client-token chat POST, including retries, independently of history.
|
|
8863
|
+
* Also called immediately before any cross-device history request and before a
|
|
8644
8864
|
* conversationId resume of a conversation discovered on another device.
|
|
8645
|
-
* Return a fresh end-user access token (rt_eu_… / JWT). Null
|
|
8646
|
-
*
|
|
8647
|
-
* until resetHistoryIdentity()
|
|
8865
|
+
* Return a fresh end-user access token (rt_eu_… / JWT). Null stops identity-enabled chat.
|
|
8866
|
+
* For history only, null uses exact-browser scope for a never-bound visitor;
|
|
8867
|
+
* a bound visitor fails closed until resetHistoryIdentity(). Never cached.
|
|
8648
8868
|
*/
|
|
8649
8869
|
getIdentityProof?: () => string | null | Promise<string | null>;
|
|
8870
|
+
/**
|
|
8871
|
+
* Provider name registered with Runtype, for example "clerk". Enables per-request
|
|
8872
|
+
* chat identity through getIdentityProof without enabling history. A missing or
|
|
8873
|
+
* failed proof stops the turn; omitting this preserves history-only callbacks.
|
|
8874
|
+
*/
|
|
8875
|
+
identityProvider?: string;
|
|
8650
8876
|
/**
|
|
8651
8877
|
* Read the persisted active conversation id (client token mode only).
|
|
8652
8878
|
* Called only after the internal stored-state bootstrap gate resolves.
|
|
@@ -9320,6 +9546,8 @@ type AgentWidgetReasoning = {
|
|
|
9320
9546
|
durationMs?: number;
|
|
9321
9547
|
};
|
|
9322
9548
|
type AgentWidgetToolCall = {
|
|
9549
|
+
/** Optional approval state for activity-row status chrome. */
|
|
9550
|
+
approvalStatus?: "pending" | "approved" | "denied" | "timeout";
|
|
9323
9551
|
id: string;
|
|
9324
9552
|
name?: string;
|
|
9325
9553
|
status: "pending" | "running" | "complete";
|