@weavetab/skills 1.0.1 → 2.5.0-beta.4
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.
- package/README.md +108 -50
- package/ROUTER.md +43 -0
- package/bin/cli.js +232 -132
- package/browser/dom-strategy.md +119 -0
- package/browser/form-automation.md +87 -0
- package/browser/interaction-pipeline.md +216 -0
- package/browser/tab-and-window.md +136 -0
- package/desktop/desktop-targeting.md +85 -0
- package/desktop/electron-discovery.md +115 -0
- package/developer/github-forensics.md +74 -0
- package/dist/bundled/weavetab-all.md +1905 -0
- package/dist/bundled/weavetab-browser.md +501 -0
- package/dist/bundled/weavetab-desktop.md +176 -0
- package/dist/bundled/weavetab-developer.md +67 -0
- package/dist/bundled/weavetab-documents.md +142 -0
- package/dist/bundled/weavetab-memory.md +359 -0
- package/dist/bundled/weavetab-network-and-perf.md +223 -0
- package/dist/bundled/weavetab-plugins.md +78 -0
- package/dist/bundled/weavetab-resilience.md +216 -0
- package/dist/bundled/weavetab-security.md +87 -0
- package/dist/granular/browser_dom-strategy.md +119 -0
- package/dist/granular/browser_form-automation.md +87 -0
- package/dist/granular/browser_interaction-pipeline.md +216 -0
- package/dist/granular/browser_tab-and-window.md +136 -0
- package/dist/granular/desktop_desktop-targeting.md +85 -0
- package/dist/granular/desktop_electron-discovery.md +115 -0
- package/dist/granular/developer_github-forensics.md +74 -0
- package/dist/granular/documents_canvas-and-visual-capture.md +103 -0
- package/dist/granular/documents_office-document-ingestion.md +63 -0
- package/dist/granular/memory_selector-memory-system.md +127 -0
- package/dist/granular/memory_session-trail.md +95 -0
- package/dist/granular/memory_site-learning.md +180 -0
- package/dist/granular/network-and-perf_device-and-environment.md +87 -0
- package/dist/granular/network-and-perf_network-intercept-and-mock.md +84 -0
- package/dist/granular/network-and-perf_performance-and-vitals.md +84 -0
- package/dist/granular/plugins_hooks-and-overrides.md +36 -0
- package/dist/granular/plugins_plugin-runtime.md +60 -0
- package/dist/granular/resilience_loop-breaker.md +67 -0
- package/dist/granular/resilience_session-time-travel.md +131 -0
- package/dist/granular/resilience_stale-ref-recovery.md +53 -0
- package/dist/granular/security_rbac-and-policies.md +47 -0
- package/dist/granular/security_secret-containment-protocol.md +59 -0
- package/documents/canvas-and-visual-capture.md +103 -0
- package/documents/office-document-ingestion.md +63 -0
- package/evals/evaluator.js +146 -0
- package/evals/scenarios.json +238 -0
- package/memory/selector-memory-system.md +127 -0
- package/memory/session-trail.md +95 -0
- package/memory/site-learning.md +180 -0
- package/network-and-perf/device-and-environment.md +87 -0
- package/network-and-perf/network-intercept-and-mock.md +84 -0
- package/network-and-perf/performance-and-vitals.md +84 -0
- package/package.json +73 -42
- package/plugins/hooks-and-overrides.md +36 -0
- package/plugins/plugin-runtime.md +60 -0
- package/resilience/loop-breaker.md +67 -0
- package/resilience/session-time-travel.md +131 -0
- package/resilience/stale-ref-recovery.md +53 -0
- package/security/rbac-and-policies.md +47 -0
- package/security/secret-containment-protocol.md +59 -0
- package/skills.json +431 -308
- package/src/api.js +239 -128
- package/.github/FUNDING.yml +0 -2
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
- package/.github/ISSUE_TEMPLATE/skill_request.md +0 -24
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -23
- package/CONTRIBUTING.md +0 -34
- package/SECURITY.md +0 -26
- package/advanced/README.md +0 -2
- package/automation/README.md +0 -2
- package/general/captcha-evasion.md +0 -13
- package/general/context-awareness.md +0 -13
- package/general/cookie-consent.md +0 -13
- package/general/data-extraction.md +0 -13
- package/general/dynamic-interaction.md +0 -13
- package/general/error-recovery.md +0 -13
- package/general/file-upload.md +0 -13
- package/general/form-filling.md +0 -16
- package/general/guardrails.md +0 -13
- package/general/iframe-handling.md +0 -13
- package/general/infinite-scroll.md +0 -13
- package/general/login-flow.md +0 -16
- package/general/multi-tab-management.md +0 -13
- package/general/spa-navigation.md +0 -13
- package/general/table-scraping.md +0 -13
- package/scripts/build.js +0 -48
package/general/guardrails.md
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: guardrails
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["search", "browse", "github", "web", "navigate", "read repo"]
|
|
5
|
-
tools: ["browser_navigate", "browser_map", "github_analyze", "github_read"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 🛡️ Guardrails & Autonomy
|
|
9
|
-
**Core Philosophy:** You are a highly capable agent. Use your best judgment when deciding whether to use Weavetab MCP or your native tools.
|
|
10
|
-
|
|
11
|
-
- **Native Tools First:** If you need to do a simple web search or read a local codebase, rely on your native capabilities first. They are often faster.
|
|
12
|
-
- **When to Engage Weavetab:** Activate Weavetab MCP when you need deep, interactive browsing, rendering complex SPA pages, interacting with forms, or scraping structured data.
|
|
13
|
-
- **Creative Problem Solving:** Don't just follow paths blindly. If a site blocks you, pivot. Try a different search term, a different URL, or evaluate the DOM to find alternative routes. You have the autonomy to solve the problem how you see fit.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: iframe-handling
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["iframe", "frame", "embed", "embedded content", "cross origin"]
|
|
5
|
-
tools: ["browser_map", "browser_find", "browser_click", "browser_snapshot", "browser_navigate"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 🖼️ iFrame & Embedded Contexts
|
|
9
|
-
**Core Philosophy:** iFrames are websites within websites. You must traverse them intelligently.
|
|
10
|
-
|
|
11
|
-
- **Spot the Frame:** Payment gateways, video players, and embedded widgets live in iFrames. If you can't find an element that you *know* is on screen, it's probably in an iFrame.
|
|
12
|
-
- **Navigate the Hierarchy:** Use your tools to target elements *inside* the iFrame context.
|
|
13
|
-
- **Creative Extraction:** If an iFrame is being particularly stubborn, consider extracting its `src` attribute and using `browser_navigate` to visit the embedded page directly in a new tab.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: infinite-scroll
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["infinite scroll", "load more", "scroll", "pagination", "lazy load"]
|
|
5
|
-
tools: ["browser_scroll", "browser_map", "browser_snapshot", "browser_wait"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 📜 Infinite Scroll Navigation
|
|
9
|
-
**Core Philosophy:** Some data is hidden behind the scrollbar. You must be proactive in revealing it.
|
|
10
|
-
|
|
11
|
-
- **Scroll and Observe:** Use `browser_scroll` to move down the page. Don't just scroll once—if you're looking for a specific item, loop your scroll and `browser_wait` until the network fetches the new items.
|
|
12
|
-
- **Know When to Stop:** Monitor the DOM. If you scroll and the total height of the page doesn't change after a few seconds, you've likely hit the bottom.
|
|
13
|
-
- **Load More Buttons:** Infinite scroll is sometimes replaced by "Load More" buttons. Be vigilant—if scrolling isn't working, look for a button to click instead.
|
package/general/login-flow.md
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: login-flow
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["login", "sign in", "authenticate", "credentials", "log in", "username", "password"]
|
|
5
|
-
tools: ["browser_navigate", "browser_map", "browser_fill", "browser_type", "browser_click"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 🔑 Autonomous Login Flow
|
|
9
|
-
**Core Philosophy:** Authentication flows vary wildly across the web. You must adapt to the specific site's architecture.
|
|
10
|
-
|
|
11
|
-
1. **Assess the Landscape:** When you land on a login page, use `browser_map` to understand the layout. Is it a single form? A multi-step flow? A social login?
|
|
12
|
-
2. **Execute Creatively:**
|
|
13
|
-
- Use `browser_fill` for standard forms.
|
|
14
|
-
- If inputs are hidden or complex, use `browser_type` to simulate human keystrokes.
|
|
15
|
-
3. **Handle Friction:** Expect captchas, 2FA prompts, or weird redirects. If the submit button doesn't work, try pressing Enter natively or looking for hidden validation errors.
|
|
16
|
-
4. **Verify State:** Always confirm you actually logged in by checking for authenticated UI elements (like a dashboard or avatar) before declaring success.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: multi-tab-management
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["new tab", "open tab", "switch tab", "multiple tabs", "popup", "window"]
|
|
5
|
-
tools: ["browser_tabs", "browser_navigate", "browser_click", "browser_map"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 🗂️ Advanced Tab Management
|
|
9
|
-
**Core Philosophy:** Modern workflows require multitasking. Manage your browser tabs like a pro.
|
|
10
|
-
|
|
11
|
-
- **Keep Context:** If you need to reference documentation while interacting with an app, open it in a new tab. Use `browser_tabs` to seamlessly switch between them.
|
|
12
|
-
- **Handle Popups:** Sites will often open OAuth flows or external links in new tabs automatically. Be aware of your current active tab and switch contexts when necessary.
|
|
13
|
-
- **Clean Up:** Don't leave 50 tabs open. Close tabs you no longer need to keep your working memory and the browser clean.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: spa-navigation
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["spa", "single page", "react", "vue", "angular", "navigate", "route", "dynamic page"]
|
|
5
|
-
tools: ["browser_navigate", "browser_wait", "browser_map", "browser_snapshot", "browser_click"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 🧭 Single Page Application (SPA) Mastery
|
|
9
|
-
**Core Philosophy:** SPAs mutate the DOM asynchronously. You cannot rely on traditional page loads.
|
|
10
|
-
|
|
11
|
-
- **Patience is Key:** After clicking a link or a button in an SPA, the URL might change, but the network request might still be pending. Use `browser_wait` to ensure the DOM has settled.
|
|
12
|
-
- **Watch the DOM:** Instead of waiting blindly, look for loading spinners or skeleton screens. When they disappear, the content is ready.
|
|
13
|
-
- **State Awareness:** SPAs maintain state. If you get lost, you can often use the browser's back button or look for breadcrumbs to re-orient yourself.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: table-scraping
|
|
3
|
-
tier: general
|
|
4
|
-
triggers: ["scrape table", "extract table", "table data", "csv", "rows", "columns", "spreadsheet"]
|
|
5
|
-
tools: ["browser_scrape", "browser_map", "browser_snapshot", "browser_navigate"]
|
|
6
|
-
weavetab: ">=2.5.0"
|
|
7
|
-
---
|
|
8
|
-
# 📊 Intelligent Table Scraping
|
|
9
|
-
**Core Philosophy:** Data rarely looks exactly how you want it to. Be a smart data extractor.
|
|
10
|
-
|
|
11
|
-
- **Identify the Target:** Tables aren't always `<table>` elements. Look for CSS grids, flexboxes, and repeating list structures.
|
|
12
|
-
- **Scrape Smartly:** Use `browser_scrape` to pull structured data. If the table is paginated, you have the autonomy to loop through pages and compile the data into a single comprehensive dataset.
|
|
13
|
-
- **Data Cleanup:** When you extract the data, don't just dump it. Clean it up. Format it nicely (e.g., Markdown tables or CSV) for the user. If headers are weird, infer what they mean and rename them.
|
package/scripts/build.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const yaml = require('yaml');
|
|
4
|
-
|
|
5
|
-
const dirs = ['general', 'automation', 'advanced'];
|
|
6
|
-
const skills = [];
|
|
7
|
-
|
|
8
|
-
function parseFile(filePath) {
|
|
9
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
10
|
-
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
11
|
-
if (!match) return null;
|
|
12
|
-
|
|
13
|
-
const frontmatter = yaml.parse(match[1]);
|
|
14
|
-
|
|
15
|
-
// Convert absolute path to relative path
|
|
16
|
-
const relativePath = path.relative(path.join(__dirname, '..'), filePath);
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
...frontmatter,
|
|
20
|
-
filePath: relativePath.replace(/\\/g, '/')
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
for (const dir of dirs) {
|
|
25
|
-
const dirPath = path.join(__dirname, '..', dir);
|
|
26
|
-
if (!fs.existsSync(dirPath)) continue;
|
|
27
|
-
|
|
28
|
-
const files = fs.readdirSync(dirPath).filter(f => f.endsWith('.md') && f !== 'README.md');
|
|
29
|
-
for (const file of files) {
|
|
30
|
-
const fullPath = path.join(dirPath, file);
|
|
31
|
-
try {
|
|
32
|
-
const parsed = parseFile(fullPath);
|
|
33
|
-
if (parsed) {
|
|
34
|
-
skills.push(parsed);
|
|
35
|
-
}
|
|
36
|
-
} catch (e) {
|
|
37
|
-
console.error(`Error parsing ${fullPath}: ${e.message}`);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
fs.writeFileSync(
|
|
44
|
-
path.join(__dirname, '..', 'skills.json'),
|
|
45
|
-
JSON.stringify({ skills }, null, 2)
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
console.log(`Successfully built skills.json with ${skills.length} skills.`);
|