
宣告、宣告 + 程式碼、純程式碼三種擴充,搭配私有 registry。功能是加上去的,不是砍掉重練。
WebAuthn 登入,沒有密碼可以外洩、可以忘記。這是 sz.ws 的技術宣言,不是選項。
Next.js + OpenNext 部署到 Cloudflare Workers,D1 / R2 存資料,全球就近回應。
三種擴充形態,從一個 manifest 檔到整包程式碼都收。裝好就出現在後台,核心不用改一行。
一個 manifest.json 就是一個功能:內容型別、後台頁面、公開路由全部用宣告描述 —— 右邊的聯絡表單就是 registry 裡的真實範例。
manifest 之外再帶自己的 admin 元件與 SQL,放進 registry 一起發佈、一起版本化。
extensions/<id>/ 整包住進 repo:自己的 admin、公開頁、API 和 kit,編譯期就併進核心。
{ "kind": "declarative", "id": "contact", "coreApi": "^1.3.0", "contentTypes": [{ "name": "submission", "fields": [ { "key": "name", "type": "text", "required": true }, { "key": "email", "type": "text", "required": true }, { "key": "message", "type": "text", "required": true } ] }], "adminPages": [{ "view": "collection", "layout": "table" }], "publicRoutes": [{ "pattern": "/contact", "view": "form" }] }
registry 裡 contact 擴充的 manifest(節錄)—— 宣告式表單,匿名投稿直接落進共用內容表。
cms add 從 registry 抓檔、落地 extensions/<id>/、patch registry.ts。支援私有 registry 的 token,重跑是冪等的 —— 不會重複插行。
~/cms $ npx @sz.ws/cms add contact
registry — manifest.json 已抓取
extensions/contact/ 落地完成
extensions/registry.ts 已 patch
--dry-run 先看它會做什麼;私有 registry 走 SZWS_REGISTRY_TOKEN。
後台內建一個對話面板,直接接你的內容、訂單和設定。它能回答問題、擬修改提案、做真正的運算 —— 但每一次寫入都會先變成提案讓你看過。你沒點頭,什麼都不會變。
新增一篇文章、改一個狀態、退一筆款 —— 每個寫入動作都會先變成提案等你確認,沒有「跳過確認」這個選項。
問它這個月訂單多少,它會用後台儀表板同一套圖表元件畫出來 —— 是從你的資料算出來的真數字,不是編出來的。
Web Worker 裡跑一個 QuickJS 沙盒做運算 —— 模型是真的執行程式碼算數字,不是靠估算出來的。
這些不是截圖,是和後台同一支的真元件 —— 文字可以選取、滑鼠移上去會反應。它們照同一條時間軸循環演:⌘K 搜尋、數字長出來、存檔列升起又降下。
寫你的第一個 extension