@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,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import { DocAdapter } from './doc.cjs';
4
4
  import { StyledNode, StagePolicy, TreeOp, StyleProps, LayoutMode, DocReducer, DocTree } from '@particle-academy/fancy-doc-commons';
5
5
  import '../types-C58ZXs4K.cjs';
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import { DocAdapter } from './doc.js';
4
4
  import { StyledNode, StagePolicy, TreeOp, StyleProps, LayoutMode, DocReducer, DocTree } from '@particle-academy/fancy-doc-commons';
5
5
  import '../types-C58ZXs4K.js';
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
2
  import { J as JsonObject } from '../types-C58ZXs4K.cjs';
3
- import { B as Bridge } from '../types-NFGP769G.cjs';
3
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
4
4
  import { DocNode, DocTree, TreeOp, DocReducer, StagePolicy } from '@particle-academy/fancy-doc-commons';
5
5
 
6
6
  /** Host-provided access to the document tree. */
@@ -1,6 +1,6 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
2
  import { J as JsonObject } from '../types-C58ZXs4K.js';
3
- import { B as Bridge } from '../types-BKD6uf86.js';
3
+ import { B as Bridge } from '../types-DSwsNTBG.js';
4
4
  import { DocNode, DocTree, TreeOp, DocReducer, StagePolicy } from '@particle-academy/fancy-doc-commons';
5
5
 
6
6
  /** Host-provided access to the document tree. */
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  type FileKind = "file" | "dir";
@@ -36,6 +36,19 @@ type FilesBridgeAdapter = {
36
36
  listChildren: (path: string) => Promise<FileEntry[]> | FileEntry[];
37
37
  /** Optional (snapshot mode): fetch/refresh a snapshot subtree so an agent can pull remote state on demand. */
38
38
  requestSnapshot?: (path: string, depth?: number) => Promise<FileSnapshotNode[]> | FileSnapshotNode[];
39
+ /**
40
+ * Create a folder. **Supplying this is the opt-in** — `files_create_folder`
41
+ * is registered only when it is present, so an agent cannot be handed a write
42
+ * a host never wired, and the advertised tool list tells the truth about what
43
+ * is possible.
44
+ *
45
+ * Pairs with `FileBrowser`'s `onCreateFolder` (react-fancy 5.18+): the same
46
+ * operation the human has, given to the agent.
47
+ */
48
+ createFolder?: (input: {
49
+ parentPath: string;
50
+ name: string;
51
+ }) => Promise<void> | void;
39
52
  };
