Repository navigation
fix(verify-openhands): point the default agent profile at the preset's model - #18209
Merged
Merged
Conversation
…s model Onboarding on a local backend pins the `default` agent profile to the LLM profile it creates. `llm preset deepseek` activated deepseek-flash but left that pin, so the Agents page still showed the onboarding model and deleting the onboarding profile answered 409 until `default` was edited by hand. The preset now moves `default` to deepseek-flash when it references another LLM profile that exists, and reports `repointed`. A fresh run's reference to the missing `default` profile (F13.stale-llm-ref), named agent profiles and `llm set` stay as they are. F01's Restore and Gotcha now use the preset. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018aWx8ibVJKrze1ckEXNwx1
Contributor
|
PR Artifacts Cleaned Up The |
all-hands-bot
approved these changes
Oct 9, 2026
all-hands-bot
left a comment
Collaborator
There was a problem hiding this comment.
Reviewed the diff: the change is confined to the verify-openhands skill harness and .pr/, adds a small pure helper (lib/agent-profile-repoint.mjs) with unit tests, and wires it into llm preset only (leaving llm set, named profiles, ACP profiles, and missing refs alone). CI is green and the helper's behavior matches my own sanity runs. No major issues — approving.
This review was generated by an AI agent (OpenHands) on behalf of the OpenHands maintainers.
enyst
enabled auto-merge (squash)
October 9, 2026 02:07
…-da1zye # Conflicts: # .agents/skills/verify-openhands/scripts/control-openhands.test.mjs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
HUMAN:
This PR fixes a tricky case with the openhands agent cli when the default agent profile had an llm and another llm profile is activated - allow the cli to give the agents an easy way to change the active llm of an agent profile.
AGENT:
I'm an AI agent (Claude Code) helping Engel Nyst (@enyst) with project maintenance. This is a follow-up to #18191: a harness gap that the DeepSeek runs exposed.
Why
On a local backend, onboarding points the
defaultagent profile at the LLM profile it creates.control-openhands llm preset deepseekactivateddeepseek-flashbut left that pointer where it was. The result:default;409 LLM profile is referenced by 1 agent profile(s): default.The F01 recipe worked around this with five UI steps in Settings → Agents before its cleanup could run.
Summary
llm presetnow also pointsdefaultat the profile it activates (deepseek-flash). It does this only whendefaultis an OpenHands profile that references another LLM profile that exists. The output then carries"repointed": {"agentProfile": "default", "from": …, "to": "deepseek-flash"}. The save keeps every stored field and drops onlyid,nameandrevision, as the Agents editor does. The profile keeps its id and stays active.defaultreferences a profile nameddefaultthat does not exist. The app already falls back to the active LLM profile for it, andF13.stale-llm-refdrives that state after the preset.llm set.F05.profile-identityandF27.terminal-waitingactivate throwaway profiles with it and then delete them, which would answer 409 ifdefaultfollowed.--helptext forllmsays when it happens. The decision is a pure helper (scripts/lib/agent-profile-repoint.mjs) with unit tests.Issue Number
Part of #17872: harness follow-up from the DeepSeek runs documented there. This PR changes no product code.
How to Test
Static checks:
Live, on one fresh run of
main@ff1a1d6(agent-server 1.53.0, Node 24.21.0).main's CLI ran from a worktree as the before case:A conversation started afterwards from the home composer finished with the reply
qa-preset-ok.Video/Screenshots
Settings → Agents on the same run, right after onboarding pinned
defaulttodeepseek-chat. Screenshots bycontrol-openhands, under.pr/(removed on approval); no key field is on this page.Before, after
main'sllm preset deepseek.defaultstill namesdeepseek-chat:After, with this branch's preset.
defaultnamesdeepseek-flash:Both files are in the .pr folder at 82f1c51.
Design Doc
Not included; the change is confined to
.agents/skills/verify-openhands/and.pr/.Type
Notes
🐳 Docker images for this PR
• GHCR package: https://github.com/OpenHands/OpenHands/pkgs/container/agent-canvas
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.53.0-pythonopenhands-automation==1.19.051a79d4dd59090bb21421e306227bd167314e8a8Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-51a79d4Run
All tags pushed for this build
About Multi-Architecture Support
sha-51a79d4) is a multi-arch manifest supporting both amd64 and arm64sha-51a79d4-amd64) are also available if needed