@particle-academy/agent-integrations 0.40.0 → 0.42.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 (160) hide show
  1. package/dist/bridges/artboard.d.cts +2 -2
  2. package/dist/bridges/artboard.d.ts +2 -2
  3. package/dist/bridges/catalog.d.cts +2 -2
  4. package/dist/bridges/catalog.d.ts +2 -2
  5. package/dist/bridges/charts.d.cts +2 -2
  6. package/dist/bridges/charts.d.ts +2 -2
  7. package/dist/bridges/cms.d.cts +2 -2
  8. package/dist/bridges/cms.d.ts +2 -2
  9. package/dist/bridges/code.d.cts +2 -2
  10. package/dist/bridges/code.d.ts +2 -2
  11. package/dist/bridges/doc.d.cts +2 -2
  12. package/dist/bridges/doc.d.ts +2 -2
  13. package/dist/bridges/features.d.cts +2 -2
  14. package/dist/bridges/features.d.ts +2 -2
  15. package/dist/bridges/files.d.cts +38 -3
  16. package/dist/bridges/files.d.ts +38 -3
  17. package/dist/bridges/flow.d.cts +2 -2
  18. package/dist/bridges/flow.d.ts +2 -2
  19. package/dist/bridges/forms.d.cts +2 -2
  20. package/dist/bridges/forms.d.ts +2 -2
  21. package/dist/bridges/git.d.cts +2 -2
  22. package/dist/bridges/git.d.ts +2 -2
  23. package/dist/bridges/grid.d.cts +2 -2
  24. package/dist/bridges/grid.d.ts +2 -2
  25. package/dist/bridges/map.d.cts +2 -2
  26. package/dist/bridges/map.d.ts +2 -2
  27. package/dist/bridges/passkeys.d.cts +2 -2
  28. package/dist/bridges/passkeys.d.ts +2 -2
  29. package/dist/bridges/scene.d.cts +2 -2
  30. package/dist/bridges/scene.d.ts +2 -2
  31. package/dist/bridges/screens.d.cts +2 -2
  32. package/dist/bridges/screens.d.ts +2 -2
  33. package/dist/bridges/sheets.d.cts +2 -2
  34. package/dist/bridges/sheets.d.ts +2 -2
  35. package/dist/bridges/slides.d.cts +2 -2
  36. package/dist/bridges/slides.d.ts +2 -2
  37. package/dist/bridges/terminal.d.cts +2 -2
  38. package/dist/bridges/terminal.d.ts +2 -2
  39. package/dist/bridges/tui.d.cts +1 -1
  40. package/dist/bridges/tui.d.ts +1 -1
  41. package/dist/bridges/whiteboard.d.cts +2 -2
  42. package/dist/bridges/whiteboard.d.ts +2 -2
  43. package/dist/bridges-artboard.cjs.map +1 -1
  44. package/dist/bridges-artboard.js +2 -2
  45. package/dist/bridges-catalog.cjs.map +1 -1
  46. package/dist/bridges-catalog.js +3 -3
  47. package/dist/bridges-charts.cjs.map +1 -1
  48. package/dist/bridges-charts.js +3 -3
  49. package/dist/bridges-cms.cjs.map +1 -1
  50. package/dist/bridges-cms.js +4 -4
  51. package/dist/bridges-code.cjs.map +1 -1
  52. package/dist/bridges-code.js +3 -3
  53. package/dist/bridges-doc.cjs.map +1 -1
  54. package/dist/bridges-doc.js +3 -3
  55. package/dist/bridges-features.cjs.map +1 -1
  56. package/dist/bridges-features.js +3 -3
  57. package/dist/bridges-files.cjs +45 -0
  58. package/dist/bridges-files.cjs.map +1 -1
  59. package/dist/bridges-files.js +3 -3
  60. package/dist/bridges-flow.cjs.map +1 -1
  61. package/dist/bridges-flow.js +2 -2
  62. package/dist/bridges-forms.cjs.map +1 -1
  63. package/dist/bridges-forms.js +3 -3
  64. package/dist/bridges-git.cjs.map +1 -1
  65. package/dist/bridges-git.js +3 -3
  66. package/dist/bridges-grid.cjs.map +1 -1
  67. package/dist/bridges-grid.js +3 -3
  68. package/dist/bridges-map.cjs.map +1 -1
  69. package/dist/bridges-map.js +3 -3
  70. package/dist/bridges-passkeys.cjs.map +1 -1
  71. package/dist/bridges-passkeys.js +3 -3
  72. package/dist/bridges-scene.cjs.map +1 -1
  73. package/dist/bridges-scene.js +3 -3
  74. package/dist/bridges-screens.cjs.map +1 -1
  75. package/dist/bridges-screens.js +3 -3
  76. package/dist/bridges-sheets.cjs.map +1 -1
  77. package/dist/bridges-sheets.js +3 -3
  78. package/dist/bridges-slides.cjs.map +1 -1
  79. package/dist/bridges-slides.js +3 -3
  80. package/dist/bridges-terminal.cjs.map +1 -1
  81. package/dist/bridges-terminal.js +3 -3
  82. package/dist/bridges-tui.cjs.map +1 -1
  83. package/dist/bridges-tui.js +2 -2
  84. package/dist/bridges-whiteboard.cjs.map +1 -1
  85. package/dist/bridges-whiteboard.js +3 -3
  86. package/dist/{chunk-2U5JB6ZA.js → chunk-2LSU3NFO.js} +4 -4
  87. package/dist/{chunk-2U5JB6ZA.js.map → chunk-2LSU3NFO.js.map} +1 -1
  88. package/dist/{chunk-PR4SXFZH.js → chunk-2Q4EGZHJ.js} +4 -4
  89. package/dist/{chunk-PR4SXFZH.js.map → chunk-2Q4EGZHJ.js.map} +1 -1
  90. package/dist/{chunk-G5EZNWXJ.js → chunk-5W6YOXLT.js} +4 -4
  91. package/dist/{chunk-G5EZNWXJ.js.map → chunk-5W6YOXLT.js.map} +1 -1
  92. package/dist/{chunk-CA7GIJJC.js → chunk-7LLMILTM.js} +4 -4
  93. package/dist/{chunk-CA7GIJJC.js.map → chunk-7LLMILTM.js.map} +1 -1
  94. package/dist/{chunk-MFMBR6LN.js → chunk-E2I3YVKC.js} +3 -3
  95. package/dist/{chunk-MFMBR6LN.js.map → chunk-E2I3YVKC.js.map} +1 -1
  96. package/dist/{chunk-USQGA672.js → chunk-EIBV76IB.js} +4 -4
  97. package/dist/{chunk-USQGA672.js.map → chunk-EIBV76IB.js.map} +1 -1
  98. package/dist/{chunk-WCKSDFTM.js → chunk-GT63LSPJ.js} +4 -4
  99. package/dist/{chunk-WCKSDFTM.js.map → chunk-GT63LSPJ.js.map} +1 -1
  100. package/dist/{chunk-CT3LRNH7.js → chunk-HVDHT7DM.js} +3 -3
  101. package/dist/{chunk-CT3LRNH7.js.map → chunk-HVDHT7DM.js.map} +1 -1
  102. package/dist/{chunk-7THGQUX3.js → chunk-LOD77NCD.js} +4 -4
  103. package/dist/{chunk-7THGQUX3.js.map → chunk-LOD77NCD.js.map} +1 -1
  104. package/dist/{chunk-BHQJJ2YG.js → chunk-MZ74LLDS.js} +4 -4
  105. package/dist/{chunk-BHQJJ2YG.js.map → chunk-MZ74LLDS.js.map} +1 -1
  106. package/dist/{chunk-A25E22WW.js → chunk-N5VOPV64.js} +49 -5
  107. package/dist/chunk-N5VOPV64.js.map +1 -0
  108. package/dist/{chunk-ZNGTC4CO.js → chunk-NIFPRC7P.js} +4 -4
  109. package/dist/{chunk-ZNGTC4CO.js.map → chunk-NIFPRC7P.js.map} +1 -1
  110. package/dist/{chunk-JJUABMAP.js → chunk-NIXOY473.js} +3 -3
  111. package/dist/{chunk-JJUABMAP.js.map → chunk-NIXOY473.js.map} +1 -1
  112. package/dist/{chunk-OAFJ53X3.js → chunk-NKAH67JK.js} +4 -4
  113. package/dist/{chunk-OAFJ53X3.js.map → chunk-NKAH67JK.js.map} +1 -1
  114. package/dist/{chunk-RIXYCFDO.js → chunk-PCFRBVKS.js} +4 -4
  115. package/dist/{chunk-RIXYCFDO.js.map → chunk-PCFRBVKS.js.map} +1 -1
  116. package/dist/{chunk-4D3II37O.js → chunk-PUMQDV67.js} +4 -4
  117. package/dist/{chunk-4D3II37O.js.map → chunk-PUMQDV67.js.map} +1 -1
  118. package/dist/{chunk-DF3PLL2E.js → chunk-QJYRWEXD.js} +28 -5
  119. package/dist/chunk-QJYRWEXD.js.map +1 -0
  120. package/dist/{chunk-XY2TDE6E.js → chunk-SXVRIIXW.js} +4 -4
  121. package/dist/{chunk-XY2TDE6E.js.map → chunk-SXVRIIXW.js.map} +1 -1
  122. package/dist/{chunk-6YUBWQTS.js → chunk-TEB5U6Y5.js} +4 -4
  123. package/dist/{chunk-6YUBWQTS.js.map → chunk-TEB5U6Y5.js.map} +1 -1
  124. package/dist/{chunk-MJ2S25ON.js → chunk-VJD3Y7E5.js} +4 -4
  125. package/dist/{chunk-MJ2S25ON.js.map → chunk-VJD3Y7E5.js.map} +1 -1
  126. package/dist/{chunk-BT7HM5I6.js → chunk-WEXMZMJH.js} +3 -3
  127. package/dist/{chunk-BT7HM5I6.js.map → chunk-WEXMZMJH.js.map} +1 -1
  128. package/dist/{chunk-UZHNKUER.js → chunk-Z4L2GOAK.js} +4 -4
  129. package/dist/{chunk-UZHNKUER.js.map → chunk-Z4L2GOAK.js.map} +1 -1
  130. package/dist/components-shared-whiteboard.cjs +26 -3
  131. package/dist/components-shared-whiteboard.cjs.map +1 -1
  132. package/dist/components-shared-whiteboard.js +3 -3
  133. package/dist/index.cjs +132 -3
  134. package/dist/index.cjs.map +1 -1
  135. package/dist/index.d.cts +88 -8
  136. package/dist/index.d.ts +88 -8
  137. package/dist/index.js +87 -26
  138. package/dist/index.js.map +1 -1
  139. package/dist/mcp/index.d.cts +3 -3
  140. package/dist/mcp/index.d.ts +3 -3
  141. package/dist/mcp.cjs +26 -3
  142. package/dist/mcp.cjs.map +1 -1
  143. package/dist/mcp.js +1 -1
  144. package/dist/{server-DDD3IZ56.d.cts → server-BJNF7pQe.d.cts} +1 -1
  145. package/dist/{server-CDX643Kz.d.ts → server-Dt97UxuD.d.ts} +1 -1
  146. package/dist/sharing/index.d.cts +2 -2
  147. package/dist/sharing/index.d.ts +2 -2
  148. package/dist/sheets-adapter.d.cts +2 -2
  149. package/dist/sheets-adapter.d.ts +2 -2
  150. package/dist/{tool-host-EuYHYSSH.d.cts → tool-host-BpEBqf5u.d.cts} +17 -0
  151. package/dist/{tool-host-CWTOJEm2.d.ts → tool-host-xY5F-eqG.d.ts} +17 -0
  152. package/dist/{types-NFGP769G.d.cts → types-C4NaIW6B.d.cts} +1 -1
  153. package/dist/{types-BKD6uf86.d.ts → types-DSwsNTBG.d.ts} +1 -1
  154. package/dist/undo/index.d.cts +1 -1
  155. package/dist/undo/index.d.ts +1 -1
  156. package/dist/undo.cjs.map +1 -1
  157. package/dist/undo.js +3 -3
  158. package/package.json +1 -1
  159. package/dist/chunk-A25E22WW.js.map +0 -1
  160. package/dist/chunk-DF3PLL2E.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-2U5JB6ZA.js';
