@weavetab/mcp 2.5.0-beta.0 → 2.5.0-beta.2

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 (98) hide show
  1. package/AGENTS.md +1 -0
  2. package/LICENSE +2 -2
  3. package/README.md +208 -43
  4. package/SECURITY.md +3 -3
  5. package/TROUBLESHOOTING.md +1 -1
  6. package/dist/cdp/bridge.d.ts +10 -0
  7. package/dist/cdp/bridge.js +288 -68
  8. package/dist/cdp/connector.d.ts +5 -3
  9. package/dist/cdp/connector.js +188 -74
  10. package/dist/cdp/extension.js +0 -1
  11. package/dist/cdp/helpers.js +0 -2
  12. package/dist/cdp/lock.d.ts +9 -6
  13. package/dist/cdp/lock.js +72 -59
  14. package/dist/cdp/omni_broker.d.ts +1 -0
  15. package/dist/cdp/omni_broker.js +12 -6
  16. package/dist/cdp/profiles.d.ts +10 -0
  17. package/dist/cdp/profiles.js +65 -0
  18. package/dist/cdp/walker.js +50 -0
  19. package/dist/cli/plugin.d.ts +0 -2
  20. package/dist/cli/plugin.js +31 -683
  21. package/dist/cli/updater.js +2 -2
  22. package/dist/config/loader.d.ts +25 -6
  23. package/dist/config/loader.js +133 -20
  24. package/dist/index.js +48 -52
  25. package/dist/lifecycle/mission_manager.d.ts +0 -1
  26. package/dist/lifecycle/mission_manager.js +0 -3
  27. package/dist/overlay/ghost.d.ts +4 -0
  28. package/dist/overlay/ghost.js +118 -94
  29. package/dist/overlay/injector.d.ts +1 -1
  30. package/dist/overlay/injector.js +1 -15
  31. package/dist/plugin/extension_bridge.d.ts +40 -0
  32. package/dist/plugin/extension_bridge.js +158 -0
  33. package/dist/plugin/interface.d.ts +78 -16
  34. package/dist/plugin/loader.d.ts +4 -0
  35. package/dist/plugin/loader.js +178 -57
  36. package/dist/plugin/registry.js +11 -1
  37. package/dist/plugin/storage.d.ts +51 -0
  38. package/dist/plugin/storage.js +164 -0
  39. package/dist/server.js +217 -151
  40. package/dist/state/session.d.ts +2 -2
  41. package/dist/state/session.js +33 -13
  42. package/dist/tools/browser_detect.d.ts +2 -1
  43. package/dist/tools/browser_detect.js +6 -5
  44. package/dist/tools/burst.d.ts +1 -0
  45. package/dist/tools/burst.js +4 -6
  46. package/dist/tools/click.js +23 -28
  47. package/dist/tools/clipboard.js +31 -24
  48. package/dist/tools/navigate.d.ts +1 -1
  49. package/dist/tools/navigate.js +28 -10
  50. package/dist/tools/read.js +1 -1
  51. package/dist/tools/tabs.d.ts +10 -10
  52. package/dist/tools/tabs.js +47 -39
  53. package/dist/tools/type.js +2 -2
  54. package/docs/DOCUMENTATION.md +63 -6
  55. package/docs/architecture/blind-injection.md +20 -0
  56. package/docs/architecture/dual-injection.md +32 -0
  57. package/docs/architecture/overview.md +49 -0
  58. package/docs/architecture/security.md +35 -0
  59. package/docs/architecture/transport.md +37 -0
  60. package/docs/captcha-stealth/captcha-solver.md +75 -0
  61. package/docs/captcha-stealth/stealth-physics.md +60 -0
  62. package/docs/cli/cli-commands.md +44 -0
  63. package/docs/cli/cli-flags.md +20 -0
  64. package/docs/cli/cli-introduction.md +20 -0
  65. package/docs/cli/cli-scripting.md +32 -0
  66. package/docs/cli/g-ide/ide-antigravity.md +24 -0
  67. package/docs/cli/g-ide/ide-claude-code.md +24 -0
  68. package/docs/cli/g-ide/ide-claude-desktop.md +32 -0
  69. package/docs/cli/g-ide/ide-cursor.md +31 -0
  70. package/docs/cli/g-ide/ide-generic.md +34 -0
  71. package/docs/cli/g-ide/ide-opencode.md +24 -0
  72. package/docs/cli/g-ide/ide-vscode-copilot.md +24 -0
  73. package/docs/cli/g-ide/ide-windsurf.md +24 -0
  74. package/docs/configuration/config-locations.md +24 -0
  75. package/docs/configuration/configuration.md +73 -0
  76. package/docs/configuration/env-variables.md +19 -0
  77. package/docs/configuration/folders.md +54 -0
  78. package/docs/desktop-automation/electron-apps.md +162 -0
  79. package/docs/get-started/installation.md +47 -0
  80. package/docs/get-started/introduction.md +60 -0
  81. package/docs/get-started/quickstart.md +54 -0
  82. package/docs/get-started/setup-wizard.md +26 -0
  83. package/docs/skills-ecosystem/skills-overview.md +35 -0
  84. package/docs/skills-ecosystem/skills-recipes.md +36 -0
  85. package/docs/tools/tools.md +293 -0
  86. package/docs/troubleshooting/trouble-browser.md +27 -0
  87. package/docs/troubleshooting/trouble-config.md +20 -0
  88. package/docs/troubleshooting/trouble-loop.md +31 -0
  89. package/ext-dist/content.js +126 -101
  90. package/mcp.json +8 -15
  91. package/package.json +11 -5
  92. package/server.json +3 -3
  93. package/dist/tools/plan.d.ts +0 -39
  94. package/dist/tools/plan.js +0 -161
  95. package/docs/DEV_MODE.md +0 -68
  96. package/docs/PLUGINS.md +0 -538
  97. package/docs/TOOLS.md +0 -104
  98. package/docs/dev_plugin.md +0 -310
