diff --git a/README.md b/README.md index d8a5388a..dfe87113 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,9 @@ Full setup, guides, and reference can be found at **[docs.piyaz.ai](https://docs --- -## Hosted (beta) - -Piyaz is open for signup at **[app.piyaz.ai/sign-up](https://app.piyaz.ai/sign-up)**. Create an account and verify your email to get in. - -Then install the plugin for your agent (Claude Code, Codex, Cursor, or Antigravity) and sign in once. Piyaz is then available in every project you open. Per-harness setup instructions can be found at **[docs](https://docs.piyaz.ai)**. - ## Self-host -Self-hosting is free under AGPL-3.0. You can run the Piyaz server yourself and register an MCP server in your editor that points at it. You need [Bun](https://bun.sh) and [Docker](https://docs.docker.com/get-docker/) for PostgreSQL. Full setup and upgrade steps are in the [self-host guide](https://docs.piyaz.ai/docs/self-hosting/run-locally). +Piyaz is free under AGPL-3.0. You run the Piyaz server yourself and register an MCP server in your editor that points at it. You need [Bun](https://bun.sh) and [Docker](https://docs.docker.com/get-docker/) for PostgreSQL. Full setup and upgrade steps are in the [self-host guide](https://docs.piyaz.ai/docs/self-hosting/run-locally), and per-harness setup is in the [docs](https://docs.piyaz.ai). --- @@ -95,7 +89,7 @@ For more details, see the docs: ## The MCP server -Piyaz is a remote MCP server at `https://app.piyaz.ai/api/mcp` (Streamable HTTP, OAuth 2.1, no API keys); the plugin wires it up for you, so the endpoint only matters when connecting a client by hand or pointing at your own instance. Nine ref-first tools cover the loop from planning to review: the full reference lives at [docs.piyaz.ai/docs/reference/mcp-overview](https://docs.piyaz.ai/docs/reference/mcp-overview/) and registry metadata in [`server.json`](server.json). +Piyaz is a remote MCP server at `/api/mcp` (Streamable HTTP, OAuth 2.1, no API keys). Nine ref-first tools cover the loop from planning to review: the full reference lives at [docs.piyaz.ai/docs/reference/mcp-overview](https://docs.piyaz.ai/docs/reference/mcp-overview/) and registry metadata in [`server.json`](server.json). --- diff --git a/package.json b/package.json index 287e44ea..bd2fa0db 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "postbuild": "bun run scripts/postbuild.ts", "start": "node --env-file-if-exists=.env.local scripts/start.mjs", "build:cf": "DEPLOY_TARGET=cloudflare next build --webpack && DEPLOY_TARGET=cloudflare opennextjs-cloudflare build", - "preview:cf": "SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare next build --webpack && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare build && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare preview --env production", - "deploy:cf": "bun run scripts/assert-deploy-ready.ts && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare next build --webpack && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare build && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare deploy --env production", + "preview:cf": "DEPLOY_TARGET=cloudflare next build --webpack && DEPLOY_TARGET=cloudflare opennextjs-cloudflare build && DEPLOY_TARGET=cloudflare opennextjs-cloudflare preview --env production", + "deploy:cf": "bun run scripts/assert-deploy-ready.ts && DEPLOY_TARGET=cloudflare next build --webpack && DEPLOY_TARGET=cloudflare opennextjs-cloudflare build && DEPLOY_TARGET=cloudflare opennextjs-cloudflare deploy --env production", "deploy:cf:dev": "bun run scripts/turnstile-symmetry.ts --env dev && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare next build --webpack && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare build && SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare opennextjs-cloudflare deploy --env dev", "cf-typegen": "wrangler types --env production --env-interface CloudflareEnv cloudflare-env.d.ts", "pretest": "[ -n \"$TEST_DATABASE_URL\" ] || bun run db:test:up", diff --git a/tests/config/env.test.ts b/tests/config/env.test.ts index babaf21f..afecd066 100644 --- a/tests/config/env.test.ts +++ b/tests/config/env.test.ts @@ -79,19 +79,29 @@ test("signup disabled on a misconfigured hosted build (opt-in not 'true')", () = }); /** - * Hosted scripts that must ship open signup. `signupsDisabled()` fails closed, - * so one of these losing `SIGNUPS_ENABLED=true` serves the invite-only waitlist - * instead of the sign-up form, with no build or deploy error to catch it. + * Hosted scripts and whether each ships open signup. `signupsDisabled()` fails + * closed, so a script losing `SIGNUPS_ENABLED=true` serves the invite-only + * waitlist instead of the sign-up form, with no build or deploy error to catch + * it. Production is closed to new signups. */ -const OPEN_SIGNUP_SCRIPTS = ["deploy:cf", "deploy:cf:dev", "preview:cf"]; - -for (const name of OPEN_SIGNUP_SCRIPTS) { - test(`${name} carries the signup opt-in into next build`, () => { +const SIGNUP_SCRIPTS = { + "deploy:cf": false, + "preview:cf": false, + "deploy:cf:dev": true, +}; + +for (const [name, open] of Object.entries(SIGNUP_SCRIPTS)) { + test(`${name} ${open ? "carries" : "omits"} the signup opt-in`, () => { // The flag is inlined as NEXT_PUBLIC_*, so only the build step decides the // baked value; setting it on the deploy step alone would be a no-op. - expect(pkg.scripts[name as keyof typeof pkg.scripts]).toContain( - "SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare next build", - ); + const script = pkg.scripts[name as keyof typeof pkg.scripts]; + if (open) { + expect(script).toContain( + "SIGNUPS_ENABLED=true DEPLOY_TARGET=cloudflare next build", + ); + } else { + expect(script).not.toContain("SIGNUPS_ENABLED"); + } }); }