40
53
  type FilesBridgeOptions = {
41
54
  adapter: FilesBridgeAdapter;
@@ -57,6 +70,20 @@ type FilesBridgeOptions = {
57
70
  * SOLELY responsible for sandboxing what `listChildren`/`requestSnapshot` expose.
58
71
  */
59
72
  root?: string;
73
+ /**
74
+ * Stage writes for human confirmation. Default **true**, matching the
75
+ * catalog bridge's destructive ops.
76
+ *
77
+ * This bridge writes to a filesystem on the strength of a model's output, so
78
+ * the safe mode is the default and turning it off is the deliberate act.
79
+ */
80
+ pendingMode?: boolean;
81
+ /** Host confirm hook for staged writes. Resolves true to proceed. */
82
+ confirm?: (req: {
83
+ action: string;
84
+ path: string;
85
+ label: string;
86
+ }) => Promise<boolean> | boolean;
60
87
  };
61
88
  /**
62
89
  * Fail-closed, filesystem-free path containment. Throws when `path` contains a
@@ -64,6 +91,14 @@ type FilesBridgeOptions = {
64
91
  * `..` pass (resolved within root by the host). String-level only — see the
65
92
  * `root` docs: hosts over a real fs must ALSO realpath to defeat symlinks.
66
93
  */
94
+ /**
95
+ * Why a folder NAME cannot be used, or `null`.
96
+ *
97
+ * `assertPathWithinRoot` inspects the parent path; the name is appended to it
98
+ * afterwards, so `{ parentPath: "/root", name: "../.." }` clears that check and
99
+ * still escapes. A name containing a separator is not a name.
100
+ */
101
+ declare function invalidFolderName(name: string): string | null;
67
102
  declare function assertPathWithinRoot(root: string, path: string): void;
68
103
  /**
69
104
  * registerFilesBridge — an MCP tool set over a react-fancy `<FileBrowser>`'s
@@ -80,4 +115,4 @@ declare function assertPathWithinRoot(root: string, path: string): void;
80
115
  */
81
116
  declare function registerFilesBridge(host: ToolHost, options: FilesBridgeOptions): Bridge;
82
117
 
83
- export { type FilesBridgeAdapter, type FilesBridgeOptions, assertPathWithinRoot, registerFilesBridge };
118
+ export { type FilesBridgeAdapter, type FilesBridgeOptions, assertPathWithinRoot, invalidFolderName, registerFilesBridge };
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  type FileKind = "file" | "dir";
@@ -36,6 +36,19 @@ type FilesBridgeAdapter = {
36
36
  listChildren: (path: string) => Promise<FileEntry[]> | FileEntry[];
37
37
  /** Optional (snapshot mode): fetch/refresh a snapshot subtree so an agent can pull remote state on demand. */
38
38
  requestSnapshot?: (path: string, depth?: number) => Promise<FileSnapshotNode[]> | FileSnapshotNode[];
39
+ /**
40
+ * Create a folder. **Supplying this is the opt-in** — `files_create_folder`
41
+ * is registered only when it is present, so an agent cannot be handed a write
42
+ * a host never wired, and the advertised tool list tells the truth about what
43
+ * is possible.
44
+ *
45
+ * Pairs with `FileBrowser`'s `onCreateFolder` (react-fancy 5.18+): the same
46
+ * operation the human has, given to the agent.
47
+ */
48
+ createFolder?: (input: {
49
+ parentPath: string;
50
+ name: string;
51
+ }) => Promise<void> | void;
39
52
  };
40
53
  type FilesBridgeOptions = {
41
54
  adapter: FilesBridgeAdapter;
@@ -57,6 +70,20 @@ type FilesBridgeOptions = {
57
70
  * SOLELY responsible for sandboxing what `listChildren`/`requestSnapshot` expose.
58
71
  */
59
72
  root?: string;
73
+ /**
74
+ * Stage writes for human confirmation. Default **true**, matching the
75
+ * catalog bridge's destructive ops.
76
+ *
77
+ * This bridge writes to a filesystem on the strength of a model's output, so
78
+ * the safe mode is the default and turning it off is the deliberate act.
79
+ */
80
+ pendingMode?: boolean;
81
+ /** Host confirm hook for staged writes. Resolves true to proceed. */
82
+ confirm?: (req: {
83
+ action: string;
84
+ path: string;
85
+ label: string;
86
+ }) => Promise<boolean> | boolean;
60
87
  };
61
88
  /**
62
89
  * Fail-closed, filesystem-free path containment. Throws when `path` contains a
@@ -64,6 +91,14 @@ type FilesBridgeOptions = {
64
91
  * `..` pass (resolved within root by the host). String-level only — see the
65
92
  * `root` docs: hosts over a real fs must ALSO realpath to defeat symlinks.
66
93
  */
94
+ /**
95
+ * Why a folder NAME cannot be used, or `null`.
96
+ *
97
+ * `assertPathWithinRoot` inspects the parent path; the name is appended to it
98
+ * afterwards, so `{ parentPath: "/root", name: "../.." }` clears that check and
99
+ * still escapes. A name containing a separator is not a name.
100
+ */
101
+ declare function invalidFolderName(name: string): string | null;
67
102
  declare function assertPathWithinRoot(root: string, path: string): void;
68
103
  /**
69
104
  * registerFilesBridge — an MCP tool set over a react-fancy `<FileBrowser>`'s
@@ -80,4 +115,4 @@ declare function assertPathWithinRoot(root: string, path: string): void;
80
115
  */
81
116
  declare function registerFilesBridge(host: ToolHost, options: FilesBridgeOptions): Bridge;
82
117
 
83
- export { type FilesBridgeAdapter, type FilesBridgeOptions, assertPathWithinRoot, registerFilesBridge };
118
+ export { type FilesBridgeAdapter, type FilesBridgeOptions, assertPathWithinRoot, invalidFolderName, registerFilesBridge };
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  type FlowNode = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  type FlowNode = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  type GitProposal = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  type GitProposal = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  type LatLng = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  type LatLng = {
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import { WorkbookData } from '@particle-academy/fancy-sheets';
4
4
  import '../types-C58ZXs4K.cjs';
5
5
 
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import { WorkbookData } from '@particle-academy/fancy-sheets';
4
4
  import '../types-C58ZXs4K.js';
5
5
 
@@ -1,6 +1,6 @@
1
1
  import { Deck, DeckOp } from '@particle-academy/fancy-slides';
2
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
3
- import { B as Bridge } from '../types-NFGP769G.cjs';
2
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
3
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
4
4
  import '../types-C58ZXs4K.cjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { Deck, DeckOp } from '@particle-academy/fancy-slides';
2
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
3
- import { B as Bridge } from '../types-BKD6uf86.js';
2
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
3
+ import { B as Bridge } from '../types-DSwsNTBG.js';
4
4
  import '../types-C58ZXs4K.js';
5
5
 
6
6
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
2
- import { B as Bridge } from '../types-NFGP769G.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
2
- import { B as Bridge } from '../types-BKD6uf86.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
+ import { B as Bridge } from '../types-DSwsNTBG.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
1
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
2
2
  import { HumanPlusEventStore, HumanPlusActor } from '../human-plus/index.cjs';
3
3
  import '../types-C58ZXs4K.cjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
1
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
2
2
  import { HumanPlusEventStore, HumanPlusActor } from '../human-plus/index.js';
3
3
  import '../types-C58ZXs4K.js';
4
4
 
@@ -1,6 +1,6 @@
1
1
  import { StickyNoteItem, ShapeItem, ConnectorItem, Stroke, Viewport, RemoteCursor } from '@particle-academy/fancy-whiteboard';
2
- import { T as ToolHost } from '../tool-host-EuYHYSSH.cjs';
3
- import { B as Bridge } from '../types-NFGP769G.cjs';
2
+ import { T as ToolHost } from '../tool-host-BpEBqf5u.cjs';
3
+ import { B as Bridge } from '../types-C4NaIW6B.cjs';
4
4
  import '../types-C58ZXs4K.cjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  import { StickyNoteItem, ShapeItem, ConnectorItem, Stroke, Viewport, RemoteCursor } from '@particle-academy/fancy-whiteboard';
2
- import { T as ToolHost } from '../tool-host-CWTOJEm2.js';
3
- import { B as Bridge } from '../types-BKD6uf86.js';
2
+ import { T as ToolHost } from '../tool-host-xY5F-eqG.js';
3
+ import { B as Bridge } from '../types-DSwsNTBG.js';
4
4
  import '../types-C58ZXs4K.js';
5
5
 
6
6
  /**