@topy-ai/maggie 0.7.47 → 0.7.48

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.
Files changed (58) hide show
  1. package/README-zh-TW.md +2 -2
  2. package/README.md +49 -15
  3. package/bin/maggie.js +6 -2
  4. package/bundled-contracts/maggie-design/palette-roles-v1.schema.json +47 -0
  5. package/bundled-contracts/maggie-marketplace/template-content-v1.schema.json +103 -0
  6. package/bundled-contracts/maggiedash/booking-browser-evidence-v1.json +21 -0
  7. package/bundled-contracts/maggiedash/booking-browser-evidence-v2.json +191 -0
  8. package/bundled-contracts/maggiedash/booking-email-templates-v1.json +3 -1
  9. package/bundled-contracts/maggiedash/booking-voucher-lifecycle-v1.json +85 -0
  10. package/bundled-contracts/maggiedash/execution-board.json +4629 -1553
  11. package/bundled-contracts/maggiedash/stripe-booking-capabilities-v1.json +1 -0
  12. package/bundled-marketplace/README.md +17 -0
  13. package/bundled-marketplace/catalog.json +56 -7
  14. package/bundled-references/browser-inspection.md +25 -0
  15. package/bundled-references/maggiedash-booking/CURRENT-STATE.md +128 -10
  16. package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +4629 -1553
  17. package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +5 -0
  18. package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +64 -21
  19. package/bundled-references/maggiedash-booking/PRD.md +9 -1
  20. package/bundled-references/maggiedash-booking/PROGRESS.md +244 -2399
  21. package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +37 -6
  22. package/bundled-references/maggiedash-booking/README.md +23 -6
  23. package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +64 -8
  24. package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +11 -2
  25. package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +66 -2
  26. package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +1 -1
  27. package/bundled-references/maggiedash-booking/TASKS.md +44 -3
  28. package/bundled-references/maggiedash-booking/VOUCHERS.md +47 -0
  29. package/bundled-references/provider-adapter-contract.md +33 -0
  30. package/bundled-skills/maggie-booking/SKILL.md +8 -0
  31. package/bundled-skills/maggie-clone-to-template/SKILL.md +26 -0
  32. package/bundled-skills/maggie-deployment/SKILL.md +53 -1
  33. package/bundled-skills/maggie-deployment/references/vps.md +41 -0
  34. package/bundled-skills/maggie-design/SKILL.md +99 -0
  35. package/bundled-skills/maggie-feedback/SKILL.md +38 -1
  36. package/bundled-skills/maggie-marketplace/SKILL.md +91 -0
  37. package/bundled-skills/maggie-qa-workflow/SKILL.md +41 -1
  38. package/bundled-skills/maggie-service-booking/SKILL.md +23 -0
  39. package/bundled-skills/maggie-social-share/SKILL.md +37 -5
  40. package/bundled-skills/maggie-social-share/references/queue-and-connections.md +101 -0
  41. package/bundled-skills/maggie-template/SKILL.md +57 -3
  42. package/bundled-skills/maggie-template/references/template-content-v1.example.json +34 -0
  43. package/bundled-tools/clis/maggie_booking.py +199 -26
  44. package/bundled-tools/clis/maggie_booking_vouchers.py +185 -0
  45. package/bundled-tools/clis/maggie_clone_to_template.py +14 -0
  46. package/bundled-tools/clis/maggie_deployment.py +249 -1
  47. package/bundled-tools/clis/maggie_design.py +9 -0
  48. package/bundled-tools/clis/maggie_design_lint.py +277 -0
  49. package/bundled-tools/clis/maggie_feedback.py +106 -3
  50. package/bundled-tools/clis/maggie_marketplace.py +199 -5
  51. package/bundled-tools/clis/maggie_palette.py +280 -0
  52. package/bundled-tools/clis/maggie_qa_workflow.py +156 -1
  53. package/bundled-tools/clis/maggie_social_queue.py +338 -0
  54. package/bundled-tools/clis/maggie_social_share.py +42 -9
  55. package/bundled-tools/clis/maggie_template_package.py +1141 -0
  56. package/package.json +1 -1
  57. package/references/browser-inspection.md +25 -0
  58. package/references/provider-adapter-contract.md +33 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topy-ai/maggie",