5
- import './chunk-CT3LRNH7.js';
4
+ import { registerWhiteboardBridge } from './chunk-2LSU3NFO.js';
5
+ import './chunk-HVDHT7DM.js';
6
6
  import './chunk-2VENWGLZ.js';
7
7
  import './chunk-C3TYI5TJ.js';
8
- import { MicroMcpServer } from './chunk-DF3PLL2E.js';
8
+ import { MicroMcpServer } from './chunk-QJYRWEXD.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';
package/dist/index.cjs CHANGED
@@ -44,14 +44,37 @@ var MCP_PROTOCOL_VERSION = "2025-06-18";
44
44
  var ToolRegistry = class {
45
45
  constructor() {
46
46
  this.tools = /* @__PURE__ */ new Map();
47
+ /**
48
+ * Tools that existed and were withdrawn, kept so a call that races an unmount
49
+ * can say WHICH thing happened.
50
+ *
51
+ * The tool surface is dynamic by design — "site tools always, page tools while
52
+ * mounted" — so an agent deciding to call a tool while the human navigates
53
+ * away is normal traffic, not an edge case. Reporting that as `Unknown tool`
54
+ * is the least useful thing available: it reads as "the agent is broken" or
55
+ * "you asked for something imaginary", when the truth is "that surface just
56
+ * closed".
57
+ *
58
+ * Names only. Nothing about the handler is retained, so this cannot keep a
59
+ * disposed surface alive.
60
+ */
61
+ this.withdrawn = /* @__PURE__ */ new Set();
47
62
  }
48
63
  registerTool(definition, handler) {
49
64
  this.tools.set(definition.name, { definition, handler });
65
+ this.withdrawn.delete(definition.name);
50
66
  this.onToolsChanged();
51
67
  return () => {
52
- if (this.tools.delete(definition.name)) this.onToolsChanged();
68
+ if (this.tools.delete(definition.name)) {
69
+ this.withdrawn.add(definition.name);
70
+ this.onToolsChanged();
71
+ }
53
72
  };
54
73
  }
74
+ /** Why `name` is not callable, phrased for whoever has to act on it. */
75
+ missingToolMessage(name) {
76
+ return this.withdrawn.has(name) ? `Tool "${name}" was withdrawn: the surface it targets is no longer mounted. Call tools/list for the current surface \u2014 the site-wide tools remain available.` : `Unknown tool: ${name}`;
77
+ }
55
78
  getTool(name) {
56
79
  return this.tools.get(name) ?? null;
57
80
  }
@@ -61,7 +84,7 @@ var ToolRegistry = class {
61
84
  async callTool(name, args = {}) {
62
85
  const tool = this.tools.get(name);
63
86
  if (!tool) {
64
- throw new Error(`Unknown tool: ${name}`);
87
+ throw new Error(this.missingToolMessage(name));
65
88
  }
66
89
  return tool.handler(args);
67
90
  }
@@ -142,7 +165,7 @@ var MicroMcpServer = class extends ToolRegistry {
142
165
  }
143
166
  const tool = this.tools.get(name);
144
167
  if (!tool) {
145
- throw rpcError(JSONRPC_METHOD_NOT_FOUND, `Unknown tool: ${name}`);
168
+ throw rpcError(JSONRPC_METHOD_NOT_FOUND, this.missingToolMessage(name));
146
169
  }
147
170
  const result = await tool.handler(args, { transport });
148
171
  return result;
@@ -2800,6 +2823,13 @@ function registerGitBridge(host, options) {
2800
2823
  // src/bridges/files.ts
2801
2824
  var DEFAULT_AGENT10 = { id: "agent", name: "Agent", color: "#a855f7" };
2802
2825
  var MAX_SNAPSHOT_DEPTH = 8;
2826
+ function invalidFolderName(name) {
2827
+ const trimmed = name.trim();
2828
+ if (trimmed === "") return "A folder name is required.";
2829
+ if (trimmed.includes("/") || trimmed.includes("\\")) return "A folder name may not contain a path separator.";
2830
+ if (trimmed === "." || trimmed === "..") return "That folder name is reserved.";
2831
+ return null;
2832
+ }
2803
2833
  function assertPathWithinRoot(root, path) {
2804
2834
  const segments = path.replace(/[\\/]+/g, "/").split("/");
2805
2835
  if (segments.includes("..")) {
@@ -2829,6 +2859,7 @@ var asPaths = (v) => {
2829
2859
  function registerFilesBridge(host, options) {
2830
2860
  const { adapter } = options;
2831
2861
  const agent = { ...DEFAULT_AGENT10, ...options.agent ?? {} };
2862
+ const pendingMode = options.pendingMode ?? true;
2832
2863
  const disposers = [];
2833
2864
  const guard = (path) => {
2834
2865
  if (options.root !== void 0) assertPathWithinRoot(options.root, path);
@@ -2995,6 +3026,42 @@ function registerFilesBridge(host, options) {
2995
3026
  },
2996
3027
  fTarget
2997
3028
  );
3029
+ if (adapter.createFolder) {
3030
+ reg(
3031
+ "files_create_folder",
3032
+ "Create a folder inside `parentPath`. Staged for human confirmation unless the host disabled pendingMode.",
3033
+ {
3034
+ parentPath: { type: "string", description: "Directory to create in; defaults to the current directory." },
3035
+ name: { type: "string", description: "The new folder's name. A leaf name \u2014 no separators." },
3036
+ confirm: { type: "boolean", description: "Acknowledge a staged write when the host wired no confirm hook." }
3037
+ },
3038
+ ["name"],
3039
+ async (args) => {
3040
+ const parentPath = guard(args.parentPath !== void 0 ? str3(args.parentPath) : adapter.getPath());
3041
+ const name = str3(args.name).trim();
3042
+ const invalid = invalidFolderName(name);
3043
+ if (invalid) return errorResult(invalid);
3044
+ const label = `${parentPath}/${name}`;
3045
+ if (pendingMode) {
3046
+ if (options.confirm) {
3047
+ const ok = await options.confirm({ action: "files_create_folder", path: label, label });
3048
+ if (!ok) return errorResult(`Declined: create folder ${label} (human did not confirm).`);
3049
+ } else if (args.confirm !== true) {
3050
+ return errorResult(
3051
+ `Staged: create folder ${label}. Re-call with confirm:true to proceed.`
3052
+ );
3053
+ }
3054
+ }
3055
+ try {
3056
+ await adapter.createFolder({ parentPath, name });
3057
+ } catch (e) {
3058
+ return errorResult(e instanceof Error ? e.message : String(e));
3059
+ }
3060
+ return textResult(`Created folder ${label}.`, { parentPath, name, path: label });
3061
+ },
3062
+ (args) => ({ kind: "directory", path: `${str3(args.parentPath)}/${str3(args.name)}`, label: str3(args.name) })
3063
+ );
3064
+ }
2998
3065
  reg(
2999
3066
  "files_request_snapshot",
3000
3067
  "Request a fresh snapshot subtree rooted at `path` (snapshot mode) \u2014 e.g. to pull a remote machine's current tree. Requires the host to wire requestSnapshot.",
@@ -4955,6 +5022,58 @@ function attachSseRelay(server, options) {
4955
5022
 
4956
5023
  // src/sharing/use-co-browse-session.ts
4957
5024
  init_registry();
5025
+
5026
+ // src/sharing/bridge-contributions.ts
5027
+ var BridgeContributions = class {
5028
+ constructor() {
5029
+ this.contributions = /* @__PURE__ */ new Map();
5030
+ this.applied = /* @__PURE__ */ new Map();
5031
+ this.server = null;
5032
+ }
5033
+ /**
5034
+ * Contribute bridges for as long as the returned disposer is uncalled.
5035
+ *
5036
+ * Applies immediately when a server is already live, and is held for the next
5037
+ * one otherwise — so a page need not know whether sharing has started.
5038
+ */
5039
+ add(contribute) {
5040
+ const key = /* @__PURE__ */ Symbol("bridge-contribution");
5041
+ this.contributions.set(key, contribute);
5042
+ if (this.server) this.apply(key, contribute, this.server);
5043
+ return () => {
5044
+ this.contributions.delete(key);
5045
+ this.withdraw(key);
5046
+ };
5047
+ }
5048
+ /** Attach a server and apply every live contribution to it. */
5049
+ bind(server) {
5050
+ if (this.server === server) return;
5051
+ if (this.server) this.unbind();
5052
+ this.server = server;
5053
+ for (const [key, contribute] of this.contributions) this.apply(key, contribute, server);
5054
+ }
5055
+ /**
5056
+ * Detach the current server, withdrawing what was applied to it. Contributions
5057
+ * themselves are KEPT: a session can be stopped and restarted under a page
5058
+ * that never unmounted, and its tools must come back rather than silently
5059
+ * vanish.
5060
+ */
5061
+ unbind() {
5062
+ for (const key of [...this.applied.keys()]) this.withdraw(key);
5063
+ this.server = null;
5064
+ }
5065
+ apply(key, contribute, server) {
5066
+ const dispose = contribute(server);
5067
+ if (typeof dispose === "function") this.applied.set(key, dispose);
5068
+ }
5069
+ withdraw(key) {
5070
+ const dispose = this.applied.get(key);
5071
+ this.applied.delete(key);
5072
+ dispose?.();
5073
+ }
5074
+ };
5075
+
5076
+ // src/sharing/use-co-browse-session.ts
4958
5077
  var DEFAULT_AGENT17 = { id: "agent", name: "Agent", color: "#a855f7" };
4959
5078
  var USER = { id: "human", name: "You" };
4960
5079
  function useCoBrowseSession(options) {
@@ -4962,6 +5081,8 @@ function useCoBrowseSession(options) {
4962
5081
  const agent = { ...DEFAULT_AGENT17, ...options.agent ?? {} };
4963
5082
  const relayBaseUrl = options.relayBaseUrl ?? "/agent-relay";
4964
5083
  const serverRef = react.useRef(null);
5084
+ const contributionsRef = react.useRef(null);
5085
+ if (!contributionsRef.current) contributionsRef.current = new BridgeContributions();
4965
5086
  const relayRef = react.useRef(null);
4966
5087
  const detachInProc = react.useRef(null);
4967
5088
  const disposeBridge = react.useRef(null);
@@ -4975,6 +5096,7 @@ function useCoBrowseSession(options) {
4975
5096
  });
4976
5097
  const bridge = registerNavigationBridge(server, { adapter, agent, pendingMode: options.pendingMode });
4977
5098
  extraBridges?.(server);
5099
+ contributionsRef.current.bind(server);
4978
5100
  const inProc = attachInProcess(server);
4979
5101
  detachInProc.current = () => inProc.close();
4980
5102
  disposeBridge.current = bridge.dispose;
@@ -4982,6 +5104,7 @@ function useCoBrowseSession(options) {
4982
5104
  return () => {
4983
5105
  relayRef.current?.close();
4984
5106
  relayRef.current = null;
5107
+ contributionsRef.current.unbind();
4985
5108
  disposeBridge.current?.();
4986
5109
  detachInProc.current?.();
4987
5110
  serverRef.current = null;
@@ -5040,8 +5163,13 @@ function useCoBrowseSession(options) {
5040
5163
  meta: event
5041
5164
  });
5042
5165
  }, []);
5166
+ const contributeBridges = react.useCallback(
5167
+ (contribute) => contributionsRef.current.add(contribute),
5168
+ []
5169
+ );
5043
5170
  return {
5044
5171
  server: serverRef.current,
5172
+ contributeBridges,
5045
5173
  session,
5046
5174
  relayState,
5047
5175
  agentConnected: agentCount > 0,
@@ -6239,6 +6367,7 @@ Object.defineProperty(exports, "undoOne", {
6239
6367
  exports.AgentActivityHighlight = AgentActivityHighlight;
6240
6368
  exports.AgentCursor = AgentCursor;
6241
6369
  exports.AgentPanel = AgentPanel;
6370
+ exports.BridgeContributions = BridgeContributions;
6242
6371
  exports.BridgedForm = BridgedForm;
6243
6372
  exports.CLAUDE_CONNECTORS_URL = CLAUDE_CONNECTORS_URL;
6244
6373
  exports.CONNECTOR_GLYPHS = CONNECTOR_GLYPHS;