@particle-academy/agent-integrations 0.41.0 → 0.43.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 (171) hide show
  1. package/README.md +29 -0
  2. package/dist/bridges/artboard.d.cts +2 -2
  3. package/dist/bridges/artboard.d.ts +2 -2
  4. package/dist/bridges/catalog.d.cts +2 -2
  5. package/dist/bridges/catalog.d.ts +2 -2
  6. package/dist/bridges/charts.d.cts +2 -2
  7. package/dist/bridges/charts.d.ts +2 -2
  8. package/dist/bridges/cms.d.cts +2 -2
  9. package/dist/bridges/cms.d.ts +2 -2
  10. package/dist/bridges/code.d.cts +2 -2
  11. package/dist/bridges/code.d.ts +2 -2
  12. package/dist/bridges/doc.d.cts +2 -2
  13. package/dist/bridges/doc.d.ts +2 -2
  14. package/dist/bridges/features.d.cts +2 -2
  15. package/dist/bridges/features.d.ts +2 -2
  16. package/dist/bridges/files.d.cts +2 -2
  17. package/dist/bridges/files.d.ts +2 -2
  18. package/dist/bridges/flow.d.cts +2 -2
  19. package/dist/bridges/flow.d.ts +2 -2
  20. package/dist/bridges/forms.d.cts +2 -2
  21. package/dist/bridges/forms.d.ts +2 -2
  22. package/dist/bridges/git.d.cts +2 -2
  23. package/dist/bridges/git.d.ts +2 -2
  24. package/dist/bridges/grid.d.cts +2 -2
  25. package/dist/bridges/grid.d.ts +2 -2
  26. package/dist/bridges/map.d.cts +2 -2
  27. package/dist/bridges/map.d.ts +2 -2
  28. package/dist/bridges/passkeys.d.cts +2 -2
  29. package/dist/bridges/passkeys.d.ts +2 -2
  30. package/dist/bridges/scene.d.cts +2 -2
  31. package/dist/bridges/scene.d.ts +2 -2
  32. package/dist/bridges/screens.d.cts +2 -2
  33. package/dist/bridges/screens.d.ts +2 -2
  34. package/dist/bridges/sheets.d.cts +2 -2
  35. package/dist/bridges/sheets.d.ts +2 -2
  36. package/dist/bridges/slides.d.cts +2 -2
  37. package/dist/bridges/slides.d.ts +2 -2
  38. package/dist/bridges/terminal.d.cts +2 -2
  39. package/dist/bridges/terminal.d.ts +2 -2
  40. package/dist/bridges/tui.d.cts +1 -1
  41. package/dist/bridges/tui.d.ts +1 -1
  42. package/dist/bridges/whiteboard.d.cts +2 -2
  43. package/dist/bridges/whiteboard.d.ts +2 -2
  44. package/dist/bridges-artboard.cjs.map +1 -1
  45. package/dist/bridges-artboard.js +2 -2
  46. package/dist/bridges-catalog.cjs.map +1 -1
  47. package/dist/bridges-catalog.js +3 -3
  48. package/dist/bridges-charts.cjs.map +1 -1
  49. package/dist/bridges-charts.js +3 -3
  50. package/dist/bridges-cms.cjs.map +1 -1
  51. package/dist/bridges-cms.js +4 -4
  52. package/dist/bridges-code.cjs.map +1 -1
  53. package/dist/bridges-code.js +3 -3
  54. package/dist/bridges-doc.cjs.map +1 -1
  55. package/dist/bridges-doc.js +3 -3
  56. package/dist/bridges-features.cjs.map +1 -1
  57. package/dist/bridges-features.js +3 -3
  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-D756GBMQ.js → chunk-N5VOPV64.js} +4 -4
  107. package/dist/{chunk-D756GBMQ.js.map → chunk-N5VOPV64.js.map} +1 -1
  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-GRHPEK6M.js → chunk-QOANLXSW.js} +53 -8
  121. package/dist/chunk-QOANLXSW.js.map +1 -0
  122. package/dist/{chunk-XY2TDE6E.js → chunk-SXVRIIXW.js} +4 -4
  123. package/dist/{chunk-XY2TDE6E.js.map → chunk-SXVRIIXW.js.map} +1 -1
  124. package/dist/{chunk-6YUBWQTS.js → chunk-TEB5U6Y5.js} +4 -4
  125. package/dist/{chunk-6YUBWQTS.js.map → chunk-TEB5U6Y5.js.map} +1 -1
  126. package/dist/{chunk-MJ2S25ON.js → chunk-VJD3Y7E5.js} +4 -4
  127. package/dist/{chunk-MJ2S25ON.js.map → chunk-VJD3Y7E5.js.map} +1 -1
  128. package/dist/{chunk-BT7HM5I6.js → chunk-WEXMZMJH.js} +3 -3
  129. package/dist/{chunk-BT7HM5I6.js.map → chunk-WEXMZMJH.js.map} +1 -1
  130. package/dist/{chunk-UZHNKUER.js → chunk-Z4L2GOAK.js} +4 -4
  131. package/dist/{chunk-UZHNKUER.js.map → chunk-Z4L2GOAK.js.map} +1 -1
  132. package/dist/components-shared-whiteboard.cjs +26 -3
  133. package/dist/components-shared-whiteboard.cjs.map +1 -1
  134. package/dist/components-shared-whiteboard.js +3 -3
  135. package/dist/index.cjs +88 -3
  136. package/dist/index.cjs.map +1 -1
  137. package/dist/index.d.cts +88 -8
  138. package/dist/index.d.ts +88 -8
  139. package/dist/index.js +87 -26
  140. package/dist/index.js.map +1 -1
  141. package/dist/mcp/index.d.cts +3 -3
  142. package/dist/mcp/index.d.ts +3 -3
  143. package/dist/mcp.cjs +26 -3
  144. package/dist/mcp.cjs.map +1 -1
  145. package/dist/mcp.js +1 -1
  146. package/dist/relay-server/index.d.cts +36 -1
  147. package/dist/relay-server/index.d.ts +36 -1
  148. package/dist/relay-server-cli.cjs +51 -6
  149. package/dist/relay-server-cli.cjs.map +1 -1
  150. package/dist/relay-server-cli.js +1 -1
  151. package/dist/relay-server.cjs +51 -6
  152. package/dist/relay-server.cjs.map +1 -1
  153. package/dist/relay-server.js +1 -1
  154. package/dist/{server-DDD3IZ56.d.cts → server-BJNF7pQe.d.cts} +1 -1
  155. package/dist/{server-CDX643Kz.d.ts → server-Dt97UxuD.d.ts} +1 -1
  156. package/dist/sharing/index.d.cts +2 -2
  157. package/dist/sharing/index.d.ts +2 -2
  158. package/dist/sheets-adapter.d.cts +2 -2
  159. package/dist/sheets-adapter.d.ts +2 -2
  160. package/dist/{tool-host-EuYHYSSH.d.cts → tool-host-BpEBqf5u.d.cts} +17 -0
  161. package/dist/{tool-host-CWTOJEm2.d.ts → tool-host-xY5F-eqG.d.ts} +17 -0
  162. package/dist/{types-NFGP769G.d.cts → types-C4NaIW6B.d.cts} +1 -1
  163. package/dist/{types-BKD6uf86.d.ts → types-DSwsNTBG.d.ts} +1 -1
  164. package/dist/undo/index.d.cts +1 -1
  165. package/dist/undo/index.d.ts +1 -1
  166. package/dist/undo.cjs.map +1 -1
  167. package/dist/undo.js +3 -3
  168. package/docs/relay-server.md +34 -0
  169. package/package.json +1 -1
  170. package/dist/chunk-DF3PLL2E.js.map +0 -1
  171. package/dist/chunk-GRHPEK6M.js.map +0 -1
