Add /passthrough mode for agent self-pane context#315
Conversation
Remove ollama from BuiltinAcpAgents — it has no ACP adapter (empty acp_launch_command, acp_flags, AcpAuthFlow::None) and cannot be hosted in an agent pane. Delegate-only use is correct and unchanged. Add "" to ollama's exe_search_order so extensionless binary discovery works on non-Windows platforms.
…upport Add Ollama provider support
Toggle pass-through mode with /passthrough to include the agent pane's own accumulated output in context sent to the agent on each turn. - Add CommandKind::Passthrough and REGISTRY entry in commands.rs - Add passthrough_mode: bool field to TabSession in app.rs - Add cmd_passthrough() handler that toggles mode and shows system message - Add passthrough_mode field to PromptSubmission - Update build_prompt_text to accept passthrough_mode and read agent pane output via read_pane_last_message when enabled, appended as ### Agent Pane Output section - Propagate passthrough_mode from active tab to PromptSubmission at prompt submission time - Add commands.passthrough.summary, system.passthrough_enabled, and system.passthrough_disabled locale keys to all 89 locale files - Add slash_passthrough_toggles_mode and slash_passthrough_is_per_tab tests in slash_command_tests.rs - Add passthrough_parses test in commands.rs Closes microsoft#196
|
@ashishpatel26 please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds a new /passthrough slash command that toggles “pass-through mode” per tab, causing the agent pane’s own output to be appended to the prompt context. Also expands known delegate agents to include Ollama.
Changes:
- Add
/passthroughcommand parsing, toggling state onTabSession, and emitting system messages. - Plumb
passthrough_modethroughPromptSubmissioninto prompt-building to include “Agent Pane Output”. - Register Ollama as a delegate-only agent and add localized strings for the new command/messages.
Reviewed changes
Copilot reviewed 96 out of 96 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/wta/src/slash_command_tests.rs | Adds tests for /passthrough behavior and message emission. |
| tools/wta/src/protocol/acp/mock_agent_tests.rs | Updates prompt test helper to include the new passthrough_mode field. |
| tools/wta/src/protocol/acp/client.rs | Adds passthrough_mode to PromptSubmission and includes agent pane output in prompt context when enabled. |
| tools/wta/src/commands.rs | Registers the /passthrough command and adds parsing tests. |
| tools/wta/src/app.rs | Stores pass-through state per tab, toggles it via /passthrough, and forwards it into prompt submissions. |
| tools/wta/src/agent_registry.rs | Adds an “ollama” agent profile and test coverage for resolution/lookup. |
| tools/wta/locales/en-US.yml | Adds /passthrough summary and system messages for enabled/disabled states. |
| tools/wta/locales/en-GB.yml | Adds /passthrough summary and system messages for enabled/disabled states. |
| tools/wta/locales/zh-TW.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/zh-CN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/vi-VN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/uz-Latn-UZ.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ur-PK.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/uk-UA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ug-CN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/tt-RU.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/tr-TR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/th-TH.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/te-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ta-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sv-SE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sr-Latn-RS.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sr-Cyrl-RS.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sr-Cyrl-BA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sq-AL.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sl-SI.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/sk-SK.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ru-RU.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ro-RO.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/quz-PE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/qps-plocm.yml | Adds /passthrough strings for pseudo-localization coverage. |
| tools/wta/locales/qps-ploca.yml | Adds /passthrough strings for pseudo-localization coverage. |
| tools/wta/locales/qps-ploc.yml | Adds /passthrough strings for pseudo-localization coverage. |
| tools/wta/locales/pt-PT.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/pt-BR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/pl-PL.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/pa-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/or-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/nn-NO.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/nl-NL.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ne-NP.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/nb-NO.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/mt-MT.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ms-MY.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/mr-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ml-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/mk-MK.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/mi-NZ.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/lv-LV.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/lt-LT.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/lo-LA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/lb-LU.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/kok-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ko-KR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/kn-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/km-KH.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/kk-KZ.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ka-GE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ja-JP.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/it-IT.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/is-IS.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/id-ID.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/hy-AM.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/hu-HU.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/hr-HR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/hi-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/he-IL.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/gu-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/gl-ES.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/gd-gb.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ga-IE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/fr-FR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/fr-CA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/fil-PH.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/fi-FI.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/fa-IR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/eu-ES.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/et-EE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/es-MX.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/es-ES.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/el-GR.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/de-DE.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/da-DK.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/cy-GB.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/cs-CZ.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ca-Es-VALENCIA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ca-ES.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/bs-Latn-BA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/bn-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/bg-BG.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/az-Latn-AZ.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/as-IN.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/ar-SA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/am-ET.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| tools/wta/locales/af-ZA.yml | Adds /passthrough strings (currently English) for the new command/messages. |
| src/cascadia/inc/AgentRegistry.h | Adds Ollama to built-in delegate agents and documents it as delegate-only. |
Comments suppressed due to low confidence (4)
tools/wta/src/slash_command_tests.rs:1
- This test name and comments claim per-tab behavior, but the assertions only re-check the active tab and don’t verify isolation from another tab. To make this accurate, either (a) create a second tab and assert its
passthrough_moderemainsfalseafter toggling the first tab, or (b) rename the test and comments to reflect that it only verifies the value is stored on the current tab.
tools/wta/src/slash_command_tests.rs:1 - This test name and comments claim per-tab behavior, but the assertions only re-check the active tab and don’t verify isolation from another tab. To make this accurate, either (a) create a second tab and assert its
passthrough_moderemainsfalseafter toggling the first tab, or (b) rename the test and comments to reflect that it only verifies the value is stored on the current tab.
tools/wta/src/protocol/acp/client.rs:1 - Wrapping arbitrary pane output inside a triple-backtick fence can produce malformed prompt text when the pane output itself contains ``` sequences (common in markdown/code output). Consider escaping backticks in
content, or using a longer/variable fence (e.g., 4+ backticks) chosen so it cannot appear in the content, or switch to a different quoting strategy that can’t be broken by the payload.
tools/wta/src/protocol/acp/client.rs:1 - The
50message limit is a new magic number. To make future tuning easier and keep context policies consistent, consider extracting this into a named constant (e.g.,PASSTHROUGH_PANE_MAX_MESSAGES) near other context-size constants.
| system.passthrough_enabled: "Pass-through mode enabled — agent pane output will be included in context." # {Locked="/passthrough"} | ||
| system.passthrough_disabled: "Pass-through mode disabled." # {Locked="/passthrough"} |
|
|
||
| # ── Model picker (/model) ─────────────────────────────────────────────────── | ||
| commands.model.summary: "Choisir le modèle pour ce volet (/model <id> pour changer directement)" # {Locked="/model","<id>"} | ||
| commands.passthrough.summary: "Toggle pass-through mode (include agent pane output in context)" # {Locked="/passthrough"} |
| // (claude via @agentclientprotocol/claude-agent-acp, codex via | ||
| // @zed-industries/codex-acp). | ||
| // Only these agents can be hosted in an agent pane. | ||
| // Ollama is intentionally absent: it has no ACP adapter and cannot be |
| { L"claude", L"Claude" }, | ||
| { L"codex", L"Codex" }, | ||
| { L"gemini", L"Gemini" }, | ||
| { L"ollama", L"Ollama" }, |
| { L"claude", L"Claude" }, | ||
| { L"codex", L"Codex" }, | ||
| { L"gemini", L"Gemini" }, | ||
| { L"ollama", L"Ollama" }, |
| acp_auth_flow: AcpAuthFlow::None, | ||
| delegate_prompt_flag: PromptFlag::Positional, | ||
| model_flags: &[], | ||
| install_hint: "Install Ollama from https://ollama.com", |
| delegate_prompt_flag: PromptFlag::Positional, | ||
| model_flags: &[], | ||
| install_hint: "Install Ollama from https://ollama.com", | ||
| install_url: "https://ollama.com", |
| new_session_id_flag: None, | ||
| }, | ||
| ]; | ||
|
|
| @@ -477,6 +493,12 @@ mod tests { | |||
| assert_eq!(resolve_agent_id_from_cmd("claude --resume foo"), "claude"); | |||
| @@ -477,6 +493,12 @@ mod tests { | |||
| assert_eq!(resolve_agent_id_from_cmd("claude --resume foo"), "claude"); | |||
@check-spelling-bot Report
|
| Dictionary | Entries | Covers | Uniquely |
|---|---|---|---|
| cspell:csharp/csharp.txt | 32 | 2 | 2 |
| cspell:aws/aws.txt | 232 | 2 | 2 |
| cspell:fonts/fonts.txt | 536 | 1 | 1 |
Consider adding to the extra_dictionaries array (in the .github/actions/spelling/config.json file):
"cspell:csharp/csharp.txt",
"cspell:aws/aws.txt",
"cspell:fonts/fonts.txt",
To stop checking additional dictionaries, put (in the .github/actions/spelling/config.json file):
"check_extra_dictionaries": []Forbidden patterns 🙅 (1)
In order to address this, you could change the content to not match the forbidden patterns (comments before forbidden patterns may help explain why they're forbidden), add patterns for acceptable instances, or adjust the forbidden patterns themselves.
These forbidden patterns matched content:
Should be reentrancy
[Rr]e[- ]entrancy
Errors and Warnings ❌ (2)
See the 📂 files view, the 📜action log, 👼 SARIF report, or 📝 job summary for details.
| ❌ Errors and Warnings | Count |
|---|---|
| 54 | |
| ❌ forbidden-pattern | 1 |
See ❌ Event descriptions for more information.
✏️ Contributor please read this
By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later.
If the listed items are:
- ... misspelled, then please correct them instead of using the command.
- ... names, please add them to
.github/actions/spelling/allow/names.txt. - ... APIs, you can add them to a file in
.github/actions/spelling/allow/. - ... just things you're using, please add them to an appropriate file in
.github/actions/spelling/expect/. - ... tokens you only need in one place and shouldn't generally be used, you can add an item in an appropriate file in
.github/actions/spelling/patterns/.
See the README.md in each directory for more information.
🔬 You can test your commits without appending to a PR by creating a new branch with that extra change and pushing it to your fork. The check-spelling action will run in response to your push -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. 😉
If the flagged items are 🤯 false positives
If items relate to a ...
-
binary file (or some other file you wouldn't want to check at all).
Please add a file path to the
excludes.txtfile matching the containing file.File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.
^refers to the file's path from the root of the repository, so^README\.md$would exclude README.md (on whichever branch you're using). -
well-formed pattern.
If you can write a pattern that would match it,
try adding it to thepatterns.txtfile.Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.
Note that patterns can't match multiline strings.
|
@microsoft-github-policy-service agree |
Closes #196
Summary
/passthroughtoggles pass-through mode on the active tab (on/off with repeated calls)read_pane_last_messageand appended as a### Agent Pane Outputsection in the context sent to the agent on each turnfalsepassthrough_mode: boolfield added toPromptSubmissionand propagated fromTabSessionat prompt submission timecommands.passthrough.summary,system.passthrough_enabled, andsystem.passthrough_disabledkeys (English text seeded in all translated locales per convention)Testing
slash_passthrough_toggles_mode: verifies toggle behavior and system message emissionslash_passthrough_is_per_tab: verifies mode is stored per-tabpassthrough_parses: verifies/passthroughparses correctly and prefix-matchesevery_locale_has_all_en_us_keys) verifies all 89 files have the new keys