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,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platform": "meta-ad-library",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"updated": "2026-03-12",
|
|
5
|
+
"description": "Curated ScreenHand reference for competitor research on Meta Ad Library using the India all-ads flow.",
|
|
6
|
+
"urls": {
|
|
7
|
+
"home": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=IN&is_targeted_country=false&media_type=all&search_type=keyword_unordered&sort_data[direction]=desc&sort_data[mode]=total_impressions",
|
|
8
|
+
"keyword_search": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=IN&is_targeted_country=false&media_type=all&q={KEYWORD}&search_type=keyword_unordered&sort_data[direction]=desc&sort_data[mode]=total_impressions",
|
|
9
|
+
"page_lookup": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=IN&is_targeted_country=false&media_type=all&search_type=page&sort_data[direction]=desc&sort_data[mode]=total_impressions&view_all_page_id={PAGE_ID}"
|
|
10
|
+
},
|
|
11
|
+
"selectors": {
|
|
12
|
+
"search": {
|
|
13
|
+
"advertiser_input": "input[placeholder='Search by keyword or advertiser']",
|
|
14
|
+
"clear_button": "[aria-label='Clear']",
|
|
15
|
+
"suggestion_list": "[role='listbox']",
|
|
16
|
+
"advertiser_option": "li[id^='pageID:'], [role='option']"
|
|
17
|
+
},
|
|
18
|
+
"results": {
|
|
19
|
+
"library_text_guard": "document.body.innerText.includes('Library ID:')",
|
|
20
|
+
"results_text_guard": "document.body.innerText.includes('results')"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"flows": {
|
|
24
|
+
"advertiser_lookup": {
|
|
25
|
+
"steps": [
|
|
26
|
+
"Open Meta Ad Library with ad_type=all and country=IN",
|
|
27
|
+
"Search by advertiser or page name, not by a generic keyword",
|
|
28
|
+
"Click the advertiser suggestion row so Meta resolves view_all_page_id",
|
|
29
|
+
"Read result count, Library IDs, launch dates, and repeated snippets"
|
|
30
|
+
],
|
|
31
|
+
"guards": [
|
|
32
|
+
"Prefer advertiser lookup before keyword search",
|
|
33
|
+
"Keep ad_type=all in the URL or Meta may fall back to political_and_issue_ads"
|
|
34
|
+
],
|
|
35
|
+
"why": "Advertiser pages are the cleanest outside signal for active Meta campaign families and message repetition.",
|
|
36
|
+
"verification_text_patterns": [
|
|
37
|
+
"Library ID:",
|
|
38
|
+
"Active",
|
|
39
|
+
"results"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"keyword_crosscheck": {
|
|
43
|
+
"steps": [
|
|
44
|
+
"Run 3-5 market keywords after advertiser lookup",
|
|
45
|
+
"Use keyword search only to discover new competitors and angles",
|
|
46
|
+
"Treat repeated hooks across brands as stronger evidence than one creative"
|
|
47
|
+
],
|
|
48
|
+
"guards": [
|
|
49
|
+
"Keyword search undercounts brands whose copy avoids the keyword"
|
|
50
|
+
],
|
|
51
|
+
"why": "Keyword searches help with discovery, but advertiser pages are still the higher-signal validation path."
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"detection": {
|
|
55
|
+
"on_library": "location.hostname.includes('facebook.com') && location.pathname.includes('/ads/library')",
|
|
56
|
+
"results_loaded": "document.body.innerText.includes('Library ID:')",
|
|
57
|
+
"all_ads_mode": "location.search.includes('ad_type=all')"
|
|
58
|
+
},
|
|
59
|
+
"errors": [
|
|
60
|
+
{
|
|
61
|
+
"error": "fresh tabs can reopen in political_and_issue_ads mode",
|
|
62
|
+
"context": "Meta resets filters on some new sessions and links",
|
|
63
|
+
"solution": "Always start from a URL that already contains ad_type=all and country=IN.",
|
|
64
|
+
"severity": "high"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"error": "keyword search misses active competitors",
|
|
68
|
+
"context": "Queries like psychometric can miss brands whose copy leads with career clarity, exam stress, parent pressure, or DMIT",
|
|
69
|
+
"solution": "Use advertiser or page lookup first, then keyword search as a market cross-check.",
|
|
70
|
+
"severity": "medium"
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"_meta": {
|
|
74
|
+
"curated": true,
|
|
75
|
+
"sourceArtifacts": [
|
|
76
|
+
"references/meta-ad-library-explore.json",
|
|
77
|
+
"client/careermitra/competitor-ad-scan.md"
|
|
78
|
+
],
|
|
79
|
+
"seedPages": {
|
|
80
|
+
"Mindler": "833637240083531",
|
|
81
|
+
"Brainwonders IN": "888200857719058",
|
|
82
|
+
"Aspiro Career Path": "950160728170380",
|
|
83
|
+
"Edumilestones.com": "139912819412385"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,387 @@
|
|
|
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
|
+
"urls": {
|
|
22
|
+
"home": "{baseUrl}/home/workflows",
|
|
23
|
+
"workflows": "{baseUrl}/home/workflows",
|
|
24
|
+
"credentials": "{baseUrl}/home/credentials",
|
|
25
|
+
"executions": "{baseUrl}/home/executions",
|
|
26
|
+
"templates": "{baseUrl}/templates",
|
|
27
|
+
"settings": "{baseUrl}/settings",
|
|
28
|
+
"new_workflow": "{baseUrl}/workflow/new?projectId={projectId}",
|
|
29
|
+
"workflow_editor": "{baseUrl}/workflow/{workflowId}",
|
|
30
|
+
"chat": "{baseUrl}/chat"
|
|
31
|
+
},
|
|
32
|
+
"selectors": {
|
|
33
|
+
"sidebar": {
|
|
34
|
+
"overview": "[data-test-id='project-home-menu-item']",
|
|
35
|
+
"personal": "[data-test-id='project-personal-menu-item']",
|
|
36
|
+
"chat": "[data-test-id='project-chat-menu-item']",
|
|
37
|
+
"templates": "[data-test-id='main-sidebar-templates']",
|
|
38
|
+
"insights": "[data-test-id='main-sidebar-insights']",
|
|
39
|
+
"help": "[data-test-id='main-sidebar-help']",
|
|
40
|
+
"settings": "[data-test-id='main-sidebar-settings']"
|
|
41
|
+
},
|
|
42
|
+
"home": {
|
|
43
|
+
"create_workflow": "[data-test-id='add-resource-workflow']",
|
|
44
|
+
"add_resource": "[data-test-id='add-resource']",
|
|
45
|
+
"search": "[data-test-id='resources-list-search']",
|
|
46
|
+
"filters": "[data-test-id='resources-list-filters-trigger']",
|
|
47
|
+
"tab_workflows": "[data-test-id='tab-WorkflowsView']",
|
|
48
|
+
"tab_credentials": "[data-test-id='tab-CredentialsView']",
|
|
49
|
+
"tab_executions": "[data-test-id='tab-Executions']",
|
|
50
|
+
"tab_variables": "[data-test-id='tab-HomeVariables']",
|
|
51
|
+
"tab_data_tables": "[data-test-id='tab-data-tables']"
|
|
52
|
+
},
|
|
53
|
+
"insights": {
|
|
54
|
+
"total_executions": "[data-test-id='insights-summary-tab-total']",
|
|
55
|
+
"failed_executions": "[data-test-id='insights-summary-tab-failed']",
|
|
56
|
+
"failure_rate": "[data-test-id='insights-summary-tab-failureRate']",
|
|
57
|
+
"time_saved": "[data-test-id='insights-summary-tab-timeSaved']",
|
|
58
|
+
"avg_run_time": "[data-test-id='insights-summary-tab-averageRunTime']"
|
|
59
|
+
},
|
|
60
|
+
"workflow_editor": {
|
|
61
|
+
"canvas": "[data-test-id='canvas']",
|
|
62
|
+
"canvas_wrapper": "[data-test-id='canvas-wrapper']",
|
|
63
|
+
"workflow_name": "[data-test-id='workflow-name-input']",
|
|
64
|
+
"name_input": "[data-test-id='inline-edit-input']",
|
|
65
|
+
"tags_container": "[data-test-id='workflow-tags-container']",
|
|
66
|
+
"publish_button": "[data-test-id='workflow-open-publish-modal-button']",
|
|
67
|
+
"history_button": "[data-test-id='workflow-history-button']",
|
|
68
|
+
"import_input": "[data-test-id='workflow-import-input']",
|
|
69
|
+
"workflow_menu": "[data-test-id='workflow-menu']",
|
|
70
|
+
"execute_button": "[data-test-id='execute-workflow-button']",
|
|
71
|
+
"tab_workflow": "[data-test-id='radio-button-workflow']",
|
|
72
|
+
"tab_executions": "[data-test-id='radio-button-executions']",
|
|
73
|
+
"tab_evaluation": "[data-test-id='radio-button-evaluation']",
|
|
74
|
+
"minimap": "[data-test-id='canvas-minimap']",
|
|
75
|
+
"controls": "[data-test-id='canvas-controls']"
|
|
76
|
+
},
|
|
77
|
+
"workflow_menu_items": {
|
|
78
|
+
"edit_description": "[data-test-id='workflow-menu-item-edit-description']",
|
|
79
|
+
"duplicate": "[data-test-id='workflow-menu-item-duplicate']",
|
|
80
|
+
"download": "[data-test-id='workflow-menu-item-download']",
|
|
81
|
+
"rename": "[data-test-id='workflow-menu-item-rename']",
|
|
82
|
+
"import_url": "[data-test-id='workflow-menu-item-import-from-url']",
|
|
83
|
+
"import_file": "[data-test-id='workflow-menu-item-import-from-file']",
|
|
84
|
+
"push_git": "[data-test-id='workflow-menu-item-push']",
|
|
85
|
+
"settings": "[data-test-id='workflow-menu-item-settings']",
|
|
86
|
+
"archive": "[data-test-id='workflow-menu-item-archive']"
|
|
87
|
+
},
|
|
88
|
+
"canvas_node": {
|
|
89
|
+
"node": "[data-test-id='canvas-node']",
|
|
90
|
+
"trigger_node": "[data-test-id='canvas-trigger-node']",
|
|
91
|
+
"output_handle": "[data-test-id='canvas-node-output-handle']",
|
|
92
|
+
"plus_handle": "[data-test-id='canvas-handle-plus']",
|
|
93
|
+
"toolbar": "[data-test-id='canvas-node-toolbar']",
|
|
94
|
+
"execute_node": "[data-test-id='execute-node-button']",
|
|
95
|
+
"disable_node": "[data-test-id='disable-node-button']",
|
|
96
|
+
"delete_node": "[data-test-id='delete-node-button']",
|
|
97
|
+
"overflow_menu": "[data-test-id='overflow-node-button']"
|
|
98
|
+
},
|
|
99
|
+
"node_creator": {
|
|
100
|
+
"panel": "[data-test-id='node-creator']",
|
|
101
|
+
"search": "[data-test-id='node-creator-search-bar']",
|
|
102
|
+
"plus_button": "[data-test-id='node-creator-plus-button']",
|
|
103
|
+
"node_item": "[data-test-id='node-creator-node-item']",
|
|
104
|
+
"item_name": "[data-test-id='node-creator-item-name']",
|
|
105
|
+
"item_description": "[data-test-id='node-creator-item-description']",
|
|
106
|
+
"list_header": "[data-test-id='nodes-list-header']"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"detection": {
|
|
110
|
+
"is_logged_in": "!!document.querySelector('[data-test-id=\"project-home-menu-item\"]')",
|
|
111
|
+
"is_home": "window.location.pathname.includes('/home/')",
|
|
112
|
+
"is_workflow_editor": "window.location.pathname.includes('/workflow/')",
|
|
113
|
+
"is_settings": "window.location.pathname.includes('/settings')",
|
|
114
|
+
"is_templates": "window.location.pathname.includes('/templates')",
|
|
115
|
+
"has_node_creator": "!!document.querySelector('[data-test-id=\"node-creator\"]')",
|
|
116
|
+
"has_canvas": "!!document.querySelector('[data-test-id=\"canvas\"]')"
|
|
117
|
+
},
|
|
118
|
+
"flows": {
|
|
119
|
+
"create_workflow": {
|
|
120
|
+
"steps": [
|
|
121
|
+
"Click 'Create workflow': [data-test-id='add-resource-workflow']",
|
|
122
|
+
"Or navigate to {baseUrl}/workflow/new?projectId={projectId}",
|
|
123
|
+
"Wait 2s for workflow editor to load",
|
|
124
|
+
"Set workflow name: click [data-test-id='inline-edit-input'] and type name",
|
|
125
|
+
"Canvas loads with 'Add first step' prompt"
|
|
126
|
+
],
|
|
127
|
+
"guards": [
|
|
128
|
+
"Must be logged in"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"add_trigger_node": {
|
|
132
|
+
"steps": [
|
|
133
|
+
"Open node creator: press Tab key or click [data-test-id='canvas-plus-button']",
|
|
134
|
+
"Wait 1.5s for node creator panel to open with 'What triggers this workflow?'",
|
|
135
|
+
"Search input available: [data-test-id='node-creator-search-bar']",
|
|
136
|
+
"Available triggers: Trigger manually, On app event, On a schedule, On webhook call, On form submission, When executed by another workflow, On chat message",
|
|
137
|
+
"Click desired trigger from [data-test-id='node-creator-node-item'] list",
|
|
138
|
+
"Trigger node appears on canvas"
|
|
139
|
+
],
|
|
140
|
+
"guards": [
|
|
141
|
+
"Must be in workflow editor"
|
|
142
|
+
],
|
|
143
|
+
"why": "Tab key opens the node creator panel. Direct click on canvas 'Add first step' text also works but is less reliable."
|
|
144
|
+
},
|
|
145
|
+
"add_action_node": {
|
|
146
|
+
"steps": [
|
|
147
|
+
"Click the plus handle on existing node: [data-test-id='canvas-handle-plus']",
|
|
148
|
+
"Or press Tab to open node creator",
|
|
149
|
+
"Type node name in search bar: [data-test-id='node-creator-search-bar']",
|
|
150
|
+
"Wait 1s for search results",
|
|
151
|
+
"Click desired node from [data-test-id='node-creator-node-item'] list",
|
|
152
|
+
"Node appears on canvas connected to previous node"
|
|
153
|
+
],
|
|
154
|
+
"guards": [
|
|
155
|
+
"Must be in workflow editor",
|
|
156
|
+
"At least one trigger node must exist"
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
"configure_node": {
|
|
160
|
+
"steps": [
|
|
161
|
+
"Double-click on canvas node to open node settings panel",
|
|
162
|
+
"Configure node parameters in the right panel",
|
|
163
|
+
"Set credentials if required",
|
|
164
|
+
"Click 'Test step' or execute node button to test",
|
|
165
|
+
"Close panel when done"
|
|
166
|
+
],
|
|
167
|
+
"guards": [
|
|
168
|
+
"Node must be on canvas"
|
|
169
|
+
]
|
|
170
|
+
},
|
|
171
|
+
"execute_workflow": {
|
|
172
|
+
"steps": [
|
|
173
|
+
"Click 'Execute workflow' button: [data-test-id='execute-workflow-button']",
|
|
174
|
+
"Wait for execution to complete",
|
|
175
|
+
"Check execution results in the output panel",
|
|
176
|
+
"View execution logs and data flow between nodes"
|
|
177
|
+
],
|
|
178
|
+
"guards": [
|
|
179
|
+
"Must be in workflow editor",
|
|
180
|
+
"Workflow must have at least one trigger"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"publish_workflow": {
|
|
184
|
+
"steps": [
|
|
185
|
+
"Click 'Publish' button: [data-test-id='workflow-open-publish-modal-button']",
|
|
186
|
+
"Wait 1s for publish modal to appear",
|
|
187
|
+
"Confirm publishing settings",
|
|
188
|
+
"Click confirm/publish in modal",
|
|
189
|
+
"Workflow is now active and will run on triggers"
|
|
190
|
+
],
|
|
191
|
+
"guards": [
|
|
192
|
+
"Must be in workflow editor",
|
|
193
|
+
"Workflow must be valid"
|
|
194
|
+
]
|
|
195
|
+
},
|
|
196
|
+
"search_workflows": {
|
|
197
|
+
"steps": [
|
|
198
|
+
"Navigate to {baseUrl}/home/workflows",
|
|
199
|
+
"Click search: [data-test-id='resources-list-search']",
|
|
200
|
+
"Type search query via browser_fill_form",
|
|
201
|
+
"Results filter in real-time"
|
|
202
|
+
],
|
|
203
|
+
"guards": [
|
|
204
|
+
"Must be logged in"
|
|
205
|
+
]
|
|
206
|
+
},
|
|
207
|
+
"manage_credentials": {
|
|
208
|
+
"steps": [
|
|
209
|
+
"Click Credentials tab: [data-test-id='tab-CredentialsView']",
|
|
210
|
+
"Or navigate to {baseUrl}/home/credentials",
|
|
211
|
+
"Click 'Create credential' to add new",
|
|
212
|
+
"Search for service (e.g., 'Google Sheets', 'Slack')",
|
|
213
|
+
"Select credential type",
|
|
214
|
+
"Fill in API key / OAuth details",
|
|
215
|
+
"Save credential"
|
|
216
|
+
],
|
|
217
|
+
"guards": [
|
|
218
|
+
"Must be logged in"
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"view_executions": {
|
|
222
|
+
"steps": [
|
|
223
|
+
"Click Executions tab: [data-test-id='tab-Executions']",
|
|
224
|
+
"View list of past workflow executions",
|
|
225
|
+
"Filter by status (success/failed)",
|
|
226
|
+
"Click execution to see detailed logs"
|
|
227
|
+
],
|
|
228
|
+
"guards": [
|
|
229
|
+
"Must be logged in"
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
"import_workflow": {
|
|
233
|
+
"steps": [
|
|
234
|
+
"Open workflow menu: [data-test-id='workflow-menu']",
|
|
235
|
+
"Click 'Import from URL': [data-test-id='workflow-menu-item-import-from-url']",
|
|
236
|
+
"Or click 'Import from file': [data-test-id='workflow-menu-item-import-from-file']",
|
|
237
|
+
"Paste URL or select JSON file",
|
|
238
|
+
"Workflow nodes appear on canvas"
|
|
239
|
+
],
|
|
240
|
+
"guards": [
|
|
241
|
+
"Must be in workflow editor"
|
|
242
|
+
]
|
|
243
|
+
},
|
|
244
|
+
"export_workflow": {
|
|
245
|
+
"steps": [
|
|
246
|
+
"Open workflow menu: [data-test-id='workflow-menu']",
|
|
247
|
+
"Click 'Download': [data-test-id='workflow-menu-item-download']",
|
|
248
|
+
"Workflow JSON file downloads"
|
|
249
|
+
],
|
|
250
|
+
"guards": [
|
|
251
|
+
"Must be in workflow editor"
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
"manage_variables": {
|
|
255
|
+
"steps": [
|
|
256
|
+
"Click Variables tab: [data-test-id='tab-HomeVariables']",
|
|
257
|
+
"View existing variables",
|
|
258
|
+
"Click Add to create new variable",
|
|
259
|
+
"Set key and value",
|
|
260
|
+
"Save — variables available in all workflows via $vars"
|
|
261
|
+
],
|
|
262
|
+
"guards": [
|
|
263
|
+
"Must be logged in"
|
|
264
|
+
]
|
|
265
|
+
},
|
|
266
|
+
"view_insights": {
|
|
267
|
+
"steps": [
|
|
268
|
+
"Click Insights in sidebar: [data-test-id='main-sidebar-insights']",
|
|
269
|
+
"View execution stats: total, failed, failure rate, time saved, avg run time",
|
|
270
|
+
"Click individual insight tabs for details"
|
|
271
|
+
],
|
|
272
|
+
"guards": [
|
|
273
|
+
"Must be logged in"
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
"use_templates": {
|
|
277
|
+
"steps": [
|
|
278
|
+
"Click Templates in sidebar: [data-test-id='main-sidebar-templates']",
|
|
279
|
+
"Browse or search workflow templates",
|
|
280
|
+
"Click template to preview",
|
|
281
|
+
"Click 'Use this template' to import into workspace"
|
|
282
|
+
],
|
|
283
|
+
"guards": [
|
|
284
|
+
"Must be logged in"
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
"delete_node": {
|
|
288
|
+
"steps": [
|
|
289
|
+
"Click on node to select it on canvas",
|
|
290
|
+
"Click delete button in node toolbar: [data-test-id='delete-node-button']",
|
|
291
|
+
"Or press Delete/Backspace key",
|
|
292
|
+
"Node is removed from canvas"
|
|
293
|
+
],
|
|
294
|
+
"guards": [
|
|
295
|
+
"Must be in workflow editor"
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
"errors": [
|
|
300
|
+
{
|
|
301
|
+
"error": "Login required",
|
|
302
|
+
"context": "Accessing any n8n page without authentication",
|
|
303
|
+
"solution": "Log in manually. n8n uses email/password or SSO.",
|
|
304
|
+
"severity": "high"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"error": "Node creator panel doesn't open on canvas click",
|
|
308
|
+
"context": "n8n uses custom canvas rendering that doesn't respond to standard click events",
|
|
309
|
+
"solution": "Press Tab key to open the node creator panel. This dispatches the correct keyboard event to trigger the panel.",
|
|
310
|
+
"severity": "high"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"error": "Create workflow button doesn't navigate",
|
|
314
|
+
"context": "The 'Create workflow' button may open a dropdown or require project selection",
|
|
315
|
+
"solution": "Navigate directly to {baseUrl}/workflow/new?projectId={projectId}. Get projectId from the URL of any existing workflow.",
|
|
316
|
+
"severity": "medium"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"error": "Node creator search doesn't clear properly",
|
|
320
|
+
"context": "Setting input.value = '' doesn't clear React state",
|
|
321
|
+
"solution": "Use browser_fill_form with clear=true on [data-test-id='node-creator-search-bar'].",
|
|
322
|
+
"severity": "low"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"error": "Canvas nodes not clickable via browser_human_click",
|
|
326
|
+
"context": "n8n canvas uses custom rendering (possibly SVG/Canvas) that doesn't map to DOM elements directly",
|
|
327
|
+
"solution": "Use [data-test-id='canvas-node'] selector or the node toolbar buttons which are regular DOM elements.",
|
|
328
|
+
"severity": "medium"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"error": "Workflow menu opens but items not visible",
|
|
332
|
+
"context": "Menu items are rendered lazily",
|
|
333
|
+
"solution": "Wait 500ms after clicking [data-test-id='workflow-menu'] before clicking menu items.",
|
|
334
|
+
"severity": "low"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"error": "Frontmost app switches to VS Code when approving tool calls",
|
|
338
|
+
"context": "AccessibilityAdapter attaches to frontmost app",
|
|
339
|
+
"solution": "Use CDP browser tools — they work regardless of which app is frontmost.",
|
|
340
|
+
"severity": "high"
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
"policyNotes": {
|
|
344
|
+
"self_hosted": [
|
|
345
|
+
"n8n is self-hosted at user's own domain",
|
|
346
|
+
"Base URL varies per installation (e.g., automation.clazro.com)",
|
|
347
|
+
"Project IDs are unique per installation",
|
|
348
|
+
"Credentials are stored server-side, never exposed in browser"
|
|
349
|
+
],
|
|
350
|
+
"safety": [
|
|
351
|
+
"Never automate credential entry with sensitive API keys visible",
|
|
352
|
+
"Test workflows before publishing to production",
|
|
353
|
+
"Use 'Trigger manually' for testing, switch to schedule/webhook for production",
|
|
354
|
+
"Check execution logs for errors before enabling automation",
|
|
355
|
+
"Use variables for environment-specific config"
|
|
356
|
+
],
|
|
357
|
+
"tool_preferences": [
|
|
358
|
+
"Tab key — opens node creator panel (most reliable method)",
|
|
359
|
+
"browser_fill_form — for workflow name, node search, configuration inputs",
|
|
360
|
+
"browser_human_click — for buttons with data-test-id attributes",
|
|
361
|
+
"browser_js — for Tab key dispatch, extracting workflow data, node configuration",
|
|
362
|
+
"browser_navigate — for direct navigation to workflows/settings"
|
|
363
|
+
]
|
|
364
|
+
},
|
|
365
|
+
"steps": [
|
|
366
|
+
{
|
|
367
|
+
"action": "navigate",
|
|
368
|
+
"url": "{baseUrl}/home/workflows",
|
|
369
|
+
"description": "Open n8n workflows home"
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"action": "wait",
|
|
373
|
+
"ms": 2000,
|
|
374
|
+
"description": "Wait for dashboard to load"
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"action": "extract",
|
|
378
|
+
"target": "[data-test-id='tab-WorkflowsView']",
|
|
379
|
+
"format": "text",
|
|
380
|
+
"description": "Extract workflows list"
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"action": "screenshot",
|
|
384
|
+
"description": "Capture n8n dashboard state"
|
|
385
|
+
}
|
|
386
|
+
]
|
|
387
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "notes",
|
|
3
|
+
"name": "notes playbook",
|
|
4
|
+
"description": "",
|
|
5
|
+
"platform": "notes",
|
|
6
|
+
"urlPatterns": [],
|
|
7
|
+
"steps": [],
|
|
8
|
+
"tags": [
|
|
9
|
+
"notes"
|
|
10
|
+
],
|
|
11
|
+
"version": "1.0.0",
|
|
12
|
+
"successCount": 0,
|
|
13
|
+
"failCount": 0,
|
|
14
|
+
"bundleId": "com.apple.Notes",
|
|
15
|
+
"selectors": {
|
|
16
|
+
"auto_discovered": {}
|
|
17
|
+
},
|
|
18
|
+
"flows": {},
|
|
19
|
+
"errors": [
|
|
20
|
+
{
|
|
21
|
+
"error": "Not found: Element not found matching criteria",
|
|
22
|
+
"context": "tool: ui_find, domain: native:com.apple.Notes",
|
|
23
|
+
"solution": "No resolution yet — investigate and update this entry",
|
|
24
|
+
"severity": "medium"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
{
|
|
2
|
+
"platform": "notion",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"updated": "2026-03-20",
|
|
5
|
+
"bundleId": "notion.id",
|
|
6
|
+
"description": "Notion desktop app automation - pages, databases, slash commands, AI, settings, sharing",
|
|
7
|
+
"urlPatterns": ["notion.so"],
|
|
8
|
+
"selectors": {
|
|
9
|
+
"navigation": {
|
|
10
|
+
"sidebar_toggle": "AXButton 'Toggle sidebar'",
|
|
11
|
+
"back": "AXMenuItem 'Back' or Cmd+[",
|
|
12
|
+
"forward": "AXMenuItem 'Forward' or Cmd+]",
|
|
13
|
+
"search_quick_find": "Cmd+K or Cmd+P opens Quick Find"
|
|
14
|
+
},
|
|
15
|
+
"page_header": {
|
|
16
|
+
"page_title": "AXTextArea containing page title",
|
|
17
|
+
"breadcrumb": "AXButton breadcrumb links in header",
|
|
18
|
+
"share_button": "Share button in top-right header"
|
|
19
|
+
},
|
|
20
|
+
"search_and_navigate": {
|
|
21
|
+
"quick_find_input": "Search input in Quick Find modal (Cmd+K)",
|
|
22
|
+
"title_only_filter": "Title only toggle in search",
|
|
23
|
+
"created_by_filter": "Created by filter in search"
|
|
24
|
+
},
|
|
25
|
+
"create_new": {
|
|
26
|
+
"page": "Press 1 — new blank page",
|
|
27
|
+
"chat": "Press 2 — new AI chat",
|
|
28
|
+
"ai_meeting_notes": "Press 3 — AI meeting notes",
|
|
29
|
+
"database": "Press 4 — new database"
|
|
30
|
+
},
|
|
31
|
+
"new_page_options": {
|
|
32
|
+
"ask_ai": "Ask AI button on new page",
|
|
33
|
+
"ai_meeting_notes": "AI Meeting Notes template",
|
|
34
|
+
"database_option": "Database option on new page"
|
|
35
|
+
},
|
|
36
|
+
"settings_sidebar": {
|
|
37
|
+
"account_section": "Account settings section",
|
|
38
|
+
"workspace_section": "Workspace settings (General, People, Import)",
|
|
39
|
+
"features_section": "Features settings (Notion AI, Public pages)"
|
|
40
|
+
},
|
|
41
|
+
"add_block_via_slash": {
|
|
42
|
+
"slash_menu": "Type / to open block menu",
|
|
43
|
+
"heading1": "/heading 1 — large heading",
|
|
44
|
+
"heading2": "/heading 2 — medium heading",
|
|
45
|
+
"todo": "/to-do — checkbox item",
|
|
46
|
+
"callout": "/callout — highlighted callout box with emoji",
|
|
47
|
+
"divider": "/divider or --- — horizontal line",
|
|
48
|
+
"code": "/code — code block"
|
|
49
|
+
},
|
|
50
|
+
"quick_find": {
|
|
51
|
+
"search_input": "Search input in Quick Find (Cmd+K)",
|
|
52
|
+
"title_only_filter": "Title only filter toggle",
|
|
53
|
+
"created_by_filter": "Created by filter"
|
|
54
|
+
},
|
|
55
|
+
"database": {
|
|
56
|
+
"all_tasks_view": "All Tasks tab — table view",
|
|
57
|
+
"by_status_view": "By Status tab — shows Kanban board",
|
|
58
|
+
"my_tasks_view": "My Tasks tab — filtered to current user",
|
|
59
|
+
"new_task": "Add new row to database",
|
|
60
|
+
"filter": "Filter button in database toolbar",
|
|
61
|
+
"sort": "Sort button in database toolbar"
|
|
62
|
+
},
|
|
63
|
+
"database_templates": {
|
|
64
|
+
"tasks_tracker": "Tasks Tracker template",
|
|
65
|
+
"projects": "Projects template",
|
|
66
|
+
"document_hub": "Document Hub template",
|
|
67
|
+
"import_csv": "Import CSV"
|
|
68
|
+
},
|
|
69
|
+
"slash_commands": {
|
|
70
|
+
"text": "/text — plain text block",
|
|
71
|
+
"heading1": "/heading 1",
|
|
72
|
+
"heading2": "/heading 2",
|
|
73
|
+
"todo_list": "/to-do list",
|
|
74
|
+
"bulleted_list": "/bulleted list",
|
|
75
|
+
"toggle": "/toggle — collapsible block",
|
|
76
|
+
"callout": "/callout — highlighted callout box with emoji",
|
|
77
|
+
"divider": "/divider or --- — horizontal line",
|
|
78
|
+
"code": "/code — code block",
|
|
79
|
+
"table": "/table — simple table"
|
|
80
|
+
},
|
|
81
|
+
"ai_sidebar": {
|
|
82
|
+
"ai_chat": "AI chat panel (sparkle icon or Cmd+J)",
|
|
83
|
+
"insert_into_page": "Insert AI response into page",
|
|
84
|
+
"describe_your_own": "Custom AI prompt"
|
|
85
|
+
},
|
|
86
|
+
"use_notion_ai": {
|
|
87
|
+
"ai_icon": "Notion AI icon in bottom-right (plant/sparkle)",
|
|
88
|
+
"summarize": "Summarize page with AI",
|
|
89
|
+
"translate": "Translate page with AI",
|
|
90
|
+
"improve_writing": "Improve writing with AI"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"flows": {
|
|
94
|
+
"create_task": {
|
|
95
|
+
"steps": [
|
|
96
|
+
"Navigate to Engineering Tasks page",
|
|
97
|
+
"Click 'New task' in database",
|
|
98
|
+
"Type task name",
|
|
99
|
+
"Set status, priority, assignee"
|
|
100
|
+
],
|
|
101
|
+
"guards": ["Must be on a page with a Tasks database"]
|
|
102
|
+
},
|
|
103
|
+
"search_and_navigate": {
|
|
104
|
+
"steps": [
|
|
105
|
+
"Press Cmd+K to open Quick Find",
|
|
106
|
+
"Type page name",
|
|
107
|
+
"Press Enter to navigate"
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
"create_page_with_content": {
|
|
111
|
+
"steps": [
|
|
112
|
+
"Press Cmd+N for new page",
|
|
113
|
+
"Press 1 for blank page",
|
|
114
|
+
"Type page title",
|
|
115
|
+
"Use /heading, /to-do, /callout for content blocks"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"use_ai_chat": {
|
|
119
|
+
"steps": [
|
|
120
|
+
"Press Cmd+J to open AI sidebar",
|
|
121
|
+
"Type prompt in AI input",
|
|
122
|
+
"Press Enter to get response",
|
|
123
|
+
"Click 'Insert into page' to use response"
|
|
124
|
+
]
|
|
125
|
+
},
|
|
126
|
+
"create_database": {
|
|
127
|
+
"steps": [
|
|
128
|
+
"Type /database in page body",
|
|
129
|
+
"Select 'Database - Inline'",
|
|
130
|
+
"Choose 'New empty data source' or template",
|
|
131
|
+
"Add properties (Status, Person, Date)",
|
|
132
|
+
"Add rows with + New page"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
"share_page": {
|
|
136
|
+
"steps": [
|
|
137
|
+
"Click Share button in top-right",
|
|
138
|
+
"Enter email or copy link",
|
|
139
|
+
"Set access level"
|
|
140
|
+
],
|
|
141
|
+
"guards": ["Must be page owner or have share permission"]
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"errors": [
|
|
145
|
+
{
|
|
146
|
+
"error": "Slash command menu doesn't appear",
|
|
147
|
+
"context": "Typing / in a non-editable area",
|
|
148
|
+
"solution": "Click inside the page body first to ensure focus is in an editable area. Then type /. If in a database cell, / inserts literal text instead.",
|
|
149
|
+
"severity": "medium"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"error": "AX tree is shallow — most UI elements not accessible",
|
|
153
|
+
"context": "Using ui_tree/ui_press on Notion page content",
|
|
154
|
+
"solution": "Use OCR/click_text for in-page interactions. Use ui_press/menu_click only for menu bar items. Use keyboard shortcuts (Cmd+K, Cmd+N, /) as primary navigation.",
|
|
155
|
+
"severity": "high"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"_meta": {
|
|
159
|
+
"exported_from": "screenhand",
|
|
160
|
+
"actions_count": 95,
|
|
161
|
+
"strategies_count": 2
|
|
162
|
+
}
|
|
163
|
+
}
|