fix(skills): align discovery and source resolution, improve @ picker UX - #2905
Merged
Conversation
kev1n77
force-pushed
the
fmy/compatibility
branch
from
September 8, 2026 15:26
605a117 to
69e0d1c
Compare
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.
Summary
Fix inconsistent local and remote skill discovery, missing nested skills, and missing user-visible scan diagnostics. Improve skill selection in the input field.
.system; follow directory symlinks while preventing traversal cycles.@picker shows only the winning entry for each name under the current mode's override rules, without displaying internal identifiers.@descriptions visible by default, truncate long descriptions with an ellipsis, and scroll them on hover. Disable detail tooltips in the picker, input skill tags, and installed skills list.Related issue: None.
Type and Areas
Type: bug fix / UI/UX / docs / test
Areas: Rust core, Agent Runtime, desktop/Tauri, Web UI, design-system/Listbox, i18n, docs.
Motivation / Impact
Previously, standard-root scans inspected only immediate child directories, remote scans skipped symlinks, and remote merging omitted the project-priority offset used locally. This could omit skills or select the wrong override. Discovery failures were typically logged without a visible indication, making it difficult to distinguish an empty skill list from an incomplete scan.
Skill listings and invocation now preserve consistent source identities, and scan failures appear as visible diagnostics. The input field presents skill names according to the current mode's override results, with descriptions readable without hovering. Full details remain available on click.
Verification
The following results were recorded during implementation. Before committing,
git diff --checkandgit diff --cached --checkalso passed.cargo test --locked -p openbitfun-core --no-default-features --features agent-runtime,git,external-sources --lib agentic::tools::implementations::skill: 61 passed.cargo test --locked -p openbitfun-agent-runtime --no-default-features --features agent-runtime --test agent_definition_contracts skill_contracts: 32 passed, including legacy report deserialization and serialization round trips.pnpm --dir src/web-ui exec vitest run src/flow_chat/components/ChatContextPickerOverlay.test.tsx src/app/scenes/skills/SkillsScene.presentation.test.ts: 17 passed.pnpm --dir src/web-ui exec vitest run src/flow_chat/components/RichTextInput.test.tsx: 29 passed.node --test design-system/packages/ui/tests/listbox.test.mjs: 3 passed.pnpm --dir design-system run build:ui: passed.pnpm run check:web: passed, including type, Appearance, theme color, and visual contract checks.pnpm run i18n:audit: passed with 0 warnings.pnpm run fmt:rs: executed.pnpm run motion:audit: executed. This command provides a checklist rather than visual acceptance testing. Its existing PortForwardDialog motion advisory is unrelated to this change.Desktop verification:
cargo test --locked -p openbitfun-desktop --lib api::skill_api::testscompiled successfully, but the test executable failed to loadTaskDialogIndirectbecause it lacked a Common Controls v6 manifest, exiting with0xc0000139.target/, embedded a temporary Windows manifest, and rantarget/compatibility-discovery-audit/desktop-skill-tests.exe api::skill_api::tests: 4 passed. The temporary executable and manifest are not committed.Verification limitations:
pnpm run check:core-boundariescould not complete because of an existing broken dependency link atsrc/apps/mobile/harmonyos/entry/oh_modules/libbitfun_crypto.so(ENOENT).Reviewer Notes
includeDiagnosticsflag is enabled; otherwise, they retain the original array response. New clients accept legacy array responses from older hosts and indicate that diagnostics are unavailable.SKILL.mdis found, preventing reference examples inside a skill package from being treated as separately installed skills. OpenCode configuration roots retain their existing boundary constraints.ListboxOptionforwards an explicittitle=""to its text slots to disable automatic overflow tooltips. Other callers retain the default behavior.Checklist