@@ -43,14 +43,37 @@ var MCP_PROTOCOL_VERSION = "2025-06-18";
43
43
  var ToolRegistry = class {
44
44
  constructor() {
45
45
  this.tools = /* @__PURE__ */ new Map();
46
+ /**
47
+ * Tools that existed and were withdrawn, kept so a call that races an unmount
48
+ * can say WHICH thing happened.
49
+ *
50
+ * The tool surface is dynamic by design — "site tools always, page tools while
51
+ * mounted" — so an agent deciding to call a tool while the human navigates
52
+ * away is normal traffic, not an edge case. Reporting that as `Unknown tool`
53
+ * is the least useful thing available: it reads as "the agent is broken" or
54
+ * "you asked for something imaginary", when the truth is "that surface just
55
+ * closed".
56
+ *
57
+ * Names only. Nothing about the handler is retained, so this cannot keep a
58
+ * disposed surface alive.
59
+ */
60
+ this.withdrawn = /* @__PURE__ */ new Set();
46
61
  }
47
62
  registerTool(definition, handler) {
48
63
  this.tools.set(definition.name, { definition, handler });
64
+ this.withdrawn.delete(definition.name);
49
65
  this.onToolsChanged();
50
66
  return () => {
51
- if (this.tools.delete(definition.name)) this.onToolsChanged();
67
+ if (this.tools.delete(definition.name)) {
68
+ this.withdrawn.add(definition.name);
69
+ this.onToolsChanged();
70
+ }
52
71
  };
53
72
  }
73
+ /** Why `name` is not callable, phrased for whoever has to act on it. */
74
+ missingToolMessage(name) {
75
+ 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}`;
76
+ }
54
77
  getTool(name) {
55
78
  return this.tools.get(name) ?? null;
56
79
  }
@@ -60,7 +83,7 @@ var ToolRegistry = class {
60
83
  async callTool(name, args = {}) {
61
84
  const tool = this.tools.get(name);
62
85
  if (!tool) {
63
- throw new Error(`Unknown tool: ${name}`);
86
+ throw new Error(this.missingToolMessage(name));
64
87
  }
65
88
  return tool.handler(args);
66
89
  }
@@ -141,7 +164,7 @@ var MicroMcpServer = class extends ToolRegistry {
141
164
  }
142
165
  const tool = this.tools.get(name);
143
166
  if (!tool) {
144
- throw rpcError(JSONRPC_METHOD_NOT_FOUND, `Unknown tool: ${name}`);
167
+ throw rpcError(JSONRPC_METHOD_NOT_FOUND, this.missingToolMessage(name));
145
168
  }
146
169
  const result = await tool.handler(args, { transport });
147
170
  return result;