Skip to content

feat: promote dev foundation and launch prep to main#1

Merged
icanvardar merged 58 commits into
mainfrom
dev
Jun 19, 2026
Merged

feat: promote dev foundation and launch prep to main#1
icanvardar merged 58 commits into
mainfrom
dev

Conversation

@icanvardar

@icanvardar icanvardar commented Jun 19, 2026

Copy link
Copy Markdown
Member

Summary

  • Backend, CLI, relay, and web onboarding foundation with Better Auth device flow
  • Relay transport, Fly deploy hardening, and ops runbook
  • CLI release automation + shared Homebrew tap sync
  • Host-attach happy-path e2e test wired into CI full lane
  • Horizontal landing page with hero demo video and copyable install
  • apps/mobile git submodule (wrapper-mobile)

Note

High Risk
Large greenfield surface area spanning shell rc patching, session relay/auth, and production deploy/release automation; regressions could affect user shells, remote access, or shipping broken binaries.

Overview
This PR replaces the Turborepo starter with the Wrapper product monorepo and lands the end-to-end foundation described in the PR title: CLI, backend hooks, relay integration points, and launch-prep automation.

CLI runtime (apps/cli) adds the full host/viewer loop: rc install/uninstall, guarded shell-host (PTY, local WebSocket broker, session registry), attach with registry picker plus Convex-backed authorization for local attach and relay tickets for remote attach, device auth login/whoami/logout, prefix shortcuts for share/unshare, relay host bridge, HUD/feedback helpers, and Bun tests including a host→WS→shell e2e path.

Tooling & onboarding switches the repo to oxlint + oxfmt (with shared configs), adds workspace .env.example, rewrites the root README, registers apps/mobile as a git submodule, and moves apps/docs from Next.js to Mintlify (architecture, onboarding, mobile contract MDX).

CI & release adds a two-lane CI (lint/format/types, then tests, web/Cloudflare builds, optional Convex deploy dry-run, relay smoke), Fly deploy for apps/relay, CLI release (multi-arch bun build --compile, GitHub release + checksums), Homebrew tap formula updates, and a release dry-run workflow for PR validation.

Reviewed by Cursor Bugbot for commit abd3faf. Bugbot is set up for automated code reviews on this repo. Configure here.

Gate host relay tickets behind Autumn feature checks, and tighten Fly deployment with explicit relay config, smoke verification, and updated operational runbook details.
Introduce persistent onboarding progress in Convex and wire a guarded web onboarding route so authenticated users complete first-run checklist steps before normal app flow.
Keep host HUD behavior on by default and add WRAPPER_HUD controls so users can disable title and notification updates when they prefer a quieter terminal.
Introduce fast/full CI lanes, automated multi-platform CLI release assets, and reusable workflow-driven updates for wrapper.rb in the shared heycupola/homebrew-tap repository.
Reorganize docs navigation around onboarding and operations, add troubleshooting and release-channel guidance, and document the mobile-phase boundary while app development is deferred.
Adopt a Relic-inspired section wrapper pattern and redesign the landing page as horizontal snap-scrolling panels, while polishing onboarding completion UX and progress feedback.
Introduce release dry-run archive verification, add relay incident/rollback runbook guidance, and cover health plus unauthenticated websocket rejection with relay smoke e2e tests.
Document the backend/auth/relay contract for future mobile clients and include the page in Mintlify navigation so implementation assumptions stay explicit before mobile build starts.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@icanvardar

Copy link
Copy Markdown
Member Author

@cursoragent do your job

@cursor

cursor Bot commented Jun 19, 2026

Copy link
Copy Markdown

Please finish setting up background agents. Go to Cursor

@icanvardar

Copy link
Copy Markdown
Member Author

@cursoragent do your job

@cursor

cursor Bot commented Jun 19, 2026

Copy link
Copy Markdown

Done. I pushed two commits to dev:

  • Hardened Better Auth secret handling and documented BETTER_AUTH_SECRET.
  • Fixed relay WebSocket auth race by queuing messages until ticket authorization completes.
  • Bumped CLI release version to 0.1.0.
  • Aligned Bun pins/docs/workflows to 1.3.5.
  • Added CI web production + Cloudflare bundle build checks.
  • Added Convex deploy dry-run step when CONVEX_DEPLOY_KEY is configured; it warns/skips when the secret is missing.
  • Cleaned stale CLI PTY docs.

Validation passed locally:

  • bun run format:check
  • bun run lint
  • bun run check-types
  • bunx turbo run test
  • apps/web production build
  • apps/web OpenNext Cloudflare build
  • CLI Linux standalone build

Remote GitHub Actions are green on the latest push; only Cursor Bugbot was still in progress when checked. Working tree is clean.

Note: Bun was missing from this Cloud Agent image, so I installed Bun 1.3.5 and ran bun install. For future agents, set up the environment from Cursor web with a prompt like: “Install Bun 1.3.5 in the cloud agent image and run bun install for the wrapper monorepo so CI-equivalent checks can run locally.”

Open in Web Open in Cursor 

cursoragent and others added 2 commits June 19, 2026 11:11
Co-authored-by: Can Vardar <me@icanvardar.com>
Co-authored-by: Can Vardar <me@icanvardar.com>
Comment thread apps/cli/index.ts
Comment thread apps/cli/commands/attach.ts
Comment thread apps/cli/commands/shell-host.ts
Comment thread .github/workflows/fly-deploy.yml Outdated
Comment thread apps/cli/registry/sessions.ts
Comment thread apps/cli/client/attach-client.ts
Comment thread apps/cli/index.ts
Comment thread apps/cli/shell/prefix.ts Outdated
Comment thread apps/cli/scripts/install.sh Outdated
@icanvardar icanvardar merged commit 1c0f05f into main Jun 19, 2026
10 checks passed

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 4 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit abd3faf. Configure here.

if (!closed) {
log.warn("relay host disconnected", { sessionId: opts.sessionId });
}
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Relay drop leaves stale bridge

Medium Severity

The relay WebSocket's close event handler doesn't call the internal close() function when the socket closes unexpectedly. This leaves PTY listeners active, sending output to a dead socket and preventing remote re-attachment.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit abd3faf. Configure here.

const message = normalizeAttachAuthorizationError(error);
process.stderr.write(`[wrapper] attach authorization failed: ${message}\n`);
return false;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Local attach needs backend record

Medium Severity

If session:open fails while the host keeps running, wrapper attach still calls session:authorizeAttach for local WebSocket attach and fails with “session not found,” even though the session is live in the local registry and listening on 127.0.0.1.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit abd3faf. Configure here.

if (backend.status === "missing_auth") {
process.stderr.write("[wrapper] backend auth required. Run `wrapper auth login` first.\n");
return false;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Convex URL blocks local attach

Medium Severity

With WRAPPER_CONVEX_URL set but no saved login, shell-host runs and registers sessions, yet wrapper attach refuses local attach and tells the user to log in—even for same-machine 127.0.0.1 sessions that never touch the relay.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit abd3faf. Configure here.


const client = new ConvexHttpClient(convexUrl);
client.setAuth(stored.sessionToken);
return { status: "ready", client, convexUrl };

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Env URL overrides stored token

Medium Severity

resolveAuthedConvexClient builds the Convex client from WRAPPER_CONVEX_URL/CONVEX_URL when set, but still applies the saved session token from a potentially different deployment URL. Auth and attach calls can fail or hit the wrong backend after an env change without re-login.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit abd3faf. Configure here.

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.

2 participants