{
  "schemaVersion": 3,
  "source": {
    "id": "umanager",
    "name": "UManager 中央源",
    "role": "central",
    "url": "https://null-object-0000.github.io/umanager/v3/feed.json",
    "hosts": [
      "null-object-0000.github.io"
    ],
    "publicKeyHex": "57d369d3e46b3243073b4535673ffa784dc760e0f14d6d25fb04940b69b0c8f9"
  },
  "sources": [
    {
      "id": "tencent",
      "name": "腾讯源",
      "role": "vendor",
      "url": "https://null-object-0000.github.io/umanager/v3/feed.tencent.json",
      "hosts": [
        "null-object-0000.github.io"
      ],
      "publicKeyHex": "67ccb44779ca8123b844dccf62b42d8e4a9139eeefd8d7f3cbd11e9940dd25b5",
      "defaultEnabled": true,
      "endorsement": "ada0acf971402ffa0b90cad82fade0499a42516c8afdd7e77c13860af9b1dc501af1e36c471b273c6cf685fccdc8d96ae569c8f20622f367cf8c269345374c03"
    },
    {
      "id": "common",
      "name": "公共源",
      "role": "common",
      "url": "https://null-object-0000.github.io/umanager/v3/feed.common.json",
      "hosts": [
        "null-object-0000.github.io"
      ],
      "publicKeyHex": "35a2e5a3961d01d952ea45da7e7fd3238dedda2d431c26bbc3bf07f12929ffee",
      "defaultEnabled": true,
      "endorsement": "eab2f65d93a32efc4d6a76dd0873c06d66141ffd8d14662fcea599a6be431ec1fca43b4cf7777cf46967ca75c6c4b89842e5432fbcd741105ee5c5d19eb8b70d"
    }
  ],
  "generatedAtUnixSeconds": 1794701947,
  "selfUpdate": {
    "packageName": "u-manager",
    "version": "0.18.3",
    "architecture": "amd64",
    "size": 10849516,
    "sha256": "2525f7e1e7c2b0fb7fd43ff2a8b72bd92005abdff98f8702d4086ff32413e3b4",
    "downloadUrl": "https://github.com/null-object-0000/umanager/releases/download/v0.18.3/UManager_0.18.3_amd64.deb",
    "releaseTag": "v0.18.3",
    "assetName": "UManager_0.18.3_amd64.deb",
    "websiteVersion": "0.18.3",
    "releaseNotes": "## 0.18.3\n\n### 问题修复\n\n- `app`：关闭窗口不再隐藏进托盘，改为确认后退出\n- `catalog`：classify WowType as a system tool\n\n### 新功能\n\n- `catalog`：add WowType for Ubuntu 26.04\n\n### 维护与构建\n\n- give Pages artifacts unique names for feed workflow retries",
    "releaseNotesUrl": "https://github.com/null-object-0000/umanager/releases/tag/v0.18.3",
    "versionUpdatedAtUnixSeconds": 1794549419,
    "versionUpdatedAtSource": "official"
  },
  "developmentTools": {
    "antigravity-cli": {
      "version": "1.5.9",
      "releaseNotes": null,
      "releaseNotesUrl": "https://antigravity.google/docs/changelog?tab=cli",
      "versionUpdatedAtUnixSeconds": 1794648398,
      "versionUpdatedAtSource": "observed"
    },
    "claude-code": {
      "version": "2.1.325",
      "channels": {
        "latest": "2.1.325",
        "next": "2.1.325",
        "stable": "2.1.311"
      },
      "npmPackage": "@anthropic-ai/claude-code",
      "releaseNotes": "## 2.1.325\n\n- Fixed a security issue in how zstd-compressed responses are decoded\n- Added a spinner tip in VS Code and similar integrated terminals about re-running a notebook cell, shown once Claude has read or edited a Jupyter notebook\n- Added a line under the error shown when your organization's policy blocks a request, saying how to continue: run `/rewind` and change the message, or run `/clear`\n- Added a note for Claude when a sandboxed `git checkout`, `git stash` or autostash pull cannot update protected files such as those in `.claude`\n- Fixed `/security-review` and skills' inline git commands stopping with an error in worktrees of bare repositories, `--separate-git-dir` checkouts and Android `repo` checkouts\n- Fixed subagents with their own model being moved to the plan-mode model when the model setting is `opusplan` or `haiku`\n- Fixed subagents on a different model sizing file reads and MCP results with the main session's model\n- Fixed sessions on many third-party gateways and Foundry stopping with a context length error on every turn instead of compacting\n- Fixed recent turns sometimes going missing from a resumed session after Claude Code stopped without a clean exit\n- Fixed shell commands running in the launch directory after the working directory was deleted; the command now fails with a message and can be re-issued\n- Fixed an approved plan edit being lost when the `plansDirectory` folder can't take it: the plan is now saved in the default plans folder, and a warning says where and why\n- Fixed a saved `sonnet[1m]` model setting being rewritten on a new install to a model id the API rejects\n- Fixed focus view hiding the reply to your prompt when a scheduled task replied after it\n- Fixed the prompt sometimes missing from a background subagent's view when fullscreen is off\n- Fixed long options in lists and permission prompts being partly overwritten when they wrap, and first-run screens losing lines on narrow terminals\n- Fixed startup warnings about permission rules and the \"N MCP servers need authentication\" notice being recorded as seen when they were scrolled out of view\n- Fixed the welcome header showing control characters or splitting across lines when an agent's name or the working folder contains them or a line break\n- Fixed the red error shown when Claude tries a command only you can run: a dim line now says it runs only when you type it at the prompt\n- Fixed `/stats` showing an Active days total that was one day too high\n- Fixed `/insights` saying a report was ready when no session qualified for analysis, and writing two values into its HTML report without escaping them\n- Fixed `/voice` saying voice mode changed when managed settings, `--settings`, or the project's `.claude/settings.json` or `.claude/settings.local.json` kept it as it was; it now says what holds it\n- Fixed the IDE welcome dialog showing Cmd+Esc for Quick Launch on Windows and Linux\n- Fixed Slack app tips showing when your organization's policy denies cloud sessions\n- Fixed `claude purge` hanging silently when there is no terminal to read keys from, and its project picker and `-i` prompts ignoring the keyboard when stdin is piped\n- Fixed `claude plugin eval --output-dir ''` writing the report into the current folder; it now exits with an error\n- Fixed `claude -p` text output on a terminal passing control sequences other than text styling; pipes and files are unchanged\n- Fixed leftover `.oauth_refresh.lock.owner.tmp.*` files piling up in the config directory\n- Fixed `/fast` saying \"Fast mode has been disabled by your organization\" under the keyless Console sign-in, where Claude Code had not asked the server\n- Fixed `/model` saying that your organization restricts a model when Claude Code could not check that, for example with no network\n- Fixed \"Sign in with your Console account\" in `/login` replacing your existing login when you pressed Esc right after the browser step\n- Fixed the browser showing the sign-in success page in some cases where sign-in failed or was canceled\n- Fixed `claude auth status` and other short commands leaving a lock behind on a Console profile, which made the next session hang for about a minute\n- Fixed background sessions started on your claude.ai login using (and billing) an API key or token from the shell that started the background service\n- Fixed more cases of a session moving to another sign-in in the background; these moves are now refused, with a message saying what works\n- Fixed a second Enter in the exit dialog stopping background work after the move to the background was refused\n- Fixed token counting on Amazon Bedrock sending the conversation to Bedrock when the `allowedProviders` managed setting does not allow it\n- Fixed AWS `credential_process` helpers and Google Cloud default credentials failing when Claude Code is started without a `HOME` environment variable\n- Fixed a session sometimes going back to an earlier permission mode after a subagent's plan was approved\n- Fixed one invalid value in an Agent SDK `applyFlagSettings()` call silently discarding all settings from earlier calls; a call that would do this is now refused with an error\n- Fixed sessions showing as waiting for input when a finished pull request only needed your own review or merge\n- Fixed an unrecognized `teammateMode` settings value being ignored without a warning: `claude -p`, the startup warning and `claude doctor` now list it as a skipped entry (still not applied)\n- Fixed `--worktree` skipping a `WorktreeCreate` hook from a plugin in `CLAUDE_CODE_PLUGIN_SEED_DIR` on the first run in a new home directory\n- Fixed brief-mode sessions, such as Dispatch, sending a reply again after the turn had already replied\n- Fixed Claude saying a working Atlassian, Asana or Sentry connector had failed in cloud sessions when a plugin listed it at a different URL\n- Fixed Claude Desktop and SDK sessions listing a folder's own MCP servers (`.mcp.json`, local) as host-added or not at all, and not connecting WebSocket ones, after a folder move or pre-warmed start\n- Fixed `/mcp` still listing a plugin's MCP server after a plugin reload removed it while it was connecting\n- Fixed an MCP server staying \"needs authentication\", and its `mcp_tool` hooks being skipped, after a token refresh that was refused only for a moment\n- Fixed MCP elicitation requests being cancelled without asking in headless mode after a server's connection was replaced during a tool call\n- Fixed MCP tool calls from an SDK host answering \"Not connected\" after a tool call had reconnected the MCP server\n- Fixed an MCP task getting stuck after its question was closed with Esc or asked again: the footer now says it needs your input, and Enter in `/tasks` shows the question again\n- Fixed background MCP tasks that stopped updating after another call to the same server lost the connection, when a later call reconnects\n- Fixed a background MCP task's question opening over a message you were still typing; it now waits until you send or clear the draft, and the spinner and turn timer keep running\n- Fixed `worktree.sparsePaths` and sparse plugin and marketplace clones leaving out the repository's root files on older git versions, such as 2.34\n- Fixed self-hosted runner sessions with several repositories being unable to use a repository added mid-session\n- Fixed Claude asking for permission before reading your own artifact or its data\n- Fixed deny and ask permission rules and hooks for the Artifact tool not applying in some cloud sessions\n- Fixed Code Mode scripts ignoring a worktree entered with `EnterWorktree`, writing `~` paths into the project, and leaving `/mcp` showing an MCP server as connected after its sign-in expired\n- Fixed words typed with a Yes at a permission dialog or plan approval not reaching Claude in Code Mode\n- Fixed Claude starting work by itself when you resumed a session that ended during a Code Mode script; it now waits for your next prompt\n- Fixed a missing OpenTelemetry `user_prompt` event for a message sent while tool calls run. The event has `delivery.mode: \"mid_turn\"` and the running turn's `prompt.id`\n- Fixed the OpenTelemetry `user_prompt` event leaving out earlier messages' text when queued messages merged into one turn in VS Code, or when one message had an image\n- Fixed a slash command's `allowed-tools` grants applying to background agents woken during or after its turn\n- Fixed `/feedback` and `/bug` to upload other sessions only when they were recorded by the signed-in account or organization\n- Fixed relative deny and ask permission rules (e.g. `Read(./.env)`) no longer covering the project after a `cd`; they now also apply in added directories\n- Fixed deny and ask permission rules starting with `mcp__plugin_*_` missing a plugin's MCP server or tool spelled in another letter case\n- Fixed deny rules not being applied to a permission approval that arrives after Claude Code restarts, in self-hosted runner and `claude remote-control` sessions\n- Fixed a case where a committed `.claude/settings.local.json` could be treated as the user's own when Claude Code was started in certain subfolders of a repository\n- Fixed some deny and ask rules not applying to certain Bash commands\n- Fixed a gap in Bash permission checks where some compound commands could run without asking; these now ask for permission\n- Fixed a case where a Bash allow rule could run a different program than the one it names\n- Fixed a connector tool's approval prompt in cloud sessions being answered automatically while plugins were still loading\n- Fixed some subagents changing an artifact that people outside your organization can see, or uploading files to it, without asking first when an allow rule is set or uploads were approved earlier\n- Fixed some artifact publishes skipping the confirmation for pages that people outside your organization can see when \"don't ask again\" had been chosen for Artifact\n- Fixed auto mode judging only the first change to an artifact that people outside your organization can see; its yes now covers that change alone\n- Fixed a managed `strictPluginOnlyCustomization` lock on agents and skills not taking effect in sessions that were already running\n- Fixed sandboxed commands being able to write to the native updater's download folder in some cases\n- Fixed a case where the Bash sandbox did not fully protect a worktree's settings and hooks\n- Fixed a case where the Bash sandbox did not fully protect a linked worktree's shared git folder\n- Fixed `/teleport`'s stash choice in some unusual git states: it now stops and says what to do\n- Windows: Fixed a start-up stall that could last about a second when a PATH entry sits under a folder your account cannot open\n- Fixed `/resume` on Windows refusing or hiding sessions whose folder was recorded with a different drive-letter case or slashes\n- Fixed an in-session `/resume` on Windows dropping a project's saved trust when the session was recorded with a different drive-letter case\n- Linux: Fixed sandboxed Bash commands failing with `bwrap: Can't create file` when the working directory was below an `allowRead` folder inside a `denyRead`, such as under a symlinked home directory\n- Fixed Claude Desktop's third-party deployments staying on \"Stopping\" until a token renewal finished (once it includes this version)\n- Improved subagents cut off at the output token limit: they are now asked for the whole answer again, more briefly, instead of returning only its end\n- Improved startup with a keyless Console sign-in or other Anthropic profile login: a token that is still valid is read without waiting for the credentials lock\n- Improved the account email check: it now also refuses your email as a client's identity in scripts a command runs, file writes, web fetches and MCP calls\n- Improved the `HTTPS authentication failed` message for private plugin marketplaces: it now says git's terminal prompts and askpass programs are disabled, and it also appears with newer git versions\n- Improved the add-marketplace confirmations, plugin recommendation prompts and plugin install warning to say that plugins can run code on your computer, with access to your files and shell\n- Improved the `claude --desktop` sign-in error to name the API key, provider or setting that stops a Claude account sign-in from working\n- Improved the `/voice` \"No audio detected\" message on macOS and Windows: it now says where to pick your microphone\n- Improved MCP tasks: Claude is now told when a task is waiting for your answer, and can point you to `/tasks`\n- Improved `claude remote-control`: it now exits with status 4 when it stops by itself (single-session runs still exit 0) and 69 when it can't register, so a service manager can start it again\n- Improved the messages shown when a background session can't use its session's API key or token: they no longer suggest adding the key to settings\n- Improved the bundled dataviz skill's part-to-whole advice for static images and for parts with a natural order, such as age bands\n- Changed sandboxed Bash commands to follow the normal permission flow by default; set `sandbox.autoAllowBashIfSandboxed: true` to keep running them without prompts\n- Changed managed settings that turn the sandbox on: to keep commands running without prompts, set `sandbox.autoAllowBashIfSandboxed: true` in your highest-ranking managed source\n- Changed read-only git commands to ask first in a repository that isn't the project's or one you trusted; name it with `--add-dir`, not the `additionalDirectories` setting, to run them without prompts\n- Changed scheduled tasks and `/loop` to ask before running a skill that declares `allowed-tools` or hooks; add `Skill(name)` to `permissions.allow` to run it unattended\n- Changed \"Always allow\" in Desktop, IDE and SDK hosts: a rule alone is offered only when saving it would allow that command again, so a scheduled task that relied on one can now wait for you\n- Changed the sandbox to refuse sandboxed writes to `.claude` settings, skills, agents, commands and hooks in added directories, as it does in the launch folder\n- Changed worktree isolation: an isolated worktree session or agent is now refused `git bisect run`, `git maintenance register|start` and `scalar`'s set-up commands, and is told what still works\n- Changed plugin MCP bundles (`.mcpb`, `.dxt`) to unpack under the plugins directory, not `.mcpb-cache` in the plugin's folder, so read-only plugin folders load; one fetched by URL downloads again once\n- Changed plugins of a remote marketplace that managed settings declare, enable and list in `prependPlugins` or `appendPlugins` to count as the organization's; `pluginDigests` is deprecated and ignored\n- Changed plugin loading to skip, and `claude plugin validate` to report, some unsafe paths and links in a plugin's folder\n- Changed nested skill loading: `.claude/skills` folders in `--plugin-dir` plugins no longer load from a session started above them; start Claude Code in the plugin folder instead\n- Changed EnterWorktree to refuse a `WorktreeCreate` hook path that goes through a symlink inside the project; have the hook print the real path\n- Changed tmux and iTerm2 teammates, and new sessions from the agents view opened with ←, to start in the session's folder instead of where the shell last ran `cd`\n- Changed prompt suggestions in the terminal to refresh less often after 8 turns in a row started by background or scheduled tasks, saving usage until you press a key or return to the terminal\n- Changed Esc on a background MCP task's question to \"answer later\": nothing is sent to the server, and the question stays in `/tasks`\n- Changed `CLAUDE_CODE_MAX_CONTEXT_TOKENS` to also set the context window of unrecognized model IDs that start with `claude-`, such as a gateway's `claude-sonnet-latest`\n- Changed `/login` to ask for permission to change your privacy settings\n- Changed `/cost`, `$.session.usage()`, `--max-budget-usd` and the cost and token metrics to count a mod's `$.model.complete` and `$.model.classify` calls\n- Changed the programs that Claude Code's sandbox starts for its own use, such as its network bridge, to run without Claude Code's sign-in tokens and API keys in their environment\n- Changed ripgrep, local git commands and the sandbox runtime's own helper programs to run without the mTLS client key's passphrase in their environment\n- Remote Control: Changed `/resume` and `/teleport` to disconnect first when the connected session has a share link, or when that can't be checked; run `/remote-control` to connect again\n- Changed Claude Code on the web, cloud scheduled tasks and Cowork cloud sessions to start despite `sandbox.failIfUnavailable`: the hosted container has no command sandbox\n- Changed requests for settings, permission rules, hooks or status over a cloud or self-hosted session's connection to return less or be refused; what applies in the session is unchanged\n- Changed `claude -p` with no cached account data to wait for that data before its first request, so a first run in a clean environment can start a few seconds later\n- Changed Claude's instructions to keep files you'll want out of its temporary scratchpad folder, which can be cleared\n- Changed marketplace `ref` to accept the full ID of any commit on a branch or tag; clients before this version can't clone such a pin, so a marketplace pinned this way stops loading there\n- Changed plugin marketplace and plugin downloads to use a CONNECT tunnel when `ALL_PROXY` is the only proxy set; a proxy that refuses CONNECT now fails them\n- Changed `-p` and SDK runs in a worktree or submodule mounted into a container to apply `.claude/settings.local.json` allow rules only once the folder is trusted\n- Changed self-hosted runners to refuse a session whose session folder or repository path is a symbolic link, other than a `checkout` hook's checkout\n- Removed \"ask your admin to raise it\" from spend limit and shared budget errors in cloud sessions and under Remote Control\n- [VSCode] Added prompt suggestions wherever the terminal shows them: Tab accepts the suggested next prompt; `promptSuggestionEnabled: false` in Claude Code's settings.json turns them off\n- [VSCode] Added a Console sign-in that creates no API key\n- [VSCode] Added a field to paste the redirect URL when signing in to an MCP server from the panel in SSH, WSL and container windows\n- [VSCode] Fixed the model picker's check mark staying on the old model after Claude Code restarted on another model or the model was switched over Remote Control\n- [VSCode] Fixed the effort selector offering levels above the effort cap set by your organization or the `maxEffortLevel` setting\n- [VSCode] Fixed the sign-in screen offering sign-ins that the managed `allowedProviders` setting refuses\n- [VSCode] Fixed the permission prompt for MCP tools not saying why Claude Code asks when a safety check raises the question\n- [VSCode] Fixed the message for organization settings that couldn't load saying to run a command again; it now says to try again, matching the tab's Retry link\n- [VSCode] Improved the note shown for an untrusted folder: it now says why the extension is off and how to turn it on\n- [VSCode] Improved the error shown when the system refuses to run Claude Code: it now says your IT team can allow a blocked program\n- [VSCode] Improved the sign-in card to say what to do when the browser shows a connection error for localhost\n- [VSCode] Changed the install link's marketplace confirmation button to \"Trust marketplace and continue\"\n- [Claude Code on the web] Fixed new cloud sessions cutting MCP tool descriptions loaded through tool search at 4,096 characters; the limit is now 16,384, as in other Claude Code sessions\n- [Claude Tag] Fixed artifact links pasted in Slack getting no card when the poster's Claude sign-in had expired in a workspace their organization doesn't manage; a plain card now appears",
      "releaseNotesUrl": "https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md",
      "channelReleaseNotes": {
        "2.1.311": {
          "releaseNotes": "## 2.1.311\n\n- Added `--hold-idle-file` and `--max-hold-min` to `self-hosted-runner`, to keep an idle session while your host reports processes it left running\n- Added a tip for the Explanatory output style, shown when you ask Claude for explanations\n- Fixed long freezes at startup and after reading or editing files when a CLAUDE.md file holds a very long list item\n- Fixed interrupting Claude not taking effect until a timeout while an MCP server had not answered a resource read or a skill was still downloading\n- Fixed standard-context sessions stopping with \"Usage credits required for 1M context\" when a request ran over 200K tokens; Claude Code now compacts the conversation and continues\n- Fixed Write and Edit stalling for up to 5 seconds after they ran, and reporting 0 lines changed, when changing thousands of lines in a file\n- Fixed subagents being unable to use MCP tools from servers that finish connecting after the subagent starts\n- Fixed Claude seeing stale MEMORY.md and CLAUDE.md content right after automatic compaction when those files were edited earlier in the session\n- Fixed `claude -p` and SDK sessions saving transcript messages out of order or keeping messages that were taken back\n- Fixed `SubagentStop` hooks running about twice a minute for each running subagent instead of once when it finishes\n- Fixed the @ file picker ignoring `.ignore`/`.rgignore` negation rules that re-include git-ignored files\n- Fixed a subagent's isolated worktree being removed while a background subagent it started was still working in it\n- Fixed background agents in auto mode that wait on their own shells starting a new main conversation turn on every wake\n- Fixed the Bash tool description claiming the working directory always persists between calls\n- Fixed the environment block naming a shell commands don't run in, such as fish when the Bash tool uses zsh\n- Fixed `claude mcp add`, `claude mcp remove` and `/mcp` naming the current folder instead of the project entry in `~/.claude.json` that holds a local-scope server when run below a repository root\n- Fixed `claude mcp list` and `claude mcp get` showing the error code twice on failed-connection lines (for example `ENOENT: ENOENT: …`)\n- Fixed Remote Control sessions staying on \"Connecting\" for about two minutes when a network proxy blocks a startup request\n- Fixed messages that Claude sends to a cloud or Remote Control session appearing as your own message in the Claude mobile apps\n- Fixed Claude not being told the cause when a file attached to a message sent over Remote Control or to a cloud session could not be saved because the disk was full, or that a message's attachments past the first 20 were left out\n- Fixed WebFetch and WebSearch hanging on a stalled response in Cowork cloud sessions; an unfinished request now fails after 300 seconds\n- Fixed a background session that crashed between turns not being restarted while it was attached, pinned, or had a scheduled task or wake-up set\n- Fixed the \"background service did not respond\" error suggesting the disabled `claude daemon restart`; it now suggests `claude daemon stop --any` and says it ends background sessions\n- Fixed `claude respawn ` starting the background service before reporting that no background session matches the id\n- Fixed `/effort` not warning about a prompt cache miss in plan mode when the plan model differs from the session model\n- Fixed `/ide` saying the VS Code extension was installed before the install finished or when it failed\n- Fixed the Write tool's file preview skipping rows and miscounting hidden lines when a line is wider than the terminal\n- Fixed ↑ in an agent's chat tab recalling a message that was still waiting to be delivered, so resending it sent a second copy\n- Fixed Cowork cloud sessions losing their connectors and most tools after a restart when a plugin or your settings named an `agent`; Cowork cloud sessions now ignore that setting\n- Fixed agent teams sessions showing an empty task list when coming back with `--resume`, `--continue`, `/resume` or `--session-id`, including after `/clear` or a crash, and `/branch` writing to the original session's list\n- Fixed pasting text that mentions an image file, such as `! open /tmp/shot.png` or `/review look at /tmp/shot.png`, attaching the image and dropping its path from the prompt\n- Fixed the feedback draft card showing its 1/2/0 and Esc shortcuts while the prompt has text, when those keys act on the prompt instead of the card\n- Fixed a lone backslash in quotes or brackets, like `\"\\\"` or `(\\)`, disappearing from Claude's responses\n- Fixed agent teammates compacting their history when `DISABLE_COMPACT` is set\n- Fixed the rewind menu offering \"Summarize from here\" and \"Summarize up to here\" when `DISABLE_COMPACT` is set\n- Fixed a finished `/code-review`, or another skill that runs in a sub-agent, running a second time when a cloud or background session restarts\n- Fixed long hidden thinking being cut off as idle on Google Vertex AI, Microsoft Foundry and Claude Platform on AWS, where the endpoint sends thinking progress updates\n- Fixed `/ide` saying it had installed the JetBrains plugin when nothing was installed\n- Fixed Claude Pro and Max subscribers being told to ask their admin when their subscription can't be used; the message now points to billing settings\n- Fixed the diff pane opening by itself after an edit in wide fullscreen terminals when it had nothing to show\n- Fixed `/mcp` showing a remote server as failed after \"Clear authentication\" when the server works without sign-in\n- Fixed `/mcp` showing \"authenticated\" for a remote server that Claude Code sends no credentials to\n- Fixed a `--plugin-dir` folder of plugins loading as one plugin when an empty `.mcp.json` was at its top\n- Fixed `/usage` never showing large prompt-cache misses under \"What's contributing to your limits usage?\"\n- Fixed status line links staying plain text in background sessions after you open them from a terminal that supports links\n- Fixed the /rewind confirmation saying the conversation \"will be forked\" when the later messages are removed from the conversation\n- Fixed the /rewind warning that wrongly said manual and Bash edits are never affected by a code restore\n- Fixed plan approval in screen reader mode sending feedback you had dismissed with Escape\n- Fixed Claude Code retrying requests the API marked not to retry, which could hold a turn for minutes or, in unattended retry mode (`CLAUDE_CODE_RETRY_WATCHDOG`), indefinitely\n- Linux: Fixed sandboxed Bash commands failing with `bwrap: Can't create file` when a `--plugin-dir` folder was also an added directory and `permissions.blockReadsOutsideWorkingDirectories` was on\n- Self-hosted runner: Fixed a session failing to start when a rate limit (HTTP 429, or a git wrapper that exits 75) blocks an added read-only repository; it now starts without that repository\n- Improved startup time for Pro and Max accounts by skipping two network requests on launches within an hour of the last check\n- Improved `/teleport` and `claude --teleport` to warn when a compacted cloud session loads from its last compaction, so the messages it summarized aren't in the local copy\n- Improved the messages shown when a background session's process exits: they no longer promise a restart that isn't coming, and they say how to resume the session\n- Improved artifacts with several views: Claude now routes each view on the link's `#name` and no longer says the address bar stays the same as you switch views\n- Improved shell commands that reach their timeout: the result now shows the output so far and says the command is still running in the background\n- Improved compaction: when the model's reply has no summary in it, Claude Code now usually asks for the summary once more before it replaces the conversation\n- Improved the Artifact tool's choice between a page and a document: explainers and visual or interactive work become artifact pages; documents are for writing people keep editing or pass around\n- Improved startup time for launches whose only arguments are options and their values, such as `claude --model opus`\n- Improved the \"Connection dropped\" API error: it now says where to look first (the proxy or gateway in use, else VPN or firewall; Anthropic API only, Bedrock, Vertex and Foundry are unchanged)\n- Improved screen reader mode: deleting a rule in /permissions says \"Deleted allow rule …\" right away\n- Improved the message shown when a pasted sign-in code is refused: it now says the code may have expired or been used, and to sign in again\n- Improved Slack connector sends: Claude now checks a channel's topic for posting rules before messaging a channel you didn't name\n- Improved screen reader mode: Claude's questions are listed as \"Questions: Color (answered), Pages\", without arrows or symbols\n- Changed `ultrathink` in the interactive terminal to run its turn at xhigh effort on Opus 5.5, Sonnet 5.5, Haiku 5.5 and Fable 5.1 through Anthropic's API; typed while Claude is working, it raises the rest of that turn\n- Changed the `ultrathink` rainbow to appear only where the keyword can raise effort, and not when the word is quoted or part of a file path\n- Changed Ctrl+D in agent view to match the prompt: on an empty input, pressing it twice exits\n- Changed `--output-format json` and `stream-json` output to write DEL, C1 control and Unicode format characters inside strings as `\\uXXXX` escapes; parsed values are unchanged\n- Changed model names and IDs to drop the `[1m]` suffix and its label on models where the suffix has no effect; the suffix is still accepted\n- Changed startup warnings about permission rules in settings files to show once per user until the rule changes\n- Changed `/code-review` to tell Claude to put the effort level first and use max only when asked\n- Changed `DISABLE_COMPACT` in settings files and in a mod's `$.env.set` so they can only turn compaction off, not back on\n- Changed Claude Code on Bedrock, Mantle, Vertex, and Foundry to load model settings from a signed file on downloads.claude.ai; set CLAUDE_CODE_MODEL_CATALOG=off to turn this off\n- Changed sessions that set `CLAUDE_CODE_SYNC_SKILLS` with feature-flag fetching off to reuse a claude.ai skills list up to 10 minutes old that another session on the machine fetched\n- Changed clicks on scrollbar arrows and bars in fullscreen lists to act when the mouse button is released, so moving off the scrollbar before letting go cancels the click\n- Changed `claude purge` to say it deletes data only on this computer, not anything stored by Anthropic\n- [VSCode] Added syntax coloring to code blocks in Claude's replies, in light, dark and high contrast dark themes\n- [VSCode] Added a \"Running UserPromptSubmit hooks\" spinner status and screen reader announcement for slow UserPromptSubmit hooks\n- [VSCode] Fixed custom skills and custom slash commands sent from the VS Code or JetBrains panel leaving out the open file or selected lines that ordinary messages include (anthropics/claude-code#102799)\n- [VSCode] Fixed the extension host freezing while the login shell ran its start-up files to read PATH on macOS and Linux\n- [VSCode] Fixed clicking an image in a tool result, or closing its preview, also opening the result's text in an editor tab\n- [VSCode] Fixed voice dictation continuing to record after a message was sent with the Send button; sending now stops dictation first, as pressing Enter already did\n- [VSCode] Changed the extension to start Claude Code sessions with `DISABLE_TELEMETRY` set while VS Code's telemetry setting is off, so they send no usage metrics or error reports and fetch no feature flags\n- [VSCode] Changed the session list side bar to load Web sessions when the Web tab is first opened, not at startup\n- [Cloud sessions] Fixed routines in Anthropic-hosted environments staying locked after their owner left the organization and rejoined; the owner can now turn them back on\n- [Cloud sessions] Fixed a failed routine API token delete or regenerate showing nothing if the edit dialog had already closed; it now shows an error toast\n- [Cloud sessions] Fixed cloud environment dialogs, including the admin dialog, accepting duplicate names; they now refuse a name another listed environment already has\n- [Claude Tag] Added a Skills view to Claude Tag analytics showing how often Claude runs each attached skill in Slack channels and which go unused, with Usage links in admin settings\n- [Claude Tag] Improved Claude Tag routines that run in a new session: a run with nothing to report can now end without posting a throwaway message to the channel\n- [Claude Tag] Changed Claude Tag admin settings to show a lock instead of # for private Slack channels that your own Slack account can see\n- [Code Review] Improved Code Review's check run to say no further automatic review will start when the model still can't analyze a change on the automatic retry\n- [Code Review] Improved Code Review reliability: a review whose session fails to start because of a transient server fault is now retried once automatically, and its check run says so",
          "releaseNotesUrl": "https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md"
        },
        "2.1.325": {
          "releaseNotes": "## 2.1.325\n\n- Fixed a security issue in how zstd-compressed responses are decoded\n- Added a spinner tip in VS Code and similar integrated terminals about re-running a notebook cell, shown once Claude has read or edited a Jupyter notebook\n- Added a line under the error shown when your organization's policy blocks a request, saying how to continue: run `/rewind` and change the message, or run `/clear`\n- Added a note for Claude when a sandboxed `git checkout`, `git stash` or autostash pull cannot update protected files such as those in `.claude`\n- Fixed `/security-review` and skills' inline git commands stopping with an error in worktrees of bare repositories, `--separate-git-dir` checkouts and Android `repo` checkouts\n- Fixed subagents with their own model being moved to the plan-mode model when the model setting is `opusplan` or `haiku`\n- Fixed subagents on a different model sizing file reads and MCP results with the main session's model\n- Fixed sessions on many third-party gateways and Foundry stopping with a context length error on every turn instead of compacting\n- Fixed recent turns sometimes going missing from a resumed session after Claude Code stopped without a clean exit\n- Fixed shell commands running in the launch directory after the working directory was deleted; the command now fails with a message and can be re-issued\n- Fixed an approved plan edit being lost when the `plansDirectory` folder can't take it: the plan is now saved in the default plans folder, and a warning says where and why\n- Fixed a saved `sonnet[1m]` model setting being rewritten on a new install to a model id the API rejects\n- Fixed focus view hiding the reply to your prompt when a scheduled task replied after it\n- Fixed the prompt sometimes missing from a background subagent's view when fullscreen is off\n- Fixed long options in lists and permission prompts being partly overwritten when they wrap, and first-run screens losing lines on narrow terminals\n- Fixed startup warnings about permission rules and the \"N MCP servers need authentication\" notice being recorded as seen when they were scrolled out of view\n- Fixed the welcome header showing control characters or splitting across lines when an agent's name or the working folder contains them or a line break\n- Fixed the red error shown when Claude tries a command only you can run: a dim line now says it runs only when you type it at the prompt\n- Fixed `/stats` showing an Active days total that was one day too high\n- Fixed `/insights` saying a report was ready when no session qualified for analysis, and writing two values into its HTML report without escaping them\n- Fixed `/voice` saying voice mode changed when managed settings, `--settings`, or the project's `.claude/settings.json` or `.claude/settings.local.json` kept it as it was; it now says what holds it\n- Fixed the IDE welcome dialog showing Cmd+Esc for Quick Launch on Windows and Linux\n- Fixed Slack app tips showing when your organization's policy denies cloud sessions\n- Fixed `claude purge` hanging silently when there is no terminal to read keys from, and its project picker and `-i` prompts ignoring the keyboard when stdin is piped\n- Fixed `claude plugin eval --output-dir ''` writing the report into the current folder; it now exits with an error\n- Fixed `claude -p` text output on a terminal passing control sequences other than text styling; pipes and files are unchanged\n- Fixed leftover `.oauth_refresh.lock.owner.tmp.*` files piling up in the config directory\n- Fixed `/fast` saying \"Fast mode has been disabled by your organization\" under the keyless Console sign-in, where Claude Code had not asked the server\n- Fixed `/model` saying that your organization restricts a model when Claude Code could not check that, for example with no network\n- Fixed \"Sign in with your Console account\" in `/login` replacing your existing login when you pressed Esc right after the browser step\n- Fixed the browser showing the sign-in success page in some cases where sign-in failed or was canceled\n- Fixed `claude auth status` and other short commands leaving a lock behind on a Console profile, which made the next session hang for about a minute\n- Fixed background sessions started on your claude.ai login using (and billing) an API key or token from the shell that started the background service\n- Fixed more cases of a session moving to another sign-in in the background; these moves are now refused, with a message saying what works\n- Fixed a second Enter in the exit dialog stopping background work after the move to the background was refused\n- Fixed token counting on Amazon Bedrock sending the conversation to Bedrock when the `allowedProviders` managed setting does not allow it\n- Fixed AWS `credential_process` helpers and Google Cloud default credentials failing when Claude Code is started without a `HOME` environment variable\n- Fixed a session sometimes going back to an earlier permission mode after a subagent's plan was approved\n- Fixed one invalid value in an Agent SDK `applyFlagSettings()` call silently discarding all settings from earlier calls; a call that would do this is now refused with an error\n- Fixed sessions showing as waiting for input when a finished pull request only needed your own review or merge\n- Fixed an unrecognized `teammateMode` settings value being ignored without a warning: `claude -p`, the startup warning and `claude doctor` now list it as a skipped entry (still not applied)\n- Fixed `--worktree` skipping a `WorktreeCreate` hook from a plugin in `CLAUDE_CODE_PLUGIN_SEED_DIR` on the first run in a new home directory\n- Fixed brief-mode sessions, such as Dispatch, sending a reply again after the turn had already replied\n- Fixed Claude saying a working Atlassian, Asana or Sentry connector had failed in cloud sessions when a plugin listed it at a different URL\n- Fixed Claude Desktop and SDK sessions listing a folder's own MCP servers (`.mcp.json`, local) as host-added or not at all, and not connecting WebSocket ones, after a folder move or pre-warmed start\n- Fixed `/mcp` still listing a plugin's MCP server after a plugin reload removed it while it was connecting\n- Fixed an MCP server staying \"needs authentication\", and its `mcp_tool` hooks being skipped, after a token refresh that was refused only for a moment\n- Fixed MCP elicitation requests being cancelled without asking in headless mode after a server's connection was replaced during a tool call\n- Fixed MCP tool calls from an SDK host answering \"Not connected\" after a tool call had reconnected the MCP server\n- Fixed an MCP task getting stuck after its question was closed with Esc or asked again: the footer now says it needs your input, and Enter in `/tasks` shows the question again\n- Fixed background MCP tasks that stopped updating after another call to the same server lost the connection, when a later call reconnects\n- Fixed a background MCP task's question opening over a message you were still typing; it now waits until you send or clear the draft, and the spinner and turn timer keep running\n- Fixed `worktree.sparsePaths` and sparse plugin and marketplace clones leaving out the repository's root files on older git versions, such as 2.34\n- Fixed self-hosted runner sessions with several repositories being unable to use a repository added mid-session\n- Fixed Claude asking for permission before reading your own artifact or its data\n- Fixed deny and ask permission rules and hooks for the Artifact tool not applying in some cloud sessions\n- Fixed Code Mode scripts ignoring a worktree entered with `EnterWorktree`, writing `~` paths into the project, and leaving `/mcp` showing an MCP server as connected after its sign-in expired\n- Fixed words typed with a Yes at a permission dialog or plan approval not reaching Claude in Code Mode\n- Fixed Claude starting work by itself when you resumed a session that ended during a Code Mode script; it now waits for your next prompt\n- Fixed a missing OpenTelemetry `user_prompt` event for a message sent while tool calls run. The event has `delivery.mode: \"mid_turn\"` and the running turn's `prompt.id`\n- Fixed the OpenTelemetry `user_prompt` event leaving out earlier messages' text when queued messages merged into one turn in VS Code, or when one message had an image\n- Fixed a slash command's `allowed-tools` grants applying to background agents woken during or after its turn\n- Fixed `/feedback` and `/bug` to upload other sessions only when they were recorded by the signed-in account or organization\n- Fixed relative deny and ask permission rules (e.g. `Read(./.env)`) no longer covering the project after a `cd`; they now also apply in added directories\n- Fixed deny and ask permission rules starting with `mcp__plugin_*_` missing a plugin's MCP server or tool spelled in another letter case\n- Fixed deny rules not being applied to a permission approval that arrives after Claude Code restarts, in self-hosted runner and `claude remote-control` sessions\n- Fixed a case where a committed `.claude/settings.local.json` could be treated as the user's own when Claude Code was started in certain subfolders of a repository\n- Fixed some deny and ask rules not applying to certain Bash commands\n- Fixed a gap in Bash permission checks where some compound commands could run without asking; these now ask for permission\n- Fixed a case where a Bash allow rule could run a different program than the one it names\n- Fixed a connector tool's approval prompt in cloud sessions being answered automatically while plugins were still loading\n- Fixed some subagents changing an artifact that people outside your organization can see, or uploading files to it, without asking first when an allow rule is set or uploads were approved earlier\n- Fixed some artifact publishes skipping the confirmation for pages that people outside your organization can see when \"don't ask again\" had been chosen for Artifact\n- Fixed auto mode judging only the first change to an artifact that people outside your organization can see; its yes now covers that change alone\n- Fixed a managed `strictPluginOnlyCustomization` lock on agents and skills not taking effect in sessions that were already running\n- Fixed sandboxed commands being able to write to the native updater's download folder in some cases\n- Fixed a case where the Bash sandbox did not fully protect a worktree's settings and hooks\n- Fixed a case where the Bash sandbox did not fully protect a linked worktree's shared git folder\n- Fixed `/teleport`'s stash choice in some unusual git states: it now stops and says what to do\n- Windows: Fixed a start-up stall that could last about a second when a PATH entry sits under a folder your account cannot open\n- Fixed `/resume` on Windows refusing or hiding sessions whose folder was recorded with a different drive-letter case or slashes\n- Fixed an in-session `/resume` on Windows dropping a project's saved trust when the session was recorded with a different drive-letter case\n- Linux: Fixed sandboxed Bash commands failing with `bwrap: Can't create file` when the working directory was below an `allowRead` folder inside a `denyRead`, such as under a symlinked home directory\n- Fixed Claude Desktop's third-party deployments staying on \"Stopping\" until a token renewal finished (once it includes this version)\n- Improved subagents cut off at the output token limit: they are now asked for the whole answer again, more briefly, instead of returning only its end\n- Improved startup with a keyless Console sign-in or other Anthropic profile login: a token that is still valid is read without waiting for the credentials lock\n- Improved the account email check: it now also refuses your email as a client's identity in scripts a command runs, file writes, web fetches and MCP calls\n- Improved the `HTTPS authentication failed` message for private plugin marketplaces: it now says git's terminal prompts and askpass programs are disabled, and it also appears with newer git versions\n- Improved the add-marketplace confirmations, plugin recommendation prompts and plugin install warning to say that plugins can run code on your computer, with access to your files and shell\n- Improved the `claude --desktop` sign-in error to name the API key, provider or setting that stops a Claude account sign-in from working\n- Improved the `/voice` \"No audio detected\" message on macOS and Windows: it now says where to pick your microphone\n- Improved MCP tasks: Claude is now told when a task is waiting for your answer, and can point you to `/tasks`\n- Improved `claude remote-control`: it now exits with status 4 when it stops by itself (single-session runs still exit 0) and 69 when it can't register, so a service manager can start it again\n- Improved the messages shown when a background session can't use its session's API key or token: they no longer suggest adding the key to settings\n- Improved the bundled dataviz skill's part-to-whole advice for static images and for parts with a natural order, such as age bands\n- Changed sandboxed Bash commands to follow the normal permission flow by default; set `sandbox.autoAllowBashIfSandboxed: true` to keep running them without prompts\n- Changed managed settings that turn the sandbox on: to keep commands running without prompts, set `sandbox.autoAllowBashIfSandboxed: true` in your highest-ranking managed source\n- Changed read-only git commands to ask first in a repository that isn't the project's or one you trusted; name it with `--add-dir`, not the `additionalDirectories` setting, to run them without prompts\n- Changed scheduled tasks and `/loop` to ask before running a skill that declares `allowed-tools` or hooks; add `Skill(name)` to `permissions.allow` to run it unattended\n- Changed \"Always allow\" in Desktop, IDE and SDK hosts: a rule alone is offered only when saving it would allow that command again, so a scheduled task that relied on one can now wait for you\n- Changed the sandbox to refuse sandboxed writes to `.claude` settings, skills, agents, commands and hooks in added directories, as it does in the launch folder\n- Changed worktree isolation: an isolated worktree session or agent is now refused `git bisect run`, `git maintenance register|start` and `scalar`'s set-up commands, and is told what still works\n- Changed plugin MCP bundles (`.mcpb`, `.dxt`) to unpack under the plugins directory, not `.mcpb-cache` in the plugin's folder, so read-only plugin folders load; one fetched by URL downloads again once\n- Changed plugins of a remote marketplace that managed settings declare, enable and list in `prependPlugins` or `appendPlugins` to count as the organization's; `pluginDigests` is deprecated and ignored\n- Changed plugin loading to skip, and `claude plugin validate` to report, some unsafe paths and links in a plugin's folder\n- Changed nested skill loading: `.claude/skills` folders in `--plugin-dir` plugins no longer load from a session started above them; start Claude Code in the plugin folder instead\n- Changed EnterWorktree to refuse a `WorktreeCreate` hook path that goes through a symlink inside the project; have the hook print the real path\n- Changed tmux and iTerm2 teammates, and new sessions from the agents view opened with ←, to start in the session's folder instead of where the shell last ran `cd`\n- Changed prompt suggestions in the terminal to refresh less often after 8 turns in a row started by background or scheduled tasks, saving usage until you press a key or return to the terminal\n- Changed Esc on a background MCP task's question to \"answer later\": nothing is sent to the server, and the question stays in `/tasks`\n- Changed `CLAUDE_CODE_MAX_CONTEXT_TOKENS` to also set the context window of unrecognized model IDs that start with `claude-`, such as a gateway's `claude-sonnet-latest`\n- Changed `/login` to ask for permission to change your privacy settings\n- Changed `/cost`, `$.session.usage()`, `--max-budget-usd` and the cost and token metrics to count a mod's `$.model.complete` and `$.model.classify` calls\n- Changed the programs that Claude Code's sandbox starts for its own use, such as its network bridge, to run without Claude Code's sign-in tokens and API keys in their environment\n- Changed ripgrep, local git commands and the sandbox runtime's own helper programs to run without the mTLS client key's passphrase in their environment\n- Remote Control: Changed `/resume` and `/teleport` to disconnect first when the connected session has a share link, or when that can't be checked; run `/remote-control` to connect again\n- Changed Claude Code on the web, cloud scheduled tasks and Cowork cloud sessions to start despite `sandbox.failIfUnavailable`: the hosted container has no command sandbox\n- Changed requests for settings, permission rules, hooks or status over a cloud or self-hosted session's connection to return less or be refused; what applies in the session is unchanged\n- Changed `claude -p` with no cached account data to wait for that data before its first request, so a first run in a clean environment can start a few seconds later\n- Changed Claude's instructions to keep files you'll want out of its temporary scratchpad folder, which can be cleared\n- Changed marketplace `ref` to accept the full ID of any commit on a branch or tag; clients before this version can't clone such a pin, so a marketplace pinned this way stops loading there\n- Changed plugin marketplace and plugin downloads to use a CONNECT tunnel when `ALL_PROXY` is the only proxy set; a proxy that refuses CONNECT now fails them\n- Changed `-p` and SDK runs in a worktree or submodule mounted into a container to apply `.claude/settings.local.json` allow rules only once the folder is trusted\n- Changed self-hosted runners to refuse a session whose session folder or repository path is a symbolic link, other than a `checkout` hook's checkout\n- Removed \"ask your admin to raise it\" from spend limit and shared budget errors in cloud sessions and under Remote Control\n- [VSCode] Added prompt suggestions wherever the terminal shows them: Tab accepts the suggested next prompt; `promptSuggestionEnabled: false` in Claude Code's settings.json turns them off\n- [VSCode] Added a Console sign-in that creates no API key\n- [VSCode] Added a field to paste the redirect URL when signing in to an MCP server from the panel in SSH, WSL and container windows\n- [VSCode] Fixed the model picker's check mark staying on the old model after Claude Code restarted on another model or the model was switched over Remote Control\n- [VSCode] Fixed the effort selector offering levels above the effort cap set by your organization or the `maxEffortLevel` setting\n- [VSCode] Fixed the sign-in screen offering sign-ins that the managed `allowedProviders` setting refuses\n- [VSCode] Fixed the permission prompt for MCP tools not saying why Claude Code asks when a safety check raises the question\n- [VSCode] Fixed the message for organization settings that couldn't load saying to run a command again; it now says to try again, matching the tab's Retry link\n- [VSCode] Improved the note shown for an untrusted folder: it now says why the extension is off and how to turn it on\n- [VSCode] Improved the error shown when the system refuses to run Claude Code: it now says your IT team can allow a blocked program\n- [VSCode] Improved the sign-in card to say what to do when the browser shows a connection error for localhost\n- [VSCode] Changed the install link's marketplace confirmation button to \"Trust marketplace and continue\"\n- [Claude Code on the web] Fixed new cloud sessions cutting MCP tool descriptions loaded through tool search at 4,096 characters; the limit is now 16,384, as in other Claude Code sessions\n- [Claude Tag] Fixed artifact links pasted in Slack getting no card when the poster's Claude sign-in had expired in a workspace their organization doesn't manage; a plain card now appears",
          "releaseNotesUrl": "https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md"
        }
      },
      "versionUpdatedAtUnixSeconds": 1794600445,
      "versionUpdatedAtSource": "official"
    },
    "opencode": {
      "version": "1.19.5",
      "channels": {
        "beta": "0.0.0-beta-202608110357",
        "brendan-cli-codesign": "0.0.0-brendan-cli-codesign-202603250532",
        "ci": "0.0.0-ci-202601291809",
        "dev": "0.0.0-dev-202611092046",
        "latest": "1.19.5",
        "latest-0": "1.0.142",
        "latest-1": "1.1.4",
        "next": "0.0.0-next-202606270058",
        "snapshot-cleaner-view-subagents": "0.0.0-snapshot-cleaner-view-subagents-202512310424",
        "snapshot-current-agent-animation-color": "0.0.0-snapshot-current-agent-animation-color-202601160010",
        "snapshot-e2e-tests": "0.0.0-snapshot-e2e-tests-202601191506",
        "snapshot-file-tree": "0.0.0-snapshot-file-tree-202601251233",
        "snapshot-kmdr-debug": "0.0.0-snapshot-kmdr-debug-202601122237",
        "snapshot-lander-tui": "0.0.0-snapshot-lander-tui-202601070150",
        "snapshot-layout": "0.0.0-snapshot-layout-202601191714",
        "snapshot-learn-agent": "0.0.0-snapshot-learn-agent-202601011707",
        "snapshot-memory": "0.0.0-snapshot-memory-202603261432",
        "snapshot-minimal-interrupt": "0.0.0-snapshot-minimal-interrupt-202601051453",
        "snapshot-node-logic": "0.0.0-snapshot-node-logic-202602200818",
        "snapshot-node-pty": "0.0.0-snapshot-node-pty-202602201113",
        "snapshot-opentui-upgrade": "0.0.0-snapshot-opentui-upgrade-202601260132",
        "snapshot-plz-help": "0.0.0-snapshot-plz-help-202512122319",
        "snapshot-pnpm": "0.0.0-snapshot-pnpm-202511302105",
        "snapshot-proxy": "0.0.0-snapshot-proxy-202512080622",
        "snapshot-selection": "0.0.0-snapshot-selection-202602061133",
        "snapshot-session-perf": "0.0.0-snapshot-session-perf-202601082348",
        "snapshot-settings": "0.0.0-snapshot-settings-202601070200",
        "snapshot-sort-diffs": "0.0.0-snapshot-sort-diffs-202601052145",
        "snapshot-spawn-server-logs": "0.0.0-snapshot-spawn-server-logs-202603052132",
        "snapshot-start-screen-tips": "0.0.0-snapshot-start-screen-tips-202512231927",
        "snapshot-symlink-fix": "0.0.0-snapshot-symlink-fix-202601130539",
        "snapshot-terminal-title-animation": "0.0.0-snapshot-terminal-title-animation-202512231827",
        "snapshot-thinking-toggle": "0.0.0-snapshot-thinking-toggle-202512300328",
        "snapshot-thinking-toggle-animated": "0.0.0-snapshot-thinking-toggle-animated-202512291322",
        "snapshot-timeline": "0.0.0-snapshot-timeline-202602192036",
        "snapshot-tui-plugins": "0.0.0-snapshot-tui-plugins-202603271347",
        "snapshot-virtualized-diffs": "0.0.0-snapshot-virtualized-diffs-202602121142",
        "snapshot-windows-desktop": "0.0.0-snapshot-windows-desktop-202602121945",
        "tui-v2": "0.0.0-tui-v2-202606261840"
      },
      "npmPackage": "opencode-ai",
      "releaseNotes": "## Core\r\n\r\n### Bugfixes\r\n- Failed TUI worker requests now return an error instead of leaving the caller hanging. (@Nowaker)\r\n\r\n**Thank you to 1 community contributor:**\r\n- @Nowaker:\r\n  - fix(opencode): answer a failed TUI worker request instead of hanging (#54936)",
      "releaseNotesUrl": "https://github.com/anomalyco/opencode/releases/tag/v1.19.5",
      "channelReleaseNotes": {
        "1.1.4": {
          "releaseNotes": "### Highlights\n\n- **Background Subagents by Default**: Subagents now return immediately, continue in the background, and report back whenever they become idle. You can keep working in the parent session while multiple subagents run concurrently. ([#63382](https://github.com/anomalyco/opencode/pull/63382))\n- **Quieter Transcripts by Default**: The TUI now summarizes each run of tool calls and thoughts into one collapsible activity row, so the answer is easier to follow. To see every step again, set **Verbosity** to `medium` or `high` in settings, or set `session.verbosity` in your TUI config; an existing setting is kept. ([#63207](https://github.com/anomalyco/opencode/pull/63207))\n- **Jump to an Earlier Prompt**: In the desktop app, open **Jump to message** from the command palette or press `Cmd+Alt+G` (`Ctrl+Alt+G` on Windows and Linux) to search prompts across the current session and jump directly to one. ([#63585](https://github.com/anomalyco/opencode/pull/63585))\n\n### Core\n\n#### Improvements\n\n- Subagents now always run in the background, return their session ID immediately, and report results to their parent whenever they become idle. ([#63382](https://github.com/anomalyco/opencode/pull/63382))\n- Added experimental support for MCP events, behind the `mcp_events` flag. ([#63254](https://github.com/anomalyco/opencode/pull/63254), [#63261](https://github.com/anomalyco/opencode/pull/63261), [#63269](https://github.com/anomalyco/opencode/pull/63269))\n- Shell commands now survive server handoffs and keep their output when interrupted.\n- Added experimental support for moving a shell command to the background when its timeout expires, behind the `shell_timeout_background` flag. With the flag on, an explicit timeout on a background command stops it. ([#63024](https://github.com/anomalyco/opencode/pull/63024), [#63703](https://github.com/anomalyco/opencode/pull/63703))\n- Local Windows shell commands now run through the process daemon.\n- Added support for freeform tool input on compatible models.\n- Added LM Studio decision-model support.\n- Agents are now told when their session is a fork. Thanks @hasta84. ([#63235](https://github.com/anomalyco/opencode/pull/63235))\n- Tool output truncation now keeps the beginning of the output and preserves a usable preview if the full output cannot be saved.\n- Tail reads no longer load the entire file into memory.\n- Providers can present a client certificate for gateways that require mutual TLS. Set `settings.tls` with `cert`, `key` and an optional `passphrase` on the provider; values accept `{file:}` and `{env:}` like `apiKey`. ([#61832](https://github.com/anomalyco/opencode/pull/61832))\n- When a subagent goes idle while its own background work is still running, its report to the parent now says it is still running, so the parent waits for the final report instead of treating the partial answer as done. ([#63675](https://github.com/anomalyco/opencode/pull/63675))\n- Code Mode gets simpler structured results from file and skill tools: `write` and `edit` return their confirmation as a string, `patch` returns an empty result, and `skill` returns the skill's directory and content. ([#63616](https://github.com/anomalyco/opencode/pull/63616), [#63635](https://github.com/anomalyco/opencode/pull/63635), [#63618](https://github.com/anomalyco/opencode/pull/63618), [#63623](https://github.com/anomalyco/opencode/pull/63623))\n\n#### Bug fixes\n\n- Fixed case-only file renames in patches on case-insensitive filesystems.\n- Fixed stale thinking being retained after Claude Agent prompts or tools change.\n- Fixed directly driven child sessions not resuming after a restart.\n- Fixed plugin replacement stopping when cleanup of an earlier plugin fails.\n- Fixed MCP OAuth refreshes and localhost redirects when a server rewrites `127.0.0.1`.\n- Fixed saved API keys being omitted from local-model discovery.\n- Local model discovery (Ollama, LM Studio, vLLM) waits up to 15 seconds per request instead of 1, so remote or tunnelled endpoints list their models, and a slow endpoint no longer delays other endpoints or config reloads. ([#63700](https://github.com/anomalyco/opencode/pull/63700))\n- In Code Mode, calling a namespace as if it were a tool now suggests up to three real tools under it. ([#63697](https://github.com/anomalyco/opencode/pull/63697))\n- Fixed retryable provider streams losing completed work when interrupted.\n- Fixed GitHub Copilot requests using the wrong endpoint before models finish loading.\n- Fixed exhausted request rate limits being treated as terminal. Thanks @Kyle-j-bush. ([#59816](https://github.com/anomalyco/opencode/pull/59816))\n- Fixed LM Studio models with a null context length and accepted decision-type models. Thanks @tomzhu1024. ([#56214](https://github.com/anomalyco/opencode/pull/56214))\n\n### TUI\n\n#### Improvements\n\n- Transcript verbosity now defaults to `low`, which summarizes each run of tools and thoughts into one activity row. A `session.verbosity` you already set is kept. ([#63207](https://github.com/anomalyco/opencode/pull/63207))\n- Session IDs found in messages can now be opened directly.\n- Activity tabs are clickable and open the correct view.\n- Shell mode has its own prompt color under the new designs.\n\n#### Bug fixes\n\n- Restored pasted text when undo brings back its placeholder.\n- Restored the live draft after browsing prompt history.\n- Fixed copying a paste from within the prompt selection.\n- Preserved the Mini composer caret when closing the command palette.\n- Prevented image bytes from being retained in transcript storage when image previews are disabled.\n- Fixed paste-chip contrast across light and dark themes.\n- Fixed plugin-provided themes updating live.\n- Session lists now open at the top rather than at the current session.\n- Mini scrollback now shows the subagent card instead of obsolete launch instructions.\n\n### Desktop\n\n#### Improvements\n\n- Added **Jump to message** to the command palette with `Cmd+Alt+G` / `Ctrl+Alt+G`, including prompts not yet loaded in the timeline. Thanks @usrnk1. ([#63585](https://github.com/anomalyco/opencode/pull/63585))\n- Added the experimental **Recent** sessions sidebar, with cross-server recency, local pins, reordering, and standard session-row actions.\n- Recent sessions are limited to the last seven days and 30 rows, and can be hidden or muted.\n- Added an experimental customizable sessions sidebar.\n- Mermaid diagrams can now be maximized for zooming and panning. ([#59250](https://github.com/anomalyco/opencode/pull/59250))\n- Added `Alt+Enter` to place a follow-up first in the queue and `Mod+Enter` to steer the next queued prompt.\n- Holding the modifier key now shows tab shortcut numbers.\n- Each server’s terminal shell can be selected from its menu.\n- Added a free-limit panel in place of the composer when applicable.\n- Session IDs are easier to find and copy.\n\n#### Bug fixes\n\n- Recent sessions now keep stable recency ordering through list reloads, renames, and completed runs.\n- Fixed browser panes not retrying after server plugins finish loading.\n- Fixed mention suggestions being recreated while typing.\n- Fixed SSH prompts failing to advance or close after connection.\n- Fixed pasted provider-auth redirect URLs being rejected.\n- Restored message footers in the New timeline.\n- Fixed links whose labels contain inline code.\n- Fixed the desktop main process freezing while probing the login-shell environment.\n- Fixed the drag region after changing layout direction.\n- Fixed vertical-tab previews snapping to the wrong tab.\n- Fixed the file-tree sidebar opening animation.\n- Fixed pairing QR-code contrast in light themes. Thanks @ssskay. ([#63220](https://github.com/anomalyco/opencode/pull/63220))\n- Fixed activity-tab navigation and click handling. Thanks @OpeOginni. ([#60168](https://github.com/anomalyco/opencode/pull/60168))\n\n### SDK\n\n#### Improvements\n\n- Event subscriptions can now receive `experimental.mcp.event` events from MCP event subscriptions.\n- Model capability schemas now advertise supported freeform tool-input formats.\n- Session throughput is now measured from the first streamed token.\n- Session creation documentation now clarifies the `parentID` field.\n\n### Extensions\n\n#### Improvements\n\n- Promise-based tools can cooperatively stop through `ToolContext.signal`.\n- Added the experimental `session.fork` hook.\n- Promise plugin cleanup failures no longer prevent subsequent plugin replacements.\n- `@opencode/plugin/effect` now exports `Tool`, so an `execute.before` hook can reject a call with `Tool.Error` without importing `@opencode/schema/tool`. ([#63698](https://github.com/anomalyco/opencode/pull/63698))",
          "releaseNotesUrl": "https://github.com/anomalyco/opencode/releases/tag/v2.3.0"
        },
        "1.19.5": {
          "releaseNotes": "## Core\r\n\r\n### Bugfixes\r\n- Failed TUI worker requests now return an error instead of leaving the caller hanging. (@Nowaker)\r\n\r\n**Thank you to 1 community contributor:**\r\n- @Nowaker:\r\n  - fix(opencode): answer a failed TUI worker request instead of hanging (#54936)",
          "releaseNotesUrl": "https://github.com/anomalyco/opencode/releases/tag/v1.19.5"
        }
      },
      "versionUpdatedAtUnixSeconds": 1793168231,
      "versionUpdatedAtSource": "official"
    },
    "pi": {
      "version": "1.5.2",
      "channels": {
        "latest": "1.5.2",
        "legacy-node20": "0.74.2"
      },
      "npmPackage": "@earendil-works/pi-coding-agent",
      "releaseNotes": "## [1.5.2] - 2026-11-10\n\n### New Features\n\n- **Fork sessions whose folder is gone**: when a session's original folder was moved or deleted, you can now fork it into the current folder instead of only continuing, so later resumes no longer ask. See [Continue or switch sessions](docs/sessions.md#continue-or-switch-sessions).\n\n### Changed\n\n- When a session's working directory no longer exists, for example after the project folder was renamed, interactive mode now offers `Continue`, `Fork`, or `Cancel` instead of only continuing. `Continue` runs the session in the current directory without storing the choice, as before; `Fork` copies it into the current directory as a new session with a new ID, like `--fork`, so the next resume no longer asks. This applies at startup (`--session`, `--resume`), to `/resume`, to `/import`, and to `ctx.switchSession()` from extensions ([#11975](https://github.com/earendil-works/pi/pull/11975) by [@petrroll](https://github.com/petrroll), fixes [#11060](https://github.com/earendil-works/pi/issues/11060))\n\n### Fixed\n\n- Fixed `/import` of a session whose working directory no longer exists leaving a copy in the session directory, and continuing it leaving a second copy with the same ID (`s.jsonl` and `s-1.jsonl`); the failed copy is now removed ([#11975](https://github.com/earendil-works/pi/pull/11975) by [@petrroll](https://github.com/petrroll), fixes [#11060](https://github.com/earendil-works/pi/issues/11060))\n- Fixed Anthropic OAuth requests reporting an outdated Claude Code version",
      "releaseNotesUrl": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/CHANGELOG.md",
      "channelReleaseNotes": {
        "1.5.2": {
          "releaseNotes": "## [1.5.2] - 2026-11-10\n\n### New Features\n\n- **Fork sessions whose folder is gone**: when a session's original folder was moved or deleted, you can now fork it into the current folder instead of only continuing, so later resumes no longer ask. See [Continue or switch sessions](docs/sessions.md#continue-or-switch-sessions).\n\n### Changed\n\n- When a session's working directory no longer exists, for example after the project folder was renamed, interactive mode now offers `Continue`, `Fork`, or `Cancel` instead of only continuing. `Continue` runs the session in the current directory without storing the choice, as before; `Fork` copies it into the current directory as a new session with a new ID, like `--fork`, so the next resume no longer asks. This applies at startup (`--session`, `--resume`), to `/resume`, to `/import`, and to `ctx.switchSession()` from extensions ([#11975](https://github.com/earendil-works/pi/pull/11975) by [@petrroll](https://github.com/petrroll), fixes [#11060](https://github.com/earendil-works/pi/issues/11060))\n\n### Fixed\n\n- Fixed `/import` of a session whose working directory no longer exists leaving a copy in the session directory, and continuing it leaving a second copy with the same ID (`s.jsonl` and `s-1.jsonl`); the failed copy is now removed ([#11975](https://github.com/earendil-works/pi/pull/11975) by [@petrroll](https://github.com/petrroll), fixes [#11060](https://github.com/earendil-works/pi/issues/11060))\n- Fixed Anthropic OAuth requests reporting an outdated Claude Code version",
          "releaseNotesUrl": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/CHANGELOG.md"
        },
        "0.74.2": {
          "releaseNotes": "## [Unreleased]\n\n### Added\n\n- Added `deepseek-v4.1-flash` and `deepseek-v4.1-flash-1017` to the Qwen Token Plan Individual providers, and per-plan key variables `QWEN_TOKEN_PLAN_TEAM_API_KEY`, `QWEN_TOKEN_PLAN_TEAM_CN_API_KEY`, `QWEN_TOKEN_PLAN_INDIVIDUAL_API_KEY`, and `QWEN_TOKEN_PLAN_INDIVIDUAL_CN_API_KEY`; the shared `QWEN_TOKEN_PLAN_API_KEY` and `QWEN_TOKEN_PLAN_CN_API_KEY` still work ([#11773](https://github.com/earendil-works/pi/issues/11773))\n\n### Changed\n\n- Qwen Token Plan providers now use the current gateways (`token-plan.maas.qwencloudapi.com` international, `token-plan.maas.qianwenaiapi.com` China), and `qwen-token-plan` and `qwen-token-plan-cn` are named \"Qwen Token Plan Team\" and \"Qwen Token Plan Team CN\". Provider IDs are unchanged, and the old `aliyuncs.com` hosts still work ([#11773](https://github.com/earendil-works/pi/issues/11773))\n- The find tool's path patterns are now relative to the search directory, like grep's `glob`: `src/*.ts` finds `src/a.ts` but no longer `pkg/src/a.ts`; use `**/src/*.ts` to match at any depth. Patterns without `/` still match file names at any depth ([#12066](https://github.com/earendil-works/pi/issues/12066))\n\n### Fixed\n\n- Fixed `read` storing a note that the current model does not support images, which was replayed to the model as stale text after switching to a vision model. The image is still replaced with a placeholder per request for models without image input, and the read result now shows the warning in the TUI only, also when collapsed ([#12131](https://github.com/earendil-works/pi/issues/12131))\n- Fixed MCP tools loaded by `tool_search` being dropped on resume and `/reload` when an extension deactivates only its own tool at `session_start`, as pi-web-access and pi-subagents do in `toolActivation: \"auto\"` mode ([#11996](https://github.com/earendil-works/pi/issues/11996))\n- Fixed the standalone binary failing to resolve extension npm dependencies whose entry point is declared in `package.json` `main` or `exports` (for example `shiki`, `yaml`, `graceful-fs`), including imports made from inside other dependencies ([#12012](https://github.com/earendil-works/pi/issues/12012))\n- Fixed the find tool returning no results for patterns starting with `./`, such as `./src/*.ts` ([#12020](https://github.com/earendil-works/pi/issues/12020))\n- Fixed pi exiting with an uncaught `AbortError` when a `read` tool call is cancelled while the file is being opened ([#11956](https://github.com/earendil-works/pi/issues/11956))\n- Fixed pi exiting with an uncaught `AbortError` when the session picker cancels loading after skipping a `.jsonl` file that is not a session, and fixed such files staying open ([#11956](https://github.com/earendil-works/pi/issues/11956))\n- Fixed `/share` crashing pi when the GitHub CLI fails to start\n- Fixed `pi update` on Windows managed installs failing with \"Could not verify managed Pi\" when an older system Node.js comes before the installer's standalone Node.js on PATH ([#12048](https://github.com/earendil-works/pi/issues/12048))\n- Fixed `/export` HTML showing raw terminal hyperlink escape codes around links in custom tool output; links are now clickable ([#12003](https://github.com/earendil-works/pi/issues/12003))\n- Fixed the bash tool returning no output, with a footer like `[Showing lines 3-2 of 2]`, when the output ends in one line longer than about 100KB, such as a `grep` match in a minified file; it now shows the end of that line ([#12062](https://github.com/earendil-works/pi/issues/12062))\n- Fixed provider errors reading \"Connection closed.\" not triggering automatic retries ([#12064](https://github.com/earendil-works/pi/issues/12064))\n- Fixed `/resume` sometimes selecting an unrelated session while the list reloads after deleting or renaming a session ([#12106](https://github.com/earendil-works/pi/issues/12106))\n- Fixed `enabledModels`/`--models` warnings such as `No models match pattern \"github-copilot/nope\"` being written over the interactive TUI on every `/new`, `/resume` and `/fork`, which left stale lines in fullscreen mode. The warnings are now shown once at startup, in the chat in interactive mode and on stderr in other modes; RPC mode no longer repeats them on stderr for each `new_session`, `switch_session` or `fork` ([#11264](https://github.com/earendil-works/pi/issues/11264))\n- Fixed the find tool matching path patterns through folders above the search path: with the project in `~/src/app`, `src/**/*.ts` returned every `.ts` file in the project ([#12066](https://github.com/earendil-works/pi/issues/12066))\n- Fixed pi crashing with `RangeError: Maximum call stack size exceeded` when rendering a very large edit diff, for example after editing a file with a multi-megabyte line, and again on every resume of that session ([#8036](https://github.com/earendil-works/pi/issues/8036))\n- Fixed pressing Esc during a batch of tool calls leaving the calls that had not started yet without a result in the session; they now get an \"Operation aborted\" result ([#9986](https://github.com/earendil-works/pi/issues/9986))\n\n### Removed\n\n- Removed the retired `deepseek-v3.2` and `deepseek-v4-flash` from the Qwen Token Plan Team providers; use `deepseek-v4-flash-0731` or `deepseek-v4.1-flash` ([#11773](https://github.com/earendil-works/pi/issues/11773))",
          "releaseNotesUrl": "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/CHANGELOG.md"
        }
      },
      "versionUpdatedAtUnixSeconds": 1794313495,
      "versionUpdatedAtSource": "official"
    },
    "codex": {
      "version": "0.169.0",
      "channels": {
        "alpha": "0.171.0-alpha.5",
        "alpha-darwin-arm64": "0.171.0-alpha.5-darwin-arm64",
        "alpha-darwin-x64": "0.171.0-alpha.5-darwin-x64",
        "alpha-linux-arm64": "0.171.0-alpha.5-linux-arm64",
        "alpha-linux-x64": "0.171.0-alpha.5-linux-x64",
        "alpha-win32-arm64": "0.171.0-alpha.5-win32-arm64",
        "alpha-win32-x64": "0.171.0-alpha.5-win32-x64",
        "beta": "0.1.2505172116",
        "darwin-arm64": "0.169.0-darwin-arm64",
        "darwin-x64": "0.169.0-darwin-x64",
        "latest": "0.169.0",
        "linux-arm64": "0.169.0-linux-arm64",
        "linux-x64": "0.169.0-linux-x64",
        "native": "0.1.2505291658",
        "release-0.159.0-alpha.12.1-alpha": "0.159.0-alpha.12.1",
        "release-0.159.0-alpha.12.1-alpha-darwin-arm64": "0.159.0-alpha.12.1-darwin-arm64",
        "release-0.159.0-alpha.12.1-alpha-darwin-x64": "0.159.0-alpha.12.1-darwin-x64",
        "release-0.159.0-alpha.12.1-alpha-linux-arm64": "0.159.0-alpha.12.1-linux-arm64",
        "release-0.159.0-alpha.12.1-alpha-linux-x64": "0.159.0-alpha.12.1-linux-x64",
        "release-0.159.0-alpha.12.1-alpha-win32-arm64": "0.159.0-alpha.12.1-win32-arm64",
        "release-0.159.0-alpha.12.1-alpha-win32-x64": "0.159.0-alpha.12.1-win32-x64",
        "release-0.161.0-alpha.13.1-alpha": "0.161.0-alpha.13.1",
        "release-0.161.0-alpha.13.1-alpha-darwin-arm64": "0.161.0-alpha.13.1-darwin-arm64",
        "release-0.161.0-alpha.13.1-alpha-darwin-x64": "0.161.0-alpha.13.1-darwin-x64",
        "release-0.161.0-alpha.13.1-alpha-linux-arm64": "0.161.0-alpha.13.1-linux-arm64",
        "release-0.161.0-alpha.13.1-alpha-linux-x64": "0.161.0-alpha.13.1-linux-x64",
        "release-0.161.0-alpha.13.1-alpha-win32-arm64": "0.161.0-alpha.13.1-win32-arm64",
        "release-0.161.0-alpha.13.1-alpha-win32-x64": "0.161.0-alpha.13.1-win32-x64",
        "release-0.162.0-alpha.17.1-alpha": "0.162.0-alpha.17.1",
        "release-0.162.0-alpha.17.1-alpha-darwin-arm64": "0.162.0-alpha.17.1-darwin-arm64",
        "release-0.162.0-alpha.17.1-alpha-darwin-x64": "0.162.0-alpha.17.1-darwin-x64",
        "release-0.162.0-alpha.17.1-alpha-linux-arm64": "0.162.0-alpha.17.1-linux-arm64",
        "release-0.162.0-alpha.17.1-alpha-linux-x64": "0.162.0-alpha.17.1-linux-x64",
        "release-0.162.0-alpha.17.1-alpha-win32-arm64": "0.162.0-alpha.17.1-win32-arm64",
        "release-0.162.0-alpha.17.1-alpha-win32-x64": "0.162.0-alpha.17.1-win32-x64",
        "release-0.162.0-alpha.17.2-alpha": "0.162.0-alpha.17.2",
        "release-0.162.0-alpha.17.2-alpha-darwin-arm64": "0.162.0-alpha.17.2-darwin-arm64",
        "release-0.162.0-alpha.17.2-alpha-darwin-x64": "0.162.0-alpha.17.2-darwin-x64",
        "release-0.162.0-alpha.17.2-alpha-linux-arm64": "0.162.0-alpha.17.2-linux-arm64",
        "release-0.162.0-alpha.17.2-alpha-linux-x64": "0.162.0-alpha.17.2-linux-x64",
        "release-0.162.0-alpha.17.2-alpha-win32-arm64": "0.162.0-alpha.17.2-win32-arm64",
        "release-0.162.0-alpha.17.2-alpha-win32-x64": "0.162.0-alpha.17.2-win32-x64",
        "release-0.162.0-alpha.18.1-alpha": "0.162.0-alpha.18.1",
        "release-0.162.0-alpha.18.1-alpha-darwin-arm64": "0.162.0-alpha.18.1-darwin-arm64",
        "release-0.162.0-alpha.18.1-alpha-darwin-x64": "0.162.0-alpha.18.1-darwin-x64",
        "release-0.162.0-alpha.18.1-alpha-linux-arm64": "0.162.0-alpha.18.1-linux-arm64",
        "release-0.162.0-alpha.18.1-alpha-linux-x64": "0.162.0-alpha.18.1-linux-x64",
        "release-0.162.0-alpha.18.1-alpha-win32-arm64": "0.162.0-alpha.18.1-win32-arm64",
        "release-0.162.0-alpha.18.1-alpha-win32-x64": "0.162.0-alpha.18.1-win32-x64",
        "release-0.163.0-alpha.10.1-alpha": "0.163.0-alpha.10.1",
        "release-0.163.0-alpha.10.1-alpha-darwin-arm64": "0.163.0-alpha.10.1-darwin-arm64",
        "release-0.163.0-alpha.10.1-alpha-darwin-x64": "0.163.0-alpha.10.1-darwin-x64",
        "release-0.163.0-alpha.10.1-alpha-linux-arm64": "0.163.0-alpha.10.1-linux-arm64",
        "release-0.163.0-alpha.10.1-alpha-linux-x64": "0.163.0-alpha.10.1-linux-x64",
        "release-0.163.0-alpha.10.1-alpha-win32-arm64": "0.163.0-alpha.10.1-win32-arm64",
        "release-0.163.0-alpha.10.1-alpha-win32-x64": "0.163.0-alpha.10.1-win32-x64",
        "release-0.163.0-alpha.10.2-alpha": "0.163.0-alpha.10.2",
        "release-0.163.0-alpha.10.2-alpha-darwin-arm64": "0.163.0-alpha.10.2-darwin-arm64",
        "release-0.163.0-alpha.10.2-alpha-darwin-x64": "0.163.0-alpha.10.2-darwin-x64",
        "release-0.163.0-alpha.10.2-alpha-linux-arm64": "0.163.0-alpha.10.2-linux-arm64",
        "release-0.163.0-alpha.10.2-alpha-linux-x64": "0.163.0-alpha.10.2-linux-x64",
        "release-0.163.0-alpha.10.2-alpha-win32-arm64": "0.163.0-alpha.10.2-win32-arm64",
        "release-0.163.0-alpha.10.2-alpha-win32-x64": "0.163.0-alpha.10.2-win32-x64",
        "release-0.163.0-alpha.11.1-alpha": "0.163.0-alpha.11.1",
        "release-0.163.0-alpha.11.1-alpha-darwin-arm64": "0.163.0-alpha.11.1-darwin-arm64",
        "release-0.163.0-alpha.11.1-alpha-darwin-x64": "0.163.0-alpha.11.1-darwin-x64",
        "release-0.163.0-alpha.11.1-alpha-linux-arm64": "0.163.0-alpha.11.1-linux-arm64",
        "release-0.163.0-alpha.11.1-alpha-linux-x64": "0.163.0-alpha.11.1-linux-x64",
        "release-0.163.0-alpha.11.1-alpha-win32-arm64": "0.163.0-alpha.11.1-win32-arm64",
        "release-0.163.0-alpha.11.1-alpha-win32-x64": "0.163.0-alpha.11.1-win32-x64",
        "release-0.163.0-alpha.11.2-alpha": "0.163.0-alpha.11.2",
        "release-0.163.0-alpha.11.2-alpha-darwin-arm64": "0.163.0-alpha.11.2-darwin-arm64",
        "release-0.163.0-alpha.11.2-alpha-darwin-x64": "0.163.0-alpha.11.2-darwin-x64",
        "release-0.163.0-alpha.11.2-alpha-linux-arm64": "0.163.0-alpha.11.2-linux-arm64",
        "release-0.163.0-alpha.11.2-alpha-linux-x64": "0.163.0-alpha.11.2-linux-x64",
        "release-0.163.0-alpha.11.2-alpha-win32-arm64": "0.163.0-alpha.11.2-win32-arm64",
        "release-0.163.0-alpha.11.2-alpha-win32-x64": "0.163.0-alpha.11.2-win32-x64",
        "release-0.164.0-alpha.11.1-alpha": "0.164.0-alpha.11.1",
        "release-0.164.0-alpha.11.1-alpha-darwin-arm64": "0.164.0-alpha.11.1-darwin-arm64",
        "release-0.164.0-alpha.11.1-alpha-darwin-x64": "0.164.0-alpha.11.1-darwin-x64",
        "release-0.164.0-alpha.11.1-alpha-linux-arm64": "0.164.0-alpha.11.1-linux-arm64",
        "release-0.164.0-alpha.11.1-alpha-linux-x64": "0.164.0-alpha.11.1-linux-x64",
        "release-0.164.0-alpha.11.1-alpha-win32-arm64": "0.164.0-alpha.11.1-win32-arm64",
        "release-0.164.0-alpha.11.1-alpha-win32-x64": "0.164.0-alpha.11.1-win32-x64",
        "release-0.165.0-alpha.1.1-alpha": "0.165.0-alpha.1.1",
        "release-0.165.0-alpha.1.1-alpha-darwin-arm64": "0.165.0-alpha.1.1-darwin-arm64",
        "release-0.165.0-alpha.1.1-alpha-darwin-x64": "0.165.0-alpha.1.1-darwin-x64",
        "release-0.165.0-alpha.1.1-alpha-linux-arm64": "0.165.0-alpha.1.1-linux-arm64",
        "release-0.165.0-alpha.1.1-alpha-linux-x64": "0.165.0-alpha.1.1-linux-x64",
        "release-0.165.0-alpha.1.1-alpha-win32-arm64": "0.165.0-alpha.1.1-win32-arm64",
        "release-0.165.0-alpha.1.1-alpha-win32-x64": "0.165.0-alpha.1.1-win32-x64",
        "release-0.165.0-alpha.1.2-alpha": "0.165.0-alpha.1.2",
        "release-0.165.0-alpha.1.2-alpha-darwin-arm64": "0.165.0-alpha.1.2-darwin-arm64",
        "release-0.165.0-alpha.1.2-alpha-darwin-x64": "0.165.0-alpha.1.2-darwin-x64",
        "release-0.165.0-alpha.1.2-alpha-linux-arm64": "0.165.0-alpha.1.2-linux-arm64",
        "release-0.165.0-alpha.1.2-alpha-linux-x64": "0.165.0-alpha.1.2-linux-x64",
        "release-0.165.0-alpha.1.2-alpha-win32-arm64": "0.165.0-alpha.1.2-win32-arm64",
        "release-0.165.0-alpha.1.2-alpha-win32-x64": "0.165.0-alpha.1.2-win32-x64",
        "release-0.167.0-alpha.3.1-alpha": "0.167.0-alpha.3.1",
        "release-0.167.0-alpha.3.1-alpha-darwin-arm64": "0.167.0-alpha.3.1-darwin-arm64",
        "release-0.167.0-alpha.3.1-alpha-darwin-x64": "0.167.0-alpha.3.1-darwin-x64",
        "release-0.167.0-alpha.3.1-alpha-linux-arm64": "0.167.0-alpha.3.1-linux-arm64",
        "release-0.167.0-alpha.3.1-alpha-linux-x64": "0.167.0-alpha.3.1-linux-x64",
        "release-0.167.0-alpha.3.1-alpha-win32-arm64": "0.167.0-alpha.3.1-win32-arm64",
        "release-0.167.0-alpha.3.1-alpha-win32-x64": "0.167.0-alpha.3.1-win32-x64",
        "release-0.167.0-alpha.3.2-alpha": "0.167.0-alpha.3.2",
        "release-0.167.0-alpha.3.2-alpha-darwin-arm64": "0.167.0-alpha.3.2-darwin-arm64",
        "release-0.167.0-alpha.3.2-alpha-darwin-x64": "0.167.0-alpha.3.2-darwin-x64",
        "release-0.167.0-alpha.3.2-alpha-linux-arm64": "0.167.0-alpha.3.2-linux-arm64",
        "release-0.167.0-alpha.3.2-alpha-linux-x64": "0.167.0-alpha.3.2-linux-x64",
        "release-0.167.0-alpha.3.2-alpha-win32-arm64": "0.167.0-alpha.3.2-win32-arm64",
        "release-0.167.0-alpha.3.2-alpha-win32-x64": "0.167.0-alpha.3.2-win32-x64",
        "release-0.167.0-alpha.4.1-alpha": "0.167.0-alpha.4.1",
        "release-0.167.0-alpha.4.1-alpha-darwin-arm64": "0.167.0-alpha.4.1-darwin-arm64",
        "release-0.167.0-alpha.4.1-alpha-darwin-x64": "0.167.0-alpha.4.1-darwin-x64",
        "release-0.167.0-alpha.4.1-alpha-linux-arm64": "0.167.0-alpha.4.1-linux-arm64",
        "release-0.167.0-alpha.4.1-alpha-linux-x64": "0.167.0-alpha.4.1-linux-x64",
        "release-0.167.0-alpha.4.1-alpha-win32-arm64": "0.167.0-alpha.4.1-win32-arm64",
        "release-0.167.0-alpha.4.1-alpha-win32-x64": "0.167.0-alpha.4.1-win32-x64",
        "release-0.167.0-alpha.4.2-alpha": "0.167.0-alpha.4.2",
        "release-0.167.0-alpha.4.2-alpha-darwin-arm64": "0.167.0-alpha.4.2-darwin-arm64",
        "release-0.167.0-alpha.4.2-alpha-darwin-x64": "0.167.0-alpha.4.2-darwin-x64",
        "release-0.167.0-alpha.4.2-alpha-linux-arm64": "0.167.0-alpha.4.2-linux-arm64",
        "release-0.167.0-alpha.4.2-alpha-linux-x64": "0.167.0-alpha.4.2-linux-x64",
        "release-0.167.0-alpha.4.2-alpha-win32-arm64": "0.167.0-alpha.4.2-win32-arm64",
        "release-0.167.0-alpha.4.2-alpha-win32-x64": "0.167.0-alpha.4.2-win32-x64",
        "release-0.167.0-alpha.4.3-alpha": "0.167.0-alpha.4.3",
        "release-0.167.0-alpha.4.3-alpha-darwin-arm64": "0.167.0-alpha.4.3-darwin-arm64",
        "release-0.167.0-alpha.4.3-alpha-darwin-x64": "0.167.0-alpha.4.3-darwin-x64",
        "release-0.167.0-alpha.4.3-alpha-linux-arm64": "0.167.0-alpha.4.3-linux-arm64",
        "release-0.167.0-alpha.4.3-alpha-linux-x64": "0.167.0-alpha.4.3-linux-x64",
        "release-0.167.0-alpha.4.3-alpha-win32-arm64": "0.167.0-alpha.4.3-win32-arm64",
        "release-0.167.0-alpha.4.3-alpha-win32-x64": "0.167.0-alpha.4.3-win32-x64",
        "release-0.167.0-alpha.5-alpha": "0.167.0-alpha.5",
        "release-0.167.0-alpha.5-alpha-darwin-arm64": "0.167.0-alpha.5-darwin-arm64",
        "release-0.167.0-alpha.5-alpha-darwin-x64": "0.167.0-alpha.5-darwin-x64",
        "release-0.167.0-alpha.5-alpha-linux-arm64": "0.167.0-alpha.5-linux-arm64",
        "release-0.167.0-alpha.5-alpha-linux-x64": "0.167.0-alpha.5-linux-x64",
        "release-0.167.0-alpha.5-alpha-win32-arm64": "0.167.0-alpha.5-win32-arm64",
        "release-0.167.0-alpha.5-alpha-win32-x64": "0.167.0-alpha.5-win32-x64",
        "release-0.169.0-alpha.11.1-alpha": "0.169.0-alpha.11.1",
        "release-0.169.0-alpha.11.1-alpha-darwin-arm64": "0.169.0-alpha.11.1-darwin-arm64",
        "release-0.169.0-alpha.11.1-alpha-darwin-x64": "0.169.0-alpha.11.1-darwin-x64",
        "release-0.169.0-alpha.11.1-alpha-linux-arm64": "0.169.0-alpha.11.1-linux-arm64",
        "release-0.169.0-alpha.11.1-alpha-linux-x64": "0.169.0-alpha.11.1-linux-x64",
        "release-0.169.0-alpha.11.1-alpha-win32-arm64": "0.169.0-alpha.11.1-win32-arm64",
        "release-0.169.0-alpha.11.1-alpha-win32-x64": "0.169.0-alpha.11.1-win32-x64",
        "win32-arm64": "0.169.0-win32-arm64",
        "win32-x64": "0.169.0-win32-x64"
      },
      "npmPackage": "@openai/codex",
      "releaseNotes": "## New Features\n\n- The opt-in terminal workspace supports multiple side-chat tabs. Switch between them with the keyboard or mouse, and reopen saved local side chats after restarting Codex. (#59784, #60152, #60181)\n- Search older tasks from the agent command center by name, prompt preview, or working directory. (#60286)\n- Turn on **Collapse turn details** in the full-screen transcript to fold completed activity beneath each prompt while keeping answers visible and tool output searchable. (#60554, #60555, #60556, #60557)\n- Add or edit custom model providers from the terminal. With custom gateway onboarding enabled, you can create a provider during sign-in and use a device code for supported gateways over SSH or without a local browser. (#59779, #60009, #60186, #60486, #60662)\n- Press `Ctrl+S` in the terminal report editor to save a diagnostic ZIP locally, even when uploads are disabled. (#60542)\n- With the opt-in Cloud connection on macOS and Linux, send images, choose a model and reasoning effort, and archive or restore Cloud conversations from the terminal. (#59828, #60061, #60635, #60651)\n\n## Bug Fixes\n\n- `codex exec` keeps project configuration and MCP servers disabled in untrusted directories, even with `--sandbox workspace-write`. Use `--trust` with `codex exec` or `codex review` to explicitly save project trust. (#60041)\n- **Yes, clear context and implement** now hands the full approved plan to the fresh session and keeps the current session open if the handoff fails. (#60763)\n- Fixed Windows sandbox handling for quoted `cmd.exe` paths and for PowerShell sessions whose working directory has an unreadable parent. (#60624, #60647)\n- Pasted images on macOS retain their intended orientation and use native PNG or JPEG clipboard data when available. (#60455)\n- The terminal no longer stays busy waiting for MCP servers that a shared app server did not report. (#60280, #60622)\n- Interrupted turns now close cleanly, and delayed aborts or file approval cancellations no longer interrupt a later turn. (#59910, #60700)\n\n## Documentation\n\n- Updated the `openai-docs` skill to focus on Codex and ChatGPT Work questions and first-time API setup, with dedicated guidance for configuring Codex across a team. (#59944, #59949)\n- Documented how app-server clients can list models or authorize a gateway for a configured provider without changing the default provider. (#59776, #59819)\n\n## Chores\n\n- Updated bundled SQLite to 3.54 to pick up write-ahead log fixes. (#60432)\n- Plugin marketplace upgrades can reuse Git objects already on disk, reducing repeat downloads. (#60528)\n\n## Changelog\n\nFull Changelog: https://github.com/openai/codex/compare/rust-v0.168.0...rust-v0.169.0\n\n- #59739 Add a sidebar chooser and floating workspace shortcut panels @fcoury-oai\n- #59743 Forward explicit cyber access programs with header authentication @jamy-OAI\n- #59745 Repair legacy Windows sandbox bin permissions for SYSTEM @zm-oai\n- #59746 Add typed Cloud user-message submission receipts @bc-openai\n- #59749 Use runtime authentication for OpenAI MCP and app requests @cooper-oai\n- #59750 Stop Noise relay recovery on rejected executor credentials @richardopenai\n- #59752 Configure the Opus Bazel patch and isolate auth tests @bkotsopoulos\n- #59754 Enforce host-required cyber access programs per thread @jamy-OAI\n- #59759 Update WebSocket dependency forks @charliemarsh-oai\n- #59767 Add sidebar tabs and nonblocking side-chat creation @fcoury-oai\n- #59768 Stop prefetching plugin discovery at app-server startup @zamoshchin-openai\n- #59769 Reuse decoded WebSocket event kinds in telemetry @charliemarsh-oai\n- #59770 Add shared service-tier support for host-owned agents @rhan-oai\n- #59772 Remove the legacy sandbox policy constructor @ioanbudea-OAI\n- #59774 Remove the legacy Seatbelt command wrapper @ioanbudea-OAI\n- #59776 Allow selecting a configured provider in `model/list` @abhinav-oai\n- #59778 Expose acceptance metadata and code-cell links in rollout traces @tz-openai\n- #59779 Add provider configuration editing to the TUI @alexsong-oai\n- #59780 Enable safe identical code folding for x86-64 musl releases @dkovalenko-oai\n- #59783 Tie gRPC code-mode connection lifetime to live sessions @frantic-openai\n- #59784 Support multiple side chats in the TUI sidebar @fcoury-oai\n- #59785 Decouple message lifecycle state from model-visible item IDs @euroelessar\n- #59787 Support credential export commands for gateway authentication @alexsong-oai\n- #59789 Render delegated thread messages as Markdown in the TUI @bc-openai\n- #59792 Centralize managed proxy preparation and sandbox routing @viyatb-oai\n- #59793 Support update-boundary paging across forked thread histories @owenlin0\n- #59794 Check extension budgets before model generation requests @rhan-oai\n- #59795 Support optional thread IDs in hosted file uploads @lt-oai\n- #59805 Pack relative relocations in x86-64 musl release builds @dkovalenko-oai\n- #59816 Retry gateway credential exports after unauthorized responses @alexsong-oai\n- #59817 Handle TUI message submission receipts and preserve uncertain drafts @bc-openai\n- #59819 Allow provider selection for gateway OAuth reads and logins @abhinav-oai\n- #59822 Add device-code authorization for gateway OAuth @smurching-oai\n- #59823 Bind runtime auth to the provider's selected credential source @cooper-oai\n- #59824 Enable resizing the sidebar chooser @fcoury-oai\n- #59826 Preserve client metadata through queued submissions @eddie-openai\n- #59828 Add a gated Cloud backend to the TUI @bc-openai\n- #59832 Add opt-in incremental tools for regular OpenAI Responses @akira-oai\n- #59842 Carry targeted moderation decisions on final-answer messages @psachdeva-oai\n- #59887 Remove incomplete prereleases after asset upload failures @jif-oai\n- #59891 Bound REPL provenance costs in elastic context preparation @jif-oai\n- #59893 Recompute the approval reviewer when switching models @jif-oai\n- #59902 Keep verified question/answer records whole under elastic budgets @jif-oai\n- #59903 Delete incomplete prereleases by release ID @jif-oai\n- #59905 Validate implicit API keys for Guardian Decisions @jif-oai\n- #59908 Avoid full image decoding for original-detail context estimates @jif-oai\n- #59910 Scope file change approval cancellation to the requesting turn @jif-oai\n- #59913 Resolve Guardian policy from the reviewed thread's catalog @jif-oai\n- #59914 Bind Guardian Decisions requests to their credential source @jif-oai\n- #59928 Improve sidebar chat selection and tab hover highlighting @fcoury-oai\n- #59933 Use permission profiles for protected-model startup downgrades @ioanbudea-OAI\n- #59944 Narrow openai-docs to product Q&A and first-time API setup @provencher-oai\n- #59949 Route broad Codex setup questions through self-knowledge guidance @vb-openai\n- #59954 Resolve skill display names in read and installations tools @jif-oai\n- #59955 Bump `ignore` to `0.4.30` @iceweasel-oai\n- #59958 Expose model metadata from each thread's catalog and settings @seanh-oai\n- #59960 Skip the network denial grace period when remote decisions drain @jif-oai\n- #59963 Normalize turn context permissions to a required profile @ioanbudea-OAI\n- #59969 Reduce contention in thread writer lock coordination @dkovalenko-oai\n- #59972 Fix Opus header installation with relative symlink inputs @bc-openai\n- #59973 Enable gRPC and host output truncation by default for Code Mode @seanh-oai\n- #59974 Test command completion before network denial grace expires @jif-oai\n- #59980 Test rejection of PNGs with readable dimensions but corrupt pixels @fjord-oai\n- #59983 Render typed prompts as Markdown in the TUI @bc-openai\n- #59987 Resolve startup models using thread creation options @seanh-oai\n- #59988 Add inherited styling to TUI display trees @joesavona\n- #59991 Preserve app invocation context across MCP tool refreshes @fahad-OAI\n- #59993 Add fixed read views for local message boards @felixxia-oai\n- #59994 Add read-only evidence retrieval tools for Guardian reviewers @felixxia-oai\n- #59995 Add subscription tools for Guardian reviewers @felixxia-oai\n- #59998 Add atomic bulk channel subscription updates @felixxia-oai\n- #59999 Add model-driven Guardian channel selection @felixxia-oai\n- #60000 Plan Guardian evidence delivery in source order @felixxia-oai\n- #60001 Add bounded original-evidence delivery for Guardian reviewers @felixxia-oai\n- #60002 Decouple Guardian retrieval from local message-board handles @felixxia-oai\n- #60003 Apply runtime authentication to realtime connections @cooper-oai\n- #60004 Expose ChatGPT user IDs in `account/read` responses @dand-oai\n- #60006 Reduce SQLite write overhead for thread activity and history @jonluca\n- #60007 Start cloud threads with the local GitHub project @bc-openai\n- #60008 Refactor TUI clipboard and composer input handling @bc-openai\n- #60009 Add custom gateway selection to TUI sign-in @alexsong-oai\n- #60010 Add a shared Windows Bazel setup action @dkovalenko-oai\n- #60011 Adapt multi-agent mode guidance for hosted tools @rhan-oai\n- #60014 Honor managed runtime authentication modes and expand coverage @cooper-oai\n- #60017 Disable bundled skills in the prompt-prefix comparison test @felixxia-oai\n- #60018 Propagate turn triggers to usage analytics events @chrisdong-oai\n- #60019 Add theme-aware semantic colors to extension UI trees @joesavona\n- #60020 Strip terminal commands from UI tree strings @joesavona\n- #60021 Normalize inline UI tree text across styled leaves @joesavona\n- #60022 Separate UI tree preparation from line rendering @joesavona\n- #60026 Add multiline layout and row wrapping to UI trees @joesavona\n- #60027 Keep configured status lines on the native renderer @joesavona\n- #60028 Reuse prepared UI trees for footer rendering @joesavona\n- #60029 Render UI trees directly into terminal buffers @joesavona\n- #60031 Unify TUI status line layout for extension content @joesavona\n- #60032 Allow extension status content to use multiple footer rows @joesavona\n- #60034 Omit sensitive process inputs from spawn trace logs @etraut-openai\n- #60035 Fix authentication for git-attribution settings requests @cooper-oai\n- #60037 Preserve MCP sharing discovery when deferring cached stdio startup @charliemarsh-oai\n- #60038 Surface MCP server startup errors when preparing cached tool calls @charliemarsh-oai\n- #60039 Add opt-in lazy startup for cached stdio MCP servers @charliemarsh-oai\n- #60040 Restrict legacy incremental tools to Amazon Bedrock providers @akira-oai\n- #60041 Require explicit project trust in non-interactive runs @etraut-openai\n- #60042 Centralize Windows sandbox filesystem override resolution @viyatb-oai\n- #60046 Derive MCP network policy and preserve saved denials @viyatb-oai\n- #60048 Allow plugin starter prompts up to 512 characters @karenwong-openai\n- #60049 Preserve model catalogs when starting child agents @evanz-oai\n- #60055 Reauthenticate runtime requests before reusing WebSocket access @cooper-oai\n- #60061 Support Cloud image messages and editable draft handoffs @bc-openai\n- #60064 Use thread runtime auth for Guardian Decisions and memory quota checks @cooper-oai\n- #60067 Ensure side-chat policy reaches the first model request @fcoury-oai\n- #60073 Use runtime authentication for remote-control requests @cooper-oai\n- #60075 Support asynchronous host service-tier reads and acceptance @rhan-oai\n- #60080 Allow asynchronous model request budget checks @rhan-oai\n- #60082 Fetch account security reminders through app-server @cooper-oai\n- #60096 Stop retrying terminal runtime authentication denials @cooper-oai\n- #60101 Use runtime authentication for Analytics requests @cooper-oai\n- #60118 Buffer payload JSON reads during rollout trace replay @tz-openai\n- #60122 Preserve code mode dispatch errors in rollout traces @tz-openai\n- #60152 Persist local workspace side chats and add tab close controls @fcoury-oai\n- #60157 Add support for incremental code mode tool definitions @akira-oai\n- #60163 Wire incremental exec tool updates into Code Mode sessions @akira-oai\n- #60172 Preserve display instructions in answer moderation @psachdeva-oai\n- #60173 Test exec catalog preservation across session and compaction changes @akira-oai\n- #60177 Add metrics for incremental exec catalog updates @akira-oai\n- #60180 Attach typed punctuation to completed skill mentions @bc-openai\n- #60181 Add keyboard and mouse navigation for sidebar tabs @fcoury-oai\n- #60186 Allow creating custom providers during sign-in @alexsong-oai\n- #60188 Allow model overrides for incremental Code Mode tool messages @akira-oai\n- #60190 Expose agent tree IDs and environment removal @richardopenai\n- #60206 Increase Bazel core unit test shards from 8 to 16 @seanh-oai\n- #60270 Warn when a CLI model is absent from the ChatGPT model list @etraut-openai\n- #60271 Keep the agents overview open when there is no chat to return to @etraut-openai\n- #60280 Fix MCP startup tracking when attaching to shared app servers @charliemarsh-oai\n- #60286 Search task history from the command center @etraut-openai\n- #60309 Defer executor readiness when prewarming a selected project @bc-openai\n- #60319 Improve side-chat discovery and navigation in the TUI @fcoury-oai\n- #60320 Include older itemless Cloud failures in full transcripts @bc-openai\n- #60327 Suppress stale cloud stream disconnects after reopening a thread @bc-openai\n- #60335 Avoid duplicate assistant messages when resuming Cloud threads @bc-openai\n- #60342 Treat goal objectives as untrusted context @dylan-hurd-oai\n- #60389 Include Codex Apps configuration in cloud prewarm requests @bc-openai\n- #60390 Allow deferring plain-text MCP output in thread item listings @btraut-openai\n- #60391 Simplify Guardian's post-denial approval guidance @olliem-oai\n- #60414 Enable model catalog discovery with gateway OAuth @smurching-oai\n- #60416 Keep fitting URLs intact in fullscreen Markdown transcripts @etraut-openai\n- #60418 Let terminal status become done while background terminals run @etraut-openai\n- #60423 Expose deferred MCP servers in resource listings @charliemarsh-oai\n- #60432 Upgrade bundled SQLite to 3.54 for WAL fixes @ioanbudea-OAI\n- #60433 Bind API workload identity source reuse to session claims @cooper-oai\n- #60434 Reset app-server turn summaries when a turn starts @cooper-oai\n- #60435 Dismiss the model switch prompt when account usage recovers @etraut-openai\n- #60436 Revalidate request auth ownership after budget checks @won-openai\n- #60443 Support cancellation and deadlines for realtime attachments @parabolala\n- #60454 Update OpenSSL Rust dependencies @dkovalenko-oai\n- #60455 Prefer native clipboard images on macOS and honor image orientation @dkovalenko-oai\n- #60461 Honor permission grant scopes in executor capability discovery @dkovalenko-oai\n- #60462 Route TUI question answers through Cloud message admission @bc-openai\n- #60466 Keep thread storage available when diagnostic logs fail @dkovalenko-oai\n- #60472 Serialize default thread permissions as a permission profile @ioanbudea-OAI\n- #60473 Respect error retry policy during local compaction @charliemarsh-oai\n- #60475 Stop retrying explicit invalid-workspace errors @charliemarsh-oai\n- #60476 Treat access program denials as terminal errors @charliemarsh-oai\n- #60479 Treat content policy violations as terminal errors @charliemarsh-oai\n- #60480 Treat workspace access denials as terminal errors @charliemarsh-oai\n- #60481 Treat invalid access program stream errors as terminal @charliemarsh-oai\n- #60482 Handle context length errors consistently across response transports @charliemarsh-oai\n- #60486 Add device authorization to app-server gateway OAuth @smurching-oai\n- #60487 Enable untrusted context tool outputs by default @akira-oai\n- #60488 Remove the Xcode 26.4 MCP elicitation compatibility workaround @jameswt-oai\n- #60489 Honor feature overrides when starting the app-server daemon @iceweasel-oai\n- #60492 Add local-only Claude Code skill migration @aramaraju-oai\n- #60496 Preserve typed gRPC code-mode session admission errors @seanh-oai\n- #60498 Unify Guardian context preparation across reviewers @ioanbudea-OAI\n- #60500 Derive sandbox telemetry labels directly from permission profiles @ioanbudea-OAI\n- #60505 Trace MCP refresh causes and plugin metadata changes @charliemarsh-oai\n- #60506 Preserve MCP trace context when tracing is disabled @joesavona\n- #60507 Use hermetic LLVM for Windows MSVC Bazel builds @zbarsky-openai\n- #60511 Treat inference hook denials as terminal errors @ccui-oai\n- #60513 Record an MCP refresh reason for session permission grants @charliemarsh-oai\n- #60517 Route sandbox CLI launches through the shared sandbox manager @viyatb-oai\n- #60519 Handle unfinished tool calls in restored history @etraut-openai\n- #60522 Fragment large Responses WebSocket messages into bounded frames @charliemarsh-oai\n- #60523 Add policy-checked TCP upstream tunneling for SOCKS @viyatb-oai\n- #60524 Encapsulate thread metadata construction @ioanbudea-OAI\n- #60525 Preserve first-party catalog display order in app-server model lists @dpatel-oai\n- #60526 Disable Daybreak when the selected model lacks access @jamy-OAI\n- #60528 Reuse installed Git objects when upgrading marketplaces @charliemarsh-oai\n- #60542 Add local diagnostic ZIP saves to the TUI @smurching-oai\n- #60554 Add optional tool call summaries to the full-screen transcript @etraut-openai\n- #60555 Extend output-free transcript summaries to more tools @etraut-openai\n- #60556 Group consecutive tool calls in the full-screen conversation @etraut-openai\n- #60557 Collapse completed turn activity beneath transcript prompts @etraut-openai\n- #60558 Discard opening prompts when side chat creation fails @etraut-openai\n- #60559 Preserve inherited previews for paginated thread forks @etraut-openai\n- #60560 Avoid periodic wakeups in idle Windows file watchers @chess-oai\n- #60568 Add an OpenSSH ProxyCommand mode to `codex tcp-tunnel` @apanasenko-oai\n- #60574 Allow searching persisted attached threads @btraut-openai\n- #60578 Add published OAuth metadata discovery to the RMCP client @vishnu-oai\n- #60599 Keep the TUI responsive while opening saved side chats @fcoury-oai\n- #60613 Clarify safety recourse messaging and add a reporting option @xiaohk\n- #60617 Support incremental tool declarations on GCP @akira-oai\n- #60620 Allow sampling in-progress turns with `thread/sample` @keyz\n- #60622 Use app-server MCP configuration and startup events in the TUI @etraut-openai\n- #60624 Preserve script quotes in Windows sandbox cmd invocations @malsamiri-oai\n- #60635 Support archiving and restoring cloud threads @bc-openai\n- #60637 Show pending key chords in a shared floating shortcut guide @fcoury-oai\n- #60638 Honor read-only MCP tool hints in automatic approval @cazhang-oai\n- #60639 Refresh Apps tools outside the MCP runtime gate @dkovalenko-oai\n- #60644 Keep interrupts responsive during host service-tier updates @rhan-oai\n- #60645 Update the safety consent test for the current dialog @ambrosino-oai\n- #60646 Use trusted Guardian templates for managed policies @won-openai\n- #60647 Restore PowerShell's working directory in the MXC sandbox @zm-oai\n- #60651 Enable model and reasoning effort selection for Cloud conversations @bc-openai\n- #60655 Support environment updates in app-server settings APIs @sayan-oai\n- #60662 Support gateway device-code sign-in in headless TUI sessions @smurching-oai\n- #60663 Defer exec-server sandbox preparation to the execution host @viyatb-oai\n- #60665 Add a content helper for forwarding MCP blocks in Code Mode @cconger\n- #60669 Skip submodule worktree scans when checking repository changes @dhavalkapil-oai\n- #60670 Initialize Guardian evidence cursors from thread history state @felixxia-oai\n- #60671 Add sign-only mode and tighten macOS signing verification @tarunoai\n- #60673 Preserve agent message deliveries in rollout traces @cassirer-openai\n- #60675 Avoid redundant reads and screen clears when switching side chats @fcoury-oai\n- #60680 Keep TUI status content separate from composer hints @joesavona\n- #60681 Prioritize draft space when allocating composer footer rows @joesavona\n- #60682 Wrap built-in TUI status lines within the footer row budget @joesavona\n- #60683 Fit composer footer hints to available terminal space @joesavona\n- #60695 Add a Signer Service backend for macOS notarization @tarunoai\n- #60697 Limit MCP product attribution to configured REPL-backed calls @trpcic-openai\n- #60700 Finalize aborted turns and ignore unrelated late aborts @etraut-openai\n- #60702 Centralize permission config selection and legacy translation @ioanbudea-OAI\n- #60708 Canonicalize Windows sandbox homes and migrate saved junction paths @zm-oai\n- #60721 Gate plugin recommendation cache warming on feature flags @adaley-openai\n- #60730 Apply session app overrides during MCP config refresh @jameswt-oai\n- #60732 Allow model-facing ID sequences to resume from allocated IDs @euroelessar\n- #60735 Preserve file-backed audio in tool outputs @hung-oai\n- #60746 Add a Git credential helper for existing Codex logins @ccy-oai\n- #60748 Label seed arguments in the model-facing ID recovery test @bc-openai\n- #60749 Capture saved Daybreak preferences for native helpers @jamy-OAI\n- #60753 Add snapshot coverage for history and notes tool contracts @euroelessar\n- #60757 Use typed context window IDs throughout thread persistence @euroelessar\n- #60759 Fix Unicode caseless matching in thread search @etraut-openai\n- #60763 Hand off approved plans through attachments in fresh sessions @dylan-hurd-oai",
      "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.169.0",
      "channelReleaseNotes": {
        "0.169.0": {
          "releaseNotes": "## New Features\n\n- The opt-in terminal workspace supports multiple side-chat tabs. Switch between them with the keyboard or mouse, and reopen saved local side chats after restarting Codex. (#59784, #60152, #60181)\n- Search older tasks from the agent command center by name, prompt preview, or working directory. (#60286)\n- Turn on **Collapse turn details** in the full-screen transcript to fold completed activity beneath each prompt while keeping answers visible and tool output searchable. (#60554, #60555, #60556, #60557)\n- Add or edit custom model providers from the terminal. With custom gateway onboarding enabled, you can create a provider during sign-in and use a device code for supported gateways over SSH or without a local browser. (#59779, #60009, #60186, #60486, #60662)\n- Press `Ctrl+S` in the terminal report editor to save a diagnostic ZIP locally, even when uploads are disabled. (#60542)\n- With the opt-in Cloud connection on macOS and Linux, send images, choose a model and reasoning effort, and archive or restore Cloud conversations from the terminal. (#59828, #60061, #60635, #60651)\n\n## Bug Fixes\n\n- `codex exec` keeps project configuration and MCP servers disabled in untrusted directories, even with `--sandbox workspace-write`. Use `--trust` with `codex exec` or `codex review` to explicitly save project trust. (#60041)\n- **Yes, clear context and implement** now hands the full approved plan to the fresh session and keeps the current session open if the handoff fails. (#60763)\n- Fixed Windows sandbox handling for quoted `cmd.exe` paths and for PowerShell sessions whose working directory has an unreadable parent. (#60624, #60647)\n- Pasted images on macOS retain their intended orientation and use native PNG or JPEG clipboard data when available. (#60455)\n- The terminal no longer stays busy waiting for MCP servers that a shared app server did not report. (#60280, #60622)\n- Interrupted turns now close cleanly, and delayed aborts or file approval cancellations no longer interrupt a later turn. (#59910, #60700)\n\n## Documentation\n\n- Updated the `openai-docs` skill to focus on Codex and ChatGPT Work questions and first-time API setup, with dedicated guidance for configuring Codex across a team. (#59944, #59949)\n- Documented how app-server clients can list models or authorize a gateway for a configured provider without changing the default provider. (#59776, #59819)\n\n## Chores\n\n- Updated bundled SQLite to 3.54 to pick up write-ahead log fixes. (#60432)\n- Plugin marketplace upgrades can reuse Git objects already on disk, reducing repeat downloads. (#60528)\n\n## Changelog\n\nFull Changelog: https://github.com/openai/codex/compare/rust-v0.168.0...rust-v0.169.0\n\n- #59739 Add a sidebar chooser and floating workspace shortcut panels @fcoury-oai\n- #59743 Forward explicit cyber access programs with header authentication @jamy-OAI\n- #59745 Repair legacy Windows sandbox bin permissions for SYSTEM @zm-oai\n- #59746 Add typed Cloud user-message submission receipts @bc-openai\n- #59749 Use runtime authentication for OpenAI MCP and app requests @cooper-oai\n- #59750 Stop Noise relay recovery on rejected executor credentials @richardopenai\n- #59752 Configure the Opus Bazel patch and isolate auth tests @bkotsopoulos\n- #59754 Enforce host-required cyber access programs per thread @jamy-OAI\n- #59759 Update WebSocket dependency forks @charliemarsh-oai\n- #59767 Add sidebar tabs and nonblocking side-chat creation @fcoury-oai\n- #59768 Stop prefetching plugin discovery at app-server startup @zamoshchin-openai\n- #59769 Reuse decoded WebSocket event kinds in telemetry @charliemarsh-oai\n- #59770 Add shared service-tier support for host-owned agents @rhan-oai\n- #59772 Remove the legacy sandbox policy constructor @ioanbudea-OAI\n- #59774 Remove the legacy Seatbelt command wrapper @ioanbudea-OAI\n- #59776 Allow selecting a configured provider in `model/list` @abhinav-oai\n- #59778 Expose acceptance metadata and code-cell links in rollout traces @tz-openai\n- #59779 Add provider configuration editing to the TUI @alexsong-oai\n- #59780 Enable safe identical code folding for x86-64 musl releases @dkovalenko-oai\n- #59783 Tie gRPC code-mode connection lifetime to live sessions @frantic-openai\n- #59784 Support multiple side chats in the TUI sidebar @fcoury-oai\n- #59785 Decouple message lifecycle state from model-visible item IDs @euroelessar\n- #59787 Support credential export commands for gateway authentication @alexsong-oai\n- #59789 Render delegated thread messages as Markdown in the TUI @bc-openai\n- #59792 Centralize managed proxy preparation and sandbox routing @viyatb-oai\n- #59793 Support update-boundary paging across forked thread histories @owenlin0\n- #59794 Check extension budgets before model generation requests @rhan-oai\n- #59795 Support optional thread IDs in hosted file uploads @lt-oai\n- #59805 Pack relative relocations in x86-64 musl release builds @dkovalenko-oai\n- #59816 Retry gateway credential exports after unauthorized responses @alexsong-oai\n- #59817 Handle TUI message submission receipts and preserve uncertain drafts @bc-openai\n- #59819 Allow provider selection for gateway OAuth reads and logins @abhinav-oai\n- #59822 Add device-code authorization for gateway OAuth @smurching-oai\n- #59823 Bind runtime auth to the provider's selected credential source @cooper-oai\n- #59824 Enable resizing the sidebar chooser @fcoury-oai\n- #59826 Preserve client metadata through queued submissions @eddie-openai\n- #59828 Add a gated Cloud backend to the TUI @bc-openai\n- #59832 Add opt-in incremental tools for regular OpenAI Responses @akira-oai\n- #59842 Carry targeted moderation decisions on final-answer messages @psachdeva-oai\n- #59887 Remove incomplete prereleases after asset upload failures @jif-oai\n- #59891 Bound REPL provenance costs in elastic context preparation @jif-oai\n- #59893 Recompute the approval reviewer when switching models @jif-oai\n- #59902 Keep verified question/answer records whole under elastic budgets @jif-oai\n- #59903 Delete incomplete prereleases by release ID @jif-oai\n- #59905 Validate implicit API keys for Guardian Decisions @jif-oai\n- #59908 Avoid full image decoding for original-detail context estimates @jif-oai\n- #59910 Scope file change approval cancellation to the requesting turn @jif-oai\n- #59913 Resolve Guardian policy from the reviewed thread's catalog @jif-oai\n- #59914 Bind Guardian Decisions requests to their credential source @jif-oai\n- #59928 Improve sidebar chat selection and tab hover highlighting @fcoury-oai\n- #59933 Use permission profiles for protected-model startup downgrades @ioanbudea-OAI\n- #59944 Narrow openai-docs to product Q&A and first-time API setup @provencher-oai\n- #59949 Route broad Codex setup questions through self-knowledge guidance @vb-openai\n- #59954 Resolve skill display names in read and installations tools @jif-oai\n- #59955 Bump `ignore` to `0.4.30` @iceweasel-oai\n- #59958 Expose model metadata from each thread's catalog and settings @seanh-oai\n- #59960 Skip the network denial grace period when remote decisions drain @jif-oai\n- #59963 Normalize turn context permissions to a required profile @ioanbudea-OAI\n- #59969 Reduce contention in thread writer lock coordination @dkovalenko-oai\n- #59972 Fix Opus header installation with relative symlink inputs @bc-openai\n- #59973 Enable gRPC and host output truncation by default for Code Mode @seanh-oai\n- #59974 Test command completion before network denial grace expires @jif-oai\n- #59980 Test rejection of PNGs with readable dimensions but corrupt pixels @fjord-oai\n- #59983 Render typed prompts as Markdown in the TUI @bc-openai\n- #59987 Resolve startup models using thread creation options @seanh-oai\n- #59988 Add inherited styling to TUI display trees @joesavona\n- #59991 Preserve app invocation context across MCP tool refreshes @fahad-OAI\n- #59993 Add fixed read views for local message boards @felixxia-oai\n- #59994 Add read-only evidence retrieval tools for Guardian reviewers @felixxia-oai\n- #59995 Add subscription tools for Guardian reviewers @felixxia-oai\n- #59998 Add atomic bulk channel subscription updates @felixxia-oai\n- #59999 Add model-driven Guardian channel selection @felixxia-oai\n- #60000 Plan Guardian evidence delivery in source order @felixxia-oai\n- #60001 Add bounded original-evidence delivery for Guardian reviewers @felixxia-oai\n- #60002 Decouple Guardian retrieval from local message-board handles @felixxia-oai\n- #60003 Apply runtime authentication to realtime connections @cooper-oai\n- #60004 Expose ChatGPT user IDs in `account/read` responses @dand-oai\n- #60006 Reduce SQLite write overhead for thread activity and history @jonluca\n- #60007 Start cloud threads with the local GitHub project @bc-openai\n- #60008 Refactor TUI clipboard and composer input handling @bc-openai\n- #60009 Add custom gateway selection to TUI sign-in @alexsong-oai\n- #60010 Add a shared Windows Bazel setup action @dkovalenko-oai\n- #60011 Adapt multi-agent mode guidance for hosted tools @rhan-oai\n- #60014 Honor managed runtime authentication modes and expand coverage @cooper-oai\n- #60017 Disable bundled skills in the prompt-prefix comparison test @felixxia-oai\n- #60018 Propagate turn triggers to usage analytics events @chrisdong-oai\n- #60019 Add theme-aware semantic colors to extension UI trees @joesavona\n- #60020 Strip terminal commands from UI tree strings @joesavona\n- #60021 Normalize inline UI tree text across styled leaves @joesavona\n- #60022 Separate UI tree preparation from line rendering @joesavona\n- #60026 Add multiline layout and row wrapping to UI trees @joesavona\n- #60027 Keep configured status lines on the native renderer @joesavona\n- #60028 Reuse prepared UI trees for footer rendering @joesavona\n- #60029 Render UI trees directly into terminal buffers @joesavona\n- #60031 Unify TUI status line layout for extension content @joesavona\n- #60032 Allow extension status content to use multiple footer rows @joesavona\n- #60034 Omit sensitive process inputs from spawn trace logs @etraut-openai\n- #60035 Fix authentication for git-attribution settings requests @cooper-oai\n- #60037 Preserve MCP sharing discovery when deferring cached stdio startup @charliemarsh-oai\n- #60038 Surface MCP server startup errors when preparing cached tool calls @charliemarsh-oai\n- #60039 Add opt-in lazy startup for cached stdio MCP servers @charliemarsh-oai\n- #60040 Restrict legacy incremental tools to Amazon Bedrock providers @akira-oai\n- #60041 Require explicit project trust in non-interactive runs @etraut-openai\n- #60042 Centralize Windows sandbox filesystem override resolution @viyatb-oai\n- #60046 Derive MCP network policy and preserve saved denials @viyatb-oai\n- #60048 Allow plugin starter prompts up to 512 characters @karenwong-openai\n- #60049 Preserve model catalogs when starting child agents @evanz-oai\n- #60055 Reauthenticate runtime requests before reusing WebSocket access @cooper-oai\n- #60061 Support Cloud image messages and editable draft handoffs @bc-openai\n- #60064 Use thread runtime auth for Guardian Decisions and memory quota checks @cooper-oai\n- #60067 Ensure side-chat policy reaches the first model request @fcoury-oai\n- #60073 Use runtime authentication for remote-control requests @cooper-oai\n- #60075 Support asynchronous host service-tier reads and acceptance @rhan-oai\n- #60080 Allow asynchronous model request budget checks @rhan-oai\n- #60082 Fetch account security reminders through app-server @cooper-oai\n- #60096 Stop retrying terminal runtime authentication denials @cooper-oai\n- #60101 Use runtime authentication for Analytics requests @cooper-oai\n- #60118 Buffer payload JSON reads during rollout trace replay @tz-openai\n- #60122 Preserve code mode dispatch errors in rollout traces @tz-openai\n- #60152 Persist local workspace side chats and add tab close controls @fcoury-oai\n- #60157 Add support for incremental code mode tool definitions @akira-oai\n- #60163 Wire incremental exec tool updates into Code Mode sessions @akira-oai\n- #60172 Preserve display instructions in answer moderation @psachdeva-oai\n- #60173 Test exec catalog preservation across session and compaction changes @akira-oai\n- #60177 Add metrics for incremental exec catalog updates @akira-oai\n- #60180 Attach typed punctuation to completed skill mentions @bc-openai\n- #60181 Add keyboard and mouse navigation for sidebar tabs @fcoury-oai\n- #60186 Allow creating custom providers during sign-in @alexsong-oai\n- #60188 Allow model overrides for incremental Code Mode tool messages @akira-oai\n- #60190 Expose agent tree IDs and environment removal @richardopenai\n- #60206 Increase Bazel core unit test shards from 8 to 16 @seanh-oai\n- #60270 Warn when a CLI model is absent from the ChatGPT model list @etraut-openai\n- #60271 Keep the agents overview open when there is no chat to return to @etraut-openai\n- #60280 Fix MCP startup tracking when attaching to shared app servers @charliemarsh-oai\n- #60286 Search task history from the command center @etraut-openai\n- #60309 Defer executor readiness when prewarming a selected project @bc-openai\n- #60319 Improve side-chat discovery and navigation in the TUI @fcoury-oai\n- #60320 Include older itemless Cloud failures in full transcripts @bc-openai\n- #60327 Suppress stale cloud stream disconnects after reopening a thread @bc-openai\n- #60335 Avoid duplicate assistant messages when resuming Cloud threads @bc-openai\n- #60342 Treat goal objectives as untrusted context @dylan-hurd-oai\n- #60389 Include Codex Apps configuration in cloud prewarm requests @bc-openai\n- #60390 Allow deferring plain-text MCP output in thread item listings @btraut-openai\n- #60391 Simplify Guardian's post-denial approval guidance @olliem-oai\n- #60414 Enable model catalog discovery with gateway OAuth @smurching-oai\n- #60416 Keep fitting URLs intact in fullscreen Markdown transcripts @etraut-openai\n- #60418 Let terminal status become done while background terminals run @etraut-openai\n- #60423 Expose deferred MCP servers in resource listings @charliemarsh-oai\n- #60432 Upgrade bundled SQLite to 3.54 for WAL fixes @ioanbudea-OAI\n- #60433 Bind API workload identity source reuse to session claims @cooper-oai\n- #60434 Reset app-server turn summaries when a turn starts @cooper-oai\n- #60435 Dismiss the model switch prompt when account usage recovers @etraut-openai\n- #60436 Revalidate request auth ownership after budget checks @won-openai\n- #60443 Support cancellation and deadlines for realtime attachments @parabolala\n- #60454 Update OpenSSL Rust dependencies @dkovalenko-oai\n- #60455 Prefer native clipboard images on macOS and honor image orientation @dkovalenko-oai\n- #60461 Honor permission grant scopes in executor capability discovery @dkovalenko-oai\n- #60462 Route TUI question answers through Cloud message admission @bc-openai\n- #60466 Keep thread storage available when diagnostic logs fail @dkovalenko-oai\n- #60472 Serialize default thread permissions as a permission profile @ioanbudea-OAI\n- #60473 Respect error retry policy during local compaction @charliemarsh-oai\n- #60475 Stop retrying explicit invalid-workspace errors @charliemarsh-oai\n- #60476 Treat access program denials as terminal errors @charliemarsh-oai\n- #60479 Treat content policy violations as terminal errors @charliemarsh-oai\n- #60480 Treat workspace access denials as terminal errors @charliemarsh-oai\n- #60481 Treat invalid access program stream errors as terminal @charliemarsh-oai\n- #60482 Handle context length errors consistently across response transports @charliemarsh-oai\n- #60486 Add device authorization to app-server gateway OAuth @smurching-oai\n- #60487 Enable untrusted context tool outputs by default @akira-oai\n- #60488 Remove the Xcode 26.4 MCP elicitation compatibility workaround @jameswt-oai\n- #60489 Honor feature overrides when starting the app-server daemon @iceweasel-oai\n- #60492 Add local-only Claude Code skill migration @aramaraju-oai\n- #60496 Preserve typed gRPC code-mode session admission errors @seanh-oai\n- #60498 Unify Guardian context preparation across reviewers @ioanbudea-OAI\n- #60500 Derive sandbox telemetry labels directly from permission profiles @ioanbudea-OAI\n- #60505 Trace MCP refresh causes and plugin metadata changes @charliemarsh-oai\n- #60506 Preserve MCP trace context when tracing is disabled @joesavona\n- #60507 Use hermetic LLVM for Windows MSVC Bazel builds @zbarsky-openai\n- #60511 Treat inference hook denials as terminal errors @ccui-oai\n- #60513 Record an MCP refresh reason for session permission grants @charliemarsh-oai\n- #60517 Route sandbox CLI launches through the shared sandbox manager @viyatb-oai\n- #60519 Handle unfinished tool calls in restored history @etraut-openai\n- #60522 Fragment large Responses WebSocket messages into bounded frames @charliemarsh-oai\n- #60523 Add policy-checked TCP upstream tunneling for SOCKS @viyatb-oai\n- #60524 Encapsulate thread metadata construction @ioanbudea-OAI\n- #60525 Preserve first-party catalog display order in app-server model lists @dpatel-oai\n- #60526 Disable Daybreak when the selected model lacks access @jamy-OAI\n- #60528 Reuse installed Git objects when upgrading marketplaces @charliemarsh-oai\n- #60542 Add local diagnostic ZIP saves to the TUI @smurching-oai\n- #60554 Add optional tool call summaries to the full-screen transcript @etraut-openai\n- #60555 Extend output-free transcript summaries to more tools @etraut-openai\n- #60556 Group consecutive tool calls in the full-screen conversation @etraut-openai\n- #60557 Collapse completed turn activity beneath transcript prompts @etraut-openai\n- #60558 Discard opening prompts when side chat creation fails @etraut-openai\n- #60559 Preserve inherited previews for paginated thread forks @etraut-openai\n- #60560 Avoid periodic wakeups in idle Windows file watchers @chess-oai\n- #60568 Add an OpenSSH ProxyCommand mode to `codex tcp-tunnel` @apanasenko-oai\n- #60574 Allow searching persisted attached threads @btraut-openai\n- #60578 Add published OAuth metadata discovery to the RMCP client @vishnu-oai\n- #60599 Keep the TUI responsive while opening saved side chats @fcoury-oai\n- #60613 Clarify safety recourse messaging and add a reporting option @xiaohk\n- #60617 Support incremental tool declarations on GCP @akira-oai\n- #60620 Allow sampling in-progress turns with `thread/sample` @keyz\n- #60622 Use app-server MCP configuration and startup events in the TUI @etraut-openai\n- #60624 Preserve script quotes in Windows sandbox cmd invocations @malsamiri-oai\n- #60635 Support archiving and restoring cloud threads @bc-openai\n- #60637 Show pending key chords in a shared floating shortcut guide @fcoury-oai\n- #60638 Honor read-only MCP tool hints in automatic approval @cazhang-oai\n- #60639 Refresh Apps tools outside the MCP runtime gate @dkovalenko-oai\n- #60644 Keep interrupts responsive during host service-tier updates @rhan-oai\n- #60645 Update the safety consent test for the current dialog @ambrosino-oai\n- #60646 Use trusted Guardian templates for managed policies @won-openai\n- #60647 Restore PowerShell's working directory in the MXC sandbox @zm-oai\n- #60651 Enable model and reasoning effort selection for Cloud conversations @bc-openai\n- #60655 Support environment updates in app-server settings APIs @sayan-oai\n- #60662 Support gateway device-code sign-in in headless TUI sessions @smurching-oai\n- #60663 Defer exec-server sandbox preparation to the execution host @viyatb-oai\n- #60665 Add a content helper for forwarding MCP blocks in Code Mode @cconger\n- #60669 Skip submodule worktree scans when checking repository changes @dhavalkapil-oai\n- #60670 Initialize Guardian evidence cursors from thread history state @felixxia-oai\n- #60671 Add sign-only mode and tighten macOS signing verification @tarunoai\n- #60673 Preserve agent message deliveries in rollout traces @cassirer-openai\n- #60675 Avoid redundant reads and screen clears when switching side chats @fcoury-oai\n- #60680 Keep TUI status content separate from composer hints @joesavona\n- #60681 Prioritize draft space when allocating composer footer rows @joesavona\n- #60682 Wrap built-in TUI status lines within the footer row budget @joesavona\n- #60683 Fit composer footer hints to available terminal space @joesavona\n- #60695 Add a Signer Service backend for macOS notarization @tarunoai\n- #60697 Limit MCP product attribution to configured REPL-backed calls @trpcic-openai\n- #60700 Finalize aborted turns and ignore unrelated late aborts @etraut-openai\n- #60702 Centralize permission config selection and legacy translation @ioanbudea-OAI\n- #60708 Canonicalize Windows sandbox homes and migrate saved junction paths @zm-oai\n- #60721 Gate plugin recommendation cache warming on feature flags @adaley-openai\n- #60730 Apply session app overrides during MCP config refresh @jameswt-oai\n- #60732 Allow model-facing ID sequences to resume from allocated IDs @euroelessar\n- #60735 Preserve file-backed audio in tool outputs @hung-oai\n- #60746 Add a Git credential helper for existing Codex logins @ccy-oai\n- #60748 Label seed arguments in the model-facing ID recovery test @bc-openai\n- #60749 Capture saved Daybreak preferences for native helpers @jamy-OAI\n- #60753 Add snapshot coverage for history and notes tool contracts @euroelessar\n- #60757 Use typed context window IDs throughout thread persistence @euroelessar\n- #60759 Fix Unicode caseless matching in thread search @etraut-openai\n- #60763 Hand off approved plans through attachments in fresh sessions @dylan-hurd-oai",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.169.0"
        },
        "0.171.0-alpha.5": {
          "releaseNotes": "Release 0.171.0-alpha.5",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.171.0-alpha.5"
        },
        "0.167.0-alpha.3.2": {
          "releaseNotes": "Release 0.167.0-alpha.3.2",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.167.0-alpha.3.2"
        },
        "0.167.0-alpha.4.1": {
          "releaseNotes": "Release 0.167.0-alpha.4.1",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.167.0-alpha.4.1"
        },
        "0.167.0-alpha.4.2": {
          "releaseNotes": "Release 0.167.0-alpha.4.2",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.167.0-alpha.4.2"
        },
        "0.167.0-alpha.4.3": {
          "releaseNotes": "Release 0.167.0-alpha.4.3",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.167.0-alpha.4.3"
        },
        "0.169.0-alpha.11.1": {
          "releaseNotes": "Release 0.169.0-alpha.11.1",
          "releaseNotesUrl": "https://github.com/openai/codex/releases/tag/rust-v0.169.0-alpha.11.1"
        }
      },
      "versionUpdatedAtUnixSeconds": 1794559401,
      "versionUpdatedAtSource": "official"
    },
    "dsh": {
      "version": "0.2.2-rc.1",
      "channels": {
        "alpha": "0.2.2-alpha.3",
        "latest": "0.2.2-rc.1",
        "next": "0.2.2-rc.3"
      },
      "npmPackage": "@deepseek-ai/dsh",
      "releaseNotes": "[中文](#cn-v0.2.2-rc.1-5) | [English](#en-v0.2.2-rc.1-5)\r\n\r\n作为 0.2.2 系列的首个候选版本，本版本汇总了自 v0.2.1-rc.5 以来的主要用户和开发者相关变更。\r\n\r\n<h3 id=\"cn-v0.2.2-rc.1-5\">新增功能</h3>\r\n\r\n- 完善手机和平板适配，优化软键盘交互、导航与窄屏布局，保持菜单和操作入口可用。 @Stevring, @turtle2099, @LegGasai, @EricMoin, @Saafo\r\n- 支持将聊天文本作为引用插入输入框，并在发送后显示紧凑预览。 @lsdsjy, @imccyu\r\n- 支持将完整历史会话复制为 Markdown，包含可用的原始日志路径。 @tianyicui\r\n- 工作步骤收起后保留全部助手文字回复，可切换为仅最终回答。 @imccyu\r\n- 支持统一右键与键盘菜单，覆盖会话、工作区和侧边栏，并支持开发者扩展。 @std4453\r\n- 文件预览支持常驻目录树和文件定位功能。 @yudshj\r\n- 新增日语、西班牙语、法语、德语、俄语和巴西葡萄牙语文案与界面配置。 @07akioni\r\n- 插件管理页支持展示富文本详情，并改善页面布局和导航行为。 @turtle1999, @turtle2099\r\n- 插件管理支持更新第三方插件包；热更新失败时会尝试恢复旧版本。 @turtle1999, @turtle2099\r\n- 新增实验性「`subagent_oar`工具」插件，可将独立任务交给本机 Codex 或 Claude CLI。 @tianyicui\r\n- 新增实验性「个性化推荐」插件，按需在回答下方提供官方插件启用卡片或个性化页面创建卡片。 @ZiyaZhang\r\n- 新增实验性「开发者工具 - 统计」插件，按轮次和步骤查看上下文、缓存、模型与工具耗时等统计。 @mektpoy\r\n- 新增实验性「变更请求与工作树」：在独立 Git 工作树中运行会话，通过可搜索文件树和逐文件导航查看本地及 PR 差异，将选中代码和评论交给 Agent，并跟踪检查与评审状态。 @LegGasai, @tianyicui\r\n\r\n### 体验优化\r\n\r\n- 同名工作区在选择器中显示最短区分路径后缀，窄屏优先保留后缀。 @turtle2099\r\n- 会话列表支持插件图标，并改善键盘与触屏操作。 @LegGasai\r\n- 侧栏会话悬浮卡显示工作目录，便于区分未分组或同名会话。 @turtle2099\r\n- 优化侧栏空间布局，改善响应区域，平滑搜索框展开与收起。 @Yifffan\r\n- 侧栏搜索支持不区分大小写的会话 ID 子串匹配。 @turtle2099\r\n- 悬浮侧栏面板拖过屏幕边缘时有阻力，松手后弹回可见区域；窗口缩小时保持控件可达。 @yudshj\r\n- 支持中键关闭右侧栏标签，关闭后台标签不改变当前选中项，并保留不可关闭的起始页。 @Kingwl\r\n- 消息在宿主确认接收后才显示并清空草稿；发送期间输入框只读，发送失败时保留草稿、引用和附件。 @LegGasai\r\n- 图片上传方式调整为进入输入框后立即上传，发送消息时复用已上传的图片。默认单张图片上限提高到 50 MiB。 @LegGasai\r\n- 已回答的问题批次以消息气泡显示，原生与 PTC 调用的回答在过程折叠后仍可回看。 @Kaige-Gao\r\n- 运行状态位于当前工作轮次尾部、待处理插话之前，方便区分运行中和排队中的消息，并改善界面布局抖动问题。 @imccyu\r\n- 改善工作步骤展开／收起和底部输入框的布局稳定性，减少正文、滚动与输入交互时的跳动，并保持运行状态可见。 @imccyu\r\n- 输入框统计读数被截断时，可通过提示气泡查看完整数值；会话统计也显示轮次与步骤数。 @turtle2099\r\n- 点击聊天中的文件行号链接后，代码和文本预览以短暂高亮标出目标行并淡出。 @turtle2099\r\n- 支持拖动平移超出视口的图片，并通过应用内拖放或桌面原生拖放交付原始文件。 @std4453\r\n- Trajectory 结果页新增实时工具返回值的原始 JSON 查看，并与渲染结果上下展示。 @kermanx\r\n- Trajectory 支持独立折叠子调用，保留父调用和摘要；搜索或跨视图定位时可展开对应子调用。 @kermanx\r\n- 模型选择器默认勾选已配置模型，可一次添加或移除候选并保留自定义值；筛选后的全选只作用于可见候选。 @turtle2099\r\n- 对通过 pi-ai 接入且不支持在对话中追加系统消息的模型，后续系统消息会在原位置作为提醒提供，不会移到最初的提示词中。 @Tuyixiang\r\n- 支持在 DeepSeek 与 pi-ai 提供商内拖动或用方向键排序模型，保存后保留顺序及完整模型参数。 @Magolor\r\n- 自动化任务页支持确认后一次清除全部已结束任务，保留进行中的任务。 @Chinesezjc\r\n- Search 功能优先向模型提供 Search API 长摘要，默认每来源最多 800 字符；搜索卡片仍展示短摘录。 @yudshj\r\n- Auto 自动审核支持在连续工具调用之间更好地复用历史上下文缓存，减少重复处理。 @turtle2099\r\n- 后台任务完成通知直接携带小体积输出，并减少已读取结果和子代理收尾消息的重复通知。 @turtle1999\r\n- 子代理等待指引减少 sleep 和重复轮询：只有结果尚未返回时，结束当前轮次等待完成通知。 @Chinesezjc\r\n- 加快带固定目录前缀的文件查找，跳过无关目录，同时保持结果与排序规则不变。 @kermanx\r\n- Word 常规编辑在保存并核对内容与格式后即可交付，减少不必要的 ZIP、XML 与元数据检查。 @tianyicui\r\n- 远程连接默认启用 WebSocket 压缩，减少大量历史消息的传输量；可通过 `websocketCompression` 关闭。 @imccyu\r\n- Web 静态资源支持 ETag 条件请求，未变化的资源返回 304，减少重复下载。 @imccyu\r\n- 减少会话状态更新时的重复发布和目录处理开销，并降低长回复流式组装的运行时成本。 @liukx0205, @imccyu\r\n- 改善 macOS Computer Use 的系统与应用权限引导，通过独立应用申请系统权限，提供系统设置与应用拖入引导并在返回后刷新状态；支持长按、改善应用启动，应用授权可跨重启保留。 @CreatixChu, @koalazf99\r\n\r\n### 问题修复\r\n\r\n- 全局与项目 AGENTS.md 分别使用 maxBytes 预算，避免项目指令挤掉全局指令；同时包含两条链的消息总量最多为原配置的两倍。 @ZiyaZhang\r\n- 切换到较小上下文模型前先用原模型压缩历史；失败时停止切换请求并保留原请求头。 @Dudu-0223\r\n- 使用 Gemini 的 OpenAI 兼容 Chat Completions 接口时，工具调用会保留并在后续请求中带回所需的思考签名，避免因签名缺失导致请求拒绝。 @turtle2099\r\n- 系统提示词未变化时，新一轮模型请求可继续复用已有上下文前缀缓存，避免不必要的缓存失效。 @mektpoy\r\n- 通过 pi-ai 接入的模型在会话图片超过请求数量上限时，自动省略最早的图片并继续请求，避免持续失败。 @turtle2099\r\n- 缺少所需凭据时不向模型提供 Web 搜索工具；新版 Web API 的抓取工具也按凭据就绪状态提供。 @LegGasai\r\n- 修复关闭应用时 Auto 会话权限意外变成完全访问的问题，保留已保存的权限与审批策略。 @tianyicui\r\n- 修复 OpenCode 路由下自动审核在工具执行前失败的问题，审查请求携带对应会话的身份和用途。 @LegGasai\r\n- 等待后台任务输出时，用户插话可立即解除等待并返回当前输出，后台任务继续运行。 @mektpoy\r\n- 修复预设往返切换后委派工具暂时缺失的问题，并让委派工具遵循当前 Agent 的工具限制。 @Dudu-0223\r\n- 被阻塞的目标可从 Web 目标栏继续；已耗尽轮次上限时仍需先提高上限。 @turtle2099\r\n- 修复多选问题有多个推荐选项时只预选第一项的问题，现在卡片打开时预选全部推荐项；单选和已回答卡片的行为保持不变。 @yudshj\r\n- 审批提示明确说明是否向用户请求授权，避免模型误解 never 策略。 @turtle2099\r\n- 修复 macOS 持久 Bash 工具中感叹号被历史展开改写或导致命令超时的问题。 @grllll\r\n- 明确告知模型：用户跳过提问后应继续，不重复追问，也不能把跳过当作授权。 @turtle2099\r\n- 修复一个技能根目录读取失败导致其他目录中的技能也不可用的问题，保留可用技能并提示不完整的发现结果。 @Dudu-0223\r\n- Web Fetch 可读取编码声明混含 UTF-8 的可读页面。 @Dudu-0223\r\n- 修复工具调用因无歧义的可选参数而失败的问题：grep 接受空 include。 @turtle1999\r\n- 长问题和选项说明可原地展开与收起，内容区滚动时导航与提交按钮保持可见。 @yudshj\r\n- `sdk-minimal` 配置在请求模型或执行工具前保存会话恢复记录；保存失败时不会继续相关操作，提高短会话中断后的可恢复性。 @LogosVeritas\r\n- 断线或重连期间暂停聊天运行计时，连接恢复后按轮次起点恢复显示。 @turtle2099\r\n- 停止后补发的插话与新消息在轨迹中按日志顺序显示于助手输出之前，刷新和历史加载后仍保持一致。 @kermanx\r\n- 普通会话分支现在独立运行，不再被误识别为子智能体；真正子智能体仍保留创建者关系。 @Dudu-0223\r\n- 修复包含旧版子代理描述的历史会话无法打开，并导致会话搜索失败的问题。 @turtle2099\r\n- 修复加载更早的已压缩会话历史后，聊天记录停止加载和更新的问题。 @turtle2099\r\n- 本地文件工具将开头的 ~ 或 ~/ 正确展开为宿主主目录，路径中间的 ~ 保持字面含义。 @turtle2099\r\n- 聊天中的相对文件链接按点击时会话当前工作目录打开，进入 worktree 后不再误开原项目文件。 @turtle2099\r\n- Markdown 中单个 ~ 保持字面显示，只有 ~~ 才形成删除线。 @turtle2099\r\n- 本地 Markdown 图片被覆盖后，新消息和新打开的预览会显示当前文件，而不是复用旧图。 @turtle2099\r\n- 修复裸 URL 将后续中文标点及正文一并识别为链接的问题。 @turtle2099\r\n- 修复 Markdown 中 Windows 文件路径的反斜杠被转义删除，导致链接或图片打开错误位置的问题。 @turtle2099\r\n- 交付卡与收尾回复中的文件引用覆盖整轮，包括回复之后的交付与写入；present 说明等待用户回答前应先提供文件链接。 @yudshj\r\n- 修复部分结构体代码高亮导致页面长时间卡死的问题。 @yudshj\r\n- 修复输入框粘贴文件或文件夹路径时仅高亮目录前缀的问题。 @turtle2099\r\n- 切换、打开或关闭侧栏文件标签时，标签栏从原滚动位置继续，不再先跳回最左端。 @turtle2099\r\n- 侧栏原生拖动使用独立主题背景预览，避免混入后方消息内容并保留排序。 @Stevring\r\n- 深色主题设置导航的悬停背景可见，选中态保持优先。 @turtle2099\r\n- 聊天中的 Markdown 文件链接容忍无效行号，并支持行范围及行列后缀；无法定位时仍打开原文件，URL 保持为网页链接。 @kermanx\r\n- 文本和 Markdown 文件预览在刷新后保留阅读位置，文件暂时变短时也保留原位置，避免跳回第一页。 @yudshj\r\n- Trajectory 保留失败工具实际返回的文本，列表、详情和复制不再用合成错误信息替换它；原生工具和嵌套 PTC 调用使用相同规则。 @kermanx\r\n- 修复部分历史 `run_code` 记录的代码页缺少 TypeScript 或 Python 语法高亮的问题。 @kermanx\r\n- 安装自托管 Git 插件时，HTTPS 无法读取而 SSH 可用时改用 SSH。 @turtle2099\r\n- 安装含 prepare 脚本的 Git 插件时，显示脚本授权和重试选项，不再仅报告未知错误。 @turtle2099\r\n- 配置项目按自身 ESM 规则解析插件依赖子路径、包内导入和自引用。 @shigma\r\n- 修复 macOS 激活窗口时点击会话标题误触发重命名，正常双击重命名保持不变。 @turtle2099\r\n- 修复以管理员权限运行 DSH 或在 Windows Sandbox 中使用时，受限沙箱命令无法启动的问题；文件写入和删除限制保持不变。 @huoyaoyuan\r\n- Windows 已安装应用显示正确的发布者名称，卸载列表中的应用名称不再附带版本号。 @winewill\r\n- 改善 Windows 安装器进度页绘制、拖动与窗口激活表现，恢复系统最小化动画，并让标题按钮在原区域松开时触发。 @winewill\r\n- 桌面 Host 完成任务清理并确认关闭后立即退出，避免遗留事件循环句柄阻塞更新安装。 @turtle2099\r\n- macOS 桌面更新在确认前等待退出全屏，安装失败后恢复工作区；退出全屏超时则保留任务并提示重试。 @winewill\r\n- 桌面更新提示改为窗内视图，后台结果更新不再抬升原生子窗口；更新提示随应用浅色或暗色主题显示。 @winewill\r\n- 修复 macOS 桌面端会话头部菜单与按钮之间出现过大空隙的问题。 @turtle2099\r\n- 修复 macOS 原生目录选择框初次显示后灰显、目录无法点击的问题。 @EricMoin\r\n\r\n### 其他变更\r\n\r\n- 同步 Cordis Core 至 4.1.0、Loader 至 1.1.0、Include 至 1.1.0，统一配置访问、条目变更和持久化行为。 @shigma, @imccyu\r\n- Cordis Fiber 提供统一的原始配置、候选配置解析和生效配置访问，设置编辑与热更新使用一致的配置来源。 @shigma\r\n- DSH 的最低 Node.js 版本提高至 24.9；使用旧版 Node.js 的用户需先升级运行时。 @tianyicui\r\n- 升级 pi-ai 至 1.3.0，并同步模型目录、端点与推理回放规则；完整工具参数格式错误会在执行任何工具前终止该次响应。 @tianyicui\r\n- 未声明容量的自定义模型默认上下文与最大输出调整为十进制 1M/128K；较小端点应显式覆盖容量以避免延迟压缩。 @LegGasai\r\n- Agent 在提示词组装与 pre-step 前固定本步模型，重试保留同一选择；插件应通过 agent.model 选择模型，agent/request 不再允许改路由。 @kermanx\r\n- pi-ai 支持插件按会话和请求用途提供动态请求头；无效请求头在请求发出前报错。 @LegGasai\r\n- TypeScript 与 Python SDK 补齐与 Web 模式一致的文件交付、问答与回调、调度、技能和上下文能力，并支持原生命令、插件管理、计划审阅、目标续跑及操作审批；插件变更需重启 SDK 生效。 @koalazf99, @LogosVeritas\r\n- 「自动化任务」改为统一的宿主级管理，支持手动创建、直接编辑和通过预填提示在会话中创建，保留编辑草稿并支持冲突复核，可选择复用或新建会话执行任务。 @ZiyaZhang, @Magolor\r\n- 「Git 工作树」入口已合入「变更请求与工作树」，此前启用独立插件的用户需手动从 profile 的 dsh.profile.bundles 中移除 @deepseek-ai/dsh-experimental-tool-worktree。 @LegGasai\r\n- Ralph 循环与会话搜索不再显示在实验性列表。 @ZiyaZhang\r\n- 新增默认关闭的 `apply_patch` 工具，一次完成多文件新增、编辑、删除和移动，并在 Review 中查看变更。 @sjw1231, @CreatixChu\r\n- 文件修改的先读和外部修改防护默认关闭，沙箱限制和 Review 保持不变；需要原防护的 profile 可显式恢复观察策略。 @sjw1231\r\n- 工具可按步骤条件启用，模型声明、PTC 绑定与执行准入保持一致；插件需迁移 tools.resolve/executable 与提示词组装接口。 @LegGasai\r\n- Node PTC 新增 VM Script 模式，支持顶层 await、动态导入和表达式结果，可独立开启跨调用状态保留；默认仍逐次执行，脚本顶层不支持 return 或 using。 @kermanx\r\n- 原生与 PTC 工具执行拆为按 Agent 作用域选择的插件；PTC 通过配置 overlay 启用，旧 tools.mode 与 DSH_TOOLS_MODE 需迁移。 @kermanx\r\n- PTC Node 控制通道改用 birpc；自部署 bootstrap 与 SSH helper 必须同步升级，SSH 协议从 2 升为 3。 @kermanx\r\n- PTC Mode 中由调用方取消的 run_code 改为返回 ABORTED，而非 CODE_RUN_FAILED；SDK 和 Session 消费方需更新取消分类。 @kermanx\r\n- Web Fetch 不再拒绝非公网地址，可用于代理与内网，部署应自行限制网络访问。 @turtle2099\r\n- Headless 支持实验性 Auto 自动审核。 @tianyicui\r\n- 桌面启动故障可获取诊断报告，并附上有界的近期插件操作记录，便于排查问题。 @winewill\r\n- Session API 新增独立接口，可分别读取快照和持续订阅会话事件日志、运行状态以及事件投影数据。 @imccyu\r\n- 修复会话创建、恢复和销毁期间的事件发布与清理顺序；初始化事件可实时订阅，取消时等待已取得资源完成清理。 @kermanx\r\n- Session Projection 注册 API 调整为异步，需要插件启动时持有。 @kermanx, @Magolor\r\n- 整单元 JSON 与 SQLite 存储支持读取领域明确声明的兼容旧版本，并以新版本格式写入。 @Magolor\r\n- 「自定义插件市场」更名为「自定义插件索引」，发现页读取用户添加的索引文件，索引生成器排除标记为 private 的版本、标签与默认分支包。 @turtle2099, @turtle1999\r\n- 官方组合包列表改由 @deepseek-ai/dsh-official-bundles 导出；自定义集成需更新原 app-boot 的相关导入。 @turtle2099\r\n- 插件可为自己的设置页面提供导航图标，卸载后恢复默认图标。 @Magolor\r\n- 插件安装失败时显示完整诊断与 Host 日志入口，并区分安装失败和安装后启用失败。 @kermanx\r\n\r\nThis first release candidate for 0.2.2 summarizes the major user- and developer-facing changes since v0.2.1-rc.5.\r\n\r\n<h3 id=\"en-v0.2.2-rc.1-5\">New Features</h3>\r\n\r\n- Improve phone and tablet support with better on-screen keyboard interaction, navigation, and narrow layouts, keeping menus and actions accessible. by @Stevring, @turtle2099, @LegGasai, @EricMoin, @Saafo\r\n- Insert chat text as quotes in the composer and show compact previews after sending. by @lsdsjy, @imccyu\r\n- Copy the complete conversation history as Markdown, including the original log path when available. by @tianyicui\r\n- Keep all assistant text replies visible when work steps are collapsed, with an option to show only the final answer. by @imccyu\r\n- Unify mouse and keyboard context menus across Sessions, workspaces, and the sidebar, with support for developer extensions. by @std4453\r\n- Keep a directory tree in file previews and locate the current file. by @yudshj\r\n- Add Japanese, Spanish, French, German, Russian, and Brazilian Portuguese interface text and locale configuration. by @07akioni\r\n- Show rich-text plugin details in the plugin manager and improve page layout and navigation. by @turtle1999, @turtle2099\r\n- Support updating third-party plugin packages and attempt to restore the previous version if hot updates fail. by @turtle1999, @turtle2099\r\n- Add the experimental `subagent_oar` tool plugin to delegate independent tasks to local Codex or Claude CLIs. by @tianyicui\r\n- Add experimental Personalized recommendations, offering official-plugin activation or personalized-page creation cards below answers when relevant. by @ZiyaZhang\r\n- Add experimental Developer tools — Statistics for per-turn and per-step context, cache, model, and tool measurements. by @mektpoy\r\n- Add experimental Change requests and worktrees to run Sessions in separate Git worktrees, browse local and PR diffs through a searchable file tree and per-file navigation, quote selected code and comments to the Agent, and track checks and reviews. by @LegGasai, @tianyicui\r\n\r\n### Improvements\r\n\r\n- Distinguish same-named Workspaces with their shortest unique path suffix and prioritize that suffix on narrow screens. by @turtle2099\r\n- Support plugin icons in the Session list and improve keyboard and touch interaction. by @LegGasai\r\n- Show working directories on sidebar Session hover cards to distinguish ungrouped or similarly named Sessions. by @turtle2099\r\n- Improve sidebar spacing and click targets, with smoother search-field expansion and collapse. by @Yifffan\r\n- Find Sessions by case-insensitive ID substrings in sidebar search. by @turtle2099\r\n- Add resistance and spring-back when floating sidebar panels are dragged beyond screen edges, and keep their controls reachable when the window shrinks. by @yudshj\r\n- Close right-sidebar tabs with the middle mouse button without selecting background tabs, while preserving the protected start tab. by @Kingwl\r\n- Show messages and clear drafts only after the host accepts them. Keep the composer read-only while sending and preserve drafts, quotes, and attachments on failure. by @LegGasai\r\n- Upload images as soon as they enter the composer and reuse the uploaded images when sending messages. Raise the default per-image limit to 50 MiB. by @LegGasai\r\n- Show answered question batches as message bubbles so answers from native and PTC calls remain visible after work steps collapse. by @Kaige-Gao\r\n- Place running status at the active turn tail before queued steering messages, distinguishing active and pending input and reducing layout jitter. by @imccyu\r\n- Improve layout stability when expanding or collapsing work steps and interacting with the docked composer. Reduce content and scroll jumps while keeping running status visible. by @imccyu\r\n- Show full truncated composer statistics in tooltips and include turn and step counts in Session statistics. by @turtle2099\r\n- Briefly highlight and fade the target line in code and text previews after opening a file-line link from chat. by @turtle2099\r\n- Pan images that exceed the viewport and transfer original files through in-app drag-and-drop or native desktop dragging. by @std4453\r\n- Add raw JSON views of live tool results to Trajectory, displayed above rendered results. by @kermanx\r\n- Fold Trajectory subcalls independently while keeping their parent calls and summaries visible. Reveal matching subcalls through search or cross-view navigation. by @kermanx\r\n- Start the model picker with configured models selected, add or remove candidates while preserving custom values, and apply select-all only to visible candidates. by @turtle2099\r\n- For models accessed through pi-ai that cannot accept additional system messages during a conversation, keep later system messages in place as reminders rather than moving them into the initial prompt. by @Tuyixiang\r\n- Reorder models within DeepSeek and pi-ai providers by dragging or using arrow keys, preserving order and complete model parameters when saved. by @Magolor\r\n- Clear all inactive automation tasks in one confirmed action while keeping active tasks. by @Chinesezjc\r\n- Search prioritizes long Search API summaries for models, capped at 800 characters per source by default, while search cards retain short snippets. by @yudshj\r\n- Improve history-context cache reuse across consecutive tool calls in Auto review to reduce repeated processing. by @turtle2099\r\n- Background-job completion notices include small outputs and reduce duplicate notifications for already-read results and subagent closing messages. by @turtle1999\r\n- Reduce sleeping and repeated polling in subagent guidance: end the current turn when only a result remains pending and wait for its completion notification. by @Chinesezjc\r\n- Speed up file searches with literal directory prefixes by skipping unrelated directories while preserving results and ordering. by @kermanx\r\n- Deliver ordinary Word edits after saving and checking content and formatting, without unnecessary ZIP, XML, or metadata inspection. by @tianyicui\r\n- Enable WebSocket compression for remote connections by default to reduce transfers of large message histories; disable it with `websocketCompression`. by @imccyu\r\n- Web static assets support ETag revalidation, returning 304 for unchanged files to avoid repeated downloads. by @imccyu\r\n- Reduce repeated publications and catalog processing during Session state updates, and lower runtime overhead when assembling streaming replies. by @liukx0205, @imccyu\r\n- Improve system and application permission onboarding for macOS Computer Use. Request system permissions through a standalone app with system-settings and drag-in guidance, and refresh permission status on return. Support long clicks, improve application launching, and retain application permissions across restarts. by @CreatixChu, @koalazf99\r\n\r\n### Bug Fixes\r\n\r\n- Budget global and project AGENTS.md chains separately so project instructions do not evict global guidance; messages containing both chains can use up to twice maxBytes. by @ZiyaZhang\r\n- Compact history with the previous model before switching to a smaller context window; stop the switch request and preserve its previous header if compaction fails. by @Dudu-0223\r\n- Preserve the required thought signatures in Gemini tool calls over OpenAI-compatible Chat Completions and include them in subsequent requests to prevent rejection caused by missing signatures. by @turtle2099\r\n- Reuse existing context-prefix caches for new model requests when the system prompt is unchanged, avoiding unnecessary cache invalidation. by @mektpoy\r\n- Continue pi-ai conversations that exceed the request image-count limit by offloading the oldest images, preventing repeated failures. by @turtle2099\r\n- Hide Web search tools when required credentials are missing; fetch tools using the newer Web API also follow credential readiness. by @LegGasai\r\n- Preserve saved Auto permission and approval policy during application shutdown instead of unintentionally switching to Full access. by @tianyicui\r\n- Fix Auto review failures before tool execution on OpenCode routes by supplying the reviewed Session identity and request purpose. by @LegGasai\r\n- User steering now releases a background-output wait immediately and returns current output without stopping the job. by @mektpoy\r\n- Fix delegation tools being temporarily unavailable after preset round trips and apply the current Agent’s tool restrictions to delegation. by @Dudu-0223\r\n- Resume blocked goals from the Web goal bar; goals that have exhausted their round limit still require a higher limit first. by @turtle2099\r\n- Preselect every recommended option in multiple-choice questions instead of only the first, while preserving single-choice and answered-card behavior. by @yudshj\r\n- Approval messages explicitly state whether user approval is requested, avoiding ambiguity around the never policy. by @turtle2099\r\n- Prevent history expansion from rewriting exclamation marks or causing persistent Bash command timeouts on macOS. by @grllll\r\n- Tell the model to continue after a skipped question without asking it again or treating the skip as permission. by @turtle2099\r\n- Keep skills from healthy roots available when another skill root cannot be read, and report incomplete discovery. by @Dudu-0223\r\n- Allow Web Fetch to read valid UTF-8 pages whose encoding declarations contain multiple labels including UTF-8. by @Dudu-0223\r\n- Fix tool calls failing on unambiguous optional arguments by accepting an empty grep include. by @turtle1999\r\n- Expand and collapse long questions and option descriptions in place, with navigation and submission controls kept visible. by @yudshj\r\n- Save Session recovery records before model requests and tool execution in `sdk-minimal`. Stop related operations if saving fails to improve recovery after short Sessions are interrupted. by @LogosVeritas\r\n- Pause the chat running clock during disconnection or reconnection and resume elapsed-time display after reconnecting. by @turtle2099\r\n- Keep retained steering and follow-up input in log order before assistant output in Trajectory, including after refresh and history loading. by @kermanx\r\n- Run ordinary conversation forks independently instead of treating them as subagents, while preserving creator relationships for real subagents. by @Dudu-0223\r\n- Restore opening historical Sessions with older subagent descriptors and fix the resulting Session search failures. by @turtle2099\r\n- Fix chat history loading and live updates getting stuck after loading earlier compacted history. by @turtle2099\r\n- Expand leading ~ or ~/ in local file tools to the Host home directory while preserving literal tildes elsewhere in paths. by @turtle2099\r\n- Resolve relative chat file links from the Session working directory at click time so worktree Sessions do not open the original checkout. by @turtle2099\r\n- Keep single tildes literal in Markdown and require double tildes for strikethrough. by @turtle2099\r\n- Show the current local Markdown image in newly rendered messages and previews after the file is overwritten. by @turtle2099\r\n- Fix bare URLs incorrectly including following Chinese punctuation and text in links. by @turtle2099\r\n- Preserve backslash separators in Windows-path Markdown links and images so they resolve to the intended location. by @turtle2099\r\n- Include whole-turn deliveries and writes in deliverable cards and closing-reply file links, even after the reply; present guidance tells agents to link files before waiting for user input. by @yudshj\r\n- Fix prolonged page freezes caused by syntax highlighting of certain struct definitions. by @yudshj\r\n- Fix pasted file and folder paths being highlighted only through their directory prefixes in the composer. by @turtle2099\r\n- Preserve the sidebar file-tab strip's scroll position when selecting, opening, or closing tabs instead of restarting from the left edge. by @turtle2099\r\n- Use isolated, theme-backed sidebar drag previews to avoid capturing content behind rows while preserving native reordering. by @Stevring\r\n- Make settings-navigation hover visible in dark mode while retaining selected-state priority. by @turtle2099\r\n- Accept line ranges and line/column suffixes in Markdown file links, open the file when a location is invalid, and retain URLs as web links. by @kermanx\r\n- Retain reading position in text and Markdown previews across refreshes and temporary file shortening instead of jumping back to the first page. by @yudshj\r\n- Preserve the actual text returned by failed tools in Trajectory lists, details, and copied output, including native tools and nested PTC calls. by @kermanx\r\n- Restore TypeScript and Python syntax highlighting for affected historical `run_code` records. by @kermanx\r\n- Use SSH for self-hosted Git plugin installation when HTTPS is unreadable and SSH is available. by @turtle2099\r\n- Offer script approval and retry when installing Git plugins with prepare scripts instead of reporting only an unknown error. by @turtle2099\r\n- Resolve configuration-project plugins using the project’s ESM rules for dependency subpaths, package imports, and self-references. by @shigma\r\n- Prevent a window-activating click on a Session title from accidentally opening rename on macOS, while preserving normal double-click rename. by @turtle2099\r\n- Fix restricted sandbox commands failing to start when DSH runs as administrator or in Windows Sandbox, while preserving file-write and deletion restrictions. by @huoyaoyuan\r\n- Correct the Windows installed-app publisher and keep the application name separate from its version in uninstall listings. by @winewill\r\n- Improve Windows installer progress rendering, dragging, and activation, restore native minimize transitions, and trigger caption buttons on release inside the original button. by @winewill\r\n- Exit the Desktop Host immediately after acknowledging completed teardown so leftover event-loop handles do not block update installation. by @turtle2099\r\n- Leave macOS fullscreen before Desktop update confirmation so failed installs recover the workspace; preserve tasks and show retry guidance if fullscreen exit times out. by @winewill\r\n- Show desktop update prompts in-window without raising native child windows for background results, and match prompts to the app’s light or dark theme. by @winewill\r\n- Keep conversation header menus close to their trigger buttons on macOS desktop. by @turtle2099\r\n- Fix the native macOS directory picker initially appearing inactive and ignoring directory clicks. by @EricMoin\r\n\r\n### Chores\r\n\r\n- Update to Cordis Core 4.1.0, Loader 1.1.0, and Include 1.1.0, unifying configuration access, entry changes, and persistence behavior. by @shigma, @imccyu\r\n- Provide unified Cordis Fiber access to raw configuration, candidate resolution, and effective configuration, used consistently by settings and hot reload. by @shigma\r\n- Raise the minimum supported Node.js version to 24.9. Upgrade older Node.js runtimes before upgrading DSH. by @tianyicui\r\n- Upgrade pi-ai to 1.3.0 with updated model catalogs, endpoints, and reasoning replay rules; malformed completed tool arguments fail the response before any tool executes. by @tianyicui\r\n- Default undeclared custom-model capacities to decimal 1M context and 128K output; smaller endpoints should set explicit capacities to avoid delayed compaction. by @LegGasai\r\n- Capture the step model before prompt assembly and pre-step and retain it through retries; plugins should select through agent.model rather than changing routes in agent/request. by @kermanx\r\n- Allow plugins to supply dynamic pi-ai headers using Session identity and request purpose, rejecting invalid headers before dispatch. by @LegGasai\r\n- Bring the TypeScript and Python SDKs in line with Web mode for file delivery, questions and callbacks, scheduling, skills, and context. Support native commands, plugin management, plan review, goal continuation, and operation approvals; restart the SDK to apply plugin changes. by @koalazf99, @LogosVeritas\r\n- Unify scheduled-task management across the Host with manual creation, direct editing, and prefilled prompts for creation in a Session. Retain drafts, support conflict review, and run tasks in reusable or new Sessions. by @ZiyaZhang, @Magolor\r\n- The Git worktree entry is included in Change requests and worktrees. Remove @deepseek-ai/dsh-experimental-tool-worktree from dsh.profile.bundles if the standalone plugin was enabled. by @LegGasai\r\n- Ralph loop and Session search are no longer listed as experimental plugins. by @ZiyaZhang\r\n- Add `apply_patch`, disabled by default, to create, edit, delete, and move multiple files in one call, with changes available in Review. by @sjw1231, @CreatixChu\r\n- Disable read-before-write and external-change checks by default while retaining sandbox limits and Review. Profiles requiring the previous checks can explicitly restore the observation policy. by @sjw1231\r\n- Activate tools conditionally per step with consistent model declarations, PTC bindings, and execution admission. Plugins must migrate tools.resolve/executable and prompt-assembly integration. by @LegGasai\r\n- Add a VM Script mode to Node PTC with top-level await, dynamic imports, and expression results, plus optional state retention across calls. Per-call execution remains the default; top-level return and using are unsupported. by @kermanx\r\n- Split native and PTC tool execution into Agent-scoped plugins; enable PTC through configuration overlays and migrate tools.mode and DSH_TOOLS_MODE usage. by @kermanx\r\n- Move the PTC Node control channel to birpc; upgrade self-deployed bootstraps and SSH helpers together, with SSH protocol increasing from 2 to 3. by @kermanx\r\n- Report caller-cancelled run_code calls in PTC Mode as ABORTED rather than CODE_RUN_FAILED. SDK and Session consumers must update cancellation handling. by @kermanx\r\n- Allow Web Fetch to access non-public addresses for proxies and internal networks; deployments must restrict network access separately. by @turtle2099\r\n- Support experimental Auto review in Headless. by @tianyicui\r\n- Retrieve diagnostic reports for desktop startup failures, including a bounded history of recent plugin operations to help troubleshooting. by @winewill\r\n- Add independent Session APIs to read snapshots and continuously subscribe to Session event logs, execution state, and event-projection data. by @imccyu\r\n- Fix event publication and cleanup around Session creation, recovery, and disposal. Make initialization events available to live subscribers and wait for acquired resources to finish cleanup on cancellation. by @kermanx\r\n- Make Session Projection registration asynchronous, with plugins retaining a handle at startup. by @kermanx, @Magolor\r\n- Allow whole-unit JSON and SQLite storage to read explicitly declared compatible older versions and write in the current version format. by @Magolor\r\n- Rename Custom plugin markets to Custom plugin indexes. Discover reads user-added index files, and index generation excludes private versions, tags, and default-branch packages. by @turtle2099, @turtle1999\r\n- Official bundle lists are now exported by @turtle2099\r\n- Allow plugins to supply navigation icons for their settings pages, restoring the default icon when unloaded. by @Magolor\r\n- Show complete diagnostics and the Host log location for plugin failures, distinguishing installation failures from subsequent activation failures. by @kermanx\r\n\r\nFull Changelog: https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.2.1-rc.5...dsh-v0.2.2-rc.1",
      "releaseNotesUrl": "https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-rc.1",
      "channelReleaseNotes": {
        "0.2.2-rc.1": {
          "releaseNotes": "[中文](#cn-v0.2.2-rc.1-5) | [English](#en-v0.2.2-rc.1-5)\r\n\r\n作为 0.2.2 系列的首个候选版本，本版本汇总了自 v0.2.1-rc.5 以来的主要用户和开发者相关变更。\r\n\r\n<h3 id=\"cn-v0.2.2-rc.1-5\">新增功能</h3>\r\n\r\n- 完善手机和平板适配，优化软键盘交互、导航与窄屏布局，保持菜单和操作入口可用。 @Stevring, @turtle2099, @LegGasai, @EricMoin, @Saafo\r\n- 支持将聊天文本作为引用插入输入框，并在发送后显示紧凑预览。 @lsdsjy, @imccyu\r\n- 支持将完整历史会话复制为 Markdown，包含可用的原始日志路径。 @tianyicui\r\n- 工作步骤收起后保留全部助手文字回复，可切换为仅最终回答。 @imccyu\r\n- 支持统一右键与键盘菜单，覆盖会话、工作区和侧边栏，并支持开发者扩展。 @std4453\r\n- 文件预览支持常驻目录树和文件定位功能。 @yudshj\r\n- 新增日语、西班牙语、法语、德语、俄语和巴西葡萄牙语文案与界面配置。 @07akioni\r\n- 插件管理页支持展示富文本详情，并改善页面布局和导航行为。 @turtle1999, @turtle2099\r\n- 插件管理支持更新第三方插件包；热更新失败时会尝试恢复旧版本。 @turtle1999, @turtle2099\r\n- 新增实验性「`subagent_oar`工具」插件，可将独立任务交给本机 Codex 或 Claude CLI。 @tianyicui\r\n- 新增实验性「个性化推荐」插件，按需在回答下方提供官方插件启用卡片或个性化页面创建卡片。 @ZiyaZhang\r\n- 新增实验性「开发者工具 - 统计」插件，按轮次和步骤查看上下文、缓存、模型与工具耗时等统计。 @mektpoy\r\n- 新增实验性「变更请求与工作树」：在独立 Git 工作树中运行会话，通过可搜索文件树和逐文件导航查看本地及 PR 差异，将选中代码和评论交给 Agent，并跟踪检查与评审状态。 @LegGasai, @tianyicui\r\n\r\n### 体验优化\r\n\r\n- 同名工作区在选择器中显示最短区分路径后缀，窄屏优先保留后缀。 @turtle2099\r\n- 会话列表支持插件图标，并改善键盘与触屏操作。 @LegGasai\r\n- 侧栏会话悬浮卡显示工作目录，便于区分未分组或同名会话。 @turtle2099\r\n- 优化侧栏空间布局，改善响应区域，平滑搜索框展开与收起。 @Yifffan\r\n- 侧栏搜索支持不区分大小写的会话 ID 子串匹配。 @turtle2099\r\n- 悬浮侧栏面板拖过屏幕边缘时有阻力，松手后弹回可见区域；窗口缩小时保持控件可达。 @yudshj\r\n- 支持中键关闭右侧栏标签，关闭后台标签不改变当前选中项，并保留不可关闭的起始页。 @Kingwl\r\n- 消息在宿主确认接收后才显示并清空草稿；发送期间输入框只读，发送失败时保留草稿、引用和附件。 @LegGasai\r\n- 图片上传方式调整为进入输入框后立即上传，发送消息时复用已上传的图片。默认单张图片上限提高到 50 MiB。 @LegGasai\r\n- 已回答的问题批次以消息气泡显示，原生与 PTC 调用的回答在过程折叠后仍可回看。 @Kaige-Gao\r\n- 运行状态位于当前工作轮次尾部、待处理插话之前，方便区分运行中和排队中的消息，并改善界面布局抖动问题。 @imccyu\r\n- 改善工作步骤展开／收起和底部输入框的布局稳定性，减少正文、滚动与输入交互时的跳动，并保持运行状态可见。 @imccyu\r\n- 输入框统计读数被截断时，可通过提示气泡查看完整数值；会话统计也显示轮次与步骤数。 @turtle2099\r\n- 点击聊天中的文件行号链接后，代码和文本预览以短暂高亮标出目标行并淡出。 @turtle2099\r\n- 支持拖动平移超出视口的图片，并通过应用内拖放或桌面原生拖放交付原始文件。 @std4453\r\n- Trajectory 结果页新增实时工具返回值的原始 JSON 查看，并与渲染结果上下展示。 @kermanx\r\n- Trajectory 支持独立折叠子调用，保留父调用和摘要；搜索或跨视图定位时可展开对应子调用。 @kermanx\r\n- 模型选择器默认勾选已配置模型，可一次添加或移除候选并保留自定义值；筛选后的全选只作用于可见候选。 @turtle2099\r\n- 对通过 pi-ai 接入且不支持在对话中追加系统消息的模型，后续系统消息会在原位置作为提醒提供，不会移到最初的提示词中。 @Tuyixiang\r\n- 支持在 DeepSeek 与 pi-ai 提供商内拖动或用方向键排序模型，保存后保留顺序及完整模型参数。 @Magolor\r\n- 自动化任务页支持确认后一次清除全部已结束任务，保留进行中的任务。 @Chinesezjc\r\n- Search 功能优先向模型提供 Search API 长摘要，默认每来源最多 800 字符；搜索卡片仍展示短摘录。 @yudshj\r\n- Auto 自动审核支持在连续工具调用之间更好地复用历史上下文缓存，减少重复处理。 @turtle2099\r\n- 后台任务完成通知直接携带小体积输出，并减少已读取结果和子代理收尾消息的重复通知。 @turtle1999\r\n- 子代理等待指引减少 sleep 和重复轮询：只有结果尚未返回时，结束当前轮次等待完成通知。 @Chinesezjc\r\n- 加快带固定目录前缀的文件查找，跳过无关目录，同时保持结果与排序规则不变。 @kermanx\r\n- Word 常规编辑在保存并核对内容与格式后即可交付，减少不必要的 ZIP、XML 与元数据检查。 @tianyicui\r\n- 远程连接默认启用 WebSocket 压缩，减少大量历史消息的传输量；可通过 `websocketCompression` 关闭。 @imccyu\r\n- Web 静态资源支持 ETag 条件请求，未变化的资源返回 304，减少重复下载。 @imccyu\r\n- 减少会话状态更新时的重复发布和目录处理开销，并降低长回复流式组装的运行时成本。 @liukx0205, @imccyu\r\n- 改善 macOS Computer Use 的系统与应用权限引导，通过独立应用申请系统权限，提供系统设置与应用拖入引导并在返回后刷新状态；支持长按、改善应用启动，应用授权可跨重启保留。 @CreatixChu, @koalazf99\r\n\r\n### 问题修复\r\n\r\n- 全局与项目 AGENTS.md 分别使用 maxBytes 预算，避免项目指令挤掉全局指令；同时包含两条链的消息总量最多为原配置的两倍。 @ZiyaZhang\r\n- 切换到较小上下文模型前先用原模型压缩历史；失败时停止切换请求并保留原请求头。 @Dudu-0223\r\n- 使用 Gemini 的 OpenAI 兼容 Chat Completions 接口时，工具调用会保留并在后续请求中带回所需的思考签名，避免因签名缺失导致请求拒绝。 @turtle2099\r\n- 系统提示词未变化时，新一轮模型请求可继续复用已有上下文前缀缓存，避免不必要的缓存失效。 @mektpoy\r\n- 通过 pi-ai 接入的模型在会话图片超过请求数量上限时，自动省略最早的图片并继续请求，避免持续失败。 @turtle2099\r\n- 缺少所需凭据时不向模型提供 Web 搜索工具；新版 Web API 的抓取工具也按凭据就绪状态提供。 @LegGasai\r\n- 修复关闭应用时 Auto 会话权限意外变成完全访问的问题，保留已保存的权限与审批策略。 @tianyicui\r\n- 修复 OpenCode 路由下自动审核在工具执行前失败的问题，审查请求携带对应会话的身份和用途。 @LegGasai\r\n- 等待后台任务输出时，用户插话可立即解除等待并返回当前输出，后台任务继续运行。 @mektpoy\r\n- 修复预设往返切换后委派工具暂时缺失的问题，并让委派工具遵循当前 Agent 的工具限制。 @Dudu-0223\r\n- 被阻塞的目标可从 Web 目标栏继续；已耗尽轮次上限时仍需先提高上限。 @turtle2099\r\n- 修复多选问题有多个推荐选项时只预选第一项的问题，现在卡片打开时预选全部推荐项；单选和已回答卡片的行为保持不变。 @yudshj\r\n- 审批提示明确说明是否向用户请求授权，避免模型误解 never 策略。 @turtle2099\r\n- 修复 macOS 持久 Bash 工具中感叹号被历史展开改写或导致命令超时的问题。 @grllll\r\n- 明确告知模型：用户跳过提问后应继续，不重复追问，也不能把跳过当作授权。 @turtle2099\r\n- 修复一个技能根目录读取失败导致其他目录中的技能也不可用的问题，保留可用技能并提示不完整的发现结果。 @Dudu-0223\r\n- Web Fetch 可读取编码声明混含 UTF-8 的可读页面。 @Dudu-0223\r\n- 修复工具调用因无歧义的可选参数而失败的问题：grep 接受空 include。 @turtle1999\r\n- 长问题和选项说明可原地展开与收起，内容区滚动时导航与提交按钮保持可见。 @yudshj\r\n- `sdk-minimal` 配置在请求模型或执行工具前保存会话恢复记录；保存失败时不会继续相关操作，提高短会话中断后的可恢复性。 @LogosVeritas\r\n- 断线或重连期间暂停聊天运行计时，连接恢复后按轮次起点恢复显示。 @turtle2099\r\n- 停止后补发的插话与新消息在轨迹中按日志顺序显示于助手输出之前，刷新和历史加载后仍保持一致。 @kermanx\r\n- 普通会话分支现在独立运行，不再被误识别为子智能体；真正子智能体仍保留创建者关系。 @Dudu-0223\r\n- 修复包含旧版子代理描述的历史会话无法打开，并导致会话搜索失败的问题。 @turtle2099\r\n- 修复加载更早的已压缩会话历史后，聊天记录停止加载和更新的问题。 @turtle2099\r\n- 本地文件工具将开头的 ~ 或 ~/ 正确展开为宿主主目录，路径中间的 ~ 保持字面含义。 @turtle2099\r\n- 聊天中的相对文件链接按点击时会话当前工作目录打开，进入 worktree 后不再误开原项目文件。 @turtle2099\r\n- Markdown 中单个 ~ 保持字面显示，只有 ~~ 才形成删除线。 @turtle2099\r\n- 本地 Markdown 图片被覆盖后，新消息和新打开的预览会显示当前文件，而不是复用旧图。 @turtle2099\r\n- 修复裸 URL 将后续中文标点及正文一并识别为链接的问题。 @turtle2099\r\n- 修复 Markdown 中 Windows 文件路径的反斜杠被转义删除，导致链接或图片打开错误位置的问题。 @turtle2099\r\n- 交付卡与收尾回复中的文件引用覆盖整轮，包括回复之后的交付与写入；present 说明等待用户回答前应先提供文件链接。 @yudshj\r\n- 修复部分结构体代码高亮导致页面长时间卡死的问题。 @yudshj\r\n- 修复输入框粘贴文件或文件夹路径时仅高亮目录前缀的问题。 @turtle2099\r\n- 切换、打开或关闭侧栏文件标签时，标签栏从原滚动位置继续，不再先跳回最左端。 @turtle2099\r\n- 侧栏原生拖动使用独立主题背景预览，避免混入后方消息内容并保留排序。 @Stevring\r\n- 深色主题设置导航的悬停背景可见，选中态保持优先。 @turtle2099\r\n- 聊天中的 Markdown 文件链接容忍无效行号，并支持行范围及行列后缀；无法定位时仍打开原文件，URL 保持为网页链接。 @kermanx\r\n- 文本和 Markdown 文件预览在刷新后保留阅读位置，文件暂时变短时也保留原位置，避免跳回第一页。 @yudshj\r\n- Trajectory 保留失败工具实际返回的文本，列表、详情和复制不再用合成错误信息替换它；原生工具和嵌套 PTC 调用使用相同规则。 @kermanx\r\n- 修复部分历史 `run_code` 记录的代码页缺少 TypeScript 或 Python 语法高亮的问题。 @kermanx\r\n- 安装自托管 Git 插件时，HTTPS 无法读取而 SSH 可用时改用 SSH。 @turtle2099\r\n- 安装含 prepare 脚本的 Git 插件时，显示脚本授权和重试选项，不再仅报告未知错误。 @turtle2099\r\n- 配置项目按自身 ESM 规则解析插件依赖子路径、包内导入和自引用。 @shigma\r\n- 修复 macOS 激活窗口时点击会话标题误触发重命名，正常双击重命名保持不变。 @turtle2099\r\n- 修复以管理员权限运行 DSH 或在 Windows Sandbox 中使用时，受限沙箱命令无法启动的问题；文件写入和删除限制保持不变。 @huoyaoyuan\r\n- Windows 已安装应用显示正确的发布者名称，卸载列表中的应用名称不再附带版本号。 @winewill\r\n- 改善 Windows 安装器进度页绘制、拖动与窗口激活表现，恢复系统最小化动画，并让标题按钮在原区域松开时触发。 @winewill\r\n- 桌面 Host 完成任务清理并确认关闭后立即退出，避免遗留事件循环句柄阻塞更新安装。 @turtle2099\r\n- macOS 桌面更新在确认前等待退出全屏，安装失败后恢复工作区；退出全屏超时则保留任务并提示重试。 @winewill\r\n- 桌面更新提示改为窗内视图，后台结果更新不再抬升原生子窗口；更新提示随应用浅色或暗色主题显示。 @winewill\r\n- 修复 macOS 桌面端会话头部菜单与按钮之间出现过大空隙的问题。 @turtle2099\r\n- 修复 macOS 原生目录选择框初次显示后灰显、目录无法点击的问题。 @EricMoin\r\n\r\n### 其他变更\r\n\r\n- 同步 Cordis Core 至 4.1.0、Loader 至 1.1.0、Include 至 1.1.0，统一配置访问、条目变更和持久化行为。 @shigma, @imccyu\r\n- Cordis Fiber 提供统一的原始配置、候选配置解析和生效配置访问，设置编辑与热更新使用一致的配置来源。 @shigma\r\n- DSH 的最低 Node.js 版本提高至 24.9；使用旧版 Node.js 的用户需先升级运行时。 @tianyicui\r\n- 升级 pi-ai 至 1.3.0，并同步模型目录、端点与推理回放规则；完整工具参数格式错误会在执行任何工具前终止该次响应。 @tianyicui\r\n- 未声明容量的自定义模型默认上下文与最大输出调整为十进制 1M/128K；较小端点应显式覆盖容量以避免延迟压缩。 @LegGasai\r\n- Agent 在提示词组装与 pre-step 前固定本步模型，重试保留同一选择；插件应通过 agent.model 选择模型，agent/request 不再允许改路由。 @kermanx\r\n- pi-ai 支持插件按会话和请求用途提供动态请求头；无效请求头在请求发出前报错。 @LegGasai\r\n- TypeScript 与 Python SDK 补齐与 Web 模式一致的文件交付、问答与回调、调度、技能和上下文能力，并支持原生命令、插件管理、计划审阅、目标续跑及操作审批；插件变更需重启 SDK 生效。 @koalazf99, @LogosVeritas\r\n- 「自动化任务」改为统一的宿主级管理，支持手动创建、直接编辑和通过预填提示在会话中创建，保留编辑草稿并支持冲突复核，可选择复用或新建会话执行任务。 @ZiyaZhang, @Magolor\r\n- 「Git 工作树」入口已合入「变更请求与工作树」，此前启用独立插件的用户需手动从 profile 的 dsh.profile.bundles 中移除 @deepseek-ai/dsh-experimental-tool-worktree。 @LegGasai\r\n- Ralph 循环与会话搜索不再显示在实验性列表。 @ZiyaZhang\r\n- 新增默认关闭的 `apply_patch` 工具，一次完成多文件新增、编辑、删除和移动，并在 Review 中查看变更。 @sjw1231, @CreatixChu\r\n- 文件修改的先读和外部修改防护默认关闭，沙箱限制和 Review 保持不变；需要原防护的 profile 可显式恢复观察策略。 @sjw1231\r\n- 工具可按步骤条件启用，模型声明、PTC 绑定与执行准入保持一致；插件需迁移 tools.resolve/executable 与提示词组装接口。 @LegGasai\r\n- Node PTC 新增 VM Script 模式，支持顶层 await、动态导入和表达式结果，可独立开启跨调用状态保留；默认仍逐次执行，脚本顶层不支持 return 或 using。 @kermanx\r\n- 原生与 PTC 工具执行拆为按 Agent 作用域选择的插件；PTC 通过配置 overlay 启用，旧 tools.mode 与 DSH_TOOLS_MODE 需迁移。 @kermanx\r\n- PTC Node 控制通道改用 birpc；自部署 bootstrap 与 SSH helper 必须同步升级，SSH 协议从 2 升为 3。 @kermanx\r\n- PTC Mode 中由调用方取消的 run_code 改为返回 ABORTED，而非 CODE_RUN_FAILED；SDK 和 Session 消费方需更新取消分类。 @kermanx\r\n- Web Fetch 不再拒绝非公网地址，可用于代理与内网，部署应自行限制网络访问。 @turtle2099\r\n- Headless 支持实验性 Auto 自动审核。 @tianyicui\r\n- 桌面启动故障可获取诊断报告，并附上有界的近期插件操作记录，便于排查问题。 @winewill\r\n- Session API 新增独立接口，可分别读取快照和持续订阅会话事件日志、运行状态以及事件投影数据。 @imccyu\r\n- 修复会话创建、恢复和销毁期间的事件发布与清理顺序；初始化事件可实时订阅，取消时等待已取得资源完成清理。 @kermanx\r\n- Session Projection 注册 API 调整为异步，需要插件启动时持有。 @kermanx, @Magolor\r\n- 整单元 JSON 与 SQLite 存储支持读取领域明确声明的兼容旧版本，并以新版本格式写入。 @Magolor\r\n- 「自定义插件市场」更名为「自定义插件索引」，发现页读取用户添加的索引文件，索引生成器排除标记为 private 的版本、标签与默认分支包。 @turtle2099, @turtle1999\r\n- 官方组合包列表改由 @deepseek-ai/dsh-official-bundles 导出；自定义集成需更新原 app-boot 的相关导入。 @turtle2099\r\n- 插件可为自己的设置页面提供导航图标，卸载后恢复默认图标。 @Magolor\r\n- 插件安装失败时显示完整诊断与 Host 日志入口，并区分安装失败和安装后启用失败。 @kermanx\r\n\r\nThis first release candidate for 0.2.2 summarizes the major user- and developer-facing changes since v0.2.1-rc.5.\r\n\r\n<h3 id=\"en-v0.2.2-rc.1-5\">New Features</h3>\r\n\r\n- Improve phone and tablet support with better on-screen keyboard interaction, navigation, and narrow layouts, keeping menus and actions accessible. by @Stevring, @turtle2099, @LegGasai, @EricMoin, @Saafo\r\n- Insert chat text as quotes in the composer and show compact previews after sending. by @lsdsjy, @imccyu\r\n- Copy the complete conversation history as Markdown, including the original log path when available. by @tianyicui\r\n- Keep all assistant text replies visible when work steps are collapsed, with an option to show only the final answer. by @imccyu\r\n- Unify mouse and keyboard context menus across Sessions, workspaces, and the sidebar, with support for developer extensions. by @std4453\r\n- Keep a directory tree in file previews and locate the current file. by @yudshj\r\n- Add Japanese, Spanish, French, German, Russian, and Brazilian Portuguese interface text and locale configuration. by @07akioni\r\n- Show rich-text plugin details in the plugin manager and improve page layout and navigation. by @turtle1999, @turtle2099\r\n- Support updating third-party plugin packages and attempt to restore the previous version if hot updates fail. by @turtle1999, @turtle2099\r\n- Add the experimental `subagent_oar` tool plugin to delegate independent tasks to local Codex or Claude CLIs. by @tianyicui\r\n- Add experimental Personalized recommendations, offering official-plugin activation or personalized-page creation cards below answers when relevant. by @ZiyaZhang\r\n- Add experimental Developer tools — Statistics for per-turn and per-step context, cache, model, and tool measurements. by @mektpoy\r\n- Add experimental Change requests and worktrees to run Sessions in separate Git worktrees, browse local and PR diffs through a searchable file tree and per-file navigation, quote selected code and comments to the Agent, and track checks and reviews. by @LegGasai, @tianyicui\r\n\r\n### Improvements\r\n\r\n- Distinguish same-named Workspaces with their shortest unique path suffix and prioritize that suffix on narrow screens. by @turtle2099\r\n- Support plugin icons in the Session list and improve keyboard and touch interaction. by @LegGasai\r\n- Show working directories on sidebar Session hover cards to distinguish ungrouped or similarly named Sessions. by @turtle2099\r\n- Improve sidebar spacing and click targets, with smoother search-field expansion and collapse. by @Yifffan\r\n- Find Sessions by case-insensitive ID substrings in sidebar search. by @turtle2099\r\n- Add resistance and spring-back when floating sidebar panels are dragged beyond screen edges, and keep their controls reachable when the window shrinks. by @yudshj\r\n- Close right-sidebar tabs with the middle mouse button without selecting background tabs, while preserving the protected start tab. by @Kingwl\r\n- Show messages and clear drafts only after the host accepts them. Keep the composer read-only while sending and preserve drafts, quotes, and attachments on failure. by @LegGasai\r\n- Upload images as soon as they enter the composer and reuse the uploaded images when sending messages. Raise the default per-image limit to 50 MiB. by @LegGasai\r\n- Show answered question batches as message bubbles so answers from native and PTC calls remain visible after work steps collapse. by @Kaige-Gao\r\n- Place running status at the active turn tail before queued steering messages, distinguishing active and pending input and reducing layout jitter. by @imccyu\r\n- Improve layout stability when expanding or collapsing work steps and interacting with the docked composer. Reduce content and scroll jumps while keeping running status visible. by @imccyu\r\n- Show full truncated composer statistics in tooltips and include turn and step counts in Session statistics. by @turtle2099\r\n- Briefly highlight and fade the target line in code and text previews after opening a file-line link from chat. by @turtle2099\r\n- Pan images that exceed the viewport and transfer original files through in-app drag-and-drop or native desktop dragging. by @std4453\r\n- Add raw JSON views of live tool results to Trajectory, displayed above rendered results. by @kermanx\r\n- Fold Trajectory subcalls independently while keeping their parent calls and summaries visible. Reveal matching subcalls through search or cross-view navigation. by @kermanx\r\n- Start the model picker with configured models selected, add or remove candidates while preserving custom values, and apply select-all only to visible candidates. by @turtle2099\r\n- For models accessed through pi-ai that cannot accept additional system messages during a conversation, keep later system messages in place as reminders rather than moving them into the initial prompt. by @Tuyixiang\r\n- Reorder models within DeepSeek and pi-ai providers by dragging or using arrow keys, preserving order and complete model parameters when saved. by @Magolor\r\n- Clear all inactive automation tasks in one confirmed action while keeping active tasks. by @Chinesezjc\r\n- Search prioritizes long Search API summaries for models, capped at 800 characters per source by default, while search cards retain short snippets. by @yudshj\r\n- Improve history-context cache reuse across consecutive tool calls in Auto review to reduce repeated processing. by @turtle2099\r\n- Background-job completion notices include small outputs and reduce duplicate notifications for already-read results and subagent closing messages. by @turtle1999\r\n- Reduce sleeping and repeated polling in subagent guidance: end the current turn when only a result remains pending and wait for its completion notification. by @Chinesezjc\r\n- Speed up file searches with literal directory prefixes by skipping unrelated directories while preserving results and ordering. by @kermanx\r\n- Deliver ordinary Word edits after saving and checking content and formatting, without unnecessary ZIP, XML, or metadata inspection. by @tianyicui\r\n- Enable WebSocket compression for remote connections by default to reduce transfers of large message histories; disable it with `websocketCompression`. by @imccyu\r\n- Web static assets support ETag revalidation, returning 304 for unchanged files to avoid repeated downloads. by @imccyu\r\n- Reduce repeated publications and catalog processing during Session state updates, and lower runtime overhead when assembling streaming replies. by @liukx0205, @imccyu\r\n- Improve system and application permission onboarding for macOS Computer Use. Request system permissions through a standalone app with system-settings and drag-in guidance, and refresh permission status on return. Support long clicks, improve application launching, and retain application permissions across restarts. by @CreatixChu, @koalazf99\r\n\r\n### Bug Fixes\r\n\r\n- Budget global and project AGENTS.md chains separately so project instructions do not evict global guidance; messages containing both chains can use up to twice maxBytes. by @ZiyaZhang\r\n- Compact history with the previous model before switching to a smaller context window; stop the switch request and preserve its previous header if compaction fails. by @Dudu-0223\r\n- Preserve the required thought signatures in Gemini tool calls over OpenAI-compatible Chat Completions and include them in subsequent requests to prevent rejection caused by missing signatures. by @turtle2099\r\n- Reuse existing context-prefix caches for new model requests when the system prompt is unchanged, avoiding unnecessary cache invalidation. by @mektpoy\r\n- Continue pi-ai conversations that exceed the request image-count limit by offloading the oldest images, preventing repeated failures. by @turtle2099\r\n- Hide Web search tools when required credentials are missing; fetch tools using the newer Web API also follow credential readiness. by @LegGasai\r\n- Preserve saved Auto permission and approval policy during application shutdown instead of unintentionally switching to Full access. by @tianyicui\r\n- Fix Auto review failures before tool execution on OpenCode routes by supplying the reviewed Session identity and request purpose. by @LegGasai\r\n- User steering now releases a background-output wait immediately and returns current output without stopping the job. by @mektpoy\r\n- Fix delegation tools being temporarily unavailable after preset round trips and apply the current Agent’s tool restrictions to delegation. by @Dudu-0223\r\n- Resume blocked goals from the Web goal bar; goals that have exhausted their round limit still require a higher limit first. by @turtle2099\r\n- Preselect every recommended option in multiple-choice questions instead of only the first, while preserving single-choice and answered-card behavior. by @yudshj\r\n- Approval messages explicitly state whether user approval is requested, avoiding ambiguity around the never policy. by @turtle2099\r\n- Prevent history expansion from rewriting exclamation marks or causing persistent Bash command timeouts on macOS. by @grllll\r\n- Tell the model to continue after a skipped question without asking it again or treating the skip as permission. by @turtle2099\r\n- Keep skills from healthy roots available when another skill root cannot be read, and report incomplete discovery. by @Dudu-0223\r\n- Allow Web Fetch to read valid UTF-8 pages whose encoding declarations contain multiple labels including UTF-8. by @Dudu-0223\r\n- Fix tool calls failing on unambiguous optional arguments by accepting an empty grep include. by @turtle1999\r\n- Expand and collapse long questions and option descriptions in place, with navigation and submission controls kept visible. by @yudshj\r\n- Save Session recovery records before model requests and tool execution in `sdk-minimal`. Stop related operations if saving fails to improve recovery after short Sessions are interrupted. by @LogosVeritas\r\n- Pause the chat running clock during disconnection or reconnection and resume elapsed-time display after reconnecting. by @turtle2099\r\n- Keep retained steering and follow-up input in log order before assistant output in Trajectory, including after refresh and history loading. by @kermanx\r\n- Run ordinary conversation forks independently instead of treating them as subagents, while preserving creator relationships for real subagents. by @Dudu-0223\r\n- Restore opening historical Sessions with older subagent descriptors and fix the resulting Session search failures. by @turtle2099\r\n- Fix chat history loading and live updates getting stuck after loading earlier compacted history. by @turtle2099\r\n- Expand leading ~ or ~/ in local file tools to the Host home directory while preserving literal tildes elsewhere in paths. by @turtle2099\r\n- Resolve relative chat file links from the Session working directory at click time so worktree Sessions do not open the original checkout. by @turtle2099\r\n- Keep single tildes literal in Markdown and require double tildes for strikethrough. by @turtle2099\r\n- Show the current local Markdown image in newly rendered messages and previews after the file is overwritten. by @turtle2099\r\n- Fix bare URLs incorrectly including following Chinese punctuation and text in links. by @turtle2099\r\n- Preserve backslash separators in Windows-path Markdown links and images so they resolve to the intended location. by @turtle2099\r\n- Include whole-turn deliveries and writes in deliverable cards and closing-reply file links, even after the reply; present guidance tells agents to link files before waiting for user input. by @yudshj\r\n- Fix prolonged page freezes caused by syntax highlighting of certain struct definitions. by @yudshj\r\n- Fix pasted file and folder paths being highlighted only through their directory prefixes in the composer. by @turtle2099\r\n- Preserve the sidebar file-tab strip's scroll position when selecting, opening, or closing tabs instead of restarting from the left edge. by @turtle2099\r\n- Use isolated, theme-backed sidebar drag previews to avoid capturing content behind rows while preserving native reordering. by @Stevring\r\n- Make settings-navigation hover visible in dark mode while retaining selected-state priority. by @turtle2099\r\n- Accept line ranges and line/column suffixes in Markdown file links, open the file when a location is invalid, and retain URLs as web links. by @kermanx\r\n- Retain reading position in text and Markdown previews across refreshes and temporary file shortening instead of jumping back to the first page. by @yudshj\r\n- Preserve the actual text returned by failed tools in Trajectory lists, details, and copied output, including native tools and nested PTC calls. by @kermanx\r\n- Restore TypeScript and Python syntax highlighting for affected historical `run_code` records. by @kermanx\r\n- Use SSH for self-hosted Git plugin installation when HTTPS is unreadable and SSH is available. by @turtle2099\r\n- Offer script approval and retry when installing Git plugins with prepare scripts instead of reporting only an unknown error. by @turtle2099\r\n- Resolve configuration-project plugins using the project’s ESM rules for dependency subpaths, package imports, and self-references. by @shigma\r\n- Prevent a window-activating click on a Session title from accidentally opening rename on macOS, while preserving normal double-click rename. by @turtle2099\r\n- Fix restricted sandbox commands failing to start when DSH runs as administrator or in Windows Sandbox, while preserving file-write and deletion restrictions. by @huoyaoyuan\r\n- Correct the Windows installed-app publisher and keep the application name separate from its version in uninstall listings. by @winewill\r\n- Improve Windows installer progress rendering, dragging, and activation, restore native minimize transitions, and trigger caption buttons on release inside the original button. by @winewill\r\n- Exit the Desktop Host immediately after acknowledging completed teardown so leftover event-loop handles do not block update installation. by @turtle2099\r\n- Leave macOS fullscreen before Desktop update confirmation so failed installs recover the workspace; preserve tasks and show retry guidance if fullscreen exit times out. by @winewill\r\n- Show desktop update prompts in-window without raising native child windows for background results, and match prompts to the app’s light or dark theme. by @winewill\r\n- Keep conversation header menus close to their trigger buttons on macOS desktop. by @turtle2099\r\n- Fix the native macOS directory picker initially appearing inactive and ignoring directory clicks. by @EricMoin\r\n\r\n### Chores\r\n\r\n- Update to Cordis Core 4.1.0, Loader 1.1.0, and Include 1.1.0, unifying configuration access, entry changes, and persistence behavior. by @shigma, @imccyu\r\n- Provide unified Cordis Fiber access to raw configuration, candidate resolution, and effective configuration, used consistently by settings and hot reload. by @shigma\r\n- Raise the minimum supported Node.js version to 24.9. Upgrade older Node.js runtimes before upgrading DSH. by @tianyicui\r\n- Upgrade pi-ai to 1.3.0 with updated model catalogs, endpoints, and reasoning replay rules; malformed completed tool arguments fail the response before any tool executes. by @tianyicui\r\n- Default undeclared custom-model capacities to decimal 1M context and 128K output; smaller endpoints should set explicit capacities to avoid delayed compaction. by @LegGasai\r\n- Capture the step model before prompt assembly and pre-step and retain it through retries; plugins should select through agent.model rather than changing routes in agent/request. by @kermanx\r\n- Allow plugins to supply dynamic pi-ai headers using Session identity and request purpose, rejecting invalid headers before dispatch. by @LegGasai\r\n- Bring the TypeScript and Python SDKs in line with Web mode for file delivery, questions and callbacks, scheduling, skills, and context. Support native commands, plugin management, plan review, goal continuation, and operation approvals; restart the SDK to apply plugin changes. by @koalazf99, @LogosVeritas\r\n- Unify scheduled-task management across the Host with manual creation, direct editing, and prefilled prompts for creation in a Session. Retain drafts, support conflict review, and run tasks in reusable or new Sessions. by @ZiyaZhang, @Magolor\r\n- The Git worktree entry is included in Change requests and worktrees. Remove @deepseek-ai/dsh-experimental-tool-worktree from dsh.profile.bundles if the standalone plugin was enabled. by @LegGasai\r\n- Ralph loop and Session search are no longer listed as experimental plugins. by @ZiyaZhang\r\n- Add `apply_patch`, disabled by default, to create, edit, delete, and move multiple files in one call, with changes available in Review. by @sjw1231, @CreatixChu\r\n- Disable read-before-write and external-change checks by default while retaining sandbox limits and Review. Profiles requiring the previous checks can explicitly restore the observation policy. by @sjw1231\r\n- Activate tools conditionally per step with consistent model declarations, PTC bindings, and execution admission. Plugins must migrate tools.resolve/executable and prompt-assembly integration. by @LegGasai\r\n- Add a VM Script mode to Node PTC with top-level await, dynamic imports, and expression results, plus optional state retention across calls. Per-call execution remains the default; top-level return and using are unsupported. by @kermanx\r\n- Split native and PTC tool execution into Agent-scoped plugins; enable PTC through configuration overlays and migrate tools.mode and DSH_TOOLS_MODE usage. by @kermanx\r\n- Move the PTC Node control channel to birpc; upgrade self-deployed bootstraps and SSH helpers together, with SSH protocol increasing from 2 to 3. by @kermanx\r\n- Report caller-cancelled run_code calls in PTC Mode as ABORTED rather than CODE_RUN_FAILED. SDK and Session consumers must update cancellation handling. by @kermanx\r\n- Allow Web Fetch to access non-public addresses for proxies and internal networks; deployments must restrict network access separately. by @turtle2099\r\n- Support experimental Auto review in Headless. by @tianyicui\r\n- Retrieve diagnostic reports for desktop startup failures, including a bounded history of recent plugin operations to help troubleshooting. by @winewill\r\n- Add independent Session APIs to read snapshots and continuously subscribe to Session event logs, execution state, and event-projection data. by @imccyu\r\n- Fix event publication and cleanup around Session creation, recovery, and disposal. Make initialization events available to live subscribers and wait for acquired resources to finish cleanup on cancellation. by @kermanx\r\n- Make Session Projection registration asynchronous, with plugins retaining a handle at startup. by @kermanx, @Magolor\r\n- Allow whole-unit JSON and SQLite storage to read explicitly declared compatible older versions and write in the current version format. by @Magolor\r\n- Rename Custom plugin markets to Custom plugin indexes. Discover reads user-added index files, and index generation excludes private versions, tags, and default-branch packages. by @turtle2099, @turtle1999\r\n- Official bundle lists are now exported by @turtle2099\r\n- Allow plugins to supply navigation icons for their settings pages, restoring the default icon when unloaded. by @Magolor\r\n- Show complete diagnostics and the Host log location for plugin failures, distinguishing installation failures from subsequent activation failures. by @kermanx\r\n\r\nFull Changelog: https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.2.1-rc.5...dsh-v0.2.2-rc.1",
          "releaseNotesUrl": "https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-rc.1"
        },
        "0.2.2-rc.3": {
          "releaseNotes": "[中文](#cn-v0.2.2-rc.3) | [English](#en-v0.2.2-rc.3)\r\n\r\n<h3 id=\"cn-v0.2.2-rc.3\">新增功能</h3>\r\n\r\n- 新增实验性「DeepSeek 会话导入」插件，支持将 DeepSeek App 或网页版的历史会话导入工作区，并继续对话。 @imccyu\r\n\r\n### 问题修复\r\n\r\n- 修复 Windows 桌面版应用内更新可能失败、无法自动重新打开的问题。 @winewill\r\n\r\n<h3 id=\"en-v0.2.2-rc.3\">New Features</h3>\r\n\r\n- Add an experimental DeepSeek chat import plugin to import past conversations from DeepSeek App or its web version into a workspace and continue chatting. by @imccyu\r\n\r\n### Bug Fixes\r\n\r\n- Fix an issue that could cause Windows desktop in-app updates to fail and prevent the app from reopening automatically. by @winewill\r\n\r\nFull Changelog: https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.2.2-rc.2...dsh-v0.2.2-rc.3",
          "releaseNotesUrl": "https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-rc.3"
        },
        "0.2.2-alpha.3": {
          "releaseNotes": "[中文](#cn-v0.2.2-alpha.3-5) | [English](#en-v0.2.2-alpha.3-5)\r\n\r\n<h3 id=\"cn-v0.2.2-alpha.3-5\">新增功能</h3>\r\n\r\n- 支持统一右键与键盘菜单，覆盖会话、工作区和侧边栏，并支持开发者扩展 @std4453\r\n- 文件预览支持常驻目录树和文件定位功能。 @yudshj\r\n- 实验性「变更请求与工作树」统一代码审查与工作树入口，支持通过可搜索文件树和逐文件导航查看本地及 PR 差异，将选中代码和评论交给 Agent，并跟踪检查与评审状态。 @LegGasai\r\n\r\n### 体验优化\r\n\r\n- 改善手机端侧栏导航与窄屏布局，保持会话标题稳定，并让模型目录输入和插件发现页操作完整可见。 @Stevring @Saafo @EricMoin\r\n- 菜单和浮窗优先保持在可见区域内，跟随浏览器缩放、平移和软键盘变化。 @Stevring\r\n- Trajectory 支持独立折叠子调用，保留父调用和摘要；搜索或跨视图定位时可展开对应子调用。 @kermanx\r\n- 优化对话中思考内容的展示，摘要、展开正文和翻译不再显示模型输出开头的签名前缀。 @LegGasai\r\n- 减少会话状态更新时的重复发布和目录处理开销，并降低长回复流式组装的运行时成本。 @liukx0205 @imccyu\r\n- 改善底部输入框的布局稳定性，减少输入、菜单展开和统计更新时的跳动。 @imccyu\r\n\r\n### 问题修复\r\n\r\n- 通过 pi-ai 接入的模型在会话图片超过请求数量上限时，自动省略最早的图片并继续请求，避免持续失败。 @turtle2099\r\n- 修复 OpenCode 路由下自动审核在工具执行前失败的问题，审查请求携带对应会话的身份和用途。 @LegGasai\r\n- 修复 alpha.2 引入的空会话恢复后被当作「未命名」会话持续显示的问题，并恢复按最后提示时间排序。 @imccyu\r\n- 修复包含旧版子代理描述的历史会话无法打开，并导致会话搜索失败的问题。 @turtle2099\r\n- 修复加载更早的已压缩会话历史后，聊天记录停止加载和更新的问题。 @turtle2099\r\n- 聊天中的 Markdown 文件链接容忍无效行号，并支持行范围及行列后缀；无法定位时仍打开原文件，URL 保持为网页链接。 @kermanx\r\n- 文本和 Markdown 文件预览在刷新后保留阅读位置，文件暂时变短时也保留原位置，避免跳回第一页。 @yudshj\r\n- Trajectory 保留失败工具实际返回的文本，列表、详情和复制不再用合成错误信息替换它；原生工具和嵌套 PTC 调用使用相同规则。 @kermanx\r\n- 修复部分历史 `run_code` 记录的代码页缺少 TypeScript 或 Python 语法高亮的问题。 @kermanx\r\n\r\n### 其他变更\r\n\r\n- 同步 Cordis Core 至 4.0.0-rc.11、Loader 至 1.0.0-rc.8、Include 至 1.1.1，统一配置访问、条目变更和持久化行为。 @shigma @imccyu\r\n- pi-ai 支持插件按会话和请求用途提供动态请求头；无效请求头在请求发出前报错。 @LegGasai\r\n- 插件可为自己的设置页面提供导航图标，卸载后恢复默认图标。 @Magolor\r\n- 插件安装失败时显示完整诊断与 Host 日志入口，并区分安装失败和安装后启用失败。 @kermanx\r\n- 「Git 工作树」入口已合入「变更请求与工作树」，此前启用独立插件的用户需手动从 profile 的 dsh.profile.bundles 中移除 @deepseek-ai/dsh-experimental-tool-worktree\r\n- 「自动化任务」改为统一的宿主级管理，支持手动创建、直接编辑和通过预填提示在会话中创建，保留编辑草稿并支持冲突复核，可选择复用或新建会话执行任务。 @ZiyaZhang @Magolor\r\n- 新增默认关闭的 `apply_patch` 工具，一次完成多文件新增、编辑、删除和移动，并在 Review 中查看变更。 @sjw1231 @CreatixChu\r\n- TypeScript 与 Python SDK 补齐原生命令和插件管理能力，支持计划审阅、目标续跑与操作审批；插件变更重启后生效。 @LogosVeritas @koalazf99\r\n- macOS Computer Use 改用独立应用申请系统权限，打开对应系统设置并提供应用拖入引导，返回后刷新权限状态。 @CreatixChu\r\n- 文件修改的先读和外部修改防护默认关闭，沙箱限制和 Review 保持不变；需要原防护的 profile 可显式恢复观察策略。 @sjw1231\r\n- 回退 alpha.2 中引入的跨行 `$$` 数学块的不稳定兼容解析。 @yudshj\r\n\r\n<h3 id=\"en-v0.2.2-alpha.3-5\">New Features</h3>\r\n\r\n- Unify mouse and keyboard context menus across Sessions, workspaces, and the sidebar, with support for developer extensions. by @std4453\r\n- Keep a directory tree in file previews and locate the current file. by @yudshj\r\n- Unify code review and worktree access in the experimental change-request and worktree feature. Browse local and PR diffs through a searchable file tree and per-file navigation, quote selected code and comments to the Agent, and track checks and reviews. by @LegGasai\r\n\r\n### Improvements\r\n\r\n- Improve mobile sidebar navigation and narrow-screen layouts, keeping Session titles stable and model-catalog inputs and plugin-discovery controls fully visible. by @Stevring, @Saafo, @EricMoin\r\n- Keep menus and floating panels within the visible viewport where possible, following browser zooming, panning, and on-screen keyboard changes. by @Stevring\r\n- Fold Trajectory subcalls independently while keeping their parent calls and summaries visible. Reveal matching subcalls through search or cross-view navigation. by @kermanx\r\n- Improve reasoning presentation in conversations by hiding leading signature metadata from summaries, expanded content, and translations. by @LegGasai\r\n- Reduce repeated publications and catalog processing during Session state updates, and lower runtime overhead when assembling streaming replies. by @liukx0205, @imccyu\r\n- Improve the layout stability of the docked composer, reducing movement during typing, menu expansion, and statistics updates. by @imccyu\r\n\r\n### Bug Fixes\r\n\r\n- Continue pi-ai conversations that exceed the request image-count limit by offloading the oldest images, preventing repeated failures. by @turtle2099\r\n- Fix Auto review failures before tool execution on OpenCode routes by supplying the reviewed Session identity and request purpose. by @LegGasai\r\n- Fix a regression introduced in alpha.2 that leaves resumed empty Sessions visible as untitled Sessions, and restore sorting by the last prompt time. by @imccyu\r\n- Restore opening historical Sessions with older subagent descriptors and fix the resulting Session search failures. by @turtle2099\r\n- Fix chat history loading and live updates getting stuck after loading earlier compacted history. by @turtle2099\r\n- Accept line ranges and line/column suffixes in Markdown file links, open the file when a location is invalid, and retain URLs as web links. by @kermanx\r\n- Retain reading position in text and Markdown previews across refreshes and temporary file shortening instead of jumping back to the first page. by @yudshj\r\n- Preserve the actual text returned by failed tools in Trajectory lists, details, and copied output, including native tools and nested PTC calls. by @kermanx\r\n- Restore TypeScript and Python syntax highlighting for affected historical `run_code` records. by @kermanx\r\n- Show the appropriate date, time, interval, and weekday controls when opening existing scheduled tasks, with field-specific correction guidance. Preserve timing rules when only the name or instruction changes, and retain original text for complex rules or values beyond control precision. by @Magolor\r\n\r\n### Chores\r\n\r\n- Update Cordis Core to 4.0.0-rc.11, Loader to 1.0.0-rc.8, and Include to 1.1.1, unifying configuration access, entry changes, and persistence behavior. by @shigma, @imccyu\r\n- Allow plugins to supply dynamic pi-ai headers using Session identity and request purpose, rejecting invalid headers before dispatch. by @LegGasai\r\n- Allow plugins to supply navigation icons for their settings pages, restoring the default icon when unloaded. by @Magolor\r\n- Show complete diagnostics and the Host log location for plugin failures, distinguishing installation failures from subsequent activation failures. by @kermanx\r\n- The Git worktree entry is now included in change requests and worktrees. Users who enabled the standalone plugin must manually remove @deepseek-ai/dsh-experimental-tool-worktree from dsh.profile.bundles in their profile.\r\n- Unify scheduled-task management across the Host with manual creation, direct editing, and prefilled prompts for creation in a Session. Retain drafts, support conflict review, and run tasks in reusable or new Sessions. by @ZiyaZhang, @Magolor\r\n- Add `apply_patch`, disabled by default, to create, edit, delete, and move multiple files in one call, with changes available in Review. by @sjw1231, @CreatixChu\r\n- Extend the TypeScript and Python SDKs with native commands and plugin management, supporting plan review, goal continuation, and operation approvals. Restart the SDK to apply plugin changes. by @LogosVeritas, @koalazf99\r\n- Request macOS Computer Use permissions through a standalone app, opening the relevant system settings with drag-in guidance and refreshing permission status upon return. by @CreatixChu\r\n- Disable read-before-write and external-change checks by default while retaining sandbox limits and Review. Profiles requiring the previous checks can explicitly restore the observation policy. by @sjw1231\r\n- Revert the unstable compatibility parsing for multiline `$$` display math introduced in alpha.2. by @yudshj\r\n\r\nFull Changelog: https://github.com/deepseek-ai/deepseek-harness/compare/dsh-v0.2.2-alpha.2...dsh-v0.2.2-alpha.3",
          "releaseNotesUrl": "https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.2.2-alpha.3"
        }
      },
      "versionUpdatedAtUnixSeconds": 1793784032,
      "versionUpdatedAtSource": "official"
    },
    "hermes": {
      "version": "0.23.1",
      "versionCommit": "3b421578588243f920886e6fe79a6faa87ea026e",
      "releaseNotes": "# Hermes Agent v0.23.1\n\n**Release Date:** November 9, 2026\n\n> Patch release. This tag rolls up the ~618 PRs merged since v0.23.0 into a stable release for the GitHub release (CLI and installers), the Microsoft Store app, Docker and Hermes Cloud. Full curated notes for this window ship with v0.24.0.\n\n**What this patch ships for plugin users:** since the plugin catalog's site deploy on November 9, the published `plugin-catalog.json` was larger than the 2 MiB cap clients accept, so every install silently fell back to the catalog it shipped with. `hermes plugins install <name>` could not find plugins added since your last update, installed the pin your release shipped instead of the current one, and missed newer `removed` entries. This release raises the cap to 16 MiB, so the live catalog is used again ([#151860](https://github.com/NousResearch/hermes-agent/pull/151860), fixes [#151856](https://github.com/NousResearch/hermes-agent/issues/151856), thanks @100yenadmin). Installs that stay on v0.23.0 or older keep falling back until they update.\n\n<!-- HERMES_BUILDS_TABLE -->\n\n## About this release\n\nMeasured at commit `3b421578588`, the window since v0.23.0 contains **2,578 non-merge commits** across **2,781 changed files** (+151,690 / −62,595), **618 merged PRs** and **409 closed issues**.\n\nAlso in the window, undocumented here on purpose: Esc backtrack in the TUI and classic CLI (replacing the rewind list picker), group chats that run on a gateway without Desktop and can seat bots from other computers, saved gateway connections shared by Desktop and the Webapp, signing the in-app browser in with your real browser profile and filling saved logins from its address bar, `hermes gateway attach` for local clients, `hermes clipboard image --json`, new plugin API (session-scoped environment values, plugin JSON-RPC methods and events, `llm.oneshot` auxiliary tasks, a compression-stable `conversation_id`, an `on_session_open` hook in the gateway, a `post_curator_run` hook), faster transcript and handoff reads, and a large batch of new plugin-catalog entries.\n\n**Full curated release notes for this window ship with v0.24.0**, which will document everything from v0.23.0 onward — highlights, feature areas, and complete contributor credits. Nothing in this window is skipped.\n\n## Updating\n\n- Microsoft Store app: updates through the Store.\n- Desktop app installed from the installer (.exe / .dmg): no change in this release; it updates with the next bundled release.\n- CLI: `hermes update`, or re-run the installer one-liner.\n- Docker / Hermes Cloud: `nousresearch/hermes-agent:stable` (or `:latest`).\n\n**Full Changelog**: [v0.23.0...v0.23.1](https://github.com/NousResearch/hermes-agent/compare/v0.23.0...v0.23.1)",
      "releaseNotesUrl": "https://github.com/NousResearch/hermes-agent/releases/tag/v0.23.1",
      "versionUpdatedAtUnixSeconds": 1794274935,
      "versionUpdatedAtSource": "official"
    },
    "uv": {
      "version": "0.13.8",
      "releaseNotes": "## Release Notes\n\nReleased on 2026-11-12.\n\n### Python\n\n- Add CPython 3.16.0a2 ([#23211](https://github.com/astral-sh/uv/pull/23211))\n- Update managed CPython 3.11, 3.12, 3.13, 3.14, and 3.15 builds to include pip 26.3, zlib 1.4, and Expat 2.10.0 ([#23211](https://github.com/astral-sh/uv/pull/23211))\n- Update GraalPy 3.13.0 to build 25.5.5 ([#23088](https://github.com/astral-sh/uv/pull/23088))\n\n### Preview features\n\n- Install wheel variants from local paths, direct URLs, and Git repositories in platform-specific resolutions ([#22720](https://github.com/astral-sh/uv/pull/22720), [#22722](https://github.com/astral-sh/uv/pull/22722), [#22724](https://github.com/astral-sh/uv/pull/22724))\n- Detect x86-64 microarchitecture levels and AArch64 architecture versions when selecting wheel variants ([#22832](https://github.com/astral-sh/uv/pull/22832), [#22949](https://github.com/astral-sh/uv/pull/22949))\n- Detect Google TPUs up when selecting wheel variants ([#23066](https://github.com/astral-sh/uv/pull/23066), [#23121](https://github.com/astral-sh/uv/pull/23121))\n- Fix CPU detection for wheel variants on macOS with GraalPy ([#23089](https://github.com/astral-sh/uv/pull/23089))\n- Report quarantined packages in `uv audit` when index URLs differ only in redacted query values ([#23129](https://github.com/astral-sh/uv/pull/23129))\n\n### Performance\n\n- Avoid duplicate environment builds when concurrent `uvx` or `uv run --with` invocations need the same environment ([#23123](https://github.com/astral-sh/uv/pull/23123))\n\n### Bug fixes\n\n- Restrict Unix plaintext credential files to owner-only permissions ([#23209](https://github.com/astral-sh/uv/pull/23209))\n- Honor per-index `exclude-newer-package` cutoffs during resolution ([#23122](https://github.com/astral-sh/uv/pull/23122))\n- Respect negative extra markers on constraints ([#23144](https://github.com/astral-sh/uv/pull/23144))\n- Resolve dependencies of recursive extras from a scoped override ([#23210](https://github.com/astral-sh/uv/pull/23210))\n- Fix `activate.bat` for Windows virtual environments whose paths contain apostrophes ([#23152](https://github.com/astral-sh/uv/pull/23152))\n\n### Documentation\n\n- Document the shell requirement for GitLab CI job images ([#23078](https://github.com/astral-sh/uv/pull/23078))\n\n## Install uv 0.13.8\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-installer.ps1 | iex\"\n```\n\n## Download uv 0.13.8\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [uv-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-apple-darwin.tar.gz.sha256) |\n| [uv-x86_64-apple-darwin.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-apple-darwin.tar.gz.sha256) |\n| [uv-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-pc-windows-msvc.zip.sha256) |\n| [uv-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-pc-windows-msvc.zip.sha256) |\n| [uv-x86_64-pc-windows-msvc.zip](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-pc-windows-msvc.zip.sha256) |\n| [uv-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-x86_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-unknown-linux-gnu.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |\n| [uv-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-i686-unknown-linux-musl.tar.gz.sha256) |\n| [uv-riscv64gc-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-riscv64gc-unknown-linux-musl.tar.gz) | RISCV MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-riscv64gc-unknown-linux-musl.tar.gz.sha256) |\n| [uv-x86_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-x86_64-unknown-linux-musl.tar.gz.sha256) |\n| [uv-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |\n| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/uv/releases/download/0.13.8/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |\n\n## Verifying GitHub Artifact Attestations\n\nThe artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):\n```sh\ngh attestation verify <file-path of downloaded artifact> --repo astral-sh/uv\n```\n\nYou can also download the attestation from [GitHub](https://github.com/astral-sh/uv/attestations) and verify against that directly:\n```sh\ngh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>\n```",
      "releaseNotesUrl": "https://github.com/astral-sh/uv/releases/tag/0.13.8",
      "versionUpdatedAtUnixSeconds": 1794502987,
      "versionUpdatedAtSource": "official"
    },
    "pnpm": {
      "version": "12.18",
      "releaseNotes": "pnpm 12.21.0 lets `pnpm store add` prepare tarball and git dependencies for offline installs. It also makes repeated installs keep their peer dependency choices and fixes several `lockfile.format: v13`, `nodeLinker: hoisted`, and `pnpm deploy` failures. If a pnpr server refuses a setting, pnpm now resolves locally.\r\n\r\n### Minor Changes\r\n\r\n- `pnpm store add` run in a project now prepares downloaded tarballs for every lockfile entry that pins them. Besides registry packages, `pnpm install --offline --frozen-lockfile` can then install dependencies on a tarball URL and dependencies on a git host such as GitHub whose lockfile entry records an `integrity`.\r\n\r\n### Patch Changes\r\n\r\n#### Installs that failed\r\n\r\n- pnpm now reads a lockfile with a mapping key longer than 1,024 characters written as `'key':`, without the `? ` marker. Before, `pnpm install` and other commands failed on such a lockfile with `ERR_PNPM_BROKEN_LOCKFILE`.\r\n\r\n- With `lockfile.format: v13`, `pnpm install` no longer fails to create or rewrite the lockfile when a package declares many of its dependencies as peers.\r\n\r\n- Fixed `pnpm deploy` failing with `lockfile.format: v13` when injected workspace packages have hashed peer bindings.\r\n\r\n- Frozen installs with v13 lockfiles now accept valid peer dependencies of injected workspace packages that use catalogs.\r\n\r\n- Fixed injected workspace packages that depend on themselves linking to a nonexistent directory.\r\n\r\n- `pnpm install` with `frozenStore` enabled no longer fails with `ERR_PNPM_FROZEN_STORE_NEEDS_BUILD` when `nodeLinker` is `hoisted`. `pnpm fetch` with `nodeLinker: hoisted` no longer populates global virtual store links or modifies linked agent skills, and it preserves an existing hoisted `node_modules` directory [#18037](https://github.com/pnpm/pnpm/issues/18037).\r\n\r\n- A `requirements.txt` beside a `pyproject.toml` that declares `[tool.uv.workspace]` without a `[project]` table no longer makes that directory a Python project. `pnpm install` stopped there with an error when the directory had a `.venv` that pnpm did not create [#18023](https://github.com/pnpm/pnpm/issues/18023).\r\n\r\n#### Peer dependencies\r\n\r\n- Repeated installs no longer change the peer dependency providers that the previous install chose. This covers adding, updating, or removing a dependency, projects that use different ranges of one dependency, dependency cycles, and injected dependencies with `autoInstallPeers: false` [pnpm/tasks#221](https://github.com/pnpm/tasks/issues/221).\r\n\r\n  An unchanged install keeps a valid locked peer provider even when a direct dependency provides another compatible version. Explicit `pnpm add` and `pnpm update` requests take precedence over it.\r\n\r\n- Workspace projects that select different versions of a peer provider no longer share one copy of the package that depends on it. This affected peers reached through an aliased dependency or a peer dependency cycle.\r\n\r\n- A removed dependency no longer comes back as a peer provider. Before, a direct dependency removed with `autoInstallPeers: false` could be restored from an old peer resolution, and a removed one could still supply its old peer context.\r\n\r\n- With `nodeLinker: hoisted` and `autoInstallPeers: false`, `pnpm install` no longer creates duplicate copies of a package whose resolved peers are identical. A package also no longer loads a copy of its dependency that was resolved with different peer versions [#18003](https://github.com/pnpm/pnpm/issues/18003).\r\n\r\n- `pnpm deploy` now binds optional peers declared only in `peerDependenciesMeta` for linked workspace packages. The deployed manifest and lockfile also retain these peers when filtering dependency groups.\r\n\r\n#### Running scripts\r\n\r\n- Scripts now stop when pnpm's process group is killed while they are starting.\r\n\r\n- Bin shims in the global virtual store no longer include the hoisted modules directory of the project that installed them [#18035](https://github.com/pnpm/pnpm/issues/18035).\r\n\r\n- `pnpm pipeline` now rebuilds local packages and reruns build scripts after it restores a shared Cargo build cache with Cargo 1.100 or newer. Before, a worktree could reuse build-script output from the worktree that created the cache.\r\n\r\n#### pnpr\r\n\r\n- If the pnpr server refuses a setting the install uses, or cannot return the lockfile format pnpm reads, `pnpm install` and `pnpm update` print a warning and resolve locally. Cargo and Python resolution also fall back to resolving locally. pnpm now rejects a pnpr resolution of npm dependencies that does not name its lockfile format.\r\n\r\n- `pnpm install` with `pnprServer` now limits the size of the server's resolve and lockfile verification responses. An oversized response ends the request with an error.\r\n\r\n- pnpm now displays pnpr error codes and reasons when remote requests fail.\r\n\r\n#### Other commands and settings\r\n\r\n- `pnpm setup` and the install script now support PowerShell as the login shell on Linux and macOS. They add `PNPM_HOME` to `PATH` in `profile.ps1` under `$XDG_CONFIG_HOME/powershell` or `~/.config/powershell` [#18026](https://github.com/pnpm/pnpm/issues/18026).\r\n\r\n- A `lockfileDir` setting that points at the default lockfile directory now installs the same way as leaving it unset [pnpm/tasks#275](https://github.com/pnpm/tasks/issues/275).\r\n\r\n<!-- sponsors -->\r\n\r\n## Platinum Sponsors\r\n\r\n<table>\r\n  <tbody>\r\n    <tr>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://pnpm.io/img/users/bit.svg\" width=\"80\" alt=\"Bit\"></a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://openai.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/openai_dark.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/openai_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/openai_dark.svg\" width=\"160\" alt=\"OpenAI\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://notion.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/notion.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/notion_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/notion.svg\" width=\"80\" alt=\"Notion\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n    </tr>\r\n    <tr>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/coderabbit.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/coderabbit_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/coderabbit.svg\" width=\"220\" alt=\"CodeRabbit\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://www.cloudflare.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/cloudflare.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/cloudflare_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/cloudflare.svg\" width=\"160\" alt=\"Cloudflare\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n## Gold Sponsors\r\n\r\n<table>\r\n  <tbody>\r\n    <tr>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://sanity.io/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/sanity.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/sanity_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/sanity.svg\" width=\"120\" alt=\"Sanity\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://discord.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/discord.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/discord_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/discord.svg\" width=\"220\" alt=\"Discord\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://vite.dev/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://pnpm.io/img/users/vitejs.svg\" width=\"42\" alt=\"Vite\"></a>\r\n      </td>\r\n    </tr>\r\n    <tr>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/serpapi_dark.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/serpapi_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/serpapi_dark.svg\" width=\"160\" alt=\"SerpApi\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/stackblitz.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/stackblitz_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/stackblitz.svg\" width=\"190\" alt=\"Stackblitz\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://workleap.com/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/workleap.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/workleap_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/workleap.svg\" width=\"190\" alt=\"Workleap\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n    </tr>\r\n    <tr>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://nx.dev/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/nx.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/nx_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/nx.svg\" width=\"50\" alt=\"Nx\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://latitude.so/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/latitude.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/latitude_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/latitude.svg\" width=\"160\" alt=\"Latitude\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n      <td align=\"center\" valign=\"middle\">\r\n        <a href=\"https://syntax.fm/?utm_source=pnpm&utm_medium=release_notes\" target=\"_blank\" rel=\"noopener noreferrer\">\r\n          <picture>\r\n            <source media=\"(prefers-color-scheme: light)\" srcset=\"https://pnpm.io/img/users/syntaxfm.svg\" />\r\n            <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://pnpm.io/img/users/syntaxfm_light.svg\" />\r\n            <img src=\"https://pnpm.io/img/users/syntaxfm.svg\" width=\"90\" alt=\"Syntax\" />\r\n          </picture>\r\n        </a>\r\n      </td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n<!-- sponsors end -->",
      "releaseNotesUrl": "https://github.com/pnpm/pnpm/releases/tag/v12.21.0",
      "versionUpdatedAtUnixSeconds": 1793840205,
      "versionUpdatedAtSource": "official"
    },
    "vibe-usage": {
      "version": "0.14.12",
      "channels": {
        "latest": "0.14.12"
      },
      "npmPackage": "@vibe-cafe/vibe-usage",
      "versionUpdatedAtUnixSeconds": 1794529965,
      "versionUpdatedAtSource": "official"
    }
  },
  "windowsApplications": {
    "wecom": {
      "displayName": "企业微信",
      "profile": "wecom-v1",
      "version": "5.0.13.6005",
      "downloadUrl": "https://dldir1.qq.com/wework/work_weixin/WeCom_5.0.13.6005.exe",
      "downloadHosts": [
        "work.weixin.qq.com",
        "dldir1.qq.com"
      ],
      "size": 659236832,
      "sha256": "5df50a240038a2de7c3b17e4f25f4747e74d97f9028be9baec6f7379fc97e1be",
      "versionUpdatedAtUnixSeconds": 1792684099,
      "versionUpdatedAtSource": "serverModified"
    }
  },
  "categories": [
    {
      "id": "dev-tools",
      "label": "开发工具"
    },
    {
      "id": "ai-tools",
      "label": "AI 工具"
    },
    {
      "id": "browser",
      "label": "浏览器"
    },
    {
      "id": "chat",
      "label": "社交通讯"
    },
    {
      "id": "office",
      "label": "办公效率"
    },
    {
      "id": "network",
      "label": "网络工具"
    },
    {
      "id": "system",
      "label": "系统工具"
    },
    {
      "id": "media",
      "label": "影音娱乐"
    }
  ],
  "categoryAssignments": {
    "applications": {
      "vscode": "dev-tools",
      "codebuddy-ide": "ai-tools",
      "antigravity": "ai-tools",
      "antigravity-ide": "ai-tools",
      "github-cli": "dev-tools",
      "chatgpt": "ai-tools",
      "google-chrome": "browser",
      "microsoft-edge": "browser",
      "vivaldi": "browser",
      "slack": "chat",
      "1password": "system",
      "wechat": "chat",
      "wecomlite": "chat",
      "qq": "chat",
      "wemeet": "office",
      "obsidian": "office",
      "feishu": "office",
      "lark": "office",
      "wps": "office",
      "dingtalk": "office",
      "tencent-docs": "office",
      "baidunetdisk": "network",
      "dida": "office",
      "ticktick": "office",
      "xmind": "office",
      "siyuan": "office",
      "lx-music": "media",
      "hexhub": "dev-tools",
      "clash-verge": "network",
      "trae": "ai-tools",
      "trae-ai": "ai-tools",
      "qoder": "ai-tools",
      "qoder-cn": "ai-tools",
      "v2raya": "network",
      "discord": "chat",
      "claude-desktop": "ai-tools",
      "cursor": "dev-tools",
      "docker-desktop": "dev-tools",
      "workbuddy": "ai-tools",
      "flclash": "network",
      "localsend": "network",
      "bitwarden": "system",
      "wowtype": "system",
      "umanager": "system",
      "qq-music": "media",
      "wine": "dev-tools",
      "wine-stable": "dev-tools",
      "figcraft": "office",
      "rustdesk": "network",
      "dbeaver": "dev-tools",
      "motrix": "network",
      "typora": "office",
      "drawio": "office",
      "insomnia": "dev-tools",
      "zoom": "office",
      "tabby": "dev-tools",
      "apifox": "dev-tools",
      "deepseek-harness-desktop": "ai-tools"
    },
    "developmentTools": {
      "antigravity-cli": "ai-tools",
      "claude-code": "ai-tools",
      "opencode": "ai-tools",
      "pi": "ai-tools",
      "codex": "ai-tools",
      "dsh": "ai-tools",
      "hermes": "ai-tools",
      "uv": "dev-tools",
      "pnpm": "dev-tools",
      "vibe-usage": "ai-tools"
    }
  }
}