@particle-academy/agent-integrations 0.50.0 → 0.51.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.
Files changed (226) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +11 -0
  3. package/dist/bridges/artboard.d.cts +3 -3
  4. package/dist/bridges/artboard.d.ts +3 -3
  5. package/dist/bridges/catalog.d.cts +3 -3
  6. package/dist/bridges/catalog.d.ts +3 -3
  7. package/dist/bridges/charts.d.cts +3 -3
  8. package/dist/bridges/charts.d.ts +3 -3
  9. package/dist/bridges/cms.d.cts +3 -3
  10. package/dist/bridges/cms.d.ts +3 -3
  11. package/dist/bridges/code.d.cts +3 -3
  12. package/dist/bridges/code.d.ts +3 -3
  13. package/dist/bridges/doc.d.cts +3 -3
  14. package/dist/bridges/doc.d.ts +3 -3
  15. package/dist/bridges/features.d.cts +3 -3
  16. package/dist/bridges/features.d.ts +3 -3
  17. package/dist/bridges/files.d.cts +3 -3
  18. package/dist/bridges/files.d.ts +3 -3
  19. package/dist/bridges/flow.d.cts +3 -3
  20. package/dist/bridges/flow.d.ts +3 -3
  21. package/dist/bridges/forms.d.cts +3 -3
  22. package/dist/bridges/forms.d.ts +3 -3
  23. package/dist/bridges/git.d.cts +3 -3
  24. package/dist/bridges/git.d.ts +3 -3
  25. package/dist/bridges/grid.d.cts +3 -3
  26. package/dist/bridges/grid.d.ts +3 -3
  27. package/dist/bridges/map.d.cts +3 -3
  28. package/dist/bridges/map.d.ts +3 -3
  29. package/dist/bridges/navigation.d.cts +3 -3
  30. package/dist/bridges/navigation.d.ts +3 -3
  31. package/dist/bridges/passkeys.d.cts +3 -3
  32. package/dist/bridges/passkeys.d.ts +3 -3
  33. package/dist/bridges/scene.d.cts +3 -3
  34. package/dist/bridges/scene.d.ts +3 -3
  35. package/dist/bridges/screen-doc.d.cts +3 -3
  36. package/dist/bridges/screen-doc.d.ts +3 -3
  37. package/dist/bridges/screens.d.cts +3 -3
  38. package/dist/bridges/screens.d.ts +3 -3
  39. package/dist/bridges/sheets.d.cts +3 -3
  40. package/dist/bridges/sheets.d.ts +3 -3
  41. package/dist/bridges/slides.d.cts +3 -3
  42. package/dist/bridges/slides.d.ts +3 -3
  43. package/dist/bridges/terminal.d.cts +3 -3
  44. package/dist/bridges/terminal.d.ts +3 -3
  45. package/dist/bridges/tui.d.cts +2 -2
  46. package/dist/bridges/tui.d.ts +2 -2
  47. package/dist/bridges/whiteboard.d.cts +3 -3
  48. package/dist/bridges/whiteboard.d.ts +3 -3
  49. package/dist/bridges-artboard.cjs +11 -5
  50. package/dist/bridges-artboard.cjs.map +1 -1
  51. package/dist/bridges-artboard.js +6 -4
  52. package/dist/bridges-artboard.js.map +1 -1
  53. package/dist/bridges-catalog.cjs +11 -5
  54. package/dist/bridges-catalog.cjs.map +1 -1
  55. package/dist/bridges-catalog.js +3 -3
  56. package/dist/bridges-charts.cjs +11 -5
  57. package/dist/bridges-charts.cjs.map +1 -1
  58. package/dist/bridges-charts.js +3 -3
  59. package/dist/bridges-cms.cjs +11 -5
  60. package/dist/bridges-cms.cjs.map +1 -1
  61. package/dist/bridges-cms.js +4 -4
  62. package/dist/bridges-code.cjs +11 -5
  63. package/dist/bridges-code.cjs.map +1 -1
  64. package/dist/bridges-code.js +3 -3
  65. package/dist/bridges-doc.cjs +11 -5
  66. package/dist/bridges-doc.cjs.map +1 -1
  67. package/dist/bridges-doc.js +3 -3
  68. package/dist/bridges-features.cjs +11 -5
  69. package/dist/bridges-features.cjs.map +1 -1
  70. package/dist/bridges-features.js +3 -3
  71. package/dist/bridges-files.cjs +11 -5
  72. package/dist/bridges-files.cjs.map +1 -1
  73. package/dist/bridges-files.js +3 -3
  74. package/dist/bridges-flow.cjs +11 -5
  75. package/dist/bridges-flow.cjs.map +1 -1
  76. package/dist/bridges-flow.js +6 -4
  77. package/dist/bridges-flow.js.map +1 -1
  78. package/dist/bridges-forms.cjs +11 -5
  79. package/dist/bridges-forms.cjs.map +1 -1
  80. package/dist/bridges-forms.js +3 -3
  81. package/dist/bridges-git.cjs +10 -5
  82. package/dist/bridges-git.cjs.map +1 -1
  83. package/dist/bridges-git.js +3 -3
  84. package/dist/bridges-grid.cjs +11 -5
  85. package/dist/bridges-grid.cjs.map +1 -1
  86. package/dist/bridges-grid.js +3 -3
  87. package/dist/bridges-map.cjs +11 -5
  88. package/dist/bridges-map.cjs.map +1 -1
  89. package/dist/bridges-map.js +3 -3
  90. package/dist/bridges-navigation.cjs +11 -5
  91. package/dist/bridges-navigation.cjs.map +1 -1
  92. package/dist/bridges-navigation.js +3 -3
  93. package/dist/bridges-passkeys.cjs +11 -5
  94. package/dist/bridges-passkeys.cjs.map +1 -1
  95. package/dist/bridges-passkeys.js +3 -3
  96. package/dist/bridges-scene.cjs +11 -5
  97. package/dist/bridges-scene.cjs.map +1 -1
  98. package/dist/bridges-scene.js +3 -3
  99. package/dist/bridges-screen-doc.cjs +14 -6
  100. package/dist/bridges-screen-doc.cjs.map +1 -1
  101. package/dist/bridges-screen-doc.js +4 -4
  102. package/dist/bridges-screens.cjs +11 -5
  103. package/dist/bridges-screens.cjs.map +1 -1
  104. package/dist/bridges-screens.js +3 -3
  105. package/dist/bridges-sheets.cjs +11 -5
  106. package/dist/bridges-sheets.cjs.map +1 -1
  107. package/dist/bridges-sheets.js +3 -3
  108. package/dist/bridges-slides.cjs +11 -5
  109. package/dist/bridges-slides.cjs.map +1 -1
  110. package/dist/bridges-slides.js +3 -3
  111. package/dist/bridges-terminal.cjs +11 -5
  112. package/dist/bridges-terminal.cjs.map +1 -1
  113. package/dist/bridges-terminal.js +3 -3
  114. package/dist/bridges-tui.cjs +1 -1
  115. package/dist/bridges-tui.cjs.map +1 -1
  116. package/dist/bridges-tui.js +2 -2
  117. package/dist/bridges-whiteboard.cjs +11 -5
  118. package/dist/bridges-whiteboard.cjs.map +1 -1
  119. package/dist/bridges-whiteboard.js +3 -3
  120. package/dist/{chunk-CZV3WUW5.js → chunk-3GFKC6OK.js} +20 -7
  121. package/dist/chunk-3GFKC6OK.js.map +1 -0
  122. package/dist/{chunk-JLHVQWOV.js → chunk-6Q3PMT7K.js} +4 -4
  123. package/dist/chunk-6Q3PMT7K.js.map +1 -0
  124. package/dist/{chunk-AXWMWYH5.js → chunk-C4AQ2YBW.js} +7 -6
  125. package/dist/chunk-C4AQ2YBW.js.map +1 -0
  126. package/dist/{chunk-NH6HUVXQ.js → chunk-CI5ZVHDY.js} +8 -6
  127. package/dist/chunk-CI5ZVHDY.js.map +1 -0
  128. package/dist/{chunk-5ZWNCHZS.js → chunk-CKJL5C7A.js} +8 -6
  129. package/dist/chunk-CKJL5C7A.js.map +1 -0
  130. package/dist/{chunk-HOZCDDRA.js → chunk-CP3EHLZJ.js} +8 -6
  131. package/dist/chunk-CP3EHLZJ.js.map +1 -0
  132. package/dist/{chunk-VFWFT3OK.js → chunk-DNF3QVTW.js} +8 -6
  133. package/dist/chunk-DNF3QVTW.js.map +1 -0
  134. package/dist/{chunk-BG3QXNM6.js → chunk-HNVHAY4A.js} +8 -6
  135. package/dist/chunk-HNVHAY4A.js.map +1 -0
  136. package/dist/{chunk-5M5ELTHE.js → chunk-KAEPC6N4.js} +8 -6
  137. package/dist/chunk-KAEPC6N4.js.map +1 -0
  138. package/dist/{chunk-3WVXAB3D.js → chunk-M423JOQ3.js} +3 -3
  139. package/dist/{chunk-3WVXAB3D.js.map → chunk-M423JOQ3.js.map} +1 -1
  140. package/dist/{chunk-SWWJUOCY.js → chunk-MKC633WU.js} +3 -3
  141. package/dist/{chunk-SWWJUOCY.js.map → chunk-MKC633WU.js.map} +1 -1
  142. package/dist/{chunk-LQB42OSA.js → chunk-MKJE6V4Z.js} +8 -6
  143. package/dist/chunk-MKJE6V4Z.js.map +1 -0
  144. package/dist/{chunk-MIDZWKIF.js → chunk-NB5AQIR2.js} +8 -6
  145. package/dist/chunk-NB5AQIR2.js.map +1 -0
  146. package/dist/{chunk-VMRUW4B4.js → chunk-OUUHFR4N.js} +8 -6
  147. package/dist/chunk-OUUHFR4N.js.map +1 -0
  148. package/dist/{chunk-FCXSR7I5.js → chunk-P6SJBP5T.js} +8 -6
  149. package/dist/chunk-P6SJBP5T.js.map +1 -0
  150. package/dist/{chunk-5JLTXHX6.js → chunk-PMPBI6I3.js} +7 -5
  151. package/dist/chunk-PMPBI6I3.js.map +1 -0
  152. package/dist/{chunk-4WVLZ6YP.js → chunk-PV4FZDYX.js} +8 -6
  153. package/dist/chunk-PV4FZDYX.js.map +1 -0
  154. package/dist/{chunk-3UUF5KKZ.js → chunk-QEVSNDJW.js} +8 -6
  155. package/dist/chunk-QEVSNDJW.js.map +1 -0
  156. package/dist/{chunk-VOCUGTZB.js → chunk-S4DA2UTJ.js} +8 -6
  157. package/dist/chunk-S4DA2UTJ.js.map +1 -0
  158. package/dist/{chunk-RVMM4BHK.js → chunk-V6EHKHSF.js} +8 -6
  159. package/dist/chunk-V6EHKHSF.js.map +1 -0
  160. package/dist/{chunk-36MKPTVD.js → chunk-VE7TRWZR.js} +8 -6
  161. package/dist/chunk-VE7TRWZR.js.map +1 -0
  162. package/dist/{chunk-Z5NL5D4J.js → chunk-VFUKZ6UA.js} +8 -6
  163. package/dist/chunk-VFUKZ6UA.js.map +1 -0
  164. package/dist/{chunk-3HVYUMQF.js → chunk-VHB3VE53.js} +8 -6
  165. package/dist/chunk-VHB3VE53.js.map +1 -0
  166. package/dist/{chunk-R4XXOGQH.js → chunk-ZDKYKJFH.js} +10 -6
  167. package/dist/chunk-ZDKYKJFH.js.map +1 -0
  168. package/dist/components-shared-whiteboard.cjs +29 -10
  169. package/dist/components-shared-whiteboard.cjs.map +1 -1
  170. package/dist/components-shared-whiteboard.js +3 -3
  171. package/dist/dom-navigation/index.d.cts +3 -3
  172. package/dist/dom-navigation/index.d.ts +3 -3
  173. package/dist/index.cjs +96 -44
  174. package/dist/index.cjs.map +1 -1
  175. package/dist/index.d.cts +5 -5
  176. package/dist/index.d.ts +5 -5
  177. package/dist/index.js +26 -26
  178. package/dist/mcp/index.d.cts +5 -5
  179. package/dist/mcp/index.d.ts +5 -5
  180. package/dist/mcp/stdio.d.cts +3 -3
  181. package/dist/mcp/stdio.d.ts +3 -3
  182. package/dist/mcp.cjs +18 -5
  183. package/dist/mcp.cjs.map +1 -1
  184. package/dist/mcp.js +1 -1
  185. package/dist/presence/index.d.cts +1 -1
  186. package/dist/presence/index.d.ts +1 -1
  187. package/dist/{server-1y0n61R5.d.cts → server-DJJygNo1.d.cts} +2 -2
  188. package/dist/{server-vq6qVl3T.d.ts → server-Dwo9LOxh.d.ts} +2 -2
  189. package/dist/sharing/index.d.cts +3 -3
  190. package/dist/sharing/index.d.ts +3 -3
  191. package/dist/sheets-adapter.d.cts +3 -3
  192. package/dist/sheets-adapter.d.ts +3 -3
  193. package/dist/{tool-host-LYfdPE8u.d.ts → tool-host-BBSaU7IJ.d.cts} +10 -4
  194. package/dist/{tool-host-D67N2a2h.d.cts → tool-host-BqJRPr_T.d.ts} +10 -4
  195. package/dist/{types-DP5yQZQU.d.cts → types-D_H2f-wF.d.cts} +1 -1
  196. package/dist/{types-VX_9je7w.d.ts → types-D_TzdBsK.d.ts} +1 -1
  197. package/dist/{types-gzIpsUDE.d.cts → types-ITRQFAir.d.cts} +26 -1
  198. package/dist/{types-gzIpsUDE.d.ts → types-ITRQFAir.d.ts} +26 -1
  199. package/dist/undo/index.d.cts +2 -2
  200. package/dist/undo/index.d.ts +2 -2
  201. package/dist/undo.cjs +7 -3
  202. package/dist/undo.cjs.map +1 -1
  203. package/dist/undo.js +3 -3
  204. package/package.json +1 -1
  205. package/dist/chunk-36MKPTVD.js.map +0 -1
  206. package/dist/chunk-3HVYUMQF.js.map +0 -1
  207. package/dist/chunk-3UUF5KKZ.js.map +0 -1
  208. package/dist/chunk-4WVLZ6YP.js.map +0 -1
  209. package/dist/chunk-5JLTXHX6.js.map +0 -1
  210. package/dist/chunk-5M5ELTHE.js.map +0 -1
  211. package/dist/chunk-5ZWNCHZS.js.map +0 -1
  212. package/dist/chunk-AXWMWYH5.js.map +0 -1
  213. package/dist/chunk-BG3QXNM6.js.map +0 -1
  214. package/dist/chunk-CZV3WUW5.js.map +0 -1
  215. package/dist/chunk-FCXSR7I5.js.map +0 -1
  216. package/dist/chunk-HOZCDDRA.js.map +0 -1
  217. package/dist/chunk-JLHVQWOV.js.map +0 -1
  218. package/dist/chunk-LQB42OSA.js.map +0 -1
  219. package/dist/chunk-MIDZWKIF.js.map +0 -1
  220. package/dist/chunk-NH6HUVXQ.js.map +0 -1
  221. package/dist/chunk-R4XXOGQH.js.map +0 -1
  222. package/dist/chunk-RVMM4BHK.js.map +0 -1
  223. package/dist/chunk-VFWFT3OK.js.map +0 -1
  224. package/dist/chunk-VMRUW4B4.js.map +0 -1
  225. package/dist/chunk-VOCUGTZB.js.map +0 -1
  226. package/dist/chunk-Z5NL5D4J.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import { ShareControls, AgentCursor, AgentActivityHighlight, AgentPanel } from './chunk-QDC7MXBH.js';
