@topy-ai/maggie 0.7.50 → 0.7.52

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 (34) hide show
  1. package/README-zh-TW.md +3 -3
  2. package/README.md +61 -8
  3. package/bin/maggie.js +17 -3
  4. package/bundled-contracts/maggie-assistant-tools/tool-registry-example-v1.json +19 -0
  5. package/bundled-contracts/maggie-assistant-tools/tool-registry-v1.schema.json +50 -0
  6. package/bundled-contracts/maggie-deployment/bridge-host-example-v1.json +29 -0
  7. package/bundled-contracts/maggie-design/mobile-app-evidence-v1.schema.json +54 -0
  8. package/bundled-contracts/maggie-design/mobile-app-surface-v1.schema.json +137 -16
  9. package/bundled-skills/catalog.json +8 -0
  10. package/bundled-skills/maggie-assistant-tools/SKILL.md +93 -0
  11. package/bundled-skills/maggie-assistant-tools/references/approvals-and-audit.md +54 -0
  12. package/bundled-skills/maggie-assistant-tools/references/bridge-host.md +56 -0
  13. package/bundled-skills/maggie-assistant-tools/references/product-release.md +57 -0
  14. package/bundled-skills/maggie-deployment/SKILL.md +13 -0
  15. package/bundled-skills/maggie-design/SKILL.md +68 -21
  16. package/bundled-skills/maggie-design/references/app-ui-patterns.md +66 -0
  17. package/bundled-skills/maggie-feedback/SKILL.md +20 -3
  18. package/bundled-skills/maggie-marketplace/SKILL.md +28 -0
  19. package/bundled-skills/maggie-mobile-app/SKILL.md +139 -0
  20. package/bundled-skills/maggie-qa-workflow/SKILL.md +30 -0
  21. package/bundled-tools/clis/maggie_app_collect.py +236 -0
  22. package/bundled-tools/clis/maggie_assistant_tools.py +302 -0
  23. package/bundled-tools/clis/maggie_bridge_host.py +212 -0
  24. package/bundled-tools/clis/maggie_design.py +193 -30
  25. package/bundled-tools/clis/maggie_design_lint.py +68 -1
  26. package/bundled-tools/clis/maggie_feedback.py +89 -37
  27. package/bundled-tools/clis/maggie_mobile.py +235 -0
  28. package/bundled-tools/clis/maggie_product_release.py +303 -0
  29. package/bundled-tools/clis/maggie_qa_app_preflight.py +248 -0
  30. package/bundled-tools/clis/maggie_qa_workflow.py +5 -0
  31. package/bundled-tools/clis/maggie_skill_catalog.py +262 -0
  32. package/bundled-tools/runtime/assistant_approval.py +111 -0
  33. package/bundled-tools/runtime/cdp_client.py +246 -0
  34. package/package.json +1 -1
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
- 目前 npm 版本為 `0.7.50`:`maggie update` 改為 idempotent,內容已與套件相同的檔案不再改寫(保留時間戳),摘要分別列出 changed/unchanged/preserved 數量,只有真的保留了本機修改時才顯示 preserved 提示。前一版 `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
32
+ 目前 npm 版本為 `0.7.52`:加入三項 mobile lane 後續修正——`maggie mobile preflight` 會在 non-interactive `eas update` script 缺少 `--environment` 時失敗,並在 build 後修改 `eas.json` 可能改變 fingerprint(OTA 更新會無聲地送不到該 build)時警告;`maggie mobile plan` 一律帶 `--environment`,每次 update 前先跑 `eas fingerprint:compare`;新增 `maggie design safe-area-check`,標出 iOS modal route 與 React Native `<Modal>` 內的 `<SafeAreaView>`(可能量到 0 的 top inset)。前一版 `0.7.51` 完成 batch 28:17 條 hosted feedback,來自一個跨平台產品開發 session(同一套 Expo 程式碼支援 web、iOS、Android,加上具備 MCP 與 ChatGPT/Claude app 的 AI 助理、產品自己的 CLI/MCP 套件、第三方 skills catalog 以及多租戶 assistant bridge host)。`maggie design app-validate` 改讀每個 viewport 的 evidence(scroll owner、固定 header/footer),只有 `app-init --pane list-detail:1024:2` 宣告的多欄版面才允許多個 scroll owner,並以 PNG 實際尺寸對照 plan viewport;`app-init --capabilities none|camera,…`(或 `--camera none`)讓非相機頁面不必填相機狀態,`--pattern` 加入新的 app UI patterns 驗收規則。新增 `maggie design app-collect`:在同一個瀏覽器分頁逐一以真實尺寸渲染已登入的 app 路由、略過 React Native Web 的包裝層計算 scroll owner、證明固定 shell,並寫出 `runtime-evidence.json` 與截圖(可 `--cdp-url` 接上已登入的 Chrome,或用專用 QA profile,`--read-only` 阻擋寫入)。新增 `maggie qa app-preflight`:偵測以 `CI=1` 或從錯誤資料夾啟動的 Metro/Expo dev server,並對會輪替的 refresh token 與連到 production API 的本機 server 發出警告。新增 `maggie-mobile-app` skill 與 `maggie mobile preflight|plan`(EAS build profile、TestFlight / Play 內部測試、EAS Update channel 與 fingerprint runtime policy、上架審核規則、建置前成本提示;`--auto-submit` 缺 `ascAppId` 或 `appVersion` policy 配上 remote build number 時在花費額度前就失敗)。新增 `maggie-assistant-tools` skill 與 `maggie assistant`(單一 tool registry、風險等級與 gate、與 model description 分開的使用者文案、由風險推導 MCP annotations、自動產生「助理能做與不能做」頁面、audit 檢查與簽章一次性 approval token 參考實作)。新增 `maggie product release-check|smoke|mcp-check|review-status`(產品 npm CLI/MCP 套件 metadata、`server.json`/`mcpName`、打包檔案機密掃描、安裝後 binary smoke、OAuth protected-resource metadata、ChatGPT/Claude/商店審核追蹤)、`maggie skills scaffold|validate|package|smoke`(第三方 skills catalog 打包成分類 plugin、all-in-one plugin 與 Claude Code `marketplace.json`)、`maggie deployment bridge-plan|bridge-collect-script|bridge-check`(多租戶 bridge host);`maggie feedback session-summary` 支援多個 repo 與一般句子形式的 commit。MaggieDash 0.2.12 從 ORA host 上游通用修正。前一版 `0.7.50`:`maggie update` 改為 idempotent,內容已與套件相同的檔案不再改寫(保留時間戳),摘要分別列出 changed/unchanged/preserved 數量,只有真的保留了本機修改時才顯示 preserved 提示。前一版 `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
- 目前 npm 版本為 `0.7.50`,包含 batch 26、27 feedback 修正與 idempotent `maggie update`與 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
116
+ 目前 npm 版本為 `0.7.52`,包含 batch 28 產品 app、assistant tools、mobile、product release、skills catalog 與 bridge host 功能、batch 26、27 feedback 修正與 idempotent `maggie update`與 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,以及
@@ -265,6 +265,6 @@ maggie service retirement-audit --project . \
265
265
  --evidence .maggie/booking/retirement-evidence.json
