Commit graph

368 commits

Author SHA1 Message Date
Nathan Flurry
6f8dc26111 Fix GitHub OAuth callback by removing retry wrapper
OAuth authorization codes are single-use. The appWorkspaceAction wrapper
retries failed calls up to 20 times, but if the code exchange succeeds
and a later step fails, every retry sends the already-consumed code,
producing "bad_verification_code" from GitHub.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:54:44 -07:00
Nathan Flurry
63df393004 Revert "Make squashed baseline migrations idempotent"
This reverts commit 356c146035.
2026-03-12 22:34:00 -07:00
Nathan Flurry
356c146035 Make squashed baseline migrations idempotent
Use CREATE TABLE IF NOT EXISTS and CREATE UNIQUE INDEX IF NOT
EXISTS so the squashed baseline can run against actors that
already have tables from the pre-squash migration sequence.
This fixes the "table already exists" error when org workspace
actors wake up with stale migration journals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:28:55 -07:00
Nathan Flurry
c410e24057 Add temporary debug logging to GitHub OAuth exchange
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:26:22 -07:00
Nathan Flurry
32a48131b5 Cache app workspace actor handle across requests
Every request was calling getOrCreate on the Rivet engine API
to resolve the workspace actor, even though it's always the same
actor. Cache the handle and invalidate on error so retries
re-resolve. This eliminates redundant cross-region round-trips
to api.rivet.dev on every request.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:16:48 -07:00
Nathan Flurry
1ac2dec220 Remove temporary actor key version prefix
Railway has no persistent volumes so stale actors are wiped on
each deploy. The v2 key rotation is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 22:07:51 -07:00
Nathan Flurry
58c695e8b4 Reset actor persistence baseline 2026-03-12 21:31:12 -07:00
Nathan Flurry
6bb5ca528e Tighten actor schema constraints 2026-03-12 21:22:39 -07:00
Nathan Flurry
90839685a7 Add actor display metadata 2026-03-12 21:08:43 -07:00
Nathan Flurry
3031fa1309 Log Foundry RivetKit deployment friction 2026-03-12 20:56:20 -07:00
Nathan Flurry
b90f7fc599 Serve Foundry Rivet routes directly from Bun 2026-03-12 20:50:20 -07:00
Nathan Flurry
422364e68e Remove Foundry Rivet runner override 2026-03-12 20:46:20 -07:00
Nathan Flurry
bc782879c2 Configure Foundry Rivet runner pool for /v1 2026-03-12 20:39:33 -07:00
Nathan Flurry
a8bcfa36bb Fix Foundry Rivet base path and frontend endpoint fallback 2026-03-12 20:31:49 -07:00
Nathan Flurry
9a2c60bf30 Move Foundry HTTP APIs onto /v1 2026-03-12 19:53:52 -07:00
Nathan Flurry
58b19c2253 Move Foundry HTTP APIs out of /api/rivet 2026-03-12 19:46:25 -07:00
Nathan Flurry
436eb4a3a3 Add legacy Foundry GitHub callback route 2026-03-12 19:20:34 -07:00
Nathan Flurry
cdac0aa937 Ship RivetKit runtime peers in Foundry backend 2026-03-12 19:08:56 -07:00
Nathan Flurry
31de559fbb Fix Foundry Railway backend Docker context 2026-03-12 19:02:15 -07:00
Nathan Flurry
70d2cc35d7 Split Railway config per Foundry service 2026-03-12 18:59:04 -07:00
Nathan Flurry
e79a3d9389 Add Railway Caddy frontend images 2026-03-12 18:58:57 -07:00
Nathan Flurry
940e49fcfa Use vanilla Rivet routing in Foundry backend 2026-03-12 18:48:11 -07:00
Nathan Flurry
4bccd5fc8d
Fix desktop build artifact ignore (#244) 2026-03-12 11:10:29 -07:00
Nicholas Kissel
fde8b481bd
Foundry UI polish: terminal empty state, history minimap redesign, styling tweaks (#242)
- Hide terminal pane body when no terminal tabs exist
- Redesign history minimap from orange bar to single icon with popover dropdown
- Simplify popover items to single-line user messages with ellipsis
- Adjust min-used badge hover padding
- Add right padding to message list for history icon clearance

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:03:04 -07:00
Nicholas Kissel
f09b9090bb
Standardize Foundry frontend colors with semantic design tokens (#241)
Extract hardcoded colors from 15+ component files into a centralized
token system (tokens.ts + shared-styles.ts) so all UI colors flow
through FoundryTokens. This eliminates 160+ scattered color values
and makes light mode a single-file change in the future.

- Add FoundryTokens interface with dark/light variants
- Add shared style helpers (buttons, cards, inputs, badges)
- Bridge CSS custom properties for styles.css theme support
- Add useFoundryTokens() hook and ColorMode context
- Migrate all mock-layout/* and mock-onboarding components

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 20:52:06 -07:00
Nicholas Kissel
ed6e6f6fa5 Polish Foundry desktop UI: billing redesign, sidebar hover menu, org switching fix
- Redesign billing page with task-hours pricing model (Free: 8h, Pro: 200h/seat)
- Add bulk hour purchase packages and Stripe payment management
- Remove Usage nav section, add upgrade CTA in Members for free plan
- Fix gear icon to open menu on hover with debounced timers
- Fix org switching in workspace flyout (portal outside-click detection)
- Fix tab strip padding when sidebar is collapsed
- Update website components and Tauri config

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:34:25 -07:00
Nicholas Kissel
f6656a90af Add Foundry Tauri v2 desktop app with UI polish
- Scaffold Tauri v2 desktop package (foundry/packages/desktop)
- Sidecar build script compiles backend into standalone Bun binary
- Frontend build script packages Vite output for Tauri webview
- macOS glass-effect app icon following Big Sur design standards
- Collapsible sidebars with smooth width transitions
- Inset content framing with borders and nested border-radius (Outer R = Inner R + Padding)
- iMessage-style chat bubble styling with proper corner radii
- Styled composer input with matching border-radius
- Vertical separator between chat and right sidebar
- Website download button component
- Cargo workspace exclude for standalone Tauri build

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 19:27:35 -07:00
Nathan Flurry
dbc2ff0682
Improve Foundry auth and task flows (#240) 2026-03-11 18:13:31 -07:00
Nathan Flurry
d75e8c31d1
Rename Foundry handoffs to tasks (#239)
* Restore foundry onboarding stack

* Consolidate foundry rename

* Create foundry tasks without prompts

* Rename Foundry handoffs to tasks
2026-03-11 13:23:54 -07:00
Nathan Flurry
d30cc0bcc8
Merge pull request #238 from rivet-dev/test-dev-webhooks-flow
Fix Foundry handoff creation flow
2026-03-11 11:17:00 -07:00
Nathan Flurry
c8a095b69f Merge remote-tracking branch 'origin/main' into test-dev-webhooks-flow
# Conflicts:
#	factory/packages/backend/src/actors/project/actions.ts
#	factory/packages/backend/src/actors/workspace/actions.ts
#	factory/packages/frontend/src/components/mock-layout.tsx
2026-03-11 11:14:04 -07:00
Nathan Flurry
5e733e8b37 Fix Foundry handoff creation flow 2026-03-11 11:06:51 -07:00
Nicholas Kissel
302bc7b674
Replace all:unset with explicit button/input resets across Foundry UI (#237)
Styletron's generated stylesheet ordering makes all:unset unreliable —
it can override font-size, border-radius, and background unpredictably.
Replace with appearance:none + targeted resets and clean up duplicate
CSS properties introduced during iterative fixes.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:04:20 -07:00
Nicholas Kissel
e03484848e
Foundry UI polish: favicon, icon alignment, and border refinements (#236)
Add Foundry favicon, fix icon centering across sidebar/composer/header
buttons, restore center panel top-left border curve, and position right
sidebar border between header actions and tab strip.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 02:59:58 -07:00
Nicholas Kissel
e792a720a0
Refine Foundry UI layout and styling (#235)
* feat: modernize chat UI and rename handoff to task

- Remove agent message bubbles, keep user bubbles (right-aligned)
- Rename "Handoffs" to "Tasks" with ListChecks icon in sidebar
- Move model picker inside composer, add renderFooter to ChatComposer SDK
- Make project sections collapsible with hover-only chevrons
- Remove divider between chat and composer
- Update model picker chevron to flip on open/close
- Replace all user-visible "handoff" strings with "task" across frontend

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

* feat: real org mock data, model picker styling, project icons, task minutes indicator

- Replace fake acme/* mock data with real rivet-dev GitHub org repos and PRs
- Fix model picker popover: dark gray surface with backdrop blur instead of pure black
- Add colored letter icons to project section headers (swap to chevron on hover)
- Add "847 min used" indicator in transcript header
- Rename browser tab title from OpenHandoff to Foundry
- Reduce transcript header title font weight to 500

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

* feat: refine Foundry UI — single-line task cards, dark user bubbles, curved panel corners, send icon

- Collapse task sidebar cards to single-line layout (title, number, diffs, timestamp)
- Dark-themed user message bubbles matching site theme
- Curved top-left corner on center chat panel with border line
- Subtle focus border on composer input
- Replace ArrowUpFromLine with SendHorizonal icon
- Tab strip gaps, padding, and divider alignment fixes
- Plus button with visible background
- Right sidebar header color matching

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 01:50:36 -07:00
Nathan Flurry
20082512a3
Merge pull request #234 from rivet-dev/foundry-terminal-pane
Add Foundry terminal and process pane
2026-03-11 00:00:24 -07:00
Nathan Flurry
b00c0109d0 Merge remote-tracking branch 'origin/main' into foundry-terminal-pane
# Conflicts:
#	factory/packages/backend/src/driver.ts
#	factory/packages/backend/src/integrations/sandbox-agent/client.ts
#	factory/packages/backend/test/helpers/test-driver.ts
#	factory/packages/frontend/src/components/mock-layout.tsx
#	pnpm-lock.yaml
#	sdks/react/src/ProcessTerminal.tsx
2026-03-10 23:59:58 -07:00
Nathan Flurry
28c4ac22ff Add foundry terminal and process pane 2026-03-10 23:55:43 -07:00
Nicholas Kissel
32008797da
Foundry UI polish: real org data, project icons, model picker (#233)
* feat: modernize chat UI and rename handoff to task

- Remove agent message bubbles, keep user bubbles (right-aligned)
- Rename "Handoffs" to "Tasks" with ListChecks icon in sidebar
- Move model picker inside composer, add renderFooter to ChatComposer SDK
- Make project sections collapsible with hover-only chevrons
- Remove divider between chat and composer
- Update model picker chevron to flip on open/close
- Replace all user-visible "handoff" strings with "task" across frontend

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

* feat: real org mock data, model picker styling, project icons, task minutes indicator

- Replace fake acme/* mock data with real rivet-dev GitHub org repos and PRs
- Fix model picker popover: dark gray surface with backdrop blur instead of pure black
- Add colored letter icons to project section headers (swap to chevron on hover)
- Add "847 min used" indicator in transcript header
- Rename browser tab title from OpenHandoff to Foundry
- Reduce transcript header title font weight to 500

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:49:48 -07:00
Nathan Flurry
34a0587cbc
Add star repo onboarding flow (#232) 2026-03-10 23:47:33 -07:00
Nathan Flurry
d2346bafb3
Configure lefthook formatter checks (#231)
* Add lefthook formatter checks

* Fix SDK mode hydration

* Stabilize SDK mode integration test
2026-03-10 23:03:11 -07:00
Nathan Flurry
0471214d65
Share chat UI components in @sandbox-agent/react (#228)
* Extract shared chat UI components

* chore(release): update version to 0.3.1

* Use shared chat UI in Foundry
2026-03-10 22:31:36 -07:00
Nathan Flurry
6d7e67fe72 chore(release): update version to 0.3.1 2026-03-10 22:12:56 -07:00
Nathan Flurry
76586f409f
Add ACP permission mode support to the SDK (#224)
* chore: recover hamburg workspace state

* chore: drop workspace context files

* refactor: generalize permissions example

* refactor: parse permissions example flags

* docs: clarify why fs and terminal stay native

* feat: add interactive permission prompt UI to Inspector

Add permission request handling to the Inspector UI so users can
Allow, Always Allow, or Reject tool calls that require permissions
instead of having them auto-cancelled. Wires up SDK
onPermissionRequest/respondPermission through App → ChatPanel →
ChatMessages with proper toolCallId-to-pendingId mapping.

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

* fix: prevent permission reply from silently escalating "once" to "always"

Remove allow_always from the fallback chain when the user replies "once",
aligning with the ACP spec which says "map by option kind first" with no
fallback for allow_once. Also fix Inspector to use rawSend, revert
hydration guard to accept empty configOptions, and handle respondPermission
errors by rejecting the pending promise.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:52:43 -07:00
Nicholas Kissel
5d65013aa5
Merge pull request #213 from rivet-dev/NicholasKissel/rivet-font-update
Switch fonts to Manrope to match Rivet.dev
2026-03-09 17:43:36 -07:00
Nicholas Kissel
0e4a44f1f3 fix: increase base font-weight to 500 for Manrope readability
Manrope at weight 400 is thinner than Open Sans was, making small body
text hard to read. Bumping to 500 matches Rivet.dev's usage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:26:31 -07:00
Nicholas Kissel
bf3df519e4 feat: switch website and inspector fonts to Manrope to match Rivet.dev
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:20:47 -07:00
Nathan Flurry
bf282199b5
Integrate OpenHandoff factory workspace (#212) 2026-03-09 14:00:20 -07:00
Nathan Flurry
3d9476ed0b chore(release): update version to 0.3.0 2026-03-07 18:54:35 -08:00
Nathan Flurry
cd29dd57c4 chore(release): update version to 0.3.0 2026-03-07 18:01:57 -08:00