2
2
  import { createSessionDescriptor, attachSseRelay } from './chunk-6TZ5IBRN.js';
3
3
  import { attachInProcess } from './chunk-AFUULW5E.js';
4
- import { registerWhiteboardBridge } from './chunk-LQB42OSA.js';
5
- import './chunk-R4XXOGQH.js';
4
+ import { registerWhiteboardBridge } from './chunk-MKJE6V4Z.js';
5
+ import './chunk-ZDKYKJFH.js';
6
6
  import './chunk-2VENWGLZ.js';
7
7
  import './chunk-C3TYI5TJ.js';
8
- import { MicroMcpServer } from './chunk-CZV3WUW5.js';
8
+ import { MicroMcpServer } from './chunk-3GFKC6OK.js';
9
9
  import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
10
10
  import { Board, Connector, Shape, StickyNote, CursorLayer } from '@particle-academy/fancy-whiteboard';
11
11
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,8 +1,8 @@
1
1
  import { PageSnapshot, PageReadout, NavigationConfirmRequest, NavigationBridgeAdapter } from '../bridges/navigation.cjs';
2
2
  export { PageAction } from '../bridges/navigation.cjs';
3
- import '../tool-host-D67N2a2h.cjs';
4
- import '../types-gzIpsUDE.cjs';
5
- import '../types-DP5yQZQU.cjs';
3
+ import '../tool-host-BBSaU7IJ.cjs';
4
+ import '../types-ITRQFAir.cjs';
5
+ import '../types-D_H2f-wF.cjs';
6
6
 