266
266
  ```
267
267
 
268
- 完整中文說明、20 個 skills 清單和 roadmap:
268
+ 完整中文說明、22 個 skills 清單和 roadmap:
269
269
  [繁體中文 README](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/README.zh-TW.md)
270
270
  · [Roadmap](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/ROADMAP.md)
package/README.md CHANGED
@@ -87,9 +87,62 @@ Then invoke the installed skills from your coding agent, for example:
87
87
 
88
88
  Maggie keeps the existing project foundation and asks for decisions before
89
89
  shared routes, analytics, or publishing boundaries change. The current
90
- package ships 20 installable skills and a local-first MaggieDash foundation.
91
-
92
- This package is `0.7.50`. `0.7.50` makes `maggie update` idempotent: files whose content already
90
+ package ships 22 installable skills and a local-first MaggieDash foundation.
91
+
92
+ This package is `0.7.52`. It adds three follow-ups to the mobile
93
+ lane that arrived during the 0.7.51 release: `maggie mobile preflight` fails
94
+ on non-interactive `eas update` scripts without `--environment` and warns
95
+ when `eas.json` can change the fingerprint after a build (OTA updates would
96
+ silently stop reaching it); `maggie mobile plan` always sets `--environment`
97
+ and gates every update on `eas fingerprint:compare`; and the new
98
+ `maggie design safe-area-check` flags `<SafeAreaView>` inside iOS modal routes
99
+ and React Native `<Modal>`, where it can measure a 0 top inset.
100
+
101
+ The 0.7.51 release closed batch 28: 17 hosted feedback
102
+ records from a cross-platform product session (one Expo codebase for web,
103
+ iOS and Android, an assistant with MCP and ChatGPT/Claude app surfaces,
104
+ product CLI/MCP packages, a third-party skills catalog, and a multi-tenant
105
+ assistant bridge host):
106
+
107
+ - App surfaces: `maggie design app-validate` reads per-viewport evidence
108
+ (scroll owners, fixed shell), accepts extra scroll owners only where
109
+ `app-init --pane list-detail:1024:2` declares them, and checks each PNG's
110
+ real size against the plan viewport. `app-init --capabilities none|camera,…`
111
+ (or `--camera none`) drops irrelevant device states, and `--pattern` adds
112
+ acceptance rules from the new [app UI patterns](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/skills/maggie-design/references/app-ui-patterns.md).
113
+ - New `maggie design app-collect`: renders a signed-in app route one viewport
114
+ at a time in one browser tab at the real size, counts scroll owners while
115
+ skipping React Native Web wrappers, proves the fixed shell, and writes
116
+ `runtime-evidence.json` plus screenshots. It can attach to your signed-in
117
+ Chrome (`--cdp-url`) or use a QA profile, and can block writes (`--read-only`).
118
+ - New `maggie qa app-preflight`: catches Metro/Expo dev servers started with
119
+ `CI=1` or from the wrong folder, and warns about rotating refresh tokens and
120
+ local servers that talk to production APIs.
121
+ - New [`maggie-mobile-app`](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/skills/maggie-mobile-app/SKILL.md) skill and
122
+ `maggie mobile preflight|plan`: EAS build profiles, TestFlight / Play
123
+ internal testing, EAS Update channels and the fingerprint runtime policy,
124
+ store-review rules, and a cost notice. It fails before quota is spent when
125
+ `--auto-submit` lacks `ascAppId` or `appVersion` runtime policy is combined
126
+ with remote build numbers.
127
+ - New [`maggie-assistant-tools`](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/skills/maggie-assistant-tools/SKILL.md)
128
+ skill and `maggie assistant`: one tool registry with risk levels, gates and
129
+ user-facing copy kept apart from model descriptions, MCP annotations derived
130
+ from risk, a generated "what the assistant can and can't do" page, audit
131
+ checks, and reference signed one-time approval tokens.
132
+ - New `maggie product release-check|smoke|mcp-check|review-status` for a
133
+ product's own npm CLI and MCP packages (metadata, `server.json`/`mcpName`,
134
+ packed-file secret scan, installed-binary smoke, OAuth protected-resource
135
+ metadata, ChatGPT/Claude/store review tracking).
136
+ - New `maggie skills scaffold|validate|package|smoke` for third-party skill
137
+ catalogs, packaging category plugins, an all-in-one plugin and a Claude Code
138
+ `marketplace.json` (checked with `claude plugin validate`).
139
+ - New `maggie deployment bridge-plan|bridge-collect-script|bridge-check` for a
140
+ multi-tenant assistant bridge host on a VPS.
141
+ - `maggie feedback session-summary` reads several repositories
142
+ (`--repo app=../app --since-date …`) and classifies plain commit subjects.
143
+ - MaggieDash 0.2.12 upstreams generic fixes from the ORA host.
144
+
145
+ The 0.7.50 release made `maggie update` idempotent: files whose content already
93
146
  matches the package are left untouched (timestamps included) and counted as
94
147
  unchanged, the summary reports changed/unchanged/preserved counts, and the
95
148
  "local files were preserved" notice appears only when a file was actually
@@ -734,8 +787,8 @@ artifact schemas.
734
787
  Recommended upgrade sequence for the current release:
735
788
 
736
789
  ```bash
