@topy-ai/maggie 0.7.47 → 0.7.49

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 (91) hide show
  1. package/README-zh-TW.md +2 -2
  2. package/README.md +76 -15
  3. package/bin/maggie.js +23 -6
  4. package/bundled-contracts/google-integrations/capability-report-v2.schema.json +2 -1
  5. package/bundled-contracts/maggie-content/email-localization-v1.schema.json +89 -0
  6. package/bundled-contracts/maggie-content/lifecycle-email-v1.schema.json +76 -0
  7. package/bundled-contracts/maggie-deployment/readiness-v1.schema.json +6 -1
  8. package/bundled-contracts/maggie-design/palette-roles-v1.schema.json +47 -0
  9. package/bundled-contracts/maggie-marketplace/template-content-v1.schema.json +103 -0
  10. package/bundled-contracts/maggie-ops/marketing-run-v1.schema.json +89 -0
  11. package/bundled-contracts/maggie-ops/notification-catalogue-example-v1.json +941 -0
  12. package/bundled-contracts/maggie-ops/notification-catalogue-v1.schema.json +273 -0
  13. package/bundled-contracts/maggie-service-booking/fact-provenance-v1.schema.json +128 -0
  14. package/bundled-contracts/maggie-service-booking/import-stages-v1.schema.json +191 -0
  15. package/bundled-contracts/maggiedash/booking-browser-evidence-v1.json +21 -0
  16. package/bundled-contracts/maggiedash/booking-browser-evidence-v2.json +191 -0
  17. package/bundled-contracts/maggiedash/booking-email-templates-v1.json +3 -1
  18. package/bundled-contracts/maggiedash/booking-voucher-lifecycle-v1.json +85 -0
  19. package/bundled-contracts/maggiedash/execution-board.json +4629 -1553
  20. package/bundled-contracts/maggiedash/stripe-booking-capabilities-v1.json +1 -0
  21. package/bundled-marketplace/README.md +17 -0
  22. package/bundled-marketplace/catalog.json +56 -7
  23. package/bundled-references/browser-inspection.md +25 -0
  24. package/bundled-references/google-integrations-runbook.md +54 -0
  25. package/bundled-references/maggiedash-booking/CURRENT-STATE.md +128 -10
  26. package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +4629 -1553
  27. package/bundled-references/maggiedash-booking/HOST-ADAPTER.md +5 -0
  28. package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +64 -21
  29. package/bundled-references/maggiedash-booking/PRD.md +9 -1
  30. package/bundled-references/maggiedash-booking/PROGRESS.md +244 -2399
  31. package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +37 -6
  32. package/bundled-references/maggiedash-booking/README.md +23 -6
  33. package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +64 -8
  34. package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +11 -2
  35. package/bundled-references/maggiedash-booking/STRIPE-INTEGRATION.md +66 -2
  36. package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +1 -1
  37. package/bundled-references/maggiedash-booking/TASKS.md +44 -3
  38. package/bundled-references/maggiedash-booking/VOUCHERS.md +47 -0
  39. package/bundled-references/provider-adapter-contract.md +33 -0
  40. package/bundled-skills/maggie-booking/SKILL.md +8 -0
  41. package/bundled-skills/maggie-clone-to-template/SKILL.md +26 -0
  42. package/bundled-skills/maggie-content-localization/SKILL.md +17 -1
  43. package/bundled-skills/maggie-content-localization/references/email-and-lifecycle.md +83 -0
  44. package/bundled-skills/maggie-deployment/SKILL.md +141 -7
  45. package/bundled-skills/maggie-deployment/references/vps.md +74 -1
  46. package/bundled-skills/maggie-design/SKILL.md +154 -0
  47. package/bundled-skills/maggie-feedback/SKILL.md +67 -1
  48. package/bundled-skills/maggie-marketplace/SKILL.md +91 -0
  49. package/bundled-skills/maggie-ops/SKILL.md +37 -0
  50. package/bundled-skills/maggie-ops/references/notifications-operations.md +154 -0
  51. package/bundled-skills/maggie-qa-workflow/SKILL.md +41 -1
  52. package/bundled-skills/maggie-service-booking/SKILL.md +82 -0
  53. package/bundled-skills/maggie-social-share/SKILL.md +56 -7
  54. package/bundled-skills/maggie-social-share/references/marketing-run.md +57 -0
  55. package/bundled-skills/maggie-social-share/references/queue-and-connections.md +152 -0
  56. package/bundled-skills/maggie-template/SKILL.md +57 -3
  57. package/bundled-skills/maggie-template/references/template-content-v1.example.json +34 -0
  58. package/bundled-tools/clis/maggie_booking.py +199 -26
  59. package/bundled-tools/clis/maggie_booking_vouchers.py +185 -0
  60. package/bundled-tools/clis/maggie_clone_to_template.py +14 -0
  61. package/bundled-tools/clis/maggie_deployment.py +307 -18
  62. package/bundled-tools/clis/maggie_deployment_auth_canary.py +216 -0
  63. package/bundled-tools/clis/maggie_deployment_collect.py +225 -0
  64. package/bundled-tools/clis/maggie_deployment_readiness.py +53 -3
  65. package/bundled-tools/clis/maggie_design.py +17 -0
  66. package/bundled-tools/clis/maggie_design_lint.py +277 -0
  67. package/bundled-tools/clis/maggie_design_verify.py +359 -0
  68. package/bundled-tools/clis/maggie_docs.py +82 -4
  69. package/bundled-tools/clis/maggie_email_localization.py +382 -0
  70. package/bundled-tools/clis/maggie_feedback.py +115 -5
  71. package/bundled-tools/clis/maggie_icon_glyph_check.py +382 -0
  72. package/bundled-tools/clis/maggie_icon_release_gate.py +28 -1
  73. package/bundled-tools/clis/maggie_localization.py +5 -0
  74. package/bundled-tools/clis/maggie_marketing_run.py +272 -0
  75. package/bundled-tools/clis/maggie_marketplace.py +199 -5
  76. package/bundled-tools/clis/maggie_notifications.py +528 -0
  77. package/bundled-tools/clis/maggie_ops.py +87 -0
  78. package/bundled-tools/clis/maggie_palette.py +280 -0
  79. package/bundled-tools/clis/maggie_qa_workflow.py +156 -1
  80. package/bundled-tools/clis/maggie_schedule.py +12 -2
  81. package/bundled-tools/clis/maggie_service_import.py +520 -0
  82. package/bundled-tools/clis/maggie_social_queue.py +442 -0
  83. package/bundled-tools/clis/maggie_social_share.py +46 -9
  84. package/bundled-tools/clis/maggie_template_package.py +1141 -0
  85. package/bundled-tools/runtime/google_ads.py +306 -0
  86. package/bundled-tools/runtime/google_capabilities.py +18 -2
  87. package/bundled-tools/runtime/google_remediation.py +152 -0
  88. package/package.json +1 -1
  89. package/references/browser-inspection.md +25 -0
  90. package/references/google-integrations-runbook.md +54 -0
  91. package/references/provider-adapter-contract.md +33 -0
