@topy-ai/maggie 0.7.53 → 0.7.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-zh-TW.md +28 -50
- package/README.md +85 -64
- package/bin/maggie.js +51 -7
- package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +1 -1
- package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +2 -2
- package/bundled-skills/maggie-blog/SKILL.md +8 -0
- package/bundled-skills/maggie-booking/SKILL.md +20 -12
- package/bundled-skills/maggie-content-localization/SKILL.md +26 -0
- package/bundled-skills/maggie-dash/SKILL.md +28 -2
- package/bundled-skills/maggie-deployment/SKILL.md +27 -0
- package/bundled-skills/maggie-design/SKILL.md +81 -0
- package/bundled-skills/maggie-feedback/SKILL.md +10 -2
- package/bundled-skills/maggie-marketplace/SKILL.md +1 -1
- package/bundled-skills/maggie-marketplace/references/directory-search.md +1 -1
- package/bundled-skills/maggie-marketplace/references/directory.mjs +2 -2
- package/bundled-skills/maggie-mobile-app/SKILL.md +29 -0
- package/bundled-skills/maggie-social-share/SKILL.md +30 -0
- package/bundled-tools/clis/maggie_booking.py +9 -8
- package/bundled-tools/clis/maggie_dash.py +173 -3
- package/bundled-tools/clis/maggie_deployment_ops.py +64 -1
- package/bundled-tools/clis/maggie_design.py +7 -1
- package/bundled-tools/clis/maggie_design_bulk.py +290 -0
- package/bundled-tools/clis/maggie_design_lint.py +131 -1
- package/bundled-tools/clis/maggie_feedback.py +41 -13
- package/bundled-tools/clis/maggie_live_urls.py +138 -0
- package/bundled-tools/clis/maggie_localization.py +3 -0
- package/bundled-tools/clis/maggie_localization_keys.py +151 -0
- package/bundled-tools/clis/maggie_media_generate.py +174 -0
- package/bundled-tools/clis/maggie_mobile.py +84 -1
- package/bundled-tools/clis/maggie_product_release.py +49 -1
- package/bundled-tools/clis/maggie_social_share.py +122 -1
- package/bundled-tools/integrations/maggie-api-pull.md +22 -0
- package/package.json +1 -1
- package/bundled-contracts/maggiedash/execution-board.json +0 -5463
- package/bundled-references/maggiedash-booking/CURRENT-STATE.md +0 -210
- package/bundled-references/maggiedash-booking/EXECUTION-BOARD.json +0 -5463
- package/bundled-references/maggiedash-booking/ORAWELLNESS-INTEGRATION-AUDIT.md +0 -270
- package/bundled-references/maggiedash-booking/PROGRESS.md +0 -279
- package/bundled-references/maggiedash-booking/README.md +0 -288
- package/bundled-references/maggiedash-booking/SKILLS-AND-CLI.md +0 -551
- package/bundled-references/maggiedash-booking/TASK-RUNBOOK.md +0 -107
- package/bundled-references/maggiedash-booking/TASKS.md +0 -178
package/README-zh-TW.md
CHANGED
|
@@ -29,53 +29,31 @@ 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.
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
- `maggie
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- **App 與 QA**:
|
|
58
|
-
- `maggie qa app-preflight --expect-symbol` 證明伺服器送出的 bundle 已包含剛改的程式,並指出是哪個程序佔用 port;
|
|
59
|
-
- `maggie mobile ota --build-ref` 以 build 當時的設定檔發布 OTA 更新;
|
|
60
|
-
- `maggie qa fit-check` 檢查儀表板(包含每個分頁與抽屜)是否都不用捲動整頁;
|
|
61
|
-
- `maggie design textinput-check` 與新的 app 介面模式涵蓋背景工作、單行輸入框、hash 分頁、右側抽屜與依螢幕大小分頁。
|
|
62
|
-
- **AI 助理**:
|
|
63
|
-
- tool registry 支援結果卡片與存在伺服器的對話;
|
|
64
|
-
- 公開唯讀的探索型 MCP,已登入的 MCP 伺服器預設做 RFC 8707 audience 綁定;
|
|
65
|
-
- 面向訪客的預約接待助理,不會代為預約也不收卡號;
|
|
66
|
-
- 工作流程的常設核准(standing approval);
|
|
67
|
-
- Codex app-server 圖片功能說明。
|
|
68
|
-
- **社群與 SEO**:
|
|
69
|
-
- 貼文只能分享本工作區自己網域的文章,有圖片的貼文以圖片貼文發出;
|
|
70
|
-
- 規劃失敗時不留下空的 campaign;
|
|
71
|
-
- `schema-check` 找出對 Gemini 太複雜的結構化輸出 schema;
|
|
72
|
-
- `maggie seo origin-check` 與 `fragment-check` 涵蓋路由檢查與個人化片段的快取規則。
|
|
73
|
-
- **其他**:
|
|
74
|
-
- `maggie feedback session-summary` 可指定要讀的 revision,把專案本身的 commit 與 skill 回饋分開,超過上限時依 scope 分組而不是默默截斷;
|
|
75
|
-
- Marketplace 目錄改用共用的城鎮解析與名稱搜尋模組;
|
|
76
|
-
- 移除空的 `maggie-emdash` 資料夾。
|
|
77
|
-
|
|
78
|
-
前一版 `0.7.52` 加入 mobile 後續修正(`eas update --environment`、fingerprint 檢查、`maggie design safe-area-check`)。`0.7.51`(batch 28)新增 `maggie design app-collect`、`maggie qa app-preflight`、`maggie-mobile-app` 與 `maggie-assistant-tools` skills,以及 `maggie product`、`maggie skills`、`maggie deployment bridge-*`。前一版 `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.54`:完成 feedback batch 30,共 13 條 feedback,來自一個在自家網站上執行 MaggieDash 的內容與社群產品,並同步發布 MaggieDash 0.2.14。
|
|
33
|
+
|
|
34
|
+
- **MaggieDash 先裝核心**:`maggie dash install` 現在只安裝儀表板、登入、`/_maggie/admin` 路由與核心資料表。接著讀取專案(框架、既有登入、資料庫、金流、是否提供服務或經營 Blog、語言),逐項推薦選配模組並說明原因。沒有你的指示不會安裝任何選配:`maggie dash add booking --confirm`(或 `maggie booking install`)。純內容網站不再被裝上 Stripe、預約路由與 worker。`maggie dash recommend` 可隨時重新分析。
|
|
35
|
+
- **MaggieDash 0.2.14 不再把密鑰寫進 build**:Astro scaffold 以 `import.meta.env` 讀取伺服器設定,Vite 會把它寫進建置輸出;只要 build 時環境中有 `DATABASE_URL` 或 `BOOKING_TOKEN_SECRET`,就會出現在 `dist/server`。現在改為執行時讀取,用舊 scaffold 安裝的 host 請重新 build。管理介面側欄只顯示 host 實際提供的面板(capability manifest);從 GitHub 安裝時也會拿到 Booking 的 env 範例檔。
|
|
36
|
+
- **agent 資料夾不再有特定客戶的文件**:舊版會把某個客戶的整合稽核、進度記錄與交付看板裝進 `~/.claude/references` 與 `~/.codex/references`。現在只打包一般性的 Booking 文件。打包時若有檔案提到客戶,或連到沒有打包的文件,release gate 會直接失敗。`maggie update` 會移除舊版裝了、新版不再提供、且你沒改過的檔案;`maggie doctor --scope user` 會列出剩下的。
|
|
37
|
+
- **Feedback 一定送得到**:`maggie feedback submit` 不需要 `--endpoint`。先送 NoBlox;只有在該主機儲存前失敗(連不上或 526 之類的 5xx)才改送 `feedback.cmo.so`,兩邊都以 `feedbackId` 去重。
|
|
38
|
+
- **社群貼文**:
|
|
39
|
+
- `link-check`(及 `plan --check-link`)在規劃貼文前排除連結已失效(404/410)的文章;被擋或暫時出錯的頁面會保留。
|
|
40
|
+
- `pictures` 確保同一個點子寫給多個頻道的貼文共用同一張圖。
|
|
41
|
+
- **Blog API Pull**:`maggie blog live-urls` 記錄已交付文章的實際上線網址(來自網站回報或 sitemap 比對)。比對只會新增、不會撤回先前的結果,且優先採用原文頁而不是翻譯頁。
|
|
42
|
+
- **大量產生的頁面**:
|
|
43
|
+
- `maggie design bulk` 用同一份 brief、facts 與 validator 產生大量相似頁面:只替已通過驗證、之後沒再改過的頁面畫圖;頁面被改過,寫手必須重新讀取;規則收緊時,先前通過的頁面會退回重新驗證;所有頁面都通過才寫入。
|
|
44
|
+
- `maggie localization key-check` 找出需要「每頁位置 key」而不能共用文字 key 的翻譯。
|
|
45
|
+
- `maggie localization fragments` 找出被品牌名切成太短、無法單獨翻譯的片段。
|
|
46
|
+
- **圖片**:`maggie media generate --engine codex|gemini` 產生圖片;`maggie media engine-plan` 在大量產生前列出各引擎的時間與費用(例如 2400x1000 在 Gemini 會用 21:9、2K)。
|
|
47
|
+
- **App**:
|
|
48
|
+
- `maggie design sheet-check` 抓出 iOS 凍結問題:關閉 sheet 的同時顯示 toast、重新整理、換頁或開另一個 sheet。
|
|
49
|
+
- `maggie mobile ota-guard` 只把更新發佈到已安裝 build 擁有的 runtime;在 pnpm monorepo 中,fingerprint 可能因不相關的套件變動而改變。
|
|
50
|
+
- **發佈**:
|
|
51
|
+
- `maggie deployment preview-auth-check` 找出仍在送資料到已加密碼的 preview 主機的 workflow 與 webhook。
|
|
52
|
+
- `maggie product published` 等到 staged 的 npm 版本真正成為 `latest`。
|
|
53
|
+
|
|
54
|
+
前一版 `0.7.53` 完成 feedback batch 29(56 條,來自預約平台與社群/AI 助理產品):預約規則與共用測試向量、Stripe Connect 平台指引與 `connect-qa`、MaggieDash 0.2.13 預約修正、`cloudflare-preflight`、`vps-release`、`qa fit-check`、`mobile ota --build-ref`、助理 registry 卡片與長期核准、社群只用自家網域文章,以及 `seo origin-check`。
|
|
55
|
+
|
|
56
|
+
前一版 `0.7.52` 加入 mobile 後續修正(`eas update --environment`、fingerprint 檢查、`maggie design safe-area-check`)。`0.7.51`(batch 28)新增 `maggie design app-collect`、`maggie qa app-preflight`、`maggie-mobile-app` 與 `maggie-assistant-tools` skills,以及 `maggie product`、`maggie skills`、`maggie deployment bridge-*`。前一版 `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,並從 client host 上游通用修正。本版也包含 Booking 十個 email events 合約與 CLI validator 同步及安全輸出的 `arrivalNote`。前一版 `0.7.47` 處理 2026-09-26 五條新 feedback:project-scope
|
|
79
57
|
`maggie init` 會建立本地 memory store;context 預設只讀取本 project scope;memory hook
|
|
80
58
|
在 local Python adapter 不存在時 fallback 到已安裝 CLI;重複 init 保留既有檔案與時間戳;
|
|
81
59
|
`maggie feedback list` 的 `--project` 可放在子命令前或後。Generated VPS runner 現在記錄
|
|
@@ -90,7 +68,7 @@ browser adapter capability preflight、privacy-safe feedback evidence references
|
|
|
90
68
|
`xdg-open` 的系統 `browse`;feedback graph 不保存 raw payload、logs、credentials
|
|
91
69
|
或本機路徑。另包含 0.7.45 的 Codex/Claude Code 一次性 user-scope 安裝、bundled
|
|
92
70
|
workflow runner 與 user-scope maintenance commands;並完成 2026-09-24 booking feedback batch:MaggieDash
|
|
93
|
-
Calendar availability grid/free-slot entry,以及
|
|
71
|
+
Calendar availability grid/free-slot entry,以及 host modal focus restoration
|
|
94
72
|
的驗證證據。另新增 secret-free Starter marketplace provisioning
|
|
95
73
|
plan、versioned GitHub/Cloudflare/Starter contracts,以及 deterministic
|
|
96
74
|
`maggie marketplace plan` dry-run CLI。0.7.42 新增 redacted Gemini video-provider evidence gate,
|
|
@@ -109,7 +87,7 @@ authentication 和 isolated dev server 仍由 host 負責。
|
|
|
109
87
|
dashboard/sample surface contract、primary navigation indexability、privacy
|
|
110
88
|
origin parity、provider-neutral site structure、host capability manifest,
|
|
111
89
|
以及包含 duration/price variants 的 Booking treatment group。MaggieDash
|
|
112
|
-
同步更新至 0.2.9,
|
|
90
|
+
同步更新至 0.2.9,reference host 也提供相同的 capability/site-structure
|
|
113
91
|
邊界。
|
|
114
92
|
|
|
115
93
|
目前也加入 deferred workflow 的共用 contract gate:Gemini image/edit 使用
|
|
@@ -159,7 +137,7 @@ structure drift 或重複 treatment product 時 fail closed。
|
|
|
159
137
|
deployment、memory、feedback 和 MaggieDash。內容先 draft/review,外部寫入、
|
|
160
138
|
publish 與 production deployment 需要明確確認。
|
|
161
139
|
|
|
162
|
-
目前 npm 版本為 `0.7.
|
|
140
|
+
目前 npm 版本為 `0.7.54`,包含 batch 30 MaggieDash 先裝核心、release privacy gate、feedback 備援、社群連結與圖片檢查、大量頁面產生與 app 檢查,batch 29 預約規則、部署、app QA、助理與社群功能,以及 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
|
|
163
141
|
dispatch、`maggie --version`、feedback batch review 聚合與重複偵測、marketplace enrichment evidence、booking
|
|
164
142
|
worker/resolver evidence,以及 read-only migration preflight。它也包含 host-owned mobile app surface contract、signed-in
|
|
165
143
|
camera-state QA、直接 Astro route resolution、correlated feedback batch,以及
|
package/README.md
CHANGED
|
@@ -89,62 +89,78 @@ 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 22 installable skills and a local-first MaggieDash foundation.
|
|
91
91
|
|
|
92
|
-
This package is `0.7.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- **
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
- `
|
|
125
|
-
|
|
126
|
-
- `
|
|
127
|
-
|
|
128
|
-
- **
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
|
|
92
|
+
This package is `0.7.54`. It closes feedback batch 30: 13 records
|
|
93
|
+
from a content and social product that runs MaggieDash on its own website,
|
|
94
|
+
plus MaggieDash 0.2.14.
|
|
95
|
+
|
|
96
|
+
- **MaggieDash installs the core first.** `maggie dash install` now installs
|
|
97
|
+
only the dashboard, sign-in, the `/_maggie/admin` route and the core schema.
|
|
98
|
+
It then reads your project (framework, existing sign-in, database, payments,
|
|
99
|
+
whether you sell services or run a blog, languages) and recommends optional
|
|
100
|
+
modules, each with a reason. Nothing optional is installed until you ask:
|
|
101
|
+
`maggie dash add booking --confirm` (or `maggie booking install`). A content
|
|
102
|
+
site no longer gets Stripe, booking routes and a worker it never asked for.
|
|
103
|
+
`maggie dash recommend` repeats the analysis at any time.
|
|
104
|
+
- **MaggieDash 0.2.14 keeps secrets out of the build.** The Astro scaffold
|
|
105
|
+
read server settings through `import.meta.env`, which Vite writes into the
|
|
106
|
+
build output: an `astro build` with `DATABASE_URL` or `BOOKING_TOKEN_SECRET`
|
|
107
|
+
in the environment put them into `dist/server`. They are now read at run
|
|
108
|
+
time. Rebuild any host installed from an earlier scaffold. The admin
|
|
109
|
+
sidebar shows only the panels your host serves (capability manifest), and
|
|
110
|
+
the Booking env example now reaches installs from GitHub.
|
|
111
|
+
- **Nothing client-specific in your agent folders.** Earlier packages
|
|
112
|
+
installed one client's integration audit, progress logs and a delivery
|
|
113
|
+
board into `~/.claude/references` and `~/.codex/references`. Only general
|
|
114
|
+
Booking documents ship now. A release gate fails packaging when a packaged
|
|
115
|
+
file names a client or links to an unshipped document. `maggie update`
|
|
116
|
+
removes files an older package installed and this one no longer ships
|
|
117
|
+
(only when you have not changed them), and `maggie doctor --scope user`
|
|
118
|
+
reports any that are left.
|
|
119
|
+
- **Feedback always arrives.** `maggie feedback submit` needs no
|
|
120
|
+
`--endpoint`. It tries the NoBlox host first and, only when that host fails
|
|
121
|
+
before storing the draft (no connection or a 5xx such as 526), sends it to
|
|
122
|
+
`feedback.cmo.so`. Both hosts drop duplicates by `feedbackId`.
|
|
123
|
+
- **Social posts.**
|
|
124
|
+
- `link-check` (and `plan --check-link`) drops articles whose link is gone
|
|
125
|
+
(404 or 410) before posts are planned. Blocked or failing pages are kept.
|
|
126
|
+
- `pictures` makes posts written together for several channels share one
|
|
127
|
+
picture.
|
|
128
|
+
- **Blog API Pull.** `maggie blog live-urls` records where a delivered post
|
|
129
|
+
went live, from the site's own report or a sitemap match. Matching only
|
|
130
|
+
adds URLs, never retires earlier matches, and prefers the original page
|
|
131
|
+
over translated copies.
|
|
132
|
+
- **Generated pages.**
|
|
133
|
+
- `maggie design bulk` runs many similar pages from one brief, facts file
|
|
134
|
+
and validator. Pictures are drawn only for validated pages that have not
|
|
135
|
+
changed since. A writer must re-read a page that changed. Tightened rules
|
|
136
|
+
send earlier passes back for validation. Nothing is seeded until every
|
|
137
|
+
page passes.
|
|
138
|
+
- `maggie localization key-check` finds texts that need per-page position
|
|
139
|
+
keys instead of site-wide text keys.
|
|
140
|
+
- `maggie localization fragments` finds sentences split around a brand
|
|
141
|
+
name into pieces too short to translate.
|
|
142
|
+
- **Pictures.** `maggie media generate --engine codex|gemini` draws a picture,
|
|
143
|
+
and `maggie media engine-plan` states the time and cost of each engine
|
|
144
|
+
before a large run (for example, 2400x1000 becomes 21:9 at 2K on Gemini).
|
|
145
|
+
- **Apps.**
|
|
146
|
+
- `maggie design sheet-check` catches the iOS freeze: closing a sheet and,
|
|
147
|
+
in the same moment, showing a toast, refreshing, navigating or opening
|
|
148
|
+
another sheet.
|
|
149
|
+
- `maggie mobile ota-guard` publishes an update only to a runtime an
|
|
150
|
+
installed build has. In pnpm monorepos the fingerprint can move with
|
|
151
|
+
unrelated dependency changes.
|
|
152
|
+
- **Releases.**
|
|
153
|
+
- `maggie deployment preview-auth-check` finds workflows and webhooks that
|
|
154
|
+
still post to a preview host you protected with a password.
|
|
155
|
+
- `maggie product published` waits until a staged npm version is really
|
|
156
|
+
`latest`.
|
|
157
|
+
|
|
158
|
+
0.7.53 closed feedback batch 29 (56 records from a booking marketplace and a
|
|
159
|
+
social/assistant product): booking rules with shared test vectors, Stripe
|
|
160
|
+
Connect platform guidance and `connect-qa`, MaggieDash 0.2.13 booking fixes,
|
|
161
|
+
`cloudflare-preflight`, `vps-release`, `qa fit-check`, `mobile ota
|
|
162
|
+
--build-ref`, assistant registry cards and standing approvals, own-domain
|
|
163
|
+
social sources and `seo origin-check`.
|
|
148
164
|
|
|
149
165
|
0.7.52 added mobile follow-ups: `eas update --environment`, a fingerprint gate,
|
|
150
166
|
and `maggie design safe-area-check`. 0.7.51 (batch 28) added
|
|
@@ -219,7 +235,7 @@ contract/CLI sync with escaped `arrivalNote` rendering:
|
|
|
219
235
|
- Feedback: an `improvement` type (hosted as `feature` + `subtype`) and
|
|
220
236
|
`maggie feedback session-summary`.
|
|
221
237
|
- MaggieDash 0.2.11 holds outbox emails whose template is not yet deployed
|
|
222
|
-
instead of dead-lettering them, and upstreams generic fixes from
|
|
238
|
+
instead of dead-lettering them, and upstreams generic fixes from a client host.
|
|
223
239
|
|
|
224
240
|
The 0.7.47 release remains included: project
|
|
225
241
|
initialization creates the repository's Maggie Memory store, memory context
|
|
@@ -240,7 +256,7 @@ It also includes the 0.7.45 one-time user-scope installation for
|
|
|
240
256
|
Codex and Claude Code, a bundled workflow runner, and scoped maintenance
|
|
241
257
|
commands. It also closes the 2026-09-24 booking feedback
|
|
242
258
|
batch with the canonical MaggieDash Calendar availability grid/free-slot
|
|
243
|
-
entry and documented
|
|
259
|
+
entry and documented host modal focus-restoration evidence. It also adds the
|
|
244
260
|
secret-free Starter marketplace
|
|
245
261
|
provisioning plan and bundles versioned GitHub repository, Cloudflare Pages,
|
|
246
262
|
Starter site, and Starter release contracts. `maggie marketplace plan` emits a
|
|
@@ -799,8 +815,8 @@ artifact schemas.
|
|
|
799
815
|
Recommended upgrade sequence for the current release:
|
|
800
816
|
|
|
801
817
|
```bash
|
|
802
|
-
npx @topy-ai/maggie@0.7.
|
|
803
|
-
npx @topy-ai/maggie@0.7.
|
|
818
|
+
npx @topy-ai/maggie@0.7.54 update --scope project --project . --force
|
|
819
|
+
npx @topy-ai/maggie@0.7.54 cleanup --scope project --project .
|
|
804
820
|
```
|
|
805
821
|
|
|
806
822
|
Maintainers should pass npm credentials through the repository helper, never
|
|
@@ -889,8 +905,10 @@ maggie dash status --project .
|
|
|
889
905
|
maggie doctor --project .
|
|
890
906
|
```
|
|
891
907
|
|
|
892
|
-
`maggie dash install` installs the
|
|
893
|
-
|
|
908
|
+
`maggie dash install` installs the MaggieDash core (dashboard source in
|
|
909
|
+
`./_maggie/admin`, sign-in, the `/_maggie/admin` route and the core schema),
|
|
910
|
+
preserving local files unless `--force` is used, and prints recommendations for
|
|
911
|
+
optional modules. Add one only when wanted: `maggie dash add booking --confirm`.
|
|
894
912
|
It records the resolved source revision in `.maggie/dash-install.json`. During
|
|
895
913
|
bootstrap this is enabled by default; use `--dash-source /path/to/MaggieDash`
|
|
896
914
|
for local development or a configured private Git URL. The host project keeps
|
|
@@ -1072,10 +1090,13 @@ maggie feedback collect --project . \
|
|
|
1072
1090
|
--actual "Hero is wider than the viewport" \
|
|
1073
1091
|
--error-fingerprint css-layout-overflow
|
|
1074
1092
|
maggie feedback preview .maggie/feedback/<feedback-id>.json --format markdown
|
|
1075
|
-
maggie feedback submit .maggie/feedback/<feedback-id>.json
|
|
1076
|
-
--endpoint https://feedback.noblox.app/api/feedback --confirm
|
|
1093
|
+
maggie feedback submit .maggie/feedback/<feedback-id>.json --confirm
|
|
1077
1094
|
```
|
|
1078
1095
|
|
|
1096
|
+
Without `--endpoint` the draft goes to the NoBlox host and, only if that host
|
|
1097
|
+
fails before storing it (no connection or a 5xx), to `feedback.cmo.so`; both
|
|
1098
|
+
drop duplicates by `feedbackId`.
|
|
1099
|
+
|
|
1079
1100
|
For related observations, create 1–50 local drafts with shared correlation
|
|
1080
1101
|
metadata and review them before submitting:
|
|
1081
1102
|
|
package/bin/maggie.js
CHANGED
|
@@ -100,7 +100,7 @@ Usage:
|
|
|
100
100
|
maggie dash structure-validate --model FILE --evidence FILE
|
|
101
101
|
maggie design progressive-check|css-check|css-cascade-check|style-check --evidence FILE
|
|
102
102
|
maggie design dash-init|dash-validate|sample-init|sample-validate [options]
|
|
103
|
-
maggie design pressable-check|layer-check|safe-area-check|textinput-check --project PATH
|
|
103
|
+
maggie design pressable-check|layer-check|safe-area-check|textinput-check|sheet-check --project PATH
|
|
104
104
|
maggie design palette generate --canvas HEX --text HEX --accent HEX | palette validate --palette FILE
|
|
105
105
|
maggie seo privacy-check --evidence FILE
|
|
106
106
|
maggie seo origin-check --base-url URL [--project PATH] [--expect-host HOST]
|
|
@@ -144,7 +144,7 @@ Usage:
|
|
|
144
144
|
maggie design step <job-id> --step NAME --evidence FILE
|
|
145
145
|
maggie auth reference --project PATH --confirm
|
|
146
146
|
maggie auth check --project PATH [--production]
|
|
147
|
-
maggie blog init|inspect|ingest|validate|check-gate|approve|publish|sitemap|settings|rollback|integration-state
|
|
147
|
+
maggie blog init|inspect|ingest|validate|check-gate|approve|publish|sitemap|settings|rollback|integration-state|live-urls
|
|
148
148
|
maggie design status <job-id>
|
|
149
149
|
maggie service import <provider-url> --project PATH
|
|
150
150
|
maggie service sync <provider-url> --project PATH
|
|
@@ -171,13 +171,16 @@ Usage:
|
|
|
171
171
|
maggie deployment cloudflare-preflight --project PATH [--env production] [--env-file .env] [--verify-zone]
|
|
172
172
|
maggie deployment file-parity --host H [--host H2] --root /srv/app/current --path dist/x.mjs [--ref DEPLOYED_COMMIT]
|
|
173
173
|
maggie deployment warm-check --url URL [--warm 3] [--samples 5] [--budget-ms 800]
|
|
174
|
+
maggie deployment preview-auth-check --host preview.example.com [--repo PATH] [--live]
|
|
174
175
|
maggie deployment vps-release --host deploy@HOST --release-root /srv/app --service app --env-file /etc/app.env [--health-url URL] [--confirm]
|
|
175
176
|
maggie mobile preflight|plan --project PATH [--app-dir apps/app] [--profile production] [--platform ios|android|all] [--auto-submit] [--build-ref REF]
|
|
176
177
|
maggie mobile ota --project PATH --build-ref REF --build-id ID --message TEXT [--confirm]
|
|
178
|
+
maggie mobile ota-guard --project PATH --platform ios|android --runtimes FILE [--publish --message TEXT --confirm]
|
|
177
179
|
maggie assistant registry-validate|annotations|capability-page|audit-check --registry FILE [--mcp-tools FILE] [--session FILE] [--output FILE]
|
|
178
180
|
maggie assistant approval-selftest
|
|
179
181
|
maggie product release-check --package DIR [--server-json FILE] [--changelog FILE] [--pack]
|
|
180
182
|
maggie product smoke --package DIR | mcp-check --mcp-url URL | review-status --reviews FILE [--chatgpt-plugin FILE]
|
|
183
|
+
maggie product published --package-name NAME --version X [--wait 600] [--publish-log FILE]
|
|
181
184
|
maggie skills scaffold|validate|package|smoke --root DIR [--out DIR --prefix NAME --owner NAME] [--claude]
|
|
182
185
|
maggie deployment env-isolation --project PATH --production-env .env.production
|
|
183
186
|
maggie deployment readiness --project PATH
|
|
@@ -193,7 +196,7 @@ Usage:
|
|
|
193
196
|
maggie schedule PATH/.maggie/schedule.json --project PATH
|
|
194
197
|
maggie analytics [traffic-audit|release-gate] --project PATH --environment staging
|
|
195
198
|
maggie analytics gsc-readiness --gsc-evidence FILE
|
|
196
|
-
maggie media [image-policy|video-policy|video-job|video-provider-evidence|video-playback] [--policy/--job/--evidence FILE]
|
|
199
|
+
maggie media [generate|engine-plan|image-policy|video-policy|video-job|video-provider-evidence|video-playback] [--policy/--job/--evidence FILE]
|
|
197
200
|
maggie provenance --project PATH [--source PATH] [--output FILE]
|
|
198
201
|
maggie scaffold --project PATH --framework astro|nextjs|sveltekit|nuxt|vite-react|vite-vue [--write --confirm]
|
|
199
202
|
maggie brand-kit --manifest FILE | --project PATH --design DESIGN.md [--write --confirm]
|
|
@@ -439,6 +442,34 @@ function syncTree(source, target, force, root = null, managedFiles = {}, stats =
|
|
|
439
442
|
return changed;
|
|
440
443
|
}
|
|
441
444
|
|
|
445
|
+
// Files an earlier package installed that this package no longer ships (for
|
|
446
|
+
// example maintainer documents that were removed from the bundle). Delete a
|
|
447
|
+
// file only when it is still exactly what Maggie installed; keep and report
|
|
448
|
+
// anything changed locally or never installed by Maggie.
|
|
449
|
+
function pruneTree(source, target, root, managedFiles = {}, stats = { removed: 0, kept: 0 }, dryRun = false) {
|
|
450
|
+
if (!existsSync(target)) return stats;
|
|
451
|
+
for (const entry of readdirSync(target, { withFileTypes: true })) {
|
|
452
|
+
const sourcePath = join(source, entry.name);
|
|
453
|
+
const targetPath = join(target, entry.name);
|
|
454
|
+
if (entry.isDirectory()) {
|
|
455
|
+
pruneTree(sourcePath, targetPath, root, managedFiles, stats, dryRun);
|
|
456
|
+
if (!dryRun && !existsSync(sourcePath) && existsSync(targetPath) && !readdirSync(targetPath).length) rmSync(targetPath, { recursive: true });
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
if (existsSync(sourcePath)) continue;
|
|
460
|
+
const managedPath = root ? relative(root, targetPath) : targetPath;
|
|
461
|
+
if (managedFiles[managedPath] && managedFiles[managedPath] === digest(targetPath)) {
|
|
462
|
+
if (!dryRun) rmSync(targetPath);
|
|
463
|
+
console.log(`${dryRun ? "stale" : "removed"} ${targetPath} (no longer shipped)`);
|
|
464
|
+
stats.removed++;
|
|
465
|
+
} else {
|
|
466
|
+
console.log(`kept ${targetPath} (not in this package; local or changed file)`);
|
|
467
|
+
stats.kept++;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return stats;
|
|
471
|
+
}
|
|
472
|
+
|
|
442
473
|
function collectManagedFiles(source, target, root, managedFiles, previousManagedFiles = {}) {
|
|
443
474
|
if (!existsSync(source) || !existsSync(target)) return;
|
|
444
475
|
const sourceStat = readdirSync;
|
|
@@ -567,7 +598,7 @@ function update(args) {
|
|
|
567
598
|
const previousManagedFiles = previousManifest.managedFiles && typeof previousManifest.managedFiles === "object" ? previousManifest.managedFiles : {};
|
|
568
599
|
if (!existsSync(SKILLS_ROOT)) throw new Error("bundled skills are missing; run npm pack from the package source");
|
|
569
600
|
let updated = 0;
|
|
570
|
-
const stats = { unchanged: 0, preserved: 0 };
|
|
601
|
+
const stats = { unchanged: 0, preserved: 0, removed: 0, kept: 0 };
|
|
571
602
|
const managedRoot = scope === USER_SCOPE ? "/" : root;
|
|
572
603
|
for (const agentRoot of roots) {
|
|
573
604
|
for (const skill of skills) {
|
|
@@ -579,7 +610,14 @@ function update(args) {
|
|
|
579
610
|
}
|
|
580
611
|
updated += syncTree(source, target, force, managedRoot, previousManagedFiles, stats);
|
|
581
612
|
}
|
|
582
|
-
if (existsSync(REFERENCES_ROOT) && existsSync(join(agentRoot, "references")))
|
|
613
|
+
if (existsSync(REFERENCES_ROOT) && existsSync(join(agentRoot, "references"))) {
|
|
614
|
+
updated += syncTree(REFERENCES_ROOT, join(agentRoot, "references"), force, managedRoot, previousManagedFiles, stats);
|
|
615
|
+
pruneTree(REFERENCES_ROOT, join(agentRoot, "references"), managedRoot, previousManagedFiles, stats);
|
|
616
|
+
}
|
|
617
|
+
for (const skill of skills) {
|
|
618
|
+
const target = join(agentRoot, "skills", skill);
|
|
619
|
+
if (existsSync(target)) pruneTree(join(SKILLS_ROOT, skill), target, managedRoot, previousManagedFiles, stats);
|
|
620
|
+
}
|
|
583
621
|
}
|
|
584
622
|
if (scope === PROJECT_SCOPE) {
|
|
585
623
|
const tools = join(root, "tools");
|
|
@@ -600,7 +638,7 @@ function update(args) {
|
|
|
600
638
|
? { scope, version: PACKAGE_VERSION, agents: manifestRoots, skills: updatedUserSkills, skillsByAgent: userSkillInventory(manifestRoots), managedFiles: userManagedFileDigests(manifestRoots, updatedUserSkills, previousManagedFiles), updated_at: new Date().toISOString() }
|
|
601
639
|
: { scope, version: PACKAGE_VERSION, agents: roots.map((item) => item.slice(root.length + 1)), skills: mergedSkillNames(root, skills), managedFiles: managedFileDigests(root, roots, skills, previousManagedFiles), updated_at: new Date().toISOString() };
|
|
602
640
|
writeInstallManifest(root, manifest, scope);
|
|
603
|
-
console.log(`Maggie ${scope} update complete: ${updated} files changed, ${stats.unchanged} unchanged, ${stats.preserved} preserved`);
|
|
641
|
+
console.log(`Maggie ${scope} update complete: ${updated} files changed, ${stats.unchanged} unchanged, ${stats.preserved} preserved${stats.removed ? `, ${stats.removed} removed` : ""}${stats.kept ? `, ${stats.kept} unshipped kept` : ""}`);
|
|
604
642
|
if (stats.preserved) console.log("Local files with changes were preserved. Review the output and rerun with --force only when replacement is intended.");
|
|
605
643
|
}
|
|
606
644
|
|
|
@@ -697,6 +735,10 @@ function doctor(args) {
|
|
|
697
735
|
console.log(`${inventoryState} user-skill-inventory manifest=${expected?.length ?? "unknown"} on-disk=${installedNames.size}${missing.length ? ` missing=${missing.join(",")}` : ""}`);
|
|
698
736
|
console.log(`INFO user-install-manifest=${installManifestPath(root, scope)}`);
|
|
699
737
|
console.log(`INFO installed-skills=${installedNames.size}`);
|
|
738
|
+
const managedFiles = manifest?.managedFiles && typeof manifest.managedFiles === "object" ? manifest.managedFiles : {};
|
|
739
|
+
const stale = { removed: 0, kept: 0 };
|
|
740
|
+
for (const agentRoot of roots) if (existsSync(REFERENCES_ROOT)) pruneTree(REFERENCES_ROOT, join(agentRoot, "references"), "/", managedFiles, stale, true);
|
|
741
|
+
console.log(`${stale.removed ? "WARN" : stale.kept ? "INFO" : "PASS"} user-references-shipped stale=${stale.removed} unshipped-local=${stale.kept}${stale.removed ? " (run maggie update --scope user to remove)" : ""}`);
|
|
700
742
|
if (inventoryState === "INCOMPLETE") process.exitCode = 1;
|
|
701
743
|
return;
|
|
702
744
|
}
|
|
@@ -795,13 +837,14 @@ try {
|
|
|
795
837
|
else if (command === "design" && args[0] === "markup-check") workflowCli("maggie_design.py", args);
|
|
796
838
|
else if (command === "design") workflowCli("maggie_design.py", args);
|
|
797
839
|
else if (command === "auth") workflowCli("maggie_auth.py", args);
|
|
840
|
+
else if (command === "blog" && args[0] === "live-urls") workflowCli("maggie_live_urls.py", args.slice(1));
|
|
798
841
|
else if (command === "blog") workflowCli("maggie_blog.py", args);
|
|
799
842
|
else if (command === "service") service(args);
|
|
800
843
|
else if (command === "docs") docs(args);
|
|
801
844
|
else if (command === "seo") seo(args);
|
|
802
845
|
else if (command === "ops") workflowCli("maggie_ops.py", args);
|
|
803
846
|
else if (command === "deployment" && ["bridge-plan", "bridge-collect-script", "bridge-check"].includes(args[0])) workflowCli("maggie_bridge_host.py", args);
|
|
804
|
-
else if (command === "deployment" && ["cloudflare-preflight", "file-parity", "warm-check", "vps-release"].includes(args[0])) workflowCli("maggie_deployment_ops.py", args);
|
|
847
|
+
else if (command === "deployment" && ["cloudflare-preflight", "file-parity", "warm-check", "vps-release", "preview-auth-check"].includes(args[0])) workflowCli("maggie_deployment_ops.py", args);
|
|
805
848
|
else if (command === "mobile") workflowCli("maggie_mobile.py", args);
|
|
806
849
|
else if (command === "assistant") workflowCli("maggie_assistant_tools.py", args);
|
|
807
850
|
else if (command === "product") workflowCli("maggie_product_release.py", args);
|
|
@@ -817,6 +860,7 @@ try {
|
|
|
817
860
|
else if (command === "migration") workflowCli("maggie_migration.py", args);
|
|
818
861
|
else if (command === "schedule") workflowCli("maggie_schedule.py", args);
|
|
819
862
|
else if (command === "analytics") workflowCli("maggie_analytics.py", args);
|
|
863
|
+
else if (command === "media" && ["generate", "engine-plan"].includes(args[0])) workflowCli("maggie_media_generate.py", args);
|
|
820
864
|
else if (["media", "provenance", "scaffold", "brand-kit", "npm11", "booking-delivery"].includes(command)) {
|
|
821
865
|
const workflowArgs = command === "media" ? ["media", ...args] : command === "brand-kit" ? ["brand-kit", ...args] : command === "npm11" ? ["npm11", ...args] : command === "booking-delivery" ? ["booking-delivery", ...args] : [command, ...args];
|
|
822
866
|
workflowCli("maggie_workflows.py", workflowArgs);
|
|
@@ -199,7 +199,7 @@ tenant and must never include committed cookies or customer exports.
|
|
|
199
199
|
Existing v1 artifacts do not satisfy the current v2 gate and must be recaptured;
|
|
200
200
|
do not relabel older evidence because it lacks the route-specific observations.
|
|
201
201
|
|
|
202
|
-
The canonical MaggieDash workflows,
|
|
202
|
+
The canonical MaggieDash workflows, a host repository's root workflows, and
|
|
203
203
|
both capture commands validate `base_url` against the selected GitHub
|
|
204
204
|
environment's exact-host
|
|
205
205
|
`BOOKING_TEST_HOST_ALLOWLIST` variable. The value is a comma- or
|
|
@@ -67,7 +67,7 @@ loaded, the structured error output retains that prior timestamp for stale
|
|
|
67
67
|
health evaluation. An external scheduler monitor is still required to detect
|
|
68
68
|
a worker that never starts, because no in-process health report can be emitted
|
|
69
69
|
while the process is down.
|
|
70
|
-
The additive status table is now present in
|
|
70
|
+
The additive status table is now present in the reference host's staging; the six-job preview
|
|
71
71
|
there passed with `write=false`, zero alerts, and no provider dispatch. The
|
|
72
72
|
preview intentionally left `last_success_at` empty. Production still needs the
|
|
73
73
|
schema migration before the updated worker can run.
|
|
@@ -104,7 +104,7 @@ claim or delivery result. `--write` performs database writes and invokes the
|
|
|
104
104
|
host provider for each claimed notification. Reconcile staging outbox/provider
|
|
105
105
|
activity before any write-mode run.
|
|
106
106
|
|
|
107
|
-
The generic Astro PostgreSQL worker and
|
|
107
|
+
The generic Astro PostgreSQL worker and the reference host's worker include the
|
|
108
108
|
schema-versioned `health` summary in successful cycle output and caught
|
|
109
109
|
schema/lock/runtime failures. It carries stable alert codes, severity, a
|
|
110
110
|
correlation ID, and counts only; the worker does not send an alert itself.
|
|
@@ -56,6 +56,14 @@ Search/sort views are not indexable; drafts never appear in public routes, RSS,
|
|
|
56
56
|
or sitemap output. Provider keys remain server-side. Public publication and
|
|
57
57
|
migrations always require explicit confirmation.
|
|
58
58
|
|
|
59
|
+
API Pull deliveries need their live URL recorded so social posts and internal
|
|
60
|
+
links point at the page that exists now: the site reports it on publish
|
|
61
|
+
(`maggie blog live-urls record --content-id ID --url URL`), and
|
|
62
|
+
`maggie blog live-urls match --sitemap URL --write` fills the gaps
|
|
63
|
+
additively — it never retires an earlier match, and the original page wins
|
|
64
|
+
over translated copies that share the slug. See
|
|
65
|
+
[where a delivered post went live](../../bundled-tools/integrations/maggie-api-pull.md#where-a-delivered-post-went-live).
|
|
66
|
+
|
|
59
67
|
Automatic publication is an opt-in host policy, not the default. Keep human
|
|
60
68
|
review enabled unless the owner explicitly chooses otherwise. If a host has
|
|
61
69
|
that approval, validate its evidence before its scheduler calls the host's
|
|
@@ -21,9 +21,9 @@ temporary project detail, secret, or unverified guess into active memory.
|
|
|
21
21
|
|
|
22
22
|
## Contract and safety boundary
|
|
23
23
|
|
|
24
|
-
Read [
|
|
25
|
-
[
|
|
26
|
-
reference before changing code. MaggieDash owns the manager UI and versioned
|
|
24
|
+
Read the [PRD](../../bundled-references/maggiedash-booking/PRD.md), the
|
|
25
|
+
[host adapter contract](../../bundled-references/maggiedash-booking/HOST-ADAPTER.md) and the
|
|
26
|
+
task's linked reference before changing code. MaggieDash owns the manager UI and versioned
|
|
27
27
|
contracts. The host owns routes, traditional email/password sessions,
|
|
28
28
|
PostgreSQL connection/transaction lifetime, tenant authorization, provider
|
|
29
29
|
credentials, payment webhooks, notifications, and deployment. MaggieDash also
|
|
@@ -32,11 +32,12 @@ booking, customer, configuration, schedule, health, audit, hold, and lifecycle
|
|
|
32
32
|
persistence; it does not replace host connection ownership or payment/public-
|
|
33
33
|
checkout adapters.
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
mark a task passed until its
|
|
39
|
-
record are complete.
|
|
35
|
+
Maintainers changing MaggieDash Booking itself work from the delivery board
|
|
36
|
+
and runbook in the Maggie source repository (`docs/maggiedash-booking/`
|
|
37
|
+
`EXECUTION-BOARD.json`, `TASK-RUNBOOK.md`, `TASKS.md`, `PROGRESS.md`); they are
|
|
38
|
+
not installed with the skill. Do not mark a task passed until its
|
|
39
|
+
implementation gate, docs update, and evidence record are complete. A host
|
|
40
|
+
project records its own evidence in its own repository.
|
|
40
41
|
|
|
41
42
|
Never put provider secrets, database credentials, payment card data, or a
|
|
42
43
|
customer export in UI props, browser bundles, fixtures, screenshots, or
|
|
@@ -127,6 +128,12 @@ Booking installer:
|
|
|
127
128
|
maggie booking install --project . --confirm
|
|
128
129
|
```
|
|
129
130
|
|
|
131
|
+
Booking is an optional MaggieDash module: this installs the core (if it is
|
|
132
|
+
not there yet) plus Booking, the same as `maggie dash add booking --confirm`.
|
|
133
|
+
Install it only when the business takes bookings — `maggie dash install`
|
|
134
|
+
alone gives a content site the core without payment or booking files, and
|
|
135
|
+
`maggie dash recommend` says whether the site looks like it sells services.
|
|
136
|
+
|
|
130
137
|
For a host project that does not already contain the Booking runtime packages,
|
|
131
138
|
let the installer add only the missing dependencies through the package manager
|
|
132
139
|
already declared by the project (`npm`, `pnpm`, `yarn`, or `bun`):
|
|
@@ -156,7 +163,7 @@ Use `--schedule systemd` or `--schedule cron` with `--ready` only to generate a
|
|
|
156
163
|
reviewable scheduler artifact; enabling it remains an operator action after
|
|
157
164
|
backup, migration, and release evidence checks.
|
|
158
165
|
|
|
159
|
-
The default installer source is MaggieDash `main` (currently `0.2.
|
|
166
|
+
The default installer source is MaggieDash `main` (currently `0.2.14`; pin
|
|
160
167
|
another release with `--ref`). It contains the released Astro `hostBootstrap`
|
|
161
168
|
manifest and 47-route Booking source, including the tenant-scoped treatment
|
|
162
169
|
package catalogue, and follows the booking rules above (manage-link state
|
|
@@ -364,7 +371,7 @@ settings, reports, and audit. If `permissions_json` is absent on a legacy role,
|
|
|
364
371
|
apply the safe role defaults server-side; never treat a missing object as full
|
|
365
372
|
read access. Explicitly granted staff capabilities must be honored by the
|
|
366
373
|
route handler, while staff mutations remain limited to approved lifecycle
|
|
367
|
-
transitions. Keep the access contract, Astro host, reference host,
|
|
374
|
+
transitions. Keep the access contract, Astro host, reference host, installed host copies,
|
|
368
375
|
and CLI validator synchronized whenever a route capability changes.
|
|
369
376
|
The bootstrap now uses the host's server-side Resend configuration to send
|
|
370
377
|
single-use invitation and password-reset links; raw tokens are never stored.
|
|
@@ -519,8 +526,9 @@ Follow the task board rather than building a disconnected calendar first:
|
|
|
519
526
|
6. Add the provider-neutral payment port and a test-mode adapter. Reconcile
|
|
520
527
|
signed duplicate/out-of-order webhooks before enabling capture.
|
|
521
528
|
7. Run the UI source gate, contract gate, host runtime conformance, browser
|
|
522
|
-
journeys, and release gate. Record each command in
|
|
523
|
-
|
|
529
|
+
journeys, and release gate. Record each command in the host project's own
|
|
530
|
+
progress log (maintainers: `docs/maggiedash-booking/PROGRESS.md` in the
|
|
531
|
+
Maggie source repository).
|
|
524
532
|
|
|
525
533
|
8. Verify the scheduled worker queues and delivers a reminder once for a
|
|
526
534
|
confirmed booking inside the 24-hour window. Check the notification
|