737
- npx @topy-ai/maggie@0.7.50 update --scope project --project . --force
738
- npx @topy-ai/maggie@0.7.50 cleanup --scope project --project .
790
+ npx @topy-ai/maggie@0.7.52 update --scope project --project . --force
791
+ npx @topy-ai/maggie@0.7.52 cleanup --scope project --project .
739
792
  ```
740
793
 
741
794
  Maintainers should pass npm credentials through the repository helper, never
@@ -1241,13 +1294,13 @@ repairs with `maggie dash sections validate`, `fanout-validate`,
1241
1294
  `maggie dash inventory` to classify published pages once into disjoint kinds.
1242
1295
  See the [quality contract examples](https://github.com/TOPY-AI-LTD/ai-cmo-skills/blob/main/contracts/maggiedash/quality-contracts.md).
1243
1296
 
1244
- The package includes all 20 installable skills: `maggie-blog-bootstrap`,
1297
+ The package includes all 22 installable skills: `maggie-blog-bootstrap`,
1245
1298
  `maggie-dash`, `maggie-clone`, `maggie-clone-to-template`, `maggie-marketplace`,
1246
1299
  `maggie-template`, `maggie-design`, `maggie-ops`, `maggie-deployment`,
1247
1300
  `maggie-project-context`, `maggie-seo-geo`, `maggie-social-share`,
1248
1301
  `maggie-service-booking`, `maggie-memory`, `maggie-content-localization`,
1249
- `maggie-feedback`, `maggie-qa-workflow`, `maggie-auth-reference`, and
1250
- `maggie-blog`. Use the stable
1302
+ `maggie-feedback`, `maggie-qa-workflow`, `maggie-auth-reference`,
1303
+ `maggie-blog`, `maggie-mobile-app`, and `maggie-assistant-tools`. Use the stable
1251
1304
  commands below after installation:
1252
1305
 
1253
1306
  ```bash
