@weavetab/mcp 2.5.0-beta.5 → 2.5.1

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/AGENTS.md +49 -49
  2. package/ARCHITECTURE.md +590 -590
  3. package/README.md +216 -100
  4. package/SECURITY.md +207 -207
  5. package/TROUBLESHOOTING.md +373 -365
  6. package/dist/anticaptcha/detector.js +395 -395
  7. package/dist/anticaptcha/solver.js +130 -130
  8. package/dist/cdp/bridge.js +73 -73
  9. package/dist/cdp/connector.js +46 -22
  10. package/dist/cdp/extension.js +34 -34
  11. package/dist/cdp/helpers.js +174 -174
  12. package/dist/cdp/pruner.js +195 -195
  13. package/dist/cdp/ref_cache.js +66 -66
  14. package/dist/cdp/security.js +10 -10
  15. package/dist/cdp/verify.js +57 -57
  16. package/dist/cdp/walker.js +563 -525
  17. package/dist/cli/plugin.js +26 -3
  18. package/dist/config/loader.d.ts +0 -3
  19. package/dist/config/loader.js +0 -9
  20. package/dist/index.js +0 -4
  21. package/dist/intelligence/intent.js +81 -81
  22. package/dist/intelligence/sessionMemory.js +2 -2
  23. package/dist/overlay/ghost.js +22 -22
  24. package/dist/overlay/injector.js +89 -89
  25. package/dist/plugin/extension_bridge.js +54 -54
  26. package/dist/plugin/interface.d.ts +7 -0
  27. package/dist/plugin/loader.js +3 -4
  28. package/dist/plugin/schema.d.ts +11 -0
  29. package/dist/plugin/schema.js +59 -0
  30. package/dist/security/guard.js +18 -18
  31. package/dist/sensors/actionability.js +167 -167
  32. package/dist/sensors/guard.js +29 -29
  33. package/dist/sensors/network.js +15 -17
  34. package/dist/server.d.ts +1 -1
  35. package/dist/server.js +173 -144
  36. package/dist/state/delta.js +6 -7
  37. package/dist/tools/automation.js +85 -85
  38. package/dist/tools/canvas.js +48 -25
  39. package/dist/tools/checkpoint.js +94 -35
  40. package/dist/tools/click.js +52 -41
  41. package/dist/tools/clipboard.js +80 -74
  42. package/dist/tools/design_extract.js +441 -441
  43. package/dist/tools/dialog.js +13 -13
  44. package/dist/tools/emulation.d.ts +2 -0
  45. package/dist/tools/emulation.js +7 -0
  46. package/dist/tools/fill.js +344 -347
  47. package/dist/tools/find.js +78 -52
  48. package/dist/tools/highlight.js +67 -67
  49. package/dist/tools/inspect.js +54 -25
  50. package/dist/tools/key.js +42 -35
  51. package/dist/tools/navigate.d.ts +1 -1
  52. package/dist/tools/navigate.js +35 -35
  53. package/dist/tools/office/parse.js +62 -18
  54. package/dist/tools/pdf.d.ts +9 -0
  55. package/dist/tools/pdf.js +7 -4
  56. package/dist/tools/performance.d.ts +11 -4
  57. package/dist/tools/performance.js +94 -42
  58. package/dist/tools/performance_test.d.ts +2 -2
  59. package/dist/tools/performance_test.js +69 -69
  60. package/dist/tools/pointer.js +116 -116
  61. package/dist/tools/read.js +99 -67
  62. package/dist/tools/recording.js +9 -0
  63. package/dist/tools/scrape.js +146 -146
  64. package/dist/tools/screenshot.d.ts +2 -0
  65. package/dist/tools/screenshot.js +46 -4
  66. package/dist/tools/scroll.d.ts +3 -1
  67. package/dist/tools/scroll.js +13 -15
  68. package/dist/tools/select.d.ts +3 -0
  69. package/dist/tools/select.js +131 -124
  70. package/dist/tools/snapshot.js +8 -6
  71. package/dist/tools/storage.d.ts +5 -1
  72. package/dist/tools/storage.js +16 -0
  73. package/dist/tools/tabs.d.ts +7 -5
  74. package/dist/tools/tabs.js +79 -26
  75. package/dist/tools/thought.js +8 -8
  76. package/dist/tools/type.js +274 -274
  77. package/dist/tools/type_secret.js +23 -23
  78. package/dist/tools/upload.js +3 -3
  79. package/dist/tools/video_compiler.js +9 -0
  80. package/dist/tools/wait.js +35 -35
  81. package/dist/version.d.ts +1 -1
  82. package/dist/version.js +1 -1
  83. package/docs/DOCUMENTATION.md +583 -585
  84. package/docs/PLUGINS.md +139 -121
  85. package/docs/TOOLS.md +3 -4
  86. package/docs/architecture/blind-injection.md +83 -83
  87. package/docs/architecture/overview.md +49 -49
  88. package/docs/configuration/configuration.md +39 -27
  89. package/docs/configuration/folders.md +62 -55
  90. package/docs/desktop-automation/electron-apps.md +225 -214
  91. package/docs/get-started/installation.md +1 -1
  92. package/docs/get-started/introduction.md +60 -60
  93. package/docs/get-started/quickstart.md +2 -2
  94. package/docs/get-started/setup-wizard.md +1 -1
  95. package/docs/intelligence/site-profiles.md +151 -151
  96. package/docs/tools/tools.md +582 -631
  97. package/docs/troubleshooting/trouble-loop.md +31 -31
  98. package/ext-dist/background.js +415 -415
  99. package/ext-dist/content.js +2527 -2527
  100. package/ext-dist/dashboard.html +583 -583
  101. package/ext-dist/hud/hud.js +3 -3
  102. package/ext-dist/hud/index.html +20 -20
  103. package/ext-dist/manifest.json +73 -73
  104. package/ext-dist/styles.css +223 -223
  105. package/mcp.json +796 -805
  106. package/package.json +8 -8
  107. package/server.json +23 -23
  108. package/smithery.yaml +7 -11
  109. package/dist/cdp/walker.test.d.ts +0 -2
  110. package/dist/cdp/walker.test.js +0 -172
  111. package/dist/intelligence/sessionMemory.test.d.ts +0 -2
  112. package/dist/intelligence/sessionMemory.test.js +0 -62
  113. package/dist/intelligence/trail.test.d.ts +0 -2
  114. package/dist/intelligence/trail.test.js +0 -110
  115. package/dist/state/cache.test.d.ts +0 -2
  116. package/dist/state/cache.test.js +0 -76
  117. package/dist/state/delta.test.d.ts +0 -2
  118. package/dist/state/delta.test.js +0 -279
  119. package/dist/state/groups.d.ts +0 -15
  120. package/dist/state/groups.js +0 -80
  121. package/dist/tools/accessibility.d.ts +0 -14
  122. package/dist/tools/accessibility.js +0 -32
  123. package/dist/tools/ask.d.ts +0 -14
  124. package/dist/tools/ask.js +0 -49
  125. package/dist/tools/click_and_wait.d.ts +0 -33
  126. package/dist/tools/click_and_wait.js +0 -149
  127. package/dist/tools/drag.d.ts +0 -15
  128. package/dist/tools/drag.js +0 -29
  129. package/dist/tools/geo.d.ts +0 -19
  130. package/dist/tools/geo.js +0 -29
  131. package/dist/tools/github/analyze.d.ts +0 -4
  132. package/dist/tools/github/analyze.js +0 -113
  133. package/dist/tools/github/cache.d.ts +0 -21
  134. package/dist/tools/github/cache.js +0 -28
  135. package/dist/tools/github/index.d.ts +0 -19
  136. package/dist/tools/github/index.js +0 -40
  137. package/dist/tools/github/issues.d.ts +0 -9
  138. package/dist/tools/github/issues.js +0 -88
  139. package/dist/tools/github/pr.d.ts +0 -5
  140. package/dist/tools/github/pr.js +0 -88
  141. package/dist/tools/github/rateLimiter.d.ts +0 -4
  142. package/dist/tools/github/rateLimiter.js +0 -46
  143. package/dist/tools/github/read.d.ts +0 -34
  144. package/dist/tools/github/read.js +0 -74
  145. package/dist/tools/github/repoContext.d.ts +0 -20
  146. package/dist/tools/github/repoContext.js +0 -129
  147. package/dist/tools/hover.d.ts +0 -19
  148. package/dist/tools/hover.js +0 -57
  149. package/dist/tools/integration.test.d.ts +0 -2
  150. package/dist/tools/integration.test.js +0 -96
  151. package/dist/tools/macro_compiler.d.ts +0 -7
  152. package/dist/tools/macro_compiler.js +0 -82
  153. package/dist/tools/mouse.d.ts +0 -21
  154. package/dist/tools/mouse.js +0 -62
  155. package/dist/tools/response.d.ts +0 -129
  156. package/dist/tools/response.js +0 -5
  157. package/dist/tools/wait_for.d.ts +0 -23
  158. package/dist/tools/wait_for.js +0 -30
  159. package/dist/tools/windows.d.ts +0 -22
  160. package/dist/tools/windows.js +0 -57
