* feat(agent-requirements): gate agents on declared requirements
* feat(cli): add agent requirements preflight helpers
Introduce a Kilo-owned CLI requirements module that preflights agent
declarations before session creation. The helper resolves requirement
status via the SDK, blocks agents with unmet skills, errored MCPs, or
VS Code extension dependencies, and produces grouped actionable
guidance for terminal users.
Includes planning documents and a focused test suite covering all
blocking and allow paths.
* chore: update kilo-vscode visual regression baselines
* fix(vscode): guard extension subscription and suppress empty invalidations
Wrap vscode.extensions.onDidChange in a typeof check so the subscribe
callback is undefined in environments where the API is unavailable.
Skip posting agentRequirementsInvalidated when the controller cache is
already empty to avoid spurious messages to the webview.
Update the associated test to seed cache state before asserting on the
clear-triggered invalidation flow.
* refactor(agent-requirements): replace numeric generations with object-identity tokens
Switch the controller's supersession tracking from incrementing counters
to ephemeral object references, ensuring stale tokens are cleaned up on
both success and failure paths. This eliminates a class of race
conditions where cleared counters could alias with fresh requests.
Conditionally emit the "Install the required skills..." footer in the
CLI formatter only when skills or MCPs are actually present, preventing
misleading guidance for extension-only requirement failures.
* test(httpapi): add exercise scenario for agent requirements endpoint
Cover the GET /kilocode/agent/requirements route in the HTTP API
exercise harness, asserting that the response echoes the requested
agent, uses the routed workspace directory, and correctly reports
the disabled state with empty skills/mcps/extensions arrays.
* feat(agent-requirements): enforce guard across all clients and relax ID validation
Lift the VS Code–only restriction from the requirements guard so
that blocked skills/MCPs fail for CLI and other clients as well.
VS Code extension requirements remain client-specific. The evaluate
function now accepts pre-decoded requirements as an explicit input
rather than decoding internally, and the schema switches from the
strict alphanumeric ID pattern to a permissive non-whitespace Name
pattern allowing slashes and spaces in skill/MCP identifiers.
Update prompt interfaces to surface RequirementBlockedError in the
typed error channel and preserve "ready" results in the webview
cache alongside blocked/error states.
* chore(opencode): fix requirement guard annotations
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Let Agent Manager chat tools choose a model and reasoning effort per session,
discover what is available without loading the full catalog, and resolve the
provider automatically so the agent does not have to know provider plumbing.
- agent_manager tasks accept a `model` (by name) and a model-specific `variant`.
Selection is resolved to a concrete provider/model, preferring the provider
behind the user's default model and falling back to the Kilo Gateway, with a
qualified provider/model accepted as an escape hatch. A model selection
requires an initial prompt so the session persists it.
- New agent_manager_models tool searches models grouped by name (not provider),
capped at 20 results per call and paginated, so the catalog never bloats the
conversation context. Matching is lenient (case, punctuation and order
insensitive) so an exact name is not required.
- Wrong guesses return closest-name suggestions and the success output echoes
how each named model resolved (provider and variant) for transparency.
Badge color now reflects only the PR lifecycle state (open/draft/merged/closed),
so a failing check is no longer mistaken for a closed PR. CI and review results are
shown as a separate icon (failing checks, changes requested, approved), and an open
PR whose checks are still running keeps its pulsing amber badge.
Virtualize the model catalog so opening the picker mounts only the
visible window instead of the entire model list, and remove artificial
open latency from the mode and variant pickers.
The model selector built every catalog row up front (~6k DOM elements,
~11k transient nodes for a ~630-model catalog), blocking the main thread
on element creation, style recalculation, and layout before first paint.
The active-model lookup also re-scanned the list on every reactive read.
The mode and variant pickers were cheap to build but felt slow because of
the shared popover enter animation and a deferred focus frame.
Render the catalog through a virtualizer, memoize the active-model
lookup, anchor scroll restoration to virtual item offsets so favorite
toggles no longer jump when the anchored row is virtualized out, disable
the popover open animation for these selectors, and focus the selected
option during initial mount instead of a later frame.
Cache sandbox status per session so switching worktrees or sessions shows the known state immediately instead of flickering, track in-flight toggles per session, and preserve the prompt textarea scroll position when toggling sandbox before the first message.