@particle-academy/agent-integrations 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bridges/sheets.d.cts +7 -30
- package/dist/bridges/sheets.d.ts +7 -30
- package/dist/bridges/slides.d.cts +0 -1
- package/dist/bridges/slides.d.ts +0 -1
- package/dist/bridges-artboard.cjs +1 -1
- package/dist/bridges-artboard.cjs.map +1 -1
- package/dist/bridges-artboard.js +1 -1
- package/dist/bridges-artboard.js.map +1 -1
- package/dist/bridges-sheets.cjs +14 -21
- package/dist/bridges-sheets.cjs.map +1 -1
- package/dist/bridges-sheets.js +1 -1
- package/dist/bridges-slides.cjs +25 -29
- package/dist/bridges-slides.cjs.map +1 -1
- package/dist/bridges-slides.js +1 -1
- package/dist/{chunk-R5OA26MJ.js → chunk-DR7X4TWE.js} +27 -25
- package/dist/chunk-DR7X4TWE.js.map +1 -0
- package/dist/{chunk-GSVVIT2O.js → chunk-HIMTURWL.js} +16 -23
- package/dist/chunk-HIMTURWL.js.map +1 -0
- package/dist/index.cjs +41 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -2
- package/dist/sheets-adapter.d.cts +1 -0
- package/dist/sheets-adapter.d.ts +1 -0
- package/package.json +5 -4
- package/dist/chunk-GSVVIT2O.js.map +0 -1
- package/dist/chunk-R5OA26MJ.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var fancyAutoCommon = require('@particle-academy/fancy-auto-common');
|
|
4
4
|
var react = require('react');
|
|
5
|
-
var fancySlides = require('@particle-academy/fancy-slides');
|
|
6
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
6
|
var reactDom = require('react-dom');
|
|
8
7
|
|
|
@@ -557,15 +556,14 @@ function registerSheetsBridge(host, options) {
|
|
|
557
556
|
value: { description: "string | number | boolean | null. Strings starting with '=' are stored as formulas." }
|
|
558
557
|
},
|
|
559
558
|
["address", "value"],
|
|
560
|
-
(args) => {
|
|
559
|
+
async (args) => {
|
|
561
560
|
const sheetId = getSheetId(args);
|
|
562
561
|
const address = String(args.address);
|
|
563
562
|
const value = args.value;
|
|
564
563
|
const wb = adapter.getWorkbook();
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
adapter.setWorkbook(next);
|
|
564
|
+
if (!getSheet(wb, sheetId)) return errorResult(`No sheet ${sheetId}`);
|
|
565
|
+
const { reduceWorkbook } = await import('@particle-academy/fancy-sheets');
|
|
566
|
+
adapter.setWorkbook(reduceWorkbook(wb, setCellOp(sheetId, address, value)));
|
|
569
567
|
return textResult(`${sheetId}!${address} \u2190 ${JSON.stringify(value)}`, { sheet: sheetId, address, value });
|
|
570
568
|
},
|
|
571
569
|
true,
|
|
@@ -579,15 +577,14 @@ function registerSheetsBridge(host, options) {
|
|
|
579
577
|
cells: { type: "object" }
|
|
580
578
|
},
|
|
581
579
|
["cells"],
|
|
582
|
-
(args) => {
|
|
580
|
+
async (args) => {
|
|
583
581
|
const sheetId = getSheetId(args);
|
|
584
582
|
const wb = adapter.getWorkbook();
|
|
585
|
-
|
|
586
|
-
if (!sheet) return errorResult(`No sheet ${sheetId}`);
|
|
583
|
+
if (!getSheet(wb, sheetId)) return errorResult(`No sheet ${sheetId}`);
|
|
587
584
|
const cells = args.cells && typeof args.cells === "object" ? args.cells : {};
|
|
588
|
-
const
|
|
589
|
-
|
|
590
|
-
const next =
|
|
585
|
+
const { reduceWorkbook } = await import('@particle-academy/fancy-sheets');
|
|
586
|
+
let next = wb;
|
|
587
|
+
for (const [addr, v] of Object.entries(cells)) next = reduceWorkbook(next, setCellOp(sheetId, addr, v));
|
|
591
588
|
adapter.setWorkbook(next);
|
|
592
589
|
return textResult(`Set ${Object.keys(cells).length} cells in ${sheetId}`, { sheet: sheetId, count: Object.keys(cells).length });
|
|
593
590
|
},
|
|
@@ -661,16 +658,11 @@ function registerSheetsBridge(host, options) {
|
|
|
661
658
|
}
|
|
662
659
|
};
|
|
663
660
|
}
|
|
664
|
-
function
|
|
665
|
-
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
return {
|
|
669
|
-
...wb,
|
|
670
|
-
sheets: wb.sheets.map(
|
|
671
|
-
(s) => s.id !== sheetId ? s : { ...s, cells: { ...s.cells, ...updates } }
|
|
672
|
-
)
|
|
673
|
-
};
|
|
661
|
+
function setCellOp(sheet, address, value) {
|
|
662
|
+
if (typeof value === "string" && value.startsWith("=")) {
|
|
663
|
+
return { type: "set_cell", sheet, address, value, formula: value.slice(1) };
|
|
664
|
+
}
|
|
665
|
+
return { type: "set_cell", sheet, address, value };
|
|
674
666
|
}
|
|
675
667
|
function parseAddress(addr) {
|
|
676
668
|
const m = /^([A-Za-z]+)(\d+)$/.exec(addr.trim());
|
|
@@ -1441,6 +1433,8 @@ function registerScreensBridge(host, options) {
|
|
|
1441
1433
|
}
|
|
1442
1434
|
};
|
|
1443
1435
|
}
|
|
1436
|
+
|
|
1437
|
+
// src/bridges/slides.ts
|
|
1444
1438
|
var DEFAULT_AGENT7 = { id: "agent", name: "Agent", color: "#a855f7" };
|
|
1445
1439
|
function registerSlidesBridge(host, options) {
|
|
1446
1440
|
const { adapter } = options;
|
|
@@ -1567,7 +1561,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1567
1561
|
["title"],
|
|
1568
1562
|
(args) => {
|
|
1569
1563
|
const title = str(args.title);
|
|
1570
|
-
adapter.apply({
|
|
1564
|
+
adapter.apply({ op: "deck.setTitle", title });
|
|
1571
1565
|
return textResult(`Title set to "${title}"`, { title });
|
|
1572
1566
|
},
|
|
1573
1567
|
true,
|
|
@@ -1588,7 +1582,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1588
1582
|
} else {
|
|
1589
1583
|
return errorResult("theme must be a string name or an object with a `name` field.");
|
|
1590
1584
|
}
|
|
1591
|
-
adapter.apply({
|
|
1585
|
+
adapter.apply({ op: "deck.setTheme", theme });
|
|
1592
1586
|
return textResult(`Applied theme: ${theme.name}`, { theme });
|
|
1593
1587
|
},
|
|
1594
1588
|
true,
|
|
@@ -1599,18 +1593,19 @@ function registerSlidesBridge(host, options) {
|
|
|
1599
1593
|
"Replace the entire deck atomically \u2014 stream a full presentation in. Pass a complete Deck object ({ id, title, theme, slides }). Validated + migrated before it lands; the prior deck is the undo snapshot.",
|
|
1600
1594
|
{ deck: { description: "A complete Deck object." } },
|
|
1601
1595
|
["deck"],
|
|
1602
|
-
(args) => {
|
|
1596
|
+
async (args) => {
|
|
1603
1597
|
const incoming = args.deck;
|
|
1604
1598
|
if (!incoming || typeof incoming !== "object") {
|
|
1605
1599
|
return errorResult("deck must be a complete Deck object ({ id, title, theme, slides }).");
|
|
1606
1600
|
}
|
|
1601
|
+
const { parseDeck } = await import('@particle-academy/fancy-slides');
|
|
1607
1602
|
let deck;
|
|
1608
1603
|
try {
|
|
1609
|
-
deck =
|
|
1604
|
+
deck = parseDeck(incoming);
|
|
1610
1605
|
} catch (e) {
|
|
1611
1606
|
return errorResult(e instanceof Error ? e.message : String(e));
|
|
1612
1607
|
}
|
|
1613
|
-
adapter.apply({
|
|
1608
|
+
adapter.apply({ op: "deck.replace", deck });
|
|
1614
1609
|
return textResult(`Loaded deck "${deck.title}" (${deck.slides.length} slides)`, { id: deck.id, slides: deck.slides.length });
|
|
1615
1610
|
},
|
|
1616
1611
|
true,
|
|
@@ -1624,11 +1619,12 @@ function registerSlidesBridge(host, options) {
|
|
|
1624
1619
|
slide: { description: "Partial slide payload \u2014 id is auto-generated when absent." }
|
|
1625
1620
|
},
|
|
1626
1621
|
[],
|
|
1627
|
-
(args) => {
|
|
1622
|
+
async (args) => {
|
|
1628
1623
|
const deck = adapter.getDeck();
|
|
1629
1624
|
const incoming = args.slide && typeof args.slide === "object" ? args.slide : {};
|
|
1625
|
+
const { slideId: newSlideId } = await import('@particle-academy/fancy-slides');
|
|
1630
1626
|
const slide = {
|
|
1631
|
-
id: incoming.id ??
|
|
1627
|
+
id: incoming.id ?? newSlideId(),
|
|
1632
1628
|
layout: incoming.layout ?? "blank",
|
|
1633
1629
|
elements: incoming.elements ?? [],
|
|
1634
1630
|
background: incoming.background,
|
|
@@ -1637,7 +1633,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1637
1633
|
metadata: incoming.metadata
|
|
1638
1634
|
};
|
|
1639
1635
|
const index = clamp(num(args.index, deck.slides.length), 0, deck.slides.length);
|
|
1640
|
-
adapter.apply({
|
|
1636
|
+
adapter.apply({ op: "slide.add", index, slide });
|
|
1641
1637
|
return textResult(`Added slide ${slide.id} at index ${index}`, { id: slide.id, index });
|
|
1642
1638
|
},
|
|
1643
1639
|
true,
|
|
@@ -1650,7 +1646,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1650
1646
|
["id"],
|
|
1651
1647
|
(args) => {
|
|
1652
1648
|
const id = str(args.id);
|
|
1653
|
-
adapter.apply({
|
|
1649
|
+
adapter.apply({ op: "slide.remove", slideId: id });
|
|
1654
1650
|
return textResult(`Removed slide ${id}`, { id });
|
|
1655
1651
|
},
|
|
1656
1652
|
true,
|
|
@@ -1664,7 +1660,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1664
1660
|
(args) => {
|
|
1665
1661
|
const id = str(args.id);
|
|
1666
1662
|
const toIndex = num(args.toIndex, 0);
|
|
1667
|
-
adapter.apply({
|
|
1663
|
+
adapter.apply({ op: "slide.reorder", slideId: id, toIndex });
|
|
1668
1664
|
return textResult(`Moved slide ${id} \u2192 ${toIndex}`, { id, toIndex });
|
|
1669
1665
|
},
|
|
1670
1666
|
true,
|
|
@@ -1678,7 +1674,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1678
1674
|
(args) => {
|
|
1679
1675
|
const id = str(args.id);
|
|
1680
1676
|
const layout = str(args.layout);
|
|
1681
|
-
adapter.apply({
|
|
1677
|
+
adapter.apply({ op: "slide.setLayout", slideId: id, layout: layout ?? "blank" });
|
|
1682
1678
|
return textResult(`Slide ${id} layout \u2192 ${layout}`, { id, layout });
|
|
1683
1679
|
},
|
|
1684
1680
|
true,
|
|
@@ -1692,7 +1688,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1692
1688
|
(args) => {
|
|
1693
1689
|
const id = str(args.id);
|
|
1694
1690
|
const notes = str(args.notes);
|
|
1695
|
-
adapter.apply({
|
|
1691
|
+
adapter.apply({ op: "slide.setNotes", slideId: id, notes });
|
|
1696
1692
|
return textResult(`Notes updated on slide ${id}`, { id });
|
|
1697
1693
|
},
|
|
1698
1694
|
true,
|
|
@@ -1709,7 +1705,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1709
1705
|
(args) => {
|
|
1710
1706
|
const id = str(args.id);
|
|
1711
1707
|
const bg = args.background && typeof args.background === "object" ? args.background : void 0;
|
|
1712
|
-
adapter.apply({
|
|
1708
|
+
adapter.apply({ op: "slide.setBackground", slideId: id, background: bg });
|
|
1713
1709
|
return textResult(`Background set on slide ${id}`, { id });
|
|
1714
1710
|
},
|
|
1715
1711
|
true,
|
|
@@ -1728,7 +1724,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1728
1724
|
(args) => {
|
|
1729
1725
|
const id = str(args.id);
|
|
1730
1726
|
const transition = args.transition && typeof args.transition === "object" ? args.transition : void 0;
|
|
1731
|
-
adapter.apply({
|
|
1727
|
+
adapter.apply({ op: "slide.setTransition", slideId: id, transition });
|
|
1732
1728
|
return textResult(`Transition set on slide ${id}`, { id });
|
|
1733
1729
|
},
|
|
1734
1730
|
true,
|
|
@@ -1742,15 +1738,16 @@ function registerSlidesBridge(host, options) {
|
|
|
1742
1738
|
element: { description: "Partial element \u2014 type/x/y/w/h required, id auto-generated when absent." }
|
|
1743
1739
|
},
|
|
1744
1740
|
["slideId", "element"],
|
|
1745
|
-
(args) => {
|
|
1741
|
+
async (args) => {
|
|
1746
1742
|
const slideId = str(args.slideId);
|
|
1747
1743
|
const incoming = args.element && typeof args.element === "object" ? args.element : {};
|
|
1748
1744
|
if (!incoming.type) return errorResult("element.type is required.");
|
|
1745
|
+
const { elementId: newElementId } = await import('@particle-academy/fancy-slides');
|
|
1749
1746
|
const element = {
|
|
1750
|
-
id: incoming.id ??
|
|
1747
|
+
id: incoming.id ?? newElementId(),
|
|
1751
1748
|
...incoming
|
|
1752
1749
|
};
|
|
1753
|
-
adapter.apply({
|
|
1750
|
+
adapter.apply({ op: "element.add", slideId, element });
|
|
1754
1751
|
return textResult(`Added ${element.type} element ${element.id} on ${slideId}`, { id: element.id, slideId });
|
|
1755
1752
|
},
|
|
1756
1753
|
true,
|
|
@@ -1764,7 +1761,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1764
1761
|
(args) => {
|
|
1765
1762
|
const slideId = str(args.slideId);
|
|
1766
1763
|
const elementId = str(args.elementId);
|
|
1767
|
-
adapter.apply({
|
|
1764
|
+
adapter.apply({ op: "element.remove", slideId, elementId });
|
|
1768
1765
|
return textResult(`Removed element ${elementId} from ${slideId}`, { slideId, elementId });
|
|
1769
1766
|
},
|
|
1770
1767
|
true,
|
|
@@ -1783,7 +1780,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1783
1780
|
const slideId = str(args.slideId);
|
|
1784
1781
|
const elementId = str(args.elementId);
|
|
1785
1782
|
const patch = args.patch && typeof args.patch === "object" ? args.patch : {};
|
|
1786
|
-
adapter.apply({
|
|
1783
|
+
adapter.apply({ op: "element.update", slideId, elementId, patch });
|
|
1787
1784
|
return textResult(`Patched element ${elementId}`, { keys: Object.keys(patch) });
|
|
1788
1785
|
},
|
|
1789
1786
|
true,
|
|
@@ -1804,7 +1801,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1804
1801
|
const elementId = str(args.elementId);
|
|
1805
1802
|
const x = clamp(num(args.x, 0), 0, 1);
|
|
1806
1803
|
const y = clamp(num(args.y, 0), 0, 1);
|
|
1807
|
-
adapter.apply({
|
|
1804
|
+
adapter.apply({ op: "element.move", slideId, elementId, x, y });
|
|
1808
1805
|
return textResult(`Moved element ${elementId} \u2192 (${x}, ${y})`, { x, y });
|
|
1809
1806
|
},
|
|
1810
1807
|
true,
|
|
@@ -1825,7 +1822,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1825
1822
|
const elementId = str(args.elementId);
|
|
1826
1823
|
const w = clamp(num(args.w, 0), 0, 1);
|
|
1827
1824
|
const h = clamp(num(args.h, 0), 0, 1);
|
|
1828
|
-
adapter.apply({
|
|
1825
|
+
adapter.apply({ op: "element.resize", slideId, elementId, w, h });
|
|
1829
1826
|
return textResult(`Resized element ${elementId} \u2192 (${w}, ${h})`, { w, h });
|
|
1830
1827
|
},
|
|
1831
1828
|
true,
|
|
@@ -1846,7 +1843,7 @@ function registerSlidesBridge(host, options) {
|
|
|
1846
1843
|
const slideId = str(args.slideId);
|
|
1847
1844
|
const elementId = str(args.elementId);
|
|
1848
1845
|
const animation = args.animation && typeof args.animation === "object" ? args.animation : void 0;
|
|
1849
|
-
adapter.apply({
|
|
1846
|
+
adapter.apply({ op: "element.setAnimation", slideId, elementId, animation });
|
|
1850
1847
|
return textResult(`Animation ${animation ? "set on" : "cleared from"} element ${elementId}`, { elementId });
|
|
1851
1848
|
},
|
|
1852
1849
|
true,
|