Skip to content

v0.13.7 — Faster sessions, Sign in with Kortix, and organization branding

Choose a tag to compare

@github-actions github-actions released this 29 Aug 17:16
ad78bfd

Highlights

  • Add Sign in with Kortix OAuth 2.1 flows, headless authentication, and app viewer tokens.
  • Add enterprise organization branding for logos, icons, favicons, and product names.
  • Improve session startup, auto-resume, streaming, queue state, transcript mirrors, terminal cards, and stopped-session recovery.
  • Restore GitHub repository sources on workspace creation and correct People with access visibility.
  • Add GLM 5.3 Flash and remove retired AsterLab and GLM 5.2 routes.
  • Improve secrets, connectors, Slack routing, sandbox lifecycle, preview durability, and provider failover.
  • Allow registered OAuth loopback redirects through the WAF while preserving API redirect validation.

Release validation

  • Staging SHA: 309e0afe1ce19a5674d137e749d8a6511576f2f5
  • Build Staging Artifacts: 33258635866
  • Deploy Staging: 33258801944
  • Full release QA: 33259390663

What's Changed

  • fix(compliance): retire ALB TargetResponseTime alarms; reconciler deletes stale + legacy duplicates by @markokraemer in #6919
  • fix(api,sdk): readiness clocks die with their attempt; a stopped queue re-delivers exactly once by @markokraemer in #6920
  • fix(compliance): grant DescribeTargetGroups to the ALB alarm reconciler; alarm on reconciler errors by @markokraemer in #6921
  • fix(web): the command palette can switch workspaces by @sutharjay1 in #6922
  • feat: compile OpenCode boot artifacts by @Ino-Bagaric in #6871
  • ci(release-gate): pin pnpm/action-setup@v4 in the browser shard (v6 on Blacksmith runs pnpm on bundled Node 18.5.0) by @markokraemer in #6925
  • test(ke2e): re-quarantine SESS-23 — stop→wake still 503s on the first post-wake read (gate run 32992496089) by @markokraemer in #6927
  • test(ke2e): quarantine CONN-26 — real-agent Composio flow never passed a deployed gate (run 32992496089) by @markokraemer in #6929
  • docs(learnings): a release-gate flow is added or un-quarantined only with its green deployed run by @markokraemer in #6931
  • fix(sandbox,triggers): make provider failover reachable + jitter fleet crons by @kubet in #6932
  • fix(tests): keep the Vercel bypass storage state (_vercel_jwt) out of uploaded CI artifacts by @markokraemer in #6933
  • docs(learnings): a never-fired guard is untested; an artifact upload path is a publish path by @markokraemer in #6935
  • test(e2e): quarantine the Composio Gmail Connect-Link browser journey (unauthorized runtime skip fails the gate) by @markokraemer in #6936
  • fix(web): Apps gallery is a 4:5 container-query grid, no size control by @sutharjay1 in #6939
  • fix(release): pin npm@^11.5.1 in publish-npm-package.sh (npm@12 breaks prod npm publishes on node 22.22.0) by @markokraemer in #6940
  • chore(release): VERSION → 0.13.7 [skip ci] by @markokraemer in #6941
  • chore(release): staging VERSION → 0.13.7 [skip ci] by @markokraemer in #6942
  • docs(learnings): npm-publish failure silently strips the release record from a shipped prod deploy by @markokraemer in #6943
  • feat(auth): Sign in with Kortix + headless /v1/auth — the SDK owns third-party auth end to end by @markokraemer in #6945
  • spike(worker): harness/environment split — plan + working Alpine worker by @Ino-Bagaric in #6924
  • feat(api,worker): compile a pi worker runtime artifact per push, behind a pi_worker flag by @Ino-Bagaric in #6944
  • chore(secrets): local .env gets its own KORTIX_GITHUB_APP_STATE_SECRET by @markokraemer in #6948
  • perf(session-open): kill the prefetch storm, serial queries, audit flood, and boot chorus by @markokraemer in #6946
  • fix(web): OAuth consent page — one shared load/approve per request id (spinner forever on dev) by @markokraemer in #6949
  • feat(accounts): organization branding — own logo, icon, favicon (light + dark) and product name as the Enterprise branding entitlement by @markokraemer in #6947
  • fix(api): compress middleware fails open without CompressionStream — dev returned 500 for every response ≥ 1 KiB (Bun 1.2 image) by @markokraemer in #6951
  • feat(web): docs surface rework, tool-row disclosure, mono badge system by @sutharjay1 in #6952
  • fix(api): compress middleware 500s on Bun 1.2 image — CompressionStream undefined, fall back to node:zlib by @markokraemer in #6950
  • feat: Kortix Runtime API — one sequenced session stream + runtime projection, opencode-shaped polls DELETED by @markokraemer in #6953
  • fix(web): drop "In progress" from SOC 2 Type I trust badge by @agent-kortix in #6954
  • fix(web): mark SOC 2 Type I as certified on /security by @agent-kortix in #6955
  • fix(sdk,api): session stream dies cross-origin — drop non-safelisted Cache-Control request header by @markokraemer in #6959
  • feat(llm-catalog): add GLM 5.3 Flash (z-ai/glm-5.3-flash via OpenRouter) to Kortix managed by @markokraemer in #6958
  • fix(sdk): healBedrockModelKey is inert on the gateway — picker was pinning every pick to Claude Opus 5 by @markokraemer in #6960
  • feat(desktop): install prod, staging and dev side by side by @sutharjay1 in #6956
  • fix(worker): compiled artifact double-started and died with EADDRINUSE by @Ino-Bagaric in #6962
  • fix(web): webhook wizard signing secrets rejected by trigger validation by @ArtemShatokhin in #6961
  • Fix working status order after a fresh prompt by @Ino-Bagaric in #6965
  • feat(apps): a Kortix-hosted App is already signed in — gate-minted viewer identity + token by @markokraemer in #6963
  • Revert "feat(desktop): install prod, staging and dev side by side (#6956)" by @sutharjay1 in #6967
  • perf(boot): zero proxied git requests at session boot + OpenCode spawns before checkout by @markokraemer in #6964
  • test(daemon): per-test ephemeral ports in egress-shim suites by @Ino-Bagaric in #6969
  • docs(learnings): a new import edge into a widely-mocked graph breaks hand-written mocks suite-wide by @markokraemer in #6968
  • Fix working status order and elapsed timer by @Ino-Bagaric in #6970
  • feat(api,worker): sessions boot the pi worker (P1.5 + P1.6) by @Ino-Bagaric in #6966
  • fix(web): the markdown source toggle, and the oversized SVG thumbnail by @Ino-Bagaric in #6971
  • fix(api): fresh-session git fast path gets its own switch (KORTIX_FAST_GIT_BOOT_ENABLED) by @markokraemer in #6973
  • fix(worker): gateway-mode model resolution killed the first dev pi session by @Ino-Bagaric in #6975
  • Fix idle messages appearing queued by @Ino-Bagaric in #6974
  • Keep snapshot builder test doubles complete by @Ino-Bagaric in #6977
  • feat(kortixd): daemon single-binary management CLI + safe self-update/rollback by @markokraemer in #6972
  • perf(api): warm the fresh-session git hint on push and at provision by @markokraemer in #6976
  • perf(api): slim the pi worker boot control plane by @Ino-Bagaric in #6980
  • docs(learnings): an experiment flag deploy-dev pins to false cannot be a kill switch by @markokraemer in #6979
  • feat(api): pi worker pool — parked boxes claimed at session create (P1.8) by @Ino-Bagaric in #6981
  • fix(web): a menu click never reloads the page — 83 nav controls become anchors by @markokraemer in #6978
  • fix(api): pi worker env — only an explicit session model overrides the bake by @Ino-Bagaric in #6983
  • perf(web): stop blurring text the user is trying to read by @sutharjay1 in #6984
  • fix(api): pi pool — never trust the Daytona list's labels for reap or claim by @Ino-Bagaric in #6985
  • feat(api): session environments — lazy compute for pi worker sessions (P1.7 E1) by @Ino-Bagaric in #6986
  • feat: pi worker tools act on the lazy environment (P1.7 E2) by @Ino-Bagaric in #6989
  • fix(api): session environments idle-stop at 60min, not the 12h backstop by @Ino-Bagaric in #6990
  • feat(kortixd): context-aware update/rollback — stage via supervisor in-sandbox (Option A) by @markokraemer in #6988
  • feat(sdk,api,daemon): own the session read+realtime surface — /kortix reads, one /events SSE, zero polls, /snapshot by @markokraemer in #6987
  • fix(web): remove leftover diff3 base block in session-chat — frontend build was red by @Ino-Bagaric in #6991
  • feat(worker): pi sessions render in the product — the Kortix Runtime API on the worker by @Ino-Bagaric in #6993
  • fix(worker): skip pi's user-role message frames — the worker publishes the user turn itself by @Ino-Bagaric in #6994
  • fix(worker): answer the raw /session pin probe; only assistant roles translate by @Ino-Bagaric in #6995
  • fix(api): defer the ensurePiWorkerImage import so builder mocks cannot SyntaxError by @markokraemer in #6982
  • cleanup(sdk,web): fix stale open-bundle/stream refs after own-the-surface rename by @markokraemer in #6992
  • perf(daemon): decompose opencode-ready into named marks; prefetch the initial-turn claim by @markokraemer in #6996
  • fix(web): every URL the tab system writes to history is now a real route by @markokraemer in #6997
  • docs(learnings): deployed configuration has one truth, and it is not the file in git by @markokraemer in #7001
  • fix(daemon): never build an OpenCode Instance before the workspace is complete by @markokraemer in #7002
  • fix(sdk): stopped-box 'not-running' 404 is wakeable, not 'Couldn't load this conversation' by @markokraemer in #6999
  • docs(learnings): down box has two proxy responses — classify both wakeable by @markokraemer in #7003
  • chore(secrets): 1:1 parity between apps/api/.env. and AWS Secrets Manager by @markokraemer in #7000
  • fix(daemon): open the Instance gate where the workspace is complete, not right after spawn by @markokraemer in #7004
  • fix(api): /events attaches to a reachable box, not only an 'active' row by @markokraemer in #7007
  • fix(preview): every Server Action 500s — pin the public host for Next's CSRF guard by @Ino-Bagaric in #7006
  • fix(web): stop shipping every frontend log to the raw sandbox /log route by @markokraemer in #7008
  • chore(docs): delete agent work artifacts; SDK rules become the sdk skill by @markokraemer in #7010
  • fix(sdk): retire the transcript-poll fallback — /events is the single feed by @markokraemer in #7011
  • fix(preview): route the API's non-/v1 paths through the preview edge by @Ino-Bagaric in #7012
  • docs(learnings): a shared-origin environment must enumerate the API's non-/v1 paths by @Ino-Bagaric in #7013
  • docs(learnings): compose does not restart a container for new bytes in a mounted file by @Ino-Bagaric in #7015
  • feat(preview): the preview label keeps an environment online until it is removed by @Ino-Bagaric in #7017
  • refactor(snapshots): delete the per-project warm image system (−5,959 lines) by @markokraemer in #7014
  • fix(preview): keep the --target-full gate on the label deploy by @Ino-Bagaric in #7018
  • fix: seven prod faults behind one report — secrets, Slack routing, zombie boxes, terminal 1006, connector honesty by @kubet in #7016
  • feat(preview): re-point a stable hostname's worker on every deploy by @Ino-Bagaric in #7019
  • fix(preview): ship the pi-router worker to main so the deploy can re-point it by @Ino-Bagaric in #7021
  • revert: restore the OpenCode client, remove the Kortix Runtime client by @markokraemer in #7022
  • fix(secrets): the server stops guessing secret delivery from the name by @kubet in #7020
  • chore(secrets): delete the Kortix-managed Anthropic proxy and the unused SES keys by @markokraemer in #7009
  • fix: nested- markdown hydration error + daemon staleness false-positive by @markokraemer in #7025
  • fix(sandbox-agent): re-wire turn auto-resume — transient provider errors were surfacing raw by @markokraemer in #7026
  • Remove AsterLab and managed GLM 5.2 by @markokraemer in #7029
  • Fix staging release gates by @markokraemer in #7028
  • fix(web,sdk): slider Reset, @-menu Enter, Interrupted placement, tab indicator by @Ino-Bagaric in #7030
  • Promote main to staging — 2026-08-28 by @markokraemer in #7027
  • Slack channel takeover + secret delivery: targeted release candidate by @kubet in #7032
  • feat(preview): a preview environment lives until its BRANCH is deleted by @Ino-Bagaric in #7023
  • Promote main to staging — 2026-08-28 follow-up by @markokraemer in #7033
  • fix(session): thirteen session-runtime defects — stop button, keepalive evidence, history pages, terminal cards, boot flag, agent roster, queue clock, dead open-bundle, redirect loop, atomic paint by @sutharjay1 in #6957
  • fix(waf): allow OAuth loopback redirects by @markokraemer in #7034
  • release: promote main to staging by @markokraemer in #7035
  • fix(preview): do not point a stable hostname at a stack that is down by @Ino-Bagaric in #7036
  • fix(web): restore GitHub repo sources on /new, fix People-with-access gate by @Ino-Bagaric in #7037
  • fix(tests): follow stopped-session transcript mirror contract by @markokraemer in #7038
  • release: refresh v0.13.7 candidate from main by @markokraemer in #7039
  • Release v0.13.7 — Faster sessions, Sign in with Kortix, and organization branding by @github-actions[bot] in #7041

New Contributors

Full Changelog: v0.13.6...v0.13.7