Skip to content

Serve dashboard SPA on shared origin with existing login - #257

Draft
willwashburn wants to merge 28 commits into
mainfrom
codex/dashboard-session-proxy
Draft

willwashburn wants to merge 28 commits into
mainfrom
codex/dashboard-session-proxy

Conversation

@willwashburn

@willwashburn willwashburn commented Oct 31, 2026 •

Copy link
Copy Markdown
Member

Routes /dashboard/* to the standalone static SPA on the existing marketing origin, with /login and authenticated /cloud/api using the existing shared-origin HttpOnly session cookie. No alternate authentication or CORS is introduced.

The optional DASHBOARD_ASSETS binding receives the path with /dashboard stripped and no cookie/authorization headers. With the binding available, the root canonicalizes to /dashboard/ and writes return 405. A missing binding returns an uncached 503. The binding remains disabled; the router README records rollout order and rollback.

The development-only Next rewrite accepts only HTTP loopback origins. Its regression test now uses the normal Vitest TypeScript runner; the former .mjs test was excluded by the CI include patterns.

Validation on 4ca656cf84918be30d9f4107662ae3671f953a95, composed with current main fad47a04537a338ec9fb9650821724b26ab33214:

  • Real root npm ci; both web/router workspace links resolve inside the T7 worktree.
  • npm test: 55 web files / 619 tests, 12 router files / 123 tests, including all 13 proxy cases.
  • npm run typecheck: both workspaces passed.
  • npm run lint: no errors; four existing warnings outside this change.
  • Negative controls: removing the dashboard rewrite makes 10 cases fail; removing origin validation makes 7 fail; enabling it outside development makes 2 fail. Source restored byte-for-byte; all 13 pass.
  • npm run build: compilation, TypeScript and 252 static pages completed, then the existing Next 16.4.0 security check exited 1. This is not a green build. Existing security PR security: upgrade Next.js to 16.4.3 #252 supplies the patched version; no duplicate upgrade is included here.
  • Current-head remote CI is now green: Tests42084249657 and Verify42084249702. Both job logs show actual Checkout 505e748e7f2e6d5ebe276763ee936ff5228724d9; its source parent is4ca656c and its tree exactly matches the locally validated tree. Existing CI also ran its automatic preview42084249645; no manual preview action was taken.

Keep draft until the dependency/build gate, two recorded reviews, and the real shared-origin Google/provider/dashboard journey are settled. Google configuration is available privately; live QA has not run. Local port 3100 belongs to a separate checkout and was left untouched. No manual deployment/preview, binding enablement, or production OAuth change was initiated.

Companions:


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Routes /dashboard/* to a standalone SPA while keeping /login as the marketing login page and /cloud/api as the Cloud backend, so the browser reuses the existing shared-origin HttpOnly session cookie without new login UI or CORS.

  • /dashboard canonicalizes to /dashboard/, non-GET/HEAD requests return 405, and the optional DASHBOARD_ASSETS binding serves asset paths with /dashboard stripped and cookie/authorization headers removed.
  • With no binding, /dashboard/* returns an uncached 503 instead of falling through to marketing.
  • A development-only Next.js rewrite proxies /dashboard and /dashboard/* to a Vite origin, restricted to HTTP loopback addresses.

Rollout

  • Publish the relay-dashboard static asset Worker, deploy Cloud's /dashboard/ OAuth return support, then enable the DASHBOARD_ASSETS binding.
  • Rollback removes the binding; existing /cloud/dashboard/* routing is unaffected.

Written for commit ab9ad25. Summary will update on new commits.

View guided diff Turn on auto-fix


Agent Relay sessions

  • codex session 01a18eee · opened via gh pr create · last active 2026-10-31

@coderabbitai

coderabbitai Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Preview deployed!

Environment URL
Web https://41f506b2-agentrelay-web.agent-workforce.workers.dev

This is a Cloudflare Workers preview version of this PR's build.

willwashburn and others added 25 commits October 30, 2026 19:10
…e-need-forward-deployed-agents

Publish: We have forward deployed engineers. Do we need forward deployed agents?
* docs: add Claude connector guide

* docs: correct Claude connector setup

---------

Co-authored-by: agentrelaybot <[email protected]>
* docs: add CLI-only hackathon getting started guide

* docs: clarify CLI and desktop session privacy

* docs: make CLI setup the primary Getting started guide

* docs: remove redirects for unpublished hacking URLs

* docs: default getting started to automatic tool detection

* docs: explain session joining limits and verification status

* docs: keep getting started brief and move details to agent exports

* docs: position desktop as the paid upgrade from the free CLI

* docs: simplify init commands for next.9

* docs: clarify hosted defaults and self-hosted URL usage

* test(docs): assert URL-free setup without old hostnames

---------

Co-authored-by: kjgbot <[email protected]>
…A blue (#260)

* feat(home): agent logo cloud trading laser bolts behind the hero

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): "Keep the tools you love" section

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(web): deeper, saturated primary button blue for 7:1 text contrast

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): brighter hero agent tiles and laser bolts

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(web): primary button blue closer to Curious Blue

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): agents orbit the hero headline on a tilted ring; app/terminal tools row

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* fix(home): live reduced-motion handling for the orbit; tool names never clip

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): hero button opens getting started, with the GitHub mark

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): hero and nav buttons read "Get started" and open the getting-started docs

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): GitHub star button in the nav instead of Log in

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): Get started buttons drop the GitHub mark

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): tools-you-love section leads the "No new IDE" band

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): "No new IDE. Keep the tools you love" with ten tools in two rows; why row loses its heading

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* copy(home): tools section lead says Agent Relay runs in the background

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* perf(home): orbit frame loop runs only while the ring is visible

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): first why card is about choosing what goes on the relay

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): tools grid shows every agent we connect, mixed

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): take the closing call to action off the homepage

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): Muse takes Gemini CLI's place in the tools grid

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* copy(home): Paseo is a desktop app

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* copy(home): Devin is a terminal CLI

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* copy(home): tools grid leads with the most familiar agents

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): colour Codex mark in the tools grid

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(web): colour Codex mark wherever Codex appears; Claude app icon in the tools grid

Codex CLI keeps the white mark and ChatGPT the OpenAI mark. The colour Codex mark
is a client component so each copy gets its own gradient id.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* feat(home): tools heading breaks after "No new IDE."; drop the checks row; Pi leaves the headline rotation

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
Deploys, previews, publishing and DNS no longer wait on a cmo sign-off; the
reviewed-PR, two-review and human-release rules stay.

Co-authored-by: kjgbot <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
* Add status page link to shared footer

* Show external-link icon on footer status link
…tomer quotes (#249)

* Add Pomerado customer quote to the homepage and as a shareable image

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Show customer quotes as a compact row before the final call to action

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Add Serg's X post next to the Pomerado quote

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Subset brand fonts with curly quotes and non-breaking characters; emphasize Serg's post

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Document the curly quotes and non-breaking characters in the font subset

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Download for your OS from the homepage, landing on a page that explains the app

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Turn the download start page into onboarding: sign up, then install and connect

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Steady hero download label, no repeat downloads, larger tap targets, step status for screen readers

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Lead the download page with what Agent Relay does: runs in the background, agents talk directly

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Download only on fresh visits, keep button transitions, fail-open label hiding, quote text clear of X link

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Give Windows downloads an install step for the installer and the zip

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Show agents talking on the download page: Claude Code and Codex through the relay, with less copy

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Remember started downloads across in-app navigation back to the start page

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Split the download page: task on the left, every agent wired through the relay on the right

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Test when the download start page downloads

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Offer other builds from the download start page

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Replace the download page animation with a plain account of what the app does

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Drop the explainer eyebrow and put the download status under the headline

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Lead the download page with "Let your agents talk to each other"

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Keep a hidden heading over the download page's explainer points

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Drop sign-in from the download page; the app's own sign-in is the one step

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Move the download fallback links to the bottom, muted

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* One nav across the site: GitHub stars and the download button

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Download button in the docs mobile menu; stars give way on the narrowest phones

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Say "Check your Downloads folder" when the start page skips a repeat download

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Track the desktop download funnel: desktop_download_clicked and desktop_download_started

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
…d customers

The pages render per request, only after Cloud verifies the reader's session
and the organization's self-host entitlement. The page forwards only the
agent_relay_session cookie (Domain=.agentrelay.com, Path=/) server to server
to Cloud's GET /cloud/api/v1/me/selfhost-docs, which fetches the runbooks
from relay-agent (knowledge/private/selfhost, the single source the support
agent also reads). This repository is public, so the text is never committed,
bundled or prerendered here.

- Signed out (or a rejected session) -> /login?next=/docs/self-hosting/<doc>;
  Cloud's /cloud/docs/self-hosting hop returns there after sign-in.
- Signed in, not entitled -> request-access page with no runbook names or text.
- Entitled -> overview (architecture diagrams from helm-charts, the OCI chart,
  Ask the setup agent via ask_customer_support) and each runbook, with the
  docs nav, copy buttons and docs styling. Markdown renders with unified and
  no eval (Workers forbid it); raw HTML, images and unsafe links are dropped.
- force-dynamic plus Cache-Control: private, no-store, X-Robots-Tag noindex,
  no sitemap/llms/search entries, prefetch off, PostHog replay blocked.
- Router: the traffic recorder skips the gated pages and Cloud's runbook API.
- CI: selfhost-docs-leak-check.mjs scans .next/.open-next for prerendered
  gated routes and for fingerprinted runbook text (sampled 12-word window
  hashes, not the text). The worker smoke checks the signed-out redirect.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Leak check fails closed: unreadable directories throw, oversized files are
  findings, missing named build dirs exit 2, dynamicRoutes are checked, and
  fingerprinting refuses anything but flat .md runbooks.
- Router recorder exclusion matches the decoded path (undecodable: excluded).
- Entitled pages add ph-no-capture so autocapture sends no runbook text.
- Markdown links reject backslashes/control characters; heading ids stay
  unique when a heading's slug equals an earlier generated suffix.
- A misconfigured Cloud origin is 'unavailable', not a thrown 500.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…05d5cc)

guided-gke-install was reworded for people in relay-agent#100.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Gated self-hosting docs at /docs/self-hosting for entitled customers
…fda491)

relay-agent #101 updated the self-host runbooks for agent-relay 0.3.11.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ts-0310

chore(docs): regenerate self-host runbook fingerprints (relay-agent bfda491)
The overview names both clouds, links both reference installs and both
guided installs, and offers one setup-agent prompt per cloud
(selfhost:guided-gke-install, selfhost:guided-eks-install). The diagram
caption says it is drawn for GKE and gives the EKS equivalents.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…lass

docs(self-hosting): present GKE and EKS as equal install paths

@kjgbot kjgbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review record — Codex primary reviewer, exact head 4ca656cf84918be30d9f4107662ae3671f953a95.

Reviewed the full current-main composition, router dispatch and service-binding behavior, development rewrite, CI discovery, and rollout documentation. No blocking routing-code finding remains from this pass. The root prefix/query behavior, removal of Cookie/Authorization, missing-binding no-store 503, method restriction with an available binding, and separation from existing /cloud and owner dashboards agree with the intended contract. The production service binding remains disabled.

Fixed the regression-protection gap found by the independent reviewer: the excluded Node .mjs is replaced with 13 Vitest TypeScript cases discovered by normal npm test. On this exact source: 619 web + 123 router tests; both typechecks; lint with no errors/four existing warnings. Negative controls produce 10 failures without the rewrite, 7 without origin validation, and 2 without the development guard; restoring the config byte-for-byte restores all 13 cases.

Not an approval to merge or deploy: production compilation, types, and 252 static pages completed, but npm run build exited 1 because the inherited Next16.4.0 security check fired. Existing #252 supplies the patched version. Current-head CI and the independent final-head review must be read separately. The real Google/provider/shared-origin dashboard journey is still unverified; configured credentials do not establish OAuth completion. Keep draft until those gates and the repository's two recorded reviews are satisfied.

@kjgbot kjgbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent agent review record — /root/review_marketing257, exact head 4ca656cf84918be30d9f4107662ae3671f953a95. Posted by the coordinating agent from the independent review artifact; this is not a separate human account or an APPROVED review.

Code-review signoff: no actionable findings. The previous P3 is resolved: the replacement .test.ts is discovered by the web Vitest runner. The independent reviewer ran all 13 proxy cases and the three new router cases with zero failures, verified worktree-local dependency resolution, and checked config/lockfile hashes and negative-control logs (10/7/2 failures). Reviewed current-main privacy/replay behavior and found the new routing branch preserves those contracts.

Evidence limits: this is source/test signoff only. Exact-head CI was still running at review time; the inherited Next16.4.0 security build failure, existing #252 dependency, and real shared-origin OAuth/provider/dashboard journey remain unresolved. No merge, deployment, preview, binding enablement, or production access is approved by this record.

This branch has not been deployed

No deployments
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