Supapool:平行編碼代理的暫時性 Supabase 實例
Supapool 讓開發者與 AI 代理能在約 400 毫秒內租用乾淨、隔離的 Supabase 實例。這消除了對模擬或緩慢資料庫分支的需求,確保平行編碼代理能對真實的 Supabase 堆疊執行遷移與資料庫操作,而不會相互干擾。
快速部署隔離的 Supabase 堆疊
Supapool 提供真實的 Supabase 環境——包括 Postgres、Auth 與相容 S3 的儲存空間——且與代理執行工作的地方緊密共置。與需要數分鐘才能初始化且產生正式計費的標準資料庫分支不同,Supapool 實例是暫時性的,設計用於高速取得。
主要技術優勢包括:
- Zero Collision: 平行代理在完全獨立的實例中運作,防止在執行過程中互相清除資料。
- No Mocks: 測試在真實堆疊上進行,確保遷移與資料庫操作得到實際 Supabase 基礎設施的驗證。
- Colocation: 實例在代理執行環境附近啟動,以降低延遲。
- Agent-First Design: 平台僅提供 CLI,沒有儀表板,允許帳號、使用量與成本直接透過 API 串接至自動化系統。
CLI 整合與工作流程
Supapool 主要透過 @supapool/cli 套件管理。核心工作流程是包裝現有指令,以注入臨時環境。
指令執行
使用 run 指令,Supapool 會租用一個實例,並將必要的憑證注入包裝指令的環境變數中:
npx @supapool/cli run -- npm run dev
當執行 run 時,CLI 會執行以下步驟:
- 取得一個乾淨的實例。
- 依檔名順序套用
supabase/migrations中找到的所有.sql檔案。 - 使用實例憑證啟動指令。
- 在指令持續執行期間續租。
- 指令結束時釋放實例。
環境變數注入
包裝的指令會收到標準的 Supabase 變數,包括 SUPABASE_URL、SUPABASE_ANON_KEY、SUPABASE_SERVICE_ROLE_KEY 與 DATABASE_URL。為確保與各種框架相容,這些值會映射到 Next.js、Vite、Astro、Svelte、Expo、Create React App、Gatsby、Nuxt 以及 Prisma 與 Postgres URL 別名常用的公開前綴。
租約管理與生命週期
每個 Supapool 實例皆以租約形式存在,預設的存活時間 (TTL) 為 30 分鐘。CLI 會在程序運行期間每 5 分鐘自動續租。若程序終止或續租心跳停止,租約即會到期,實例將被清除並返回至資源池。
由於實例是一次性的,租約釋放後不會保留任何資料。
CI/CD 與程式化存取
Supapool 透過 SUPAPOOL_API_KEY 環境變數支援自動化環境。在 CI 環境中,使用者可從 ~/.config/supapool/config.json 複製 API 金鑰,並將其設為祕密,以繞過基於瀏覽器的 GitHub 登入。
SUPAPOOL_API_KEY=sp_live_... npx @supapool/cli run -- pnpm test
對於需要更深入整合的開發者,可將 @supapool/cli npm 套件作為函式庫使用。withInstance 函式會自動管理租約生命週期:
import { withInstance } from '@supapool/cli'
await withInstance(async (instance) => {
const { SUPABASE_URL, SUPABASE_ANON_KEY, DATABASE_URL } = instance.env
// execute tests or seed data
})
進階使用者可利用匯出的生命週期原語 acquire、renew、release 與 startRenewer 來自訂租約邊界管理。