@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/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
- const sheet = getSheet(wb, sheetId);
566
- if (!sheet) return errorResult(`No sheet ${sheetId}`);
567
- const next = mergeCells(wb, sheetId, { [address]: cellOf(address, value) });
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
- const sheet = getSheet(wb, sheetId);
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 updates = {};
589
- for (const [addr, v] of Object.entries(cells)) updates[addr] = cellOf(addr, v);
590
- const next = mergeCells(wb, sheetId, updates);
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 cellOf(address, value) {
665
- return { address, value };
666
- }
667
- function mergeCells(wb, sheetId, updates) {
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({ kind: "deck_set_title", title });
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({ kind: "deck_apply_theme", theme });
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 = fancySlides.parseDeck(incoming);
1604
+ deck = parseDeck(incoming);
1610
1605
  } catch (e) {
1611
1606
  return errorResult(e instanceof Error ? e.message : String(e));
1612
1607
  }
1613
- adapter.apply({ kind: "deck_set", deck });
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 ?? fancySlides.slideId(),
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({ kind: "slide_add", index, slide });
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({ kind: "slide_remove", id });
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({ kind: "slide_reorder", id, toIndex });
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({ kind: "slide_set_layout", id, layout: layout ?? "blank" });
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({ kind: "slide_set_notes", id, notes });
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({ kind: "slide_set_background", id, background: bg });
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({ kind: "slide_set_transition", id, transition });
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 ?? fancySlides.elementId(),
1747
+ id: incoming.id ?? newElementId(),
1751
1748
  ...incoming
1752
1749
  };
1753
- adapter.apply({ kind: "element_add", slideId, element });
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({ kind: "element_remove", slideId, elementId });
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({ kind: "element_update", slideId, elementId, patch });
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({ kind: "element_move", slideId, elementId, x, y });
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({ kind: "element_resize", slideId, elementId, w, h });
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({ kind: "element_set_animation", slideId, elementId, animation });
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,