7
7
  /**
8
8
  * The in-page half of DOM co-browsing: a framework-free walker that turns a
@@ -1,8 +1,8 @@
1
1
  import { PageSnapshot, PageReadout, NavigationConfirmRequest, NavigationBridgeAdapter } from '../bridges/navigation.js';
2
2
  export { PageAction } from '../bridges/navigation.js';
3
- import '../tool-host-LYfdPE8u.js';
4
- import '../types-gzIpsUDE.js';
5
- import '../types-VX_9je7w.js';
3
+ import '../tool-host-BqJRPr_T.js';
4
+ import '../types-ITRQFAir.js';
5
+ import '../types-D_TzdBsK.js';
6
6
 
7
7
  /**
8
8
  * The in-page half of DOM co-browsing: a framework-free walker that turns a
package/dist/index.cjs CHANGED
@@ -60,13 +60,23 @@ var ToolRegistry = class {
60
60
  */
61
61
  this.withdrawn = /* @__PURE__ */ new Set();
62
62
  }
63
- registerTool(definition, handler) {
64
- this.tools.set(definition.name, { definition, handler });
65
- this.withdrawn.delete(definition.name);
63
+ registerTool(definition, handler, options = {}) {
64
+ const name = definition.name;
65
+ const { owner, replace = false } = options;
66
+ const held = this.tools.get(name);
67
+ if (held && !replace && (owner === void 0 || held.owner !== owner)) {
68
+ throw new Error(
69
+ `Tool "${name}" is already registered by ${describeOwner(held.owner)}; ${describeOwner(owner)} cannot register it too. Two registrants for one name would leave the first one listed but unreachable. Give one of them a different tool name, dispose the first registration, or pass { replace: true } to take the name over deliberately.`
70
+ );
71
+ }
72
+ const record = owner === void 0 ? { definition, handler } : { definition, handler, owner };
73
+ this.tools.set(name, record);
74
+ this.withdrawn.delete(name);
66
75
  this.onToolsChanged();
67
76
  return () => {
68
- if (this.tools.delete(definition.name)) {
69
- this.withdrawn.add(definition.name);
77
+ if (this.tools.get(name) === record) {
78
+ this.tools.delete(name);
79
+ this.withdrawn.add(name);
70
80
  this.onToolsChanged();
71
81
  }
72
82
  };
@@ -95,6 +105,9 @@ var ToolRegistry = class {
95
105
  onToolsChanged() {
96
106
  }
97
107
  };
108
+ function describeOwner(owner) {
109
+ return owner === void 0 ? "an unnamed registrant (pass { owner } to registerTool to identify it)" : `"${owner}"`;
110
+ }
98
111
 
99
112
  // src/mcp/server.ts
100
113
  var MicroMcpServer = class extends ToolRegistry {
@@ -434,7 +447,7 @@ function registerTuiBridge(host, options) {
434
447
  } catch (error) {
435
448
  return errorResult(error instanceof Error ? error.message : String(error));
436
449
  }
437
- }));
450
+ }, { owner: "tui" }));
438
451
  };
