@rubytech/create-maxy 1.0.461 → 1.0.462

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-maxy",
3
- "version": "1.0.461",
3
+ "version": "1.0.462",
4
4
  "description": "Install Maxy — AI for Productive People",
5
5
  "bin": {
6
6
  "create-maxy": "./dist/index.js"
@@ -5102,7 +5102,7 @@ function getMcpServers(accountId, enabledPlugins) {
5102
5102
  // the always-on Chromium instance started by vnc.sh on display :99.
5103
5103
  "plugin_playwright_playwright": {
5104
5104
  command: "npx",
5105
- args: ["-y", "@playwright/mcp@latest", "--cdp-endpoint", "http://127.0.0.1:9222"]
5105
+ args: ["-y", "@playwright/mcp@latest", "--cdp-endpoint", "http://127.0.0.1:9222", "--caps", "pdf"]
5106
5106
  }
5107
5107
  };
5108
5108
  if (process.env.TELEGRAM_PUBLIC_BOT_TOKEN) {
@@ -46,6 +46,8 @@ Ask what rules the agent should follow when using this skill:
46
46
 
47
47
  Not every skill needs all of these. Only include what's relevant.
48
48
 
49
+ If the skill involves generating PDFs or print-ready documents, load `references/pdf-generation.md` for the constraints on HTML layout and the `browser_pdf_save` rendering path.
50
+
49
51
  ## Step 4: Decide on References
50
52
 
51
53
  If the skill has detailed procedures, templates, or data formats, those belong in `references/` files — not inline in SKILL.md.
@@ -0,0 +1,30 @@
1
+ # PDF Generation in Skills
2
+
3
+ When a skill needs to produce a PDF, the output is always a two-stage process: the skill authors the HTML, and the browser-specialist renders it to PDF via the `browser_pdf_save` MCP tool.
4
+
5
+ ## The rule
6
+
7
+ Never instruct the agent to write or execute raw Node.js scripts (e.g. `require('playwright')`, `page.pdf()`, `npx playwright`). Playwright is not in the Node.js module path — these scripts fail with MODULE_NOT_FOUND, waste tool calls searching the filesystem, and produce hardcoded paths that break on reinstall.
8
+
9
+ Instead, skills that produce PDFs should:
10
+
11
+ 1. **Build the HTML** — the skill's behaviour section describes what the document contains and how it's structured. The agent writes the HTML file using standard file tools.
12
+ 2. **Delegate rendering to browser-specialist** — the agent asks the browser-specialist to navigate to the HTML file and call `browser_pdf_save` to produce the PDF. The specialist has Playwright access through governed MCP tools; the admin agent does not.
13
+
14
+ ## Print-ready HTML constraints
15
+
16
+ HTML intended for PDF output must follow print-ready layout patterns. The most common failures when agents design their own pagination are rigid fixed-height page divs (causing whitespace gaps) and `position: fixed` hacks for headers/footers (causing overlap and duplication).
17
+
18
+ **Continuous flow layout** — content flows naturally. Use `@page` margin rules for page margins, not wrapper divs with fixed heights. Use `page-break-inside: avoid` on logical units (cards, tables, stat groups) and `page-break-before: always` on major section dividers.
19
+
20
+ **Page numbers and running footers** — use `@page` margin boxes (`@bottom-center { content: counter(page); }`), not JavaScript or position-fixed elements.
21
+
22
+ **Dark backgrounds in print** — browsers strip background colours by default. Add `print-color-adjust: exact; -webkit-print-color-adjust: exact;` to dark elements in `@media print`.
23
+
24
+ **Cover and back pages** — full-bleed pages use `height: 100vh; page-break-after: always;` in `@media print` with zero `@page` margins (via `@page :first` for covers, named pages for back pages).
25
+
26
+ **Glassmorphism and backdrop-filter** — these do not survive browser print rendering. Any section using glassmorphism needs a pre-rendered PNG fallback image that is hidden on screen and shown only in `@media print`.
27
+
28
+ ## What the skill file should contain
29
+
30
+ The skill's SKILL.md describes the document's purpose and structure. A `references/` file holds the HTML template or content specification. The skill should state that PDF rendering is delegated to browser-specialist — it should not contain Playwright code, npm commands, or file path assumptions about the Playwright installation.
@@ -17,22 +17,42 @@ Call `whatsapp-status` first — if no WhatsApp account is connected, direct the
17
17
 
18
18
  ## Presenting settings
19
19
 
20
- Call `whatsapp-config action: schema` to get field definitions with descriptions, types, defaults, and constraints. Use the Description column from the schema output as the `description` field on each form field — do not improvise descriptions.
20
+ Call `whatsapp-config action: schema` to get field definitions with descriptions, and `whatsapp-config action: get-config` to get current values. Use the Description column from the schema output as the `description` field on each form field — do not improvise descriptions.
21
21
 
22
- Group related settings logically when presenting:
22
+ ### Admin phones
23
23
 
24
- 1. **Messaging policies**dmPolicy, groupPolicy, allowFrom, groupAllowFrom
25
- 2. **Operational limits** — mediaMaxMb, textChunkLimit, debounceMs
26
- 3. **Behaviour** — sendReadReceipts, ackReaction
27
- 4. **Account settings** — name, enabled, selfChatMode
28
- 5. **Group configuration** — groups (per-group activation)
24
+ Before the form, call `whatsapp-config action: list-admin-phones` and display the result. Admin phones are managed via `add-admin-phone` / `remove-admin-phone` they are not editable in this form.
29
25
 
30
- Present settings as a `render-component` form with:
31
- - `description` on every field (from schema output)
32
- - `defaultValue` showing the current value or the schema default
33
- - Rich option labels with descriptions for enum fields (e.g. dmPolicy options should explain what "open", "allowlist", and "disabled" each mean)
26
+ ### Form fields
34
27
 
35
- Before the user submits, summarise what each default does the user should understand the implications of keeping defaults, not just see them pre-filled.
28
+ Present settings as a `render-component` form. Each field must have a unique `name` matching the schema field name (used as the state key and the `update-config` field key), a `type`, a `label` (plain English), and a `description` (from schema output). For selects, specify `options`. For all fields, set `defaultValue` from `get-config` (current value) or the schema default.
29
+
30
+ **Messaging policies:**
31
+
32
+ - `dmPolicy` (`select`): label "Who can message your agent (DMs)", options:
33
+ - `open` — "Open — anyone can message"
34
+ - `allowlist` — "Allowlist — only approved numbers"
35
+ - `disabled` — "Disabled — no public DMs"
36
+ - `groupPolicy` (`select`): label "Group message handling", options:
37
+ - `open` — "Always — respond to all group messages"
38
+ - `allowlist` — "Allowlist — only in approved groups"
39
+ - `disabled` — "Disabled — ignore all group messages"
40
+
41
+ **Behaviour:**
42
+
43
+ - `sendReadReceipts` (`select`): label "Blue ticks (read receipts)", options:
44
+ - `true` — "On — contacts see read receipts"
45
+ - `false` — "Off — no read receipts"
46
+
47
+ **Operational limits:**
48
+
49
+ - `mediaMaxMb` (`number`): label "Media size limit (MB)"
50
+ - `textChunkLimit` (`number`): label "Message chunk limit (characters)"
51
+ - `debounceMs` (`number`): label "Message batching delay (ms)"
52
+
53
+ ### Submit
54
+
55
+ The form's `submitMessage` must map the field values back to `update-config` field names: `Save these WhatsApp settings: {{json}}` — where `{{json}}` produces the JSON object with field names as keys (e.g. `{ "dmPolicy": "open", "mediaMaxMb": 50, ... }`).
36
56
 
37
57
  ## Group configuration
38
58
 
@@ -51,9 +71,11 @@ After the user submits, write changes via `whatsapp-config action: "update-confi
51
71
 
52
72
  ## Language
53
73
 
54
- Use plain English:
55
- - "Who can message your agent" not "dmPolicy"
56
- - "Message batching delay" not "debounceMs"
57
- - "Media size limit" not "mediaMaxMb"
58
- - "Blue ticks" not "sendReadReceipts"
59
- - Group names, not JIDs
74
+ Plain English goes in `label` — schema field names go in `name`. The `name` property is the machine key (must match the schema exactly); the `label` is what the user reads. Examples:
75
+
76
+ - `name: "dmPolicy"`, `label: "Who can message your agent (DMs)"`
77
+ - `name: "debounceMs"`, `label: "Message batching delay (ms)"`
78
+ - `name: "mediaMaxMb"`, `label: "Media size limit (MB)"`
79
+ - `name: "sendReadReceipts"`, `label: "Blue ticks (read receipts)"`
80
+
81
+ Group names (not JIDs) in all user-facing text.
@@ -3,7 +3,7 @@ name: browser-specialist
3
3
  description: "Web browser tasks — visiting websites, filling forms, clicking buttons, and reading page content. Delegate when a task requires controlling the browser."
4
4
  summary: "Browses the web on your behalf — visiting websites, filling in forms, and extracting information. For example, when you need to sign up for a service, check a competitor's pricing page, or set up an online account."
5
5
  model: claude-sonnet-4-6
6
- tools: mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_navigate_back, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_take_screenshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_type, mcp__plugin_playwright_playwright__browser_press_key, mcp__plugin_playwright_playwright__browser_hover, mcp__plugin_playwright_playwright__browser_select_option, mcp__plugin_playwright_playwright__browser_wait_for, mcp__plugin_playwright_playwright__browser_handle_dialog, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_resize, mcp__plugin_playwright_playwright__browser_tabs, mcp__plugin_playwright_playwright__browser_close, mcp__admin__api-key-store
6
+ tools: mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_navigate_back, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_take_screenshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_type, mcp__plugin_playwright_playwright__browser_press_key, mcp__plugin_playwright_playwright__browser_hover, mcp__plugin_playwright_playwright__browser_select_option, mcp__plugin_playwright_playwright__browser_wait_for, mcp__plugin_playwright_playwright__browser_handle_dialog, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_resize, mcp__plugin_playwright_playwright__browser_tabs, mcp__plugin_playwright_playwright__browser_close, mcp__plugin_playwright_playwright__browser_pdf_save, mcp__admin__api-key-store
7
7
  ---
8
8
 
9
9
  # Browser Specialist