bun dw spins up a fully isolated per-worktree dev stack: Neon DB branch, Dragonfly + ElasticMQ via docker compose, portless aliases, tmux session, and emulate.dev Google OAuth. Workers, dev server, vite, checkout, and stripe-listen run as concurrently siblings. bun setup-test auto-runs on first dw and seeds unit-test-org via clearOrg+setupOrg+ensureDefaultStripeAccount with 13 features + team invites for all 5 useautumn.com members. Hardcoded localhost URLs in test scenarios now read AUTUMN_TEST_BASE_URL/AUTUMN_TEST_VITE_URL. preload-env.ts loads .env.local so bun t/cm/setup-test route to the worktree server. 1265-line scripts/dw.ts split into scripts/dw/ module (index + commands + helpers). server/src/db/initDrizzle.ts reverted to upstream (search_path concerns solved by per-branch Neon isolation). Workers enabled in agent worktrees now that SQS is per-worktree via ElasticMQ.
19 lines
645 B
TypeScript
19 lines
645 B
TypeScript
import { fatal } from "../helpers/shell.ts";
|
|
import { resolveAgentEntryOrFatal } from "../helpers/registry.ts";
|
|
import { tmuxSessionName, ensureTmuxInstalled, tmuxSessionExists } from "../helpers/tmux.ts";
|
|
|
|
export function cmdAttach(): void {
|
|
const entry = resolveAgentEntryOrFatal("attach");
|
|
const name = tmuxSessionName(entry.worktreeNum);
|
|
ensureTmuxInstalled();
|
|
if (!tmuxSessionExists(name)) {
|
|
fatal(`no tmux session for ${name}, run 'bun dw' first`);
|
|
}
|
|
const proc = Bun.spawn(["tmux", "attach", "-t", name], {
|
|
stdin: "inherit",
|
|
stdout: "inherit",
|
|
stderr: "inherit",
|
|
});
|
|
proc.exited.then((code) => process.exit(code ?? 0));
|
|
}
|