439
452
  const publish = async (surfaceId, type, payload, actor = defaultActor, priority = "normal") => options.eventStore.append({ appId: options.appId, sessionId: options.sessionId, surfaceId, type, payload, actor, priority });
440
453
  register("tui_surfaces_list", "List addressable Fancy TUI surfaces and commands.", {}, [], () => options.registry.list().map((surface) => ({ id: surface.id, kind: surface.kind, label: surface.label, commands: surface.commands?.map((command) => ({ name: command.name, description: command.description, policy: command.policy ?? "execute", inputSchema: command.inputSchema })) ?? [] })));
@@ -514,6 +527,7 @@ function registerTuiBridge(host, options) {
514
527
 
515
528
  // src/undo/undo-tools.ts
516
529
  var installedHosts = /* @__PURE__ */ new WeakSet();
530
+ var UNDO_TOOLS_OWNER = "agent-undo";
517
531
  function ensureUndoToolsRegistered(host, options = {}) {
518
532
  if (installedHosts.has(host)) return;
519
533
  installedHosts.add(host);
@@ -538,7 +552,8 @@ function registerUndoTools(host, options = {}) {
538
552
  const entry = await fancyAutoCommon.undoOne(agentOf(args));
539
553
  if (!entry) return errorResult("Nothing to undo.");
540
554
  return textResult(`Undid: ${entry.label}`, { entry: serialize(entry) });
541
- }
555
+ },
556
+ { owner: UNDO_TOOLS_OWNER }
542
557
  )
