@rubytech/create-maxy-code 0.1.186 → 0.1.188
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/package.json +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.js +4 -3
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/src/index.ts +4 -3
- package/payload/platform/package.json +1 -0
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/hooks/lib/maxy-mcp-plugins.txt +16 -0
- package/payload/platform/plugins/admin/hooks/mcp-tool-missing.sh +94 -0
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +7 -0
- package/payload/platform/plugins/admin/skills/a4-print-documents/SKILL.md +14 -14
- package/payload/platform/plugins/admin/skills/deck-pages/SKILL.md +9 -23
- package/payload/platform/plugins/admin/skills/professional-document/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +3 -3
- package/payload/platform/plugins/admin/skills/skill-builder/SKILL.md +1 -1
- package/payload/platform/plugins/admin/skills/skill-builder/references/pdf-generation.md +4 -4
- package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md +11 -7
- package/payload/platform/plugins/browser/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/browser/PLUGIN.md +78 -8
- package/payload/platform/plugins/browser/mcp/dist/index.js +111 -7
- package/payload/platform/plugins/browser/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-actions.d.ts +98 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-actions.d.ts.map +1 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-actions.js +455 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-actions.js.map +1 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-render.d.ts +9 -31
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-render.d.ts.map +1 -1
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-render.js +6 -165
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-render.js.map +1 -1
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-session.d.ts +153 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-session.d.ts.map +1 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-session.js +401 -0
- package/payload/platform/plugins/browser/mcp/dist/lib/cdp-session.js.map +1 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +3 -4
- package/payload/platform/plugins/docs/references/deployment.md +1 -1
- package/payload/platform/plugins/docs/references/internals.md +6 -4
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -2
- package/payload/platform/plugins/email/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +6 -2
- package/payload/platform/plugins/email/mcp/dist/index.js +38 -0
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts +28 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js +106 -0
- package/payload/platform/plugins/email/mcp/dist/lib/providers.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +19 -15
- package/payload/platform/plugins/graph/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/graph/PLUGIN.md +37 -0
- package/payload/platform/plugins/memory/PLUGIN.md +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js +3 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-brain-capture-recent.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js +2 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.js +2 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js +3 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/session-retrospective-skip-rate.js.map +1 -1
- package/payload/platform/plugins/memory/references/graph-primitives.md +36 -27
- package/payload/platform/plugins/obsidian-import/PLUGIN.md +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
- package/payload/platform/scripts/check-canonical-tool-names.mjs +110 -0
- package/payload/platform/scripts/check-cypher-int-params.mjs +277 -0
- package/payload/platform/scripts/generate-canonical-tool-names.mjs +63 -0
- package/payload/platform/scripts/lib/canonical-tool-names.mjs +88 -0
- package/payload/platform/scripts/setup-account.sh +6 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.d.ts +7 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +204 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.js +23 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/index.js +30 -6
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.d.ts +6 -4
- package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/mcp-tools-probe.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +50 -26
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +40 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +200 -0
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js +50 -34
- package/payload/platform/services/claude-session-manager/dist/specialist-drift.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +23 -13
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
- package/payload/platform/templates/specialists/agents/content-producer.md +4 -4
- package/payload/platform/templates/specialists/agents/librarian.md +2 -2
- package/payload/platform/templates/specialists/agents/personal-assistant.md +6 -2
- package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
- package/payload/platform/templates/specialists/agents/research-assistant.md +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js +33 -1
- package/payload/premium-plugins/writer-craft/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -1
- package/payload/premium-plugins/writer-craft/mcp/src/tools/voice-retrieve-conditioning.ts +5 -2
- package/payload/server/{chunk-L2YK2VK3.js → chunk-WWD4TCJJ.js} +3 -17
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/Checkbox-ChWmQ7if.js +1 -0
- package/payload/server/public/assets/admin-BLi_fAKQ.js +216 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-DZoOzmjE.js → architectureDiagram-Q4EWVU46-DSqzB21V.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DG3yufCR.js → blockDiagram-DXYQGD6D--otTO_UB.js} +1 -1
- package/payload/server/public/assets/brand-Djtb-tLQ.js +9 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BBx5wXuZ.js → c4Diagram-AHTNJAMY-CBszqa9W.js} +1 -1
- package/payload/server/public/assets/channel-C-SJYogg.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DwP7g5ns.js → chunk-336JU56O-ClAJP2KY.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-DXzGdc22.js → chunk-426QAEUC-CgLucS4H.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-1LDRjk0E.js → chunk-4TB4RGXK-BvOX6mSk.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-BHjWhwhn.js → chunk-5FUZZQ4R-uyN4XtrW.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CwPHRVN8.js → chunk-5PVQY5BW-B6xHEzh2.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-7443hrYZ.js → chunk-EDXVE4YY-9objw8tW.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-BTnmmnmX.js → chunk-ENJZ2VHE-pQpbHIJL.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-CPnMJplL.js → chunk-ICPOFSXX-qS23jC3x.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DCQ5Q4RS.js → chunk-OYMX7WX6-C9YUwGqp.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-BmfZG8e4.js → chunk-U2HBQHQK-D_pYedRJ.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-Da2yJL2u.js → chunk-X2U36JSP-nxf6GHD-.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BdUmMUJ6.js → chunk-YZCP3GAM-DqKT124V.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-abkGirrZ.js → chunk-ZZ45TVLE-CLwvpbvu.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-OBkxl5to.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-CkTyus-1.js +1 -0
- package/payload/server/public/assets/clone-VufdPzJ-.js +1 -0
- package/payload/server/public/assets/{dagre-BVVuAEsU.js → dagre-COCXt23n.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-VG2kNj19.js → dagre-KV5264BT-DmuVMrt4.js} +1 -1
- package/payload/server/public/assets/data-TlJbMIfa.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-DRiVy69K.js → diagram-5BDNPKRD-DOiLSgj_.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DtpiRTYX.js → diagram-G4DWMVQ6-quY6PSZQ.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-Da3t99fY.js → diagram-MMDJMWI5-tN2yiz0C.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-BzQmLTJQ.js → diagram-TYMM5635-CjrRQNQ0.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-D3Ll-GDw.js → erDiagram-SMLLAGMA-CrNNMxkA.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-D17bje6d.js → flowDiagram-DWJPFMVM-CCUsJph7.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BjeQ-Bun.js → ganttDiagram-T4ZO3ILL-18276bri.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-LtX4pvZS.js → gitGraphDiagram-UUTBAWPF-CsLsKMjN.js} +1 -1
- package/payload/server/public/assets/graph-D2Yvni5R.js +1 -0
- package/payload/server/public/assets/graph-labels-uksnCgSC.js +1 -0
- package/payload/server/public/assets/{graphlib-CzwsfZOw.js → graphlib-CmtUzIni.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-DOgH4i52.js → infoDiagram-42DDH7IO-Dny_ZNz3.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DYqy5BFj.js → ishikawaDiagram-UXIWVN3A-kUhIUQE-.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CsFpIULJ.js → journeyDiagram-VCZTEJTY-DekMvAKB.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-5uZuArw7.js → kanban-definition-6JOO6SKY-st0HNZZo.js} +1 -1
- package/payload/server/public/assets/lib-Ca7uCvl9.js +33 -0
- package/payload/server/public/assets/{line-BY8PmCSW.js → line-BaNk-I7J.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-CJ_9xqwK.js → mermaid-parser.core-CRCHYQ_F.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-CXznBkX7.js → mermaid.core-BaIYEciF.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-DZbHBud5.js → mindmap-definition-QFDTVHPH-D4u4KU2v.js} +1 -1
- package/payload/server/public/assets/{page-CfN7nw1J.js → page-DayPduMN.js} +2 -2
- package/payload/server/public/assets/page-QQmuB04w.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-QmOi4DRG.js → pieDiagram-DEJITSTG-BItWEilY.js} +1 -1
- package/payload/server/public/assets/public-Dze4yArS.js +7 -0
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Cpidq6Xj.js → quadrantDiagram-34T5L4WZ-CeWDBvmH.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-CBqtfbzR.js → requirementDiagram-MS252O5E-CcosjedW.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-4BiY4dV9.js → sankeyDiagram-XADWPNL6-DNGeFpUj.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DVlL-l2u.js → sequenceDiagram-FGHM5R23-Cqy_deB6.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-CAm9dW68.js → stateDiagram-FHFEXIEX-2yoAqEsA.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Dc5siYvu.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CD-tZc4y.js → timeline-definition-GMOUNBTQ-Dmeghpw1.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-Davcm0TF.js → vennDiagram-DHZGUBPP-TX5D-Zzp.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-40LBYw_Y.js → wardleyDiagram-NUSXRM2D-B7mcpl5E.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DEPT-__v.js → xychartDiagram-5P7HB3ND-DH77CxKf.js} +1 -1
- package/payload/server/public/brand/Archive/favicon.ico +0 -0
- package/payload/server/public/brand/Archive/maxy-black.png +0 -0
- package/payload/server/public/brand/Archive/maxy-horizontal.png +0 -0
- package/payload/server/public/brand/Archive/maxy-monochrome.png +0 -0
- package/payload/server/public/brand/Archive/maxy-square.png +0 -0
- package/payload/server/public/brand/Archive/maxy.png +0 -0
- package/payload/server/public/brand/Archive/star.png +0 -0
- package/payload/server/public/brand/Archive.zip +0 -0
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +312 -793
- package/payload/server/public/assets/ChatInput-CvRaT05l.js +0 -13
- package/payload/server/public/assets/Checkbox-BJKNkUYu.js +0 -1
- package/payload/server/public/assets/admin-BNy4N2d6.js +0 -217
- package/payload/server/public/assets/channel-DdtUtt5g.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CKk2DFZe.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E--YvfDQCh.js +0 -1
- package/payload/server/public/assets/clone-Cw6UfPGM.js +0 -1
- package/payload/server/public/assets/data-uBpwaldK.js +0 -1
- package/payload/server/public/assets/graph-labels-Cn9jAE6I.js +0 -1
- package/payload/server/public/assets/graph-tvTPvBaz.js +0 -1
- package/payload/server/public/assets/lib-p4ylk2XS.js +0 -29
- package/payload/server/public/assets/page-B3VYaBcf.js +0 -1
- package/payload/server/public/assets/public-Bbew78md.js +0 -7
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B2EzXi50.js +0 -1
- /package/payload/server/public/assets/{ChatInput-DzacFNMk.css → brand-DzacFNMk.css} +0 -0
package/payload/platform/plugins/admin/skills/stream-log-review/references/analysis-patterns.md
CHANGED
|
@@ -89,10 +89,14 @@ These indicate something broke and the agent could not complete the intended act
|
|
|
89
89
|
| **MCP tool failure** | `[tool-result] name=mcp__* error=true` | Tool-specific — read the `output` for the error message |
|
|
90
90
|
| **Neo4j LIMIT float** | `error=true` + output contains `'50.0' is not a valid value` | LIMIT parameter passed as float instead of integer. Fix: wrap with `neo4j.int()` |
|
|
91
91
|
| **Bash command not found** | `error=true` + `command not found` | Missing system tool (e.g. `dig`, `nslookup` on Pi). The Pi may not have DNS utilities installed |
|
|
92
|
-
| **
|
|
93
|
-
| **
|
|
94
|
-
| **
|
|
95
|
-
| **
|
|
92
|
+
| **Browser CDP unreachable** | `error=true` + output contains `failed: cdp-unreachable` or `failed: websocket-unavailable` | The VNC Chromium's debug port isn't answering, or the CDP websocket wouldn't attach. Chromium isn't running or `CDP_PORT` is wrong — check `vnc-boot.log` |
|
|
93
|
+
| **Browser session lost** | `error=true` + output contains `failed: session-lost` | Agent ran an action (click/type/read) before `browser-navigate`; no live page is attached. Fix: navigate first |
|
|
94
|
+
| **Browser navigate failed** | `error=true` + output contains `failed: navigate-failed` | Navigation to the URL failed — bad URL, DNS not resolving, or the tunnel isn't running. The outcome's `detail` carries the underlying CDP error |
|
|
95
|
+
| **Browser timeout** | `error=true` + output contains `failed: load-timeout`, `failed: wait-timeout`, or `failed: command-timeout` | Page load, an awaited element, or a CDP command was too slow (common on Pi) |
|
|
96
|
+
| **Browser selector not found** | `error=true` + output contains `failed: selector-not-found` or `failed: option-not-found` | The CSS selector (or `<select>` option) matched nothing on the current page |
|
|
97
|
+
| **Browser evaluate failed** | `error=true` + output contains `failed: evaluate-failed` | In-page JavaScript threw — the agent's `browser-evaluate` expression, or an internal snapshot/probe script the page's JS context rejected |
|
|
98
|
+
| **Browser capture failed** | `error=true` + output contains `failed: pdf-failed` or `failed: screenshot-failed` | PDF or screenshot capture failed on the page |
|
|
99
|
+
| **Browser unsupported key** | `error=true` + output contains `failed: unsupported-key` | `browser-press-key` got a key name it can't map |
|
|
96
100
|
| **Tool hallucination** | `error=true` + `No such tool available` | Agent invented a tool name that doesn't exist (e.g. missing double underscore in MCP tool name) |
|
|
97
101
|
| **MCP validation error** | `error=true` + `Input validation error` | Agent passed wrong types or missing required fields to an MCP tool |
|
|
98
102
|
| **Cloudflare cert error** | `error=true` + `Could not read certificate` | Cloudflare auth certificate missing or corrupt |
|
|
@@ -124,15 +128,15 @@ These indicate degraded behaviour or potential problems that didn't cause outrig
|
|
|
124
128
|
|
|
125
129
|
When multiple errors appear in the same session, look for causal chains:
|
|
126
130
|
|
|
127
|
-
- **
|
|
131
|
+
- **navigate-failed → retry loop**: If `failed: navigate-failed` is followed by multiple attempts with different DNS resolution strategies (Bash dig, nslookup, DoH), the agent is trying to diagnose DNS itself. Root cause is usually the tunnel or DNS config; the outcome's `detail` string carries the underlying CDP error.
|
|
128
132
|
|
|
129
133
|
- **Contact-list LIMIT error → retry loop**: If `contact-list error=true` repeats 3+ times in one session, the agent is retrying with the same float parameter. This is a known Neo4j integer bug — the fix is in the MCP server, not the agent's behaviour.
|
|
130
134
|
|
|
131
135
|
- **Context overflow → degraded behaviour**: If a session has `context-overflow` above 150% AND errors after that point, the overflow likely caused the errors (truncated instructions, lost context).
|
|
132
136
|
|
|
133
|
-
- **
|
|
137
|
+
- **selector-not-found loop**: If `failed: selector-not-found` repeats, the agent is querying an element that isn't on the page — it hasn't loaded yet (needs a `browser-wait` first) or the selector is wrong. The on-device tools use CSS selectors, not snapshot refs, so re-snapshotting is not the fix.
|
|
134
138
|
|
|
135
|
-
- **
|
|
139
|
+
- **Timeout cluster**: Multiple `failed: load-timeout` or `failed: screenshot-failed` errors indicate Pi performance issues, not agent bugs. The Pi's limited CPU struggles to render heavy pages in the VNC Chromium.
|
|
136
140
|
|
|
137
141
|
## Report Format
|
|
138
142
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "browser",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "Drives the device's existing Chromium over the Chrome DevTools Protocol for both retrieval and interactive automation. browser-render reads a JS-rendered page's DOM (the JS-rendering leg of WebFetch / url-get / browser-render retrieval). The browser-navigate family keeps one page alive across calls for click/fill/snapshot automation, and browser-pdf-save / browser-screenshot turn the rendered page into PDF or PNG files on device. Use it for client-rendered SPAs, form automation, and generating A4 PDFs.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,10 +1,61 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: browser
|
|
3
|
-
description: "
|
|
3
|
+
description: "Drives the device's existing Chromium over the Chrome DevTools Protocol for both retrieval and interactive automation. browser-render reads a JS-rendered page's DOM (the JS-rendering leg of WebFetch / url-get / browser-render retrieval). The browser-navigate family keeps one page alive across calls for click/fill/snapshot automation, and browser-pdf-save / browser-screenshot turn the rendered page into PDF or PNG files on device. Use it for client-rendered SPAs, form automation, and generating A4 PDFs."
|
|
4
4
|
tools:
|
|
5
5
|
- name: browser-render
|
|
6
6
|
publicAllowlist: false
|
|
7
7
|
adminAllowlist: true
|
|
8
|
+
- name: browser-navigate
|
|
9
|
+
publicAllowlist: false
|
|
10
|
+
adminAllowlist: true
|
|
11
|
+
- name: browser-snapshot
|
|
12
|
+
publicAllowlist: false
|
|
13
|
+
adminAllowlist: true
|
|
14
|
+
- name: browser-click
|
|
15
|
+
publicAllowlist: false
|
|
16
|
+
adminAllowlist: true
|
|
17
|
+
- name: browser-fill
|
|
18
|
+
publicAllowlist: false
|
|
19
|
+
adminAllowlist: true
|
|
20
|
+
- name: browser-fill-form
|
|
21
|
+
publicAllowlist: false
|
|
22
|
+
adminAllowlist: true
|
|
23
|
+
- name: browser-type
|
|
24
|
+
publicAllowlist: false
|
|
25
|
+
adminAllowlist: true
|
|
26
|
+
- name: browser-press-key
|
|
27
|
+
publicAllowlist: false
|
|
28
|
+
adminAllowlist: true
|
|
29
|
+
- name: browser-hover
|
|
30
|
+
publicAllowlist: false
|
|
31
|
+
adminAllowlist: true
|
|
32
|
+
- name: browser-select-option
|
|
33
|
+
publicAllowlist: false
|
|
34
|
+
adminAllowlist: true
|
|
35
|
+
- name: browser-wait-for
|
|
36
|
+
publicAllowlist: false
|
|
37
|
+
adminAllowlist: true
|
|
38
|
+
- name: browser-handle-dialog
|
|
39
|
+
publicAllowlist: false
|
|
40
|
+
adminAllowlist: true
|
|
41
|
+
- name: browser-evaluate
|
|
42
|
+
publicAllowlist: false
|
|
43
|
+
adminAllowlist: true
|
|
44
|
+
- name: browser-console-messages
|
|
45
|
+
publicAllowlist: false
|
|
46
|
+
adminAllowlist: true
|
|
47
|
+
- name: browser-tabs
|
|
48
|
+
publicAllowlist: false
|
|
49
|
+
adminAllowlist: true
|
|
50
|
+
- name: browser-pdf-save
|
|
51
|
+
publicAllowlist: false
|
|
52
|
+
adminAllowlist: true
|
|
53
|
+
- name: browser-screenshot
|
|
54
|
+
publicAllowlist: false
|
|
55
|
+
adminAllowlist: true
|
|
56
|
+
- name: browser-resize
|
|
57
|
+
publicAllowlist: false
|
|
58
|
+
adminAllowlist: true
|
|
8
59
|
always: true
|
|
9
60
|
embed: false
|
|
10
61
|
metadata: {"platform":{}}
|
|
@@ -23,22 +74,41 @@ mcp-manifest: auto
|
|
|
23
74
|
|
|
24
75
|
# Browser
|
|
25
76
|
|
|
26
|
-
|
|
77
|
+
Drives the device's Chromium over the Chrome DevTools Protocol for three things: reading JS-rendered pages, automating a page (click/fill/snapshot), and turning a page into a PDF or PNG file on device.
|
|
27
78
|
|
|
28
79
|
## Why it exists
|
|
29
80
|
|
|
30
|
-
`WebFetch` summarises and refuses verbatim output; `url-get` returns the verbatim source but does not execute JavaScript. Client-rendered pages
|
|
81
|
+
`WebFetch` summarises and refuses verbatim output; `url-get` returns the verbatim source but does not execute JavaScript. Client-rendered pages come back from both as an empty shell. `browser-render` runs the page's JavaScript and reads the resulting DOM. The automation and output tools exist because the specialists previously named a Playwright tool surface (interaction + `browser_pdf_save`) that never actually shipped on a Pi — these tools provide the same capabilities backed by the on-device CDP connection instead.
|
|
31
82
|
|
|
32
83
|
## How it works
|
|
33
84
|
|
|
34
|
-
The device already runs a per-brand Chromium for the VNC surface, launched by `platform/scripts/vnc.sh` with `--remote-debugging-port=${CDP_PORT}`.
|
|
85
|
+
The device already runs a per-brand Chromium for the VNC surface, launched by `platform/scripts/vnc.sh` with `--remote-debugging-port=${CDP_PORT}`. Every tool attaches to that running browser over the Chrome DevTools Protocol — it never launches its own browser, so nothing extra ships on device and there is no on-demand download. The brand's CDP port reaches this server through the `CDP_PORT` spawn placeholder.
|
|
86
|
+
|
|
87
|
+
`browser-render` is **stateless**: each call opens a fresh background target, navigates, reads the DOM, and closes it. The automation tools share **one persistent page**: `browser-navigate` creates (or reuses) a single live target, and the action tools drive it across calls. If that page dies (operator closes the tab, crash, browser restart) the action tools return `session-lost` and the agent calls `browser-navigate` again — only navigate re-attaches, so a dead page is never silently replaced mid-action. `browser-tabs` opens/switches/closes pages.
|
|
88
|
+
|
|
89
|
+
## Tools
|
|
90
|
+
|
|
91
|
+
Retrieval (stateless):
|
|
92
|
+
- `browser-render` — `url`, optional `loadTimeoutMs`. Returns rendered HTML + visible text.
|
|
35
93
|
|
|
36
|
-
|
|
94
|
+
Automation (shared persistent page; selectors come from `browser-snapshot`):
|
|
95
|
+
- `browser-navigate` — open a URL and keep the page alive. Entry point for automation.
|
|
96
|
+
- `browser-snapshot` — accessibility snapshot: each interactive/landmark node as role, name, and a unique CSS selector to use with click/fill/hover.
|
|
97
|
+
- `browser-click`, `browser-fill`, `browser-fill-form`, `browser-hover`, `browser-select-option` — act on a CSS selector.
|
|
98
|
+
- `browser-type`, `browser-press-key` — real keyboard input (`Input.*`).
|
|
99
|
+
- `browser-wait-for` — wait for a selector or text to appear.
|
|
100
|
+
- `browser-handle-dialog` — pre-arm how the next JS dialog(s) are answered (CDP dialogs block, so policy must be set before the triggering action).
|
|
101
|
+
- `browser-evaluate` — run a JS expression in the page and return its value.
|
|
102
|
+
- `browser-console-messages` — drain buffered console output + uncaught errors.
|
|
103
|
+
- `browser-tabs` — list / new / select / close pages.
|
|
37
104
|
|
|
38
|
-
|
|
105
|
+
Output (to a file on device):
|
|
106
|
+
- `browser-pdf-save` — `Page.printToPDF` of the current page; the on-device replacement for the old Playwright `browser_pdf_save`.
|
|
107
|
+
- `browser-screenshot` — PNG of the page or one element (CSS selector clip), e.g. glassmorphism print-fallback images.
|
|
108
|
+
- `browser-resize` — set the viewport size.
|
|
39
109
|
|
|
40
|
-
|
|
110
|
+
All tools are admin-allowlisted; none are exposed to public chat.
|
|
41
111
|
|
|
42
112
|
## Observability
|
|
43
113
|
|
|
44
|
-
A successful render emits `[browser-render] url=… rendered=true domBytes=…` on the server's stderr (captured by the mcp-spawn-tee log).
|
|
114
|
+
A successful render emits `[browser-render] url=… rendered=true domBytes=…` on the server's stderr (captured by the mcp-spawn-tee log). Every other tool returns a structured outcome: `ok`, or one of `cdp-unreachable`, `session-lost`, `selector-not-found`, `option-not-found`, `wait-timeout`, `navigate-failed`, `load-timeout`, `evaluate-failed`, `command-timeout`, `pdf-failed`, `screenshot-failed`, `unsupported-key`. On a device with no running Chromium (e.g. a laptop native-display install with no VNC browser) the tools return `cdp-unreachable` rather than hanging.
|
|
@@ -4,7 +4,10 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
4
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
5
|
import { eagerTool } from "../../../../lib/mcp-eager/dist/index.js";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
+
import { writeFile } from "node:fs/promises";
|
|
7
8
|
import { renderPage } from "./lib/cdp-render.js";
|
|
9
|
+
import { BrowserSession, DEFAULT_COMMAND_TIMEOUT_MS, DEFAULT_LOAD_TIMEOUT_MS, } from "./lib/cdp-session.js";
|
|
10
|
+
import * as actions from "./lib/cdp-actions.js";
|
|
8
11
|
// Cast to `any` to avoid TS2589 the same way the other plugin servers do.
|
|
9
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
13
|
const server = new McpServer({ name: "maxy-browser", version: "0.1.0" });
|
|
@@ -14,6 +17,9 @@ const cdpPortRaw = process.env.CDP_PORT ?? "";
|
|
|
14
17
|
const cdpPort = Number.parseInt(cdpPortRaw, 10);
|
|
15
18
|
process.stderr.write(`[browser] boot cdpPort=${cdpPortRaw || "-"}\n`);
|
|
16
19
|
const log = (line) => process.stderr.write(`${line}\n`);
|
|
20
|
+
const WebSocketImpl = typeof WebSocket !== "undefined"
|
|
21
|
+
? WebSocket
|
|
22
|
+
: undefined;
|
|
17
23
|
// Cap what we hand back to the model so a large SPA cannot blow the agent's
|
|
18
24
|
// context window. domBytes in the header always reports the true size.
|
|
19
25
|
const MAX_TEXT_CHARS = 200_000;
|
|
@@ -27,13 +33,7 @@ eagerTool(server, "browser-render", "Render a JavaScript-heavy web page in the d
|
|
|
27
33
|
url: z.string().url().describe("Absolute http(s) URL to render"),
|
|
28
34
|
loadTimeoutMs: z.number().int().positive().optional().describe("Max wait for the page load event (default 30000)"),
|
|
29
35
|
}, async (params) => {
|
|
30
|
-
const result = await renderPage(params.url, { loadTimeoutMs: params.loadTimeoutMs }, {
|
|
31
|
-
fetchImpl: fetch,
|
|
32
|
-
WebSocketImpl: typeof WebSocket !== "undefined" ? WebSocket : undefined,
|
|
33
|
-
cdpHost: "127.0.0.1",
|
|
34
|
-
cdpPort,
|
|
35
|
-
log,
|
|
36
|
-
});
|
|
36
|
+
const result = await renderPage(params.url, { loadTimeoutMs: params.loadTimeoutMs }, { fetchImpl: fetch, WebSocketImpl, cdpHost: "127.0.0.1", cdpPort, log });
|
|
37
37
|
if (!result.rendered) {
|
|
38
38
|
return {
|
|
39
39
|
content: [{
|
|
@@ -55,6 +55,110 @@ eagerTool(server, "browser-render", "Render a JavaScript-heavy web page in the d
|
|
|
55
55
|
}],
|
|
56
56
|
};
|
|
57
57
|
});
|
|
58
|
+
// ── Interactive automation + output tools ────────────────────────────────────
|
|
59
|
+
//
|
|
60
|
+
// All of these drive ONE persistent page held in `browserSession`, against the
|
|
61
|
+
// same device Chromium over CDP. The page is created by browser-navigate and
|
|
62
|
+
// reused across calls; browser-tabs opens/switches/closes pages. A dead page
|
|
63
|
+
// (operator closed the tab, crash, browser restart) yields a `session-lost`
|
|
64
|
+
// outcome telling the agent to navigate again — only navigate re-attaches.
|
|
65
|
+
const cdpDeps = { fetchImpl: fetch, WebSocketImpl, cdpHost: "127.0.0.1", cdpPort, log };
|
|
66
|
+
const browserSession = new BrowserSession(cdpDeps);
|
|
67
|
+
const actionCtx = {
|
|
68
|
+
deps: cdpDeps,
|
|
69
|
+
commandTimeoutMs: DEFAULT_COMMAND_TIMEOUT_MS,
|
|
70
|
+
loadTimeoutMs: DEFAULT_LOAD_TIMEOUT_MS,
|
|
71
|
+
writeFile: (path, data) => writeFile(path, data),
|
|
72
|
+
};
|
|
73
|
+
function reply(label, r, successText) {
|
|
74
|
+
if (!r.ok) {
|
|
75
|
+
return {
|
|
76
|
+
content: [{ type: "text", text: `${label} failed: ${r.outcome}${r.detail ? ` — ${r.detail}` : ""}` }],
|
|
77
|
+
isError: true,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return { content: [{ type: "text", text: successText ?? `${label}: ok` }] };
|
|
81
|
+
}
|
|
82
|
+
eagerTool(server, "browser-navigate", "Open a URL in the device's Chromium and keep the page alive for follow-up automation (click, fill, snapshot, pdf-save, screenshot). This is the entry point for interactive browser work — call it before any other browser-* automation tool. Reuses the one live automation page; use browser-tabs to open a separate page. For one-shot read-only retrieval of a JS page use browser-render instead.", {
|
|
83
|
+
url: z.string().url().describe("Absolute http(s) URL to open"),
|
|
84
|
+
loadTimeoutMs: z.number().int().positive().optional().describe("Max wait for the page load event (default 30000)"),
|
|
85
|
+
}, async (params) => reply("browser-navigate", await actions.navigate(browserSession, params, actionCtx), `Navigated to ${params.url}`));
|
|
86
|
+
eagerTool(server, "browser-snapshot", "Return an accessibility snapshot of the current page: each interactive or landmark element as role, accessible name, and a unique CSS selector. Use the returned selector verbatim with browser-click / browser-fill / browser-hover — it targets exactly the element you saw. Call this after browser-navigate (or after an action changes the page) to know what is on the page.", {}, async () => {
|
|
87
|
+
const r = await actions.snapshot(browserSession, {}, actionCtx);
|
|
88
|
+
return reply("browser-snapshot", r, r.data?.text);
|
|
89
|
+
});
|
|
90
|
+
eagerTool(server, "browser-click", "Click the element matching a CSS selector on the current page. Use a selector from browser-snapshot. Returns selector-not-found if nothing matches.", { selector: z.string().describe("CSS selector of the element to click") }, async (params) => reply("browser-click", await actions.click(browserSession, params, actionCtx), `Clicked ${params.selector}`));
|
|
91
|
+
eagerTool(server, "browser-fill", "Set the value of one input, textarea, or contenteditable matching a CSS selector, firing input/change events. For multiple fields in one call use browser-fill-form.", {
|
|
92
|
+
selector: z.string().describe("CSS selector of the field"),
|
|
93
|
+
value: z.string().describe("Value to set"),
|
|
94
|
+
}, async (params) => reply("browser-fill", await actions.fill(browserSession, params, actionCtx), `Filled ${params.selector}`));
|
|
95
|
+
eagerTool(server, "browser-fill-form", "Fill several fields in one call. Each field is a CSS selector and the value to set. Reports every selector that matched nothing.", {
|
|
96
|
+
fields: z.array(z.object({
|
|
97
|
+
selector: z.string().describe("CSS selector of the field"),
|
|
98
|
+
value: z.string().describe("Value to set"),
|
|
99
|
+
})).describe("Fields to fill"),
|
|
100
|
+
}, async (params) => reply("browser-fill-form", await actions.fillForm(browserSession, params, actionCtx), `Filled ${params.fields.length} field(s)`));
|
|
101
|
+
eagerTool(server, "browser-type", "Type text into the focused element via real keyboard input. Pass a selector to focus that element first. Use this when setting value directly (browser-fill) does not trigger the page's keystroke handlers (autocompletes, rich editors).", {
|
|
102
|
+
text: z.string().describe("Text to type"),
|
|
103
|
+
selector: z.string().optional().describe("Optional CSS selector to focus before typing"),
|
|
104
|
+
}, async (params) => reply("browser-type", await actions.type(browserSession, params, actionCtx), "Typed text"));
|
|
105
|
+
eagerTool(server, "browser-press-key", "Press a single key on the focused element (Enter, Tab, Escape, Backspace, Delete, Arrow keys, Home, End, PageUp, PageDown, Space, or a single character). Use for submitting forms (Enter) or keyboard navigation.", { key: z.string().describe("Key name or single character") }, async (params) => reply("browser-press-key", await actions.pressKey(browserSession, params, actionCtx), `Pressed ${params.key}`));
|
|
106
|
+
eagerTool(server, "browser-hover", "Hover the pointer over the element matching a CSS selector, firing pointer/mouse-over events. Use to reveal hover menus or tooltips before reading or clicking.", { selector: z.string().describe("CSS selector of the element to hover") }, async (params) => reply("browser-hover", await actions.hover(browserSession, params, actionCtx), `Hovered ${params.selector}`));
|
|
107
|
+
eagerTool(server, "browser-select-option", "Choose an option in a <select> dropdown by option value or visible label, firing a change event.", {
|
|
108
|
+
selector: z.string().describe("CSS selector of the <select>"),
|
|
109
|
+
value: z.string().optional().describe("Option value to select"),
|
|
110
|
+
label: z.string().optional().describe("Option visible text/label to select"),
|
|
111
|
+
}, async (params) => reply("browser-select-option", await actions.selectOption(browserSession, params, actionCtx), `Selected option in ${params.selector}`));
|
|
112
|
+
eagerTool(server, "browser-wait-for", "Wait until an element (CSS selector) appears or some text is present on the page, up to a timeout. Use after an action that loads content asynchronously, before reading or interacting.", {
|
|
113
|
+
selector: z.string().optional().describe("CSS selector to wait for"),
|
|
114
|
+
text: z.string().optional().describe("Visible text to wait for"),
|
|
115
|
+
timeoutMs: z.number().int().positive().optional().describe("Max wait (default 30000)"),
|
|
116
|
+
}, async (params) => reply("browser-wait-for", await actions.waitFor(browserSession, params, actionCtx), "Condition met"));
|
|
117
|
+
eagerTool(server, "browser-handle-dialog", "Arm how the next JavaScript dialog(s) — alert, confirm, prompt — on the current page are answered. Set this BEFORE the action that triggers the dialog, because dialogs block the page and cannot be answered after the fact. The policy stands until changed. Unarmed dialogs are auto-dismissed and reported by browser-console-messages.", {
|
|
118
|
+
accept: z.boolean().describe("true to accept/OK, false to dismiss/Cancel"),
|
|
119
|
+
promptText: z.string().optional().describe("Text to enter into a prompt() dialog when accepting"),
|
|
120
|
+
}, async (params) => reply("browser-handle-dialog", actions.handleDialog(browserSession, params), `Dialog policy armed: accept=${params.accept}`));
|
|
121
|
+
eagerTool(server, "browser-evaluate", "Run a JavaScript expression in the current page and return its value (awaits a returned promise). Use for reading page state or driving behaviour that no other tool covers. The expression runs in the page, not in Node.", { expression: z.string().describe("JavaScript expression to evaluate in the page") }, async (params) => {
|
|
122
|
+
const r = await actions.evaluate(browserSession, params, actionCtx);
|
|
123
|
+
return reply("browser-evaluate", r, `Result: ${JSON.stringify(r.data?.value ?? null)}`);
|
|
124
|
+
});
|
|
125
|
+
eagerTool(server, "browser-console-messages", "Return and clear the buffered console output and uncaught errors from the current page (captured since navigation). Use to debug why a page or interaction did not behave as expected.", {}, async () => {
|
|
126
|
+
const r = actions.consoleMessages(browserSession);
|
|
127
|
+
return reply("browser-console-messages", r, r.data?.text);
|
|
128
|
+
});
|
|
129
|
+
eagerTool(server, "browser-tabs", "Manage browser tabs/pages: list open pages, open a new page (optionally at a URL and switch to it), select an existing page by id, or close a page by id. Use 'new' or 'select' to get a fresh page so stale state from a prior task does not leak in.", {
|
|
130
|
+
action: z.enum(["list", "new", "select", "close"]).describe("Tab action"),
|
|
131
|
+
id: z.string().optional().describe("Target id (required for select/close)"),
|
|
132
|
+
url: z.string().optional().describe("URL to open (optional for new)"),
|
|
133
|
+
}, async (params) => {
|
|
134
|
+
const r = await actions.tabs(browserSession, params, actionCtx);
|
|
135
|
+
const text = params.action === "list"
|
|
136
|
+
? "Tabs:\n" + (r.data?.tabs ?? [])
|
|
137
|
+
.map((t) => `${t.active ? "* " : " "}${t.id} — ${t.title || "(untitled)"} — ${t.url}`).join("\n")
|
|
138
|
+
: `tabs ${params.action}: ok`;
|
|
139
|
+
return reply("browser-tabs", r, text);
|
|
140
|
+
});
|
|
141
|
+
eagerTool(server, "browser-pdf-save", "Render the current page to a PDF file on the device using Chromium's print pipeline (honours @page/@media print CSS, prints backgrounds). Pass an absolute output path. This is the on-device replacement for the old Playwright browser_pdf_save: navigate to the HTML (served over http, or a file path the browser can open), then call this.", {
|
|
142
|
+
path: z.string().describe("Absolute output path for the .pdf file"),
|
|
143
|
+
landscape: z.boolean().optional().describe("Landscape orientation (default false)"),
|
|
144
|
+
scale: z.number().optional().describe("Scale of the page rendering (default 1)"),
|
|
145
|
+
printBackground: z.boolean().optional().describe("Print background graphics (default true)"),
|
|
146
|
+
}, async (params) => {
|
|
147
|
+
const r = await actions.pdfSave(browserSession, params, actionCtx);
|
|
148
|
+
return reply("browser-pdf-save", r, `Saved PDF to ${params.path} (${r.data?.bytes ?? 0} bytes)`);
|
|
149
|
+
});
|
|
150
|
+
eagerTool(server, "browser-screenshot", "Capture a PNG of the current page (or one element, via a CSS selector clip) to a file on the device. Pass an absolute output path. Use selector clips to capture glassmorphism/blur sections as print fallback images for A4 PDFs.", {
|
|
151
|
+
path: z.string().describe("Absolute output path for the .png file"),
|
|
152
|
+
selector: z.string().optional().describe("CSS selector to clip to a single element"),
|
|
153
|
+
fullPage: z.boolean().optional().describe("Capture beyond the viewport (default false)"),
|
|
154
|
+
}, async (params) => {
|
|
155
|
+
const r = await actions.screenshot(browserSession, params, actionCtx);
|
|
156
|
+
return reply("browser-screenshot", r, `Saved screenshot to ${params.path} (${r.data?.bytes ?? 0} bytes)`);
|
|
157
|
+
});
|
|
158
|
+
eagerTool(server, "browser-resize", "Set the current page's viewport size in CSS pixels. Use before a screenshot to control the rendered dimensions (e.g. match an element's measured size to avoid scrollbars).", {
|
|
159
|
+
width: z.number().int().positive().describe("Viewport width in CSS pixels"),
|
|
160
|
+
height: z.number().int().positive().describe("Viewport height in CSS pixels"),
|
|
161
|
+
}, async (params) => reply("browser-resize", await actions.resize(browserSession, params, actionCtx), `Resized to ${params.width}x${params.height}`));
|
|
58
162
|
process.on("SIGINT", () => process.exit(0));
|
|
59
163
|
const transport = new StdioServerTransport();
|
|
60
164
|
await server.connect(transport);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive automation + output operations for the browser plugin.
|
|
3
|
+
*
|
|
4
|
+
* Every function here drives the one persistent page held by a BrowserSession
|
|
5
|
+
* (cdp-session.ts). They never throw to the MCP layer — each returns a
|
|
6
|
+
* structured ActionResult so the agent always sees a named outcome instead of a
|
|
7
|
+
* 500. Element targeting is by CSS selector run through Runtime.evaluate (raw
|
|
8
|
+
* CDP has no Playwright selector engine); the snapshot tool emits a unique CSS
|
|
9
|
+
* selector per interactive node so the agent clicks exactly what it read.
|
|
10
|
+
*
|
|
11
|
+
* ensure() live? ──no──▶ outcome "session-lost" ("call browser-navigate first")
|
|
12
|
+
* │yes (only navigate() re-attaches a dead page)
|
|
13
|
+
* ▼
|
|
14
|
+
* Runtime.evaluate / Input.* / Page.* ──▶ structured ActionResult
|
|
15
|
+
*/
|
|
16
|
+
import { BrowserSession, type CdpDeps, type CdpOutcome } from "./cdp-session.js";
|
|
17
|
+
export type ActionOutcome = CdpOutcome | "selector-not-found" | "option-not-found" | "wait-timeout" | "pdf-failed" | "screenshot-failed" | "unsupported-key";
|
|
18
|
+
export interface ActionResult {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
outcome: ActionOutcome;
|
|
21
|
+
detail?: string;
|
|
22
|
+
/** Tool-specific payload (snapshot tree, console lines, tab list, file bytes…). */
|
|
23
|
+
data?: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface ActionCtx {
|
|
26
|
+
deps: CdpDeps;
|
|
27
|
+
commandTimeoutMs: number;
|
|
28
|
+
loadTimeoutMs: number;
|
|
29
|
+
/** Injected so pdf-save / screenshot are testable without touching disk. */
|
|
30
|
+
writeFile: (path: string, data: Buffer) => Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export declare function navigate(session: BrowserSession, params: {
|
|
33
|
+
url: string;
|
|
34
|
+
loadTimeoutMs?: number;
|
|
35
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
36
|
+
export declare function snapshot(session: BrowserSession, _params: Record<string, never>, ctx: ActionCtx): Promise<ActionResult>;
|
|
37
|
+
export declare function click(session: BrowserSession, params: {
|
|
38
|
+
selector: string;
|
|
39
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
40
|
+
export declare function fill(session: BrowserSession, params: {
|
|
41
|
+
selector: string;
|
|
42
|
+
value: string;
|
|
43
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
44
|
+
export declare function fillForm(session: BrowserSession, params: {
|
|
45
|
+
fields: Array<{
|
|
46
|
+
selector: string;
|
|
47
|
+
value: string;
|
|
48
|
+
}>;
|
|
49
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
50
|
+
export declare function hover(session: BrowserSession, params: {
|
|
51
|
+
selector: string;
|
|
52
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
53
|
+
export declare function selectOption(session: BrowserSession, params: {
|
|
54
|
+
selector: string;
|
|
55
|
+
value?: string;
|
|
56
|
+
label?: string;
|
|
57
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
58
|
+
export declare function type(session: BrowserSession, params: {
|
|
59
|
+
text: string;
|
|
60
|
+
selector?: string;
|
|
61
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
62
|
+
export declare function pressKey(session: BrowserSession, params: {
|
|
63
|
+
key: string;
|
|
64
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
65
|
+
export declare function waitFor(session: BrowserSession, params: {
|
|
66
|
+
selector?: string;
|
|
67
|
+
text?: string;
|
|
68
|
+
timeoutMs?: number;
|
|
69
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
70
|
+
export declare function handleDialog(session: BrowserSession, params: {
|
|
71
|
+
accept: boolean;
|
|
72
|
+
promptText?: string;
|
|
73
|
+
}): ActionResult;
|
|
74
|
+
export declare function evaluate(session: BrowserSession, params: {
|
|
75
|
+
expression: string;
|
|
76
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
77
|
+
export declare function consoleMessages(session: BrowserSession): ActionResult;
|
|
78
|
+
export declare function tabs(session: BrowserSession, params: {
|
|
79
|
+
action: "list" | "new" | "select" | "close";
|
|
80
|
+
id?: string;
|
|
81
|
+
url?: string;
|
|
82
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
83
|
+
export declare function pdfSave(session: BrowserSession, params: {
|
|
84
|
+
path: string;
|
|
85
|
+
landscape?: boolean;
|
|
86
|
+
scale?: number;
|
|
87
|
+
printBackground?: boolean;
|
|
88
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
89
|
+
export declare function screenshot(session: BrowserSession, params: {
|
|
90
|
+
path: string;
|
|
91
|
+
selector?: string;
|
|
92
|
+
fullPage?: boolean;
|
|
93
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
94
|
+
export declare function resize(session: BrowserSession, params: {
|
|
95
|
+
width: number;
|
|
96
|
+
height: number;
|
|
97
|
+
}, ctx: ActionCtx): Promise<ActionResult>;
|
|
98
|
+
//# sourceMappingURL=cdp-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdp-actions.d.ts","sourceRoot":"","sources":["../../src/lib/cdp-actions.ts"],"names":[],"mappings":"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"}
|