v0.9.78 — Marketplace runtime, managed gateway defaults, and staging release hardening
New
- Added the native Kortix marketplace runtime floor so new projects can start with curated skills, starter defaults, and marketplace install/update flows built into the project experience.
- Expanded the Marketplace UI, CLI commands, registry handling, and project creation defaults so skills can be browsed, installed, updated, and carried into starter projects consistently.
- Moved the managed LLM gateway into the default routing path behind the production master switch, with OpenRouter and Bedrock-backed managed model routing, AUTO model handling, and server-owned model configuration.
- Added no-restart warm-fork and sandbox runtime improvements, including build-time catalog baking and credential hot-swap paths for faster agent startup without restarting OpenCode.
- Added agent email channel support, Slack per-user identity controls, and improved channel/session selection behavior.
Improved
- Hardened the dev, staging, and production release topology: staging is the release-candidate branch, production promotion retags tested staging images, prod rollback is image-aware, and staging/prod deploy workflows apply database migrations in the right environment.
- Improved staging environment correctness, including staging database isolation, staging auth/runtime configuration, Daytona as the staging sandbox provider, and staging Cloudflare/API worker deployment.
- Improved session reliability across browser, terminal, PTY, tunnel, file upload, PDF rendering, and first-prompt retry paths.
- Improved frontend onboarding and project creation flows with marketplace starter selection, first-project bootstrap fixes, chat input polish, session sidebar persistence, and model picker stability.
- Improved gateway observability and runtime behavior with structured run-path logging, managed catalog support, session cost display fixes, and live env handling for router tools.
Fixed
- Fixed staging deploy dispatch, build, and promotion edge cases so staging image pins and release-source SHAs are preserved correctly for production retags.
- Fixed multiple auth and environment regressions in staging, including server auth env alignment and runtime config validation.
- Fixed CI and security scan issues around marketplace code, frontend build memory, Drata visibility gating, and staging QA/report publishing.
- Fixed channel and connector bugs for AgentMail, Slack, email inbox binding, profile inbox defaults, and executor call routing.
- Fixed warm snapshot and warm pool toggles so disabled settings remain disabled and stale build contexts self-heal.
What's Changed
- chore(release): VERSION → 0.9.78 [skip ci] by @github-actions[bot] in #3728
- feat(ci): rollback-prod workflow — reversible prod rollback (inverse of promote) by @markokraemer in #3730
- feat(ci): rollback-prod = single-dispatch FE + BE rollback (image-aware, Vercel-automated) by @markokraemer in #3731
- feat(gateway): run-path logging + small_model pin + longer sandbox autostop by @lillyboga in #3733
- chore(dev-eks): deploy gateway dev-e2edc542 [skip ci] by @github-actions[bot] in #3734
- chore(dev-eks): deploy dev-e2edc542 [skip ci] by @github-actions[bot] in #3735
- feat(web): skip Vercel FE build on infra-only prod pushes (kill rollback clobber) by @markokraemer in #3738
- docs(skill): add kortix-rollback — rollback runbook + FE clobber/skip behavior by @markokraemer in #3739
- feat(catalog): refresh managed Chinese models to latest frontier (GLM-5.1, Qwen3.7-Max, DeepSeek V4) by @lillyboga in #3740
- chore(dev-eks): deploy gateway dev-66e45306 [skip ci] by @github-actions[bot] in #3741
- chore(dev-eks): deploy dev-66e45306 [skip ci] by @github-actions[bot] in #3742
- feat(snapshots): Platinum build pipeline — CAS agent-swap (kill mass-rebuild) + auto-build self-heal + size clamp by @kubet in #3744
- chore(dev-eks): deploy dev-906ba46d [skip ci] by @github-actions[bot] in #3745
- feat(snapshots): per-project warm-fork for Platinum (session start ~40s -> ~2s) by @kubet in #3746
- chore(dev-eks): deploy dev-e87ace5c [skip ci] by @github-actions[bot] in #3747
- fix(snapshots): warm-fork admin toggle (env->DB) + pre-build default on Platinum deploys by @kubet in #3748
- chore(dev-eks): deploy dev-e28bd75c [skip ci] by @github-actions[bot] in #3749
- perf(session-start): long-poll readiness (?wait_ms) — kill the ~800ms FE poll-tick latency by @kubet in #3754
- chore(dev-eks): deploy dev-f483258d [skip ci] by @github-actions[bot] in #3755
- fix(admin): scope warm-fork (stateful template) toggle to Platinum by @kubet in #3751
- fix(sandbox-agent): cap gateway /models fetch (6s timeout) — unhang opencode startup on both providers by @kubet in #3750
- feat(sandbox-agent): no-restart warm-fork claim via credential-injecting proxies (flag-off) by @kubet in #3752
- chore(dev-eks): deploy dev-952e5c40 [skip ci] by @github-actions[bot] in #3756
- feat(warm-fork): enable no-restart on stateful seeds (catalog endpoint + KORTIX_LLM_HOTSWAP) by @kubet in #3757
- chore(dev-eks): deploy dev-278a549a [skip ci] by @github-actions[bot] in #3758
- feat(warm-fork): no-restart on shared seed + build-time catalog bake (full picker, no regression) by @kubet in #3759
- chore(dev-eks): deploy dev-280ef097 [skip ci] by @github-actions[bot] in #3760
- feat(billing): free tier, new onboarding, 500 credits by @sutharjay1 in #3761
- chore(dev-eks): deploy dev-b0fb5d65 [skip ci] by @github-actions[bot] in #3762
- fix(warm-fork): deliver per-session creds to agent shells on no-restart hot-swap by @kubet in #3763
- chore(dev-eks): deploy dev-7da97a3c [skip ci] by @github-actions[bot] in #3764
- feat(llm-gateway): unify pipeline + models.dev catalog + AUTO routing + server-owned model config by @markokraemer in #3765
- feat: add AgentMail email channels by @markokraemer in #3766
- chore(dev-eks): deploy dev-1d74a3d5 [skip ci] by @github-actions[bot] in #3769
- fix(warm-fork): give each session its own opencode root (stop cross-session chat bleed) by @sutharjay1 in #3767
- chore(dev-eks): deploy dev-1b0d2f0c [skip ci] by @github-actions[bot] in #3770
- fix: restore Slack channel install flow by @markokraemer in #3771
- feat(slack): per-user identity — run the agent as the sender, not the installer by @lillyboga in #3768
- fix: restore Slack custom app flow by @markokraemer in #3772
- chore(dev-eks): deploy dev-399a8fa8 [skip ci] by @github-actions[bot] in #3774
- Fix auto model upstream routing by @markokraemer in #3775
- chore(dev-eks): deploy gateway dev-817adede [skip ci] by @github-actions[bot] in #3776
- Fix CLI sandbox auth fallback by @markokraemer in #3777
- chore(dev-eks): deploy dev-35872ebb [skip ci] by @github-actions[bot] in #3778
- Route auto to Fusion and harden AgentMail email channel by @markokraemer in #3779
- chore(dev-eks): deploy gateway dev-b75cd588 [skip ci] by @github-actions[bot] in #3780
- chore(dev-eks): deploy dev-b75cd588 [skip ci] by @github-actions[bot] in #3781
- fix(web): gate first-project bootstrap to signup returns by @sutharjay1 in #3773
- fix(cli): authenticate from sandbox agent env fallback by @markokraemer in #3784
- fix(web): fix inline LaTeX rendering in markdown by @sutharjay1 in #3783
- chore(dev-eks): deploy gateway dev-1dde0cdf [skip ci] by @github-actions[bot] in #3785
- chore(dev-eks): deploy dev-1dde0cdf [skip ci] by @github-actions[bot] in #3786
- fix(cli): show effective sandbox auth in host banner by @markokraemer in #3787
- chore(dev-eks): deploy dev-6a5041da [skip ci] by @github-actions[bot] in #3788
- Fix AgentMail email channel dispatch by @markokraemer in #3789
- Make Kortix manifest drive agents by @markokraemer in #3782
- chore(dev-eks): deploy dev-16a54ea6 [skip ci] by @github-actions[bot] in #3790
- Fix Email inbox binding ownership by @markokraemer in #3792
- chore(dev-eks): deploy dev-a634ac8b [skip ci] by @github-actions[bot] in #3794
- fix(billing): point staging Stripe catalog at the main test account by @markokraemer in #3791
- fix(web): move sandbox template picker inline into composer toolbar by @markokraemer in #3793
- fix: pin email channel executor calls to session inbox by @markokraemer in #3795
- chore(dev-eks): deploy gateway dev-a261620a [skip ci] by @github-actions[bot] in #3796
- chore(dev-eks): deploy dev-4a456508 [skip ci] by @markokraemer in #3797
- feat(web): attach pasted images (Cmd+V) in the composer by @markokraemer in #3798
- fix: deliver email channel initial prompt by @markokraemer in #3799
- chore(dev-eks): deploy dev-a8413fc2 [skip ci] by @github-actions[bot] in #3801
- fix: default email connectors to profile inbox by @markokraemer in #3804
- chore(dev-eks): deploy gateway dev-389e0b22 [skip ci] by @github-actions[bot] in #3806
- chore(dev-eks): deploy dev-389e0b22 [skip ci] by @github-actions[bot] in #3807
- fix(web): show session cost from token usage when step-finish cost is zero by @sutharjay1 in #3802
- fix(web): render PDFs via native iframe in file viewer by @sutharjay1 in #3808
- chore(dev-eks): deploy dev-513a619d [skip ci] by @github-actions[bot] in #3810
- feat(gateway): LLM gateway → Customize, UI redesign, backend hardening by @markokraemer in #3811
- chore(dev-eks): deploy gateway dev-e0bf1be2 [skip ci] by @github-actions[bot] in #3812
- chore(dev-eks): deploy dev-a81b7e51 [skip ci] by @github-actions[bot] in #3813
- chore(dev-eks): deploy dev-cec9f78a [skip ci] by @github-actions[bot] in #3816
- fix(gateway): env-correct curl host + keyboard log viewer + session names by @markokraemer in #3815
- chore(dev-eks): deploy dev-5f756e9c [skip ci] by @github-actions[bot] in #3818
- chore(dev-eks): deploy dev-146da0db [skip ci] by @github-actions[bot] in #3819
- chore(dev-eks): deploy dev-e456e0f1 [skip ci] by @github-actions[bot] in #3820
- chore(dev-eks): deploy dev-b45f4068 [skip ci] by @github-actions[bot] in #3821
- chore(dev-eks): deploy dev-e8239aca [skip ci] by @github-actions[bot] in #3822
- chore(dev-eks): deploy dev-5019ba05 [skip ci] by @github-actions[bot] in #3824
- feat(slack): DM the login prompt instead of a silent threaded ephemeral by @lillyboga in #3827
- chore(dev-eks): deploy dev-a909aba7 [skip ci] by @github-actions[bot] in #3828
- fix(platinum): respect auto-stop setting instead of hardcoded persistent (+ 15min for kortix dev) by @kubet in #3829
- chore(dev-eks): deploy dev-9e7248dc [skip ci] by @github-actions[bot] in #3830
- fix(warm-snapshot): honor the OFF toggle on a cold cache (admin switch silently re-enabled it) by @kubet in #3831
- chore(dev-eks): deploy dev-23c0bb4d [skip ci] by @github-actions[bot] in #3832
- fix(warm-template): admin toggle is the only control — default OFF/opt-in, honored from boot by @kubet in #3833
- chore(dev-eks): deploy dev-b479169d [skip ci] by @github-actions[bot] in #3834
- Add opt-in LLM gateway model routing by @markokraemer in #3826
- chore(dev-eks): deploy gateway dev-cf7b7b1b [skip ci] by @github-actions[bot] in #3835
- chore(dev-eks): deploy dev-cf7b7b1b [skip ci] by @github-actions[bot] in #3836
- fix(api): mount LLM gateway via wire.ts (main index.ts crashes API on boot) by @lillyboga in #3838
- chore(dev-eks): deploy dev-c405a602 [skip ci] by @github-actions[bot] in #3839
- chore(dev-eks): deploy gateway dev-1abaf843 [skip ci] by @github-actions[bot] in #3840
- chore(dev-eks): deploy dev-1abaf843 [skip ci] by @github-actions[bot] in #3841
- feat(worktree): clickable port links + auto-aligned list table by @sutharjay1 in #3842
- Remove project tab bar and consolidate session header actions by @sutharjay1 in #3845
- fix(staging): align server auth env with runtime by @markokraemer in #3846
- fix(web): prevent answered questions from permanently locking chat input by @sutharjay1 in #3837
- fix(web): retry transient "opencode not ready" on first prompt send by @sutharjay1 in #3851
- Make Kortix runtime marketplace-native by @markokraemer in #3850
- chore(dev-eks): deploy gateway dev-fe50323e [skip ci] by @github-actions[bot] in #3854
- chore(dev-eks): deploy dev-fe50323e [skip ci] by @github-actions[bot] in #3855
- chore(dev-eks): deploy dev-8398a7d6 [skip ci] by @github-actions[bot] in #3856
Full Changelog: v0.9.77...v0.9.78