package/README-zh-TW.md CHANGED
@@ -29,7 +29,7 @@ npx @topy-ai/maggie init --scope project --agent all
29
29
  npx @topy-ai/maggie doctor --scope project --project .
30
30
  ```
31
31
 
32
- 目前 release 是 `0.7.47`。本版處理 2026-09-26 五條新 feedback:project-scope
32
+ 目前 npm 版本為 `0.7.49`,完成 batch 27:33 條 2026-09-09 至 09-16 建立但從未提交的本機 feedback drafts,已逐條對照目前程式碼(其中兩條已被既有功能滿足)。新增離線 `maggie ops notifications`(通知 catalogue 合約、consent/retention/durable lead delivery 規則、provider template drift、只檢查變數名稱的 Resend preflight、queue health 門檻與 operator alerts、dry-run retention plan);`maggie localization email-matrix` 與 `maggie localization lifecycle`(locale 優先順序、未翻譯/缺漏 locale、變數與 HTML/text 一致、market CTA route、consent-aware 行銷 email 預設不發送);Deployment 的 `--keep-releases` 統一 retention policy、`auth-canary`、資料庫 owner 無法讀取 release 路徑時的 streamed migration、`collect` 單一 readiness report;Google failure remediation(`maggie ops google-diagnose`)與唯讀 `google-ads-preflight`/`google-ads-keyword-ideas`;Social Share `reconcile`(timeout 後不重複發文)、`maggie-marketing-run-v1` 合約、命名排程層與只管制對外發布的 regulated-content review;`maggie design icon-glyph-check`、`maggie design verify`、`maggie service import-stages-validate`/`import-readiness`/`fact-provenance`;以及 `--release-metadata` 版本一致性檢查、`maggie docs rollout-status` 與 stdin batch 輸入。前一版 `0.7.48` 處理 2026-10-10 的 27 條 hosted feedback(batch 26):Social Share 新增 `adapters`(每個 provider 一組 canonical OAuth scope,LinkedIn 不同 scope 會撤銷舊 token;共用 OAuth client 警告)、`connections`(撤銷或無法解密的 token 標為 `needs_reconnect`,偵測會過期的簽名頭像 URL)、`queue`(slot-based 排程:not-before、最新優先、campaign 輪流與每日上限、DST-safe)與 `campaigns`(idea stage Start gate);Deployment 新增 hash-only `secret-fingerprint`/`secret-parity`、`env-isolation`(本機 `.env` 指向 production database 時警告)、release retention 與 worker-before-enqueue 發布順序;QA 在未明確同意時阻擋對 production API 的寫入情境,並以 `maggie qa cors-preflight` 只用 OPTIONS 檢查每個 HTTP method;Design 新增 `pressable-check`、`layer-check`(Tailwind v4 unlayered CSS)、onboarding wizard/picker 模式與 `maggie-palette-roles-v1` palette generate/validate;Marketplace 加入 screenshot 完整性與像素預算、從 CSS 量測 palette、asset provenance、中性 `displayName`(全部模板已補齊)、template studio、`maggie-template-content-v1` 合約與圖片生成成本/無文字審查 gate;Booking 新增唯讀 Stripe live setup runbook 與 gift voucher lifecycle 合約(`maggie booking voucher-contract --ledger`);Feedback 新增 `improvement` 類型與 `maggie feedback session-summary`。MaggieDash 0.2.11 會保留尚未部署 template 的 outbox email 而不是 dead-letter,並從 ORA host 上游通用修正。本版也包含 Booking 十個 email events 合約與 CLI validator 同步及安全輸出的 `arrivalNote`。前一版 `0.7.47` 處理 2026-09-26 五條新 feedback:project-scope
33
33
  `maggie init` 會建立本地 memory store;context 預設只讀取本 project scope;memory hook
34
34
  在 local Python adapter 不存在時 fallback 到已安裝 CLI;重複 init 保留既有檔案與時間戳;
35
35
  `maggie feedback list` 的 `--project` 可放在子命令前或後。Generated VPS runner 現在記錄
@@ -113,7 +113,7 @@ structure drift 或重複 treatment product 時 fail closed。
113
113
  deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
114
114
  publish 與 production deployment 需要明確確認。
115
115
 
116
- 目前 source tree 的正式 release 是 `0.7.47`。本版完成 2026-09-24 booking feedback batch:Calendar grid/free-slot entry 與 host modal focus-restoration evidence。本版新增 Starter marketplace provisioning plan;本版完成 feedback batches 22、23:加入 declarative browser interaction evidence、design markup/style/content-key gate、compiler source anchoring、entity double-escape protection、`update --help` read-only、noindex hypothetical indexability、可過期 baseline acknowledgement、DOM-only link extraction regression,以及 MaggieDash 0.2.10 的 content override、短期 browser session、CDN-safe public-session cache contracts。authentication 和 isolated dev server 仍由 host 負責。`maggie-booking` workflow、傳統 email/password、Stripe、Resend、public booking flow 及既有安全邊界維持不變;provider-bound video generation 與 transactional delivery 仍記錄在 issue #39,前一批延後功能仍在 issue #38,不會直接成為 active memory。0.7.33 記錄並審查一筆更正回饋;確認 0.7.32 已正確處理 batch index,沒有修改已驗證的 shared behavior。0.7.32 加入 feedback 一基索引支援、MaggieDash panel 的 source/freshness/error evidence、Consent Mode 與實際 write/no-op reconciliation、SEO baseline recapture、sitemap origin rebasing、content-diff scope、migration ledger reconciliation、deployment credential preflight、release provenance/runtime preflight、icon release gate、opt-in blog auto-publish gate,以及 least-privilege VPS deployer。也修復 top-level `maggie feedback` dispatcher parity。0.7.31 加入 update 差異摘要、atomic installer copy、subset install manifest merge,以及 inventory drift 時 doctor non-zero。0.7.30 補上 feedback tracking issue closeout gate 與 batch 14/15 audit ledger。0.7.29 修正 npm package landing page 使用英文 README;0.7.28 加入 versioned Gemini model policy、明確 fallback 與 provenance、bundled-first CLI
116
+ 目前 npm 版本為 `0.7.49`,包含 batch 26、27 feedback 修正與 Booking email-template 合約/CLI validator 同步。本版完成 2026-09-24 booking feedback batch:Calendar grid/free-slot entry 與 host modal focus-restoration evidence。本版新增 Starter marketplace provisioning plan;本版完成 feedback batches 22、23:加入 declarative browser interaction evidence、design markup/style/content-key gate、compiler source anchoring、entity double-escape protection、`update --help` read-only、noindex hypothetical indexability、可過期 baseline acknowledgement、DOM-only link extraction regression,以及 MaggieDash 0.2.10 的 content override、短期 browser session、CDN-safe public-session cache contracts。authentication 和 isolated dev server 仍由 host 負責。`maggie-booking` workflow、傳統 email/password、Stripe、Resend、public booking flow 及既有安全邊界維持不變;provider-bound video generation 與 transactional delivery 仍記錄在 issue #39,前一批延後功能仍在 issue #38,不會直接成為 active memory。0.7.33 記錄並審查一筆更正回饋;確認 0.7.32 已正確處理 batch index,沒有修改已驗證的 shared behavior。0.7.32 加入 feedback 一基索引支援、MaggieDash panel 的 source/freshness/error evidence、Consent Mode 與實際 write/no-op reconciliation、SEO baseline recapture、sitemap origin rebasing、content-diff scope、migration ledger reconciliation、deployment credential preflight、release provenance/runtime preflight、icon release gate、opt-in blog auto-publish gate,以及 least-privilege VPS deployer。也修復 top-level `maggie feedback` dispatcher parity。0.7.31 加入 update 差異摘要、atomic installer copy、subset install manifest merge,以及 inventory drift 時 doctor non-zero。0.7.30 補上 feedback tracking issue closeout gate 與 batch 14/15 audit ledger。0.7.29 修正 npm package landing page 使用英文 README;0.7.28 加入 versioned Gemini model policy、明確 fallback 與 provenance、bundled-first CLI
117
117
  dispatch、`maggie --version`、feedback batch review 聚合與重複偵測、marketplace enrichment evidence、booking
118
118
  worker/resolver evidence,以及 read-only migration preflight。它也包含 host-owned mobile app surface contract、signed-in
119
119
  camera-state QA、直接 Astro route resolution、correlated feedback batch,以及
package/README.md CHANGED
@@ -89,14 +89,75 @@ Maggie keeps the existing project foundation and asks for decisions before
89
89
  shared routes, analytics, or publishing boundaries change. The current
90
90
  package ships 20 installable skills and a local-first MaggieDash foundation.
91
91
 
92
- The current release is `0.7.47`. Project initialization creates a local Maggie
93
- Memory store, memory contexts default to project scope, and the shared hook
94
- falls back to the installed CLI if project Python tools are absent. Repeated
95
- memory initialization preserves existing files and timestamps. Feedback list
96
- accepts `--project` before or after its subcommand. Generated VPS runners record
97
- their Maggie version and template fingerprint; deployment preflight warns on
98
- stale or unmarked runners, with `maggie deployment --check-runner PATH` for
99
- other locations.
92
+ This package is `0.7.49`. It closes batch 27: 33 local feedback
93
+ drafts from 2026-09-09 to 09-16 that were never submitted, reconciled against
94
+ the current code (two were already satisfied):
95
+
96
+ - Notifications: offline `maggie ops notifications` — catalogue contract with
97
+ consent, retention and durable lead-delivery rules, template drift against
98
+ paginated provider exports, Resend preflight by variable name, queue health
99
+ thresholds with operator alerts, and a dry-run retention plan.
100
+ - Email localization: `maggie localization email-matrix` (locale precedence,
101
+ untranslated/missing locales, variable and HTML/text parity, market CTA
102
+ routes) and `maggie localization lifecycle` (consent-aware marketing email
103
+ with a no-send default until approved).
104
+ - Deployment: one `--keep-releases` retention policy shared by plan, runner,
105
+ preflight and rollback evidence; `auth-canary` for role-scoped
106
+ authenticated API probes; streamed migrations for a database owner that
107
+ cannot read the release path; `collect` for one readiness report.
108
+ - Google: failure remediation (`maggie ops google-diagnose`) and read-only
109
+ `google-ads-preflight` / `google-ads-keyword-ideas`.
110
+ - Marketing: Social Share `reconcile` (no duplicate post after a timeout), the
111
+ `maggie-marketing-run-v1` contract, named schedule layers, and opt-in
112
+ regulated-content review that gates only external publication.
113
+ - Design and imports: `maggie design icon-glyph-check`, `maggie design
114
+ verify`, and `maggie service import-stages-validate`, `import-readiness`
115
+ and `fact-provenance`.
116
+ - Feedback and release: `validate_docs_freshness.py --release-metadata`,
117
+ `maggie docs rollout-status`, and stdin batch input.
118
+
119
+ The 0.7.48 release remains included: it processed the 27 hosted feedback
120
+ records of 2026-10-10 (batch 26) and added the Booking email-template
121
+ contract/CLI sync with escaped `arrivalNote` rendering:
122
+
123
+ - Social Share: `adapters` enforces one canonical OAuth scope set per provider
124
+ (LinkedIn revokes earlier tokens on a different scope set) and warns about
125
+ shared OAuth clients; `connections` marks revoked/undecryptable tokens
126
+ `needs_reconnect` and flags expiring signed avatar URLs; `queue` is a
127
+ deterministic slot-based planner (not-before times, newest-first queue,
128
+ campaign round-robin with daily limits, DST-safe); `campaigns` gates the
129
+ idea stage before Start.
130
+ - Deployment: hash-only `secret-fingerprint`/`secret-parity` across hosts,
131
+ `env-isolation` plus a preflight warning when local `.env` points at the
132
+ production database, documented release retention, and worker-before-enqueue
133
+ release ordering.
134
+ - QA: mutating scenarios are blocked against a production API without
135
+ explicit consent, and `maggie qa cors-preflight` checks every HTTP method with
136
+ OPTIONS only.
137
+ - Design: `pressable-check` (nested pressables on React Native Web),
138
+ `layer-check` (unlayered CSS overriding Tailwind v4 utilities), onboarding
139
+ wizard/picker patterns, and the `maggie-palette-roles-v1` contract with
140
+ `maggie design palette generate|validate`.
141
+ - Marketplace/template: package audits for screenshot integrity and pixel
142
+ budget, palettes measured from template CSS, asset provenance, and neutral
143
+ `displayName`s (all catalogue templates backfilled); a template studio
144
+ (viewport × palette with overflow check); the `maggie-template-content-v1`
145
+ contract; and image-generation cost reports with a no-text review gate.
146
+ - Booking: a read-only Stripe live-setup runbook and the provider-neutral gift
147
+ voucher lifecycle contract with `maggie booking voucher-contract --ledger`.
148
+ - Feedback: an `improvement` type (hosted as `feature` + `subtype`) and
149
+ `maggie feedback session-summary`.
150
+ - MaggieDash 0.2.11 holds outbox emails whose template is not yet deployed
151
+ instead of dead-lettering them, and upstreams generic fixes from the ORA host.
152
+
153
+ The 0.7.47 release remains included: project
154
+ initialization creates the repository's Maggie Memory store, memory context
155
+ uses project-scope entries by default, the shared memory hook falls back to
156
+ the installed CLI, repeated memory initialization preserves unchanged
157
+ files, and `maggie feedback list` accepts `--project` before or after the
158
+ subcommand. Generated VPS release runners also record their Maggie version and
159
+ template fingerprint; deployment preflight warns about stale or unmarked
160
+ runners, with `maggie deployment --check-runner PATH` for other locations.
100
161
 
101
162
  The 0.7.46 feedback batch remains included: capability-aware release profiles,
102
163
  bounded deployment-readiness retries, verified Google account/target evidence,
@@ -667,8 +728,8 @@ artifact schemas.
667
728
  Recommended upgrade sequence for the current release:
668
729
 
669
730
  ```bash
