@genesislcap/ai-assistant 15.60.0 → 15.61.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/custom-elements.json +1821 -1821
- package/package.json +17 -17
|
@@ -1120,220 +1120,6 @@
|
|
|
1120
1120
|
}
|
|
1121
1121
|
]
|
|
1122
1122
|
},
|
|
1123
|
-
{
|
|
1124
|
-
"kind": "javascript-module",
|
|
1125
|
-
"path": "src/channel/ai-activity-bus.ts",
|
|
1126
|
-
"declarations": [
|
|
1127
|
-
{
|
|
1128
|
-
"kind": "variable",
|
|
1129
|
-
"name": "NOOP_ACTIVITY_BUS",
|
|
1130
|
-
"type": {
|
|
1131
|
-
"text": "ActivityBus"
|
|
1132
|
-
},
|
|
1133
|
-
"default": "{ publish: () => {} }",
|
|
1134
|
-
"description": "No-op ActivityBus. The default when no bus is injected (Node, tests, headless\nserver use) — publishing goes nowhere and nothing is left open to tear down."
|
|
1135
|
-
},
|
|
1136
|
-
{
|
|
1137
|
-
"kind": "class",
|
|
1138
|
-
"description": "Typed in-process event bus for AI assistant activity events.\n\nDispatches events synchronously to all local subscribers in the same JS module instance\n(i.e. the same browser tab). Events listed in `crossTabEvents` are additionally forwarded\nvia a shared `BroadcastChannel` so that other tabs on the same origin receive them.",
|
|
1139
|
-
"name": "AgenticActivityBus",
|
|
1140
|
-
"members": [
|
|
1141
|
-
{
|
|
1142
|
-
"kind": "field",
|
|
1143
|
-
"name": "subscribers",
|
|
1144
|
-
"privacy": "private",
|
|
1145
|
-
"readonly": true,
|
|
1146
|
-
"default": "new Map<string, Set<AnyHandler>>()"
|
|
1147
|
-
},
|
|
1148
|
-
{
|
|
1149
|
-
"kind": "field",
|
|
1150
|
-
"name": "crossTabEvents",
|
|
1151
|
-
"type": {
|
|
1152
|
-
"text": "Set<string>"
|
|
1153
|
-
},
|
|
1154
|
-
"privacy": "private",
|
|
1155
|
-
"readonly": true,
|
|
1156
|
-
"default": "new Set(config?.crossTabEvents ?? [])"
|
|
1157
|
-
},
|
|
1158
|
-
{
|
|
1159
|
-
"kind": "field",
|
|
1160
|
-
"name": "channelNameFactory",
|
|
1161
|
-
"type": {
|
|
1162
|
-
"text": "() => string | undefined"
|
|
1163
|
-
},
|
|
1164
|
-
"privacy": "private",
|
|
1165
|
-
"readonly": true
|
|
1166
|
-
},
|
|
1167
|
-
{
|
|
1168
|
-
"kind": "field",
|
|
1169
|
-
"name": "channel",
|
|
1170
|
-
"type": {
|
|
1171
|
-
"text": "BroadcastChannel | undefined"
|
|
1172
|
-
},
|
|
1173
|
-
"privacy": "private"
|
|
1174
|
-
},
|
|
1175
|
-
{
|
|
1176
|
-
"kind": "field",
|
|
1177
|
-
"name": "channelInitialised",
|
|
1178
|
-
"type": {
|
|
1179
|
-
"text": "boolean"
|
|
1180
|
-
},
|
|
1181
|
-
"privacy": "private",
|
|
1182
|
-
"default": "false"
|
|
1183
|
-
},
|
|
1184
|
-
{
|
|
1185
|
-
"kind": "method",
|
|
1186
|
-
"name": "ensureChannel",
|
|
1187
|
-
"privacy": "private",
|
|
1188
|
-
"return": {
|
|
1189
|
-
"type": {
|
|
1190
|
-
"text": "void"
|
|
1191
|
-
}
|
|
1192
|
-
},
|
|
1193
|
-
"description": "Lazily open the cross-tab `BroadcastChannel` on first use. Deferred (rather than\ncreated in the constructor) so that importing this module, or constructing the bus\noff-browser (Node, tests, headless server), never opens a live channel or reads\n`sessionStorage` — both would keep a Node event loop alive and hang the process.\nCross-tab forwarding is inherently browser-only, so channel creation is gated on a\nbrowser environment; elsewhere the bus stays purely in-process."
|
|
1194
|
-
},
|
|
1195
|
-
{
|
|
1196
|
-
"kind": "method",
|
|
1197
|
-
"name": "subscribe",
|
|
1198
|
-
"return": {
|
|
1199
|
-
"type": {
|
|
1200
|
-
"text": "() => void"
|
|
1201
|
-
}
|
|
1202
|
-
},
|
|
1203
|
-
"parameters": [
|
|
1204
|
-
{
|
|
1205
|
-
"name": "type",
|
|
1206
|
-
"type": {
|
|
1207
|
-
"text": "K"
|
|
1208
|
-
}
|
|
1209
|
-
},
|
|
1210
|
-
{
|
|
1211
|
-
"name": "handler",
|
|
1212
|
-
"type": {
|
|
1213
|
-
"text": "(detail: AgenticActivityEvents[K]) => void"
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
],
|
|
1217
|
-
"description": "Subscribe to an event. Returns an unsubscribe function — call it in\n`disconnectedCallback` to avoid memory leaks."
|
|
1218
|
-
},
|
|
1219
|
-
{
|
|
1220
|
-
"kind": "method",
|
|
1221
|
-
"name": "publish",
|
|
1222
|
-
"return": {
|
|
1223
|
-
"type": {
|
|
1224
|
-
"text": "void"
|
|
1225
|
-
}
|
|
1226
|
-
},
|
|
1227
|
-
"parameters": [
|
|
1228
|
-
{
|
|
1229
|
-
"name": "type",
|
|
1230
|
-
"type": {
|
|
1231
|
-
"text": "K"
|
|
1232
|
-
}
|
|
1233
|
-
},
|
|
1234
|
-
{
|
|
1235
|
-
"name": "detail",
|
|
1236
|
-
"type": {
|
|
1237
|
-
"text": "AgenticActivityEvents[K]"
|
|
1238
|
-
}
|
|
1239
|
-
}
|
|
1240
|
-
],
|
|
1241
|
-
"description": "Publish an event to all local subscribers and, if configured, to other tabs\nvia BroadcastChannel."
|
|
1242
|
-
},
|
|
1243
|
-
{
|
|
1244
|
-
"kind": "method",
|
|
1245
|
-
"name": "addCrossTabEvent",
|
|
1246
|
-
"return": {
|
|
1247
|
-
"type": {
|
|
1248
|
-
"text": "void"
|
|
1249
|
-
}
|
|
1250
|
-
},
|
|
1251
|
-
"parameters": [
|
|
1252
|
-
{
|
|
1253
|
-
"name": "type",
|
|
1254
|
-
"type": {
|
|
1255
|
-
"text": "keyof AgenticActivityEvents"
|
|
1256
|
-
}
|
|
1257
|
-
}
|
|
1258
|
-
],
|
|
1259
|
-
"description": "Add an event type to the cross-tab forwarding set at runtime.\nMust be called before the first AgenticActivityBus.publish of that event type."
|
|
1260
|
-
},
|
|
1261
|
-
{
|
|
1262
|
-
"kind": "method",
|
|
1263
|
-
"name": "close",
|
|
1264
|
-
"return": {
|
|
1265
|
-
"type": {
|
|
1266
|
-
"text": "void"
|
|
1267
|
-
}
|
|
1268
|
-
},
|
|
1269
|
-
"description": "Close the underlying BroadcastChannel. Call once on application teardown if needed."
|
|
1270
|
-
},
|
|
1271
|
-
{
|
|
1272
|
-
"kind": "method",
|
|
1273
|
-
"name": "notifyLocal",
|
|
1274
|
-
"privacy": "private",
|
|
1275
|
-
"return": {
|
|
1276
|
-
"type": {
|
|
1277
|
-
"text": "void"
|
|
1278
|
-
}
|
|
1279
|
-
},
|
|
1280
|
-
"parameters": [
|
|
1281
|
-
{
|
|
1282
|
-
"name": "type",
|
|
1283
|
-
"type": {
|
|
1284
|
-
"text": "string"
|
|
1285
|
-
}
|
|
1286
|
-
},
|
|
1287
|
-
{
|
|
1288
|
-
"name": "detail",
|
|
1289
|
-
"type": {
|
|
1290
|
-
"text": "unknown"
|
|
1291
|
-
}
|
|
1292
|
-
}
|
|
1293
|
-
]
|
|
1294
|
-
}
|
|
1295
|
-
]
|
|
1296
|
-
},
|
|
1297
|
-
{
|
|
1298
|
-
"kind": "variable",
|
|
1299
|
-
"name": "agenticActivityBus",
|
|
1300
|
-
"default": "new AgenticActivityBus({\n crossTabEvents: ['halo-start', 'halo-stop', 'tool-loop-start', 'tool-loop-end'],\n // Lazy: the tab-scoped name (and its `sessionStorage` read) is computed on first\n // cross-tab use in a browser, not at module-eval — so importing this module is\n // side-effect-free and Node/test-safe.\n channelNameFactory: () => getTabScopedChannelName('foundation-ai-activity'),\n})",
|
|
1301
|
-
"description": "Pre-instantiated singleton event bus for AI assistant activity.\n\n- `halo-start` / `halo-stop` are forwarded via a tab-scoped `BroadcastChannel` so that\n popout windows opened from this tab show halo animations, while remaining isolated from\n unrelated tabs on the same origin (tab-scoped channel name).\n- `tool-loop-start` / `tool-loop-end` are cross-tab for the same reason: they describe the\n assistant's lifecycle (a turn beginning / ending), and the most common subscribers\n (workspace transitions, post-turn deferred recomputation, UI gates tied to the assistant\n being idle) need the event regardless of whether the user is interacting with the chat\n in the main tab or a popout window. Tab-local-only telemetry can subscribe and filter.\n- `chat-popout` / `chat-popin` are in-memory only — they must only affect the tab where the\n user clicked."
|
|
1302
|
-
}
|
|
1303
|
-
],
|
|
1304
|
-
"exports": [
|
|
1305
|
-
{
|
|
1306
|
-
"kind": "js",
|
|
1307
|
-
"name": "NOOP_ACTIVITY_BUS",
|
|
1308
|
-
"declaration": {
|
|
1309
|
-
"name": "NOOP_ACTIVITY_BUS",
|
|
1310
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1311
|
-
}
|
|
1312
|
-
},
|
|
1313
|
-
{
|
|
1314
|
-
"kind": "js",
|
|
1315
|
-
"name": "AgenticActivityBus",
|
|
1316
|
-
"declaration": {
|
|
1317
|
-
"name": "AgenticActivityBus",
|
|
1318
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1319
|
-
}
|
|
1320
|
-
},
|
|
1321
|
-
{
|
|
1322
|
-
"kind": "js",
|
|
1323
|
-
"name": "agenticActivityBus",
|
|
1324
|
-
"declaration": {
|
|
1325
|
-
"name": "agenticActivityBus",
|
|
1326
|
-
"module": "src/channel/ai-activity-bus.ts"
|
|
1327
|
-
}
|
|
1328
|
-
}
|
|
1329
|
-
]
|
|
1330
|
-
},
|
|
1331
|
-
{
|
|
1332
|
-
"kind": "javascript-module",
|
|
1333
|
-
"path": "src/channel/ai-activity-channel.ts",
|
|
1334
|
-
"declarations": [],
|
|
1335
|
-
"exports": []
|
|
1336
|
-
},
|
|
1337
1123
|
{
|
|
1338
1124
|
"kind": "javascript-module",
|
|
1339
1125
|
"path": "src/components/flowing-waves-indicator.ts",
|
|
@@ -1860,491 +1646,910 @@
|
|
|
1860
1646
|
},
|
|
1861
1647
|
{
|
|
1862
1648
|
"kind": "javascript-module",
|
|
1863
|
-
"path": "src/
|
|
1864
|
-
"declarations": [],
|
|
1865
|
-
"exports": []
|
|
1866
|
-
},
|
|
1867
|
-
{
|
|
1868
|
-
"kind": "javascript-module",
|
|
1869
|
-
"path": "src/genesis/config.ts",
|
|
1649
|
+
"path": "src/channel/ai-activity-bus.ts",
|
|
1870
1650
|
"declarations": [
|
|
1871
1651
|
{
|
|
1872
1652
|
"kind": "variable",
|
|
1873
|
-
"name": "
|
|
1874
|
-
"type": {
|
|
1875
|
-
"text": "number"
|
|
1876
|
-
},
|
|
1877
|
-
"default": "50",
|
|
1878
|
-
"description": "The default read cap, and the ceiling the config may raise it to."
|
|
1879
|
-
},
|
|
1880
|
-
{
|
|
1881
|
-
"kind": "variable",
|
|
1882
|
-
"name": "MAX_ROWS_CEILING",
|
|
1653
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
1883
1654
|
"type": {
|
|
1884
|
-
"text": "
|
|
1655
|
+
"text": "ActivityBus"
|
|
1885
1656
|
},
|
|
1886
|
-
"default": "
|
|
1657
|
+
"default": "{ publish: () => {} }",
|
|
1658
|
+
"description": "No-op ActivityBus. The default when no bus is injected (Node, tests, headless\nserver use) — publishing goes nowhere and nothing is left open to tear down."
|
|
1887
1659
|
},
|
|
1888
1660
|
{
|
|
1889
|
-
"kind": "
|
|
1890
|
-
"
|
|
1891
|
-
"
|
|
1892
|
-
|
|
1893
|
-
"text": "string"
|
|
1894
|
-
}
|
|
1895
|
-
},
|
|
1896
|
-
"parameters": [
|
|
1661
|
+
"kind": "class",
|
|
1662
|
+
"description": "Typed in-process event bus for AI assistant activity events.\n\nDispatches events synchronously to all local subscribers in the same JS module instance\n(i.e. the same browser tab). Events listed in `crossTabEvents` are additionally forwarded\nvia a shared `BroadcastChannel` so that other tabs on the same origin receive them.",
|
|
1663
|
+
"name": "AgenticActivityBus",
|
|
1664
|
+
"members": [
|
|
1897
1665
|
{
|
|
1898
|
-
"
|
|
1899
|
-
"
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
"description": "The model-facing tool name for a resource. Deterministic and collision-free (resource names\nare unique), and trivially mapped back to the resource in a debug log. What the tool is FOR\nreaches the model through its description, not its name."
|
|
1905
|
-
},
|
|
1906
|
-
{
|
|
1907
|
-
"kind": "function",
|
|
1908
|
-
"name": "rowActionProblem",
|
|
1909
|
-
"return": {
|
|
1910
|
-
"type": {
|
|
1911
|
-
"text": "string | undefined"
|
|
1912
|
-
}
|
|
1913
|
-
},
|
|
1914
|
-
"parameters": [
|
|
1666
|
+
"kind": "field",
|
|
1667
|
+
"name": "subscribers",
|
|
1668
|
+
"privacy": "private",
|
|
1669
|
+
"readonly": true,
|
|
1670
|
+
"default": "new Map<string, Set<AnyHandler>>()"
|
|
1671
|
+
},
|
|
1915
1672
|
{
|
|
1916
|
-
"
|
|
1673
|
+
"kind": "field",
|
|
1674
|
+
"name": "crossTabEvents",
|
|
1917
1675
|
"type": {
|
|
1918
|
-
"text": "
|
|
1919
|
-
}
|
|
1676
|
+
"text": "Set<string>"
|
|
1677
|
+
},
|
|
1678
|
+
"privacy": "private",
|
|
1679
|
+
"readonly": true,
|
|
1680
|
+
"default": "new Set(config?.crossTabEvents ?? [])"
|
|
1920
1681
|
},
|
|
1921
1682
|
{
|
|
1922
|
-
"
|
|
1683
|
+
"kind": "field",
|
|
1684
|
+
"name": "channelNameFactory",
|
|
1923
1685
|
"type": {
|
|
1924
|
-
"text": "
|
|
1686
|
+
"text": "() => string | undefined"
|
|
1925
1687
|
},
|
|
1926
|
-
"
|
|
1688
|
+
"privacy": "private",
|
|
1689
|
+
"readonly": true
|
|
1927
1690
|
},
|
|
1928
1691
|
{
|
|
1929
|
-
"
|
|
1930
|
-
"
|
|
1692
|
+
"kind": "field",
|
|
1693
|
+
"name": "channel",
|
|
1931
1694
|
"type": {
|
|
1932
|
-
"text": "
|
|
1695
|
+
"text": "BroadcastChannel | undefined"
|
|
1933
1696
|
},
|
|
1934
|
-
"
|
|
1935
|
-
}
|
|
1936
|
-
],
|
|
1937
|
-
"description": "What is wrong with a resource's row-action fields (contracts C-18.7.2), if anything."
|
|
1938
|
-
},
|
|
1939
|
-
{
|
|
1940
|
-
"kind": "function",
|
|
1941
|
-
"name": "validateGenesisAiConfig",
|
|
1942
|
-
"return": {
|
|
1943
|
-
"type": {
|
|
1944
|
-
"text": "GenesisAiConfigCheck"
|
|
1945
|
-
}
|
|
1946
|
-
},
|
|
1947
|
-
"parameters": [
|
|
1697
|
+
"privacy": "private"
|
|
1698
|
+
},
|
|
1948
1699
|
{
|
|
1949
|
-
"
|
|
1700
|
+
"kind": "field",
|
|
1701
|
+
"name": "channelInitialised",
|
|
1950
1702
|
"type": {
|
|
1951
|
-
"text": "
|
|
1952
|
-
}
|
|
1703
|
+
"text": "boolean"
|
|
1704
|
+
},
|
|
1705
|
+
"privacy": "private",
|
|
1706
|
+
"default": "false"
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
"kind": "method",
|
|
1710
|
+
"name": "ensureChannel",
|
|
1711
|
+
"privacy": "private",
|
|
1712
|
+
"return": {
|
|
1713
|
+
"type": {
|
|
1714
|
+
"text": "void"
|
|
1715
|
+
}
|
|
1716
|
+
},
|
|
1717
|
+
"description": "Lazily open the cross-tab `BroadcastChannel` on first use. Deferred (rather than\ncreated in the constructor) so that importing this module, or constructing the bus\noff-browser (Node, tests, headless server), never opens a live channel or reads\n`sessionStorage` — both would keep a Node event loop alive and hang the process.\nCross-tab forwarding is inherently browser-only, so channel creation is gated on a\nbrowser environment; elsewhere the bus stays purely in-process."
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
"kind": "method",
|
|
1721
|
+
"name": "subscribe",
|
|
1722
|
+
"return": {
|
|
1723
|
+
"type": {
|
|
1724
|
+
"text": "() => void"
|
|
1725
|
+
}
|
|
1726
|
+
},
|
|
1727
|
+
"parameters": [
|
|
1728
|
+
{
|
|
1729
|
+
"name": "type",
|
|
1730
|
+
"type": {
|
|
1731
|
+
"text": "K"
|
|
1732
|
+
}
|
|
1733
|
+
},
|
|
1734
|
+
{
|
|
1735
|
+
"name": "handler",
|
|
1736
|
+
"type": {
|
|
1737
|
+
"text": "(detail: AgenticActivityEvents[K]) => void"
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
],
|
|
1741
|
+
"description": "Subscribe to an event. Returns an unsubscribe function — call it in\n`disconnectedCallback` to avoid memory leaks."
|
|
1742
|
+
},
|
|
1743
|
+
{
|
|
1744
|
+
"kind": "method",
|
|
1745
|
+
"name": "publish",
|
|
1746
|
+
"return": {
|
|
1747
|
+
"type": {
|
|
1748
|
+
"text": "void"
|
|
1749
|
+
}
|
|
1750
|
+
},
|
|
1751
|
+
"parameters": [
|
|
1752
|
+
{
|
|
1753
|
+
"name": "type",
|
|
1754
|
+
"type": {
|
|
1755
|
+
"text": "K"
|
|
1756
|
+
}
|
|
1757
|
+
},
|
|
1758
|
+
{
|
|
1759
|
+
"name": "detail",
|
|
1760
|
+
"type": {
|
|
1761
|
+
"text": "AgenticActivityEvents[K]"
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
],
|
|
1765
|
+
"description": "Publish an event to all local subscribers and, if configured, to other tabs\nvia BroadcastChannel."
|
|
1766
|
+
},
|
|
1767
|
+
{
|
|
1768
|
+
"kind": "method",
|
|
1769
|
+
"name": "addCrossTabEvent",
|
|
1770
|
+
"return": {
|
|
1771
|
+
"type": {
|
|
1772
|
+
"text": "void"
|
|
1773
|
+
}
|
|
1774
|
+
},
|
|
1775
|
+
"parameters": [
|
|
1776
|
+
{
|
|
1777
|
+
"name": "type",
|
|
1778
|
+
"type": {
|
|
1779
|
+
"text": "keyof AgenticActivityEvents"
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
],
|
|
1783
|
+
"description": "Add an event type to the cross-tab forwarding set at runtime.\nMust be called before the first AgenticActivityBus.publish of that event type."
|
|
1784
|
+
},
|
|
1785
|
+
{
|
|
1786
|
+
"kind": "method",
|
|
1787
|
+
"name": "close",
|
|
1788
|
+
"return": {
|
|
1789
|
+
"type": {
|
|
1790
|
+
"text": "void"
|
|
1791
|
+
}
|
|
1792
|
+
},
|
|
1793
|
+
"description": "Close the underlying BroadcastChannel. Call once on application teardown if needed."
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
"kind": "method",
|
|
1797
|
+
"name": "notifyLocal",
|
|
1798
|
+
"privacy": "private",
|
|
1799
|
+
"return": {
|
|
1800
|
+
"type": {
|
|
1801
|
+
"text": "void"
|
|
1802
|
+
}
|
|
1803
|
+
},
|
|
1804
|
+
"parameters": [
|
|
1805
|
+
{
|
|
1806
|
+
"name": "type",
|
|
1807
|
+
"type": {
|
|
1808
|
+
"text": "string"
|
|
1809
|
+
}
|
|
1810
|
+
},
|
|
1811
|
+
{
|
|
1812
|
+
"name": "detail",
|
|
1813
|
+
"type": {
|
|
1814
|
+
"text": "unknown"
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
]
|
|
1953
1818
|
}
|
|
1954
|
-
]
|
|
1955
|
-
"description": "Checks a generated AI config before anything is registered, and says what can be kept."
|
|
1819
|
+
]
|
|
1956
1820
|
},
|
|
1957
1821
|
{
|
|
1958
|
-
"kind": "
|
|
1959
|
-
"name": "
|
|
1960
|
-
"
|
|
1961
|
-
|
|
1962
|
-
"text": "GenesisCustomCodeCheck"
|
|
1963
|
-
}
|
|
1964
|
-
},
|
|
1965
|
-
"parameters": [
|
|
1966
|
-
{
|
|
1967
|
-
"name": "resource",
|
|
1968
|
-
"type": {
|
|
1969
|
-
"text": "GenesisAiResource"
|
|
1970
|
-
}
|
|
1971
|
-
}
|
|
1972
|
-
],
|
|
1973
|
-
"description": "A resource's `customCode` as it is used: the one reader of the field."
|
|
1822
|
+
"kind": "variable",
|
|
1823
|
+
"name": "agenticActivityBus",
|
|
1824
|
+
"default": "new AgenticActivityBus({\n crossTabEvents: ['halo-start', 'halo-stop', 'tool-loop-start', 'tool-loop-end'],\n // Lazy: the tab-scoped name (and its `sessionStorage` read) is computed on first\n // cross-tab use in a browser, not at module-eval — so importing this module is\n // side-effect-free and Node/test-safe.\n channelNameFactory: () => getTabScopedChannelName('foundation-ai-activity'),\n})",
|
|
1825
|
+
"description": "Pre-instantiated singleton event bus for AI assistant activity.\n\n- `halo-start` / `halo-stop` are forwarded via a tab-scoped `BroadcastChannel` so that\n popout windows opened from this tab show halo animations, while remaining isolated from\n unrelated tabs on the same origin (tab-scoped channel name).\n- `tool-loop-start` / `tool-loop-end` are cross-tab for the same reason: they describe the\n assistant's lifecycle (a turn beginning / ending), and the most common subscribers\n (workspace transitions, post-turn deferred recomputation, UI gates tied to the assistant\n being idle) need the event regardless of whether the user is interacting with the chat\n in the main tab or a popout window. Tab-local-only telemetry can subscribe and filter.\n- `chat-popout` / `chat-popin` are in-memory only — they must only affect the tab where the\n user clicked."
|
|
1974
1826
|
}
|
|
1975
1827
|
],
|
|
1976
1828
|
"exports": [
|
|
1977
1829
|
{
|
|
1978
1830
|
"kind": "js",
|
|
1979
|
-
"name": "
|
|
1831
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
1980
1832
|
"declaration": {
|
|
1981
|
-
"name": "
|
|
1982
|
-
"module": "src/
|
|
1833
|
+
"name": "NOOP_ACTIVITY_BUS",
|
|
1834
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
1983
1835
|
}
|
|
1984
1836
|
},
|
|
1985
1837
|
{
|
|
1986
1838
|
"kind": "js",
|
|
1987
|
-
"name": "
|
|
1839
|
+
"name": "AgenticActivityBus",
|
|
1988
1840
|
"declaration": {
|
|
1989
|
-
"name": "
|
|
1990
|
-
"module": "src/
|
|
1841
|
+
"name": "AgenticActivityBus",
|
|
1842
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
1991
1843
|
}
|
|
1992
1844
|
},
|
|
1993
1845
|
{
|
|
1994
1846
|
"kind": "js",
|
|
1995
|
-
"name": "
|
|
1847
|
+
"name": "agenticActivityBus",
|
|
1996
1848
|
"declaration": {
|
|
1997
|
-
"name": "
|
|
1998
|
-
"module": "src/
|
|
1849
|
+
"name": "agenticActivityBus",
|
|
1850
|
+
"module": "src/channel/ai-activity-bus.ts"
|
|
1999
1851
|
}
|
|
2000
|
-
}
|
|
1852
|
+
}
|
|
1853
|
+
]
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
"kind": "javascript-module",
|
|
1857
|
+
"path": "src/channel/ai-activity-channel.ts",
|
|
1858
|
+
"declarations": [],
|
|
1859
|
+
"exports": []
|
|
1860
|
+
},
|
|
1861
|
+
{
|
|
1862
|
+
"kind": "javascript-module",
|
|
1863
|
+
"path": "src/config/config.ts",
|
|
1864
|
+
"declarations": [
|
|
1865
|
+
{
|
|
1866
|
+
"kind": "function",
|
|
1867
|
+
"name": "defineAgent",
|
|
1868
|
+
"description": "Identity helper that infers the narrowest possible type for an agent config,\npreserving string literal types (including `name`) without requiring `as const`.\n\nUse this when you need `typeof myAgent` to carry the literal `name` type —\nfor example, when wiring `ChatToolHandlers<typeof myAgent>`.\n\n```ts\nconst myAgent = defineAgent({ name: 'my_agent', ... });\ntype Handlers = ChatToolHandlers<typeof myAgent>;\n// requestSubAgent name param is now typed as 'my_agent'\n```"
|
|
1869
|
+
}
|
|
1870
|
+
],
|
|
1871
|
+
"exports": [
|
|
2001
1872
|
{
|
|
2002
1873
|
"kind": "js",
|
|
2003
|
-
"name": "
|
|
1874
|
+
"name": "CachePolicy",
|
|
2004
1875
|
"declaration": {
|
|
2005
|
-
"name": "
|
|
2006
|
-
"module": "src/
|
|
1876
|
+
"name": "CachePolicy",
|
|
1877
|
+
"module": "src/config/config.ts"
|
|
2007
1878
|
}
|
|
2008
1879
|
},
|
|
2009
1880
|
{
|
|
2010
1881
|
"kind": "js",
|
|
2011
|
-
"name": "
|
|
1882
|
+
"name": "ChatFallback",
|
|
2012
1883
|
"declaration": {
|
|
2013
|
-
"name": "
|
|
2014
|
-
"module": "src/
|
|
1884
|
+
"name": "ChatFallback",
|
|
1885
|
+
"module": "src/config/config.ts"
|
|
2015
1886
|
}
|
|
2016
1887
|
},
|
|
2017
1888
|
{
|
|
2018
1889
|
"kind": "js",
|
|
2019
|
-
"name": "
|
|
1890
|
+
"name": "ChatInputDuringExecutionMode",
|
|
2020
1891
|
"declaration": {
|
|
2021
|
-
"name": "
|
|
2022
|
-
"module": "src/
|
|
2023
|
-
}
|
|
2024
|
-
}
|
|
2025
|
-
]
|
|
2026
|
-
},
|
|
2027
|
-
{
|
|
2028
|
-
"kind": "javascript-module",
|
|
2029
|
-
"path": "src/genesis/consumes.ts",
|
|
2030
|
-
"declarations": [
|
|
1892
|
+
"name": "ChatInputDuringExecutionMode",
|
|
1893
|
+
"module": "src/config/config.ts"
|
|
1894
|
+
}
|
|
1895
|
+
},
|
|
2031
1896
|
{
|
|
2032
|
-
"kind": "
|
|
2033
|
-
"name": "
|
|
2034
|
-
"
|
|
2035
|
-
"
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
}
|
|
2039
|
-
],
|
|
2040
|
-
"exports": [
|
|
1897
|
+
"kind": "js",
|
|
1898
|
+
"name": "ChatThinkingPolicy",
|
|
1899
|
+
"declaration": {
|
|
1900
|
+
"name": "ChatThinkingPolicy",
|
|
1901
|
+
"module": "src/config/config.ts"
|
|
1902
|
+
}
|
|
1903
|
+
},
|
|
2041
1904
|
{
|
|
2042
1905
|
"kind": "js",
|
|
2043
|
-
"name": "
|
|
1906
|
+
"name": "ChatToolChoice",
|
|
2044
1907
|
"declaration": {
|
|
2045
|
-
"name": "
|
|
2046
|
-
"module": "
|
|
1908
|
+
"name": "ChatToolChoice",
|
|
1909
|
+
"module": "src/config/config.ts"
|
|
2047
1910
|
}
|
|
2048
1911
|
},
|
|
2049
1912
|
{
|
|
2050
1913
|
"kind": "js",
|
|
2051
|
-
"name": "
|
|
1914
|
+
"name": "defineAgent",
|
|
2052
1915
|
"declaration": {
|
|
2053
|
-
"name": "
|
|
2054
|
-
"module": "src/
|
|
1916
|
+
"name": "defineAgent",
|
|
1917
|
+
"module": "src/config/config.ts"
|
|
2055
1918
|
}
|
|
2056
1919
|
}
|
|
2057
1920
|
]
|
|
2058
1921
|
},
|
|
2059
1922
|
{
|
|
2060
1923
|
"kind": "javascript-module",
|
|
2061
|
-
"path": "src/
|
|
1924
|
+
"path": "src/config/define-stateful-agent.ts",
|
|
2062
1925
|
"declarations": [
|
|
2063
1926
|
{
|
|
2064
1927
|
"kind": "function",
|
|
2065
|
-
"name": "
|
|
1928
|
+
"name": "restoreMachine",
|
|
2066
1929
|
"return": {
|
|
2067
1930
|
"type": {
|
|
2068
|
-
"text": "
|
|
1931
|
+
"text": "void"
|
|
2069
1932
|
}
|
|
2070
1933
|
},
|
|
2071
1934
|
"parameters": [
|
|
2072
1935
|
{
|
|
2073
|
-
"name": "
|
|
1936
|
+
"name": "machine",
|
|
2074
1937
|
"type": {
|
|
2075
|
-
"text": "
|
|
2076
|
-
}
|
|
1938
|
+
"text": "{ stop: () => void; start: (options?: { state?: unknown }) => void }"
|
|
1939
|
+
},
|
|
1940
|
+
"description": "the machine to restore (already constructed/started)."
|
|
2077
1941
|
},
|
|
2078
1942
|
{
|
|
2079
|
-
"name": "
|
|
1943
|
+
"name": "restored",
|
|
2080
1944
|
"type": {
|
|
2081
|
-
"text": "
|
|
2082
|
-
}
|
|
1945
|
+
"text": "unknown"
|
|
1946
|
+
},
|
|
1947
|
+
"description": "the agent's serialized image (`ctx.restored` in `init`)."
|
|
2083
1948
|
},
|
|
2084
1949
|
{
|
|
2085
|
-
"name": "
|
|
2086
|
-
"
|
|
2087
|
-
|
|
2088
|
-
}
|
|
1950
|
+
"name": "key",
|
|
1951
|
+
"default": "'machine'",
|
|
1952
|
+
"description": "the property the machine occupies in the snapshot; defaults to\n`'machine'` to match the conventional `{ machine }` state bag."
|
|
2089
1953
|
}
|
|
2090
|
-
]
|
|
1954
|
+
],
|
|
1955
|
+
"description": "Restore a foundation-state-machine instance from a snapshot produced by the\ndefault serializer (or `machine.getPersistedSnapshot()`). Call inside a\nstateful agent's `init` to resume the machine in its exact prior place:\n\n```ts\ninit: ({ restored }) => {\n const machine = new MyMachine();\n restoreMachine(machine, restored); // resume, or no-op on a fresh start\n return { machine };\n}\n```\n\nNo-ops when there is nothing to restore (a fresh session), leaving the\nfreshly-constructed machine in its initial state."
|
|
2091
1956
|
},
|
|
2092
1957
|
{
|
|
2093
1958
|
"kind": "function",
|
|
2094
|
-
"name": "
|
|
1959
|
+
"name": "defineStatefulAgent",
|
|
2095
1960
|
"return": {
|
|
2096
1961
|
"type": {
|
|
2097
|
-
"text": "
|
|
1962
|
+
"text": "AgentConfig"
|
|
2098
1963
|
}
|
|
2099
1964
|
},
|
|
2100
1965
|
"parameters": [
|
|
2101
1966
|
{
|
|
2102
|
-
"name": "
|
|
2103
|
-
"type": {
|
|
2104
|
-
"text": "string"
|
|
2105
|
-
}
|
|
2106
|
-
},
|
|
2107
|
-
{
|
|
2108
|
-
"name": "op",
|
|
2109
|
-
"type": {
|
|
2110
|
-
"text": "GenesisFilterOp"
|
|
2111
|
-
}
|
|
2112
|
-
},
|
|
2113
|
-
{
|
|
2114
|
-
"name": "bound",
|
|
1967
|
+
"name": "opts",
|
|
2115
1968
|
"type": {
|
|
2116
|
-
"text": "
|
|
1969
|
+
"text": "StatefulAgentInit<S>"
|
|
2117
1970
|
}
|
|
2118
1971
|
}
|
|
2119
1972
|
],
|
|
2120
|
-
"description": "
|
|
1973
|
+
"description": "Build an `AgentConfig` whose `systemPrompt`, `toolDefinitions`, and tool\nhandlers all close over a long-lived state object created on activation.\n\nThe framework wires the lifecycle: `init` on `onActivate`, `dispose` on\n`onDeactivate`. State is held inside the helper's closure — never exposed on\nthe resulting `AgentConfig` — so the redux serializer doesn't see it."
|
|
2121
1974
|
}
|
|
2122
1975
|
],
|
|
2123
1976
|
"exports": [
|
|
2124
1977
|
{
|
|
2125
1978
|
"kind": "js",
|
|
2126
|
-
"name": "
|
|
1979
|
+
"name": "restoreMachine",
|
|
2127
1980
|
"declaration": {
|
|
2128
|
-
"name": "
|
|
2129
|
-
"module": "src/
|
|
1981
|
+
"name": "restoreMachine",
|
|
1982
|
+
"module": "src/config/define-stateful-agent.ts"
|
|
2130
1983
|
}
|
|
2131
1984
|
},
|
|
2132
1985
|
{
|
|
2133
1986
|
"kind": "js",
|
|
2134
|
-
"name": "
|
|
1987
|
+
"name": "defineStatefulAgent",
|
|
2135
1988
|
"declaration": {
|
|
2136
|
-
"name": "
|
|
2137
|
-
"module": "src/
|
|
1989
|
+
"name": "defineStatefulAgent",
|
|
1990
|
+
"module": "src/config/define-stateful-agent.ts"
|
|
2138
1991
|
}
|
|
2139
1992
|
}
|
|
2140
1993
|
]
|
|
2141
1994
|
},
|
|
2142
1995
|
{
|
|
2143
1996
|
"kind": "javascript-module",
|
|
2144
|
-
"path": "src/
|
|
2145
|
-
"declarations": [
|
|
2146
|
-
"exports": []
|
|
2147
|
-
},
|
|
2148
|
-
{
|
|
2149
|
-
"kind": "javascript-module",
|
|
2150
|
-
"path": "src/genesis/filter-fields.ts",
|
|
2151
|
-
"declarations": [],
|
|
2152
|
-
"exports": []
|
|
2153
|
-
},
|
|
2154
|
-
{
|
|
2155
|
-
"kind": "javascript-module",
|
|
2156
|
-
"path": "src/genesis/index.ts",
|
|
2157
|
-
"declarations": [],
|
|
2158
|
-
"exports": [
|
|
1997
|
+
"path": "src/config/fallback-agents.ts",
|
|
1998
|
+
"declarations": [
|
|
2159
1999
|
{
|
|
2160
|
-
"kind": "
|
|
2161
|
-
"name": "
|
|
2162
|
-
"
|
|
2163
|
-
"
|
|
2164
|
-
|
|
2165
|
-
}
|
|
2000
|
+
"kind": "variable",
|
|
2001
|
+
"name": "friendlyFallbackAgent",
|
|
2002
|
+
"type": {
|
|
2003
|
+
"text": "FallbackAgentConfig"
|
|
2004
|
+
},
|
|
2005
|
+
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a warm, friendly assistant. For general conversation like \"Hi\" or \"How are you\", you can have a friendly chat. For anything more complex, you cannot directly help, but you can explain what specialists are available. The available specialists are:\\n\\n{{agents}}\\n\\nPolitely let the user know what you can help with and invite them to rephrase their request if it is outside your scope.`,\n}",
|
|
2006
|
+
"description": "A warm, conversational fallback agent. Acknowledges it can't help directly,\nexplains what the available specialists can do, and invites the user to retry.\n\nThe system prompt is generated at runtime by `OrchestratingDriver` from the\nspecialist list — no manual authoring required."
|
|
2166
2007
|
},
|
|
2167
2008
|
{
|
|
2168
|
-
"kind": "
|
|
2169
|
-
"name": "
|
|
2170
|
-
"
|
|
2171
|
-
"
|
|
2172
|
-
|
|
2173
|
-
}
|
|
2174
|
-
|
|
2009
|
+
"kind": "variable",
|
|
2010
|
+
"name": "strictFallbackAgent",
|
|
2011
|
+
"type": {
|
|
2012
|
+
"text": "FallbackAgentConfig"
|
|
2013
|
+
},
|
|
2014
|
+
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a concise assistant. The user's request is outside your scope. The available specialists are: {{agents}}.\n\n{{unroutable}}\n\nAnswer in a single short sentence. Do not elaborate.`,\n}",
|
|
2015
|
+
"description": "A brief, professional fallback agent. States what is available without\nelaboration. The `{{agents}}` placeholder is replaced at runtime by\n`OrchestratingDriver` with the generated specialist list.\n\nThe `{{unroutable}}` placeholder positions `UNROUTABLE_INSTRUCTION` — the framework's\ninstruction for a substantive request no specialist covers, which is otherwise APPENDED to a\nstring-form prompt. Positioned rather than appended for one reason: this preset's whole point is\nbrevity, and appended text would be the last thing the model reads. Putting the block above the\nbrevity rule leaves \"a single short sentence\" with the recency, so the two compose instead of\ncompeting. A prompt whose tone rules matter should do the same."
|
|
2016
|
+
}
|
|
2017
|
+
],
|
|
2018
|
+
"exports": [
|
|
2175
2019
|
{
|
|
2176
2020
|
"kind": "js",
|
|
2177
|
-
"name": "
|
|
2021
|
+
"name": "friendlyFallbackAgent",
|
|
2178
2022
|
"declaration": {
|
|
2179
|
-
"name": "
|
|
2180
|
-
"module": "
|
|
2023
|
+
"name": "friendlyFallbackAgent",
|
|
2024
|
+
"module": "src/config/fallback-agents.ts"
|
|
2181
2025
|
}
|
|
2182
2026
|
},
|
|
2183
2027
|
{
|
|
2184
2028
|
"kind": "js",
|
|
2185
|
-
"name": "
|
|
2029
|
+
"name": "strictFallbackAgent",
|
|
2186
2030
|
"declaration": {
|
|
2187
|
-
"name": "
|
|
2188
|
-
"module": "
|
|
2031
|
+
"name": "strictFallbackAgent",
|
|
2032
|
+
"module": "src/config/fallback-agents.ts"
|
|
2189
2033
|
}
|
|
2190
|
-
}
|
|
2034
|
+
}
|
|
2035
|
+
]
|
|
2036
|
+
},
|
|
2037
|
+
{
|
|
2038
|
+
"kind": "javascript-module",
|
|
2039
|
+
"path": "src/config/index.ts",
|
|
2040
|
+
"declarations": [],
|
|
2041
|
+
"exports": [
|
|
2191
2042
|
{
|
|
2192
2043
|
"kind": "js",
|
|
2193
|
-
"name": "
|
|
2044
|
+
"name": "*",
|
|
2194
2045
|
"declaration": {
|
|
2195
|
-
"name": "
|
|
2196
|
-
"
|
|
2046
|
+
"name": "*",
|
|
2047
|
+
"package": "./config"
|
|
2197
2048
|
}
|
|
2198
2049
|
},
|
|
2199
2050
|
{
|
|
2200
2051
|
"kind": "js",
|
|
2201
|
-
"name": "
|
|
2052
|
+
"name": "*",
|
|
2202
2053
|
"declaration": {
|
|
2203
|
-
"name": "
|
|
2204
|
-
"
|
|
2054
|
+
"name": "*",
|
|
2055
|
+
"package": "./fallback-agents"
|
|
2205
2056
|
}
|
|
2206
|
-
}
|
|
2057
|
+
}
|
|
2058
|
+
]
|
|
2059
|
+
},
|
|
2060
|
+
{
|
|
2061
|
+
"kind": "javascript-module",
|
|
2062
|
+
"path": "src/config/validate-providers.ts",
|
|
2063
|
+
"declarations": [],
|
|
2064
|
+
"exports": []
|
|
2065
|
+
},
|
|
2066
|
+
{
|
|
2067
|
+
"kind": "javascript-module",
|
|
2068
|
+
"path": "src/genesis/calendar.ts",
|
|
2069
|
+
"declarations": [],
|
|
2070
|
+
"exports": []
|
|
2071
|
+
},
|
|
2072
|
+
{
|
|
2073
|
+
"kind": "javascript-module",
|
|
2074
|
+
"path": "src/genesis/config.ts",
|
|
2075
|
+
"declarations": [
|
|
2207
2076
|
{
|
|
2208
|
-
"kind": "
|
|
2209
|
-
"name": "
|
|
2210
|
-
"
|
|
2211
|
-
"
|
|
2212
|
-
|
|
2213
|
-
|
|
2077
|
+
"kind": "variable",
|
|
2078
|
+
"name": "DEFAULT_MAX_ROWS",
|
|
2079
|
+
"type": {
|
|
2080
|
+
"text": "number"
|
|
2081
|
+
},
|
|
2082
|
+
"default": "50",
|
|
2083
|
+
"description": "The default read cap, and the ceiling the config may raise it to."
|
|
2214
2084
|
},
|
|
2215
2085
|
{
|
|
2216
|
-
"kind": "
|
|
2217
|
-
"name": "
|
|
2218
|
-
"
|
|
2219
|
-
"
|
|
2220
|
-
|
|
2221
|
-
|
|
2086
|
+
"kind": "variable",
|
|
2087
|
+
"name": "MAX_ROWS_CEILING",
|
|
2088
|
+
"type": {
|
|
2089
|
+
"text": "number"
|
|
2090
|
+
},
|
|
2091
|
+
"default": "1000"
|
|
2222
2092
|
},
|
|
2223
2093
|
{
|
|
2224
|
-
"kind": "
|
|
2225
|
-
"name": "
|
|
2226
|
-
"
|
|
2227
|
-
"
|
|
2228
|
-
|
|
2229
|
-
|
|
2094
|
+
"kind": "function",
|
|
2095
|
+
"name": "toolNameOf",
|
|
2096
|
+
"return": {
|
|
2097
|
+
"type": {
|
|
2098
|
+
"text": "string"
|
|
2099
|
+
}
|
|
2100
|
+
},
|
|
2101
|
+
"parameters": [
|
|
2102
|
+
{
|
|
2103
|
+
"name": "resourceName",
|
|
2104
|
+
"type": {
|
|
2105
|
+
"text": "string"
|
|
2106
|
+
}
|
|
2107
|
+
}
|
|
2108
|
+
],
|
|
2109
|
+
"description": "The model-facing tool name for a resource. Deterministic and collision-free (resource names\nare unique), and trivially mapped back to the resource in a debug log. What the tool is FOR\nreaches the model through its description, not its name."
|
|
2230
2110
|
},
|
|
2231
2111
|
{
|
|
2232
|
-
"kind": "
|
|
2233
|
-
"name": "
|
|
2234
|
-
"
|
|
2235
|
-
"
|
|
2236
|
-
|
|
2237
|
-
|
|
2112
|
+
"kind": "function",
|
|
2113
|
+
"name": "rowActionProblem",
|
|
2114
|
+
"return": {
|
|
2115
|
+
"type": {
|
|
2116
|
+
"text": "string | undefined"
|
|
2117
|
+
}
|
|
2118
|
+
},
|
|
2119
|
+
"parameters": [
|
|
2120
|
+
{
|
|
2121
|
+
"name": "resource",
|
|
2122
|
+
"type": {
|
|
2123
|
+
"text": "Partial<GenesisAiResource> | null"
|
|
2124
|
+
}
|
|
2125
|
+
},
|
|
2126
|
+
{
|
|
2127
|
+
"name": "requestNames",
|
|
2128
|
+
"type": {
|
|
2129
|
+
"text": "ReadonlySet<string>"
|
|
2130
|
+
},
|
|
2131
|
+
"description": "The request resources whose rows can be read. A row action reads its rows\nthrough `REQ_<entity>`, and without one there is no row to review."
|
|
2132
|
+
},
|
|
2133
|
+
{
|
|
2134
|
+
"name": "whyNotReadable",
|
|
2135
|
+
"default": "notReadableReason({})",
|
|
2136
|
+
"type": {
|
|
2137
|
+
"text": "(name: string) => string"
|
|
2138
|
+
},
|
|
2139
|
+
"description": "Why a request is not among `requestNames`, when the caller knows: it was\nleft out, has no read tool, or is a query. Without it, the request is said to be missing."
|
|
2140
|
+
}
|
|
2141
|
+
],
|
|
2142
|
+
"description": "What is wrong with a resource's row-action fields (contracts C-18.7.2), if anything."
|
|
2143
|
+
},
|
|
2144
|
+
{
|
|
2145
|
+
"kind": "function",
|
|
2146
|
+
"name": "validateGenesisAiConfig",
|
|
2147
|
+
"return": {
|
|
2148
|
+
"type": {
|
|
2149
|
+
"text": "GenesisAiConfigCheck"
|
|
2150
|
+
}
|
|
2151
|
+
},
|
|
2152
|
+
"parameters": [
|
|
2153
|
+
{
|
|
2154
|
+
"name": "config",
|
|
2155
|
+
"type": {
|
|
2156
|
+
"text": "unknown"
|
|
2157
|
+
}
|
|
2158
|
+
}
|
|
2159
|
+
],
|
|
2160
|
+
"description": "Checks a generated AI config before anything is registered, and says what can be kept."
|
|
2238
2161
|
},
|
|
2162
|
+
{
|
|
2163
|
+
"kind": "function",
|
|
2164
|
+
"name": "customCodeOf",
|
|
2165
|
+
"return": {
|
|
2166
|
+
"type": {
|
|
2167
|
+
"text": "GenesisCustomCodeCheck"
|
|
2168
|
+
}
|
|
2169
|
+
},
|
|
2170
|
+
"parameters": [
|
|
2171
|
+
{
|
|
2172
|
+
"name": "resource",
|
|
2173
|
+
"type": {
|
|
2174
|
+
"text": "GenesisAiResource"
|
|
2175
|
+
}
|
|
2176
|
+
}
|
|
2177
|
+
],
|
|
2178
|
+
"description": "A resource's `customCode` as it is used: the one reader of the field."
|
|
2179
|
+
}
|
|
2180
|
+
],
|
|
2181
|
+
"exports": [
|
|
2239
2182
|
{
|
|
2240
2183
|
"kind": "js",
|
|
2241
|
-
"name": "
|
|
2184
|
+
"name": "DEFAULT_MAX_ROWS",
|
|
2242
2185
|
"declaration": {
|
|
2243
|
-
"name": "
|
|
2244
|
-
"module": "
|
|
2186
|
+
"name": "DEFAULT_MAX_ROWS",
|
|
2187
|
+
"module": "src/genesis/config.ts"
|
|
2245
2188
|
}
|
|
2246
2189
|
},
|
|
2247
2190
|
{
|
|
2248
2191
|
"kind": "js",
|
|
2249
|
-
"name": "
|
|
2192
|
+
"name": "MAX_ROWS_CEILING",
|
|
2250
2193
|
"declaration": {
|
|
2251
|
-
"name": "
|
|
2252
|
-
"module": "
|
|
2194
|
+
"name": "MAX_ROWS_CEILING",
|
|
2195
|
+
"module": "src/genesis/config.ts"
|
|
2253
2196
|
}
|
|
2254
2197
|
},
|
|
2255
2198
|
{
|
|
2256
2199
|
"kind": "js",
|
|
2257
|
-
"name": "
|
|
2200
|
+
"name": "toolNameOf",
|
|
2258
2201
|
"declaration": {
|
|
2259
|
-
"name": "
|
|
2260
|
-
"module": "
|
|
2202
|
+
"name": "toolNameOf",
|
|
2203
|
+
"module": "src/genesis/config.ts"
|
|
2261
2204
|
}
|
|
2262
2205
|
},
|
|
2263
2206
|
{
|
|
2264
2207
|
"kind": "js",
|
|
2265
|
-
"name": "
|
|
2208
|
+
"name": "rowActionProblem",
|
|
2266
2209
|
"declaration": {
|
|
2267
|
-
"name": "
|
|
2268
|
-
"module": "
|
|
2210
|
+
"name": "rowActionProblem",
|
|
2211
|
+
"module": "src/genesis/config.ts"
|
|
2269
2212
|
}
|
|
2270
2213
|
},
|
|
2271
2214
|
{
|
|
2272
2215
|
"kind": "js",
|
|
2273
|
-
"name": "
|
|
2216
|
+
"name": "validateGenesisAiConfig",
|
|
2274
2217
|
"declaration": {
|
|
2275
|
-
"name": "
|
|
2276
|
-
"module": "
|
|
2218
|
+
"name": "validateGenesisAiConfig",
|
|
2219
|
+
"module": "src/genesis/config.ts"
|
|
2277
2220
|
}
|
|
2278
2221
|
},
|
|
2279
2222
|
{
|
|
2280
2223
|
"kind": "js",
|
|
2281
|
-
"name": "
|
|
2224
|
+
"name": "customCodeOf",
|
|
2282
2225
|
"declaration": {
|
|
2283
|
-
"name": "
|
|
2284
|
-
"module": "
|
|
2226
|
+
"name": "customCodeOf",
|
|
2227
|
+
"module": "src/genesis/config.ts"
|
|
2285
2228
|
}
|
|
2286
|
-
}
|
|
2229
|
+
}
|
|
2230
|
+
]
|
|
2231
|
+
},
|
|
2232
|
+
{
|
|
2233
|
+
"kind": "javascript-module",
|
|
2234
|
+
"path": "src/genesis/consumes.ts",
|
|
2235
|
+
"declarations": [
|
|
2236
|
+
{
|
|
2237
|
+
"kind": "variable",
|
|
2238
|
+
"name": "GENESIS_AI_CONSUMES",
|
|
2239
|
+
"type": {
|
|
2240
|
+
"text": "GenesisAiConsumes"
|
|
2241
|
+
},
|
|
2242
|
+
"description": "What this version of the assistant reads from a generated AI config: the resource kinds it\naccepts, the resource fields its validator or a tool reads, the `vendor` and `tier` values it\naccepts, and the row-action shapes it runs."
|
|
2243
|
+
}
|
|
2244
|
+
],
|
|
2245
|
+
"exports": [
|
|
2287
2246
|
{
|
|
2288
2247
|
"kind": "js",
|
|
2289
|
-
"name": "
|
|
2248
|
+
"name": "GenesisAiConsumes",
|
|
2290
2249
|
"declaration": {
|
|
2291
|
-
"name": "
|
|
2292
|
-
"module": "./
|
|
2250
|
+
"name": "GenesisAiConsumes",
|
|
2251
|
+
"module": "./types"
|
|
2293
2252
|
}
|
|
2294
2253
|
},
|
|
2295
2254
|
{
|
|
2296
2255
|
"kind": "js",
|
|
2297
|
-
"name": "
|
|
2256
|
+
"name": "GENESIS_AI_CONSUMES",
|
|
2298
2257
|
"declaration": {
|
|
2299
|
-
"name": "
|
|
2300
|
-
"module": "
|
|
2258
|
+
"name": "GENESIS_AI_CONSUMES",
|
|
2259
|
+
"module": "src/genesis/consumes.ts"
|
|
2301
2260
|
}
|
|
2261
|
+
}
|
|
2262
|
+
]
|
|
2263
|
+
},
|
|
2264
|
+
{
|
|
2265
|
+
"kind": "javascript-module",
|
|
2266
|
+
"path": "src/genesis/criteria.ts",
|
|
2267
|
+
"declarations": [
|
|
2268
|
+
{
|
|
2269
|
+
"kind": "function",
|
|
2270
|
+
"name": "dateFragment",
|
|
2271
|
+
"return": {
|
|
2272
|
+
"type": {
|
|
2273
|
+
"text": "string | undefined"
|
|
2274
|
+
}
|
|
2275
|
+
},
|
|
2276
|
+
"parameters": [
|
|
2277
|
+
{
|
|
2278
|
+
"name": "field",
|
|
2279
|
+
"type": {
|
|
2280
|
+
"text": "string"
|
|
2281
|
+
}
|
|
2282
|
+
},
|
|
2283
|
+
{
|
|
2284
|
+
"name": "op",
|
|
2285
|
+
"type": {
|
|
2286
|
+
"text": "GenesisFilterOp"
|
|
2287
|
+
}
|
|
2288
|
+
},
|
|
2289
|
+
{
|
|
2290
|
+
"name": "date",
|
|
2291
|
+
"type": {
|
|
2292
|
+
"text": "string"
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
]
|
|
2302
2296
|
},
|
|
2297
|
+
{
|
|
2298
|
+
"kind": "function",
|
|
2299
|
+
"name": "dateTimeFragment",
|
|
2300
|
+
"return": {
|
|
2301
|
+
"type": {
|
|
2302
|
+
"text": "string | undefined"
|
|
2303
|
+
}
|
|
2304
|
+
},
|
|
2305
|
+
"parameters": [
|
|
2306
|
+
{
|
|
2307
|
+
"name": "field",
|
|
2308
|
+
"type": {
|
|
2309
|
+
"text": "string"
|
|
2310
|
+
}
|
|
2311
|
+
},
|
|
2312
|
+
{
|
|
2313
|
+
"name": "op",
|
|
2314
|
+
"type": {
|
|
2315
|
+
"text": "GenesisFilterOp"
|
|
2316
|
+
}
|
|
2317
|
+
},
|
|
2318
|
+
{
|
|
2319
|
+
"name": "bound",
|
|
2320
|
+
"type": {
|
|
2321
|
+
"text": "string"
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2324
|
+
],
|
|
2325
|
+
"description": "Timestamp columns get the dateTime helpers, which take a `yyyyMMdd-HH:mm:ss` bound."
|
|
2326
|
+
}
|
|
2327
|
+
],
|
|
2328
|
+
"exports": [
|
|
2303
2329
|
{
|
|
2304
2330
|
"kind": "js",
|
|
2305
|
-
"name": "
|
|
2331
|
+
"name": "dateFragment",
|
|
2306
2332
|
"declaration": {
|
|
2307
|
-
"name": "
|
|
2308
|
-
"module": "
|
|
2333
|
+
"name": "dateFragment",
|
|
2334
|
+
"module": "src/genesis/criteria.ts"
|
|
2309
2335
|
}
|
|
2310
2336
|
},
|
|
2311
2337
|
{
|
|
2312
2338
|
"kind": "js",
|
|
2313
|
-
"name": "
|
|
2339
|
+
"name": "dateTimeFragment",
|
|
2314
2340
|
"declaration": {
|
|
2315
|
-
"name": "
|
|
2316
|
-
"module": "
|
|
2341
|
+
"name": "dateTimeFragment",
|
|
2342
|
+
"module": "src/genesis/criteria.ts"
|
|
2317
2343
|
}
|
|
2318
|
-
}
|
|
2344
|
+
}
|
|
2345
|
+
]
|
|
2346
|
+
},
|
|
2347
|
+
{
|
|
2348
|
+
"kind": "javascript-module",
|
|
2349
|
+
"path": "src/genesis/event-fields.ts",
|
|
2350
|
+
"declarations": [],
|
|
2351
|
+
"exports": []
|
|
2352
|
+
},
|
|
2353
|
+
{
|
|
2354
|
+
"kind": "javascript-module",
|
|
2355
|
+
"path": "src/genesis/filter-fields.ts",
|
|
2356
|
+
"declarations": [],
|
|
2357
|
+
"exports": []
|
|
2358
|
+
},
|
|
2359
|
+
{
|
|
2360
|
+
"kind": "javascript-module",
|
|
2361
|
+
"path": "src/genesis/index.ts",
|
|
2362
|
+
"declarations": [],
|
|
2363
|
+
"exports": [
|
|
2319
2364
|
{
|
|
2320
2365
|
"kind": "js",
|
|
2321
|
-
"name": "
|
|
2366
|
+
"name": "GENESIS_AGENT_NAME",
|
|
2322
2367
|
"declaration": {
|
|
2323
|
-
"name": "
|
|
2324
|
-
"module": "./
|
|
2368
|
+
"name": "GENESIS_AGENT_NAME",
|
|
2369
|
+
"module": "./register-genesis-assistant"
|
|
2325
2370
|
}
|
|
2326
2371
|
},
|
|
2327
2372
|
{
|
|
2328
2373
|
"kind": "js",
|
|
2329
|
-
"name": "
|
|
2374
|
+
"name": "registerGenesisAssistant",
|
|
2330
2375
|
"declaration": {
|
|
2331
|
-
"name": "
|
|
2332
|
-
"module": "./
|
|
2376
|
+
"name": "registerGenesisAssistant",
|
|
2377
|
+
"module": "./register-genesis-assistant"
|
|
2333
2378
|
}
|
|
2334
2379
|
},
|
|
2335
2380
|
{
|
|
2336
2381
|
"kind": "js",
|
|
2337
|
-
"name": "
|
|
2382
|
+
"name": "customCodeOf",
|
|
2338
2383
|
"declaration": {
|
|
2339
|
-
"name": "
|
|
2340
|
-
"module": "./
|
|
2384
|
+
"name": "customCodeOf",
|
|
2385
|
+
"module": "./config"
|
|
2341
2386
|
}
|
|
2342
2387
|
},
|
|
2343
2388
|
{
|
|
2344
2389
|
"kind": "js",
|
|
2345
|
-
"name": "
|
|
2390
|
+
"name": "rowActionProblem",
|
|
2346
2391
|
"declaration": {
|
|
2347
|
-
"name": "
|
|
2392
|
+
"name": "rowActionProblem",
|
|
2393
|
+
"module": "./config"
|
|
2394
|
+
}
|
|
2395
|
+
},
|
|
2396
|
+
{
|
|
2397
|
+
"kind": "js",
|
|
2398
|
+
"name": "GENESIS_AI_CONSUMES",
|
|
2399
|
+
"declaration": {
|
|
2400
|
+
"name": "GENESIS_AI_CONSUMES",
|
|
2401
|
+
"module": "./consumes"
|
|
2402
|
+
}
|
|
2403
|
+
},
|
|
2404
|
+
{
|
|
2405
|
+
"kind": "js",
|
|
2406
|
+
"name": "validateGenesisAiConfig",
|
|
2407
|
+
"declaration": {
|
|
2408
|
+
"name": "validateGenesisAiConfig",
|
|
2409
|
+
"module": "./config"
|
|
2410
|
+
}
|
|
2411
|
+
},
|
|
2412
|
+
{
|
|
2413
|
+
"kind": "js",
|
|
2414
|
+
"name": "DroppedResource",
|
|
2415
|
+
"declaration": {
|
|
2416
|
+
"name": "DroppedResource",
|
|
2417
|
+
"module": "./config"
|
|
2418
|
+
}
|
|
2419
|
+
},
|
|
2420
|
+
{
|
|
2421
|
+
"kind": "js",
|
|
2422
|
+
"name": "GenesisAiConfigCheck",
|
|
2423
|
+
"declaration": {
|
|
2424
|
+
"name": "GenesisAiConfigCheck",
|
|
2425
|
+
"module": "./config"
|
|
2426
|
+
}
|
|
2427
|
+
},
|
|
2428
|
+
{
|
|
2429
|
+
"kind": "js",
|
|
2430
|
+
"name": "GenesisFilter",
|
|
2431
|
+
"declaration": {
|
|
2432
|
+
"name": "GenesisFilter",
|
|
2433
|
+
"module": "./criteria"
|
|
2434
|
+
}
|
|
2435
|
+
},
|
|
2436
|
+
{
|
|
2437
|
+
"kind": "js",
|
|
2438
|
+
"name": "GenesisFilterField",
|
|
2439
|
+
"declaration": {
|
|
2440
|
+
"name": "GenesisFilterField",
|
|
2441
|
+
"module": "./criteria"
|
|
2442
|
+
}
|
|
2443
|
+
},
|
|
2444
|
+
{
|
|
2445
|
+
"kind": "js",
|
|
2446
|
+
"name": "GenesisFilterOp",
|
|
2447
|
+
"declaration": {
|
|
2448
|
+
"name": "GenesisFilterOp",
|
|
2449
|
+
"module": "./criteria"
|
|
2450
|
+
}
|
|
2451
|
+
},
|
|
2452
|
+
{
|
|
2453
|
+
"kind": "js",
|
|
2454
|
+
"name": "createGenesisResourceTools",
|
|
2455
|
+
"declaration": {
|
|
2456
|
+
"name": "createGenesisResourceTools",
|
|
2457
|
+
"module": "./resource-tools"
|
|
2458
|
+
}
|
|
2459
|
+
},
|
|
2460
|
+
{
|
|
2461
|
+
"kind": "js",
|
|
2462
|
+
"name": "GENESIS_DATA_SOURCE",
|
|
2463
|
+
"declaration": {
|
|
2464
|
+
"name": "GENESIS_DATA_SOURCE",
|
|
2465
|
+
"module": "./resource-tools"
|
|
2466
|
+
}
|
|
2467
|
+
},
|
|
2468
|
+
{
|
|
2469
|
+
"kind": "js",
|
|
2470
|
+
"name": "createGenesisWriteTools",
|
|
2471
|
+
"declaration": {
|
|
2472
|
+
"name": "createGenesisWriteTools",
|
|
2473
|
+
"module": "./write-tools"
|
|
2474
|
+
}
|
|
2475
|
+
},
|
|
2476
|
+
{
|
|
2477
|
+
"kind": "js",
|
|
2478
|
+
"name": "GenesisWriteDecision",
|
|
2479
|
+
"declaration": {
|
|
2480
|
+
"name": "GenesisWriteDecision",
|
|
2481
|
+
"module": "./write-tools"
|
|
2482
|
+
}
|
|
2483
|
+
},
|
|
2484
|
+
{
|
|
2485
|
+
"kind": "js",
|
|
2486
|
+
"name": "GenesisWriteResult",
|
|
2487
|
+
"declaration": {
|
|
2488
|
+
"name": "GenesisWriteResult",
|
|
2489
|
+
"module": "./write-tools"
|
|
2490
|
+
}
|
|
2491
|
+
},
|
|
2492
|
+
{
|
|
2493
|
+
"kind": "js",
|
|
2494
|
+
"name": "GenesisWriteRowStatus",
|
|
2495
|
+
"declaration": {
|
|
2496
|
+
"name": "GenesisWriteRowStatus",
|
|
2497
|
+
"module": "./write-tools"
|
|
2498
|
+
}
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
"kind": "js",
|
|
2502
|
+
"name": "GenesisWriteToolsOptions",
|
|
2503
|
+
"declaration": {
|
|
2504
|
+
"name": "GenesisWriteToolsOptions",
|
|
2505
|
+
"module": "./write-tools"
|
|
2506
|
+
}
|
|
2507
|
+
},
|
|
2508
|
+
{
|
|
2509
|
+
"kind": "js",
|
|
2510
|
+
"name": "GENESIS_WRITE_REVIEW",
|
|
2511
|
+
"declaration": {
|
|
2512
|
+
"name": "GENESIS_WRITE_REVIEW",
|
|
2513
|
+
"module": "./write-review/write-review"
|
|
2514
|
+
}
|
|
2515
|
+
},
|
|
2516
|
+
{
|
|
2517
|
+
"kind": "js",
|
|
2518
|
+
"name": "GenesisWriteReview",
|
|
2519
|
+
"declaration": {
|
|
2520
|
+
"name": "GenesisWriteReview",
|
|
2521
|
+
"module": "./write-review/write-review"
|
|
2522
|
+
}
|
|
2523
|
+
},
|
|
2524
|
+
{
|
|
2525
|
+
"kind": "js",
|
|
2526
|
+
"name": "GenesisChangeRequest",
|
|
2527
|
+
"declaration": {
|
|
2528
|
+
"name": "GenesisChangeRequest",
|
|
2529
|
+
"module": "./review-payload"
|
|
2530
|
+
}
|
|
2531
|
+
},
|
|
2532
|
+
{
|
|
2533
|
+
"kind": "js",
|
|
2534
|
+
"name": "GenesisReviewPayload",
|
|
2535
|
+
"declaration": {
|
|
2536
|
+
"name": "GenesisReviewPayload",
|
|
2537
|
+
"module": "./review-payload"
|
|
2538
|
+
}
|
|
2539
|
+
},
|
|
2540
|
+
{
|
|
2541
|
+
"kind": "js",
|
|
2542
|
+
"name": "GenesisWriteReviewCompletedEventDetail",
|
|
2543
|
+
"declaration": {
|
|
2544
|
+
"name": "GenesisWriteReviewCompletedEventDetail",
|
|
2545
|
+
"module": "./review-payload"
|
|
2546
|
+
}
|
|
2547
|
+
},
|
|
2548
|
+
{
|
|
2549
|
+
"kind": "js",
|
|
2550
|
+
"name": "GenesisReadResult",
|
|
2551
|
+
"declaration": {
|
|
2552
|
+
"name": "GenesisReadResult",
|
|
2348
2553
|
"module": "./resource-tools"
|
|
2349
2554
|
}
|
|
2350
2555
|
},
|
|
@@ -3043,913 +3248,680 @@
|
|
|
3043
3248
|
},
|
|
3044
3249
|
{
|
|
3045
3250
|
"kind": "javascript-module",
|
|
3046
|
-
"path": "src/
|
|
3047
|
-
"declarations": [
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
],
|
|
3251
|
+
"path": "src/main/attachment-controller.ts",
|
|
3252
|
+
"declarations": [],
|
|
3253
|
+
"exports": []
|
|
3254
|
+
},
|
|
3255
|
+
{
|
|
3256
|
+
"kind": "javascript-module",
|
|
3257
|
+
"path": "src/main/budget-controller.ts",
|
|
3258
|
+
"declarations": [],
|
|
3259
|
+
"exports": []
|
|
3260
|
+
},
|
|
3261
|
+
{
|
|
3262
|
+
"kind": "javascript-module",
|
|
3263
|
+
"path": "src/main/composer-menu-controller.ts",
|
|
3264
|
+
"declarations": [],
|
|
3265
|
+
"exports": []
|
|
3266
|
+
},
|
|
3267
|
+
{
|
|
3268
|
+
"kind": "javascript-module",
|
|
3269
|
+
"path": "src/main/composer-resize-controller.ts",
|
|
3270
|
+
"declarations": [],
|
|
3271
|
+
"exports": []
|
|
3272
|
+
},
|
|
3273
|
+
{
|
|
3274
|
+
"kind": "javascript-module",
|
|
3275
|
+
"path": "src/main/context-gate-controller.ts",
|
|
3276
|
+
"declarations": [],
|
|
3277
|
+
"exports": []
|
|
3278
|
+
},
|
|
3279
|
+
{
|
|
3280
|
+
"kind": "javascript-module",
|
|
3281
|
+
"path": "src/main/cost-ledger-controller.ts",
|
|
3282
|
+
"declarations": [],
|
|
3283
|
+
"exports": []
|
|
3284
|
+
},
|
|
3285
|
+
{
|
|
3286
|
+
"kind": "javascript-module",
|
|
3287
|
+
"path": "src/main/index.ts",
|
|
3288
|
+
"declarations": [],
|
|
3054
3289
|
"exports": [
|
|
3055
3290
|
{
|
|
3056
3291
|
"kind": "js",
|
|
3057
|
-
"name": "
|
|
3058
|
-
"declaration": {
|
|
3059
|
-
"name": "CachePolicy",
|
|
3060
|
-
"module": "src/config/config.ts"
|
|
3061
|
-
}
|
|
3062
|
-
},
|
|
3063
|
-
{
|
|
3064
|
-
"kind": "js",
|
|
3065
|
-
"name": "ChatFallback",
|
|
3066
|
-
"declaration": {
|
|
3067
|
-
"name": "ChatFallback",
|
|
3068
|
-
"module": "src/config/config.ts"
|
|
3069
|
-
}
|
|
3070
|
-
},
|
|
3071
|
-
{
|
|
3072
|
-
"kind": "js",
|
|
3073
|
-
"name": "ChatInputDuringExecutionMode",
|
|
3074
|
-
"declaration": {
|
|
3075
|
-
"name": "ChatInputDuringExecutionMode",
|
|
3076
|
-
"module": "src/config/config.ts"
|
|
3077
|
-
}
|
|
3078
|
-
},
|
|
3079
|
-
{
|
|
3080
|
-
"kind": "js",
|
|
3081
|
-
"name": "ChatThinkingPolicy",
|
|
3292
|
+
"name": "*",
|
|
3082
3293
|
"declaration": {
|
|
3083
|
-
"name": "
|
|
3084
|
-
"
|
|
3294
|
+
"name": "*",
|
|
3295
|
+
"package": "./main.template"
|
|
3085
3296
|
}
|
|
3086
3297
|
},
|
|
3087
3298
|
{
|
|
3088
3299
|
"kind": "js",
|
|
3089
|
-
"name": "
|
|
3300
|
+
"name": "*",
|
|
3090
3301
|
"declaration": {
|
|
3091
|
-
"name": "
|
|
3092
|
-
"
|
|
3302
|
+
"name": "*",
|
|
3303
|
+
"package": "./main"
|
|
3093
3304
|
}
|
|
3094
3305
|
},
|
|
3095
3306
|
{
|
|
3096
3307
|
"kind": "js",
|
|
3097
|
-
"name": "
|
|
3308
|
+
"name": "*",
|
|
3098
3309
|
"declaration": {
|
|
3099
|
-
"name": "
|
|
3100
|
-
"
|
|
3310
|
+
"name": "*",
|
|
3311
|
+
"package": "./main.types"
|
|
3101
3312
|
}
|
|
3102
3313
|
}
|
|
3103
3314
|
]
|
|
3104
3315
|
},
|
|
3105
3316
|
{
|
|
3106
3317
|
"kind": "javascript-module",
|
|
3107
|
-
"path": "src/
|
|
3318
|
+
"path": "src/main/main.styles.ts",
|
|
3108
3319
|
"declarations": [
|
|
3109
3320
|
{
|
|
3110
|
-
"kind": "
|
|
3111
|
-
"name": "
|
|
3112
|
-
"
|
|
3113
|
-
"type": {
|
|
3114
|
-
"text": "void"
|
|
3115
|
-
}
|
|
3116
|
-
},
|
|
3117
|
-
"parameters": [
|
|
3118
|
-
{
|
|
3119
|
-
"name": "machine",
|
|
3120
|
-
"type": {
|
|
3121
|
-
"text": "{ stop: () => void; start: (options?: { state?: unknown }) => void }"
|
|
3122
|
-
},
|
|
3123
|
-
"description": "the machine to restore (already constructed/started)."
|
|
3124
|
-
},
|
|
3125
|
-
{
|
|
3126
|
-
"name": "restored",
|
|
3127
|
-
"type": {
|
|
3128
|
-
"text": "unknown"
|
|
3129
|
-
},
|
|
3130
|
-
"description": "the agent's serialized image (`ctx.restored` in `init`)."
|
|
3131
|
-
},
|
|
3132
|
-
{
|
|
3133
|
-
"name": "key",
|
|
3134
|
-
"default": "'machine'",
|
|
3135
|
-
"description": "the property the machine occupies in the snapshot; defaults to\n`'machine'` to match the conventional `{ machine }` state bag."
|
|
3136
|
-
}
|
|
3137
|
-
],
|
|
3138
|
-
"description": "Restore a foundation-state-machine instance from a snapshot produced by the\ndefault serializer (or `machine.getPersistedSnapshot()`). Call inside a\nstateful agent's `init` to resume the machine in its exact prior place:\n\n```ts\ninit: ({ restored }) => {\n const machine = new MyMachine();\n restoreMachine(machine, restored); // resume, or no-op on a fresh start\n return { machine };\n}\n```\n\nNo-ops when there is nothing to restore (a fresh session), leaving the\nfreshly-constructed machine in its initial state."
|
|
3139
|
-
},
|
|
3140
|
-
{
|
|
3141
|
-
"kind": "function",
|
|
3142
|
-
"name": "defineStatefulAgent",
|
|
3143
|
-
"return": {
|
|
3144
|
-
"type": {
|
|
3145
|
-
"text": "AgentConfig"
|
|
3146
|
-
}
|
|
3147
|
-
},
|
|
3148
|
-
"parameters": [
|
|
3149
|
-
{
|
|
3150
|
-
"name": "opts",
|
|
3151
|
-
"type": {
|
|
3152
|
-
"text": "StatefulAgentInit<S>"
|
|
3153
|
-
}
|
|
3154
|
-
}
|
|
3155
|
-
],
|
|
3156
|
-
"description": "Build an `AgentConfig` whose `systemPrompt`, `toolDefinitions`, and tool\nhandlers all close over a long-lived state object created on activation.\n\nThe framework wires the lifecycle: `init` on `onActivate`, `dispose` on\n`onDeactivate`. State is held inside the helper's closure — never exposed on\nthe resulting `AgentConfig` — so the redux serializer doesn't see it."
|
|
3321
|
+
"kind": "variable",
|
|
3322
|
+
"name": "styles",
|
|
3323
|
+
"default": "css`\n ${baseStyles}\n ${\n /* The session menu's rows. Same partial the agent picker imports into its own\n shadow root — the one thing that keeps the two menus looking alike. */ ''\n }\n ${menuItemStyles}\n ${settingsModalStyles}\n`"
|
|
3157
3324
|
}
|
|
3158
3325
|
],
|
|
3159
3326
|
"exports": [
|
|
3160
3327
|
{
|
|
3161
3328
|
"kind": "js",
|
|
3162
|
-
"name": "
|
|
3163
|
-
"declaration": {
|
|
3164
|
-
"name": "restoreMachine",
|
|
3165
|
-
"module": "src/config/define-stateful-agent.ts"
|
|
3166
|
-
}
|
|
3167
|
-
},
|
|
3168
|
-
{
|
|
3169
|
-
"kind": "js",
|
|
3170
|
-
"name": "defineStatefulAgent",
|
|
3329
|
+
"name": "styles",
|
|
3171
3330
|
"declaration": {
|
|
3172
|
-
"name": "
|
|
3173
|
-
"module": "src/
|
|
3331
|
+
"name": "styles",
|
|
3332
|
+
"module": "src/main/main.styles.ts"
|
|
3174
3333
|
}
|
|
3175
3334
|
}
|
|
3176
3335
|
]
|
|
3177
3336
|
},
|
|
3178
3337
|
{
|
|
3179
3338
|
"kind": "javascript-module",
|
|
3180
|
-
"path": "src/
|
|
3339
|
+
"path": "src/main/main.template.ts",
|
|
3181
3340
|
"declarations": [
|
|
3182
3341
|
{
|
|
3183
3342
|
"kind": "variable",
|
|
3184
|
-
"name": "
|
|
3185
|
-
"
|
|
3186
|
-
|
|
3187
|
-
},
|
|
3188
|
-
"default": "{\n name: 'Assistant',\n fallback: true,\n systemPrompt: `You are a warm, friendly assistant. For general conversation like \"Hi\" or \"How are you\", you can have a friendly chat. For anything more complex, you cannot directly help, but you can explain what specialists are available. The available specialists are:\\n\\n{{agents}}\\n\\nPolitely let the user know what you can help with and invite them to rephrase their request if it is outside your scope.`,\n}",
|
|
3189
|
-
"description": "A warm, conversational fallback agent. Acknowledges it can't help directly,\nexplains what the available specialists can do, and invites the user to retry.\n\nThe system prompt is generated at runtime by `OrchestratingDriver` from the\nspecialist list — no manual authoring required."
|
|
3343
|
+
"name": "messageTimestampTemplate",
|
|
3344
|
+
"default": "html<ChatMessage, FoundationAiAssistant>`\n <time\n class=\"message-timestamp\"\n part=\"message-timestamp\"\n datetime=\"${(m) => messageTimestampDateTime(m.timestamp)}\"\n >\n <span aria-hidden=\"true\">\n ${(m, c) => formatMessageTimestamp(m.timestamp, c.parent.timestampClock)}\n </span>\n <span class=\"visually-hidden\">${(m) => formatAbsoluteTimestamp(m.timestamp)}</span>\n </time>\n`",
|
|
3345
|
+
"description": "The timestamp shown beside the sender name (GENC-1257).\n\nTwo strings, not one. A screen reader announces a `<time>` element's TEXT — it has no\nimplicit ARIA role, and the `datetime` attribute is never surfaced to the user — so the\nrelative text is hidden from assistive tech and paired with a visually-hidden absolute\nstring. Otherwise AT would hear \"5 minutes ago\" with nothing to anchor it, and in\n`'hover'` mode would hear it for a timestamp sighted users never asked to see.\n`datetime` stays because it is correct HTML and useful to tooling, not for a11y.\n\nOnly the VISUAL reveal is hover-gated, in CSS — see `.message-timestamp`. `opacity: 0`\nleaves the element in the accessibility tree, so AT gets a time in both visible modes;\n`'off'` is the only mode that removes it.\n\nReads `timestampClock` rather than `Date.now()` so every row shares one invalidatable\nclock and a tick re-evaluates them all; see `FoundationAiAssistant.timestampClock`."
|
|
3190
3346
|
},
|
|
3191
3347
|
{
|
|
3192
|
-
"kind": "
|
|
3193
|
-
"name": "
|
|
3194
|
-
"
|
|
3195
|
-
"
|
|
3348
|
+
"kind": "function",
|
|
3349
|
+
"name": "FoundationAiAssistantTemplate",
|
|
3350
|
+
"return": {
|
|
3351
|
+
"type": {
|
|
3352
|
+
"text": "ViewTemplate<FoundationAiAssistant>"
|
|
3353
|
+
}
|
|
3196
3354
|
},
|
|
3197
|
-
"
|
|
3198
|
-
|
|
3355
|
+
"parameters": [
|
|
3356
|
+
{
|
|
3357
|
+
"name": "designSystemPrefix",
|
|
3358
|
+
"type": {
|
|
3359
|
+
"text": "string"
|
|
3360
|
+
}
|
|
3361
|
+
}
|
|
3362
|
+
]
|
|
3199
3363
|
}
|
|
3200
3364
|
],
|
|
3201
3365
|
"exports": [
|
|
3202
3366
|
{
|
|
3203
3367
|
"kind": "js",
|
|
3204
|
-
"name": "
|
|
3205
|
-
"declaration": {
|
|
3206
|
-
"name": "friendlyFallbackAgent",
|
|
3207
|
-
"module": "src/config/fallback-agents.ts"
|
|
3208
|
-
}
|
|
3209
|
-
},
|
|
3210
|
-
{
|
|
3211
|
-
"kind": "js",
|
|
3212
|
-
"name": "strictFallbackAgent",
|
|
3213
|
-
"declaration": {
|
|
3214
|
-
"name": "strictFallbackAgent",
|
|
3215
|
-
"module": "src/config/fallback-agents.ts"
|
|
3216
|
-
}
|
|
3217
|
-
}
|
|
3218
|
-
]
|
|
3219
|
-
},
|
|
3220
|
-
{
|
|
3221
|
-
"kind": "javascript-module",
|
|
3222
|
-
"path": "src/config/index.ts",
|
|
3223
|
-
"declarations": [],
|
|
3224
|
-
"exports": [
|
|
3225
|
-
{
|
|
3226
|
-
"kind": "js",
|
|
3227
|
-
"name": "*",
|
|
3368
|
+
"name": "messageTimestampTemplate",
|
|
3228
3369
|
"declaration": {
|
|
3229
|
-
"name": "
|
|
3230
|
-
"
|
|
3370
|
+
"name": "messageTimestampTemplate",
|
|
3371
|
+
"module": "src/main/main.template.ts"
|
|
3231
3372
|
}
|
|
3232
3373
|
},
|
|
3233
3374
|
{
|
|
3234
3375
|
"kind": "js",
|
|
3235
|
-
"name": "
|
|
3376
|
+
"name": "FoundationAiAssistantTemplate",
|
|
3236
3377
|
"declaration": {
|
|
3237
|
-
"name": "
|
|
3238
|
-
"
|
|
3378
|
+
"name": "FoundationAiAssistantTemplate",
|
|
3379
|
+
"module": "src/main/main.template.ts"
|
|
3239
3380
|
}
|
|
3240
3381
|
}
|
|
3241
3382
|
]
|
|
3242
3383
|
},
|
|
3243
3384
|
{
|
|
3244
3385
|
"kind": "javascript-module",
|
|
3245
|
-
"path": "src/
|
|
3246
|
-
"declarations": [],
|
|
3247
|
-
"exports": []
|
|
3248
|
-
},
|
|
3249
|
-
{
|
|
3250
|
-
"kind": "javascript-module",
|
|
3251
|
-
"path": "src/provider/ai-provider-switcher.ts",
|
|
3386
|
+
"path": "src/main/main.ts",
|
|
3252
3387
|
"declarations": [
|
|
3253
3388
|
{
|
|
3254
3389
|
"kind": "variable",
|
|
3255
|
-
"name": "
|
|
3256
|
-
"
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
"exports": [
|
|
3260
|
-
{
|
|
3261
|
-
"kind": "js",
|
|
3262
|
-
"name": "AIProviderSwitcher",
|
|
3263
|
-
"declaration": {
|
|
3264
|
-
"name": "AIProviderSwitcher",
|
|
3265
|
-
"module": "src/provider/ai-provider-switcher.ts"
|
|
3266
|
-
}
|
|
3267
|
-
}
|
|
3268
|
-
]
|
|
3269
|
-
},
|
|
3270
|
-
{
|
|
3271
|
-
"kind": "javascript-module",
|
|
3272
|
-
"path": "src/provider/assistant-app-settings.ts",
|
|
3273
|
-
"declarations": [
|
|
3390
|
+
"name": "sparkleIconSvg",
|
|
3391
|
+
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 5 C9.5 11.4 11.1 13 17.5 13 C11.1 13 9.5 14.6 9.5 21 C9.5 14.6 7.9 13 1.5 13 C7.9 13 9.5 11.4 9.5 5 Z\" fill=\"currentColor\"/><path d=\"M17 2.5 C17 5.7 17.8 6.5 21 6.5 C17.8 6.5 17 7.3 17 10.5 C17 7.3 16.2 6.5 13 6.5 C16.2 6.5 17 5.7 17 2.5 Z\" fill=\"currentColor\"/><path d=\"M17.5 15 C17.5 17 18 17.5 20 17.5 C18 17.5 17.5 18 17.5 20 C17.5 18 17 17.5 15 17.5 C17 17.5 17.5 17 17.5 15 Z\" fill=\"currentColor\"/></svg>`",
|
|
3392
|
+
"description": "Three-star AI \"sparkle\" mark — the conventional AI signifier; default assistant avatar."
|
|
3393
|
+
},
|
|
3274
3394
|
{
|
|
3275
3395
|
"kind": "variable",
|
|
3276
|
-
"name": "
|
|
3277
|
-
"
|
|
3278
|
-
|
|
3279
|
-
|
|
3280
|
-
"exports": [
|
|
3396
|
+
"name": "userIconSvg",
|
|
3397
|
+
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" fill=\"currentColor\"/></svg>`",
|
|
3398
|
+
"description": "Person silhouette — default user avatar."
|
|
3399
|
+
},
|
|
3281
3400
|
{
|
|
3282
|
-
"kind": "
|
|
3283
|
-
"name": "
|
|
3284
|
-
"
|
|
3285
|
-
|
|
3286
|
-
|
|
3287
|
-
}
|
|
3288
|
-
}
|
|
3289
|
-
]
|
|
3290
|
-
},
|
|
3291
|
-
{
|
|
3292
|
-
"kind": "javascript-module",
|
|
3293
|
-
"path": "src/provider/tiered-provider-switcher.ts",
|
|
3294
|
-
"declarations": [
|
|
3401
|
+
"kind": "variable",
|
|
3402
|
+
"name": "genesisIconSvg",
|
|
3403
|
+
"default": "`<svg viewBox=\"-4 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.7702 23.0437C18.7702 22.4675 18.8526 21.8089 19.0995 21.3149C19.3465 20.7386 19.6758 20.2447 20.0874 19.833C20.4991 19.4214 20.993 19.0921 21.5693 18.8451C22.1456 18.5982 22.7219 18.5158 23.2981 18.5158H25.9326V11.6828H19.1819V14.3172C19.1819 15.5521 18.6879 16.7047 17.8647 17.5279C17.0414 18.3512 15.8888 18.8451 14.7363 18.9275H6.7507V6.99025H16.4651V0.157227H3.54C2.63442 0.157227 1.72884 0.568855 1.07023 1.22746C0.411628 1.88606 0 2.79165 0 3.77955V22.2205C0 23.1261 0.411628 24.0316 1.07023 24.7726C1.72884 25.4312 2.63442 25.8428 3.54 25.8428H18.7702V23.0437Z\" fill=\"currentColor\"/></svg>`",
|
|
3404
|
+
"description": "Genesis G-mark — opt-in assistant avatar (the default before the sparkle mark)."
|
|
3405
|
+
},
|
|
3295
3406
|
{
|
|
3296
3407
|
"kind": "class",
|
|
3297
|
-
"description": "
|
|
3298
|
-
"name": "
|
|
3408
|
+
"description": "Foundation AI Assistant component.",
|
|
3409
|
+
"name": "FoundationAiAssistant",
|
|
3299
3410
|
"members": [
|
|
3300
3411
|
{
|
|
3301
3412
|
"kind": "field",
|
|
3302
|
-
"name": "
|
|
3303
|
-
"
|
|
3304
|
-
|
|
3305
|
-
}
|
|
3306
|
-
"readonly": true
|
|
3413
|
+
"name": "composerResize",
|
|
3414
|
+
"privacy": "private",
|
|
3415
|
+
"readonly": true,
|
|
3416
|
+
"default": "new ComposerResizeController({\n enabled: () => this.chatConfig.ui?.resizableInput !== false,\n inputEl: () => this.chatInputEl,\n messagesEl: () => this.messagesEl,\n })"
|
|
3307
3417
|
},
|
|
3308
3418
|
{
|
|
3309
3419
|
"kind": "field",
|
|
3310
|
-
"name": "
|
|
3311
|
-
"type": {
|
|
3312
|
-
"text": "TieredAIProviderSwitcherOptions"
|
|
3313
|
-
},
|
|
3420
|
+
"name": "composerMenus",
|
|
3314
3421
|
"privacy": "private",
|
|
3315
3422
|
"readonly": true,
|
|
3316
|
-
"default": "
|
|
3423
|
+
"default": "new ComposerMenuController(this, {\n agentPickerOpen: this.accessor('agentPickerOpen'),\n sessionMenuOpen: this.accessor('sessionMenuOpen'),\n focusInput: () => this.chatInputEl?.focus(),\n resetSessionConfirmations: () => {\n this.confirmingClear = false;\n this.confirmingCompact = false;\n },\n logMeta: (type, detail) => this.logMeta(type, detail),\n })"
|
|
3317
3424
|
},
|
|
3318
3425
|
{
|
|
3319
3426
|
"kind": "field",
|
|
3320
|
-
"name": "
|
|
3321
|
-
"type": {
|
|
3322
|
-
"text": "AITierId"
|
|
3323
|
-
},
|
|
3427
|
+
"name": "attachmentCtrl",
|
|
3324
3428
|
"privacy": "private",
|
|
3325
|
-
"readonly": true
|
|
3429
|
+
"readonly": true,
|
|
3430
|
+
"default": "new AttachmentController(this, {\n acceptedFiles: () => this.chatConfig.ui?.acceptedFiles,\n logMeta: (type, detail) => this.logMeta(type, detail),\n })"
|
|
3326
3431
|
},
|
|
3327
3432
|
{
|
|
3328
3433
|
"kind": "field",
|
|
3329
|
-
"name": "
|
|
3330
|
-
"type": {
|
|
3331
|
-
"text": "MutableAIProviderRegistry"
|
|
3332
|
-
},
|
|
3434
|
+
"name": "contextGateCtrl",
|
|
3333
3435
|
"privacy": "private",
|
|
3334
|
-
"readonly": true
|
|
3436
|
+
"readonly": true,
|
|
3437
|
+
"default": "new ContextGateController({\n chatConfig: () => this.chatConfig,\n messages: () => this.messages,\n contextTokens: () => this.contextTokens,\n contextLimit: () => this.contextLimit,\n gateContextTokens: () => this._gateContextTokens,\n contextReserve: () => this.contextReserve,\n preambleTokens: () => this.driver?.getPreambleTokens?.(),\n compactionPlanFor: (options) => this.driver?.getCompactionPlan?.(options) ?? null,\n bannerVisible: () => this.bannerVisible,\n effectiveBlockedReason: () => this.effectiveBlockedReason,\n flowOwnerAgentName: () => this.flowOwnerAgentName,\n })",
|
|
3438
|
+
"description": "Pure derivation — owns no state. Reaches the driver only through the two\ncallbacks below, so it stays clear of the stateful-agent surface (§11.2\nconstraint 2) and of redux entirely."
|
|
3335
3439
|
},
|
|
3336
3440
|
{
|
|
3337
3441
|
"kind": "field",
|
|
3338
|
-
"name": "
|
|
3442
|
+
"name": "costLedger",
|
|
3339
3443
|
"privacy": "private",
|
|
3340
3444
|
"readonly": true,
|
|
3341
|
-
"default": "new
|
|
3445
|
+
"default": "new CostLedgerController({\n chatConfig: () => this.chatConfig,\n messages: () => this.messages,\n sessionUsage: () => this.sessionUsage,\n providerStatuses: () => this.providerStatuses,\n persistenceActive: () => this.persistenceActive,\n stateKey: () => this.getStateKey(),\n headerTitle: () => this.headerTitle,\n provider: () => this.persistence.provider,\n elementId: () => this.id,\n })",
|
|
3446
|
+
"description": "Cost accounting and the persisted build-history ledger (GENC-1475). Reads the live\nsession through callbacks and owns the rows, the load/write latches and the debounce\ntimer — the element keeps only the names the settings modal binds."
|
|
3342
3447
|
},
|
|
3343
3448
|
{
|
|
3344
3449
|
"kind": "field",
|
|
3345
|
-
"name": "
|
|
3450
|
+
"name": "budget",
|
|
3451
|
+
"privacy": "private",
|
|
3452
|
+
"readonly": true,
|
|
3453
|
+
"default": "new BudgetController({\n sessionRef: () => this._sessionRef,\n providerStatuses: () => this.providerStatuses,\n providerRegistry: () => this.providerRegistry,\n chatConfig: () => this.chatConfig,\n })",
|
|
3454
|
+
"description": "The AI-spend budget: vendor walls, the derived composer lock, the banner copy\nand the settings meter (GENC-1464).\n\nTakes the session store itself rather than a callback per field — see\n`BudgetDeps` for why this one differs from its siblings."
|
|
3455
|
+
},
|
|
3456
|
+
{
|
|
3457
|
+
"kind": "field",
|
|
3458
|
+
"name": "settings",
|
|
3459
|
+
"privacy": "private",
|
|
3460
|
+
"readonly": true,
|
|
3461
|
+
"default": "new SettingsModalController({\n chatConfig: () => this.chatConfig,\n contextTokens: () => this.contextTokens,\n contextLimit: () => this.contextLimit,\n budgetUsageVisible: () => this.budget.settingsUsageVisible,\n costConfig: () => this.costLedger.config,\n costHistoryLength: () => this.costLedger.history.length,\n liveCostSessionTitle: () => this.costLedger.liveTitle,\n providerStatusCount: () => this.providerStatuses.length,\n sessionRef: () => this._sessionRef,\n stateKey: () => this.getStateKey(),\n popoutMode: () => this.popoutMode,\n headerTitle: () => this.headerTitle,\n appSettingsProvider: () => this.appSettingsProvider,\n modal: () => this.settingsModal,\n tabsEl: () => this.settingsTabsEl,\n requestBudgetRefresh: () => this.requestBudgetRefresh(),\n logMeta: (type, detail) => this.logMeta(type, detail),\n })",
|
|
3462
|
+
"description": "The settings modal (`docs/code-health.md` §3). Reaches the two design-system\nrefs through callbacks, because the template writes them by name — see\n`SettingsModalDeps`."
|
|
3463
|
+
},
|
|
3464
|
+
{
|
|
3465
|
+
"kind": "field",
|
|
3466
|
+
"name": "providerRegistry",
|
|
3346
3467
|
"type": {
|
|
3347
|
-
"text": "
|
|
3348
|
-
}
|
|
3349
|
-
"privacy": "private"
|
|
3468
|
+
"text": "AIProviderRegistry"
|
|
3469
|
+
}
|
|
3350
3470
|
},
|
|
3351
3471
|
{
|
|
3352
3472
|
"kind": "field",
|
|
3353
|
-
"name": "
|
|
3473
|
+
"name": "appSettingsProvider",
|
|
3354
3474
|
"type": {
|
|
3355
|
-
"text": "
|
|
3356
|
-
}
|
|
3357
|
-
"readonly": true
|
|
3475
|
+
"text": "AssistantAppSettingsProvider"
|
|
3476
|
+
}
|
|
3358
3477
|
},
|
|
3359
3478
|
{
|
|
3360
|
-
"kind": "
|
|
3361
|
-
"name": "
|
|
3362
|
-
"
|
|
3363
|
-
"
|
|
3364
|
-
"text": "void"
|
|
3365
|
-
}
|
|
3479
|
+
"kind": "field",
|
|
3480
|
+
"name": "designSystemPrefix",
|
|
3481
|
+
"type": {
|
|
3482
|
+
"text": "string"
|
|
3366
3483
|
},
|
|
3367
|
-
"
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
"
|
|
3484
|
+
"default": "'rapid'"
|
|
3485
|
+
},
|
|
3486
|
+
{
|
|
3487
|
+
"kind": "field",
|
|
3488
|
+
"name": "headerTitle",
|
|
3489
|
+
"type": {
|
|
3490
|
+
"text": "string"
|
|
3491
|
+
},
|
|
3492
|
+
"default": "'Genesis Assistant'"
|
|
3493
|
+
},
|
|
3494
|
+
{
|
|
3495
|
+
"kind": "field",
|
|
3496
|
+
"name": "sessionKey",
|
|
3497
|
+
"type": {
|
|
3498
|
+
"text": "string | undefined"
|
|
3499
|
+
},
|
|
3500
|
+
"description": "Explicit session/persistence key (GENC-1351 §5.12). When set, this is the\nsession identity — the key for the driver/store/persister/diagnostics\nregistries and the `sessionKey` passed to the persistence provider — taking\nprecedence over the DOM `id`. A host that scopes persistence per-entity\n(e.g. one chat session per project) binds this to a stable per-entity id;\nchanging it on a **connected** element re-keys the session in place — tears\ndown the current conversation and restores the new key's — via\n`switchSession`. Falls back to `id` when unset,\nso existing consumers are unaffected."
|
|
3501
|
+
},
|
|
3502
|
+
{
|
|
3503
|
+
"kind": "field",
|
|
3504
|
+
"name": "imageSrc",
|
|
3505
|
+
"type": {
|
|
3506
|
+
"text": "string | undefined"
|
|
3507
|
+
}
|
|
3508
|
+
},
|
|
3509
|
+
{
|
|
3510
|
+
"kind": "field",
|
|
3511
|
+
"name": "userImageSrc",
|
|
3512
|
+
"type": {
|
|
3513
|
+
"text": "string | undefined"
|
|
3514
|
+
}
|
|
3515
|
+
},
|
|
3516
|
+
{
|
|
3517
|
+
"kind": "field",
|
|
3518
|
+
"name": "assistantIcon",
|
|
3519
|
+
"type": {
|
|
3520
|
+
"text": "string | undefined"
|
|
3521
|
+
},
|
|
3522
|
+
"description": "Inline SVG markup overriding the default assistant \"sparkle\" avatar. The\nmarkup is sanitized (SVG profile) before rendering and uses the avatar's\ntheme colour via `currentColor`. For a raster/photo avatar set `imageSrc`\ninstead, which takes precedence. Set to `genesisIconSvg` to restore the\nGenesis G-mark."
|
|
3523
|
+
},
|
|
3524
|
+
{
|
|
3525
|
+
"kind": "field",
|
|
3526
|
+
"name": "assistantIconSafe",
|
|
3527
|
+
"type": {
|
|
3528
|
+
"text": "string"
|
|
3529
|
+
},
|
|
3530
|
+
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 5 C9.5 11.4 11.1 13 17.5 13 C11.1 13 9.5 14.6 9.5 21 C9.5 14.6 7.9 13 1.5 13 C7.9 13 9.5 11.4 9.5 5 Z\" fill=\"currentColor\"/><path d=\"M17 2.5 C17 5.7 17.8 6.5 21 6.5 C17.8 6.5 17 7.3 17 10.5 C17 7.3 16.2 6.5 13 6.5 C16.2 6.5 17 5.7 17 2.5 Z\" fill=\"currentColor\"/><path d=\"M17.5 15 C17.5 17 18 17.5 20 17.5 C18 17.5 17.5 18 17.5 20 C17.5 18 17 17.5 15 17.5 C17 17.5 17.5 17 17.5 15 Z\" fill=\"currentColor\"/></svg>`",
|
|
3531
|
+
"description": "Sanitized `assistantIcon`, or the default sparkle mark; bound into the template. @internal"
|
|
3376
3532
|
},
|
|
3377
3533
|
{
|
|
3378
3534
|
"kind": "method",
|
|
3379
|
-
"name": "
|
|
3535
|
+
"name": "assistantIconChanged",
|
|
3536
|
+
"privacy": "protected",
|
|
3380
3537
|
"return": {
|
|
3381
3538
|
"type": {
|
|
3382
3539
|
"text": "void"
|
|
3383
3540
|
}
|
|
3541
|
+
}
|
|
3542
|
+
},
|
|
3543
|
+
{
|
|
3544
|
+
"kind": "field",
|
|
3545
|
+
"name": "userIcon",
|
|
3546
|
+
"type": {
|
|
3547
|
+
"text": "string | undefined"
|
|
3384
3548
|
},
|
|
3385
|
-
"
|
|
3386
|
-
{
|
|
3387
|
-
"name": "vendor",
|
|
3388
|
-
"type": {
|
|
3389
|
-
"text": "string"
|
|
3390
|
-
}
|
|
3391
|
-
}
|
|
3392
|
-
],
|
|
3393
|
-
"description": "Adopt a vendor the app read back from its own store — the same registry move as\nTieredAIProviderSwitcher.switchTo, without the `onSwitch` callback, because this\nvalue came FROM the store and writing it back would be a pointless round-trip on load.\n\nExists because registration has to stay synchronous: an element that connects before the\ntoken is registered caches the platform's no-op fallback, so an app cannot await its\nstored preference before constructing this. It boots on `initialVendor` and adopts the\nstored one a moment later, through a registry that is mutable and held by reference."
|
|
3549
|
+
"description": "Inline SVG markup overriding the default user \"person\" avatar. The markup is\nsanitized (SVG profile) before rendering and uses the avatar's theme colour\nvia `currentColor`. For a raster/photo avatar set `userImageSrc` instead,\nwhich takes precedence."
|
|
3394
3550
|
},
|
|
3395
3551
|
{
|
|
3396
|
-
"kind": "
|
|
3397
|
-
"name": "
|
|
3398
|
-
"
|
|
3399
|
-
"
|
|
3400
|
-
"text": "() => void"
|
|
3401
|
-
}
|
|
3552
|
+
"kind": "field",
|
|
3553
|
+
"name": "userIconSafe",
|
|
3554
|
+
"type": {
|
|
3555
|
+
"text": "string"
|
|
3402
3556
|
},
|
|
3403
|
-
"
|
|
3404
|
-
|
|
3405
|
-
"name": "listener",
|
|
3406
|
-
"type": {
|
|
3407
|
-
"text": "(vendor: string) => void"
|
|
3408
|
-
}
|
|
3409
|
-
}
|
|
3410
|
-
]
|
|
3557
|
+
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" fill=\"currentColor\"/></svg>`",
|
|
3558
|
+
"description": "Sanitized `userIcon`, or the default person mark; bound into the template. @internal"
|
|
3411
3559
|
},
|
|
3412
3560
|
{
|
|
3413
3561
|
"kind": "method",
|
|
3414
|
-
"name": "
|
|
3415
|
-
"privacy": "
|
|
3562
|
+
"name": "userIconChanged",
|
|
3563
|
+
"privacy": "protected",
|
|
3416
3564
|
"return": {
|
|
3417
3565
|
"type": {
|
|
3418
3566
|
"text": "void"
|
|
3419
3567
|
}
|
|
3568
|
+
}
|
|
3569
|
+
},
|
|
3570
|
+
{
|
|
3571
|
+
"kind": "field",
|
|
3572
|
+
"name": "placeholder",
|
|
3573
|
+
"type": {
|
|
3574
|
+
"text": "string"
|
|
3420
3575
|
},
|
|
3421
|
-
"
|
|
3422
|
-
|
|
3423
|
-
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
3428
|
-
|
|
3429
|
-
"description": "
|
|
3576
|
+
"default": "'Message assistant...'"
|
|
3577
|
+
},
|
|
3578
|
+
{
|
|
3579
|
+
"kind": "field",
|
|
3580
|
+
"name": "popoutMode",
|
|
3581
|
+
"type": {
|
|
3582
|
+
"text": "PopoutMode | undefined"
|
|
3583
|
+
},
|
|
3584
|
+
"description": "Controls the pop-out button shown next to the settings cog.\n\"expand\" — in bubble, expands to layout panel (fires chat-popout).\n\"collapse\" — in layout panel, collapses back to bubble (fires chat-popin).\nAbsent — no button (default standalone behaviour, no breaking change)."
|
|
3585
|
+
},
|
|
3586
|
+
{
|
|
3587
|
+
"kind": "field",
|
|
3588
|
+
"name": "agents",
|
|
3589
|
+
"type": {
|
|
3590
|
+
"text": "AgentConfig[] | undefined"
|
|
3591
|
+
},
|
|
3592
|
+
"description": "Agent configuration. Each user message is routed to the appropriate specialist\nbased on intent. With a single entry, orchestration is skipped."
|
|
3593
|
+
},
|
|
3594
|
+
{
|
|
3595
|
+
"kind": "field",
|
|
3596
|
+
"name": "chatConfig",
|
|
3597
|
+
"type": {
|
|
3598
|
+
"text": "ChatConfig"
|
|
3599
|
+
},
|
|
3600
|
+
"default": "{}"
|
|
3601
|
+
},
|
|
3602
|
+
{
|
|
3603
|
+
"kind": "field",
|
|
3604
|
+
"name": "persistence",
|
|
3605
|
+
"type": {
|
|
3606
|
+
"text": "SessionPersistenceConfig"
|
|
3607
|
+
},
|
|
3608
|
+
"default": "{}",
|
|
3609
|
+
"description": "Optional session persistence (GENC-1351). Off by default — set `enabled`\nand a `provider` (e.g. a `WebStorageSessionProvider`) to have the assistant\nautosave on idle and auto-restore the conversation on page reload. Exposed\nas a top-level property (like `agents`/`providerRegistry`) rather than via\n`chatConfig`, since the provider type lives in this package while\n`ChatConfig` lives in `foundation-ai`."
|
|
3610
|
+
},
|
|
3611
|
+
{
|
|
3612
|
+
"kind": "field",
|
|
3613
|
+
"name": "aiServiceErrorMessages",
|
|
3614
|
+
"type": {
|
|
3615
|
+
"text": "Partial<Record<AIServiceRefusal, string>> | undefined"
|
|
3616
|
+
},
|
|
3617
|
+
"description": "Replaces the transcript sentence shown when the app's AI service refuses a request with one of\n`AI_SERVICE_ERROR_CODES`, or its router with one of `AI_SERVICE_ACCESS_REFUSALS` (GENC-1611), per\ncode; a code with no entry keeps\n`DEFAULT_AI_SERVICE_ERROR_MESSAGES`. Read when the driver is created, so set it before the\nelement connects."
|
|
3618
|
+
},
|
|
3619
|
+
{
|
|
3620
|
+
"kind": "field",
|
|
3621
|
+
"name": "agentPicker",
|
|
3622
|
+
"type": {
|
|
3623
|
+
"text": "AgentPickerMode"
|
|
3624
|
+
},
|
|
3625
|
+
"description": "Resolved agent picker mode from `chatConfig.picker.mode`. Defaults to\n`'disabled'`.",
|
|
3626
|
+
"readonly": true
|
|
3627
|
+
},
|
|
3628
|
+
{
|
|
3629
|
+
"kind": "field",
|
|
3630
|
+
"name": "composerHiddenByConfig",
|
|
3631
|
+
"type": {
|
|
3632
|
+
"text": "boolean"
|
|
3633
|
+
},
|
|
3634
|
+
"description": "Whether the built-in composer (input row + attachment chips) is hidden by\nthe host's `chatConfig.ui.hideComposer` setting. Used by the template to\ngate those blocks. Marked `@volatile` because the `'while-splash'` branch\nreads `showingSplash` only conditionally, so FAST cannot rely on cached\ndependency tracking.",
|
|
3635
|
+
"readonly": true
|
|
3636
|
+
},
|
|
3637
|
+
{
|
|
3638
|
+
"kind": "field",
|
|
3639
|
+
"name": "debugStateFactory",
|
|
3640
|
+
"type": {
|
|
3641
|
+
"text": "() => unknown | undefined"
|
|
3642
|
+
}
|
|
3643
|
+
},
|
|
3644
|
+
{
|
|
3645
|
+
"kind": "field",
|
|
3646
|
+
"name": "debugRedux",
|
|
3647
|
+
"type": {
|
|
3648
|
+
"text": "boolean"
|
|
3649
|
+
},
|
|
3650
|
+
"default": "false",
|
|
3651
|
+
"description": "When set, enables Redux DevTools for this instance's session store."
|
|
3652
|
+
},
|
|
3653
|
+
{
|
|
3654
|
+
"kind": "field",
|
|
3655
|
+
"name": "_sessionRef",
|
|
3656
|
+
"type": {
|
|
3657
|
+
"text": "SessionStoreReturn | undefined"
|
|
3658
|
+
},
|
|
3659
|
+
"privacy": "private",
|
|
3660
|
+
"description": "Pointer to this session's redux store. `@observable` (GENC-1351 §5.12) so that\n**swapping** it — the in-place session switch/re-key (`switchSession`) —\nforces every store-backed getter binding to re-evaluate against the NEW store.\nWithout this, FAST's per-store slice tracking would leave the view subscribed\nto the old store after a swap and it wouldn't re-render. (A same-store reset via\nredux actions re-renders without this; a store *swap* needs it.)"
|
|
3661
|
+
},
|
|
3662
|
+
{
|
|
3663
|
+
"kind": "field",
|
|
3664
|
+
"name": "_gateContextTokens",
|
|
3665
|
+
"type": {
|
|
3666
|
+
"text": "number | undefined"
|
|
3667
|
+
},
|
|
3668
|
+
"privacy": "private",
|
|
3669
|
+
"description": "FoundationAiAssistant.contextTokens as of the last moment no turn was\nrunning — the figure FoundationAiAssistant.contextGate is judged\nagainst (GENC-1582).\n\n**Why the gate reads a held figure and the gauge does not.** They answer\ndifferent questions. The gauge is a meter: \"how much context is in play right\nnow\", and a build that momentarily fills 900k of a 1M window should say so.\nThe gate answers \"may the next turn START\", which is only meaningful when no\nturn is running — the composer is disabled by `busy` throughout one anyway, so\na warning raised mid-turn is unactionable by construction.\n\nReading the live figure meant the pill went amber part-way through every large\nbuild and cleared itself at the end, because a `condenseWhen` agent's context\npeaks mid-turn and is shed before the turn finishes. A signal that fires and\nwithdraws on its own each time teaches people to ignore it.\n\n**Held, not latched.** The distinction matters, because `contextGate` is\ndocumented as derived-never-latched and the reason is a real dead end: a figure\npinned to a conversation that has since shrunk blocks the user out of the very\nactions that would fix it. This holds only for the duration of a turn and is\nrefreshed the moment one settles, so no shrink can outlive it — a compaction\nruns under `compacting` rather than `busy` and therefore updates it as it goes,\nand Clear drops it outright. What it costs is one turn of lag: a turn that\nballoons the resting size does not warn until it ends, which is the same trade\nthe flow-owner soften already makes deliberately.\n\nUnset falls back to the live figure, which is correct wherever there is no held\nvalue yet — first paint, and a remount, both of which happen at rest."
|
|
3670
|
+
},
|
|
3671
|
+
{
|
|
3672
|
+
"kind": "field",
|
|
3673
|
+
"name": "messages",
|
|
3674
|
+
"type": {
|
|
3675
|
+
"text": "ChatMessage[]"
|
|
3676
|
+
}
|
|
3677
|
+
},
|
|
3678
|
+
{
|
|
3679
|
+
"kind": "field",
|
|
3680
|
+
"name": "state",
|
|
3681
|
+
"type": {
|
|
3682
|
+
"text": "AiAssistantState"
|
|
3683
|
+
}
|
|
3430
3684
|
},
|
|
3431
3685
|
{
|
|
3432
3686
|
"kind": "method",
|
|
3433
|
-
"name": "
|
|
3687
|
+
"name": "isBusyState",
|
|
3434
3688
|
"privacy": "private",
|
|
3435
3689
|
"return": {
|
|
3436
3690
|
"type": {
|
|
3437
|
-
"text": "
|
|
3691
|
+
"text": "boolean"
|
|
3438
3692
|
}
|
|
3439
3693
|
},
|
|
3440
3694
|
"parameters": [
|
|
3441
3695
|
{
|
|
3442
|
-
"name": "
|
|
3696
|
+
"name": "s",
|
|
3697
|
+
"optional": true,
|
|
3443
3698
|
"type": {
|
|
3444
|
-
"text": "
|
|
3699
|
+
"text": "AiAssistantState"
|
|
3445
3700
|
}
|
|
3446
3701
|
}
|
|
3447
|
-
]
|
|
3702
|
+
],
|
|
3703
|
+
"description": "Whether a state value counts as \"busy\" — a turn is active."
|
|
3448
3704
|
},
|
|
3449
3705
|
{
|
|
3450
3706
|
"kind": "method",
|
|
3451
|
-
"name": "
|
|
3707
|
+
"name": "rearmContextGate",
|
|
3452
3708
|
"privacy": "private",
|
|
3453
3709
|
"return": {
|
|
3454
3710
|
"type": {
|
|
3455
|
-
"text": "
|
|
3711
|
+
"text": "void"
|
|
3456
3712
|
}
|
|
3457
3713
|
},
|
|
3458
|
-
"
|
|
3459
|
-
{
|
|
3460
|
-
"name": "vendor",
|
|
3461
|
-
"type": {
|
|
3462
|
-
"text": "string"
|
|
3463
|
-
}
|
|
3464
|
-
}
|
|
3465
|
-
]
|
|
3466
|
-
}
|
|
3467
|
-
]
|
|
3468
|
-
},
|
|
3469
|
-
{
|
|
3470
|
-
"kind": "function",
|
|
3471
|
-
"name": "registerTieredAIProviders",
|
|
3472
|
-
"return": {
|
|
3473
|
-
"type": {
|
|
3474
|
-
"text": "TieredAIProviderSwitcher"
|
|
3475
|
-
}
|
|
3476
|
-
},
|
|
3477
|
-
"parameters": [
|
|
3478
|
-
{
|
|
3479
|
-
"name": "container",
|
|
3480
|
-
"type": {
|
|
3481
|
-
"text": "Container"
|
|
3482
|
-
}
|
|
3714
|
+
"description": "Re-arm FoundationAiAssistant.contextGate against the size the turn\njust left behind (GENC-1582).\n\nThe final call of a turn is made AFTER `agentEnd` condensation fires, so by\nthe time a turn settles `contextTokens` is the resting figure rather than the\nmid-turn peak — which is the number the reserve's thresholds are drawn\nagainst.\n\n**Called from BOTH settle paths, and it has to be.** A turn does not end\nthrough the `state` setter: `send()`'s `finally` writes `setState('idle')`\nstraight to the captured session ref, because the element may have\ndisconnected mid-turn, and that block then replicates the parts of the\nsetter's settle that matter. Arming the gate inline in the setter therefore\narmed it on the one path a real turn never takes — the gate silently kept\nfalling back to the live figure and the hold did nothing at all. Found by\ndriving a real UI Builder turn and reading `_gateContextTokens`, which was\n`undefined` from start to finish; no unit test noticed, because the test\nharness sets `state` through the property.\n\nOne method rather than two assignments so the two paths cannot drift again."
|
|
3483
3715
|
},
|
|
3484
|
-
{
|
|
3485
|
-
"name": "options",
|
|
3486
|
-
"type": {
|
|
3487
|
-
"text": "Omit<TieredAIProviderSwitcherOptions, 'container'>"
|
|
3488
|
-
}
|
|
3489
|
-
}
|
|
3490
|
-
],
|
|
3491
|
-
"description": "Build a TieredAIProviderSwitcher — which registers the tier-shaped provider\nregistry — and put it on the (AIProviderSwitcher:variable) token. Call once at app\nbootstrap."
|
|
3492
|
-
}
|
|
3493
|
-
],
|
|
3494
|
-
"exports": [
|
|
3495
|
-
{
|
|
3496
|
-
"kind": "js",
|
|
3497
|
-
"name": "TieredAIProviderSwitcher",
|
|
3498
|
-
"declaration": {
|
|
3499
|
-
"name": "TieredAIProviderSwitcher",
|
|
3500
|
-
"module": "src/provider/tiered-provider-switcher.ts"
|
|
3501
|
-
}
|
|
3502
|
-
},
|
|
3503
|
-
{
|
|
3504
|
-
"kind": "js",
|
|
3505
|
-
"name": "registerTieredAIProviders",
|
|
3506
|
-
"declaration": {
|
|
3507
|
-
"name": "registerTieredAIProviders",
|
|
3508
|
-
"module": "src/provider/tiered-provider-switcher.ts"
|
|
3509
|
-
}
|
|
3510
|
-
}
|
|
3511
|
-
]
|
|
3512
|
-
},
|
|
3513
|
-
{
|
|
3514
|
-
"kind": "javascript-module",
|
|
3515
|
-
"path": "src/main/attachment-controller.ts",
|
|
3516
|
-
"declarations": [],
|
|
3517
|
-
"exports": []
|
|
3518
|
-
},
|
|
3519
|
-
{
|
|
3520
|
-
"kind": "javascript-module",
|
|
3521
|
-
"path": "src/main/budget-controller.ts",
|
|
3522
|
-
"declarations": [],
|
|
3523
|
-
"exports": []
|
|
3524
|
-
},
|
|
3525
|
-
{
|
|
3526
|
-
"kind": "javascript-module",
|
|
3527
|
-
"path": "src/main/composer-menu-controller.ts",
|
|
3528
|
-
"declarations": [],
|
|
3529
|
-
"exports": []
|
|
3530
|
-
},
|
|
3531
|
-
{
|
|
3532
|
-
"kind": "javascript-module",
|
|
3533
|
-
"path": "src/main/composer-resize-controller.ts",
|
|
3534
|
-
"declarations": [],
|
|
3535
|
-
"exports": []
|
|
3536
|
-
},
|
|
3537
|
-
{
|
|
3538
|
-
"kind": "javascript-module",
|
|
3539
|
-
"path": "src/main/context-gate-controller.ts",
|
|
3540
|
-
"declarations": [],
|
|
3541
|
-
"exports": []
|
|
3542
|
-
},
|
|
3543
|
-
{
|
|
3544
|
-
"kind": "javascript-module",
|
|
3545
|
-
"path": "src/main/cost-ledger-controller.ts",
|
|
3546
|
-
"declarations": [],
|
|
3547
|
-
"exports": []
|
|
3548
|
-
},
|
|
3549
|
-
{
|
|
3550
|
-
"kind": "javascript-module",
|
|
3551
|
-
"path": "src/main/index.ts",
|
|
3552
|
-
"declarations": [],
|
|
3553
|
-
"exports": [
|
|
3554
|
-
{
|
|
3555
|
-
"kind": "js",
|
|
3556
|
-
"name": "*",
|
|
3557
|
-
"declaration": {
|
|
3558
|
-
"name": "*",
|
|
3559
|
-
"package": "./main.template"
|
|
3560
|
-
}
|
|
3561
|
-
},
|
|
3562
|
-
{
|
|
3563
|
-
"kind": "js",
|
|
3564
|
-
"name": "*",
|
|
3565
|
-
"declaration": {
|
|
3566
|
-
"name": "*",
|
|
3567
|
-
"package": "./main"
|
|
3568
|
-
}
|
|
3569
|
-
},
|
|
3570
|
-
{
|
|
3571
|
-
"kind": "js",
|
|
3572
|
-
"name": "*",
|
|
3573
|
-
"declaration": {
|
|
3574
|
-
"name": "*",
|
|
3575
|
-
"package": "./main.types"
|
|
3576
|
-
}
|
|
3577
|
-
}
|
|
3578
|
-
]
|
|
3579
|
-
},
|
|
3580
|
-
{
|
|
3581
|
-
"kind": "javascript-module",
|
|
3582
|
-
"path": "src/main/main.styles.ts",
|
|
3583
|
-
"declarations": [
|
|
3584
|
-
{
|
|
3585
|
-
"kind": "variable",
|
|
3586
|
-
"name": "styles",
|
|
3587
|
-
"default": "css`\n ${baseStyles}\n ${\n /* The session menu's rows. Same partial the agent picker imports into its own\n shadow root — the one thing that keeps the two menus looking alike. */ ''\n }\n ${menuItemStyles}\n ${settingsModalStyles}\n`"
|
|
3588
|
-
}
|
|
3589
|
-
],
|
|
3590
|
-
"exports": [
|
|
3591
|
-
{
|
|
3592
|
-
"kind": "js",
|
|
3593
|
-
"name": "styles",
|
|
3594
|
-
"declaration": {
|
|
3595
|
-
"name": "styles",
|
|
3596
|
-
"module": "src/main/main.styles.ts"
|
|
3597
|
-
}
|
|
3598
|
-
}
|
|
3599
|
-
]
|
|
3600
|
-
},
|
|
3601
|
-
{
|
|
3602
|
-
"kind": "javascript-module",
|
|
3603
|
-
"path": "src/main/main.template.ts",
|
|
3604
|
-
"declarations": [
|
|
3605
|
-
{
|
|
3606
|
-
"kind": "variable",
|
|
3607
|
-
"name": "messageTimestampTemplate",
|
|
3608
|
-
"default": "html<ChatMessage, FoundationAiAssistant>`\n <time\n class=\"message-timestamp\"\n part=\"message-timestamp\"\n datetime=\"${(m) => messageTimestampDateTime(m.timestamp)}\"\n >\n <span aria-hidden=\"true\">\n ${(m, c) => formatMessageTimestamp(m.timestamp, c.parent.timestampClock)}\n </span>\n <span class=\"visually-hidden\">${(m) => formatAbsoluteTimestamp(m.timestamp)}</span>\n </time>\n`",
|
|
3609
|
-
"description": "The timestamp shown beside the sender name (GENC-1257).\n\nTwo strings, not one. A screen reader announces a `<time>` element's TEXT — it has no\nimplicit ARIA role, and the `datetime` attribute is never surfaced to the user — so the\nrelative text is hidden from assistive tech and paired with a visually-hidden absolute\nstring. Otherwise AT would hear \"5 minutes ago\" with nothing to anchor it, and in\n`'hover'` mode would hear it for a timestamp sighted users never asked to see.\n`datetime` stays because it is correct HTML and useful to tooling, not for a11y.\n\nOnly the VISUAL reveal is hover-gated, in CSS — see `.message-timestamp`. `opacity: 0`\nleaves the element in the accessibility tree, so AT gets a time in both visible modes;\n`'off'` is the only mode that removes it.\n\nReads `timestampClock` rather than `Date.now()` so every row shares one invalidatable\nclock and a tick re-evaluates them all; see `FoundationAiAssistant.timestampClock`."
|
|
3610
|
-
},
|
|
3611
|
-
{
|
|
3612
|
-
"kind": "function",
|
|
3613
|
-
"name": "FoundationAiAssistantTemplate",
|
|
3614
|
-
"return": {
|
|
3615
|
-
"type": {
|
|
3616
|
-
"text": "ViewTemplate<FoundationAiAssistant>"
|
|
3617
|
-
}
|
|
3618
|
-
},
|
|
3619
|
-
"parameters": [
|
|
3620
|
-
{
|
|
3621
|
-
"name": "designSystemPrefix",
|
|
3622
|
-
"type": {
|
|
3623
|
-
"text": "string"
|
|
3624
|
-
}
|
|
3625
|
-
}
|
|
3626
|
-
]
|
|
3627
|
-
}
|
|
3628
|
-
],
|
|
3629
|
-
"exports": [
|
|
3630
|
-
{
|
|
3631
|
-
"kind": "js",
|
|
3632
|
-
"name": "messageTimestampTemplate",
|
|
3633
|
-
"declaration": {
|
|
3634
|
-
"name": "messageTimestampTemplate",
|
|
3635
|
-
"module": "src/main/main.template.ts"
|
|
3636
|
-
}
|
|
3637
|
-
},
|
|
3638
|
-
{
|
|
3639
|
-
"kind": "js",
|
|
3640
|
-
"name": "FoundationAiAssistantTemplate",
|
|
3641
|
-
"declaration": {
|
|
3642
|
-
"name": "FoundationAiAssistantTemplate",
|
|
3643
|
-
"module": "src/main/main.template.ts"
|
|
3644
|
-
}
|
|
3645
|
-
}
|
|
3646
|
-
]
|
|
3647
|
-
},
|
|
3648
|
-
{
|
|
3649
|
-
"kind": "javascript-module",
|
|
3650
|
-
"path": "src/main/main.ts",
|
|
3651
|
-
"declarations": [
|
|
3652
|
-
{
|
|
3653
|
-
"kind": "variable",
|
|
3654
|
-
"name": "sparkleIconSvg",
|
|
3655
|
-
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 5 C9.5 11.4 11.1 13 17.5 13 C11.1 13 9.5 14.6 9.5 21 C9.5 14.6 7.9 13 1.5 13 C7.9 13 9.5 11.4 9.5 5 Z\" fill=\"currentColor\"/><path d=\"M17 2.5 C17 5.7 17.8 6.5 21 6.5 C17.8 6.5 17 7.3 17 10.5 C17 7.3 16.2 6.5 13 6.5 C16.2 6.5 17 5.7 17 2.5 Z\" fill=\"currentColor\"/><path d=\"M17.5 15 C17.5 17 18 17.5 20 17.5 C18 17.5 17.5 18 17.5 20 C17.5 18 17 17.5 15 17.5 C17 17.5 17.5 17 17.5 15 Z\" fill=\"currentColor\"/></svg>`",
|
|
3656
|
-
"description": "Three-star AI \"sparkle\" mark — the conventional AI signifier; default assistant avatar."
|
|
3657
|
-
},
|
|
3658
|
-
{
|
|
3659
|
-
"kind": "variable",
|
|
3660
|
-
"name": "userIconSvg",
|
|
3661
|
-
"default": "`<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" fill=\"currentColor\"/></svg>`",
|
|
3662
|
-
"description": "Person silhouette — default user avatar."
|
|
3663
|
-
},
|
|
3664
|
-
{
|
|
3665
|
-
"kind": "variable",
|
|
3666
|
-
"name": "genesisIconSvg",
|
|
3667
|
-
"default": "`<svg viewBox=\"-4 0 30 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.7702 23.0437C18.7702 22.4675 18.8526 21.8089 19.0995 21.3149C19.3465 20.7386 19.6758 20.2447 20.0874 19.833C20.4991 19.4214 20.993 19.0921 21.5693 18.8451C22.1456 18.5982 22.7219 18.5158 23.2981 18.5158H25.9326V11.6828H19.1819V14.3172C19.1819 15.5521 18.6879 16.7047 17.8647 17.5279C17.0414 18.3512 15.8888 18.8451 14.7363 18.9275H6.7507V6.99025H16.4651V0.157227H3.54C2.63442 0.157227 1.72884 0.568855 1.07023 1.22746C0.411628 1.88606 0 2.79165 0 3.77955V22.2205C0 23.1261 0.411628 24.0316 1.07023 24.7726C1.72884 25.4312 2.63442 25.8428 3.54 25.8428H18.7702V23.0437Z\" fill=\"currentColor\"/></svg>`",
|
|
3668
|
-
"description": "Genesis G-mark — opt-in assistant avatar (the default before the sparkle mark)."
|
|
3669
|
-
},
|
|
3670
|
-
{
|
|
3671
|
-
"kind": "class",
|
|
3672
|
-
"description": "Foundation AI Assistant component.",
|
|
3673
|
-
"name": "FoundationAiAssistant",
|
|
3674
|
-
"members": [
|
|
3675
3716
|
{
|
|
3676
3717
|
"kind": "field",
|
|
3677
|
-
"name": "
|
|
3678
|
-
"
|
|
3679
|
-
|
|
3680
|
-
|
|
3718
|
+
"name": "busy",
|
|
3719
|
+
"type": {
|
|
3720
|
+
"text": "boolean"
|
|
3721
|
+
},
|
|
3722
|
+
"description": "True while a turn is active — `loading` or `cancelling` (a stop was\nrequested but the turn is still winding down). The single \"is a turn\nrunning\" predicate; UI gates use this so `cancelling` behaves like\n`loading` everywhere. `@volatile` so the template re-evaluates it when the\nstore-backed `state` changes.",
|
|
3723
|
+
"readonly": true
|
|
3681
3724
|
},
|
|
3682
3725
|
{
|
|
3683
3726
|
"kind": "field",
|
|
3684
|
-
"name": "
|
|
3727
|
+
"name": "sendBlocked",
|
|
3728
|
+
"type": {
|
|
3729
|
+
"text": "boolean"
|
|
3730
|
+
},
|
|
3685
3731
|
"privacy": "private",
|
|
3686
|
-
"
|
|
3687
|
-
"
|
|
3732
|
+
"description": "True when a new send must be refused: a turn is running (`busy`), a page-reload\nrestore is loading history that would clobber it (`restoring`), a manual\ncompaction is rewriting history (`compacting`), or a backend condition has\nlocked the assistant outright (`blocked` — e.g. an exhausted AI budget).\nMirrors the composer's `?disabled` gate so a **programmatic**\n`send`/`submitMessage` (e.g. a host's custom input while the built-in composer\nis hidden) can't slip past it and have its message wiped when the\nrestored/compacted history lands (GENC-1351 §6).",
|
|
3733
|
+
"readonly": true
|
|
3688
3734
|
},
|
|
3689
3735
|
{
|
|
3690
|
-
"kind": "
|
|
3691
|
-
"name": "
|
|
3736
|
+
"kind": "method",
|
|
3737
|
+
"name": "sendRefusalReason",
|
|
3692
3738
|
"privacy": "private",
|
|
3693
|
-
"
|
|
3694
|
-
|
|
3739
|
+
"return": {
|
|
3740
|
+
"type": {
|
|
3741
|
+
"text": "string"
|
|
3742
|
+
}
|
|
3743
|
+
},
|
|
3744
|
+
"description": "Why a programmatic send was refused, for `submitMessage`'s `errors`. A\nbackend block is called out distinctly because — unlike the transient\n\"busy\" cases — waiting and retrying will never clear it, and a caller\nlooping on \"Assistant is busy\" would spin forever."
|
|
3695
3745
|
},
|
|
3696
3746
|
{
|
|
3697
|
-
"kind": "
|
|
3698
|
-
"name": "
|
|
3747
|
+
"kind": "method",
|
|
3748
|
+
"name": "applyDeferredAgentsSwap",
|
|
3699
3749
|
"privacy": "private",
|
|
3700
|
-
"
|
|
3701
|
-
|
|
3702
|
-
|
|
3750
|
+
"return": {
|
|
3751
|
+
"type": {
|
|
3752
|
+
"text": "void"
|
|
3753
|
+
}
|
|
3754
|
+
},
|
|
3755
|
+
"description": "Re-runs `agentsChanged` if the live `agents` array no longer matches the\nfingerprint of the currently installed driver. Used to apply swaps that\nlanded during a turn (and were skipped by the `isBusy()` guard) once the\ndriver returns to idle."
|
|
3703
3756
|
},
|
|
3704
3757
|
{
|
|
3705
|
-
"kind": "
|
|
3706
|
-
"name": "
|
|
3707
|
-
"privacy": "private",
|
|
3708
|
-
"readonly": true,
|
|
3709
|
-
"default": "new CostLedgerController({\n chatConfig: () => this.chatConfig,\n messages: () => this.messages,\n sessionUsage: () => this.sessionUsage,\n providerStatuses: () => this.providerStatuses,\n persistenceActive: () => this.persistenceActive,\n stateKey: () => this.getStateKey(),\n headerTitle: () => this.headerTitle,\n provider: () => this.persistence.provider,\n elementId: () => this.id,\n })",
|
|
3710
|
-
"description": "Cost accounting and the persisted build-history ledger (GENC-1475). Reads the live\nsession through callbacks and owns the rows, the load/write latches and the debounce\ntimer — the element keeps only the names the settings modal binds."
|
|
3711
|
-
},
|
|
3712
|
-
{
|
|
3713
|
-
"kind": "field",
|
|
3714
|
-
"name": "budget",
|
|
3758
|
+
"kind": "method",
|
|
3759
|
+
"name": "applyDeferredSessionSwitch",
|
|
3715
3760
|
"privacy": "private",
|
|
3716
|
-
"
|
|
3717
|
-
|
|
3718
|
-
|
|
3761
|
+
"return": {
|
|
3762
|
+
"type": {
|
|
3763
|
+
"text": "void"
|
|
3764
|
+
}
|
|
3765
|
+
},
|
|
3766
|
+
"description": "Apply a `session-key` re-key that arrived mid-turn and was deferred by\n`switchSession`'s busy guard (GENC-1351 §5.12). Run at each point the driver\nreturns to idle, BEFORE `applyDeferredAgentsSwap` — a switch rebuilds the\ndriver against the current agents, so a pending agents-swap then no-ops."
|
|
3719
3767
|
},
|
|
3720
3768
|
{
|
|
3721
|
-
"kind": "
|
|
3722
|
-
"name": "
|
|
3769
|
+
"kind": "method",
|
|
3770
|
+
"name": "maybeAutoFocusChatInput",
|
|
3723
3771
|
"privacy": "private",
|
|
3724
|
-
"
|
|
3725
|
-
"default": "new SettingsModalController({\n chatConfig: () => this.chatConfig,\n contextTokens: () => this.contextTokens,\n contextLimit: () => this.contextLimit,\n budgetUsageVisible: () => this.budget.settingsUsageVisible,\n costConfig: () => this.costLedger.config,\n costHistoryLength: () => this.costLedger.history.length,\n liveCostSessionTitle: () => this.costLedger.liveTitle,\n providerStatusCount: () => this.providerStatuses.length,\n sessionRef: () => this._sessionRef,\n stateKey: () => this.getStateKey(),\n popoutMode: () => this.popoutMode,\n headerTitle: () => this.headerTitle,\n appSettingsProvider: () => this.appSettingsProvider,\n modal: () => this.settingsModal,\n tabsEl: () => this.settingsTabsEl,\n requestBudgetRefresh: () => this.requestBudgetRefresh(),\n logMeta: (type, detail) => this.logMeta(type, detail),\n })",
|
|
3726
|
-
"description": "The settings modal (`docs/code-health.md` §3). Reaches the two design-system\nrefs through callbacks, because the template writes them by name — see\n`SettingsModalDeps`."
|
|
3772
|
+
"description": "Focus the main chat input if the user is still engaged with the assistant.\nDeferred to the next frame so any conditional re-render (e.g. unhiding the\ninput row when an agent's `chatInputDuringExecution: 'hidden'` execution\nends) has committed before we call `.focus()`.\n\n`rapid-text-area` does not delegate focus to its inner native `<textarea>`,\nso we drill into its shadow root and focus the textarea directly."
|
|
3727
3773
|
},
|
|
3728
3774
|
{
|
|
3729
3775
|
"kind": "field",
|
|
3730
|
-
"name": "
|
|
3776
|
+
"name": "activeAgent",
|
|
3731
3777
|
"type": {
|
|
3732
|
-
"text": "
|
|
3778
|
+
"text": "Omit<AgentConfig, 'toolHandlers'> | undefined"
|
|
3733
3779
|
}
|
|
3734
3780
|
},
|
|
3735
3781
|
{
|
|
3736
3782
|
"kind": "field",
|
|
3737
|
-
"name": "
|
|
3783
|
+
"name": "suggestionsState",
|
|
3738
3784
|
"type": {
|
|
3739
|
-
"text": "
|
|
3785
|
+
"text": "SuggestionsState"
|
|
3740
3786
|
}
|
|
3741
3787
|
},
|
|
3742
3788
|
{
|
|
3743
3789
|
"kind": "field",
|
|
3744
|
-
"name": "
|
|
3790
|
+
"name": "showToolCalls",
|
|
3745
3791
|
"type": {
|
|
3746
|
-
"text": "
|
|
3792
|
+
"text": "boolean"
|
|
3747
3793
|
},
|
|
3748
|
-
"
|
|
3794
|
+
"description": "Current user-facing toggle state for tool call visibility."
|
|
3749
3795
|
},
|
|
3750
3796
|
{
|
|
3751
3797
|
"kind": "field",
|
|
3752
|
-
"name": "
|
|
3798
|
+
"name": "showThinkingSteps",
|
|
3753
3799
|
"type": {
|
|
3754
|
-
"text": "
|
|
3800
|
+
"text": "boolean"
|
|
3755
3801
|
},
|
|
3756
|
-
"
|
|
3802
|
+
"description": "Current user-facing toggle state for thinking step visibility."
|
|
3757
3803
|
},
|
|
3758
3804
|
{
|
|
3759
3805
|
"kind": "field",
|
|
3760
|
-
"name": "
|
|
3806
|
+
"name": "showNarration",
|
|
3761
3807
|
"type": {
|
|
3762
|
-
"text": "
|
|
3808
|
+
"text": "boolean"
|
|
3763
3809
|
},
|
|
3764
|
-
"description": "
|
|
3765
|
-
},
|
|
3766
|
-
{
|
|
3767
|
-
"kind": "field",
|
|
3768
|
-
"name": "imageSrc",
|
|
3769
|
-
"type": {
|
|
3770
|
-
"text": "string | undefined"
|
|
3771
|
-
}
|
|
3772
|
-
},
|
|
3773
|
-
{
|
|
3774
|
-
"kind": "field",
|
|
3775
|
-
"name": "userImageSrc",
|
|
3776
|
-
"type": {
|
|
3777
|
-
"text": "string | undefined"
|
|
3778
|
-
}
|
|
3810
|
+
"description": "Current user-facing toggle state for narration (interstitial prose) visibility."
|
|
3779
3811
|
},
|
|
3780
3812
|
{
|
|
3781
3813
|
"kind": "field",
|
|
3782
|
-
"name": "
|
|
3814
|
+
"name": "showAgentSwitchIndicator",
|
|
3783
3815
|
"type": {
|
|
3784
|
-
"text": "
|
|
3816
|
+
"text": "boolean"
|
|
3785
3817
|
},
|
|
3786
|
-
"description": "
|
|
3818
|
+
"description": "Current user-facing toggle state for agent switch indicator visibility."
|
|
3787
3819
|
},
|
|
3788
3820
|
{
|
|
3789
3821
|
"kind": "field",
|
|
3790
|
-
"name": "
|
|
3822
|
+
"name": "timestampDisplay",
|
|
3791
3823
|
"type": {
|
|
3792
|
-
"text": "
|
|
3824
|
+
"text": "TimestampDisplay"
|
|
3793
3825
|
},
|
|
3794
|
-
"
|
|
3795
|
-
"description": "Sanitized `assistantIcon`, or the default sparkle mark; bound into the template. @internal"
|
|
3796
|
-
},
|
|
3797
|
-
{
|
|
3798
|
-
"kind": "method",
|
|
3799
|
-
"name": "assistantIconChanged",
|
|
3800
|
-
"privacy": "protected",
|
|
3801
|
-
"return": {
|
|
3802
|
-
"type": {
|
|
3803
|
-
"text": "void"
|
|
3804
|
-
}
|
|
3805
|
-
}
|
|
3826
|
+
"description": "When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).\n\nFalls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no\nstore yet: this preference defaults ON, so the pre-store render must match the state\nthe baseline is about to resolve to, or timestamps would visibly pop in on connect."
|
|
3806
3827
|
},
|
|
3807
3828
|
{
|
|
3808
3829
|
"kind": "field",
|
|
3809
|
-
"name": "
|
|
3830
|
+
"name": "timestampClock",
|
|
3810
3831
|
"type": {
|
|
3811
|
-
"text": "
|
|
3832
|
+
"text": "number"
|
|
3812
3833
|
},
|
|
3813
|
-
"description": "
|
|
3834
|
+
"description": "Epoch ms the transcript's relative timestamps are measured against.\n\nA relative label is only correct at the instant it renders: FAST evaluates the\nbinding once, and an idle conversation never re-renders, so \"2 minutes ago\" would\nstill read \"2 minutes ago\" an hour later. Making the formatter read this observable\ninstead of `Date.now()` gives every row one shared, invalidatable clock — a tick\nre-evaluates them all."
|
|
3814
3835
|
},
|
|
3815
3836
|
{
|
|
3816
3837
|
"kind": "field",
|
|
3817
|
-
"name": "
|
|
3838
|
+
"name": "_timestampClockTimer",
|
|
3818
3839
|
"type": {
|
|
3819
|
-
"text": "
|
|
3840
|
+
"text": "ReturnType<typeof setInterval> | undefined"
|
|
3820
3841
|
},
|
|
3821
|
-
"
|
|
3822
|
-
"description": "
|
|
3842
|
+
"privacy": "private",
|
|
3843
|
+
"description": "Handle for the `TIMESTAMP_CLOCK_INTERVAL_MS` ticker; undefined while stopped."
|
|
3823
3844
|
},
|
|
3824
3845
|
{
|
|
3825
3846
|
"kind": "method",
|
|
3826
|
-
"name": "
|
|
3827
|
-
"privacy": "
|
|
3847
|
+
"name": "syncTimestampClock",
|
|
3848
|
+
"privacy": "private",
|
|
3828
3849
|
"return": {
|
|
3829
3850
|
"type": {
|
|
3830
3851
|
"text": "void"
|
|
3831
3852
|
}
|
|
3832
|
-
}
|
|
3833
|
-
},
|
|
3834
|
-
{
|
|
3835
|
-
"kind": "field",
|
|
3836
|
-
"name": "placeholder",
|
|
3837
|
-
"type": {
|
|
3838
|
-
"text": "string"
|
|
3839
|
-
},
|
|
3840
|
-
"default": "'Message assistant...'"
|
|
3841
|
-
},
|
|
3842
|
-
{
|
|
3843
|
-
"kind": "field",
|
|
3844
|
-
"name": "popoutMode",
|
|
3845
|
-
"type": {
|
|
3846
|
-
"text": "PopoutMode | undefined"
|
|
3847
|
-
},
|
|
3848
|
-
"description": "Controls the pop-out button shown next to the settings cog.\n\"expand\" — in bubble, expands to layout panel (fires chat-popout).\n\"collapse\" — in layout panel, collapses back to bubble (fires chat-popin).\nAbsent — no button (default standalone behaviour, no breaking change)."
|
|
3849
|
-
},
|
|
3850
|
-
{
|
|
3851
|
-
"kind": "field",
|
|
3852
|
-
"name": "agents",
|
|
3853
|
-
"type": {
|
|
3854
|
-
"text": "AgentConfig[] | undefined"
|
|
3855
3853
|
},
|
|
3856
|
-
"description": "
|
|
3854
|
+
"description": "Start or stop the timestamp clock to match the current mode and connection state.\n\nIdempotent, and safe to call from either lifecycle end — it is driven from\n`connectedCallback`, `disconnectedCallback` and the `timestampDisplay` setter, which\ncan fire in any order. Nothing runs while the mode is `'off'` (no binding reads the\nclock) or while disconnected (a timer outliving its element is a leak, and a\npopped-out view disconnects without the session ending)."
|
|
3857
3855
|
},
|
|
3858
3856
|
{
|
|
3859
3857
|
"kind": "field",
|
|
3860
|
-
"name": "
|
|
3858
|
+
"name": "enabledAnimations",
|
|
3861
3859
|
"type": {
|
|
3862
|
-
"text": "
|
|
3860
|
+
"text": "AiAssistantAnimation[]"
|
|
3863
3861
|
},
|
|
3864
|
-
"
|
|
3862
|
+
"description": "Currently enabled animations."
|
|
3865
3863
|
},
|
|
3866
3864
|
{
|
|
3867
3865
|
"kind": "field",
|
|
3868
|
-
"name": "
|
|
3866
|
+
"name": "agentPickerOpen",
|
|
3869
3867
|
"type": {
|
|
3870
|
-
"text": "
|
|
3868
|
+
"text": "boolean"
|
|
3871
3869
|
},
|
|
3872
|
-
"
|
|
3873
|
-
"description": "Optional session persistence (GENC-1351). Off by default — set `enabled`\nand a `provider` (e.g. a `WebStorageSessionProvider`) to have the assistant\nautosave on idle and auto-restore the conversation on page reload. Exposed\nas a top-level property (like `agents`/`providerRegistry`) rather than via\n`chatConfig`, since the provider type lives in this package while\n`ChatConfig` lives in `foundation-ai`."
|
|
3870
|
+
"description": "Whether the agent picker slide-out panel is open. Lives on the session\nstore so the bubble-dialog and popout-panel instances stay in sync."
|
|
3874
3871
|
},
|
|
3875
3872
|
{
|
|
3876
3873
|
"kind": "field",
|
|
3877
|
-
"name": "
|
|
3874
|
+
"name": "sessionMenuOpen",
|
|
3878
3875
|
"type": {
|
|
3879
|
-
"text": "
|
|
3876
|
+
"text": "boolean"
|
|
3880
3877
|
},
|
|
3881
|
-
"description": "
|
|
3878
|
+
"description": "Whether the lifecycle (session) menu slide-out panel is open. Like the\nagent picker, lives on the session store so bubble/popout stay in sync."
|
|
3882
3879
|
},
|
|
3883
3880
|
{
|
|
3884
3881
|
"kind": "field",
|
|
3885
|
-
"name": "
|
|
3882
|
+
"name": "compacting",
|
|
3886
3883
|
"type": {
|
|
3887
|
-
"text": "
|
|
3884
|
+
"text": "boolean"
|
|
3888
3885
|
},
|
|
3889
|
-
"description": "
|
|
3890
|
-
"readonly": true
|
|
3886
|
+
"description": "Whether a manual compaction is in flight (GENC-1351 §5.7). On the session\nstore (not element-local) so the \"Compacting…\" view + input-disable stay in\nsync across pop-in/out, like the panel flags."
|
|
3891
3887
|
},
|
|
3892
3888
|
{
|
|
3893
3889
|
"kind": "field",
|
|
3894
|
-
"name": "
|
|
3890
|
+
"name": "restoring",
|
|
3895
3891
|
"type": {
|
|
3896
3892
|
"text": "boolean"
|
|
3897
3893
|
},
|
|
3898
|
-
"description": "Whether
|
|
3899
|
-
"readonly": true
|
|
3900
|
-
},
|
|
3901
|
-
{
|
|
3902
|
-
"kind": "field",
|
|
3903
|
-
"name": "debugStateFactory",
|
|
3904
|
-
"type": {
|
|
3905
|
-
"text": "() => unknown | undefined"
|
|
3906
|
-
}
|
|
3894
|
+
"description": "Whether a page-reload restore is in flight (GENC-1351 §6). On the session\nstore (like `compacting`) so the \"Restoring…\" view + input-disable stay in\nsync across pop-in/out. Gating input while true prevents a mid-load send from\nbeing clobbered when the restored history loads."
|
|
3907
3895
|
},
|
|
3908
3896
|
{
|
|
3909
3897
|
"kind": "field",
|
|
3910
|
-
"name": "
|
|
3898
|
+
"name": "blocked",
|
|
3911
3899
|
"type": {
|
|
3912
3900
|
"text": "boolean"
|
|
3913
3901
|
},
|
|
3914
|
-
"
|
|
3915
|
-
"description": "When set, enables Redux DevTools for this instance's session store."
|
|
3902
|
+
"description": "Whether the assistant is blocked by a backend condition and cannot send —\ntoday, an exhausted AI-spend budget (GENC-1464). While true the composer is\ndisabled, `send`/`submitMessage` refuse, suggestions stop being fetched, and\na persistent banner (`part=\"blocked-banner\"`) sits above the composer\nexplaining why. The transcript stays visible and scrollable throughout —\nunlike `compacting` and `restoring`, this does not replace the conversation.\n\n**Latched.** Nothing in the element clears it: not a new turn, not \"Clear\"\n/ \"New chat\", not a pop-in/out. It stays set until the host writes\n`false` — because nothing the user can do inside the assistant refills a\nbudget. Hosts typically set it from their own pre-flight budget check on\nmount, and clear it once a later check shows headroom again. Such a host\nshould use `setBlocked(true, reason, { cause: 'budget' })`: a plain\n`blocked = true` is taken for a budget wall only while per-vendor budget\nwalls cover every vendor the assistant can reach (GENC-1611).\n\nThe driver also latches it automatically when a turn ends with the\n`'budget-exhausted'` failure reason — off the `tool-loop-end` activity bus\n(which also covers a sub-agent wall, a turn this element did not start, and\nan element swapped in mid-turn) and off the driver's return value (which\ncovers a wall hit during multi-agent classification, where no tool loop ran\nand so no bus event fires). So a host that does no pre-flight at all still\ngets a correct locked UI the moment the first 402 lands. The bus topic is\ntab-scoped, so a wall hit in a popped-out window latches the main window\ntoo — correct for a shared spend cap.\n\n**Lifetime — read this before relying on it as your source of truth.** The\nlatch is in-memory and per-`stateKey`:\n\n- It does **not** survive `switchSession`. Switching away tears the outgoing\n session's store down entirely, so switching back yields a fresh, unblocked\n store.\n- It does **not** survive a page reload. It is deliberately absent from the\n persisted session snapshot: the snapshot is long-lived, so a persisted\n latch would outlive an out-of-band budget raise with no in-element way to\n clear it — a stale lock is worse than re-deriving the state.\n\nThe durable source of truth is therefore the **host's pre-flight**, which\nshould run on mount and on every session switch. See\n`docs/migration-GENC-1464.md` §\"How to adopt\", Option B."
|
|
3916
3903
|
},
|
|
3917
3904
|
{
|
|
3918
3905
|
"kind": "field",
|
|
3919
|
-
"name": "
|
|
3906
|
+
"name": "reachableVendors",
|
|
3920
3907
|
"type": {
|
|
3921
|
-
"text": "
|
|
3908
|
+
"text": "readonly AIProviderType[]"
|
|
3922
3909
|
},
|
|
3923
|
-
"
|
|
3924
|
-
"
|
|
3910
|
+
"description": "The distinct vendors the registry can currently reach, from the provider\nstatuses this element already loads on connect and refreshes on every\nobservable-registry change — this element's answer to \"which vendor would the\nnext turn use\", a question that has no correct answer and deliberately gets\nno API. See `BudgetController.reachableVendors` for why reachability is\nthe answerable question and what deriving from it buys.",
|
|
3911
|
+
"readonly": true
|
|
3925
3912
|
},
|
|
3926
3913
|
{
|
|
3927
3914
|
"kind": "field",
|
|
3928
|
-
"name": "
|
|
3915
|
+
"name": "blockedVendors",
|
|
3929
3916
|
"type": {
|
|
3930
|
-
"text": "
|
|
3917
|
+
"text": "readonly AIProviderType[]"
|
|
3931
3918
|
},
|
|
3932
|
-
"
|
|
3933
|
-
"
|
|
3934
|
-
},
|
|
3935
|
-
{
|
|
3936
|
-
"kind": "field",
|
|
3937
|
-
"name": "messages",
|
|
3938
|
-
"type": {
|
|
3939
|
-
"text": "ChatMessage[]"
|
|
3940
|
-
}
|
|
3941
|
-
},
|
|
3942
|
-
{
|
|
3943
|
-
"kind": "field",
|
|
3944
|
-
"name": "state",
|
|
3945
|
-
"type": {
|
|
3946
|
-
"text": "AiAssistantState"
|
|
3947
|
-
}
|
|
3919
|
+
"description": "Vendors currently walled by the AI-spend budget, in the order they were\nwalled. Empty for a host that never adopts the per-vendor API.\n\nMay include a vendor this registry cannot reach — either because the registry\nmoved on after the wall was latched, or because a 402's\n`otherVendorAvailable: false` walls every vendor the proxy meters. Neither\ncosts anything internally — FoundationAiAssistant.blocked asks only\nabout the reachable set, and the banner reads the reachability-filtered\n`BudgetController.relevantBlockedVendors` — but a host rendering this\nlist itself should filter it against its own registry.\n\nRead-only on purpose: a settable array would let a host write a partial list\nand silently orphan the per-vendor banner copy.\nFoundationAiAssistant.setVendorBlocked is the write path.",
|
|
3920
|
+
"readonly": true
|
|
3948
3921
|
},
|
|
3949
3922
|
{
|
|
3950
3923
|
"kind": "method",
|
|
3951
|
-
"name": "
|
|
3952
|
-
"privacy": "private",
|
|
3924
|
+
"name": "isVendorBlocked",
|
|
3953
3925
|
"return": {
|
|
3954
3926
|
"type": {
|
|
3955
3927
|
"text": "boolean"
|
|
@@ -3957,288 +3929,52 @@
|
|
|
3957
3929
|
},
|
|
3958
3930
|
"parameters": [
|
|
3959
3931
|
{
|
|
3960
|
-
"name": "
|
|
3961
|
-
"optional": true,
|
|
3932
|
+
"name": "vendor",
|
|
3962
3933
|
"type": {
|
|
3963
|
-
"text": "
|
|
3934
|
+
"text": "AIProviderType"
|
|
3964
3935
|
}
|
|
3965
3936
|
}
|
|
3966
3937
|
],
|
|
3967
|
-
"description": "Whether
|
|
3938
|
+
"description": "Whether this specific vendor's budget is walled — regardless of whether any\nother vendor still has headroom."
|
|
3968
3939
|
},
|
|
3969
3940
|
{
|
|
3970
3941
|
"kind": "method",
|
|
3971
|
-
"name": "
|
|
3972
|
-
"privacy": "private",
|
|
3942
|
+
"name": "setVendorBlocked",
|
|
3973
3943
|
"return": {
|
|
3974
3944
|
"type": {
|
|
3975
3945
|
"text": "void"
|
|
3976
3946
|
}
|
|
3977
3947
|
},
|
|
3978
|
-
"
|
|
3948
|
+
"parameters": [
|
|
3949
|
+
{
|
|
3950
|
+
"name": "vendor",
|
|
3951
|
+
"type": {
|
|
3952
|
+
"text": "AIProviderType"
|
|
3953
|
+
}
|
|
3954
|
+
},
|
|
3955
|
+
{
|
|
3956
|
+
"name": "blocked",
|
|
3957
|
+
"type": {
|
|
3958
|
+
"text": "boolean"
|
|
3959
|
+
}
|
|
3960
|
+
},
|
|
3961
|
+
{
|
|
3962
|
+
"name": "reason",
|
|
3963
|
+
"optional": true,
|
|
3964
|
+
"type": {
|
|
3965
|
+
"text": "string | null"
|
|
3966
|
+
}
|
|
3967
|
+
}
|
|
3968
|
+
],
|
|
3969
|
+
"description": "Wall (or release) one vendor's budget, optionally with banner copy for it.\nThe per-vendor mirror of FoundationAiAssistant.setBlocked.\n\nWalling a vendor does **not** on its own disable the composer: while another\nreachable vendor has headroom the assistant stays usable and the banner tells\nthe user to switch. Only when every reachable vendor is walled does `blocked`\nbecome true.\n\n`reason` is composed into the banner sentence for that vendor, **however many\nvendors are walled** — see `BudgetController.effectiveBlockedReason`.\nIt is per-vendor copy, not a whole-banner override;\nFoundationAiAssistant.blockedReason is the override. Omitting it keeps\nwhatever explanation that vendor already carried, so a driver latch landing\nafter a host one cannot blank it.\n\n`'none'` is rejected with a warning rather than accepted — it is the \"no\nprovider configured\" sentinel, not a vendor, and a wall on it could never be\nundone by derivation. Use FoundationAiAssistant.setBlocked for a\nvendor-agnostic block."
|
|
3979
3970
|
},
|
|
3980
3971
|
{
|
|
3981
|
-
"kind": "
|
|
3982
|
-
"name": "
|
|
3983
|
-
"
|
|
3984
|
-
"
|
|
3985
|
-
|
|
3986
|
-
|
|
3987
|
-
"readonly": true
|
|
3988
|
-
},
|
|
3989
|
-
{
|
|
3990
|
-
"kind": "field",
|
|
3991
|
-
"name": "sendBlocked",
|
|
3992
|
-
"type": {
|
|
3993
|
-
"text": "boolean"
|
|
3994
|
-
},
|
|
3995
|
-
"privacy": "private",
|
|
3996
|
-
"description": "True when a new send must be refused: a turn is running (`busy`), a page-reload\nrestore is loading history that would clobber it (`restoring`), a manual\ncompaction is rewriting history (`compacting`), or a backend condition has\nlocked the assistant outright (`blocked` — e.g. an exhausted AI budget).\nMirrors the composer's `?disabled` gate so a **programmatic**\n`send`/`submitMessage` (e.g. a host's custom input while the built-in composer\nis hidden) can't slip past it and have its message wiped when the\nrestored/compacted history lands (GENC-1351 §6).",
|
|
3997
|
-
"readonly": true
|
|
3998
|
-
},
|
|
3999
|
-
{
|
|
4000
|
-
"kind": "method",
|
|
4001
|
-
"name": "sendRefusalReason",
|
|
4002
|
-
"privacy": "private",
|
|
4003
|
-
"return": {
|
|
4004
|
-
"type": {
|
|
4005
|
-
"text": "string"
|
|
4006
|
-
}
|
|
4007
|
-
},
|
|
4008
|
-
"description": "Why a programmatic send was refused, for `submitMessage`'s `errors`. A\nbackend block is called out distinctly because — unlike the transient\n\"busy\" cases — waiting and retrying will never clear it, and a caller\nlooping on \"Assistant is busy\" would spin forever."
|
|
4009
|
-
},
|
|
4010
|
-
{
|
|
4011
|
-
"kind": "method",
|
|
4012
|
-
"name": "applyDeferredAgentsSwap",
|
|
4013
|
-
"privacy": "private",
|
|
4014
|
-
"return": {
|
|
4015
|
-
"type": {
|
|
4016
|
-
"text": "void"
|
|
4017
|
-
}
|
|
4018
|
-
},
|
|
4019
|
-
"description": "Re-runs `agentsChanged` if the live `agents` array no longer matches the\nfingerprint of the currently installed driver. Used to apply swaps that\nlanded during a turn (and were skipped by the `isBusy()` guard) once the\ndriver returns to idle."
|
|
4020
|
-
},
|
|
4021
|
-
{
|
|
4022
|
-
"kind": "method",
|
|
4023
|
-
"name": "applyDeferredSessionSwitch",
|
|
4024
|
-
"privacy": "private",
|
|
4025
|
-
"return": {
|
|
4026
|
-
"type": {
|
|
4027
|
-
"text": "void"
|
|
4028
|
-
}
|
|
4029
|
-
},
|
|
4030
|
-
"description": "Apply a `session-key` re-key that arrived mid-turn and was deferred by\n`switchSession`'s busy guard (GENC-1351 §5.12). Run at each point the driver\nreturns to idle, BEFORE `applyDeferredAgentsSwap` — a switch rebuilds the\ndriver against the current agents, so a pending agents-swap then no-ops."
|
|
4031
|
-
},
|
|
4032
|
-
{
|
|
4033
|
-
"kind": "method",
|
|
4034
|
-
"name": "maybeAutoFocusChatInput",
|
|
4035
|
-
"privacy": "private",
|
|
4036
|
-
"description": "Focus the main chat input if the user is still engaged with the assistant.\nDeferred to the next frame so any conditional re-render (e.g. unhiding the\ninput row when an agent's `chatInputDuringExecution: 'hidden'` execution\nends) has committed before we call `.focus()`.\n\n`rapid-text-area` does not delegate focus to its inner native `<textarea>`,\nso we drill into its shadow root and focus the textarea directly."
|
|
4037
|
-
},
|
|
4038
|
-
{
|
|
4039
|
-
"kind": "field",
|
|
4040
|
-
"name": "activeAgent",
|
|
4041
|
-
"type": {
|
|
4042
|
-
"text": "Omit<AgentConfig, 'toolHandlers'> | undefined"
|
|
4043
|
-
}
|
|
4044
|
-
},
|
|
4045
|
-
{
|
|
4046
|
-
"kind": "field",
|
|
4047
|
-
"name": "suggestionsState",
|
|
4048
|
-
"type": {
|
|
4049
|
-
"text": "SuggestionsState"
|
|
4050
|
-
}
|
|
4051
|
-
},
|
|
4052
|
-
{
|
|
4053
|
-
"kind": "field",
|
|
4054
|
-
"name": "showToolCalls",
|
|
4055
|
-
"type": {
|
|
4056
|
-
"text": "boolean"
|
|
4057
|
-
},
|
|
4058
|
-
"description": "Current user-facing toggle state for tool call visibility."
|
|
4059
|
-
},
|
|
4060
|
-
{
|
|
4061
|
-
"kind": "field",
|
|
4062
|
-
"name": "showThinkingSteps",
|
|
4063
|
-
"type": {
|
|
4064
|
-
"text": "boolean"
|
|
4065
|
-
},
|
|
4066
|
-
"description": "Current user-facing toggle state for thinking step visibility."
|
|
4067
|
-
},
|
|
4068
|
-
{
|
|
4069
|
-
"kind": "field",
|
|
4070
|
-
"name": "showNarration",
|
|
4071
|
-
"type": {
|
|
4072
|
-
"text": "boolean"
|
|
4073
|
-
},
|
|
4074
|
-
"description": "Current user-facing toggle state for narration (interstitial prose) visibility."
|
|
4075
|
-
},
|
|
4076
|
-
{
|
|
4077
|
-
"kind": "field",
|
|
4078
|
-
"name": "showAgentSwitchIndicator",
|
|
4079
|
-
"type": {
|
|
4080
|
-
"text": "boolean"
|
|
4081
|
-
},
|
|
4082
|
-
"description": "Current user-facing toggle state for agent switch indicator visibility."
|
|
4083
|
-
},
|
|
4084
|
-
{
|
|
4085
|
-
"kind": "field",
|
|
4086
|
-
"name": "timestampDisplay",
|
|
4087
|
-
"type": {
|
|
4088
|
-
"text": "TimestampDisplay"
|
|
4089
|
-
},
|
|
4090
|
-
"description": "When each message shows its timestamp — `'off'`, `'hover'` or `'always'` (default).\n\nFalls back to `DEFAULT_TIMESTAMP_DISPLAY` rather than `'off'` when there is no\nstore yet: this preference defaults ON, so the pre-store render must match the state\nthe baseline is about to resolve to, or timestamps would visibly pop in on connect."
|
|
4091
|
-
},
|
|
4092
|
-
{
|
|
4093
|
-
"kind": "field",
|
|
4094
|
-
"name": "timestampClock",
|
|
4095
|
-
"type": {
|
|
4096
|
-
"text": "number"
|
|
4097
|
-
},
|
|
4098
|
-
"description": "Epoch ms the transcript's relative timestamps are measured against.\n\nA relative label is only correct at the instant it renders: FAST evaluates the\nbinding once, and an idle conversation never re-renders, so \"2 minutes ago\" would\nstill read \"2 minutes ago\" an hour later. Making the formatter read this observable\ninstead of `Date.now()` gives every row one shared, invalidatable clock — a tick\nre-evaluates them all."
|
|
4099
|
-
},
|
|
4100
|
-
{
|
|
4101
|
-
"kind": "field",
|
|
4102
|
-
"name": "_timestampClockTimer",
|
|
4103
|
-
"type": {
|
|
4104
|
-
"text": "ReturnType<typeof setInterval> | undefined"
|
|
4105
|
-
},
|
|
4106
|
-
"privacy": "private",
|
|
4107
|
-
"description": "Handle for the `TIMESTAMP_CLOCK_INTERVAL_MS` ticker; undefined while stopped."
|
|
4108
|
-
},
|
|
4109
|
-
{
|
|
4110
|
-
"kind": "method",
|
|
4111
|
-
"name": "syncTimestampClock",
|
|
4112
|
-
"privacy": "private",
|
|
4113
|
-
"return": {
|
|
4114
|
-
"type": {
|
|
4115
|
-
"text": "void"
|
|
4116
|
-
}
|
|
4117
|
-
},
|
|
4118
|
-
"description": "Start or stop the timestamp clock to match the current mode and connection state.\n\nIdempotent, and safe to call from either lifecycle end — it is driven from\n`connectedCallback`, `disconnectedCallback` and the `timestampDisplay` setter, which\ncan fire in any order. Nothing runs while the mode is `'off'` (no binding reads the\nclock) or while disconnected (a timer outliving its element is a leak, and a\npopped-out view disconnects without the session ending)."
|
|
4119
|
-
},
|
|
4120
|
-
{
|
|
4121
|
-
"kind": "field",
|
|
4122
|
-
"name": "enabledAnimations",
|
|
4123
|
-
"type": {
|
|
4124
|
-
"text": "AiAssistantAnimation[]"
|
|
4125
|
-
},
|
|
4126
|
-
"description": "Currently enabled animations."
|
|
4127
|
-
},
|
|
4128
|
-
{
|
|
4129
|
-
"kind": "field",
|
|
4130
|
-
"name": "agentPickerOpen",
|
|
4131
|
-
"type": {
|
|
4132
|
-
"text": "boolean"
|
|
4133
|
-
},
|
|
4134
|
-
"description": "Whether the agent picker slide-out panel is open. Lives on the session\nstore so the bubble-dialog and popout-panel instances stay in sync."
|
|
4135
|
-
},
|
|
4136
|
-
{
|
|
4137
|
-
"kind": "field",
|
|
4138
|
-
"name": "sessionMenuOpen",
|
|
4139
|
-
"type": {
|
|
4140
|
-
"text": "boolean"
|
|
4141
|
-
},
|
|
4142
|
-
"description": "Whether the lifecycle (session) menu slide-out panel is open. Like the\nagent picker, lives on the session store so bubble/popout stay in sync."
|
|
4143
|
-
},
|
|
4144
|
-
{
|
|
4145
|
-
"kind": "field",
|
|
4146
|
-
"name": "compacting",
|
|
4147
|
-
"type": {
|
|
4148
|
-
"text": "boolean"
|
|
4149
|
-
},
|
|
4150
|
-
"description": "Whether a manual compaction is in flight (GENC-1351 §5.7). On the session\nstore (not element-local) so the \"Compacting…\" view + input-disable stay in\nsync across pop-in/out, like the panel flags."
|
|
4151
|
-
},
|
|
4152
|
-
{
|
|
4153
|
-
"kind": "field",
|
|
4154
|
-
"name": "restoring",
|
|
4155
|
-
"type": {
|
|
4156
|
-
"text": "boolean"
|
|
4157
|
-
},
|
|
4158
|
-
"description": "Whether a page-reload restore is in flight (GENC-1351 §6). On the session\nstore (like `compacting`) so the \"Restoring…\" view + input-disable stay in\nsync across pop-in/out. Gating input while true prevents a mid-load send from\nbeing clobbered when the restored history loads."
|
|
4159
|
-
},
|
|
4160
|
-
{
|
|
4161
|
-
"kind": "field",
|
|
4162
|
-
"name": "blocked",
|
|
4163
|
-
"type": {
|
|
4164
|
-
"text": "boolean"
|
|
4165
|
-
},
|
|
4166
|
-
"description": "Whether the assistant is blocked by a backend condition and cannot send —\ntoday, an exhausted AI-spend budget (GENC-1464). While true the composer is\ndisabled, `send`/`submitMessage` refuse, suggestions stop being fetched, and\na persistent banner (`part=\"blocked-banner\"`) sits above the composer\nexplaining why. The transcript stays visible and scrollable throughout —\nunlike `compacting` and `restoring`, this does not replace the conversation.\n\n**Latched.** Nothing in the element clears it: not a new turn, not \"Clear\"\n/ \"New chat\", not a pop-in/out. It stays set until the host writes\n`false` — because nothing the user can do inside the assistant refills a\nbudget. Hosts typically set it from their own pre-flight budget check on\nmount, and clear it once a later check shows headroom again. Such a host\nshould use `setBlocked(true, reason, { cause: 'budget' })`: a plain\n`blocked = true` is taken for a budget wall only while per-vendor budget\nwalls cover every vendor the assistant can reach (GENC-1611).\n\nThe driver also latches it automatically when a turn ends with the\n`'budget-exhausted'` failure reason — off the `tool-loop-end` activity bus\n(which also covers a sub-agent wall, a turn this element did not start, and\nan element swapped in mid-turn) and off the driver's return value (which\ncovers a wall hit during multi-agent classification, where no tool loop ran\nand so no bus event fires). So a host that does no pre-flight at all still\ngets a correct locked UI the moment the first 402 lands. The bus topic is\ntab-scoped, so a wall hit in a popped-out window latches the main window\ntoo — correct for a shared spend cap.\n\n**Lifetime — read this before relying on it as your source of truth.** The\nlatch is in-memory and per-`stateKey`:\n\n- It does **not** survive `switchSession`. Switching away tears the outgoing\n session's store down entirely, so switching back yields a fresh, unblocked\n store.\n- It does **not** survive a page reload. It is deliberately absent from the\n persisted session snapshot: the snapshot is long-lived, so a persisted\n latch would outlive an out-of-band budget raise with no in-element way to\n clear it — a stale lock is worse than re-deriving the state.\n\nThe durable source of truth is therefore the **host's pre-flight**, which\nshould run on mount and on every session switch. See\n`docs/migration-GENC-1464.md` §\"How to adopt\", Option B."
|
|
4167
|
-
},
|
|
4168
|
-
{
|
|
4169
|
-
"kind": "field",
|
|
4170
|
-
"name": "reachableVendors",
|
|
4171
|
-
"type": {
|
|
4172
|
-
"text": "readonly AIProviderType[]"
|
|
4173
|
-
},
|
|
4174
|
-
"description": "The distinct vendors the registry can currently reach, from the provider\nstatuses this element already loads on connect and refreshes on every\nobservable-registry change — this element's answer to \"which vendor would the\nnext turn use\", a question that has no correct answer and deliberately gets\nno API. See `BudgetController.reachableVendors` for why reachability is\nthe answerable question and what deriving from it buys.",
|
|
4175
|
-
"readonly": true
|
|
4176
|
-
},
|
|
4177
|
-
{
|
|
4178
|
-
"kind": "field",
|
|
4179
|
-
"name": "blockedVendors",
|
|
4180
|
-
"type": {
|
|
4181
|
-
"text": "readonly AIProviderType[]"
|
|
4182
|
-
},
|
|
4183
|
-
"description": "Vendors currently walled by the AI-spend budget, in the order they were\nwalled. Empty for a host that never adopts the per-vendor API.\n\nMay include a vendor this registry cannot reach — either because the registry\nmoved on after the wall was latched, or because a 402's\n`otherVendorAvailable: false` walls every vendor the proxy meters. Neither\ncosts anything internally — FoundationAiAssistant.blocked asks only\nabout the reachable set, and the banner reads the reachability-filtered\n`BudgetController.relevantBlockedVendors` — but a host rendering this\nlist itself should filter it against its own registry.\n\nRead-only on purpose: a settable array would let a host write a partial list\nand silently orphan the per-vendor banner copy.\nFoundationAiAssistant.setVendorBlocked is the write path.",
|
|
4184
|
-
"readonly": true
|
|
4185
|
-
},
|
|
4186
|
-
{
|
|
4187
|
-
"kind": "method",
|
|
4188
|
-
"name": "isVendorBlocked",
|
|
4189
|
-
"return": {
|
|
4190
|
-
"type": {
|
|
4191
|
-
"text": "boolean"
|
|
4192
|
-
}
|
|
4193
|
-
},
|
|
4194
|
-
"parameters": [
|
|
4195
|
-
{
|
|
4196
|
-
"name": "vendor",
|
|
4197
|
-
"type": {
|
|
4198
|
-
"text": "AIProviderType"
|
|
4199
|
-
}
|
|
4200
|
-
}
|
|
4201
|
-
],
|
|
4202
|
-
"description": "Whether this specific vendor's budget is walled — regardless of whether any\nother vendor still has headroom."
|
|
4203
|
-
},
|
|
4204
|
-
{
|
|
4205
|
-
"kind": "method",
|
|
4206
|
-
"name": "setVendorBlocked",
|
|
4207
|
-
"return": {
|
|
4208
|
-
"type": {
|
|
4209
|
-
"text": "void"
|
|
4210
|
-
}
|
|
4211
|
-
},
|
|
4212
|
-
"parameters": [
|
|
4213
|
-
{
|
|
4214
|
-
"name": "vendor",
|
|
4215
|
-
"type": {
|
|
4216
|
-
"text": "AIProviderType"
|
|
4217
|
-
}
|
|
4218
|
-
},
|
|
4219
|
-
{
|
|
4220
|
-
"name": "blocked",
|
|
4221
|
-
"type": {
|
|
4222
|
-
"text": "boolean"
|
|
4223
|
-
}
|
|
4224
|
-
},
|
|
4225
|
-
{
|
|
4226
|
-
"name": "reason",
|
|
4227
|
-
"optional": true,
|
|
4228
|
-
"type": {
|
|
4229
|
-
"text": "string | null"
|
|
4230
|
-
}
|
|
4231
|
-
}
|
|
4232
|
-
],
|
|
4233
|
-
"description": "Wall (or release) one vendor's budget, optionally with banner copy for it.\nThe per-vendor mirror of FoundationAiAssistant.setBlocked.\n\nWalling a vendor does **not** on its own disable the composer: while another\nreachable vendor has headroom the assistant stays usable and the banner tells\nthe user to switch. Only when every reachable vendor is walled does `blocked`\nbecome true.\n\n`reason` is composed into the banner sentence for that vendor, **however many\nvendors are walled** — see `BudgetController.effectiveBlockedReason`.\nIt is per-vendor copy, not a whole-banner override;\nFoundationAiAssistant.blockedReason is the override. Omitting it keeps\nwhatever explanation that vendor already carried, so a driver latch landing\nafter a host one cannot blank it.\n\n`'none'` is rejected with a warning rather than accepted — it is the \"no\nprovider configured\" sentinel, not a vendor, and a wall on it could never be\nundone by derivation. Use FoundationAiAssistant.setBlocked for a\nvendor-agnostic block."
|
|
4234
|
-
},
|
|
4235
|
-
{
|
|
4236
|
-
"kind": "method",
|
|
4237
|
-
"name": "setVendorBudget",
|
|
4238
|
-
"return": {
|
|
4239
|
-
"type": {
|
|
4240
|
-
"text": "boolean"
|
|
4241
|
-
}
|
|
3972
|
+
"kind": "method",
|
|
3973
|
+
"name": "setVendorBudget",
|
|
3974
|
+
"return": {
|
|
3975
|
+
"type": {
|
|
3976
|
+
"text": "boolean"
|
|
3977
|
+
}
|
|
4242
3978
|
},
|
|
4243
3979
|
"parameters": [
|
|
4244
3980
|
{
|
|
@@ -6652,164 +6388,644 @@
|
|
|
6652
6388
|
"description": "Re-activate a restored flow owner (GENC-1662), so a stateful agent's `init({ restored })` — and\nanything the host hangs off it, like a progress stepper — runs straight after the reload\ninstead of on the next message."
|
|
6653
6389
|
},
|
|
6654
6390
|
{
|
|
6655
|
-
"kind": "method",
|
|
6656
|
-
"name": "resumeInterruptedTurn",
|
|
6657
|
-
"privacy": "private",
|
|
6658
|
-
"return": {
|
|
6659
|
-
"type": {
|
|
6660
|
-
"text": "Promise<void>"
|
|
6661
|
-
}
|
|
6391
|
+
"kind": "method",
|
|
6392
|
+
"name": "resumeInterruptedTurn",
|
|
6393
|
+
"privacy": "private",
|
|
6394
|
+
"return": {
|
|
6395
|
+
"type": {
|
|
6396
|
+
"text": "Promise<void>"
|
|
6397
|
+
}
|
|
6398
|
+
},
|
|
6399
|
+
"parameters": [
|
|
6400
|
+
{
|
|
6401
|
+
"name": "key",
|
|
6402
|
+
"type": {
|
|
6403
|
+
"text": "string"
|
|
6404
|
+
}
|
|
6405
|
+
},
|
|
6406
|
+
{
|
|
6407
|
+
"name": "driver",
|
|
6408
|
+
"type": {
|
|
6409
|
+
"text": "AiDriver | undefined"
|
|
6410
|
+
}
|
|
6411
|
+
},
|
|
6412
|
+
{
|
|
6413
|
+
"name": "ref",
|
|
6414
|
+
"type": {
|
|
6415
|
+
"text": "SessionStoreReturn | undefined"
|
|
6416
|
+
}
|
|
6417
|
+
},
|
|
6418
|
+
{
|
|
6419
|
+
"name": "outcome",
|
|
6420
|
+
"type": {
|
|
6421
|
+
"text": "RestoreOutcome"
|
|
6422
|
+
}
|
|
6423
|
+
}
|
|
6424
|
+
],
|
|
6425
|
+
"description": "Run the turn a reload interrupted (GENC-1662), shown as busy exactly as a send is — or, when it\ncannot run, withdraw the resume the restore divider promised."
|
|
6426
|
+
},
|
|
6427
|
+
{
|
|
6428
|
+
"kind": "method",
|
|
6429
|
+
"name": "triggerFileInput",
|
|
6430
|
+
"return": {
|
|
6431
|
+
"type": {
|
|
6432
|
+
"text": "void"
|
|
6433
|
+
}
|
|
6434
|
+
}
|
|
6435
|
+
},
|
|
6436
|
+
{
|
|
6437
|
+
"kind": "method",
|
|
6438
|
+
"name": "handleFileSelect",
|
|
6439
|
+
"return": {
|
|
6440
|
+
"type": {
|
|
6441
|
+
"text": "void"
|
|
6442
|
+
}
|
|
6443
|
+
},
|
|
6444
|
+
"parameters": [
|
|
6445
|
+
{
|
|
6446
|
+
"name": "e",
|
|
6447
|
+
"type": {
|
|
6448
|
+
"text": "Event"
|
|
6449
|
+
}
|
|
6450
|
+
}
|
|
6451
|
+
]
|
|
6452
|
+
},
|
|
6453
|
+
{
|
|
6454
|
+
"kind": "method",
|
|
6455
|
+
"name": "removeAttachment",
|
|
6456
|
+
"return": {
|
|
6457
|
+
"type": {
|
|
6458
|
+
"text": "void"
|
|
6459
|
+
}
|
|
6460
|
+
},
|
|
6461
|
+
"parameters": [
|
|
6462
|
+
{
|
|
6463
|
+
"name": "attachment",
|
|
6464
|
+
"type": {
|
|
6465
|
+
"text": "ChatAttachment"
|
|
6466
|
+
}
|
|
6467
|
+
}
|
|
6468
|
+
]
|
|
6469
|
+
},
|
|
6470
|
+
{
|
|
6471
|
+
"kind": "method",
|
|
6472
|
+
"name": "removeAttachmentError",
|
|
6473
|
+
"return": {
|
|
6474
|
+
"type": {
|
|
6475
|
+
"text": "void"
|
|
6476
|
+
}
|
|
6477
|
+
},
|
|
6478
|
+
"parameters": [
|
|
6479
|
+
{
|
|
6480
|
+
"name": "message",
|
|
6481
|
+
"type": {
|
|
6482
|
+
"text": "string"
|
|
6483
|
+
}
|
|
6484
|
+
}
|
|
6485
|
+
]
|
|
6486
|
+
},
|
|
6487
|
+
{
|
|
6488
|
+
"kind": "method",
|
|
6489
|
+
"name": "handleSendClick"
|
|
6490
|
+
},
|
|
6491
|
+
{
|
|
6492
|
+
"kind": "method",
|
|
6493
|
+
"name": "handleStopClick",
|
|
6494
|
+
"description": "User clicked Stop. Cancels the current turn via the driver and flips the\nbutton to \"Stopping…\" until the turn winds down (a tool mid-execution\nfinishes first). Guarded so a second click is a no-op."
|
|
6495
|
+
},
|
|
6496
|
+
{
|
|
6497
|
+
"kind": "method",
|
|
6498
|
+
"name": "handleSuggestionClick",
|
|
6499
|
+
"parameters": [
|
|
6500
|
+
{
|
|
6501
|
+
"name": "suggestion",
|
|
6502
|
+
"type": {
|
|
6503
|
+
"text": "string"
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
]
|
|
6507
|
+
},
|
|
6508
|
+
{
|
|
6509
|
+
"kind": "method",
|
|
6510
|
+
"name": "submitMessage",
|
|
6511
|
+
"return": {
|
|
6512
|
+
"type": {
|
|
6513
|
+
"text": "Promise<SubmitMessageResult>"
|
|
6514
|
+
}
|
|
6515
|
+
},
|
|
6516
|
+
"parameters": [
|
|
6517
|
+
{
|
|
6518
|
+
"name": "input",
|
|
6519
|
+
"type": {
|
|
6520
|
+
"text": "{ text?: string; files?: File[] }"
|
|
6521
|
+
}
|
|
6522
|
+
}
|
|
6523
|
+
],
|
|
6524
|
+
"description": "Programmatically submit a message. Equivalent to the user typing into the\nbuilt-in composer and pressing send, but callable from external code — most\ncommonly a custom input rendered inside `slot=\"splash\"` when paired with\n`chatConfig.ui.hideComposer`.\n\nThe input fully describes the turn: `text` and `files` REPLACE any current\ncomposer state (they are not appended to it). Files are validated against\n`chatConfig.ui.acceptedFiles` using the same pipeline as the composer's\nattach button.\n\nAtomic on validation: if any file fails validation, no attachments are\ncommitted and no send is dispatched. Failure messages are returned in\n`errors` AND appended to the `attachmentErrors` observable so the built-in\nchip UI still surfaces them when visible.\n\nResolves once the underlying send has been kicked off — it does NOT await\nthe assistant's response."
|
|
6525
|
+
},
|
|
6526
|
+
{
|
|
6527
|
+
"kind": "method",
|
|
6528
|
+
"name": "fetchSuggestions",
|
|
6529
|
+
"privacy": "private"
|
|
6530
|
+
},
|
|
6531
|
+
{
|
|
6532
|
+
"kind": "field",
|
|
6533
|
+
"name": "_pendingSendPrompt",
|
|
6534
|
+
"type": {
|
|
6535
|
+
"text": "string | undefined"
|
|
6536
|
+
},
|
|
6537
|
+
"privacy": "private",
|
|
6538
|
+
"description": "User text of the message currently being sent, stashed for the lifetime of `send()`.\n`flow-owner-changed` fires while the driver routes this turn — before the message is\nappended to raw history — so the flow-activation-prompt capture reads this rather than\na stale raw-history lookup. Cleared once the send settles. (GENC-1351 §5.9)"
|
|
6539
|
+
},
|
|
6540
|
+
{
|
|
6541
|
+
"kind": "method",
|
|
6542
|
+
"name": "send",
|
|
6543
|
+
"privacy": "private"
|
|
6544
|
+
},
|
|
6545
|
+
{
|
|
6546
|
+
"kind": "method",
|
|
6547
|
+
"name": "settleAfterTurn",
|
|
6548
|
+
"privacy": "private",
|
|
6549
|
+
"return": {
|
|
6550
|
+
"type": {
|
|
6551
|
+
"text": "void"
|
|
6552
|
+
}
|
|
6553
|
+
},
|
|
6554
|
+
"parameters": [
|
|
6555
|
+
{
|
|
6556
|
+
"name": "capturedSessionRef",
|
|
6557
|
+
"type": {
|
|
6558
|
+
"text": "SessionStoreReturn | null | undefined"
|
|
6559
|
+
}
|
|
6560
|
+
}
|
|
6561
|
+
],
|
|
6562
|
+
"description": "The post-turn settle shared by `send()` and a resumed restore turn: back to idle through\nthe session ref captured at turn start, then the cleanup the state setter would have done."
|
|
6563
|
+
},
|
|
6564
|
+
{
|
|
6565
|
+
"kind": "method",
|
|
6566
|
+
"name": "onChatHeaderMouseDown",
|
|
6567
|
+
"parameters": [
|
|
6568
|
+
{
|
|
6569
|
+
"name": "e",
|
|
6570
|
+
"type": {
|
|
6571
|
+
"text": "MouseEvent"
|
|
6572
|
+
}
|
|
6573
|
+
}
|
|
6574
|
+
]
|
|
6575
|
+
},
|
|
6576
|
+
{
|
|
6577
|
+
"kind": "method",
|
|
6578
|
+
"name": "handleInteractionCompleted",
|
|
6579
|
+
"parameters": [
|
|
6580
|
+
{
|
|
6581
|
+
"name": "e",
|
|
6582
|
+
"type": {
|
|
6583
|
+
"text": "Event"
|
|
6584
|
+
}
|
|
6585
|
+
}
|
|
6586
|
+
]
|
|
6587
|
+
},
|
|
6588
|
+
{
|
|
6589
|
+
"kind": "method",
|
|
6590
|
+
"name": "handleInteractionCost",
|
|
6591
|
+
"parameters": [
|
|
6592
|
+
{
|
|
6593
|
+
"name": "e",
|
|
6594
|
+
"type": {
|
|
6595
|
+
"text": "Event"
|
|
6596
|
+
}
|
|
6597
|
+
}
|
|
6598
|
+
],
|
|
6599
|
+
"description": "A widget reporting spend it incurred AFTER resolving.\n\nNote what this deliberately does NOT do: no `startLoadingTimer()`. This is bookkeeping about a\nturn that already finished, so it must be invisible — showing a spinner would tell the user the\nassistant is working when nothing is pending."
|
|
6600
|
+
},
|
|
6601
|
+
{
|
|
6602
|
+
"kind": "field",
|
|
6603
|
+
"name": "stopButtonVisible",
|
|
6604
|
+
"type": {
|
|
6605
|
+
"text": "boolean"
|
|
6606
|
+
},
|
|
6607
|
+
"description": "Whether the Stop control is showing.\n\nWhile a turn runs Stop REPLACES Send rather than sitting beside it: the two\nare mutually exclusive actions, and a disabled Send next to a live Stop just\ngives the eye a dead control to skip past. Reads `busy`, so `cancelling`\nkeeps it up (in its \"Stopping…\" state) until the turn actually winds down.",
|
|
6608
|
+
"readonly": true
|
|
6609
|
+
},
|
|
6610
|
+
{
|
|
6611
|
+
"kind": "field",
|
|
6612
|
+
"name": "sendButtonVisible",
|
|
6613
|
+
"type": {
|
|
6614
|
+
"text": "boolean"
|
|
6615
|
+
},
|
|
6616
|
+
"description": "Whether Send is rendered at all. Hidden exactly when Stop has taken its\nplace — so a host that suppressed Stop via `hideStopButton` keeps Send\nthroughout, disabled for the duration, and the slot is never left empty\nmid-turn.",
|
|
6617
|
+
"readonly": true
|
|
6618
|
+
},
|
|
6619
|
+
{
|
|
6620
|
+
"kind": "field",
|
|
6621
|
+
"name": "isComposerResizable",
|
|
6622
|
+
"type": {
|
|
6623
|
+
"text": "boolean"
|
|
6624
|
+
},
|
|
6625
|
+
"description": "Whether the message input shows a drag handle to resize its height.",
|
|
6626
|
+
"readonly": true
|
|
6627
|
+
},
|
|
6628
|
+
{
|
|
6629
|
+
"kind": "field",
|
|
6630
|
+
"name": "composerHeightStyle",
|
|
6631
|
+
"type": {
|
|
6632
|
+
"text": "string"
|
|
6633
|
+
},
|
|
6634
|
+
"description": "Inline style carrying the dragged height into `--composer-height`.",
|
|
6635
|
+
"readonly": true
|
|
6636
|
+
},
|
|
6637
|
+
{
|
|
6638
|
+
"kind": "method",
|
|
6639
|
+
"name": "onComposerResizeStart",
|
|
6640
|
+
"return": {
|
|
6641
|
+
"type": {
|
|
6642
|
+
"text": "void"
|
|
6643
|
+
}
|
|
6644
|
+
},
|
|
6645
|
+
"parameters": [
|
|
6646
|
+
{
|
|
6647
|
+
"name": "e",
|
|
6648
|
+
"type": {
|
|
6649
|
+
"text": "PointerEvent"
|
|
6650
|
+
}
|
|
6651
|
+
}
|
|
6652
|
+
]
|
|
6653
|
+
},
|
|
6654
|
+
{
|
|
6655
|
+
"kind": "method",
|
|
6656
|
+
"name": "onComposerResizeMove",
|
|
6657
|
+
"return": {
|
|
6658
|
+
"type": {
|
|
6659
|
+
"text": "void"
|
|
6660
|
+
}
|
|
6661
|
+
},
|
|
6662
|
+
"parameters": [
|
|
6663
|
+
{
|
|
6664
|
+
"name": "e",
|
|
6665
|
+
"type": {
|
|
6666
|
+
"text": "PointerEvent"
|
|
6667
|
+
}
|
|
6668
|
+
}
|
|
6669
|
+
]
|
|
6670
|
+
},
|
|
6671
|
+
{
|
|
6672
|
+
"kind": "method",
|
|
6673
|
+
"name": "onComposerResizeEnd",
|
|
6674
|
+
"return": {
|
|
6675
|
+
"type": {
|
|
6676
|
+
"text": "void"
|
|
6677
|
+
}
|
|
6678
|
+
},
|
|
6679
|
+
"parameters": [
|
|
6680
|
+
{
|
|
6681
|
+
"name": "e",
|
|
6682
|
+
"type": {
|
|
6683
|
+
"text": "PointerEvent"
|
|
6684
|
+
}
|
|
6685
|
+
}
|
|
6686
|
+
]
|
|
6687
|
+
}
|
|
6688
|
+
],
|
|
6689
|
+
"events": [
|
|
6690
|
+
{
|
|
6691
|
+
"name": "budget-refresh-requested",
|
|
6692
|
+
"type": {
|
|
6693
|
+
"text": "CustomEvent"
|
|
6694
|
+
}
|
|
6695
|
+
},
|
|
6696
|
+
{
|
|
6697
|
+
"type": {
|
|
6698
|
+
"text": "CustomEvent"
|
|
6699
|
+
}
|
|
6700
|
+
},
|
|
6701
|
+
{
|
|
6702
|
+
"description": "Fired when the user presses the chat header in `popout-mode=\"expand\"` (for drag-to-popout hosts). Bubbles and composed. detail: `ChatHeaderMouseDownDetail`",
|
|
6703
|
+
"name": "chat-header-mousedown"
|
|
6704
|
+
},
|
|
6705
|
+
{
|
|
6706
|
+
"description": "Fired after the session is wiped (the lifecycle menu's Clear). The payload is captured before teardown so the host can clean up any external state the active agent was working on. Bubbles and composed. detail: `SessionClearedDetail`",
|
|
6707
|
+
"name": "session-cleared"
|
|
6708
|
+
}
|
|
6709
|
+
],
|
|
6710
|
+
"attributes": [
|
|
6711
|
+
{
|
|
6712
|
+
"name": "header-title",
|
|
6713
|
+
"type": {
|
|
6714
|
+
"text": "string"
|
|
6715
|
+
},
|
|
6716
|
+
"default": "'Genesis Assistant'",
|
|
6717
|
+
"fieldName": "headerTitle"
|
|
6718
|
+
},
|
|
6719
|
+
{
|
|
6720
|
+
"name": "session-key",
|
|
6721
|
+
"type": {
|
|
6722
|
+
"text": "string | undefined"
|
|
6723
|
+
},
|
|
6724
|
+
"description": "Explicit session/persistence key (GENC-1351 §5.12). When set, this is the\nsession identity — the key for the driver/store/persister/diagnostics\nregistries and the `sessionKey` passed to the persistence provider — taking\nprecedence over the DOM `id`. A host that scopes persistence per-entity\n(e.g. one chat session per project) binds this to a stable per-entity id;\nchanging it on a **connected** element re-keys the session in place — tears\ndown the current conversation and restores the new key's — via\n`switchSession`. Falls back to `id` when unset,\nso existing consumers are unaffected.",
|
|
6725
|
+
"fieldName": "sessionKey"
|
|
6726
|
+
},
|
|
6727
|
+
{
|
|
6728
|
+
"name": "image-src",
|
|
6729
|
+
"type": {
|
|
6730
|
+
"text": "string | undefined"
|
|
6731
|
+
},
|
|
6732
|
+
"fieldName": "imageSrc"
|
|
6733
|
+
},
|
|
6734
|
+
{
|
|
6735
|
+
"name": "user-image-src",
|
|
6736
|
+
"type": {
|
|
6737
|
+
"text": "string | undefined"
|
|
6738
|
+
},
|
|
6739
|
+
"fieldName": "userImageSrc"
|
|
6740
|
+
},
|
|
6741
|
+
{
|
|
6742
|
+
"name": "placeholder",
|
|
6743
|
+
"type": {
|
|
6744
|
+
"text": "string"
|
|
6745
|
+
},
|
|
6746
|
+
"default": "'Message assistant...'",
|
|
6747
|
+
"fieldName": "placeholder"
|
|
6748
|
+
},
|
|
6749
|
+
{
|
|
6750
|
+
"name": "popout-mode",
|
|
6751
|
+
"type": {
|
|
6752
|
+
"text": "PopoutMode | undefined"
|
|
6753
|
+
},
|
|
6754
|
+
"description": "Controls the pop-out button shown next to the settings cog.\n\"expand\" — in bubble, expands to layout panel (fires chat-popout).\n\"collapse\" — in layout panel, collapses back to bubble (fires chat-popin).\nAbsent — no button (default standalone behaviour, no breaking change).",
|
|
6755
|
+
"fieldName": "popoutMode"
|
|
6756
|
+
},
|
|
6757
|
+
{
|
|
6758
|
+
"name": "debug-redux",
|
|
6759
|
+
"type": {
|
|
6760
|
+
"text": "boolean"
|
|
6761
|
+
},
|
|
6762
|
+
"default": "false",
|
|
6763
|
+
"description": "When set, enables Redux DevTools for this instance's session store.",
|
|
6764
|
+
"fieldName": "debugRedux"
|
|
6765
|
+
}
|
|
6766
|
+
],
|
|
6767
|
+
"superclass": {
|
|
6768
|
+
"name": "GenesisElement",
|
|
6769
|
+
"package": "@genesislcap/web-core"
|
|
6770
|
+
},
|
|
6771
|
+
"tagName": "foundation-ai-assistant",
|
|
6772
|
+
"customElement": true
|
|
6773
|
+
}
|
|
6774
|
+
],
|
|
6775
|
+
"exports": [
|
|
6776
|
+
{
|
|
6777
|
+
"kind": "js",
|
|
6778
|
+
"name": "sparkleIconSvg",
|
|
6779
|
+
"declaration": {
|
|
6780
|
+
"name": "sparkleIconSvg",
|
|
6781
|
+
"module": "src/main/main.ts"
|
|
6782
|
+
}
|
|
6783
|
+
},
|
|
6784
|
+
{
|
|
6785
|
+
"kind": "js",
|
|
6786
|
+
"name": "userIconSvg",
|
|
6787
|
+
"declaration": {
|
|
6788
|
+
"name": "userIconSvg",
|
|
6789
|
+
"module": "src/main/main.ts"
|
|
6790
|
+
}
|
|
6791
|
+
},
|
|
6792
|
+
{
|
|
6793
|
+
"kind": "js",
|
|
6794
|
+
"name": "genesisIconSvg",
|
|
6795
|
+
"declaration": {
|
|
6796
|
+
"name": "genesisIconSvg",
|
|
6797
|
+
"module": "src/main/main.ts"
|
|
6798
|
+
}
|
|
6799
|
+
},
|
|
6800
|
+
{
|
|
6801
|
+
"kind": "js",
|
|
6802
|
+
"name": "budgetPercentOf",
|
|
6803
|
+
"declaration": {
|
|
6804
|
+
"name": "budgetPercentOf",
|
|
6805
|
+
"module": "./budget-controller"
|
|
6806
|
+
}
|
|
6807
|
+
},
|
|
6808
|
+
{
|
|
6809
|
+
"kind": "js",
|
|
6810
|
+
"name": "formatBlockedReason",
|
|
6811
|
+
"declaration": {
|
|
6812
|
+
"name": "formatBlockedReason",
|
|
6813
|
+
"module": "./budget-controller"
|
|
6814
|
+
}
|
|
6815
|
+
},
|
|
6816
|
+
{
|
|
6817
|
+
"kind": "js",
|
|
6818
|
+
"name": "FoundationAiAssistant",
|
|
6819
|
+
"declaration": {
|
|
6820
|
+
"name": "FoundationAiAssistant",
|
|
6821
|
+
"module": "src/main/main.ts"
|
|
6822
|
+
}
|
|
6823
|
+
},
|
|
6824
|
+
{
|
|
6825
|
+
"kind": "custom-element-definition",
|
|
6826
|
+
"name": "foundation-ai-assistant",
|
|
6827
|
+
"declaration": {
|
|
6828
|
+
"name": "FoundationAiAssistant",
|
|
6829
|
+
"module": "src/main/main.ts"
|
|
6830
|
+
}
|
|
6831
|
+
}
|
|
6832
|
+
]
|
|
6833
|
+
},
|
|
6834
|
+
{
|
|
6835
|
+
"kind": "javascript-module",
|
|
6836
|
+
"path": "src/main/main.types.ts",
|
|
6837
|
+
"declarations": [
|
|
6838
|
+
{
|
|
6839
|
+
"kind": "variable",
|
|
6840
|
+
"name": "AiAssistantEvent",
|
|
6841
|
+
"type": {
|
|
6842
|
+
"text": "{\n /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */\n SessionCleared: 'session-cleared',\n /** Header pressed in `popout-mode=\"expand\"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */\n ChatHeaderMouseDown: 'chat-header-mousedown',\n}"
|
|
6843
|
+
},
|
|
6844
|
+
"default": "{\n /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */\n SessionCleared: 'session-cleared',\n /** Header pressed in `popout-mode=\"expand\"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */\n ChatHeaderMouseDown: 'chat-header-mousedown',\n}",
|
|
6845
|
+
"description": "DOM events the `<foundation-ai-assistant>` element dispatches to its host.\nAll bubble and are `composed` (they cross the shadow boundary), so a host can\nlisten on the element — or any ancestor — to react. Use these constants to\nwire listeners instead of hand-typing event-name strings.\n\nAn `as const` map (not a TS `enum` — this package ships none), so it serves as\nboth the listener-name value and, via the same-named type below, a union."
|
|
6846
|
+
},
|
|
6847
|
+
{
|
|
6848
|
+
"kind": "variable",
|
|
6849
|
+
"name": "ANIMATION_DEFS",
|
|
6850
|
+
"type": {
|
|
6851
|
+
"text": "object"
|
|
6852
|
+
},
|
|
6853
|
+
"default": "{\n loading: {\n label: 'Dots',\n description: 'Shows pulsing dots while the assistant is generating a response.',\n category: 'Loading style',\n },\n waves: {\n label: 'Waves',\n description:\n 'Shows glowing sine waves inside a circle while the assistant is generating a response.',\n category: 'Loading style',\n },\n flowingWaves: {\n label: 'Flowing waves',\n description:\n 'Shows coloured waves rising and settling from a line while the assistant is generating a response.',\n category: 'Loading style',\n },\n plasma: {\n label: 'Plasma orb',\n description:\n 'Shows a glowing plasma sphere with drifting energy while the assistant is generating a response.',\n category: 'Loading style',\n },\n halo: {\n label: 'Halo',\n description:\n 'Displays a glowing halo around the assistant avatar while a response is streaming.',\n category: 'Effects',\n },\n}",
|
|
6854
|
+
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
6855
|
+
},
|
|
6856
|
+
{
|
|
6857
|
+
"kind": "variable",
|
|
6858
|
+
"name": "satisfies",
|
|
6859
|
+
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
6860
|
+
},
|
|
6861
|
+
{
|
|
6862
|
+
"kind": "variable",
|
|
6863
|
+
"name": "Record",
|
|
6864
|
+
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
6865
|
+
}
|
|
6866
|
+
],
|
|
6867
|
+
"exports": [
|
|
6868
|
+
{
|
|
6869
|
+
"kind": "js",
|
|
6870
|
+
"name": "AgentPickerMode",
|
|
6871
|
+
"declaration": {
|
|
6872
|
+
"name": "AgentPickerMode",
|
|
6873
|
+
"package": "@genesislcap/foundation-ai"
|
|
6874
|
+
}
|
|
6875
|
+
},
|
|
6876
|
+
{
|
|
6877
|
+
"kind": "js",
|
|
6878
|
+
"name": "AiAssistantEvent",
|
|
6879
|
+
"declaration": {
|
|
6880
|
+
"name": "AiAssistantEvent",
|
|
6881
|
+
"module": "src/main/main.types.ts"
|
|
6882
|
+
}
|
|
6883
|
+
},
|
|
6884
|
+
{
|
|
6885
|
+
"kind": "js",
|
|
6886
|
+
"name": "ANIMATION_DEFS",
|
|
6887
|
+
"declaration": {
|
|
6888
|
+
"name": "ANIMATION_DEFS",
|
|
6889
|
+
"module": "src/main/main.types.ts"
|
|
6890
|
+
}
|
|
6891
|
+
},
|
|
6892
|
+
{
|
|
6893
|
+
"kind": "js",
|
|
6894
|
+
"name": "satisfies",
|
|
6895
|
+
"declaration": {
|
|
6896
|
+
"name": "satisfies",
|
|
6897
|
+
"module": "src/main/main.types.ts"
|
|
6898
|
+
}
|
|
6899
|
+
},
|
|
6900
|
+
{
|
|
6901
|
+
"kind": "js",
|
|
6902
|
+
"name": "Record",
|
|
6903
|
+
"declaration": {
|
|
6904
|
+
"name": "Record",
|
|
6905
|
+
"module": "src/main/main.types.ts"
|
|
6906
|
+
}
|
|
6907
|
+
}
|
|
6908
|
+
]
|
|
6909
|
+
},
|
|
6910
|
+
{
|
|
6911
|
+
"kind": "javascript-module",
|
|
6912
|
+
"path": "src/main/meta-snapshot.ts",
|
|
6913
|
+
"declarations": [],
|
|
6914
|
+
"exports": []
|
|
6915
|
+
},
|
|
6916
|
+
{
|
|
6917
|
+
"kind": "javascript-module",
|
|
6918
|
+
"path": "src/provider/ai-provider-switcher.ts",
|
|
6919
|
+
"declarations": [
|
|
6920
|
+
{
|
|
6921
|
+
"kind": "variable",
|
|
6922
|
+
"name": "AIProviderSwitcher",
|
|
6923
|
+
"description": "The DI token for the (AIProviderSwitcher:interface). Resolves a noop until the app\nregisters one."
|
|
6924
|
+
}
|
|
6925
|
+
],
|
|
6926
|
+
"exports": [
|
|
6927
|
+
{
|
|
6928
|
+
"kind": "js",
|
|
6929
|
+
"name": "AIProviderSwitcher",
|
|
6930
|
+
"declaration": {
|
|
6931
|
+
"name": "AIProviderSwitcher",
|
|
6932
|
+
"module": "src/provider/ai-provider-switcher.ts"
|
|
6933
|
+
}
|
|
6934
|
+
}
|
|
6935
|
+
]
|
|
6936
|
+
},
|
|
6937
|
+
{
|
|
6938
|
+
"kind": "javascript-module",
|
|
6939
|
+
"path": "src/provider/assistant-app-settings.ts",
|
|
6940
|
+
"declarations": [
|
|
6941
|
+
{
|
|
6942
|
+
"kind": "variable",
|
|
6943
|
+
"name": "AssistantAppSettingsProvider",
|
|
6944
|
+
"description": "The DI token for the (AssistantAppSettingsProvider:interface). Resolves a noop\nuntil the host registers one."
|
|
6945
|
+
}
|
|
6946
|
+
],
|
|
6947
|
+
"exports": [
|
|
6948
|
+
{
|
|
6949
|
+
"kind": "js",
|
|
6950
|
+
"name": "AssistantAppSettingsProvider",
|
|
6951
|
+
"declaration": {
|
|
6952
|
+
"name": "AssistantAppSettingsProvider",
|
|
6953
|
+
"module": "src/provider/assistant-app-settings.ts"
|
|
6954
|
+
}
|
|
6955
|
+
}
|
|
6956
|
+
]
|
|
6957
|
+
},
|
|
6958
|
+
{
|
|
6959
|
+
"kind": "javascript-module",
|
|
6960
|
+
"path": "src/provider/tiered-provider-switcher.ts",
|
|
6961
|
+
"declarations": [
|
|
6962
|
+
{
|
|
6963
|
+
"kind": "class",
|
|
6964
|
+
"description": "Which cloud vendor backs the tier-shaped provider registry, plus the means to move it at\nruntime (GENC-1610).",
|
|
6965
|
+
"name": "TieredAIProviderSwitcher",
|
|
6966
|
+
"members": [
|
|
6967
|
+
{
|
|
6968
|
+
"kind": "field",
|
|
6969
|
+
"name": "vendors",
|
|
6970
|
+
"type": {
|
|
6971
|
+
"text": "readonly AITierVendor[]"
|
|
6662
6972
|
},
|
|
6663
|
-
"
|
|
6664
|
-
{
|
|
6665
|
-
"name": "key",
|
|
6666
|
-
"type": {
|
|
6667
|
-
"text": "string"
|
|
6668
|
-
}
|
|
6669
|
-
},
|
|
6670
|
-
{
|
|
6671
|
-
"name": "driver",
|
|
6672
|
-
"type": {
|
|
6673
|
-
"text": "AiDriver | undefined"
|
|
6674
|
-
}
|
|
6675
|
-
},
|
|
6676
|
-
{
|
|
6677
|
-
"name": "ref",
|
|
6678
|
-
"type": {
|
|
6679
|
-
"text": "SessionStoreReturn | undefined"
|
|
6680
|
-
}
|
|
6681
|
-
},
|
|
6682
|
-
{
|
|
6683
|
-
"name": "outcome",
|
|
6684
|
-
"type": {
|
|
6685
|
-
"text": "RestoreOutcome"
|
|
6686
|
-
}
|
|
6687
|
-
}
|
|
6688
|
-
],
|
|
6689
|
-
"description": "Run the turn a reload interrupted (GENC-1662), shown as busy exactly as a send is — or, when it\ncannot run, withdraw the resume the restore divider promised."
|
|
6690
|
-
},
|
|
6691
|
-
{
|
|
6692
|
-
"kind": "method",
|
|
6693
|
-
"name": "triggerFileInput",
|
|
6694
|
-
"return": {
|
|
6695
|
-
"type": {
|
|
6696
|
-
"text": "void"
|
|
6697
|
-
}
|
|
6698
|
-
}
|
|
6973
|
+
"readonly": true
|
|
6699
6974
|
},
|
|
6700
6975
|
{
|
|
6701
|
-
"kind": "
|
|
6702
|
-
"name": "
|
|
6703
|
-
"
|
|
6704
|
-
"
|
|
6705
|
-
"text": "void"
|
|
6706
|
-
}
|
|
6976
|
+
"kind": "field",
|
|
6977
|
+
"name": "options",
|
|
6978
|
+
"type": {
|
|
6979
|
+
"text": "TieredAIProviderSwitcherOptions"
|
|
6707
6980
|
},
|
|
6708
|
-
"
|
|
6709
|
-
|
|
6710
|
-
|
|
6711
|
-
"type": {
|
|
6712
|
-
"text": "Event"
|
|
6713
|
-
}
|
|
6714
|
-
}
|
|
6715
|
-
]
|
|
6981
|
+
"privacy": "private",
|
|
6982
|
+
"readonly": true,
|
|
6983
|
+
"default": "options"
|
|
6716
6984
|
},
|
|
6717
6985
|
{
|
|
6718
|
-
"kind": "
|
|
6719
|
-
"name": "
|
|
6720
|
-
"
|
|
6721
|
-
"
|
|
6722
|
-
"text": "void"
|
|
6723
|
-
}
|
|
6986
|
+
"kind": "field",
|
|
6987
|
+
"name": "defaultTier",
|
|
6988
|
+
"type": {
|
|
6989
|
+
"text": "AITierId"
|
|
6724
6990
|
},
|
|
6725
|
-
"
|
|
6726
|
-
|
|
6727
|
-
"name": "attachment",
|
|
6728
|
-
"type": {
|
|
6729
|
-
"text": "ChatAttachment"
|
|
6730
|
-
}
|
|
6731
|
-
}
|
|
6732
|
-
]
|
|
6991
|
+
"privacy": "private",
|
|
6992
|
+
"readonly": true
|
|
6733
6993
|
},
|
|
6734
6994
|
{
|
|
6735
|
-
"kind": "
|
|
6736
|
-
"name": "
|
|
6737
|
-
"
|
|
6738
|
-
"
|
|
6739
|
-
"text": "void"
|
|
6740
|
-
}
|
|
6995
|
+
"kind": "field",
|
|
6996
|
+
"name": "registry",
|
|
6997
|
+
"type": {
|
|
6998
|
+
"text": "MutableAIProviderRegistry"
|
|
6741
6999
|
},
|
|
6742
|
-
"
|
|
6743
|
-
|
|
6744
|
-
"name": "message",
|
|
6745
|
-
"type": {
|
|
6746
|
-
"text": "string"
|
|
6747
|
-
}
|
|
6748
|
-
}
|
|
6749
|
-
]
|
|
6750
|
-
},
|
|
6751
|
-
{
|
|
6752
|
-
"kind": "method",
|
|
6753
|
-
"name": "handleSendClick"
|
|
6754
|
-
},
|
|
6755
|
-
{
|
|
6756
|
-
"kind": "method",
|
|
6757
|
-
"name": "handleStopClick",
|
|
6758
|
-
"description": "User clicked Stop. Cancels the current turn via the driver and flips the\nbutton to \"Stopping…\" until the turn winds down (a tool mid-execution\nfinishes first). Guarded so a second click is a no-op."
|
|
7000
|
+
"privacy": "private",
|
|
7001
|
+
"readonly": true
|
|
6759
7002
|
},
|
|
6760
7003
|
{
|
|
6761
|
-
"kind": "
|
|
6762
|
-
"name": "
|
|
6763
|
-
"
|
|
6764
|
-
|
|
6765
|
-
|
|
6766
|
-
"type": {
|
|
6767
|
-
"text": "string"
|
|
6768
|
-
}
|
|
6769
|
-
}
|
|
6770
|
-
]
|
|
7004
|
+
"kind": "field",
|
|
7005
|
+
"name": "listeners",
|
|
7006
|
+
"privacy": "private",
|
|
7007
|
+
"readonly": true,
|
|
7008
|
+
"default": "new Set<(vendor: AITierVendor) => void>()"
|
|
6771
7009
|
},
|
|
6772
7010
|
{
|
|
6773
|
-
"kind": "
|
|
6774
|
-
"name": "
|
|
6775
|
-
"
|
|
6776
|
-
"
|
|
6777
|
-
"text": "Promise<SubmitMessageResult>"
|
|
6778
|
-
}
|
|
7011
|
+
"kind": "field",
|
|
7012
|
+
"name": "_vendor",
|
|
7013
|
+
"type": {
|
|
7014
|
+
"text": "AITierVendor"
|
|
6779
7015
|
},
|
|
6780
|
-
"parameters": [
|
|
6781
|
-
{
|
|
6782
|
-
"name": "input",
|
|
6783
|
-
"type": {
|
|
6784
|
-
"text": "{ text?: string; files?: File[] }"
|
|
6785
|
-
}
|
|
6786
|
-
}
|
|
6787
|
-
],
|
|
6788
|
-
"description": "Programmatically submit a message. Equivalent to the user typing into the\nbuilt-in composer and pressing send, but callable from external code — most\ncommonly a custom input rendered inside `slot=\"splash\"` when paired with\n`chatConfig.ui.hideComposer`.\n\nThe input fully describes the turn: `text` and `files` REPLACE any current\ncomposer state (they are not appended to it). Files are validated against\n`chatConfig.ui.acceptedFiles` using the same pipeline as the composer's\nattach button.\n\nAtomic on validation: if any file fails validation, no attachments are\ncommitted and no send is dispatched. Failure messages are returned in\n`errors` AND appended to the `attachmentErrors` observable so the built-in\nchip UI still surfaces them when visible.\n\nResolves once the underlying send has been kicked off — it does NOT await\nthe assistant's response."
|
|
6789
|
-
},
|
|
6790
|
-
{
|
|
6791
|
-
"kind": "method",
|
|
6792
|
-
"name": "fetchSuggestions",
|
|
6793
7016
|
"privacy": "private"
|
|
6794
7017
|
},
|
|
6795
7018
|
{
|
|
6796
7019
|
"kind": "field",
|
|
6797
|
-
"name": "
|
|
7020
|
+
"name": "vendor",
|
|
6798
7021
|
"type": {
|
|
6799
|
-
"text": "
|
|
7022
|
+
"text": "AITierVendor"
|
|
6800
7023
|
},
|
|
6801
|
-
"
|
|
6802
|
-
"description": "User text of the message currently being sent, stashed for the lifetime of `send()`.\n`flow-owner-changed` fires while the driver routes this turn — before the message is\nappended to raw history — so the flow-activation-prompt capture reads this rather than\na stale raw-history lookup. Cleared once the send settles. (GENC-1351 §5.9)"
|
|
6803
|
-
},
|
|
6804
|
-
{
|
|
6805
|
-
"kind": "method",
|
|
6806
|
-
"name": "send",
|
|
6807
|
-
"privacy": "private"
|
|
7024
|
+
"readonly": true
|
|
6808
7025
|
},
|
|
6809
7026
|
{
|
|
6810
7027
|
"kind": "method",
|
|
6811
|
-
"name": "
|
|
6812
|
-
"privacy": "private",
|
|
7028
|
+
"name": "switchTo",
|
|
6813
7029
|
"return": {
|
|
6814
7030
|
"type": {
|
|
6815
7031
|
"text": "void"
|
|
@@ -6817,90 +7033,53 @@
|
|
|
6817
7033
|
},
|
|
6818
7034
|
"parameters": [
|
|
6819
7035
|
{
|
|
6820
|
-
"name": "
|
|
7036
|
+
"name": "vendor",
|
|
6821
7037
|
"type": {
|
|
6822
|
-
"text": "
|
|
7038
|
+
"text": "string"
|
|
6823
7039
|
}
|
|
6824
7040
|
}
|
|
6825
7041
|
],
|
|
6826
|
-
"description": "
|
|
7042
|
+
"description": "A user-driven switch: move the registry, then tell the app so it can persist the choice.\nAn unknown vendor is ignored."
|
|
6827
7043
|
},
|
|
6828
7044
|
{
|
|
6829
7045
|
"kind": "method",
|
|
6830
|
-
"name": "
|
|
6831
|
-
"
|
|
6832
|
-
{
|
|
6833
|
-
"
|
|
6834
|
-
"type": {
|
|
6835
|
-
"text": "MouseEvent"
|
|
6836
|
-
}
|
|
7046
|
+
"name": "adoptPersistedVendor",
|
|
7047
|
+
"return": {
|
|
7048
|
+
"type": {
|
|
7049
|
+
"text": "void"
|
|
6837
7050
|
}
|
|
6838
|
-
|
|
6839
|
-
},
|
|
6840
|
-
{
|
|
6841
|
-
"kind": "method",
|
|
6842
|
-
"name": "handleInteractionCompleted",
|
|
7051
|
+
},
|
|
6843
7052
|
"parameters": [
|
|
6844
7053
|
{
|
|
6845
|
-
"name": "
|
|
7054
|
+
"name": "vendor",
|
|
6846
7055
|
"type": {
|
|
6847
|
-
"text": "
|
|
7056
|
+
"text": "string"
|
|
6848
7057
|
}
|
|
6849
7058
|
}
|
|
6850
|
-
]
|
|
7059
|
+
],
|
|
7060
|
+
"description": "Adopt a vendor the app read back from its own store — the same registry move as\nTieredAIProviderSwitcher.switchTo, without the `onSwitch` callback, because this\nvalue came FROM the store and writing it back would be a pointless round-trip on load.\n\nExists because registration has to stay synchronous: an element that connects before the\ntoken is registered caches the platform's no-op fallback, so an app cannot await its\nstored preference before constructing this. It boots on `initialVendor` and adopts the\nstored one a moment later, through a registry that is mutable and held by reference."
|
|
6851
7061
|
},
|
|
6852
7062
|
{
|
|
6853
7063
|
"kind": "method",
|
|
6854
|
-
"name": "
|
|
7064
|
+
"name": "subscribe",
|
|
7065
|
+
"return": {
|
|
7066
|
+
"type": {
|
|
7067
|
+
"text": "() => void"
|
|
7068
|
+
}
|
|
7069
|
+
},
|
|
6855
7070
|
"parameters": [
|
|
6856
7071
|
{
|
|
6857
|
-
"name": "
|
|
7072
|
+
"name": "listener",
|
|
6858
7073
|
"type": {
|
|
6859
|
-
"text": "
|
|
7074
|
+
"text": "(vendor: string) => void"
|
|
6860
7075
|
}
|
|
6861
|
-
}
|
|
6862
|
-
]
|
|
6863
|
-
"description": "A widget reporting spend it incurred AFTER resolving.\n\nNote what this deliberately does NOT do: no `startLoadingTimer()`. This is bookkeeping about a\nturn that already finished, so it must be invisible — showing a spinner would tell the user the\nassistant is working when nothing is pending."
|
|
6864
|
-
},
|
|
6865
|
-
{
|
|
6866
|
-
"kind": "field",
|
|
6867
|
-
"name": "stopButtonVisible",
|
|
6868
|
-
"type": {
|
|
6869
|
-
"text": "boolean"
|
|
6870
|
-
},
|
|
6871
|
-
"description": "Whether the Stop control is showing.\n\nWhile a turn runs Stop REPLACES Send rather than sitting beside it: the two\nare mutually exclusive actions, and a disabled Send next to a live Stop just\ngives the eye a dead control to skip past. Reads `busy`, so `cancelling`\nkeeps it up (in its \"Stopping…\" state) until the turn actually winds down.",
|
|
6872
|
-
"readonly": true
|
|
6873
|
-
},
|
|
6874
|
-
{
|
|
6875
|
-
"kind": "field",
|
|
6876
|
-
"name": "sendButtonVisible",
|
|
6877
|
-
"type": {
|
|
6878
|
-
"text": "boolean"
|
|
6879
|
-
},
|
|
6880
|
-
"description": "Whether Send is rendered at all. Hidden exactly when Stop has taken its\nplace — so a host that suppressed Stop via `hideStopButton` keeps Send\nthroughout, disabled for the duration, and the slot is never left empty\nmid-turn.",
|
|
6881
|
-
"readonly": true
|
|
6882
|
-
},
|
|
6883
|
-
{
|
|
6884
|
-
"kind": "field",
|
|
6885
|
-
"name": "isComposerResizable",
|
|
6886
|
-
"type": {
|
|
6887
|
-
"text": "boolean"
|
|
6888
|
-
},
|
|
6889
|
-
"description": "Whether the message input shows a drag handle to resize its height.",
|
|
6890
|
-
"readonly": true
|
|
6891
|
-
},
|
|
6892
|
-
{
|
|
6893
|
-
"kind": "field",
|
|
6894
|
-
"name": "composerHeightStyle",
|
|
6895
|
-
"type": {
|
|
6896
|
-
"text": "string"
|
|
6897
|
-
},
|
|
6898
|
-
"description": "Inline style carrying the dragged height into `--composer-height`.",
|
|
6899
|
-
"readonly": true
|
|
7076
|
+
}
|
|
7077
|
+
]
|
|
6900
7078
|
},
|
|
6901
7079
|
{
|
|
6902
7080
|
"kind": "method",
|
|
6903
|
-
"name": "
|
|
7081
|
+
"name": "apply",
|
|
7082
|
+
"privacy": "private",
|
|
6904
7083
|
"return": {
|
|
6905
7084
|
"type": {
|
|
6906
7085
|
"text": "void"
|
|
@@ -6908,275 +7087,96 @@
|
|
|
6908
7087
|
},
|
|
6909
7088
|
"parameters": [
|
|
6910
7089
|
{
|
|
6911
|
-
"name": "
|
|
7090
|
+
"name": "vendor",
|
|
6912
7091
|
"type": {
|
|
6913
|
-
"text": "
|
|
7092
|
+
"text": "AITierVendor"
|
|
6914
7093
|
}
|
|
6915
7094
|
}
|
|
6916
|
-
]
|
|
7095
|
+
],
|
|
7096
|
+
"description": "The registry move both entry points share, and nothing else."
|
|
6917
7097
|
},
|
|
6918
7098
|
{
|
|
6919
7099
|
"kind": "method",
|
|
6920
|
-
"name": "
|
|
7100
|
+
"name": "build",
|
|
7101
|
+
"privacy": "private",
|
|
6921
7102
|
"return": {
|
|
6922
7103
|
"type": {
|
|
6923
|
-
"text": "
|
|
7104
|
+
"text": "Record<string, AIProvider>"
|
|
6924
7105
|
}
|
|
6925
7106
|
},
|
|
6926
7107
|
"parameters": [
|
|
6927
7108
|
{
|
|
6928
|
-
"name": "
|
|
7109
|
+
"name": "vendor",
|
|
6929
7110
|
"type": {
|
|
6930
|
-
"text": "
|
|
7111
|
+
"text": "AITierVendor"
|
|
6931
7112
|
}
|
|
6932
7113
|
}
|
|
6933
7114
|
]
|
|
6934
7115
|
},
|
|
6935
7116
|
{
|
|
6936
7117
|
"kind": "method",
|
|
6937
|
-
"name": "
|
|
7118
|
+
"name": "isKnownVendor",
|
|
7119
|
+
"privacy": "private",
|
|
6938
7120
|
"return": {
|
|
6939
7121
|
"type": {
|
|
6940
|
-
"text": "
|
|
7122
|
+
"text": "vendor is AITierVendor"
|
|
6941
7123
|
}
|
|
6942
7124
|
},
|
|
6943
7125
|
"parameters": [
|
|
6944
7126
|
{
|
|
6945
|
-
"name": "
|
|
7127
|
+
"name": "vendor",
|
|
6946
7128
|
"type": {
|
|
6947
|
-
"text": "
|
|
7129
|
+
"text": "string"
|
|
6948
7130
|
}
|
|
6949
7131
|
}
|
|
6950
7132
|
]
|
|
6951
7133
|
}
|
|
6952
|
-
]
|
|
6953
|
-
|
|
7134
|
+
]
|
|
7135
|
+
},
|
|
7136
|
+
{
|
|
7137
|
+
"kind": "function",
|
|
7138
|
+
"name": "registerTieredAIProviders",
|
|
7139
|
+
"return": {
|
|
7140
|
+
"type": {
|
|
7141
|
+
"text": "TieredAIProviderSwitcher"
|
|
7142
|
+
}
|
|
7143
|
+
},
|
|
7144
|
+
"parameters": [
|
|
6954
7145
|
{
|
|
6955
|
-
"name": "
|
|
7146
|
+
"name": "container",
|
|
6956
7147
|
"type": {
|
|
6957
|
-
"text": "
|
|
7148
|
+
"text": "Container"
|
|
6958
7149
|
}
|
|
6959
7150
|
},
|
|
6960
7151
|
{
|
|
7152
|
+
"name": "options",
|
|
6961
7153
|
"type": {
|
|
6962
|
-
"text": "
|
|
7154
|
+
"text": "Omit<TieredAIProviderSwitcherOptions, 'container'>"
|
|
6963
7155
|
}
|
|
6964
|
-
},
|
|
6965
|
-
{
|
|
6966
|
-
"description": "Fired when the user presses the chat header in `popout-mode=\"expand\"` (for drag-to-popout hosts). Bubbles and composed. detail: `ChatHeaderMouseDownDetail`",
|
|
6967
|
-
"name": "chat-header-mousedown"
|
|
6968
|
-
},
|
|
6969
|
-
{
|
|
6970
|
-
"description": "Fired after the session is wiped (the lifecycle menu's Clear). The payload is captured before teardown so the host can clean up any external state the active agent was working on. Bubbles and composed. detail: `SessionClearedDetail`",
|
|
6971
|
-
"name": "session-cleared"
|
|
6972
|
-
}
|
|
6973
|
-
],
|
|
6974
|
-
"attributes": [
|
|
6975
|
-
{
|
|
6976
|
-
"name": "header-title",
|
|
6977
|
-
"type": {
|
|
6978
|
-
"text": "string"
|
|
6979
|
-
},
|
|
6980
|
-
"default": "'Genesis Assistant'",
|
|
6981
|
-
"fieldName": "headerTitle"
|
|
6982
|
-
},
|
|
6983
|
-
{
|
|
6984
|
-
"name": "session-key",
|
|
6985
|
-
"type": {
|
|
6986
|
-
"text": "string | undefined"
|
|
6987
|
-
},
|
|
6988
|
-
"description": "Explicit session/persistence key (GENC-1351 §5.12). When set, this is the\nsession identity — the key for the driver/store/persister/diagnostics\nregistries and the `sessionKey` passed to the persistence provider — taking\nprecedence over the DOM `id`. A host that scopes persistence per-entity\n(e.g. one chat session per project) binds this to a stable per-entity id;\nchanging it on a **connected** element re-keys the session in place — tears\ndown the current conversation and restores the new key's — via\n`switchSession`. Falls back to `id` when unset,\nso existing consumers are unaffected.",
|
|
6989
|
-
"fieldName": "sessionKey"
|
|
6990
|
-
},
|
|
6991
|
-
{
|
|
6992
|
-
"name": "image-src",
|
|
6993
|
-
"type": {
|
|
6994
|
-
"text": "string | undefined"
|
|
6995
|
-
},
|
|
6996
|
-
"fieldName": "imageSrc"
|
|
6997
|
-
},
|
|
6998
|
-
{
|
|
6999
|
-
"name": "user-image-src",
|
|
7000
|
-
"type": {
|
|
7001
|
-
"text": "string | undefined"
|
|
7002
|
-
},
|
|
7003
|
-
"fieldName": "userImageSrc"
|
|
7004
|
-
},
|
|
7005
|
-
{
|
|
7006
|
-
"name": "placeholder",
|
|
7007
|
-
"type": {
|
|
7008
|
-
"text": "string"
|
|
7009
|
-
},
|
|
7010
|
-
"default": "'Message assistant...'",
|
|
7011
|
-
"fieldName": "placeholder"
|
|
7012
|
-
},
|
|
7013
|
-
{
|
|
7014
|
-
"name": "popout-mode",
|
|
7015
|
-
"type": {
|
|
7016
|
-
"text": "PopoutMode | undefined"
|
|
7017
|
-
},
|
|
7018
|
-
"description": "Controls the pop-out button shown next to the settings cog.\n\"expand\" — in bubble, expands to layout panel (fires chat-popout).\n\"collapse\" — in layout panel, collapses back to bubble (fires chat-popin).\nAbsent — no button (default standalone behaviour, no breaking change).",
|
|
7019
|
-
"fieldName": "popoutMode"
|
|
7020
|
-
},
|
|
7021
|
-
{
|
|
7022
|
-
"name": "debug-redux",
|
|
7023
|
-
"type": {
|
|
7024
|
-
"text": "boolean"
|
|
7025
|
-
},
|
|
7026
|
-
"default": "false",
|
|
7027
|
-
"description": "When set, enables Redux DevTools for this instance's session store.",
|
|
7028
|
-
"fieldName": "debugRedux"
|
|
7029
7156
|
}
|
|
7030
7157
|
],
|
|
7031
|
-
"
|
|
7032
|
-
"name": "GenesisElement",
|
|
7033
|
-
"package": "@genesislcap/web-core"
|
|
7034
|
-
},
|
|
7035
|
-
"tagName": "foundation-ai-assistant",
|
|
7036
|
-
"customElement": true
|
|
7037
|
-
}
|
|
7038
|
-
],
|
|
7039
|
-
"exports": [
|
|
7040
|
-
{
|
|
7041
|
-
"kind": "js",
|
|
7042
|
-
"name": "sparkleIconSvg",
|
|
7043
|
-
"declaration": {
|
|
7044
|
-
"name": "sparkleIconSvg",
|
|
7045
|
-
"module": "src/main/main.ts"
|
|
7046
|
-
}
|
|
7047
|
-
},
|
|
7048
|
-
{
|
|
7049
|
-
"kind": "js",
|
|
7050
|
-
"name": "userIconSvg",
|
|
7051
|
-
"declaration": {
|
|
7052
|
-
"name": "userIconSvg",
|
|
7053
|
-
"module": "src/main/main.ts"
|
|
7054
|
-
}
|
|
7055
|
-
},
|
|
7056
|
-
{
|
|
7057
|
-
"kind": "js",
|
|
7058
|
-
"name": "genesisIconSvg",
|
|
7059
|
-
"declaration": {
|
|
7060
|
-
"name": "genesisIconSvg",
|
|
7061
|
-
"module": "src/main/main.ts"
|
|
7062
|
-
}
|
|
7063
|
-
},
|
|
7064
|
-
{
|
|
7065
|
-
"kind": "js",
|
|
7066
|
-
"name": "budgetPercentOf",
|
|
7067
|
-
"declaration": {
|
|
7068
|
-
"name": "budgetPercentOf",
|
|
7069
|
-
"module": "./budget-controller"
|
|
7070
|
-
}
|
|
7071
|
-
},
|
|
7072
|
-
{
|
|
7073
|
-
"kind": "js",
|
|
7074
|
-
"name": "formatBlockedReason",
|
|
7075
|
-
"declaration": {
|
|
7076
|
-
"name": "formatBlockedReason",
|
|
7077
|
-
"module": "./budget-controller"
|
|
7078
|
-
}
|
|
7079
|
-
},
|
|
7080
|
-
{
|
|
7081
|
-
"kind": "js",
|
|
7082
|
-
"name": "FoundationAiAssistant",
|
|
7083
|
-
"declaration": {
|
|
7084
|
-
"name": "FoundationAiAssistant",
|
|
7085
|
-
"module": "src/main/main.ts"
|
|
7086
|
-
}
|
|
7087
|
-
},
|
|
7088
|
-
{
|
|
7089
|
-
"kind": "custom-element-definition",
|
|
7090
|
-
"name": "foundation-ai-assistant",
|
|
7091
|
-
"declaration": {
|
|
7092
|
-
"name": "FoundationAiAssistant",
|
|
7093
|
-
"module": "src/main/main.ts"
|
|
7094
|
-
}
|
|
7095
|
-
}
|
|
7096
|
-
]
|
|
7097
|
-
},
|
|
7098
|
-
{
|
|
7099
|
-
"kind": "javascript-module",
|
|
7100
|
-
"path": "src/main/main.types.ts",
|
|
7101
|
-
"declarations": [
|
|
7102
|
-
{
|
|
7103
|
-
"kind": "variable",
|
|
7104
|
-
"name": "AiAssistantEvent",
|
|
7105
|
-
"type": {
|
|
7106
|
-
"text": "{\n /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */\n SessionCleared: 'session-cleared',\n /** Header pressed in `popout-mode=\"expand\"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */\n ChatHeaderMouseDown: 'chat-header-mousedown',\n}"
|
|
7107
|
-
},
|
|
7108
|
-
"default": "{\n /** Session wiped via the lifecycle menu's Clear. `detail`: `SessionClearedDetail`. */\n SessionCleared: 'session-cleared',\n /** Header pressed in `popout-mode=\"expand\"` (drag-to-popout hosts). `detail`: `ChatHeaderMouseDownDetail`. */\n ChatHeaderMouseDown: 'chat-header-mousedown',\n}",
|
|
7109
|
-
"description": "DOM events the `<foundation-ai-assistant>` element dispatches to its host.\nAll bubble and are `composed` (they cross the shadow boundary), so a host can\nlisten on the element — or any ancestor — to react. Use these constants to\nwire listeners instead of hand-typing event-name strings.\n\nAn `as const` map (not a TS `enum` — this package ships none), so it serves as\nboth the listener-name value and, via the same-named type below, a union."
|
|
7110
|
-
},
|
|
7111
|
-
{
|
|
7112
|
-
"kind": "variable",
|
|
7113
|
-
"name": "ANIMATION_DEFS",
|
|
7114
|
-
"type": {
|
|
7115
|
-
"text": "object"
|
|
7116
|
-
},
|
|
7117
|
-
"default": "{\n loading: {\n label: 'Dots',\n description: 'Shows pulsing dots while the assistant is generating a response.',\n category: 'Loading style',\n },\n waves: {\n label: 'Waves',\n description:\n 'Shows glowing sine waves inside a circle while the assistant is generating a response.',\n category: 'Loading style',\n },\n flowingWaves: {\n label: 'Flowing waves',\n description:\n 'Shows coloured waves rising and settling from a line while the assistant is generating a response.',\n category: 'Loading style',\n },\n plasma: {\n label: 'Plasma orb',\n description:\n 'Shows a glowing plasma sphere with drifting energy while the assistant is generating a response.',\n category: 'Loading style',\n },\n halo: {\n label: 'Halo',\n description:\n 'Displays a glowing halo around the assistant avatar while a response is streaming.',\n category: 'Effects',\n },\n}",
|
|
7118
|
-
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
7119
|
-
},
|
|
7120
|
-
{
|
|
7121
|
-
"kind": "variable",
|
|
7122
|
-
"name": "satisfies",
|
|
7123
|
-
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
7124
|
-
},
|
|
7125
|
-
{
|
|
7126
|
-
"kind": "variable",
|
|
7127
|
-
"name": "Record",
|
|
7128
|
-
"description": "Registry of all available animations with their display metadata.\nAdding an entry here automatically extends the AiAssistantAnimation type."
|
|
7158
|
+
"description": "Build a TieredAIProviderSwitcher — which registers the tier-shaped provider\nregistry — and put it on the (AIProviderSwitcher:variable) token. Call once at app\nbootstrap."
|
|
7129
7159
|
}
|
|
7130
7160
|
],
|
|
7131
7161
|
"exports": [
|
|
7132
7162
|
{
|
|
7133
7163
|
"kind": "js",
|
|
7134
|
-
"name": "
|
|
7135
|
-
"declaration": {
|
|
7136
|
-
"name": "AgentPickerMode",
|
|
7137
|
-
"package": "@genesislcap/foundation-ai"
|
|
7138
|
-
}
|
|
7139
|
-
},
|
|
7140
|
-
{
|
|
7141
|
-
"kind": "js",
|
|
7142
|
-
"name": "AiAssistantEvent",
|
|
7143
|
-
"declaration": {
|
|
7144
|
-
"name": "AiAssistantEvent",
|
|
7145
|
-
"module": "src/main/main.types.ts"
|
|
7146
|
-
}
|
|
7147
|
-
},
|
|
7148
|
-
{
|
|
7149
|
-
"kind": "js",
|
|
7150
|
-
"name": "ANIMATION_DEFS",
|
|
7151
|
-
"declaration": {
|
|
7152
|
-
"name": "ANIMATION_DEFS",
|
|
7153
|
-
"module": "src/main/main.types.ts"
|
|
7154
|
-
}
|
|
7155
|
-
},
|
|
7156
|
-
{
|
|
7157
|
-
"kind": "js",
|
|
7158
|
-
"name": "satisfies",
|
|
7164
|
+
"name": "TieredAIProviderSwitcher",
|
|
7159
7165
|
"declaration": {
|
|
7160
|
-
"name": "
|
|
7161
|
-
"module": "src/
|
|
7166
|
+
"name": "TieredAIProviderSwitcher",
|
|
7167
|
+
"module": "src/provider/tiered-provider-switcher.ts"
|
|
7162
7168
|
}
|
|
7163
7169
|
},
|
|
7164
7170
|
{
|
|
7165
7171
|
"kind": "js",
|
|
7166
|
-
"name": "
|
|
7172
|
+
"name": "registerTieredAIProviders",
|
|
7167
7173
|
"declaration": {
|
|
7168
|
-
"name": "
|
|
7169
|
-
"module": "src/
|
|
7174
|
+
"name": "registerTieredAIProviders",
|
|
7175
|
+
"module": "src/provider/tiered-provider-switcher.ts"
|
|
7170
7176
|
}
|
|
7171
7177
|
}
|
|
7172
7178
|
]
|
|
7173
7179
|
},
|
|
7174
|
-
{
|
|
7175
|
-
"kind": "javascript-module",
|
|
7176
|
-
"path": "src/main/meta-snapshot.ts",
|
|
7177
|
-
"declarations": [],
|
|
7178
|
-
"exports": []
|
|
7179
|
-
},
|
|
7180
7180
|
{
|
|
7181
7181
|
"kind": "javascript-module",
|
|
7182
7182
|
"path": "src/state/ai-assistant-slice.ts",
|