@@ -164,7 +164,9 @@ function __wt_safeAppendToBody(el) {
164
164
  }
165
165
  if (typeof __weaveCursor !== 'undefined' && __weaveCursor) {
166
166
  __weaveCursor.setVisible(__wt_masterVisualsEnabled);
167
- if (__weaveCursor._canvas) {
167
+ if (__weaveCursor._cursor) {
168
+ __weaveCursor._cursor.style.display = __wt_masterVisualsEnabled ? 'block' : 'none';
169
+ } else if (__weaveCursor._canvas) {
168
170
  __weaveCursor._canvas.style.display = __wt_masterVisualsEnabled ? 'block' : 'none';
169
171
  }
170
172
  }
@@ -213,8 +215,13 @@ function __wt_safeAppendToBody(el) {
213
215
  if (msg.type === 'WT_TOGGLE_MASTER_VISUALS') {
214
216
  __wt_applyMasterVisuals(msg.enabled);
215
217
  }
216
- if (msg.type === 'GHOST_CURSOR_MOVE' && iframe && iframe.contentWindow) {
217
- iframe.contentWindow.postMessage({ type: 'RT_CURSOR_MOVE', x: msg.x, y: msg.y, phase: msg.phase }, '*');
218
+ if (msg.type === 'GHOST_CURSOR_MOVE') {
219
+ if (typeof msg.x === 'number' && typeof msg.y === 'number') {
220
+ moveCursor(msg.x, msg.y, msg.phase);
221
+ }
222
+ if (iframe && iframe.contentWindow) {
223
+ iframe.contentWindow.postMessage({ type: 'RT_CURSOR_MOVE', x: msg.x, y: msg.y, phase: msg.phase }, '*');
224
+ }
218
225
  }
219
226
  if (msg.type === 'TOOL_CALL_EVENT' && iframe && iframe.contentWindow) {
220
227
  iframe.contentWindow.postMessage({ type: 'TOOL_CALL_EVENT', payload: msg.payload }, '*');
@@ -932,71 +939,88 @@ window.__Weavetab_readConsole = function({ since = 'last', level = null } = {})
932
939
  return level ? entries.filter(e => e.level === level) : entries;
933
940
  };
934
941
 
935
- // ── PREMIUM WEAVE CURSOR (Phase 5.1 / 5.3) ─────────────────────
936
- // Shadow-DOM-isolated, canvas-based, with cognitive-load speed scaling
937
- // and state-driven visual transitions: idle, moving, reading, typing, clicking, thinking
942
+ // ── BLUE SVG WEAVE CURSOR ───────────────────────────────────────
943
+ // Shadow-DOM-isolated, hardware-accelerated SVG cursor with smooth interpolation
938
944
  class WeaveCursor {
939
945
  constructor() {
940
946
  // Attach a shadow host that sits above all page content
941
947
  this._host = document.createElement('div');
942
948
  this._host.id = '__Weavetab_cursor_host';
949
+ this._host.setAttribute('data-wt-ignore', 'true');
943
950
  Object.assign(this._host.style, {
944
951
  position: 'fixed',
945
952
  top: '0',
946
953
  left: '0',
947
954
  width: '0',
948
955
  height: '0',
949
- zIndex: '2147483640',
956
+ zIndex: '2147483647',
950
957
  pointerEvents: 'none',
951
958
  overflow: 'visible',
952
959
  });
953
960
 
954
961
  const shadow = this._host.attachShadow({ mode: 'closed' });
955
962
 
956
- // Canvas layer
957
- this._canvas = document.createElement('canvas');
958
- this._canvas.width = 64;
959
- this._canvas.height = 64;
960
- Object.assign(this._canvas.style, {
963
+ // Hotspot aligned with the top-left pointer tip (3.0, 5.0 in 32x32 viewBox)
964
+ this._hotX = 3.0;
965
+ this._hotY = 5.0;
966
+ this._scale = 0.4;
967
+
968
+ const initX = typeof window !== 'undefined' && window.innerWidth ? Math.round(window.innerWidth / 2) : 640;
969
+ const initY = typeof window !== 'undefined' && window.innerHeight ? Math.round(window.innerHeight / 2) : 400;
970
+
971
+ // Exact vector SVG cursor matching user design
972
+ this._cursor = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
973
+ this._cursor.setAttribute('class', 'cursor');
974
+ this._cursor.setAttribute('viewBox', '0 0 32 32');
975
+ this._cursor.setAttribute('width', '32');
976
+ this._cursor.setAttribute('height', '32');
977
+ this._cursor.setAttribute('aria-hidden', 'true');
978
+ Object.assign(this._cursor.style, {
961
979
  position: 'fixed',
962
980
  top: '0',
963
981
  left: '0',
964
- width: '64px',
965
- height: '64px',
982
+ width: '32px',
983
+ height: '32px',
984
+ display: 'block',
985
+ transformOrigin: `${this._hotX}px ${this._hotY}px`,
986
+ transform: `translate3d(${initX - this._hotX}px, ${initY - this._hotY}px, 0) scale(${this._scale})`,
987
+ overflow: 'visible',
966
988
  pointerEvents: 'none',
967
- transform: 'translate(-9999px,-9999px)',
968
989
  willChange: 'transform',
969
- transition: 'opacity 0.15s ease-out',
990
+ transition: 'opacity 0.2s ease-out',
991
+ opacity: '1',
992
+ zIndex: '2147483647',
993
+ filter: 'drop-shadow(0 2px 4px rgba(0,0,0,0.35))',
970
994
  });
971
- shadow.appendChild(this._canvas);
972
-
973
- this._ctx = this._canvas.getContext('2d');
974
- this._x = -9999;
975
- this._y = -9999;
976
- this._targetX = -9999;
977
- this._targetY = -9999;
978
- this._lerpX = -9999;
979
- this._lerpY = -9999;
995
+
996
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
997
+ path.setAttribute('class', 'cursor-shape');
998
+ path.setAttribute('d', 'M 6.1,4.7 C 4.5,4.1 3.0,5.0 3.0,6.7 C 3.0,7.1 3.1,7.5 3.3,8.0 L 10.2,27.0 C 10.8,28.7 12.0,29.6 13.6,29.5 C 15.1,29.4 16.0,28.5 16.5,27.0 L 19.4,18.8 L 25.9,17.0 C 27.7,16.5 28.9,15.2 28.9,13.6 C 28.9,12.1 28.0,10.9 26.4,10.3 Z');
999
+ path.setAttribute('fill', '#1268ff');
1000
+ path.setAttribute('stroke', '#ffffff');
1001
+ path.setAttribute('stroke-width', '3.1');
1002
+ path.setAttribute('stroke-linejoin', 'round');
1003
+ path.setAttribute('stroke-linecap', 'round');
1004
+
1005
+ this._cursor.appendChild(path);
1006
+ shadow.appendChild(this._cursor);
1007
+
1008
+ // Alias _canvas to _cursor for backward compatibility
1009
+ this._canvas = this._cursor;
1010
+
1011
+ this._x = initX;
1012
+ this._y = initY;
1013
+ this._targetX = initX;
1014
+ this._targetY = initY;
1015
+ this._lerpX = initX;
1016
+ this._lerpY = initY;
980
1017
  this._state = 'idle';
981
- this._visible = false;
1018
+ this._visible = true;
982
1019
  this._animFrame = null;
983
- this._lastMoveTime = 0;
984
1020
  this._lastTime = performance.now();
985
1021
  this._waypointQueue = [];
986
1022
  this._playingQueue = false;
987
1023
 
988
- this._hotX = 0;
989
- this._hotY = 0;
990
-
991
- // Sharp precision arrow pointer path (tip at 0,0)
992
- this._outerPath = new Path2D("M 0 0 L 0 16 L 4.2 12.2 L 7.5 19 L 10.2 17.6 L 6.8 10.8 L 11.8 10.8 Z");
993
- this._innerPath = new Path2D("M 1.2 2.5 L 1.2 13.5 L 3.8 10.8 L 6.6 16.5 L 8.2 15.6 L 5.4 9.8 L 9.8 9.8 Z");
994
-
995
- // Vivid linear gradient (#06B6D4 -> #3B82F6)
996
- this._blueGrad = this._ctx.createLinearGradient(0, 0, 12, 19);
997
- this._blueGrad.addColorStop(0, '#06B6D4');
998
- this._blueGrad.addColorStop(1, '#3B82F6');
999
-
1000
1024
  __wt_safeAppendToBody(this._host);
1001
1025
  this._startLoop();
1002
1026
  }
@@ -1018,23 +1042,25 @@ class WeaveCursor {
1018
1042
  setVisible(visible) {
1019
1043
  if (typeof __wt_masterVisualsEnabled !== 'undefined' && !__wt_masterVisualsEnabled) {
1020
1044
  this._visible = false;
1021
- this._canvas.style.opacity = '0';
1045
+ this._cursor.style.opacity = '0';
1022
1046
  return;
1023
1047
  }
1024
1048
  this._visible = visible;
1025
- this._canvas.style.opacity = visible ? '1' : '0';
1049
+ this._cursor.style.opacity = visible ? '1' : '0';
1026
1050
  }
1027
1051
 
1028
1052
  moveTo(x, y) {
1029
1053
  if (typeof __wt_masterVisualsEnabled !== 'undefined' && !__wt_masterVisualsEnabled) return;
1030
- if (this._playingQueue) return;
1054
+ if (typeof x !== 'number' || typeof y !== 'number' || isNaN(x) || isNaN(y)) return;
1031
1055
  this._targetX = x;
1032
1056
  this._targetY = y;
1033
- if (this._lerpX === -9999) { this._lerpX = x; this._lerpY = y; }
1034
- this._lastMoveTime = Date.now();
1057
+ if (this._lerpX === -9999) {
1058
+ this._lerpX = x;
1059
+ this._lerpY = y;
1060
+ }
1035
1061
  if (!this._visible) {
1036
1062
  this._visible = true;
1037
- this._canvas.style.opacity = '1';
1063
+ this._cursor.style.opacity = '1';
1038
1064
  }
1039
1065
  if (!this._animFrame) {
1040
1066
  this._startLoop();
@@ -1043,20 +1069,23 @@ class WeaveCursor {
1043
1069
 
1044
1070
  setWaypoints(waypoints, durationMs) {
1045
1071
  if (typeof __wt_masterVisualsEnabled !== 'undefined' && !__wt_masterVisualsEnabled) return;
1072
+ if (!waypoints || !waypoints.length) return;
1046
1073
  this._waypointQueue = waypoints;
1047
1074
  this._playingQueue = true;
1048
1075
  this._waypointStartTime = performance.now();
1049
- this._waypointDuration = durationMs;
1076
+ this._waypointDuration = durationMs || (waypoints.length * 16);
1050
1077
  if (waypoints.length > 0 && this._lerpX === -9999) {
1051
1078
  this._lerpX = waypoints[0].x;
1052
1079
  this._lerpY = waypoints[0].y;
1053
1080
  }
1054
- if (!this._visible) { this._visible = true; this._canvas.style.opacity = '1'; }
1081
+ if (!this._visible) {
1082
+ this._visible = true;
1083
+ this._cursor.style.opacity = '1';
1084
+ }
1055
1085
  if (!this._animFrame) this._startLoop();
1056
1086
  }
1057
1087
 
1058
1088
  _startLoop() {
1059
- this._idleFrames = 0;
1060
1089
  this._lastTime = performance.now();
1061
1090
  const draw = (currentTime) => {
1062
1091
  const dt = Math.min((currentTime - this._lastTime) / 1000, 0.1);
@@ -1064,89 +1093,86 @@ class WeaveCursor {
1064
1093
 
1065
1094
  if (this._playingQueue && this._waypointQueue.length > 0) {
1066
1095
  const elapsed = currentTime - this._waypointStartTime;
1067
- const progress = Math.min(elapsed / this._waypointDuration, 1);
1068
- const idx = Math.min(Math.floor(progress * this._waypointQueue.length), this._waypointQueue.length - 1);
1069
- const pt = this._waypointQueue[idx];
1070
- if (pt) {
1071
- this._targetX = pt.x;
1072
- this._targetY = pt.y;
1073
- this._lastMoveTime = Date.now();
1096
+ const progress = Math.max(0, Math.min(elapsed / (this._waypointDuration || 1), 1));
1097
+ const totalSegments = this._waypointQueue.length - 1;
1098
+
1099
+ if (totalSegments <= 0) {
1100
+ this._targetX = this._waypointQueue[0].x;
1101
+ this._targetY = this._waypointQueue[0].y;
1102
+ } else {
1103
+ const floatIdx = progress * totalSegments;
1104
+ const i0 = Math.floor(floatIdx);
1105
+ const i1 = Math.min(i0 + 1, totalSegments);
1106
+ const t = floatIdx - i0;
1107
+
1108
+ const p0 = this._waypointQueue[i0];
1109
+ const p1 = this._waypointQueue[i1];
1110
+ if (p0 && p1) {
1111
+ this._targetX = p0.x + (p1.x - p0.x) * t;
1112
+ this._targetY = p0.y + (p1.y - p0.y) * t;
1113
+ }
1074
1114
  }
1115
+
1075
1116
  if (progress >= 1) {
1076
1117
  this._playingQueue = false;
1077
1118
  this._waypointQueue = [];
1078
1119
  }
1079
1120
  }
1080
1121
 
1081
- // Smooth lerp (k = 14)
1082
- const lerpFactor = 1 - Math.exp(-14 * dt);
1122
+ // Smooth exponential lerp (k = 24 for fluid human-smooth tracking)
1123
+ const lerpFactor = 1 - Math.exp(-24 * dt);
1083
1124
  if (this._targetX !== -9999) {
1084
1125
  this._lerpX += (this._targetX - this._lerpX) * lerpFactor;
1085
1126
  this._lerpY += (this._targetY - this._lerpY) * lerpFactor;
1086
- if (Math.abs(this._targetX - this._lerpX) < 0.3) this._lerpX = this._targetX;
1087
- if (Math.abs(this._targetY - this._lerpY) < 0.3) this._lerpY = this._targetY;
1088
- }
1089
-
1090
- const hasRecentMove = (Date.now() - this._lastMoveTime) < 1200;
1091
- if (hasRecentMove && (typeof __wt_masterVisualsEnabled === 'undefined' || __wt_masterVisualsEnabled)) {
1092
- if (!this._visible) {
1093
- this._visible = true;
1094
- this._canvas.style.opacity = '1';
1095
- }
1096
- this._idleFrames = 0;
1097
- } else {
1098
- this._idleFrames++;
1099
- if (this._idleFrames > 90 || !__wt_masterVisualsEnabled) {
1127
+ if (Math.abs(this._targetX - this._lerpX) < 0.1) this._lerpX = this._targetX;
1128
+ if (Math.abs(this._targetY - this._lerpY) < 0.1) this._lerpY = this._targetY;
1129
+
1130
+ // "always show in browser" - stays visible once loaded and active
1131
+ if (typeof __wt_masterVisualsEnabled === 'undefined' || __wt_masterVisualsEnabled) {
1132
+ if (!this._visible) {
1133
+ this._visible = true;
1134
+ this._cursor.style.opacity = '1';
1135
+ }
1136
+ } else {
1100
1137
  if (this._visible) {
1101
1138
  this._visible = false;
1102
- this._canvas.style.opacity = '0';
1139
+ this._cursor.style.opacity = '0';
1103
1140
  }
1104
1141
  }
1142
+
1143
+ this._render();
1105
1144
  }
1106
1145
 
1107
- this._render();
1108
1146
  this._animFrame = requestAnimationFrame(draw);
1109
1147
  };
1148
+ if (this._animFrame) cancelAnimationFrame(this._animFrame);
1110
1149
  this._animFrame = requestAnimationFrame(draw);
1111
1150
  }
1112
1151
 
1113
1152
  _render() {
1114
1153
  if (typeof __wt_masterVisualsEnabled !== 'undefined' && !__wt_masterVisualsEnabled) {
1115
- this._canvas.style.opacity = '0';
1154
+ this._cursor.style.opacity = '0';
1116
1155
  return;
1117
1156
  }
1118
-
1119
- const { _ctx: ctx, _lerpX: x, _lerpY: y } = this;
1120
-
1121
- this._canvas.style.transform = `translate(${x - this._hotX}px, ${y - this._hotY}px)`;
1122
- ctx.clearRect(0, 0, 64, 64);
1123
-
1124
- ctx.save();
1125
- ctx.translate(2, 2);
1126
-
1127
- // Sharp outer stroke — White
1128
- ctx.fillStyle = '#FFFFFF';
1129
- ctx.strokeStyle = '#FFFFFF';
1130
- ctx.lineWidth = 2;
1131
- ctx.lineJoin = 'miter';
1132
- ctx.miterLimit = 3;
1133
- ctx.fill(this._outerPath);
1134
- ctx.stroke(this._outerPath);
1135
-
1136
- // Sharp inner core — Gradient
1137
- ctx.fillStyle = this._blueGrad;
1138
- ctx.fill(this._innerPath);
1139
-
1140
- ctx.restore();
1157
+ const x = this._lerpX;
1158
+ const y = this._lerpY;
1159
+ if (x === -9999 || y === -9999) return;
1160
+ this._cursor.style.transform = `translate3d(${x - this._hotX}px, ${y - this._hotY}px, 0) scale(${this._scale})`;
1141
1161
  }
1142
1162
  }
1143
1163
 
1144
- // Instantiate the premium cursor
1145
- let __weaveCursor = { setState: function(){}, moveTo: function(){}, destroy: function(){}, setVisible: function(){}, setWaypoints: function(){} };
1164
+ // Instantiate the active cursor
1165
+ let __weaveCursor = new WeaveCursor();
1146
1166
  window.__weaveCursor_instance = __weaveCursor;
1147
1167
 
1148
1168
  function moveCursor(x, y, state) {
1149
- // Cursor visuals disabled
1169
+ if (typeof __wt_masterVisualsEnabled !== 'undefined' && !__wt_masterVisualsEnabled) return;
1170
+ if (__weaveCursor && typeof __weaveCursor.moveTo === 'function') {
1171
+ if (typeof x === 'number' && typeof y === 'number' && x >= 0 && y >= 0) {
1172
+ __weaveCursor.moveTo(x, y);
1173
+ }
1174
+ if (state) __weaveCursor.setState(state);
1175
+ }
1150
1176
  }
1151
1177
 
1152
1178
 
@@ -1751,7 +1777,6 @@ function __wt_handleWeavetabMsg(msg) {
1751
1777
  }
1752
1778
  }
1753
1779
  }
1754
- if (msg.darkMode !== undefined) document.body.classList.toggle('Weavetab-dark', msg.darkMode);
1755
1780
  if (msg.cursor || msg.hud) {
1756
1781
  controlledIndicator.show('#3B82F6');
1757
1782
  }
package/mcp.json CHANGED
@@ -1,18 +1,20 @@
1
1
  {
2
2
  "name": "@weavetab/mcp",
3
3
  "mcpName": "io.github.weavetab/mcp",
4
- "version": "2.5.0-beta.0",
5
- "description": "Weavetab MCP — Production-grade browser automation MCP server with direct Chrome DevTools Protocol (CDP) control. Direct socket transport, zero WebDriver/Node.js wrapper overhead, deterministic state execution.",
4
+ "version": "2.5.0-beta.2",
5
+ "description": "Weavetab MCP — Direct Layer 0 interface for AI agents across web and desktop applications. Direct socket transport, zero wrapper overhead, deterministic state execution.",
6
6
  "icon": "icon.png",
7
7
  "author": "fy2ne",
8
8
  "license": "AGPL-3.0-only",
9
- "homepage": "https://weavetab.dev",
9
+ "homepage": "https://github.com/weavetab/mcp",
10
10
  "repository": "https://github.com/weavetab/mcp",
11
11
  "keywords": [
12
12
  "weavetab",
13
13
  "mcp",
14
14
  "model context protocol",
15
15
  "browser automation",
16
+ "electron automation",
17
+ "desktop automation",
16
18
  "chrome devtools protocol",
17
19
  "cdp",
18
20
  "ai agent",
@@ -185,15 +187,6 @@
185
187
  "Optional form submission click step"
186
188
  ]
187
189
  },
188
- "browser_plan": {
189
- "category": "mission_execution",
190
- "description": "Create or update a live task panel in the browser. Renders a real-time task dashboard within a Shadow DOM overlay displaying goal progress and step status.",
191
- "features": [
192
- "Real-time task state and progress display",
193
- "Isolated Shadow DOM layout structure",
194
- "Structured task state tracking (pending, in-progress, done, failed)"
195
- ]
196
- },
197
190
  "browser_highlight": {
198
191
  "category": "canvas_and_visual",
199
192
  "description": "Highlight an element with a colored overlay. Renders temporary visual CDP overlay highlights over target elements without DOM tree mutations.",
@@ -723,10 +716,10 @@
723
716
  "default": 0,
724
717
  "description": "Chrome DevTools Protocol attach port"
725
718
  },
726
- "disableExtensions": {
719
+ "extension": {
727
720
  "type": "boolean",
728
- "default": false,
729
- "description": "Disable Weavetab Chrome extension integration"
721
+ "default": true,
722
+ "description": "Enable Weavetab Chrome extension integration"
730
723
  },
731
724
  "maxTabs": {
732
725
  "type": "number",
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@weavetab/mcp",
3
- "version": "2.5.0-beta.0",
4
- "description": "A production-grade local MCP server for AI browser automation via Chrome DevTools Protocol. No extensions. No cloud. Full control.",
5
- "author": "fy2ne",
3
+ "version": "2.5.0-beta.2",
4
+ "description": "Direct Layer 0 interface for AI agents across web and desktop applications. No WebDriver. No cloud. Pure control.",
5
+ "author": {
6
+ "name": "fy2ne",
7
+ "email": "hello@fy2ne.me",
8
+ "url": "https://fy2ne.me"
9
+ },
6
10
  "license": "AGPL-3.0-only",
7
- "homepage": "https://Weavetab.dev",
11
+ "homepage": "https://github.com/weavetab/mcp",
8
12
  "repository": {
9
13
  "type": "git",
10
14
  "url": "https://github.com/weavetab/mcp.git"
@@ -17,6 +21,8 @@
17
21
  "mcp",
18
22
  "model context protocol",
19
23
  "browser automation",
24
+ "electron automation",
25
+ "desktop automation",
20
26
  "ai agent",
21
27
  "claude mcp",
22
28
  "cursor mcp",
@@ -74,7 +80,7 @@
74
80
  "start": "node dist/index.js",
75
81
  "prepublishOnly": "npm run verify && npm run build",
76
82
  "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
77
- "test:unit": "node --import tsx/esm --test \"tests/unit/cache.test.ts\" \"tests/unit/delta.test.ts\" \"tests/unit/sessionMemory.test.ts\" \"tests/unit/trail.test.ts\" \"tests/unit/walker.test.ts\" \"tests/unit/burst.test.ts\" \"tests/unit/navigate.test.ts\" \"tests/unit/select.test.ts\" \"tests/unit/design_extract.test.ts\" \"tests/unit/plugin.test.ts\"",
83
+ "test:unit": "node --import tsx/esm --test \"tests/unit/cache.test.ts\" \"tests/unit/delta.test.ts\" \"tests/unit/sessionMemory.test.ts\" \"tests/unit/trail.test.ts\" \"tests/unit/walker.test.ts\" \"tests/unit/burst.test.ts\" \"tests/unit/navigate.test.ts\" \"tests/unit/select.test.ts\" \"tests/unit/design_extract.test.ts\" \"tests/unit/plugin.test.ts\" \"tests/unit/electron.test.ts\"",
78
84
  "test:e2e": "tsx tests/e2e/smoke_test.ts"
79
85
  },
80
86
  "dependencies": {
package/server.json CHANGED
@@ -2,18 +2,18 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.weavetab/mcp",
4
4
  "title": "Weavetab MCP",
5
- "description": "A production-grade local MCP server for AI browser automation via Chrome DevTools Protocol. No extensions. No cloud. Full control.",
5
+ "description": "Direct Layer 0 interface for AI agents across web and desktop applications. No WebDriver. No cloud. Pure control.",
6
6
  "repository": {
7
7
  "url": "https://github.com/weavetab/mcp",
8
8
  "source": "github"
9
9
  },
10
- "version": "2.5.0-beta.0",
10
+ "version": "2.5.0-beta.2",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@weavetab/mcp",
16
- "version": "2.5.0-beta.0",
16
+ "version": "2.5.0-beta.2",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },
@@ -1,39 +0,0 @@
1
- import CDP from "chrome-remote-interface";
2
- import type { Config } from "../config/loader.js";
3
- interface PlanTask {
4
- id: number;
5
- description: string;
6
- status: "pending" | "in-progress" | "done" | "failed";
7
- comment?: string;
8
- }
9
- export interface PlanOptions {
10
- action: "create" | "update" | "comments" | "hide";
11
- goal?: string;
12
- tasks?: PlanTask[];
13
- taskId?: number;
14
- status?: PlanTask["status"];
15
- }
16
- interface PlanComment {
17
- taskId: number;
18
- comment: string;
19
- time: number;
20
- }
21
- export declare function weavePlan(session: CDP.Client, options: PlanOptions, _config: Config): Promise<{
22
- success: boolean;
23
- plan?: {
24
- goal: string;
25
- tasks: PlanTask[];
26
- };
27
- comments?: PlanComment[];
28
- error?: string;
29
- }>;
30
- export declare function addPlanComment(taskId: number, comment: string): void;
31
- /** Returns current in-memory plan (goal + tasks) — used to re-inject on page navigation */
32
- export declare function getActivePlan(): {
33
- goal: string;
34
- tasks: PlanTask[];
35
- } | null;
36
- export declare function setActivePlan(goal: string, tasks: PlanTask[]): void;
37
- /** Re-inject plan into a (possibly fresh) page session — used after navigation / reconnect */
38
- export declare function restoreActivePlanIntoPage(session: CDP.Client): Promise<void>;
39
- export {};