543
558
  );
544
559
  disposers.push(
@@ -556,7 +571,8 @@ function registerUndoTools(host, options = {}) {
556
571
  const entry = await fancyAutoCommon.redoOne(agentOf(args));
557
572
  if (!entry) return errorResult("Nothing to redo.");
558
573
  return textResult(`Redid: ${entry.label}`, { entry: serialize(entry) });
559
- }
574
+ },
575
+ { owner: UNDO_TOOLS_OWNER }
560
576
  )
561
577
  );
562
578
  disposers.push(
@@ -574,7 +590,8 @@ function registerUndoTools(host, options = {}) {
574
590
  const history = fancyAutoCommon.readHistory(agentOf(args)).map(serialize);
575
591
  const text = history.map((e) => `${new Date(e.timestamp).toISOString()} ${e.bridgeId} ${e.action}: ${e.label}`).join("\n");
576
592
  return textResult(text || "(empty)", history);
577
- }
593
+ },
594
+ { owner: UNDO_TOOLS_OWNER }
578
595
  )
579
596
  );
580
597
  return () => disposers.forEach((d) => d());
@@ -595,6 +612,7 @@ function registerFormBridge(host, options) {
595
612
  const agent = { ...DEFAULT_AGENT, ...options.agent ?? {} };
596
613
  const pendingMode = options.pendingMode ?? true;
597
614
  const disposers = [];
615
+ const bridgeId = `form:${adapter.id}`;
598
616
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
599
617
  const formId = adapter.id;
600
618
  const target = (args) => ({
@@ -625,7 +643,8 @@ function registerFormBridge(host, options) {
625
643
  description,
626
644
  inputSchema: { type: "object", properties, required, additionalProperties: false }
627
645
  },
628
- final
646
+ final,
647
+ { owner: bridgeId }
629
648
  )
630
649
  );
631
650
  };
@@ -743,7 +762,7 @@ function registerFormBridge(host, options) {
743
762
  true
744
763
  );
