AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
WfloAI is an AI-first visual workflow builder built with Next.js 16, TypeScript, Tailwind CSS, shadcn-style UI primitives, Supabase, React Flow, and Anthropic.查看完整 README ↗WfloAI is an AI-first visual workflow builder built with Next.js 16, TypeScript, Tailwind CSS, shadcn-style UI primitives, Supabase, React Flow, and Anthropic.
The app currently supports:
/dashboardCreate .env.local from .env.local.example and fill in:
cp .env.local.example .env.local
Required values:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYANTHROPIC_API_KEY.env.local is ignored by git. Keep real secrets there only.
Production requires more than local development does, and the application
refuses to start if any of these is missing when NODE_ENV=production
(instrumentation.ts → lib/config/env.ts). The check exists because a
missing signing key otherwise fails silently.
| Variable | Why it is required |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Every Supabase client |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Every Supabase client |
SUPABASE_SERVICE_ROLE_KEY | The Inngest execution path and account deletion. Server-only |
ANTHROPIC_API_KEY | AI and Router nodes |
TAVILY_API_KEY | Lookup nodes |
INTEGRATION_TOKEN_KEY | Decrypts stored Gmail tokens and credentials. Back it up — see docs/KEY-RECOVERY.md |
GOOGLE_CLIENT_ID | The Gmail OAuth client (not the Supabase login provider) |
GOOGLE_CLIENT_SECRET | The Gmail OAuth client |
INNGEST_EVENT_KEY | Publishing workflow/schedule.due. Unset means schedules never fire — a loud failure |
INNGEST_SIGNING_KEY | Authenticating /api/inngest. Unset means that endpoint accepts unsigned requests into the service-role execution path — a silent failure |
Optional, with safe defaults:
| Variable | Default | Notes |
|---|---|---|
GMAIL_READ_ACTIONS_ENABLED | off | Must be exactly "true" to enable. Gates every Gmail action except Send, Create Draft included |
RETENTION_CLEANUP_ENABLED | off | Must be exactly "true" for the retention sweep to delete anything. Set it only where pruning is intended |
| Error reporter DSN | none | Registered through setErrorTransport(); until then errors go to stderr as structured lines |
INNGEST_DEV must be absent in production. It puts the Inngest SDK in dev
mode, which skips signature verification, so the startup check refuses to boot
when it is set to anything other than empty, 0 or false.
Deployment, the canonical origin and the operations runbook are in docs/DEPLOYMENT.md and docs/RUNBOOK.md.
The two Inngest keys are not interchangeable and confusing them is the
reason the startup check names them separately. .env.local.example documents
the distinction in full.
Never put a secret in a NEXT_PUBLIC_ variable. The only client-visible
values are the Supabase URL and anon key.
npm install
On Windows PowerShell with nvm-windows, prefer:
npm.cmd install
http://localhost:3000/auth/callback as an authorized redirect URLsupabase/migrations/ in filename order. They are named
YYYYMMDDNNNN_description.sql, and order matters.supabase db push targets a remote project by default.npm run dev
On Windows PowerShell with nvm-windows, prefer:
npm.cmd run dev
http://localhost:3000
POST /api/workflows/[id]/execute, which traverses the whole graph
server-side via lib/execution/serverExecutor.ts and streams SSE to the client/api/execute is the older single-step endpoint used by the browser-side executor; it streams
text/plainBoth AI paths use:
claude-haiku-4-5-20251001max_tokens: 4096npm run dev # Next dev server (Turbopack)
npm run build # production build
npm run start # serve the production build
npm run lint # eslint, flat config
npm run typecheck # tsc --noEmit
npm test # vitest run
CI runs lint, typecheck, test and build on every pull request
(.github/workflows/ci.yml). npm audit runs alongside them and
reports without blocking.
If node, npm, or npm.cmd are not recognized inside VS Code but where.exe node works in another shell, restart all VS Code windows and open a fresh terminal so it picks up the updated PATH from nvm-windows.
app/(auth)/login/page.tsx: login pageapp/auth/callback/route.ts: OAuth callback handlerapp/(marketing): public homepage, privacy, terms, helpapp/(dashboard)/dashboard/page.tsx: dashboardapp/(dashboard)/workflows/[id]/page.tsx: workflow editor pageapp/api/workflows/[id]/route.ts: workflow graph save endpointapp/api/execute/route.ts: authenticated Anthropic streaming endpointcomponents/canvas: React Flow canvas, toolbar, execution context, and log UIcomponents/canvas/nodes: the nine step componentscomponents/canvas/edges: custom edge rendering and deletionhooks/use-user.ts: current session/user hookhooks/useExecution.ts: workflow execution state hooklib/supabase.ts: browser Supabase clientlib/supabase/server.ts: server and middleware Supabase clientslib/execution: executors, validation, and runtime limitslib/integrations, lib/gmail, lib/http: integration, quota and egress safetylib/retention: retention periods and the sweep predicateslib/config/env.ts: the required-variable startup checklib/types.ts: shared workflow and node data typesproxy.ts: route protection and the invite gate (Next 16 renamed the middleware convention)docs/KEY-RECOVERY.md: what INTEGRATION_TOKEN_KEY protects and how to restore itWorkflows are stored in Supabase with a graph JSONB column shaped like:
{
nodes: [],
edges: []
}
Each workflow belongs to a single authenticated user, enforced with row-level security.
Before committing:
git status --short
git diff --cached
Make sure .env.local is never staged. Only .env.local.example should be committed.