screenhand 0.1.1 → 0.3.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.
- package/README.md +193 -109
- package/bin/darwin-arm64/macos-bridge +0 -0
- package/dist/mcp-desktop.js +5876 -0
- package/dist/scripts/codex-monitor-daemon.js +335 -0
- package/dist/scripts/export-help-center.js +112 -0
- package/dist/scripts/marketing-loop.js +117 -0
- package/dist/scripts/observer-daemon.js +288 -0
- package/dist/scripts/orchestrator-daemon.js +399 -0
- package/dist/scripts/supervisor-daemon.js +272 -0
- package/dist/scripts/threads-campaign.js +208 -0
- package/dist/scripts/worker-daemon.js +228 -0
- package/dist/src/agent/cli.js +82 -0
- package/dist/src/agent/loop.js +274 -0
- package/dist/src/community/fetcher.js +109 -0
- package/dist/src/community/index.js +6 -0
- package/dist/src/community/publisher.js +191 -0
- package/dist/src/community/remote-api.js +121 -0
- package/dist/src/community/types.js +3 -0
- package/dist/src/community/validator.js +95 -0
- package/{src/config.ts → dist/src/config.js} +5 -10
- package/dist/src/context-tracker.js +489 -0
- package/{src/index.ts → dist/src/index.js} +32 -52
- package/dist/src/ingestion/coverage-auditor.js +233 -0
- package/dist/src/ingestion/doc-parser.js +164 -0
- package/dist/src/ingestion/index.js +8 -0
- package/dist/src/ingestion/menu-scanner.js +152 -0
- package/dist/src/ingestion/reference-merger.js +186 -0
- package/dist/src/ingestion/shortcut-extractor.js +180 -0
- package/dist/src/ingestion/tutorial-extractor.js +170 -0
- package/dist/src/ingestion/types.js +3 -0
- package/dist/src/jobs/manager.js +305 -0
- package/dist/src/jobs/runner.js +806 -0
- package/dist/src/jobs/store.js +102 -0
- package/dist/src/jobs/types.js +30 -0
- package/dist/src/jobs/worker.js +97 -0
- package/dist/src/learning/engine.js +356 -0
- package/dist/src/learning/index.js +9 -0
- package/dist/src/learning/locator-policy.js +120 -0
- package/dist/src/learning/pattern-policy.js +89 -0
- package/dist/src/learning/recovery-policy.js +116 -0
- package/dist/src/learning/sensor-policy.js +115 -0
- package/dist/src/learning/timing-model.js +204 -0
- package/dist/src/learning/topology-policy.js +90 -0
- package/dist/src/learning/types.js +9 -0
- package/dist/src/logging/timeline-logger.js +48 -0
- package/dist/src/mcp/mcp-stdio-server.js +464 -0
- package/dist/src/mcp/server.js +363 -0
- package/dist/src/mcp-entry.js +60 -0
- package/dist/src/memory/playbook-seeds.js +200 -0
- package/dist/src/memory/recall.js +222 -0
- package/dist/src/memory/research.js +104 -0
- package/dist/src/memory/seeds.js +101 -0
- package/dist/src/memory/service.js +446 -0
- package/dist/src/memory/session.js +169 -0
- package/dist/src/memory/store.js +451 -0
- package/{src/runtime/locator-cache.ts → dist/src/memory/types.js} +1 -17
- package/dist/src/monitor/codex-monitor.js +382 -0
- package/dist/src/monitor/task-queue.js +97 -0
- package/dist/src/monitor/types.js +62 -0
- package/dist/src/native/bridge-client.js +412 -0
- package/{src/native/macos-bridge-client.ts → dist/src/native/macos-bridge-client.js} +0 -1
- package/dist/src/observer/state.js +199 -0
- package/dist/src/observer/types.js +43 -0
- package/dist/src/orchestrator/state.js +68 -0
- package/dist/src/orchestrator/types.js +22 -0
- package/dist/src/perception/ax-source.js +162 -0
- package/dist/src/perception/cdp-source.js +162 -0
- package/dist/src/perception/coordinator.js +771 -0
- package/dist/src/perception/frame-differ.js +287 -0
- package/dist/src/perception/index.js +22 -0
- package/dist/src/perception/manager.js +199 -0
- package/dist/src/perception/types.js +47 -0
- package/dist/src/perception/vision-source.js +399 -0
- package/dist/src/planner/deterministic.js +298 -0
- package/dist/src/planner/executor.js +870 -0
- package/dist/src/planner/goal-store.js +92 -0
- package/dist/src/planner/index.js +21 -0
- package/dist/src/planner/planner.js +520 -0
- package/dist/src/planner/tool-registry.js +71 -0
- package/dist/src/planner/types.js +22 -0
- package/dist/src/platform/explorer.js +213 -0
- package/dist/src/platform/help-center-markdown.js +527 -0
- package/dist/src/platform/learner.js +257 -0
- package/dist/src/playbook/engine.js +486 -0
- package/dist/src/playbook/index.js +20 -0
- package/dist/src/playbook/mcp-recorder.js +204 -0
- package/dist/src/playbook/recorder.js +536 -0
- package/dist/src/playbook/runner.js +408 -0
- package/dist/src/playbook/store.js +312 -0
- package/dist/src/playbook/types.js +17 -0
- package/dist/src/recovery/detectors.js +156 -0
- package/dist/src/recovery/engine.js +327 -0
- package/dist/src/recovery/index.js +20 -0
- package/dist/src/recovery/strategies.js +274 -0
- package/dist/src/recovery/types.js +20 -0
- package/dist/src/runtime/accessibility-adapter.js +430 -0
- package/dist/src/runtime/app-adapter.js +64 -0
- package/dist/src/runtime/applescript-adapter.js +305 -0
- package/dist/src/runtime/ax-role-map.js +96 -0
- package/dist/src/runtime/browser-adapter.js +52 -0
- package/dist/src/runtime/cdp-chrome-adapter.js +521 -0
- package/dist/src/runtime/composite-adapter.js +221 -0
- package/dist/src/runtime/execution-contract.js +159 -0
- package/dist/src/runtime/executor.js +286 -0
- package/dist/src/runtime/locator-cache.js +50 -0
- package/dist/src/runtime/planning-loop.js +63 -0
- package/dist/src/runtime/service.js +432 -0
- package/dist/src/runtime/session-manager.js +63 -0
- package/dist/src/runtime/state-observer.js +121 -0
- package/dist/src/runtime/vision-adapter.js +225 -0
- package/dist/src/state/app-map-types.js +72 -0
- package/dist/src/state/app-map.js +1974 -0
- package/dist/src/state/entity-tracker.js +108 -0
- package/dist/src/state/fusion.js +96 -0
- package/dist/src/state/index.js +21 -0
- package/dist/src/state/ladder-generator.js +236 -0
- package/dist/src/state/persistence.js +156 -0
- package/dist/src/state/types.js +17 -0
- package/dist/src/state/world-model.js +1456 -0
- package/dist/src/supervisor/locks.js +186 -0
- package/dist/src/supervisor/supervisor.js +403 -0
- package/dist/src/supervisor/types.js +30 -0
- package/dist/src/test-mcp-protocol.js +154 -0
- package/dist/src/types.js +17 -0
- package/dist/src/util/atomic-write.js +133 -0
- package/dist/src/util/sanitize.js +146 -0
- package/dist-app-maps/com.figma.Desktop.json +959 -0
- package/dist-app-maps/com.hnc.Discord.json +1146 -0
- package/dist-app-maps/notion.id.json +2831 -0
- package/dist-playbooks/canva-screenhand-carousel.json +445 -0
- package/dist-playbooks/codex-desktop.json +76 -0
- package/dist-playbooks/competitor-research-stack.json +122 -0
- package/dist-playbooks/davinci-color-grade.json +153 -0
- package/dist-playbooks/davinci-edit-timeline.json +162 -0
- package/dist-playbooks/davinci-render.json +114 -0
- package/dist-playbooks/devto.json +52 -0
- package/dist-playbooks/discord.json +41 -0
- package/dist-playbooks/google-flow-create-project.json +59 -0
- package/dist-playbooks/google-flow-edit-image.json +90 -0
- package/dist-playbooks/google-flow-edit-video.json +90 -0
- package/dist-playbooks/google-flow-generate-image.json +68 -0
- package/dist-playbooks/google-flow-generate-video.json +191 -0
- package/dist-playbooks/google-flow-open-project.json +48 -0
- package/dist-playbooks/google-flow-open-scenebuilder.json +64 -0
- package/dist-playbooks/google-flow-search-assets.json +64 -0
- package/dist-playbooks/instagram.json +57 -0
- package/dist-playbooks/linkedin.json +52 -0
- package/dist-playbooks/n8n.json +43 -0
- package/dist-playbooks/reddit.json +52 -0
- package/dist-playbooks/threads.json +59 -0
- package/dist-playbooks/x-twitter.json +59 -0
- package/dist-playbooks/youtube.json +59 -0
- package/dist-references/canva.json +646 -0
- package/dist-references/codex-desktop.json +305 -0
- package/dist-references/davinci-resolve-keyboard.json +594 -0
- package/dist-references/davinci-resolve-menu-map.json +1139 -0
- package/dist-references/davinci-resolve-menus-batch1.json +116 -0
- package/dist-references/davinci-resolve-menus-batch2.json +372 -0
- package/dist-references/davinci-resolve-menus-batch3.json +330 -0
- package/dist-references/davinci-resolve-menus-batch4.json +297 -0
- package/dist-references/davinci-resolve-shortcuts.json +333 -0
- package/dist-references/devto.json +317 -0
- package/dist-references/discord.json +549 -0
- package/dist-references/figma.json +1186 -0
- package/dist-references/finder.json +146 -0
- package/dist-references/google-ads-transparency.json +95 -0
- package/dist-references/google-flow.json +649 -0
- package/dist-references/instagram.json +341 -0
- package/dist-references/linkedin.json +324 -0
- package/dist-references/meta-ad-library.json +86 -0
- package/dist-references/n8n.json +387 -0
- package/dist-references/notes.json +27 -0
- package/dist-references/notion.json +163 -0
- package/dist-references/reddit.json +341 -0
- package/dist-references/threads.json +337 -0
- package/dist-references/x-twitter.json +403 -0
- package/dist-references/youtube.json +373 -0
- package/native/macos-bridge/Package.swift +1 -0
- package/native/macos-bridge/Sources/AccessibilityBridge.swift +257 -36
- package/native/macos-bridge/Sources/AppManagement.swift +212 -2
- package/native/macos-bridge/Sources/CoreGraphicsBridge.swift +348 -53
- package/native/macos-bridge/Sources/StreamCapture.swift +136 -0
- package/native/macos-bridge/Sources/VisionBridge.swift +165 -7
- package/native/macos-bridge/Sources/main.swift +169 -16
- package/native/windows-bridge/Program.cs +5 -0
- package/native/windows-bridge/ScreenCapture.cs +124 -0
- package/package.json +29 -4
- package/scripts/postinstall.cjs +127 -0
- package/.claude/commands/automate.md +0 -28
- package/.claude/commands/debug-ui.md +0 -19
- package/.claude/commands/screenshot.md +0 -15
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -27
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.mcp.json +0 -8
- package/DESKTOP_MCP_GUIDE.md +0 -92
- package/SECURITY.md +0 -44
- package/docs/architecture.md +0 -47
- package/install-skills.sh +0 -19
- package/mcp-bridge.ts +0 -271
- package/mcp-desktop.ts +0 -1221
- package/playbooks/instagram.json +0 -41
- package/playbooks/instagram_v2.json +0 -201
- package/playbooks/x_v1.json +0 -211
- package/scripts/devpost-live-loop.mjs +0 -421
- package/src/logging/timeline-logger.ts +0 -55
- package/src/mcp/server.ts +0 -449
- package/src/memory/recall.ts +0 -191
- package/src/memory/research.ts +0 -146
- package/src/memory/seeds.ts +0 -123
- package/src/memory/session.ts +0 -201
- package/src/memory/store.ts +0 -434
- package/src/memory/types.ts +0 -69
- package/src/native/bridge-client.ts +0 -239
- package/src/runtime/accessibility-adapter.ts +0 -487
- package/src/runtime/app-adapter.ts +0 -169
- package/src/runtime/applescript-adapter.ts +0 -376
- package/src/runtime/ax-role-map.ts +0 -102
- package/src/runtime/browser-adapter.ts +0 -129
- package/src/runtime/cdp-chrome-adapter.ts +0 -676
- package/src/runtime/composite-adapter.ts +0 -274
- package/src/runtime/executor.ts +0 -396
- package/src/runtime/planning-loop.ts +0 -81
- package/src/runtime/service.ts +0 -448
- package/src/runtime/session-manager.ts +0 -50
- package/src/runtime/state-observer.ts +0 -136
- package/src/runtime/vision-adapter.ts +0 -297
- package/src/types.ts +0 -297
- package/tests/bridge-client.test.ts +0 -176
- package/tests/browser-stealth.test.ts +0 -210
- package/tests/composite-adapter.test.ts +0 -64
- package/tests/mcp-server.test.ts +0 -151
- package/tests/memory-recall.test.ts +0 -339
- package/tests/memory-research.test.ts +0 -159
- package/tests/memory-seeds.test.ts +0 -120
- package/tests/memory-store.test.ts +0 -392
- package/tests/types.test.ts +0 -92
- package/tsconfig.check.json +0 -17
- package/tsconfig.json +0 -19
- package/vitest.config.ts +0 -8
- /package/{playbooks → dist-references}/devpost.json +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "linkedin",
|
|
3
|
+
"name": "LinkedIn Automation",
|
|
4
|
+
"description": "Battle-tested playbook for LinkedIn browser automation via CDP. Covers posting, liking, commenting, connecting, messaging, search, and profile management.",
|
|
5
|
+
"platform": "linkedin",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*linkedin.com*"
|
|
9
|
+
],
|
|
10
|
+
"tags": [
|
|
11
|
+
"linkedin",
|
|
12
|
+
"social",
|
|
13
|
+
"professional",
|
|
14
|
+
"browser",
|
|
15
|
+
"cdp"
|
|
16
|
+
],
|
|
17
|
+
"successCount": 0,
|
|
18
|
+
"failCount": 0,
|
|
19
|
+
"steps": [
|
|
20
|
+
{
|
|
21
|
+
"action": "navigate",
|
|
22
|
+
"url": "https://www.linkedin.com/feed/",
|
|
23
|
+
"description": "Open LinkedIn feed"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"action": "wait",
|
|
27
|
+
"ms": 2000,
|
|
28
|
+
"description": "Wait for feed to load"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"action": "extract",
|
|
32
|
+
"target": ".feed-shared-update-v2",
|
|
33
|
+
"format": "text",
|
|
34
|
+
"description": "Extract visible posts"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"action": "scroll",
|
|
38
|
+
"direction": "down",
|
|
39
|
+
"amount": 5,
|
|
40
|
+
"description": "Scroll for more posts"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"action": "wait",
|
|
44
|
+
"ms": 1500,
|
|
45
|
+
"description": "Wait for lazy-loaded posts"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"action": "screenshot",
|
|
49
|
+
"description": "Capture feed state"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "n8n",
|
|
3
|
+
"name": "n8n Workflow Automation",
|
|
4
|
+
"description": "Battle-tested playbook for n8n self-hosted workflow automation via CDP. Covers workflow creation, node management, execution, publishing, credentials, settings, and the visual workflow editor.",
|
|
5
|
+
"platform": "n8n",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*n8n*",
|
|
9
|
+
"*automation.*"
|
|
10
|
+
],
|
|
11
|
+
"tags": [
|
|
12
|
+
"n8n",
|
|
13
|
+
"workflow",
|
|
14
|
+
"automation",
|
|
15
|
+
"browser",
|
|
16
|
+
"cdp",
|
|
17
|
+
"self-hosted"
|
|
18
|
+
],
|
|
19
|
+
"successCount": 0,
|
|
20
|
+
"failCount": 0,
|
|
21
|
+
"steps": [
|
|
22
|
+
{
|
|
23
|
+
"action": "navigate",
|
|
24
|
+
"url": "{baseUrl}/home/workflows",
|
|
25
|
+
"description": "Open n8n workflows home"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"action": "wait",
|
|
29
|
+
"ms": 2000,
|
|
30
|
+
"description": "Wait for dashboard to load"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"action": "extract",
|
|
34
|
+
"target": "[data-test-id='tab-WorkflowsView']",
|
|
35
|
+
"format": "text",
|
|
36
|
+
"description": "Extract workflows list"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"action": "screenshot",
|
|
40
|
+
"description": "Capture n8n dashboard state"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "reddit",
|
|
3
|
+
"name": "Reddit Automation",
|
|
4
|
+
"description": "Battle-tested playbook for Reddit browser automation via CDP. Covers feed browsing, upvote/downvote, comment, create post, search, join subreddit, and profile viewing. Reddit uses shadow DOM extensively (shreddit-post, faceplate-textarea-input) and Lexical editor for text input.",
|
|
5
|
+
"platform": "reddit",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*reddit.com*"
|
|
9
|
+
],
|
|
10
|
+
"tags": [
|
|
11
|
+
"reddit",
|
|
12
|
+
"social",
|
|
13
|
+
"browser",
|
|
14
|
+
"cdp",
|
|
15
|
+
"shadow-dom"
|
|
16
|
+
],
|
|
17
|
+
"successCount": 0,
|
|
18
|
+
"failCount": 0,
|
|
19
|
+
"steps": [
|
|
20
|
+
{
|
|
21
|
+
"action": "navigate",
|
|
22
|
+
"url": "https://www.reddit.com/",
|
|
23
|
+
"description": "Open Reddit home feed"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"action": "wait",
|
|
27
|
+
"ms": 2000,
|
|
28
|
+
"description": "Wait for feed to load"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"action": "extract",
|
|
32
|
+
"target": "shreddit-post",
|
|
33
|
+
"format": "attributes",
|
|
34
|
+
"description": "Extract post titles, authors, scores from shreddit-post attributes"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"action": "scroll",
|
|
38
|
+
"direction": "down",
|
|
39
|
+
"amount": 5,
|
|
40
|
+
"description": "Scroll for more posts"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"action": "wait",
|
|
44
|
+
"ms": 1500,
|
|
45
|
+
"description": "Wait for lazy-loaded posts"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"action": "screenshot",
|
|
49
|
+
"description": "Capture current feed state"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "threads",
|
|
3
|
+
"name": "Threads Automation",
|
|
4
|
+
"description": "Battle-tested playbook for Threads (threads.com) browser automation via CDP. Covers feed, like, reply, repost, share, create post, search, follow/unfollow, and profile viewing.",
|
|
5
|
+
"platform": "threads",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*threads.com*",
|
|
9
|
+
"*threads.net*"
|
|
10
|
+
],
|
|
11
|
+
"tags": [
|
|
12
|
+
"threads",
|
|
13
|
+
"social",
|
|
14
|
+
"browser",
|
|
15
|
+
"cdp",
|
|
16
|
+
"meta"
|
|
17
|
+
],
|
|
18
|
+
"successCount": 0,
|
|
19
|
+
"failCount": 0,
|
|
20
|
+
"steps": [
|
|
21
|
+
{
|
|
22
|
+
"action": "navigate",
|
|
23
|
+
"url": "https://www.threads.com/",
|
|
24
|
+
"description": "Open Threads home feed"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"action": "wait",
|
|
28
|
+
"ms": 1500,
|
|
29
|
+
"description": "Wait for feed to load"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"action": "extract",
|
|
33
|
+
"target": "div[data-pressable-container='true']",
|
|
34
|
+
"format": "text",
|
|
35
|
+
"description": "Extract first visible post content"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "scroll",
|
|
39
|
+
"direction": "down",
|
|
40
|
+
"amount": 5,
|
|
41
|
+
"description": "Scroll down to see more posts"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"action": "wait",
|
|
45
|
+
"ms": 1000,
|
|
46
|
+
"description": "Wait for new posts to load"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"action": "extract",
|
|
50
|
+
"target": "div[data-pressable-container='true']",
|
|
51
|
+
"format": "text",
|
|
52
|
+
"description": "Extract posts after scroll"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"action": "screenshot",
|
|
56
|
+
"description": "Capture current feed state"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "x-twitter",
|
|
3
|
+
"name": "X/Twitter Automation",
|
|
4
|
+
"description": "Battle-tested playbook for X/Twitter browser automation via CDP. Covers feed, like, reply, retweet, bookmark, create post, search, follow/unfollow, and profile viewing. X has excellent data-testid attributes for reliable selectors.",
|
|
5
|
+
"platform": "x-twitter",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*x.com*",
|
|
9
|
+
"*twitter.com*"
|
|
10
|
+
],
|
|
11
|
+
"tags": [
|
|
12
|
+
"x",
|
|
13
|
+
"twitter",
|
|
14
|
+
"social",
|
|
15
|
+
"browser",
|
|
16
|
+
"cdp"
|
|
17
|
+
],
|
|
18
|
+
"successCount": 0,
|
|
19
|
+
"failCount": 0,
|
|
20
|
+
"steps": [
|
|
21
|
+
{
|
|
22
|
+
"action": "navigate",
|
|
23
|
+
"url": "https://x.com/home",
|
|
24
|
+
"description": "Open X home timeline"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"action": "wait",
|
|
28
|
+
"ms": 2000,
|
|
29
|
+
"description": "Wait for timeline to load"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"action": "extract",
|
|
33
|
+
"target": "article[data-testid='tweet']",
|
|
34
|
+
"format": "text",
|
|
35
|
+
"description": "Extract first visible tweets"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "scroll",
|
|
39
|
+
"direction": "down",
|
|
40
|
+
"amount": 5,
|
|
41
|
+
"description": "Scroll down for more tweets"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"action": "wait",
|
|
45
|
+
"ms": 1000,
|
|
46
|
+
"description": "Wait for new tweets to load"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"action": "extract",
|
|
50
|
+
"target": "article[data-testid='tweet']",
|
|
51
|
+
"format": "text",
|
|
52
|
+
"description": "Extract tweets after scroll"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"action": "screenshot",
|
|
56
|
+
"description": "Capture current timeline state"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "youtube",
|
|
3
|
+
"name": "YouTube Automation",
|
|
4
|
+
"description": "Battle-tested playbook for YouTube browser automation via CDP. Covers channel management, video upload, search, like, comment, subscribe, and YouTube Studio operations.",
|
|
5
|
+
"platform": "youtube",
|
|
6
|
+
"version": "1.0.0",
|
|
7
|
+
"urlPatterns": [
|
|
8
|
+
"*youtube.com*",
|
|
9
|
+
"*studio.youtube.com*"
|
|
10
|
+
],
|
|
11
|
+
"tags": [
|
|
12
|
+
"youtube",
|
|
13
|
+
"video",
|
|
14
|
+
"browser",
|
|
15
|
+
"cdp",
|
|
16
|
+
"google"
|
|
17
|
+
],
|
|
18
|
+
"successCount": 0,
|
|
19
|
+
"failCount": 0,
|
|
20
|
+
"steps": [
|
|
21
|
+
{
|
|
22
|
+
"action": "navigate",
|
|
23
|
+
"url": "https://www.youtube.com/",
|
|
24
|
+
"description": "Open YouTube home feed"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"action": "wait",
|
|
28
|
+
"ms": 2000,
|
|
29
|
+
"description": "Wait for feed to load"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"action": "extract",
|
|
33
|
+
"target": "ytd-rich-item-renderer",
|
|
34
|
+
"format": "text",
|
|
35
|
+
"description": "Extract visible video cards"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"action": "scroll",
|
|
39
|
+
"direction": "down",
|
|
40
|
+
"amount": 5,
|
|
41
|
+
"description": "Scroll for more videos"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"action": "wait",
|
|
45
|
+
"ms": 1000,
|
|
46
|
+
"description": "Wait for lazy-loaded videos"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"action": "extract",
|
|
50
|
+
"target": "ytd-rich-item-renderer",
|
|
51
|
+
"format": "text",
|
|
52
|
+
"description": "Extract videos after scroll"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"action": "screenshot",
|
|
56
|
+
"description": "Capture current feed state"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|