745
764
  return {
746
- id: `form:${formId}`,
765
+ id: bridgeId,
747
766
  title: adapter.title ?? formId,
748
767
  dispose: () => {
749
768
  for (const d of disposers) d();
@@ -757,6 +776,7 @@ function registerSheetsBridge(host, options) {
757
776
  const { adapter } = options;
758
777
  const agent = { ...DEFAULT_AGENT2, ...options.agent ?? {} };
759
778
  const disposers = [];
779
+ const bridgeId = "sheets";
760
780
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
761
781
  const target = (sheetId, address) => ({
762
782
  kind: "sheet",
@@ -786,7 +806,8 @@ function registerSheetsBridge(host, options) {
786
806
  description,
787
807
  inputSchema: { type: "object", properties, required, additionalProperties: false }
788
808
  },
789
- final
809
+ final,
810
+ { owner: bridgeId }
790
811
  )
791
812
  );
792
813
  };
@@ -966,7 +987,7 @@ function registerSheetsBridge(host, options) {
966
987
  (args) => target(getSheetId(args), String(args.address ?? ""))
967
988
  );
968
989
  return {
969
- id: "sheets",
990
+ id: bridgeId,
970
991
  title: "Sheets",
971
992
  dispose: () => {
972
993
  for (const d of disposers) d();
@@ -1105,6 +1126,7 @@ function registerCodeBridge(host, options) {
1105
1126
  const { adapter } = options;
1106
1127
  const agent = { ...DEFAULT_AGENT3, ...options.agent ?? {} };
1107
1128
  const disposers = [];
1129
+ const bridgeId = `code:${adapter.id}`;
1108
1130
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
1109
1131
  const target = {
1110
1132
  kind: "code",
@@ -1144,7 +1166,8 @@ function registerCodeBridge(host, options) {
1144
1166
  description,
1145
1167
  inputSchema: { type: "object", properties, required, additionalProperties: false }
1146
1168
  },
1147
- final
1169
+ final,
1170
+ { owner: bridgeId }
1148
1171
  )
1149
1172
  );
1150
1173
  };
@@ -1292,7 +1315,7 @@ function registerCodeBridge(host, options) {
1292
1315
  false
1293
1316
  );
1294
1317
  return {
1295
- id: `code:${adapter.id}`,
1318
+ id: bridgeId,
1296
1319
  title: adapter.title ?? adapter.id,
1297
1320
  dispose: () => {
1298
1321
  for (const d of disposers) d();
@@ -1306,6 +1329,7 @@ function registerChartsBridge(host, options) {
1306
1329
  const { adapter } = options;
1307
1330
  const agent = { ...DEFAULT_AGENT4, ...options.agent ?? {} };
1308
1331
  const disposers = [];
1332
+ const bridgeId = `chart:${adapter.id}`;
1309
1333
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
1310
1334
  const target = {
1311
1335
  kind: "chart",
@@ -1331,7 +1355,8 @@ function registerChartsBridge(host, options) {
1331
1355
  disposers.push(
1332
1356
  host.registerTool(
1333
1357
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
1334
- final
1358
+ final,
1359
+ { owner: bridgeId }
1335
1360
  )
1336
1361
  );
1337
1362
  };
@@ -1407,7 +1432,7 @@ function registerChartsBridge(host, options) {
1407
1432
  true
1408
1433
  );
1409
1434
  return {
1410
- id: `chart:${adapter.id}`,
1435
+ id: bridgeId,
1411
1436
  title: adapter.title ?? adapter.id,
1412
1437
  dispose: () => {
1413
1438
  for (const d of disposers) d();
@@ -1421,6 +1446,7 @@ function registerGridBridge(host, options) {
1421
1446
  const { adapter } = options;
1422
1447
  const agent = { ...DEFAULT_AGENT5, ...options.agent ?? {} };
1423
1448
  const disposers = [];
1449
+ const bridgeId = `grid:${adapter.id}`;
1424
1450
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
1425
1451
  const target = (part) => ({
1426
1452
  kind: "grid",
@@ -1450,7 +1476,8 @@ function registerGridBridge(host, options) {
1450
1476
  description,
1451
1477
  inputSchema: { type: "object", properties, required, additionalProperties: false }
1452
1478
  },
1453
- final
1479
+ final,
1480
+ { owner: bridgeId }
1454
1481
  )
1455
1482
  );
1456
1483
  };
@@ -1608,7 +1635,7 @@ function registerGridBridge(host, options) {
1608
1635
  );
1609
1636
  }
1610
1637
  return {
1611
- id: `grid:${adapter.id}`,
1638
+ id: bridgeId,
1612
1639
  title: adapter.title ?? adapter.id,
1613
1640
  dispose: () => {
1614
1641
  for (const d of disposers) d();
@@ -1623,6 +1650,7 @@ function registerSceneBridge(host, options) {
1623
1650
  const { adapter } = options;
1624
1651
  const agent = { ...DEFAULT_AGENT6, ...options.agent ?? {} };
1625
1652
  const disposers = [];
1653
+ const bridgeId = `scene:${adapter.id}`;
1626
1654
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
1627
1655
  const target = (objectId) => ({
1628
1656
  kind: "scene",
@@ -1648,7 +1676,8 @@ function registerSceneBridge(host, options) {
1648
1676
  disposers.push(
1649
1677
  host.registerTool(
1650
1678
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
1651
- final
1679
+ final,
1680
+ { owner: bridgeId }
1652
1681
  )
1653
1682
  );
1654
1683
  };
@@ -1801,7 +1830,7 @@ function registerSceneBridge(host, options) {
1801
1830
  true
1802
1831
  );
1803
1832
  return {
1804
- id: `scene:${adapter.id}`,
1833
+ id: bridgeId,
1805
1834
  title: adapter.title ?? adapter.id,
1806
1835
  dispose: () => {
1807
1836
  for (const d of disposers) d();
@@ -1845,6 +1874,7 @@ function registerScreensBridge(host, options) {
1845
1874
  const { adapter } = options;
1846
1875
  const agent = { ...DEFAULT_AGENT7, ...options.agent ?? {} };
1847
1876
  const disposers = [];
1877
+ const bridgeId = "screens";
1848
1878
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
1849
1879
  const target = (screenId) => ({
1850
1880
  kind: "screens",
@@ -1868,7 +1898,8 @@ function registerScreensBridge(host, options) {
1868
1898
  disposers.push(
1869
1899
  host.registerTool(
1870
1900
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
1871
- final
1901
+ final,
1902
+ { owner: bridgeId }
1872
1903
  )
1873
1904
  );
1874
1905
  };
@@ -2037,7 +2068,7 @@ function registerScreensBridge(host, options) {
2037
2068
  (args) => target(String(args.screen ?? ""))
2038
2069
  );
2039
2070
  return {
2040
- id: "screens",
2071
+ id: bridgeId,
2041
2072
  title: "Screens",
2042
2073
  dispose: () => {
2043
2074
  for (const d of disposers) d();
@@ -2051,6 +2082,7 @@ function registerSlidesBridge(host, options) {
2051
2082
  const { adapter } = options;
2052
2083
  const agent = { ...DEFAULT_AGENT8, ...options.agent ?? {} };
2053
2084
  const disposers = [];
2085
+ const bridgeId = "slides";
2054
2086
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
2055
2087
  const deckTarget = () => ({
2056
2088
  kind: "deck",
@@ -2097,7 +2129,8 @@ function registerSlidesBridge(host, options) {
2097
2129
  additionalProperties: false
2098
2130
  }
2099
2131
  },
2100
- final
2132
+ final,
2133
+ { owner: bridgeId }
2101
2134
  )
2102
2135
  );
2103
2136
  };
@@ -2462,7 +2495,7 @@ function registerSlidesBridge(host, options) {
2462
2495
  (args) => elementTarget(str(args?.slideId), str(args?.elementId))
2463
2496
  );
2464
2497
  return {
2465
- id: "slides",
2498
+ id: bridgeId,
2466
2499
  title: "Slides",
2467
2500
  dispose: () => {
2468
2501
  for (const d of disposers.splice(0)) d();
@@ -2497,6 +2530,7 @@ function registerMapBridge(host, options) {
2497
2530
  const { adapter } = options;
2498
2531
  const agent = { ...DEFAULT_AGENT9, ...options.agent ?? {} };
2499
2532
  const disposers = [];
2533
+ const bridgeId = "map";
2500
2534
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
2501
2535
  const mTarget = (args, result) => ({
2502
2536
  kind: "map",
@@ -2528,7 +2562,8 @@ function registerMapBridge(host, options) {
2528
2562
  additionalProperties: false
2529
2563
  }
2530
2564
  },
2531
- final
2565
+ final,
2566
+ { owner: bridgeId }
2532
2567
  )
2533
2568
  );
2534
2569
  };
@@ -2807,7 +2842,7 @@ function registerMapBridge(host, options) {
2807
2842
  }
2808
2843
  );
2809
2844
  return {
2810
- id: "map",
2845
+ id: bridgeId,
2811
2846
  title: "Map",
2812
2847
  dispose: () => {
2813
2848
  for (const d of disposers) d();
@@ -2819,6 +2854,7 @@ function registerMapBridge(host, options) {
2819
2854
  function registerGitBridge(host, options) {
2820
2855
  const agent = { id: "agent", name: "Agent", color: "#a855f7", ...options.agent ?? {} };
2821
2856
  const disposers = [];
2857
+ const bridgeId = "git";
2822
2858
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
2823
2859
  const reg = (name, description, properties, required, handler, mutation2 = false) => {
2824
2860
  const wrapped = async (args) => {
@@ -2838,7 +2874,7 @@ function registerGitBridge(host, options) {
2838
2874
  name,
2839
2875
  description,
2840
2876
  inputSchema: { type: "object", properties, required, additionalProperties: false }
2841
- }, final));
2877
+ }, final, { owner: bridgeId }));
2842
2878
  };
2843
2879
  reg("git_status", "Read normalized working-tree and branch status.", {}, [], async () => {
2844
2880
  const result = await options.adapter.status();
@@ -2899,7 +2935,7 @@ function registerGitBridge(host, options) {
2899
2935
  draft: { type: "boolean" },
2900
2936
  apply: { type: "boolean" }
2901
2937
  }, ["title", "sourceBranch", "targetBranch"]);
2902
- return { id: "git", title: "Git", dispose: () => disposers.forEach((dispose) => dispose()) };
2938
+ return { id: bridgeId, title: "Git", dispose: () => disposers.forEach((dispose) => dispose()) };
2903
2939
  }
2904
2940
 
2905
2941
  // src/bridges/files.ts
@@ -2943,6 +2979,7 @@ function registerFilesBridge(host, options) {
2943
2979
  const agent = { ...DEFAULT_AGENT10, ...options.agent ?? {} };
2944
2980
  const pendingMode = options.pendingMode ?? true;
2945
2981
  const disposers = [];
2982
+ const bridgeId = "files";
2946
2983
  const guard = (path) => {
2947
2984
  if (options.root !== void 0) assertPathWithinRoot(options.root, path);
2948
2985
  return path;
@@ -2978,7 +3015,8 @@ function registerFilesBridge(host, options) {
2978
3015
  additionalProperties: false
2979
3016
  }
2980
3017
  },
2981
- final
3018
+ final,
3019
+ { owner: bridgeId }
2982
3020
  )
2983
3021
  );
2984
3022
  };
@@ -3168,7 +3206,7 @@ function registerFilesBridge(host, options) {
3168
3206
  fTarget
3169
3207
  );
3170
3208
  return {
3171
- id: "files",
3209
+ id: bridgeId,
3172
3210
  title: "Files",
3173
3211
  dispose: () => {
3174
3212
  for (const d of disposers) d();
@@ -3184,6 +3222,7 @@ function registerTerminalBridge(host, options) {
3184
3222
  const pendingMode = options.pendingMode ?? true;
3185
3223
  const screenId = options.screenId ?? options.adapter?.screenId;
3186
3224
  const disposers = [];
3225
+ const bridgeId = "terminal";
3187
3226
  const staged = /* @__PURE__ */ new Map();
3188
3227
  let seq = 0;
3189
3228
  ensureUndoToolsRegistered(host);
@@ -3250,7 +3289,8 @@ function registerTerminalBridge(host, options) {
3250
3289
  description,
3251
3290
  inputSchema: { type: "object", properties, required, additionalProperties: false }
3252
3291
  },
3253
- final
3292
+ final,
3293
+ { owner: bridgeId }
3254
3294
  )
3255
3295
  );
3256
3296
  };
@@ -3447,7 +3487,7 @@ function registerTerminalBridge(host, options) {
3447
3487
  );
3448
3488
  }
3449
3489
  return {
3450
- id: "terminal",
3490
+ id: bridgeId,
3451
3491
  title: "Terminal",
3452
3492
  dispose: () => {
3453
3493
  disposers.forEach((d) => d());
@@ -3492,6 +3532,7 @@ function registerNavigationBridge(host, options) {
3492
3532
  const agent = { ...DEFAULT_AGENT12, ...options.agent ?? {} };
3493
3533
  const pendingMode = options.pendingMode ?? true;
3494
3534
  const disposers = [];
3535
+ const bridgeId = "navigation";
3495
3536
  let groundedRevision = null;
3496
3537
  const staleIntent = async () => {
3497
3538
  const current = await adapter.getRevision?.();
@@ -3535,7 +3576,8 @@ function registerNavigationBridge(host, options) {
3535
3576
  description,
3536
3577
  inputSchema: { type: "object", properties, required, additionalProperties: false }
3537
3578
  },
3538
- final
3579
+ final,
3580
+ { owner: bridgeId }
3539
3581
  )
3540
3582
  );
3541
3583
  };
@@ -3771,7 +3813,7 @@ function registerNavigationBridge(host, options) {
3771
3813
  (args) => target(`Submit ${String(args.handle ?? "")}`, String(args.handle ?? ""))
3772
3814
  );
3773
3815
  return {
3774
- id: "navigation",
3816
+ id: bridgeId,
3775
3817
  title: "Co-browsing",
3776
3818
  dispose: () => {
3777
3819
  for (const d of disposers) d();
@@ -3789,6 +3831,7 @@ function registerCatalogBridge(host, options) {
3789
3831
  const pendingMode = options.pendingMode ?? true;
3790
3832
  const catalogId = adapter.id ?? "catalog";
3791
3833
  const disposers = [];
3834
+ const bridgeId = `catalog:${catalogId}`;
3792
3835
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
3793
3836
  const target = (elementId, label) => ({
3794
3837
  kind: "custom",
@@ -3814,7 +3857,8 @@ function registerCatalogBridge(host, options) {
3814
3857
  disposers.push(
3815
3858
  host.registerTool(
3816
3859
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
3817
- final
3860
+ final,
3861
+ { owner: bridgeId }
3818
3862
  )
3819
3863
  );
3820
3864
  };
@@ -4088,7 +4132,7 @@ function registerCatalogBridge(host, options) {
4088
4132
  (args) => target(str4(args.priceId), `checkout ${str4(args.priceId)}`)
4089
4133
  );
4090
4134
  return {
4091
- id: `catalog:${catalogId}`,
4135
+ id: bridgeId,
4092
4136
  title: adapter.title ?? "Catalog",
4093
4137
  dispose: () => {
4094
4138
  for (const d of disposers.splice(0)) d();
@@ -4106,6 +4150,7 @@ function registerFeaturesBridge(host, options) {
4106
4150
  const pendingMode = options.pendingMode ?? true;
4107
4151
  const featuresId = adapter.id ?? "features";
4108
4152
  const disposers = [];
4153
+ const bridgeId = `features:${featuresId}`;
4109
4154
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
4110
4155
  const target = (elementId, label) => ({
4111
4156
  kind: "custom",
@@ -4131,7 +4176,8 @@ function registerFeaturesBridge(host, options) {
4131
4176
  disposers.push(
4132
4177
  host.registerTool(
4133
4178
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
4134
- final
4179
+ final,
4180
+ { owner: bridgeId }
4135
4181
  )
4136
4182
  );
4137
4183
  };
@@ -4306,7 +4352,7 @@ function registerFeaturesBridge(host, options) {
4306
4352
  (args) => target(str5(args.feature), `consume ${str5(args.feature)}`)
4307
4353
  );
4308
4354
  return {
4309
- id: `features:${featuresId}`,
4355
+ id: bridgeId,
4310
4356
  title: adapter.title ?? "Features",
4311
4357
  dispose: () => {
4312
4358
  for (const d of disposers.splice(0)) d();
@@ -4341,6 +4387,7 @@ function registerPasskeyBridge(host, options) {
4341
4387
  const agent = { ...DEFAULT_AGENT15, ...options.agent ?? {} };
4342
4388
  const surfaceId = adapter.id ?? "passkeys";
4343
4389
  const disposers = [];
4390
+ const bridgeId = `passkeys:${surfaceId}`;
4344
4391
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
4345
4392
  const target = (elementId, label) => ({
4346
4393
  kind: "custom",
@@ -4375,7 +4422,8 @@ function registerPasskeyBridge(host, options) {
4375
4422
  additionalProperties: false
4376
4423
  }
4377
4424
  },
4378
- final
4425
+ final,
4426
+ { owner: bridgeId }
4379
4427
  )
4380
4428
  );
4381
4429
  };
@@ -4496,7 +4544,7 @@ function registerPasskeyBridge(host, options) {
4496
4544
  (args) => target(void 0, `begin enrollment${args.name ? ` (${str6(args.name)})` : ""}`)
4497
4545
  );
4498
4546
  return {
4499
- id: `passkeys:${surfaceId}`,
4547
+ id: bridgeId,
4500
4548
  title: adapter.title ?? "Passkeys",
4501
4549
  dispose: () => {
4502
4550
  for (const d of disposers.splice(0)) d();
@@ -4512,6 +4560,7 @@ function registerDocBridge(host, options) {
4512
4560
  const makeNode = options.makeNode ?? (({ id, type, parent, order }, props) => ({ id, type, parent, order, props }));
4513
4561
  const describeNode = options.describeNode ?? ((n) => ({ id: n.id, type: n.type, parent: n.parent, props: Object.keys(n.props ?? {}) }));
4514
4562
  const disposers = [];
4563
+ const bridgeId = surface;
4515
4564
  ensureUndoToolsRegistered(host, { defaultAgentId: agent.id });
4516
4565
  let idSeq = 0;
4517
4566
  const mintId = () => {
@@ -4572,7 +4621,8 @@ function registerDocBridge(host, options) {
4572
4621
  disposers.push(
4573
4622
  host.registerTool(
4574
4623
  { name, description, inputSchema: { type: "object", properties, required, additionalProperties: false } },
4575
- final
4624
+ final,
4625
+ { owner: bridgeId }
4576
4626
  )
4577
4627
  );
4578
4628
  };
@@ -4747,7 +4797,7 @@ function registerDocBridge(host, options) {
4747
4797
  false
4748
4798
  );
4749
4799
  return {
4750
- id: surface,
4800
+ id: bridgeId,
4751
4801
  title: surface,
4752
4802
  dispose: () => {
4753
4803
  for (const d of disposers) d();
@@ -4900,7 +4950,9 @@ function registerScreenDocBridge(host, options) {
4900
4950
  authored.length ? `${authored.length} addressable, ${syntheticCount} positional` : `no addressable ids \u2014 all ${syntheticCount} nodes are positional`,
4901
4951
  { addressable: authored, syntheticCount }
4902
4952
  );
4903
- })
4953
+ }),
4954
+ // Same registrant as the doc bridge above, which registers under its surface.
4955
+ { owner: surface }
4904
4956
  );
4905
4957
  return {
4906
4958
  id: surface,