@particle-academy/agent-integrations 0.6.1 → 0.6.3
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/bridges/charts.d.cts +3 -3
- package/dist/bridges/charts.d.ts +3 -3
- package/dist/bridges/code.d.cts +3 -3
- package/dist/bridges/code.d.ts +3 -3
- package/dist/bridges/flow.d.cts +3 -3
- package/dist/bridges/flow.d.ts +3 -3
- package/dist/bridges/forms.d.cts +3 -3
- package/dist/bridges/forms.d.ts +3 -3
- package/dist/bridges/scene.d.cts +3 -3
- package/dist/bridges/scene.d.ts +3 -3
- package/dist/bridges/screens.d.cts +3 -3
- package/dist/bridges/screens.d.ts +3 -3
- package/dist/bridges/sheets.d.cts +3 -3
- package/dist/bridges/sheets.d.ts +3 -3
- package/dist/bridges/slides.d.cts +58 -0
- package/dist/bridges/slides.d.ts +58 -0
- package/dist/bridges/whiteboard.d.cts +3 -3
- package/dist/bridges/whiteboard.d.ts +3 -3
- package/dist/bridges-slides.cjs +438 -0
- package/dist/bridges-slides.cjs.map +1 -0
- package/dist/bridges-slides.js +6 -0
- package/dist/bridges-slides.js.map +1 -0
- package/dist/chunk-NE3GIGQD.js +384 -0
- package/dist/chunk-NE3GIGQD.js.map +1 -0
- package/dist/components/SharedWhiteboard/index.d.cts +1 -1
- package/dist/components/SharedWhiteboard/index.d.ts +1 -1
- package/dist/index.cjs +377 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.cts +5 -5
- package/dist/mcp/index.d.ts +5 -5
- package/dist/presence/index.d.cts +1 -1
- package/dist/presence/index.d.ts +1 -1
- package/dist/{server-BsSwfemr.d.cts → server-C2OpfPEo.d.cts} +3 -3
- package/dist/{server-Du3-IGqM.d.ts → server-CKAqFTyc.d.ts} +3 -3
- package/dist/sharing/index.d.cts +4 -4
- package/dist/sharing/index.d.ts +4 -4
- package/dist/sheets-adapter.d.cts +3 -3
- package/dist/sheets-adapter.d.ts +3 -3
- package/dist/{token-CrJF76oH.d.cts → token-C1O22GxJ.d.cts} +1 -1
- package/dist/{token-CrJF76oH.d.ts → token-C1O22GxJ.d.ts} +1 -1
- package/dist/{tool-host-BQuUygLF.d.cts → tool-host-CX3WFXgh.d.cts} +1 -1
- package/dist/{tool-host-C8JMMGYq.d.ts → tool-host-DldwGNqR.d.ts} +1 -1
- package/dist/{types-aOQLTW0E.d.cts → types-C2zdUpzn.d.cts} +1 -1
- package/dist/{types-aOQLTW0E.d.ts → types-C2zdUpzn.d.ts} +1 -1
- package/dist/{types-CCSBGW9T.d.cts → types-Cq5u8MJ8.d.cts} +1 -1
- package/dist/{types-DIVNcIQO.d.ts → types-DyaHnqNC.d.ts} +1 -1
- package/dist/undo/index.d.cts +2 -2
- package/dist/undo/index.d.ts +2 -2
- package/docs/relay-server.md +225 -5
- package/package.json +11 -4
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var react = require('react');
|
|
4
|
+
var fancySlides = require('@particle-academy/fancy-slides');
|
|
4
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
6
|
|
|
6
7
|
var __defProp = Object.defineProperty;
|
|
@@ -1463,6 +1464,381 @@ function registerScreensBridge(host, options) {
|
|
|
1463
1464
|
}
|
|
1464
1465
|
};
|
|
1465
1466
|
}
|
|
1467
|
+
var DEFAULT_AGENT7 = { id: "agent", name: "Agent", color: "#a855f7" };
|
|
1468
|
+
function registerSlidesBridge(host, options) {
|
|
1469
|
+
const { adapter } = options;
|
|
1470
|
+
const agent = { ...DEFAULT_AGENT7, ...options.agent ?? {} };
|
|
1471
|
+
const disposers = [];
|
|
1472
|
+
const deckTarget = () => ({
|
|
1473
|
+
kind: "deck",
|
|
1474
|
+
screenId: adapter.screenId,
|
|
1475
|
+
elementId: adapter.getDeck().id,
|
|
1476
|
+
label: adapter.getDeck().title
|
|
1477
|
+
});
|
|
1478
|
+
const slideTarget = (slideId) => ({
|
|
1479
|
+
kind: "slide",
|
|
1480
|
+
screenId: adapter.screenId,
|
|
1481
|
+
elementId: slideId,
|
|
1482
|
+
label: `slide:${slideId}`
|
|
1483
|
+
});
|
|
1484
|
+
const elementTarget = (slideId, elementId) => ({
|
|
1485
|
+
kind: "slide-element",
|
|
1486
|
+
screenId: adapter.screenId,
|
|
1487
|
+
elementId,
|
|
1488
|
+
label: `${slideId}/${elementId}`
|
|
1489
|
+
});
|
|
1490
|
+
const reg = (name, description, properties, required, handler, isMutation, resolveTarget) => {
|
|
1491
|
+
const wrapped = (async (args) => {
|
|
1492
|
+
try {
|
|
1493
|
+
return await handler(args);
|
|
1494
|
+
} catch (e) {
|
|
1495
|
+
return errorResult(e instanceof Error ? e.message : String(e));
|
|
1496
|
+
}
|
|
1497
|
+
});
|
|
1498
|
+
const final = isMutation && resolveTarget ? wrapToolWithActivity(wrapped, {
|
|
1499
|
+
toolName: name,
|
|
1500
|
+
agent,
|
|
1501
|
+
kind: "deck",
|
|
1502
|
+
screenId: adapter.screenId,
|
|
1503
|
+
resolveTarget: (ctx) => resolveTarget(ctx.args)
|
|
1504
|
+
}) : wrapped;
|
|
1505
|
+
disposers.push(
|
|
1506
|
+
host.registerTool(
|
|
1507
|
+
{
|
|
1508
|
+
name,
|
|
1509
|
+
description,
|
|
1510
|
+
inputSchema: {
|
|
1511
|
+
type: "object",
|
|
1512
|
+
properties,
|
|
1513
|
+
required,
|
|
1514
|
+
additionalProperties: false
|
|
1515
|
+
}
|
|
1516
|
+
},
|
|
1517
|
+
final
|
|
1518
|
+
)
|
|
1519
|
+
);
|
|
1520
|
+
};
|
|
1521
|
+
reg(
|
|
1522
|
+
"deck_describe",
|
|
1523
|
+
"Summary of the active deck \u2014 title, slide count, theme name, element-type counts.",
|
|
1524
|
+
{},
|
|
1525
|
+
[],
|
|
1526
|
+
() => {
|
|
1527
|
+
const deck = adapter.getDeck();
|
|
1528
|
+
const elementCounts = {};
|
|
1529
|
+
for (const s of deck.slides) {
|
|
1530
|
+
for (const e of s.elements) {
|
|
1531
|
+
elementCounts[e.type] = (elementCounts[e.type] ?? 0) + 1;
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
const summary = {
|
|
1535
|
+
id: deck.id,
|
|
1536
|
+
title: deck.title,
|
|
1537
|
+
slides: deck.slides.length,
|
|
1538
|
+
theme: deck.theme?.name,
|
|
1539
|
+
elementCounts
|
|
1540
|
+
};
|
|
1541
|
+
return textResult(JSON.stringify(summary, null, 2), summary);
|
|
1542
|
+
},
|
|
1543
|
+
false
|
|
1544
|
+
);
|
|
1545
|
+
reg(
|
|
1546
|
+
"deck_get",
|
|
1547
|
+
"Read the full deck JSON.",
|
|
1548
|
+
{},
|
|
1549
|
+
[],
|
|
1550
|
+
() => {
|
|
1551
|
+
const deck = adapter.getDeck();
|
|
1552
|
+
return textResult(JSON.stringify(deck, null, 2), deck);
|
|
1553
|
+
},
|
|
1554
|
+
false
|
|
1555
|
+
);
|
|
1556
|
+
reg(
|
|
1557
|
+
"slide_list",
|
|
1558
|
+
"List slides in order \u2014 `{ id, layout, elementCount, title? }`.",
|
|
1559
|
+
{},
|
|
1560
|
+
[],
|
|
1561
|
+
() => {
|
|
1562
|
+
const deck = adapter.getDeck();
|
|
1563
|
+
const list = deck.slides.map((s) => ({
|
|
1564
|
+
id: s.id,
|
|
1565
|
+
layout: s.layout,
|
|
1566
|
+
elementCount: s.elements.length,
|
|
1567
|
+
title: s.metadata?.title ?? firstTextContent(s)
|
|
1568
|
+
}));
|
|
1569
|
+
return textResult(JSON.stringify(list, null, 2), list);
|
|
1570
|
+
},
|
|
1571
|
+
false
|
|
1572
|
+
);
|
|
1573
|
+
reg(
|
|
1574
|
+
"slide_get",
|
|
1575
|
+
"Read a single slide's JSON by id.",
|
|
1576
|
+
{ id: { type: "string" } },
|
|
1577
|
+
["id"],
|
|
1578
|
+
(args) => {
|
|
1579
|
+
const id = str(args.id);
|
|
1580
|
+
const slide = adapter.getDeck().slides.find((s) => s.id === id);
|
|
1581
|
+
if (!slide) return errorResult(`Slide not found: ${id}`);
|
|
1582
|
+
return textResult(JSON.stringify(slide, null, 2), slide);
|
|
1583
|
+
},
|
|
1584
|
+
false
|
|
1585
|
+
);
|
|
1586
|
+
reg(
|
|
1587
|
+
"deck_set_title",
|
|
1588
|
+
"Rename the deck.",
|
|
1589
|
+
{ title: { type: "string" } },
|
|
1590
|
+
["title"],
|
|
1591
|
+
(args) => {
|
|
1592
|
+
const title = str(args.title);
|
|
1593
|
+
adapter.apply({ kind: "deck_set_title", title });
|
|
1594
|
+
return textResult(`Title set to "${title}"`, { title });
|
|
1595
|
+
},
|
|
1596
|
+
true,
|
|
1597
|
+
deckTarget
|
|
1598
|
+
);
|
|
1599
|
+
reg(
|
|
1600
|
+
"deck_apply_theme",
|
|
1601
|
+
"Apply a Theme to the deck. Pass either a built-in name (default / dark / vivid) or a full Theme object.",
|
|
1602
|
+
{ theme: { description: "Theme name string or Theme object." } },
|
|
1603
|
+
["theme"],
|
|
1604
|
+
(args) => {
|
|
1605
|
+
const t = args.theme;
|
|
1606
|
+
let theme;
|
|
1607
|
+
if (typeof t === "string") {
|
|
1608
|
+
theme = { name: t };
|
|
1609
|
+
} else if (t && typeof t === "object" && "name" in t) {
|
|
1610
|
+
theme = t;
|
|
1611
|
+
} else {
|
|
1612
|
+
return errorResult("theme must be a string name or an object with a `name` field.");
|
|
1613
|
+
}
|
|
1614
|
+
adapter.apply({ kind: "deck_apply_theme", theme });
|
|
1615
|
+
return textResult(`Applied theme: ${theme.name}`, { theme });
|
|
1616
|
+
},
|
|
1617
|
+
true,
|
|
1618
|
+
deckTarget
|
|
1619
|
+
);
|
|
1620
|
+
reg(
|
|
1621
|
+
"slide_add",
|
|
1622
|
+
"Insert a slide at `index` (defaults to end). Returns the new slide's id. Accepts a partial slide payload.",
|
|
1623
|
+
{
|
|
1624
|
+
index: { type: "number" },
|
|
1625
|
+
slide: { description: "Partial slide payload \u2014 id is auto-generated when absent." }
|
|
1626
|
+
},
|
|
1627
|
+
[],
|
|
1628
|
+
(args) => {
|
|
1629
|
+
const deck = adapter.getDeck();
|
|
1630
|
+
const incoming = args.slide && typeof args.slide === "object" ? args.slide : {};
|
|
1631
|
+
const slide = {
|
|
1632
|
+
id: incoming.id ?? fancySlides.slideId(),
|
|
1633
|
+
layout: incoming.layout ?? "blank",
|
|
1634
|
+
elements: incoming.elements ?? [],
|
|
1635
|
+
background: incoming.background,
|
|
1636
|
+
transition: incoming.transition,
|
|
1637
|
+
notes: incoming.notes,
|
|
1638
|
+
metadata: incoming.metadata
|
|
1639
|
+
};
|
|
1640
|
+
const index = clamp(num(args.index, deck.slides.length), 0, deck.slides.length);
|
|
1641
|
+
adapter.apply({ kind: "slide_add", index, slide });
|
|
1642
|
+
return textResult(`Added slide ${slide.id} at index ${index}`, { id: slide.id, index });
|
|
1643
|
+
},
|
|
1644
|
+
true,
|
|
1645
|
+
() => deckTarget()
|
|
1646
|
+
);
|
|
1647
|
+
reg(
|
|
1648
|
+
"slide_remove",
|
|
1649
|
+
"Delete a slide by id.",
|
|
1650
|
+
{ id: { type: "string" } },
|
|
1651
|
+
["id"],
|
|
1652
|
+
(args) => {
|
|
1653
|
+
const id = str(args.id);
|
|
1654
|
+
adapter.apply({ kind: "slide_remove", id });
|
|
1655
|
+
return textResult(`Removed slide ${id}`, { id });
|
|
1656
|
+
},
|
|
1657
|
+
true,
|
|
1658
|
+
(args) => slideTarget(str(args?.id))
|
|
1659
|
+
);
|
|
1660
|
+
reg(
|
|
1661
|
+
"slide_reorder",
|
|
1662
|
+
"Move a slide to a new index.",
|
|
1663
|
+
{ id: { type: "string" }, toIndex: { type: "number" } },
|
|
1664
|
+
["id", "toIndex"],
|
|
1665
|
+
(args) => {
|
|
1666
|
+
const id = str(args.id);
|
|
1667
|
+
const toIndex = num(args.toIndex, 0);
|
|
1668
|
+
adapter.apply({ kind: "slide_reorder", id, toIndex });
|
|
1669
|
+
return textResult(`Moved slide ${id} \u2192 ${toIndex}`, { id, toIndex });
|
|
1670
|
+
},
|
|
1671
|
+
true,
|
|
1672
|
+
(args) => slideTarget(str(args?.id))
|
|
1673
|
+
);
|
|
1674
|
+
reg(
|
|
1675
|
+
"slide_set_layout",
|
|
1676
|
+
"Change a slide's layout preset.",
|
|
1677
|
+
{ id: { type: "string" }, layout: { type: "string" } },
|
|
1678
|
+
["id", "layout"],
|
|
1679
|
+
(args) => {
|
|
1680
|
+
const id = str(args.id);
|
|
1681
|
+
const layout = str(args.layout);
|
|
1682
|
+
adapter.apply({ kind: "slide_set_layout", id, layout: layout ?? "blank" });
|
|
1683
|
+
return textResult(`Slide ${id} layout \u2192 ${layout}`, { id, layout });
|
|
1684
|
+
},
|
|
1685
|
+
true,
|
|
1686
|
+
(args) => slideTarget(str(args?.id))
|
|
1687
|
+
);
|
|
1688
|
+
reg(
|
|
1689
|
+
"slide_set_notes",
|
|
1690
|
+
"Set a slide's speaker notes.",
|
|
1691
|
+
{ id: { type: "string" }, notes: { type: "string" } },
|
|
1692
|
+
["id", "notes"],
|
|
1693
|
+
(args) => {
|
|
1694
|
+
const id = str(args.id);
|
|
1695
|
+
const notes = str(args.notes);
|
|
1696
|
+
adapter.apply({ kind: "slide_set_notes", id, notes });
|
|
1697
|
+
return textResult(`Notes updated on slide ${id}`, { id });
|
|
1698
|
+
},
|
|
1699
|
+
true,
|
|
1700
|
+
(args) => slideTarget(str(args?.id))
|
|
1701
|
+
);
|
|
1702
|
+
reg(
|
|
1703
|
+
"slide_set_background",
|
|
1704
|
+
"Set or clear a slide's background.",
|
|
1705
|
+
{
|
|
1706
|
+
id: { type: "string" },
|
|
1707
|
+
background: { description: "Background object `{ color?, image?, gradient? }` \u2014 pass null to clear." }
|
|
1708
|
+
},
|
|
1709
|
+
["id"],
|
|
1710
|
+
(args) => {
|
|
1711
|
+
const id = str(args.id);
|
|
1712
|
+
const bg = args.background && typeof args.background === "object" ? args.background : void 0;
|
|
1713
|
+
adapter.apply({ kind: "slide_set_background", id, background: bg });
|
|
1714
|
+
return textResult(`Background set on slide ${id}`, { id });
|
|
1715
|
+
},
|
|
1716
|
+
true,
|
|
1717
|
+
(args) => slideTarget(str(args?.id))
|
|
1718
|
+
);
|
|
1719
|
+
reg(
|
|
1720
|
+
"element_add",
|
|
1721
|
+
"Insert an element on a slide. Returns the new element id.",
|
|
1722
|
+
{
|
|
1723
|
+
slideId: { type: "string" },
|
|
1724
|
+
element: { description: "Partial element \u2014 type/x/y/w/h required, id auto-generated when absent." }
|
|
1725
|
+
},
|
|
1726
|
+
["slideId", "element"],
|
|
1727
|
+
(args) => {
|
|
1728
|
+
const slideId = str(args.slideId);
|
|
1729
|
+
const incoming = args.element && typeof args.element === "object" ? args.element : {};
|
|
1730
|
+
if (!incoming.type) return errorResult("element.type is required.");
|
|
1731
|
+
const element = {
|
|
1732
|
+
id: incoming.id ?? fancySlides.elementId(),
|
|
1733
|
+
...incoming
|
|
1734
|
+
};
|
|
1735
|
+
adapter.apply({ kind: "element_add", slideId, element });
|
|
1736
|
+
return textResult(`Added ${element.type} element ${element.id} on ${slideId}`, { id: element.id, slideId });
|
|
1737
|
+
},
|
|
1738
|
+
true,
|
|
1739
|
+
(args) => slideTarget(str(args?.slideId))
|
|
1740
|
+
);
|
|
1741
|
+
reg(
|
|
1742
|
+
"element_remove",
|
|
1743
|
+
"Delete an element by id.",
|
|
1744
|
+
{ slideId: { type: "string" }, elementId: { type: "string" } },
|
|
1745
|
+
["slideId", "elementId"],
|
|
1746
|
+
(args) => {
|
|
1747
|
+
const slideId = str(args.slideId);
|
|
1748
|
+
const elementId = str(args.elementId);
|
|
1749
|
+
adapter.apply({ kind: "element_remove", slideId, elementId });
|
|
1750
|
+
return textResult(`Removed element ${elementId} from ${slideId}`, { slideId, elementId });
|
|
1751
|
+
},
|
|
1752
|
+
true,
|
|
1753
|
+
(args) => elementTarget(str(args?.slideId), str(args?.elementId))
|
|
1754
|
+
);
|
|
1755
|
+
reg(
|
|
1756
|
+
"element_update",
|
|
1757
|
+
"Patch arbitrary fields on an element. Only the keys in `patch` change.",
|
|
1758
|
+
{
|
|
1759
|
+
slideId: { type: "string" },
|
|
1760
|
+
elementId: { type: "string" },
|
|
1761
|
+
patch: { type: "object" }
|
|
1762
|
+
},
|
|
1763
|
+
["slideId", "elementId", "patch"],
|
|
1764
|
+
(args) => {
|
|
1765
|
+
const slideId = str(args.slideId);
|
|
1766
|
+
const elementId = str(args.elementId);
|
|
1767
|
+
const patch = args.patch && typeof args.patch === "object" ? args.patch : {};
|
|
1768
|
+
adapter.apply({ kind: "element_update", slideId, elementId, patch });
|
|
1769
|
+
return textResult(`Patched element ${elementId}`, { keys: Object.keys(patch) });
|
|
1770
|
+
},
|
|
1771
|
+
true,
|
|
1772
|
+
(args) => elementTarget(str(args?.slideId), str(args?.elementId))
|
|
1773
|
+
);
|
|
1774
|
+
reg(
|
|
1775
|
+
"element_move",
|
|
1776
|
+
"Set element x/y (slide-relative, 0..1).",
|
|
1777
|
+
{
|
|
1778
|
+
slideId: { type: "string" },
|
|
1779
|
+
elementId: { type: "string" },
|
|
1780
|
+
x: { type: "number" },
|
|
1781
|
+
y: { type: "number" }
|
|
1782
|
+
},
|
|
1783
|
+
["slideId", "elementId", "x", "y"],
|
|
1784
|
+
(args) => {
|
|
1785
|
+
const slideId = str(args.slideId);
|
|
1786
|
+
const elementId = str(args.elementId);
|
|
1787
|
+
const x = clamp(num(args.x, 0), 0, 1);
|
|
1788
|
+
const y = clamp(num(args.y, 0), 0, 1);
|
|
1789
|
+
adapter.apply({ kind: "element_move", slideId, elementId, x, y });
|
|
1790
|
+
return textResult(`Moved element ${elementId} \u2192 (${x}, ${y})`, { x, y });
|
|
1791
|
+
},
|
|
1792
|
+
true,
|
|
1793
|
+
(args) => elementTarget(str(args?.slideId), str(args?.elementId))
|
|
1794
|
+
);
|
|
1795
|
+
reg(
|
|
1796
|
+
"element_resize",
|
|
1797
|
+
"Set element width/height (slide-relative, 0..1).",
|
|
1798
|
+
{
|
|
1799
|
+
slideId: { type: "string" },
|
|
1800
|
+
elementId: { type: "string" },
|
|
1801
|
+
w: { type: "number" },
|
|
1802
|
+
h: { type: "number" }
|
|
1803
|
+
},
|
|
1804
|
+
["slideId", "elementId", "w", "h"],
|
|
1805
|
+
(args) => {
|
|
1806
|
+
const slideId = str(args.slideId);
|
|
1807
|
+
const elementId = str(args.elementId);
|
|
1808
|
+
const w = clamp(num(args.w, 0), 0, 1);
|
|
1809
|
+
const h = clamp(num(args.h, 0), 0, 1);
|
|
1810
|
+
adapter.apply({ kind: "element_resize", slideId, elementId, w, h });
|
|
1811
|
+
return textResult(`Resized element ${elementId} \u2192 (${w}, ${h})`, { w, h });
|
|
1812
|
+
},
|
|
1813
|
+
true,
|
|
1814
|
+
(args) => elementTarget(str(args?.slideId), str(args?.elementId))
|
|
1815
|
+
);
|
|
1816
|
+
return {
|
|
1817
|
+
id: "slides",
|
|
1818
|
+
title: "Slides",
|
|
1819
|
+
dispose: () => {
|
|
1820
|
+
for (const d of disposers.splice(0)) d();
|
|
1821
|
+
}
|
|
1822
|
+
};
|
|
1823
|
+
}
|
|
1824
|
+
function num(v, fallback = 0) {
|
|
1825
|
+
return typeof v === "number" && Number.isFinite(v) ? v : fallback;
|
|
1826
|
+
}
|
|
1827
|
+
function str(v, fallback = "") {
|
|
1828
|
+
return typeof v === "string" ? v : fallback;
|
|
1829
|
+
}
|
|
1830
|
+
function clamp(v, min, max) {
|
|
1831
|
+
return Math.max(min, Math.min(max, v));
|
|
1832
|
+
}
|
|
1833
|
+
function firstTextContent(slide) {
|
|
1834
|
+
for (const e of slide.elements) {
|
|
1835
|
+
if (e.type === "text") {
|
|
1836
|
+
const t = e.content;
|
|
1837
|
+
if (typeof t === "string") return t.split("\n")[0]?.slice(0, 60);
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
return void 0;
|
|
1841
|
+
}
|
|
1466
1842
|
function AgentPanel({ agent, activity, onSubmit, busy, actions, className, style }) {
|
|
1467
1843
|
const scrollRef = react.useRef(null);
|
|
1468
1844
|
const inputRef = react.useRef(null);
|
|
@@ -2217,6 +2593,7 @@ exports.registerFormBridge = registerFormBridge;
|
|
|
2217
2593
|
exports.registerSceneBridge = registerSceneBridge;
|
|
2218
2594
|
exports.registerScreensBridge = registerScreensBridge;
|
|
2219
2595
|
exports.registerSheetsBridge = registerSheetsBridge;
|
|
2596
|
+
exports.registerSlidesBridge = registerSlidesBridge;
|
|
2220
2597
|
exports.registerUndoTools = registerUndoTools;
|
|
2221
2598
|
exports.resetActivityRegistry = resetActivityRegistry;
|
|
2222
2599
|
exports.resetAllUndoStacks = resetAllUndoStacks;
|