Skip to content

Better auth migration#21

Open
ChunkyMonkey11 wants to merge 266 commits into
code-with-antonio:mainfrom
Skarmy-AI:Better-Auth-Migration
Open

Better auth migration#21
ChunkyMonkey11 wants to merge 266 commits into
code-with-antonio:mainfrom
Skarmy-AI:Better-Auth-Migration

Conversation

@ChunkyMonkey11

Copy link
Copy Markdown

I approve this message and now we have UI for sign in with better auth working end to end.

LittleHalf and others added 30 commits June 19, 2026 12:46
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- e2b.Dockerfile: reset WORKDIR to /home/user (the build WORKDIR was deleted,
  which broke the v2 builder's config script), and install tw-animate-css so
  the generated globals.css import resolves.
- README + docs/agent-pipeline.md: `template build --name --cmd` is deprecated
  and no-ops in CLI v2; use `template create <name> --cmd --ready-cmd`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: Stripe USD credit wallet (buy credits, pay-per-generation)
- next.config.ts: mark rate-limiter-flexible as serverExternalPackages so
  webpack stops bundling (and failing to parse) its .d.ts files. This webpack
  parse error was the real 'next build' failure blocking Vercel.
- bump next 15.3.4 -> 15.5.19 (+ eslint-config-next): clears the critical
  Next.js advisories (RCE/SSRF/cache poisoning/content injection) + postcss.
- inngest pinned to 3.54.0 (the exploitable serve() path uses the top-level
  SDK, already post-fix).

Remaining audit items (agent-kit's nested inngest high; postcss moderate
bundled inside next) are non-exploitable here and need breaking major bumps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- src/lib/stripe.ts: lazy Stripe client so importing the module never throws
  without STRIPE_SECRET_KEY (the import-throw broke CI/builds that import the
  tRPC router via tests and next build).
- prisma/migrations: single combined init covering Project.orgId + Wallet +
  CreditTransaction (replaces the org-only init).
- package-lock: reconciled after merging main (adds stripe).

Integrated app verified locally: build, tests (3/3), typecheck, lint all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Org-scoped tenancy + testing + CI/CD (+ agent-context docs)
Reflects reality post-launch: org-tenancy (orgProcedure, per-org projects) +
Stripe credit-wallet (per-user credits), live on app.skarmy.ai. Fixes stale
claims (no tests, no migrations, empty next.config, userId-scoped tenancy,
e2b template build) and adds the build/deploy gotchas that actually blocked us
(rate-limiter serverExternalPackages, lazy stripe.ts, single Neon DB, Inngest
prod sync, concurrent-session schema collisions).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Generations hung forever on "Thinking..." because @inngest/agent-kit@0.8.4
reads the live Inngest step via getAsyncCtx().ctx.step, but inngest 3.54
relocated it to getAsyncCtx().execution.ctx.step. asyncCtx.ctx was undefined,
so the agent threw "Cannot read properties of undefined (reading 'step')"
during inference. Inngest retried then failed, so no ASSISTANT message was
ever written and the client polled indefinitely.

inngest can't just be downgraded: <=3.53.1 carries a HIGH-severity advisory
(GHSA-2jf5-6wwv-vhxx) that leaks env vars via the serve() handler at
/api/inngest. The only working AND secure combination is agent-kit 0.13.x
(handles both old and new async-ctx shapes) on patched inngest 3.54.x.

- @inngest/agent-kit ^0.8.3 -> ^0.13.2
- zod ^3.25.67 -> ^4.0.0 (agent-kit 0.13 peer requirement; app uses only
  z.object/z.string/z.array, so drop-in)
- inngest kept at ^3.54.0, now a single deduped copy (no nested 3.32.5)

Verified locally: typecheck, tests (3/3), production build, single
inngest@3.54.2, no high/critical vulns.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix: restore app generation (agent-kit 0.13 ↔ inngest 3.54 step compat)
Generated apps failed with "Module not found: Can't resolve '@/lib/utils'"
because the sandbox template was missing lib/utils.ts AND the clsx /
tailwind-merge packages. In the non-interactive Docker build, `shadcn init`
created components.json, the 56 component files (via `add --all`), and the CSS
theme — but never set up the cn() helper or installed its dependencies. Since
every shadcn component imports `cn` from "@/lib/utils", any generated app that
uses a component fails to compile.

Fix: explicitly install clsx + tailwind-merge and write the standard shadcn
lib/utils.ts before the app is moved into place.

Verified by inspecting the live template (no lib/, no clsx/tailwind-merge),
reproducing the exact error in a sandbox (GET /probe -> 500, "Can't resolve
'@/lib/utils'"), applying the fix, and confirming a production `next build` of
a page using cn() + Button/Card/Input compiles successfully.

NOTE: the E2B template must be rebuilt for this to take effect:
  e2b template create vibe-nextjs-test-2 -p sandbox-templates/nextjs \
    --cmd "/compile_page.sh" \
    --ready-cmd "curl -s -o /dev/null http://localhost:3000" \
    --cpu-count 2 --memory-mb 1024

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The printf-based heredoc wrote lib/utils.ts as a single line with literal "n"
instead of newlines (Dockerfile shell escaping), producing a syntax error:
"Expected ';', got 'nimport'". COPY a real file from the build context instead.

Verified on the rebuilt template: lib/utils.ts has real newlines and a clean
`next build` of a cn() + Button/Card/Input page compiles successfully.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…B cn)

Two production incidents resolved this session, now documented in CLAUDE.md +
docs/gotchas.md:

1. agent-kit/inngest/zod version lock — agent-kit <=0.12 hangs generation on
   inngest >=3.54 ("reading 'step' of undefined"); inngest <=3.53 has a HIGH
   env-var-leak vuln. Fixed combo: agent-kit >=0.13 + inngest >=3.54 + zod 4 (#5).
2. E2B template missing shadcn cn()/lib/utils.ts + clsx/tailwind-merge — every
   generated app failed "Can't resolve '@/lib/utils'". Dockerfile now installs
   the deps + COPYs a real utils.ts; rebuild required (#6).

Also corrected the stale "non-exploitable npm audit highs" note — the inngest
high was exploitable and is now cleared.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(e2b): create cn() utility in sandbox template
docs: refresh agent context for the integrated, deployed app
Gate projects.getMany on isSignedIn so the query doesn't fire (and fail
unauthorized) on the landing page before auth resolves. projects stays
undefined for signed-out users, which the optional-chaining render already
handles.

Recovered from an uncommitted change in the stripe-credits worktree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- code/title/reply agents now use gpt-5.5 (was gpt-4.1 / gpt-4o)
- drop temperature:0.1 from code agent — gpt-5.5 is a reasoning model
  and rejects the temperature param (would 400 every generation)
- conversation memory take: 5 -> 20
- network maxIter: 15 -> 100

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Root cause: gpt-5.5 ran `tsc` during generation; in the 1GB E2B sandbox
that pushed memory over the cgroup limit and the kernel OOM-killer killed
next-server. Nothing restarts it, so the preview URL pointed at a dead
port 3000 even though the generated code was fine.

- prompt.ts: forbid tsc / type-check / build commands (the dev server
  already compiles on save); explain the OOM consequence.
- functions.ts: in get-sandbox-url, verify :3000 responds and restart
  `next dev` in the background if it died, before returning the URL.
  Verified against a live OOM'd sandbox: server came back up (HTTP 200).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…istent sessions)

Full design for redesigning Vibe's generation engine into a live, streaming,
interactive coding-session product: harness-in-sandbox behind a Skarmy edge
(broker + provider-agnostic inference gateway + authed preview proxy), append-only
Event log canonical with Message/Fragment as read-models, GitHub-App repo-per-project
with session branches + explicit Publish, E2B pause/resume + R2 persistence, two-meter
billing into the existing wallet, generation fencing/idempotency/leases, phased delivery
(0 spikes → 1 internal → 2a/2b/2c → 3), with acceptance criteria, feature-flag/rollback,
schema migration order, failure-mode matrix, trust-boundary diagram, non-goals, and
scaling triggers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ntract

Adversarial 6-lens review (completeness/consistency/security/distsys/ops/feasibility)
applied. Closes blockers: testing-strategy section; sessionToken JWT (subprotocol-only,
re-authz on reconnect); viewer-bound preview proxy; egress enforced outside sandbox via
git proxy; generation-gated seq allocation (Lua) + durable seqHi (no split-brain);
Redis-loss reseed+gen-bump; E2B concurrency admission control; fail-closed budget store;
steer redefined to next-turn-boundary (mid-turn deferred to Phase 3). Adds harness
integration contract (unix-socket command set, versioned checkpoints, fake harness),
versioning/compat, SLO/capacity targets, expanded failure matrix, quantified scaling
triggers. 22 sections.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e 2a foundations

- 00-roadmap: phase sequence (0→1→2a→2b→2c→3), dependencies, child-plan map,
  fake-harness parallelization, integration-milestone gate, feature-flag/rollback
  runbook, SLO/capacity numeric gates.
- phase0-spikes: 8 TDD tasks / 63 steps covering spikes 0.1–0.6 (harness RSS+image,
  pause/resume incl. #884, adapter-over-unix-socket, browser↔sandbox WSS,
  harness-through-Anthropic-compatible-gateway, authed preview proxy incl. HMR WS),
  each with runnable @e2b/code-interpreter scripts + numeric pass/fail + evidence.
- phase2a-foundations: 16 tasks / ~91 steps, spec-locked + buildable now against the
  FAKE HARNESS (zero real-harness dep, legacy path untouched): Prisma M1–M4, normalized
  protocol/EventKind types, fence-gated seq + idempotency + 3-tier replay broker core,
  Anthropic-compatible gateway w/ fail-closed budget + idempotent metering, getEngine
  flag, org-isolation tests incl. cross-org attach.

Phases 1/2b/2c/3 to be authored after Phase 0 resolves the real harness/adapter API.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds src/edge/protocol.ts with PROTOCOL_VERSION, MAX_EVENT_PAYLOAD_BYTES,
all shared types (EventKindName, SessionStatusName, LifecycleReason, Role,
RunMode, NormalizedEvent, TokenFrame, ClientMsg, ServerMsg) and validators
(isValidCmdId, payloadByteSize) per design spec. TDD: 7/7 tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
LittleHalf and others added 28 commits June 26, 2026 13:45
The user-facing app was already branded Skarmy (title, domain, OG). This renames
the remaining internal product references: package.json name, code comments in
the edge adapter, the design-system header, and the docs prose.

Deliberately NOT renamed (would break or be nonsensical):
- visualVibe/designVibe — the English word 'vibe' (a design's feel), not the brand
- E2B template names (vibe-live*) — registered infra; renaming breaks provisioning
- local Postgres creds (vibe:vibe@/vibe) — local DB identity
- skarmyvibe — the repo name itself
Replace ProjectsSidebar with new DashboardSidebar in the home dashboard.
Presentational component mirroring Lovable's layout (workspace switcher,
Dashboard/Connectors nav, Agents section, Recents, footer cards) in Skarmy's
glass aesthetic. Intentionally unwired — design pass only; selection/data
wiring to follow.
deploy/edge was deleted; deploy/ now holds only the gateway. README's
repository-layout table was the last doc still listing it.
Wire the sidebar 'All agents' tab to an in-page Agents view: a 3-column
grid of role cards (developer, marketing, hiring, legal, research, finances,
design, customer support) that toggle add/remove. Added agents are lifted to
the dashboard page and mirrored as a sub-list under 'All agents' in the
sidebar. Selection is local state only (placeholder, not persisted).
Replace the broken dual-biller setup (flat 25c/generation on a dead legacy path
+ per-token gateway, both hitting one per-user wallet) with a single org-scoped
model.

App-builder billing:
- Wallet re-keyed to orgId; every spend stamps the triggering userId (attribution)
- Gateway per-token UsageEvent -> wallet debit is the only charge. Remove the flat
  consumeCredits path, the free-generation tier, and the dead GatewayMeter /
  EnvKeyProvider (provider.ts) code
- $1 starter grant per org (ensureOrgWallet, idempotent on the orgId PK)
- Claude-style subscriptions (Pro/Max5/Max20): gateway is coverage-aware via
  decideCoverage. Subscribers within their rolling 5h/weekly window are covered
  with no wallet debit (window = SUM over UsageEvent, no counter table); overage
  spills to the wallet only when the org opts in
- Stripe subscription checkout + billing portal + overage toggle + webhook sync;
  pricing UI rebuilt with tier cards + live window usage

Skarmy API side-product (LiteLLM):
- ApiKey model + apiKeys router (create/list/revoke): per-org virtual keys minted
  against a LiteLLM proxy, budget-capped to the wallet, secret shown once
- reconcileApiKey debits LiteLLM spend into the same org wallet (UsageEvent
  source=API, API_USAGE ledger), re-caps budgets. Cron route + on-revoke settle
- docker-compose.litellm.yml + config.yaml, env additions, dashboard UI

Migrations applied to LOCAL only; the prod migration is destructive (drops
Wallet.userId, wipes per-user balances) — see human_next_steps.md. Docs updated
(AGENTS.md data model/tenancy, HANDOFF.md items 6 + 8).
Add the standard gray hover wash to the added-agent rows, a thin left
guide line grouping them under the All agents tab, and tighter row spacing
so the sub-list reads as part of the nav.
…gnostics

Give the discovery agent live web search during the founder interview, routed
through MCP, plus a visual diagnostics tool to verify the integration and watch
the agent use it. Opt-in via SEARXNG_BASE_URL; no behavior change when unset.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Extract the sign-in card into a shared SignInForm component and render it
inline on / when there's no session, instead of only at /sign-in. Lets the
sign-in flow be tested end-to-end on the main page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds AuthUser/AuthSession/AuthAccount/AuthVerification/Organization/Member/
Invitation. Generated from a prod diff, keeping only CREATE statements so it
cannot drop existing tables/columns. Already applied to prod Neon via
migrate deploy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dashboard data is org-scoped (orgProcedure), so a signed-in user with no
active organization would hit FORBIDDEN on every query with no recovery path.
Gate the home page: redirect to the workspace picker until an active org is set.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Status, remaining prod tasks, drift warning, and verification notes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ready-to-create GitHub issue summarizing Better Auth prod status and remaining tasks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rebuild the Billing (Plans & credits) page in the dashboard's glass/navy
aesthetic and mount the DashboardSidebar with a new "Billing" nav item under
Connectors. NavRow is now route-aware (renders Link with href, or button with
onClick) so Dashboard/Agents keep in-page switching on the dashboard and fall
back to links elsewhere; Billing links to /pricing. Home page reads
?view=agents (under Suspense) so "All agents" works when navigated in.

All billing logic preserved: balance, subscribe/switch/manage, 5h+week usage
bars, overage toggle, credit packs, custom top-up, posthog events, busy-state
disabling. Plus a11y: input focus ring + label association, aria-current on
active nav.
Better Auth rejects sign-in from random *.vercel.app preview hostnames (403 INVALID_ORIGIN) since Origin != baseURL. Documented in AGENTS.md gotchas: test auth on https://app.skarmy.ai. Adds better-auth skill set.

[vercel skip]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Inline sign-in/sign-up in a single frosted-glass modal (sign-in-form),
  removing the standalone sign-up page
- Add account menu, convergence backdrop, and dev auto-login helper
- Restyle the choose-workspace screen to match the auth modal's light
  palette so the sign-up -> workspace handoff reads as one surface
- Update home page, navbar, and sidebars for the new auth surface

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 353 files, which is 203 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 57037d82-1dcb-4aa3-b560-ba5aba1b3561

📥 Commits

Reviewing files that changed from the base of the PR and between f75425b and 0a6e211.

⛔ Files ignored due to path filters (14)
  • .inngest/main.db is excluded by !**/*.db
  • bun.lock is excluded by !**/*.lock
  • package-lock.json is excluded by !**/package-lock.json
  • public/apple-touch-icon.png is excluded by !**/*.png
  • public/favicon-ball.png is excluded by !**/*.png
  • public/hero-bg.jpeg is excluded by !**/*.jpeg
  • public/logo.svg is excluded by !**/*.svg
  • public/sign-in-assets/skarmy.jpg is excluded by !**/*.jpg
  • public/skarmy-logo.jpeg is excluded by !**/*.jpeg
  • public/skarmy-logo.svg is excluded by !**/*.svg
  • public/skarmy-og.png is excluded by !**/*.png
  • public/spectra-glow.png is excluded by !**/*.png
  • public/vercel.svg is excluded by !**/*.svg
  • src/app/favicon.ico is excluded by !**/*.ico
📒 Files selected for processing (353)
  • .agents/skills/better-auth-best-practices/SKILL.md
  • .agents/skills/better-auth-security-best-practices/SKILL.MD
  • .agents/skills/create-auth-skill/SKILL.md
  • .agents/skills/email-and-password-best-practices/SKILL.md
  • .agents/skills/organization-best-practices/SKILL.md
  • .agents/skills/two-factor-authentication-best-practices/SKILL.md
  • .claude/skills/better-auth-best-practices/SKILL.md
  • .claude/skills/better-auth-security-best-practices/SKILL.MD
  • .claude/skills/create-auth-skill/SKILL.md
  • .claude/skills/email-and-password-best-practices/SKILL.md
  • .claude/skills/integration-nextjs-app-router/.posthog-wizard
  • .claude/skills/integration-nextjs-app-router/SKILL.md
  • .claude/skills/integration-nextjs-app-router/references/1-begin.md
  • .claude/skills/integration-nextjs-app-router/references/2-edit.md
  • .claude/skills/integration-nextjs-app-router/references/3-revise.md
  • .claude/skills/integration-nextjs-app-router/references/4-conclude.md
  • .claude/skills/integration-nextjs-app-router/references/EXAMPLE.md
  • .claude/skills/integration-nextjs-app-router/references/identify-users.md
  • .claude/skills/integration-nextjs-app-router/references/next-js.md
  • .claude/skills/organization-best-practices/SKILL.md
  • .claude/skills/two-factor-authentication-best-practices/SKILL.md
  • .dockerignore
  • .github/ISSUE_RevantsAgent.md
  • .github/workflows/ci.yml
  • .gitignore
  • .nvmrc
  • AGENTS.md
  • CLAUDE.md
  • HANDOFF-better-auth.md
  • README.md
  • deploy/README.md
  • deploy/gateway/Dockerfile
  • deploy/gateway/fly.toml
  • deploy/litellm/Dockerfile
  • deploy/litellm/fly.toml
  • docker-compose.dev.yml
  • docker-compose.litellm.yml
  • docs/HANDOFF.md
  • docs/architecture.md
  • docs/gotchas.md
  • docs/local-dev.md
  • docs/postman/skarmyvibe.local.postman_collection.json
  • docs/postman/skarmyvibe.local.postman_environment.json
  • docs/searxng-discovery.md
  • docs/superpowers/plans/2026-06-21-spectra-design-adoption.md
  • docs/superpowers/specs/2026-06-19-live-agent-architecture-design.md
  • docs/superpowers/specs/2026-06-20-skarmy-agent-harness-design.md
  • docs/superpowers/specs/2026-06-21-spectra-design-adoption-design.md
  • env.example
  • human_next_steps.md
  • instrumentation-client.ts
  • litellm/config.yaml
  • next.config.ts
  • package.json
  • packages/skarmy-agent/README.md
  • packages/skarmy-agent/package.json
  • packages/skarmy-agent/src/cli.ts
  • packages/skarmy-agent/src/fake-driver.ts
  • packages/skarmy-agent/src/prompts/web-builder.ts
  • packages/skarmy-agent/src/protocol.ts
  • packages/skarmy-agent/src/sdk-driver.test.ts
  • packages/skarmy-agent/src/sdk-driver.ts
  • packages/skarmy-agent/src/socket-server.test.ts
  • packages/skarmy-agent/src/socket-server.ts
  • packages/skarmy-agent/tsconfig.json
  • playbooks/_meta/taxonomy.md
  • playbooks/launch/first-10-customers.md
  • playbooks/personas/launch.md
  • playbooks/personas/product.md
  • playbooks/product/mvp-scoping.md
  • posthog-setup-report.md
  • prisma/migrations/20260619200000_init/migration.sql
  • prisma/migrations/20260619220310_m1_session_event_usage/migration.sql
  • prisma/migrations/20260619220311_m2_project_git_fields/migration.sql
  • prisma/migrations/20260619220312_m3_queue_partial_cmd/migration.sql
  • prisma/migrations/20260619220313_m4_fragment_commitsha/migration.sql
  • prisma/migrations/20260621180000_simplify_schema/migration.sql
  • prisma/migrations/20260622000000_m5_project_snapshot_fields/migration.sql
  • prisma/migrations/20260622001000_m6_one_live_session_per_project/migration.sql
  • prisma/migrations/20260623120000_model_ui_routing/migration.sql
  • prisma/migrations/20260624195244_conversational_discovery/migration.sql
  • prisma/migrations/20260624205557_startup_artifacts/migration.sql
  • prisma/migrations/20260624222553_add_founder_knowledge/migration.sql
  • prisma/migrations/20260625183845_coordinated_startup_dispatcher/migration.sql
  • prisma/migrations/20260626223310_org_scoped_billing_subscriptions/migration.sql
  • prisma/migrations/20260626230301_add_api_key/migration.sql
  • prisma/migrations/20260627000000_better_auth/migration.sql
  • prisma/migrations/migration_lock.toml
  • prisma/schema.prisma
  • public/ball.webp
  • public/sign-in-assets/sign-in-bg.avif
  • sandbox-templates/live/e2b.Dockerfile
  • sandbox-templates/live/mcp-searxng/index.mjs
  • sandbox-templates/live/mcp-searxng/package.json
  • sandbox-templates/nextjs/compile_page.sh
  • sandbox-templates/nextjs/e2b.Dockerfile
  • scripts/adapter-server-entry.ts
  • scripts/build-adapter-server.ts
  • scripts/build-live-template.sh
  • scripts/build-local-sandbox.sh
  • scripts/build-playbooks.ts
  • scripts/debug/harness-boot.ts
  • scripts/debug/inspect-startup.ts
  • scripts/debug/live-start.ts
  • scripts/debug/live-ws-attach.ts
  • scripts/dev/cleanup-sessions.ts
  • scripts/dev/create-test-account.ts
  • scripts/dev/down.sh
  • scripts/dev/fetch-clerk-session.ts
  • scripts/dev/grant-credits.ts
  • scripts/dev/set-playwright-session.ts
  • scripts/dev/up.sh
  • skills-lock.json
  • src/app/(auth)/sign-in/[[...sign-in]]/page.tsx
  • src/app/(auth)/sso-callback/page.tsx
  • src/app/(home)/api-keys/page.tsx
  • src/app/(home)/create-organization/[[...rest]]/page.tsx
  • src/app/(home)/layout.tsx
  • src/app/(home)/page.tsx
  • src/app/(home)/pricing/page.tsx
  • src/app/(home)/settings/page.tsx
  • src/app/(home)/sign-in/[[...sign-in]]/page.tsx
  • src/app/(home)/sign-up/[[...sign-up]]/page.tsx
  • src/app/admin/page.tsx
  • src/app/api/auth/[...all]/route.ts
  • src/app/api/cron/reconcile-api-spend/route.ts
  • src/app/api/inngest/route.ts
  • src/app/api/sessions/[sessionId]/stream/route.ts
  • src/app/api/stripe/webhook/route.ts
  • src/app/api/trpc/[trpc]/route.ts
  • src/app/globals.css
  • src/app/layout.tsx
  • src/app/projects/[projectId]/page.tsx
  • src/app/searxng-diagnostics/page.tsx
  • src/components/ds/avatar.tsx
  • src/components/ds/badge.tsx
  • src/components/ds/button.tsx
  • src/components/ds/card.tsx
  • src/components/ds/ds.css
  • src/components/ds/index.ts
  • src/components/ds/input.tsx
  • src/components/ds/kbd.tsx
  • src/components/ds/logo.tsx
  • src/components/ds/prompt-composer.tsx
  • src/components/ds/spinner.tsx
  • src/components/ds/tabs.tsx
  • src/components/ds/textarea.tsx
  • src/components/favicon-ball.tsx
  • src/components/file-explorer.tsx
  • src/components/posthog-user-identifier.tsx
  • src/components/tree-view.tsx
  • src/components/ui/ai-prompt-box.tsx
  • src/components/ui/popover.tsx
  • src/components/user-control.tsx
  • src/components/workspace-switcher.tsx
  • src/edge/adapter/native-protocol.test.ts
  • src/edge/adapter/native-protocol.ts
  • src/edge/adapter/normalizer.test.ts
  • src/edge/adapter/normalizer.ts
  • src/edge/adapter/server.test.ts
  • src/edge/adapter/server.ts
  • src/edge/adapter/socket-client.test.ts
  • src/edge/adapter/socket-client.ts
  • src/edge/adapters/memory-seqhot.ts
  • src/edge/adapters/prisma-store.test.ts
  • src/edge/adapters/prisma-store.ts
  • src/edge/authz.test.ts
  • src/edge/authz.ts
  • src/edge/broker/attach.test.ts
  • src/edge/broker/attach.ts
  • src/edge/broker/broker.test.ts
  • src/edge/broker/broker.ts
  • src/edge/broker/dispatch.test.ts
  • src/edge/broker/dispatch.ts
  • src/edge/broker/replay.test.ts
  • src/edge/broker/replay.ts
  • src/edge/broker/sandbox-link.test.ts
  • src/edge/broker/sandbox-link.ts
  • src/edge/broker/seq-allocator.test.ts
  • src/edge/broker/seq-allocator.ts
  • src/edge/gateway/authorize.test.ts
  • src/edge/gateway/authorize.ts
  • src/edge/gateway/budget.ts
  • src/edge/gateway/gateway-entry.ts
  • src/edge/gateway/gateway-token.test.ts
  • src/edge/gateway/gateway-token.ts
  • src/edge/gateway/memory-budget.ts
  • src/edge/gateway/meter.test.ts
  • src/edge/gateway/meter.ts
  • src/edge/gateway/model-registry.test.ts
  • src/edge/gateway/model-registry.ts
  • src/edge/gateway/server.test.ts
  • src/edge/gateway/server.ts
  • src/edge/gateway/usage-sink.test.ts
  • src/edge/gateway/usage-sink.ts
  • src/edge/ports.ts
  • src/edge/protocol.test.ts
  • src/edge/protocol.ts
  • src/edge/service/edge-session.test.ts
  • src/edge/service/edge-session.ts
  • src/edge/service/session-manager.test.ts
  • src/edge/service/session-manager.ts
  • src/edge/testing/fake-budget.ts
  • src/edge/testing/fake-harness-socket.test.ts
  • src/edge/testing/fake-harness-socket.ts
  • src/edge/testing/fake-redis.ts
  • src/edge/testing/fake-store.ts
  • src/edge/testing/fakes.test.ts
  • src/edge/testing/fixtures/fake-harness-scenarios.ts
  • src/inngest/client.ts
  • src/inngest/functions.ts
  • src/inngest/types.ts
  • src/inngest/utils.ts
  • src/lib/anthropic.test.ts
  • src/lib/anthropic.ts
  • src/lib/auth-client.ts
  • src/lib/auth-server.ts
  • src/lib/auth.ts
  • src/lib/billing/api-spend-runner.ts
  • src/lib/billing/plans.test.ts
  • src/lib/billing/plans.ts
  • src/lib/billing/reconcile-api-spend.test.ts
  • src/lib/billing/reconcile-api-spend.ts
  • src/lib/build-brief.test.ts
  • src/lib/build-brief.ts
  • src/lib/dev-auto-login.ts
  • src/lib/discovery-agent.test.ts
  • src/lib/discovery-agent.ts
  • src/lib/e2b-client.ts
  • src/lib/edge-config.ts
  • src/lib/engine.test.ts
  • src/lib/engine.ts
  • src/lib/favicon.ts
  • src/lib/litellm/client.test.ts
  • src/lib/litellm/client.ts
  • src/lib/live-log.test.ts
  • src/lib/live-log.ts
  • src/lib/local-dev.test.ts
  • src/lib/local-dev.ts
  • src/lib/local-docker-sandbox.ts
  • src/lib/mcp/searxng-client.test.ts
  • src/lib/mcp/searxng-client.ts
  • src/lib/mcp/searxng-server.ts
  • src/lib/mcp/web-search-telemetry.ts
  • src/lib/mint-session-token.test.ts
  • src/lib/mint-session-token.ts
  • src/lib/model-catalog.ts
  • src/lib/model-selection.ts
  • src/lib/playbooks/frontmatter.ts
  • src/lib/playbooks/index.ts
  • src/lib/playbooks/playbooks.test.ts
  • src/lib/playbooks/registry.generated.ts
  • src/lib/playbooks/select.ts
  • src/lib/playbooks/types.ts
  • src/lib/playbooks/validate.ts
  • src/lib/posthog-server.ts
  • src/lib/provision-deps.test.ts
  • src/lib/provision-deps.ts
  • src/lib/provision-sandbox.test.ts
  • src/lib/provision-sandbox.ts
  • src/lib/searxng.test.ts
  • src/lib/searxng.ts
  • src/lib/session-admission.ts
  • src/lib/snapshot-store.ts
  • src/lib/snapshot-workspace.test.ts
  • src/lib/snapshot-workspace.ts
  • src/lib/start-session.test.ts
  • src/lib/start-session.ts
  • src/lib/startup-agents/agent-playbooks.test.ts
  • src/lib/startup-agents/agent-playbooks.ts
  • src/lib/startup-agents/agent-prompt.ts
  • src/lib/startup-agents/artifact-markdown.ts
  • src/lib/startup-agents/brief-context.ts
  • src/lib/startup-agents/catalog.ts
  • src/lib/startup-agents/company-context.test.ts
  • src/lib/startup-agents/company-context.ts
  • src/lib/startup-agents/design-agent.ts
  • src/lib/startup-agents/dispatcher.test.ts
  • src/lib/startup-agents/dispatcher.ts
  • src/lib/startup-agents/email-agent.ts
  • src/lib/startup-agents/graph.test.ts
  • src/lib/startup-agents/graph.ts
  • src/lib/startup-agents/growth-agent.ts
  • src/lib/startup-agents/index.ts
  • src/lib/startup-agents/launch-agent.ts
  • src/lib/startup-agents/llm.ts
  • src/lib/startup-agents/orchestrator.test.ts
  • src/lib/startup-agents/orchestrator.ts
  • src/lib/startup-agents/product-agent.ts
  • src/lib/startup-agents/run.test.ts
  • src/lib/startup-agents/run.ts
  • src/lib/startup-agents/types.ts
  • src/lib/stripe.ts
  • src/lib/usage.ts
  • src/middleware.ts
  • src/modules/api-keys/server/procedures.ts
  • src/modules/auth/ui/convergence-backdrop.module.css
  • src/modules/auth/ui/convergence-backdrop.tsx
  • src/modules/auth/ui/sign-in-form.tsx
  • src/modules/credits/server/procedures.ts
  • src/modules/diagnostics/server/procedures.ts
  • src/modules/diagnostics/ui/searxng-diagnostics-view.tsx
  • src/modules/discovery/server/procedures.test.ts
  • src/modules/discovery/server/procedures.ts
  • src/modules/discovery/ui/build-brief-card.tsx
  • src/modules/discovery/ui/discovery-modal.tsx
  • src/modules/discovery/ui/discovery-popup.tsx
  • src/modules/discovery/ui/discovery-view.tsx
  • src/modules/home/ui/agents-panel.tsx
  • src/modules/home/ui/agents.ts
  • src/modules/home/ui/components/account-menu.tsx
  • src/modules/home/ui/components/dashboard-sidebar.tsx
  • src/modules/home/ui/components/navbar.tsx
  • src/modules/home/ui/components/project-form.tsx
  • src/modules/home/ui/components/projects-list.tsx
  • src/modules/home/ui/components/projects-sidebar.tsx
  • src/modules/home/ui/home-project-panel.tsx
  • src/modules/messages/server/procedures.ts
  • src/modules/model-config/server/procedures.ts
  • src/modules/model-config/ui/model-config-view.tsx
  • src/modules/projects/server/procedures.ts
  • src/modules/projects/ui/components/fragment-web.tsx
  • src/modules/projects/ui/components/live-messages-container.tsx
  • src/modules/projects/ui/components/live-messages.resume.test.ts
  • src/modules/projects/ui/components/live-messages.resume.ts
  • src/modules/projects/ui/components/live-messages.tsx
  • src/modules/projects/ui/components/message-card.tsx
  • src/modules/projects/ui/components/message-form.tsx
  • src/modules/projects/ui/components/message-loading.tsx
  • src/modules/projects/ui/components/messages-container.tsx
  • src/modules/projects/ui/components/project-header.tsx
  • src/modules/projects/ui/components/usage.tsx
  • src/modules/projects/ui/views/project-view.tsx
  • src/modules/sessions/live-reducer.test.ts
  • src/modules/sessions/live-reducer.ts
  • src/modules/sessions/server/procedures.test.ts
  • src/modules/sessions/server/procedures.ts
  • src/modules/sessions/ui/use-live-session.ts
  • src/modules/startup/server/procedures.test.ts
  • src/modules/startup/server/procedures.ts
  • src/modules/startup/ui/artifact-card.tsx
  • src/modules/startup/ui/artifact-detail.tsx
  • src/modules/startup/ui/artifacts-panel.tsx
  • src/modules/startup/ui/dispatch-chat.tsx
  • src/modules/usage/server/procedures.ts
  • src/prompt.ts
  • src/trpc/access-control.test.ts
  • src/trpc/client.tsx
  • src/trpc/init.ts
  • src/trpc/routers/_app.ts
  • tsconfig.json
  • vercel.json
  • vitest.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread .github/workflows/ci.yml
Comment on lines +10 to +27
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile || bun install
- run: bunx prisma generate
# Playbooks: regenerate the registry from the markdown sources. This both validates
# frontmatter against the taxonomy (a malformed file throws) and fails if the committed
# registry has drifted from the sources (someone forgot `bun run playbooks:gen`).
- name: Validate playbooks
run: |
bun run playbooks:gen
git diff --exit-code src/lib/playbooks/registry.generated.ts
- run: bun run lint
- run: bun run typecheck
# `bun run test` runs the package.json script (vitest run); `bun test` would use
# Bun's native runner, which lacks vi.stubEnv and times out the WS socket tests.
- run: bun run test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants