@harnessio/ai-chat-core 0.0.24 → 0.0.25
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/index.js +87 -83
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -414,7 +414,7 @@ let tt = 0, et = 0;
|
|
|
414
414
|
function v() {
|
|
415
415
|
return `msg-${Date.now()}-${++tt}`;
|
|
416
416
|
}
|
|
417
|
-
function
|
|
417
|
+
function P() {
|
|
418
418
|
return `thread-${Date.now()}-${++et}`;
|
|
419
419
|
}
|
|
420
420
|
class T extends _ {
|
|
@@ -1003,7 +1003,7 @@ class it extends _ {
|
|
|
1003
1003
|
u(this, "_searchQuery");
|
|
1004
1004
|
u(this, "_abortController", null);
|
|
1005
1005
|
u(this, "main");
|
|
1006
|
-
this.config = t, this._mainThreadId =
|
|
1006
|
+
this.config = t, this._mainThreadId = P();
|
|
1007
1007
|
const e = new M({
|
|
1008
1008
|
streamAdapter: t.streamAdapter,
|
|
1009
1009
|
capabilityExecutionManager: t.capabilityExecutionManager
|
|
@@ -1070,7 +1070,7 @@ class it extends _ {
|
|
|
1070
1070
|
this.notifySubscribers();
|
|
1071
1071
|
}
|
|
1072
1072
|
async switchToNewThread() {
|
|
1073
|
-
const t =
|
|
1073
|
+
const t = P(), e = new M({
|
|
1074
1074
|
streamAdapter: this.config.streamAdapter,
|
|
1075
1075
|
capabilityExecutionManager: this.config.capabilityExecutionManager
|
|
1076
1076
|
}), i = new R(e);
|
|
@@ -1176,7 +1176,7 @@ class it extends _ {
|
|
|
1176
1176
|
this.notifySubscribers();
|
|
1177
1177
|
}
|
|
1178
1178
|
}
|
|
1179
|
-
class
|
|
1179
|
+
class rt extends _ {
|
|
1180
1180
|
constructor(t) {
|
|
1181
1181
|
super();
|
|
1182
1182
|
u(this, "threads");
|
|
@@ -1251,15 +1251,15 @@ class yt extends _ {
|
|
|
1251
1251
|
}
|
|
1252
1252
|
}
|
|
1253
1253
|
}
|
|
1254
|
-
var
|
|
1254
|
+
var A = { exports: {} }, x = {};
|
|
1255
1255
|
/*
|
|
1256
1256
|
object-assign
|
|
1257
1257
|
(c) Sindre Sorhus
|
|
1258
1258
|
@license MIT
|
|
1259
1259
|
*/
|
|
1260
|
-
var
|
|
1261
|
-
function
|
|
1262
|
-
if (D) return
|
|
1260
|
+
var E, D;
|
|
1261
|
+
function nt() {
|
|
1262
|
+
if (D) return E;
|
|
1263
1263
|
D = 1;
|
|
1264
1264
|
var n = Object.getOwnPropertySymbols, s = Object.prototype.hasOwnProperty, t = Object.prototype.propertyIsEnumerable;
|
|
1265
1265
|
function e(r) {
|
|
@@ -1289,7 +1289,7 @@ function rt() {
|
|
|
1289
1289
|
return !1;
|
|
1290
1290
|
}
|
|
1291
1291
|
}
|
|
1292
|
-
return
|
|
1292
|
+
return E = i() ? Object.assign : function(r, a) {
|
|
1293
1293
|
for (var o, c = e(r), h, l = 1; l < arguments.length; l++) {
|
|
1294
1294
|
o = Object(arguments[l]);
|
|
1295
1295
|
for (var d in o)
|
|
@@ -1301,7 +1301,7 @@ function rt() {
|
|
|
1301
1301
|
}
|
|
1302
1302
|
}
|
|
1303
1303
|
return c;
|
|
1304
|
-
},
|
|
1304
|
+
}, E;
|
|
1305
1305
|
}
|
|
1306
1306
|
/** @license React v17.0.2
|
|
1307
1307
|
* react-jsx-runtime.production.min.js
|
|
@@ -1312,9 +1312,9 @@ function rt() {
|
|
|
1312
1312
|
* LICENSE file in the root directory of this source tree.
|
|
1313
1313
|
*/
|
|
1314
1314
|
var N;
|
|
1315
|
-
function
|
|
1315
|
+
function at() {
|
|
1316
1316
|
if (N) return x;
|
|
1317
|
-
N = 1,
|
|
1317
|
+
N = 1, nt();
|
|
1318
1318
|
var n = q, s = 60103;
|
|
1319
1319
|
if (x.Fragment = 60107, typeof Symbol == "function" && Symbol.for) {
|
|
1320
1320
|
var t = Symbol.for;
|
|
@@ -1331,24 +1331,22 @@ function nt() {
|
|
|
1331
1331
|
return x.jsx = a, x.jsxs = a, x;
|
|
1332
1332
|
}
|
|
1333
1333
|
var O;
|
|
1334
|
-
function
|
|
1335
|
-
return O || (O = 1,
|
|
1334
|
+
function ot() {
|
|
1335
|
+
return O || (O = 1, A.exports = at()), A.exports;
|
|
1336
1336
|
}
|
|
1337
|
-
var w =
|
|
1338
|
-
const
|
|
1339
|
-
|
|
1337
|
+
var w = ot();
|
|
1338
|
+
const ct = { stream: async function* () {
|
|
1339
|
+
} }, ut = new rt({ streamAdapter: ct }), W = B(ut);
|
|
1340
|
+
function wt({ runtime: n, children: s }) {
|
|
1340
1341
|
return /* @__PURE__ */ w.jsx(W.Provider, { value: n, children: s });
|
|
1341
1342
|
}
|
|
1342
|
-
function
|
|
1343
|
-
|
|
1344
|
-
if (!n)
|
|
1345
|
-
throw new Error("useAssistantRuntimeContext must be used within AssistantRuntimeProvider");
|
|
1346
|
-
return n;
|
|
1343
|
+
function ht() {
|
|
1344
|
+
return U(W);
|
|
1347
1345
|
}
|
|
1348
1346
|
function f() {
|
|
1349
|
-
return
|
|
1347
|
+
return ht();
|
|
1350
1348
|
}
|
|
1351
|
-
function
|
|
1349
|
+
function Ct() {
|
|
1352
1350
|
const n = f();
|
|
1353
1351
|
return {
|
|
1354
1352
|
switchToThread: (s) => n.threads.switchToThread(s),
|
|
@@ -1364,19 +1362,19 @@ function St() {
|
|
|
1364
1362
|
}
|
|
1365
1363
|
};
|
|
1366
1364
|
}
|
|
1367
|
-
function
|
|
1365
|
+
function It() {
|
|
1368
1366
|
const n = f(), [s, t] = y(n.threads.getState());
|
|
1369
1367
|
return b(() => n.threads.subscribe(() => {
|
|
1370
1368
|
t(n.threads.getState());
|
|
1371
1369
|
}), [n]), s;
|
|
1372
1370
|
}
|
|
1373
|
-
function
|
|
1371
|
+
function dt() {
|
|
1374
1372
|
const s = f().threads.getMainThread(), [, t] = y({});
|
|
1375
1373
|
return b(() => s.subscribe(() => {
|
|
1376
1374
|
t({});
|
|
1377
1375
|
}), [s]), s;
|
|
1378
1376
|
}
|
|
1379
|
-
var k = { exports: {} },
|
|
1377
|
+
var k = { exports: {} }, F = {};
|
|
1380
1378
|
/**
|
|
1381
1379
|
* @license React
|
|
1382
1380
|
* use-sync-external-store-shim.production.js
|
|
@@ -1387,8 +1385,8 @@ var k = { exports: {} }, P = {};
|
|
|
1387
1385
|
* LICENSE file in the root directory of this source tree.
|
|
1388
1386
|
*/
|
|
1389
1387
|
var j;
|
|
1390
|
-
function
|
|
1391
|
-
if (j) return
|
|
1388
|
+
function lt() {
|
|
1389
|
+
if (j) return F;
|
|
1392
1390
|
j = 1;
|
|
1393
1391
|
var n = q;
|
|
1394
1392
|
function s(d, g) {
|
|
@@ -1425,16 +1423,16 @@ function ut() {
|
|
|
1425
1423
|
return g();
|
|
1426
1424
|
}
|
|
1427
1425
|
var l = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? h : o;
|
|
1428
|
-
return
|
|
1426
|
+
return F.useSyncExternalStore = n.useSyncExternalStore !== void 0 ? n.useSyncExternalStore : l, F;
|
|
1429
1427
|
}
|
|
1430
1428
|
var L;
|
|
1431
|
-
function
|
|
1432
|
-
return L || (L = 1, k.exports =
|
|
1429
|
+
function gt() {
|
|
1430
|
+
return L || (L = 1, k.exports = lt()), k.exports;
|
|
1433
1431
|
}
|
|
1434
|
-
var
|
|
1435
|
-
function
|
|
1432
|
+
var pt = gt();
|
|
1433
|
+
function vt() {
|
|
1436
1434
|
const n = f();
|
|
1437
|
-
return
|
|
1435
|
+
return pt.useSyncExternalStore(
|
|
1438
1436
|
(s) => n.subscribe(() => {
|
|
1439
1437
|
s();
|
|
1440
1438
|
}),
|
|
@@ -1442,8 +1440,8 @@ function wt() {
|
|
|
1442
1440
|
() => n.thread.messages
|
|
1443
1441
|
);
|
|
1444
1442
|
}
|
|
1445
|
-
function
|
|
1446
|
-
const n =
|
|
1443
|
+
function Tt() {
|
|
1444
|
+
const n = dt(), [s, t] = y(""), [e, i] = y(!1);
|
|
1447
1445
|
return {
|
|
1448
1446
|
text: s,
|
|
1449
1447
|
setText: t,
|
|
@@ -1484,7 +1482,7 @@ function $(n, s) {
|
|
|
1484
1482
|
supportsFullscreen: ((c = e.capabilities) == null ? void 0 : c.supportsFullscreen) ?? !1
|
|
1485
1483
|
};
|
|
1486
1484
|
}
|
|
1487
|
-
function
|
|
1485
|
+
function Rt() {
|
|
1488
1486
|
const n = f(), [s, t] = y(n.contentFocus.state);
|
|
1489
1487
|
return b(() => n.contentFocus.subscribe(() => {
|
|
1490
1488
|
t(n.contentFocus.state);
|
|
@@ -1498,7 +1496,7 @@ function It() {
|
|
|
1498
1496
|
focusPrevious: () => n.contentFocus.focusPrevious(n.thread.messages)
|
|
1499
1497
|
};
|
|
1500
1498
|
}
|
|
1501
|
-
function
|
|
1499
|
+
function ft(n) {
|
|
1502
1500
|
const s = f();
|
|
1503
1501
|
b(() => {
|
|
1504
1502
|
const t = n.priority ?? 0;
|
|
@@ -1513,7 +1511,7 @@ function lt(n) {
|
|
|
1513
1511
|
};
|
|
1514
1512
|
}, [n.name, s]);
|
|
1515
1513
|
}
|
|
1516
|
-
function
|
|
1514
|
+
function bt(n) {
|
|
1517
1515
|
const s = f(), [t, e] = y(
|
|
1518
1516
|
() => s.capabilityExecutionManager.getExecution(n)
|
|
1519
1517
|
), [, i] = V((r) => r + 1, 0);
|
|
@@ -1527,8 +1525,17 @@ function gt(n) {
|
|
|
1527
1525
|
});
|
|
1528
1526
|
}, [n, s]), t;
|
|
1529
1527
|
}
|
|
1530
|
-
const
|
|
1531
|
-
|
|
1528
|
+
const mt = {
|
|
1529
|
+
contexts: {},
|
|
1530
|
+
setContext: () => {
|
|
1531
|
+
},
|
|
1532
|
+
removeContext: () => {
|
|
1533
|
+
},
|
|
1534
|
+
getContextData: () => ({}),
|
|
1535
|
+
clearContexts: () => {
|
|
1536
|
+
}
|
|
1537
|
+
}, Q = B(mt);
|
|
1538
|
+
function Mt({ children: n }) {
|
|
1532
1539
|
const [s, t] = y({}), e = C((c, h) => {
|
|
1533
1540
|
t((l) => {
|
|
1534
1541
|
if (h === null) {
|
|
@@ -1571,25 +1578,22 @@ function vt({ children: n }) {
|
|
|
1571
1578
|
);
|
|
1572
1579
|
return /* @__PURE__ */ w.jsx(Q.Provider, { value: o, children: n });
|
|
1573
1580
|
}
|
|
1574
|
-
function
|
|
1575
|
-
|
|
1576
|
-
if (!n)
|
|
1577
|
-
throw new Error("useChatContext must be used within a ChatContextProvider");
|
|
1578
|
-
return n;
|
|
1581
|
+
function yt() {
|
|
1582
|
+
return U(Q);
|
|
1579
1583
|
}
|
|
1580
|
-
function
|
|
1581
|
-
const { setContext: s, removeContext: t } =
|
|
1584
|
+
function At(n) {
|
|
1585
|
+
const { setContext: s, removeContext: t } = yt(), { id: e = "currentPage", ...i } = n;
|
|
1582
1586
|
b(() => (s(e, i), () => {
|
|
1583
1587
|
t(e);
|
|
1584
1588
|
}), [e, i.displayName, JSON.stringify(i.data), i.priority, i.icon]);
|
|
1585
1589
|
}
|
|
1586
|
-
function
|
|
1590
|
+
function Et(n, s = "merge") {
|
|
1587
1591
|
const t = f();
|
|
1588
1592
|
b(() => (t.quickActionRegistry.activateScope(n, s), () => {
|
|
1589
1593
|
t.quickActionRegistry.deactivateScope(n);
|
|
1590
1594
|
}), [n, s, t]);
|
|
1591
1595
|
}
|
|
1592
|
-
function
|
|
1596
|
+
function kt(n, s) {
|
|
1593
1597
|
const t = f();
|
|
1594
1598
|
b(() => {
|
|
1595
1599
|
const e = s || t.quickActionRegistry.getActiveScope();
|
|
@@ -1608,13 +1612,13 @@ function Mt(n, s) {
|
|
|
1608
1612
|
t
|
|
1609
1613
|
]);
|
|
1610
1614
|
}
|
|
1611
|
-
function
|
|
1615
|
+
function Ft(n) {
|
|
1612
1616
|
const s = f(), [t, e] = y([]);
|
|
1613
1617
|
return b(() => (s.quickActionRegistry.getVisible(n).then(e), s.subscribe(() => {
|
|
1614
1618
|
s.quickActionRegistry.getVisible(n).then(e);
|
|
1615
1619
|
})), [s, n == null ? void 0 : n.scope]), t;
|
|
1616
1620
|
}
|
|
1617
|
-
function
|
|
1621
|
+
function Pt(n, s) {
|
|
1618
1622
|
const t = f();
|
|
1619
1623
|
b(() => {
|
|
1620
1624
|
const e = s || t.quickActionRegistry.getActiveScope();
|
|
@@ -1627,8 +1631,8 @@ function At(n, s) {
|
|
|
1627
1631
|
};
|
|
1628
1632
|
}, [n, s, t]);
|
|
1629
1633
|
}
|
|
1630
|
-
function
|
|
1631
|
-
const t = f(), e = s, i =
|
|
1634
|
+
function _t({ message: n, content: s }) {
|
|
1635
|
+
const t = f(), e = s, i = bt(e.capabilityId), r = t.capabilityRegistry.getRenderer(e.capabilityName);
|
|
1632
1636
|
if (!r || !i)
|
|
1633
1637
|
return null;
|
|
1634
1638
|
const a = r.component;
|
|
@@ -1644,16 +1648,16 @@ function ft({ message: n, content: s }) {
|
|
|
1644
1648
|
}
|
|
1645
1649
|
);
|
|
1646
1650
|
}
|
|
1647
|
-
function
|
|
1651
|
+
function Dt({ message: n, content: s }) {
|
|
1648
1652
|
const { component: t } = $(s.type);
|
|
1649
1653
|
if (s.type === "capability")
|
|
1650
|
-
return /* @__PURE__ */ w.jsx(
|
|
1654
|
+
return /* @__PURE__ */ w.jsx(_t, { message: n, content: s });
|
|
1651
1655
|
if (!t)
|
|
1652
1656
|
return null;
|
|
1653
1657
|
const e = t;
|
|
1654
1658
|
return /* @__PURE__ */ w.jsx(e, { content: s, message: n });
|
|
1655
1659
|
}
|
|
1656
|
-
function
|
|
1660
|
+
function Nt({
|
|
1657
1661
|
message: n,
|
|
1658
1662
|
content: s,
|
|
1659
1663
|
context: t,
|
|
@@ -1677,11 +1681,11 @@ function Pt({
|
|
|
1677
1681
|
}
|
|
1678
1682
|
);
|
|
1679
1683
|
}
|
|
1680
|
-
function
|
|
1681
|
-
const s = () => (
|
|
1684
|
+
function Ot(n) {
|
|
1685
|
+
const s = () => (ft(n), null);
|
|
1682
1686
|
return s.displayName = `Capability(${n.name})`, s;
|
|
1683
1687
|
}
|
|
1684
|
-
class
|
|
1688
|
+
class jt {
|
|
1685
1689
|
getAllowedEvents() {
|
|
1686
1690
|
return null;
|
|
1687
1691
|
}
|
|
@@ -1745,16 +1749,16 @@ class Dt {
|
|
|
1745
1749
|
}
|
|
1746
1750
|
}
|
|
1747
1751
|
export {
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
+
rt as AssistantRuntime,
|
|
1753
|
+
wt as AssistantRuntimeProvider,
|
|
1754
|
+
Nt as AuxiliaryRenderer,
|
|
1755
|
+
jt as BaseSSEStreamAdapter,
|
|
1752
1756
|
K as CapabilityExecutionManager,
|
|
1753
1757
|
Y as CapabilityRegistry,
|
|
1754
|
-
|
|
1755
|
-
|
|
1758
|
+
_t as CapabilityRendererComp,
|
|
1759
|
+
Mt as ChatContextProvider,
|
|
1756
1760
|
st as ComposerRuntime,
|
|
1757
|
-
|
|
1761
|
+
Dt as ContentRenderer,
|
|
1758
1762
|
G as PluginRegistry,
|
|
1759
1763
|
X as QuickActionRegistry,
|
|
1760
1764
|
T as ThreadListItemRuntime,
|
|
@@ -1762,22 +1766,22 @@ export {
|
|
|
1762
1766
|
R as ThreadRuntime,
|
|
1763
1767
|
M as ThreadRuntimeCore,
|
|
1764
1768
|
v as generateMessageId,
|
|
1765
|
-
|
|
1769
|
+
Ot as makeCapability,
|
|
1766
1770
|
f as useAssistantRuntime,
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1771
|
+
ft as useCapability,
|
|
1772
|
+
bt as useCapabilityExecution,
|
|
1773
|
+
yt as useChatContext,
|
|
1774
|
+
Tt as useComposer,
|
|
1775
|
+
Rt as useContentFocus,
|
|
1772
1776
|
$ as useContentRenderer,
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1777
|
+
dt as useCurrentThread,
|
|
1778
|
+
vt as useMessages,
|
|
1779
|
+
At as usePageContext,
|
|
1780
|
+
kt as useQuickAction,
|
|
1781
|
+
Et as useQuickActionScope,
|
|
1782
|
+
Ft as useQuickActions,
|
|
1783
|
+
Pt as useRegisterQuickActions,
|
|
1784
|
+
Ct as useThreadList,
|
|
1785
|
+
It as useThreadListState
|
|
1782
1786
|
};
|
|
1783
1787
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/core/PluginRegistry.ts","../src/core/CapabilityRegistry.ts","../src/core/CapabilityExecutionManager.ts","../src/core/QuickActionRegistry.ts","../src/utils/Subscribable.ts","../src/runtime/ContentFocusRuntime/ContentFocusRuntime.ts","../src/utils/idGenerator.ts","../src/runtime/ThreadListItemRuntime/ThreadListItemRuntime.ts","../src/runtime/ComposerRuntime/ComposerRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntimeCore.ts","../src/runtime/ThreadListRuntime/ThreadListRuntime.tsx","../src/runtime/AssistantRuntime/AssistantRuntime.tsx","../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/jsx-runtime.js","../src/react/providers/AssistantRuntimeProvider.tsx","../src/react/hooks/useAssistantRuntime.ts","../src/react/hooks/useThreadList.ts","../src/react/hooks/useCurrentThread.ts","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/shim/index.js","../src/react/hooks/useMessages.ts","../src/react/hooks/useComposer.ts","../src/react/hooks/useContentRenderer.ts","../src/react/hooks/useContentFocus.ts","../src/react/hooks/useCapability.ts","../src/react/hooks/useCapabilityExecution.ts","../src/react/providers/ChatContextProvider.tsx","../src/react/hooks/usePageContext.ts","../src/react/hooks/useQuickActionScope.ts","../src/react/hooks/useQuickAction.ts","../src/react/hooks/useQuickActions.ts","../src/react/hooks/useRegisterQuickActions.ts","../src/react/components/CapabilityRenderer.tsx","../src/react/components/ContentRenderer.tsx","../src/react/components/AuxiliaryRenderer.tsx","../src/react/utils/makeCapability.tsx","../src/utils/BaseSSEStreamAdapter.ts"],"sourcesContent":["import { ChatPlugin, MessageRenderer } from '../types/plugin'\n\nexport class PluginRegistry {\n private plugins = new Map<string, ChatPlugin>()\n private renderersByType = new Map<string, MessageRenderer[]>()\n\n public registerPlugin(plugin: ChatPlugin): void {\n if (this.plugins.has(plugin.id)) {\n // handle duplicate plugin registration\n // show a warning / error\n }\n\n this.plugins.set(plugin.id, plugin)\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n renderers.push(renderer)\n renderers.sort((a, b) => (b?.priority ?? 0) - (a?.priority ?? 0))\n this.renderersByType.set(renderer.type, renderers)\n })\n }\n\n public unregisterPlugin(pluginId: string): boolean {\n const plugin = this.plugins.get(pluginId)\n if (!plugin) {\n return false\n }\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n const filteredRenderers = renderers.filter(r => !plugin.renderers.includes(r))\n\n if (filteredRenderers.length === 0) {\n this.renderersByType.delete(renderer.type)\n } else {\n this.renderersByType.set(renderer.type, filteredRenderers)\n }\n })\n\n return this.plugins.delete(pluginId)\n }\n\n public getPlugin(pluginId: string): ChatPlugin | undefined {\n return this.plugins.get(pluginId)\n }\n\n public getAllPlugins(): ChatPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public getRenderersByType(type: string): MessageRenderer[] {\n return this.renderersByType.get(type) || []\n }\n\n public getBestRendererForType(type: string): MessageRenderer | undefined {\n const renderers = this.getRenderersByType(type)\n return renderers[0]\n }\n\n public clear(): void {\n this.plugins.clear()\n this.renderersByType.clear()\n }\n}\n","import { CapabilityHandler, CapabilityRenderer } from '../types/capability'\n\ninterface HandlerEntry {\n handler: CapabilityHandler\n priority: number\n}\n\ninterface RendererEntry {\n renderer: CapabilityRenderer\n priority: number\n}\n\nexport class CapabilityRegistry {\n private handlers = new Map<string, HandlerEntry[]>()\n private renderers = new Map<string, RendererEntry[]>()\n\n public registerHandler(name: string, handler: CapabilityHandler, priority = 0): void {\n const entries = this.handlers.get(name) || []\n const entry: HandlerEntry = { handler, priority }\n\n // Insert in sorted order (highest priority first)\n const insertIndex = entries.findIndex(e => e.priority < priority)\n if (insertIndex === -1) {\n entries.push(entry)\n } else {\n entries.splice(insertIndex, 0, entry)\n }\n\n this.handlers.set(name, entries)\n }\n\n public registerRenderer(name: string, renderer: CapabilityRenderer, priority = 0): void {\n const entries = this.renderers.get(name) || []\n const entry: RendererEntry = { renderer, priority }\n\n // Insert in sorted order (highest priority first)\n const insertIndex = entries.findIndex(e => e.priority < priority)\n if (insertIndex === -1) {\n entries.push(entry)\n } else {\n entries.splice(insertIndex, 0, entry)\n }\n\n this.renderers.set(name, entries)\n }\n\n public unregister(name: string): void {\n this.handlers.delete(name)\n this.renderers.delete(name)\n }\n\n public getHandler(name: string): CapabilityHandler | undefined {\n const entries = this.handlers.get(name)\n return entries?.[0]?.handler\n }\n\n public getRenderer(name: string): CapabilityRenderer | undefined {\n const entries = this.renderers.get(name)\n return entries?.[0]?.renderer\n }\n\n public getStrategy() {\n return 'queue'\n }\n\n public hasHandler(name: string): boolean {\n const entries = this.handlers.get(name)\n return entries !== undefined && entries.length > 0\n }\n\n public hasRenderer(name: string): boolean {\n const entries = this.renderers.get(name)\n return entries !== undefined && entries.length > 0\n }\n\n public clear(): void {\n this.handlers.clear()\n this.renderers.clear()\n }\n\n public getAllCapabilityNames(): string[] {\n return Array.from(new Set([...this.handlers.keys(), ...this.renderers.keys()]))\n }\n}\n","import { CapabilityExecution, CapabilityHandler } from '../types/capability'\n\nexport class CapabilityExecutionManager {\n private executions = new Map<string, CapabilityExecution>()\n private executionQueue: string[] = []\n private isProcessing = false\n private runningByName = new Map<string, string[]>()\n private subscribers = new Set<(executionId: string) => void>()\n private getHandler: (name: string) => CapabilityHandler | undefined\n\n constructor(getHandler: (name: string) => CapabilityHandler | undefined) {\n this.getHandler = getHandler\n }\n\n public async executeCapability<TArgs, TResult>(\n name: string,\n id: string,\n args: TArgs,\n messageId: string,\n strategy = 'queue'\n ): Promise<void> {\n const handler = this.getHandler(name)\n if (!handler) {\n console.warn(`No handler registered for capability: ${name}`)\n return\n }\n\n const execution: CapabilityExecution<TArgs, TResult> = {\n id,\n name,\n args,\n status: { type: 'queued' },\n timestamp: Date.now(),\n messageId\n }\n\n this.executions.set(id, execution)\n this.notifySubscribers(id)\n\n switch (strategy) {\n case 'queue':\n default:\n this.executionQueue.push(id)\n break\n }\n\n if (!this.isProcessing) {\n this.processQueue()\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessing || this.executionQueue.length === 0) {\n return\n }\n\n this.isProcessing = true\n\n while (this.executionQueue.length > 0) {\n const executionId = this.executionQueue.shift()!\n const execution = this.executions.get(executionId)\n\n if (!execution) continue\n\n const handler = this.getHandler(execution.name)\n if (!handler) continue\n\n execution.status = { type: 'running' }\n this.notifySubscribers(executionId)\n\n const running = this.runningByName.get(execution.name) || []\n running.push(executionId)\n this.runningByName.set(execution.name, running)\n\n try {\n const result = await handler.execute(execution.args, {\n messageId: execution.messageId,\n capabilityId: executionId\n })\n\n execution.status = { type: 'complete', result }\n execution.result = result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n execution.status = { type: 'error', error: errorMessage }\n execution.error = errorMessage\n } finally {\n const running = this.runningByName.get(execution.name) || []\n const index = running.indexOf(executionId)\n if (index > -1) {\n running.splice(index, 1)\n }\n if (running.length === 0) {\n this.runningByName.delete(execution.name)\n } else {\n this.runningByName.set(execution.name, running)\n }\n\n this.notifySubscribers(executionId)\n }\n }\n\n this.isProcessing = false\n }\n\n public getExecution(id: string): CapabilityExecution | undefined {\n return this.executions.get(id)\n }\n\n public getExecutionsByMessage(messageId: string): CapabilityExecution[] {\n return Array.from(this.executions.values()).filter(e => e.messageId === messageId)\n }\n\n public subscribe(callback: (executionId: string) => void): () => void {\n this.subscribers.add(callback)\n return () => this.subscribers.delete(callback)\n }\n\n private notifySubscribers(executionId: string): void {\n this.subscribers.forEach(callback => callback(executionId))\n }\n\n public clear(): void {\n this.executions.clear()\n this.executionQueue = []\n this.runningByName.clear()\n }\n}\n","import type { QuickAction, QuickActionConfig, QuickActionFilter, QuickActionScopeMode } from '../types/quick-action'\n\ninterface QuickActionEntry {\n config: QuickActionConfig\n priority: number\n}\n\ninterface ScopeInfo {\n mode: QuickActionScopeMode\n actions: Map<string, QuickActionEntry>\n}\n\nexport class QuickActionRegistry {\n private scopes = new Map<string, ScopeInfo>()\n private scopeStack: string[] = []\n\n constructor() {\n // Initialize global scope\n this.scopes.set('global', {\n mode: 'merge',\n actions: new Map()\n })\n this.scopeStack.push('global')\n }\n\n /**\n * Activate a scope with the specified mode.\n * This pushes the scope onto the stack, making it active.\n */\n public activateScope(scope: string, mode: QuickActionScopeMode = 'merge'): void {\n // Create scope if it doesn't exist\n if (!this.scopes.has(scope)) {\n this.scopes.set(scope, {\n mode,\n actions: new Map()\n })\n } else {\n // Update mode if scope already exists\n const scopeInfo = this.scopes.get(scope)!\n scopeInfo.mode = mode\n }\n\n // Add to stack if not already present\n if (!this.scopeStack.includes(scope)) {\n this.scopeStack.push(scope)\n }\n }\n\n /**\n * Deactivate a scope, removing it from the stack.\n * This restores the previous scope as active.\n */\n public deactivateScope(scope: string): void {\n const index = this.scopeStack.indexOf(scope)\n if (index !== -1 && scope !== 'global') {\n this.scopeStack.splice(index, 1)\n }\n }\n\n /**\n * Get the currently active scope (top of stack).\n */\n public getActiveScope(): string {\n return this.scopeStack[this.scopeStack.length - 1] || 'global'\n }\n\n /**\n * Get the full scope stack.\n */\n public getScopeStack(): string[] {\n return [...this.scopeStack]\n }\n\n /**\n * Register a quick action in the specified scope.\n */\n public register(config: QuickActionConfig, scope: string = 'global'): void {\n const priority = config.priority ?? 0\n\n // Ensure scope exists\n if (!this.scopes.has(scope)) {\n this.scopes.set(scope, {\n mode: 'merge',\n actions: new Map()\n })\n }\n\n const scopeInfo = this.scopes.get(scope)!\n\n if (scopeInfo.actions.has(config.id)) {\n console.warn(`QuickAction with id \"${config.id}\" is already registered in scope \"${scope}\". Overwriting.`)\n }\n\n scopeInfo.actions.set(config.id, {\n config,\n priority\n })\n }\n\n /**\n * Unregister a quick action from the specified scope.\n */\n public unregister(id: string, scope: string = 'global'): boolean {\n const scopeInfo = this.scopes.get(scope)\n if (!scopeInfo) {\n return false\n }\n\n return scopeInfo.actions.delete(id)\n }\n\n /**\n * Clear all actions in the specified scope.\n */\n public clearScope(scope: string): void {\n const scopeInfo = this.scopes.get(scope)\n if (scopeInfo) {\n scopeInfo.actions.clear()\n }\n }\n\n /**\n * Get all visible quick actions based on the active scope and its mode.\n */\n public async getVisible(filter?: QuickActionFilter): Promise<QuickAction[]> {\n const activeScope = this.getActiveScope()\n const activeScopeInfo = this.scopes.get(activeScope)\n\n if (!activeScopeInfo) {\n return []\n }\n\n const mode = activeScopeInfo.mode\n let entries: QuickActionEntry[] = []\n\n // Determine which scopes to include based on mode\n if (mode === 'replace') {\n // Only show actions from the active scope\n entries = Array.from(activeScopeInfo.actions.values())\n } else if (mode === 'append') {\n // Show actions from all scopes in the stack\n for (const scope of this.scopeStack) {\n const scopeInfo = this.scopes.get(scope)\n if (scopeInfo) {\n entries.push(...Array.from(scopeInfo.actions.values()))\n }\n }\n } else {\n // mode === 'merge' (default)\n // Show global + active scope\n const globalInfo = this.scopes.get('global')\n if (globalInfo) {\n entries.push(...Array.from(globalInfo.actions.values()))\n }\n if (activeScope !== 'global') {\n entries.push(...Array.from(activeScopeInfo.actions.values()))\n }\n }\n\n // Evaluate conditions in parallel\n const results = await Promise.all(\n entries.map(async entry => {\n if (!entry.config.condition) {\n return { entry, visible: true }\n }\n try {\n const visible = await entry.config.condition()\n return { entry, visible }\n } catch (error) {\n console.error(`Error evaluating condition for quick action \"${entry.config.id}\":`, error)\n return { entry, visible: false }\n }\n })\n )\n\n // Filter visible actions\n let visibleEntries = results.filter(r => r.visible).map(r => r.entry)\n\n // Sort by priority (highest first)\n visibleEntries.sort((a, b) => b.priority - a.priority)\n\n // Apply scope filter if specified\n if (filter?.scope) {\n visibleEntries = visibleEntries.filter(e => e.config.scope === filter.scope)\n }\n\n // Map to QuickAction (omitting condition function)\n return visibleEntries.map(entry => ({\n id: entry.config.id,\n label: entry.config.label,\n prompt: entry.config.prompt,\n icon: entry.config.icon,\n description: entry.config.description,\n priority: entry.config.priority,\n scope: entry.config.scope\n }))\n }\n\n /**\n * Get a single quick action by ID from the specified scope.\n */\n public get(id: string, scope: string = 'global'): QuickAction | undefined {\n const scopeInfo = this.scopes.get(scope)\n if (!scopeInfo) {\n return undefined\n }\n\n const entry = scopeInfo.actions.get(id)\n if (!entry) {\n return undefined\n }\n\n return {\n id: entry.config.id,\n label: entry.config.label,\n prompt: entry.config.prompt,\n icon: entry.config.icon,\n description: entry.config.description,\n priority: entry.config.priority,\n scope: entry.config.scope\n }\n }\n\n /**\n * Check if a quick action exists in the specified scope.\n */\n public has(id: string, scope: string = 'global'): boolean {\n const scopeInfo = this.scopes.get(scope)\n return scopeInfo ? scopeInfo.actions.has(id) : false\n }\n}\n","export type Unsubscribe = () => void\n\nexport abstract class BaseSubscribable {\n private _subscriptions = new Set<() => void>()\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback)\n return () => {\n this._subscriptions.delete(callback)\n }\n }\n\n protected notifySubscribers(): void {\n for (const callback of this._subscriptions) {\n callback()\n }\n }\n\n protected getSubscriberCount(): number {\n return this._subscriptions.size\n }\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport type FocusContext = 'detail'\n\nexport interface ContentFocusState {\n isActive: boolean\n context: FocusContext | null\n focusedContent: MessageContent | null\n focusedMessage: Message | null\n focusedMessageId: string | null\n focusedContentIndex: number | null\n}\n\nexport class ContentFocusRuntime extends BaseSubscribable {\n private _state: ContentFocusState = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n\n public get state(): ContentFocusState {\n return this._state\n }\n\n public get isActive(): boolean {\n return this._state.isActive\n }\n\n public get context(): FocusContext | null {\n return this._state.context\n }\n\n public get focusedContent(): MessageContent | null {\n return this._state.focusedContent\n }\n\n public get focusedMessage(): Message | null {\n return this._state.focusedMessage\n }\n\n public get focusedMessageId(): string | null {\n return this._state.focusedMessageId\n }\n\n public get focusedContentIndex(): number | null {\n return this._state.focusedContentIndex\n }\n\n public focus(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n this._state = {\n isActive: true,\n context,\n focusedContent: content,\n focusedMessage: message,\n focusedMessageId: message.id,\n focusedContentIndex: contentIndex\n }\n this.notifySubscribers()\n }\n\n public blur(): void {\n this._state = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n this.notifySubscribers()\n }\n\n public toggle(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n if (\n this._state.isActive &&\n this._state.focusedMessageId === message.id &&\n this._state.focusedContentIndex === contentIndex &&\n this._state.context === context\n ) {\n this.blur()\n } else {\n this.focus(content, message, contentIndex, context)\n }\n }\n\n public switchContext(context: FocusContext): void {\n if (this._state.isActive && this._state.focusedContent) {\n this._state = {\n ...this._state,\n context\n }\n this.notifySubscribers()\n }\n }\n\n public focusNext(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex + 1 < currentMsg.content.length) {\n const nextContent = currentMsg.content[currentContentIndex + 1]\n this.focus(nextContent, currentMsg, currentContentIndex + 1, this._state.context || 'detail')\n return\n }\n\n // Try first content in next message\n if (currentMsgIndex + 1 < messages.length) {\n const nextMsg = messages[currentMsgIndex + 1]\n if (nextMsg.content.length > 0) {\n this.focus(nextMsg.content[0], nextMsg, 0, this._state.context || 'detail')\n }\n }\n }\n\n public focusPrevious(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex > 0) {\n const prevContent = currentMsg.content[currentContentIndex - 1]\n this.focus(prevContent, currentMsg, currentContentIndex - 1, this._state.context || 'detail')\n return\n }\n\n // Try last content in previous message\n if (currentMsgIndex > 0) {\n const prevMsg = messages[currentMsgIndex - 1]\n if (prevMsg.content.length > 0) {\n const lastIndex = prevMsg.content.length - 1\n this.focus(prevMsg.content[lastIndex], prevMsg, lastIndex, this._state.context || 'detail')\n }\n }\n }\n}\n","let messageIdCounter = 0\nlet threadIdCounter = 0\n\nexport function generateMessageId(): string {\n return `msg-${Date.now()}-${++messageIdCounter}`\n}\n\nexport function generateThreadId(): string {\n return `thread-${Date.now()}-${++threadIdCounter}`\n}\n\nexport function generateId(prefix = 'id'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n}\n","import { ThreadListItemState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\n\nexport interface ThreadListItemRuntimeConfig {\n state: ThreadListItemState\n onSwitchTo: (threadId: string) => Promise<void>\n onRename: (threadId: string, title: string) => Promise<void>\n onDelete: (threadId: string) => Promise<void>\n}\n\nexport class ThreadListItemRuntime extends BaseSubscribable {\n private _state: ThreadListItemState\n\n constructor(private config: ThreadListItemRuntimeConfig) {\n super()\n this._state = config.state\n }\n\n public get state(): ThreadListItemState {\n return this._state\n }\n\n public getState(): ThreadListItemState {\n return this._state\n }\n\n public updateState(state: ThreadListItemState): void {\n this._state = state\n this.notifySubscribers()\n }\n\n public async switchTo(): Promise<void> {\n await this.config.onSwitchTo(this._state.id)\n }\n\n public async rename(newTitle: string): Promise<void> {\n await this.config.onRename(this._state.id, newTitle)\n }\n\n public async delete(): Promise<void> {\n await this.config.onDelete(this._state.id)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ComposerState {\n text: string\n isSubmitting: boolean\n}\n\nexport class ComposerRuntime extends BaseSubscribable {\n private _text: string = ''\n private _isSubmitting: boolean = false\n\n public get text(): string {\n return this._text\n }\n\n public get isSubmitting(): boolean {\n return this._isSubmitting\n }\n\n public getState(): ComposerState {\n return {\n text: this._text,\n isSubmitting: this._isSubmitting\n }\n }\n\n public setText(text: string): void {\n this._text = text\n this.notifySubscribers()\n }\n\n public clear(): void {\n this._text = ''\n this.notifySubscribers()\n }\n\n public setSubmitting(isSubmitting: boolean): void {\n this._isSubmitting = isSubmitting\n this.notifySubscribers()\n }\n}\n\nexport default ComposerRuntime\n","import { SystemEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, TextContent } from '../../types/message'\nimport { RuntimeCapabilities, ThreadState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\nimport ComposerRuntime from '../ComposerRuntime/ComposerRuntime'\nimport { ThreadRuntimeCore } from './ThreadRuntimeCore'\n\nexport class ThreadRuntime extends BaseSubscribable {\n public readonly composer: ComposerRuntime\n\n constructor(private _core: ThreadRuntimeCore) {\n super()\n this.composer = new ComposerRuntime()\n\n // Subscribe to core changes and propagate\n this._core.subscribe(() => {\n this.notifySubscribers()\n })\n }\n\n public get messages(): readonly Message[] {\n return this._core.messages\n }\n\n public get isRunning(): boolean {\n return this._core.isRunning\n }\n\n public get isDisabled(): boolean {\n return this._core.isDisabled\n }\n\n public get isWaitingForUser(): boolean {\n return this._core.isWaitingForUser\n }\n\n public get pendingCapability(): { capabilityId: string; capabilityName: string } | null {\n return this._core.pendingCapability\n }\n\n public get capabilities(): RuntimeCapabilities {\n return this._core.capabilities\n }\n\n public get conversationId(): string | undefined {\n return this._core.conversationId\n }\n\n public get title(): string | undefined {\n return this._core.title\n }\n\n public getState(): ThreadState {\n return {\n threadId: 'main', // Will be set by ThreadListRuntime\n isDisabled: this._core.isDisabled,\n isRunning: this._core.isRunning,\n isWaitingForUser: this._core.isWaitingForUser,\n capabilities: this._core.capabilities,\n conversationId: this._core.conversationId,\n title: this._core.title\n }\n }\n\n public append(message: AppendMessage): void {\n this._core.append(message)\n }\n\n public async send(text: string): Promise<void> {\n if (!text.trim()) return\n\n this.composer.setSubmitting(true)\n\n try {\n // If waiting for user action, auto-cancel the pending capability first\n if (this._core.isWaitingForUser && this._core.pendingCapability) {\n await this._core.startSystemEventRun({\n event_type: 'action_cancelled',\n capability_id: this._core.pendingCapability.capabilityName,\n result: { success: false }\n })\n }\n\n this.composer.clear()\n await this._core.startRun({\n role: 'user',\n content: [{ type: 'text', data: text } as TextContent]\n })\n } catch (e) {\n // TODO: Handle error\n } finally {\n this.composer.setSubmitting(false)\n }\n }\n\n /**\n * Dispatches a system event (e.g. a user click on an elicitation card).\n *\n * Prior to this change, this method wrapped startSystemEventRun in a\n * try/catch that silently swallowed the \"A run is already in progress\"\n * error thrown by the core when _isRunning was still true — causing\n * clicks fired during the tail of the previous run to disappear.\n *\n * Now we await waitForIdle() before dispatching so the event is\n * reliably delivered as soon as the in-flight run completes. Callers\n * do not need their own queueing primitive.\n */\n public async sendSystemEvent(systemEvent: SystemEvent): Promise<void> {\n await this._core.waitForIdle()\n await this._core.startSystemEventRun(systemEvent)\n }\n\n /**\n * Registers a generic background task that keeps the thread reported as\n * running for as long as it is active, even when no stream run is in\n * flight. Use this for UI-driven async work (e.g. a card polling a status\n * API) so the composer shows a running/stop affordance. The work is\n * cancelled when the user presses stop (cancelRun), which invokes the\n * provided onCancel callback. Returns an opaque id for stopBackgroundTask.\n */\n public startBackgroundTask(options?: { onCancel?: () => void }): string {\n return this._core.startBackgroundTask(options)\n }\n\n /**\n * Removes a previously registered background task by its id.\n */\n public stopBackgroundTask(id: string): void {\n this._core.stopBackgroundTask(id)\n }\n\n public cancelRun(): void {\n this._core.cancelRun()\n }\n\n public clear(): void {\n this._core.clear()\n }\n\n public reset(messages: Message[] = []): void {\n this._core.reset(messages)\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._core.setConversationId(conversationId)\n }\n\n public setTitle(title: string | undefined): void {\n this._core.setTitle(title)\n }\n\n public updateMessageContent(messageId: string, updater: (content: MessageContent[]) => MessageContent[]): void {\n this._core.updateMessageContent(messageId, updater)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { CapabilityContent } from '../../types'\nimport { StreamAdapter, StreamEvent, SystemEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, MessageStatus } from '../../types/message'\nimport { RuntimeCapabilities } from '../../types/thread'\nimport { generateMessageId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ThreadRuntimeCoreConfig {\n streamAdapter: StreamAdapter\n initialMessages?: Message[]\n onMessagesChange?: (messages: Message[]) => void\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadRuntimeCore extends BaseSubscribable {\n private _messages: Message[] = []\n private _isRunning = false\n private _isDisabled = false\n private _isWaitingForUser = false\n private _pendingCapability: { capabilityId: string; capabilityName: string } | null = null\n private _abortController: AbortController | null = null\n private _conversationId?: string\n private _title?: string\n\n // Resolvers waiting for _isRunning to flip to false. Drained in the\n // finally block of every run path so callers can serialize their\n // dispatch against an in-progress run instead of having their error\n // swallowed by the caller's try/catch.\n private _idleWaiters: Array<() => void> = []\n\n // Generic background tasks that hold the thread in a \"running\" state\n // without an active stream run. Any UI-driven async work (e.g. a card\n // that polls a status API) can register one to keep the composer\n // showing a running/stop affordance, and is cancelled alongside the\n // run when the user presses stop. Keyed by an opaque task id; the\n // optional onCancel is invoked when the task is cancelled via cancelRun.\n private _backgroundTasks = new Map<string, { onCancel?: () => void }>()\n\n // Track current part being accumulated\n private _currentPart: {\n messageId: string\n contentIndex: number\n type: string\n parentId?: string\n } | null = null\n\n constructor(private config: ThreadRuntimeCoreConfig) {\n super()\n if (config.initialMessages) {\n this._messages = [...config.initialMessages]\n }\n }\n\n public get messages(): readonly Message[] {\n return this._messages\n }\n\n public get isRunning(): boolean {\n return this._isRunning || this._backgroundTasks.size > 0\n }\n\n public get isDisabled(): boolean {\n return this._isDisabled\n }\n\n public get isWaitingForUser(): boolean {\n return this._isWaitingForUser\n }\n\n public get pendingCapability(): { capabilityId: string; capabilityName: string } | null {\n return this._pendingCapability\n }\n\n public get conversationId(): string | undefined {\n return this._conversationId\n }\n\n public get title(): string | undefined {\n return this._title\n }\n\n public get capabilities(): RuntimeCapabilities {\n return {\n cancel: true,\n edit: false,\n reload: false,\n speech: false,\n attachments: false,\n feedback: false\n }\n }\n\n private updateMessages(messages: Message[]): void {\n this._messages = messages\n this.config.onMessagesChange?.(this._messages)\n this.notifySubscribers()\n }\n\n public append(message: AppendMessage): void {\n const newMessage: Message = {\n id: message.id || generateMessageId(),\n parentId: message.parentId,\n role: message.role,\n content: message.content,\n status: message.status || { type: 'complete' },\n timestamp: message.timestamp || Date.now(),\n metadata: message.metadata\n }\n\n this.updateMessages([...this._messages, newMessage])\n }\n\n /**\n * Resolves when _isRunning flips to false. Use this to queue a\n * follow-on dispatch (e.g. a system event from a card click that\n * fires during the tail of the previous run) without racing the\n * in-progress run's guard.\n *\n * Resolves immediately if nothing is running.\n */\n public waitForIdle(): Promise<void> {\n if (!this._isRunning) return Promise.resolve()\n return new Promise<void>(resolve => {\n this._idleWaiters.push(resolve)\n })\n }\n\n private drainIdleWaiters(): void {\n if (this._idleWaiters.length === 0) return\n const waiters = this._idleWaiters\n this._idleWaiters = []\n for (const w of waiters) {\n try {\n w()\n } catch {\n // Resolver callbacks should not throw; swallow defensively so\n // a single bad waiter can't block the rest.\n }\n }\n }\n\n /**\n * Registers a generic background task that keeps the thread reported as\n * running (isRunning === true) for as long as it is active, even when no\n * stream run is in flight. Use this for UI-driven async work — e.g. a card\n * that polls a status API — so the composer shows a running/stop\n * affordance and the work is cancelled when the user presses stop.\n *\n * Returns an opaque id to pass to stopBackgroundTask. The optional onCancel\n * callback is invoked if the task is cancelled via cancelRun (stop button).\n */\n public startBackgroundTask(options?: { onCancel?: () => void }): string {\n const id = `bg-${Date.now()}-${Math.random().toString(36).slice(2)}`\n this._backgroundTasks.set(id, { onCancel: options?.onCancel })\n this.notifySubscribers()\n return id\n }\n\n /**\n * Removes a previously registered background task. Once the last task is\n * removed (and no run is in flight) any idle waiters are drained so queued\n * dispatches can proceed.\n */\n public stopBackgroundTask(id: string): void {\n if (this._backgroundTasks.delete(id)) {\n if (!this.isRunning) {\n this.drainIdleWaiters()\n }\n this.notifySubscribers()\n }\n }\n\n private cancelBackgroundTasks(): void {\n if (this._backgroundTasks.size === 0) return\n const tasks = [...this._backgroundTasks.values()]\n this._backgroundTasks.clear()\n for (const task of tasks) {\n try {\n task.onCancel?.()\n } catch {\n // onCancel callbacks should not throw; swallow defensively so a\n // single bad task can't block cancelling the rest.\n }\n }\n if (!this.isRunning) {\n this.drainIdleWaiters()\n }\n this.notifySubscribers()\n }\n\n public async startSystemEventRun(systemEvent: SystemEvent): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this._isWaitingForUser = false\n this._pendingCapability = null\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal,\n systemEvent\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null\n this.notifySubscribers()\n this.drainIdleWaiters()\n }\n }\n\n public async startRun(userMessage: AppendMessage): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this._isWaitingForUser = false\n this._pendingCapability = null\n this.append(userMessage)\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null // Reset current part\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null // Clean up\n this.notifySubscribers()\n this.drainIdleWaiters()\n }\n }\n\n private handleStreamEvent(messageId: string, event: StreamEvent): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Handle core events with type guards\n if (event.type === 'part-start') {\n this.handlePartStart(message, event as Extract<StreamEvent, { type: 'part-start' }>)\n } else if (event.type === 'text-delta' || event.type === 'assistant_thought') {\n this.handleTextDelta(message, event as Extract<StreamEvent, { type: 'text-delta' }>)\n } else if (event.type === 'part-finish') {\n this.handlePartFinish()\n } else if (event.type === 'metadata') {\n const metadataEvent = event as Extract<StreamEvent, { type: 'metadata' }>\n message.metadata = {\n ...message.metadata,\n conversationId: metadataEvent.conversationId,\n interactionId: metadataEvent.interactionId\n }\n\n if (metadataEvent.conversationId && !this._conversationId) {\n this._conversationId = metadataEvent.conversationId\n }\n\n if (metadataEvent.title && !this._title) {\n this._title = metadataEvent.title\n }\n } else if (event.type === 'capability_execution') {\n const capabilityEvent = event as Extract<StreamEvent, { type: 'capability_execution' }>\n const capabilityContent = {\n type: 'capability',\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName,\n args: capabilityEvent.args\n } as CapabilityContent\n\n message.content.push(capabilityContent)\n\n // Check if artifact field exists (from stream event)\n const artifact = (capabilityEvent as any).artifact\n if (artifact) {\n message.content.push({\n type: 'artifact',\n data: {\n capabilityName: capabilityEvent.capabilityName,\n originalArgs: capabilityEvent.args,\n displayData: {\n name: artifact.displayName,\n type: artifact.displayType\n }\n }\n })\n }\n\n // Execute capability if manager is available\n if (this.config.capabilityExecutionManager) {\n this.config.capabilityExecutionManager.executeCapability(\n capabilityEvent.capabilityName,\n capabilityEvent.capabilityId,\n capabilityEvent.args,\n messageId,\n capabilityEvent.strategy\n )\n }\n\n // Track waiting_for_user status so the UI can show a waiting indicator\n const capabilityStatus = (capabilityEvent as any).status\n if (capabilityStatus === 'waiting_for_user') {\n this._isWaitingForUser = true\n this._pendingCapability = {\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName\n }\n }\n } else if (event.type === 'error') {\n const errorEvent = event as Extract<StreamEvent, { type: 'error' }>\n message.content = [\n ...message.content,\n {\n type: 'error',\n data: errorEvent.error\n }\n ]\n } else {\n // Handle custom events\n const customEvent = event as Extract<StreamEvent, { data?: any }>\n message.content = [\n ...message.content,\n {\n type: customEvent.type,\n data: customEvent.data,\n parentId: customEvent.parentId\n }\n ]\n }\n\n // Update message with new reference\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private handlePartStart(message: Message, event: Extract<StreamEvent, { type: 'part-start' }>): void {\n const contentIndex = message.content.length\n\n // Create initial content based on type\n let initialContent: MessageContent\n\n switch (event.part.type) {\n case 'assistant_thought':\n // Initialize as array for assistant thoughts\n initialContent = {\n type: event.part.type,\n data: [],\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n case 'text':\n // Initialize as empty string for text\n initialContent = {\n type: event.part.type,\n data: '',\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n default:\n initialContent = {\n type: event.part.type,\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n }\n\n // Add to message with new reference\n message.content = [...message.content, initialContent]\n\n // Track current part\n this._currentPart = {\n messageId: message.id,\n contentIndex,\n type: event.part.type,\n parentId: event.part.parentId\n }\n }\n\n private handleTextDelta(message: Message, event: Extract<StreamEvent, { type: 'text-delta' }>): void {\n if (!this._currentPart) {\n console.warn('Received text-delta without part-start')\n return\n }\n\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content.type === 'assistant_thought') {\n // For assistant thoughts, push each delta as a new array item\n if (!Array.isArray(content.data)) {\n content.data = []\n }\n if (event.delta.trim()) {\n content.data.push(event.delta.trim())\n }\n } else {\n // For text and other types, concatenate into a single string\n content.data = (content.data || '') + event.delta\n }\n }\n\n private handlePartFinish(): void {\n if (!this._currentPart) {\n console.warn('Received part-finish without part-start')\n return\n }\n\n // Find the message and content\n const messageIndex = this._messages.findIndex(m => m.id === this._currentPart!.messageId)\n if (messageIndex !== -1) {\n const message = this._messages[messageIndex]\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content) {\n // Mark this content as complete\n content.status = { type: 'complete' }\n\n // Update message to trigger re-render\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n this.updateMessages(updatedMessages)\n }\n }\n\n // Part is complete, clear tracking\n this._currentPart = null\n }\n\n private updateMessageStatus(messageId: string, status: MessageStatus): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n {\n ...this._messages[messageIndex],\n status\n },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private completeStreamingContent(messageId: string): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Check if any content is streaming\n const hasStreamingContent = message.content.some(content => content.status?.type === 'streaming')\n\n if (!hasStreamingContent) return\n\n // Update all streaming content to complete\n const updatedContent = message.content.map(content => {\n if (content.status?.type === 'streaming') {\n return { ...content, status: { type: 'complete' } as const }\n }\n return content\n })\n\n // Update the message with completed content\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, content: updatedContent, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n public clear(): void {\n this.updateMessages([])\n }\n\n public cancelRun(): void {\n // Abort an in-flight stream run if there is one. Background tasks are\n // cancelled regardless, so pressing stop also halts UI-driven polling\n // even when no stream run is active.\n if (this._isRunning && this._abortController) {\n this._abortController.abort()\n }\n\n this.cancelBackgroundTasks()\n }\n\n public reset(messages: Message[] = []): void {\n this.updateMessages([...messages])\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._conversationId = conversationId\n this.notifySubscribers()\n }\n\n public setTitle(title: string | undefined): void {\n this._title = title\n this.notifySubscribers()\n }\n\n public updateMessageContent(messageId: string, updater: (content: MessageContent[]) => MessageContent[]): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n const updatedContent = updater(message.content)\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, content: updatedContent, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { StreamAdapter, ThreadListAdapter, ThreadListLoadOptions } from '../../types/adapters'\nimport { ThreadListItemState } from '../../types/thread'\nimport { generateThreadId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ThreadListItemRuntime } from '../ThreadListItemRuntime/ThreadListItemRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\nimport { ThreadRuntimeCore } from '../ThreadRuntime/ThreadRuntimeCore'\n\nexport interface ThreadListState {\n mainThreadId: string\n threads: readonly string[]\n isLoading: boolean\n threadItems: Record<string, ThreadListItemState>\n searchQuery?: string\n}\n\nexport interface ThreadListRuntimeConfig {\n streamAdapter: StreamAdapter\n threadListAdapter?: ThreadListAdapter\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadListRuntime extends BaseSubscribable {\n private _mainThreadId: string\n private _threads = new Map<string, ThreadRuntime>()\n private _threadItems = new Map<string, ThreadListItemRuntime>()\n private _threadStates = new Map<string, ThreadListItemState>()\n private _isLoading = false\n private _searchQuery: string | undefined\n private _abortController: AbortController | null = null\n public readonly main: ThreadRuntime\n\n constructor(private config: ThreadListRuntimeConfig) {\n super()\n\n // Create main thread\n this._mainThreadId = generateThreadId()\n const mainCore = new ThreadRuntimeCore({\n streamAdapter: config.streamAdapter,\n capabilityExecutionManager: config.capabilityExecutionManager\n })\n this.main = new ThreadRuntime(mainCore)\n this._threads.set(this._mainThreadId, this.main)\n\n // Create main thread state\n const mainState: ThreadListItemState = {\n id: this._mainThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: true,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(this._mainThreadId, mainState)\n\n // Create main thread item\n const mainItem = new ThreadListItemRuntime({\n state: mainState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(this._mainThreadId, mainItem)\n }\n\n public get isLoading(): boolean {\n return this._isLoading\n }\n\n /**\n * Get the currently active main thread\n */\n public getMainThread(): ThreadRuntime {\n const mainThread = this._threads.get(this._mainThreadId)\n if (!mainThread) {\n return this.main\n }\n return mainThread\n }\n\n public getState(): ThreadListState {\n const threads: string[] = []\n const threadItems: Record<string, ThreadListItemState> = {}\n\n for (const [id, state] of this._threadStates) {\n threadItems[id] = state\n if (state.status.type === 'regular') {\n threads.push(id)\n }\n }\n\n return {\n mainThreadId: this._mainThreadId,\n threads,\n isLoading: this._isLoading,\n threadItems,\n searchQuery: this._searchQuery\n }\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n const thread = this._threads.get(threadId)\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`)\n }\n\n // Update old main thread\n const oldMainState = this._threadStates.get(this._mainThreadId)\n if (oldMainState) {\n oldMainState.isMain = false\n this._threadStates.set(this._mainThreadId, oldMainState)\n this._threadItems.get(this._mainThreadId)?.updateState(oldMainState)\n }\n\n // Update new main thread\n this._mainThreadId = threadId\n const newMainState = this._threadStates.get(threadId)\n if (newMainState) {\n newMainState.isMain = true\n this._threadStates.set(threadId, newMainState)\n this._threadItems.get(threadId)?.updateState(newMainState)\n\n // Update thread's conversationId and title\n thread.setConversationId(newMainState.conversationId)\n thread.setTitle(newMainState.title)\n }\n\n // Load thread messages if adapter exists\n if (this.config.threadListAdapter && newMainState?.conversationId) {\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const messages = await this.config.threadListAdapter.loadThread(threadId)\n thread.reset(messages)\n } catch (error) {\n console.error('Failed to load thread:', error)\n } finally {\n this._isLoading = false\n }\n }\n\n this.notifySubscribers()\n }\n\n public async switchToNewThread(): Promise<void> {\n const newThreadId = generateThreadId()\n const newCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const newThread = new ThreadRuntime(newCore)\n\n this._threads.set(newThreadId, newThread)\n\n // Create new thread state\n const newState: ThreadListItemState = {\n id: newThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: false,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(newThreadId, newState)\n\n // Create new thread item\n const newItem = new ThreadListItemRuntime({\n state: newState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(newThreadId, newItem)\n\n // Subscribe to new thread changes\n newThread.subscribe(() => {\n this.syncThreadStateFromRuntime(newThreadId, newThread)\n this.notifySubscribers()\n })\n\n // Create thread via adapter if exists\n if (this.config.threadListAdapter) {\n try {\n const createdState = await this.config.threadListAdapter.createThread()\n newState.conversationId = createdState.conversationId\n this._threadStates.set(newThreadId, newState)\n newItem.updateState(newState)\n } catch (error) {\n console.error('Failed to create thread:', error)\n }\n }\n\n await this.switchToThread(newThreadId)\n }\n\n public async loadThreads(options?: ThreadListLoadOptions): Promise<ThreadListItemState[]> {\n if (!this.config.threadListAdapter) {\n console.warn('No threadListAdapter configured')\n return []\n }\n\n if (this._isLoading) {\n return []\n }\n\n if (this._abortController) {\n this._abortController.abort()\n }\n this._abortController = new AbortController()\n\n // Track search query for state\n if (options?.query !== undefined) {\n this._searchQuery = options.query\n }\n\n if (options?.replace) {\n const threadsToDelete = Array.from(this._threads.keys()).filter(id => id !== this._mainThreadId)\n for (const threadId of threadsToDelete) {\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n }\n }\n\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const threads = await this.config.threadListAdapter.loadThreads(options)\n\n // Add new threads to state\n for (const state of threads) {\n if (this._threadStates.has(state.id)) {\n continue\n }\n\n const threadCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const thread = new ThreadRuntime(threadCore)\n this._threads.set(state.id, thread)\n this._threadStates.set(state.id, state)\n\n const threadItem = new ThreadListItemRuntime({\n state,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(state.id, threadItem)\n\n thread.subscribe(() => {\n this.syncThreadStateFromRuntime(state.id, thread)\n this.notifySubscribers()\n })\n }\n\n return threads\n } catch (error) {\n if (error instanceof Error && error.name !== 'AbortError') {\n console.error('Failed to load threads:', error)\n }\n return []\n } finally {\n this._isLoading = false\n this._abortController = null\n this.notifySubscribers()\n }\n }\n\n /**\n * Syncs conversationId and title from thread runtime to thread state\n */\n private syncThreadStateFromRuntime(threadId: string, thread: ThreadRuntime): void {\n const currentState = this._threadStates.get(threadId)\n if (currentState) {\n const hasChanges = currentState.conversationId !== thread.conversationId || currentState.title !== thread.title\n\n if (hasChanges) {\n currentState.conversationId = thread.conversationId\n currentState.title = thread.title || currentState.title\n currentState.updatedAt = Date.now()\n this._threadStates.set(threadId, currentState)\n this._threadItems.get(threadId)?.updateState(currentState)\n }\n }\n }\n\n private async renameThread(threadId: string, newTitle: string): Promise<void> {\n const state = this._threadStates.get(threadId)\n if (!state) return\n\n state.title = newTitle\n state.updatedAt = Date.now()\n this._threadStates.set(threadId, state)\n this._threadItems.get(threadId)?.updateState(state)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.updateThread(threadId, { title: newTitle })\n } catch (error) {\n console.error('Failed to rename thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n\n private async deleteThread(threadId: string): Promise<void> {\n if (threadId === this._mainThreadId && this._threads.size === 1) {\n throw new Error('Cannot delete the last thread')\n }\n\n // If deleting main thread, switch to another thread first\n if (threadId === this._mainThreadId) {\n const otherThreadId = Array.from(this._threads.keys()).find(id => id !== threadId)\n if (otherThreadId) {\n await this.switchToThread(otherThreadId)\n }\n }\n\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.deleteThread(threadId)\n } catch (error) {\n console.error('Failed to delete thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager, CapabilityRegistry } from '../../core'\nimport { PluginRegistry } from '../../core/PluginRegistry'\nimport { QuickActionRegistry } from '../../core/QuickActionRegistry'\nimport { Message } from '../../types/message'\nimport { ChatPlugin } from '../../types/plugin'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ContentFocusRuntime } from '../ContentFocusRuntime/ContentFocusRuntime'\nimport { ThreadListRuntime, ThreadListRuntimeConfig } from '../ThreadListRuntime/ThreadListRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\n\nexport interface AssistantRuntimeConfig extends ThreadListRuntimeConfig {\n plugins?: ChatPlugin[]\n}\n\nexport class AssistantRuntime extends BaseSubscribable {\n public readonly threads: ThreadListRuntime\n public readonly pluginRegistry: PluginRegistry\n public readonly capabilityRegistry: CapabilityRegistry\n public readonly capabilityExecutionManager: CapabilityExecutionManager\n public readonly quickActionRegistry: QuickActionRegistry\n private _contentFocusRuntime: ContentFocusRuntime\n private _currentThreadUnsubscribe?: () => void\n\n constructor(config: AssistantRuntimeConfig) {\n super()\n\n // Initialize plugin registry\n this.pluginRegistry = new PluginRegistry()\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n this.pluginRegistry.registerPlugin(plugin)\n })\n }\n\n // Initialize capability registry\n this.capabilityRegistry = new CapabilityRegistry()\n this.capabilityExecutionManager = new CapabilityExecutionManager(name => this.capabilityRegistry.getHandler(name))\n\n // Initialize quick action registry\n this.quickActionRegistry = new QuickActionRegistry()\n\n // Initialize thread list\n this.threads = new ThreadListRuntime({\n streamAdapter: config.streamAdapter,\n threadListAdapter: config.threadListAdapter,\n capabilityExecutionManager: this.capabilityExecutionManager\n })\n\n this._contentFocusRuntime = new ContentFocusRuntime()\n\n // Subscribe to content focus changes\n this._contentFocusRuntime.subscribe(() => {\n this.notifySubscribers()\n })\n\n // Subscribe to thread list changes (including thread switches)\n this.threads.subscribe(() => {\n // Re-subscribe to the new main thread when it changes\n this.subscribeToCurrentThread()\n this.notifySubscribers()\n })\n\n // Initial subscription to main thread\n this.subscribeToCurrentThread()\n }\n\n public get thread(): ThreadRuntime {\n return this.threads.getMainThread()\n }\n\n public get contentFocus(): ContentFocusRuntime {\n return this._contentFocusRuntime\n }\n\n /**\n * Register a plugin\n */\n public registerPlugin(plugin: ChatPlugin): void {\n this.pluginRegistry.registerPlugin(plugin)\n\n plugin.init?.({\n streamingEnabled: true,\n feedbackEnabled: false,\n detailPanelEnabled: true\n })\n }\n\n /**\n * Unregister a plugin\n */\n public unregisterPlugin(pluginId: string): boolean {\n return this.pluginRegistry.unregisterPlugin(pluginId)\n }\n\n /**\n * Subscribe to the current main thread\n * Called when thread switches to ensure we listen to the right thread\n */\n private subscribeToCurrentThread(): void {\n // Unsubscribe from previous thread\n if (this._currentThreadUnsubscribe) {\n this._currentThreadUnsubscribe()\n }\n\n // Clear focus when switching threads (e.g., starting new conversation)\n this._contentFocusRuntime.blur()\n\n // Subscribe to new main thread\n this._currentThreadUnsubscribe = this.thread.subscribe(() => {\n this.handleMessagesChange(this.thread.messages)\n this.notifySubscribers()\n })\n }\n\n private handleMessagesChange(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Only auto-focus when a new assistant message completes\n const lastMessage = messages[messages.length - 1]\n\n if (lastMessage.role === 'assistant' && lastMessage.status.type === 'complete') {\n this.autoFocusLastContent(messages)\n }\n }\n\n private autoFocusLastContent(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Find last assistant message\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message.role !== 'assistant') continue\n\n // Find last content with focus capability\n for (let j = message.content.length - 1; j >= 0; j--) {\n const content = message.content[j]\n const renderer = this.pluginRegistry.getRenderersByType(content.type)\n\n if (renderer.length > 0 && renderer[0].capabilities?.supportsFocus) {\n // Check if we're already focusing this exact content\n const isAlreadyFocused =\n this._contentFocusRuntime.isActive &&\n this._contentFocusRuntime.focusedMessageId === message.id &&\n this._contentFocusRuntime.focusedContentIndex === j\n\n // Only focus if it's new content\n if (!isAlreadyFocused) {\n this._contentFocusRuntime.focus(content, message, j, 'detail')\n }\n return\n }\n }\n }\n }\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\n\nconst AssistantRuntimeContext = createContext<AssistantRuntime | null>(null)\n\nexport interface AssistantRuntimeProviderProps {\n runtime: AssistantRuntime\n children: ReactNode\n}\n\nexport function AssistantRuntimeProvider({ runtime, children }: AssistantRuntimeProviderProps): JSX.Element {\n return <AssistantRuntimeContext.Provider value={runtime}>{children}</AssistantRuntimeContext.Provider>\n}\n\nexport function useAssistantRuntimeContext(): AssistantRuntime {\n const runtime = useContext(AssistantRuntimeContext)\n if (!runtime) {\n throw new Error('useAssistantRuntimeContext must be used within AssistantRuntimeProvider')\n }\n return runtime\n}\n","import { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\nimport { useAssistantRuntimeContext } from '../providers/AssistantRuntimeProvider'\n\nexport function useAssistantRuntime(): AssistantRuntime {\n return useAssistantRuntimeContext()\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadListState } from '../../runtime/ThreadListRuntime/ThreadListRuntime'\nimport { ThreadListLoadOptions } from '../../types/adapters'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useThreadList() {\n const runtime = useAssistantRuntime()\n\n return {\n switchToThread: (threadId: string) => runtime.threads.switchToThread(threadId),\n switchToNewThread: () => runtime.threads.switchToNewThread(),\n loadThreads: (options?: ThreadListLoadOptions) => runtime.threads.loadThreads(options),\n renameThread: (threadId: string, title: string) => runtime.threads['renameThread']?.(threadId, title),\n deleteThread: (threadId: string) => runtime.threads['deleteThread']?.(threadId)\n }\n}\n\nexport function useThreadListState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ThreadListState>(runtime.threads.getState())\n\n useEffect(() => {\n const unsubscribe = runtime.threads.subscribe(() => {\n setState(runtime.threads.getState())\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadRuntime } from '../../runtime/ThreadRuntime/ThreadRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCurrentThread(): ThreadRuntime {\n const runtime = useAssistantRuntime()\n const thread = runtime.threads.getMainThread()\n\n const [, forceUpdate] = useState({})\n\n useEffect(() => {\n const unsubscribe = thread.subscribe(() => {\n forceUpdate({})\n })\n\n return unsubscribe\n }, [thread])\n\n return thread\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useSyncExternalStore } from 'use-sync-external-store/shim'\n\nimport { Message } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useMessages(): readonly Message[] {\n const runtime = useAssistantRuntime()\n\n return useSyncExternalStore(\n callback => {\n // Subscribe to runtime, which notifies when thread switches\n // or when the current thread's messages change\n return runtime.subscribe(() => {\n callback()\n })\n },\n\n () => {\n // Always get messages from the current main thread\n return runtime.thread.messages\n },\n () => runtime.thread.messages\n )\n}\n","import { useState } from 'react'\n\nimport { useCurrentThread } from './useCurrentThread'\n\nexport function useComposer() {\n const thread = useCurrentThread()\n const [text, setText] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const send = async (e?: React.FormEvent) => {\n e?.preventDefault()\n\n if (!text.trim() || isSubmitting) return\n\n const messageText = text\n setText('')\n setIsSubmitting(true)\n\n try {\n await thread.send(messageText)\n } catch (error) {\n console.error('Failed to send message:', error)\n setText(messageText)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n return {\n text,\n setText,\n isSubmitting,\n send,\n clear: () => setText(''),\n append: (value: string) => setText(prev => prev + value)\n }\n}\n","import { FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentRenderer(contentType: string, context?: FocusContext) {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n\n if (!renderer) {\n return {\n component: null,\n auxiliaryComponent: null,\n supportsFocus: false,\n supportsPreview: false,\n supportsFullscreen: false\n }\n }\n\n // Get auxiliary component for specific context\n const auxiliaryComponent = context ? renderer.auxiliary?.[context] : null\n\n return {\n component: renderer.component,\n auxiliaryComponent,\n supportsFocus: renderer.capabilities?.supportsFocus ?? false,\n supportsPreview: renderer.capabilities?.supportsPreview ?? false,\n supportsFullscreen: renderer.capabilities?.supportsFullscreen ?? false\n }\n}\n\nexport function useHasAuxiliaryView(contentType: string, context: FocusContext): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return !!renderer?.auxiliary?.[context]\n}\n\nexport function useSupportsFocus(contentType: string): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return renderer?.capabilities?.supportsFocus ?? false\n}\n","import { useEffect, useState } from 'react'\n\nimport { ContentFocusState, FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentFocus() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return {\n ...state,\n focus: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.focus(content, message, contentIndex, context),\n blur: () => runtime.contentFocus.blur(),\n toggle: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.toggle(content, message, contentIndex, context),\n switchContext: (context: FocusContext) => runtime.contentFocus.switchContext(context),\n focusNext: () => runtime.contentFocus.focusNext(runtime.thread.messages),\n focusPrevious: () => runtime.contentFocus.focusPrevious(runtime.thread.messages)\n }\n}\n\nexport function useContentFocusState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect } from 'react'\n\nimport { CapabilityConfig } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const priority = config.priority ?? 0\n\n // Register handler\n if (config.execute) {\n runtime.capabilityRegistry.registerHandler(config.name, { execute: config.execute }, priority)\n }\n\n // Register renderer\n if (config.render) {\n runtime.capabilityRegistry.registerRenderer(\n config.name,\n {\n component: config.render\n },\n priority\n )\n }\n\n // Cleanup on unmount\n return () => {\n runtime.capabilityRegistry.unregister(config.name)\n }\n }, [config.name, runtime])\n}\n","import { useEffect, useReducer, useState } from 'react'\n\nimport { CapabilityExecution } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapabilityExecution(capabilityId: string): CapabilityExecution | undefined {\n const runtime = useAssistantRuntime()\n const [execution, setExecution] = useState<CapabilityExecution | undefined>(() =>\n runtime.capabilityExecutionManager.getExecution(capabilityId)\n )\n const [, forceUpdate] = useReducer(x => x + 1, 0)\n\n useEffect(() => {\n // Get initial state\n const initialExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(initialExecution)\n\n // Subscribe to updates\n const unsubscribe = runtime.capabilityExecutionManager.subscribe(id => {\n if (id === capabilityId) {\n const updatedExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(updatedExecution)\n forceUpdate()\n }\n })\n\n return unsubscribe\n }, [capabilityId, runtime])\n\n return execution\n}\n","import { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react'\n\nimport { ChatContextItem, ChatContextMap, ChatContextValue } from '../../types/context'\n\nconst ChatContext = createContext<ChatContextValue | undefined>(undefined)\n\nexport interface ChatContextProviderProps {\n children: ReactNode\n}\n\nexport function ChatContextProvider({ children }: ChatContextProviderProps): JSX.Element {\n const [contexts, setContexts] = useState<ChatContextMap>({})\n\n const setContext = useCallback((id: string, context: Omit<ChatContextItem, 'id'> | null) => {\n setContexts(prev => {\n if (context === null) {\n const { [id]: _, ...rest } = prev\n return rest\n }\n return {\n ...prev,\n [id]: { id, ...context }\n }\n })\n }, [])\n\n const removeContext = useCallback((id: string) => {\n setContexts(prev => {\n const { [id]: _, ...rest } = prev\n return rest\n })\n }, [])\n\n const getContextData = useCallback(() => {\n return Object.values(contexts).reduce(\n (acc, context) => {\n // Stringify non-string values for backend compatibility\n const stringifiedData = Object.entries(context.data).reduce(\n (dataAcc, [key, value]) => {\n return {\n ...dataAcc,\n [key]: typeof value === 'string' ? value : JSON.stringify(value)\n }\n },\n {} as Record<string, unknown>\n )\n return { ...acc, ...stringifiedData }\n },\n {} as Record<string, unknown>\n )\n }, [contexts])\n\n const clearContexts = useCallback(() => {\n setContexts({})\n }, [])\n\n const value = useMemo(\n () => ({\n contexts,\n setContext,\n removeContext,\n getContextData,\n clearContexts\n }),\n [contexts, setContext, removeContext, getContextData, clearContexts]\n )\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport function useChatContext(): ChatContextValue {\n const context = useContext(ChatContext)\n if (!context) {\n throw new Error('useChatContext must be used within a ChatContextProvider')\n }\n return context\n}\n","import { useEffect } from 'react'\n\nimport { ChatContextItem } from '../../types/context'\nimport { useChatContext } from '../providers/ChatContextProvider'\n\nexport interface UsePageContextOptions extends Omit<ChatContextItem, 'id'> {\n /**\n * Optional ID for the context. Defaults to 'currentPage'.\n * Use a custom ID if you need multiple page contexts or want to namespace your context.\n */\n id?: string\n}\n\n/**\n * Hook for pages to easily register their context with the chat system.\n * Automatically cleans up the context when the component unmounts.\n *\n * @param options - Context configuration\n *\n * @example\n * ```tsx\n * function ConnectorListPage() {\n * usePageContext({\n * displayName: 'Connectors',\n * data: {\n * currentPage: { page_id: 'connectors' }\n * },\n * priority: 0\n * })\n *\n * // Rest of component...\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom ID\n * function PipelineStudio({ pipelineId, pipelineName }) {\n * usePageContext({\n * id: 'currentPipeline',\n * displayName: `Pipeline: ${pipelineName}`,\n * data: {\n * selectedPipeline: { id: pipelineId, name: pipelineName }\n * },\n * priority: 1\n * })\n * }\n * ```\n */\nexport function usePageContext(options: UsePageContextOptions): void {\n const { setContext, removeContext } = useChatContext()\n const { id = 'currentPage', ...contextData } = options\n\n useEffect(() => {\n setContext(id, contextData)\n\n return () => {\n removeContext(id)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, contextData.displayName, JSON.stringify(contextData.data), contextData.priority, contextData.icon])\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionScopeMode } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Activate a quick action scope for the duration of this component's lifecycle.\n * When the component unmounts, the scope is deactivated and the previous scope is restored.\n *\n * Use this at the page/module level to declare \"this page owns quick actions\".\n *\n * @param scope - Unique identifier for this scope (e.g., \"pipelines\", \"dashboards\")\n * @param mode - How to display actions: 'merge' (global + current), 'replace' (only current), 'append' (all scopes)\n *\n * @example\n * ```tsx\n * function PipelinePage() {\n * useQuickActionScope('pipelines', 'merge')\n *\n * // Component automatically cleans up on unmount\n * return <div>Pipeline content</div>\n * }\n * ```\n */\nexport function useQuickActionScope(scope: string, mode: QuickActionScopeMode = 'merge'): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n runtime.quickActionRegistry.activateScope(scope, mode)\n\n return () => {\n runtime.quickActionRegistry.deactivateScope(scope)\n }\n }, [scope, mode, runtime])\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionConfig } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Register a quick action that appears in the welcome screen.\n * Automatically unregisters when the component unmounts.\n *\n * @param config - Quick action configuration\n * @param scope - The scope to register this action in (defaults to current active scope)\n *\n * @example\n * ```tsx\n * function PipelineQuickActions() {\n * useQuickActionScope('pipelines', 'merge')\n *\n * useQuickAction({\n * id: 'list-pipelines',\n * label: 'List pipelines',\n * prompt: 'Show me all pipelines in this project',\n * icon: 'pipeline',\n * priority: 10\n * }, 'pipelines')\n *\n * return null\n * }\n * ```\n */\nexport function useQuickAction(config: QuickActionConfig, scope?: string): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const targetScope = scope || runtime.quickActionRegistry.getActiveScope()\n runtime.quickActionRegistry.register(config, targetScope)\n\n return () => {\n runtime.quickActionRegistry.unregister(config.id, targetScope)\n }\n }, [\n config.id,\n config.label,\n config.prompt,\n config.icon,\n config.description,\n config.priority,\n config.scope,\n scope,\n runtime\n ])\n}\n","import { useEffect, useState } from 'react'\n\nimport type { QuickAction, QuickActionFilter } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Get all visible quick actions, respecting their condition functions and the active scope.\n *\n * @param filter - Optional filter by scope\n * @returns Array of visible quick actions, sorted by priority\n *\n * @example\n * ```tsx\n * function WelcomeScreen() {\n * const quickActions = useQuickActions()\n *\n * return (\n * <div>\n * {quickActions.map(action => (\n * <Button key={action.id} onClick={() => send(action.prompt)}>\n * {action.label}\n * </Button>\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useQuickActions(filter?: QuickActionFilter): QuickAction[] {\n const runtime = useAssistantRuntime()\n const [actions, setActions] = useState<QuickAction[]>([])\n\n useEffect(() => {\n // Load visible actions\n runtime.quickActionRegistry.getVisible(filter).then(setActions)\n\n // Subscribe to runtime changes to re-evaluate\n const unsubscribe = runtime.subscribe(() => {\n runtime.quickActionRegistry.getVisible(filter).then(setActions)\n })\n\n return unsubscribe\n }, [runtime, filter?.scope])\n\n return actions\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionConfig } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Register multiple quick actions at once.\n *\n * All actions are automatically registered when the component mounts and\n * unregistered when it unmounts. This hook is useful for registering\n * multiple quick actions from a centralized configuration array.\n *\n * @param actions - Array of quick action configurations to register\n * @param scope - Optional scope for the actions (defaults to active scope)\n *\n * @example\n * ```tsx\n * const GLOBAL_ACTIONS = [\n * { id: 'action-1', label: 'Action 1', prompt: 'Do action 1', icon: 'star' },\n * { id: 'action-2', label: 'Action 2', prompt: 'Do action 2', icon: 'heart' },\n * ]\n *\n * function MyQuickActions() {\n * useRegisterQuickActions(GLOBAL_ACTIONS, 'global')\n * return null\n * }\n * ```\n */\nexport function useRegisterQuickActions(actions: QuickActionConfig[], scope?: string): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const targetScope = scope || runtime.quickActionRegistry.getActiveScope()\n\n // Register all actions\n actions.forEach(config => {\n runtime.quickActionRegistry.register(config, targetScope)\n })\n\n // Cleanup: unregister all actions on unmount\n return () => {\n actions.forEach(config => {\n runtime.quickActionRegistry.unregister(config.id, targetScope)\n })\n }\n }, [actions, scope, runtime])\n}\n","import { CapabilityContent } from '../../types/capability'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from '../hooks/useAssistantRuntime'\nimport { useCapabilityExecution } from '../hooks/useCapabilityExecution'\n\nexport interface CapabilityRendererProps {\n message: Message\n content: MessageContent\n}\n\nexport function CapabilityRendererComp({ message, content }: CapabilityRendererProps) {\n const runtime = useAssistantRuntime()\n const capabilityContent = content as CapabilityContent\n const execution = useCapabilityExecution(capabilityContent.capabilityId)\n\n const renderer = runtime.capabilityRegistry.getRenderer(capabilityContent.capabilityName)\n\n if (!renderer || !execution) {\n return null\n }\n\n const Component = renderer.component\n\n return (\n <Component\n capabilityName={execution.name}\n capabilityId={execution.id}\n args={execution.args}\n result={execution.result}\n status={execution.status}\n message={message}\n />\n )\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { useContentRenderer } from '../hooks/useContentRenderer'\nimport { CapabilityRendererComp } from './CapabilityRenderer'\n\nexport function ContentRenderer({ message, content }: { message: Message; content: MessageContent }) {\n const { component } = useContentRenderer(content.type)\n\n if (content.type === 'capability') {\n return <CapabilityRendererComp message={message} content={content} />\n }\n\n if (!component) {\n return null\n }\n\n const Component = component\n return <Component content={content} message={message} />\n}\n","import { AuxiliaryRendererProps } from '../../types/plugin'\nimport { useContentRenderer } from '../hooks'\n\nexport function AuxiliaryRenderer({\n message,\n content,\n context,\n onClose,\n onNavigate,\n onSwitchContext\n}: AuxiliaryRendererProps) {\n const { auxiliaryComponent } = useContentRenderer(content.type, context)\n\n if (!auxiliaryComponent) {\n return null\n }\n\n const Component = auxiliaryComponent\n return (\n <Component\n content={content}\n message={message}\n context={context}\n onClose={onClose}\n onNavigate={onNavigate}\n onSwitchContext={onSwitchContext}\n />\n )\n}\n","import { FC } from 'react'\n\nimport { CapabilityConfig } from '../../types'\nimport { useCapability } from '../hooks/useCapability'\n\nexport function makeCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): FC {\n const Capability: FC = () => {\n useCapability(config)\n return null\n }\n\n Capability.displayName = `Capability(${config.name})`\n\n return Capability\n}\n","import { StreamAdapter, StreamChunk, StreamRequest } from '../types/adapters'\nimport { Message } from '../types/message'\n\nexport interface SSEEvent {\n event: string\n data: any\n}\n\nexport abstract class BaseSSEStreamAdapter<TAllowedEvents extends readonly string[] = readonly string[]>\n implements StreamAdapter\n{\n protected abstract prepareRequest(\n params: StreamRequest & { messages: Message[]; conversationId?: string; signal?: AbortSignal }\n ): {\n url: string\n options: RequestInit\n }\n\n protected abstract convertEvent(event: SSEEvent & { event: TAllowedEvents[number] }): StreamChunk | null\n\n protected getAllowedEvents(): TAllowedEvents | null {\n return null\n }\n\n protected shouldProcessEvent(eventType: string): boolean {\n const allowedEvents = this.getAllowedEvents()\n if (!allowedEvents) return true\n return allowedEvents.includes(eventType)\n }\n\n async *stream(params: StreamRequest): AsyncGenerator<StreamChunk, void, unknown> {\n const { signal } = params\n const { url, options } = this.prepareRequest(params)\n\n const response = await fetch(url, { ...options, signal })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n yield* this.parseSSEStream(response.body, signal)\n }\n\n private async *parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n ): AsyncGenerator<StreamChunk, void, unknown> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent: string | null = null\n\n try {\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read()\n\n if (done) break\n if (signal?.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (!trimmedLine) {\n currentEvent = null\n continue\n }\n\n if (trimmedLine === ': ping') {\n continue\n }\n\n if (trimmedLine.startsWith('event:')) {\n currentEvent = trimmedLine.substring(6).trim()\n continue\n }\n\n if (trimmedLine.startsWith('data:')) {\n const dataStr = trimmedLine.substring(5).trim()\n\n if (dataStr === 'eof' || trimmedLine === 'eof') {\n break\n }\n\n try {\n const data = JSON.parse(dataStr)\n\n if (currentEvent && this.shouldProcessEvent(currentEvent)) {\n const chunk = this.convertEvent({\n event: currentEvent as TAllowedEvents[number],\n data\n })\n if (chunk) {\n yield chunk\n }\n }\n } catch (e) {\n // handle error\n }\n\n currentEvent = null\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n"],"names":["PluginRegistry","__publicField","plugin","renderer","renderers","a","b","pluginId","filteredRenderers","r","type","CapabilityRegistry","name","handler","priority","entries","entry","insertIndex","e","_a","CapabilityExecutionManager","getHandler","id","args","messageId","strategy","execution","executionId","running","result","error","errorMessage","index","callback","QuickActionRegistry","scope","mode","scopeInfo","config","filter","activeScope","activeScopeInfo","globalInfo","visibleEntries","visible","BaseSubscribable","ContentFocusRuntime","content","message","contentIndex","context","messages","currentMsgIndex","m","currentMsg","currentContentIndex","nextContent","nextMsg","prevContent","prevMsg","lastIndex","messageIdCounter","threadIdCounter","generateMessageId","generateThreadId","ThreadListItemRuntime","state","newTitle","ComposerRuntime","text","isSubmitting","ThreadRuntime","_core","systemEvent","options","conversationId","title","updater","ThreadRuntimeCore","_b","newMessage","resolve","waiters","w","tasks","task","assistantMessageId","assistantMessage","stream","event","userMessage","messageIndex","metadataEvent","capabilityEvent","capabilityContent","artifact","errorEvent","customEvent","updatedMessages","initialContent","status","updatedContent","ThreadListRuntime","mainCore","mainState","mainItem","mainThread","threads","threadItems","threadId","thread","oldMainState","newMainState","newThreadId","newCore","newThread","newState","newItem","createdState","threadsToDelete","threadCore","threadItem","currentState","otherThreadId","AssistantRuntime","lastMessage","j","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","i","order2","n","test3","letter","objectAssign","target","source","from","to","symbols","s","key","require$$0","f","require$$1","g","reactJsxRuntime_production_min","h","p","q","c","k","l","jsxRuntimeModule","AssistantRuntimeContext","createContext","AssistantRuntimeProvider","runtime","children","useAssistantRuntimeContext","useContext","useAssistantRuntime","useThreadList","useThreadListState","setState","useState","useEffect","useCurrentThread","forceUpdate","React","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","value","_useState","inst","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","shimModule","useMessages","useSyncExternalStore","useComposer","setText","setIsSubmitting","messageText","prev","useContentRenderer","contentType","auxiliaryComponent","_c","_d","useContentFocus","useCapability","useCapabilityExecution","capabilityId","setExecution","useReducer","initialExecution","updatedExecution","ChatContext","ChatContextProvider","contexts","setContexts","setContext","useCallback","_","rest","removeContext","getContextData","acc","stringifiedData","dataAcc","clearContexts","useMemo","jsx","useChatContext","usePageContext","contextData","useQuickActionScope","useQuickAction","targetScope","useQuickActions","actions","setActions","useRegisterQuickActions","CapabilityRendererComp","Component","ContentRenderer","component","AuxiliaryRenderer","onClose","onNavigate","onSwitchContext","makeCapability","Capability","BaseSSEStreamAdapter","eventType","allowedEvents","params","signal","url","response","body","reader","decoder","buffer","currentEvent","done","lines","line","trimmedLine","dataStr","data","chunk"],"mappings":"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","x_google_ignoreList":[13,14,15,20,21]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/core/PluginRegistry.ts","../src/core/CapabilityRegistry.ts","../src/core/CapabilityExecutionManager.ts","../src/core/QuickActionRegistry.ts","../src/utils/Subscribable.ts","../src/runtime/ContentFocusRuntime/ContentFocusRuntime.ts","../src/utils/idGenerator.ts","../src/runtime/ThreadListItemRuntime/ThreadListItemRuntime.ts","../src/runtime/ComposerRuntime/ComposerRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntime.ts","../src/runtime/ThreadRuntime/ThreadRuntimeCore.ts","../src/runtime/ThreadListRuntime/ThreadListRuntime.tsx","../src/runtime/AssistantRuntime/AssistantRuntime.tsx","../../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../node_modules/.pnpm/react@17.0.2/node_modules/react/jsx-runtime.js","../src/react/providers/AssistantRuntimeProvider.tsx","../src/react/hooks/useAssistantRuntime.ts","../src/react/hooks/useThreadList.ts","../src/react/hooks/useCurrentThread.ts","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.5.0_react@17.0.2/node_modules/use-sync-external-store/shim/index.js","../src/react/hooks/useMessages.ts","../src/react/hooks/useComposer.ts","../src/react/hooks/useContentRenderer.ts","../src/react/hooks/useContentFocus.ts","../src/react/hooks/useCapability.ts","../src/react/hooks/useCapabilityExecution.ts","../src/react/providers/ChatContextProvider.tsx","../src/react/hooks/usePageContext.ts","../src/react/hooks/useQuickActionScope.ts","../src/react/hooks/useQuickAction.ts","../src/react/hooks/useQuickActions.ts","../src/react/hooks/useRegisterQuickActions.ts","../src/react/components/CapabilityRenderer.tsx","../src/react/components/ContentRenderer.tsx","../src/react/components/AuxiliaryRenderer.tsx","../src/react/utils/makeCapability.tsx","../src/utils/BaseSSEStreamAdapter.ts"],"sourcesContent":["import { ChatPlugin, MessageRenderer } from '../types/plugin'\n\nexport class PluginRegistry {\n private plugins = new Map<string, ChatPlugin>()\n private renderersByType = new Map<string, MessageRenderer[]>()\n\n public registerPlugin(plugin: ChatPlugin): void {\n if (this.plugins.has(plugin.id)) {\n // handle duplicate plugin registration\n // show a warning / error\n }\n\n this.plugins.set(plugin.id, plugin)\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n renderers.push(renderer)\n renderers.sort((a, b) => (b?.priority ?? 0) - (a?.priority ?? 0))\n this.renderersByType.set(renderer.type, renderers)\n })\n }\n\n public unregisterPlugin(pluginId: string): boolean {\n const plugin = this.plugins.get(pluginId)\n if (!plugin) {\n return false\n }\n\n plugin.renderers.forEach(renderer => {\n const renderers = this.renderersByType.get(renderer.type) || []\n const filteredRenderers = renderers.filter(r => !plugin.renderers.includes(r))\n\n if (filteredRenderers.length === 0) {\n this.renderersByType.delete(renderer.type)\n } else {\n this.renderersByType.set(renderer.type, filteredRenderers)\n }\n })\n\n return this.plugins.delete(pluginId)\n }\n\n public getPlugin(pluginId: string): ChatPlugin | undefined {\n return this.plugins.get(pluginId)\n }\n\n public getAllPlugins(): ChatPlugin[] {\n return Array.from(this.plugins.values())\n }\n\n public getRenderersByType(type: string): MessageRenderer[] {\n return this.renderersByType.get(type) || []\n }\n\n public getBestRendererForType(type: string): MessageRenderer | undefined {\n const renderers = this.getRenderersByType(type)\n return renderers[0]\n }\n\n public clear(): void {\n this.plugins.clear()\n this.renderersByType.clear()\n }\n}\n","import { CapabilityHandler, CapabilityRenderer } from '../types/capability'\n\ninterface HandlerEntry {\n handler: CapabilityHandler\n priority: number\n}\n\ninterface RendererEntry {\n renderer: CapabilityRenderer\n priority: number\n}\n\nexport class CapabilityRegistry {\n private handlers = new Map<string, HandlerEntry[]>()\n private renderers = new Map<string, RendererEntry[]>()\n\n public registerHandler(name: string, handler: CapabilityHandler, priority = 0): void {\n const entries = this.handlers.get(name) || []\n const entry: HandlerEntry = { handler, priority }\n\n // Insert in sorted order (highest priority first)\n const insertIndex = entries.findIndex(e => e.priority < priority)\n if (insertIndex === -1) {\n entries.push(entry)\n } else {\n entries.splice(insertIndex, 0, entry)\n }\n\n this.handlers.set(name, entries)\n }\n\n public registerRenderer(name: string, renderer: CapabilityRenderer, priority = 0): void {\n const entries = this.renderers.get(name) || []\n const entry: RendererEntry = { renderer, priority }\n\n // Insert in sorted order (highest priority first)\n const insertIndex = entries.findIndex(e => e.priority < priority)\n if (insertIndex === -1) {\n entries.push(entry)\n } else {\n entries.splice(insertIndex, 0, entry)\n }\n\n this.renderers.set(name, entries)\n }\n\n public unregister(name: string): void {\n this.handlers.delete(name)\n this.renderers.delete(name)\n }\n\n public getHandler(name: string): CapabilityHandler | undefined {\n const entries = this.handlers.get(name)\n return entries?.[0]?.handler\n }\n\n public getRenderer(name: string): CapabilityRenderer | undefined {\n const entries = this.renderers.get(name)\n return entries?.[0]?.renderer\n }\n\n public getStrategy() {\n return 'queue'\n }\n\n public hasHandler(name: string): boolean {\n const entries = this.handlers.get(name)\n return entries !== undefined && entries.length > 0\n }\n\n public hasRenderer(name: string): boolean {\n const entries = this.renderers.get(name)\n return entries !== undefined && entries.length > 0\n }\n\n public clear(): void {\n this.handlers.clear()\n this.renderers.clear()\n }\n\n public getAllCapabilityNames(): string[] {\n return Array.from(new Set([...this.handlers.keys(), ...this.renderers.keys()]))\n }\n}\n","import { CapabilityExecution, CapabilityHandler } from '../types/capability'\n\nexport class CapabilityExecutionManager {\n private executions = new Map<string, CapabilityExecution>()\n private executionQueue: string[] = []\n private isProcessing = false\n private runningByName = new Map<string, string[]>()\n private subscribers = new Set<(executionId: string) => void>()\n private getHandler: (name: string) => CapabilityHandler | undefined\n\n constructor(getHandler: (name: string) => CapabilityHandler | undefined) {\n this.getHandler = getHandler\n }\n\n public async executeCapability<TArgs, TResult>(\n name: string,\n id: string,\n args: TArgs,\n messageId: string,\n strategy = 'queue'\n ): Promise<void> {\n const handler = this.getHandler(name)\n if (!handler) {\n console.warn(`No handler registered for capability: ${name}`)\n return\n }\n\n const execution: CapabilityExecution<TArgs, TResult> = {\n id,\n name,\n args,\n status: { type: 'queued' },\n timestamp: Date.now(),\n messageId\n }\n\n this.executions.set(id, execution)\n this.notifySubscribers(id)\n\n switch (strategy) {\n case 'queue':\n default:\n this.executionQueue.push(id)\n break\n }\n\n if (!this.isProcessing) {\n this.processQueue()\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessing || this.executionQueue.length === 0) {\n return\n }\n\n this.isProcessing = true\n\n while (this.executionQueue.length > 0) {\n const executionId = this.executionQueue.shift()!\n const execution = this.executions.get(executionId)\n\n if (!execution) continue\n\n const handler = this.getHandler(execution.name)\n if (!handler) continue\n\n execution.status = { type: 'running' }\n this.notifySubscribers(executionId)\n\n const running = this.runningByName.get(execution.name) || []\n running.push(executionId)\n this.runningByName.set(execution.name, running)\n\n try {\n const result = await handler.execute(execution.args, {\n messageId: execution.messageId,\n capabilityId: executionId\n })\n\n execution.status = { type: 'complete', result }\n execution.result = result\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n execution.status = { type: 'error', error: errorMessage }\n execution.error = errorMessage\n } finally {\n const running = this.runningByName.get(execution.name) || []\n const index = running.indexOf(executionId)\n if (index > -1) {\n running.splice(index, 1)\n }\n if (running.length === 0) {\n this.runningByName.delete(execution.name)\n } else {\n this.runningByName.set(execution.name, running)\n }\n\n this.notifySubscribers(executionId)\n }\n }\n\n this.isProcessing = false\n }\n\n public getExecution(id: string): CapabilityExecution | undefined {\n return this.executions.get(id)\n }\n\n public getExecutionsByMessage(messageId: string): CapabilityExecution[] {\n return Array.from(this.executions.values()).filter(e => e.messageId === messageId)\n }\n\n public subscribe(callback: (executionId: string) => void): () => void {\n this.subscribers.add(callback)\n return () => this.subscribers.delete(callback)\n }\n\n private notifySubscribers(executionId: string): void {\n this.subscribers.forEach(callback => callback(executionId))\n }\n\n public clear(): void {\n this.executions.clear()\n this.executionQueue = []\n this.runningByName.clear()\n }\n}\n","import type { QuickAction, QuickActionConfig, QuickActionFilter, QuickActionScopeMode } from '../types/quick-action'\n\ninterface QuickActionEntry {\n config: QuickActionConfig\n priority: number\n}\n\ninterface ScopeInfo {\n mode: QuickActionScopeMode\n actions: Map<string, QuickActionEntry>\n}\n\nexport class QuickActionRegistry {\n private scopes = new Map<string, ScopeInfo>()\n private scopeStack: string[] = []\n\n constructor() {\n // Initialize global scope\n this.scopes.set('global', {\n mode: 'merge',\n actions: new Map()\n })\n this.scopeStack.push('global')\n }\n\n /**\n * Activate a scope with the specified mode.\n * This pushes the scope onto the stack, making it active.\n */\n public activateScope(scope: string, mode: QuickActionScopeMode = 'merge'): void {\n // Create scope if it doesn't exist\n if (!this.scopes.has(scope)) {\n this.scopes.set(scope, {\n mode,\n actions: new Map()\n })\n } else {\n // Update mode if scope already exists\n const scopeInfo = this.scopes.get(scope)!\n scopeInfo.mode = mode\n }\n\n // Add to stack if not already present\n if (!this.scopeStack.includes(scope)) {\n this.scopeStack.push(scope)\n }\n }\n\n /**\n * Deactivate a scope, removing it from the stack.\n * This restores the previous scope as active.\n */\n public deactivateScope(scope: string): void {\n const index = this.scopeStack.indexOf(scope)\n if (index !== -1 && scope !== 'global') {\n this.scopeStack.splice(index, 1)\n }\n }\n\n /**\n * Get the currently active scope (top of stack).\n */\n public getActiveScope(): string {\n return this.scopeStack[this.scopeStack.length - 1] || 'global'\n }\n\n /**\n * Get the full scope stack.\n */\n public getScopeStack(): string[] {\n return [...this.scopeStack]\n }\n\n /**\n * Register a quick action in the specified scope.\n */\n public register(config: QuickActionConfig, scope: string = 'global'): void {\n const priority = config.priority ?? 0\n\n // Ensure scope exists\n if (!this.scopes.has(scope)) {\n this.scopes.set(scope, {\n mode: 'merge',\n actions: new Map()\n })\n }\n\n const scopeInfo = this.scopes.get(scope)!\n\n if (scopeInfo.actions.has(config.id)) {\n console.warn(`QuickAction with id \"${config.id}\" is already registered in scope \"${scope}\". Overwriting.`)\n }\n\n scopeInfo.actions.set(config.id, {\n config,\n priority\n })\n }\n\n /**\n * Unregister a quick action from the specified scope.\n */\n public unregister(id: string, scope: string = 'global'): boolean {\n const scopeInfo = this.scopes.get(scope)\n if (!scopeInfo) {\n return false\n }\n\n return scopeInfo.actions.delete(id)\n }\n\n /**\n * Clear all actions in the specified scope.\n */\n public clearScope(scope: string): void {\n const scopeInfo = this.scopes.get(scope)\n if (scopeInfo) {\n scopeInfo.actions.clear()\n }\n }\n\n /**\n * Get all visible quick actions based on the active scope and its mode.\n */\n public async getVisible(filter?: QuickActionFilter): Promise<QuickAction[]> {\n const activeScope = this.getActiveScope()\n const activeScopeInfo = this.scopes.get(activeScope)\n\n if (!activeScopeInfo) {\n return []\n }\n\n const mode = activeScopeInfo.mode\n let entries: QuickActionEntry[] = []\n\n // Determine which scopes to include based on mode\n if (mode === 'replace') {\n // Only show actions from the active scope\n entries = Array.from(activeScopeInfo.actions.values())\n } else if (mode === 'append') {\n // Show actions from all scopes in the stack\n for (const scope of this.scopeStack) {\n const scopeInfo = this.scopes.get(scope)\n if (scopeInfo) {\n entries.push(...Array.from(scopeInfo.actions.values()))\n }\n }\n } else {\n // mode === 'merge' (default)\n // Show global + active scope\n const globalInfo = this.scopes.get('global')\n if (globalInfo) {\n entries.push(...Array.from(globalInfo.actions.values()))\n }\n if (activeScope !== 'global') {\n entries.push(...Array.from(activeScopeInfo.actions.values()))\n }\n }\n\n // Evaluate conditions in parallel\n const results = await Promise.all(\n entries.map(async entry => {\n if (!entry.config.condition) {\n return { entry, visible: true }\n }\n try {\n const visible = await entry.config.condition()\n return { entry, visible }\n } catch (error) {\n console.error(`Error evaluating condition for quick action \"${entry.config.id}\":`, error)\n return { entry, visible: false }\n }\n })\n )\n\n // Filter visible actions\n let visibleEntries = results.filter(r => r.visible).map(r => r.entry)\n\n // Sort by priority (highest first)\n visibleEntries.sort((a, b) => b.priority - a.priority)\n\n // Apply scope filter if specified\n if (filter?.scope) {\n visibleEntries = visibleEntries.filter(e => e.config.scope === filter.scope)\n }\n\n // Map to QuickAction (omitting condition function)\n return visibleEntries.map(entry => ({\n id: entry.config.id,\n label: entry.config.label,\n prompt: entry.config.prompt,\n icon: entry.config.icon,\n description: entry.config.description,\n priority: entry.config.priority,\n scope: entry.config.scope\n }))\n }\n\n /**\n * Get a single quick action by ID from the specified scope.\n */\n public get(id: string, scope: string = 'global'): QuickAction | undefined {\n const scopeInfo = this.scopes.get(scope)\n if (!scopeInfo) {\n return undefined\n }\n\n const entry = scopeInfo.actions.get(id)\n if (!entry) {\n return undefined\n }\n\n return {\n id: entry.config.id,\n label: entry.config.label,\n prompt: entry.config.prompt,\n icon: entry.config.icon,\n description: entry.config.description,\n priority: entry.config.priority,\n scope: entry.config.scope\n }\n }\n\n /**\n * Check if a quick action exists in the specified scope.\n */\n public has(id: string, scope: string = 'global'): boolean {\n const scopeInfo = this.scopes.get(scope)\n return scopeInfo ? scopeInfo.actions.has(id) : false\n }\n}\n","export type Unsubscribe = () => void\n\nexport abstract class BaseSubscribable {\n private _subscriptions = new Set<() => void>()\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback)\n return () => {\n this._subscriptions.delete(callback)\n }\n }\n\n protected notifySubscribers(): void {\n for (const callback of this._subscriptions) {\n callback()\n }\n }\n\n protected getSubscriberCount(): number {\n return this._subscriptions.size\n }\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport type FocusContext = 'detail'\n\nexport interface ContentFocusState {\n isActive: boolean\n context: FocusContext | null\n focusedContent: MessageContent | null\n focusedMessage: Message | null\n focusedMessageId: string | null\n focusedContentIndex: number | null\n}\n\nexport class ContentFocusRuntime extends BaseSubscribable {\n private _state: ContentFocusState = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n\n public get state(): ContentFocusState {\n return this._state\n }\n\n public get isActive(): boolean {\n return this._state.isActive\n }\n\n public get context(): FocusContext | null {\n return this._state.context\n }\n\n public get focusedContent(): MessageContent | null {\n return this._state.focusedContent\n }\n\n public get focusedMessage(): Message | null {\n return this._state.focusedMessage\n }\n\n public get focusedMessageId(): string | null {\n return this._state.focusedMessageId\n }\n\n public get focusedContentIndex(): number | null {\n return this._state.focusedContentIndex\n }\n\n public focus(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n this._state = {\n isActive: true,\n context,\n focusedContent: content,\n focusedMessage: message,\n focusedMessageId: message.id,\n focusedContentIndex: contentIndex\n }\n this.notifySubscribers()\n }\n\n public blur(): void {\n this._state = {\n isActive: false,\n context: null,\n focusedContent: null,\n focusedMessage: null,\n focusedMessageId: null,\n focusedContentIndex: null\n }\n this.notifySubscribers()\n }\n\n public toggle(\n content: MessageContent,\n message: Message,\n contentIndex: number,\n context: FocusContext = 'detail'\n ): void {\n if (\n this._state.isActive &&\n this._state.focusedMessageId === message.id &&\n this._state.focusedContentIndex === contentIndex &&\n this._state.context === context\n ) {\n this.blur()\n } else {\n this.focus(content, message, contentIndex, context)\n }\n }\n\n public switchContext(context: FocusContext): void {\n if (this._state.isActive && this._state.focusedContent) {\n this._state = {\n ...this._state,\n context\n }\n this.notifySubscribers()\n }\n }\n\n public focusNext(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex + 1 < currentMsg.content.length) {\n const nextContent = currentMsg.content[currentContentIndex + 1]\n this.focus(nextContent, currentMsg, currentContentIndex + 1, this._state.context || 'detail')\n return\n }\n\n // Try first content in next message\n if (currentMsgIndex + 1 < messages.length) {\n const nextMsg = messages[currentMsgIndex + 1]\n if (nextMsg.content.length > 0) {\n this.focus(nextMsg.content[0], nextMsg, 0, this._state.context || 'detail')\n }\n }\n }\n\n public focusPrevious(messages: readonly Message[]): void {\n if (!this._state.focusedMessageId || !messages.length) return\n\n const currentMsgIndex = messages.findIndex(m => m.id === this._state.focusedMessageId)\n if (currentMsgIndex === -1) return\n\n const currentMsg = messages[currentMsgIndex]\n const currentContentIndex = this._state.focusedContentIndex ?? 0\n\n if (currentContentIndex > 0) {\n const prevContent = currentMsg.content[currentContentIndex - 1]\n this.focus(prevContent, currentMsg, currentContentIndex - 1, this._state.context || 'detail')\n return\n }\n\n // Try last content in previous message\n if (currentMsgIndex > 0) {\n const prevMsg = messages[currentMsgIndex - 1]\n if (prevMsg.content.length > 0) {\n const lastIndex = prevMsg.content.length - 1\n this.focus(prevMsg.content[lastIndex], prevMsg, lastIndex, this._state.context || 'detail')\n }\n }\n }\n}\n","let messageIdCounter = 0\nlet threadIdCounter = 0\n\nexport function generateMessageId(): string {\n return `msg-${Date.now()}-${++messageIdCounter}`\n}\n\nexport function generateThreadId(): string {\n return `thread-${Date.now()}-${++threadIdCounter}`\n}\n\nexport function generateId(prefix = 'id'): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n}\n","import { ThreadListItemState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\n\nexport interface ThreadListItemRuntimeConfig {\n state: ThreadListItemState\n onSwitchTo: (threadId: string) => Promise<void>\n onRename: (threadId: string, title: string) => Promise<void>\n onDelete: (threadId: string) => Promise<void>\n}\n\nexport class ThreadListItemRuntime extends BaseSubscribable {\n private _state: ThreadListItemState\n\n constructor(private config: ThreadListItemRuntimeConfig) {\n super()\n this._state = config.state\n }\n\n public get state(): ThreadListItemState {\n return this._state\n }\n\n public getState(): ThreadListItemState {\n return this._state\n }\n\n public updateState(state: ThreadListItemState): void {\n this._state = state\n this.notifySubscribers()\n }\n\n public async switchTo(): Promise<void> {\n await this.config.onSwitchTo(this._state.id)\n }\n\n public async rename(newTitle: string): Promise<void> {\n await this.config.onRename(this._state.id, newTitle)\n }\n\n public async delete(): Promise<void> {\n await this.config.onDelete(this._state.id)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ComposerState {\n text: string\n isSubmitting: boolean\n}\n\nexport class ComposerRuntime extends BaseSubscribable {\n private _text: string = ''\n private _isSubmitting: boolean = false\n\n public get text(): string {\n return this._text\n }\n\n public get isSubmitting(): boolean {\n return this._isSubmitting\n }\n\n public getState(): ComposerState {\n return {\n text: this._text,\n isSubmitting: this._isSubmitting\n }\n }\n\n public setText(text: string): void {\n this._text = text\n this.notifySubscribers()\n }\n\n public clear(): void {\n this._text = ''\n this.notifySubscribers()\n }\n\n public setSubmitting(isSubmitting: boolean): void {\n this._isSubmitting = isSubmitting\n this.notifySubscribers()\n }\n}\n\nexport default ComposerRuntime\n","import { SystemEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, TextContent } from '../../types/message'\nimport { RuntimeCapabilities, ThreadState } from '../../types/thread'\nimport { BaseSubscribable, Unsubscribe } from '../../utils/Subscribable'\nimport ComposerRuntime from '../ComposerRuntime/ComposerRuntime'\nimport { ThreadRuntimeCore } from './ThreadRuntimeCore'\n\nexport class ThreadRuntime extends BaseSubscribable {\n public readonly composer: ComposerRuntime\n\n constructor(private _core: ThreadRuntimeCore) {\n super()\n this.composer = new ComposerRuntime()\n\n // Subscribe to core changes and propagate\n this._core.subscribe(() => {\n this.notifySubscribers()\n })\n }\n\n public get messages(): readonly Message[] {\n return this._core.messages\n }\n\n public get isRunning(): boolean {\n return this._core.isRunning\n }\n\n public get isDisabled(): boolean {\n return this._core.isDisabled\n }\n\n public get isWaitingForUser(): boolean {\n return this._core.isWaitingForUser\n }\n\n public get pendingCapability(): { capabilityId: string; capabilityName: string } | null {\n return this._core.pendingCapability\n }\n\n public get capabilities(): RuntimeCapabilities {\n return this._core.capabilities\n }\n\n public get conversationId(): string | undefined {\n return this._core.conversationId\n }\n\n public get title(): string | undefined {\n return this._core.title\n }\n\n public getState(): ThreadState {\n return {\n threadId: 'main', // Will be set by ThreadListRuntime\n isDisabled: this._core.isDisabled,\n isRunning: this._core.isRunning,\n isWaitingForUser: this._core.isWaitingForUser,\n capabilities: this._core.capabilities,\n conversationId: this._core.conversationId,\n title: this._core.title\n }\n }\n\n public append(message: AppendMessage): void {\n this._core.append(message)\n }\n\n public async send(text: string): Promise<void> {\n if (!text.trim()) return\n\n this.composer.setSubmitting(true)\n\n try {\n // If waiting for user action, auto-cancel the pending capability first\n if (this._core.isWaitingForUser && this._core.pendingCapability) {\n await this._core.startSystemEventRun({\n event_type: 'action_cancelled',\n capability_id: this._core.pendingCapability.capabilityName,\n result: { success: false }\n })\n }\n\n this.composer.clear()\n await this._core.startRun({\n role: 'user',\n content: [{ type: 'text', data: text } as TextContent]\n })\n } catch (e) {\n // TODO: Handle error\n } finally {\n this.composer.setSubmitting(false)\n }\n }\n\n /**\n * Dispatches a system event (e.g. a user click on an elicitation card).\n *\n * Prior to this change, this method wrapped startSystemEventRun in a\n * try/catch that silently swallowed the \"A run is already in progress\"\n * error thrown by the core when _isRunning was still true — causing\n * clicks fired during the tail of the previous run to disappear.\n *\n * Now we await waitForIdle() before dispatching so the event is\n * reliably delivered as soon as the in-flight run completes. Callers\n * do not need their own queueing primitive.\n */\n public async sendSystemEvent(systemEvent: SystemEvent): Promise<void> {\n await this._core.waitForIdle()\n await this._core.startSystemEventRun(systemEvent)\n }\n\n /**\n * Registers a generic background task that keeps the thread reported as\n * running for as long as it is active, even when no stream run is in\n * flight. Use this for UI-driven async work (e.g. a card polling a status\n * API) so the composer shows a running/stop affordance. The work is\n * cancelled when the user presses stop (cancelRun), which invokes the\n * provided onCancel callback. Returns an opaque id for stopBackgroundTask.\n */\n public startBackgroundTask(options?: { onCancel?: () => void }): string {\n return this._core.startBackgroundTask(options)\n }\n\n /**\n * Removes a previously registered background task by its id.\n */\n public stopBackgroundTask(id: string): void {\n this._core.stopBackgroundTask(id)\n }\n\n public cancelRun(): void {\n this._core.cancelRun()\n }\n\n public clear(): void {\n this._core.clear()\n }\n\n public reset(messages: Message[] = []): void {\n this._core.reset(messages)\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._core.setConversationId(conversationId)\n }\n\n public setTitle(title: string | undefined): void {\n this._core.setTitle(title)\n }\n\n public updateMessageContent(messageId: string, updater: (content: MessageContent[]) => MessageContent[]): void {\n this._core.updateMessageContent(messageId, updater)\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n return super.subscribe(callback)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { CapabilityContent } from '../../types'\nimport { StreamAdapter, StreamEvent, SystemEvent } from '../../types/adapters'\nimport { AppendMessage, Message, MessageContent, MessageStatus } from '../../types/message'\nimport { RuntimeCapabilities } from '../../types/thread'\nimport { generateMessageId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\n\nexport interface ThreadRuntimeCoreConfig {\n streamAdapter: StreamAdapter\n initialMessages?: Message[]\n onMessagesChange?: (messages: Message[]) => void\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadRuntimeCore extends BaseSubscribable {\n private _messages: Message[] = []\n private _isRunning = false\n private _isDisabled = false\n private _isWaitingForUser = false\n private _pendingCapability: { capabilityId: string; capabilityName: string } | null = null\n private _abortController: AbortController | null = null\n private _conversationId?: string\n private _title?: string\n\n // Resolvers waiting for _isRunning to flip to false. Drained in the\n // finally block of every run path so callers can serialize their\n // dispatch against an in-progress run instead of having their error\n // swallowed by the caller's try/catch.\n private _idleWaiters: Array<() => void> = []\n\n // Generic background tasks that hold the thread in a \"running\" state\n // without an active stream run. Any UI-driven async work (e.g. a card\n // that polls a status API) can register one to keep the composer\n // showing a running/stop affordance, and is cancelled alongside the\n // run when the user presses stop. Keyed by an opaque task id; the\n // optional onCancel is invoked when the task is cancelled via cancelRun.\n private _backgroundTasks = new Map<string, { onCancel?: () => void }>()\n\n // Track current part being accumulated\n private _currentPart: {\n messageId: string\n contentIndex: number\n type: string\n parentId?: string\n } | null = null\n\n constructor(private config: ThreadRuntimeCoreConfig) {\n super()\n if (config.initialMessages) {\n this._messages = [...config.initialMessages]\n }\n }\n\n public get messages(): readonly Message[] {\n return this._messages\n }\n\n public get isRunning(): boolean {\n return this._isRunning || this._backgroundTasks.size > 0\n }\n\n public get isDisabled(): boolean {\n return this._isDisabled\n }\n\n public get isWaitingForUser(): boolean {\n return this._isWaitingForUser\n }\n\n public get pendingCapability(): { capabilityId: string; capabilityName: string } | null {\n return this._pendingCapability\n }\n\n public get conversationId(): string | undefined {\n return this._conversationId\n }\n\n public get title(): string | undefined {\n return this._title\n }\n\n public get capabilities(): RuntimeCapabilities {\n return {\n cancel: true,\n edit: false,\n reload: false,\n speech: false,\n attachments: false,\n feedback: false\n }\n }\n\n private updateMessages(messages: Message[]): void {\n this._messages = messages\n this.config.onMessagesChange?.(this._messages)\n this.notifySubscribers()\n }\n\n public append(message: AppendMessage): void {\n const newMessage: Message = {\n id: message.id || generateMessageId(),\n parentId: message.parentId,\n role: message.role,\n content: message.content,\n status: message.status || { type: 'complete' },\n timestamp: message.timestamp || Date.now(),\n metadata: message.metadata\n }\n\n this.updateMessages([...this._messages, newMessage])\n }\n\n /**\n * Resolves when _isRunning flips to false. Use this to queue a\n * follow-on dispatch (e.g. a system event from a card click that\n * fires during the tail of the previous run) without racing the\n * in-progress run's guard.\n *\n * Resolves immediately if nothing is running.\n */\n public waitForIdle(): Promise<void> {\n if (!this._isRunning) return Promise.resolve()\n return new Promise<void>(resolve => {\n this._idleWaiters.push(resolve)\n })\n }\n\n private drainIdleWaiters(): void {\n if (this._idleWaiters.length === 0) return\n const waiters = this._idleWaiters\n this._idleWaiters = []\n for (const w of waiters) {\n try {\n w()\n } catch {\n // Resolver callbacks should not throw; swallow defensively so\n // a single bad waiter can't block the rest.\n }\n }\n }\n\n /**\n * Registers a generic background task that keeps the thread reported as\n * running (isRunning === true) for as long as it is active, even when no\n * stream run is in flight. Use this for UI-driven async work — e.g. a card\n * that polls a status API — so the composer shows a running/stop\n * affordance and the work is cancelled when the user presses stop.\n *\n * Returns an opaque id to pass to stopBackgroundTask. The optional onCancel\n * callback is invoked if the task is cancelled via cancelRun (stop button).\n */\n public startBackgroundTask(options?: { onCancel?: () => void }): string {\n const id = `bg-${Date.now()}-${Math.random().toString(36).slice(2)}`\n this._backgroundTasks.set(id, { onCancel: options?.onCancel })\n this.notifySubscribers()\n return id\n }\n\n /**\n * Removes a previously registered background task. Once the last task is\n * removed (and no run is in flight) any idle waiters are drained so queued\n * dispatches can proceed.\n */\n public stopBackgroundTask(id: string): void {\n if (this._backgroundTasks.delete(id)) {\n if (!this.isRunning) {\n this.drainIdleWaiters()\n }\n this.notifySubscribers()\n }\n }\n\n private cancelBackgroundTasks(): void {\n if (this._backgroundTasks.size === 0) return\n const tasks = [...this._backgroundTasks.values()]\n this._backgroundTasks.clear()\n for (const task of tasks) {\n try {\n task.onCancel?.()\n } catch {\n // onCancel callbacks should not throw; swallow defensively so a\n // single bad task can't block cancelling the rest.\n }\n }\n if (!this.isRunning) {\n this.drainIdleWaiters()\n }\n this.notifySubscribers()\n }\n\n public async startSystemEventRun(systemEvent: SystemEvent): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this._isWaitingForUser = false\n this._pendingCapability = null\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal,\n systemEvent\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null\n this.notifySubscribers()\n this.drainIdleWaiters()\n }\n }\n\n public async startRun(userMessage: AppendMessage): Promise<void> {\n if (this._isRunning) {\n throw new Error('A run is already in progress')\n }\n\n this._isWaitingForUser = false\n this._pendingCapability = null\n this.append(userMessage)\n this._isRunning = true\n this._abortController = new AbortController()\n this._currentPart = null // Reset current part\n\n const assistantMessageId = generateMessageId()\n const assistantMessage: Message = {\n id: assistantMessageId,\n role: 'assistant',\n content: [],\n status: { type: 'running' },\n timestamp: Date.now()\n }\n\n this.updateMessages([...this._messages, assistantMessage])\n\n try {\n const stream = this.config.streamAdapter.stream({\n messages: this._messages,\n conversationId: this._conversationId,\n signal: this._abortController.signal\n })\n\n for await (const event of stream) {\n if (this._abortController.signal.aborted) {\n break\n }\n\n this.handleStreamEvent(assistantMessageId, event.event)\n }\n\n this.updateMessageStatus(assistantMessageId, { type: 'complete' })\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, { type: 'cancelled' })\n } else {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n this.completeStreamingContent(assistantMessageId)\n this.updateMessageStatus(assistantMessageId, {\n type: 'error',\n error: errorMessage\n })\n }\n } finally {\n this._isRunning = false\n this._abortController = null\n this._currentPart = null // Clean up\n this.notifySubscribers()\n this.drainIdleWaiters()\n }\n }\n\n private handleStreamEvent(messageId: string, event: StreamEvent): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Handle core events with type guards\n if (event.type === 'part-start') {\n this.handlePartStart(message, event as Extract<StreamEvent, { type: 'part-start' }>)\n } else if (event.type === 'text-delta' || event.type === 'assistant_thought') {\n this.handleTextDelta(message, event as Extract<StreamEvent, { type: 'text-delta' }>)\n } else if (event.type === 'part-finish') {\n this.handlePartFinish()\n } else if (event.type === 'metadata') {\n const metadataEvent = event as Extract<StreamEvent, { type: 'metadata' }>\n message.metadata = {\n ...message.metadata,\n conversationId: metadataEvent.conversationId,\n interactionId: metadataEvent.interactionId\n }\n\n if (metadataEvent.conversationId && !this._conversationId) {\n this._conversationId = metadataEvent.conversationId\n }\n\n if (metadataEvent.title && !this._title) {\n this._title = metadataEvent.title\n }\n } else if (event.type === 'capability_execution') {\n const capabilityEvent = event as Extract<StreamEvent, { type: 'capability_execution' }>\n const capabilityContent = {\n type: 'capability',\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName,\n args: capabilityEvent.args\n } as CapabilityContent\n\n message.content.push(capabilityContent)\n\n // Check if artifact field exists (from stream event)\n const artifact = (capabilityEvent as any).artifact\n if (artifact) {\n message.content.push({\n type: 'artifact',\n data: {\n capabilityName: capabilityEvent.capabilityName,\n originalArgs: capabilityEvent.args,\n displayData: {\n name: artifact.displayName,\n type: artifact.displayType\n }\n }\n })\n }\n\n // Execute capability if manager is available\n if (this.config.capabilityExecutionManager) {\n this.config.capabilityExecutionManager.executeCapability(\n capabilityEvent.capabilityName,\n capabilityEvent.capabilityId,\n capabilityEvent.args,\n messageId,\n capabilityEvent.strategy\n )\n }\n\n // Track waiting_for_user status so the UI can show a waiting indicator\n const capabilityStatus = (capabilityEvent as any).status\n if (capabilityStatus === 'waiting_for_user') {\n this._isWaitingForUser = true\n this._pendingCapability = {\n capabilityId: capabilityEvent.capabilityId,\n capabilityName: capabilityEvent.capabilityName\n }\n }\n } else if (event.type === 'error') {\n const errorEvent = event as Extract<StreamEvent, { type: 'error' }>\n message.content = [\n ...message.content,\n {\n type: 'error',\n data: errorEvent.error\n }\n ]\n } else {\n // Handle custom events\n const customEvent = event as Extract<StreamEvent, { data?: any }>\n message.content = [\n ...message.content,\n {\n type: customEvent.type,\n data: customEvent.data,\n parentId: customEvent.parentId\n }\n ]\n }\n\n // Update message with new reference\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private handlePartStart(message: Message, event: Extract<StreamEvent, { type: 'part-start' }>): void {\n const contentIndex = message.content.length\n\n // Create initial content based on type\n let initialContent: MessageContent\n\n switch (event.part.type) {\n case 'assistant_thought':\n // Initialize as array for assistant thoughts\n initialContent = {\n type: event.part.type,\n data: [],\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n case 'text':\n // Initialize as empty string for text\n initialContent = {\n type: event.part.type,\n data: '',\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n break\n\n default:\n initialContent = {\n type: event.part.type,\n parentId: event.part.parentId,\n status: { type: 'streaming' }\n } as any\n }\n\n // Add to message with new reference\n message.content = [...message.content, initialContent]\n\n // Track current part\n this._currentPart = {\n messageId: message.id,\n contentIndex,\n type: event.part.type,\n parentId: event.part.parentId\n }\n }\n\n private handleTextDelta(message: Message, event: Extract<StreamEvent, { type: 'text-delta' }>): void {\n if (!this._currentPart) {\n console.warn('Received text-delta without part-start')\n return\n }\n\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content.type === 'assistant_thought') {\n // For assistant thoughts, push each delta as a new array item\n if (!Array.isArray(content.data)) {\n content.data = []\n }\n if (event.delta.trim()) {\n content.data.push(event.delta.trim())\n }\n } else {\n // For text and other types, concatenate into a single string\n content.data = (content.data || '') + event.delta\n }\n }\n\n private handlePartFinish(): void {\n if (!this._currentPart) {\n console.warn('Received part-finish without part-start')\n return\n }\n\n // Find the message and content\n const messageIndex = this._messages.findIndex(m => m.id === this._currentPart!.messageId)\n if (messageIndex !== -1) {\n const message = this._messages[messageIndex]\n const content = message.content[this._currentPart.contentIndex] as any\n\n if (content) {\n // Mark this content as complete\n content.status = { type: 'complete' }\n\n // Update message to trigger re-render\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n this.updateMessages(updatedMessages)\n }\n }\n\n // Part is complete, clear tracking\n this._currentPart = null\n }\n\n private updateMessageStatus(messageId: string, status: MessageStatus): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n {\n ...this._messages[messageIndex],\n status\n },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n private completeStreamingContent(messageId: string): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n\n // Check if any content is streaming\n const hasStreamingContent = message.content.some(content => content.status?.type === 'streaming')\n\n if (!hasStreamingContent) return\n\n // Update all streaming content to complete\n const updatedContent = message.content.map(content => {\n if (content.status?.type === 'streaming') {\n return { ...content, status: { type: 'complete' } as const }\n }\n return content\n })\n\n // Update the message with completed content\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, content: updatedContent, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n\n public clear(): void {\n this.updateMessages([])\n }\n\n public cancelRun(): void {\n // Abort an in-flight stream run if there is one. Background tasks are\n // cancelled regardless, so pressing stop also halts UI-driven polling\n // even when no stream run is active.\n if (this._isRunning && this._abortController) {\n this._abortController.abort()\n }\n\n this.cancelBackgroundTasks()\n }\n\n public reset(messages: Message[] = []): void {\n this.updateMessages([...messages])\n }\n\n public setConversationId(conversationId: string | undefined): void {\n this._conversationId = conversationId\n this.notifySubscribers()\n }\n\n public setTitle(title: string | undefined): void {\n this._title = title\n this.notifySubscribers()\n }\n\n public updateMessageContent(messageId: string, updater: (content: MessageContent[]) => MessageContent[]): void {\n const messageIndex = this._messages.findIndex(m => m.id === messageId)\n if (messageIndex === -1) return\n\n const message = this._messages[messageIndex]\n const updatedContent = updater(message.content)\n\n const updatedMessages = [\n ...this._messages.slice(0, messageIndex),\n { ...message, content: updatedContent, timestamp: Date.now() },\n ...this._messages.slice(messageIndex + 1)\n ]\n\n this.updateMessages(updatedMessages)\n }\n}\n","import { CapabilityExecutionManager } from '../../core'\nimport { StreamAdapter, ThreadListAdapter, ThreadListLoadOptions } from '../../types/adapters'\nimport { ThreadListItemState } from '../../types/thread'\nimport { generateThreadId } from '../../utils/idGenerator'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ThreadListItemRuntime } from '../ThreadListItemRuntime/ThreadListItemRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\nimport { ThreadRuntimeCore } from '../ThreadRuntime/ThreadRuntimeCore'\n\nexport interface ThreadListState {\n mainThreadId: string\n threads: readonly string[]\n isLoading: boolean\n threadItems: Record<string, ThreadListItemState>\n searchQuery?: string\n}\n\nexport interface ThreadListRuntimeConfig {\n streamAdapter: StreamAdapter\n threadListAdapter?: ThreadListAdapter\n capabilityExecutionManager?: CapabilityExecutionManager\n}\n\nexport class ThreadListRuntime extends BaseSubscribable {\n private _mainThreadId: string\n private _threads = new Map<string, ThreadRuntime>()\n private _threadItems = new Map<string, ThreadListItemRuntime>()\n private _threadStates = new Map<string, ThreadListItemState>()\n private _isLoading = false\n private _searchQuery: string | undefined\n private _abortController: AbortController | null = null\n public readonly main: ThreadRuntime\n\n constructor(private config: ThreadListRuntimeConfig) {\n super()\n\n // Create main thread\n this._mainThreadId = generateThreadId()\n const mainCore = new ThreadRuntimeCore({\n streamAdapter: config.streamAdapter,\n capabilityExecutionManager: config.capabilityExecutionManager\n })\n this.main = new ThreadRuntime(mainCore)\n this._threads.set(this._mainThreadId, this.main)\n\n // Create main thread state\n const mainState: ThreadListItemState = {\n id: this._mainThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: true,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(this._mainThreadId, mainState)\n\n // Create main thread item\n const mainItem = new ThreadListItemRuntime({\n state: mainState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(this._mainThreadId, mainItem)\n }\n\n public get isLoading(): boolean {\n return this._isLoading\n }\n\n /**\n * Get the currently active main thread\n */\n public getMainThread(): ThreadRuntime {\n const mainThread = this._threads.get(this._mainThreadId)\n if (!mainThread) {\n return this.main\n }\n return mainThread\n }\n\n public getState(): ThreadListState {\n const threads: string[] = []\n const threadItems: Record<string, ThreadListItemState> = {}\n\n for (const [id, state] of this._threadStates) {\n threadItems[id] = state\n if (state.status.type === 'regular') {\n threads.push(id)\n }\n }\n\n return {\n mainThreadId: this._mainThreadId,\n threads,\n isLoading: this._isLoading,\n threadItems,\n searchQuery: this._searchQuery\n }\n }\n\n public async switchToThread(threadId: string): Promise<void> {\n const thread = this._threads.get(threadId)\n if (!thread) {\n throw new Error(`Thread ${threadId} not found`)\n }\n\n // Update old main thread\n const oldMainState = this._threadStates.get(this._mainThreadId)\n if (oldMainState) {\n oldMainState.isMain = false\n this._threadStates.set(this._mainThreadId, oldMainState)\n this._threadItems.get(this._mainThreadId)?.updateState(oldMainState)\n }\n\n // Update new main thread\n this._mainThreadId = threadId\n const newMainState = this._threadStates.get(threadId)\n if (newMainState) {\n newMainState.isMain = true\n this._threadStates.set(threadId, newMainState)\n this._threadItems.get(threadId)?.updateState(newMainState)\n\n // Update thread's conversationId and title\n thread.setConversationId(newMainState.conversationId)\n thread.setTitle(newMainState.title)\n }\n\n // Load thread messages if adapter exists\n if (this.config.threadListAdapter && newMainState?.conversationId) {\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const messages = await this.config.threadListAdapter.loadThread(threadId)\n thread.reset(messages)\n } catch (error) {\n console.error('Failed to load thread:', error)\n } finally {\n this._isLoading = false\n }\n }\n\n this.notifySubscribers()\n }\n\n public async switchToNewThread(): Promise<void> {\n const newThreadId = generateThreadId()\n const newCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const newThread = new ThreadRuntime(newCore)\n\n this._threads.set(newThreadId, newThread)\n\n // Create new thread state\n const newState: ThreadListItemState = {\n id: newThreadId,\n title: 'New Chat',\n status: { type: 'regular' },\n isMain: false,\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n this._threadStates.set(newThreadId, newState)\n\n // Create new thread item\n const newItem = new ThreadListItemRuntime({\n state: newState,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(newThreadId, newItem)\n\n // Subscribe to new thread changes\n newThread.subscribe(() => {\n this.syncThreadStateFromRuntime(newThreadId, newThread)\n this.notifySubscribers()\n })\n\n // Create thread via adapter if exists\n if (this.config.threadListAdapter) {\n try {\n const createdState = await this.config.threadListAdapter.createThread()\n newState.conversationId = createdState.conversationId\n this._threadStates.set(newThreadId, newState)\n newItem.updateState(newState)\n } catch (error) {\n console.error('Failed to create thread:', error)\n }\n }\n\n await this.switchToThread(newThreadId)\n }\n\n public async loadThreads(options?: ThreadListLoadOptions): Promise<ThreadListItemState[]> {\n if (!this.config.threadListAdapter) {\n console.warn('No threadListAdapter configured')\n return []\n }\n\n if (this._isLoading) {\n return []\n }\n\n if (this._abortController) {\n this._abortController.abort()\n }\n this._abortController = new AbortController()\n\n // Track search query for state\n if (options?.query !== undefined) {\n this._searchQuery = options.query\n }\n\n if (options?.replace) {\n const threadsToDelete = Array.from(this._threads.keys()).filter(id => id !== this._mainThreadId)\n for (const threadId of threadsToDelete) {\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n }\n }\n\n this._isLoading = true\n this.notifySubscribers()\n\n try {\n const threads = await this.config.threadListAdapter.loadThreads(options)\n\n // Add new threads to state\n for (const state of threads) {\n if (this._threadStates.has(state.id)) {\n continue\n }\n\n const threadCore = new ThreadRuntimeCore({\n streamAdapter: this.config.streamAdapter,\n capabilityExecutionManager: this.config.capabilityExecutionManager\n })\n const thread = new ThreadRuntime(threadCore)\n this._threads.set(state.id, thread)\n this._threadStates.set(state.id, state)\n\n const threadItem = new ThreadListItemRuntime({\n state,\n onSwitchTo: this.switchToThread.bind(this),\n onRename: this.renameThread.bind(this),\n onDelete: this.deleteThread.bind(this)\n })\n this._threadItems.set(state.id, threadItem)\n\n thread.subscribe(() => {\n this.syncThreadStateFromRuntime(state.id, thread)\n this.notifySubscribers()\n })\n }\n\n return threads\n } catch (error) {\n if (error instanceof Error && error.name !== 'AbortError') {\n console.error('Failed to load threads:', error)\n }\n return []\n } finally {\n this._isLoading = false\n this._abortController = null\n this.notifySubscribers()\n }\n }\n\n /**\n * Syncs conversationId and title from thread runtime to thread state\n */\n private syncThreadStateFromRuntime(threadId: string, thread: ThreadRuntime): void {\n const currentState = this._threadStates.get(threadId)\n if (currentState) {\n const hasChanges = currentState.conversationId !== thread.conversationId || currentState.title !== thread.title\n\n if (hasChanges) {\n currentState.conversationId = thread.conversationId\n currentState.title = thread.title || currentState.title\n currentState.updatedAt = Date.now()\n this._threadStates.set(threadId, currentState)\n this._threadItems.get(threadId)?.updateState(currentState)\n }\n }\n }\n\n private async renameThread(threadId: string, newTitle: string): Promise<void> {\n const state = this._threadStates.get(threadId)\n if (!state) return\n\n state.title = newTitle\n state.updatedAt = Date.now()\n this._threadStates.set(threadId, state)\n this._threadItems.get(threadId)?.updateState(state)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.updateThread(threadId, { title: newTitle })\n } catch (error) {\n console.error('Failed to rename thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n\n private async deleteThread(threadId: string): Promise<void> {\n if (threadId === this._mainThreadId && this._threads.size === 1) {\n throw new Error('Cannot delete the last thread')\n }\n\n // If deleting main thread, switch to another thread first\n if (threadId === this._mainThreadId) {\n const otherThreadId = Array.from(this._threads.keys()).find(id => id !== threadId)\n if (otherThreadId) {\n await this.switchToThread(otherThreadId)\n }\n }\n\n this._threads.delete(threadId)\n this._threadItems.delete(threadId)\n this._threadStates.delete(threadId)\n\n if (this.config.threadListAdapter) {\n try {\n await this.config.threadListAdapter.deleteThread(threadId)\n } catch (error) {\n console.error('Failed to delete thread:', error)\n }\n }\n\n this.notifySubscribers()\n }\n}\n","import { CapabilityExecutionManager, CapabilityRegistry } from '../../core'\nimport { PluginRegistry } from '../../core/PluginRegistry'\nimport { QuickActionRegistry } from '../../core/QuickActionRegistry'\nimport { Message } from '../../types/message'\nimport { ChatPlugin } from '../../types/plugin'\nimport { BaseSubscribable } from '../../utils/Subscribable'\nimport { ContentFocusRuntime } from '../ContentFocusRuntime/ContentFocusRuntime'\nimport { ThreadListRuntime, ThreadListRuntimeConfig } from '../ThreadListRuntime/ThreadListRuntime'\nimport { ThreadRuntime } from '../ThreadRuntime/ThreadRuntime'\n\nexport interface AssistantRuntimeConfig extends ThreadListRuntimeConfig {\n plugins?: ChatPlugin[]\n}\n\nexport class AssistantRuntime extends BaseSubscribable {\n public readonly threads: ThreadListRuntime\n public readonly pluginRegistry: PluginRegistry\n public readonly capabilityRegistry: CapabilityRegistry\n public readonly capabilityExecutionManager: CapabilityExecutionManager\n public readonly quickActionRegistry: QuickActionRegistry\n private _contentFocusRuntime: ContentFocusRuntime\n private _currentThreadUnsubscribe?: () => void\n\n constructor(config: AssistantRuntimeConfig) {\n super()\n\n // Initialize plugin registry\n this.pluginRegistry = new PluginRegistry()\n if (config.plugins) {\n config.plugins.forEach(plugin => {\n this.pluginRegistry.registerPlugin(plugin)\n })\n }\n\n // Initialize capability registry\n this.capabilityRegistry = new CapabilityRegistry()\n this.capabilityExecutionManager = new CapabilityExecutionManager(name => this.capabilityRegistry.getHandler(name))\n\n // Initialize quick action registry\n this.quickActionRegistry = new QuickActionRegistry()\n\n // Initialize thread list\n this.threads = new ThreadListRuntime({\n streamAdapter: config.streamAdapter,\n threadListAdapter: config.threadListAdapter,\n capabilityExecutionManager: this.capabilityExecutionManager\n })\n\n this._contentFocusRuntime = new ContentFocusRuntime()\n\n // Subscribe to content focus changes\n this._contentFocusRuntime.subscribe(() => {\n this.notifySubscribers()\n })\n\n // Subscribe to thread list changes (including thread switches)\n this.threads.subscribe(() => {\n // Re-subscribe to the new main thread when it changes\n this.subscribeToCurrentThread()\n this.notifySubscribers()\n })\n\n // Initial subscription to main thread\n this.subscribeToCurrentThread()\n }\n\n public get thread(): ThreadRuntime {\n return this.threads.getMainThread()\n }\n\n public get contentFocus(): ContentFocusRuntime {\n return this._contentFocusRuntime\n }\n\n /**\n * Register a plugin\n */\n public registerPlugin(plugin: ChatPlugin): void {\n this.pluginRegistry.registerPlugin(plugin)\n\n plugin.init?.({\n streamingEnabled: true,\n feedbackEnabled: false,\n detailPanelEnabled: true\n })\n }\n\n /**\n * Unregister a plugin\n */\n public unregisterPlugin(pluginId: string): boolean {\n return this.pluginRegistry.unregisterPlugin(pluginId)\n }\n\n /**\n * Subscribe to the current main thread\n * Called when thread switches to ensure we listen to the right thread\n */\n private subscribeToCurrentThread(): void {\n // Unsubscribe from previous thread\n if (this._currentThreadUnsubscribe) {\n this._currentThreadUnsubscribe()\n }\n\n // Clear focus when switching threads (e.g., starting new conversation)\n this._contentFocusRuntime.blur()\n\n // Subscribe to new main thread\n this._currentThreadUnsubscribe = this.thread.subscribe(() => {\n this.handleMessagesChange(this.thread.messages)\n this.notifySubscribers()\n })\n }\n\n private handleMessagesChange(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Only auto-focus when a new assistant message completes\n const lastMessage = messages[messages.length - 1]\n\n if (lastMessage.role === 'assistant' && lastMessage.status.type === 'complete') {\n this.autoFocusLastContent(messages)\n }\n }\n\n private autoFocusLastContent(messages: readonly Message[]): void {\n if (messages.length === 0) return\n\n // Find last assistant message\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message.role !== 'assistant') continue\n\n // Find last content with focus capability\n for (let j = message.content.length - 1; j >= 0; j--) {\n const content = message.content[j]\n const renderer = this.pluginRegistry.getRenderersByType(content.type)\n\n if (renderer.length > 0 && renderer[0].capabilities?.supportsFocus) {\n // Check if we're already focusing this exact content\n const isAlreadyFocused =\n this._contentFocusRuntime.isActive &&\n this._contentFocusRuntime.focusedMessageId === message.id &&\n this._contentFocusRuntime.focusedContentIndex === j\n\n // Only focus if it's new content\n if (!isAlreadyFocused) {\n this._contentFocusRuntime.focus(content, message, j, 'detail')\n }\n return\n }\n }\n }\n }\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\nimport { StreamAdapter } from '../../types/adapters'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noopStreamAdapter: StreamAdapter = { stream: async function* () {} }\n\n// Default runtime used whenever no AssistantRuntimeProvider is mounted (e.g. the host app has\n// the chat feature disabled behind a flag). It behaves like a real, inert AssistantRuntime rather\n// than null so every hook built on top of it (useCurrentThread, useThreadList, useContentFocus,\n// useQuickActionScope, useRegisterQuickActions, ...) can be called unconditionally without\n// crashing pages that don't know/care whether chat is enabled.\nconst noopAssistantRuntime = new AssistantRuntime({ streamAdapter: noopStreamAdapter })\n\nconst AssistantRuntimeContext = createContext<AssistantRuntime>(noopAssistantRuntime)\n\nexport interface AssistantRuntimeProviderProps {\n runtime: AssistantRuntime\n children: ReactNode\n}\n\nexport function AssistantRuntimeProvider({ runtime, children }: AssistantRuntimeProviderProps): JSX.Element {\n return <AssistantRuntimeContext.Provider value={runtime}>{children}</AssistantRuntimeContext.Provider>\n}\n\nexport function useAssistantRuntimeContext(): AssistantRuntime {\n return useContext(AssistantRuntimeContext)\n}\n","import { AssistantRuntime } from '../../runtime/AssistantRuntime/AssistantRuntime'\nimport { useAssistantRuntimeContext } from '../providers/AssistantRuntimeProvider'\n\nexport function useAssistantRuntime(): AssistantRuntime {\n return useAssistantRuntimeContext()\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadListState } from '../../runtime/ThreadListRuntime/ThreadListRuntime'\nimport { ThreadListLoadOptions } from '../../types/adapters'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useThreadList() {\n const runtime = useAssistantRuntime()\n\n return {\n switchToThread: (threadId: string) => runtime.threads.switchToThread(threadId),\n switchToNewThread: () => runtime.threads.switchToNewThread(),\n loadThreads: (options?: ThreadListLoadOptions) => runtime.threads.loadThreads(options),\n renameThread: (threadId: string, title: string) => runtime.threads['renameThread']?.(threadId, title),\n deleteThread: (threadId: string) => runtime.threads['deleteThread']?.(threadId)\n }\n}\n\nexport function useThreadListState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ThreadListState>(runtime.threads.getState())\n\n useEffect(() => {\n const unsubscribe = runtime.threads.subscribe(() => {\n setState(runtime.threads.getState())\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect, useState } from 'react'\n\nimport { ThreadRuntime } from '../../runtime/ThreadRuntime/ThreadRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCurrentThread(): ThreadRuntime {\n const runtime = useAssistantRuntime()\n const thread = runtime.threads.getMainThread()\n\n const [, forceUpdate] = useState({})\n\n useEffect(() => {\n const unsubscribe = thread.subscribe(() => {\n forceUpdate({})\n })\n\n return unsubscribe\n }, [thread])\n\n return thread\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","import { useSyncExternalStore } from 'use-sync-external-store/shim'\n\nimport { Message } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useMessages(): readonly Message[] {\n const runtime = useAssistantRuntime()\n\n return useSyncExternalStore(\n callback => {\n // Subscribe to runtime, which notifies when thread switches\n // or when the current thread's messages change\n return runtime.subscribe(() => {\n callback()\n })\n },\n\n () => {\n // Always get messages from the current main thread\n return runtime.thread.messages\n },\n () => runtime.thread.messages\n )\n}\n","import { useState } from 'react'\n\nimport { useCurrentThread } from './useCurrentThread'\n\nexport function useComposer() {\n const thread = useCurrentThread()\n const [text, setText] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n const send = async (e?: React.FormEvent) => {\n e?.preventDefault()\n\n if (!text.trim() || isSubmitting) return\n\n const messageText = text\n setText('')\n setIsSubmitting(true)\n\n try {\n await thread.send(messageText)\n } catch (error) {\n console.error('Failed to send message:', error)\n setText(messageText)\n } finally {\n setIsSubmitting(false)\n }\n }\n\n return {\n text,\n setText,\n isSubmitting,\n send,\n clear: () => setText(''),\n append: (value: string) => setText(prev => prev + value)\n }\n}\n","import { FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentRenderer(contentType: string, context?: FocusContext) {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n\n if (!renderer) {\n return {\n component: null,\n auxiliaryComponent: null,\n supportsFocus: false,\n supportsPreview: false,\n supportsFullscreen: false\n }\n }\n\n // Get auxiliary component for specific context\n const auxiliaryComponent = context ? renderer.auxiliary?.[context] : null\n\n return {\n component: renderer.component,\n auxiliaryComponent,\n supportsFocus: renderer.capabilities?.supportsFocus ?? false,\n supportsPreview: renderer.capabilities?.supportsPreview ?? false,\n supportsFullscreen: renderer.capabilities?.supportsFullscreen ?? false\n }\n}\n\nexport function useHasAuxiliaryView(contentType: string, context: FocusContext): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return !!renderer?.auxiliary?.[context]\n}\n\nexport function useSupportsFocus(contentType: string): boolean {\n const runtime = useAssistantRuntime()\n const renderer = runtime.pluginRegistry.getBestRendererForType(contentType)\n return renderer?.capabilities?.supportsFocus ?? false\n}\n","import { useEffect, useState } from 'react'\n\nimport { ContentFocusState, FocusContext } from '../../runtime/ContentFocusRuntime/ContentFocusRuntime'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useContentFocus() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return {\n ...state,\n focus: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.focus(content, message, contentIndex, context),\n blur: () => runtime.contentFocus.blur(),\n toggle: (content: MessageContent, message: Message, contentIndex: number, context?: FocusContext) =>\n runtime.contentFocus.toggle(content, message, contentIndex, context),\n switchContext: (context: FocusContext) => runtime.contentFocus.switchContext(context),\n focusNext: () => runtime.contentFocus.focusNext(runtime.thread.messages),\n focusPrevious: () => runtime.contentFocus.focusPrevious(runtime.thread.messages)\n }\n}\n\nexport function useContentFocusState() {\n const runtime = useAssistantRuntime()\n const [state, setState] = useState<ContentFocusState>(runtime.contentFocus.state)\n\n useEffect(() => {\n const unsubscribe = runtime.contentFocus.subscribe(() => {\n setState(runtime.contentFocus.state)\n })\n return unsubscribe\n }, [runtime])\n\n return state\n}\n","import { useEffect } from 'react'\n\nimport { CapabilityConfig } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const priority = config.priority ?? 0\n\n // Register handler\n if (config.execute) {\n runtime.capabilityRegistry.registerHandler(config.name, { execute: config.execute }, priority)\n }\n\n // Register renderer\n if (config.render) {\n runtime.capabilityRegistry.registerRenderer(\n config.name,\n {\n component: config.render\n },\n priority\n )\n }\n\n // Cleanup on unmount\n return () => {\n runtime.capabilityRegistry.unregister(config.name)\n }\n }, [config.name, runtime])\n}\n","import { useEffect, useReducer, useState } from 'react'\n\nimport { CapabilityExecution } from '../../types/capability'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\nexport function useCapabilityExecution(capabilityId: string): CapabilityExecution | undefined {\n const runtime = useAssistantRuntime()\n const [execution, setExecution] = useState<CapabilityExecution | undefined>(() =>\n runtime.capabilityExecutionManager.getExecution(capabilityId)\n )\n const [, forceUpdate] = useReducer(x => x + 1, 0)\n\n useEffect(() => {\n // Get initial state\n const initialExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(initialExecution)\n\n // Subscribe to updates\n const unsubscribe = runtime.capabilityExecutionManager.subscribe(id => {\n if (id === capabilityId) {\n const updatedExecution = runtime.capabilityExecutionManager.getExecution(capabilityId)\n setExecution(updatedExecution)\n forceUpdate()\n }\n })\n\n return unsubscribe\n }, [capabilityId, runtime])\n\n return execution\n}\n","import { createContext, ReactNode, useCallback, useContext, useMemo, useState } from 'react'\n\nimport { ChatContextItem, ChatContextMap, ChatContextValue } from '../../types/context'\n\n// Default value used whenever no ChatContextProvider is mounted (e.g. chat is disabled behind a\n// flag). Registering/removing page context becomes a silent no-op instead of throwing, so\n// usePageContext (and anything else built on useChatContext) is always safe to call.\nconst noopChatContextValue: ChatContextValue = {\n contexts: {},\n setContext: () => undefined,\n removeContext: () => undefined,\n getContextData: () => ({}),\n clearContexts: () => undefined\n}\n\nconst ChatContext = createContext<ChatContextValue>(noopChatContextValue)\n\nexport interface ChatContextProviderProps {\n children: ReactNode\n}\n\nexport function ChatContextProvider({ children }: ChatContextProviderProps): JSX.Element {\n const [contexts, setContexts] = useState<ChatContextMap>({})\n\n const setContext = useCallback((id: string, context: Omit<ChatContextItem, 'id'> | null) => {\n setContexts(prev => {\n if (context === null) {\n const { [id]: _, ...rest } = prev\n return rest\n }\n return {\n ...prev,\n [id]: { id, ...context }\n }\n })\n }, [])\n\n const removeContext = useCallback((id: string) => {\n setContexts(prev => {\n const { [id]: _, ...rest } = prev\n return rest\n })\n }, [])\n\n const getContextData = useCallback(() => {\n return Object.values(contexts).reduce(\n (acc, context) => {\n // Stringify non-string values for backend compatibility\n const stringifiedData = Object.entries(context.data).reduce(\n (dataAcc, [key, value]) => {\n return {\n ...dataAcc,\n [key]: typeof value === 'string' ? value : JSON.stringify(value)\n }\n },\n {} as Record<string, unknown>\n )\n return { ...acc, ...stringifiedData }\n },\n {} as Record<string, unknown>\n )\n }, [contexts])\n\n const clearContexts = useCallback(() => {\n setContexts({})\n }, [])\n\n const value = useMemo(\n () => ({\n contexts,\n setContext,\n removeContext,\n getContextData,\n clearContexts\n }),\n [contexts, setContext, removeContext, getContextData, clearContexts]\n )\n\n return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>\n}\n\nexport function useChatContext(): ChatContextValue {\n return useContext(ChatContext)\n}\n","import { useEffect } from 'react'\n\nimport { ChatContextItem } from '../../types/context'\nimport { useChatContext } from '../providers/ChatContextProvider'\n\nexport interface UsePageContextOptions extends Omit<ChatContextItem, 'id'> {\n /**\n * Optional ID for the context. Defaults to 'currentPage'.\n * Use a custom ID if you need multiple page contexts or want to namespace your context.\n */\n id?: string\n}\n\n/**\n * Hook for pages to easily register their context with the chat system.\n * Automatically cleans up the context when the component unmounts.\n *\n * @param options - Context configuration\n *\n * @example\n * ```tsx\n * function ConnectorListPage() {\n * usePageContext({\n * displayName: 'Connectors',\n * data: {\n * currentPage: { page_id: 'connectors' }\n * },\n * priority: 0\n * })\n *\n * // Rest of component...\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom ID\n * function PipelineStudio({ pipelineId, pipelineName }) {\n * usePageContext({\n * id: 'currentPipeline',\n * displayName: `Pipeline: ${pipelineName}`,\n * data: {\n * selectedPipeline: { id: pipelineId, name: pipelineName }\n * },\n * priority: 1\n * })\n * }\n * ```\n */\nexport function usePageContext(options: UsePageContextOptions): void {\n const { setContext, removeContext } = useChatContext()\n const { id = 'currentPage', ...contextData } = options\n\n useEffect(() => {\n setContext(id, contextData)\n\n return () => {\n removeContext(id)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, contextData.displayName, JSON.stringify(contextData.data), contextData.priority, contextData.icon])\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionScopeMode } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Activate a quick action scope for the duration of this component's lifecycle.\n * When the component unmounts, the scope is deactivated and the previous scope is restored.\n *\n * Use this at the page/module level to declare \"this page owns quick actions\".\n *\n * @param scope - Unique identifier for this scope (e.g., \"pipelines\", \"dashboards\")\n * @param mode - How to display actions: 'merge' (global + current), 'replace' (only current), 'append' (all scopes)\n *\n * @example\n * ```tsx\n * function PipelinePage() {\n * useQuickActionScope('pipelines', 'merge')\n *\n * // Component automatically cleans up on unmount\n * return <div>Pipeline content</div>\n * }\n * ```\n */\nexport function useQuickActionScope(scope: string, mode: QuickActionScopeMode = 'merge'): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n runtime.quickActionRegistry.activateScope(scope, mode)\n\n return () => {\n runtime.quickActionRegistry.deactivateScope(scope)\n }\n }, [scope, mode, runtime])\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionConfig } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Register a quick action that appears in the welcome screen.\n * Automatically unregisters when the component unmounts.\n *\n * @param config - Quick action configuration\n * @param scope - The scope to register this action in (defaults to current active scope)\n *\n * @example\n * ```tsx\n * function PipelineQuickActions() {\n * useQuickActionScope('pipelines', 'merge')\n *\n * useQuickAction({\n * id: 'list-pipelines',\n * label: 'List pipelines',\n * prompt: 'Show me all pipelines in this project',\n * icon: 'pipeline',\n * priority: 10\n * }, 'pipelines')\n *\n * return null\n * }\n * ```\n */\nexport function useQuickAction(config: QuickActionConfig, scope?: string): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const targetScope = scope || runtime.quickActionRegistry.getActiveScope()\n runtime.quickActionRegistry.register(config, targetScope)\n\n return () => {\n runtime.quickActionRegistry.unregister(config.id, targetScope)\n }\n }, [\n config.id,\n config.label,\n config.prompt,\n config.icon,\n config.description,\n config.priority,\n config.scope,\n scope,\n runtime\n ])\n}\n","import { useEffect, useState } from 'react'\n\nimport type { QuickAction, QuickActionFilter } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Get all visible quick actions, respecting their condition functions and the active scope.\n *\n * @param filter - Optional filter by scope\n * @returns Array of visible quick actions, sorted by priority\n *\n * @example\n * ```tsx\n * function WelcomeScreen() {\n * const quickActions = useQuickActions()\n *\n * return (\n * <div>\n * {quickActions.map(action => (\n * <Button key={action.id} onClick={() => send(action.prompt)}>\n * {action.label}\n * </Button>\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useQuickActions(filter?: QuickActionFilter): QuickAction[] {\n const runtime = useAssistantRuntime()\n const [actions, setActions] = useState<QuickAction[]>([])\n\n useEffect(() => {\n // Load visible actions\n runtime.quickActionRegistry.getVisible(filter).then(setActions)\n\n // Subscribe to runtime changes to re-evaluate\n const unsubscribe = runtime.subscribe(() => {\n runtime.quickActionRegistry.getVisible(filter).then(setActions)\n })\n\n return unsubscribe\n }, [runtime, filter?.scope])\n\n return actions\n}\n","import { useEffect } from 'react'\n\nimport type { QuickActionConfig } from '../../types/quick-action'\nimport { useAssistantRuntime } from './useAssistantRuntime'\n\n/**\n * Register multiple quick actions at once.\n *\n * All actions are automatically registered when the component mounts and\n * unregistered when it unmounts. This hook is useful for registering\n * multiple quick actions from a centralized configuration array.\n *\n * @param actions - Array of quick action configurations to register\n * @param scope - Optional scope for the actions (defaults to active scope)\n *\n * @example\n * ```tsx\n * const GLOBAL_ACTIONS = [\n * { id: 'action-1', label: 'Action 1', prompt: 'Do action 1', icon: 'star' },\n * { id: 'action-2', label: 'Action 2', prompt: 'Do action 2', icon: 'heart' },\n * ]\n *\n * function MyQuickActions() {\n * useRegisterQuickActions(GLOBAL_ACTIONS, 'global')\n * return null\n * }\n * ```\n */\nexport function useRegisterQuickActions(actions: QuickActionConfig[], scope?: string): void {\n const runtime = useAssistantRuntime()\n\n useEffect(() => {\n const targetScope = scope || runtime.quickActionRegistry.getActiveScope()\n\n // Register all actions\n actions.forEach(config => {\n runtime.quickActionRegistry.register(config, targetScope)\n })\n\n // Cleanup: unregister all actions on unmount\n return () => {\n actions.forEach(config => {\n runtime.quickActionRegistry.unregister(config.id, targetScope)\n })\n }\n }, [actions, scope, runtime])\n}\n","import { CapabilityContent } from '../../types/capability'\nimport { Message, MessageContent } from '../../types/message'\nimport { useAssistantRuntime } from '../hooks/useAssistantRuntime'\nimport { useCapabilityExecution } from '../hooks/useCapabilityExecution'\n\nexport interface CapabilityRendererProps {\n message: Message\n content: MessageContent\n}\n\nexport function CapabilityRendererComp({ message, content }: CapabilityRendererProps) {\n const runtime = useAssistantRuntime()\n const capabilityContent = content as CapabilityContent\n const execution = useCapabilityExecution(capabilityContent.capabilityId)\n\n const renderer = runtime.capabilityRegistry.getRenderer(capabilityContent.capabilityName)\n\n if (!renderer || !execution) {\n return null\n }\n\n const Component = renderer.component\n\n return (\n <Component\n capabilityName={execution.name}\n capabilityId={execution.id}\n args={execution.args}\n result={execution.result}\n status={execution.status}\n message={message}\n />\n )\n}\n","import { Message, MessageContent } from '../../types/message'\nimport { useContentRenderer } from '../hooks/useContentRenderer'\nimport { CapabilityRendererComp } from './CapabilityRenderer'\n\nexport function ContentRenderer({ message, content }: { message: Message; content: MessageContent }) {\n const { component } = useContentRenderer(content.type)\n\n if (content.type === 'capability') {\n return <CapabilityRendererComp message={message} content={content} />\n }\n\n if (!component) {\n return null\n }\n\n const Component = component\n return <Component content={content} message={message} />\n}\n","import { AuxiliaryRendererProps } from '../../types/plugin'\nimport { useContentRenderer } from '../hooks'\n\nexport function AuxiliaryRenderer({\n message,\n content,\n context,\n onClose,\n onNavigate,\n onSwitchContext\n}: AuxiliaryRendererProps) {\n const { auxiliaryComponent } = useContentRenderer(content.type, context)\n\n if (!auxiliaryComponent) {\n return null\n }\n\n const Component = auxiliaryComponent\n return (\n <Component\n content={content}\n message={message}\n context={context}\n onClose={onClose}\n onNavigate={onNavigate}\n onSwitchContext={onSwitchContext}\n />\n )\n}\n","import { FC } from 'react'\n\nimport { CapabilityConfig } from '../../types'\nimport { useCapability } from '../hooks/useCapability'\n\nexport function makeCapability<TArgs = any, TResult = any>(config: CapabilityConfig<TArgs, TResult>): FC {\n const Capability: FC = () => {\n useCapability(config)\n return null\n }\n\n Capability.displayName = `Capability(${config.name})`\n\n return Capability\n}\n","import { StreamAdapter, StreamChunk, StreamRequest } from '../types/adapters'\nimport { Message } from '../types/message'\n\nexport interface SSEEvent {\n event: string\n data: any\n}\n\nexport abstract class BaseSSEStreamAdapter<TAllowedEvents extends readonly string[] = readonly string[]>\n implements StreamAdapter\n{\n protected abstract prepareRequest(\n params: StreamRequest & { messages: Message[]; conversationId?: string; signal?: AbortSignal }\n ): {\n url: string\n options: RequestInit\n }\n\n protected abstract convertEvent(event: SSEEvent & { event: TAllowedEvents[number] }): StreamChunk | null\n\n protected getAllowedEvents(): TAllowedEvents | null {\n return null\n }\n\n protected shouldProcessEvent(eventType: string): boolean {\n const allowedEvents = this.getAllowedEvents()\n if (!allowedEvents) return true\n return allowedEvents.includes(eventType)\n }\n\n async *stream(params: StreamRequest): AsyncGenerator<StreamChunk, void, unknown> {\n const { signal } = params\n const { url, options } = this.prepareRequest(params)\n\n const response = await fetch(url, { ...options, signal })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n if (!response.body) {\n throw new Error('Response body is null')\n }\n\n yield* this.parseSSEStream(response.body, signal)\n }\n\n private async *parseSSEStream(\n body: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n ): AsyncGenerator<StreamChunk, void, unknown> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let currentEvent: string | null = null\n\n try {\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read()\n\n if (done) break\n if (signal?.aborted) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n if (!trimmedLine) {\n currentEvent = null\n continue\n }\n\n if (trimmedLine === ': ping') {\n continue\n }\n\n if (trimmedLine.startsWith('event:')) {\n currentEvent = trimmedLine.substring(6).trim()\n continue\n }\n\n if (trimmedLine.startsWith('data:')) {\n const dataStr = trimmedLine.substring(5).trim()\n\n if (dataStr === 'eof' || trimmedLine === 'eof') {\n break\n }\n\n try {\n const data = JSON.parse(dataStr)\n\n if (currentEvent && this.shouldProcessEvent(currentEvent)) {\n const chunk = this.convertEvent({\n event: currentEvent as TAllowedEvents[number],\n data\n })\n if (chunk) {\n yield chunk\n }\n }\n } catch (e) {\n // handle error\n }\n\n currentEvent = null\n }\n }\n }\n } finally {\n reader.releaseLock()\n }\n }\n}\n"],"names":["PluginRegistry","__publicField","plugin","renderer","renderers","a","b","pluginId","filteredRenderers","r","type","CapabilityRegistry","name","handler","priority","entries","entry","insertIndex","e","_a","CapabilityExecutionManager","getHandler","id","args","messageId","strategy","execution","executionId","running","result","error","errorMessage","index","callback","QuickActionRegistry","scope","mode","scopeInfo","config","filter","activeScope","activeScopeInfo","globalInfo","visibleEntries","visible","BaseSubscribable","ContentFocusRuntime","content","message","contentIndex","context","messages","currentMsgIndex","m","currentMsg","currentContentIndex","nextContent","nextMsg","prevContent","prevMsg","lastIndex","messageIdCounter","threadIdCounter","generateMessageId","generateThreadId","ThreadListItemRuntime","state","newTitle","ComposerRuntime","text","isSubmitting","ThreadRuntime","_core","systemEvent","options","conversationId","title","updater","ThreadRuntimeCore","_b","newMessage","resolve","waiters","w","tasks","task","assistantMessageId","assistantMessage","stream","event","userMessage","messageIndex","metadataEvent","capabilityEvent","capabilityContent","artifact","errorEvent","customEvent","updatedMessages","initialContent","status","updatedContent","ThreadListRuntime","mainCore","mainState","mainItem","mainThread","threads","threadItems","threadId","thread","oldMainState","newMainState","newThreadId","newCore","newThread","newState","newItem","createdState","threadsToDelete","threadCore","threadItem","currentState","otherThreadId","AssistantRuntime","lastMessage","j","getOwnPropertySymbols","hasOwnProperty","propIsEnumerable","toObject","val","shouldUseNative","test1","test2","i","order2","n","test3","letter","objectAssign","target","source","from","to","symbols","s","key","require$$0","f","require$$1","g","reactJsxRuntime_production_min","h","p","q","c","k","l","jsxRuntimeModule","noopStreamAdapter","noopAssistantRuntime","AssistantRuntimeContext","createContext","AssistantRuntimeProvider","runtime","children","useAssistantRuntimeContext","useContext","useAssistantRuntime","useThreadList","useThreadListState","setState","useState","useEffect","useCurrentThread","forceUpdate","React","is","x","y","objectIs","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","value","_useState","inst","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","shimModule","useMessages","useSyncExternalStore","useComposer","setText","setIsSubmitting","messageText","prev","useContentRenderer","contentType","auxiliaryComponent","_c","_d","useContentFocus","useCapability","useCapabilityExecution","capabilityId","setExecution","useReducer","initialExecution","updatedExecution","noopChatContextValue","ChatContext","ChatContextProvider","contexts","setContexts","setContext","useCallback","_","rest","removeContext","getContextData","acc","stringifiedData","dataAcc","clearContexts","useMemo","jsx","useChatContext","usePageContext","contextData","useQuickActionScope","useQuickAction","targetScope","useQuickActions","actions","setActions","useRegisterQuickActions","CapabilityRendererComp","Component","ContentRenderer","component","AuxiliaryRenderer","onClose","onNavigate","onSwitchContext","makeCapability","Capability","BaseSSEStreamAdapter","eventType","allowedEvents","params","signal","url","response","body","reader","decoder","buffer","currentEvent","done","lines","line","trimmedLine","dataStr","data","chunk"],"mappings":"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","x_google_ignoreList":[13,14,15,20,21]}
|