Add an AlwaysApprove flag to resolve-approval commands and cache
approved tool keys for the current request so repeated runtime
permissions are auto-approved immediately within the same turn.
The cache is cleared when the turn finishes to avoid leaking across
future requests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
AryxCopilotAgent was converting ALL Copilot tool requests (ask_user,
MCP tools, etc.) into FunctionCallContent. The Agent Framework's
AIAgentHostExecutor tracks every FunctionCallContent as an outstanding
request. Since SDK-handled tools like ask_user never produce a
matching FunctionResultContent, HasOutstandingRequests stayed true and
TurnToken was never emitted — stalling group-chat advancement after
an ask_user interaction.
Now only handoff_to_* tool requests are projected as FunctionCallContent.
All other tool calls remain invisible to the Agent Framework executor,
matching the upstream GitHubCopilotAgent behaviour.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the broken forced-tool workaround with a repo-local Copilot
agent adapter that merges runtime handoff instructions and tool
declarations into Copilot sessions and projects Copilot tool requests
back into Agent Framework function-call updates.
Also add regression coverage for the adapter and document the runtime
integration detail in the architecture guide.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Constrain the initial handoff triage agent so it cannot use regular
session tooling and must use a handoff tool on its first invocation.
This prevents the model from narrating delegation in plain text while
never actually transferring control.
Also add regression tests for the new entry-agent constraints.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add backend support for plan-mode turn shaping and exit-plan review
checkpoints. Run-turn commands now accept an interaction mode,
plan-mode prompt guidance tells agents to produce a plan and call
exit_plan_mode, and the sidecar emits a structured
exit-plan-mode-requested event when the SDK raises that session event.
For now the backend intentionally treats exit_plan_mode as a turn
boundary and graceful-degradation review checkpoint. The current
Agent Framework GitHubCopilotAgent wrapper does not expose a clean way
to bridge the live CopilotSession back into same-turn exit-plan
resolution, so that follow-up remains documented for the frontend and a
future backend slice.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exclude internal runtime tools from sidecar capability discovery so they do not surface in the approval tool catalog.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Implement the Copilot SDK user input round-trip in the backend:
- add user-input-requested and resolve-user-input protocol DTOs
- add a CopilotUserInputCoordinator that mirrors approval flow with
pending TaskCompletionSource state and explicit resolution
- wire SessionConfig.OnUserInputRequest through CopilotAgentBundle
and CopilotWorkflowRunner
- extend SidecarProtocolHost to emit user input events, accept
resolve-user-input commands, and filter ask_user from runtime
approval tools
- add regression tests for the new coordinator and protocol flow
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Expose SDK permission request details on approval-requested events via a
new permissionDetail payload. This preserves the existing title/detail
summary while carrying the command, URL, diff, args, and other
kind-specific data needed for richer approval UI in the renderer.
Also adds sidecar coverage for all supported permission request kinds and
verifies the new payload serializes over the protocol.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- correlate permission requests to tool names via ToolCallId when the
workflow request stream exposes matching CallId values
- keep the url-to-web_fetch alias only as a narrow fallback when a
matching tool call cannot be recovered
- cover generic permission-category lookup for url, shell, and read in
sidecar tests
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- load runtime tools dynamically from Copilot CLI capabilities via tools.list
- merge runtime tools with configured MCP and LSP tools in the approval catalog
- keep a fallback builtin runtime tool list when capabilities are unavailable
- move approval-tool pruning to the app service so dynamic tools are not dropped on load
- update approval UI and docs to use the corrected runtime-tool model
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Audit confirmed that single, sequential, concurrent, and handoff are mapped to distinct workflow builders as intended. Group-chat was also using the correct round-robin manager, but the agents only had one-shot role prompts, so the reviewer could behave like a fresh assistant instead of refining the draft in progress. Add explicit runtime guidance for group-chat participants plus clearer built-in Writer/Reviewer instructions and regression coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Seed new TypeScript LSP profiles with --stdio, validate that shared profiles keep the required flag, auto-add it for existing profiles in the sidecar runtime, and include recent stderr when a language server dies before completing a request. Add shared and sidecar regression coverage.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Configure the sidecar LSP tool serializer with a DefaultJsonTypeInfoResolver and freeze it read-only before handing it to AIFunctionFactory. Add regression coverage so enabling LSP-backed tools cannot reintroduce the runtime JsonSerializerOptions failure.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename the product, runtime surfaces, sidecar projects, docs, tests, and packaging outputs from Kopaya to Eryx across the repository.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Run the Copilot CLI version probe through the resolved launch path and args instead of invoking the Windows shim directly. This keeps the version check aligned with the SDK launch strategy and avoids false 'Version unknown' results from the Winget-installed Copilot executable.
Add a regression test covering the constructed launch command.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- report Copilot CLI version freshness as latest, outdated, or unknown
- expose active Copilot account metadata from the SDK auth status
- add best-effort GitHub organization context when gh is available
- document the frontend follow-up in HANDOVER.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add backend support for Copilot connection and account-status UX without introducing raw provider credential management.
This change extends sidecar capabilities with explicit connection diagnostics, adds a refreshable capabilities IPC path, classifies common Copilot CLI failure modes, and includes a frontend handover document describing the new payload and expected UI states.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>