670
- npx @topy-ai/maggie@0.7.47 update --scope project --project . --force
671
- npx @topy-ai/maggie@0.7.47 cleanup --scope project --project .
731
+ npx @topy-ai/maggie@0.7.49 update --scope project --project . --force
732
+ npx @topy-ai/maggie@0.7.49 cleanup --scope project --project .
672
733
  ```
673
734
 
674
735
  Maintainers should pass npm credentials through the repository helper, never
@@ -873,11 +934,11 @@ delivery outbox. It shows redacted delivery state and sanitized errors through
873
934
  manages Maggie's server-side transactional delivery queue and audit trail; it
874
935
  does not replace Resend's own domain, audience, campaign, or analytics console.
875
936
 
876
- The Booking browser-evidence gate covers all 15 manager routes at mobile,
877
- tablet, and desktop viewports (45 required screens), including waitlist,
878
- locations, notifications, reports, and audit. A production release still
879
- requires an authenticated HTTPS capture with zero console, request, and
880
- layout errors.
937
+ The Booking browser-evidence gate covers all 17 manager routes at mobile,
938
+ tablet, and desktop viewports (51 required screens), including waitlist,
939
+ locations, notifications, email templates, reports, settings, and audit. A
940
+ production release still requires an authenticated HTTPS capture with zero
941
+ console, request, and layout errors.
881
942
 
882
943
  Compare an existing dashboard before replacing it:
883
944
 
package/bin/maggie.js CHANGED
@@ -99,6 +99,8 @@ Usage:
99
99
  maggie dash structure-validate --model FILE --evidence FILE
100
100
  maggie design progressive-check|css-check|css-cascade-check|style-check --evidence FILE
101
101
  maggie design dash-init|dash-validate|sample-init|sample-validate [options]
102
+ maggie design pressable-check|layer-check --project PATH
103
+ maggie design palette generate --canvas HEX --text HEX --accent HEX | palette validate --palette FILE
102
104
  maggie seo privacy-check --evidence FILE
103
105
  maggie content FILE --source PROVIDER --project PATH --confirm
104
106
  maggie agent-content write --url URL --allowed-origin ORIGIN --token-env ENV --payload FILE
@@ -128,6 +130,8 @@ Usage:
128
130
  maggie design app-validate --project PATH --plan PATH --runtime-evidence FILE --rendered-dir PATH --confirm
129
131
  maggie design icon-inventory --project PATH --source-dir src --runtime assets/icons.css --output docs/icon-inventory.json
130
132
  maggie design icon-release-gate --icon-report FILE --browser-report FILE --output FILE
133
+ maggie design icon-glyph-check (--base-url URL | --dist DIR) --route / --output FILE
134
+ maggie design verify JOB_ID (--base-url URL | --dist DIR) [--stage before|after] [--build-command CMD]
131
135
  maggie design author --project PATH --route /about --purpose TEXT --audience TEXT --confirm
132
136
  maggie design markup-check --html FILE [--require-content-keys]
133
137
  maggie design in-place --project PATH --route /pricing [--content-source PATH]
@@ -149,11 +153,18 @@ Usage:
149
153
  maggie service inspect --project PATH
150
154
  maggie service status --project PATH
151
155
  maggie service orchestration-validate --project PATH --manifest FILE
156
+ maggie service import-stages-validate --project PATH --manifest FILE
157
+ maggie service import-readiness --project PATH [--python-module M] [--browser] [--webdriver] [--env NAME] [--country LABEL]
158
+ maggie service fact-provenance --project PATH --facts FILE [--output FILE]
152
159
  maggie service convert-page <page-path> --project PATH
153
160
  maggie service match-pages --project PATH --pages-dir src/pages
154
161
  maggie deployment --project PATH --target vps-with-cloudflare-dns
155
162
  maggie deployment worker-secrets --project PATH --environment staging --required RESEND_API_KEY
163
+ maggie deployment secret-parity --manifest api-1.json --manifest api-2.json --required KEY
164
+ maggie deployment env-isolation --project PATH --production-env .env.production
156
165
  maggie deployment readiness --project PATH
166
+ maggie deployment collect --project PATH --config .maggie/deployment/collector.json
167
+ maggie deployment auth-canary --plan auth-canary-plan.json [--allow-mutations] --output FILE
157
168
  maggie deployment parity --project PATH --evidence FILE --output FILE
158
169
  maggie deployment canary --project PATH --asset URL=SHA256 --render-report report.json --output docs/deployment-canary.json
159
170
  maggie deployment release-manifest --evidence FILE --output FILE
@@ -173,10 +184,10 @@ Usage:
173
184
  maggie release PATH --profile .maggie/release-profile.json --environment staging --target vps-with-cloudflare-dns
174
185
  maggie api lifecycle --project PATH [--execute --allow-quota]
175
186
  maggie memory <init|list|search|context|add|record-error|transition|export> --project PATH
176
- maggie localization <extract|plan|generate|preview|validate|review|publish|stale|glossary> [options]
187
+ maggie localization <extract|plan|generate|preview|validate|review|publish|stale|glossary|email-matrix|lifecycle> [options]
177
188
  maggie seo performance|images|sitemap|indexnow|social-cards|head-tags [options] (sitemap supports strict validate and agent-files)
178
- maggie feedback <collect|preview|batch|batch-review|submit|list> [options]
179
- maggie qa <start|record|summary|export|assertion-audit> [options]
189
+ maggie feedback <collect|preview|batch|batch-review|session-summary|submit|list> [options]
190
+ maggie qa <start|record|summary|export|assertion-audit|cors-preflight> [options]
180
191
  maggie site-audit URL [--crawl] [--access-log FILE] [--require-sitemap-request] [--languages en-GB,es-MX,ja-JP] [--check-hreflang] [--check-internal-links]
181
192
  maggie site-audit URL --crawl --save-baseline FILE --reviewer NAME
182
193
  maggie site-audit URL --crawl --baseline FILE [--reason-all REASON]
@@ -184,6 +195,9 @@ Usage:
184
195
  maggie verification coverage --contract FILE --evidence FILE
185
196
  maggie ops audit|preflight|verify|lockfiles|seed-manifest|google-capabilities|favicon-check --project PATH
186
197
  maggie ops google-capabilities --project PATH --report FILE [--output FILE]
198
+ maggie ops google-diagnose --code CODE [--reason TEXT] [--http-status N] [--provider P]
199
+ maggie ops google-ads-preflight|google-ads-keyword-ideas --customer-id ID [--login-customer-id ID]
200
+ maggie ops notifications catalogue|templates|preflight|health|retention|alerts --project PATH ...
187
201
  maggie ops preflight --project PATH --write
188
202
 
189
203
  Examples:
@@ -584,16 +598,17 @@ function marketplace(args) {
584
598
 
585
599
  function service(args) {
586
600
  const root = projectRoot(args);
587
- const scriptName = args[0] === "orchestration-validate" ? "maggie_service_onboarding.py" : "maggie_service_booking.py";
601
+ const importCommands = ["import-stages-validate", "import-readiness", "fact-provenance"];
602
+ const scriptName = args[0] === "orchestration-validate" ? "maggie_service_onboarding.py" : importCommands.includes(args[0]) ? "maggie_service_import.py" : "maggie_service_booking.py";
588
603
  const script = toolScript(scriptName, root);
589
604
  if (!existsSync(script)) throw new Error(`service booking CLI is missing: ${script}`);
590
- const result = spawnSync("python3", [script, ...args], { stdio: "inherit", cwd: root, env: { ...process.env, MAGGIE_VERSION: PACKAGE_VERSION } });
605
+ const result = spawnSync("python3", [script, ...(scriptName === "maggie_service_onboarding.py" ? args.slice(1) : args)], { stdio: "inherit", cwd: root, env: { ...process.env, MAGGIE_VERSION: PACKAGE_VERSION } });
591
606
  if (result.error) throw result.error;
592
607
  process.exitCode = result.status ?? 1;
593
608
  }
594
609
 
595
610
  function docs(args) {
596
- if (args[0] && args[0] !== "audit") throw new Error("docs command must be audit");
611
+ if (args[0] && !["audit", "rollout-status"].includes(args[0])) throw new Error("docs command must be audit or rollout-status");
597
612
  workflowCli("maggie_docs.py", args);
598
613
  }
599
614
 
@@ -763,6 +778,8 @@ try {
763
778
  else if (command === "ops") workflowCli("maggie_ops.py", args);
764
779
  else if (command === "deployment" && args[0] === "canary") workflowCli("maggie_deployment_canary.py", args.slice(1));
765
780
  else if (command === "deployment" && args[0] === "readiness") workflowCli("maggie_deployment_readiness.py", args.slice(1));
781
+ else if (command === "deployment" && args[0] === "auth-canary") workflowCli("maggie_deployment_auth_canary.py", args.slice(1));
782
+ else if (command === "deployment" && args[0] === "collect") workflowCli("maggie_deployment_collect.py", args.slice(1));
766
783
  else if (command === "deployment" && args[0] === "parity") workflowCli("maggie_deployment_parity.py", args.slice(1));
767
784
  else if (command === "deployment" && args[0] === "release-manifest") workflowCli("maggie_release_manifest.py", args.slice(1));
768
785
  else if (command === "deployment" && args[0] === "runtime-preflight") workflowCli("maggie_runtime_preflight.py", args.slice(1));
@@ -36,7 +36,8 @@
36
36
  "productRole": {"type": "string", "minLength": 1, "maxLength": 200},
37
37
  "evidence": {"$ref": "#/$defs/evidence"},
38
38
  "capabilities": {"$ref": "#/$defs/capabilities"},
39
- "nextAction": {"type": "string", "minLength": 1, "maxLength": 500}
39
+ "nextAction": {"type": "string", "minLength": 1, "maxLength": 500},
40
+ "failure": {"description": "Optional redacted provider failure: error code/reason and HTTP status only. The validator maps it to one prerequisite and safe next action and never echoes it.", "type": "object", "additionalProperties": false, "minProperties": 1, "properties": {"code": {"type": "string", "maxLength": 300}, "reason": {"type": "string", "maxLength": 300}, "httpStatus": {"type": "integer", "minimum": 100, "maximum": 599}}}
40
41
  }
41
42
  },
42
43
  "verifiedRef": {
@@ -0,0 +1,89 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-content/email-localization-v1.schema.json",
4
+ "title": "Maggie localized email template manifest v1",
5
+ "description": "Template matrix checked by `maggie localization email-matrix`. Structural shape only; the CLI enforces locale precedence, variable preservation, HTML/plain-text parity, market routes, untranslated values and approval.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "sourceLocale", "locales", "templates"],
8
+ "properties": {
9
+ "schemaVersion": {"const": "maggie-email-localization.v1"},
10
+ "sourceLocale": {"type": "string", "minLength": 2},
11
+ "locales": {"type": "array", "items": {"type": "string"}, "minItems": 1, "uniqueItems": true},
12
+ "markets": {
13
+ "type": "object",
14
+ "additionalProperties": {
15
+ "type": "object",
16
+ "properties": {
17
+ "locales": {"type": "array", "items": {"type": "string"}},
18
+ "routePrefix": {"type": "string", "pattern": "^/"}
19
+ }
20
+ }
21
+ },
22
+ "glossary": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "object",
26
+ "required": ["term", "locale", "translation"],
27
+ "properties": {"term": {"type": "string"}, "locale": {"type": "string"}, "translation": {"type": "string"}}
28
+ }
29
+ },
30
+ "templates": {
31
+ "type": "array",
32
+ "minItems": 1,
33
+ "items": {
34
+ "type": "object",
35
+ "required": ["id", "category", "variables", "localeResolution", "locales"],
36
+ "properties": {
37
+ "id": {"type": "string", "minLength": 1},
38
+ "category": {"enum": ["transactional", "support", "marketing"]},
39
+ "variables": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
40
+ "localeResolution": {
41
+ "type": "array",
42
+ "items": {"enum": ["user", "market", "account", "fallback"]},
43
+ "minItems": 1,
44
+ "uniqueItems": true
45
+ },
46
+ "requiredLocales": {"type": "array", "items": {"type": "string"}},
47
+ "cta": {"type": "object", "properties": {"route": {"type": "string"}}},
48
+ "fixtures": {"type": "object", "description": "Synthetic preview values only; never customer data."},
49
+ "locales": {
50
+ "type": "object",
51
+ "additionalProperties": {
52
+ "type": "object",
53
+ "required": ["subject", "html", "text"],
54
+ "properties": {
55
+ "subject": {"type": "string"},
56
+ "html": {"type": "string"},
57
+ "text": {"type": "string"},
58
+ "ctaRoute": {"type": "string"},
59
+ "market": {"type": "string"},
60
+ "approval": {
61
+ "type": "object",
62
+ "properties": {
63
+ "status": {"enum": ["pending", "approved", "rejected"]},
64
+ "reviewer": {"type": "string"},
65
+ "approvedAt": {"type": "string", "format": "date-time"}
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ },
74
+ "callSites": {
75
+ "type": "array",
76
+ "description": "Where the host sends each template and how it resolves the locale.",
77
+ "items": {
78
+ "type": "object",
79
+ "required": ["template", "localeSource"],
80
+ "properties": {
81
+ "id": {"type": "string"},
82
+ "template": {"type": "string"},
83
+ "path": {"enum": ["fulfilment", "outbox", "direct", "preview"]},
84
+ "localeSource": {"enum": ["resolved", "user", "market", "account", "fallback", "accept-language", "hard-coded"]}
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://maggie.noblox.app/contracts/maggie-content/lifecycle-email-v1.schema.json",
4
+ "title": "Maggie consent-aware lifecycle email plan v1",
5
+ "description": "Plan validated by `maggie localization lifecycle`. Nothing is sendable until approved; the host owns audience data, consent records, delivery and reporting. Maggie never sends.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "stages", "defaults", "templates"],
8
+ "properties": {
9
+ "schemaVersion": {"const": "maggie-lifecycle-email.v1"},
10
+ "stages": {"const": ["plan", "segment", "consent-check", "preview", "approve", "schedule", "send", "report"]},
11
+ "defaults": {"type": "object", "required": ["send"], "properties": {"send": {"const": "disabled"}}},
12
+ "templates": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "object",
16
+ "required": ["id", "kind", "category", "frequency", "sendable"],
17
+ "properties": {
18
+ "id": {"type": "string", "minLength": 1},
19
+ "kind": {"enum": ["opt-in-confirmation", "welcome", "digest", "recommendation", "gift-follow-up", "voucher-follow-up", "waitlist-follow-up", "merchant-lead-digest", "campaign-announcement", "re-engagement"]},
20
+ "category": {"enum": ["transactional", "support", "marketing"]},
21
+ "consent": {
22
+ "type": "object",
23
+ "properties": {
24
+ "basis": {"enum": ["opt-in", "double-opt-in", "soft-opt-in", "legitimate-interest-b2b"]},
25
+ "category": {"type": "string"}
26
+ }
27
+ },
28
+ "unsubscribe": {"type": "object", "properties": {"path": {"type": "string"}}},
29
+ "preferenceCentre": {"type": "string"},
30
+ "frequency": {
31
+ "type": "object",
32
+ "required": ["maxPerWindow", "window"],
33
+ "properties": {"maxPerWindow": {"type": "integer", "minimum": 1}, "window": {"type": "string", "description": "ISO 8601 duration, e.g. P7D"}}
34
+ },
35
+ "attribution": {"type": "object", "properties": {"fields": {"type": "array", "items": {"type": "string"}}}},
36
+ "approval": {"$ref": "#/$defs/approval"},
37
+ "sendable": {"type": "boolean"}
38
+ }
39
+ }
40
+ },
41
+ "campaigns": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "object",
45
+ "required": ["id", "templates", "audience", "sendable"],
46
+ "properties": {
47
+ "id": {"type": "string"},
48
+ "templates": {"type": "array", "items": {"type": "string"}},
49
+ "audience": {
50
+ "type": "object",
51
+ "properties": {
52
+ "segment": {"type": "string"},
53
+ "requiresConsent": {"type": "boolean"},
54
+ "suppression": {"type": "boolean"},
55
+ "dedupe": {"type": "string"}
56
+ }
57
+ },
58
+ "schedule": {"type": "object"},
59
+ "approval": {"$ref": "#/$defs/approval"},
60
+ "sendable": {"type": "boolean"},
61
+ "report": {"type": "object", "properties": {"metrics": {"type": "array", "items": {"type": "string"}}}}
62
+ }
63
+ }
64
+ }
65
+ },
66
+ "$defs": {
67
+ "approval": {
68
+ "type": "object",
69
+ "properties": {
70
+ "status": {"enum": ["pending", "approved", "rejected"]},
71
+ "reviewer": {"type": "string"},
72
+ "approvedAt": {"type": "string", "format": "date-time"}
73
+ }
74
+ }
75
+ }
76
+ }
@@ -7,6 +7,7 @@
7
7
  "properties": {
8
8
  "schemaVersion": {"const": "maggie-deployment-readiness.v1"},
9
9
  "status": {"enum": ["passed", "failed", "inconclusive"]},
10
+ "collector": {"type": "object", "description": "present when produced by maggie deployment collect: config fingerprint, release, and per-adapter run metadata"},
10
11
  "checks": {
11
12
  "type": "object",
12
13
  "required": ["unitRegression", "packageSmoke", "browserEvidence", "renderedCanary", "deploymentPreflight"],
@@ -17,7 +18,11 @@
17
18
  "browserEvidence": {"$ref": "#/$defs/check"},
18
19
  "renderedCanary": {"$ref": "#/$defs/check"},
19
20
  "deploymentPreflight": {"$ref": "#/$defs/check"},
20
- "runtimeParity": {"$ref": "#/$defs/check"}
21
+ "runtimeParity": {"$ref": "#/$defs/check"},
22
+ "hostHealth": {"$ref": "#/$defs/check"},
23
+ "releaseIdentity": {"$ref": "#/$defs/check"},
24
+ "rollbackEvidence": {"$ref": "#/$defs/check"},
25
+ "authenticatedCanary": {"$ref": "#/$defs/check"}
21
26
  }
22
27
  }
23
28
  },
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/contracts/maggie-design/palette-roles-v1.schema.json",
4
+ "title": "Maggie template palette role contract",
5
+ "description": "Semantic colour roles for one template: its signature palette plus derived, contrast-safe variants. Generated and validated by `maggie design palette`. Contrast rules (text, accentText and onAccent at 4.5:1) and the variant accent saturation cap are enforced by `maggie design palette validate`, not by this schema.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schemaVersion", "template", "signature", "variants"],
9
+ "properties": {
10
+ "schemaVersion": { "const": "maggie-palette-roles-v1" },
11
+ "template": { "type": ["string", "null"] },
12
+ "signature": {
13
+ "allOf": [
14
+ { "$ref": "#/$defs/palette" },
15
+ { "properties": { "id": { "const": "signature" } } }
16
+ ]
17
+ },
18
+ "variants": { "type": "array", "items": { "$ref": "#/$defs/palette" } }
19
+ },
20
+ "$defs": {
21
+ "hex": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" },
22
+ "palette": {
23
+ "type": "object",
24
+ "required": ["id", "name", "roles"],
25
+ "properties": {
26
+ "id": { "type": "string", "minLength": 1 },
27
+ "name": { "type": "string", "minLength": 1 },
28
+ "roles": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["canvas", "panel", "soft", "text", "accent", "accentText", "onAccent", "dark", "deep"],
32
+ "properties": {
33
+ "canvas": { "$ref": "#/$defs/hex", "description": "Page background." },
34
+ "panel": { "$ref": "#/$defs/hex", "description": "Cards and raised surfaces; body text must pass on it." },
35
+ "soft": { "$ref": "#/$defs/hex", "description": "Tinted band or chip background; not for long body copy." },
36
+ "text": { "$ref": "#/$defs/hex", "description": "Body text on canvas and panel." },
37
+ "accent": { "$ref": "#/$defs/hex", "description": "Buttons and highlights (fills)." },
38
+ "accentText": { "$ref": "#/$defs/hex", "description": "Accent-coloured text and links on canvas." },
39
+ "onAccent": { "$ref": "#/$defs/hex", "description": "Text placed on an accent fill." },
40
+ "dark": { "$ref": "#/$defs/hex", "description": "Dark band background." },
41
+ "deep": { "$ref": "#/$defs/hex", "description": "Deepest band, footer or overlay." }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/contracts/maggie-marketplace/template-content-v1.schema.json",
4
+ "title": "Maggie template content contract",
5
+ "description": "Neutral business content a marketplace template renders when exported as a data-driven component, so one design serves many businesses from their own data. Palette roles come from maggie-palette-roles-v1 and are emitted as --maggie-<role> CSS variables. Business rules (sample paths resolve, reviews carry a source or sample=true, hours are HH:MM) are enforced by `maggie_marketplace.py content-validate`.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "brand", "contact", "hero", "categories", "about", "gallery", "reviews", "hours", "faqs"],
8
+ "properties": {
9
+ "schemaVersion": { "const": "maggie-template-content-v1" },
10
+ "brand": {
11
+ "type": "object",
12
+ "required": ["name"],
13
+ "properties": {
14
+ "name": { "type": "string", "minLength": 1 },
15
+ "tagline": { "type": ["string", "null"] },
16
+ "logo": { "$ref": "#/$defs/image" }
17
+ }
18
+ },
19
+ "contact": {
20
+ "type": "object",
21
+ "properties": {
22
+ "phone": { "type": ["string", "null"] },
23
+ "email": { "type": ["string", "null"] },
24
+ "address": { "type": ["string", "null"] },
25
+ "bookingUrl": { "type": ["string", "null"] }
26
+ }
27
+ },
28
+ "hero": {
29
+ "type": "object",
30
+ "required": ["headline"],
31
+ "properties": {
32
+ "headline": { "type": "string", "minLength": 1 },
33
+ "subheadline": { "type": ["string", "null"] },
34
+ "image": { "$ref": "#/$defs/image" },
35
+ "cta": { "type": "object", "properties": { "label": { "type": "string" }, "href": { "type": "string" } } }
36
+ }
37
+ },
38
+ "categories": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "object",
42
+ "required": ["name", "services"],
43
+ "properties": {
44
+ "name": { "type": "string", "minLength": 1 },
45
+ "description": { "type": ["string", "null"] },
46
+ "services": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "object",
50
+ "required": ["name"],
51
+ "properties": {
52
+ "name": { "type": "string", "minLength": 1 },
53
+ "description": { "type": ["string", "null"] },
54
+ "price": { "type": ["number", "null"], "minimum": 0 },
55
+ "currency": { "type": "string", "default": "GBP" },
56
+ "durationMinutes": { "type": ["integer", "null"], "minimum": 1 },
57
+ "bookingRef": { "type": ["string", "null"], "description": "Host booking/catalogue identifier, e.g. a MaggieDash Booking service id." }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "about": { "type": "object", "properties": { "heading": { "type": ["string", "null"] }, "body": { "type": ["string", "null"] }, "image": { "$ref": "#/$defs/image" } } },
65
+ "gallery": { "type": "array", "items": { "$ref": "#/$defs/image" } },
66
+ "reviews": {
67
+ "type": "array",
68
+ "items": {
69
+ "type": "object",
70
+ "required": ["quote"],
71
+ "properties": {
72
+ "quote": { "type": "string" },
73
+ "author": { "type": ["string", "null"] },
74
+ "rating": { "type": ["number", "null"], "minimum": 0, "maximum": 5 },
75
+ "source": { "type": ["string", "null"], "description": "Where the real review came from; required unless sample is true." },
76
+ "sample": { "type": "boolean" }
77
+ }
78
+ }
79
+ },
80
+ "hours": {
81
+ "type": "array",
82
+ "items": {
83
+ "type": "object",
84
+ "required": ["day"],
85
+ "properties": {
86
+ "day": { "enum": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"] },
87
+ "opens": { "type": "string", "pattern": "^\\d{2}:\\d{2}$" },
88
+ "closes": { "type": "string", "pattern": "^\\d{2}:\\d{2}$" },
89
+ "closed": { "type": "boolean" }
90
+ }
91
+ }
92
+ },
93
+ "faqs": { "type": "array", "items": { "type": "object", "required": ["question", "answer"], "properties": { "question": { "type": "string" }, "answer": { "type": "string" } } } },
94
+ "samples": { "type": "array", "items": { "type": "string" }, "description": "Dotted content paths that still hold template sample copy the owner must replace (e.g. hero.headline, reviews.0)." },
95
+ "palette": { "type": "object", "description": "One maggie-palette-roles-v1 palette (id, name, roles)." }
96
+ },
97
+ "$defs": {
98
+ "image": {
99
+ "type": ["object", "null"],
100
+ "properties": { "src": { "type": "string" }, "alt": { "type": "string" } }
101
+ }
102
+ }
103
+ }