@@ -46,18 +46,24 @@ export async function browserClipboard(session, options, _config) {
46
46
  throw new Error("browser_clipboard: image write requires a secure context (https or chrome://). Current page is non-secure (file:// or http://).");
47
47
  }
48
48
  const mime = mimeType || (dataUrl.includes(';') ? dataUrl.split(';')[0].split(':')[1] : "image/png");
49
+ // When both text and an image are supplied, put them in a single ClipboardItem
50
+ // so the plain-text flavor is not silently dropped (Windows keeps both).
51
+ const textFlavor = hasText
52
+ ? `itemData['text/plain'] = new Blob([${JSON.stringify(text)}], { type: 'text/plain' });`
53
+ : "";
49
54
  const res = await session.Runtime.evaluate({
50
- expression: `(async function() {
51
- try {
52
- const resp = await fetch(${JSON.stringify(dataUrl)});
53
- const blob = await resp.blob();
54
- await navigator.clipboard.write([
55
- new ClipboardItem({ ${JSON.stringify(mime)}: blob })
56
- ]);
57
- return "ok";
58
- } catch(e) {
59
- return "ERR:" + e.message;
60
- }
55
+ expression: `(async function() {
56
+ try {
57
+ const resp = await fetch(${JSON.stringify(dataUrl)});
58
+ const blob = await resp.blob();
59
+ const itemData = {};
60
+ itemData[${JSON.stringify(mime)}] = blob;
61
+ ${textFlavor}
62
+ await navigator.clipboard.write([ new ClipboardItem(itemData) ]);
63
+ return "ok";
64
+ } catch(e) {
65
+ return "ERR:" + e.message;
66
+ }
61
67
  })()`,
62
68
  awaitPromise: true,
63
69
  returnByValue: true
@@ -77,13 +83,13 @@ export async function browserClipboard(session, options, _config) {
77
83
  }
78
84
  catch { /* fallback to browser API */ }
79
85
  const res = await session.Runtime.evaluate({
80
- expression: `(async function() {
81
- try {
82
- ${secureCtx ? `await navigator.clipboard.writeText(${JSON.stringify(text)});` : `throw new Error('non-secure');`}
83
- return true;
84
- } catch(e) {
85
- return false;
86
- }
86
+ expression: `(async function() {
87
+ try {
88
+ ${secureCtx ? `await navigator.clipboard.writeText(${JSON.stringify(text)});` : `throw new Error('non-secure');`}
89
+ return true;
90
+ } catch(e) {
91
+ return false;
92
+ }
87
93
  })()`,
88
94
  awaitPromise: true,
89
95
  returnByValue: true
@@ -116,15 +122,15 @@ export async function browserClipboard(session, options, _config) {
116
122
  }
117
123
  async function readViaCdpPaste() {
118
124
  const { result } = await session.Runtime.evaluate({
119
- expression: `(function() {
120
- try {
121
- var ta = document.createElement('textarea');
122
- ta.style.cssText = 'position:fixed;top:-999px;left:-999px;opacity:0;width:1px;height:1px';
123
- document.body.appendChild(ta);
124
- ta.focus();
125
- ta.select();
126
- return true;
127
- } catch(e) { return false; }
125
+ expression: `(function() {
126
+ try {
127
+ var ta = document.createElement('textarea');
128
+ ta.style.cssText = 'position:fixed;top:-999px;left:-999px;opacity:0;width:1px;height:1px';
129
+ document.body.appendChild(ta);
130
+ ta.focus();
131
+ ta.select();
132
+ return true;
133
+ } catch(e) { return false; }
128
134
  })()`,
129
135
  returnByValue: true
130
136
  });
@@ -134,12 +140,12 @@ export async function browserClipboard(session, options, _config) {
134
140
  await session.Input.dispatchKeyEvent({ type: "keyUp", key: "v", windowsVirtualKeyCode: 86, nativeVirtualKeyCode: 86, modifiers: 2 });
135
141
  await new Promise(r => setTimeout(r, 100));
136
142
  const { result: valRes } = await session.Runtime.evaluate({
137
- expression: `(function() {
138
- var ta = document.querySelector('textarea[style*="top:-999px"]');
139
- if (!ta) return null;
140
- var v = ta.value;
141
- ta.remove();
142
- return v || null;
143
+ expression: `(function() {
144
+ var ta = document.querySelector('textarea[style*="top:-999px"]');
145
+ if (!ta) return null;
146
+ var v = ta.value;
147
+ ta.remove();
148
+ return v || null;
143
149
  })()`,
144
150
  returnByValue: true
145
151
  });
@@ -170,36 +176,36 @@ export async function browserClipboard(session, options, _config) {
170
176
  if (!secureCtx)
171
177
  return null;
172
178
  const res = await session.Runtime.evaluate({
173
- expression: `(async function() {
174
- try {
175
- if (typeof ClipboardItem !== 'undefined') {
176
- var items = await navigator.clipboard.read();
177
- var textVal = null, dataUrlVal = null;
178
- for (var i = 0; i < items.length; i++) {
179
- var item = items[i];
180
- var types = item.types;
181
- for (var j = 0; j < types.length; j++) {
182
- var type = types[j];
183
- var blob = await item.getType(type);
184
- if (type.indexOf('text/') === 0) {
185
- textVal = await blob.text();
186
- } else if (type.indexOf('image/') === 0) {
187
- dataUrlVal = await new Promise(function(rsv) {
188
- var r = new FileReader();
189
- r.onload = function() { rsv(r.result); };
190
- r.readAsDataURL(blob);
191
- });
192
- }
193
- }
194
- }
195
- if (textVal || dataUrlVal) return JSON.stringify({ text: textVal, dataUrl: dataUrlVal });
196
- }
197
- var t = await navigator.clipboard.readText();
198
- if (t) return JSON.stringify({ text: t });
199
- return null;
200
- } catch(e) {
201
- return 'ERR:' + e.message;
202
- }
179
+ expression: `(async function() {
180
+ try {
181
+ if (typeof ClipboardItem !== 'undefined') {
182
+ var items = await navigator.clipboard.read();
183
+ var textVal = null, dataUrlVal = null;
184
+ for (var i = 0; i < items.length; i++) {
185
+ var item = items[i];
186
+ var types = item.types;
187
+ for (var j = 0; j < types.length; j++) {
188
+ var type = types[j];
189
+ var blob = await item.getType(type);
190
+ if (type.indexOf('text/') === 0) {
191
+ textVal = await blob.text();
192
+ } else if (type.indexOf('image/') === 0) {
193
+ dataUrlVal = await new Promise(function(rsv) {
194
+ var r = new FileReader();
195
+ r.onload = function() { rsv(r.result); };
196
+ r.readAsDataURL(blob);
197
+ });
198
+ }
199
+ }
200
+ }
201
+ if (textVal || dataUrlVal) return JSON.stringify({ text: textVal, dataUrl: dataUrlVal });
202
+ }
203
+ var t = await navigator.clipboard.readText();
204
+ if (t) return JSON.stringify({ text: t });
205
+ return null;
206
+ } catch(e) {
207
+ return 'ERR:' + e.message;
208
+ }
203
209
  })()`,
204
210
  awaitPromise: true,
205
211
  returnByValue: true,
@@ -242,17 +248,17 @@ export async function browserClipboard(session, options, _config) {
242
248
  try {
243
249
  const evalResult = await Promise.race([
244
250
  session.Runtime.evaluate({
245
- expression: `(function() {
246
- try {
247
- var ta = document.createElement('textarea');
248
- ta.style.cssText = 'position:fixed;top:-999px;left:-999px;opacity:0';
249
- document.body.appendChild(ta);
250
- ta.focus();
251
- var ok = document.execCommand('paste');
252
- var v = ta.value;
253
- ta.remove();
254
- return ok && v ? JSON.stringify({ text: v }) : null;
255
- } catch(e) { return null; }
251
+ expression: `(function() {
252
+ try {
253
+ var ta = document.createElement('textarea');
254
+ ta.style.cssText = 'position:fixed;top:-999px;left:-999px;opacity:0';
255
+ document.body.appendChild(ta);
256
+ ta.focus();
257
+ var ok = document.execCommand('paste');
258
+ var v = ta.value;
259
+ ta.remove();
260
+ return ok && v ? JSON.stringify({ text: v }) : null;
261
+ } catch(e) { return null; }
256
262
  })()`,
257
263
  returnByValue: true
258
264
  }),