3
- "version": "0.7.47",
3
+ "version": "0.7.48",
4
4
  "description": "Install and manage Maggie Skills for AI coding agents",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -75,3 +75,28 @@ appearance. For every stateful component capture state A and state B and
75
75
  record the trigger and transition. Keep screenshots and extracted data under
76
76
  the target's namespaced research root so multiple URLs cannot overwrite one
77
77
  another.
78
+
79
+ ## Network interception and write safety
80
+
81
+ Any skill that drives a browser against a running app (QA, clone, design
82
+ review) must assume the app may talk to a real API. A local development build
83
+ is often configured with the production API base URL, so a click in local QA
84
+ can change live accounts.
85
+
86
+ - Do not rely on page-level stubs such as overriding `window.fetch` from the
87
+ console or an injected script. Bundled API clients usually capture `fetch`
88
+ at module load, use `XMLHttpRequest`, or run in a service worker, so the
89
+ override never sees their requests.
90
+ - Intercept at the network layer instead: Playwright `page.route()` /
91
+ `context.route()`, Puppeteer request interception, or CDP `Fetch.enable`.
92
+ Deny by default every non-GET request to a production origin and let only
93
+ explicitly listed reads through.
94
+ - Verify the interception before any write flow: trigger one harmless request
95
+ and confirm in the browser's network log that it was intercepted, not sent.
96
+ - Without network-layer interception, run write flows only against a
97
+ non-production API, or after the user gives explicit consent naming the
98
+ account and the data that will change. Record a backup or restore path first.
99
+
100
+ `maggie qa start --api-base URL --production-api URL` records the API target.
101
+ Scenarios marked `"mutates": true` are blocked against a production API unless
102
+ `--allow-production-writes` is given. See the `maggie-qa-workflow` skill.
@@ -150,6 +150,39 @@ image-processing contract: optimisation may use Cloudflare Images
150
150
  transformations, Astro build tooling or a provider-specific implementation
151
151
  behind the same interface.
152
152
 
153
+ ## OAuth connections
154
+
155
+ A provider connection is only as reliable as its weakest connect path:
156
+
157
+ - Each adapter declares one canonical OAuth scope set. Every client that
158
+ starts the flow (dashboard, mobile app, CLI) requests exactly that set.
159
+ LinkedIn invalidates a member's earlier tokens when a later sign-in asks for
160
+ a different scope set, so a mobile app that omits `email` silently revokes
161
+ the dashboard's token while the database still says `active`.
162
+ - Prefer one OAuth client per product. When a client ID is shared with other
163
+ products or callbacks, record it as `client_shared_with`; their sign-ins can
164
+ revoke this product's tokens unless they use the identical scope set.
165
+ - Treat stored connection status as a cache. A token that the provider has
166
+ revoked, or that the serving host cannot decrypt, is `needs_reconnect`
167
+ before anything is scheduled on it — not when a post fails.
168
+ - Provider media URLs (for example `media.licdn.com` with an `e=` expiry) are
169
+ signed and expire. Cache the bytes in owned storage or refresh on readback.
170
+
171
+ `maggie tool maggie_social_share.py adapters` and `connections` check these
172
+ rules from a redacted JSON manifest; see the Social Share skill for shapes.
173
+
174
+ ## Structured model output
175
+
176
+ Keep structured-output schemas small. Gemini rejected a JSON schema whose enum
177
+ had 125 values with `400 INVALID_ARGUMENT`, and the caller silently fell back
178
+ for every request. For a large vocabulary (styles, categories, catalogue IDs):
179
+
180
+ 1. ask for a free string (optionally with a short list of examples in the
181
+ prompt) instead of a large `enum`;
182
+ 2. validate the returned value server-side against the authoritative list;
183
+ 3. treat a schema rejection or an unknown value as a visible, counted failure —
184
+ never a silent fallback to a default.
185
+
153
186
  ## Adding a provider
154
187
 
155
188
  1. Implement the relevant interface in `src/lib/providers/`.