[
  {
    "sha": "042e0c5",
    "subject": "More tweaks for smithd"
  },
  {
    "sha": "33df9d8",
    "subject": "We need sshfs to be able to loand filesystem to the agent"
  },
  {
    "sha": "fca3391",
    "subject": "release: generate metadata for aifoundry-org assets"
  },
  {
    "sha": "7a7e26b",
    "subject": "release: publish artifacts to aifoundry-org/shelley"
  },
  {
    "sha": "c6e63d2",
    "subject": "ci: retry transient Go test failure"
  },
  {
    "sha": "53888e3",
    "subject": "cmd/shelley: update subscription tests for config argument"
  },
  {
    "sha": "37c4122",
    "subject": "make: fix DEB_ARCH shell case breaking $(shell ...) parsing"
  },
  {
    "sha": "f572ddd",
    "subject": "release: attach exported Docker container to GitHub releases"
  },
  {
    "sha": "f9c9b82",
    "subject": "docker: grant the shelley user passwordless sudo"
  },
  {
    "sha": "6075435",
    "subject": "packaging: declare ca-certificates as a .deb dependency"
  },
  {
    "sha": "ac32cbb",
    "subject": "docker: run as the deb's 'shelley' user, drop exedev/UID-GID wiring"
  },
  {
    "sha": "482fb19",
    "subject": "docs: document the docker/deb build targets in the README"
  },
  {
    "sha": "8d50146",
    "subject": "make: add deb + docker targets wiring goreleaser into the image build"
  },
  {
    "sha": "86be5de",
    "subject": "docker: add Ubuntu 24.04 Dockerfile running shelley as exedev"
  },
  {
    "sha": "60659a7",
    "subject": "build: add release build mode that omits ui/src staleness check"
  },
  {
    "sha": "447adee",
    "subject": "Ship default config at /etc/shelley.json instead of /exe.dev/shelley.json"
  },
  {
    "sha": "d001f66",
    "subject": "Add .deb packaging with systemd socket activation"
  },
  {
    "sha": "4485e06",
    "subject": "Fixing a typo"
  },
  {
    "sha": "0ea3935",
    "subject": "Releasing to Ainekko's repo"
  },
  {
    "sha": "7c97bba",
    "subject": "match claude oauth state length"
  },
  {
    "sha": "442df03",
    "subject": "fix anthropic subscription oauth URL"
  },
  {
    "sha": "c99238a",
    "subject": "Fixing UI deployment"
  },
  {
    "sha": "1ae0233",
    "subject": "ui: add subscription account login menu"
  },
  {
    "sha": "4b8d4e4",
    "subject": "docs: document OpenAI Codex device-code login flow"
  },
  {
    "sha": "ae321c5",
    "subject": "cmd/shelley: use Codex device-code flow for 'login openai'"
  },
  {
    "sha": "a5e4ddd",
    "subject": "llm/oauth: OpenAI Codex device-code login flow"
  },
  {
    "sha": "ec87fcf",
    "subject": "docs: document OpenAI/Codex subscription auth; mark phase 2 complete"
  },
  {
    "sha": "c041994",
    "subject": "cmd/shelley: support 'login openai' for ChatGPT subscription"
  },
  {
    "sha": "ec88f8a",
    "subject": "modelsources: Subscription serves OpenAI Codex models via OAuth"
  },
  {
    "sha": "af4d92f",
    "subject": "llm/oai: OAuth/Codex authorizer with account-id and Codex identity"
  },
  {
    "sha": "39db440",
    "subject": "llm/oai: Authorizer seam on ResponsesService; replace APIKey with APIKeyAuth"
  },
  {
    "sha": "7dc106d",
    "subject": "llm/oauth: OpenAI login flow + TokenSource AccountID accessor"
  },
  {
    "sha": "7880fef",
    "subject": "llm/oauth: OpenAI/Codex authorize URL, token exchange/refresh, account-id"
  },
  {
    "sha": "6dcd73a",
    "subject": "docs: detail phase 2 (OpenAI/Codex) commit plan"
  },
  {
    "sha": "5994b7b",
    "subject": "cmd/shelley: prefer Claude subscription source when logged in"
  },
  {
    "sha": "4352952",
    "subject": "cmd/shelley: login/logout/login-status subscription commands"
  },
  {
    "sha": "b88667e",
    "subject": "modelsources: Subscription source for OAuth-backed Anthropic models"
  },
  {
    "sha": "1016595",
    "subject": "llm/ant: OAuth authorizer with Claude Code identity injection"
  },
  {
    "sha": "de4ad2e",
    "subject": "llm/ant: introduce Authorizer seam; replace APIKey with APIKeyAuth"
  },
  {
    "sha": "3b6a443",
    "subject": "llm/oauth: refreshing TokenSource with injectable clock"
  },
  {
    "sha": "60b8c98",
    "subject": "llm/oauth: on-disk credential store + token expiry"
  },
  {
    "sha": "516da2b",
    "subject": "llm/oauth: Anthropic authorize URL + token exchange/refresh"
  },
  {
    "sha": "cf3ce90",
    "subject": "llm/oauth: PKCE S256 primitives"
  },
  {
    "sha": "5a56886",
    "subject": "docs: plan for subscription (OAuth) provider auth"
  },
  {
    "sha": "cd1ddc3",
    "subject": "shelley/ui: add image thumbnails to conversation TOC"
  },
  {
    "sha": "914fdac",
    "subject": "shelley: retry plain-text Responses gateway errors"
  },
  {
    "sha": "2af7407",
    "subject": "shelley/ui: click an image to comment on regions of it"
  },
  {
    "sha": "32682e1",
    "subject": "shelley/ui: give every overflow-menu action a keyboard shortcut"
  },
  {
    "sha": "9342afa",
    "subject": "shelley: hide ChatGPT citation markers from clients"
  },
  {
    "sha": "4f727c2",
    "subject": "shelley: fix Advanced Settings popover clipping off-screen"
  },
  {
    "sha": "55d7169",
    "subject": "shelley: replace the context usage bar with a status readout"
  },
  {
    "sha": "65100bb",
    "subject": "shelley: serve markdown-linked images from outside the workspace"
  },
  {
    "sha": "85d191a",
    "subject": "shelley: use first ready model as default"
  },
  {
    "sha": "13e2642",
    "subject": "shelley/ui: stop a sibling tab's IndexedDB write from hanging other tabs"
  },
  {
    "sha": "06f07a7",
    "subject": "shelley: demote sonnet-5 to tier 2"
  },
  {
    "sha": "6fa243e",
    "subject": "shelley/ui: stop multi-tab Safari hanging forever on \"Loading conversation\u2026\""
  },
  {
    "sha": "9a1de79",
    "subject": "shelley: point the Gemini client test at a served model"
  },
  {
    "sha": "1223006",
    "subject": "shelley/ui: refresh the custom-model autocomplete suggestions"
  },
  {
    "sha": "86813fc",
    "subject": "shelley: drop the Gemini 3 Pro thinking clamp"
  },
  {
    "sha": "c4cdb03",
    "subject": "shelley: register Gemini 3.1 Pro and Gemini 3.6 Flash"
  },
  {
    "sha": "7d513cd",
    "subject": "shelley: unregister gemini-3-pro-preview"
  },
  {
    "sha": "52591e6",
    "subject": "shelley: drop gpt-5.1-codex and gpt-5.2-codex"
  },
  {
    "sha": "1604589",
    "subject": "shelley: drop glm-5p1"
  },
  {
    "sha": "a087bc0",
    "subject": "shelley: fix serve-test, which passed the removed -model flag"
  },
  {
    "sha": "67d74cd",
    "subject": "shelley/subpub: deliver messages published out of order"
  },
  {
    "sha": "c5cc3c5",
    "subject": "shelley: read the IndexedDB message cache; record slug cost by appending"
  },
  {
    "sha": "b8bc5b1",
    "subject": "shelley: explain the no-models state instead of inventing a model id"
  },
  {
    "sha": "ef0b5a4",
    "subject": "shelley/ui: move commit actions above the message body in the git graph"
  },
  {
    "sha": "c320b41",
    "subject": "shelley: honor shelley.json default_model"
  },
  {
    "sha": "21cdd4b",
    "subject": "shelley/llm/ant: default system block type to \"text\""
  },
  {
    "sha": "45d72b0",
    "subject": "shelley/modelsources: try default LLM integration when reflection fails"
  },
  {
    "sha": "356059b",
    "subject": "shelley: keep autoscroll pinned while pierre diffs hydrate"
  },
  {
    "sha": "b7d5d86",
    "subject": "shelley: accept configured exe environment"
  },
  {
    "sha": "4e8ecee",
    "subject": "shelley/ui: truncate collapsed thinking preview at line edge"
  },
  {
    "sha": "9972b51",
    "subject": "shelley: inject subagent completions into the parent's running turn"
  },
  {
    "sha": "2c95b02",
    "subject": "shelley: show full commit stack above merge-base in diff viewer"
  },
  {
    "sha": "e3e52ca",
    "subject": "shelley: record indirect LLM usage on messages and surface \"other\" costs"
  },
  {
    "sha": "e473137",
    "subject": "shelley/modelsdev: refresh models.dev snapshot for Kimi K3"
  },
  {
    "sha": "a282730",
    "subject": "shelley: rename kimi-3-fireworks to kimi-k3-fireworks, add tier shadowing"
  },
  {
    "sha": "7ec8200",
    "subject": "shelley: make the e2e suite fast enough to shard, and fix three flakes"
  },
  {
    "sha": "a999fa2",
    "subject": "shelley: add edit/comment mode toggle to the file editor modal"
  },
  {
    "sha": "5fa7af6",
    "subject": "shelley: add kimi 3 fireworks model to built-in catalog"
  },
  {
    "sha": "2d373c9",
    "subject": "shelley: fall back to preferred cheap models for slug generation"
  },
  {
    "sha": "e3eb8cd",
    "subject": "shelley/templates/go: fix 'make clean' and srv.service binary path"
  },
  {
    "sha": "a46d459",
    "subject": "shelley: drop Fireworks qwen3p7-plus (no longer serverless)"
  },
  {
    "sha": "889f04e",
    "subject": "shelley/ui: widen version modal so changelog subjects stop wrapping"
  },
  {
    "sha": "6d5dfa5",
    "subject": "shelley/modelsources: prefer OpenAI wire APIs over anthropic_messages"
  },
  {
    "sha": "954174a",
    "subject": "shelley ui: simplify overflow menu, add Edit File item"
  },
  {
    "sha": "f318b96",
    "subject": "shelley/ui: deflake model-picker wrap test by pinning the cwd"
  },
  {
    "sha": "8ceaef2",
    "subject": "shelley/ui: persist drawer collapse preference across reloads"
  },
  {
    "sha": "4a3f3ce",
    "subject": "shelley/ui: inject tool progress instead of prop-drilling it"
  },
  {
    "sha": "f4f44fc",
    "subject": "shelley/ui: add performance-hud recomputation counters and overlay"
  },
  {
    "sha": "7879180",
    "subject": "shelley: live subagent activity in tool widgets and drawer badge"
  },
  {
    "sha": "bb5c2ab",
    "subject": "shelley: cut test suite wall time ~3x (244s -> 88s)"
  },
  {
    "sha": "314d25c",
    "subject": "shelley: cache-bust commits.json fetch; distinguish changelog errors in UI"
  },
  {
    "sha": "f07189f",
    "subject": "shelley/llm/ant: detect adaptive thinking by version threshold, not allowlist"
  },
  {
    "sha": "d7aa9e4",
    "subject": "shelley: add Cmd+Shift+P fuzzy file finder to edit arbitrary files"
  },
  {
    "sha": "c8fb08a",
    "subject": "shelley/ui: fix transparent queue menu (undefined --bg-primary var)"
  },
  {
    "sha": "c6cd506",
    "subject": "shelley/ui: don't misread container-growth scroll clamps as user scroll-ups"
  },
  {
    "sha": "6e446d2",
    "subject": "shelley: shrink empty side of diff view for new/deleted files"
  },
  {
    "sha": "de3f2de",
    "subject": "shelley: correct claude-opus-5 knowledge cutoff to May 2026"
  },
  {
    "sha": "1914f4b",
    "subject": "shelley: add claude-opus-5 as selectable model"
  },
  {
    "sha": "754c638",
    "subject": "server: add /debug/loremipsum and /debug/histograms perf tooling"
  },
  {
    "sha": "ddd6739",
    "subject": "shelley: unnest error handling"
  },
  {
    "sha": "4bff3c9",
    "subject": "shelley/ui: wrap mobile setup controls as needed"
  },
  {
    "sha": "63c3622",
    "subject": "shelley/ui: tildify new-conversation cwd"
  },
  {
    "sha": "290aef8",
    "subject": "shelley/ui: align composer controls with textarea"
  },
  {
    "sha": "518b8e6",
    "subject": "shelley/ui: align app bars and collapse sparse drawer"
  },
  {
    "sha": "3f0057d",
    "subject": "shelley/ui: fix chat not following / stranding scroll button on reload (#245)"
  },
  {
    "sha": "3ab1160",
    "subject": "shelley/ui: redesign model selector as one unified, quieter control"
  },
  {
    "sha": "4ca1fee",
    "subject": "shelley: compress HTML shell and model catalog"
  },
  {
    "sha": "3627827",
    "subject": "shelley: prefer zstd for compressed API responses"
  },
  {
    "sha": "baa8cb0",
    "subject": "shelley/ui: fold conversation search into a header magnifier toggle"
  },
  {
    "sha": "401a99c",
    "subject": "shelley/ui: fix broken auto-scroll & scroll-to-bottom button, advertise shortcut"
  },
  {
    "sha": "7221031",
    "subject": "shelley: cancel subagent tree when a conversation is cancelled"
  },
  {
    "sha": "b646d20",
    "subject": "shelley/ui: restore message action bar offset above text"
  },
  {
    "sha": "b4a11e2",
    "subject": "shelley: llm_one_shot prompt_files with image attachments, shown in UI"
  },
  {
    "sha": "6b93c5a",
    "subject": "shelley: add search filter to model picker dropdown"
  },
  {
    "sha": "19555fb",
    "subject": "shelley: add /clear slash command to reset context"
  },
  {
    "sha": "c785008",
    "subject": "shelley/ui: fix bold inline code on macOS (SF Mono font stack)"
  },
  {
    "sha": "600bd44",
    "subject": "shelley/ui: clean up modal headers \u2014 drop divider line, tighten title spacing"
  },
  {
    "sha": "89e3412",
    "subject": "shelley: sync Fireworks Kimi/Qwen models and drop dead ones"
  },
  {
    "sha": "8fa5c7c",
    "subject": "shelley/ui: hydrate patch diffs lazily as they near the viewport"
  },
  {
    "sha": "29edb92",
    "subject": "shelley: use packageManager-pinned pnpm in CI"
  },
  {
    "sha": "6c07148",
    "subject": "shelley/ui: replace TOC VirtualScroller with a plain scrollable list"
  },
  {
    "sha": "93c4951",
    "subject": "shelley/ui: chunk message rows for content-visibility containment"
  },
  {
    "sha": "2fce78b",
    "subject": "shelley/ui: stop per-keystroke stylesheet rewrites that froze Safari"
  },
  {
    "sha": "48b5187",
    "subject": "shelley/ui: release bottom pin on large scroll jumps"
  },
  {
    "sha": "8f022c9",
    "subject": "shelley/ui: avoid synchronous layout while typing"
  },
  {
    "sha": "df4ce14",
    "subject": "shelley/ui: release bottom pin on user scroll"
  },
  {
    "sha": "3d8314d",
    "subject": "shelley/ui: use WebKit-safe bottom scroll offset"
  },
  {
    "sha": "62e57a4",
    "subject": "shelley/ui: keep scroll-to-bottom pinned during lazy layout"
  },
  {
    "sha": "62b893d",
    "subject": "shelley/ui: avoid Safari layout work on interaction"
  },
  {
    "sha": "b3402eb",
    "subject": "shelley/ui: avoid full conversation layout on scroll"
  },
  {
    "sha": "41ac5ad",
    "subject": "shelley: only offer server-side web search to models that support it"
  },
  {
    "sha": "c5e59f9",
    "subject": "shelley/ui: collapse reasoning traces by default"
  },
  {
    "sha": "b7648f3",
    "subject": "shelley: tuck unknown integration models behind more models"
  },
  {
    "sha": "47daf43",
    "subject": "shelley: preserve stable IDs for known integration models"
  },
  {
    "sha": "0efe27f",
    "subject": "shelley: use integration catalogs as authoritative model source"
  },
  {
    "sha": "a2d8377",
    "subject": "shelley: customizing-shelley skill + diverged-build awareness"
  },
  {
    "sha": "819f21a",
    "subject": "models: add tier field and demote overshadowed models"
  },
  {
    "sha": "104dced",
    "subject": "shelley/ui: auto-expand browser screenshots in pill mode"
  },
  {
    "sha": "ea0f8fd",
    "subject": "shelley/ui: migrate .form-input controls to PrimeVue, delete shared CSS"
  },
  {
    "sha": "aade3b4",
    "subject": "shelley/ui: treat Safari's IME-confirm Enter (keyCode 229) as composing"
  },
  {
    "sha": "be3baec",
    "subject": "shelley: deflake TestContinueAfterRefusalSwitchesModelAndResumes"
  },
  {
    "sha": "fd8cefa",
    "subject": "fix: let diff comment dialog grow to fit the quoted line"
  },
  {
    "sha": "3583103",
    "subject": "shelley/ui: show +/- line counts in diff viewer file tree"
  },
  {
    "sha": "bd2776f",
    "subject": "shelley: fix /model Enter-completion, add \"Compact and send\", and improve the reasoning-effort picker"
  },
  {
    "sha": "860c2e7",
    "subject": "shelley: remove orchestrator mode"
  },
  {
    "sha": "a48d094",
    "subject": "shelley: handle model refusals with a switch-to-Opus affordance and a visible reason"
  },
  {
    "sha": "a63c751",
    "subject": "shelley/ui: migrate shared .btn* buttons to PrimeVue <Button>"
  },
  {
    "sha": "1694c0d",
    "subject": "shelley: update LazyCue test cache"
  },
  {
    "sha": "6bc219a",
    "subject": "cmd/shelley: remove dead global -model flag"
  },
  {
    "sha": "60a57d6",
    "subject": "shelley: route reflection through the current environment"
  },
  {
    "sha": "26c8ece",
    "subject": "shelley: show model thinking across all providers"
  },
  {
    "sha": "54de8f7",
    "subject": "shelley: label user messages with author email in multi-user convos"
  },
  {
    "sha": "ebe3bfb",
    "subject": "shelley: raise patch-stream event wait deadline for CI load"
  },
  {
    "sha": "391fd30",
    "subject": "shelley: fireworks is discontinuing GLM 5.1"
  },
  {
    "sha": "f7d15c9",
    "subject": "shelley/ui: convert hover-hint title= attributes to PrimeVue v-tooltip"
  },
  {
    "sha": "fa9c1d5",
    "subject": "shelley/ui: migrate ConversationTOC + ContextUsageBar popups to PrimeVue Popover"
  },
  {
    "sha": "725da4a",
    "subject": "shelley/ui: fix ANSI cursor codes leaking stray letters; switch to ansi_up"
  },
  {
    "sha": "b0a7308",
    "subject": "shelley: token-cost graph behind token-cost-graph feature flag"
  },
  {
    "sha": "cf53eb5",
    "subject": "server: never fire real exe.dev push notifications from test binaries"
  },
  {
    "sha": "14a23c8",
    "subject": "server: persist subagent-done synthetic pair atomically"
  },
  {
    "sha": "44004f9",
    "subject": "shelley: fix TestNewPageDraftOpensWithoutSpinner isolation (open its own draft)"
  },
  {
    "sha": "250a373",
    "subject": "shelley/lazycue: poll point-in-time assert_* steps for robustness under load"
  },
  {
    "sha": "04eb4b5",
    "subject": "shelley: persist exe.dev user email on user messages"
  },
  {
    "sha": "822d0e7",
    "subject": "shelley: sync draft model/cwd from the composer via one PUT /draft endpoint"
  },
  {
    "sha": "68cdc4e",
    "subject": "shelley: preserve OpenAI Responses reasoning state"
  },
  {
    "sha": "aa7b8dd",
    "subject": "shelley/ui: consolidate stray hand-rolled modals onto PrimeVue-backed Modal"
  },
  {
    "sha": "af0eb9e",
    "subject": "shelley: decouple version from embedded UI"
  },
  {
    "sha": "a3086da",
    "subject": "shelley: idle/stall timeout for LLM requests + surface request/trace ids"
  },
  {
    "sha": "05dd669",
    "subject": "shelley: allow disabling reasoning for chat custom models"
  },
  {
    "sha": "e049c33",
    "subject": "shelley: note env-var model credentials are deprecated and frozen"
  },
  {
    "sha": "afaab92",
    "subject": "shelley: drop direct XAI_API_KEY env support (keep gateway path)"
  },
  {
    "sha": "47d0a6d",
    "subject": "compaction: retry with default model on refusal, roll back on failure"
  },
  {
    "sha": "850b2f9",
    "subject": "map 'minimal' thinking to 'low' for adaptive-thinking Claude models"
  },
  {
    "sha": "0d0b4bb",
    "subject": "fix fork at a message from an older generation producing an empty conversation"
  },
  {
    "sha": "8ffcf3e",
    "subject": "shelley: restore OpenAI output token caps"
  },
  {
    "sha": "c0f2dd7",
    "subject": "Fix Safari draft cursor-jump and reject corrupt image uploads"
  },
  {
    "sha": "a5a9f3e",
    "subject": "shelley: rework Manage Models UI \u2014 mobile fix, compact DataTable, stacked form"
  },
  {
    "sha": "494f865",
    "subject": "Add rename slash command"
  },
  {
    "sha": "73966c3",
    "subject": "shelley: add disable_notifications conversation option + -disable-notifications chat flag"
  },
  {
    "sha": "5312ccb",
    "subject": "shelley: serve grok-4.5 through the exe.dev gateway"
  },
  {
    "sha": "cfba581",
    "subject": "shelley: add Grok 4.5 (xAI) support"
  },
  {
    "sha": "2ff6c40",
    "subject": "shelley: expose effective reasoning level to chat hooks"
  },
  {
    "sha": "8b2b45a",
    "subject": "shelley: fix subagent completions lost when Cleanup evicts a mid-turn parent"
  },
  {
    "sha": "b00fea5",
    "subject": "shelley: add GPT-5.6 variants to model catalog"
  },
  {
    "sha": "2b7728b",
    "subject": "shelley/lazycue: bump deps"
  },
  {
    "sha": "569bb7d",
    "subject": "shelley: bump deps"
  },
  {
    "sha": "8491edb",
    "subject": "go.mod: upgrade to 1.26.5"
  },
  {
    "sha": "b9a8b07",
    "subject": "shelley/llm/ant: Sonnet 4.6 now supports 128k output tokens"
  },
  {
    "sha": "8b1ee5e",
    "subject": "shelley/loop: keep refusal artifacts out of live context history"
  },
  {
    "sha": "3ae8041",
    "subject": "shelley/loop: surface LLM refusals instead of silent empty turns"
  },
  {
    "sha": "106e410",
    "subject": "shelley: update LazyCue test cache"
  },
  {
    "sha": "fc8a6b1",
    "subject": "shelley: switch model and reasoning level mid-conversation via /model"
  },
  {
    "sha": "b2c8641",
    "subject": "shelley: migrate status-bar pickers + config fields to PrimeVue"
  },
  {
    "sha": "a0e6706",
    "subject": "subagent: add reasoning parameter, inherit parent's level by default"
  },
  {
    "sha": "2eb613c",
    "subject": "shelley/ui: fix monaco-vim double-adapter race in Vue composable"
  },
  {
    "sha": "4755a2b",
    "subject": "shelley: add Refresh Models action to model picker dropdown"
  },
  {
    "sha": "cedb6ee",
    "subject": "shelley: add self-wake recipe to bash/shell tool descriptions"
  },
  {
    "sha": "13a1b0e",
    "subject": "shelley: persist thinking_level on draft promote; always show reasoning badge"
  },
  {
    "sha": "5c5b9c0",
    "subject": "shelley/ui: don't spin forever when opening a draft conversation"
  },
  {
    "sha": "b76feba",
    "subject": "shelley/llm/ant: drop empty text blocks (defense in depth)"
  },
  {
    "sha": "85195a0",
    "subject": "shelley: accept bare string for keyword_search search_terms"
  },
  {
    "sha": "6fb3422",
    "subject": "shelley: restore claude-fable-5 to the model catalog"
  },
  {
    "sha": "c3c9230",
    "subject": "shelley: coalesce stale subagent-done notifications to fix stray duplicates"
  },
  {
    "sha": "b31c35e",
    "subject": "shelley: add /archive slash command to archive current conversation"
  },
  {
    "sha": "7fb7e42",
    "subject": "shelley: consolidate on compaction, keep /distill as compat alias"
  },
  {
    "sha": "95f691e",
    "subject": "queued: store queued user messages on the conversation, not as mutable rows"
  },
  {
    "sha": "75470ac",
    "subject": "retry: mirror Vue retry button to last-message gating"
  },
  {
    "sha": "086abec",
    "subject": "distill: emit terminal status as a second immutable message"
  },
  {
    "sha": "76263a1",
    "subject": "retry: stop mutating error messages; show Retry only when error is last"
  },
  {
    "sha": "fd761b5",
    "subject": "shelley: add seq number to streaming partial deltas"
  },
  {
    "sha": "ed4d344",
    "subject": "shelley: add claude-sonnet-5 as selectable model"
  },
  {
    "sha": "4f25090",
    "subject": "shelley: drop the React frontend, ship Vue only"
  },
  {
    "sha": "7fd2552",
    "subject": "shelley: guard that a new conversation's first message emits a field-path add"
  },
  {
    "sha": "d3af433",
    "subject": "shelley: render screenshots from text-only models via Display fallback"
  },
  {
    "sha": "322a305",
    "subject": "shelley: mention native email gateway in exe_dev system prompt"
  },
  {
    "sha": "b263053",
    "subject": "shelley/ui: stop stale REST backfill from clobbering live messages"
  },
  {
    "sha": "85163ee",
    "subject": "shelley: update LLM catalog package reference"
  },
  {
    "sha": "db3ad5b",
    "subject": "feat(shelley/ui): back the base Modal with PrimeVue Dialog"
  },
  {
    "sha": "df54583",
    "subject": "shelley: prettier-format draftCache.test.ts"
  },
  {
    "sha": "9bf45d7",
    "subject": "shelley: persist next-message drafts client-side per conversation"
  },
  {
    "sha": "0af24fd",
    "subject": "shelley: surface offline-composed drafts on reopen at root URL"
  },
  {
    "sha": "4b64a03",
    "subject": "shelley: mirror draft autosave to localStorage to prevent data loss"
  },
  {
    "sha": "2ad8d4a",
    "subject": "shelley: update LazyCue test cache"
  },
  {
    "sha": "414b8ae",
    "subject": "shelley/ui: lock conversation-list patches to a coupled {list, hash} state"
  },
  {
    "sha": "7771017",
    "subject": "feat(shelley/ui): rebuild top-right overflow menu on PrimeVue components"
  },
  {
    "sha": "a9180d1",
    "subject": "shelley: update LazyCue test cache"
  },
  {
    "sha": "9618b1c",
    "subject": "shelley: improve diff viewer comment mode UX"
  },
  {
    "sha": "8eb9a83",
    "subject": "[UI] Add a slash command popup helper (#232)"
  },
  {
    "sha": "d1e165e",
    "subject": "shelley: default the web UI to Vue"
  },
  {
    "sha": "1c1153d",
    "subject": "shelley: gate browser screenshot images on model image support"
  },
  {
    "sha": "ece0006",
    "subject": "lazycue: poll eval assertions so slow async UI state doesn't spuriously flake"
  },
  {
    "sha": "b3f020c",
    "subject": "ui: fix draftSync timing hole when conversation row arrives after first render"
  },
  {
    "sha": "6e022a4",
    "subject": "ui: stop stale draft-autosave echo from deleting in-progress text"
  },
  {
    "sha": "8753bc8",
    "subject": "models: detect image support for custom models by endpoint URL; show resolution in UI"
  },
  {
    "sha": "3a07bac",
    "subject": "shelley/ui: seed status-bar working state from the list's `working` flag"
  },
  {
    "sha": "1f7e1b6",
    "subject": "shelley/ui: coalesce web-search citation blocks into flowing text"
  },
  {
    "sha": "aeda3f3",
    "subject": "fix(shelley/ui): Vue parity \u2014 clear attachments on switch, listener leak, terminal tab"
  },
  {
    "sha": "3d5ef1f",
    "subject": "fix(shelley/ui): off-thread diff highlighting + no empty-state flash in Vue"
  },
  {
    "sha": "bc4b439",
    "subject": "shelley: record fork provenance to de-duplicate usage data"
  },
  {
    "sha": "b507f89",
    "subject": "shelley: record LLM API URL and model name on messages"
  },
  {
    "sha": "c68ffa0",
    "subject": "fix(shelley): per-world lazycue diff fixture to avoid parallel-step race"
  },
  {
    "sha": "3424a52",
    "subject": "fix(shelley/ui): scope @pierre/diffs SSR output in a shadow root (Vue)"
  },
  {
    "sha": "2287c12",
    "subject": "fix(shelley/ui): keep markdown inline code inline in the Vue world"
  },
  {
    "sha": "883f44c",
    "subject": "feat(shelley/ui): rebuild web UI in Vue 3 + PrimeVue, runtime-selectable vs React"
  },
  {
    "sha": "cdf6d4f",
    "subject": ".clabot: add Gohlub"
  },
  {
    "sha": "00a0cf2",
    "subject": "shelley/server: de-flake TestExecTerminal_ControlCharacters"
  },
  {
    "sha": "93c705e",
    "subject": "shelley/ui: keep composer focused when a draft is lazily created (iOS keyboard fix)"
  },
  {
    "sha": "aaf6f15",
    "subject": "shelley/lazycue: retry transient Anthropic API failures during heals"
  },
  {
    "sha": "ad64529",
    "subject": "shelley: fix web_search pause_turn wedge that breaks conversations"
  },
  {
    "sha": "5cca230",
    "subject": "shelley: stop duplicate subagent completion notifications to the parent"
  },
  {
    "sha": "afb716a",
    "subject": "shelley/ui: raise Playwright per-test timeout to 120s to kill teardown flake"
  },
  {
    "sha": "0193cce",
    "subject": "shelley/lazycue: teach the heal agent to recognize and harden load flakes"
  },
  {
    "sha": "e27f64d",
    "subject": "shelley/lazycue: bound heal-agent and per-test wall-clock time"
  },
  {
    "sha": "b50a3ff",
    "subject": "shelley: human-readable custom model IDs"
  },
  {
    "sha": "3bbf196",
    "subject": "shelley/browser: fold emulate/network/accessibility/profile into the browser tool"
  },
  {
    "sha": "189020c",
    "subject": "shelley: add GLM 5.2 Fireworks model"
  },
  {
    "sha": "3e71471",
    "subject": "llm/ant: detect adaptive thinking for qualified model names"
  },
  {
    "sha": "bfc82c2",
    "subject": "shelley/ui: fix stale conversation list after returning to a backgrounded tab"
  },
  {
    "sha": "236abe0",
    "subject": "shelley: fold per-turn timestamp bump and agent_working flip into the message INSERT"
  },
  {
    "sha": "230a93a",
    "subject": "shelley: fix git diff file list dropping/mangling tracked files"
  },
  {
    "sha": "e47a0c2",
    "subject": "shelley: add \"compact\" (pi-style) distillation strategy"
  },
  {
    "sha": "95791a6",
    "subject": "shelley: set working dir in place for drafts via command palette"
  },
  {
    "sha": "cbcde8c",
    "subject": "shelley: shrink binary by gzipping/dropping embedded UI source maps"
  },
  {
    "sha": "bb0026b",
    "subject": "shelley/ui: select neighbor below (else above) when archiving conversation"
  },
  {
    "sha": "cb8ae39",
    "subject": "shelley/ui: fix flaky scroll-behavior test with explicit timeouts"
  },
  {
    "sha": "7ec940c",
    "subject": "llm/oai: fix bare assistant messages causing 400 Bad Request with llama.cpp"
  },
  {
    "sha": "4775ded",
    "subject": "shelley: remove claude-fable-5 from the model catalog"
  },
  {
    "sha": "c3528f7",
    "subject": "shelley: fix duplicate subagent completions via waiter-slot suppression"
  },
  {
    "sha": "73aca54",
    "subject": ".clabot: add tanuck"
  },
  {
    "sha": "eee5acc",
    "subject": "shelley/ui: allow all file types in upload file picker"
  },
  {
    "sha": "455c21e",
    "subject": "shelley/ui: fix duplicate status bar on mobile for draft conversations"
  },
  {
    "sha": "7ee7b23",
    "subject": "shelley/ui: subtle, non-animated agent-working ring"
  },
  {
    "sha": "d633cf7",
    "subject": "shelley: port Playwright e2e tests to LazyCue self-healing browser tests"
  },
  {
    "sha": "17ca442",
    "subject": "shelley: add claude-fable-5 as selectable model"
  },
  {
    "sha": "2187dc2",
    "subject": "lazycue: readme updates"
  },
  {
    "sha": "f688d1f",
    "subject": "shelley: port /new UI smoke checks to LazyCue with CI reporting"
  },
  {
    "sha": "36a8179",
    "subject": "lazycue: store the cache as tracked files in .lazycue/"
  },
  {
    "sha": "f9cfe1a",
    "subject": "lazycue: rename lazy-stagehand to LazyCue"
  },
  {
    "sha": "f15073c",
    "subject": "lazy-stagehand: self-healing browser tests written as plain English"
  },
  {
    "sha": "05e0d22",
    "subject": "shelley: reap dtach terminal subprocess to avoid zombies"
  },
  {
    "sha": "b391dff",
    "subject": "shelley: add conversation forking"
  },
  {
    "sha": "0ea0c53",
    "subject": "shelley: show upstream merge-base in git graph view"
  },
  {
    "sha": "4a9dbee",
    "subject": "shelley/ui: replace window.confirm in drafts/archived delete with inline confirm"
  },
  {
    "sha": "9a70879",
    "subject": "shelley/ui: give linkify e2e message waits 30s to match suite slack"
  },
  {
    "sha": "12fa7f7",
    "subject": "shelley: use a conversation's own model when a chat omits model"
  },
  {
    "sha": "2e407bd",
    "subject": "server: isolate tests from the developer's user hooks"
  },
  {
    "sha": "52b3b6e",
    "subject": "shelley: don't remount message input when a draft is lazily created"
  },
  {
    "sha": "e45f9c2",
    "subject": "claudetool: give agent bash/shell tools the same SHELLEY_* env as ! terminals"
  },
  {
    "sha": "cb14fa4",
    "subject": "shelley: use team hosts for team LLM integrations"
  },
  {
    "sha": "e017efd",
    "subject": "shelley: sort diff drawer consistently and follow it when navigating"
  },
  {
    "sha": "e37a969",
    "subject": "shelley: auto-configure exe.dev push notifications"
  },
  {
    "sha": "8a186d1",
    "subject": "shelley: drafts are real conversations"
  },
  {
    "sha": "06aff8b",
    "subject": "shelley: tighten thinking-level picker layout, advertise capability"
  },
  {
    "sha": "42be1a7",
    "subject": "go.mod: upgrade to 1.26.4"
  },
  {
    "sha": "143ac9d",
    "subject": "shelley: add per-request ThinkingLevel override across all four LLM APIs"
  },
  {
    "sha": "bcf0787",
    "subject": "shelley: render local images referenced in model markdown"
  },
  {
    "sha": "4c78934",
    "subject": "shelley/db: keep SQLite WAL bounded with checkpoints"
  },
  {
    "sha": "ba63357",
    "subject": "server: compute conversation-list preview and max_sequence_id in the list query"
  },
  {
    "sha": "2ec40c9",
    "subject": "server: parse llm_data once per message in toAPIMessages"
  },
  {
    "sha": "c58e668",
    "subject": "gitstate: read .git directly instead of shelling out to git"
  },
  {
    "sha": "a229b1a",
    "subject": "shelley: suppress duplicate subagent completions"
  },
  {
    "sha": "2be7364",
    "subject": "shelley: add conversation Markdown export at /export/<id> route (#215)"
  },
  {
    "sha": "bbf97d1",
    "subject": "shelley/ui: tool-pill headlines + polished detail modal"
  },
  {
    "sha": "8726bed",
    "subject": "shelley/ui: keep model management in picker"
  },
  {
    "sha": "fcac0d6",
    "subject": "shelley: add manual model catalog refresh"
  },
  {
    "sha": "190fe74",
    "subject": "shelley: use integration catalogs for llm models"
  },
  {
    "sha": "b884455",
    "subject": "shelley: align OpenAI requests with ChatGPT"
  },
  {
    "sha": "3387106",
    "subject": "shelley: add Export Conversation to Markdown (#215)"
  },
  {
    "sha": "3ee7e1e",
    "subject": "shelley/ui: Escape blurs message input"
  },
  {
    "sha": "8c5609f",
    "subject": "shelley/ui: bump picomatch to 4.0.4"
  },
  {
    "sha": "2d551b0",
    "subject": "shelley/ui: Cmd/Ctrl+ArrowDown scrolls conversation to bottom"
  },
  {
    "sha": "1de2d1a",
    "subject": "ui: cmd/ctrl/shift+click opens conversation views in new tab"
  },
  {
    "sha": "4d1d05e",
    "subject": "shelley/claudetool: tolerate thinking blocks in keyword_search relevance filter"
  },
  {
    "sha": "a1de888",
    "subject": "shelley/server: flip agent_working=false in end-of-turn message Tx"
  },
  {
    "sha": "8bc6e3a",
    "subject": "shelley/loop: convert predictable conditionals to switch"
  },
  {
    "sha": "1263156",
    "subject": "shelley/loop: use sync.WaitGroup.Go in interruption tests"
  },
  {
    "sha": "f60e5e6",
    "subject": "shelley/db: use range over int and drop redundant type args"
  },
  {
    "sha": "72a4cd8",
    "subject": "shelley/claudetool: modernize loops, min/max, fmt.Fprintf, errors.Cut, b.Loop"
  },
  {
    "sha": "bdcc994",
    "subject": "shelley/loop: use strings.CutPrefix throughout predictable, range over int in test"
  },
  {
    "sha": "f7e0424",
    "subject": "shelley/dtach: use errors.AsType for exec.ExitError"
  },
  {
    "sha": "49e4a0c",
    "subject": "shelley/client: use strings.CutPrefix for URL parsing"
  },
  {
    "sha": "284adaf",
    "subject": "shelley/srv: collapse redirect chains in login URL"
  },
  {
    "sha": "36a9c0a",
    "subject": "shelley/slug: read first text block, not Content[0], for reasoning models"
  },
  {
    "sha": "3f97947",
    "subject": "Revert \"Promote tool-pills feature flag\""
  },
  {
    "sha": "31f7128",
    "subject": "shelley: disable Playwright steps in CI"
  },
  {
    "sha": "69b69cc",
    "subject": "shelley: prefer exe.dev LLM integration; refactor model loading; Manage Models polish"
  },
  {
    "sha": "b028129",
    "subject": "shelley: register cheap/fast coding models"
  },
  {
    "sha": "7ad567c",
    "subject": "Promote tool-pills feature flag"
  },
  {
    "sha": "b6b01e5",
    "subject": "shelley/ui: expand tool pills inline instead of in a modal"
  },
  {
    "sha": "bce0c1a",
    "subject": "Pluggable slash commands + SHELLEY_* env vars in ! shell terminals"
  },
  {
    "sha": "578469d",
    "subject": "shelley: GET /api/conversation/<id> honors last_sequence_id"
  },
  {
    "sha": "2a5d968",
    "subject": "shelley/ui: fix SSE race flake in markdown e2e tests"
  },
  {
    "sha": "ab5bb87",
    "subject": "shelley: make Opus 4.8 default, fix model order"
  },
  {
    "sha": "248eba4",
    "subject": "shelley: bump playwright to 1.60.0"
  },
  {
    "sha": "7bcc68d",
    "subject": "shelley: add claude-opus-4.8 as selectable model"
  },
  {
    "sha": "9c8628f",
    "subject": "shelley: add Images column to Manage Models table"
  },
  {
    "sha": "d56155a",
    "subject": "shelley/ui: render Manage Models list as a table"
  },
  {
    "sha": "851a508",
    "subject": "shelley: skip dropping llm_requests table in migration 025"
  },
  {
    "sha": "6624d30",
    "subject": "shelley: track migrations by filename instead of number"
  },
  {
    "sha": "5cc2d22",
    "subject": "shelley/ui: fix systemic e2e test flakiness"
  },
  {
    "sha": "0626ec9",
    "subject": "ui: render tool bursts as iOS-style pills (behind tool-pills flag)"
  },
  {
    "sha": "337cc0f",
    "subject": "shelley: add tags to conversations"
  },
  {
    "sha": "3c56b60",
    "subject": "shelley: per-model image-input capability, hide read_image for text-only models"
  },
  {
    "sha": "5ce80c3",
    "subject": "shelley/ui: restore autoscroll after returning from a backgrounded tab"
  },
  {
    "sha": "d67c9b8",
    "subject": "shelley: add end of turn category to apns"
  },
  {
    "sha": "8e5d39b",
    "subject": "shelley/llm/oai: round-trip DeepSeek reasoning_content across tool calls"
  },
  {
    "sha": "010d403",
    "subject": "shelley: offer Retry on retryable LLM errors"
  },
  {
    "sha": "766bdd3",
    "subject": "shelley: rip out llm_requests DB recording"
  },
  {
    "sha": "2778211",
    "subject": "shelley: notify parent agent when subagent finishes"
  },
  {
    "sha": "853d6e4",
    "subject": "shelley: add chat-message hook, headers, and blocking failure semantics"
  },
  {
    "sha": "a75707e",
    "subject": "Add feature flags with cmd+k CRUD"
  },
  {
    "sha": "f1aac7b",
    "subject": "shelley/demo.py: default --banner to conv slug or HEAD subject"
  },
  {
    "sha": "9612920",
    "subject": "shelley/claudetool: put cd-chaining hint at top of bash output"
  },
  {
    "sha": "8272bdd",
    "subject": "shelley: make conversation_list_patch authoritative for working state"
  },
  {
    "sha": "40596fb",
    "subject": "shelley: add is_default to /api/models entries"
  },
  {
    "sha": "63b8ffb",
    "subject": "shelley: add --banner to show a top-of-page banner"
  },
  {
    "sha": "f2f6a3d",
    "subject": "shelley/llm: add omitempty to Content.Caller/Citations to prevent wedge"
  },
  {
    "sha": "5069ad8",
    "subject": "shelley/ui: keep agent-working indicator alive across focus + reload"
  },
  {
    "sha": "7e389cc",
    "subject": "shelley: isolate git tests from host commit-msg hooks"
  },
  {
    "sha": "281abb1",
    "subject": "shelley/llm/ant: drop literal-null Caller/Citations on the Anthropic wire"
  },
  {
    "sha": "11150dd",
    "subject": "shelley: add Anthropic + OpenAI server-side web search"
  },
  {
    "sha": "2519cc3",
    "subject": "shelley: auto-commit user AGENTS.md edits to a detached gitdir"
  },
  {
    "sha": "a7e8a10",
    "subject": "shelley/models: reorder model list by family, best-first"
  },
  {
    "sha": "0684a9d",
    "subject": "shelley: add excalidraw skill with self-hosted bundle under /static/"
  },
  {
    "sha": "9d7506b",
    "subject": "shelley/ui: recover gracefully from unapplicable conversation-list patches"
  },
  {
    "sha": "bd76366",
    "subject": "shelley: add warning conversation messages"
  },
  {
    "sha": "20e3300",
    "subject": "shelley: encrypt IndexedDB cache rows at rest"
  },
  {
    "sha": "9df4737",
    "subject": "shelley: show italic 'untitled' for conversations without a slug"
  },
  {
    "sha": "e62d13b",
    "subject": "shelley: fix browser install instructions"
  },
  {
    "sha": "a63a027",
    "subject": "shelley/ui: add 'Open Terminal' command palette action"
  },
  {
    "sha": "ac1bf19",
    "subject": "shelley: single /api/stream2 connection + per-message IndexedDB cache"
  },
  {
    "sha": "6a27f5d",
    "subject": "shelley: run gofumpt v0.10.0"
  },
  {
    "sha": "c225d99",
    "subject": "shelley: drop message type check constraint"
  },
  {
    "sha": "cf422d1",
    "subject": "git graph: draggable divider between commit list and detail pane"
  },
  {
    "sha": "3f55b8c",
    "subject": "shelley: write '<cmd> completed with exit code N' at terminal exit"
  },
  {
    "sha": "5b8e6fc",
    "subject": "shelley/server: shrink stream frames by omitting empty Conversation/Messages"
  },
  {
    "sha": "14f1b51",
    "subject": "shelley: GLM 4.7 is no more"
  },
  {
    "sha": "f05a355",
    "subject": "shelley: clear new conversation draft on send"
  },
  {
    "sha": "fd4edcd",
    "subject": "shelley/server: SSE tail= and snapshot_complete frame"
  },
  {
    "sha": "362917c",
    "subject": "shelley/server: scope user hooks dir per Server, fix flake"
  },
  {
    "sha": "b0f53cf",
    "subject": "shelley/demo.py: disable CLI-client Unix socket"
  },
  {
    "sha": "a6833f0",
    "subject": "shelley: slash commands /diff and /new in message input"
  },
  {
    "sha": "6f1a1a7",
    "subject": "shelley: compress SSE streams with zstd or gzip"
  },
  {
    "sha": "cdad737",
    "subject": "shelley: new-conversation /new URL + draft row in conversation list"
  },
  {
    "sha": "a49afd7",
    "subject": "shelley: record image dimensions so UI can reserve layout space"
  },
  {
    "sha": "1bde040",
    "subject": "shelley: revert TL;DR feature"
  },
  {
    "sha": "6f1f46c",
    "subject": "shelley/client: add -ephemeral to chat for cron-style cleanup"
  },
  {
    "sha": "b4f9bd6",
    "subject": "shelley/ui: nicer diff viewer sidebar with a file tree"
  },
  {
    "sha": "5648fdb",
    "subject": "shelley/ui: open mobile keyboard when tapping !bash terminal"
  },
  {
    "sha": "4584c62",
    "subject": "shelley: disable TL;DR generation"
  },
  {
    "sha": "c54fbe5",
    "subject": "shelley: fit read_image / screenshot output to model image limits"
  },
  {
    "sha": "71f25aa",
    "subject": "shelley/ui: disable vim mode in diff viewer comment mode"
  },
  {
    "sha": "562b32a",
    "subject": "shelley/ui: fix Usage Details modal hidden by content-visibility ancestor"
  },
  {
    "sha": "f6a2c68",
    "subject": "shelley: use syncs.Map for notification registry"
  },
  {
    "sha": "d5678d3",
    "subject": "ui: respect modifier-clicks on diff links"
  },
  {
    "sha": "c2cbb57",
    "subject": "shelley: attach TL;DR summaries to long end-of-turn responses"
  },
  {
    "sha": "4b7971b",
    "subject": "shelley/server: serialize ConversationManager.Hydrate"
  },
  {
    "sha": "ba896ee",
    "subject": "shelley/llm: log cumulative elapsed time and last-error summary on each retry"
  },
  {
    "sha": "8c4d763",
    "subject": "shelley/llm: extend retry budget so transient outages don't kill jobs"
  },
  {
    "sha": "03573db",
    "subject": "shelley/llm: honor Retry-After header on 429 / 5xx responses"
  },
  {
    "sha": "3179f22",
    "subject": "shelley/llm/oai: honor ctx cancellation during responses retry backoff"
  },
  {
    "sha": "ee0b517",
    "subject": "shelley/llm/gem: classify retryable errors by status code"
  },
  {
    "sha": "0b3e6ca",
    "subject": "shelley: fall back to first-ready model when configured default isn't ready"
  },
  {
    "sha": "36a2367",
    "subject": "shelley: respond 200 OK to GET /api/upload/raw"
  },
  {
    "sha": "546ee85",
    "subject": "shelley: drop protocol_version and raw_upload capability from /version"
  },
  {
    "sha": "7ed0c07",
    "subject": "shelley: advertise raw_upload capability in /version"
  },
  {
    "sha": "2fba1d3",
    "subject": "shelley: inline divider for generation entries in mini TOC"
  },
  {
    "sha": "4e91215",
    "subject": "shelley: add separator above generation entries in mini TOC"
  },
  {
    "sha": "d55c4d7",
    "subject": "shelley: discourage piping shell output through tail/head"
  },
  {
    "sha": "e2f1417",
    "subject": "shelley/ui: close monaco modals on vim :q / :wq / ZZ / ZQ"
  },
  {
    "sha": "a86501e",
    "subject": "shelley: re-allocate some mobile diff view space"
  },
  {
    "sha": "e0c5e6b",
    "subject": "shelley/server: avoid reflection HTTP in unit tests"
  },
  {
    "sha": "81b2252",
    "subject": "shelley/server: keep list-patch subscribers alive after history-trim"
  },
  {
    "sha": "6efd178",
    "subject": "shelley: stream uploads and add raw endpoint"
  },
  {
    "sha": "b2f21de",
    "subject": "shelley: hold conversation drawer order stable client-side"
  },
  {
    "sha": "a834295",
    "subject": "shelley: teach prompt about /suggest URLs and proxy auth"
  },
  {
    "sha": "3c3ac59",
    "subject": "shelley/ui: restore chat input focus when modals/overlays close"
  },
  {
    "sha": "437c4c3",
    "subject": "shelley/ui: collapse $HOME to ~ and use monospace for cwd in status bar"
  },
  {
    "sha": "220802c",
    "subject": "shelley/ui: show range toggle in diff viewer sidebar and reword"
  },
  {
    "sha": "f537800",
    "subject": "skills: make reflection skill more discoverable"
  },
  {
    "sha": "590ace5",
    "subject": "shelley/ui: show read-only cwd in active conversation status bar"
  },
  {
    "sha": "f6c6bb4",
    "subject": "shelley/ui: drop emoji from placeholder hints"
  },
  {
    "sha": "9a33736",
    "subject": "ui: show '!' command as a banner in terminal output"
  },
  {
    "sha": "6763da7",
    "subject": "shelley: route /api/upload to /tmp/shelley-uploads"
  },
  {
    "sha": "5a5fa9a",
    "subject": "shelley/ui: upgrade @xterm/xterm to 6.1.0-beta.213 (kitty keyboard)"
  },
  {
    "sha": "80c9547",
    "subject": "shelley/ui: deflake smoke placeholder check"
  },
  {
    "sha": "2cd4f7c",
    "subject": "shelley/ui: DiffViewer range-mode toggle and sidebar layout"
  },
  {
    "sha": "ee9ee3a",
    "subject": "shelley: sync cwd to ChatInterface when command palette quick-actions fire"
  },
  {
    "sha": "493798b",
    "subject": "shelley: remove 'distill in new conversation' and 'distill in place'"
  },
  {
    "sha": "cbd3f76",
    "subject": "shelley: add end-of-turn hook"
  },
  {
    "sha": "ede1bc1",
    "subject": "ui: auto-discover test files in pnpm test"
  },
  {
    "sha": "89fd5a7",
    "subject": "ui: probabilistic placeholder hints in chat input"
  },
  {
    "sha": "574560b",
    "subject": "shelley: surface git diff/graph actions in command palette without a conversation"
  },
  {
    "sha": "774a478",
    "subject": "shelley: move tool context into llm"
  },
  {
    "sha": "9ed7d84",
    "subject": "shelley: add typed tool input adapter"
  },
  {
    "sha": "2fc41e3",
    "subject": "shelley/ui: upload all files when multiple are dropped at once"
  },
  {
    "sha": "e56ddec",
    "subject": "shelley: shorten shell yield payload"
  },
  {
    "sha": "06f70b6",
    "subject": "shelley: only auto-open long-conversation popup once per browser"
  },
  {
    "sha": "5cc3f56",
    "subject": "shelley: remove /inbox view and HomeFeed component"
  },
  {
    "sha": "92e6e63",
    "subject": "shelley: force TERM=xterm-256color in dtach-backed terminals"
  },
  {
    "sha": "b6f81f3",
    "subject": "shelley: render markdown during streaming preview"
  },
  {
    "sha": "97d584d",
    "subject": "shelley: dir picker dual git-root buttons, command palette cd actions, paste image thumbnails"
  },
  {
    "sha": "40087dd",
    "subject": "shelley: align floating nav icons; cmd-k entry for git graph"
  },
  {
    "sha": "4bc6352",
    "subject": "shelley: git graph branch-scope toggle (All / Current)"
  },
  {
    "sha": "e2dfb90",
    "subject": "shelley/server: sharpen exe.dev briefing in system prompt"
  },
  {
    "sha": "41e25e6",
    "subject": "shelley: persistent dtach-backed terminals"
  },
  {
    "sha": "7eaa56e",
    "subject": "shelley: FTS5-backed conversation search in drawer with snippets"
  },
  {
    "sha": "05de851",
    "subject": "shelley/server: reduce first-stream-flush latency on /api/stream"
  },
  {
    "sha": "7e65098",
    "subject": "shelley: smarter end-of-turn notification body"
  },
  {
    "sha": "a28d0fb",
    "subject": "ui: add conversation table-of-contents navigation"
  },
  {
    "sha": "7ee88f2",
    "subject": "shelley/server: extend conversation-stream test wait timeout"
  },
  {
    "sha": "2b1951a",
    "subject": "shelley/server: raise wait timeouts in conversation_list_stream_test helpers"
  },
  {
    "sha": "9bfc4a2",
    "subject": "shelley/skills: rename install-node to node-and-js-frameworks"
  },
  {
    "sha": "7f76d71",
    "subject": "shelley: don't close modal on Esc while editing in vim mode"
  },
  {
    "sha": "af8f7f9",
    "subject": "shelley: stream conversation list patches and version protocol"
  },
  {
    "sha": "39f1d82",
    "subject": "shelley/ui: bump @pierre/diffs from 1.1.0-beta.18 to 1.1.20"
  },
  {
    "sha": "e509de3",
    "subject": "shelley/ui: show unobtrusive timestamps between messages"
  },
  {
    "sha": "a4e3cab",
    "subject": "shelley: send images to Gemini via inlineData parts"
  },
  {
    "sha": "f7d2bfa",
    "subject": "shelley/ui: stack diff viewer over git graph instead of replacing it"
  },
  {
    "sha": "5524db9",
    "subject": "shelley/ui: open diff scoped to commit when launched from git graph"
  },
  {
    "sha": "51296b2",
    "subject": "shelley/ui: float commit-detail close button above scroll area on mobile"
  },
  {
    "sha": "83993f4",
    "subject": "shelley/ui: right-align repo picker timestamp on mobile"
  },
  {
    "sha": "027984e",
    "subject": "shelley: git-repo picker for the git graph viewer"
  },
  {
    "sha": "654a2a2",
    "subject": "shelley: don't duplicate Co-authored-by trailer when injecting it"
  },
  {
    "sha": "0ef24c9",
    "subject": "shelley: accept slug from new-conversation hook"
  },
  {
    "sha": "640083b",
    "subject": "shelley: keep token bar accurate after distill into new generation"
  },
  {
    "sha": "e538dd2",
    "subject": "shelley: preserve conversation slug across generations"
  },
  {
    "sha": "0d7f760",
    "subject": "shelley: make distillations editable via temp files"
  },
  {
    "sha": "236956d",
    "subject": "shelley: send images to OpenAI models"
  },
  {
    "sha": "47086cb",
    "subject": "shelley: retry truncated OpenAI Responses bodies"
  },
  {
    "sha": "711fe9b",
    "subject": "shelley: raise /api/upload size cap to 1 GiB"
  },
  {
    "sha": "a9bd257",
    "subject": "shelley: add conversation generations"
  },
  {
    "sha": "cd03d89",
    "subject": "shelley/browse: kill headless-shell process group on shutdown"
  },
  {
    "sha": "edb3c13",
    "subject": "shelley: add conversation list patch stream"
  },
  {
    "sha": "29272c6",
    "subject": "shelley: add conversation end-of-turn hooks"
  },
  {
    "sha": "81041d6",
    "subject": "go.mod: upgrade to 1.26.3"
  },
  {
    "sha": "0b69a3c",
    "subject": "fix(i18n): finish Vietnamese locale wiring"
  },
  {
    "sha": "c939469",
    "subject": "fix: register Vietnamese (vi) locale in i18n types, context, and index"
  },
  {
    "sha": "77082b9",
    "subject": "feat(i18n): add Vietnamese (vi) language support"
  },
  {
    "sha": "2b6b13d",
    "subject": "ui: tighten message spacing"
  },
  {
    "sha": "900b4aa",
    "subject": "ui: use blue user message text"
  },
  {
    "sha": "e62b406",
    "subject": "ui: add speaker accent rails"
  },
  {
    "sha": "eca82f2",
    "subject": "ui: remove user message bubble styling"
  },
  {
    "sha": "4ab6752",
    "subject": "ui: system sans font, inline code rendering, message styling"
  },
  {
    "sha": "535bbf1",
    "subject": "shelley/llm/gem: classify Gemini 3 thoughts by thought=true, not signature presence"
  },
  {
    "sha": "8958909",
    "subject": "shelley/llm/gem: wire reasoning_effort through to Gemini thinkingConfig"
  },
  {
    "sha": "88556f1",
    "subject": ".clabot: add quangdz-comeback"
  },
  {
    "sha": "49933f1",
    "subject": "Enable sub-agents to access skills"
  },
  {
    "sha": "fe9a315",
    "subject": "shelley/skills: support conditional skills via 'when:' and add reflection-integration"
  },
  {
    "sha": "dd54a29",
    "subject": "shelley: auto-derive terminal_url and exe.dev link on /exe.dev VMs"
  },
  {
    "sha": "ad52a43",
    "subject": "browse: e2e test for browser_network clear_cache"
  },
  {
    "sha": "ae7614b",
    "subject": "browser_network: add clear_cache action"
  },
  {
    "sha": "10c6628",
    "subject": "shelley: Refresh subagent model list on each new conversation"
  },
  {
    "sha": "c1396ab",
    "subject": "shelley/db: bump test template migration timeout"
  },
  {
    "sha": "2e4b66c",
    "subject": "shelley/llm/oai: parse Responses API reasoning summary as objects"
  },
  {
    "sha": "4215a94",
    "subject": "shelley/ui: add Vim mode toggle to Monaco editors"
  }
]