@topy-ai/maggie 0.7.53 → 0.7.55
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 +80 -64
- package/bin/maggie.js +61 -9
- package/bundled-contracts/maggie-assistant-tools/booking-receptionist-example-v1.json +18 -2
- package/bundled-contracts/maggie-assistant-tools/report-v1.schema.json +43 -0
- package/bundled-contracts/maggie-assistant-tools/tool-registry-example-v1.json +249 -11
- package/bundled-contracts/maggie-assistant-tools/tool-registry-v1.schema.json +175 -0
- package/bundled-contracts/maggie-ops/agent-routines-v1.schema.json +48 -0
- package/bundled-references/maggiedash-booking/QA-TEST-PLAN.md +1 -1
- package/bundled-references/maggiedash-booking/RUNTIME-OPERATIONS.md +2 -2
- package/bundled-skills/catalog.json +1 -1
- package/bundled-skills/maggie-assistant-tools/SKILL.md +34 -1
- package/bundled-skills/maggie-assistant-tools/references/report-inbox.md +45 -0
- package/bundled-skills/maggie-assistant-tools/references/unattended-agents.md +70 -0
- package/bundled-skills/maggie-blog/SKILL.md +15 -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 +37 -2
- package/bundled-skills/maggie-deployment/SKILL.md +104 -1
- package/bundled-skills/maggie-deployment/references/vps.md +5 -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 +22 -2
- 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-ops/SKILL.md +28 -0
- package/bundled-skills/maggie-ops/references/agents-repository.md +108 -0
- package/bundled-skills/maggie-ops/references/ops-autopilot.md +65 -0
- package/bundled-skills/maggie-ops/references/routine-mode.md +92 -0
- package/bundled-skills/maggie-seo-geo/SKILL.md +9 -1
- package/bundled-skills/maggie-social-share/SKILL.md +50 -0
- package/bundled-tools/clis/maggie.py +63 -3
- package/bundled-tools/clis/maggie_assistant_tools.py +225 -1
- 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_host_runtime.py +458 -0
- package/bundled-tools/clis/maggie_live_urls.py +147 -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_ops.py +2 -0
- package/bundled-tools/clis/maggie_ops_routines.py +352 -0
- package/bundled-tools/clis/maggie_product_release.py +49 -1
- package/bundled-tools/clis/maggie_query_ideas.py +154 -0
- package/bundled-tools/clis/maggie_skill_catalog.py +16 -2
- package/bundled-tools/clis/maggie_social_share.py +223 -2
- package/bundled-tools/clis/maggie_version_sources.py +93 -0
- package/bundled-tools/integrations/maggie-api-pull.md +49 -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
|
-
|
|
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.55`:完成 feedback batch 31,共 16 條,來自一個以排程 AI agent 操作自家行銷產品、同時維護 PHP 主機的團隊,並同步發布 MaggieDash 0.2.15。
|
|
33
|
+
|
|
34
|
+
- **排程 agent(`maggie-ops`)**:
|
|
35
|
+
- Skill 的「Routine mode」範本:何時執行、讀什麼、可確認哪些寫入與每日上限、失敗時怎麼辦,最後一定存一份報告。排程規則:排在伺服器自己的工作之後、避開整點,並留在平台每日執行次數上限內。
|
|
36
|
+
- `maggie ops routines-check routines.json` 依上述規則檢查 routines 檔;`maggie ops routines-payload` 產生 agents repository 送給 MaggieDash Routines 分頁的內容。
|
|
37
|
+
- Ops Autopilot 模式:每日例行工作在伺服器上以網站當地時間、每個週期只跑一次,絕不重發可能已上線的內容;agent 先讀它的狀態,只補上判斷。
|
|
38
|
+
- **AI 助理工具(`maggie-assistant-tools`)**:
|
|
39
|
+
- 報告收件匣:每次無人值守的執行都在這裡留下結果(存、列、讀;每站每日上限;標題、摘要與內文視為不可信)。`maggie assistant report-check` 檢查報告。
|
|
40
|
+
- 限制由伺服器執行:agent key 的長期工具要有每日數量;登入(OAuth)連線能用到的每個寫入工具都要有每日上限。登入連線預設取得該角色的完整工具集,縮小時必須說明原因。
|
|
41
|
+
- 會截短文字的列表工具,每一筆都要標示已截短,並指名能取得全文的 get 工具。`maggie assistant list-check` 找出看起來被截斷的項目。
|
|
42
|
+
- **PHP 主機與安全公告(`maggie-deployment`)**:
|
|
43
|
+
- `maggie deployment runtime-inventory` 從 `nginx -T`(包含 symlink 到 `sites-enabled` 的設定)列出每個網站的 PHP runtime,標出已停止支援的作業系統與過舊的固定 image 版本,並為每個受影響的網站產生遷移計畫:綁在 127.0.0.1 的容器、唯讀掛載網站、nginx 變更、啟動後檢查與回復步驟。
|
|
44
|
+
- PHP image 一律以 `--entrypoint docker-php-entrypoint` 啟動。`wordpress:*-fpm` 的預設 entrypoint 會把 WordPress 複製進沒有 `wp-config.php` 的掛載目錄。
|
|
45
|
+
- `maggie deployment host-lock` 避免兩個 agent session 同時修改同一台主機,並列出最近的變更。
|
|
46
|
+
- **Blog API Pull**:改寫內容現在會送到 pull 網站:讀取 `/updates`,新內文套用到它所屬的文章(依原始 content id、slug 或網址),並保留上線網址。`live-urls match` 也會補上網址為空的已追蹤文章。
|
|
47
|
+
- **Search Console 點子**:`maggie seo query-ideas` 不會把 `site:` 查詢、單純網域或只有品牌名的查詢變成點子,單複數視為同一主題。
|
|
48
|
+
- **社群佇列**:`maggie tool maggie_social_share.py used-on` / `queue-check`:同一篇文章在某個頻道分享後 30 天內不會在該頻道重用(其他頻道不受影響);每則貼文都要有圖片;自動模式下選配檢查不再擋住貼文;「全部核准」包含被擋住的貼文。
|
|
49
|
+
- **單一版本來源**:`VERSION` 與 `package.json` 不一致時拒絕打包,發佈前會檢查所有 release 文件,`maggie skills package` 必須明確指定版本來源。
|
|
50
|
+
- **MaggieDash 0.2.15** 新增 AI agents 工作區,管理 host 自己的 MCP:附工具與每日上限的 token、登入連線、逐次呼叫復原、Google 分析連線,以及同步的 routines。
|
|
51
|
+
|
|
52
|
+
前一版 `0.7.54` 完成 feedback batch 30(13 條,來自在自家網站執行 MaggieDash 的內容與社群產品):MaggieDash 先裝核心、release privacy gate、feedback 備援到 `feedback.cmo.so`、社群 `link-check` 與 `pictures`、`blog live-urls`、`design bulk`、`sheet-check`、`media generate`、`mobile ota-guard`、`preview-auth-check` 與 `product published`。
|
|
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.55`,包含 batch 31 排程 agent routines、報告收件匣與無人值守 agent 限制、PHP runtime 盤點與主機鎖、pull 網站改寫、query 點子與社群佇列檢查,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,73 @@ 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.55`. It closes feedback batch 31: 16 records from a team that runs scheduled AI
|
|
93
|
+
agents against its own marketing product and maintains PHP hosts, plus
|
|
94
|
+
MaggieDash 0.2.15.
|
|
95
|
+
|
|
96
|
+
- **Scheduled agents (`maggie-ops`).**
|
|
97
|
+
- A "Routine mode" template for skills: when it runs, what it reads, which
|
|
98
|
+
writes it may confirm and how many a day, what to do on failure, and that
|
|
99
|
+
it ends by saving a report. Scheduling rules: start after the server's own
|
|
100
|
+
jobs and off the hour, and stay inside the platform's daily run cap.
|
|
101
|
+
- `maggie ops routines-check routines.json` checks a routines file against
|
|
102
|
+
those rules. `maggie ops routines-payload` builds the body an agents
|
|
103
|
+
repository sends to MaggieDash's Routines tab.
|
|
104
|
+
- The Ops Autopilot pattern: daily chores run on the server, once per
|
|
105
|
+
period, in the site's local time, and never repost something that may
|
|
106
|
+
already be live. Agents read its state first and add judgement.
|
|
107
|
+
- **AI assistant tools (`maggie-assistant-tools`).**
|
|
108
|
+
- A report inbox where every unattended run leaves its result (save, list,
|
|
109
|
+
get; daily cap per site; title, summary and body treated as untrusted).
|
|
110
|
+
`maggie assistant report-check` checks a report.
|
|
111
|
+
- Limits are the server's: agent keys get standing tools with a daily
|
|
112
|
+
number, and every write a sign-in (OAuth) connection can reach needs a
|
|
113
|
+
daily cap. A sign-in connection gets the role's whole tool set unless the
|
|
114
|
+
narrowing is stated.
|
|
115
|
+
- A list tool that shortens text must say so on each item and name a get
|
|
116
|
+
tool that returns the full text. `maggie assistant list-check` finds
|
|
117
|
+
items that look cut off.
|
|
118
|
+
- **PHP hosts and advisories (`maggie-deployment`).**
|
|
119
|
+
- `maggie deployment runtime-inventory` lists each site's PHP runtime from
|
|
120
|
+
`nginx -T` (symlinked `sites-enabled` files included), flags end-of-life
|
|
121
|
+
operating systems and stale pinned images, and writes a migration plan
|
|
122
|
+
per affected site: a container on 127.0.0.1, the site mounted read-only,
|
|
123
|
+
the nginx change, checks after start and a rollback.
|
|
124
|
+
- PHP images always start with `--entrypoint docker-php-entrypoint`. The
|
|
125
|
+
`wordpress:*-fpm` default entrypoint copies WordPress into a mounted site
|
|
126
|
+
that has no `wp-config.php`.
|
|
127
|
+
- `maggie deployment host-lock` stops two agent sessions from changing the
|
|
128
|
+
same host at once and shows what changed recently.
|
|
129
|
+
- **Blog API Pull.** Rewrites now reach pull-delivered sites: `/updates` is
|
|
130
|
+
read, the new body lands on the post it belongs to (by its original content
|
|
131
|
+
id, slug or address) and keeps its live URL. `live-urls match` also fills
|
|
132
|
+
posts tracked with an empty URL.
|
|
133
|
+
- **Search Console ideas.** `maggie seo query-ideas` never turns `site:`
|
|
134
|
+
queries, bare domains or the brand name alone into ideas, and treats
|
|
135
|
+
singular and plural as one topic.
|
|
136
|
+
- **Social queue.** `maggie tool maggie_social_share.py used-on` / `queue-check`: an article
|
|
137
|
+
shared on a channel is not reused there for 30 days (other channels stay
|
|
138
|
+
free); every post needs a picture; in auto mode optional checks no longer
|
|
139
|
+
hold posts; Approve all includes held posts.
|
|
140
|
+
- **One version source.** Packaging refuses when `VERSION` and
|
|
141
|
+
`package.json` disagree, publishing checks every release document, and
|
|
142
|
+
`maggie skills package` needs an explicit version source.
|
|
143
|
+
- **MaggieDash 0.2.15** adds the AI agents workspace for a host's own MCP:
|
|
144
|
+
tokens with tools and a daily limit, sign-in connections, per-call undo,
|
|
145
|
+
Google analytics connection and synced routines.
|
|
146
|
+
|
|
147
|
+
0.7.54 closed feedback batch 30 (13 records from a content and social product
|
|
148
|
+
running MaggieDash): core-first `maggie dash install`, the release privacy
|
|
149
|
+
gate, feedback fallback to `feedback.cmo.so`, social `link-check` and
|
|
150
|
+
`pictures`, `blog live-urls`, `design bulk`, `sheet-check`, `media generate`,
|
|
151
|
+
`mobile ota-guard`, `preview-auth-check` and `product published`.
|
|
152
|
+
|
|
153
|
+
0.7.53 closed feedback batch 29 (56 records from a booking marketplace and a
|
|
154
|
+
social/assistant product): booking rules with shared test vectors, Stripe
|
|
155
|
+
Connect platform guidance and `connect-qa`, MaggieDash 0.2.13 booking fixes,
|
|
156
|
+
`cloudflare-preflight`, `vps-release`, `qa fit-check`, `mobile ota
|
|
157
|
+
--build-ref`, assistant registry cards and standing approvals, own-domain
|
|
158
|
+
social sources and `seo origin-check`.
|
|
148
159
|
|
|
149
160
|
0.7.52 added mobile follow-ups: `eas update --environment`, a fingerprint gate,
|
|
150
161
|
and `maggie design safe-area-check`. 0.7.51 (batch 28) added
|
|
@@ -219,7 +230,7 @@ contract/CLI sync with escaped `arrivalNote` rendering:
|
|
|
219
230
|
- Feedback: an `improvement` type (hosted as `feature` + `subtype`) and
|
|
220
231
|
`maggie feedback session-summary`.
|
|
221
232
|
- MaggieDash 0.2.11 holds outbox emails whose template is not yet deployed
|
|
222
|
-
instead of dead-lettering them, and upstreams generic fixes from
|
|
233
|
+
instead of dead-lettering them, and upstreams generic fixes from a client host.
|
|
223
234
|
|
|
224
235
|
The 0.7.47 release remains included: project
|
|
225
236
|
initialization creates the repository's Maggie Memory store, memory context
|
|
@@ -240,7 +251,7 @@ It also includes the 0.7.45 one-time user-scope installation for
|
|
|
240
251
|
Codex and Claude Code, a bundled workflow runner, and scoped maintenance
|
|
241
252
|
commands. It also closes the 2026-09-24 booking feedback
|
|
242
253
|
batch with the canonical MaggieDash Calendar availability grid/free-slot
|
|
243
|
-
entry and documented
|
|
254
|
+
entry and documented host modal focus-restoration evidence. It also adds the
|
|
244
255
|
secret-free Starter marketplace
|
|
245
256
|
provisioning plan and bundles versioned GitHub repository, Cloudflare Pages,
|
|
246
257
|
Starter site, and Starter release contracts. `maggie marketplace plan` emits a
|
|
@@ -799,8 +810,8 @@ artifact schemas.
|
|
|
799
810
|
Recommended upgrade sequence for the current release:
|
|
800
811
|
|
|
801
812
|
```bash
|
|
802
|
-
npx @topy-ai/maggie@0.7.
|
|
803
|
-
npx @topy-ai/maggie@0.7.
|
|
813
|
+
npx @topy-ai/maggie@0.7.55 update --scope project --project . --force
|
|
814
|
+
npx @topy-ai/maggie@0.7.55 cleanup --scope project --project .
|
|
804
815
|
```
|
|
805
816
|
|
|
806
817
|
Maintainers should pass npm credentials through the repository helper, never
|
|
@@ -889,8 +900,10 @@ maggie dash status --project .
|
|
|
889
900
|
maggie doctor --project .
|
|
890
901
|
```
|
|
891
902
|
|
|
892
|
-
`maggie dash install` installs the
|
|
893
|
-
|
|
903
|
+
`maggie dash install` installs the MaggieDash core (dashboard source in
|
|
904
|
+
`./_maggie/admin`, sign-in, the `/_maggie/admin` route and the core schema),
|
|
905
|
+
preserving local files unless `--force` is used, and prints recommendations for
|
|
906
|
+
optional modules. Add one only when wanted: `maggie dash add booking --confirm`.
|
|
894
907
|
It records the resolved source revision in `.maggie/dash-install.json`. During
|
|
895
908
|
bootstrap this is enabled by default; use `--dash-source /path/to/MaggieDash`
|
|
896
909
|
for local development or a configured private Git URL. The host project keeps
|
|
@@ -1072,10 +1085,13 @@ maggie feedback collect --project . \
|
|
|
1072
1085
|
--actual "Hero is wider than the viewport" \
|
|
1073
1086
|
--error-fingerprint css-layout-overflow
|
|
1074
1087
|
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
|
|
1088
|
+
maggie feedback submit .maggie/feedback/<feedback-id>.json --confirm
|
|
1077
1089
|
```
|
|
1078
1090
|
|
|
1091
|
+
Without `--endpoint` the draft goes to the NoBlox host and, only if that host
|
|
1092
|
+
fails before storing it (no connection or a 5xx), to `feedback.cmo.so`; both
|
|
1093
|
+
drop duplicates by `feedbackId`.
|
|
1094
|
+
|
|
1079
1095
|
For related observations, create 1–50 local drafts with shared correlation
|
|
1080
1096
|
metadata and review them before submitting:
|
|
1081
1097
|
|
package/bin/maggie.js
CHANGED
|
@@ -100,11 +100,12 @@ 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]
|
|
107
107
|
maggie seo fragment-check --url URL [--url URL2] [--cookie-env NAME]
|
|
108
|
+
maggie seo query-ideas ROWS.json [--coverage FILE] [--brand NAME] [--limit 5]
|
|
108
109
|
maggie content FILE --source PROVIDER --project PATH --confirm
|
|
109
110
|
maggie agent-content write --url URL --allowed-origin ORIGIN --token-env ENV --payload FILE
|
|
110
111
|
maggie bootstrap phase <start|pass|fail|status> <phase> [project]
|
|
@@ -144,7 +145,7 @@ Usage:
|
|
|
144
145
|
maggie design step <job-id> --step NAME --evidence FILE
|
|
145
146
|
maggie auth reference --project PATH --confirm
|
|
146
147
|
maggie auth check --project PATH [--production]
|
|
147
|
-
maggie blog init|inspect|ingest|validate|check-gate|approve|publish|sitemap|settings|rollback|integration-state
|
|
148
|
+
maggie blog init|inspect|ingest|validate|check-gate|approve|publish|sitemap|settings|rollback|integration-state|live-urls
|
|
148
149
|
maggie design status <job-id>
|
|
149
150
|
maggie service import <provider-url> --project PATH
|
|
150
151
|
maggie service sync <provider-url> --project PATH
|
|
@@ -171,13 +172,20 @@ Usage:
|
|
|
171
172
|
maggie deployment cloudflare-preflight --project PATH [--env production] [--env-file .env] [--verify-zone]
|
|
172
173
|
maggie deployment file-parity --host H [--host H2] --root /srv/app/current --path dist/x.mjs [--ref DEPLOYED_COMMIT]
|
|
173
174
|
maggie deployment warm-check --url URL [--warm 3] [--samples 5] [--budget-ms 800]
|
|
175
|
+
maggie deployment preview-auth-check --host preview.example.com [--repo PATH] [--live]
|
|
176
|
+
maggie deployment runtime-inventory --evidence FILE|--ssh USER@HOST|--print-collector [--advisory FILE] [--latest-tags FILE] [--image php:{version}-fpm]
|
|
177
|
+
maggie deployment host-lock acquire|status|release --host USER@HOST|local --session ID [--purpose TEXT] [--ttl 3600]
|
|
174
178
|
maggie deployment vps-release --host deploy@HOST --release-root /srv/app --service app --env-file /etc/app.env [--health-url URL] [--confirm]
|
|
175
179
|
maggie mobile preflight|plan --project PATH [--app-dir apps/app] [--profile production] [--platform ios|android|all] [--auto-submit] [--build-ref REF]
|
|
176
180
|
maggie mobile ota --project PATH --build-ref REF --build-id ID --message TEXT [--confirm]
|
|
181
|
+
maggie mobile ota-guard --project PATH --platform ios|android --runtimes FILE [--publish --message TEXT --confirm]
|
|
177
182
|
maggie assistant registry-validate|annotations|capability-page|audit-check --registry FILE [--mcp-tools FILE] [--session FILE] [--output FILE]
|
|
178
183
|
maggie assistant approval-selftest
|
|
184
|
+
maggie assistant list-check --registry FILE --tool NAME --result FILE
|
|
185
|
+
maggie assistant report-check --report FILE [--registry FILE]
|
|
179
186
|
maggie product release-check --package DIR [--server-json FILE] [--changelog FILE] [--pack]
|
|
180
187
|
maggie product smoke --package DIR | mcp-check --mcp-url URL | review-status --reviews FILE [--chatgpt-plugin FILE]
|
|
188
|
+
maggie product published --package-name NAME --version X [--wait 600] [--publish-log FILE]
|
|
181
189
|
maggie skills scaffold|validate|package|smoke --root DIR [--out DIR --prefix NAME --owner NAME] [--claude]
|
|
182
190
|
maggie deployment env-isolation --project PATH --production-env .env.production
|
|
183
191
|
maggie deployment readiness --project PATH
|
|
@@ -193,7 +201,7 @@ Usage:
|
|
|
193
201
|
maggie schedule PATH/.maggie/schedule.json --project PATH
|
|
194
202
|
maggie analytics [traffic-audit|release-gate] --project PATH --environment staging
|
|
195
203
|
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]
|
|
204
|
+
maggie media [generate|engine-plan|image-policy|video-policy|video-job|video-provider-evidence|video-playback] [--policy/--job/--evidence FILE]
|
|
197
205
|
maggie provenance --project PATH [--source PATH] [--output FILE]
|
|
198
206
|
maggie scaffold --project PATH --framework astro|nextjs|sveltekit|nuxt|vite-react|vite-vue [--write --confirm]
|
|
199
207
|
maggie brand-kit --manifest FILE | --project PATH --design DESIGN.md [--write --confirm]
|
|
@@ -217,6 +225,8 @@ Usage:
|
|
|
217
225
|
maggie ops google-ads-preflight|google-ads-keyword-ideas --customer-id ID [--login-customer-id ID]
|
|
218
226
|
maggie ops notifications catalogue|templates|preflight|health|retention|alerts --project PATH ...
|
|
219
227
|
maggie ops preflight --project PATH --write
|
|
228
|
+
maggie ops routines-check routines.json [--server-jobs FILE] [--plan pro|max|team|enterprise]
|
|
229
|
+
maggie ops routines-payload routines.json --repo OWNER/NAME [--commit SHA] [--output FILE]
|
|
220
230
|
|
|
221
231
|
Examples:
|
|
222
232
|
npx @topy-ai/maggie init
|
|
@@ -439,6 +449,34 @@ function syncTree(source, target, force, root = null, managedFiles = {}, stats =
|
|
|
439
449
|
return changed;
|
|
440
450
|
}
|
|
441
451
|
|
|
452
|
+
// Files an earlier package installed that this package no longer ships (for
|
|
453
|
+
// example maintainer documents that were removed from the bundle). Delete a
|
|
454
|
+
// file only when it is still exactly what Maggie installed; keep and report
|
|
455
|
+
// anything changed locally or never installed by Maggie.
|
|
456
|
+
function pruneTree(source, target, root, managedFiles = {}, stats = { removed: 0, kept: 0 }, dryRun = false) {
|
|
457
|
+
if (!existsSync(target)) return stats;
|
|
458
|
+
for (const entry of readdirSync(target, { withFileTypes: true })) {
|
|
459
|
+
const sourcePath = join(source, entry.name);
|
|
460
|
+
const targetPath = join(target, entry.name);
|
|
461
|
+
if (entry.isDirectory()) {
|
|
462
|
+
pruneTree(sourcePath, targetPath, root, managedFiles, stats, dryRun);
|
|
463
|
+
if (!dryRun && !existsSync(sourcePath) && existsSync(targetPath) && !readdirSync(targetPath).length) rmSync(targetPath, { recursive: true });
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
if (existsSync(sourcePath)) continue;
|
|
467
|
+
const managedPath = root ? relative(root, targetPath) : targetPath;
|
|
468
|
+
if (managedFiles[managedPath] && managedFiles[managedPath] === digest(targetPath)) {
|
|
469
|
+
if (!dryRun) rmSync(targetPath);
|
|
470
|
+
console.log(`${dryRun ? "stale" : "removed"} ${targetPath} (no longer shipped)`);
|
|
471
|
+
stats.removed++;
|
|
472
|
+
} else {
|
|
473
|
+
console.log(`kept ${targetPath} (not in this package; local or changed file)`);
|
|
474
|
+
stats.kept++;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return stats;
|
|
478
|
+
}
|
|
479
|
+
|
|
442
480
|
function collectManagedFiles(source, target, root, managedFiles, previousManagedFiles = {}) {
|
|
443
481
|
if (!existsSync(source) || !existsSync(target)) return;
|
|
444
482
|
const sourceStat = readdirSync;
|
|
@@ -567,7 +605,7 @@ function update(args) {
|
|
|
567
605
|
const previousManagedFiles = previousManifest.managedFiles && typeof previousManifest.managedFiles === "object" ? previousManifest.managedFiles : {};
|
|
568
606
|
if (!existsSync(SKILLS_ROOT)) throw new Error("bundled skills are missing; run npm pack from the package source");
|
|
569
607
|
let updated = 0;
|
|
570
|
-
const stats = { unchanged: 0, preserved: 0 };
|
|
608
|
+
const stats = { unchanged: 0, preserved: 0, removed: 0, kept: 0 };
|
|
571
609
|
const managedRoot = scope === USER_SCOPE ? "/" : root;
|
|
572
610
|
for (const agentRoot of roots) {
|
|
573
611
|
for (const skill of skills) {
|
|
@@ -579,7 +617,14 @@ function update(args) {
|
|
|
579
617
|
}
|
|
580
618
|
updated += syncTree(source, target, force, managedRoot, previousManagedFiles, stats);
|
|
581
619
|
}
|
|
582
|
-
if (existsSync(REFERENCES_ROOT) && existsSync(join(agentRoot, "references")))
|
|
620
|
+
if (existsSync(REFERENCES_ROOT) && existsSync(join(agentRoot, "references"))) {
|
|
621
|
+
updated += syncTree(REFERENCES_ROOT, join(agentRoot, "references"), force, managedRoot, previousManagedFiles, stats);
|
|
622
|
+
pruneTree(REFERENCES_ROOT, join(agentRoot, "references"), managedRoot, previousManagedFiles, stats);
|
|
623
|
+
}
|
|
624
|
+
for (const skill of skills) {
|
|
625
|
+
const target = join(agentRoot, "skills", skill);
|
|
626
|
+
if (existsSync(target)) pruneTree(join(SKILLS_ROOT, skill), target, managedRoot, previousManagedFiles, stats);
|
|
627
|
+
}
|
|
583
628
|
}
|
|
584
629
|
if (scope === PROJECT_SCOPE) {
|
|
585
630
|
const tools = join(root, "tools");
|
|
@@ -600,7 +645,7 @@ function update(args) {
|
|
|
600
645
|
? { scope, version: PACKAGE_VERSION, agents: manifestRoots, skills: updatedUserSkills, skillsByAgent: userSkillInventory(manifestRoots), managedFiles: userManagedFileDigests(manifestRoots, updatedUserSkills, previousManagedFiles), updated_at: new Date().toISOString() }
|
|
601
646
|
: { 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
647
|
writeInstallManifest(root, manifest, scope);
|
|
603
|
-
console.log(`Maggie ${scope} update complete: ${updated} files changed, ${stats.unchanged} unchanged, ${stats.preserved} preserved`);
|
|
648
|
+
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
649
|
if (stats.preserved) console.log("Local files with changes were preserved. Review the output and rerun with --force only when replacement is intended.");
|
|
605
650
|
}
|
|
606
651
|
|
|
@@ -637,10 +682,10 @@ function docs(args) {
|
|
|
637
682
|
|
|
638
683
|
function seo(args) {
|
|
639
684
|
const command = args[0];
|
|
640
|
-
const scripts = { performance: "maggie_performance.py", images: "maggie_images.py", sitemap: "maggie_sitemap.py", indexnow: "maggie_indexnow.py", "social-cards": "maggie_social_cards.py", "head-tags": "maggie_head_tags.py" };
|
|
685
|
+
const scripts = { performance: "maggie_performance.py", images: "maggie_images.py", sitemap: "maggie_sitemap.py", indexnow: "maggie_indexnow.py", "social-cards": "maggie_social_cards.py", "head-tags": "maggie_head_tags.py", "query-ideas": "maggie_query_ideas.py" };
|
|
641
686
|
if (command === "privacy-check") return workflowCli("maggie_contracts.py", ["privacy-check", ...args.slice(1)]);
|
|
642
687
|
if (command === "origin-check" || command === "fragment-check") return workflowCli("maggie_seo_routes.py", args);
|
|
643
|
-
if (!scripts[command]) throw new Error("seo command must be performance, images, sitemap, indexnow, social-cards, head-tags, privacy-check, origin-check, or fragment-check");
|
|
688
|
+
if (!scripts[command]) throw new Error("seo command must be performance, images, sitemap, indexnow, social-cards, head-tags, query-ideas, privacy-check, origin-check, or fragment-check");
|
|
644
689
|
workflowCli(scripts[command], args.slice(1));
|
|
645
690
|
}
|
|
646
691
|
|
|
@@ -697,6 +742,10 @@ function doctor(args) {
|
|
|
697
742
|
console.log(`${inventoryState} user-skill-inventory manifest=${expected?.length ?? "unknown"} on-disk=${installedNames.size}${missing.length ? ` missing=${missing.join(",")}` : ""}`);
|
|
698
743
|
console.log(`INFO user-install-manifest=${installManifestPath(root, scope)}`);
|
|
699
744
|
console.log(`INFO installed-skills=${installedNames.size}`);
|
|
745
|
+
const managedFiles = manifest?.managedFiles && typeof manifest.managedFiles === "object" ? manifest.managedFiles : {};
|
|
746
|
+
const stale = { removed: 0, kept: 0 };
|
|
747
|
+
for (const agentRoot of roots) if (existsSync(REFERENCES_ROOT)) pruneTree(REFERENCES_ROOT, join(agentRoot, "references"), "/", managedFiles, stale, true);
|
|
748
|
+
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
749
|
if (inventoryState === "INCOMPLETE") process.exitCode = 1;
|
|
701
750
|
return;
|
|
702
751
|
}
|
|
@@ -795,13 +844,14 @@ try {
|
|
|
795
844
|
else if (command === "design" && args[0] === "markup-check") workflowCli("maggie_design.py", args);
|
|
796
845
|
else if (command === "design") workflowCli("maggie_design.py", args);
|
|
797
846
|
else if (command === "auth") workflowCli("maggie_auth.py", args);
|
|
847
|
+
else if (command === "blog" && args[0] === "live-urls") workflowCli("maggie_live_urls.py", args.slice(1));
|
|
798
848
|
else if (command === "blog") workflowCli("maggie_blog.py", args);
|
|
799
849
|
else if (command === "service") service(args);
|
|
800
850
|
else if (command === "docs") docs(args);
|
|
801
851
|
else if (command === "seo") seo(args);
|
|
802
852
|
else if (command === "ops") workflowCli("maggie_ops.py", args);
|
|
803
853
|
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);
|
|
854
|
+
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
855
|
else if (command === "mobile") workflowCli("maggie_mobile.py", args);
|
|
806
856
|
else if (command === "assistant") workflowCli("maggie_assistant_tools.py", args);
|
|
807
857
|
else if (command === "product") workflowCli("maggie_product_release.py", args);
|
|
@@ -812,11 +862,13 @@ try {
|
|
|
812
862
|
else if (command === "deployment" && args[0] === "collect") workflowCli("maggie_deployment_collect.py", args.slice(1));
|
|
813
863
|
else if (command === "deployment" && args[0] === "parity") workflowCli("maggie_deployment_parity.py", args.slice(1));
|
|
814
864
|
else if (command === "deployment" && args[0] === "release-manifest") workflowCli("maggie_release_manifest.py", args.slice(1));
|
|
865
|
+
else if (command === "deployment" && ["runtime-inventory", "host-lock"].includes(args[0])) workflowCli("maggie_host_runtime.py", args);
|
|
815
866
|
else if (command === "deployment" && args[0] === "runtime-preflight") workflowCli("maggie_runtime_preflight.py", args.slice(1));
|
|
816
867
|
else if (command === "deployment") workflowCli("maggie_deployment.py", args);
|
|
817
868
|
else if (command === "migration") workflowCli("maggie_migration.py", args);
|
|
818
869
|
else if (command === "schedule") workflowCli("maggie_schedule.py", args);
|
|
819
870
|
else if (command === "analytics") workflowCli("maggie_analytics.py", args);
|
|
871
|
+
else if (command === "media" && ["generate", "engine-plan"].includes(args[0])) workflowCli("maggie_media_generate.py", args);
|
|
820
872
|
else if (["media", "provenance", "scaffold", "brand-kit", "npm11", "booking-delivery"].includes(command)) {
|
|
821
873
|
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
874
|
workflowCli("maggie_workflows.py", workflowArgs);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "maggie-assistant-tool-registry.v1",
|
|
3
|
-
"description": "Booking receptionist and public discovery MCP for a multi-business booking marketplace. The receptionist answers visitors on one business's page from that business's facts only; it never books, cancels or takes card details
|
|
3
|
+
"description": "Booking receptionist and public discovery MCP for a multi-business booking marketplace. The receptionist answers visitors on one business's page from that business's facts only; it never books, cancels or takes card details — it opens the normal booking sheet at a real free time.",
|
|
4
4
|
"visitorPolicy": {
|
|
5
5
|
"enabledByDefault": false,
|
|
6
6
|
"dailyCaps": {
|
|
@@ -157,5 +157,21 @@
|
|
|
157
157
|
"text": "Give medical advice.",
|
|
158
158
|
"instead": "Ask the business, or your doctor."
|
|
159
159
|
}
|
|
160
|
-
]
|
|
160
|
+
],
|
|
161
|
+
"unattended": {
|
|
162
|
+
"enforcedBy": "server",
|
|
163
|
+
"agentKeys": {
|
|
164
|
+
"canConfirmPreviews": false,
|
|
165
|
+
"refusalReturnsReason": true,
|
|
166
|
+
"standingTools": {}
|
|
167
|
+
},
|
|
168
|
+
"oauth": {
|
|
169
|
+
"server": "owner",
|
|
170
|
+
"defaultTools": "role",
|
|
171
|
+
"dailyWriteLimit": 100,
|
|
172
|
+
"perToolPerDay": {
|
|
173
|
+
"booking_reschedule": 20
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
161
177
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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/report-v1.schema.json",
|
|
4
|
+
"title": "Maggie assistant report",
|
|
5
|
+
"description": "A report a scheduled agent (or the server's own job) leaves in a website's report inbox. Agents end every run by saving one. Checked before saving with `maggie assistant report-check`.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"title",
|
|
9
|
+
"summary"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"schemaVersion": {
|
|
13
|
+
"const": "maggie-assistant-report.v1"
|
|
14
|
+
},
|
|
15
|
+
"kind": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "e.g. weekly, daily_ops, agent, post_health"
|
|
18
|
+
},
|
|
19
|
+
"title": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"minLength": 1,
|
|
22
|
+
"maxLength": 120
|
|
23
|
+
},
|
|
24
|
+
"summary": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"minLength": 1,
|
|
27
|
+
"maxLength": 500,
|
|
28
|
+
"description": "One or two sentences shown in the inbox and the push."
|
|
29
|
+
},
|
|
30
|
+
"body_md": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"maxLength": 50000
|
|
33
|
+
},
|
|
34
|
+
"data": {
|
|
35
|
+
"type": "object"
|
|
36
|
+
},
|
|
37
|
+
"source": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "system:<job> or agent:<key or grant id>; set by the server, never by the caller."
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"additionalProperties": false
|
|
43
|
+
}
|