package/bin/maggie.js CHANGED
@@ -99,7 +99,7 @@ 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
102
+ maggie design pressable-check|layer-check|safe-area-check --project PATH
103
103
  maggie design palette generate --canvas HEX --text HEX --accent HEX | palette validate --palette FILE
104
104
  maggie seo privacy-check --evidence FILE
105
105
  maggie content FILE --source PROVIDER --project PATH --confirm
@@ -126,7 +126,8 @@ Usage:
126
126
  maggie design reference-ui --project PATH --reference PATH --surface blog,service --confirm
127
127
  maggie design init --project PATH --surface blog|service --reference-run PATH --confirm
128
128
  maggie design validate-ui --project PATH --plan PATH --rendered-dir PATH --confirm
129
- maggie design app-init --project PATH --route /app/valuation --auth-mode email-password --confirm
129
+ maggie design app-init --project PATH --route /inbox --auth-mode existing-session [--capabilities none|camera,...] [--pane list-detail:1024:2] [--pattern usage-hero] --confirm
130
+ maggie design app-collect --plan PATH --base-url URL (--cdp-url http://127.0.0.1:9222 | --profile-dir DIR) [--read-only --allow-write /auth/refresh] --confirm
130
131
  maggie design app-validate --project PATH --plan PATH --runtime-evidence FILE --rendered-dir PATH --confirm
131
132
  maggie design icon-inventory --project PATH --source-dir src --runtime assets/icons.css --output docs/icon-inventory.json
132
133
  maggie design icon-release-gate --icon-report FILE --browser-report FILE --output FILE
@@ -161,6 +162,14 @@ Usage:
161
162
  maggie deployment --project PATH --target vps-with-cloudflare-dns
162
163
  maggie deployment worker-secrets --project PATH --environment staging --required RESEND_API_KEY
163
164
  maggie deployment secret-parity --manifest api-1.json --manifest api-2.json --required KEY
165
+ maggie deployment bridge-plan|bridge-collect-script --plan bridge-host.json
166
+ maggie deployment bridge-check --plan bridge-host.json --observed observed.json
167
+ maggie mobile preflight|plan --project PATH [--app-dir apps/app] [--profile production] [--platform ios|android|all] [--auto-submit]
168
+ maggie assistant registry-validate|annotations|capability-page|audit-check --registry FILE [--mcp-tools FILE] [--session FILE] [--output FILE]
169
+ maggie assistant approval-selftest
170
+ maggie product release-check --package DIR [--server-json FILE] [--changelog FILE] [--pack]
171
+ maggie product smoke --package DIR | mcp-check --mcp-url URL | review-status --reviews FILE [--chatgpt-plugin FILE]
172
+ maggie skills scaffold|validate|package|smoke --root DIR [--out DIR --prefix NAME --owner NAME] [--claude]
164
173
  maggie deployment env-isolation --project PATH --production-env .env.production
165
174
  maggie deployment readiness --project PATH
166
175
  maggie deployment collect --project PATH --config .maggie/deployment/collector.json
@@ -187,7 +196,7 @@ Usage:
187
196
  maggie localization <extract|plan|generate|preview|validate|review|publish|stale|glossary|email-matrix|lifecycle> [options]
188
197
  maggie seo performance|images|sitemap|indexnow|social-cards|head-tags [options] (sitemap supports strict validate and agent-files)
189
198
  maggie feedback <collect|preview|batch|batch-review|session-summary|submit|list> [options]
190
- maggie qa <start|record|summary|export|assertion-audit|cors-preflight> [options]
199
+ maggie qa <start|record|summary|export|assertion-audit|cors-preflight|app-preflight> [options]
191
200
  maggie site-audit URL [--crawl] [--access-log FILE] [--require-sitemap-request] [--languages en-GB,es-MX,ja-JP] [--check-hreflang] [--check-internal-links]
192
201
  maggie site-audit URL --crawl --save-baseline FILE --reviewer NAME
193
202
  maggie site-audit URL --crawl --baseline FILE [--reason-all REASON]
@@ -781,6 +790,11 @@ try {
781
790
  else if (command === "docs") docs(args);
782
791
  else if (command === "seo") seo(args);
783
792
  else if (command === "ops") workflowCli("maggie_ops.py", args);
793
+ else if (command === "deployment" && ["bridge-plan", "bridge-collect-script", "bridge-check"].includes(args[0])) workflowCli("maggie_bridge_host.py", args);
794
+ else if (command === "mobile") workflowCli("maggie_mobile.py", args);
795
+ else if (command === "assistant") workflowCli("maggie_assistant_tools.py", args);
796
+ else if (command === "product") workflowCli("maggie_product_release.py", args);
797
+ else if (command === "skills") workflowCli("maggie_skill_catalog.py", args);
784
798
  else if (command === "deployment" && args[0] === "canary") workflowCli("maggie_deployment_canary.py", args.slice(1));
785
799
  else if (command === "deployment" && args[0] === "readiness") workflowCli("maggie_deployment_readiness.py", args.slice(1));
786
800
  else if (command === "deployment" && args[0] === "auth-canary") workflowCli("maggie_deployment_auth_canary.py", args.slice(1));
@@ -0,0 +1,19 @@
1
+ {
2
+ "schemaVersion": "maggie-assistant-tool-registry.v1",
3
+ "gates": {
4
+ "verified-site": {"label": "Needs a verified website", "modelNote": "Fails until the site is verified."},
5
+ "credits": {"label": "Uses a post credit", "modelNote": "Consumes one credit per call."},
6
+ "ai-generation": {"label": "Uses AI generation", "modelNote": "Counts against the AI generation allowance."}
7
+ },
8
+ "tools": [
9
+ {"name": "report_traffic", "description": "Return sessions and conversions for the current website over a date range.", "risk": "read", "scope": "workspace", "channels": ["in-app", "mcp", "chatgpt", "claude"], "user": {"label": "Show your traffic", "detail": "Visits and conversions for a date range."}},
10
+ {"name": "post_draft_create", "description": "Create a draft social post for the current website from a brief.", "risk": "write-reversible", "scope": "workspace", "channels": ["in-app", "mcp"], "gates": ["ai-generation"], "user": {"label": "Draft a social post", "detail": "Writes a draft you can edit; nothing is published.", "confirm": "Create a draft post from this brief?"}},
11
+ {"name": "post_schedule", "description": "Schedule an approved post on a connected channel at a time.", "risk": "write-spends", "scope": "workspace", "channels": ["in-app", "mcp"], "gates": ["credits", "verified-site"], "user": {"label": "Schedule a post", "detail": "Uses one post credit when it goes out.", "confirm": "Schedule this post for the time shown?"}},
12
+ {"name": "post_publish_now", "description": "Publish an approved post immediately on a connected channel.", "risk": "write-public", "scope": "workspace", "channels": ["in-app", "mcp"], "gates": ["credits", "verified-site"], "user": {"label": "Publish a post now", "detail": "Goes live straight away and cannot be unpublished from here.", "confirm": "Publish this post now? It will be public."}},
13
+ {"name": "website_add", "description": "Add a website to the account.", "risk": "write-reversible", "scope": "account", "channels": ["in-app", "mcp"], "audit": {"scope": "account"}, "user": {"label": "Add a website", "detail": "Adds it to your account; you can remove it later.", "confirm": "Add this website to your account?"}},
14
+ {"name": "billing_change_plan", "description": "Change the subscription plan.", "risk": "never", "scope": "account", "channels": ["in-app"], "user": {"label": "Change your plan", "detail": "Open Billing in the app to change plans."}}
15
+ ],
16
+ "cantDo": [
17
+ {"text": "Read your private messages on social networks.", "instead": "Paste the message you want help with."}
18
+ ]
19
+ }
@@ -0,0 +1,50 @@
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-assistant-tools/tool-registry-v1.schema.json",
4
+ "title": "Maggie assistant tool registry",
5
+ "description": "One definition per tool, exported by the product and shared by the in-app agent, MCP server and ChatGPT/Claude apps. Model-facing description and user-facing copy are separate fields. Checked by `maggie assistant registry-validate`.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "tools"],
8
+ "properties": {
9
+ "schemaVersion": {"const": "maggie-assistant-tool-registry.v1"},
10
+ "gates": {
11
+ "description": "Preconditions a tool may require, e.g. credits, AI generation, verified site.",
12
+ "type": "object",
13
+ "additionalProperties": {"type": "object", "required": ["label"], "properties": {"label": {"type": "string"}, "modelNote": {"type": "string"}}}
14
+ },
15
+ "tools": {
16
+ "type": "array",
17
+ "minItems": 1,
18
+ "items": {
19
+ "type": "object",
20
+ "required": ["name", "description", "risk", "scope", "channels", "user"],
21
+ "properties": {
22
+ "name": {"type": "string", "pattern": "^[a-z][a-z0-9_]*$", "maxLength": 64},
23
+ "description": {"type": "string", "minLength": 1, "description": "Model-facing; never shown to people."},
24
+ "risk": {"enum": ["read", "write-reversible", "write-spends", "write-public", "never", "R0", "W1", "W2", "W3", "W4"]},
25
+ "scope": {"enum": ["account", "workspace"]},
26
+ "channels": {"type": "array", "minItems": 1, "items": {"enum": ["in-app", "mcp", "chatgpt", "claude", "cli"]}},
27
+ "gates": {"type": "array", "items": {"type": "string"}},
28
+ "idempotent": {"type": "boolean"},
29
+ "openWorld": {"type": "boolean"},
30
+ "hidden": {"type": "boolean", "description": "Omit from the capability page (e.g. host-only helpers)."},
31
+ "user": {
32
+ "type": "object",
33
+ "required": ["label"],
34
+ "properties": {
35
+ "label": {"type": "string", "maxLength": 60},
36
+ "detail": {"type": "string"},
37
+ "confirm": {"type": "string", "description": "Approval-card sentence; required for writes."},
38
+ "status": {"type": "string", "description": "Shown while the tool runs."}
39
+ }
40
+ },
41
+ "audit": {"type": "object", "properties": {"scope": {"enum": ["account", "workspace"]}}}
42
+ }
43
+ }
44
+ },
45
+ "cantDo": {
46
+ "type": "array",
47
+ "items": {"type": "object", "required": ["text"], "properties": {"text": {"type": "string"}, "instead": {"type": "string"}}}
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "schemaVersion": "maggie-bridge-host.v1",
3
+ "tenantsRoot": "/srv/bridge/tenants",
4
+ "isolation": {
5
+ "uidPerTenant": true,
6
+ "uidRange": [20000, 29999],
7
+ "tenantDirMode": "0700",
8
+ "parentDirMode": "0711",
9
+ "cleanEnvironment": true,
10
+ "envAllowlist": ["HOME", "PATH", "LANG", "TZ"],
11
+ "ownerPinning": true,
12
+ "nonDumpable": true
13
+ },
14
+ "network": {"proxy": "nginx", "publicBind": "127.0.0.1:3210", "adminBind": "127.0.0.1:3211", "adminProxied": false},
15
+ "capacity": {"maxSessions": 20, "eviction": "lru-idle", "idleTimeoutMinutes": 15},
16
+ "recycle": {"on": ["mcp", "skills", "cli"], "busySessions": "after-current-turn"},
17
+ "image": {
18
+ "label": "com.example.app=bridge-host",
19
+ "retain": 2,
20
+ "healthcheck": {"path": "/health", "attempts": 30, "intervalSeconds": 2},
21
+ "rollback": true,
22
+ "readOnlyRootfs": true,
23
+ "capDropAll": true,
24
+ "noNewPrivileges": true
25
+ },
26
+ "providers": [
27
+ {"name": "assistant-cli", "accountType": "customer-own", "termsUrl": "https://example.com/terms", "termsReviewedAt": "2026-10-01"}
28
+ ]
29
+ }
@@ -0,0 +1,54 @@
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/mobile-app-evidence-v1.schema.json",
4
+ "title": "Maggie mobile app runtime evidence",
5
+ "description": "Written by `maggie design app-collect`, read by `maggie design app-validate`. Per-viewport entries are authoritative; no credentials, storage or page text.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "route", "auth", "viewports"],
8
+ "properties": {
9
+ "schemaVersion": {"const": "maggie-mobile-app-evidence.v1"},
10
+ "collector": {"type": "string"},
11
+ "route": {"type": "string", "pattern": "^/"},
12
+ "auth": {
13
+ "type": "object",
14
+ "properties": {
15
+ "signedIn": {"type": "boolean"},
16
+ "sessionMode": {"enum": ["attached-host-session", "dedicated-profile", "manual"]},
17
+ "credentialsRecorded": {"const": false}
18
+ }
19
+ },
20
+ "shell": {
21
+ "type": "object",
22
+ "properties": {
23
+ "fixedHeader": {"type": "boolean"},
24
+ "fixedFooter": {"type": "boolean"},
25
+ "scrollOwnerCount": {"description": "Legacy; ignored by app-validate.", "type": "integer"},
26
+ "method": {"type": "string"}
27
+ }
28
+ },
29
+ "capabilities": {
30
+ "type": "object",
31
+ "additionalProperties": {"type": "object", "properties": {"states": {"type": "array", "items": {"type": "string"}}}}
32
+ },
33
+ "viewports": {
34
+ "type": "object",
35
+ "required": ["desktop", "tablet", "mobile"],
36
+ "additionalProperties": {
37
+ "type": "object",
38
+ "required": ["width", "height", "scrollOwners"],
39
+ "properties": {
40
+ "width": {"type": "integer", "minimum": 1},
41
+ "height": {"type": "integer", "minimum": 1},
42
+ "deviceScaleFactor": {"type": "number", "exclusiveMinimum": 0},
43
+ "scrollOwners": {"type": "integer", "minimum": 0},
44
+ "fixedHeader": {"type": "boolean"},
45
+ "fixedFooter": {"type": "boolean"},
46
+ "tabBar": {"enum": ["bottom", "top", "side", "inline", "none"]},
47
+ "fullPage": {"type": "boolean"},
48
+ "screenshot": {"type": "string"}
49
+ }
50
+ }
51
+ },
52
+ "warnings": {"type": "array", "items": {"type": "string"}}
53
+ }
54
+ }
@@ -31,10 +31,18 @@
31
31
  },
32
32
  "auth": {
33
33
  "type": "object",
34
- "required": ["mode", "required", "credentialPolicy"],
34
+ "required": [
35
+ "mode",
36
+ "required",
37
+ "credentialPolicy"
38
+ ],
35
39
  "properties": {
36
40
  "mode": {
37
- "enum": ["email-password", "existing-session", "none"]
41
+ "enum": [
42
+ "email-password",
43
+ "existing-session",
44
+ "none"
45
+ ]
38
46
  },
39
47
  "required": {
40
48
  "type": "boolean"
@@ -47,41 +55,116 @@
47
55
  },
48
56
  "shell": {
49
57
  "type": "object",
50
- "required": ["fixedHeader", "fixedFooter", "oneScrollOwner"],
58
+ "required": [
59
+ "fixedHeader",
60
+ "fixedFooter"
61
+ ],
51
62
  "properties": {
52
- "fixedHeader": {"const": true},
53
- "fixedFooter": {"const": true},
54
- "oneScrollOwner": {"const": true}
63
+ "fixedHeader": {
64
+ "const": true
65
+ },
66
+ "fixedFooter": {
67
+ "const": true
68
+ },
69
+ "oneScrollOwner": {
70
+ "type": "boolean"
71
+ },
72
+ "scrollOwners": {
73
+ "type": "object",
74
+ "properties": {
75
+ "default": {
76
+ "const": 1
77
+ },
78
+ "intentionalPanes": {
79
+ "type": "array",
80
+ "items": {
81
+ "type": "object",
82
+ "required": [
83
+ "name",
84
+ "minWidth",
85
+ "scrollOwners"
86
+ ],
87
+ "properties": {
88
+ "name": {
89
+ "type": "string",
90
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
91
+ },
92
+ "minWidth": {
93
+ "type": "integer",
94
+ "minimum": 100
95
+ },
96
+ "scrollOwners": {
97
+ "type": "integer",
98
+ "minimum": 2,
99
+ "maximum": 4
100
+ }
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
55
106
  },
107
+ "anyOf": [
108
+ {
109
+ "required": [
110
+ "oneScrollOwner"
111
+ ],
112
+ "properties": {
113
+ "oneScrollOwner": {
114
+ "const": true
115
+ }
116
+ }
117
+ },
118
+ {
119
+ "required": [
120
+ "scrollOwners"
121
+ ]
122
+ }
123
+ ],
56
124
  "additionalProperties": true
57
125
  },
58
126
  "camera": {
59
127
  "type": "object",
60
- "required": ["requiredStates", "controls", "fallback"],
128
+ "required": [
129
+ "requiredStates"
130
+ ],
61
131
  "properties": {
62
132
  "requiredStates": {
63
133
  "type": "array",
64
- "contains": {"const": "permission"}
134
+ "items": {
135
+ "type": "string"
136
+ }
65
137
  },
66
138
  "controls": {
67
- "type": "array",
68
- "minItems": 4
139
+ "type": "array"
69
140
  },
70
141
  "fallback": {
71
- "type": "string",
72
- "minLength": 1
142
+ "type": "string"
143
+ },
144
+ "notApplicable": {
145
+ "type": "string"
73
146
  }
74
147
  },
75
148
  "additionalProperties": true
76
149
  },
77
150
  "viewports": {
78
151
  "type": "object",
79
- "required": ["desktop", "tablet", "mobile"],
152
+ "required": [
153
+ "desktop",
154
+ "tablet",
155
+ "mobile"
156
+ ],
80
157
  "additionalProperties": {
81
158
  "type": "array",
82
159
  "prefixItems": [
83
- {"type": "integer", "minimum": 1},
84
- {"type": "integer", "minimum": 1}
160
+ {
161
+ "type": "integer",
162
+ "minimum": 1
163
+ },
164
+ {
165
+ "type": "integer",
166
+ "minimum": 1
167
+ }
85
168
  ],
86
169
  "minItems": 2,
87
170
  "maxItems": 2
@@ -89,10 +172,48 @@
89
172
  },
90
173
  "requiredSteps": {
91
174
  "type": "array",
92
- "contains": {"const": "signed-in-browser-qa"}
175
+ "contains": {
176
+ "const": "signed-in-browser-qa"
177
+ }
93
178
  },
94
179
  "publicWrite": {
95
180
  "const": false
181
+ },
182
+ "capabilities": {
183
+ "type": "object",
184
+ "propertyNames": {
185
+ "enum": [
186
+ "camera",
187
+ "location",
188
+ "notifications",
189
+ "media-library"
190
+ ]
191
+ },
192
+ "additionalProperties": {
193
+ "type": "object",
194
+ "required": [
195
+ "requiredStates"
196
+ ],
197
+ "properties": {
198
+ "requiredStates": {
199
+ "type": "array",
200
+ "items": {
201
+ "type": "string"
202
+ }
203
+ }
204
+ }
205
+ }
206
+ },
207
+ "patterns": {
208
+ "type": "array",
209
+ "items": {
210
+ "enum": [
211
+ "tabbed-modal",
212
+ "editor-sheet-assistant",
213
+ "usage-hero",
214
+ "site-switcher"
215
+ ]
216
+ }
96
217
  }
97
218
  },
98
219
  "additionalProperties": true
@@ -2,6 +2,10 @@
2
2
  "schemaVersion": "maggie-skill-catalog.v1",
3
3
  "generatedFrom": "skills/*/SKILL.md",
4
4
  "skills": [
5
+ {
6
+ "name": "maggie-assistant-tools",
7
+ "description": "Build an AI assistant's tools once and expose them safely to an in-app agent, an MCP server and ChatGPT/Claude apps. Use for tool registries, risk levels and gates, approval cards with signed one-time tokens, audit logs, MCP annotations, user-facing capability pages, publishing product CLI/MCP packages and app reviews, and multi-tenant assistant bridge hosts."
8
+ },
5
9
  {
6
10
  "name": "maggie-auth-reference",
7
11
  "description": "Generate and validate a provider-neutral traditional email/password auth reference with secure server sessions and production security gates."
@@ -54,6 +58,10 @@
54
58
  "name": "maggie-memory",
55
59
  "description": "Persist and retrieve confirmed user preferences, project conventions, lessons from repaired mistakes, and structured error history across Maggie skill runs."
56
60
  },
61
+ {
62
+ "name": "maggie-mobile-app",
63
+ "description": "Ship a cross-platform product app from one Expo / React Native codebase to web, iOS and Android. Use for the dev server, web deploy, EAS build profiles, TestFlight and Play internal testing, EAS Update channels and runtime versions, store-review rules, and a release preflight with a cost notice before every build."
64
+ },
57
65
  {
58
66
  "name": "maggie-ops",
59
67
  "description": "Build, connect, operate, upgrade, and verify a private Maggie Ops dashboard for blog content, API Pull, sitemap matching, rewrite approvals, reports, and integrations. Use when the user asks for Ops/admin functionality or lifecycle operations rather than public blog pages."