diff --git a/doc/specs/deterministic-pane-actions.md b/doc/specs/deterministic-pane-actions.md new file mode 100644 index 0000000000..99f24d5632 --- /dev/null +++ b/doc/specs/deterministic-pane-actions.md @@ -0,0 +1,549 @@ +# Model-Prepared, Deterministic Pane Actions + +Author: vanzue +Date: 2026-08-12 +Branch: `dev/vanzue/deterministic-pane-slash-commands` +Status: Proposed + +## Summary + +Add orthogonal target selection, model-driven command cards, and literal +command execution: + +- `@pane` selects the persistent working environment for this tab's Agent. +- A plain `` follows the normal Copilot workflow, with the selected + pane supplied as preferred terminal context. +- `/command ` (`/cmd` alias) requires Copilot to produce exactly one + terminal command proposal. WTA shows the standard **Run / Insert** card. +- `$ ` bypasses the model and runs the literal command in the selected + pane. +- `/delegate ` immediately creates a new tab or panel and starts the + configured delegate agent. In parallel, the current model prepares the prompt. + When both sides are ready, WTA shows a Send card bound to the new agent pane. + +The model decides **what text to propose**, but never where or how it executes. +The helper owns the target pane GUID and requested operation. The user confirms a +locally constructed action card before WT receives any input. + +The pane picker reads an event-driven pane catalog held in helper memory. It +does not call `list_panes` when opened or while the selection changes. + +## Design principles + +1. **Orthogonal syntax.** `@` selects an environment, `/command` constrains the + model result, and `$` marks literal input. None of these concepts implicitly + changes another. +2. **Host-owned mechanics.** Pane selection, tab/panel creation, agent launch, + target binding, and Run/Insert choice never come from the model. +3. **Confirmation boundary.** A model result becomes a proposal card; only a + user click/keypress executes it. +4. **In-memory pane discovery.** WT publishes pane snapshots after structural or + metadata changes; each helper maintains its own current-tab catalog. +5. **No retargeting.** A card carries the exact protocol session GUID selected + or created by the host. Focus changes cannot alter it. +6. **No silent fallback.** A missing target invalidates the card. It never falls + back to the active pane. + +## User experience + +### Select a pane with `@` + +1. The user types `@` in the WTA input. +2. WTA filters its in-memory catalog to writable, visible, non-agent panes in + the helper's owning tab. +3. A popup appears above the input. +4. Up/Down changes the selected row. WT moves the existing Agent chip to the + selected real pane without moving keyboard focus. +5. Enter commits the pane as the helper's persistent Agent target and removes + the selector text. WTA stores the pane GUID separately from the UI label. + +The popup can show pane ordinal, title/process, shell, and cwd. If catalog data +changes while it is open, WTA preserves selection by GUID when possible. + +### Normal prompt + +```text +why did the last command fail? +``` + +The text follows the ordinary Copilot workflow. The selected pane's GUID, +shell/title/cwd, and recent output are supplied as preferred context. `@` does +not force a terminal action card. + +### Require a command card + +```text +/command install this project's dependencies +``` + +On Enter: + +1. WTA submits a command-proposal turn to the current ACP model with: + - the user's intent; + - the persistent target, or the default source pane when no `@` selection + has been made; + - target shell/title/cwd and recent output; + - a requirement to propose exactly one `send` action. +2. The model returns the proposed payload through + `request_terminal_actions`. +3. WTA ignores any model-authored target and binds the proposal to the selected + GUID snapshotted when the turn was submitted. +4. WTA shows the normal command card with **Run** and **Insert** actions. +5. Run sends exactly one trailing Enter; Insert sends no trailing Enter. + +The model may rewrite prose into a shell command, complete a partial command, or +prepare text appropriate for an interactive program already running in the +pane. It cannot execute the result. + +`/cmd` is an alias. `/command @` and `/cmd @` open the same pane picker; after +selection, the input returns to the command prefix and the user enters intent. + +### Run literal input + +```text +$ cargo test parser +``` + +WTA bypasses Copilot and sends the literal command plus exactly one trailing +Enter to the snapshotted persistent target. With no explicit `@` selection it +uses the default source pane. This path does not create a model proposal card. + +### Delegate + +```text +/delegate investigate why the parser tests are flaky +``` + +1. WTA opens a Tab/Panel destination picker, preselecting the last confirmed + choice for this helper/tab. +2. On confirmation WTA starts two independent branches: + - **Host branch:** create the tab/panel and immediately launch the configured + delegate agent interactively, without a startup prompt. + - **Model branch:** ask the current ACP model to turn the user's intent and + current terminal context into a concise delegate prompt. +3. WTA joins the two branches by an internal operation ID. +4. Once the new pane GUID and model payload both exist, WTA shows a single + **Send** card bound to the new agent pane. +5. User confirmation sends the prepared prompt plus Enter to that pane. + +The tab/panel and delegate process can therefore become visible before model +preparation completes. If preparation fails, the new interactive delegate stays +open and the original intent remains available for retry. + +`@pane` is not valid inside `/delegate`. Delegation always creates a new +destination; the selected destination pane comes from host creation, not user +mention or model output. + +## Pane catalog + +### Ownership + +Each helper keeps a catalog for its owning tab: + +```rust +struct PaneCatalog { + generation: u64, + panes: HashMap, +} + +struct PaneDescriptor { + session_id: PaneSessionId, + tab_id: String, + window_id: String, + ordinal: u32, + title: String, + process_name: String, + shell: Option, + cwd: Option, + visible: bool, + read_only: bool, + is_agent: bool, +} +``` + +The protocol GUID is the key. Display labels and ordinals are mutable metadata. + +### Snapshot delivery + +Do not maintain the catalog with picker-time queries or fragile individual +deltas. WT emits an authoritative full snapshot: + +```json +{ + "method": "pane_catalog_changed", + "params": { + "window_id": "1", + "tab_id": "42", + "generation": 17, + "panes": [] + } +} +``` + +WT sends a snapshot: + +- when a helper attaches or its owning tab is initialized; +- after pane create, split, close, detach, attach, move, hide, or restore; +- after title, cwd, read-only, process, or agent-pane metadata changes that + affect picker display or eligibility. + +Snapshots are scoped by both `window_id` and stable owner `tab_id`. The helper +ignores snapshots for another owner and generations older than its current one. +Full snapshots make missed/coalesced events self-healing and make create/close +ordering irrelevant. + +The picker only reads `PaneCatalog`. Sending input also does not refresh the +catalog. WT's `SendInput` result is the authoritative final liveness check. + +### Catalog lifecycle + +- A missing GUID in a newer snapshot removes the candidate and invalidates any + pending selection, persistent Agent target, or action card bound to it. +- Stashing the agent pane does not discard the catalog. +- Tab close clears the catalog. +- Helper reconnect requests one fresh snapshot before enabling `@`. +- Until the initial snapshot arrives, `@` shows a loading state rather than + querying WT. + +## Pane preview + +The picker reuses the existing `set_agent_chip_target` route. While the picker +is open, the helper publishes the highlighted pane GUID as the temporary chip +target. Committing a pane stores a per-tab persistent Agent target and keeps the chip +there. Escape, Backspace, and Delete cancel only the uncommitted picker/input +state. Removing the target pane releases the override and restores source-driven +chip placement. + +No border state is added to `Pane`, and preview never moves keyboard focus or +reuses input-broadcast state. + +The persistent target is the default context for ordinary prompts, +`/command`, `/fix`, and `$`. Every submitted turn or direct operation snapshots +the target GUID, so changing the persistent target cannot redirect work already +in flight. + +## Model preparation contract + +### Reuse the existing proposal tool + +Use the existing per-session `request_terminal_actions` MCP endpoint as the +structured model-output channel. Do not parse assistant prose as commands. + +Add an internal preparation mode to `PromptSubmission`: + +```rust +enum PreparationKind { + TerminalCommand, + DelegatePrompt { operation_id: u64 }, +} + +enum PreparedActionMode { + Command, + SendToDelegate, +} +``` + +The helper supplies trusted context containing the bound target GUID or pending +delegate operation. None of this trusted context is serialized into the +model-visible action schema. + +### Preparation prompt + +Add dedicated prompt templates: + +- `prepare-pane-input.md` (terminal command proposal) +- `prepare-delegate-prompt.md` + +Both tell the model: + +- understand the user's intent using supplied terminal context; +- call `request_terminal_actions` exactly once; +- use exactly one action with `type: "send"`; +- put only the proposed payload in `input`; +- do not include a pane ID; +- do not execute tools or perform the task itself; +- end without additional assistant prose. + +The command template requires a shell command without explanatory prose or its +own newline. The delegate template includes the configured delegate name/model +and asks for a self-contained task prompt rather than a shell command. + +### Authoritative validation + +When a proposal belongs to a preparation turn, the helper accepts only: + +- one choice; +- one action; +- `ProposalActionWire::Send`; +- non-empty input within the existing size limit; +- the same live preparation operation and prompt ID. + +`open`, `open_and_send`, multiple choices, or a second tool call reject the +proposal. The helper constructs a new local card from the validated payload and +trusted target: + +```rust +struct PreparedPaneAction { + operation_id: u64, + target_session_id: PaneSessionId, + payload: String, + mode: PreparedActionMode, +} +``` + +The model never supplies `target_session_id` or `mode`. + +### Card behavior + +Command preparation uses the standard two-button terminal card: + +| Action | Payload sent | +|---|---| +| Insert | trailing CR/LF removed | +| Run | trailing CR/LF removed, then one `\r` | + +Delegate preparation remains a single **Send** action with exactly one trailing +`\r`. + +Confirmation is the only execution point. If the catalog no longer contains +the target, or a `pane_catalog_changed` snapshot removed it, the card becomes +expired. A failed `SendInput` keeps the card and payload for retry. + +## Delegate orchestration + +### Host branch + +Factor delegate process construction from the existing CLI/coordinator path, +but do not use `DelegatePromptDelivery` for this flow. The model-prepared prompt +does not exist at launch time, so the host always: + +1. builds an interactive delegate command line with no prompt; +2. creates a tab or splits the current working pane; +3. captures the returned pane GUID; +4. registers the born-bound session when supported; +5. records the GUID against `operation_id`. + +Tab creation uses `wt_create_tab`. Panel creation uses `wt_split_pane` with the +current working pane as the parent. The destination picker selects only the +kind; it does not expose or persist a parent GUID. + +### Model branch + +The current ACP session receives the dedicated delegate-preparation turn. +Terminal context comes from the current working pane, not the newly launched +blank agent pane. The validated Send payload is stored against `operation_id`. + +### Join + +```rust +struct PendingDelegate { + operation_id: u64, + destination: DelegateTarget, + original_intent: String, + target_pane_id: Option, + prepared_payload: Option, + status: DelegatePreparationStatus, +} +``` + +The card appears only when both optional values exist. Either branch may finish +first. Stale completions are ignored by operation ID. + +Only one pending delegate preparation is allowed per tab for MVP. A second +`/delegate` is rejected until the first produces a card or is cancelled. + +## Concurrency and failure behavior + +Pane-input preparation and delegate-prompt preparation use the current ACP +session and are refused while a turn is already in flight. `/stop` cancels only +the model branch; it never closes an already-created delegate pane. + +| Condition | Behavior | +|---|---| +| Initial pane snapshot not received | `@` shows loading; no query fallback. | +| No eligible pane | Show "No writable panes in this tab." | +| Selected pane removed during preparation | Cancel/expire proposal; keep original intent. | +| Model returns prose without tool call | Mark preparation failed; execute nothing. | +| Model proposes open/multiple actions | Reject proposal; execute nothing. | +| Model preparation fails after delegate launch | Keep interactive delegate pane open; offer retry. | +| Delegate launch fails while model runs | Cancel operation; discard later proposal by operation ID. | +| Delegate pane closes before confirmation | Expire Send card. | +| `SendInput` fails | Keep card and payload for retry; never retarget. | +| ACP transport is lost | Disable preparation commands; `/restart` remains available. | +| Preview event fails | Keep picker usable without claiming a visible preview. | + +No failure converts model-prepared content into literal input automatically. + +## End-to-end flows + +### `@pane`, then a normal prompt + +```text +WT pane snapshots + -> helper PaneCatalog + -> @ picker + visual preview + -> persistent trusted target GUID +plain prompt + -> ordinary ACP prompt with target context +``` + +### `/command ` + +```text +persistent/default target GUID + -> ACP command-proposal prompt + -> model request_terminal_actions(send payload) + -> helper validates send-only proposal + -> helper builds standard Run / Insert card with trusted GUID + -> user chooses Run or Insert + -> wtcli -> COM SendInput -> exact TermControl +``` + +### `$ ` + +The helper snapshots the persistent/default target, bypasses ACP, and dispatches +the literal command through the same host-owned SendInput execution path as the +Run action. + +### `/delegate ` + +```text + +-> WT creates Tab/Panel +/delegate + destination -+ -> interactive delegate starts + | -> exact new pane GUID + | + +-> current model prepares delegate prompt + -> request_terminal_actions(send payload) + +new pane GUID + validated payload + -> helper builds Send card + -> user confirms + -> SendInput(new pane GUID, payload + Enter) +``` + +## Implementation plan + +### Phase 1: pane catalog and preview + +- Define pane catalog event schema and descriptor fields. +- Emit initial and mutation-triggered full snapshots from TerminalApp. +- Maintain per-tab catalog state in the helper with generation filtering. +- Add `@` popup backed only by the catalog. +- Add preview SendEvent routing and transient border state. + +Primary files: + +- `src/cascadia/TerminalApp/TerminalPage.cpp` +- `src/cascadia/TerminalApp/TerminalPage.Protocol.cpp` +- `src/cascadia/TerminalApp/TabManagement.cpp` +- `src/cascadia/TerminalApp/Pane.*` +- `src/cascadia/WindowsTerminal/TerminalProtocolComServer.cpp` +- `tools/wta/src/app.rs` +- `tools/wta/src/app/tab_state.rs` +- `tools/wta/src/app_events.rs` +- `tools/wta/src/ui/*` + +### Phase 2: preparation-turn contract + +- Add preparation kinds and trusted target context. +- Add the two prompt templates. +- Restrict preparation proposals to exactly one Send action. +- Convert validated payloads into single-button local cards. +- Preserve original intent for retry and cancellation. + +Primary files: + +- `tools/wta/src/protocol/acp/prompt_context.rs` +- `tools/wta/src/protocol/acp/prompt_builder.rs` +- `tools/wta/src/protocol/acp/client.rs` +- `tools/wta/src/agent_tools/action_proposal/schema.rs` +- `tools/wta/src/app_turn.rs` +- `tools/wta/src/app_events.rs` +- `tools/wta/prompts/*` + +### Phase 3: `@`, `/command`, and `$` + +- Add persistent target selection state. +- Add `/command` parsing and `/cmd` alias. +- Submit command-proposal turns with standard Run/Insert cards. +- Add model-bypass `$` execution through the exact-GUID SendInput path. +- Wire card confirmation to exact-GUID `SendInput`. +- Invalidate targets and cards from catalog snapshots. + +### Phase 4: `/delegate` + +- Add destination picker and per-tab last choice. +- Extract interactive delegate command construction. +- Launch host and model branches under one operation ID. +- Join new pane GUID with validated model payload. +- Show the host-bound Send card and register born-bound sessions. + +### Phase 5: integration + +- Localize all strings. +- Log operation kind, operation ID, pane GUID, and payload length, never payload + text. +- Test packaged Debug behavior across tab/pane lifecycle, helper stash/restore, + agent failure, and ACP reconnect. + +## Test matrix + +### Rust unit tests + +- Pane snapshots replace the catalog atomically and reject stale generations. +- Picker never invokes `list_panes`. +- Picker selection survives metadata updates by GUID. +- Removed panes clear persistent targets and expire cards. +- Committed targets survive subsequent ordinary prompts. +- `/command` and `/cmd` produce the same standard Run/Insert card. +- `$` bypasses the model and binds literal execution to the snapshotted target. +- Preparation accepts one Send and rejects open, open_and_send, multiple + choices/actions, empty payloads, and stale prompt IDs. +- Insert/Run/Send cards apply the correct newline policy. +- The model cannot change target GUID or execution mode. +- Delegate joins correctly when host or model finishes first. +- Delegate launch failure discards a later model proposal. +- Model failure leaves an already-open delegate pane alone. +- ACP transport loss disables all model-preparation entry points. + +### C++ tests + +- Initial and mutation snapshots contain the authoritative current tab. +- Snapshot generation is monotonic per helper/tab. +- Preview validates same-tab source and target. +- Preview never moves focus or enables broadcast. +- Source/target close and helper disconnect clear preview state. +- Focused/preview/broadcast border priority is stable. + +### Packaged integration tests + +1. Open the picker repeatedly and verify no `list_panes` process is spawned. +2. Split/close/move panes and verify popup contents update from snapshots. +3. Move picker selection and verify the real pane border follows without focus + leaving WTA. +4. Ask for prose intent, verify the model-prepared command appears in a card, + and verify nothing reaches the pane before confirmation. +5. Confirm Insert and verify no execution; confirm Run and verify one execution. +6. Change focus after selection and verify the bound GUID still wins. +7. Close the target during model preparation and verify no other pane receives + input. +8. Delegate to Tab and Panel; verify the agent opens immediately while prompt + preparation is still running. +9. Complete model preparation before and after pane creation to exercise both + join orders. +10. Fail/cancel either delegate branch and verify deterministic cleanup. + +## Acceptance criteria + +- Opening or navigating the pane picker makes no `list_panes` call. +- Pane choices come from a helper-owned, event-updated catalog. +- Model preparation produces no terminal side effect by itself. +- Every executable card is built locally from a validated payload plus a + host-owned GUID and execution mode. +- No content reaches a target before explicit user confirmation. +- Insert never executes; Run and delegate Send append exactly one Enter. +- `/delegate` creates and launches the destination independently of model + preparation. +- The model cannot select a pane, choose Tab/Panel, start an agent, or change + Insert/Run/Send semantics. +- Missing or stale targets fail closed without fallback. diff --git a/src/cascadia/TerminalApp/Pane.cpp b/src/cascadia/TerminalApp/Pane.cpp index 3b6c09f9db..7344b12569 100644 --- a/src/cascadia/TerminalApp/Pane.cpp +++ b/src/cascadia/TerminalApp/Pane.cpp @@ -3426,22 +3426,15 @@ void Pane::SetAgentChipVisible(bool value) } // The connection's session GUID for terminal panes. Returns the empty -// guid for non-terminal panes (e.g. branch nodes, agent panes, snippets). +// guid for non-terminal panes (e.g. branch nodes and snippets). // Used by Tab to match a protocol-supplied pane id to a Pane. winrt::guid Pane::GetSessionId() const { - // Mirror `_getSessionIdFromPane` in TerminalPage.Protocol.cpp: - // walk content → control → connection and read the SessionId. Using - // GetContent() (instead of `_content` directly) keeps the non-leaf - // case to a clean nullptr without needing an explicit leaf check. - if (const auto termContent = GetContent().try_as()) + if (const auto control = GetTerminalControl()) { - if (const auto control = termContent.GetTermControl()) + if (const auto conn = control.Connection()) { - if (const auto conn = control.Connection()) - { - return conn.SessionId(); - } + return conn.SessionId(); } } return {}; diff --git a/src/cascadia/TerminalApp/Tab.cpp b/src/cascadia/TerminalApp/Tab.cpp index 77ec1a9f67..2f8ebe5a98 100644 --- a/src/cascadia/TerminalApp/Tab.cpp +++ b/src/cascadia/TerminalApp/Tab.cpp @@ -761,6 +761,7 @@ namespace winrt::TerminalApp::implementation // possible that the focus events won't propagate immediately. Updating // the focus here will give the same effect though. _UpdateActivePane(newPane); + _RaisePaneCatalogChanged(); return { original, newPane }; } @@ -835,6 +836,7 @@ namespace winrt::TerminalApp::implementation // After split, Close Pane Menu Item should be visible _closePaneMenuItem.Visibility(WUX::Visibility::Visible); + _RaisePaneCatalogChanged(); return { originalTree, pane }; } @@ -862,6 +864,7 @@ namespace winrt::TerminalApp::implementation { // Just make sure that the remaining pane is marked active _UpdateActivePane(_rootPane->GetActivePane()); + _RaisePaneCatalogChanged(); return pane; } @@ -945,6 +948,7 @@ namespace winrt::TerminalApp::implementation { _UpdateActivePane(focus); } + _RaisePaneCatalogChanged(); } // Method Description: @@ -1085,6 +1089,10 @@ namespace winrt::TerminalApp::implementation _changingActivePane = true; const auto res = _rootPane->SwapPanes(_activePane, neighbor); _changingActivePane = false; + if (res) + { + _RaisePaneCatalogChanged(); + } return res; } @@ -1227,6 +1235,7 @@ namespace winrt::TerminalApp::implementation if (const auto tab = weakThis.get()) { tab->UpdateTitle(); + tab->_RaisePaneCatalogChanged(); } }); @@ -1278,6 +1287,7 @@ namespace winrt::TerminalApp::implementation if (auto tab{ weakThisCopy.get() }) { tab->_UpdateConnectionClosedState(); + tab->_RaisePaneCatalogChanged(); } }); @@ -1289,6 +1299,7 @@ namespace winrt::TerminalApp::implementation if (auto tab{ weakThisCopy.get() }) { tab->_RecalculateAndApplyReadOnly(); + tab->_RaisePaneCatalogChanged(); } }); @@ -1534,6 +1545,7 @@ namespace winrt::TerminalApp::implementation // Raise our own ActivePaneChanged event. ActivePaneChanged.raise(*this, nullptr); + _RaisePaneCatalogChanged(); // If the new active pane is a terminal, tell other interested panes // what the new active pane is. @@ -1609,6 +1621,11 @@ namespace winrt::TerminalApp::implementation _UpdateAgentChipVisibility(); } + void Tab::_RaisePaneCatalogChanged() + { + PaneCatalogChanged.raise(*this, nullptr); + } + void Tab::_UpdateMenuItemStates() { // Terminal-specific menu items @@ -1712,6 +1729,7 @@ namespace winrt::TerminalApp::implementation } } } + tab->_RaisePaneCatalogChanged(); } }); @@ -1741,6 +1759,7 @@ namespace winrt::TerminalApp::implementation break; } } + tab->_RaisePaneCatalogChanged(); } } }); @@ -2346,6 +2365,7 @@ namespace winrt::TerminalApp::implementation _UpdateActivePane(focusTarget); focusTarget->SetActive(); } + _RaisePaneCatalogChanged(); } // Method Description: @@ -2371,6 +2391,7 @@ namespace winrt::TerminalApp::implementation // Restore the pane in the XAML tree. parent->RestorePane(_hiddenPane); _hiddenPane = nullptr; + _RaisePaneCatalogChanged(); } bool Tab::HasHiddenPane() @@ -2589,6 +2610,7 @@ namespace winrt::TerminalApp::implementation } } } + _RaisePaneCatalogChanged(); } // Re-attach a previously-stashed agent pane. `direction` is accepted @@ -2633,6 +2655,7 @@ namespace winrt::TerminalApp::implementation { _UpdateActivePane(agentPane); } + _RaisePaneCatalogChanged(); // CRITICAL: synchronous Focus(Programmatic) is unreliable on // freshly-re-parented or freshly-spawned TermControls. The element diff --git a/src/cascadia/TerminalApp/Tab.h b/src/cascadia/TerminalApp/Tab.h index 621e85ebbb..ad01073329 100644 --- a/src/cascadia/TerminalApp/Tab.h +++ b/src/cascadia/TerminalApp/Tab.h @@ -205,6 +205,7 @@ namespace winrt::TerminalApp::implementation til::typed_event RestartTerminalRequested; til::typed_event ActivePaneChanged; + til::typed_event PaneCatalogChanged; til::event> TabRaiseVisualBell; til::event> TabToastNotificationRequested; til::typed_event TaskbarProgressChanged; @@ -329,6 +330,7 @@ namespace winrt::TerminalApp::implementation void _AttachEventHandlersToPane(std::shared_ptr pane); void _UpdateActivePane(std::shared_ptr pane); + void _RaisePaneCatalogChanged(); void _UpdateMenuItemStates(); void _UpdateAgentChipVisibility(); diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 1ec70880ff..0f2fad083e 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -1777,6 +1777,76 @@ namespace winrt::TerminalApp::implementation winrt::to_hstring(Json::writeString(wb, evt))); } + void TerminalPage::_PublishPaneCatalog(const winrt::com_ptr& tab) + { + if (!tab) + { + return; + } + + if (!tab->FindAgentPane()) + { + return; + } + + const auto tabId = tab->StableId(); + Json::Value params{ Json::objectValue }; + params["window_id"] = std::to_string(_WindowProperties.WindowId()); + params["tab_id"] = winrt::to_string(tabId); + params["generation"] = Json::UInt64{ ++_paneCatalogGenerations[tabId] }; + + Json::Value panes{ Json::arrayValue }; + const auto root = tab->GetRootPane(); + const auto activePane = tab->GetActivePane(); + const bool activeIsAgent = activePane && activePane->IsAgentPane(); + uint32_t ordinal = 0; + if (root) + { + root->WalkTree([&](const std::shared_ptr& pane) { + if (!pane || !pane->GetContent()) + { + return; + } + const auto sessionId = pane->GetSessionId(); + if (sessionId == winrt::guid{}) + { + return; + } + + Json::Value descriptor{ Json::objectValue }; + descriptor["session_id"] = winrt::to_string(::Microsoft::Console::Utils::GuidToString(sessionId)); + descriptor["ordinal"] = ++ordinal; + descriptor["title"] = winrt::to_string(pane->GetContent().Title()); + descriptor["is_active"] = activeIsAgent ? pane->IsSourceOfAgentPane() : pane == activePane; + descriptor["is_agent_pane"] = pane->IsAgentPane(); + descriptor["visible"] = !pane->IsHidden(); + descriptor["read_only"] = pane->GetContent().ReadOnly(); + + if (const auto profile = pane->GetProfile()) + { + descriptor["profile"] = winrt::to_string(profile.Name()); + } + else + { + descriptor["profile"] = ""; + } + if (const auto control = pane->GetTerminalControl()) + { + descriptor["cwd"] = winrt::to_string(control.WorkingDirectory()); + descriptor["shell"] = winrt::to_string(control.ShellName()); + } + else + { + descriptor["cwd"] = ""; + descriptor["shell"] = ""; + } + panes.append(std::move(descriptor)); + }); + } + params["panes"] = std::move(panes); + _RaiseProtocolEvent("pane_catalog_changed", params); + } + // Close the agent pane in a specific tab, if it has one. // // Under the helper+master architecture, wta-helper processes are @@ -1917,6 +1987,7 @@ namespace winrt::TerminalApp::implementation tabParams["tab_id"] = winrt::to_string(tabId); tabParams["window_id"] = std::to_string(_WindowProperties.WindowId()); _RaiseProtocolEvent("tab_closed", tabParams); + _paneCatalogGenerations.erase(tabId); } // Explicitly emit `connection_state:closed` for every terminal leaf @@ -5495,6 +5566,7 @@ namespace winrt::TerminalApp::implementation _UpdateBottomBarState(); } } + _PublishPaneCatalog(targetTab); } // Inbound event from WTA: {method:"close_agent_pane", params:{tab_id}}. @@ -6728,6 +6800,16 @@ namespace winrt::TerminalApp::implementation hostingTab.TaskbarProgressChanged({ get_weak(), &TerminalPage::_SetTaskbarProgressHandler }); hostingTab.RestartTerminalRequested({ get_weak(), &TerminalPage::_restartPaneConnection }); + + hostingTab.PaneCatalogChanged([weakTab, weakThis](auto&&, auto&&) { + if (const auto page = weakThis.get()) + { + if (const auto tab = weakTab.get()) + { + page->_PublishPaneCatalog(tab); + } + } + }); } // Method Description: diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index 0bd7796551..7f127eb07c 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -518,6 +518,7 @@ namespace winrt::TerminalApp::implementation // distinguishes them. Entries are consumed on read and otherwise // expire after a few seconds. std::unordered_map _agentPaneRestartSuppression; + std::unordered_map _paneCatalogGenerations; AgentSettingsSnapshot _CaptureAgentSettingsSnapshot() const; // Compares only agent-CLI *identity* fields — the change that forces // a master respawn. Model/delegate changes are handled by @@ -532,6 +533,7 @@ namespace winrt::TerminalApp::implementation // ProtocolVtSequenceReceived. Single source of the wta protocol-event // wire shape — callers just supply the method name and a params object. void _RaiseProtocolEvent(std::string_view method, const Json::Value& params); + void _PublishPaneCatalog(const winrt::com_ptr& tab); void _TeardownAgentPane(const winrt::com_ptr& tab, bool suppressMasterRestart = true); void _RebuildAgentStack(); // Scoped per-tab rebuild after a tab's agent override changes diff --git a/tools/wta/locales/af-ZA.yml b/tools/wta/locales/af-ZA.yml index 6c8537ee65..11f8cf4b22 100644 --- a/tools/wta/locales/af-ZA.yml +++ b/tools/wta/locales/af-ZA.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Beelde: %{items}" # {Locked="📎","%{items}"} # ── Opdrag-opspring (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - skuinsstreep-opdrag voorvoegsel, moet ASCII bly commands.popup_title: " / opdragte " +delegate_picker.title: " Delegeer bestemming " +delegate_picker.tab: "Nuwe oortjie" +delegate_picker.panel: "Nuwe paneel" +delegate_picker.intent_required: "Beskryf die werk om te delegeer." +delegate_picker.pane_not_allowed: "/delegate skep altyd 'n nuwe bestemming en aanvaar nie @pane nie." +delegate_picker.not_configured: "Geen afgevaardigde agent is opgestel nie." +delegate_picker.no_parent_pane: "Geen werkvenster is beskikbaar om te verdeel nie." +delegate_picker.launch_failed: "Kon nie die afgevaardigde begin nie: %{error}" commands.help_title: " Hulp " commands.help_header: "Skuinsstreep-opdragte — tik / in die invoerveld." commands.help_escape_hint: " //text Stuur 'n letterlike '/' (ontsnap die opdragontleder)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Maak hierdie hulp toe" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - sleutelname en Enter-sleutel-glief, moenie vertaal nie recommendations.nav_hint: "(↑ ↓ om te navigeer • ← → om knoppies te wissel • Enter om te kies • Esc om te kanselleer)" recommendations.button_run_command: "[ Voer opdrag uit ]" +recommendations.button_send_to_delegate: "[ Stuur na afgevaardigde ]" recommendations.button_insert_in_terminal: "Voeg in Terminaal in" recommendations.button_open_in_new_tab: "Maak oop in Nuwe Oortjie ↵" recommendations.button_open_in_new_panel: "Maak oop in Nuwe Paneel ↵" @@ -200,12 +209,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Kies die agent vir hierdie oortjie (/agent om direk oor te skakel)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Berei 'n taak voor en maak 'n afgevaardigde agent oop (/delegate )" # ── Aanbevelingsuitvoering (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Keuse %{choice} het misluk: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Kies terminaalpaneel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Geen skryfbare terminaalvensters is beskikbaar nie." +pane_picker.target_unavailable: "Die geselekteerde paneel is nie meer beskikbaar nie." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Kies agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Geen beskikbare agent-CLI is op hierdie masjien gevind nie." # {Locked="CLI"} diff --git a/tools/wta/locales/am-ET.yml b/tools/wta/locales/am-ET.yml index b9d0227914..b6d630a099 100644 --- a/tools/wta/locales/am-ET.yml +++ b/tools/wta/locales/am-ET.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 ምስሎች: %{items}" # {Locked="📎","%{item # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / commands " +delegate_picker.title: " መድረሻን ውክልና። " +delegate_picker.tab: " አዲስ ትር" +delegate_picker.panel: " አዲስ ፓነል" +delegate_picker.intent_required: " የውክልና ሥራውን ይግለጹ።" +delegate_picker.pane_not_allowed: "/delegate ሁልጊዜ አዲስ መድረሻ ይፈጥራል እና @pane አይቀበልም።" +delegate_picker.not_configured: " ምንም የውክልና ወኪል አልተዋቀረም።" +delegate_picker.no_parent_pane: " ለመከፋፈል ምንም የሚሰራ መስኮት የለም።" +delegate_picker.launch_failed: " ልዑካንን ማስጀመር አልተቻለም፦ %{error}" commands.help_title: " Help " commands.help_header: "Slash commands — type / in the input box." commands.help_escape_hint: " //text Send a literal '/' (escapes the command parser)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Close this help" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ ለማሰስ • ← → አዝራሮችን ለመቀየር • Enter ለመምረጥ • Esc ለመሰረዝ)" recommendations.button_run_command: "[ Run command ]" +recommendations.button_send_to_delegate: "[ ወደ ልዑካን ላክ]" recommendations.button_insert_in_terminal: "Insert in Terminal" recommendations.button_open_in_new_tab: "Open in New Tab ↵" recommendations.button_open_in_new_panel: "Open in New Panel ↵" @@ -200,12 +209,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ለዚህ ትር ሞዴሉን ይምረጡ (በቀጥታ ለመቀየር /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "አንድ ተግባር አዘጋጁ እና የውክልና ወኪል ይክፈቱ (/delegate )" # ── የምክር አፈጻጸም (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "ምርጫ %{choice} አልተሳካም፦ %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "የተርሚናል መቃን ምረጥ (↑ ↓ • Enter • Esc)" +pane_picker.empty: " ምንም ሊጻፍ የሚችል ተርሚናል ፓነሎች አይገኙም።" +pane_picker.target_unavailable: "የተመረጠው ፓነል ከአሁን በኋላ አይገኝም።" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ኤጅንት ይምረጡ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ምንም የሚገኝ የኤጅንት CLI በዚህ ማሽን ላይ አልተገኘም።" # {Locked="CLI"} diff --git a/tools/wta/locales/ar-SA.yml b/tools/wta/locales/ar-SA.yml index 1b4a36136d..c1281b33fa 100644 --- a/tools/wta/locales/ar-SA.yml +++ b/tools/wta/locales/ar-SA.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 الصور: %{items}" # {Locked="📎","%{items} # ── نافذة الأوامر المنبثقة (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - بادئة أمر الشرطة المائلة، يجب أن تبقى ASCII commands.popup_title: " / الأوامر " +delegate_picker.title: " وجهة التفويض " +delegate_picker.tab: "علامة تبويب جديدة" +delegate_picker.panel: "لوحة جديدة" +delegate_picker.intent_required: "وصف العمل المراد تفويضه." +delegate_picker.pane_not_allowed: "/delegate يقوم دائمًا بإنشاء وجهة جديدة ولا يقبل @pane." +delegate_picker.not_configured: "لم يتم تكوين أي وكيل مفوض." +delegate_picker.no_parent_pane: "لا يوجد جزء عمل متاح للتقسيم." +delegate_picker.launch_failed: "تعذر تشغيل المفوض: %{error}" commands.help_title: " المساعدة " commands.help_header: "أوامر الشرطة المائلة — اكتب / في مربع الإدخال." commands.help_escape_hint: " //text إرسال '/' حرفيًا (يتجاوز محلل الأوامر)" # {Locked="//text","/"} @@ -77,11 +85,15 @@ commands.restart.summary: "إعادة تشغيل عامل الذكاء الاص commands.stop.summary: "إلغاء الأمر قيد التنفيذ" commands.sessions.summary: "فتح منتقي الجلسات التاريخية (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "اختر عامل لعلامة التبويب هذه (/agent للتبديل مباشرةً)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "قم بإعداد مهمة وفتح وكيل مفوض (/delegate )" # ── لوحة التوصيات (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - أسماء المفاتيح ورمز مفتاح الإدخال، لا تترجمها recommendations.nav_hint: "(↑ ↓ للتنقل • ← → للتبديل بين الأزرار • Enter للتحديد • Esc للإلغاء)" recommendations.button_run_command: "[ تشغيل الأمر ]" +recommendations.button_send_to_delegate: "[إرسال إلى المفوض]" recommendations.button_insert_in_terminal: "إدراج في الطرفية" recommendations.button_open_in_new_tab: "فتح في علامة تبويب جديدة ↵" recommendations.button_open_in_new_panel: "فتح في لوحة جديدة ↵" @@ -207,6 +219,11 @@ system.choice_execution_failed: "فشل الاختيار %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: " حدد الجزء الطرفي (↑ ↓ • Enter • Esc)" +pane_picker.empty: "لا تتوفر أي أجزاء طرفية قابلة للكتابة." +pane_picker.target_unavailable: "الجزء المحدد لم يعد متاحًا." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "اختر عامل الذكاء الاصطناعي (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "لم يتم العثور على واجهة سطر أوامر (CLI) لعامل ذكاء اصطناعي متاحة على هذا الجهاز." # {Locked="CLI"} diff --git a/tools/wta/locales/as-IN.yml b/tools/wta/locales/as-IN.yml index 477733cbb0..204fdbdd58 100644 --- a/tools/wta/locales/as-IN.yml +++ b/tools/wta/locales/as-IN.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 ছবিসমূহ: %{items}" # {Locked="📎 # ── কমাণ্ড পপআপ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - শ্লেশ-কমাণ্ড উপসৰ্গ, ASCII হ'ব লাগিব commands.popup_title: " / কমাণ্ড " +delegate_picker.title: " প্ৰতিনিধি গন্তব্যস্থান " +delegate_picker.tab: "নতুন টেব" +delegate_picker.panel: "নতুন পেনেল" +delegate_picker.intent_required: "প্ৰতিনিধিত্ব কৰিবলগীয়া কামৰ বৰ্ণনা কৰা।" +delegate_picker.pane_not_allowed: "/delegate এ সদায় এটা নতুন গন্তব্যস্থান সৃষ্টি কৰে আৰু @pane গ্ৰহণ নকৰে।" +delegate_picker.not_configured: "কোনো প্ৰতিনিধি এজেন্ট বিন্যাস কৰা হোৱা নাই।" +delegate_picker.no_parent_pane: "বিভাজিত কৰিবলে কোনো কাম কৰা পেন উপলব্ধ নহয়।" +delegate_picker.launch_failed: "প্ৰতিনিধি আৰম্ভ কৰিব পৰা নগ'ল: %{error}" commands.help_title: " সহায় " commands.help_header: "শ্লেশ কমাণ্ড — ইনপুট বাকচত / টাইপ কৰক।" commands.help_escape_hint: " //text আক্ষৰিক '/' পঠিয়াওক (কমাণ্ড পাৰ্ছাৰ এস্কেপ কৰে)" # {Locked="//text","/"} @@ -77,11 +85,15 @@ commands.restart.summary: "এজেণ্ট পুনৰাৰম্ভ কৰ commands.stop.summary: "চলি থকা প্ৰম্প্ট বাতিল কৰক" commands.sessions.summary: "ঐতিহাসিক ছেশ্যন পিকাৰ খোলক (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "এই পেনৰ বাবে এজেণ্ট বাছনি কৰক (পোনপটীয়াকৈ সলাবলৈ /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "এটা কাম প্ৰস্তুত কৰক আৰু এটা প্ৰতিনিধি এজেন্ট খোলক (/delegate )" # ── পৰামৰ্শ পেনেল (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - কী নাম আৰু Return-কী গ্লিফ, অনুবাদ নকৰিব recommendations.nav_hint: "(↑ ↓ নেভিগেট কৰিবলৈ • ← → বুটাম সলাবলৈ • Enter বাছনি কৰিবলৈ • Esc বাতিল কৰিবলৈ)" recommendations.button_run_command: "[ কমাণ্ড চলাওক ]" +recommendations.button_send_to_delegate: "[ প্ৰতিনিধিলৈ পঠাওক ]" recommendations.button_insert_in_terminal: "টাৰ্মিনেলত সন্নিবেশ কৰক" recommendations.button_open_in_new_tab: "নতুন টেবত খোলক ↵" recommendations.button_open_in_new_panel: "নতুন পেনেলত খোলক ↵" @@ -208,6 +220,11 @@ system.choice_execution_failed: "পছন্দ %{choice} ব্যৰ্থ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "টাৰ্মিনেল পেন নিৰ্ব্বাচন কৰক (↑ ↓ • Enter • Esc)" +pane_picker.empty: "কোনো লিখিব পৰা টাৰ্মিনেল পেন উপলব্ধ নহয়।" +pane_picker.target_unavailable: "নিৰ্বাচিত পেন আৰু উপলব্ধ নহয়।" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "এজেণ্ট বাছনি কৰক (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "এই মেচিনত কোনো উপলব্ধ এজেণ্ট CLI পোৱা নগ’ল।" # {Locked="CLI"} diff --git a/tools/wta/locales/az-Latn-AZ.yml b/tools/wta/locales/az-Latn-AZ.yml index 906890a515..ac8d50726a 100644 --- a/tools/wta/locales/az-Latn-AZ.yml +++ b/tools/wta/locales/az-Latn-AZ.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Şəkillər: %{items}" # {Locked="📎","%{items # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / əmrlər " +delegate_picker.title: " Təyinat yeri " +delegate_picker.tab: "Yeni tab" +delegate_picker.panel: "Yeni panel" +delegate_picker.intent_required: "Təqdim ediləcək işi təsvir edin." +delegate_picker.pane_not_allowed: "/delegate həmişə yeni təyinat yaradır və @pane qəbul etmir." +delegate_picker.not_configured: "Heç bir nümayəndə agenti konfiqurasiya edilməyib." +delegate_picker.no_parent_pane: "Bölmək üçün heç bir işləyən panel yoxdur." +delegate_picker.launch_failed: "Nümayəndələri işə salmaq mümkün olmadı: %{error}" commands.help_title: " Kömək " commands.help_header: "Slash əmrlər — giriş qutusuna / yazın." commands.help_escape_hint: " //text Hərfi '/' göndər (əmr analizatorunu keç)" # {Locked="//text","/"} @@ -77,11 +85,15 @@ commands.restart.summary: "Agenti yenidən başlat" commands.stop.summary: "İcra olunan sorğunu ləğv et" commands.sessions.summary: "Tarixi sessiyalar seçicisini aç (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Bu panel üçün agenti seçin (birbaşa keçmək üçün /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Tapşırıq hazırlayın və nümayəndə agenti açın (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ naviqasiya üçün • ← → düymələr arasında keçid üçün • Enter seçmək üçün • Esc ləğv etmək üçün)" recommendations.button_run_command: "[ Əmri icra et ]" +recommendations.button_send_to_delegate: "[ Nümayəndəyə göndər ]" recommendations.button_insert_in_terminal: "Terminal-a daxil et" recommendations.button_open_in_new_tab: "Yeni Sekmədə Aç ↵" recommendations.button_open_in_new_panel: "Yeni Paneldə Aç ↵" @@ -207,6 +219,11 @@ system.choice_execution_failed: "Seçim %{choice} uğursuz oldu: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminal panelini seçin (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Yazıla bilən terminal panelləri mövcud deyil." +pane_picker.target_unavailable: "Seçilmiş panel artıq əlçatan deyil." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agent seçin (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Bu maşında heç bir mövcud agent CLI tapılmadı." # {Locked="CLI"} diff --git a/tools/wta/locales/bg-BG.yml b/tools/wta/locales/bg-BG.yml index 83059298a4..d7f1f2b9a2 100644 --- a/tools/wta/locales/bg-BG.yml +++ b/tools/wta/locales/bg-BG.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Изображения: %{items}" # {Locked=" # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / команди " +delegate_picker.title: " Дестинация за делегиране " +delegate_picker.tab: "Нов раздел" +delegate_picker.panel: "Нов панел" +delegate_picker.intent_required: "Опишете работата за делегиране." +delegate_picker.pane_not_allowed: "/delegate винаги създава нова дестинация и не приема @pane." +delegate_picker.not_configured: "Не е конфигуриран делегиран агент." +delegate_picker.no_parent_pane: "Няма достъпен работен панел за разделяне." +delegate_picker.launch_failed: "Неуспешно стартиране на делегата: %{error}" commands.help_title: " Помощ " commands.help_header: "Наклонена черта команди — въведете / в полето за въвеждане." commands.help_escape_hint: " //text Изпращане на буквално '/' (заобикаля анализатора на команди)" # {Locked="//text","/"} @@ -74,10 +82,14 @@ commands.restart.summary: "Рестартирай агента" commands.stop.summary: "Отмяна на текущата подкана" commands.sessions.summary: "Отваряне на избора на предишни сесии (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Изберете агента за този раздел (/agent за директно превключване)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Подгответе задача и отворете делегиран агент (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ за навигация • ← → за превключване на бутони • Enter за избор • Esc за отказ)" recommendations.button_run_command: "[ Изпълни команда ]" +recommendations.button_send_to_delegate: "[Изпращане до делегат]" recommendations.button_insert_in_terminal: "Вмъкване в Terminal" recommendations.button_open_in_new_tab: "Отваряне в нов раздел ↵" recommendations.button_open_in_new_panel: "Отваряне в нов панел ↵" @@ -207,6 +219,11 @@ system.choice_execution_failed: "Избор %{choice} е неуспешен: %{e # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Избор на терминален панел (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Няма налични терминални панели за запис." +pane_picker.target_unavailable: "Избраният панел вече не е наличен." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Изберете агент (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "На тази машина не е открит наличен CLI за агент." # {Locked="CLI"} diff --git a/tools/wta/locales/bn-IN.yml b/tools/wta/locales/bn-IN.yml index c8d765c79b..7a7e18b670 100644 --- a/tools/wta/locales/bn-IN.yml +++ b/tools/wta/locales/bn-IN.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 ছবিগুলি: %{items}" # {Locked="📎 # ── কমান্ড পপআপ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - স্ল্যাশ-কমান্ড উপসর্গ, ASCII থাকতে হবে commands.popup_title: " / কমান্ড " +delegate_picker.title: " ডেলিগেট গন্তব্য " +delegate_picker.tab: "নতুন ট্যাব৷" +delegate_picker.panel: "নতুন প্যানেল৷" +delegate_picker.intent_required: "অর্পণ করার জন্য কাজের বর্ণনা করুন৷" +delegate_picker.pane_not_allowed: "/delegate সর্বদা একটি নতুন গন্তব্য তৈরি করে এবং @pane গ্রহণ করে না।" +delegate_picker.not_configured: "কোন প্রতিনিধি এজেন্ট কনফিগার করা নেই৷" +delegate_picker.no_parent_pane: "বিভক্ত করার জন্য কোনো কার্যকারী ফলক উপলব্ধ নেই৷" +delegate_picker.launch_failed: "প্রতিনিধি লঞ্চ করা যায়নি: %{error}" commands.help_title: " সাহায্য " commands.help_header: "স্ল্যাশ কমান্ড — ইনপুট বক্সে / টাইপ করুন।" commands.help_escape_hint: " //text আক্ষরিক '/' পাঠান (কমান্ড পার্সার এড়ায়)" # {Locked="//text","/"} @@ -77,11 +85,15 @@ commands.restart.summary: "এজেন্ট পুনরায় চালু commands.stop.summary: "চলমান প্রম্পট বাতিল করুন" commands.sessions.summary: "ঐতিহাসিক সেশন পিকার খুলুন (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "এই ট্যাবের জন্য এজেন্ট নির্বাচন করুন (সরাসরি পরিবর্তন করতে /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "একটি কাজ প্রস্তুত করুন এবং একটি প্রতিনিধি এজেন্ট খুলুন (/delegate )" # ── সুপারিশ প্যানেল (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - কী নাম ও Return-কী গ্লিফ, অনুবাদ করবেন না recommendations.nav_hint: "(↑ ↓ নেভিগেট করুন • ← → বোতাম পরিবর্তন করুন • Enter নির্বাচন করুন • Esc বাতিল করুন)" recommendations.button_run_command: "[ কমান্ড চালান ]" +recommendations.button_send_to_delegate: "[ প্রতিনিধিকে পাঠান ]" recommendations.button_insert_in_terminal: "টার্মিনালে সন্নিবেশ করুন" recommendations.button_open_in_new_tab: "নতুন ট্যাবে খুলুন ↵" recommendations.button_open_in_new_panel: "নতুন প্যানেলে খুলুন ↵" @@ -208,6 +220,11 @@ system.choice_execution_failed: "পছন্দ %{choice} ব্যর্থ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "টার্মিনাল ফলক নির্বাচন করুন (↑ ↓ • Enter • Esc)" +pane_picker.empty: "কোন লিখনযোগ্য টার্মিনাল প্যান উপলব্ধ নেই৷" +pane_picker.target_unavailable: "নির্বাচিত ফলকটি আর উপলব্ধ নেই৷" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "এজেন্ট নির্বাচন করুন (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "এই মেশিনে কোনো উপলব্ধ এজেন্ট CLI পাওয়া যায়নি।" # {Locked="CLI"} diff --git a/tools/wta/locales/bs-Latn-BA.yml b/tools/wta/locales/bs-Latn-BA.yml index 59c1eb4ab5..dff024d26a 100644 --- a/tools/wta/locales/bs-Latn-BA.yml +++ b/tools/wta/locales/bs-Latn-BA.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Slike: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / naredbe " +delegate_picker.title: "Delegirano odredište" +delegate_picker.tab: "Nova kartica" +delegate_picker.panel: "Novi panel" +delegate_picker.intent_required: "Opišite posao za delegiranje." +delegate_picker.pane_not_allowed: "/delegate uvijek kreira novo odredište i ne prihvata @pane." +delegate_picker.not_configured: "Nijedan delegatski agent nije konfiguriran." +delegate_picker.no_parent_pane: "Nijedan radni panel nije dostupan za podjelu." +delegate_picker.launch_failed: "Nije moguće pokrenuti delegata: %{error}" commands.help_title: " Pomoć " commands.help_header: "Naredbe s kosom crtom — otkucajte / u polju za unos." commands.help_escape_hint: " //text Pošalji doslovno '/' (zaobilazi parser naredbi)" # {Locked="//text","/"} @@ -74,10 +82,14 @@ commands.restart.summary: "Ponovo pokreni agenta" commands.stop.summary: "Otkaži upit u toku" commands.sessions.summary: "Otvori birač prethodnih sesija (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Izaberite agent za ovu karticu (/agent za direktnu promjenu)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pripremite zadatak i otvorite delegiranog agenta (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ za navigaciju • ← → za prebacivanje dugmadi • Enter za izbor • Esc za otkazivanje)" recommendations.button_run_command: "[ Pokreni naredbu ]" +recommendations.button_send_to_delegate: "[ Pošalji delegatu ]" recommendations.button_insert_in_terminal: "Ubaci u Terminal" recommendations.button_open_in_new_tab: "Otvori u novoj kartici ↵" recommendations.button_open_in_new_panel: "Otvori u novom panelu ↵" @@ -207,6 +219,11 @@ system.choice_execution_failed: "Izbor %{choice} nije uspio: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Odaberite terminal panel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nema dostupnih terminalskih okna za pisanje." +pane_picker.target_unavailable: "Izabrano okno više nije dostupno." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Izaberite agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Na ovoj mašini nije pronađen nijedan dostupan CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/ca-ES.yml b/tools/wta/locales/ca-ES.yml index aa14570207..8907e496f7 100644 --- a/tools/wta/locales/ca-ES.yml +++ b/tools/wta/locales/ca-ES.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Imatges: %{items}" # {Locked="📎","%{items}"} # ── Finestra emergent d'ordres (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefix d'ordre de barra, ha de romandre ASCII commands.popup_title: " / ordres " +delegate_picker.title: " Delegació de destinació " +delegate_picker.tab: "Pestanya nova" +delegate_picker.panel: "Tauler nou" +delegate_picker.intent_required: "Descriu el treball a delegar." +delegate_picker.pane_not_allowed: "/delegate sempre crea una destinació nova i no accepta @pane." +delegate_picker.not_configured: "No hi ha cap agent delegat configurat." +delegate_picker.no_parent_pane: "No hi ha cap panell de treball disponible per dividir-lo." +delegate_picker.launch_failed: "No s'ha pogut llançar el delegat: %{error}" commands.help_title: " Ajuda " commands.help_header: "Ordres de barra — escriviu / al quadre d'entrada." commands.help_escape_hint: " //text Envia un '/' literal (escapa l'analitzador d'ordres)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Tanca aquesta ajuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - noms de tecles i glif de tecla Retorn, no traduïu recommendations.nav_hint: "(↑ ↓ per navegar • ← → per canviar accions • Enter per seleccionar • Esc per cancel·lar)" recommendations.button_run_command: "[ Executa l'ordre ]" +recommendations.button_send_to_delegate: "[ Envia al delegat ]" recommendations.button_insert_in_terminal: "Insereix al Terminal" recommendations.button_open_in_new_tab: "Obre en una pestanya nova ↵" recommendations.button_open_in_new_panel: "Obre en un tauler nou ↵" @@ -201,12 +210,20 @@ commands.restart.summary: "Reinicia l'agent" commands.stop.summary: "Cancel·la la sol·licitud en curs" commands.sessions.summary: "Obre el selector de sessions històriques (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Trieu l'agent per a aquest tauler (/agent per canviar directament)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepara una tasca i obre un agent delegat (/delegate )" # ── Execució de recomanacions (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "L’opció %{choice} ha fallat: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Selecciona el panell del terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "No hi ha cap panell de terminal que es pugui escriure." +pane_picker.target_unavailable: "El panell seleccionat ja no està disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleccioneu l'agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "No s'ha trobat cap CLI d'agent disponible en aquesta màquina." # {Locked="CLI"} diff --git a/tools/wta/locales/ca-Es-VALENCIA.yml b/tools/wta/locales/ca-Es-VALENCIA.yml index 210d93c53f..a170a82fed 100644 --- a/tools/wta/locales/ca-Es-VALENCIA.yml +++ b/tools/wta/locales/ca-Es-VALENCIA.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Imatges: %{items}" # {Locked="📎","%{items}"} # ── Finestra emergent d'ordes (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefix d'orde de barra, ha de romandre ASCII commands.popup_title: " / ordes " +delegate_picker.title: " Delegació de destinació " +delegate_picker.tab: "Pestanya nova" +delegate_picker.panel: "Tauler nou" +delegate_picker.intent_required: "Descriu el treball a delegar." +delegate_picker.pane_not_allowed: "/delegate sempre crea una destinació nova i no accepta @pane." +delegate_picker.not_configured: "No hi ha cap agent delegat configurat." +delegate_picker.no_parent_pane: "No hi ha cap panell de treball disponible per dividir-lo." +delegate_picker.launch_failed: "No s'ha pogut llançar el delegat: %{error}" commands.help_title: " Ajuda " commands.help_header: "Ordes de barra — escriviu / en el quadre d'entrada." commands.help_escape_hint: " //text Envia un '/' literal (escapa l'analitzador d'ordes)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Tanca esta ajuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - noms de tecles i glif de tecla Retorn, no traduïu recommendations.nav_hint: "(↑ ↓ per a navegar • ← → per a canviar accions • Enter per a seleccionar • Esc per a cancel·lar)" recommendations.button_run_command: "[ Executa l'orde ]" +recommendations.button_send_to_delegate: "[ Envia al delegat ]" recommendations.button_insert_in_terminal: "Inserix al Terminal" recommendations.button_open_in_new_tab: "Obri en una pestanya nova ↵" recommendations.button_open_in_new_panel: "Obri en un panell nou ↵" @@ -201,12 +210,20 @@ commands.restart.summary: "Reinicia l'agent" commands.stop.summary: "Cancel·la la sol·licitud en curs" commands.sessions.summary: "Obre el selector de sessions històriques (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Trieu l'agent per a esta pestanya (/agent per a canviar directament)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepara una tasca i obre un agent delegat (/delegate )" # ── Execució de recomanacions (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "L’opció %{choice} ha fallat: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Selecciona el panell del terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "No hi ha cap panell de terminal que es pugui escriure." +pane_picker.target_unavailable: "El panell seleccionat ja no està disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleccioneu l'agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "No s'ha trobat cap CLI d'agent disponible en esta màquina." # {Locked="CLI"} diff --git a/tools/wta/locales/cs-CZ.yml b/tools/wta/locales/cs-CZ.yml index 0fce68c01e..1a8b8c7d32 100644 --- a/tools/wta/locales/cs-CZ.yml +++ b/tools/wta/locales/cs-CZ.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Obrázky: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / příkazy " +delegate_picker.title: " Cíl delegáta " +delegate_picker.tab: "Nová karta" +delegate_picker.panel: "Nový panel" +delegate_picker.intent_required: "Popište práci, kterou chcete delegovat." +delegate_picker.pane_not_allowed: "/delegate vždy vytváří nový cíl a nepřijímá @pane." +delegate_picker.not_configured: "Není nakonfigurován žádný agent delegáta." +delegate_picker.no_parent_pane: "Žádný pracovní panel není k dispozici k rozdělení." +delegate_picker.launch_failed: "Nepodařilo se spustit delegáta: %{error}" commands.help_title: " Nápověda " commands.help_header: "Příkazy lomítka — zadejte / do vstupního pole." commands.help_escape_hint: " //text Odešle doslovné '/' (obejde analyzátor příkazů)" # {Locked="//text","/"} @@ -74,10 +82,14 @@ commands.restart.summary: "Restartovat agenta" commands.stop.summary: "Zrušit probíhající výzvu" commands.sessions.summary: "Otevřít výběr historických relací (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Vyberte agent pro tuto kartu (/agent pro přímé přepnutí)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Připravte úkol a otevřete zástupce delegáta (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ pro navigaci • ← → pro přepínání tlačítek • Enter pro výběr • Esc pro zrušení)" recommendations.button_run_command: "[ Spustit příkaz ]" +recommendations.button_send_to_delegate: "[ Odeslat delegátovi ]" recommendations.button_insert_in_terminal: "Vložit do terminálu" recommendations.button_open_in_new_tab: "Otevřít v nové kartě ↵" recommendations.button_open_in_new_panel: "Otevřít v novém panelu ↵" @@ -207,6 +219,11 @@ system.choice_execution_failed: "Volba %{choice} selhala: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Vyberte panel terminálu (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nejsou k dispozici žádné zapisovatelné terminálové panely." +pane_picker.target_unavailable: "Vybraný panel již není dostupný." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Vyberte agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Na tomto počítači nebyl nalezen žádný dostupný CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/cy-GB.yml b/tools/wta/locales/cy-GB.yml index 3f7680066c..7960d02a2b 100644 --- a/tools/wta/locales/cy-GB.yml +++ b/tools/wta/locales/cy-GB.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Delweddau: %{items}" # {Locked="📎","%{items}" # ── Naidlen gorchmynion (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - rhagddodiad gorchymyn slaes, rhaid iddo aros yn ASCII commands.popup_title: " / gorchmynion " +delegate_picker.title: " Cyrchfan y cynadleddwyr " +delegate_picker.tab: "Tab newydd" +delegate_picker.panel: "Panel newydd" +delegate_picker.intent_required: "Disgrifiwch y gwaith i'w ddirprwyo." +delegate_picker.pane_not_allowed: " Mae /delegate bob amser yn creu cyrchfan newydd ac nid yw'n derbyn @pane." +delegate_picker.not_configured: "Nid oes unrhyw asiant dirprwyo wedi'i ffurfweddu." +delegate_picker.no_parent_pane: "Nid oes cwarel gweithio ar gael i'w hollti." +delegate_picker.launch_failed: "Methu lansio'r cynrychiolydd: %{error}" commands.help_title: " Cymorth " commands.help_header: "Gorchmynion slaes — teipiwch / yn y blwch mewnbwn." commands.help_escape_hint: " //text Anfon '/' llythrennol (dianc y parsiwr gorchmynion)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Cau'r cymorth hwn" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - enwau bysellau a glyff bysell Dychwelyd, peidiwch â chyfieithu recommendations.nav_hint: "(↑ ↓ i lywio • ← → i newid botymau • Enter i ddewis • Esc i ganslo)" recommendations.button_run_command: "[ Rhedeg gorchymyn ]" +recommendations.button_send_to_delegate: "[Anfon at ddirprwy ]" recommendations.button_insert_in_terminal: "Mewnosod yn y Terfynell" recommendations.button_open_in_new_tab: "Agor mewn Tab Newydd ↵" recommendations.button_open_in_new_panel: "Agor mewn Panel Newydd ↵" @@ -200,12 +209,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Dewiswch y asiant ar gyfer y paen hwn (/agent i newid yn uniongyrchol)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Paratoi tasg ac agor asiant dirprwyol (/delegate )" # ── Gweithredu argymhelliad (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Methodd dewis %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Dewis cwarel terfynell (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nid oes unrhyw baneli terfynell ysgrifenadwy ar gael." +pane_picker.target_unavailable: "Nid yw'r cwarel a ddewiswyd ar gael bellach." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Dewiswch asiant (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ni chafwyd hyd i unrhyw CLI asiant ar gael ar y peiriant hwn." # {Locked="CLI"} diff --git a/tools/wta/locales/da-DK.yml b/tools/wta/locales/da-DK.yml index 4203fe1dbf..307d8a95eb 100644 --- a/tools/wta/locales/da-DK.yml +++ b/tools/wta/locales/da-DK.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Billeder: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / kommandoer " +delegate_picker.title: " Delegeret destination " +delegate_picker.tab: "Ny fane" +delegate_picker.panel: "Nyt panel" +delegate_picker.intent_required: "Beskriv det arbejde, der skal uddelegeres." +delegate_picker.pane_not_allowed: "/delegate opretter altid en ny destination og accepterer ikke @pane." +delegate_picker.not_configured: "Der er ikke konfigureret nogen stedfortræder." +delegate_picker.no_parent_pane: "Ingen arbejdsrude er tilgængelig at opdele." +delegate_picker.launch_failed: "Kunne ikke starte den delegerede: %{error}" commands.help_title: " Hjælp " commands.help_header: "Skråstregkommandoer — skriv / i inputfeltet." commands.help_escape_hint: " //text Send en bogstavelig '/' (undgår kommandofortolkeren)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Luk denne hjælp" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ for at navigere • ← → for at skifte knapper • Enter for at vælge • Esc for at annullere)" recommendations.button_run_command: "[ Kør kommando ]" +recommendations.button_send_to_delegate: "[ Send til delegeret ]" recommendations.button_insert_in_terminal: "Indsæt i Terminal" recommendations.button_open_in_new_tab: "Åbn i ny fane ↵" recommendations.button_open_in_new_panel: "Åbn i nyt panel ↵" @@ -201,12 +210,20 @@ commands.restart.summary: "Genstart agent" commands.stop.summary: "Annuller den igangværende prompt" commands.sessions.summary: "Åbn vælgeren for historiske sessioner (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Vælg agentlen til denne panel (/agent for at skifte direkte)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Forbered en opgave, og åbn en delegeret agent (/delegate )" # ── Udførelse af anbefaling (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Valg %{choice} mislykkedes: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Vælg terminalrude (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Ingen skrivbare terminalruder er tilgængelige." +pane_picker.target_unavailable: "Den valgte rude er ikke længere tilgængelig." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Vælg agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Der blev ikke fundet nogen tilgængelig agent-CLI på denne maskine." # {Locked="CLI"} diff --git a/tools/wta/locales/de-DE.yml b/tools/wta/locales/de-DE.yml index 5db6303753..e26176cb7e 100644 --- a/tools/wta/locales/de-DE.yml +++ b/tools/wta/locales/de-DE.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Bilder: %{items}" # {Locked="📎","%{items}"} # ── Befehlspopup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - Schrägstrich-Befehlspräfix, muss ASCII bleiben commands.popup_title: " / Befehle " +delegate_picker.title: " Ziel delegieren " +delegate_picker.tab: "Neuer Tab" +delegate_picker.panel: "Neues Panel" +delegate_picker.intent_required: "Beschreiben Sie die zu delegierende Arbeit." +delegate_picker.pane_not_allowed: "/delegate erstellt immer ein neues Ziel und akzeptiert @pane nicht." +delegate_picker.not_configured: "Es ist kein Delegierter Agent konfiguriert." +delegate_picker.no_parent_pane: "Es ist kein Arbeitsbereich zum Teilen verfügbar." +delegate_picker.launch_failed: "Delegate konnte nicht gestartet werden: %{error}" commands.help_title: " Hilfe " commands.help_header: "Schrägstrichbefehle — geben Sie / im Eingabefeld ein." commands.help_escape_hint: " //text Literales '/' senden (Befehlsparser umgehen)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Diese Hilfe schließen" # {Locked="Esc" # {Locked="Enter","Esc","↵","↑","↓","←","→"} - Tastennamen und Eingabetaste-Symbol, nicht übersetzen recommendations.nav_hint: "(↑ ↓ navigieren • ← → Aktion wechseln • Enter auswählen • Esc abbrechen)" recommendations.button_run_command: "[ Befehl ausführen ]" +recommendations.button_send_to_delegate: "[An Delegierten senden]" recommendations.button_insert_in_terminal: "In Terminal einfügen" recommendations.button_open_in_new_tab: "In neuer Registerkarte öffnen ↵" recommendations.button_open_in_new_panel: "In neuem Bereich öffnen ↵" @@ -201,12 +210,20 @@ commands.restart.summary: "Agent neu starten" commands.stop.summary: "Laufende Eingabe abbrechen" commands.sessions.summary: "Auswahl historischer Sitzungen öffnen (Ctrl+Shift+/)" commands.agent.summary: "Agent für diese Registerkarte auswählen (/agent zum direkten Wechseln)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Bereiten Sie eine Aufgabe vor und öffnen Sie einen Delegierten-Agenten (/delegate )" # ── Empfehlungsausführung (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Auswahl %{choice} fehlgeschlagen: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminalbereich auswählen (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Es sind keine beschreibbaren Terminalbereiche verfügbar." +pane_picker.target_unavailable: "Der ausgewählte Bereich ist nicht mehr verfügbar." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agent auswählen (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Auf diesem Computer wurde keine verfügbare Agenten-CLI gefunden." # {Locked="CLI"} diff --git a/tools/wta/locales/el-GR.yml b/tools/wta/locales/el-GR.yml index e9b2bf8f45..84b9f1966e 100644 --- a/tools/wta/locales/el-GR.yml +++ b/tools/wta/locales/el-GR.yml @@ -60,6 +60,14 @@ input.image_attachments: "📎 Εικόνες: %{items}" # {Locked="📎","%{it # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / εντολές " +delegate_picker.title: "Εκπρόσωπος προορισμού" +delegate_picker.tab: "Νέα καρτέλα" +delegate_picker.panel: "Νέος πίνακας" +delegate_picker.intent_required: "Περιγράψτε την εργασία προς ανάθεση." +delegate_picker.pane_not_allowed: "Το /delegate δημιουργεί πάντα έναν νέο προορισμό και δεν δέχεται @pane." +delegate_picker.not_configured: "Δεν έχει διαμορφωθεί ένας εκπρόσωπος αντιπροσώπου." +delegate_picker.no_parent_pane: "Δεν υπάρχει διαθέσιμο παράθυρο εργασίας για διαχωρισμό." +delegate_picker.launch_failed: "Δεν ήταν δυνατή η εκκίνηση του πληρεξούσιου: %{error}" commands.help_title: " Βοήθεια " commands.help_header: "Εντολές κάθετης — πληκτρολογήστε / στο πλαίσιο εισόδου." commands.help_escape_hint: " //text Αποστολή κυριολεκτικού '/' (παράκαμψη αναλυτή εντολών)" # {Locked="//text","/"} @@ -69,6 +77,7 @@ commands.help_close_hint: " Esc Κλείσιμο αυτής της βο # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ για πλοήγηση • ← → για εναλλαγή κουμπιών • Enter για επιλογή • Esc για ακύρωση)" recommendations.button_run_command: "[ Εκτέλεση εντολής ]" +recommendations.button_send_to_delegate: "[Αποστολή σε εκπρόσωπο]" recommendations.button_insert_in_terminal: "Εισαγωγή στο Terminal" recommendations.button_open_in_new_tab: "Άνοιγμα σε νέα καρτέλα ↵" recommendations.button_open_in_new_panel: "Άνοιγμα σε νέο πλαίσιο ↵" @@ -200,12 +209,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Επιλέξτε το πράκτορα για αυτό το πλαίσιο (/agent για άμεση εναλλαγή)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Προετοιμάστε μια εργασία και ανοίξτε έναν εκπρόσωπο αντιπροσώπου (/delegate )" # ── Εκτέλεση σύστασης (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Η επιλογή %{choice} απέτυχε: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Επιλέξτε παράθυρο τερματικού (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Δεν υπάρχουν εγγράψιμα παράθυρα ακροδεκτών." +pane_picker.target_unavailable: "Το επιλεγμένο παράθυρο δεν είναι πλέον διαθέσιμο." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Επιλέξτε πράκτορα (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Δεν βρέθηκε διαθέσιμο CLI πράκτορα σε αυτό το μηχάνημα." # {Locked="CLI"} diff --git a/tools/wta/locales/en-GB.yml b/tools/wta/locales/en-GB.yml index d9a9fd98c6..62509e4046 100644 --- a/tools/wta/locales/en-GB.yml +++ b/tools/wta/locales/en-GB.yml @@ -59,16 +59,33 @@ input.image_attachments: "📎 Images: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / commands " +delegate_picker.title: " Delegate destination " +delegate_picker.tab: "New tab" +delegate_picker.panel: "New panel" +delegate_picker.intent_required: "Describe the work to delegate." +delegate_picker.pane_not_allowed: "/delegate always creates a new destination and does not accept @pane." +delegate_picker.not_configured: "No delegate agent is configured." +delegate_picker.no_parent_pane: "No working pane is available to split." +delegate_picker.launch_failed: "Could not launch the delegate: %{error}" commands.help_title: " Help " commands.help_header: "Slash commands — type / in the input box." commands.help_escape_hint: " //text Send a literal '/' (escapes the command parser)" # {Locked="//text","/"} commands.help_close_hint: " Esc Close this help" # {Locked="Esc"} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepare a task and open a delegate agent (/delegate )" # {Locked="/delegate",""} +pane_picker.title: "Select terminal pane (↑ ↓ • Enter • Esc)" # {Locked="↑","↓","Enter","Esc"} +pane_picker.empty: "No writable terminal panes are available." +pane_picker.target_unavailable: "The selected pane is no longer available." # {Locked="↑","↓","Enter","Esc"} +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ to navigate • ← → to switch actions • Enter to select • Esc to cancel)" recommendations.button_run_command: "[ Run command ]" recommendations.button_insert_in_terminal: "Insert in Terminal" +recommendations.button_send_to_delegate: "[ Send to delegate ]" # Button sends the prepared task prompt to the newly opened AI agent pane recommendations.button_open_in_new_tab: "Open in New Tab ↵" recommendations.button_open_in_new_panel: "Open in New Panel ↵" recommendations.button_open_tab: "Open Tab ↵" diff --git a/tools/wta/locales/en-US.yml b/tools/wta/locales/en-US.yml index b71dbd4767..107d5cc903 100644 --- a/tools/wta/locales/en-US.yml +++ b/tools/wta/locales/en-US.yml @@ -73,6 +73,14 @@ input.image_attachments: "📎 Images: %{items}" # {Locked="%{items}"} {Locked= # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / commands " +delegate_picker.title: " Delegate destination " +delegate_picker.tab: "New tab" +delegate_picker.panel: "New panel" +delegate_picker.intent_required: "Describe the work to delegate." +delegate_picker.pane_not_allowed: "/delegate always creates a new destination and does not accept @pane." +delegate_picker.not_configured: "No delegate agent is configured." +delegate_picker.no_parent_pane: "No working pane is available to split." +delegate_picker.launch_failed: "Could not launch the delegate: %{error}" # Title bar of the slash-commands help popup commands.help_title: " Help " commands.help_header: "Slash commands — type / in the input box." @@ -92,6 +100,17 @@ commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" commands.agent.summary: "Pick the agent for this tab (/agent to switch directly)" # {Locked="/agent",""} commands.model.summary: "Pick the model for this pane (/model to switch directly)" # {Locked="/model",""} commands.move.summary: "Move this tab's agent pane (/move )" # {Locked="/move",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepare a task and open a delegate agent (/delegate )" # {Locked="/delegate",""} + +# ── Pane picker ───────────────────────────────────────────────────────────── +# {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Select terminal pane (↑ ↓ • Enter • Esc)" +pane_picker.empty: "No writable terminal panes are available." +pane_picker.target_unavailable: "The selected pane is no longer available." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate @@ -119,6 +138,7 @@ system.model_unknown: "Unknown model %{model} — type /model to see the availab recommendations.nav_hint: "(↑ ↓ to navigate suggestions • ← → to switch actions • Enter to select • Esc to cancel)" recommendations.button_run_command: "[ Run command ]" recommendations.button_insert_in_terminal: "Insert in Terminal" +recommendations.button_send_to_delegate: "[ Send to delegate ]" # Button sends the prepared task prompt to the newly opened AI agent pane recommendations.button_open_in_new_tab: "Open in New Tab ↵" recommendations.button_open_in_new_panel: "Open in New Panel ↵" recommendations.button_open_tab: "Open Tab ↵" diff --git a/tools/wta/locales/es-ES.yml b/tools/wta/locales/es-ES.yml index cf7aa86213..8ab40b6214 100644 --- a/tools/wta/locales/es-ES.yml +++ b/tools/wta/locales/es-ES.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imágenes: %{items}" # {Locked="📎","%{items}" # ── Ventana emergente de comandos (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefijo de comando de barra diagonal, debe permanecer en ASCII commands.popup_title: " / comandos " +delegate_picker.title: " Destino del delegado " +delegate_picker.tab: "Nueva pestaña" +delegate_picker.panel: "Nuevo panel" +delegate_picker.intent_required: "Describe el trabajo a delegar." +delegate_picker.pane_not_allowed: "/delegate siempre crea un nuevo destino y no acepta @pane." +delegate_picker.not_configured: "No hay ningún agente delegado configurado." +delegate_picker.no_parent_pane: "No hay ningún panel de trabajo disponible para dividir." +delegate_picker.launch_failed: "No se pudo iniciar el delegado: %{error}" commands.help_title: " Ayuda " commands.help_header: "Comandos de barra diagonal — escriba / en el cuadro de entrada." commands.help_escape_hint: " //text Enviar un '/' literal (escapa el analizador de comandos)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Cerrar esta ayuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nombres de teclas y glifo de tecla Intro, no traducir recommendations.nav_hint: "(↑ ↓ navegar • ← → cambiar acciones • Enter seleccionar • Esc cancelar)" recommendations.button_run_command: "[ Ejecutar comando ]" +recommendations.button_send_to_delegate: "[Enviar a delegado ]" recommendations.button_insert_in_terminal: "Insertar en terminal" recommendations.button_open_in_new_tab: "Abrir en nueva pestaña ↵" recommendations.button_open_in_new_panel: "Abrir en nuevo panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Reiniciar agente" commands.stop.summary: "Cancelar el mensaje en curso" commands.sessions.summary: "Abrir el selector de sesiones anteriores (Ctrl+Shift+/)" commands.agent.summary: "Elija el agente para esta pestaña (/agent para cambiar directamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Preparar una tarea y abrir un agente delegado (/delegate )" # ── Ejecución de recomendaciones (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Error en la opción %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Seleccionar panel de terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "No hay paneles de terminal grabables disponibles." +pane_picker.target_unavailable: "El panel seleccionado ya no está disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleccionar agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "No se encontró ningún CLI de agente disponible en esta máquina." # {Locked="CLI"} diff --git a/tools/wta/locales/es-MX.yml b/tools/wta/locales/es-MX.yml index abe71f6072..1e9624f64d 100644 --- a/tools/wta/locales/es-MX.yml +++ b/tools/wta/locales/es-MX.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imágenes: %{items}" # {Locked="📎","%{items}" # ── Ventana emergente de comandos (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefijo de comando de barra diagonal, debe permanecer en ASCII commands.popup_title: " / comandos " +delegate_picker.title: " Destino del delegado " +delegate_picker.tab: "Nueva pestaña" +delegate_picker.panel: "Nuevo panel" +delegate_picker.intent_required: "Describe el trabajo a delegar." +delegate_picker.pane_not_allowed: "/delegate siempre crea un nuevo destino y no acepta @pane." +delegate_picker.not_configured: "No hay ningún agente delegado configurado." +delegate_picker.no_parent_pane: "No hay ningún panel de trabajo disponible para dividir." +delegate_picker.launch_failed: "No se pudo iniciar el delegado: %{error}" commands.help_title: " Ayuda " commands.help_header: "Comandos de barra diagonal — escribe / en el cuadro de entrada." commands.help_escape_hint: " //text Enviar un '/' literal (escapa el analizador de comandos)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Cerrar esta ayuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nombres de teclas y glifo de tecla Intro, no traducir recommendations.nav_hint: "(↑ ↓ navegar • ← → cambiar acciones • Enter seleccionar • Esc cancelar)" recommendations.button_run_command: "[ Ejecutar comando ]" +recommendations.button_send_to_delegate: "[Enviar a delegado ]" recommendations.button_insert_in_terminal: "Insertar en terminal" recommendations.button_open_in_new_tab: "Abrir en nueva pestaña ↵" recommendations.button_open_in_new_panel: "Abrir en nuevo panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Reiniciar agente" commands.stop.summary: "Cancelar la petición en curso" commands.sessions.summary: "Abrir el selector de sesiones anteriores (Ctrl+Shift+/)" commands.agent.summary: "Elige el agente para esta pestaña (/agent para cambiar directamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Preparar una tarea y abrir un agente delegado (/delegate )" # ── Ejecución de recomendaciones (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Error en la opción %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Seleccionar panel de terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "No hay paneles de terminal grabables disponibles." +pane_picker.target_unavailable: "El panel seleccionado ya no está disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleccionar agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "No se encontró ningún CLI de agente disponible en esta máquina." # {Locked="CLI"} diff --git a/tools/wta/locales/et-EE.yml b/tools/wta/locales/et-EE.yml index b6e2002626..202541ffdd 100644 --- a/tools/wta/locales/et-EE.yml +++ b/tools/wta/locales/et-EE.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Pildid: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / käsud " +delegate_picker.title: " Delegeeri sihtkoht " +delegate_picker.tab: "Uus vaheleht" +delegate_picker.panel: "Uus paneel" +delegate_picker.intent_required: "Kirjeldage delegeeritavat tööd." +delegate_picker.pane_not_allowed: "/delegate loob alati uue sihtkoha ega aktsepteeri @pane." +delegate_picker.not_configured: "Ühtegi delegeeritud agenti pole seadistatud." +delegate_picker.no_parent_pane: "Jagamiseks pole saadaval ühtegi tööpaani." +delegate_picker.launch_failed: "Delegaadi käivitamine ebaõnnestus: %{error}" commands.help_title: " Abi " commands.help_header: "Kaldkriipsukäsud — sisestage / sisestusväljale." commands.help_escape_hint: " //text Saada sõnasõnaline '/' (väldib käsuanalüsaatorit)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Sulge see abi" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ navigeerimiseks • ← → nuppude vahetamiseks • Enter valimiseks • Esc tühistamiseks)" recommendations.button_run_command: "[ Käivita käsk ]" +recommendations.button_send_to_delegate: "[ Saada delegaadile ]" recommendations.button_insert_in_terminal: "Lisa terminali" recommendations.button_open_in_new_tab: "Ava uuel vahekaardil ↵" recommendations.button_open_in_new_panel: "Ava uuel paneelil ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Valige selle vahekaardi agent (/agent otse vahetamiseks)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Valmistage ette ülesanne ja avage volitatud agent (/delegate )" # ── Soovituse täitmine (src/coordinator.rs) ───────────────────────────────── system.choice_execution_failed: "Valik %{choice} nurjus: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Valige terminali paneel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Kirjutatavad terminalipaneelid pole saadaval." +pane_picker.target_unavailable: "Valitud paan pole enam saadaval." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Valige agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Selles seadmes ei leitud ühtegi saadavalolevat agendi CLI-d." # {Locked="CLI"} diff --git a/tools/wta/locales/eu-ES.yml b/tools/wta/locales/eu-ES.yml index f920f40220..3f8d92bba4 100644 --- a/tools/wta/locales/eu-ES.yml +++ b/tools/wta/locales/eu-ES.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Irudiak: %{items}" # {Locked="📎","%{items}"} # ── Komandoen popup-a (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - barra-komando aurrizkia, ASCII izan behar du commands.popup_title: " / komandoak " +delegate_picker.title: " Ordezkatu helmuga " +delegate_picker.tab: "Fitxa berria" +delegate_picker.panel: "Panel berria" +delegate_picker.intent_required: "Deskribatu eskuordetu beharreko lana." +delegate_picker.pane_not_allowed: "/delegate beti sortzen du helmuga berri bat eta ez du onartzen @pane." +delegate_picker.not_configured: "Ez dago ordezkari ordezkaririk konfiguratuta." +delegate_picker.no_parent_pane: "Ez dago lan panelik zatitzeko erabilgarri." +delegate_picker.launch_failed: "Ezin izan da ordezkaria abiarazi: %{error}" commands.help_title: " Laguntza " commands.help_header: "Barra-komandoak — idatzi / sarrera-koadroan." commands.help_escape_hint: " //text Bidali '/' literala (ihes komando-analizatzailetik)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Itxi laguntza hau" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - tekla-izenak eta Itzuli-tekla glifoa, ez itzuli recommendations.nav_hint: "(↑ ↓ nabigatzeko • ← → ekintzak aldatzeko • Enter hautatzeko • Esc bertan behera uzteko)" recommendations.button_run_command: "[ Exekutatu komandoa ]" +recommendations.button_send_to_delegate: "[ Bidali ordezkariari ]" recommendations.button_insert_in_terminal: "Txertatu Terminalean" recommendations.button_open_in_new_tab: "Ireki Fitxa Berrian ↵" recommendations.button_open_in_new_panel: "Ireki Panel Berrian ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Aukeratu fitxa honetarako agentea (/agent zuzenean aldatzeko)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prestatu zeregin bat eta ireki ordezkari ordezkari bat (/delegate )" # ── Gomendioaren exekuzioa (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "%{choice} aukera huts egin du: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Hautatu terminal-panela (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Ez dago terminal-panel idazgarririk erabilgarri." +pane_picker.target_unavailable: "Hautatutako panela jada ez dago erabilgarri." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Hautatu agentea (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ez da agente-CLI erabilgarririk aurkitu makina honetan." # {Locked="CLI"} diff --git a/tools/wta/locales/fa-IR.yml b/tools/wta/locales/fa-IR.yml index fb578ed54e..6f02ee42ce 100644 --- a/tools/wta/locales/fa-IR.yml +++ b/tools/wta/locales/fa-IR.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 تصاویر: %{items}" # {Locked="📎","%{item # ── پنجره بازشو دستورات (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - پیشوند دستور اسلش، باید ASCII بماند commands.popup_title: " / دستورات " +delegate_picker.title: "مقصد را تفویض کنید" +delegate_picker.tab: "برگه جدید" +delegate_picker.panel: "پنل جدید" +delegate_picker.intent_required: "کاری را که باید واگذار کنید را شرح دهید." +delegate_picker.pane_not_allowed: "/delegate همیشه یک مقصد جدید ایجاد می کند و @pane را نمی پذیرد." +delegate_picker.not_configured: "هیچ نماینده نمایندگی پیکربندی نشده است." +delegate_picker.no_parent_pane: "هیچ صفحه کاری برای تقسیم در دسترس نیست." +delegate_picker.launch_failed: "نماینده راه اندازی نشد: %{error}" commands.help_title: " راهنما " commands.help_header: "دستورات اسلش — / را در کادر ورودی تایپ کنید." commands.help_escape_hint: " //text ارسال '/' تحت‌اللفظی (تجزیه‌کننده دستور را رد می‌کند)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "راه‌اندازی مجدد عامل هوش مصن commands.stop.summary: "لغو درخواست در حال اجرا" commands.sessions.summary: "باز کردن انتخابگر نشست‌های تاریخی (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "عامل این پنل را انتخاب کنید (/agent برای تغییر مستقیم)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "یک کار آماده کنید و یک نماینده نماینده باز کنید (/delegate )" # ── پنل پیشنهادات (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - نام کلیدها و نماد کلید بازگشت، ترجمه نکنید recommendations.nav_hint: "(↑ ↓ برای پیمایش • ← → برای جابه‌جایی بین دکمه‌ها • Enter برای انتخاب • Esc برای لغو)" recommendations.button_run_command: "[ اجرای دستور ]" +recommendations.button_send_to_delegate: "[ارسال به نماینده]" recommendations.button_insert_in_terminal: "درج در ترمینال" recommendations.button_open_in_new_tab: "باز کردن در زبانه جدید ↵" recommendations.button_open_in_new_panel: "باز کردن در پنل جدید ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "انتخاب %{choice} ناموفق بود: %{e # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "صفحه پایانه را انتخاب کنید (↑ ↓ • Enter • Esc)" +pane_picker.empty: "هیچ صفحه پایانه قابل نوشتن در دسترس نیست." +pane_picker.target_unavailable: "صفحه انتخاب شده دیگر در دسترس نیست." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "انتخاب عامل (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "هیچ CLI عاملی در این رایانه یافت نشد." # {Locked="CLI"} diff --git a/tools/wta/locales/fi-FI.yml b/tools/wta/locales/fi-FI.yml index c00d6aaef7..9576e49703 100644 --- a/tools/wta/locales/fi-FI.yml +++ b/tools/wta/locales/fi-FI.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Kuvat: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komennot " +delegate_picker.title: " Siirrä kohde " +delegate_picker.tab: "Uusi välilehti" +delegate_picker.panel: "Uusi paneeli" +delegate_picker.intent_required: "Kuvaile delegoitavaa työtä." +delegate_picker.pane_not_allowed: "/delegate luo aina uuden määränpään eikä hyväksy kohdetta @pane." +delegate_picker.not_configured: "Valtuutettua edustajaa ei ole määritetty." +delegate_picker.no_parent_pane: "Työruutua ei ole käytettävissä jaettavaksi." +delegate_picker.launch_failed: "Valtuutettua ei voitu käynnistää: %{error}" commands.help_title: " Ohje " commands.help_header: "Kauttaviivakomennot — kirjoita / syöttökenttään." commands.help_escape_hint: " //text Lähetä kirjaimellinen '/' (ohittaa komentojäsentimen)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Sulje tämä ohje" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ navigoidaksesi • ← → vaihtaaksesi painikkeita • Enter valitaksesi • Esc peruuttaaksesi)" recommendations.button_run_command: "[ Suorita komento ]" +recommendations.button_send_to_delegate: "[ Lähetä edustajalle ]" recommendations.button_insert_in_terminal: "Lisää Terminaliin" recommendations.button_open_in_new_tab: "Avaa uudessa välilehdessä ↵" recommendations.button_open_in_new_panel: "Avaa uudessa paneelissa ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Käynnistä agentti uudelleen" commands.stop.summary: "Peruuta käynnissä oleva kehote" commands.sessions.summary: "Avaa aiempien istuntojen valitsin (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Valitse tämän paneelin agentti (/agent vaihtaaksesi suoraan)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Valmistele tehtävä ja avaa edustaja (/delegate )" # ── Suosituksen suorittaminen (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Valinta %{choice} epäonnistui: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Valitse pääteruutu (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Kirjoitettavia pääteruutuja ei ole saatavilla." +pane_picker.target_unavailable: "Valittu ruutu ei ole enää käytettävissä." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Valitse agentti (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Tältä koneelta ei löytynyt käytettävissä olevaa agentti-CLI-työkalua." # {Locked="CLI"} diff --git a/tools/wta/locales/fil-PH.yml b/tools/wta/locales/fil-PH.yml index 19db5c7b4d..af63b053e7 100644 --- a/tools/wta/locales/fil-PH.yml +++ b/tools/wta/locales/fil-PH.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Mga larawan: %{items}" # {Locked="📎","%{items # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / mga command " +delegate_picker.title: " Italaga ang destinasyon " +delegate_picker.tab: "Bagong tab" +delegate_picker.panel: "Bagong panel" +delegate_picker.intent_required: "Ilarawan ang gawaing italaga." +delegate_picker.pane_not_allowed: "/delegate ay palaging gumagawa ng bagong destinasyon at hindi tumatanggap ng @pane." +delegate_picker.not_configured: "Walang delegadong ahente ang naka-configure." +delegate_picker.no_parent_pane: "Walang working pane na magagamit upang hatiin." +delegate_picker.launch_failed: "Hindi mailunsad ang delegado: %{error}" commands.help_title: " Tulong " commands.help_header: "Mga slash command — i-type ang / sa input box." commands.help_escape_hint: " //text Magpadala ng literal na '/' (iniiwasan ang command parser)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Isara ang tulong na ito" # {Locked="Esc # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ para mag-navigate • ← → para magpalit ng aksyon • Enter para pumili • Esc para mag-cancel)" recommendations.button_run_command: "[ Patakbuhin ang command ]" +recommendations.button_send_to_delegate: "[ Ipadala sa delegado ]" recommendations.button_insert_in_terminal: "Ilagay sa Terminal" recommendations.button_open_in_new_tab: "Buksan sa Bagong Tab ↵" recommendations.button_open_in_new_panel: "Buksan sa Bagong Panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Piliin ang agent para sa tab na ito (/agent para magpalit nang diretso)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Maghanda ng gawain at magbukas ng delegadong ahente (/delegate )" # ── Pagpapatupad ng rekomendasyon (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Nabigo ang pagpipiliang %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Piliin ang terminal pane (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Walang available na mga nakasulat na terminal pane." +pane_picker.target_unavailable: "Hindi na available ang napiling pane." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Pumili ng agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Walang nahanap na available na CLI ng agent sa machine na ito." # {Locked="CLI"} diff --git a/tools/wta/locales/fr-CA.yml b/tools/wta/locales/fr-CA.yml index 120495ba3e..6386c1b89d 100644 --- a/tools/wta/locales/fr-CA.yml +++ b/tools/wta/locales/fr-CA.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Images : %{items}" # {Locked="📎","%{items}"} # ── Fenêtre contextuelle des commandes (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - préfixe de commande slash, doit rester en ASCII commands.popup_title: " / commandes " +delegate_picker.title: " Destination du délégué " +delegate_picker.tab: "Nouvel onglet" +delegate_picker.panel: "Nouveau panneau" +delegate_picker.intent_required: "Décrivez le travail à déléguer." +delegate_picker.pane_not_allowed: "/delegate crée toujours une nouvelle destination et n'accepte pas @pane." +delegate_picker.not_configured: "Aucun agent délégué n'est configuré." +delegate_picker.no_parent_pane: "Aucun volet de travail n'est disponible pour être divisé." +delegate_picker.launch_failed: "Impossible de lancer le délégué : %{error}" commands.help_title: " Aide " commands.help_header: "Commandes slash — tapez / dans la zone de saisie." commands.help_escape_hint: " //text Envoyer un '/' littéral (échappe l'analyseur de commandes)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Fermer cette aide" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - noms de touches et symbole de touche Entrée, ne pas traduire recommendations.nav_hint: "(↑ ↓ naviguer • ← → changer d’action • Enter sélectionner • Esc annuler)" recommendations.button_run_command: "[ Exécuter la commande ]" +recommendations.button_send_to_delegate: "[ Envoyer au délégué ]" recommendations.button_insert_in_terminal: "Insérer dans le terminal" recommendations.button_open_in_new_tab: "Ouvrir dans un nouvel onglet ↵" recommendations.button_open_in_new_panel: "Ouvrir dans un nouveau panneau ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Redémarrer l’agent" commands.stop.summary: "Annuler la requête en cours" commands.sessions.summary: "Ouvrir le sélecteur de sessions précédentes (Ctrl+Shift+/)" commands.agent.summary: "Choisissez l’agent pour cet onglet (/agent pour changer directement)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Préparer une tâche et ouvrir un agent délégué (/delegate )" # ── Exécution des recommandations (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Le choix %{choice} a échoué : %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Sélectionner le volet des terminaux (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Aucun volet de terminal inscriptible n'est disponible." +pane_picker.target_unavailable: "Le volet sélectionné n'est plus disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Sélectionner l’agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Aucune CLI d'agent disponible n'a été trouvée sur cette machine." # {Locked="CLI"} diff --git a/tools/wta/locales/fr-FR.yml b/tools/wta/locales/fr-FR.yml index dd2ffceb1c..a77fa1daea 100644 --- a/tools/wta/locales/fr-FR.yml +++ b/tools/wta/locales/fr-FR.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Images : %{items}" # {Locked="📎","%{items}"} # ── Fenêtre contextuelle des commandes (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - préfixe de commande slash, doit rester en ASCII commands.popup_title: " / commandes " +delegate_picker.title: " Destination du délégué " +delegate_picker.tab: "Nouvel onglet" +delegate_picker.panel: "Nouveau panneau" +delegate_picker.intent_required: "Décrivez le travail à déléguer." +delegate_picker.pane_not_allowed: "/delegate crée toujours une nouvelle destination et n'accepte pas @pane." +delegate_picker.not_configured: "Aucun agent délégué n'est configuré." +delegate_picker.no_parent_pane: "Aucun volet de travail n'est disponible pour être divisé." +delegate_picker.launch_failed: "Impossible de lancer le délégué : %{error}" commands.help_title: " Aide " commands.help_header: "Commandes slash — tapez / dans la zone de saisie." commands.help_escape_hint: " //text Envoyer un '/' littéral (échappe l'analyseur de commandes)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Fermer cette aide" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - noms de touches et symbole de touche Entrée, ne pas traduire recommendations.nav_hint: "(↑ ↓ naviguer • ← → changer d’action • Enter sélectionner • Esc annuler)" recommendations.button_run_command: "[ Exécuter la commande ]" +recommendations.button_send_to_delegate: "[ Envoyer au délégué ]" recommendations.button_insert_in_terminal: "Insérer dans le terminal" recommendations.button_open_in_new_tab: "Ouvrir dans un nouvel onglet ↵" recommendations.button_open_in_new_panel: "Ouvrir dans un nouveau panneau ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Redémarrer l’agent" commands.stop.summary: "Annuler la requête en cours" commands.sessions.summary: "Ouvrir le sélecteur de sessions précédentes (Ctrl+Shift+/)" commands.agent.summary: "Choisir l’agent pour cet onglet (/agent pour changer directement)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Préparer une tâche et ouvrir un agent délégué (/delegate )" # ── Exécution des recommandations (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Le choix %{choice} a échoué : %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Sélectionner le volet des terminaux (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Aucun volet de terminal inscriptible n'est disponible." +pane_picker.target_unavailable: "Le volet sélectionné n'est plus disponible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Sélectionner l’agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Aucun CLI d'agent disponible n'a été trouvé sur cette machine." # {Locked="CLI"} diff --git a/tools/wta/locales/ga-IE.yml b/tools/wta/locales/ga-IE.yml index 1afa7271c4..2647feb690 100644 --- a/tools/wta/locales/ga-IE.yml +++ b/tools/wta/locales/ga-IE.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Íomhánna: %{items}" # {Locked="📎","%{items} # ── Aníos orduithe (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - réimír ordú scáth, caithfidh sé fanacht ASCII commands.popup_title: " / orduithe " +delegate_picker.title: " Ceann scríbe toscaire " +delegate_picker.tab: "Cluaisín nua" +delegate_picker.panel: "Painéal nua" +delegate_picker.intent_required: "Déan cur síos ar an obair atá le tarmligean." +delegate_picker.pane_not_allowed: "Cruthaíonn /delegate ceann scríbe nua i gcónaí agus ní ghlacann sé le @pane." +delegate_picker.not_configured: "Níl aon ghníomhaire toscaire cumraithe." +delegate_picker.no_parent_pane: "Níl aon phána oibre ar fáil le scoilt." +delegate_picker.launch_failed: "Níorbh fhéidir an toscaire a sheoladh: %{error}" commands.help_title: " Cabhair " commands.help_header: "Orduithe scáth — clóscríobh / sa bhosca ionchuir." commands.help_escape_hint: " //text Seol '/' litriúil (éalú ón bparsálaí orduithe)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Dún an chabhair seo" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ainmneacha eochracha agus gliof eochair Fillte, ná haistrigh recommendations.nav_hint: "(↑ ↓ chun nascleanúint a dhéanamh • ← → chun cnaipí a athrú • Enter chun roghnú • Esc chun cealú)" recommendations.button_run_command: "[ Rith ordú ]" +recommendations.button_send_to_delegate: "[Seol chuig an toscaire ]" recommendations.button_insert_in_terminal: "Ionsáigh i dTeirminéal" recommendations.button_open_in_new_tab: "Oscail i gCluaisín Nua ↵" recommendations.button_open_in_new_panel: "Oscail i bPainéal Nua ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Roghnaigh an gníomhaire don chluaisín seo (/agent chun athrú go díreach)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Ulltaigh tasc agus oscail gníomhaire toscairí (/delegate )" # ── Rith moltaí (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Theip ar rogha %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Roghnaigh pana teirminéil (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Níl aon phána teirminéil inscríofa ar fáil." +pane_picker.target_unavailable: "Níl an pána roghnaithe ar fáil a thuilleadh." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Roghnaigh gníomhaire (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Níor aimsíodh aon CLI gníomhaire ar fáil ar an meaisín seo." # {Locked="CLI"} diff --git a/tools/wta/locales/gd-gb.yml b/tools/wta/locales/gd-gb.yml index 4a6b52abee..edea7b36a9 100644 --- a/tools/wta/locales/gd-gb.yml +++ b/tools/wta/locales/gd-gb.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Dealbhan: %{items}" # {Locked="📎","%{items}"} # ── Priob-uinneag òrdughan (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - ro-leasachan àithne sgian-dubh, feumaidh e fuireach ASCII commands.popup_title: " / òrdughan " +delegate_picker.title: " Ceann-uidhe riochdaire " +delegate_picker.tab: "Tab ùr" +delegate_picker.panel: "Pannal ùr" +delegate_picker.intent_required: "Thoir cunntas air an obair a tha thu airson a thiomnadh." +delegate_picker.pane_not_allowed: " Bidh /delegate an-còmhnaidh a’ cruthachadh ceann-uidhe ùr agus cha ghabh e ri @pane." +delegate_picker.not_configured: "Chan eil àidseant riochdachaidh sam bith air a rèiteachadh." +delegate_picker.no_parent_pane: "Chan eil pana obrach ri fhaighinn airson sgoltadh." +delegate_picker.launch_failed: "Cha b’ urrainn dhuinn an riochdaire a chuir air bhog: %{error}" commands.help_title: " Cuideachadh " commands.help_header: "Òrdughan sgian-dubh — clò-sgrìobh / anns a' bhogsa ion-chuir." commands.help_escape_hint: " //text Cuir '/' litireil (teich bhon pharsair òrdughan)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Dùin an cuideachadh seo" # {Locked="Es # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ainmean iuchraichean agus samhla iuchair Tilleadh, na eadar-theangaich recommendations.nav_hint: "(↑ ↓ gus seòladh • ← → gus putanan atharrachadh • Enter gus taghadh • Esc gus sgur dheth)" recommendations.button_run_command: "[ Ruith òrdugh ]" +recommendations.button_send_to_delegate: "[Cuir gu riochdaire ]" recommendations.button_insert_in_terminal: "Cuir a-steach san Teirmineal" recommendations.button_open_in_new_tab: "Fosgail ann an Taba Ùr ↵" recommendations.button_open_in_new_panel: "Fosgail ann am Panail Ùr ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Tagh am àidhent airson a' phana seo (/agent gus atharrachadh gu dìreach)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: " Ullaich gnìomh agus fosgail riochdaire riochdaire (/delegate )" # ── Cur an gnìomh molaidh (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Dh’fhàillig roghainn %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Tagh pana crìche (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Chan eil lòsan crìochnachaidh a ghabhas sgrìobhadh rim faighinn." +pane_picker.target_unavailable: "Chan eil am pana taghte ri fhaighinn tuilleadh." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Tagh àidhent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Cha deach CLI àidhent sam bith a lorg air a' mhadhinn seo." # {Locked="CLI"} diff --git a/tools/wta/locales/gl-ES.yml b/tools/wta/locales/gl-ES.yml index a47d13baa8..1d15e075ae 100644 --- a/tools/wta/locales/gl-ES.yml +++ b/tools/wta/locales/gl-ES.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imaxes: %{items}" # {Locked="📎","%{items}"} # ── Ventá emerxente de comandos (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefixo de comando de barra, debe permanecer ASCII commands.popup_title: " / comandos " +delegate_picker.title: " Delegar destino " +delegate_picker.tab: "Nova pestana" +delegate_picker.panel: "Panel novo" +delegate_picker.intent_required: "Describe o traballo a delegar." +delegate_picker.pane_not_allowed: "/delegate sempre crea un novo destino e non acepta @pane." +delegate_picker.not_configured: "Non hai ningún axente delegado configurado." +delegate_picker.no_parent_pane: "Non hai ningún panel de traballo dispoñible para dividir." +delegate_picker.launch_failed: "Non se puido iniciar o delegado: %{error}" commands.help_title: " Axuda " commands.help_header: "Comandos de barra — escriba / na caixa de entrada." commands.help_escape_hint: " //text Enviar un '/' literal (escapa o analizador de comandos)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Pechar esta axuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nomes de teclas e glifo de tecla Intro, non traducir recommendations.nav_hint: "(↑ ↓ para navegar • ← → para cambiar accións • Enter para seleccionar • Esc para cancelar)" recommendations.button_run_command: "[ Executar comando ]" +recommendations.button_send_to_delegate: "[ Enviar ao delegado ]" recommendations.button_insert_in_terminal: "Inserir no Terminal" recommendations.button_open_in_new_tab: "Abrir nunha pestana nova ↵" recommendations.button_open_in_new_panel: "Abrir nun panel novo ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Escolla o agente para esta pestana (/agent para cambiar directamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepara unha tarefa e abre un axente delegado (/delegate )" # ── Execución de recomendacións (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Fallou a opción %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Seleccionar o panel de terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Non hai paneis de terminais escribibles dispoñibles." +pane_picker.target_unavailable: "O panel seleccionado xa non está dispoñible." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleccionar agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Non se atopou ningunha CLI de axente dispoñible nesta máquina." # {Locked="CLI"} diff --git a/tools/wta/locales/gu-IN.yml b/tools/wta/locales/gu-IN.yml index cf884bd3ed..8111405b04 100644 --- a/tools/wta/locales/gu-IN.yml +++ b/tools/wta/locales/gu-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 છબીઓ: %{items}" # {Locked="📎","%{item # ── કમાન્ડ પૉપઅપ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - સ્લેશ-કમાન્ડ ઉપસર્ગ, ASCII હોવું જરૂરી commands.popup_title: " / કમાન્ડ " +delegate_picker.title: " ડેલિગેટ ડેસ્ટિનેશન " +delegate_picker.tab: "નવું ટેબ" +delegate_picker.panel: "નવી પેનલ" +delegate_picker.intent_required: "નિયુક્ત કરવા માટેના કાર્યનું વર્ણન કરો." +delegate_picker.pane_not_allowed: "/delegate હંમેશા નવું ગંતવ્ય બનાવે છે અને @pane સ્વીકારતું નથી." +delegate_picker.not_configured: "કોઈ પ્રતિનિધિ એજન્ટ ગોઠવેલ નથી." +delegate_picker.no_parent_pane: "વિભાજિત કરવા માટે કોઈ કાર્યકારી ફલક ઉપલબ્ધ નથી." +delegate_picker.launch_failed: "પ્રતિનિધિને લોંચ કરી શકાયું નથી: %{error}" commands.help_title: " સહાય " commands.help_header: "સ્લેશ કમાન્ડ — ઇનપુટ બૉક્સમાં / ટાઇપ કરો." commands.help_escape_hint: " //text શાબ્દિક '/' મોકલો (કમાન્ડ પાર્સર એસ્કેપ કરે છે)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "એજન્ટ ફરી શરૂ કરો" commands.stop.summary: "ચાલુ પ્રોમ્પ્ટ રદ કરો" commands.sessions.summary: "ઐતિહાસિક સત્રોનું પિકર ખોલો (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "આ પેન માટે એજન્ટ પસંદ કરો (સીધું બદલવા /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "એક કાર્ય તૈયાર કરો અને પ્રતિનિધિ એજન્ટ ખોલો (/delegate )" # ── ભલામણ પૅનલ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - કી નામો અને Return-કી ગ્લિફ, અનુવાદ કરશો નહીં recommendations.nav_hint: "(↑ ↓ નેવિગેટ કરવા • ← → બટન બદલવા • Enter પસંદ કરવા • Esc રદ કરવા)" recommendations.button_run_command: "[ કમાન્ડ ચલાવો ]" +recommendations.button_send_to_delegate: "[ પ્રતિનિધિને મોકલો ]" recommendations.button_insert_in_terminal: "ટર્મિનલમાં દાખલ કરો" recommendations.button_open_in_new_tab: "નવી ટૅબમાં ખોલો ↵" recommendations.button_open_in_new_panel: "નવી પૅનલમાં ખોલો ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "પસંદગી %{choice} નિષ્ફળ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ટર્મિનલ ફલક પસંદ કરો (↑ ↓ • Enter • Esc)" +pane_picker.empty: "કોઈ લખી શકાય તેવા ટર્મિનલ પેન ઉપલબ્ધ નથી." +pane_picker.target_unavailable: "પસંદ કરેલ ફલક હવે ઉપલબ્ધ નથી." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "એજન્ટ પસંદ કરો (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "આ મશીન પર કોઈ ઉપલબ્ધ એજન્ટ CLI મળ્યું નથી." # {Locked="CLI"} diff --git a/tools/wta/locales/he-IL.yml b/tools/wta/locales/he-IL.yml index 10e2c2c187..4cd0395d50 100644 --- a/tools/wta/locales/he-IL.yml +++ b/tools/wta/locales/he-IL.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 תמונות: %{items}" # {Locked="📎","%{item # ── חלון פקודות מוקפץ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - קידומת פקודת לוכסן, חייב להישאר ASCII commands.popup_title: " / פקודות " +delegate_picker.title: " יעד נציג " +delegate_picker.tab: "כרטיסייה חדשה" +delegate_picker.panel: "פאנל חדש" +delegate_picker.intent_required: "תאר את העבודה שיש להאצל." +delegate_picker.pane_not_allowed: "/delegate תמיד יוצר יעד חדש ואינו מקבל @pane." +delegate_picker.not_configured: "אין סוכן נציג מוגדר." +delegate_picker.no_parent_pane: "אין חלונית עבודה זמינה לפיצול." +delegate_picker.launch_failed: "לא ניתן להפעיל את הנציג: %{error}" commands.help_title: " עזרה " commands.help_header: "פקודות לוכסן — הקלד / בתיבת הקלט." commands.help_escape_hint: " //text שלח '/' מילולי (בורח ממנתח הפקודות)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "הפעל מחדש את הסוכן" commands.stop.summary: "בטל את הבקשה שמתבצעת" commands.sessions.summary: "פתח את בורר ההפעלות ההיסטוריות (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "בחר את הסוכן עבור כרטיסייה זו (/agent למעבר ישיר)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "הכן משימה ופתח נציג נציג (/delegate )" # ── לוח המלצות (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - שמות מקשים וסמל מקש Enter, אין לתרגם recommendations.nav_hint: "(↑ ↓ לניווט • ← → למעבר בין לחצנים • Enter לבחירה • Esc לביטול)" recommendations.button_run_command: "[ הפעל פקודה ]" +recommendations.button_send_to_delegate: "[ שלח לנציג ]" recommendations.button_insert_in_terminal: "הכנס למסוף" recommendations.button_open_in_new_tab: "פתח בכרטיסייה חדשה ↵" recommendations.button_open_in_new_panel: "פתח בחלונית חדשה ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "הבחירה %{choice} נכשלה: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "בחר חלונית מסוף (↑ ↓ • Enter • Esc)" +pane_picker.empty: "אין חלוניות מסוף הניתנות לכתיבה זמינות." +pane_picker.target_unavailable: "החלונית שנבחרה אינה זמינה יותר." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "בחר סוכן (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "לא נמצא ממשק CLI זמין של סוכן במחשב זה." # {Locked="CLI"} diff --git a/tools/wta/locales/hi-IN.yml b/tools/wta/locales/hi-IN.yml index bef25c5bdd..71b4fb99f2 100644 --- a/tools/wta/locales/hi-IN.yml +++ b/tools/wta/locales/hi-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 छवियाँ: %{items}" # {Locked="📎"," # ── कमांड पॉपअप (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - स्लैश-कमांड उपसर्ग, ASCII रहना चाहिए commands.popup_title: " / कमांड " +delegate_picker.title: " प्रतिनिधि गंतव्य " +delegate_picker.tab: "नया टैब" +delegate_picker.panel: "नया पैनल" +delegate_picker.intent_required: " सौंपे जाने वाले कार्य का वर्णन करें।" +delegate_picker.pane_not_allowed: "/delegate हमेशा एक नया गंतव्य बनाता है और @pane को स्वीकार नहीं करता है।" +delegate_picker.not_configured: "कोई प्रतिनिधि एजेंट कॉन्फ़िगर नहीं किया गया है।" +delegate_picker.no_parent_pane: "विभाजित करने के लिए कोई कार्य फलक उपलब्ध नहीं है।" +delegate_picker.launch_failed: "प्रतिनिधि लॉन्च नहीं किया जा सका: %{error}" commands.help_title: " सहायता " commands.help_header: "स्लैश कमांड — इनपुट बॉक्स में / टाइप करें।" commands.help_escape_hint: " //text शाब्दिक '/' भेजें (कमांड पार्सर को एस्केप करता है)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "एजेंट पुनः आरंभ करे commands.stop.summary: "चल रहे प्रॉम्प्ट को रद्द करें" commands.sessions.summary: "ऐतिहासिक सत्र पिकर खोलें (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "इस टैब के लिए एजेंट चुनें (सीधे बदलने के लिए /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "एक कार्य तैयार करें और एक प्रतिनिधि एजेंट खोलें (/delegate )" # ── अनुशंसा पैनल (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - कुंजी नाम और Return-कुंजी ग्लिफ़, अनुवाद न करें recommendations.nav_hint: "(↑ ↓ नेविगेट करें • ← → बटन बदलें • Enter चुनें • Esc रद्द करें)" recommendations.button_run_command: "[ कमांड चलाएँ ]" +recommendations.button_send_to_delegate: "[प्रतिनिधि को भेजें]" recommendations.button_insert_in_terminal: "टर्मिनल में सम्मिलित करें" recommendations.button_open_in_new_tab: "नई टैब में खोलें ↵" recommendations.button_open_in_new_panel: "नए पैनल में खोलें ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "चुनाव %{choice} विफल रह # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "टर्मिनल फलक चुनें (↑ ↓ • Enter • Esc)" +pane_picker.empty: "कोई लिखने योग्य टर्मिनल पेन उपलब्ध नहीं है।" +pane_picker.target_unavailable: "चयनित फलक अब उपलब्ध नहीं है।" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "एजेंट चुनें (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "इस मशीन पर कोई उपलब्ध एजेंट CLI नहीं मिला।" # {Locked="CLI"} diff --git a/tools/wta/locales/hr-HR.yml b/tools/wta/locales/hr-HR.yml index b9e096127e..5a2b7dda66 100644 --- a/tools/wta/locales/hr-HR.yml +++ b/tools/wta/locales/hr-HR.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Slike: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / naredbe " +delegate_picker.title: " Delegiraj odredište " +delegate_picker.tab: "Nova kartica" +delegate_picker.panel: "Nova ploča" +delegate_picker.intent_required: "Opišite posao koji delegirate." +delegate_picker.pane_not_allowed: "/delegate uvijek stvara novo odredište i ne prihvaća @pane." +delegate_picker.not_configured: "Nije konfiguriran nijedan delegirani agent." +delegate_picker.no_parent_pane: "Nije dostupno radno okno za dijeljenje." +delegate_picker.launch_failed: "Nije moguće pokrenuti delegata: %{error}" commands.help_title: " Pomoć " commands.help_header: "Naredbe s kosom crtom — upišite / u polje za unos." commands.help_escape_hint: " //text Pošalji doslovni '/' (zaobilazi raščlanjivač naredbi)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Ponovno pokreni agenta" commands.stop.summary: "Otkaži upit u tijeku" commands.sessions.summary: "Otvori birač prethodnih sesija (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Odaberite agent za ovu karticu (/agent za izravno prebacivanje)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pripremite zadatak i otvorite delegiranog agenta (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ za navigaciju • ← → za prebacivanje gumba • Enter za odabir • Esc za odustajanje)" recommendations.button_run_command: "[ Pokreni naredbu ]" +recommendations.button_send_to_delegate: "[ Pošalji delegatu ]" recommendations.button_insert_in_terminal: "Umetni u terminal" recommendations.button_open_in_new_tab: "Otvori u novoj kartici ↵" recommendations.button_open_in_new_panel: "Otvori u novom oknu ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Odabir %{choice} nije uspio: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Odaberi terminalsko okno (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nema dostupnih terminalnih okna za pisanje." +pane_picker.target_unavailable: "Odabrano okno više nije dostupno." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Odaberite agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Na ovom računalu nije pronađen nijedan dostupan CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/hu-HU.yml b/tools/wta/locales/hu-HU.yml index 34c43e0542..e822e87823 100644 --- a/tools/wta/locales/hu-HU.yml +++ b/tools/wta/locales/hu-HU.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Képek: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / parancsok " +delegate_picker.title: " Adja meg az úti célt " +delegate_picker.tab: "Új lap" +delegate_picker.panel: "Új panel" +delegate_picker.intent_required: "Írja le a delegálandó munkát." +delegate_picker.pane_not_allowed: "/delegate mindig új célt hoz létre, és nem fogadja el a @pane-t." +delegate_picker.not_configured: "Nincs delegált ügynök konfigurálva." +delegate_picker.no_parent_pane: "Nincs felosztható munkaablak." +delegate_picker.launch_failed: "Nem sikerült elindítani a delegált: %{error}" commands.help_title: " Súgó " commands.help_header: "Perjel parancsok — írja be a / karaktert a beviteli mezőbe." commands.help_escape_hint: " //text Szó szerinti '/' küldése (megkerüli a parancselemzőt)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Súgó bezárása" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ navigáláshoz • ← → gombok közötti váltáshoz • Enter kiválasztáshoz • Esc megszakításhoz)" recommendations.button_run_command: "[ Parancs futtatása ]" +recommendations.button_send_to_delegate: "[ Küldés a küldöttnek ]" recommendations.button_insert_in_terminal: "Beszúrás a terminálba" recommendations.button_open_in_new_tab: "Megnyitás új lapon ↵" recommendations.button_open_in_new_panel: "Megnyitás új panelen ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Ügynök újraindítása" commands.stop.summary: "Folyamatban lévő prompt megszakítása" commands.sessions.summary: "Előzménybeli munkamenetek választójának megnyitása (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Válassza ki a ügynökt ehhez a laphoz (/agent a közvetlen váltáshoz)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Feladat előkészítése és megbízott ügynök megnyitása (/delegate )" # ── Javaslat végrehajtása (src/coordinator.rs) ────────────────────────────── system.choice_execution_failed: "A(z) %{choice}. választás sikertelen: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Válassza ki a terminálpanelt (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nem állnak rendelkezésre írható terminálpanelek." +pane_picker.target_unavailable: "A kiválasztott panel már nem érhető el." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Ügynök kiválasztása (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nem található elérhető ügynök-CLI ezen a gépen." # {Locked="CLI"} diff --git a/tools/wta/locales/hy-AM.yml b/tools/wta/locales/hy-AM.yml index d2a2777a77..a0d5311dcb 100644 --- a/tools/wta/locales/hy-AM.yml +++ b/tools/wta/locales/hy-AM.yml @@ -64,6 +64,14 @@ input.image_attachments: "📎 Պատկերներ: %{items}" # {Locked="📎"," # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────────────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / հրամաններ " +delegate_picker.title: "Պատվիրակել նպատակակետը" +delegate_picker.tab: "Նոր ներդիր" +delegate_picker.panel: "Նոր վահանակ" +delegate_picker.intent_required: "Նկարագրեք հանձնարարված աշխատանքը:" +delegate_picker.pane_not_allowed: "/delegate-ը միշտ նոր նպատակակետ է ստեղծում և չի ընդունում @pane-ը:" +delegate_picker.not_configured: "Պատվիրակային գործակալ կազմաձևված չէ:" +delegate_picker.no_parent_pane: "Պառակտման համար աշխատանքային վահանակ չկա:" +delegate_picker.launch_failed: "Չհաջողվեց գործարկել պատվիրակին՝ %{error}" # Title bar of the slash-commands help popup commands.help_title: " Օգնություն " commands.help_header: "Slash հրամաններ — մուտքագրեք / մուտքի դաշտում։" @@ -82,11 +90,15 @@ commands.restart.summary: "Վերագործարկել ագենտը" commands.stop.summary: "Չեղարկել ընթացիկ հարցումը" commands.sessions.summary: "Բացել պատմական նիստերի ընտրիչը (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Ընտրեք գործակալն այս ներդիրի համար (/agent ՝ ուղղակիորեն փոխելու համար)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Պատրաստեք առաջադրանք և բացեք պատվիրակային գործակալ (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ───────────────────────────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ նավարկելու համար • ← → կոճակների միջև անցնելու համար • Enter ընտրելու համար • Esc չեղարկելու համար)" recommendations.button_run_command: "[ Գործարկել հրամանը ]" +recommendations.button_send_to_delegate: "[Ուղարկել պատվիրակին]" recommendations.button_insert_in_terminal: "Տեղադրել տերմինալում" recommendations.button_open_in_new_tab: "Բացել նոր ներդիրում ↵" recommendations.button_open_in_new_panel: "Բացել նոր վահանակում ↵" @@ -221,6 +233,11 @@ system.choice_execution_failed: "Ընտրությունը %{choice} ձախողվ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Ընտրեք տերմինալի վահանակ (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Գրավոր տերմինալային վահանակներ չկան:" +pane_picker.target_unavailable: "Ընտրված վահանակն այլևս հասանելի չէ:" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Ընտրեք գործակալը (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Այս սարքում հասանելի գործակալի CLI չի գտնվել:" # {Locked="CLI"} diff --git a/tools/wta/locales/id-ID.yml b/tools/wta/locales/id-ID.yml index 91338ac6b0..be3379d8aa 100644 --- a/tools/wta/locales/id-ID.yml +++ b/tools/wta/locales/id-ID.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Gambar: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / perintah " +delegate_picker.title: " Delegasikan tujuan " +delegate_picker.tab: "Tab baru" +delegate_picker.panel: "Panel baru" +delegate_picker.intent_required: "Jelaskan pekerjaan yang akan didelegasikan." +delegate_picker.pane_not_allowed: "/delegate selalu membuat tujuan baru dan tidak menerima @pane." +delegate_picker.not_configured: "Tidak ada agen delegasi yang dikonfigurasi." +delegate_picker.no_parent_pane: "Tidak ada panel kerja yang tersedia untuk dipisahkan." +delegate_picker.launch_failed: "Tidak dapat meluncurkan delegasi: %{error}" commands.help_title: " Bantuan " commands.help_header: "Perintah garis miring — ketik / di kotak input." commands.help_escape_hint: " //text Kirim '/' literal (melewati parser perintah)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Tutup bantuan ini" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ untuk navigasi • ← → untuk mengganti tindakan • Enter untuk memilih • Esc untuk membatalkan)" recommendations.button_run_command: "[ Jalankan perintah ]" +recommendations.button_send_to_delegate: " [Kirim ke delegasi ]" recommendations.button_insert_in_terminal: "Sisipkan di Terminal" recommendations.button_open_in_new_tab: "Buka di Tab Baru ↵" recommendations.button_open_in_new_panel: "Buka di Panel Baru ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Mulai ulang agen" commands.stop.summary: "Batalkan prompt yang sedang berjalan" commands.sessions.summary: "Buka pemilih sesi historis (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Pilih agent untuk tab ini (/agent untuk beralih langsung)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Siapkan tugas dan buka agen delegasi (/delegate )" # ── Eksekusi rekomendasi (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Pilihan %{choice} gagal: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Pilih panel terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Tidak ada panel terminal yang dapat ditulisi yang tersedia." +pane_picker.target_unavailable: "Panel yang dipilih tidak lagi tersedia." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Pilih agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Tidak ada CLI agen yang tersedia ditemukan di mesin ini." # {Locked="CLI"} diff --git a/tools/wta/locales/is-IS.yml b/tools/wta/locales/is-IS.yml index cffd22f222..2d17af0c74 100644 --- a/tools/wta/locales/is-IS.yml +++ b/tools/wta/locales/is-IS.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Myndir: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / skipanir " +delegate_picker.title: " Sendi áfangastað " +delegate_picker.tab: "Nýr flipi" +delegate_picker.panel: "Nýtt spjaldið" +delegate_picker.intent_required: "Lýstu vinnunni sem á að úthluta." +delegate_picker.pane_not_allowed: "/delegate býr alltaf til nýjan áfangastað og samþykkir ekki @pane." +delegate_picker.not_configured: "Enginn umboðsmaður er stilltur." +delegate_picker.no_parent_pane: "Enginn vinnugluggi er tiltækur til að skipta." +delegate_picker.launch_failed: "Gat ekki ræst fulltrúann: %{error}" commands.help_title: " Hjálp " commands.help_header: "Skástriksskipanir — sláðu / í inntaksreitinn." commands.help_escape_hint: " //text Sendu bókstaflegan '/' (sleppir skipanaþáttara)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Loka þessari hjálp" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ til að fletta • ← → til að skipta um hnappa • Enter til að velja • Esc til að hætta við)" recommendations.button_run_command: "[ Keyra skipun ]" +recommendations.button_send_to_delegate: "[ Senda til fulltrúa ]" recommendations.button_insert_in_terminal: "Setja inn í Terminal" recommendations.button_open_in_new_tab: "Opna í nýjum flipa ↵" recommendations.button_open_in_new_panel: "Opna í nýju spjaldi ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Veldu fulltrúaið fyrir þetta spjald (/agent til að skipta beint)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Undirbúa verkefni og opna umboðsmann (/delegate )" # ── Framkvæmd ráðleggingar (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Val %{choice} mistókst: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Veldu flugstöðvarrúðuna (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Engin skrifanleg flugstöð er tiltæk." +pane_picker.target_unavailable: "Valið svæði er ekki lengur tiltækt." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Veldu fulltrúa (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Enginn tiltækur CLI-fulltrúi fannst á þessari vél." # {Locked="CLI"} diff --git a/tools/wta/locales/it-IT.yml b/tools/wta/locales/it-IT.yml index 1dcb716442..3e401b1046 100644 --- a/tools/wta/locales/it-IT.yml +++ b/tools/wta/locales/it-IT.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Immagini: %{items}" # {Locked="📎","%{items}"} # ── Popup dei comandi (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefisso del comando slash, deve rimanere ASCII commands.popup_title: " / comandi " +delegate_picker.title: " Destinazione delegata " +delegate_picker.tab: "Nuova scheda" +delegate_picker.panel: "Nuovo pannello" +delegate_picker.intent_required: "Descrivi il lavoro da delegare." +delegate_picker.pane_not_allowed: "/delegate crea sempre una nuova destinazione e non accetta @pane." +delegate_picker.not_configured: "Nessun agente delegato configurato." +delegate_picker.no_parent_pane: "Nessun riquadro di lavoro disponibile per la divisione." +delegate_picker.launch_failed: "Impossibile avviare il delegato: %{error}" commands.help_title: " Guida " commands.help_header: "Comandi slash — digita / nella casella di input." commands.help_escape_hint: " //text Invia un '/' letterale (esce dal parser dei comandi)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Chiudi questa guida" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nomi dei tasti e glifo del tasto Invio, non tradurre recommendations.nav_hint: "(↑ ↓ per navigare • ← → per cambiare azione • Enter per selezionare • Esc per annullare)" recommendations.button_run_command: "[ Esegui comando ]" +recommendations.button_send_to_delegate: "[ Invia al delegato ]" recommendations.button_insert_in_terminal: "Inserisci nel terminale" recommendations.button_open_in_new_tab: "Apri in nuova scheda ↵" recommendations.button_open_in_new_panel: "Apri in nuovo pannello ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Riavvia agente" commands.stop.summary: "Annulla la richiesta in corso" commands.sessions.summary: "Apri il selettore delle sessioni storiche (Ctrl+Shift+/)" commands.agent.summary: "Scegli l'agente per questa scheda (/agent per cambiare direttamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Preparare un'attività e aprire un agente delegato (/delegate )" # ── Esecuzione della raccomandazione (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Scelta %{choice} non riuscita: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Seleziona riquadro terminale (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Non sono disponibili riquadri terminali scrivibili." +pane_picker.target_unavailable: "Il riquadro selezionato non è più disponibile." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Seleziona agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Non è stata trovata alcuna CLI dell'agente disponibile su questo computer." # {Locked="CLI"} diff --git a/tools/wta/locales/ja-JP.yml b/tools/wta/locales/ja-JP.yml index d354401c8f..c46a85fece 100644 --- a/tools/wta/locales/ja-JP.yml +++ b/tools/wta/locales/ja-JP.yml @@ -55,6 +55,14 @@ input.image_attachments: "📎 画像: %{items}" # {Locked="📎","%{items}"} # ── コマンド ポップアップ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - スラッシュ コマンド プレフィックス、ASCII のまま保持 commands.popup_title: " / コマンド " +delegate_picker.title: " デリゲート先 " +delegate_picker.tab: "新しいタブ" +delegate_picker.panel: "新しいパネル" +delegate_picker.intent_required: "委任する作業について説明します。" +delegate_picker.pane_not_allowed: "/delegate は常に新しい宛先を作成し、@pane を受け入れません。" +delegate_picker.not_configured: "代理エージェントが構成されていません。" +delegate_picker.no_parent_pane: "分割できる作業ペインがありません。" +delegate_picker.launch_failed: "デリゲートを起動できませんでした: %{error}" commands.help_title: " ヘルプ " commands.help_header: "スラッシュ コマンド — 入力ボックスに / を入力してください。" commands.help_escape_hint: " //text リテラル '/' を送信(コマンド パーサーをエスケープ)" # {Locked="//text","/"} @@ -64,6 +72,7 @@ commands.help_close_hint: " Esc このヘルプを閉じる" # {Locked= # {Locked="Enter","Esc","↵","↑","↓","←","→"} - キー名と Return キー グリフ、翻訳不要 recommendations.nav_hint: "(↑ ↓ で移動 • ← → でボタン切り替え • Enter で選択 • Esc でキャンセル)" recommendations.button_run_command: "[ コマンドを実行 ]" +recommendations.button_send_to_delegate: "[代理人に送信]" recommendations.button_insert_in_terminal: "ターミナルに挿入" recommendations.button_open_in_new_tab: "新しいタブで開く ↵" recommendations.button_open_in_new_panel: "新しいパネルで開く ↵" @@ -194,12 +203,20 @@ commands.restart.summary: "エージェントを再起動" commands.stop.summary: "実行中のプロンプトをキャンセル" commands.sessions.summary: "過去のセッション ピッカーを開く(Ctrl+Shift+/)" commands.agent.summary: "このタブのエージェントを選択(直接切り替えるには /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "タスクを準備し、代理エージェントを開きます (/delegate )" # ── 推奨事項の実行 (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "選択肢 %{choice} が失敗しました: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "端子ペインの選択 (↑ ↓ • Enter • Esc)" +pane_picker.empty: "書き込み可能なターミナル ペインはありません。" +pane_picker.target_unavailable: "選択したペインは使用できなくなりました。" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "エージェントを選択 (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "このマシンに利用可能なエージェント CLI が見つかりませんでした。" # {Locked="CLI"} diff --git a/tools/wta/locales/ka-GE.yml b/tools/wta/locales/ka-GE.yml index 1f5a4cb757..d93af62c71 100644 --- a/tools/wta/locales/ka-GE.yml +++ b/tools/wta/locales/ka-GE.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 სურათები: %{items}" # {Locked=" # ── ბრძანებების ამომხტარი (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - სლეშ-ბრძანების პრეფიქსი, უნდა დარჩეს ASCII commands.popup_title: " / ბრძანებები " +delegate_picker.title: "დანიშნულების ადგილის დელეგირება" +delegate_picker.tab: "ახალი ჩანართი" +delegate_picker.panel: "ახალი პანელი" +delegate_picker.intent_required: "აღწერეთ სამუშაოს დელეგირება." +delegate_picker.pane_not_allowed: "/delegate ყოველთვის ქმნის ახალ დანიშნულებას და არ იღებს @pane." +delegate_picker.not_configured: "დელეგატის აგენტი არ არის კონფიგურირებული." +delegate_picker.no_parent_pane: "სამუშაო პანელი არ არის ხელმისაწვდომი გასაყოფად." +delegate_picker.launch_failed: "დელეგატის გაშვება ვერ მოხერხდა: %{error}" commands.help_title: " დახმარება " commands.help_header: "სლეშ-ბრძანებები — აკრიფეთ / შეყვანის ველში." commands.help_escape_hint: " //text გაგზავნეთ პირდაპირი '/' (გაექცევა ბრძანებების ანალიზატორს)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "გადატვირთეთ აგენტი" commands.stop.summary: "მიმდინარე მოთხოვნის გაუქმება" commands.sessions.summary: "ისტორიული სესიების ამრჩევის გახსნა (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "აირჩიეთ აგენტი ამ ჩანართისთვის (/agent პირდაპირ გადასართავად)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "მოამზადეთ დავალება და გახსენით დელეგატის აგენტი (/delegate )" # ── რეკომენდაციების პანელი (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ღილაკების სახელები და Return ღილაკის გლიფი, არ ითარგმნება recommendations.nav_hint: "(↑ ↓ ნავიგაციისთვის • ← → ღილაკებს შორის გადასართავად • Enter არჩევისთვის • Esc გაუქმებისთვის)" recommendations.button_run_command: "[ ბრძანების გაშვება ]" +recommendations.button_send_to_delegate: "[გაგზავნა დელეგატთან]" recommendations.button_insert_in_terminal: "ჩასმა ტერმინალში" recommendations.button_open_in_new_tab: "ახალ ჩანართში გახსნა ↵" recommendations.button_open_in_new_panel: "ახალ პანელში გახსნა ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "არჩევანი %{choice} ვერ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "აირჩიეთ ტერმინალის პანელი (↑ ↓ • Enter • Esc)" +pane_picker.empty: "ჩასაწერი ტერმინალის პანელები არ არის ხელმისაწვდომი." +pane_picker.target_unavailable: "არჩეული პანელი აღარ არის ხელმისაწვდომი." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "აირჩიეთ აგენტი (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ამ კომპიუტერზე ხელმისაწვდომი აგენტის CLI ვერ მოიძებნა." # {Locked="CLI"} diff --git a/tools/wta/locales/kk-KZ.yml b/tools/wta/locales/kk-KZ.yml index 3495fe727c..9d66ce9900 100644 --- a/tools/wta/locales/kk-KZ.yml +++ b/tools/wta/locales/kk-KZ.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Суреттер: %{items}" # {Locked="📎","%{ # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / командалар " +delegate_picker.title: " Тағайындалған жерді тағайындау " +delegate_picker.tab: "Жаңа қойынды" +delegate_picker.panel: "Жаңа панель" +delegate_picker.intent_required: "Өкілетті жұмысты сипаттаңыз." +delegate_picker.pane_not_allowed: "/delegate әрқашан жаңа тағайындау жасайды және @pane қабылдамайды." +delegate_picker.not_configured: "Ешбір делегат агенті конфигурацияланбаған." +delegate_picker.no_parent_pane: "Бөлуге ешбір жұмыс аймағы қолжетімді емес." +delegate_picker.launch_failed: "Өкілді іске қосу мүмкін болмады: %{error}" commands.help_title: " Көмек " commands.help_header: "Слэш командалары — енгізу жолағына / теріңіз." commands.help_escape_hint: " //text Тура мағынадағы '/' жіберу (команда анализаторын айналып өту)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "Агентті қайта іске қосу" commands.stop.summary: "Орындалып жатқан сұраудан бас тарту" commands.sessions.summary: "Тарихи сеанстар таңдағышын ашу (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Осы панель үшін агентді таңдаңыз (тікелей ауыстыру үшін /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Тапсырманы дайындаңыз және өкіл агентін ашыңыз (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ шарлау үшін • ← → түймелер арасында ауысу үшін • Enter таңдау үшін • Esc бас тарту үшін)" recommendations.button_run_command: "[ Команданы іске қосу ]" +recommendations.button_send_to_delegate: "[ Өкілге жіберу ]" recommendations.button_insert_in_terminal: "Terminal-ға кірістіру" recommendations.button_open_in_new_tab: "Жаңа қойындыда ашу ↵" recommendations.button_open_in_new_panel: "Жаңа панельде ашу ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "%{choice} таңдауы сәтсіз аяқт # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Терминал тақтасын таңдау (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Жазылатын терминал тақталары қолжетімді емес." +pane_picker.target_unavailable: "Таңдалған аумақ енді қолжетімді емес." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Агентді таңдаңыз (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Бұл компьютерде қолжетімді агент CLI табылмады." # {Locked="CLI"} diff --git a/tools/wta/locales/km-KH.yml b/tools/wta/locales/km-KH.yml index 13da712ac3..0d09fa56da 100644 --- a/tools/wta/locales/km-KH.yml +++ b/tools/wta/locales/km-KH.yml @@ -64,6 +64,14 @@ input.image_attachments: "📎 រូបភាព: %{items}" # {Locked="📎"," # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────────────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / ពាក្យបញ្ជា " +delegate_picker.title: " ទិសដៅតំណាង " +delegate_picker.tab: "ផ្ទាំងថ្មី។" +delegate_picker.panel: "បន្ទះថ្មី។" +delegate_picker.intent_required: "ពណ៌នាអំពីការងារដែលត្រូវផ្ទេរសិទ្ធិ។" +delegate_picker.pane_not_allowed: "/delegate តែងតែបង្កើតទិសដៅថ្មី ហើយមិនទទួលយក @pane ទេ។" +delegate_picker.not_configured: "គ្មានភ្នាក់ងារតំណាងណាមួយត្រូវបានកំណត់រចនាសម្ព័ន្ធទេ។" +delegate_picker.no_parent_pane: "មិនមានផ្ទាំងការងារដែលអាចបំបែកបានទេ។" +delegate_picker.launch_failed: "មិនអាចបើកដំណើរការប្រតិភូ៖ %{error}" # Title bar of the slash-commands help popup commands.help_title: " ជំនួយ " commands.help_header: "ពាក្យបញ្ជាស្លាស — វាយ / នៅក្នុងប្រអប់បញ្ចូល។" @@ -74,6 +82,7 @@ commands.help_close_hint: " Esc បិទជំនួយនេះ" # {L # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ ដើម្បីរុករក • ← → ដើម្បីប្ដូរសកម្មភាព • Enter ដើម្បីជ្រើសរើស • Esc ដើម្បីបោះបង់)" recommendations.button_run_command: "[ ដំណើរការពាក្យបញ្ជា ]" +recommendations.button_send_to_delegate: "[ ផ្ញើទៅកាន់ប្រតិភូ ]" recommendations.button_insert_in_terminal: "បញ្ចូលក្នុង Terminal" recommendations.button_open_in_new_tab: "បើកក្នុងផ្ទាំងថ្មី ↵" recommendations.button_open_in_new_panel: "បើកក្នុងផ្តាំងថ្មី ↵" @@ -215,12 +224,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ជ្រើសរើសភ្នាក់ងារសម្រាប់ផ្តាំងនេះ (/agent ដើម្បីប្តូរដោយផ្ទាល់)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "រៀបចំកិច្ចការមួយ ហើយបើកភ្នាក់ងារតំណាង (/delegate )" # ── ការអនុវត្តអនុសាសន៍ (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "ជម្រើស %{choice} បានបរាជ័យ: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ជ្រើសរើសផ្ទាំងស្ថានីយ (↑ ↓ • Enter • Esc)" +pane_picker.empty: "មិនមានផ្ទាំងស្ថានីយដែលអាចសរសេរបានទេ។" +pane_picker.target_unavailable: "ផ្ទាំងដែលបានជ្រើសរើសលែងមានទៀតហើយ។" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ជ្រើសរើសភ្នាក់ងារ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "រកមិនឃើញ CLI ភ្នាក់ងារដែលមាននៅលើម៉ាស៊ីននេះទេ។" # {Locked="CLI"} diff --git a/tools/wta/locales/kn-IN.yml b/tools/wta/locales/kn-IN.yml index f9528ce5a9..b34ae94b5c 100644 --- a/tools/wta/locales/kn-IN.yml +++ b/tools/wta/locales/kn-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 ಚಿತ್ರಗಳು: %{items}" # {Locked=" # ── ಕಮಾಂಡ್ ಪಾಪ್‌ಅಪ್ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - ಸ್ಲಾಶ್-ಕಮಾಂಡ್ ಪೂರ್ವಪ್ರತ್ಯಯ, ASCII ಆಗಿರಬೇಕು commands.popup_title: " / ಕಮಾಂಡ್‌ಗಳು " +delegate_picker.title: " ಡೆಲಿಗೇಟ್ ಗಮ್ಯಸ್ಥಾನ " +delegate_picker.tab: "ಹೊಸ ಟ್ಯಾಬ್" +delegate_picker.panel: "ಹೊಸ ಫಲಕ" +delegate_picker.intent_required: "ನಿಯೋಜಿತ ಕೆಲಸವನ್ನು ವಿವರಿಸಿ." +delegate_picker.pane_not_allowed: "/delegate ಯಾವಾಗಲೂ ಹೊಸ ಗಮ್ಯಸ್ಥಾನವನ್ನು ರಚಿಸುತ್ತದೆ ಮತ್ತು @pane ಅನ್ನು ಸ್ವೀಕರಿಸುವುದಿಲ್ಲ." +delegate_picker.not_configured: "ಯಾವುದೇ ಪ್ರತಿನಿಧಿ ಏಜೆಂಟ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿಲ್ಲ." +delegate_picker.no_parent_pane: "ವಿಭಜಿಸಲು ಯಾವುದೇ ಕೆಲಸದ ಫಲಕ ಲಭ್ಯವಿಲ್ಲ." +delegate_picker.launch_failed: "ಪ್ರತಿನಿಧಿಯನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗಲಿಲ್ಲ: %{error}" commands.help_title: " ಸಹಾಯ " commands.help_header: "ಸ್ಲಾಶ್ ಕಮಾಂಡ್‌ಗಳು — ಇನ್‌ಪುಟ್ ಬಾಕ್ಸ್‌ನಲ್ಲಿ / ಟೈಪ್ ಮಾಡಿ." commands.help_escape_hint: " //text ಅಕ್ಷರಶಃ '/' ಕಳುಹಿಸಿ (ಕಮಾಂಡ್ ಪಾರ್ಸರ್ ಅನ್ನು ಎಸ್ಕೇಪ್ ಮಾಡುತ್ತದೆ)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ಏಜೆಂಟ್ ಮರುಪ್ರಾರಂಭಿ commands.stop.summary: "ಚಾಲನೆಯಲ್ಲಿರುವ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ರದ್ದುಮಾಡಿ" commands.sessions.summary: "ಹಿಂದಿನ ಸೆಷನ್‌ಗಳ ಪಿಕರ್ ತೆರೆಯಿರಿ (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ಈ ಟ್ಯಾಬ್‌ಗಾಗಿ ಏಜೆಂಟ್ಯನ್ನು ಆಯ್ಕೆಮಾಡಿ (ನೇರವಾಗಿ ಬದಲಾಯಿಸಲು /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ಕಾರ್ಯವನ್ನು ತಯಾರಿಸಿ ಮತ್ತು ಪ್ರತಿನಿಧಿ ಏಜೆಂಟ್ ಅನ್ನು ತೆರೆಯಿರಿ (/delegate )" # ── ಶಿಫಾರಸುಗಳ ಪ್ಯಾನೆಲ್ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ಕೀ ಹೆಸರುಗಳು ಮತ್ತು Return-ಕೀ ಗ್ಲಿಫ್, ಅನುವಾದಿಸಬೇಡಿ recommendations.nav_hint: "(↑ ↓ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು • ← → ಬಟನ್‌ಗಳನ್ನು ಬದಲಿಸಲು • Enter ಆಯ್ಕೆಮಾಡಲು • Esc ರದ್ದುಗೊಳಿಸಲು)" recommendations.button_run_command: "[ ಕಮಾಂಡ್ ರನ್ ಮಾಡಿ ]" +recommendations.button_send_to_delegate: "[ ಪ್ರತಿನಿಧಿಗೆ ಕಳುಹಿಸಿ ]" recommendations.button_insert_in_terminal: "ಟರ್ಮಿನಲ್‌ನಲ್ಲಿ ಸೇರಿಸಿ" recommendations.button_open_in_new_tab: "ಹೊಸ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ ↵" recommendations.button_open_in_new_panel: "ಹೊಸ ಪ್ಯಾನೆಲ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "ಆಯ್ಕೆ %{choice} ವಿಫಲವಾಗ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ಟರ್ಮಿನಲ್ ಪೇನ್ ಆಯ್ಕೆಮಾಡಿ (↑ ↓ • Enter • Esc)" +pane_picker.empty: "ಬರೆಯಬಹುದಾದ ಟರ್ಮಿನಲ್ ಫಲಕಗಳು ಲಭ್ಯವಿಲ್ಲ." +pane_picker.target_unavailable: "ಆಯ್ಕೆ ಮಾಡಿದ ಫಲಕವು ಇನ್ನು ಮುಂದೆ ಲಭ್ಯವಿರುವುದಿಲ್ಲ." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ಏಜೆಂಟ್ ಆಯ್ಕೆಮಾಡಿ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ಈ ಯಂತ್ರದಲ್ಲಿ ಯಾವುದೇ ಲಭ್ಯವಿರುವ ಏಜೆಂಟ್ CLI ಕಂಡುಬಂದಿಲ್ಲ." # {Locked="CLI"} diff --git a/tools/wta/locales/ko-KR.yml b/tools/wta/locales/ko-KR.yml index 01006ec2d5..0875712750 100644 --- a/tools/wta/locales/ko-KR.yml +++ b/tools/wta/locales/ko-KR.yml @@ -55,6 +55,14 @@ input.image_attachments: "📎 이미지: %{items}" # {Locked="📎","%{items}" # ── 명령어 팝업 (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - 슬래시 명령 접두사, ASCII로 유지 commands.popup_title: " / 명령어 " +delegate_picker.title: " 위임 대상 " +delegate_picker.tab: "새 탭" +delegate_picker.panel: "새 패널" +delegate_picker.intent_required: "위임할 업무를 설명합니다." +delegate_picker.pane_not_allowed: "/delegate은 항상 새 대상을 생성하고 @pane을 허용하지 않습니다." +delegate_picker.not_configured: "위임 에이전트가 구성되지 않았습니다." +delegate_picker.no_parent_pane: "분할할 수 있는 작업 창이 없습니다." +delegate_picker.launch_failed: "대리자를 시작할 수 없습니다: %{error}" commands.help_title: " 도움말 " commands.help_header: "슬래시 명령어 — 입력 상자에 /를 입력하세요." commands.help_escape_hint: " //text 리터럴 '/' 전송(명령 파서 이스케이프)" # {Locked="//text","/"} @@ -64,6 +72,7 @@ commands.help_close_hint: " Esc 이 도움말 닫기" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - 키 이름과 Return 키 문자, 번역하지 마세요 recommendations.nav_hint: "(↑ ↓ 탐색 • ← → 버튼 전환 • Enter 선택 • Esc 취소)" recommendations.button_run_command: "[ 명령 실행 ]" +recommendations.button_send_to_delegate: "[ 대리인에게 보내기 ]" recommendations.button_insert_in_terminal: "터미널에 삽입" recommendations.button_open_in_new_tab: "새 탭에서 열기 ↵" recommendations.button_open_in_new_panel: "새 패널에서 열기 ↵" @@ -194,12 +203,20 @@ commands.restart.summary: "에이전트 다시 시작" commands.stop.summary: "진행 중인 프롬프트 취소" commands.sessions.summary: "기록된 세션 선택기 열기(Ctrl+Shift+/)" commands.agent.summary: "이 탭의 에이전트 선택 (/agent 로 바로 전환)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "작업 준비 및 위임 에이전트 열기(/delegate )" # ── 추천 실행 (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "선택 %{choice} 실패: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "터미널 창 선택(↑ ↓ • Enter • Esc)" +pane_picker.empty: "쓰기 가능한 터미널 창을 사용할 수 없습니다." +pane_picker.target_unavailable: "선택한 창은 더 이상 사용할 수 없습니다." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "에이전트 선택 (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "이 컴퓨터에서 사용할 수 있는 에이전트 CLI를 찾을 수 없습니다." # {Locked="CLI"} diff --git a/tools/wta/locales/kok-IN.yml b/tools/wta/locales/kok-IN.yml index 108a9f10af..c43a3b0f94 100644 --- a/tools/wta/locales/kok-IN.yml +++ b/tools/wta/locales/kok-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 प्रतिमा: %{items}" # {Locked="📎 # ── कमांड पॉपअप (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - स्लॅश-कमांड उपसर्ग, ASCII आसचें आवश्यक commands.popup_title: " / कमांड " +delegate_picker.title: " प्रतिनिधी गंतव्य " +delegate_picker.tab: "नवो टॅब" +delegate_picker.panel: "नवें पॅनल" +delegate_picker.intent_required: "प्रत्यायित करपाच्या कामाचे वर्णन करात." +delegate_picker.pane_not_allowed: "/delegate सदांच नवे गंतव्य तयार करता आनी @pane स्वीकारना." +delegate_picker.not_configured: "खंयचोच प्रतिनिधी एजंट संरचीत केल्लो ना." +delegate_picker.no_parent_pane: "विभाजन करपाक खंयचोच काम करपी फलक उपलब्ध ना." +delegate_picker.launch_failed: "प्रतिनिधी सुरू करूंक शकलो ना: %{error}" commands.help_title: " मजत " commands.help_header: "स्लॅश कमांड — इनपुट बॉक्सांत / टायप करात." commands.help_escape_hint: " //text शाब्दिक '/' धाडात (कमांड पार्सर एस्केप करता)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "एजंट परत सुरू करात" commands.stop.summary: "चालू आशिल्लो प्रॉम्प्ट रद्द करात" commands.sessions.summary: "इतिहासीक सत्र पिकर उगडात (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ह्या पेना खातीर एजंट निवडात (थेट बदलपाक /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "एक कार्य तयार करात आनी एक प्रतिनिधी एजंट उगडात (/delegate )" # ── शिफारस पॅनेल (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - की नांवां आनी Return-की ग्लिफ, अणकार करूं नाका recommendations.nav_hint: "(↑ ↓ नेव्हिगेट करपाक • ← → बटणां बदलपाक • Enter निवडपाक • Esc रद्द करपाक)" recommendations.button_run_command: "[ कमांड चलयात ]" +recommendations.button_send_to_delegate: "[ प्रतिनिधीक धाडचें ]" recommendations.button_insert_in_terminal: "टर्मिनलांत घालात" recommendations.button_open_in_new_tab: "नव्या टॅबांत उगडात ↵" recommendations.button_open_in_new_panel: "नव्या पॅनेलांत उगडात ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "निवड %{choice} अपेसली: %{er # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "टर्मिनल फलक निवडात (↑ ↓ • Enter • Esc)" +pane_picker.empty: "बरोवपाक येवपी टर्मिनल फलक उपलब्ध नात." +pane_picker.target_unavailable: "निवडिल्लें फलक आतां उपलब्ध ना." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "एजंट निवडात (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ह्या मशीनार खंयचोच उपलब्ध एजंट CLI मेळूंक ना." # {Locked="CLI"} diff --git a/tools/wta/locales/lb-LU.yml b/tools/wta/locales/lb-LU.yml index 76fc7a6b00..c152df25ce 100644 --- a/tools/wta/locales/lb-LU.yml +++ b/tools/wta/locales/lb-LU.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Biller: %{items}" # {Locked="📎","%{items}"} # ── Kommando-Popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - Schrägstréch-Kommando-Prefix, muss ASCII bleiwen commands.popup_title: " / Kommandoen " +delegate_picker.title: " Delegéiert Destinatioun " +delegate_picker.tab: "Neien Tab" +delegate_picker.panel: "Nei Panel" +delegate_picker.intent_required: "Beschreift d'Aarbecht fir ze delegéieren." +delegate_picker.pane_not_allowed: "/delegate erstellt ëmmer eng nei Destinatioun an akzeptéiert net @pane." +delegate_picker.not_configured: "Keen Delegéierten Agent ass konfiguréiert." +delegate_picker.no_parent_pane: "Keng Aarbechtsfenster ass verfügbar fir ze splécken." +delegate_picker.launch_failed: "Konnt den Delegéierten net starten: %{error}" commands.help_title: " Hëllef " commands.help_header: "Schrägstréch-Kommandoen — tippt / an d'Inputfeld." commands.help_escape_hint: " //text Schéckt e literale '/' (escapéiert de Kommando-Parser)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Dës Hëllef zoumaachen" # {Locked="Esc # {Locked="Enter","Esc","↵","↑","↓","←","→"} - Schlësselnimm an Enter-Tast-Glyph, net iwwersetzen recommendations.nav_hint: "(↑ ↓ fir ze navigéieren • ← → fir Knäppercher ze wiesselen • Enter fir auszewielen • Esc fir ofzebriechen)" recommendations.button_run_command: "[ Kommando ausféieren ]" +recommendations.button_send_to_delegate: "[ Schéckt un den Delegéierten ]" recommendations.button_insert_in_terminal: "An den Terminal asetzen" recommendations.button_open_in_new_tab: "An engem neien Tab opmaachen ↵" recommendations.button_open_in_new_panel: "An engem neie Panell opmaachen ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Wielt de Agent fir dës Panell (/agent fir direkt ze wiesselen)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Bereet eng Aufgab vir an oppen en Delegéierten Agent (/delegate )" # ── Ausféierung vun der Recommandatioun (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Wiel %{choice} ass feelgeschloen: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminal Panel auswielen (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Keng schreiwenbare Terminalpanele si verfügbar." +pane_picker.target_unavailable: "Déi gewielte Fënster ass net méi verfügbar." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agent auswielen (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Et gouf kee verfügbaren Agent-CLI op dësem Computer fonnt." # {Locked="CLI"} diff --git a/tools/wta/locales/lo-LA.yml b/tools/wta/locales/lo-LA.yml index 10ca14fe0c..8444b5a19f 100644 --- a/tools/wta/locales/lo-LA.yml +++ b/tools/wta/locales/lo-LA.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 ຮູບພາບ: %{items}" # {Locked="%{items # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / commands " +delegate_picker.title: " ຕົວແທນປາຍທາງ " +delegate_picker.tab: "ແຖບໃໝ່" +delegate_picker.panel: "ແຜງໃໝ່" +delegate_picker.intent_required: "ອະທິບາຍວຽກເພື່ອມອບໝາຍ." +delegate_picker.pane_not_allowed: "/delegate ສ້າງປາຍທາງໃໝ່ສະເໝີ ແລະບໍ່ຍອມຮັບ @pane." +delegate_picker.not_configured: "ບໍ່ມີການກຳນົດຄ່າຕົວແທນຜູ້ແທນ." +delegate_picker.no_parent_pane: "ບໍ່ມີແຖບເຮັດວຽກທີ່ສາມາດແຍກໄດ້." +delegate_picker.launch_failed: "ບໍ່ສາມາດເປີດຕົວຜູ້ແທນໄດ້: %{error}" commands.help_title: " Help " commands.help_header: "Slash commands — type / in the input box." commands.help_escape_hint: " //text Send a literal '/' (escapes the command parser)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Close this help" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ to navigate • ← → ສະຫຼັບການກະທຳ • Enter to select • Esc to cancel)" recommendations.button_run_command: "[ Run command ]" +recommendations.button_send_to_delegate: "[ ສົ່ງໃຫ້ຜູ້ແທນ ]" recommendations.button_insert_in_terminal: "Insert in Terminal" recommendations.button_open_in_new_tab: "Open in New Tab ↵" recommendations.button_open_in_new_panel: "Open in New Panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ເລືອກຕົວແທນສຳລັບ pane ນີ້ (/agent ເພື່ອປ່ຽນໂດຍກົງ)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ກະກຽມໜ້າວຽກ ແລະເປີດຕົວແທນ (/delegate )" # ── ການດຳເນີນການຄຳແນະນຳ (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "ຕົວເລືອກ %{choice} ລົ້ມເຫຼວ: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ເລືອກ terminal pane (↑ ↓ • Enter • Esc)" +pane_picker.empty: "ບໍ່ມີແຖບເຄື່ອງຂຽນທີ່ສາມາດໃຊ້ໄດ້." +pane_picker.target_unavailable: "ແຖບທີ່ເລືອກບໍ່ສາມາດໃຊ້ໄດ້ອີກຕໍ່ໄປ." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ເລືອກຕົວແທນ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ບໍ່ພົບ CLI ຕົວແທນທີ່ມີຢູ່ໃນເຄື່ອງນີ້." # {Locked="CLI"} diff --git a/tools/wta/locales/lt-LT.yml b/tools/wta/locales/lt-LT.yml index f7372381a9..498c4f5bf8 100644 --- a/tools/wta/locales/lt-LT.yml +++ b/tools/wta/locales/lt-LT.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Vaizdai: %{items}" # {Locked="%{items}"} {Locked # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komandos " +delegate_picker.title: " Perduoti kelionės tikslą " +delegate_picker.tab: "Naujas skirtukas" +delegate_picker.panel: "Naujas skydelis" +delegate_picker.intent_required: "Apibūdinkite deleguojamą darbą." +delegate_picker.pane_not_allowed: "/delegate visada sukuria naują paskirties vietą ir nepriima @pane." +delegate_picker.not_configured: "Nesukonfigūruotas įgaliotasis agentas." +delegate_picker.no_parent_pane: "Nėra darbo srities, kurią būtų galima padalinti." +delegate_picker.launch_failed: "Nepavyko paleisti įgaliotinio: %{error}" commands.help_title: " Pagalba " commands.help_header: "Pasvirojo brūkšnio komandos — įveskite / įvesties lauke." commands.help_escape_hint: " //text Siųsti tiesioginį '/' (apeina komandų analizatorių)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Uždaryti šią pagalbą" # {Locked="Es # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ naršyti • ← → mygtukams perjungti • Enter pasirinkti • Esc atšaukti)" recommendations.button_run_command: "[ Vykdyti komandą ]" +recommendations.button_send_to_delegate: "[ Siųsti įgaliotiniui ]" recommendations.button_insert_in_terminal: "Įterpti į Terminal" recommendations.button_open_in_new_tab: "Atidaryti naujame skirtuke ↵" recommendations.button_open_in_new_panel: "Atidaryti naujame skydelyje ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Pasirinkite šios srities agentą (/agent norėdami perjungti tiesiogiai)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Paruoškite užduotį ir atidarykite įgaliotąjį agentą (/delegate )" # ── Rekomendacijos vykdymas (src/coordinator.rs) ──────────────────────────── system.choice_execution_failed: "Pasirinkimas %{choice} nepavyko: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Pasirinkite terminalo sritį (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nėra jokių įrašomų terminalų skydelių." +pane_picker.target_unavailable: "Pasirinkta sritis nebepasiekiama." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Pasirinkite agentą (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Šiame kompiuteryje nerasta pasiekiama agento CLI." # {Locked="CLI"} diff --git a/tools/wta/locales/lv-LV.yml b/tools/wta/locales/lv-LV.yml index 7b608f5dda..4af862bd74 100644 --- a/tools/wta/locales/lv-LV.yml +++ b/tools/wta/locales/lv-LV.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Attēli: %{items}" # {Locked="%{items}"} {Locked # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komandas " +delegate_picker.title: " Deleģēt galamērķi " +delegate_picker.tab: "Jauna cilne" +delegate_picker.panel: "Jauns panelis" +delegate_picker.intent_required: "Aprakstiet deleģējamo darbu." +delegate_picker.pane_not_allowed: "/delegate vienmēr izveido jaunu galamērķi un nepieņem @pane." +delegate_picker.not_configured: "Nav konfigurēts neviens pilnvarotais aģents." +delegate_picker.no_parent_pane: "Nav pieejama neviena darba rūts, ko sadalīt." +delegate_picker.launch_failed: "Nevarēja palaist delegātu: %{error}" commands.help_title: " Palīdzība " commands.help_header: "Slīpsvītras komandas — ierakstiet / ievades laukā." commands.help_escape_hint: " //text Nosūtīt burtisku '/' (apiet komandu parsētāju)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Aizvērt šo palīdzību" # {Locked="Es # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ lai pārvietotos • ← → lai pārslēgtu pogas • Enter lai izvēlētos • Esc lai atceltu)" recommendations.button_run_command: "[ Izpildīt komandu ]" +recommendations.button_send_to_delegate: "[ Sūtīt deleģētajam ]" recommendations.button_insert_in_terminal: "Ievietot terminālī" recommendations.button_open_in_new_tab: "Atvērt jaunā cilnē ↵" recommendations.button_open_in_new_panel: "Atvērt jaunā panelī ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Izvēlieties šīs rūts aģentu (/agent , lai pārslēgtu tieši)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Sagatavojiet uzdevumu un atveriet pilnvaroto aģentu (/delegate )" # ── Ieteikuma izpilde (src/coordinator.rs) ────────────────────────────────── system.choice_execution_failed: "Izvēle %{choice} neizdevās: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Atlasīt termināļa rūti (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nav pieejami rakstāmie termināļi." +pane_picker.target_unavailable: "Atlasītā rūts vairs nav pieejama." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Izvēlieties aģentu (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Šajā datorā netika atrasts neviens pieejams aģenta CLI." # {Locked="CLI"} diff --git a/tools/wta/locales/mi-NZ.yml b/tools/wta/locales/mi-NZ.yml index 308cfe840a..da7531ffe7 100644 --- a/tools/wta/locales/mi-NZ.yml +++ b/tools/wta/locales/mi-NZ.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Ngā atahanga: %{items}" # {Locked="%{items}"} { # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / whakahau " +delegate_picker.title: " Tukuna te haerenga " +delegate_picker.tab: "Ripa hou" +delegate_picker.panel: "Pawhiri hou" +delegate_picker.intent_required: "Whakaahuahia nga mahi hei tuku." +delegate_picker.pane_not_allowed: "Ka hanga e /delegate he waahi hou kaore e whakaae ki a @pane." +delegate_picker.not_configured: "Karekau he kaihoko kaikawe i whirihora." +delegate_picker.no_parent_pane: "Karekau he pihanga mahi e waatea ana hei wehe." +delegate_picker.launch_failed: "Kaore i taea te whakarewa i te kaikawe: %{error}" commands.help_title: " Awhina " commands.help_header: "Whakahau riipene — patohia / ki te pouaka tauuru." commands.help_escape_hint: " //text Tukua he '/' tuturu (whakaorangia te kaiwetewete whakahau)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Katia tenei awhina" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ ki te whakatere • ← → ki te whakawhiti pātene • Enter ki te whiriwhiri • Esc ki te whakakore)" recommendations.button_run_command: "[ Whakahautia te whakahau ]" +recommendations.button_send_to_delegate: "[ Tukuna ki te kaikawe ]" recommendations.button_insert_in_terminal: "Whakauruhia ki te Teirminara" recommendations.button_open_in_new_tab: "Whakatuwherahia i te Ripa Hou ↵" recommendations.button_open_in_new_panel: "Whakatuwherahia i te Papa Hou ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Kōwhiria te māngai mō tēnei papa (/agent ki te huri tika)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Whakaritea he mahi ka whakatuwheratia he kaihoko kaitakawaenga (/delegate )" # ── Whakahaere tūtohutanga (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "I rahua te kōwhiringa %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Tīpakohia te pihanga kāpeka (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Karekau he pihanga kapeka tuhi e waatea ana." +pane_picker.target_unavailable: "Ko te pihanga kua tohua kua kore e waatea." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Kōwhiria te māngai (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Kāore i kitea he CLI māngai wātea i runga i tēnei mihini." # {Locked="CLI"} diff --git a/tools/wta/locales/mk-MK.yml b/tools/wta/locales/mk-MK.yml index 6126cd9b6d..723d342070 100644 --- a/tools/wta/locales/mk-MK.yml +++ b/tools/wta/locales/mk-MK.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Слики: %{items}" # {Locked="%{items}"} {Loc # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / команди " +delegate_picker.title: "Делегирајте дестинација" +delegate_picker.tab: "Ново јазиче" +delegate_picker.panel: "Нов панел" +delegate_picker.intent_required: "Опишете ја работата што треба да ја делегирате." +delegate_picker.pane_not_allowed: "/delegate секогаш создава нова дестинација и не прифаќа @pane." +delegate_picker.not_configured: "Не е конфигуриран агент за делегирање." +delegate_picker.no_parent_pane: "Не е достапно работно окно за разделување." +delegate_picker.launch_failed: "Не може да се стартува делегатот: %{error}" commands.help_title: " Помош " commands.help_header: "Команди со коса црта — внесете / во полето за внес." commands.help_escape_hint: " //text Испрати буквално '/' (ги заобиколува анализаторот на команди)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Рестартирај го агентот" commands.stop.summary: "Откажи го тековното барање" commands.sessions.summary: "Отвори избирач на претходни сесии (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Изберете го агентот за овој панел (/agent за директно префрлување)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Подгответе задача и отворете агент за делегирање (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ за навигација • ← → за префрлување копчиња • Enter за избор • Esc за откажување)" recommendations.button_run_command: "[ Изврши команда ]" +recommendations.button_send_to_delegate: "[Испрати до делегат]" recommendations.button_insert_in_terminal: "Вметни во Terminal" recommendations.button_open_in_new_tab: "Отвори во ново јазиче ↵" recommendations.button_open_in_new_panel: "Отвори во нов панел ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Изборот %{choice} не успеа: %{err # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Изберете го терминалот (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Не се достапни приклучни панели со можност за запишување." +pane_picker.target_unavailable: "Избраното окно повеќе не е достапно." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Изберете агент (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "На овој компјутер не е пронајден достапен CLI на агент." # {Locked="CLI"} diff --git a/tools/wta/locales/ml-IN.yml b/tools/wta/locales/ml-IN.yml index d7c2a1a8e1..05b4e0220e 100644 --- a/tools/wta/locales/ml-IN.yml +++ b/tools/wta/locales/ml-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 ചിത്രങ്ങൾ: %{items}" # {Locked # ── കമാന്‍ഡ് പോപ്പ്അപ്പ് (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - സ്ലാഷ്-കമാന്‍ഡ് പ്രിഫിക്സ്, ASCII ആയിരിക്കണം commands.popup_title: " / കമാന്‍ഡുകള്‍ " +delegate_picker.title: " ഡെലിഗേറ്റ് ഡെസ്റ്റിനേഷൻ " +delegate_picker.tab: "പുതിയ ടാബ്" +delegate_picker.panel: "പുതിയ പാനൽ" +delegate_picker.intent_required: "നിയോഗിക്കേണ്ട ജോലി വിവരിക്കുക." +delegate_picker.pane_not_allowed: "/delegate എല്ലായ്‌പ്പോഴും ഒരു പുതിയ ലക്ഷ്യസ്ഥാനം സൃഷ്‌ടിക്കുന്നു, @pane അംഗീകരിക്കുന്നില്ല." +delegate_picker.not_configured: "പ്രതിനിധി ഏജൻ്റൊന്നും കോൺഫിഗർ ചെയ്തിട്ടില്ല." +delegate_picker.no_parent_pane: "വിഭജിക്കാൻ പ്രവർത്തിക്കുന്ന പാളികളൊന്നും ലഭ്യമല്ല." +delegate_picker.launch_failed: "പ്രതിനിധിയെ സമാരംഭിക്കാനായില്ല: %{error}" commands.help_title: " സഹായം " commands.help_header: "സ്ലാഷ് കമാന്‍ഡുകള്‍ — ഇന്‍പുട്ട് ബോക്സില്‍ / ടൈപ്പ് ചെയ്യുക." commands.help_escape_hint: " //text അക്ഷരാര്‍ഥ '/' അയയ്ക്കുക (കമാന്‍ഡ് പാര്‍സര്‍ എസ്കേപ്പ് ചെയ്യുന്നു)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ഏജന്റ് റീസ്റ്റാർട് commands.stop.summary: "നടന്നുകൊണ്ടിരിക്കുന്ന പ്രോംപ്റ്റ് റദ്ദാക്കുക" commands.sessions.summary: "ചരിത്ര സെഷനുകളുടെ പിക്കർ തുറക്കുക (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ഈ ടാബിനായി ഏജന്റ് തിരഞ്ഞെടുക്കുക (നേരിട്ട് മാറാൻ /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ഒരു ടാസ്‌ക് തയ്യാറാക്കി ഒരു ഡെലിഗേറ്റ് ഏജൻ്റ് തുറക്കുക (/delegate )" # ── ശുപാര്‍ശ പാനല്‍ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - കീ പേരുകളും Return-കീ ഗ്ലിഫും, വിവര്‍ത്തനം ചെയ്യരുത് recommendations.nav_hint: "(↑ ↓ നാവിഗേറ്റ് ചെയ്യാൻ • ← → ബട്ടണുകൾ മാറ്റാൻ • Enter തിരഞ്ഞെടുക്കാൻ • Esc റദ്ദാക്കാൻ)" recommendations.button_run_command: "[ കമാന്‍ഡ് പ്രവര്‍ത്തിപ്പിക്കുക ]" +recommendations.button_send_to_delegate: "[ പ്രതിനിധിക്ക് അയയ്‌ക്കുക ]" recommendations.button_insert_in_terminal: "ടെര്‍മിനലില്‍ ചേര്‍ക്കുക" recommendations.button_open_in_new_tab: "പുതിയ ടാബില്‍ തുറക്കുക ↵" recommendations.button_open_in_new_panel: "പുതിയ പാനലില്‍ തുറക്കുക ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "തിരഞ്ഞെടുപ്പ് %{choic # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ടെർമിനൽ പാളി തിരഞ്ഞെടുക്കുക (↑ ↓ • Enter • Esc)" +pane_picker.empty: "എഴുതാവുന്ന ടെർമിനൽ പാളികളൊന്നും ലഭ്യമല്ല." +pane_picker.target_unavailable: "തിരഞ്ഞെടുത്ത പാളി ഇനി ലഭ്യമല്ല." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ഏജന്റ് തിരഞ്ഞെടുക്കുക (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ഈ മെഷീനിൽ ലഭ്യമായ ഏജന്റ് CLI ഒന്നും കണ്ടെത്തിയില്ല." # {Locked="CLI"} diff --git a/tools/wta/locales/mr-IN.yml b/tools/wta/locales/mr-IN.yml index d86c5dd92b..29d81cdfc7 100644 --- a/tools/wta/locales/mr-IN.yml +++ b/tools/wta/locales/mr-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 प्रतिमा: %{items}" # {Locked="%{it # ── कमांड पॉपअप (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - स्लॅश-कमांड उपसर्ग, ASCII असणे आवश्यक commands.popup_title: " / कमांड " +delegate_picker.title: " डेस्टिगेट गंतव्य " +delegate_picker.tab: "नवीन टॅब" +delegate_picker.panel: "नवीन पॅनल" +delegate_picker.intent_required: "प्रतिनिधी करण्यासाठी कामाचे वर्णन करा." +delegate_picker.pane_not_allowed: "/delegate नेहमी नवीन गंतव्य तयार करते आणि @pane स्वीकारत नाही." +delegate_picker.not_configured: "कोणताही प्रतिनिधी एजंट कॉन्फिगर केलेला नाही." +delegate_picker.no_parent_pane: "विभाजित करण्यासाठी कोणतेही कार्यरत उपखंड उपलब्ध नाही." +delegate_picker.launch_failed: "प्रतिनिधी लाँच करू शकलो नाही: %{error}" commands.help_title: " मदत " commands.help_header: "स्लॅश कमांड — इनपुट बॉक्समध्ये / टाइप करा." commands.help_escape_hint: " //text शाब्दिक '/' पाठवा (कमांड पार्सर एस्केप करते)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "एजंट पुन्हा सुरू कर commands.stop.summary: "चालू असलेला प्रॉम्प्ट रद्द करा" commands.sessions.summary: "ऐतिहासिक सत्र निवडक उघडा (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "या पेनसाठी एजंट निवडा (थेट स्विच करण्यासाठी /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "एक कार्य तयार करा आणि प्रतिनिधी एजंट उघडा (/delegate )" # ── शिफारस पॅनेल (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - की नावे आणि Return-की ग्लिफ, भाषांतर करू नका recommendations.nav_hint: "(↑ ↓ नेव्हिगेट करण्यासाठी • ← → बटणे बदलण्यासाठी • Enter निवडण्यासाठी • Esc रद्द करण्यासाठी)" recommendations.button_run_command: "[ कमांड चालवा ]" +recommendations.button_send_to_delegate: "[ प्रतिनिधींना पाठवा ]" recommendations.button_insert_in_terminal: "टर्मिनलमध्ये घाला" recommendations.button_open_in_new_tab: "नवीन टॅबमध्ये उघडा ↵" recommendations.button_open_in_new_panel: "नवीन पॅनेलमध्ये उघडा ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "निवड %{choice} अयशस्वी # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "टर्मिनल उपखंड निवडा (↑ ↓ • Enter • Esc)" +pane_picker.empty: "कोणतेही लिहिण्यायोग्य टर्मिनल फलक उपलब्ध नाहीत." +pane_picker.target_unavailable: "निवडलेला उपखंड यापुढे उपलब्ध नाही." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "एजंट निवडा (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "या मशीनवर कोणताही उपलब्ध एजंट CLI आढळला नाही." # {Locked="CLI"} diff --git a/tools/wta/locales/ms-MY.yml b/tools/wta/locales/ms-MY.yml index e451721bed..7e5b23c08c 100644 --- a/tools/wta/locales/ms-MY.yml +++ b/tools/wta/locales/ms-MY.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imej: %{items}" # {Locked="%{items}"} {Locked=" # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / arahan " +delegate_picker.title: " Wakilkan destinasi " +delegate_picker.tab: "Tab baharu" +delegate_picker.panel: "Panel baharu" +delegate_picker.intent_required: "Terangkan kerja untuk diwakilkan." +delegate_picker.pane_not_allowed: "/delegate sentiasa mencipta destinasi baharu dan tidak menerima @pane." +delegate_picker.not_configured: "Tiada ejen perwakilan dikonfigurasikan." +delegate_picker.no_parent_pane: "Tiada anak tetingkap kerja tersedia untuk dipisahkan." +delegate_picker.launch_failed: "Tidak dapat melancarkan perwakilan: %{error}" commands.help_title: " Bantuan " commands.help_header: "Arahan garis miring — taip / dalam kotak input." commands.help_escape_hint: " //text Hantar '/' literal (elakkan penghurai arahan)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Tutup bantuan ini" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ untuk navigasi • ← → untuk menukar tindakan • Enter untuk memilih • Esc untuk membatalkan)" recommendations.button_run_command: "[ Jalankan arahan ]" +recommendations.button_send_to_delegate: "[ Hantar kepada perwakilan ]" recommendations.button_insert_in_terminal: "Sisipkan dalam Terminal" recommendations.button_open_in_new_tab: "Buka dalam Tab Baharu ↵" recommendations.button_open_in_new_panel: "Buka dalam Panel Baharu ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Mulakan semula ejen" commands.stop.summary: "Batalkan gesaan yang sedang berjalan" commands.sessions.summary: "Buka pemilih sesi sejarah (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Pilih ejen untuk tab ini (/agent untuk menukar terus)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Sediakan tugas dan buka ejen perwakilan (/delegate )" # ── Pelaksanaan cadangan (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Pilihan %{choice} gagal: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Pilih anak tetingkap terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Tiada anak tetingkap terminal boleh tulis tersedia." +pane_picker.target_unavailable: "Anak tetingkap yang dipilih tidak lagi tersedia." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Pilih ejen (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Tiada CLI ejen yang tersedia ditemui pada mesin ini." # {Locked="CLI"} diff --git a/tools/wta/locales/mt-MT.yml b/tools/wta/locales/mt-MT.yml index ad5564d0da..ff13de4a2c 100644 --- a/tools/wta/locales/mt-MT.yml +++ b/tools/wta/locales/mt-MT.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Stampi: %{items}" # {Locked="%{items}"} {Locked= # ── Popup tal-kmandati (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefiss tal-kmand slash, irid jibqa' ASCII commands.popup_title: " / kmandati " +delegate_picker.title: " Id-destinazzjoni tad-delegat " +delegate_picker.tab: "Tab ġdida" +delegate_picker.panel: "Panew ġdid" +delegate_picker.intent_required: "Iddeskrivi x-xogħol li tiddelega." +delegate_picker.pane_not_allowed: "/delegate dejjem toħloq destinazzjoni ġdida u ma taċċettax @pane." +delegate_picker.not_configured: "L-ebda aġent delegat mhu kkonfigurat." +delegate_picker.no_parent_pane: "L-ebda pannell tax-xogħol mhu disponibbli biex jinqasam." +delegate_picker.launch_failed: "Ma setgħetx tniedi d-delegat: %{error}" commands.help_title: " Għajnuna " commands.help_header: "Kmandati slash — ittajpja / fil-kaxxa tal-input." commands.help_escape_hint: " //text Ibgħat '/' litterali (eskejpja l-parser tal-kmandati)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Agħlaq din l-għajnuna" # {Locked="Esc # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ismijiet taċ-ċwievet u glyph taċ-ċavetta Return, tittradux recommendations.nav_hint: "(↑ ↓ biex tinnaviga • ← → biex taqleb il-buttuni • Enter biex tagħżel • Esc biex tikkanċella)" recommendations.button_run_command: "[ Ħaddem il-kmand ]" +recommendations.button_send_to_delegate: "[ Ibgħat lid-delegat ]" recommendations.button_insert_in_terminal: "Daħħal fit-Terminal" recommendations.button_open_in_new_tab: "Iftaħ f'Tab Ġdid ↵" recommendations.button_open_in_new_panel: "Iftaħ f'Pannell Ġdid ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Agħżel il-aġent għal dan il-pannell (/agent biex tibdel direttament)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Ipprepara kompitu u tiftaħ aġent delegat (/delegate )" # ── Eżekuzzjoni tar-rakkomandazzjoni (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "L-għażla %{choice} falliet: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Agħżel il-ħġieġa tat-terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "M'hemm l-ebda panew tat-terminal li jista' jinkiteb disponibbli." +pane_picker.target_unavailable: "Il-panew magħżul m'għadux disponibbli." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agħżel aġent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ma nstab l-ebda CLI tal-aġent disponibbli fuq din il-magna." # {Locked="CLI"} diff --git a/tools/wta/locales/nb-NO.yml b/tools/wta/locales/nb-NO.yml index 8d3a6dacb7..4e3af11745 100644 --- a/tools/wta/locales/nb-NO.yml +++ b/tools/wta/locales/nb-NO.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Bilder: %{items}" # {Locked="%{items}"} {Locked= # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / kommandoer " +delegate_picker.title: " Deleger destinasjon " +delegate_picker.tab: "Ny fane" +delegate_picker.panel: "Nytt panel" +delegate_picker.intent_required: "Beskriv arbeidet som skal delegeres." +delegate_picker.pane_not_allowed: "/delegate oppretter alltid en ny destinasjon og godtar ikke @pane." +delegate_picker.not_configured: "Ingen delegatagent er konfigurert." +delegate_picker.no_parent_pane: "Ingen arbeidsrute er tilgjengelig for å dele." +delegate_picker.launch_failed: "Kunne ikke starte delegaten: %{error}" commands.help_title: " Hjelp " commands.help_header: "Skråstrekkommandoer — skriv / i inndatafeltet." commands.help_escape_hint: " //text Send en bokstavelig '/' (unngår kommandotolken)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Lukk denne hjelpen" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ for å navigere • ← → for å bytte knapper • Enter for å velge • Esc for å avbryte)" recommendations.button_run_command: "[ Kjør kommando ]" +recommendations.button_send_to_delegate: "[ Send til delegat ]" recommendations.button_insert_in_terminal: "Sett inn i Terminal" recommendations.button_open_in_new_tab: "Åpne i ny fane ↵" recommendations.button_open_in_new_panel: "Åpne i nytt panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Start agenten på nytt" commands.stop.summary: "Avbryt ledeteksten som pågår" commands.sessions.summary: "Åpne velgeren for historiske økter (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Velg agenten for dette panelet (/agent for å bytte direkte)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Forbered en oppgave og åpne en delegatagent (/delegate )" # ── Utføring av anbefaling (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Valg %{choice} mislyktes: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Velg terminalpanel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Ingen skrivbare terminalpaneler er tilgjengelige." +pane_picker.target_unavailable: "Den valgte ruten er ikke lenger tilgjengelig." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Velg agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ingen tilgjengelig agent-CLI ble funnet på denne maskinen." # {Locked="CLI"} diff --git a/tools/wta/locales/ne-NP.yml b/tools/wta/locales/ne-NP.yml index 4576c60b90..d3d4b08d22 100644 --- a/tools/wta/locales/ne-NP.yml +++ b/tools/wta/locales/ne-NP.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 छविहरू: %{items}" # {Locked="%{items # ── कमाण्ड पपअप (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - स्ल्याश-कमाण्ड उपसर्ग, ASCII हुनुपर्छ commands.popup_title: " / कमाण्डहरू " +delegate_picker.title: " प्रतिनिधि गन्तव्य " +delegate_picker.tab: "नयाँ ट्याब" +delegate_picker.panel: "नयाँ प्यानल" +delegate_picker.intent_required: "प्रत्यायोजित कार्यको वर्णन गर्नुहोस्।" +delegate_picker.pane_not_allowed: "/delegate ले सधैं नयाँ गन्तव्य सिर्जना गर्छ र स्वीकार गर्दैन @pane।" +delegate_picker.not_configured: "कुनै पनि प्रतिनिधि एजेन्ट कन्फिगर गरिएको छैन।" +delegate_picker.no_parent_pane: "विभाजित गर्नको लागि कुनै कार्य फलक उपलब्ध छैन।" +delegate_picker.launch_failed: " प्रतिनिधि सुरु गर्न सकिएन: %{error}" commands.help_title: " मद्दत " commands.help_header: "स्ल्याश कमाण्डहरू — इनपुट बक्समा / टाइप गर्नुहोस्।" commands.help_escape_hint: " //text शाब्दिक '/' पठाउनुहोस् (कमाण्ड पार्सर एस्केप गर्छ)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "एजेन्ट पुन: सुरु गर् commands.stop.summary: "चलिरहेको प्रम्प्ट रद्द गर्नुहोस्" commands.sessions.summary: "ऐतिहासिक सत्र पिकर खोल्नुहोस् (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "यो पेनका लागि एजेन्ट छान्नुहोस् (सिधै बदल्न /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "कार्य तयार गर्नुहोस् र प्रतिनिधि एजेन्ट खोल्नुहोस् (/delegate )" # ── सिफारिस प्यानल (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - कुञ्जी नामहरू र Return-कुञ्जी ग्लिफ, अनुवाद नगर्नुहोस् recommendations.nav_hint: "(↑ ↓ नेभिगेट गर्न • ← → बटनहरू स्विच गर्न • Enter चयन गर्न • Esc रद्द गर्न)" recommendations.button_run_command: "[ कमाण्ड चलाउनुहोस् ]" +recommendations.button_send_to_delegate: "[ प्रतिनिधिलाई पठाउनुहोस् ]" recommendations.button_insert_in_terminal: "टर्मिनलमा सम्मिलित गर्नुहोस्" recommendations.button_open_in_new_tab: "नयाँ ट्याबमा खोल्नुहोस् ↵" recommendations.button_open_in_new_panel: "नयाँ प्यानलमा खोल्नुहोस् ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "छनोट %{choice} असफल भयो: # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "टर्मिनल फलक चयन गर्नुहोस् (↑ ↓ • Enter • Esc)" +pane_picker.empty: "कुनै लेख्न सकिने टर्मिनल प्यानहरू उपलब्ध छैनन्।" +pane_picker.target_unavailable: "चयन गरिएको फलक अब उपलब्ध छैन।" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "एजेन्ट छान्नुहोस् (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "यस मेसिनमा कुनै पनि उपलब्ध एजेन्ट CLI फेला परेन।" # {Locked="CLI"} diff --git a/tools/wta/locales/nl-NL.yml b/tools/wta/locales/nl-NL.yml index 79c1956acc..00d3a49dea 100644 --- a/tools/wta/locales/nl-NL.yml +++ b/tools/wta/locales/nl-NL.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Afbeeldingen: %{items}" # {Locked="%{items}"} {L # ── Opdrachtpopup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - schuine-streep-opdrachtvoorvoegsel, moet ASCII blijven commands.popup_title: " / opdrachten " +delegate_picker.title: " Bestemming van de delegatie " +delegate_picker.tab: "Nieuw tabblad" +delegate_picker.panel: "Nieuw paneel" +delegate_picker.intent_required: "Beschrijf het werk dat moet worden gedelegeerd." +delegate_picker.pane_not_allowed: "/delegate creëert altijd een nieuwe bestemming en accepteert @pane niet." +delegate_picker.not_configured: "Er is geen gemachtigde agent geconfigureerd." +delegate_picker.no_parent_pane: "Er is geen werkvenster beschikbaar om te splitsen." +delegate_picker.launch_failed: "Kan de gemachtigde niet starten: %{error}" commands.help_title: " Help " commands.help_header: "Schuine-streep-opdrachten — typ / in het invoervak." commands.help_escape_hint: " //text Letterlijke '/' verzenden (omzeilt de opdrachtparser)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Deze help sluiten" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - toetsnamen en Enter-toetssymbool, niet vertalen recommendations.nav_hint: "(↑ ↓ navigeren • ← → om acties te wisselen • Enter selecteren • Esc annuleren)" recommendations.button_run_command: "[ Opdracht uitvoeren ]" +recommendations.button_send_to_delegate: "[ Verzenden naar afgevaardigde ]" recommendations.button_insert_in_terminal: "Invoegen in terminal" recommendations.button_open_in_new_tab: "Openen in nieuw tabblad ↵" recommendations.button_open_in_new_panel: "Openen in nieuw deelvenster ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Agent opnieuw starten" commands.stop.summary: "De actieve prompt annuleren" commands.sessions.summary: "De selector voor eerdere sessies openen (Ctrl+Shift+/)" commands.agent.summary: "Het agent voor dit tabblad kiezen (/agent om direct te wisselen)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Een taak voorbereiden en een gemachtigde agent openen (/delegate )" # ── Aanbeveling uitvoeren (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Keuze %{choice} is mislukt: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminalpaneel selecteren (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Er zijn geen beschrijfbare terminalvensters beschikbaar." +pane_picker.target_unavailable: "Het geselecteerde deelvenster is niet langer beschikbaar." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agent selecteren (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Er is geen beschikbare agent-CLI gevonden op deze machine." # {Locked="CLI"} diff --git a/tools/wta/locales/nn-NO.yml b/tools/wta/locales/nn-NO.yml index c117e764a7..1706d21c6c 100644 --- a/tools/wta/locales/nn-NO.yml +++ b/tools/wta/locales/nn-NO.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Bilete: %{items}" # {Locked="%{items}"} {Locked= # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / kommandoar " +delegate_picker.title: " Deleger destinasjon " +delegate_picker.tab: "Ny fane" +delegate_picker.panel: "Nytt panel" +delegate_picker.intent_required: "Beskriv arbeidet som skal delegeres." +delegate_picker.pane_not_allowed: "/delegate oppretter alltid en ny destinasjon og godtar ikke @pane." +delegate_picker.not_configured: "Ingen delegatagent er konfigurert." +delegate_picker.no_parent_pane: "Ingen arbeidsrute er tilgjengelig for å dele." +delegate_picker.launch_failed: "Kunne ikke starte delegaten: %{error}" commands.help_title: " Hjelp " commands.help_header: "Skråstrekkommandoar — skriv / i inndatafeltet." commands.help_escape_hint: " //text Send ein bokstavleg '/' (unngår kommandotolken)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Lukk denne hjelpa" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ for å navigere • ← → for å byte knappar • Enter for å velje • Esc for å avbryte)" recommendations.button_run_command: "[ Køyr kommando ]" +recommendations.button_send_to_delegate: "[ Send til delegat ]" recommendations.button_insert_in_terminal: "Set inn i Terminal" recommendations.button_open_in_new_tab: "Opne i ny fane ↵" recommendations.button_open_in_new_panel: "Opne i nytt panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Start agenten på nytt" commands.stop.summary: "Avbryt den pågåande førespurnaden" commands.sessions.summary: "Opne veljaren for historiske økter (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Vel agenten for dette panelet (/agent for å byte direkte)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Forbered en oppgave og åpne en delegatagent (/delegate )" # ── Utføring av tilråding (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Val %{choice} mislukkast: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Velg terminalpanel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Ingen skrivbare terminalpaneler er tilgjengelige." +pane_picker.target_unavailable: "Den valgte ruten er ikke lenger tilgjengelig." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Vel agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Fann ingen tilgjengeleg agent-CLI på denne maskinen." # {Locked="CLI"} diff --git a/tools/wta/locales/or-IN.yml b/tools/wta/locales/or-IN.yml index 33be82a104..c21640611e 100644 --- a/tools/wta/locales/or-IN.yml +++ b/tools/wta/locales/or-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 ଛବିଗୁଡ଼ିକ: %{items}" # {Locked # ── କମାଣ୍ଡ ପପଅପ୍ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - ସ୍ଲାଶ୍-କମାଣ୍ଡ ଉପସର୍ଗ, ASCII ହେବା ଆବଶ୍ୟକ commands.popup_title: " / କମାଣ୍ଡ " +delegate_picker.title: " ପ୍ରତିନିଧୀ ଗନ୍ତବ୍ୟସ୍ଥଳ | " +delegate_picker.tab: " ନୂତନ ଟ୍ୟାବ୍ |" +delegate_picker.panel: " ନୂତନ ପ୍ୟାନେଲ୍ |" +delegate_picker.intent_required: " ପ୍ରତିନିଧିତ୍ୱ କରିବାକୁ କାର୍ଯ୍ୟ ବର୍ଣ୍ଣନା କର |" +delegate_picker.pane_not_allowed: " __ PH0__ ସର୍ବଦା ଏକ ନୂତନ ଗନ୍ତବ୍ୟସ୍ଥଳ ସୃଷ୍ଟି କରେ ଏବଂ @pane ଗ୍ରହଣ କରେ ନାହିଁ |" +delegate_picker.not_configured: " କ deleg ଣସି ପ୍ରତିନିଧୀ ଏଜେଣ୍ଟ ବିନ୍ୟାସିତ ନୁହଁନ୍ତି |" +delegate_picker.no_parent_pane: " ବିଭାଜନ ପାଇଁ କ working ଣସି କାର୍ଯ୍ୟ ଫଳକ ଉପଲବ୍ଧ ନାହିଁ |" +delegate_picker.launch_failed: " ପ୍ରତିନିଧୀଙ୍କୁ ଲଞ୍ଚ କରିପାରିଲା ନାହିଁ: %{error}" commands.help_title: " ସାହାଯ୍ୟ " commands.help_header: "ସ୍ଲାଶ୍ କମାଣ୍ଡ — ଇନ୍‌ପୁଟ୍ ବକ୍ସରେ / ଟାଇପ୍ କରନ୍ତୁ।" commands.help_escape_hint: " //text ଅକ୍ଷରିକ '/' ପଠାନ୍ତୁ (କମାଣ୍ଡ ପାର୍ସର୍ ଏସ୍କେପ୍ କରେ)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ଏଜେଣ୍ଟ ପୁନଃ ଆରମ୍ଭ କ commands.stop.summary: "ଚାଲୁଥିବା ପ୍ରମ୍ପ୍ଟକୁ ବାତିଲ କରନ୍ତୁ" commands.sessions.summary: "ଇତିହାସିକ ସେସନ୍ ପିକର୍ ଖୋଲନ୍ତୁ (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ଏହି ଟ୍ୟାବ୍ ପାଇଁ ଏଜେଣ୍ଟ୍ ବାଛନ୍ତୁ (ସିଧାସଳଖ ବଦଳାଇବାକୁ /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: " ଏକ କାର୍ଯ୍ୟ ପ୍ରସ୍ତୁତ କରନ୍ତୁ ଏବଂ ଏକ ପ୍ରତିନିଧୀ ଏଜେଣ୍ଟ ଖୋଲନ୍ତୁ (/delegate )" # ── ସୁପାରିଶ ପ୍ୟାନେଲ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - କୀ ନାମ ଏବଂ Return-କୀ ଗ୍ଲିଫ୍, ଅନୁବାଦ କରନ୍ତୁ ନାହିଁ recommendations.nav_hint: "(↑ ↓ ନେଭିଗେଟ୍ କରିବାକୁ • ← → ବଟନ୍ ବଦଳାଇବାକୁ • Enter ବାଛିବାକୁ • Esc ବାତିଲ୍ କରିବାକୁ)" recommendations.button_run_command: "[ କମାଣ୍ଡ ଚଳାନ୍ତୁ ]" +recommendations.button_send_to_delegate: " [ପ୍ରତିନିଧୀଙ୍କୁ ପଠାନ୍ତୁ]" recommendations.button_insert_in_terminal: "ଟର୍ମିନାଲରେ ସନ୍ନିବେଶ କରନ୍ତୁ" recommendations.button_open_in_new_tab: "ନୂଆ ଟ୍ୟାବରେ ଖୋଲନ୍ତୁ ↵" recommendations.button_open_in_new_panel: "ନୂଆ ପ୍ୟାନେଲରେ ଖୋଲନ୍ତୁ ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "ପସନ୍ଦ %{choice} ବିଫଳ ହେ # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: " ଟର୍ମିନାଲ୍ ପେନ୍ ଚୟନ କରନ୍ତୁ (↑ ↓ • Enter • Esc)" +pane_picker.empty: " କ writ ଣସି ଲିଖନ ଯୋଗ୍ୟ ଟର୍ମିନାଲ ପ୍ୟାନ ଉପଲବ୍ଧ ନାହିଁ |" +pane_picker.target_unavailable: " ମନୋନୀତ ପେନ୍ ଆଉ ଉପଲବ୍ଧ ନାହିଁ |" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ଏଜେଣ୍ଟ୍ ବାଛନ୍ତୁ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ଏହି ମେସିନ୍‌ରେ କୌଣସି ଉପଲବ୍ଧ ଏଜେଣ୍ଟ୍ CLI ମିଳିଲା ନାହିଁ।" # {Locked="CLI"} diff --git a/tools/wta/locales/pa-IN.yml b/tools/wta/locales/pa-IN.yml index 012e02e169..d82a57089a 100644 --- a/tools/wta/locales/pa-IN.yml +++ b/tools/wta/locales/pa-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 ਤਸਵੀਰਾਂ: %{items}" # {Locked="%{it # ── ਕਮਾਂਡ ਪੌਪਅੱਪ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - ਸਲੈਸ਼-ਕਮਾਂਡ ਅਗੇਤਰ, ASCII ਹੋਣਾ ਜ਼ਰੂਰੀ commands.popup_title: " / ਕਮਾਂਡਾਂ " +delegate_picker.title: " ਡੈਲੀਗੇਟ ਮੰਜ਼ਿਲ " +delegate_picker.tab: "ਨਵੀਂ ਟੈਬ" +delegate_picker.panel: "ਨਵਾਂ ਪੈਨਲ" +delegate_picker.intent_required: " ਸੌਂਪਣ ਲਈ ਕੰਮ ਦਾ ਵਰਣਨ ਕਰੋ।" +delegate_picker.pane_not_allowed: "/delegate ਹਮੇਸ਼ਾ ਇੱਕ ਨਵੀਂ ਮੰਜ਼ਿਲ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ @pane ਨੂੰ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦਾ ਹੈ।" +delegate_picker.not_configured: "ਕੋਈ ਡੈਲੀਗੇਟ ਏਜੰਟ ਕੌਂਫਿਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।" +delegate_picker.no_parent_pane: "ਵਿਭਾਜਿਤ ਕਰਨ ਲਈ ਕੋਈ ਕਾਰਜ ਪੈਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" +delegate_picker.launch_failed: " ਡੈਲੀਗੇਟ ਨੂੰ ਲਾਂਚ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: %{error}" commands.help_title: " ਮਦਦ " commands.help_header: "ਸਲੈਸ਼ ਕਮਾਂਡਾਂ — ਇਨਪੁਟ ਬਾਕਸ ਵਿੱਚ / ਟਾਈਪ ਕਰੋ।" commands.help_escape_hint: " //text ਅੱਖਰੀ '/' ਭੇਜੋ (ਕਮਾਂਡ ਪਾਰਸਰ ਐਸਕੇਪ ਕਰਦਾ ਹੈ)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ਏਜੰਟ ਮੁੜ-ਚਾਲੂ ਕਰੋ" commands.stop.summary: "ਚੱਲ ਰਹੇ ਪ੍ਰਾਂਪਟ ਨੂੰ ਰੱਦ ਕਰੋ" commands.sessions.summary: "ਇਤਿਹਾਸਕ ਸੈਸ਼ਨ ਪਿਕਰ ਖੋਲ੍ਹੋ (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ਇਸ ਪੈਨ ਲਈ ਏਜੰਟ ਚੁਣੋ (ਸਿੱਧਾ ਬਦਲਣ ਲਈ /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ਇੱਕ ਕਾਰਜ ਤਿਆਰ ਕਰੋ ਅਤੇ ਇੱਕ ਡੈਲੀਗੇਟ ਏਜੰਟ ਖੋਲ੍ਹੋ (/delegate )" # ── ਸਿਫ਼ਾਰਸ਼ ਪੈਨਲ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - ਕੀ ਨਾਮ ਅਤੇ Return-ਕੀ ਗਲਿਫ਼, ਅਨੁਵਾਦ ਨਾ ਕਰੋ recommendations.nav_hint: "(↑ ↓ ਨੈਵੀਗੇਟ ਕਰਨ ਲਈ • ← → ਬਟਨ ਬਦਲਣ ਲਈ • Enter ਚੁਣਨ ਲਈ • Esc ਰੱਦ ਕਰਨ ਲਈ)" recommendations.button_run_command: "[ ਕਮਾਂਡ ਚਲਾਓ ]" +recommendations.button_send_to_delegate: "[ ਡੈਲੀਗੇਟ ਨੂੰ ਭੇਜੋ ]" recommendations.button_insert_in_terminal: "ਟਰਮੀਨਲ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ" recommendations.button_open_in_new_tab: "ਨਵੀਂ ਟੈਬ ਵਿੱਚ ਖੋਲ੍ਹੋ ↵" recommendations.button_open_in_new_panel: "ਨਵੇਂ ਪੈਨਲ ਵਿੱਚ ਖੋਲ੍ਹੋ ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "ਚੋਣ %{choice} ਅਸਫਲ ਰਹੀ: %{e # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ਟਰਮੀਨਲ ਪੈਨ ਚੁਣੋ (↑ ↓ • Enter • Esc)" +pane_picker.empty: "ਕੋਈ ਲਿਖਣਯੋਗ ਟਰਮੀਨਲ ਪੈਨ ਉਪਲਬਧ ਨਹੀਂ ਹਨ।" +pane_picker.target_unavailable: "ਚੁਣਿਆ ਪੈਨ ਹੁਣ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ਏਜੰਟ ਚੁਣੋ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ਇਸ ਮਸ਼ੀਨ ਤੇ ਕੋਈ ਉਪਲਬਧ ਏਜੰਟ CLI ਨਹੀਂ ਮਿਲਿਆ।" # {Locked="CLI"} diff --git a/tools/wta/locales/pl-PL.yml b/tools/wta/locales/pl-PL.yml index 4a6305744a..b9fcf3f08d 100644 --- a/tools/wta/locales/pl-PL.yml +++ b/tools/wta/locales/pl-PL.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Obrazy: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / polecenia " +delegate_picker.title: " Deleguj miejsce docelowe " +delegate_picker.tab: "Nowa karta" +delegate_picker.panel: "Nowy panel" +delegate_picker.intent_required: "Opisz pracę, którą chcesz delegować." +delegate_picker.pane_not_allowed: "/delegate zawsze tworzy nowe miejsce docelowe i nie akceptuje @pane." +delegate_picker.not_configured: "Nie skonfigurowano agenta delegującego." +delegate_picker.no_parent_pane: "Nie można podzielić żadnego panelu roboczego." +delegate_picker.launch_failed: "Nie można uruchomić delegata: %{error}" commands.help_title: " Pomoc " commands.help_header: "Polecenia ukośnika — wpisz / w polu wprowadzania." commands.help_escape_hint: " //text Wyślij dosłowne '/' (pomija parser poleceń)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Uruchom ponownie agenta" commands.stop.summary: "Anuluj trwający monit" commands.sessions.summary: "Otwórz wybór historycznych sesji (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Wybierz agent dla tej karty (/agent , aby przełączyć bezpośrednio)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Przygotuj zadanie i otwórz agenta delegującego (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ do nawigacji • ← → do przełączania przycisków • Enter aby wybrać • Esc aby anulować)" recommendations.button_run_command: "[ Uruchom polecenie ]" +recommendations.button_send_to_delegate: "[ Wyślij do delegata ]" recommendations.button_insert_in_terminal: "Wstaw w terminalu" recommendations.button_open_in_new_tab: "Otwórz w nowej karcie ↵" recommendations.button_open_in_new_panel: "Otwórz w nowym panelu ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Wybór %{choice} nie powiódł się: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Wybierz panel terminala (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Brak dostępnych okienek terminala z możliwością zapisu." +pane_picker.target_unavailable: "Wybrane okienko nie jest już dostępne." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Wybierz agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Na tym komputerze nie znaleziono żadnego dostępnego interfejsu CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/pt-BR.yml b/tools/wta/locales/pt-BR.yml index 392ade8d97..14bee6ebb0 100644 --- a/tools/wta/locales/pt-BR.yml +++ b/tools/wta/locales/pt-BR.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imagens: %{items}" # {Locked="📎","%{items}"} # ── Popup de comandos (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefixo de comando de barra, deve permanecer em ASCII commands.popup_title: " / comandos " +delegate_picker.title: " Delegar destino " +delegate_picker.tab: "Nova aba" +delegate_picker.panel: "Novo painel" +delegate_picker.intent_required: "Descreva o trabalho a delegar." +delegate_picker.pane_not_allowed: "/delegate sempre cria um novo destino e não aceita @pane." +delegate_picker.not_configured: "Nenhum agente delegado está configurado." +delegate_picker.no_parent_pane: "Nenhum painel de trabalho está disponível para divisão." +delegate_picker.launch_failed: "Não foi possível iniciar o delegado: %{error}" commands.help_title: " Ajuda " commands.help_header: "Comandos de barra — digite / na caixa de entrada." commands.help_escape_hint: " //text Enviar um '/' literal (escapa o analisador de comandos)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Fechar esta ajuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nomes de teclas e glifo da tecla Enter, não traduzir recommendations.nav_hint: "(↑ ↓ para navegar • ← → alternar ações • Enter para selecionar • Esc para cancelar)" recommendations.button_run_command: "[ Executar comando ]" +recommendations.button_send_to_delegate: "[ Enviar para delegado ]" recommendations.button_insert_in_terminal: "Inserir no terminal" recommendations.button_open_in_new_tab: "Abrir em nova guia ↵" recommendations.button_open_in_new_panel: "Abrir em novo painel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Reiniciar agente" commands.stop.summary: "Cancelar o prompt em andamento" commands.sessions.summary: "Abrir o seletor de sessões anteriores (Ctrl+Shift+/)" commands.agent.summary: "Escolha o agente para esta guia (/agent para trocar diretamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepare uma tarefa e abra um agente delegado (/delegate )" # ── Execução de recomendação (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Falha na opção %{choice}: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Selecione o painel do terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nenhum painel de terminal gravável está disponível." +pane_picker.target_unavailable: "O painel selecionado não está mais disponível." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Selecionar agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nenhuma CLI do agente disponível foi encontrada nesta máquina." # {Locked="CLI"} diff --git a/tools/wta/locales/pt-PT.yml b/tools/wta/locales/pt-PT.yml index 0eb2da0b78..5b4af838a5 100644 --- a/tools/wta/locales/pt-PT.yml +++ b/tools/wta/locales/pt-PT.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imagens: %{items}" # {Locked="📎","%{items}"} # ── Janela de comandos (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - prefixo de comando de barra, deve permanecer em ASCII commands.popup_title: " / comandos " +delegate_picker.title: " Delegar destino " +delegate_picker.tab: "Nova aba" +delegate_picker.panel: "Novo painel" +delegate_picker.intent_required: "Descreva o trabalho a delegar." +delegate_picker.pane_not_allowed: "/delegate sempre cria um novo destino e não aceita @pane." +delegate_picker.not_configured: "Nenhum agente delegado está configurado." +delegate_picker.no_parent_pane: "Nenhum painel de trabalho está disponível para divisão." +delegate_picker.launch_failed: "Não foi possível iniciar o delegado: %{error}" commands.help_title: " Ajuda " commands.help_header: "Comandos de barra — escreva / na caixa de entrada." commands.help_escape_hint: " //text Enviar um '/' literal (escapa o analisador de comandos)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Fechar esta ajuda" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - nomes de teclas e glifo da tecla Enter, não traduzir recommendations.nav_hint: "(↑ ↓ para navegar • ← → alternar ações • Enter para selecionar • Esc para cancelar)" recommendations.button_run_command: "[ Executar comando ]" +recommendations.button_send_to_delegate: "[ Enviar para delegado ]" recommendations.button_insert_in_terminal: "Inserir no terminal" recommendations.button_open_in_new_tab: "Abrir em novo separador ↵" recommendations.button_open_in_new_panel: "Abrir em novo painel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Reiniciar agente" commands.stop.summary: "Cancelar a indicação em curso" commands.sessions.summary: "Abrir o seletor de sessões anteriores (Ctrl+Shift+/)" commands.agent.summary: "Escolha o agente para este separador (/agent para mudar diretamente)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Prepare uma tarefa e abra um agente delegado (/delegate )" # ── Execução de recomendação (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "A opção %{choice} falhou: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Selecione o painel do terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nenhum painel de terminal gravável está disponível." +pane_picker.target_unavailable: "O painel selecionado não está mais disponível." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Selecionar agente (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nenhuma CLI de agente disponível foi encontrada nesta máquina." # {Locked="CLI"} diff --git a/tools/wta/locales/qps-ploc.yml b/tools/wta/locales/qps-ploc.yml index f333be9885..a5fb95f7e7 100644 --- a/tools/wta/locales/qps-ploc.yml +++ b/tools/wta/locales/qps-ploc.yml @@ -61,6 +61,14 @@ input.image_attachments: "[📎 Îḿåğéś: %{items}!!!!]" # {Locked="📎", # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: "[ / çöḿḿåñďś !!]" +delegate_picker.title: "[!!_ Ďéĺéğåţé ďéśţïñåţïöñ _!!]" +delegate_picker.tab: "[!!_Ñéŵ ţåƀ_!!]" +delegate_picker.panel: "[!!_Ñéŵ ṗåñéĺ_!!]" +delegate_picker.intent_required: "[!!_Ďéśçŕïƀé ţĥé ŵöŕķ ţö ďéĺéğåţé._!!]" +delegate_picker.pane_not_allowed: "[!!_/delegate åĺŵåÿś çŕéåţéś å ñéŵ ďéśţïñåţïöñ åñď ďöéś ñöţ åççéṗţ @pane._!!]" +delegate_picker.not_configured: "[!!_Ñö ďéĺéğåţé åğéñţ ïś çöñƒïğûŕéď._!!]" +delegate_picker.no_parent_pane: "[!!_Ñö ŵöŕķïñğ ṗåñé ïś åṽåïĺåƀĺé ţö śṗĺïţ._!!]" +delegate_picker.launch_failed: "[!!_Çöûĺď ñöţ ĺåûñçĥ ţĥé ďéĺéğåţé: %{error}_!!]" commands.help_title: "[ Ĥéĺṗ !!]" commands.help_header: "[Ŝĺåśĥ çöḿḿåñďś — ţÿṗé / ïñ ţĥé ïñṗûţ ƀöx.!!!! !!!! !!!!]" commands.help_escape_hint: "[ //text Ŝéñď å ĺïţéŕåĺ '/' (éśçåṗéś ţĥé çöḿḿåñď ṗåŕśéŕ)!!!! !!!! !!!!]" # {Locked="//text","/"} @@ -70,6 +78,7 @@ commands.help_close_hint: "[ Esc Çĺöśé ţĥïś ĥéĺṗ!!!! !!!!] # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "[(↑ ↓ ţö ñåṽïğåţé • ← → ţö śŵïţçĥ ɓûţţöñś • Enter ţö śéĺéçţ • Esc ţö çåñçéĺ)!!!! !!!! !!!! !!!!]" recommendations.button_run_command: "[[ Ŕûñ çöḿḿåñď ]!!]" +recommendations.button_send_to_delegate: "[!!_[ Śéñď ţö ďéĺéğåţé ]_!!]" recommendations.button_insert_in_terminal: "[Îñśéŕţ ïñ Ţéŕḿïñåĺ!!!! !!!!]" recommendations.button_open_in_new_tab: "[Öṗéñ ïñ Ñéŵ Ţåƀ ↵!!!! !!!!]" recommendations.button_open_in_new_panel: "[Öṗéñ ïñ Ñéŵ Ṗåñéĺ ↵!!!! !!!!]" @@ -200,12 +209,20 @@ commands.restart.summary: "[Ŕéśţåŕţ åğéñţ]" commands.stop.summary: "[Çåñçéĺ ţĥé ïñ-ƒĺïğĥţ pŕöɱpţ]" commands.sessions.summary: "[Öpéñ ţĥé ĥïśţöŕïçåĺ śéśśïöñś pïçķéŕ (Ctrl+Shift+/)]" commands.agent.summary: "[Ṗïçķ ţĥé åğéñţ ƒöŕ ţĥïś ţåƀ (/agent ţö śŵïţçĥ ďïŕéçţĺÿ)!!!! !!!! !!!! !!!!]" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "[!!_Ṗŕéṗåŕé å ţåśķ åñď öṗéñ å ďéĺéğåţé åğéñţ (/delegate )_!!]" # ── Recommendation execution (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "[Çĥöïçé %{choice} ƒåïĺéď: %{error}!!!! !!!!]" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "[!!_Śéĺéçţ ţéŕɱïñåĺ ṗåñé (↑ ↓ • Enter • Esc)_!!]" +pane_picker.empty: "[!!_Ñö ŵŕïţåƀĺé ţéŕɱïñåĺ ṗåñéś åŕé åṽåïĺåƀĺé._!!]" +pane_picker.target_unavailable: "[!!_Ţĥé śéĺéçţéď ṗåñé ïś ñö ĺöñğéŕ åṽåïĺåƀĺé._!!]" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "[Ŝéĺéçţ åğéñţ (↑ ↓ • Enter • Esc)!!!! !!!!]" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "[Ñö åṽåïĺåƀĺé åğéñţ CLI ŵåś ƒöûñď öñ ţĥïś ḿåçĥïñé.!!!! !!!! !!!! !!!!]" # {Locked="CLI"} diff --git a/tools/wta/locales/qps-ploca.yml b/tools/wta/locales/qps-ploca.yml index 3b9ed28a15..6eb5b02918 100644 --- a/tools/wta/locales/qps-ploca.yml +++ b/tools/wta/locales/qps-ploca.yml @@ -59,6 +59,14 @@ input.image_attachments: "[!!_📎 Images: %{items}_!!]" # {Locked="📎","%{it # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: "[!!_ / commands _!!]" +delegate_picker.title: "[ Ďéĺéğåţé ďéśţïñåţïöñ !!]" +delegate_picker.tab: "[Ñéŵ ţåƀ!!]" +delegate_picker.panel: "[Ñéŵ ṗåñéĺ!!]" +delegate_picker.intent_required: "[Ďéśçŕïƀé ţĥé ŵöŕķ ţö ďéĺéğåţé.!!]" +delegate_picker.pane_not_allowed: "[/delegate åĺŵåÿś çŕéåţéś å ñéŵ ďéśţïñåţïöñ åñď ďöéś ñöţ åççéṗţ @pane.!!]" +delegate_picker.not_configured: "[Ñö ďéĺéğåţé åğéñţ ïś çöñƒïğûŕéď.!!]" +delegate_picker.no_parent_pane: "[Ñö ŵöŕķïñğ ṗåñé ïś åṽåïĺåƀĺé ţö śṗĺïţ.!!]" +delegate_picker.launch_failed: "[Çöûĺď ñöţ ĺåûñçĥ ţĥé ďéĺéğåţé: %{error}!!]" commands.help_title: "[!!_ Help _!!]" commands.help_header: "[!!_Slash commands — type / in the input box._!!]" commands.help_escape_hint: "[!!_ //text Send a literal '/' (escapes the command parser)_!!]" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: "[!!_ Esc Close this help_!!]" # {Locked="Esc # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "[!!_(↑ ↓ to navigate suggestions • ← → to switch actions • Enter to select • Esc to cancel)_!!]" recommendations.button_run_command: "[!!_[ Run command ]_!!]" +recommendations.button_send_to_delegate: "[[ Śéñď ţö ďéĺéğåţé ]!!]" recommendations.button_insert_in_terminal: "[!!_Insert in Terminal_!!]" recommendations.button_open_in_new_tab: "[!!_Open in New Tab ↵_!!]" recommendations.button_open_in_new_panel: "[!!_Open in New Panel ↵_!!]" @@ -197,12 +206,20 @@ commands.restart.summary: "[!!_Restart agent_!!]" commands.stop.summary: "[!!_Cancel the in-flight prompt_!!]" commands.sessions.summary: "[!!_Open the historical sessions picker (Ctrl+Shift+/)_!!]" commands.agent.summary: "[!!_Pick the agent for this tab (/agent to switch directly)_!!]" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "[Ṗŕéṗåŕé å ţåśķ åñď öṗéñ å ďéĺéğåţé åğéñţ (/delegate )!!]" # ── Recommendation execution (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "[!!_Choice %{choice} failed: %{error}_!!]" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "[Śéĺéçţ ţéŕɱïñåĺ ṗåñé (↑ ↓ • Enter • Esc)!!]" +pane_picker.empty: "[Ñö ŵŕïţåƀĺé ţéŕɱïñåĺ ṗåñéś åŕé åṽåïĺåƀĺé.!!]" +pane_picker.target_unavailable: "[Ţĥé śéĺéçţéď ṗåñé ïś ñö ĺöñğéŕ åṽåïĺåƀĺé.!!]" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "[!!_Select agent (↑ ↓ • Enter • Esc)_!!]" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "[!!_No available agent CLI was found on this machine._!!]" # {Locked="CLI"} diff --git a/tools/wta/locales/qps-plocm.yml b/tools/wta/locales/qps-plocm.yml index ddfcc4b39c..772aa6ccf4 100644 --- a/tools/wta/locales/qps-plocm.yml +++ b/tools/wta/locales/qps-plocm.yml @@ -59,6 +59,14 @@ input.image_attachments: "[!! 📎 Ima_ges: %{items} !!]" # {Locked="📎","%{i # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: "[!! / c_ommands !!]" +delegate_picker.title: "[!! Ďéĺéğåţé ďéśţïñåţïöñ !!]" +delegate_picker.tab: "[!! Ñéŵ ţåƀ !!]" +delegate_picker.panel: "[!! Ñéŵ ṗåñéĺ !!]" +delegate_picker.intent_required: "[!! Ďéśçŕïƀé ţĥé ŵöŕķ ţö ďéĺéğåţé. !!]" +delegate_picker.pane_not_allowed: "[!! /delegate åĺŵåÿś çŕéåţéś å ñéŵ ďéśţïñåţïöñ åñď ďöéś ñöţ åççéṗţ @pane. !!]" +delegate_picker.not_configured: "[!! Ñö ďéĺéğåţé åğéñţ ïś çöñƒïğûŕéď. !!]" +delegate_picker.no_parent_pane: "[!! Ñö ŵöŕķïñğ ṗåñé ïś åṽåïĺåƀĺé ţö śṗĺïţ. !!]" +delegate_picker.launch_failed: "[!! Çöûĺď ñöţ ĺåûñçĥ ţĥé ďéĺéğåţé: %{error} !!]" commands.help_title: "[!! He_lp !!]" commands.help_header: "[!! Sla_sh commands — type / in the input box. !!]" commands.help_escape_hint: "[!! //text Se_nd a literal '/' (escapes the command parser) !!]" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: "[!! Esc Cl_ose this help !!]" # {Locked="Es # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "[!! (↑_ ↓ to navigate suggestions • ← → to switch actions • Enter to select • Esc to cancel) !!]" recommendations.button_run_command: "[!! [ R_un command ] !!]" +recommendations.button_send_to_delegate: "[!! [ Śéñď ţö ďéĺéğåţé ] !!]" recommendations.button_insert_in_terminal: "[!! Ins_ert in Terminal !!]" recommendations.button_open_in_new_tab: "[!! Ope_n in New Tab ↵ !!]" recommendations.button_open_in_new_panel: "[!! Ope_n in New Panel ↵ !!]" @@ -197,12 +206,20 @@ commands.restart.summary: "[!! Restart agent !!]" commands.stop.summary: "[!! Cancel the in-flight prompt !!]" commands.sessions.summary: "[!! Open the historical sessions picker (Ctrl+Shift+/) !!]" commands.agent.summary: "[!! Pic_k the agent for this tab (/agent to switch directly) !!]" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "[!! Ṗŕéṗåŕé å ţåśķ åñď öṗéñ å ďéĺéğåţé åğéñţ (/delegate ) !!]" # ── Recommendation execution (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "[!! Cho_ice %{choice} failed: %{error} !!]" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "[!! Śéĺéçţ ţéŕɱïñåĺ ṗåñé (↑ ↓ • Enter • Esc) !!]" +pane_picker.empty: "[!! Ñö ŵŕïţåƀĺé ţéŕɱïñåĺ ṗåñéś åŕé åṽåïĺåƀĺé. !!]" +pane_picker.target_unavailable: "[!! Ţĥé śéĺéçţéď ṗåñé ïś ñö ĺöñğéŕ åṽåïĺåƀĺé. !!]" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "[!! Sel_ect agent (↑ ↓ • Enter • Esc) !!]" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "[!! No_ available agent CLI was found on this machine. !!]" # {Locked="CLI"} diff --git a/tools/wta/locales/quz-PE.yml b/tools/wta/locales/quz-PE.yml index d6e6b41bd8..af3206327d 100644 --- a/tools/wta/locales/quz-PE.yml +++ b/tools/wta/locales/quz-PE.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imagenkuna: %{items}" # {Locked="📎","%{items} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / kamachiykuna " +delegate_picker.title: " Delegado destino nisqaman " +delegate_picker.tab: "Musuq tabla" +delegate_picker.panel: "Musuq panel" +delegate_picker.intent_required: "Deleganapaq llamkaymanta willakuy." +delegate_picker.pane_not_allowed: "/delegate sapa kuti musuq chayanata ruwan chaymanta mana @pane chaskinchu." +delegate_picker.not_configured: "Manan ima delegado agentepas ruwasqachu." +delegate_picker.no_parent_pane: "Mana llamk'ana p'anqa rakinapaq kanchu." +delegate_picker.launch_failed: "Manam atirqanichu kachasqata qallariyta: %{error} ." commands.help_title: " Yanapay " commands.help_header: "Kamachiy riipekuna — / qillqay yaykuchina qutuman." commands.help_escape_hint: " //text Kikin '/' kachay (kamachiy t'aqwiqmanta ayqiy)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Kay yanapata wichq'ay" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ purinapaq • ← → ñit'ina t'ikranapaq • Enter akllanapaq • Esc chinkarichinapaq)" recommendations.button_run_command: "[ Kamachiyta purichiy ]" +recommendations.button_send_to_delegate: "[ Kachayman kachay ]" recommendations.button_insert_in_terminal: "Terminal nisqaman churay" recommendations.button_open_in_new_tab: "Musuq Ripa nisqapi kichay ↵" recommendations.button_open_in_new_panel: "Musuq K'iti nisqapi kichay ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Kay k'itipaq agente akllay (/agent qillqay kikinmanta t'ikranapaq)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Huk ruwayta wakichiy hinaspa huk delegado agente kichay (/delegate ) ." # ── Recomendación ruwariy (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Akllay %{choice} pantarun: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminalpa panelninta akllay (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Mana qillqanapaq terminal paneles nisqakuna kanchu." +pane_picker.target_unavailable: "Akllasqa p'anqaqa manañam kanñachu." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agente akllay (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Manam ima agente CLI kaqpas tarikunchu kay computadorapi." # {Locked="CLI"} diff --git a/tools/wta/locales/ro-RO.yml b/tools/wta/locales/ro-RO.yml index 19ec600cbb..c311c74408 100644 --- a/tools/wta/locales/ro-RO.yml +++ b/tools/wta/locales/ro-RO.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imagini: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / comenzi " +delegate_picker.title: " Delegați destinația " +delegate_picker.tab: "Filă nouă" +delegate_picker.panel: "Panou nou" +delegate_picker.intent_required: "Descrieți munca de delegat." +delegate_picker.pane_not_allowed: "/delegate creează întotdeauna o nouă destinație și nu acceptă @pane." +delegate_picker.not_configured: "Nu este configurat niciun agent delegat." +delegate_picker.no_parent_pane: "Niciun panou de lucru nu este disponibil pentru a fi împărțit." +delegate_picker.launch_failed: "Nu s-a putut lansa delegatul: %{error}" commands.help_title: " Ajutor " commands.help_header: "Comenzi slash — tastați / în câmpul de introducere." commands.help_escape_hint: " //text Trimite un '/' literal (evită analizorul de comenzi)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Închide acest ajutor" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ pentru navigare • ← → pentru comutarea butoanelor • Enter pentru selectare • Esc pentru anulare)" recommendations.button_run_command: "[ Rulează comanda ]" +recommendations.button_send_to_delegate: "[ Trimite către delegat ]" recommendations.button_insert_in_terminal: "Inserare în Terminal" recommendations.button_open_in_new_tab: "Deschide în filă nouă ↵" recommendations.button_open_in_new_panel: "Deschide în panou nou ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Reporniți agentul" commands.stop.summary: "Anulați promptul în curs" commands.sessions.summary: "Deschideți selectorul sesiunilor istorice (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Alegeți agentul pentru această filă (/agent pentru a comuta direct)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pregătește o sarcină și deschide un agent delegat (/delegate )" # ── Executarea recomandării (src/coordinator.rs) ──────────────────────────── system.choice_execution_failed: "Alegerea %{choice} a eșuat: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Selectați panoul terminal (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nu sunt disponibile panouri terminale inscriptibile." +pane_picker.target_unavailable: "Paneul selectat nu mai este disponibil." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Selectați agentul (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nu s-a găsit niciun CLI de agent disponibil pe acest computer." # {Locked="CLI"} diff --git a/tools/wta/locales/ru-RU.yml b/tools/wta/locales/ru-RU.yml index 25ba8f396e..fbd0bcb3b0 100644 --- a/tools/wta/locales/ru-RU.yml +++ b/tools/wta/locales/ru-RU.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Изображения: %{items}" # {Locked=" # ── Всплывающее окно команд (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - префикс слеш-команды, должен оставаться ASCII commands.popup_title: " / команды " +delegate_picker.title: " Назначение делегата " +delegate_picker.tab: "Новая вкладка" +delegate_picker.panel: "Новая панель" +delegate_picker.intent_required: "Опишите работу, которую нужно делегировать." +delegate_picker.pane_not_allowed: "/delegate всегда создает новый пункт назначения и не принимает @pane." +delegate_picker.not_configured: "Агент делегата не настроен." +delegate_picker.no_parent_pane: "Нет рабочей панели, которую можно было бы разделить." +delegate_picker.launch_failed: "Не удалось запустить делегат: %{error}" commands.help_title: " Справка " commands.help_header: "Слеш-команды — введите / в поле ввода." commands.help_escape_hint: " //text Отправить буквальный '/' (экранирует синтаксический анализатор команд)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Перезапустить агент" commands.stop.summary: "Отменить выполняющийся запрос" commands.sessions.summary: "Открыть выбор прошлых сеансов (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Выберите агент для этой вкладки (/agent для прямого переключения)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Подготовьте задачу и откройте агент делегата (/delegate )" # ── Панель рекомендаций (src/ui/recommendations.rs) ─────────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - названия клавиш и символ клавиши Enter, не переводить recommendations.nav_hint: "(↑ ↓ навигация • ← → переключение кнопок • Enter выбрать • Esc отменить)" recommendations.button_run_command: "[ Выполнить команду ]" +recommendations.button_send_to_delegate: "[ Отправить делегату ]" recommendations.button_insert_in_terminal: "Вставить в терминал" recommendations.button_open_in_new_tab: "Открыть в новой вкладке ↵" recommendations.button_open_in_new_panel: "Открыть в новой панели ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Не удалось выполнить выбо # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Выберите панель терминала (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Нет доступных для записи панелей терминала." +pane_picker.target_unavailable: "Выбранная панель больше не доступна." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Выбор агента (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "На этом компьютере не найден доступный CLI агента." # {Locked="CLI"} diff --git a/tools/wta/locales/sk-SK.yml b/tools/wta/locales/sk-SK.yml index 4e0c690923..65b0906e6f 100644 --- a/tools/wta/locales/sk-SK.yml +++ b/tools/wta/locales/sk-SK.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Obrázky: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / príkazy " +delegate_picker.title: " Cieľ delegáta " +delegate_picker.tab: "Nová karta" +delegate_picker.panel: "Nový panel" +delegate_picker.intent_required: "Popíšte prácu na delegovanie." +delegate_picker.pane_not_allowed: "/delegate vždy vytvára nový cieľ a neprijíma @pane." +delegate_picker.not_configured: "Nie je nakonfigurovaný žiadny agent delegáta." +delegate_picker.no_parent_pane: "Nie je k dispozícii žiadny pracovný panel na rozdelenie." +delegate_picker.launch_failed: "Nepodarilo sa spustiť delegáta: %{error}" commands.help_title: " Pomoc " commands.help_header: "Príkazy lomítka — zadajte / do vstupného poľa." commands.help_escape_hint: " //text Odoslanie doslovného '/' (obíde analyzátor príkazov)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Reštartovať agenta" commands.stop.summary: "Zrušiť prebiehajúcu výzvu" commands.sessions.summary: "Otvoriť výber historických relácií (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Vyberte agent pre túto tablu (/agent na priame prepnutie)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pripravte úlohu a otvorte zástupcu delegáta (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ na navigáciu • ← → na prepínanie tlačidiel • Enter na výber • Esc na zrušenie)" recommendations.button_run_command: "[ Spustiť príkaz ]" +recommendations.button_send_to_delegate: "[ Odoslať delegátovi ]" recommendations.button_insert_in_terminal: "Vložiť do terminálu" recommendations.button_open_in_new_tab: "Otvoriť v novej karte ↵" recommendations.button_open_in_new_panel: "Otvoriť v novom paneli ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Voľba %{choice} zlyhala: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Vyberte panel terminálu (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nie sú k dispozícii žiadne zapisovateľné terminály." +pane_picker.target_unavailable: "Vybratý panel už nie je dostupný." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Vybrať agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Na tomto počítači sa nenašlo žiadne dostupné rozhranie CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/sl-SI.yml b/tools/wta/locales/sl-SI.yml index 4bf1916467..ee72f1c65d 100644 --- a/tools/wta/locales/sl-SI.yml +++ b/tools/wta/locales/sl-SI.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Slike: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / ukazi " +delegate_picker.title: " Pooblaščeni cilj " +delegate_picker.tab: "Nov zavihek" +delegate_picker.panel: "Nova plošča" +delegate_picker.intent_required: "Opišite delo, ki ga želite prenesti." +delegate_picker.pane_not_allowed: "/delegate vedno ustvari nov cilj in ne sprejme @pane." +delegate_picker.not_configured: "Konfiguriran ni noben pooblaščenec." +delegate_picker.no_parent_pane: "Nobeno delovno podokno ni na voljo za razdelitev." +delegate_picker.launch_failed: "Ni bilo mogoče zagnati pooblaščenca: %{error}" commands.help_title: " Pomoč " commands.help_header: "Ukazi s poševnico — vnesite / v vnosno polje." commands.help_escape_hint: " //text Pošlji dobesedni '/' (obide razčlenjevalnik ukazov)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Ponovno zaženi agenta" commands.stop.summary: "Prekliči poziv v teku" commands.sessions.summary: "Odpri izbirnik preteklih sej (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Izberite agent za ta zavihek (/agent za neposreden preklop)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pripravite nalogo in odprite pooblaščenega posrednika (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ za krmarjenje • ← → za preklapljanje gumbov • Enter za izbiro • Esc za preklic)" recommendations.button_run_command: "[ Zaženi ukaz ]" +recommendations.button_send_to_delegate: "[ Pošlji pooblaščencu ]" recommendations.button_insert_in_terminal: "Vstavi v terminal" recommendations.button_open_in_new_tab: "Odpri v novem zavihku ↵" recommendations.button_open_in_new_panel: "Odpri v novem podoknu ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Izbira %{choice} ni uspela: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Izberi terminalsko podokno (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Na voljo ni nobeno zapisljivo terminalsko podokno." +pane_picker.target_unavailable: "Izbrano podokno ni več na voljo." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Izberi agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "V tej napravi ni mogoče najti nobenega razpoložljivega vmesnika CLI agenta." # {Locked="CLI"} diff --git a/tools/wta/locales/sq-AL.yml b/tools/wta/locales/sq-AL.yml index e9d1fd8b43..67c1f928a8 100644 --- a/tools/wta/locales/sq-AL.yml +++ b/tools/wta/locales/sq-AL.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Imazhet: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komandat " +delegate_picker.title: "Delegoni destinacionin" +delegate_picker.tab: "Skeda e re" +delegate_picker.panel: "Paneli i ri" +delegate_picker.intent_required: "Përshkruani punën që duhet deleguar." +delegate_picker.pane_not_allowed: "/delegate krijon gjithmonë një destinacion të ri dhe nuk pranon @pane." +delegate_picker.not_configured: "Asnjë agjent i deleguar nuk është konfiguruar." +delegate_picker.no_parent_pane: "Asnjë panel pune nuk është i disponueshëm për t'u ndarë." +delegate_picker.launch_failed: "Delegati nuk mund të hapej: %{error}" commands.help_title: " Ndihmë " commands.help_header: "Komandat me vizë — shkruani / në fushën e hyrjes." commands.help_escape_hint: " //text Dërgo një '/' fjalëpërfjalshëm (anashkalon analizuesin e komandave)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Mbyll këtë ndihmë" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ për të naviguar • ← → për të ndërruar butonat • Enter për të zgjedhur • Esc për të anuluar)" recommendations.button_run_command: "[ Ekzekuto komandën ]" +recommendations.button_send_to_delegate: "[Dërgo delegatit]" recommendations.button_insert_in_terminal: "Fut në Terminal" recommendations.button_open_in_new_tab: "Hap në skedën e re ↵" recommendations.button_open_in_new_panel: "Hap në panelin e ri ↵" @@ -198,12 +207,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Zgjidhni agjentin për këtë skedë (/agent për të kaluar drejtpërdrejt)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Përgatitni një detyrë dhe hapni një agjent delegatësh (/delegate )" # ── Ekzekutimi i rekomandimit (src/coordinator.rs) ────────────────────────── system.choice_execution_failed: "Zgjedhja %{choice} dështoi: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Zgjidh panelin e terminalit (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Nuk disponohen panele terminale të shkrueshme." +pane_picker.target_unavailable: "Paneli i zgjedhur nuk është më i disponueshëm." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Zgjidhni agjentin (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nuk u gjet asnjë CLI agjenti i disponueshëm në këtë makinë." # {Locked="CLI"} diff --git a/tools/wta/locales/sr-Cyrl-BA.yml b/tools/wta/locales/sr-Cyrl-BA.yml index 88491c324f..daaf7a2dd3 100644 --- a/tools/wta/locales/sr-Cyrl-BA.yml +++ b/tools/wta/locales/sr-Cyrl-BA.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Слике: %{items}" # {Locked="📎","%{items} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / команде " +delegate_picker.title: "[[ЛИНЕ10]] Делегирајте одредиште " +delegate_picker.tab: "[[ЛИНЕ9]]Нова картица" +delegate_picker.panel: "[[ЛИНЕ8]]Нова табла" +delegate_picker.intent_required: "[[ЛИНЕ3]]Опишите посао за делегирање." +delegate_picker.pane_not_allowed: "[[ЛИНЕ7]__ПХ0__ увек прави ново одредиште и не прихвата __ПХ3__." +delegate_picker.not_configured: "[[ЛИНЕ6]]Није конфигурисан ниједан агент за делегирање." +delegate_picker.no_parent_pane: "[[ЛИНЕ5]]Није доступно радно окно за раздвајање." +delegate_picker.launch_failed: "[[ЛИНЕ4]]Није могуће покренути делегата: __ПХ2__" commands.help_title: " Помоћ " commands.help_header: "Команде са косом цртом — откуцајте / у пољу за унос." commands.help_escape_hint: " //text Пошаљи дословно '/' (заобилази парсер команди)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Поново покрени агента" commands.stop.summary: "Откажи упит у току" commands.sessions.summary: "Отвори бирач претходних сесија (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Изаберите агент за ову картицу (/agent за директно пребацивање)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "[[ЛИНЕ1]]Припремите задатак и отворите делегираног агента (__ПХ0__ __ПХ1__)" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ за навигацију • ← → за пребацивање дугмади • Enter за избор • Esc за отказивање)" recommendations.button_run_command: "[ Покрени команду ]" +recommendations.button_send_to_delegate: "[[ЛИНЕ14]][ Пошаљи делегату ]" recommendations.button_insert_in_terminal: "Убаци у Terminal" recommendations.button_open_in_new_tab: "Отвори у новој картици ↵" recommendations.button_open_in_new_panel: "Отвори у новом панелу ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Избор %{choice} није успио: %{err # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "[[ЛИНЕ13]]Изаберите терминалско окно (__ПХ9__ __ПХ10__ • __ПХ4__ • __ПХ6__)" +pane_picker.empty: "[[ЛИНЕ11]]Није доступно ниједно терминалско окно за писање." +pane_picker.target_unavailable: "[[ЛИНЕ12]]Изабрано окно више није доступно." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Изаберите агент (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ниједан доступан CLI агента није пронађен на овом рачунару." # {Locked="CLI"} diff --git a/tools/wta/locales/sr-Cyrl-RS.yml b/tools/wta/locales/sr-Cyrl-RS.yml index 32c868dc61..9b068f6cb5 100644 --- a/tools/wta/locales/sr-Cyrl-RS.yml +++ b/tools/wta/locales/sr-Cyrl-RS.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Слике: %{items}" # {Locked="📎","%{items} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / команде " +delegate_picker.title: "[[ЛИНЕ10]] Делегирајте одредиште " +delegate_picker.tab: "[[ЛИНЕ9]]Нова картица" +delegate_picker.panel: "[[ЛИНЕ8]]Нова табла" +delegate_picker.intent_required: "[[ЛИНЕ3]]Опишите посао за делегирање." +delegate_picker.pane_not_allowed: "[[ЛИНЕ7]__ПХ0__ увек прави ново одредиште и не прихвата __ПХ3__." +delegate_picker.not_configured: "[[ЛИНЕ6]]Није конфигурисан ниједан агент за делегирање." +delegate_picker.no_parent_pane: "[[ЛИНЕ5]]Није доступно радно окно за раздвајање." +delegate_picker.launch_failed: "[[ЛИНЕ4]]Није могуће покренути делегата: __ПХ2__" commands.help_title: " Помоћ " commands.help_header: "Команде са косом цртом — откуцајте / у пољу за унос." commands.help_escape_hint: " //text Пошаљи дословно '/' (заобилази парсер команди)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Поново покрени агента" commands.stop.summary: "Откажи упит у току" commands.sessions.summary: "Отвори бирач претходних сесија (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Изаберите агент за ову картицу (/agent за директно пребацивање)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "[[ЛИНЕ1]]Припремите задатак и отворите делегираног агента (__ПХ0__ __ПХ1__)" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ за навигацију • ← → за пребацивање дугмади • Enter за избор • Esc за отказивање)" recommendations.button_run_command: "[ Покрени команду ]" +recommendations.button_send_to_delegate: "[[ЛИНЕ14]][ Пошаљи делегату ]" recommendations.button_insert_in_terminal: "Убаци у Terminal" recommendations.button_open_in_new_tab: "Отвори у новој картици ↵" recommendations.button_open_in_new_panel: "Отвори у новом панелу ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Избор %{choice} није успео: %{err # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "[[ЛИНЕ13]]Изаберите терминалско окно (__ПХ9__ __ПХ10__ • __ПХ4__ • __ПХ6__)" +pane_picker.empty: "[[ЛИНЕ11]]Није доступно ниједно терминалско окно за писање." +pane_picker.target_unavailable: "[[ЛИНЕ12]]Изабрано окно више није доступно." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Изаберите агент (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ниједан доступан CLI агента није пронађен на овом рачунару." # {Locked="CLI"} diff --git a/tools/wta/locales/sr-Latn-RS.yml b/tools/wta/locales/sr-Latn-RS.yml index 36f53ec5fe..331c6f68c9 100644 --- a/tools/wta/locales/sr-Latn-RS.yml +++ b/tools/wta/locales/sr-Latn-RS.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Slike: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komande " +delegate_picker.title: "Delegirajte odredište" +delegate_picker.tab: "Nova kartica" +delegate_picker.panel: "Novi panel" +delegate_picker.intent_required: "Opišite posao za delegiranje." +delegate_picker.pane_not_allowed: "__PH0__ uvek kreira novo odredište i ne prihvata __PH3__." +delegate_picker.not_configured: "Nijedan delegatski agent nije konfigurisan." +delegate_picker.no_parent_pane: "Nijedan radni okno nije dostupan za razdvajanje." +delegate_picker.launch_failed: "Nije moguće pokrenuti delegata: __PH2__" commands.help_title: " Pomoć " commands.help_header: "Komande sa kosom crtom — otkucajte / u polju za unos." commands.help_escape_hint: " //text Pošalji doslovno '/' (zaobilazi parser komandi)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Ponovo pokreni agenta" commands.stop.summary: "Otkaži upit u toku" commands.sessions.summary: "Otvori birač prethodnih sesija (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Izaberite agent za ovu karticu (/agent za direktno prebacivanje)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Pripremite zadatak i otvorite agenta delegata (__PH0__ __PH1__)" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ za navigaciju • ← → za prebacivanje dugmadi • Enter za izbor • Esc za otkazivanje)" recommendations.button_run_command: "[ Pokreni komandu ]" +recommendations.button_send_to_delegate: "[Pošalji delegatu]" recommendations.button_insert_in_terminal: "Ubaci u Terminal" recommendations.button_open_in_new_tab: "Otvori u novoj kartici ↵" recommendations.button_open_in_new_panel: "Otvori u novom panelu ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Izbor %{choice} nije uspeo: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Izaberite okno terminala (__PH9__ __PH10__ • __PH4__ • __PH6__)" +pane_picker.empty: "Nema dostupnih terminalskih okna za pisanje." +pane_picker.target_unavailable: "Izabrano okno više nije dostupno." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Izaberite agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Nijedan dostupan CLI agenta nije pronađen na ovom računaru." # {Locked="CLI"} diff --git a/tools/wta/locales/sv-SE.yml b/tools/wta/locales/sv-SE.yml index 6c1e3c6d33..94c7f7fc4d 100644 --- a/tools/wta/locales/sv-SE.yml +++ b/tools/wta/locales/sv-SE.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Bilder: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / kommandon " +delegate_picker.title: " Delegera destination " +delegate_picker.tab: "Ny flik" +delegate_picker.panel: "Ny panel" +delegate_picker.intent_required: "Beskriv arbetet att delegera." +delegate_picker.pane_not_allowed: "/delegate skapar alltid en ny destination och accepterar inte @pane." +delegate_picker.not_configured: "Ingen delegatagent är konfigurerad." +delegate_picker.no_parent_pane: "Ingen arbetsruta är tillgänglig att dela." +delegate_picker.launch_failed: "Det gick inte att starta delegaten: %{error}" commands.help_title: " Hjälp " commands.help_header: "Snedstreckskommandon — skriv / i inmatningsfältet." commands.help_escape_hint: " //text Skicka ett bokstavligt '/' (undviker kommandotolken)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Stäng denna hjälp" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ för att navigera • ← → för att växla knappar • Enter för att välja • Esc för att avbryta)" recommendations.button_run_command: "[ Kör kommando ]" +recommendations.button_send_to_delegate: "[ Skicka till ombud ]" recommendations.button_insert_in_terminal: "Infoga i Terminal" recommendations.button_open_in_new_tab: "Öppna i ny flik ↵" recommendations.button_open_in_new_panel: "Öppna i ny panel ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Starta om agenten" commands.stop.summary: "Avbryt den pågående prompten" commands.sessions.summary: "Öppna väljaren för historiska sessioner (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Välj agenten för den här panelen (/agent för att växla direkt)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Förbered en uppgift och öppna en delegatagent (/delegate )" # ── Körning av rekommendation (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Val %{choice} misslyckades: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Välj terminalpanel (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Inga skrivbara terminalrutor är tillgängliga." +pane_picker.target_unavailable: "Den valda rutan är inte längre tillgänglig." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Välj agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Det gick inte att hitta något tillgängligt agent-CLI på den här datorn." # {Locked="CLI"} diff --git a/tools/wta/locales/ta-IN.yml b/tools/wta/locales/ta-IN.yml index 3899c32fcc..cf77f8a052 100644 --- a/tools/wta/locales/ta-IN.yml +++ b/tools/wta/locales/ta-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 படங்கள்: %{items}" # {Locked="📎 # ── கட்டளை பாப்அப் (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - ஸ்லாஷ்-கட்டளை முன்னொட்டு, ASCII ஆக இருக்க வேண்டும் commands.popup_title: " / கட்டளைகள் " +delegate_picker.title: " டெலிகேட் இலக்கு " +delegate_picker.tab: "புதிய தாவல்" +delegate_picker.panel: "புதிய பேனல்" +delegate_picker.intent_required: "ஒதுக்க வேண்டிய வேலையை விவரிக்கவும்." +delegate_picker.pane_not_allowed: "/delegate எப்போதும் ஒரு புதிய இலக்கை உருவாக்கும் மற்றும் @pane ஐ ஏற்காது." +delegate_picker.not_configured: "பிரதிநிதி ஏஜென்ட் எதுவும் உள்ளமைக்கப்படவில்லை." +delegate_picker.no_parent_pane: "பிரிப்பதற்கு வேலை செய்யும் பலகம் இல்லை." +delegate_picker.launch_failed: "பிரதிநிதியைத் தொடங்க முடியவில்லை: %{error}" commands.help_title: " உதவி " commands.help_header: "ஸ்லாஷ் கட்டளைகள் — உள்ளீட்டுப் பெட்டியில் / தட்டச்சு செய்யுங்கள்." commands.help_escape_hint: " //text நேரடி '/' அனுப்பு (கட்டளை பாகுபடுத்தியை எஸ்கேப் செய்கிறது)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "முகவரை மறுதொடக்கம் commands.stop.summary: "செயலில் உள்ள prompt-ஐ ரத்துசெய்" commands.sessions.summary: "வரலாற்று அமர்வுகள் தேர்வியைத் திற (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "இந்தப் பலகத்திற்கான ஏஜென்ட்யைத் தேர்ந்தெடுக்கவும் (நேரடியாக மாற்ற /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ஒரு பணியைத் தயாரித்து, ஒரு பிரதிநிதி முகவரைத் திறக்கவும் (/delegate )" # ── பரிந்துரைகள் பலகம் (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - விசைப் பெயர்கள் மற்றும் Return-விசை குறியீடு, மொழிபெயர்க்க வேண்டாம் recommendations.nav_hint: "(↑ ↓ வழிசெலுத்த • ← → பொத்தான்களை மாற்ற • Enter தேர்ந்தெடுக்க • Esc ரத்துசெய்ய)" recommendations.button_run_command: "[ கட்டளையை இயக்கு ]" +recommendations.button_send_to_delegate: "[ பிரதிநிதிக்கு அனுப்பு ]" recommendations.button_insert_in_terminal: "டெர்மினலில் செருகு" recommendations.button_open_in_new_tab: "புதிய தாவலில் திற ↵" recommendations.button_open_in_new_panel: "புதிய பலகத்தில் திற ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "தேர்வு %{choice} தோல்வி # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "டெர்மினல் பேனைத் தேர்ந்தெடு (↑ ↓ • Enter • Esc)" +pane_picker.empty: "எழுதக்கூடிய டெர்மினல் பேனல்கள் எதுவும் இல்லை." +pane_picker.target_unavailable: "தேர்ந்தெடுக்கப்பட்ட பலகம் இனி கிடைக்காது." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ஏஜென்ட்யைத் தேர்ந்தெடுக்கவும் (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "இந்தக் கணினியில் ஏஜென்ட் CLI எதுவும் கிடைக்கவில்லை." # {Locked="CLI"} diff --git a/tools/wta/locales/te-IN.yml b/tools/wta/locales/te-IN.yml index b76ad459b8..300f0699cb 100644 --- a/tools/wta/locales/te-IN.yml +++ b/tools/wta/locales/te-IN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 చిత్రాలు: %{items}" # {Locked=" # ── కమాండ్ పాపప్ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - స్లాష్-కమాండ్ ప్రిఫిక్స్, ASCII ఉండాలి commands.popup_title: " / కమాండ్‌లు " +delegate_picker.title: " డెలిగేట్ గమ్యం " +delegate_picker.tab: "కొత్త ట్యాబ్" +delegate_picker.panel: "కొత్త ప్యానెల్" +delegate_picker.intent_required: "ప్రతినిధి చేయవలసిన పనిని వివరించండి." +delegate_picker.pane_not_allowed: "/delegate ఎల్లప్పుడూ కొత్త గమ్యస్థానాన్ని సృష్టిస్తుంది మరియు @paneని అంగీకరించదు." +delegate_picker.not_configured: "ఏ ప్రతినిధి ఏజెంట్ కాన్ఫిగర్ చేయబడలేదు." +delegate_picker.no_parent_pane: "విభజన చేయడానికి పని చేసే పేన్ అందుబాటులో లేదు." +delegate_picker.launch_failed: "ప్రతినిధిని ప్రారంభించడం సాధ్యపడలేదు: %{error}" commands.help_title: " సహాయం " commands.help_header: "స్లాష్ కమాండ్‌లు — ఇన్‌పుట్ బాక్స్‌లో / టైప్ చేయండి." commands.help_escape_hint: " //text అక్షరాల '/' పంపండి (కమాండ్ పార్సర్‌ను ఎస్కేప్ చేస్తుంది)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ఏజెంట్‌ను పునఃప్రా commands.stop.summary: "నడుస్తున్న ప్రాంప్ట్‌ను రద్దు చేయి" commands.sessions.summary: "చారిత్రక సెషన్‌ల ఎంపికను తెరవండి (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "ఈ ట్యాబ్ కోసం ఏజెంట్‌ను ఎంచుకోండి (నేరుగా మార్చడానికి /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "టాస్క్‌ని సిద్ధం చేసి, డెలిగేట్ ఏజెంట్‌ను తెరవండి (/delegate )" # ── సిఫార్సుల ప్యానెల్ (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - కీ పేర్లు మరియు Return-కీ గ్లిఫ్, అనువదించవద్దు recommendations.nav_hint: "(↑ ↓ నావిగేట్ చేయడానికి • ← → బటన్‌లను మార్చడానికి • Enter ఎంచుకోవడానికి • Esc రద్దు చేయడానికి)" recommendations.button_run_command: "[ కమాండ్ అమలు చేయండి ]" +recommendations.button_send_to_delegate: "[ప్రతినిధికి పంపండి ]" recommendations.button_insert_in_terminal: "టెర్మినల్‌లో చొప్పించండి" recommendations.button_open_in_new_tab: "కొత్త ట్యాబ్‌లో తెరవండి ↵" recommendations.button_open_in_new_panel: "కొత్త ప్యానెల్‌లో తెరవండి ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "ఎంపిక %{choice} విఫలమైం # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "టెర్మినల్ పేన్‌ను ఎంచుకోండి (↑ ↓ • Enter • Esc)" +pane_picker.empty: "రాయదగిన టెర్మినల్ పేన్‌లు ఏవీ అందుబాటులో లేవు." +pane_picker.target_unavailable: "ఎంచుకున్న పేన్ ఇప్పుడు అందుబాటులో లేదు." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ఏజెంట్‌ను ఎంచుకోండి (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ఈ మెషీన్‌లో అందుబాటులో ఉన్న ఏజెంట్ CLI కనుగొనబడలేదు." # {Locked="CLI"} diff --git a/tools/wta/locales/th-TH.yml b/tools/wta/locales/th-TH.yml index 6c973d110a..b8ffc74d0f 100644 --- a/tools/wta/locales/th-TH.yml +++ b/tools/wta/locales/th-TH.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 รูปภาพ: %{items}" # {Locked="📎"," # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / คำสั่ง " +delegate_picker.title: " มอบหมายปลายทาง " +delegate_picker.tab: "แท็บใหม่" +delegate_picker.panel: "แผงใหม่" +delegate_picker.intent_required: "อธิบายงานที่จะมอบหมาย" +delegate_picker.pane_not_allowed: "/delegate สร้างปลายทางใหม่เสมอและไม่ยอมรับ @pane" +delegate_picker.not_configured: "ไม่มีการกำหนดค่าตัวแทนผู้รับมอบสิทธิ์" +delegate_picker.no_parent_pane: "ไม่มีบานหน้าต่างการทำงานให้แยก" +delegate_picker.launch_failed: "ไม่สามารถเปิดตัวผู้รับมอบสิทธิ์: %{error}" commands.help_title: " ช่วยเหลือ " commands.help_header: "คำสั่งสแลช — พิมพ์ / ในช่องป้อนข้อมูล" commands.help_escape_hint: " //text ส่ง '/' ตามตัวอักษร (เลี่ยงตัววิเคราะห์คำสั่ง)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc ปิดหน้าต่างช่ # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ เลื่อนเลือก • ← → สลับการกระทำ • Enter เพื่อเลือก • Esc เพื่อยกเลิก)" recommendations.button_run_command: "[ เรียกใช้คำสั่ง ]" +recommendations.button_send_to_delegate: "[ ส่งไปยังผู้รับมอบสิทธิ์ ]" recommendations.button_insert_in_terminal: "แทรกใน Terminal" recommendations.button_open_in_new_tab: "เปิดในแท็บใหม่ ↵" recommendations.button_open_in_new_panel: "เปิดในแผงใหม่ ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Restart agent" commands.stop.summary: "Cancel the in-flight prompt" commands.sessions.summary: "Open the historical sessions picker (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "เลือกตัวแทนสำหรับแผงนี้ (/agent เพื่อสลับโดยตรง)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "เตรียมงานและเปิดตัวแทนรับมอบสิทธิ์ (/delegate )" # ── การดำเนินการคำแนะนำ (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "ตัวเลือก %{choice} ล้มเหลว: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "เลือกบานหน้าต่างเทอร์มินัล (↑ ↓ • Enter • Esc)" +pane_picker.empty: "ไม่มีบานหน้าต่างเทอร์มินัลที่เขียนได้" +pane_picker.target_unavailable: "ช่องที่เลือกไม่สามารถใช้งานได้อีกต่อไป" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "เลือกตัวแทน (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "ไม่พบ CLI ตัวแทนที่พร้อมใช้งานบนเครื่องนี้" # {Locked="CLI"} diff --git a/tools/wta/locales/tr-TR.yml b/tools/wta/locales/tr-TR.yml index b0b8da8323..3000b1d9fb 100644 --- a/tools/wta/locales/tr-TR.yml +++ b/tools/wta/locales/tr-TR.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Görseller: %{items}" # {Locked="📎","%{items} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / komutlar " +delegate_picker.title: " Hedefi delege et " +delegate_picker.tab: "Yeni sekme" +delegate_picker.panel: "Yeni panel" +delegate_picker.intent_required: "Delege edilecek işi açıklayın." +delegate_picker.pane_not_allowed: "/delegate her zaman yeni bir hedef oluşturur ve @pane'yi kabul etmez." +delegate_picker.not_configured: "Hiçbir temsilci temsilcisi yapılandırılmadı." +delegate_picker.no_parent_pane: "Bölünecek çalışma bölmesi yok." +delegate_picker.launch_failed: "Yetkili başlatılamadı: %{error}" commands.help_title: " Yardım " commands.help_header: "Eğik çizgi komutları — giriş kutusuna / yazın." commands.help_escape_hint: " //text Düz '/' gönder (komut ayrıştırıcısını atla)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "Aracıyı yeniden başlat" commands.stop.summary: "Devam eden istemi iptal et" commands.sessions.summary: "Geçmiş oturum seçicisini aç (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Bu sekme için aracıyı seçin (doğrudan geçmek için /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Bir görev hazırlayın ve bir temsilci temsilci açın (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ gezinmek için • ← → düğmeler arasında geçiş yapmak için • Enter seçmek için • Esc iptal etmek için)" recommendations.button_run_command: "[ Komutu çalıştır ]" +recommendations.button_send_to_delegate: "[ Yetkiye gönder ]" recommendations.button_insert_in_terminal: "Terminal'e ekle" recommendations.button_open_in_new_tab: "Yeni Sekmede Aç ↵" recommendations.button_open_in_new_panel: "Yeni Panelde Aç ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "%{choice} seçimi başarısız oldu: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminal bölmesini seçin (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Yazılabilir terminal bölmesi yok." +pane_picker.target_unavailable: "Seçili bölme artık mevcut değil." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Aracı seçin (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Bu makinede kullanılabilir bir aracı CLI'sı bulunamadı." # {Locked="CLI"} diff --git a/tools/wta/locales/tt-RU.yml b/tools/wta/locales/tt-RU.yml index 0e376b63ff..ff72f3afee 100644 --- a/tools/wta/locales/tt-RU.yml +++ b/tools/wta/locales/tt-RU.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Рәсемнәр: %{items}" # {Locked="📎","%{ # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / боерыклар " +delegate_picker.title: " Делегат " +delegate_picker.tab: " Яңа кыстыргыч" +delegate_picker.panel: " Яңа панель" +delegate_picker.intent_required: " Тапшыру өчен эшне сурәтләгез." +delegate_picker.pane_not_allowed: " __ PH0__ һәрвакыт яңа юнәлеш тудыра һәм @pane кабул итми." +delegate_picker.not_configured: " Бер делегат агент конфигурацияләнмәгән." +delegate_picker.no_parent_pane: " Бөлү өчен эш тактасы юк." +delegate_picker.launch_failed: " Делегатны җибәрә алмадым: %{error}" commands.help_title: " Ярдәм " commands.help_header: "Слэш боерыклары — кертү кырына / языгыз." commands.help_escape_hint: " //text Туры мәгънәдәге '/' җибәрү (боерык анализаторын читләп үтү)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "Агентны яңадан старт" commands.stop.summary: "Башкарылучы сорауны кире кагу" commands.sessions.summary: "Тарихи сеанслар сайлагычын ачу (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Бу панель өчен агент сайлагыз (туры алыштыру өчен /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: " Бирем әзерләгез һәм делегат агентын ачыгыз (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ навигация өчен • ← → төймәләр арасында күчү өчен • Enter сайлау өчен • Esc баш тарту өчен)" recommendations.button_run_command: "[ Боерыкны башкару ]" +recommendations.button_send_to_delegate: " [Делегатка җибәр]" recommendations.button_insert_in_terminal: "Terminal-га кертү" recommendations.button_open_in_new_tab: "Яңа табда ачу ↵" recommendations.button_open_in_new_panel: "Яңа панельдә ачу ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "%{choice} сайлавы уңышсыз бул # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: " Терминал тактасын сайлагыз (↑ ↓ • Enter • Esc)" +pane_picker.empty: " Терминал такталары юк." +pane_picker.target_unavailable: " Сайланган такта инде мөмкин түгел." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Агент сайлагыз (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Бу компьютерда агентның бердә бер мөмкин булган CLI табылмады." # {Locked="CLI"} diff --git a/tools/wta/locales/ug-CN.yml b/tools/wta/locales/ug-CN.yml index f011f3184c..953348d628 100644 --- a/tools/wta/locales/ug-CN.yml +++ b/tools/wta/locales/ug-CN.yml @@ -61,6 +61,14 @@ input.image_attachments: "📎 رەسىملەر: %{items}" # {Locked="📎","%{ # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────────────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / بۇيرۇقلار " +delegate_picker.title: " ۋەكىللەر مەنزىلى " +delegate_picker.tab: " يېڭى بەتكۈچ" +delegate_picker.panel: " يېڭى گۇرۇپپا" +delegate_picker.intent_required: " ۋەكىللىك قىلىدىغان ئەسەرنى تەسۋىرلەڭ." +delegate_picker.pane_not_allowed: " __ PH0__ ھەمىشە يېڭى مەنزىل ھاسىل قىلىدۇ ۋە @pane نى قوبۇل قىلمايدۇ." +delegate_picker.not_configured: " ھېچقانداق ۋەكىل ۋاكالەتچىسى سەپلەنمىدى." +delegate_picker.no_parent_pane: " بۆلۈنۈشكە ھېچقانداق خىزمەت تاختىسى يوق." +delegate_picker.launch_failed: " ۋەكىلنى قوزغىتالمىدى: %{error}" # Title bar of the slash-commands help popup commands.help_title: " ياردەم " commands.help_header: "ئىسلەش بۇيرۇقلىرى — كىرگۈزۈش رامكىسىغا / كىرگۈزۈڭ." @@ -79,11 +87,15 @@ commands.restart.summary: "AI ئاگېنتىنى قايتا قوزغات" commands.stop.summary: "ئىجرا قىلىنىۋاتقان سوراقنى بىكار قىلىش" commands.sessions.summary: "تارىخىي سېسىيەلەر تاللىغۇچىنى ئېچىش (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "بۇ بەت ئۈچۈن ۋاكالەتچى تاللاڭ (بىۋاسىتە الماشتۇرۇش ئۈچۈن /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: " بىر ۋەزىپە تەييارلاپ ، ۋەكىل ۋاكالەتچىسى ئېچىڭ (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ───────────────────────────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ يۆتكىلىش ئۈچۈن • ← → كۇنۇپكىلارنى ئالماشتۇرۇش ئۈچۈن • Enter تاللاش ئۈچۈن • Esc بىكار قىلىش ئۈچۈن)" recommendations.button_run_command: "[ بۇيرۇقنى ئىجرا قىلىش ]" +recommendations.button_send_to_delegate: " [ۋەكىل ئەۋەتىش]" recommendations.button_insert_in_terminal: "تېرمىنالغا قىستۇرۇش" recommendations.button_open_in_new_tab: "يېڭى بەتكۈچتە ئېچىش ↵" recommendations.button_open_in_new_panel: "يېڭى تاختىدا ئېچىش ↵" @@ -214,6 +226,11 @@ system.choice_execution_failed: "تاللاش %{choice} مەغلۇپ بولدى: # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: " تېرمىنال تاختىسىنى تاللاڭ (↑ ↓ • Enter • Esc)" +pane_picker.empty: " يازغىلى بولىدىغان تېرمىنال تاختىسى يوق." +pane_picker.target_unavailable: " تاللانغان تاختىنى ئەمدى ئىشلەتكىلى بولمايدۇ." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ۋاكالەتچى تاللاڭ (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "بۇ ماشىنىدىن ھېچقانداق ۋاكالەتچى CLI تېپىلمىدى." # {Locked="CLI"} diff --git a/tools/wta/locales/uk-UA.yml b/tools/wta/locales/uk-UA.yml index 36e1537946..6af57eac35 100644 --- a/tools/wta/locales/uk-UA.yml +++ b/tools/wta/locales/uk-UA.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Зображення: %{items}" # {Locked="📎" # ── Спливаюче вікно команд (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - префікс слеш-команди, має залишатися ASCII commands.popup_title: " / команди " +delegate_picker.title: " Місце призначення делегата " +delegate_picker.tab: "Нова вкладка" +delegate_picker.panel: "Нова панель" +delegate_picker.intent_required: "Опишіть роботу, яку потрібно делегувати." +delegate_picker.pane_not_allowed: "/delegate завжди створює новий пункт призначення й не приймає @pane." +delegate_picker.not_configured: "Агент делегування не налаштовано." +delegate_picker.no_parent_pane: "Немає доступної робочої панелі для розділення." +delegate_picker.launch_failed: "Не вдалося запустити делегат: %{error}" commands.help_title: " Довідка " commands.help_header: "Слеш-команди — введіть / у полі введення." commands.help_escape_hint: " //text Надіслати літерал '/' (екранує аналізатор команд)" # {Locked="//text","/"} @@ -73,10 +81,14 @@ commands.restart.summary: "Перезапустити агента" commands.stop.summary: "Скасувати поточний запит" commands.sessions.summary: "Відкрити вибір історичних сеансів (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Виберіть агент для цієї вкладки (/agent для прямого перемикання)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Підготуйте завдання та відкрийте агент делегування (/delegate )" # ── Панель рекомендацій (src/ui/recommendations.rs) ─────────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - назви клавіш і символ клавіші Enter, не перекладати recommendations.nav_hint: "(↑ ↓ навігація • ← → перемикання кнопок • Enter вибрати • Esc скасувати)" recommendations.button_run_command: "[ Виконати команду ]" +recommendations.button_send_to_delegate: "[ Надіслати делегату ]" recommendations.button_insert_in_terminal: "Вставити в термінал" recommendations.button_open_in_new_tab: "Відкрити в новій вкладці ↵" recommendations.button_open_in_new_panel: "Відкрити в новій панелі ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "Не вдалося виконати вибір # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Виберіть панель терміналу (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Немає доступних панелей терміналів для запису." +pane_picker.target_unavailable: "Вибрана панель більше недоступна." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Виберіть агент (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "На цьому комп’ютері не знайдено жодного доступного CLI агента." # {Locked="CLI"} diff --git a/tools/wta/locales/ur-PK.yml b/tools/wta/locales/ur-PK.yml index 5627613a70..323c321033 100644 --- a/tools/wta/locales/ur-PK.yml +++ b/tools/wta/locales/ur-PK.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 تصاویر: %{items}" # {Locked="📎","%{item # ── کمانڈ پاپ اپ (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - سلیش-کمانڈ پریفکس، ASCII ہونا ضروری ہے commands.popup_title: " / کمانڈز " +delegate_picker.title: " ڈیلیگیٹ منزل " +delegate_picker.tab: "نیا ٹیب" +delegate_picker.panel: "نیا پینل" +delegate_picker.intent_required: " تفویض کرنے کے لیے کام کی وضاحت کریں۔" +delegate_picker.pane_not_allowed: "/delegate ہمیشہ ایک نئی منزل بناتا ہے اور @pane کو قبول نہیں کرتا ہے۔" +delegate_picker.not_configured: "کوئی ڈیلیگیٹ ایجنٹ کنفیگر نہیں ہے۔" +delegate_picker.no_parent_pane: "کوئی ورکنگ پین تقسیم کرنے کے لیے دستیاب نہیں ہے۔" +delegate_picker.launch_failed: " مندوب کو لانچ نہیں کیا جا سکا: %{error}" commands.help_title: " مدد " commands.help_header: "سلیش کمانڈز — ان پٹ باکس میں / ٹائپ کریں۔" commands.help_escape_hint: " //text لفظی '/' بھیجیں (کمانڈ پارسر سے فرار)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "ایجنٹ کو دوبارہ شروع کریں" commands.stop.summary: "جاری پرامپٹ منسوخ کریں" commands.sessions.summary: "تاریخی سیشنز کا انتخاب کار کھولیں (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "اس ٹیب کے لیے ایجنٹ منتخب کریں (براہ راست تبدیل کرنے کے لیے /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "ایک ٹاسک تیار کریں اور ڈیلیگیٹ ایجنٹ کھولیں (/delegate )" # ── سفارشات پینل (src/ui/recommendations.rs) ─────────────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - کلید کے نام اور Return-کلید گلف، ترجمہ نہ کریں recommendations.nav_hint: "(↑ ↓ نیویگیٹ کرنے کے لیے • ← → بٹن تبدیل کرنے کے لیے • Enter منتخب کرنے کے لیے • Esc منسوخ کرنے کے لیے)" recommendations.button_run_command: "[ کمانڈ چلائیں ]" +recommendations.button_send_to_delegate: "[ مندوب کو بھیجیں ]" recommendations.button_insert_in_terminal: "ٹرمینل میں داخل کریں" recommendations.button_open_in_new_tab: "نئی ٹیب میں کھولیں ↵" recommendations.button_open_in_new_panel: "نئے پینل میں کھولیں ↵" @@ -206,6 +218,11 @@ system.choice_execution_failed: "انتخاب %{choice} ناکام ہو گیا: # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "ٹرمینل پین کو منتخب کریں (↑ ↓ • Enter • Esc)" +pane_picker.empty: "کوئی قابل تحریر ٹرمینل پینز دستیاب نہیں ہیں۔" +pane_picker.target_unavailable: "منتخب کردہ پین اب دستیاب نہیں ہے۔" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "ایجنٹ منتخب کریں (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "اس مشین پر کوئی ایجنٹ CLI دستیاب نہیں ملا۔" # {Locked="CLI"} diff --git a/tools/wta/locales/uz-Latn-UZ.yml b/tools/wta/locales/uz-Latn-UZ.yml index 63117fd769..4440230e6f 100644 --- a/tools/wta/locales/uz-Latn-UZ.yml +++ b/tools/wta/locales/uz-Latn-UZ.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Rasmlar: %{items}" # {Locked="📎","%{items}"} # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / buyruqlar " +delegate_picker.title: " Delegatsiya manzili " +delegate_picker.tab: "Yangi varaq" +delegate_picker.panel: "Yangi panel" +delegate_picker.intent_required: "Vakilat qilinadigan ishni tavsiflang." +delegate_picker.pane_not_allowed: "/delegate har doim yangi manzil yaratadi va @pane qabul qilmaydi." +delegate_picker.not_configured: "Hech qanday delegat agenti sozlanmagan." +delegate_picker.no_parent_pane: "Bo‘lish uchun hech qanday ishchi panel mavjud emas." +delegate_picker.launch_failed: "Delegatni ishga tushirib bo‘lmadi: %{error}" commands.help_title: " Yordam " commands.help_header: "Slash buyruqlari — kiritish maydoniga / yozing." commands.help_escape_hint: " //text Toʻgʻridan-toʻgʻri '/' yuborish (buyruq tahlilchisini chetlab oʻtish)" # {Locked="//text","/"} @@ -76,11 +84,15 @@ commands.restart.summary: "Agentni qayta ishga tushiring" commands.stop.summary: "Bajarilayotgan soʻrovni bekor qilish" commands.sessions.summary: "Tarixiy seanslar tanlagichini ochish (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Bu panel uchun agentni tanlang (toʻgʻridan-toʻgʻri almashtirish uchun /agent )" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Vazifa tayyorlang va delegat agentini oching (/delegate )" # ── Recommendations panel (src/ui/recommendations.rs) ─────────────────────── # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ navigatsiya uchun • ← → tugmalarni almashtirish uchun • Enter tanlash uchun • Esc bekor qilish uchun)" recommendations.button_run_command: "[ Buyruqni bajarish ]" +recommendations.button_send_to_delegate: "[ Vakilga yuborish ]" recommendations.button_insert_in_terminal: "Terminal-ga kiritish" recommendations.button_open_in_new_tab: "Yangi varaqda ochish ↵" recommendations.button_open_in_new_panel: "Yangi panelda ochish ↵" @@ -205,6 +217,11 @@ system.choice_execution_failed: "%{choice} tanlovi bajarilmadi: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Terminal panelini tanlang (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Yoziladigan terminal paneli mavjud emas." +pane_picker.target_unavailable: "Tanlangan panel endi mavjud emas." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Agentni tanlang (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Ushbu kompyuterda biron-bir mavjud agent CLI topilmadi." # {Locked="CLI"} diff --git a/tools/wta/locales/vi-VN.yml b/tools/wta/locales/vi-VN.yml index 9b71754462..12a718d884 100644 --- a/tools/wta/locales/vi-VN.yml +++ b/tools/wta/locales/vi-VN.yml @@ -59,6 +59,14 @@ input.image_attachments: "📎 Hình ảnh: %{items}" # {Locked="📎","%{items # ── Command popup (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - slash-command prefix, must remain ASCII commands.popup_title: " / lệnh " +delegate_picker.title: " Điểm đến của đại biểu " +delegate_picker.tab: "Tab mới" +delegate_picker.panel: "Bảng điều khiển mới" +delegate_picker.intent_required: "Mô tả công việc để ủy quyền." +delegate_picker.pane_not_allowed: "/delegate luôn tạo đích mới và không chấp nhận @pane." +delegate_picker.not_configured: "Không có tác nhân đại diện nào được định cấu hình." +delegate_picker.no_parent_pane: "Không có ngăn làm việc nào để phân chia." +delegate_picker.launch_failed: "Không thể khởi chạy đại biểu: %{error}" commands.help_title: " Trợ giúp " commands.help_header: "Lệnh dấu gạch chéo — nhập / trong ô nhập liệu." commands.help_escape_hint: " //text Gửi ký tự '/' theo nghĩa đen (bỏ qua trình phân tích lệnh)" # {Locked="//text","/"} @@ -68,6 +76,7 @@ commands.help_close_hint: " Esc Đóng trợ giúp này" # {Locked="Esc # {Locked="Enter","Esc","↵","↑","↓","←","→"} - key names and Return-key glyph, do not translate recommendations.nav_hint: "(↑ ↓ để di chuyển • ← → để chuyển hành động • Enter để chọn • Esc để hủy)" recommendations.button_run_command: "[ Chạy lệnh ]" +recommendations.button_send_to_delegate: "[ Gửi cho đại biểu ]" recommendations.button_insert_in_terminal: "Chèn vào Terminal" recommendations.button_open_in_new_tab: "Mở trong Tab mới ↵" recommendations.button_open_in_new_panel: "Mở trong Bảng mới ↵" @@ -199,12 +208,20 @@ commands.restart.summary: "Khởi động lại tác nhân" commands.stop.summary: "Hủy prompt đang chạy" commands.sessions.summary: "Mở bộ chọn phiên lịch sử (Ctrl+Shift+/)" # {Locked="Ctrl+Shift+/"} commands.agent.summary: "Chọn agent cho bảng này (/agent để chuyển trực tiếp)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "Chuẩn bị nhiệm vụ và mở tác nhân đại diện (/delegate )" # ── Thực thi đề xuất (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "Lựa chọn %{choice} không thành công: %{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "Chọn ngăn thiết bị đầu cuối (↑ ↓ • Enter • Esc)" +pane_picker.empty: "Không có bảng thiết bị đầu cuối có thể ghi nào." +pane_picker.target_unavailable: "Khung đã chọn không còn khả dụng nữa." +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "Chọn agent (↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "Không tìm thấy CLI agent khả dụng nào trên máy này." # {Locked="CLI"} diff --git a/tools/wta/locales/zh-CN.yml b/tools/wta/locales/zh-CN.yml index d93fd99e2c..a02245c89e 100644 --- a/tools/wta/locales/zh-CN.yml +++ b/tools/wta/locales/zh-CN.yml @@ -55,6 +55,14 @@ input.image_attachments: "📎 图片: %{items}" # {Locked="📎","%{items}"} # ── 命令弹出窗口 (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - 斜杠命令前缀,必须保持 ASCII commands.popup_title: " / 命令 " +delegate_picker.title: " 委托目的地 " +delegate_picker.tab: "新标签" +delegate_picker.panel: "新面板" +delegate_picker.intent_required: "描述要委派的工作。" +delegate_picker.pane_not_allowed: "/delegate 始终创建新目的地并且不接受 @pane。" +delegate_picker.not_configured: "未配置委派代理。" +delegate_picker.no_parent_pane: "没有可分割的工作窗格。" +delegate_picker.launch_failed: "无法启动委托:%{error}" commands.help_title: " 帮助 " commands.help_header: "斜杠命令 — 在输入框中键入 /。" commands.help_escape_hint: " //text 发送字面 '/'(转义命令解析器)" # {Locked="//text","/"} @@ -64,6 +72,7 @@ commands.help_close_hint: " Esc 关闭此帮助" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - 按键名称和回车键符号,不翻译 recommendations.nav_hint: "(↑ ↓ 导航 • ← → 切换按钮 • Enter 选择 • Esc 取消)" recommendations.button_run_command: "[ 运行命令 ]" +recommendations.button_send_to_delegate: "[ 发送给代理人 ]" recommendations.button_insert_in_terminal: "插入到终端" recommendations.button_open_in_new_tab: "在新标签页中打开 ↵" recommendations.button_open_in_new_panel: "在新面板中打开 ↵" @@ -194,12 +203,20 @@ commands.restart.summary: "重启智能体" commands.stop.summary: "取消进行中的提示" commands.sessions.summary: "打开历史会话选择器(Ctrl+Shift+/)" commands.agent.summary: "为此标签页选择智能体(使用 /agent 可直接切换)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "准备任务并打开委派代理 (/delegate )" # ── 建议执行 (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "选项 %{choice} 执行失败:%{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "选择终端窗格 (↑ ↓ • Enter • Esc)" +pane_picker.empty: "没有可写的终端窗格可用。" +pane_picker.target_unavailable: "所选窗格不再可用。" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "选择智能体(↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "在此计算机上未找到可用的智能体 CLI。" # {Locked="CLI"} diff --git a/tools/wta/locales/zh-TW.yml b/tools/wta/locales/zh-TW.yml index bdd1024290..cc47572a83 100644 --- a/tools/wta/locales/zh-TW.yml +++ b/tools/wta/locales/zh-TW.yml @@ -55,6 +55,14 @@ input.image_attachments: "📎 圖片: %{items}" # {Locked="📎","%{items}"} # ── 命令快顯視窗 (src/ui/command_popup.rs) ───────────────────────────────── # {Locked="/"} - 斜線命令前綴,必須保持 ASCII commands.popup_title: " / 命令 " +delegate_picker.title: "代表目的地" +delegate_picker.tab: "新標籤頁" +delegate_picker.panel: "新面板" +delegate_picker.intent_required: "描述要委派的工作。" +delegate_picker.pane_not_allowed: "/delegate 總是建立新目的地且不接受 @pane。" +delegate_picker.not_configured: "未配置委派代理。" +delegate_picker.no_parent_pane: "沒有可分割的工作窗格。" +delegate_picker.launch_failed: "無法啟動委託:%{error}" commands.help_title: " 說明 " commands.help_header: "斜線命令 — 在輸入方塊中鍵入 /。" commands.help_escape_hint: " //text 傳送字面 '/'(跳脫命令剖析器)" # {Locked="//text","/"} @@ -64,6 +72,7 @@ commands.help_close_hint: " Esc 關閉此說明" # {Locked="Esc"} # {Locked="Enter","Esc","↵","↑","↓","←","→"} - 按鍵名稱和 Return 鍵符號,請勿翻譯 recommendations.nav_hint: "(↑ ↓ 瀏覽 • ← → 切換按鈕 • Enter 選取 • Esc 取消)" recommendations.button_run_command: "[ 執行命令 ]" +recommendations.button_send_to_delegate: "[發送給代表]" recommendations.button_insert_in_terminal: "插入終端機" recommendations.button_open_in_new_tab: "在新索引標籤中開啟 ↵" recommendations.button_open_in_new_panel: "在新面板中開啟 ↵" @@ -194,12 +203,20 @@ commands.restart.summary: "重新啟動智能體" commands.stop.summary: "取消進行中的提示" commands.sessions.summary: "開啟歷史工作階段選擇器(Ctrl+Shift+/)" commands.agent.summary: "為此分頁選擇智能體(使用 /agent 可直接切換)" # {Locked="/agent",""} +commands.command.summary: "Create a terminal command card from an intent (/command )" # {Locked="/command",""} +command_card.intent_required: "Describe the terminal command you want Copilot to prepare." +commands.delegate.summary: "準備任務並開啟委派代理程式 (/delegate )" # ── 建議執行 (src/coordinator.rs) ─────────────────────────── system.choice_execution_failed: "選項 %{choice} 執行失敗:%{error}" # ── Agent picker (src/ui/agent_popup.rs) ──────────────────────────────────── # {Locked="↑","↓","Enter","Esc"} - key names, do not translate +pane_picker.title: "選擇終端窗格 (↑ ↓ • Enter • Esc)" +pane_picker.empty: "沒有可寫入的終端窗格可用。" +pane_picker.target_unavailable: "所選窗格不再可用。" +direct_command.command_required: "Enter a command after $." # {Locked="$"} +direct_command.execution_unavailable: "Terminal command execution is unavailable." agent_picker.title: "選擇智能體(↑ ↓ • Enter • Esc)" # Agent means an AI coding agent # Shown when no policy-allowed AI agent CLI is installed on the machine. system.no_agents: "在此電腦上找不到可用的智能體 CLI。" # {Locked="CLI"} diff --git a/tools/wta/prompts/prepare-delegate-prompt.md b/tools/wta/prompts/prepare-delegate-prompt.md new file mode 100644 index 0000000000..577c0a95a9 --- /dev/null +++ b/tools/wta/prompts/prepare-delegate-prompt.md @@ -0,0 +1,9 @@ +# Delegate Prompt Preparation + +Turn the user intent and supplied terminal context into a concise, complete +prompt for another interactive agent. + +Call `request_terminal_actions` exactly once with exactly one choice containing +exactly one `send` action. Put only the delegate prompt in the action's `input` +field. Do not execute it, choose a target, open a destination, or add assistant +prose. The host creates and launches the delegate destination. diff --git a/tools/wta/prompts/prepare-pane-input.md b/tools/wta/prompts/prepare-pane-input.md new file mode 100644 index 0000000000..134ab9ebc4 --- /dev/null +++ b/tools/wta/prompts/prepare-pane-input.md @@ -0,0 +1,10 @@ +# Terminal Command Proposal + +Turn the user intent into the exact input appropriate for the supplied terminal +context and propose it as a command card. + +Call `request_terminal_actions` exactly once with exactly one choice containing +exactly one `send` action. Put only the proposed terminal input in the action's +`input` field. Do not execute it, choose a pane, open a destination, or add +assistant prose. The host owns the target pane and lets the user choose Run or +Insert. diff --git a/tools/wta/src/app.rs b/tools/wta/src/app.rs index 47ee393121..d0431bed64 100644 --- a/tools/wta/src/app.rs +++ b/tools/wta/src/app.rs @@ -60,7 +60,8 @@ pub use crate::turn_context::TurnContext; use input_edit::{next_word_boundary, prev_word_boundary, INPUT_HISTORY_MAX_ENTRIES}; pub(crate) use tab_state::DEFAULT_TAB_ID; pub use tab_state::{ - ChatMessage, CompletedTurn, NoticeKind, PermissionState, RecommendationFocus, TabSession, View, + ChatMessage, CompletedTurn, NoticeKind, PendingPreparation, PermissionState, + PreparedActionMode, RecommendationFocus, TabSession, View, }; pub use turn_state::{AutofixContext, ChunkKind, SubmittedPrompt, TurnOutcome, TurnState}; @@ -3801,6 +3802,7 @@ impl App { AppEvent::AgentPasteTextFailed { .. } => "agent_paste_text_failed", AppEvent::PromptTemplateLoaded { .. } => "prompt_template_loaded", AppEvent::PromptTargetResolved { .. } => "prompt_target_resolved", + AppEvent::DelegateDestinationReady { .. } => "delegate_destination_ready", AppEvent::AgentError { .. } => "agent_error", AppEvent::AgentSoftStop { .. } => "agent_soft_stop", AppEvent::AgentBusy { .. } => "agent_busy", @@ -4448,6 +4450,7 @@ impl App { if !tab.agent_picker_open || self.available_agents.is_empty() { return None; } + Some(crate::ui::AgentPopupState { agents: &self.available_agents, selected: tab.agent_picker_selected, @@ -4457,6 +4460,74 @@ impl App { }) } + pub fn pane_popup_state(&self) -> Option { + let tab = self.current_tab(); + if !tab.pane_targets.picker_open { + return None; + } + let candidates = tab + .pane_targets + .candidates() + .into_iter() + .map(|pane| crate::ui::PanePopupCandidate { + label: format!("@{}", pane.mention_label()), + detail: pane.picker_detail(), + }) + .collect::>(); + Some(crate::ui::PanePopupState { + candidates, + selected: tab.pane_targets.picker_selected, + pane_focused: self.pane_focused, + }) + } + + pub fn delegate_popup_state(&self) -> Option { + self.current_tab() + .delegate_picker_open + .then_some(crate::ui::DelegatePopupState { + selected: self.current_tab().delegate_picker_selected, + pane_focused: self.pane_focused, + }) + } + + fn sync_pane_picker_chip_target(&mut self) { + let tab_id = self.active_tab_key().to_string(); + self.recompute_chip_override(&tab_id); + } + + fn cancel_pane_picker(&mut self) { + let tab = self.current_tab_mut(); + tab.pane_targets.picker_open = false; + tab.clear_input(); + self.sync_pane_picker_chip_target(); + } + + fn commit_pane_picker(&mut self) { + let candidate = { + let tab = self.current_tab(); + tab.pane_targets + .candidates() + .get(tab.pane_targets.picker_selected) + .map(|pane| (pane.session_id.clone(), pane.mention_label())) + }; + let Some((session_id, _display_label)) = candidate else { + self.current_tab_mut().pane_targets.picker_open = false; + self.sync_pane_picker_chip_target(); + return; + }; + let tab = self.current_tab_mut(); + if tab.input.trim_start().eq_ignore_ascii_case("/command @") { + tab.replace_input("/command ".to_string()); + } else if tab.input.trim_start().eq_ignore_ascii_case("/cmd @") { + tab.replace_input("/cmd ".to_string()); + } else { + tab.clear_input(); + } + tab.pane_targets.agent_target_session_id = Some(session_id); + tab.pane_targets.picker_open = false; + self.sync_pane_picker_chip_target(); + } + /// Handle Enter for the slash-command system. Centralizes all three /// intents in one place so the giant `handle_key` match has a single /// guard instead of an inline block plus a separate popup arm: @@ -4560,6 +4631,67 @@ impl App { } } + fn try_execute_direct_pane_command(&mut self) -> bool { + let input = self.current_tab().input.clone(); + let Some(command) = input.trim_start().strip_prefix('$') else { + return false; + }; + let command = command.trim(); + if command.is_empty() { + self.current_tab_mut().messages.push(ChatMessage::warning( + t!("direct_command.command_required").into_owned(), + )); + return true; + } + + let target_pane_id = self + .current_tab() + .pane_targets + .agent_target() + .map(|pane| pane.session_id.clone()) + .or_else(|| self.source_session_id.clone()) + .or_else(|| { + self.current_tab() + .pane_targets + .candidates() + .into_iter() + .find(|pane| pane.is_active) + .map(|pane| pane.session_id.clone()) + }); + let Some(target_pane_id) = target_pane_id else { + self.current_tab_mut().messages.push(ChatMessage::warning( + t!("pane_picker.target_unavailable").into_owned(), + )); + return true; + }; + + self.current_tab_mut().record_input_history(&input); + self.current_tab_mut().clear_input(); + let choice = crate::coordinator::RecommendationChoice { + choice: 0, + title: command.to_string(), + rationale: String::new(), + actions: vec![crate::coordinator::RecommendedAction::Send { + parent: target_pane_id.clone(), + input: command.to_string(), + }], + }; + if self + .recommendation_tx + .send(crate::coordinator::ChoiceExecution { + choice, + insert_only: false, + context: TurnContext::with_target_pane(target_pane_id), + }) + .is_err() + { + self.current_tab_mut().messages.push(ChatMessage::error( + t!("direct_command.execution_unavailable").into_owned(), + )); + } + true + } + /// Append the localized "connection to the agent was lost — /restart to /// reconnect" line to the active tab. Shown when the user invokes any /// slash command other than /restart while the transport to master is @@ -4606,7 +4738,275 @@ impl App { CommandKind::Agent => self.cmd_agent(cmd.rest), CommandKind::Model => self.cmd_model(cmd.rest), CommandKind::Move => self.cmd_move(cmd.rest), - } + CommandKind::Command => self.cmd_command(cmd.rest), + CommandKind::Delegate => self.cmd_delegate(cmd.rest), + } + } + + fn cmd_command(&mut self, rest: String) { + self.submit_command_preparation(rest); + } + + fn cmd_delegate(&mut self, rest: String) { + let intent = rest.trim(); + if intent.is_empty() { + self.current_tab_mut().messages.push(ChatMessage::warning( + t!("delegate_picker.intent_required").into_owned(), + )); + return; + } + if intent + .split_whitespace() + .any(|token| token.starts_with('@')) + { + self.current_tab_mut().messages.push(ChatMessage::warning( + t!("delegate_picker.pane_not_allowed").into_owned(), + )); + return; + } + if !self.current_tab().turn.accepts_new_prompt() { + self.current_tab_mut() + .messages + .push(ChatMessage::warning(t!("system.agent_busy").into_owned())); + return; + } + let tab = self.current_tab_mut(); + tab.delegate_picker_selected = match tab.last_delegate_target { + Some(crate::coordinator::OpenTarget::Panel) => 1, + _ => 0, + }; + tab.pending_delegate = Some(tab_state::PendingDelegate { + intent: intent.to_string(), + }); + tab.delegate_picker_open = true; + } + + fn commit_delegate_picker(&mut self) { + let target = if self.current_tab().delegate_picker_selected == 0 { + crate::coordinator::OpenTarget::Tab + } else { + crate::coordinator::OpenTarget::Panel + }; + let pending = { + let tab = self.current_tab_mut(); + tab.delegate_picker_open = false; + tab.last_delegate_target = Some(target); + tab.pending_delegate.take() + }; + let Some(pending) = pending else { + return; + }; + let runtime = self + .delegate_agents + .as_ref() + .and_then(|agents| agents.lock().ok()) + .and_then(|agents| agents.first().cloned()); + let Some(runtime) = runtime else { + self.current_tab_mut().messages.push(ChatMessage::error( + t!("delegate_picker.not_configured").into_owned(), + )); + return; + }; + let parent_pane = self + .current_tab() + .pane_targets + .candidates() + .into_iter() + .find(|pane| pane.is_active) + .or_else(|| { + self.current_tab() + .pane_targets + .candidates() + .into_iter() + .next() + }) + .map(|pane| pane.session_id.clone()); + if target == crate::coordinator::OpenTarget::Panel && parent_pane.is_none() { + self.current_tab_mut().messages.push(ChatMessage::error( + t!("delegate_picker.no_parent_pane").into_owned(), + )); + return; + } + + let tab_id = self.active_tab_key().to_string(); + let prompt_id = self.submit_delegate_preparation(&pending.intent); + let Some(prompt_id) = prompt_id else { + return; + }; + let Some(event_tx) = self.event_tx.clone() else { + self.current_tab_mut().messages.push(ChatMessage::error( + t!( + "delegate_picker.launch_failed", + error = "event loop unavailable" + ) + .into_owned(), + )); + return; + }; + let shell_mgr = Arc::clone(&self.shell_mgr); + tokio::task::spawn_local(async move { + let result = async { + let commandline = + crate::coordinator::build_delegate_launch_commandline_with_session( + &runtime, None, None, + )?; + let response = match target { + crate::coordinator::OpenTarget::Tab => { + shell_mgr + .wt_create_tab(Some(&commandline), None, None, None) + .await? + } + crate::coordinator::OpenTarget::Panel => { + shell_mgr + .wt_split_pane( + parent_pane.as_deref().unwrap_or_default(), + Some(&commandline), + None, + None, + None, + None, + ) + .await? + } + }; + response + .get("session_id") + .and_then(|value| match value { + serde_json::Value::String(value) => Some(value.clone()), + serde_json::Value::Number(value) => Some(value.to_string()), + _ => None, + }) + .filter(|pane_id| !pane_id.trim().is_empty()) + .ok_or_else(|| { + anyhow::anyhow!("destination response did not include a pane id") + }) + } + .await + .map_err(|error| format!("{error:#}")); + let _ = event_tx.send(AppEvent::DelegateDestinationReady { + tab_id, + prompt_id, + result, + }); + }); + } + + fn submit_delegate_preparation(&mut self, intent: &str) -> Option { + let model_text = crate::protocol::acp::prompt::delegate_preparation_request(intent); + let tab_id = self.active_tab_key().to_string(); + let prompt = PromptSubmission::new( + model_text, + Some(PaneContext { + pane_id: self.pane_id.clone(), + tab_id: Some(tab_id.clone()), + window_id: self.window_id.clone(), + cwd: None, + source_pane_id: self + .current_tab() + .pane_targets + .candidates() + .into_iter() + .find(|pane| pane.is_active) + .map(|pane| pane.session_id.clone()), + cached_source: None, + }), + ); + let prompt_id = prompt.id; + let submitted = SubmittedPrompt { + id: prompt_id, + text: intent.to_string(), + submitted_at_unix_s: prompt.submitted_at_unix_s, + context: TurnContext::default(), + autofix: None, + }; + let session_key = self + .current_tab() + .session_id + .clone() + .unwrap_or_else(|| DEFAULT_TAB_ID.to_string()); + self.current_tab_mut().pending_preparation = Some(PendingPreparation { + prompt_id, + target_session_id: String::new(), + mode: PreparedActionMode::DelegateSend, + }); + self.current_tab_mut().clear_input(); + self.turn_submit_prompt(&session_key, submitted); + if self.prompt_tx.send(prompt).is_err() { + self.current_tab_mut().pending_preparation = None; + self.current_tab_mut().turn = TurnState::Idle; + self.current_tab_mut().messages.push(ChatMessage::error( + t!( + "delegate_picker.launch_failed", + error = "model channel unavailable" + ) + .into_owned(), + )); + return None; + } + Some(prompt_id) + } + + fn submit_command_preparation(&mut self, raw_intent: String) { + if !self.current_tab().turn.accepts_new_prompt() { + self.current_tab_mut() + .messages + .push(ChatMessage::warning(t!("system.agent_busy").into_owned())); + return; + } + let intent = raw_intent.trim(); + if intent.is_empty() { + self.current_tab_mut().messages.push(ChatMessage::warning( + t!("command_card.intent_required").into_owned(), + )); + return; + } + let model_text = crate::protocol::acp::prompt::terminal_command_request(intent); + let tab_id = self.active_tab_key().to_string(); + let descriptor = self.current_tab().pane_targets.agent_target().cloned(); + let target_session_id = descriptor + .as_ref() + .map(|pane| pane.session_id.clone()) + .or_else(|| self.source_session_id.clone()) + .unwrap_or_default(); + let pane_context = PaneContext { + pane_id: self.pane_id.clone(), + tab_id: Some(tab_id.clone()), + window_id: self.window_id.clone(), + cwd: descriptor + .as_ref() + .map(|pane| pane.cwd.clone()) + .filter(|cwd| !cwd.is_empty()), + source_pane_id: (!target_session_id.is_empty()).then(|| target_session_id.clone()), + cached_source: descriptor.map(|pane| crate::pane_context::CachedPaneMetadata { + title: pane.title, + profile: pane.profile, + cwd: pane.cwd, + shell: pane.shell, + }), + }; + let prompt = PromptSubmission::new(model_text, Some(pane_context)); + let submitted = SubmittedPrompt { + id: prompt.id, + text: intent.to_string(), + submitted_at_unix_s: prompt.submitted_at_unix_s, + context: TurnContext { + target_pane_id: (!target_session_id.is_empty()).then(|| target_session_id.clone()), + }, + autofix: None, + }; + let session_key = self + .current_tab() + .session_id + .clone() + .unwrap_or_else(|| DEFAULT_TAB_ID.to_string()); + self.current_tab_mut().pending_preparation = Some(PendingPreparation { + prompt_id: prompt.id, + target_session_id, + mode: PreparedActionMode::Command, + }); + self.current_tab_mut().clear_input(); + self.turn_submit_prompt(&session_key, submitted); + let _ = self.prompt_tx.send(prompt); } /// `/help` — toggle the help overlay. @@ -4653,8 +5053,9 @@ impl App { fn cmd_new(&mut self, in_flight: bool) { if in_flight { let tab = self.current_tab_mut(); - tab.messages - .push(ChatMessage::warning(t!("system.busy_use_stop").into_owned())); + tab.messages.push(ChatMessage::warning( + t!("system.busy_use_stop").into_owned(), + )); tab.scroll_to_bottom(); return; } @@ -4679,28 +5080,28 @@ impl App { tab.scroll_to_bottom(); } - /// `/fix [hint]` — run the auto-fix prompt on demand against the active - /// terminal pane. Reuses the error-triggered autofix pipeline + /// `/fix [hint]` — run the auto-fix prompt on demand against the current + /// persistent Agent target, or the default source pane in Auto mode. + /// Reuses the error-triggered autofix pipeline /// (`PromptSubmission::is_autofix`): the agent receives the `auto-fix.md` /// template plus the working pane's recent output, and any `hint` typed /// after `/fix` is appended as an extra steer. /// /// Differences from auto-triggered autofix (`maybe_trigger_autofix`): /// there is no failing-pane notification, so (1) the helper's captured - /// source pane is resolved in the ACP client task; and - /// (2) the turn context starts without a target and is late-bound once - /// the client task resolves that working pane (`AppEvent::PromptTargetResolved` → - /// `apply_prompt_target_resolved`), so `turn_execute_card` fills - /// `Send.parent` with a real pane. The bottom-bar Pending pill is *not* - /// armed — that UI is tied to a specific failing pane, and a command typed - /// into the agent pane surfaces its result there directly. + /// source pane is resolved in the ACP client task when no persistent target + /// exists; and (2) the turn context is late-bound in that Auto-mode case. + /// The bottom-bar Pending pill is *not* armed — that UI is tied to a + /// specific failing pane, and a command typed into the agent pane surfaces + /// its result there directly. /// /// Refuses while a turn is in flight; the user should `/stop` first. fn cmd_fix(&mut self, in_flight: bool, hint: String) { if in_flight { let tab = self.current_tab_mut(); - tab.messages - .push(ChatMessage::warning(t!("system.busy_use_stop").into_owned())); + tab.messages.push(ChatMessage::warning( + t!("system.busy_use_stop").into_owned(), + )); tab.scroll_to_bottom(); return; } @@ -4719,13 +5120,30 @@ impl App { tab.autofix.generation }; - let source_pane_id = self.source_session_id.clone(); + let agent_target = self + .tab_mut(&target_tab_id) + .pane_targets + .agent_target() + .cloned(); + let source_pane_id = agent_target + .as_ref() + .map(|pane| pane.session_id.clone()) + .or_else(|| self.source_session_id.clone()); let pane_context = PaneContext { pane_id: self.pane_id.clone(), tab_id: Some(target_tab_id.clone()), window_id: self.window_id.clone(), - cwd: None, + cwd: agent_target + .as_ref() + .map(|pane| pane.cwd.clone()) + .filter(|cwd| !cwd.is_empty()), source_pane_id: source_pane_id.clone(), + cached_source: agent_target.map(|pane| crate::pane_context::CachedPaneMetadata { + title: pane.title, + profile: pane.profile, + cwd: pane.cwd, + shell: pane.shell, + }), }; let hint = hint.trim().to_string(); @@ -4796,6 +5214,12 @@ impl App { .tab_sessions .get_mut(&key) .expect("resolved tab exists"); + if tab.pending_preparation.as_ref().is_some_and(|preparation| { + preparation.prompt_id == prompt_id + && preparation.mode == PreparedActionMode::DelegateSend + }) { + return; + } let Some(prompt) = tab.turn.prompt_mut() else { return; }; @@ -4928,8 +5352,7 @@ impl App { let offset = self.current_tab().rec_scroll.offset; // `card_h` includes the inter-card gap, so subtracting it // yields the rendered card's exclusive bottom row. - let rendered_bottom_exclusive = - line_top.saturating_add(card_h.saturating_sub(1)); + let rendered_bottom_exclusive = line_top.saturating_add(card_h.saturating_sub(1)); let viewport_bottom = offset.saturating_add(viewport_height); if line_top < offset || rendered_bottom_exclusive > viewport_bottom { self.current_tab_mut().rec_scroll.set(line_top); @@ -5345,7 +5768,7 @@ impl App { /// recommendation, navigating between cards, executing/cancelling a /// card, switching the active tab. fn recompute_chip_override(&mut self, tab_id: &str) { - let new_target = self.tab_mut(tab_id).compute_chip_card_target(); + let new_target = self.tab_mut(tab_id).compute_chip_target(); let tab = self.tab_mut(tab_id); if tab.last_emitted_chip_override == new_target { return; @@ -5362,7 +5785,7 @@ impl App { /// chip-visibility hook runs *before* `IsSourceOfAgentPane` is set /// leaves the chip hidden until the user induces another transition. pub fn recompute_chip_override_initial(&mut self, tab_id: &str) { - let new_target = self.tab_mut(tab_id).compute_chip_card_target(); + let new_target = self.tab_mut(tab_id).compute_chip_target(); self.tab_mut(tab_id).last_emitted_chip_override = new_target.clone(); emit_agent_chip_target(tab_id, new_target.as_deref()); } @@ -5379,6 +5802,9 @@ impl App { /// Returns the number of buttons for the currently selected choice card. /// Send actions have 2 buttons (Run, Insert); OpenAndSend has 1 button. fn button_count_for_selected(&self) -> usize { + if self.current_tab().active_prepared_mode.is_some() { + return 1; + } self.selected_recommendation_choice() .map(|c| if self.is_send_choice(c) { 2 } else { 1 }) .unwrap_or(1) diff --git a/tools/wta/src/app/autofix.rs b/tools/wta/src/app/autofix.rs index b570ba33c8..7970c4f521 100644 --- a/tools/wta/src/app/autofix.rs +++ b/tools/wta/src/app/autofix.rs @@ -64,10 +64,7 @@ pub enum AutofixBarSnapshot { hotkey_hint: String, }, /// Analysis in progress ("Analyzing…"). Non-interactive. - Pending { - pane_id: String, - summary: String, - }, + Pending { pane_id: String, summary: String }, /// Analysis finished; a result (a fix or an explanation) is waiting in /// the agent pane chat. Surfaced ONLY when the pane is not open — the /// bar invites the user to open the pane and review. Once the pane @@ -233,6 +230,7 @@ impl App { window_id: self.window_id.clone(), cwd: None, source_pane_id: Some(notification.pane_id.clone()), + cached_source: None, }; // Store the failing pane ID on the target tab so the Esc dismiss @@ -251,7 +249,9 @@ impl App { text: prompt.text.clone(), submitted_at_unix_s: prompt.submitted_at_unix_s, context: TurnContext::with_target_pane(notification.pane_id.clone()), - autofix: Some(AutofixContext { generation: new_gen }), + autofix: Some(AutofixContext { + generation: new_gen, + }), }; // Install the turn on the target tab — bypasses session_to_tab // lookup so a tab with no ACP session yet still gets the prompt @@ -292,7 +292,12 @@ impl App { // tab_changed, `project_active_tab_state` re-emits the new active // tab's snapshot so the bar matches. - pub(super) fn emit_autofix_state_pending(&mut self, target_tab_id: &str, pane_id: &str, summary: &str) { + pub(super) fn emit_autofix_state_pending( + &mut self, + target_tab_id: &str, + pane_id: &str, + summary: &str, + ) { let snapshot = AutofixBarSnapshot::Pending { pane_id: pane_id.to_string(), summary: summary.to_string(), @@ -309,7 +314,12 @@ impl App { /// bar shows a clickable hint; the user activates the fix via the /// pill or the hotkey, which fires `autofix_execute_from_detected` /// and replays through `trigger_autofix_inner` with `force=true`. - pub(super) fn emit_autofix_state_detected(&mut self, target_tab_id: &str, pane_id: &str, summary: &str) { + pub(super) fn emit_autofix_state_detected( + &mut self, + target_tab_id: &str, + pane_id: &str, + summary: &str, + ) { let snapshot = AutofixBarSnapshot::Detected { pane_id: pane_id.to_string(), summary: summary.to_string(), diff --git a/tools/wta/src/app/input_edit.rs b/tools/wta/src/app/input_edit.rs index 702489b1d7..24eec4caf0 100644 --- a/tools/wta/src/app/input_edit.rs +++ b/tools/wta/src/app/input_edit.rs @@ -77,8 +77,7 @@ impl TabSession { } let previous = prev_char_boundary(&self.input, self.cursor_pos); self.input.replace_range(previous..self.cursor_pos, ""); - self.attachments - .on_text_deleted(previous..self.cursor_pos); + self.attachments.on_text_deleted(previous..self.cursor_pos); self.cursor_pos = previous; self.refresh_command_popup(); } @@ -89,9 +88,9 @@ impl TabSession { return; } self.reset_input_history_navigation(); - let range = self - .attachments - .expand_deletion_range(prev_word_boundary(&self.input, self.cursor_pos)..self.cursor_pos); + let range = self.attachments.expand_deletion_range( + prev_word_boundary(&self.input, self.cursor_pos)..self.cursor_pos, + ); self.input.replace_range(range.clone(), ""); self.attachments.on_text_deleted(range.clone()); self.cursor_pos = range.start; @@ -114,8 +113,7 @@ impl TabSession { } let next = next_char_boundary(&self.input, self.cursor_pos); self.input.replace_range(self.cursor_pos..next, ""); - self.attachments - .on_text_deleted(self.cursor_pos..next); + self.attachments.on_text_deleted(self.cursor_pos..next); self.refresh_command_popup(); } @@ -243,6 +241,7 @@ impl TabSession { /// input. Called after every input mutation. Clamps the selected /// index so it stays valid when the candidate list shrinks. pub fn refresh_command_popup(&mut self) { + self.pane_targets.picker_open = commands::is_pane_picker_prefix(&self.input); if let Some(prefix) = commands::move_position_prefix(&self.input) { self.command_popup_candidates.clear(); self.move_position_candidates = commands::match_move_positions(prefix); @@ -288,7 +287,6 @@ impl TabSession { .get(self.command_popup_selected) .copied() } - } pub(super) fn clamp_cursor_to_boundary(input: &str, cursor_pos: usize) -> usize { diff --git a/tools/wta/src/app/tab_state.rs b/tools/wta/src/app/tab_state.rs index d87bc96fce..6ea0630c91 100644 --- a/tools/wta/src/app/tab_state.rs +++ b/tools/wta/src/app/tab_state.rs @@ -4,10 +4,144 @@ use serde::{Deserialize, Serialize}; use crate::app_contracts::{PermOption, PlanEntry}; use crate::commands::{CommandSpec, MovePositionSpec}; +use crate::coordinator::OpenTarget; use super::input_edit::InputHistory; use super::{TabAutofixState, TurnState}; +#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)] +pub struct PaneDescriptor { + pub session_id: String, + #[serde(default)] + pub ordinal: u32, + #[serde(default)] + pub title: String, + #[serde(default)] + pub profile: String, + #[serde(default)] + pub cwd: String, + #[serde(default)] + pub shell: String, + #[serde(default)] + pub is_active: bool, + #[serde(default)] + pub is_agent_pane: bool, + #[serde(default = "default_true")] + pub visible: bool, + #[serde(default)] + pub read_only: bool, +} + +fn default_true() -> bool { + true +} + +impl PaneDescriptor { + pub fn display_label(&self) -> &str { + [&self.title, &self.shell, &self.profile] + .into_iter() + .find(|value| !value.trim().is_empty()) + .map(String::as_str) + .unwrap_or("Terminal") + } + + pub fn is_picker_candidate(&self) -> bool { + self.visible && !self.read_only && !self.is_agent_pane && !self.session_id.is_empty() + } + + pub fn mention_label(&self) -> String { + if self.ordinal == 0 { + self.display_label().to_string() + } else { + format!("{}-{}", self.ordinal, self.display_label()) + } + } + + pub fn picker_detail(&self) -> String { + let shell = if self.shell.trim().is_empty() { + self.profile.trim() + } else { + self.shell.trim() + }; + let cwd = self.cwd.trim(); + match (shell.is_empty(), cwd.is_empty()) { + (false, false) => format!("{shell} · {cwd}"), + (false, true) => shell.to_string(), + (true, false) => format!("cwd: {cwd}"), + (true, true) => String::new(), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum PreparedActionMode { + Command, + DelegateSend, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct PendingPreparation { + pub prompt_id: u64, + pub target_session_id: String, + pub mode: PreparedActionMode, +} + +#[derive(Debug, Clone)] +pub struct PendingDelegate { + pub intent: String, +} + +#[derive(Debug, Default)] +pub struct PaneTargetState { + pub generation: u64, + pub panes: HashMap, + pub picker_open: bool, + pub picker_selected: usize, + pub agent_target_session_id: Option, +} + +impl PaneTargetState { + pub fn candidates(&self) -> Vec<&PaneDescriptor> { + let mut panes: Vec<_> = self + .panes + .values() + .filter(|pane| pane.is_picker_candidate()) + .collect(); + panes.sort_by(|left, right| { + left.ordinal + .cmp(&right.ordinal) + .then_with(|| left.session_id.cmp(&right.session_id)) + }); + panes + } + + pub fn replace_snapshot(&mut self, generation: u64, panes: Vec) { + if generation < self.generation { + return; + } + self.generation = generation; + self.panes = panes + .into_iter() + .map(|pane| (pane.session_id.to_ascii_lowercase(), pane)) + .collect(); + if self + .agent_target_session_id + .as_ref() + .is_some_and(|target| !self.panes.contains_key(&target.to_ascii_lowercase())) + { + self.agent_target_session_id = None; + } + let count = self.candidates().len(); + self.picker_selected = self.picker_selected.min(count.saturating_sub(1)); + } + + pub fn agent_target(&self) -> Option<&PaneDescriptor> { + self.agent_target_session_id + .as_ref() + .and_then(|target| self.panes.get(&target.to_ascii_lowercase())) + } +} + pub(crate) const DEFAULT_TAB_ID: &str = "0"; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] @@ -222,6 +356,8 @@ pub(crate) struct PendingTerminalActionProposal { pub prompt_id: u64, pub is_autofix: bool, pub recommendations: super::RecommendationSet, + pub prepared_mode: Option, + pub committed: bool, } /// Everything that conceptually belongs to one tab's conversation: the @@ -234,10 +370,14 @@ pub(crate) struct PendingTerminalActionProposal { /// mutating shared `App` fields. #[derive(Default)] pub struct TabSession { + pub pane_targets: PaneTargetState, /// Per-tab autofix state machine (see `TabAutofixState`). pub autofix: TabAutofixState, pub(crate) pending_terminal_action_proposal: Option, pub(crate) active_direct_proposal_id: Option, + pub(crate) pending_preparation: Option, + pub(crate) active_prepared_mode: Option, + pub(crate) pending_delegate: Option, pub usage: Option, pub usage_staleness: crate::usage::UsageStaleness, @@ -340,6 +480,9 @@ pub struct TabSession { pub agent_picker_open: bool, /// Highlighted row in `App::available_agents`. pub agent_picker_selected: usize, + pub delegate_picker_open: bool, + pub delegate_picker_selected: usize, + pub last_delegate_target: Option, // agent session view (`/sessions`) — per-tab so each WT tab keeps // its own open/closed state and selected row across tab switches. @@ -377,6 +520,8 @@ impl TabSession { && !self.paste_pending && !self.model_picker_open && !self.agent_picker_open + && !self.pane_targets.picker_open + && !self.delegate_picker_open } pub fn clear_recommendations(&mut self) { @@ -408,6 +553,20 @@ impl TabSession { None } + pub fn compute_chip_target(&self) -> Option { + if self.pane_targets.picker_open { + return self + .pane_targets + .candidates() + .get(self.pane_targets.picker_selected) + .map(|pane| pane.session_id.clone()); + } + if let Some(target) = self.pane_targets.agent_target() { + return Some(target.session_id.clone()); + } + self.compute_chip_card_target() + } + pub fn clear_chat_history(&mut self) { self.messages.clear(); self.tool_calls.clear(); @@ -550,3 +709,121 @@ pub struct AgentsViewState { pub pending_rescan: bool, pub rescan_in_flight: bool, } + +#[cfg(test)] +mod pane_target_tests { + use super::*; + + fn pane(id: &str, title: &str, active: bool) -> PaneDescriptor { + PaneDescriptor { + session_id: id.to_string(), + ordinal: 0, + title: title.to_string(), + profile: String::new(), + cwd: String::new(), + shell: String::new(), + is_active: active, + is_agent_pane: false, + visible: true, + read_only: false, + } + } + + #[test] + fn snapshot_replaces_catalog_and_ignores_older_generations() { + let mut state = PaneTargetState::default(); + state.replace_snapshot(2, vec![pane("new", "New", false)]); + state.replace_snapshot(1, vec![pane("old", "Old", false)]); + + assert_eq!(state.generation, 2); + assert!(state.panes.contains_key("new")); + assert!(!state.panes.contains_key("old")); + } + + #[test] + fn snapshot_removal_invalidates_persistent_target() { + let mut state = PaneTargetState::default(); + state.agent_target_session_id = Some("gone".to_string()); + + state.replace_snapshot(1, vec![pane("kept", "Kept", false)]); + + assert!(state.agent_target_session_id.is_none()); + } + + #[test] + fn candidates_exclude_agent_hidden_and_read_only_panes() { + let mut eligible = pane("eligible", "Eligible", true); + let mut agent = pane("agent", "Agent", false); + agent.is_agent_pane = true; + let mut hidden = pane("hidden", "Hidden", false); + hidden.visible = false; + let mut read_only = pane("readonly", "Read only", false); + read_only.read_only = true; + eligible.shell = "pwsh".to_string(); + + let mut state = PaneTargetState::default(); + state.replace_snapshot(1, vec![read_only, hidden, agent, eligible]); + + let ids = state + .candidates() + .into_iter() + .map(|pane| pane.session_id.as_str()) + .collect::>(); + assert_eq!(ids, vec!["eligible"]); + } + + #[test] + fn chip_target_tracks_picker_selection_and_persistent_target() { + let mut tab = TabSession::default(); + tab.pane_targets.replace_snapshot( + 1, + vec![ + pane("first", "First", true), + pane("second", "Second", false), + ], + ); + tab.pane_targets.picker_open = true; + tab.pane_targets.picker_selected = 1; + + assert_eq!(tab.compute_chip_target().as_deref(), Some("second")); + + tab.pane_targets.picker_open = false; + tab.pane_targets.agent_target_session_id = Some("second".to_string()); + assert_eq!(tab.compute_chip_target().as_deref(), Some("second")); + + tab.input.clear(); + assert_eq!(tab.compute_chip_target().as_deref(), Some("second")); + } + + #[test] + fn candidates_follow_snapshot_ordinals_and_labels_include_them() { + let mut first = pane("first", "PowerShell", false); + first.ordinal = 1; + let mut second = pane("second", "PowerShell", true); + second.ordinal = 2; + let mut state = PaneTargetState::default(); + state.replace_snapshot(1, vec![second, first]); + + let labels = state + .candidates() + .into_iter() + .map(PaneDescriptor::mention_label) + .collect::>(); + assert_eq!(labels, vec!["1-PowerShell", "2-PowerShell"]); + } + + #[test] + fn picker_detail_does_not_substitute_cwd_for_shell() { + let mut descriptor = pane("pane", "PowerShell", false); + descriptor.profile = "PowerShell".to_string(); + descriptor.cwd = "C:\\Users\\example".to_string(); + + assert_eq!( + descriptor.picker_detail(), + "PowerShell · C:\\Users\\example" + ); + + descriptor.profile.clear(); + assert_eq!(descriptor.picker_detail(), "cwd: C:\\Users\\example"); + } +} diff --git a/tools/wta/src/app_contracts/event.rs b/tools/wta/src/app_contracts/event.rs index 9a5a726b7f..ed7856edcc 100644 --- a/tools/wta/src/app_contracts/event.rs +++ b/tools/wta/src/app_contracts/event.rs @@ -68,6 +68,11 @@ pub enum AppEvent { prompt_id: u64, pane_id: String, }, + DelegateDestinationReady { + tab_id: String, + prompt_id: u64, + result: Result, + }, AgentError { session_id: Option, failure: crate::protocol::acp::failure::AgentFailure, diff --git a/tools/wta/src/app_events.rs b/tools/wta/src/app_events.rs index 47d3452841..bbb3c90fc4 100644 --- a/tools/wta/src/app_events.rs +++ b/tools/wta/src/app_events.rs @@ -386,6 +386,44 @@ impl App { } => { self.apply_prompt_target_resolved(tab_id, prompt_id, pane_id); } + AppEvent::DelegateDestinationReady { + tab_id, + prompt_id, + result, + } => match result { + Ok(pane_id) => { + let tab = self.tab_mut(&tab_id); + let matches = tab + .pending_preparation + .as_mut() + .filter(|preparation| preparation.prompt_id == prompt_id); + if let Some(preparation) = matches { + preparation.target_session_id = pane_id.clone(); + if let Some(prompt) = tab.turn.prompt_mut() { + if prompt.id == prompt_id { + prompt.context.target_pane_id = Some(pane_id); + } + } + self.surface_committed_delegate_proposal(prompt_id); + } + } + Err(error) => { + let tab = self.tab_mut(&tab_id); + tab.pending_preparation = None; + tab.pending_terminal_action_proposal = None; + tab.messages.push(ChatMessage::error( + t!("delegate_picker.launch_failed", error = error.as_str()).into_owned(), + )); + tab.scroll_to_bottom(); + if tab + .turn + .prompt() + .is_some_and(|prompt| prompt.id == prompt_id) + { + tab.turn = TurnState::Idle; + } + } + }, AppEvent::AgentBusy { tab_id } => { let tab = self.tab_mut(&tab_id); tab.messages @@ -1377,6 +1415,84 @@ impl App { return; } + if method == "pane_catalog_changed" { + let target_window = params + .get("window_id") + .and_then(|value| value.as_str()) + .unwrap_or(""); + let our_window = self.window_id.as_deref().unwrap_or(""); + if !target_window.is_empty() + && !our_window.is_empty() + && target_window != our_window + { + return; + } + let Some(target_tab) = params.get("tab_id").and_then(|value| value.as_str()) + else { + tracing::warn!(target: "pane_catalog", "snapshot missing tab_id"); + return; + }; + if self + .owner_tab_id + .as_deref() + .is_some_and(|owner| owner != target_tab) + { + return; + } + let generation = params + .get("generation") + .and_then(|value| value.as_u64()) + .unwrap_or_default(); + let panes = params + .get("panes") + .cloned() + .and_then(|value| { + serde_json::from_value::>(value).ok() + }) + .unwrap_or_default(); + let invalidated_session = { + let tab = self.tab_mut(target_tab); + let previous_agent_target = + tab.pane_targets.agent_target_session_id.clone(); + tab.pane_targets.replace_snapshot(generation, panes); + let agent_target_invalidated = previous_agent_target.is_some() + && tab.pane_targets.agent_target_session_id.is_none(); + let mode = tab + .pending_preparation + .as_ref() + .map(|preparation| preparation.mode) + .or(tab.active_prepared_mode); + let target = tab + .turn + .prompt() + .and_then(|prompt| prompt.context.target_pane_id()) + .map(str::to_string); + let target_missing = target.as_ref().is_some_and(|target| { + !tab.pane_targets + .panes + .contains_key(&target.to_ascii_lowercase()) + }); + ( + (mode != Some(PreparedActionMode::DelegateSend) && target_missing) + .then(|| tab.session_id.clone()) + .flatten(), + agent_target_invalidated, + ) + }; + if let Some(session_id) = invalidated_session.0 { + self.turn_cancel(&session_id); + self.tab_mut(target_tab).messages.push(ChatMessage::warning( + t!("pane_picker.target_unavailable").into_owned(), + )); + } else if invalidated_session.1 { + self.tab_mut(target_tab).messages.push(ChatMessage::warning( + t!("pane_picker.target_unavailable").into_owned(), + )); + } + self.sync_pane_picker_chip_target(); + return; + } + if method == "tab_closed" { // Same window filter as tab_changed — drop_tab_session // removes from `tab_sessions` and nulls `self.tab_id` diff --git a/tools/wta/src/app_keys.rs b/tools/wta/src/app_keys.rs index 4062996605..a933da40f5 100644 --- a/tools/wta/src/app_keys.rs +++ b/tools/wta/src/app_keys.rs @@ -265,14 +265,14 @@ impl App { .modifiers .intersects(KeyModifiers::CONTROL | KeyModifiers::ALT) => { - self.current_tab_mut().agents_view.search_query.push(*character); + self.current_tab_mut() + .agents_view + .search_query + .push(*character); self.reset_agents_search_selection(&tab_id); return; } - KeyCode::Up - | KeyCode::Down - | KeyCode::Enter - | KeyCode::F(5) => {} + KeyCode::Up | KeyCode::Down | KeyCode::Enter | KeyCode::F(5) => {} _ => return, } } @@ -432,6 +432,46 @@ impl App { return; } + if self.current_tab().pane_targets.picker_open { + match key.code { + KeyCode::Up => { + let tab = self.current_tab_mut(); + tab.pane_targets.picker_selected = + tab.pane_targets.picker_selected.saturating_sub(1); + self.sync_pane_picker_chip_target(); + } + KeyCode::Down => { + let count = self.current_tab().pane_targets.candidates().len(); + let tab = self.current_tab_mut(); + if tab.pane_targets.picker_selected + 1 < count { + tab.pane_targets.picker_selected += 1; + } + self.sync_pane_picker_chip_target(); + } + KeyCode::Enter => self.commit_pane_picker(), + KeyCode::Esc | KeyCode::Backspace | KeyCode::Delete => self.cancel_pane_picker(), + _ => {} + } + return; + } + + if self.current_tab().delegate_picker_open { + match key.code { + KeyCode::Up | KeyCode::Down => { + let tab = self.current_tab_mut(); + tab.delegate_picker_selected = 1 - tab.delegate_picker_selected.min(1); + } + KeyCode::Enter => self.commit_delegate_picker(), + KeyCode::Esc => { + let tab = self.current_tab_mut(); + tab.delegate_picker_open = false; + tab.pending_delegate = None; + } + _ => {} + } + return; + } + // Model picker modal (`/model`): while it's up, arrows move the // highlight, Enter commits the pick, Esc dismisses. Swallow every // other key so nothing leaks into the input box behind the modal. @@ -452,8 +492,7 @@ impl App { } match key.code { - KeyCode::Up if self.current_tab().turn.recommendations().is_some() => - { + KeyCode::Up if self.current_tab().turn.recommendations().is_some() => { if self.current_tab().recommendation_focus == RecommendationFocus::Input { let choices_len = self .current_tab() @@ -482,8 +521,7 @@ impl App { self.recompute_chip_override(&tab_id); } } - KeyCode::Down if self.current_tab().turn.recommendations().is_some() => - { + KeyCode::Down if self.current_tab().turn.recommendations().is_some() => { let choices_len = self .current_tab() .turn @@ -513,8 +551,7 @@ impl App { } KeyCode::Right if self.current_tab().turn.recommendations().is_some() - && self.current_tab().recommendation_focus - == RecommendationFocus::Button => + && self.current_tab().recommendation_focus == RecommendationFocus::Button => { self.focus_next_recommendation_action(); } @@ -545,8 +582,7 @@ impl App { } KeyCode::Left if self.current_tab().turn.recommendations().is_some() - && self.current_tab().recommendation_focus - == RecommendationFocus::Button => + && self.current_tab().recommendation_focus == RecommendationFocus::Button => { self.focus_previous_recommendation_action(); } @@ -683,6 +719,7 @@ impl App { } KeyCode::Esc => { self.current_tab_mut().clear_input(); + self.sync_pane_picker_chip_target(); } KeyCode::Up if self.command_popup_visible() => { self.command_popup_up(); @@ -762,6 +799,10 @@ impl App { return; } + if self.try_execute_direct_pane_command() { + return; + } + // Slash-command intercept (popup selection, known command, or // unknown-command warning). Runs before the prompt path so // commands like /stop work even mid-flight, and /help / /clear @@ -805,12 +846,28 @@ impl App { .session_id .clone() .unwrap_or_else(|| DEFAULT_TAB_ID.to_string()); + let agent_target = tab.pane_targets.agent_target().cloned(); + let target_pane_id = agent_target.as_ref().map(|pane| pane.session_id.clone()); let pane_context = PaneContext { pane_id: self.pane_id.clone(), tab_id: self.tab_id.clone(), window_id: self.window_id.clone(), - cwd: self.source_cwd.clone(), - source_pane_id: self.source_session_id.clone(), + cwd: agent_target + .as_ref() + .map(|pane| pane.cwd.clone()) + .filter(|cwd| !cwd.is_empty()) + .or_else(|| self.source_cwd.clone()), + source_pane_id: target_pane_id + .clone() + .or_else(|| self.source_session_id.clone()), + cached_source: agent_target.map(|pane| { + crate::pane_context::CachedPaneMetadata { + title: pane.title, + profile: pane.profile, + cwd: pane.cwd, + shell: pane.shell, + } + }), }; let prompt = PromptSubmission::new(text.clone(), Some(pane_context)).with_images(images); @@ -828,7 +885,7 @@ impl App { id: prompt.id, text: display_text, submitted_at_unix_s: prompt.submitted_at_unix_s, - context: TurnContext::default(), + context: TurnContext { target_pane_id }, autofix: None, }; self.turn_submit_prompt(&session_id, submitted); @@ -838,16 +895,19 @@ impl App { KeyCode::Backspace if key.modifiers.contains(KeyModifiers::CONTROL) => { if self.current_tab().input_has_nav_focus() { self.current_tab_mut().delete_word_before_cursor(); + self.sync_pane_picker_chip_target(); } } KeyCode::Backspace => { if self.current_tab().input_has_nav_focus() { self.current_tab_mut().delete_before_cursor(); + self.sync_pane_picker_chip_target(); } } KeyCode::Delete => { if self.current_tab().input_has_nav_focus() { self.current_tab_mut().delete_at_cursor(); + self.sync_pane_picker_chip_target(); } } KeyCode::Left if key.modifiers.contains(KeyModifiers::CONTROL) => { @@ -886,6 +946,9 @@ impl App { // invisibly without a caret. if self.current_tab().input_has_nav_focus() { self.current_tab_mut().insert_input_char(c); + if self.current_tab().pane_targets.picker_open { + self.sync_pane_picker_chip_target(); + } } } _ => {} diff --git a/tools/wta/src/app_tests.rs b/tools/wta/src/app_tests.rs index 8dfa284d79..8d98ccac9a 100644 --- a/tools/wta/src/app_tests.rs +++ b/tools/wta/src/app_tests.rs @@ -49,7 +49,14 @@ fn passed_for_custom_agent_falls_back_when_no_custom_suffix() { // `pub(super)` so the sibling `slash_command_tests` module (see the // `#[path]` mod in app.rs) can reuse it instead of duplicating App::new. pub(super) fn test_app() -> App { - let (prompt_tx, _prompt_rx) = tokio::sync::mpsc::unbounded_channel(); + test_app_with_prompt_rx().0 +} + +fn test_app_with_prompt_rx() -> ( + App, + tokio::sync::mpsc::UnboundedReceiver, +) { + let (prompt_tx, prompt_rx) = tokio::sync::mpsc::unbounded_channel(); let (recommendation_tx, _recommendation_rx) = tokio::sync::mpsc::unbounded_channel(); let (permission_tx, _permission_rx) = tokio::sync::mpsc::unbounded_channel(); let (cancel_tx, _cancel_rx) = tokio::sync::mpsc::unbounded_channel(); @@ -60,6 +67,7 @@ pub(super) fn test_app() -> App { let (restart_tx, _restart_rx) = tokio::sync::mpsc::unbounded_channel(); let debug_capture = Arc::new(AtomicBool::new(false)); let (master_tx, _master_rx) = tokio::sync::mpsc::unbounded_channel(); + ( App::new( prompt_tx, recommendation_tx, @@ -75,6 +83,8 @@ pub(super) fn test_app() -> App { true, false, Arc::new(crate::shell::ShellManager::new()), + ), + prompt_rx, ) } @@ -2222,10 +2232,7 @@ fn slash_model_hot_applies_cloud_model_to_live_session() { app.cmd_model("gpt-5.4".into()); - assert_eq!( - app.current_tab().model_override.as_deref(), - Some("gpt-5.4") - ); + assert_eq!(app.current_tab().model_override.as_deref(), Some("gpt-5.4")); assert!(matches!( app.current_tab().messages.last(), Some(ChatMessage::Notice { @@ -2234,10 +2241,7 @@ fn slash_model_hot_applies_cloud_model_to_live_session() { }) )); match master_rx.try_recv().expect("live model switch request") { - crate::protocol::acp::client::MasterExtRequest::SetSessionModel { - session_id, - model, - } => { + crate::protocol::acp::client::MasterExtRequest::SetSessionModel { session_id, model } => { assert_eq!(session_id.expect("target session").0.as_ref(), "sid-1"); assert_eq!(model, "gpt-5.4"); } @@ -7200,10 +7204,7 @@ fn render_recommendation_compact_keeps_summary_and_actions_visible() { rust_i18n::set_locale("en-US"); let mut app = test_app(); app.state = ConnectionState::Connected; - install_recs( - &mut app, - vec![rec_send("echo COMPACT_RECOMMENDATION_XYZ")], - ); + install_recs(&mut app, vec![rec_send("echo COMPACT_RECOMMENDATION_XYZ")]); let text = render_to_text(&mut app, 80, 7); assert!( @@ -7315,6 +7316,48 @@ fn manual_fix_uses_the_helpers_captured_source_target() { ); } +#[test] +fn manual_fix_prefers_the_persistent_agent_target() { + let (mut app, mut prompt_rx) = test_app_with_prompt_rx(); + app.source_session_id = Some("captured-source-pane".into()); + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![tab_state::PaneDescriptor { + session_id: "selected-pane".to_string(), + ordinal: 1, + title: "Selected".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\selected".to_string(), + shell: "pwsh.exe".to_string(), + is_active: false, + is_agent_pane: false, + visible: true, + read_only: false, + }], + ); + app.current_tab_mut().pane_targets.agent_target_session_id = Some("selected-pane".to_string()); + + app.cmd_fix(false, String::new()); + + assert_eq!( + app.current_tab() + .turn + .prompt() + .and_then(|prompt| prompt.context.target_pane_id()), + Some("selected-pane") + ); + let context = prompt_rx + .try_recv() + .expect("manual fix submission") + .pane_context + .expect("manual fix pane context"); + assert_eq!(context.source_pane_id.as_deref(), Some("selected-pane")); + assert_eq!( + context.cached_source.expect("cached metadata").cwd, + "C:\\selected" + ); +} + #[test] fn prompt_target_binding_survives_tab_rename() { let mut app = test_app(); @@ -7711,8 +7754,7 @@ fn stage_direct_proposal( app.handle_event(AppEvent::DirectTerminalActionProposal { context, payload: TERMINAL_AGENT_PROPOSAL_PAYLOAD.to_string(), - source: - crate::agent_tools::action_proposal::pipe::ProposalPayloadSource::Cli, + source: crate::agent_tools::action_proposal::pipe::ProposalPayloadSource::Cli, responder: decision_tx, }); assert_eq!( @@ -8774,6 +8816,260 @@ fn chip_recompute_dedupes_and_releases_on_idle() { assert_eq!(app.tab_mut(DEFAULT_TAB_ID).last_emitted_chip_override, None,); } +#[test] +fn backspace_and_delete_cancel_open_pane_picker_like_escape() { + for key in [KeyCode::Backspace, KeyCode::Delete] { + let mut app = test_app(); + app.current_tab_mut().replace_input("@".to_string()); + assert!(app.current_tab().pane_targets.picker_open); + + app.handle_key(KeyEvent::new(key, KeyModifiers::NONE)); + + assert!(!app.current_tab().pane_targets.picker_open); + assert!(app.current_tab().input.is_empty()); + assert!(app.current_tab().last_emitted_chip_override.is_none()); + } +} + +#[test] +fn committed_pane_target_survives_escape() { + let mut app = test_app(); + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![ + tab_state::PaneDescriptor { + session_id: "pane-one".to_string(), + ordinal: 1, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\one".to_string(), + shell: "pwsh.exe".to_string(), + is_active: true, + is_agent_pane: false, + visible: true, + read_only: false, + }, + tab_state::PaneDescriptor { + session_id: "pane-two".to_string(), + ordinal: 2, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\two".to_string(), + shell: "pwsh.exe".to_string(), + is_active: false, + is_agent_pane: false, + visible: true, + read_only: false, + }, + ], + ); + app.current_tab_mut().pane_targets.picker_open = true; + app.current_tab_mut().pane_targets.picker_selected = 1; + + app.commit_pane_picker(); + + assert!(app.current_tab().input.is_empty()); + assert_eq!( + app.current_tab() + .pane_targets + .agent_target_session_id + .as_deref(), + Some("pane-two") + ); + assert_eq!( + app.current_tab().compute_chip_target().as_deref(), + Some("pane-two") + ); + + app.handle_key(KeyEvent::new(KeyCode::Esc, KeyModifiers::NONE)); + + assert_eq!( + app.current_tab() + .pane_targets + .agent_target_session_id + .as_deref(), + Some("pane-two") + ); + assert_eq!( + app.current_tab().compute_chip_target().as_deref(), + Some("pane-two") + ); +} + +#[test] +fn command_picker_sets_target_and_preserves_only_the_command_prefix() { + let mut app = test_app(); + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![tab_state::PaneDescriptor { + session_id: "pane-one".to_string(), + ordinal: 1, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\one".to_string(), + shell: "pwsh.exe".to_string(), + is_active: true, + is_agent_pane: false, + visible: true, + read_only: false, + }], + ); + app.current_tab_mut() + .replace_input("/command @".to_string()); + + app.commit_pane_picker(); + + assert_eq!(app.current_tab().input, "/command "); + assert_eq!( + app.current_tab() + .pane_targets + .agent_target_session_id + .as_deref(), + Some("pane-one") + ); +} + +#[test] +fn command_request_uses_persistent_target_and_standard_prepared_mode() { + let (mut app, mut prompt_rx) = test_app_with_prompt_rx(); + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![tab_state::PaneDescriptor { + session_id: "pane-one".to_string(), + ordinal: 1, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\one".to_string(), + shell: "pwsh.exe".to_string(), + is_active: true, + is_agent_pane: false, + visible: true, + read_only: false, + }], + ); + app.current_tab_mut().pane_targets.agent_target_session_id = Some("pane-one".to_string()); + + app.cmd_command("list files recursively".to_string()); + + let prompt = prompt_rx.try_recv().expect("command prompt"); + assert!(prompt.text.contains("list files recursively")); + assert_eq!( + prompt + .pane_context + .as_ref() + .and_then(|context| context.source_pane_id.as_deref()), + Some("pane-one") + ); + let pending = app + .current_tab() + .pending_preparation + .as_ref() + .expect("pending command proposal"); + assert_eq!(pending.mode, PreparedActionMode::Command); + assert_eq!(pending.target_session_id, "pane-one"); +} + +#[test] +fn dollar_command_bypasses_model_and_runs_against_persistent_target() { + let mut app = test_app(); + let (recommendation_tx, mut recommendation_rx) = tokio::sync::mpsc::unbounded_channel(); + app.recommendation_tx = recommendation_tx; + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![tab_state::PaneDescriptor { + session_id: "pane-one".to_string(), + ordinal: 1, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\one".to_string(), + shell: "pwsh.exe".to_string(), + is_active: true, + is_agent_pane: false, + visible: true, + read_only: false, + }], + ); + app.current_tab_mut().pane_targets.agent_target_session_id = Some("pane-one".to_string()); + app.current_tab_mut() + .replace_input("$ git status".to_string()); + + assert!(app.try_execute_direct_pane_command()); + + let execution = recommendation_rx.try_recv().expect("direct execution"); + assert!(!execution.insert_only); + assert_eq!(execution.context.target_pane_id(), Some("pane-one")); + assert_eq!( + execution.choice.actions, + vec![RecommendedAction::Send { + parent: "pane-one".to_string(), + input: "git status".to_string(), + }] + ); + assert!(app.current_tab().input.is_empty()); +} + +#[test] +fn dollar_command_without_at_uses_default_source_pane() { + let mut app = test_app(); + let (recommendation_tx, mut recommendation_rx) = tokio::sync::mpsc::unbounded_channel(); + app.recommendation_tx = recommendation_tx; + app.source_session_id = Some("source-pane".to_string()); + app.current_tab_mut() + .replace_input("$ echo ready".to_string()); + + assert!(app.try_execute_direct_pane_command()); + + let execution = recommendation_rx.try_recv().expect("direct execution"); + assert_eq!(execution.context.target_pane_id(), Some("source-pane")); + assert_eq!( + execution.choice.actions, + vec![RecommendedAction::Send { + parent: "source-pane".to_string(), + input: "echo ready".to_string(), + }] + ); +} + +#[test] +fn ordinary_prompt_snapshots_persistent_pane_target_and_cached_metadata() { + let (mut app, mut prompt_rx) = test_app_with_prompt_rx(); + app.state = ConnectionState::Connected; + app.current_tab_mut().pane_targets.replace_snapshot( + 1, + vec![tab_state::PaneDescriptor { + session_id: "pane-two".to_string(), + ordinal: 2, + title: "PowerShell".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\two".to_string(), + shell: "pwsh.exe".to_string(), + is_active: false, + is_agent_pane: false, + visible: true, + read_only: false, + }], + ); + app.current_tab_mut().pane_targets.agent_target_session_id = Some("pane-two".to_string()); + app.current_tab_mut() + .replace_input("explain the current output".to_string()); + + app.handle_key(KeyEvent::new(KeyCode::Enter, KeyModifiers::NONE)); + + let prompt = prompt_rx.try_recv().expect("ordinary prompt submission"); + let context = prompt.pane_context.expect("pane context"); + assert_eq!(context.source_pane_id.as_deref(), Some("pane-two")); + let cached = context.cached_source.expect("cached target metadata"); + assert_eq!(cached.cwd, "C:\\two"); + assert_eq!(cached.shell, "pwsh.exe"); + assert_eq!( + app.current_tab() + .turn + .prompt() + .and_then(|prompt| prompt.context.target_pane_id()), + Some("pane-two") + ); +} + #[test] fn known_cli_id_returns_some_for_all_first_party_clis() { use crate::agent_sessions::CliSource; diff --git a/tools/wta/src/app_turn.rs b/tools/wta/src/app_turn.rs index de3cd9357e..0409156998 100644 --- a/tools/wta/src/app_turn.rs +++ b/tools/wta/src/app_turn.rs @@ -235,6 +235,26 @@ impl App { Ok(wire) => wire, Err(error) => return DirectProposalEvaluation::Rejected(error), }; + let prepared_mode = self + .session_tab(session_id) + .pending_preparation + .as_ref() + .filter(|preparation| preparation.prompt_id == prompt_id) + .map(|preparation| preparation.mode); + if prepared_mode.is_some() + && (wire.choices.len() != 1 + || wire.choices[0].actions.len() != 1 + || !matches!( + wire.choices[0].actions[0], + crate::agent_tools::action_proposal::schema::ProposalActionWire::Send { .. } + )) + { + return DirectProposalEvaluation::Rejected( + crate::agent_tools::action_proposal::schema::ProposalError::PolicyViolation( + "a preparation turn must propose exactly one send action".to_string(), + ), + ); + } let configured_delegate_id = self .delegate_agents .as_ref() @@ -258,6 +278,8 @@ impl App { prompt_id, is_autofix, recommendations, + prepared_mode, + committed: false, }); DirectProposalEvaluation::Presented } @@ -325,6 +347,25 @@ impl App { } pub(super) fn commit_terminal_action_proposal(&mut self, proposal_id: &str) -> bool { + let awaiting_delegate = self.tab_sessions.values().any(|tab| { + tab.pending_terminal_action_proposal + .as_ref() + .is_some_and(|pending| pending.proposal_id == proposal_id) + && tab.pending_preparation.as_ref().is_some_and(|preparation| { + preparation.mode == PreparedActionMode::DelegateSend + && preparation.target_session_id.is_empty() + }) + }); + if awaiting_delegate { + if let Some(pending) = self.tab_sessions.values_mut().find_map(|tab| { + tab.pending_terminal_action_proposal + .as_mut() + .filter(|pending| pending.proposal_id == proposal_id) + }) { + pending.committed = true; + return true; + } + } let pending = self.tab_sessions.values_mut().find_map(|tab| { let matches = tab .pending_terminal_action_proposal @@ -355,11 +396,41 @@ impl App { "direct_proposal", ); } + self.session_tab_mut(&pending.session_id) + .active_prepared_mode = pending.prepared_mode; + self.session_tab_mut(&pending.session_id) + .pending_preparation = None; self.session_tab_mut(&pending.session_id) .active_direct_proposal_id = Some(proposal_id.to_string()); true } + pub(super) fn surface_committed_delegate_proposal(&mut self, prompt_id: u64) { + let pending = self.tab_sessions.values_mut().find_map(|tab| { + let ready = tab + .pending_terminal_action_proposal + .as_ref() + .is_some_and(|pending| pending.prompt_id == prompt_id && pending.committed); + ready + .then(|| tab.pending_terminal_action_proposal.take()) + .flatten() + }); + let Some(pending) = pending else { + return; + }; + self.turn_surface_recommendation( + &pending.session_id, + pending.recommendations, + "direct_proposal", + ); + self.session_tab_mut(&pending.session_id) + .active_prepared_mode = pending.prepared_mode; + self.session_tab_mut(&pending.session_id) + .pending_preparation = None; + self.session_tab_mut(&pending.session_id) + .active_direct_proposal_id = Some(pending.proposal_id); + } + pub(super) fn invalidate_terminal_action_proposal( &mut self, proposal_id: &str, @@ -588,8 +659,10 @@ impl App { .session_tab(session_id) .active_direct_proposal_id .clone(); - let insert_only = - self.session_tab(session_id).selected_button == 1 && self.is_send_choice(&choice); + let prepared_mode = self.session_tab(session_id).active_prepared_mode; + let insert_only = prepared_mode != Some(PreparedActionMode::DelegateSend) + && self.session_tab(session_id).selected_button == 1 + && self.is_send_choice(&choice); let target_tab = self.tab_for_session(session_id); let context = self .session_tab(session_id) @@ -614,6 +687,7 @@ impl App { context, }) .is_ok(); + self.session_tab_mut(session_id).active_prepared_mode = None; if let Some(claim) = confirmation_claim { let status = if dispatched { crate::agent_tools::action_proposal::channel::ProposalFinalStatus::Confirmed @@ -758,6 +832,8 @@ impl App { tab.activity_frame = 0; tab.turn = TurnState::Idle; tab.pending_terminal_action_proposal = None; + tab.pending_preparation = None; + tab.active_prepared_mode = None; tab.active_direct_proposal_id = None; if let Some(proposal_id) = direct_proposal_id.as_deref() { self.proposal_channels.resolve_final( diff --git a/tools/wta/src/commands.rs b/tools/wta/src/commands.rs index 3b9878e412..4e07018172 100644 --- a/tools/wta/src/commands.rs +++ b/tools/wta/src/commands.rs @@ -54,6 +54,10 @@ pub enum CommandKind { /// Move this tab's agent pane without changing the global pane-position /// setting or any other tab. Move, + /// Ask the agent to turn an intent into a terminal command card. + Command, + /// Prepare a prompt and launch the configured delegate in a new destination. + Delegate, } #[derive(Debug, Clone, Copy)] @@ -130,8 +134,26 @@ pub const REGISTRY: &[CommandSpec] = &[ summary_key: "commands.move.summary", kind: CommandKind::Move, }, + CommandSpec { + name: "command", + summary_key: "commands.command.summary", + kind: CommandKind::Command, + }, + CommandSpec { + name: "delegate", + summary_key: "commands.delegate.summary", + kind: CommandKind::Delegate, + }, ]; +/// True while the input is asking the user to choose a pane mention. +pub fn is_pane_picker_prefix(input: &str) -> bool { + let trimmed = input.trim_start(); + trimmed == "@" + || trimmed.eq_ignore_ascii_case("/command @") + || trimmed.eq_ignore_ascii_case("/cmd @") +} + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct MovePositionSpec { pub name: &'static str, @@ -264,6 +286,11 @@ pub fn classify(input: &str) -> ParseOutcome { /// Return the [`CommandSpec`] for the given name (case-insensitive), or /// `None` if unknown. pub fn lookup(name: &str) -> Option<&'static CommandSpec> { + let name = if name.eq_ignore_ascii_case("cmd") { + "command" + } else { + name + }; REGISTRY .iter() .find(|spec| spec.name.eq_ignore_ascii_case(name)) @@ -274,6 +301,9 @@ pub fn lookup(name: &str) -> Option<&'static CommandSpec> { /// popup. pub fn matches(prefix: &str) -> Vec<&'static CommandSpec> { let needle = prefix.trim().to_ascii_lowercase(); + if needle == "cmd" { + return lookup("command").into_iter().collect(); + } REGISTRY .iter() .filter(|spec| spec.name.starts_with(&needle)) @@ -370,6 +400,28 @@ mod tests { assert!(s_matches.contains(&"sessions")); } + #[test] + fn deterministic_action_commands_parse() { + let command = parse("/command clean temporary files").unwrap(); + assert_eq!(command.kind, CommandKind::Command); + assert_eq!(command.rest, "clean temporary files"); + assert_eq!(parse("/cmd echo hello").unwrap().kind, CommandKind::Command); + assert_eq!(matches("cmd")[0].name, "command"); + + let delegate = parse("/delegate investigate the failure").unwrap(); + assert_eq!(delegate.kind, CommandKind::Delegate); + assert_eq!(delegate.rest, "investigate the failure"); + } + + #[test] + fn pane_picker_prefix_is_deliberately_narrow() { + assert!(is_pane_picker_prefix("@")); + assert!(is_pane_picker_prefix(" /COMMAND @")); + assert!(is_pane_picker_prefix("/cmd @")); + assert!(!is_pane_picker_prefix("@PowerShell")); + assert!(!is_pane_picker_prefix("/delegate @")); + } + #[test] fn agent_parses_with_optional_id() { let bare = parse("/agent").unwrap(); diff --git a/tools/wta/src/coordinator.rs b/tools/wta/src/coordinator.rs index e57409c95d..15f39b317b 100644 --- a/tools/wta/src/coordinator.rs +++ b/tools/wta/src/coordinator.rs @@ -51,7 +51,7 @@ pub struct RecommendationChoice { pub actions: Vec, } -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum OpenTarget { Tab, @@ -731,9 +731,7 @@ fn validate_action(action: &RecommendedAction) -> Result<()> { validate_direction(direction.as_deref())?; } RecommendedAction::Open { - parent, - direction, - .. + parent, direction, .. } => { if let Some(parent) = parent.as_deref() { ensure_non_empty("parent", parent)?; diff --git a/tools/wta/src/pane_context.rs b/tools/wta/src/pane_context.rs index 010d8773e1..3bd3fb9ed2 100644 --- a/tools/wta/src/pane_context.rs +++ b/tools/wta/src/pane_context.rs @@ -1,5 +1,13 @@ use serde::{Deserialize, Serialize}; +#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] +pub struct CachedPaneMetadata { + pub title: String, + pub profile: String, + pub cwd: String, + pub shell: String, +} + #[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)] pub struct PaneContext { pub pane_id: Option, @@ -7,6 +15,7 @@ pub struct PaneContext { pub window_id: Option, pub cwd: Option, pub source_pane_id: Option, + pub cached_source: Option, } impl PaneContext { diff --git a/tools/wta/src/protocol/acp/prompt.rs b/tools/wta/src/protocol/acp/prompt.rs index 3b93dd4d4d..a25e64c5c8 100644 --- a/tools/wta/src/protocol/acp/prompt.rs +++ b/tools/wta/src/protocol/acp/prompt.rs @@ -12,9 +12,15 @@ const EMBEDDED_DEFAULT_PROMPT: &str = include_str!(concat!( const AUTOFIX_USER_PROMPT_FILE_NAME: &str = "auto-fix.md"; const AUTOFIX_DEFAULT_PROMPT_FILE_NAME: &str = "auto-fix.default.md"; -const EMBEDDED_AUTOFIX_PROMPT: &str = include_str!(concat!( +const EMBEDDED_AUTOFIX_PROMPT: &str = + include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/prompts/auto-fix.md")); +const EMBEDDED_PANE_INPUT_PREPARATION_PROMPT: &str = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), - "/prompts/auto-fix.md" + "/prompts/prepare-pane-input.md" +)); +const EMBEDDED_DELEGATE_PREPARATION_PROMPT: &str = include_str!(concat!( + env!("CARGO_MANIFEST_DIR"), + "/prompts/prepare-delegate-prompt.md" )); #[derive(Debug, Clone, PartialEq, Eq)] @@ -38,6 +44,22 @@ pub(crate) fn load_planner_prompt_template() -> PlannerPromptTemplate { ) } +pub(crate) fn terminal_command_request(intent: &str) -> String { + format!( + "{}\n\n## User Intent\n{}", + EMBEDDED_PANE_INPUT_PREPARATION_PROMPT.trim(), + intent.trim() + ) +} + +pub(crate) fn delegate_preparation_request(intent: &str) -> String { + format!( + "{}\n\n## User Intent\n{}", + EMBEDDED_DELEGATE_PREPARATION_PROMPT.trim(), + intent.trim() + ) +} + pub(crate) fn merge_runtime_sections(template: &str, runtime_sections: &[String]) -> String { let runtime_block = runtime_sections .iter() @@ -214,7 +236,10 @@ fn write_if_changed(path: &Path, content: &str) -> std::io::Result<()> { /// `fs::write` truncates first and races readers down to an empty string. fn write_atomic(path: &Path, content: &str) -> std::io::Result<()> { let dir = path.parent().unwrap_or_else(|| Path::new(".")); - let stem = path.file_name().and_then(|n| n.to_str()).unwrap_or("prompt"); + let stem = path + .file_name() + .and_then(|n| n.to_str()) + .unwrap_or("prompt"); let unique = NEXT_TMP_ID.fetch_add(1, std::sync::atomic::Ordering::Relaxed); let tmp = dir.join(format!(".{}.{}.{}.tmp", stem, std::process::id(), unique)); fs::write(&tmp, content)?; @@ -230,9 +255,10 @@ fn write_atomic(path: &Path, content: &str) -> std::io::Result<()> { #[cfg(test)] mod tests { use super::{ - load_planner_prompt_template_from_root, merge_runtime_sections, - DEFAULT_PROMPT_FILE_NAME, EMBEDDED_AUTOFIX_PROMPT, EMBEDDED_DEFAULT_PROMPT, - RUNTIME_CONTEXT_MARKER, USER_PROMPT_FILE_NAME, + delegate_preparation_request, load_planner_prompt_template_from_root, + merge_runtime_sections, terminal_command_request, DEFAULT_PROMPT_FILE_NAME, + EMBEDDED_AUTOFIX_PROMPT, EMBEDDED_DEFAULT_PROMPT, RUNTIME_CONTEXT_MARKER, + USER_PROMPT_FILE_NAME, }; use std::fs; use std::path::PathBuf; @@ -275,10 +301,24 @@ mod tests { assert!(!prompt.contains("recommended_choice")); assert!(!prompt.contains("```json")); } + assert!(EMBEDDED_DEFAULT_PROMPT.contains("Submit exactly one action")); assert!(EMBEDDED_AUTOFIX_PROMPT.contains("Submit exactly one `send` action")); } + #[test] + fn preparation_requests_embed_intent_and_restrict_model_authority() { + let pane = terminal_command_request("run parser tests"); + assert!(pane.contains("run parser tests")); + assert!(pane.contains("exactly one `send` action")); + assert!(pane.contains("host owns the target pane")); + + let delegate = delegate_preparation_request("investigate flaky tests"); + assert!(delegate.contains("investigate flaky tests")); + assert!(delegate.contains("exactly one `send` action")); + assert!(delegate.contains("host creates and launches")); + } + #[test] fn loader_seeds_prompt_files_and_prefers_user_prompt() { let prompt_root = temp_prompt_root("prefers-user"); diff --git a/tools/wta/src/protocol/acp/prompt_builder.rs b/tools/wta/src/protocol/acp/prompt_builder.rs index 02d198c27c..b0031581bb 100644 --- a/tools/wta/src/protocol/acp/prompt_builder.rs +++ b/tools/wta/src/protocol/acp/prompt_builder.rs @@ -305,6 +305,7 @@ mod tests { window_id: Some("win-1".to_string()), cwd: Some("C:\\work".to_string()), source_pane_id: Some("src-pane".to_string()), + cached_source: None, }; let s = format_pane_context_summary(Some(&ctx)); assert!(s.contains("pane_id=Some(\"agent-pane\")"), "got: {s}"); diff --git a/tools/wta/src/protocol/acp/prompt_context.rs b/tools/wta/src/protocol/acp/prompt_context.rs index 4cac9407d3..1f972e20f5 100644 --- a/tools/wta/src/protocol/acp/prompt_context.rs +++ b/tools/wta/src/protocol/acp/prompt_context.rs @@ -261,6 +261,7 @@ async fn resolve_pane_by_session_id( shell_mgr: &ShellManager, session_id: &str, ) -> Option { + let normalized_session_id = normalize_pane_session_id(session_id); let windows = shell_mgr.wt_list_windows().await.ok()?; for win in windows.get("windows")?.as_array()? { let Some(window_id) = json_str_or_num(win.get("window_id")) else { @@ -289,7 +290,12 @@ async fn resolve_pane_by_session_id( }; if let Some(pane) = panes_arr .iter() - .find(|p| json_str_or_num(p.get("session_id")).as_deref() == Some(session_id)) + .find(|pane| { + json_str_or_num(pane.get("session_id")) + .is_some_and(|candidate| { + normalize_pane_session_id(&candidate) == normalized_session_id + }) + }) { return Some(pane.clone()); } @@ -298,6 +304,14 @@ async fn resolve_pane_by_session_id( None } +fn normalize_pane_session_id(session_id: &str) -> String { + session_id + .trim() + .trim_start_matches('{') + .trim_end_matches('}') + .to_ascii_lowercase() +} + struct PlannerTerminalContext { json: String, target_pane_id: String, @@ -313,9 +327,23 @@ async fn build_terminal_context( // pane (the "source"), so a single active-pane query gives us the right // target. Pane IDs are process-globally unique, so we only need the pane // id itself — tab/window aren't needed for addressing. - let active = match pane_context.and_then(|context| context.source_pane_id.as_deref()) { - Some(source) => resolve_pane_by_session_id(shell_mgr, source).await?, - None => shell_mgr.wt_get_active_pane().await.ok()?, + let active = match pane_context { + Some(context) if context.cached_source.is_some() => { + let source = context.source_pane_id.as_deref()?; + let cached = context.cached_source.as_ref()?; + serde_json::json!({ + "session_id": source, + "title": cached.title, + "profile": cached.profile, + "cwd": cached.cwd, + "shell": cached.shell, + "is_agent_pane": false, + }) + } + Some(context) if context.source_pane_id.is_some() => { + resolve_pane_by_session_id(shell_mgr, context.source_pane_id.as_deref()?).await? + } + _ => shell_mgr.wt_get_active_pane().await.ok()?, }; let is_agent = active @@ -419,6 +447,9 @@ pub(super) async fn resolve_provider_context( return resolved; } if !is_autofix { + resolved.resolved_planner_pane = pane_context + .and_then(|context| context.source_pane_id.clone()) + .filter(|pane_id| !pane_id.trim().is_empty()); if let Some(context) = build_terminal_context(shell_mgr, pane_context).await { resolved.planner_terminal_context = Some(context.json); resolved.resolved_planner_pane = Some(context.target_pane_id); @@ -854,6 +885,15 @@ mod tests { assert_eq!(shell_from_active(&serde_json::json!({ "shell": "" })), None); } + #[test] + fn pane_session_ids_compare_independent_of_guid_formatting() { + assert_eq!( + normalize_pane_session_id("{05740574-243F-4B39-94A8-C507A47CF8FB}"), + normalize_pane_session_id("05740574-243f-4b39-94a8-c507a47cf8fb") + ); + assert_eq!(normalize_pane_session_id(" pane-9 "), "pane-9"); + } + #[test] fn user_locale_tag_returns_current_locale_verbatim() { let _g = crate::test_support::lock_locale(); @@ -900,6 +940,37 @@ mod tests { assert!(build_terminal_context(&mgr, None).await.is_none()); } + #[tokio::test] + async fn build_terminal_context_uses_cached_explicit_target_without_enumeration() { + let mgr = shell_mgr_with_pane(serde_json::json!({ + "session_id": "wrong-active-pane", + "title": "Wrong", + })); + let pane_context = PaneContext { + source_pane_id: Some("{05740574-243f-4b39-94a8-c507a47cf8fb}".to_string()), + cached_source: Some(crate::pane_context::CachedPaneMetadata { + title: "PowerShell 1".to_string(), + profile: "PowerShell".to_string(), + cwd: "C:\\workspace".to_string(), + shell: "pwsh.exe".to_string(), + }), + ..Default::default() + }; + + let context = build_terminal_context(&mgr, Some(&pane_context)) + .await + .expect("cached target should not require list_windows/list_tabs/list_panes"); + assert_eq!( + context.target_pane_id, + "{05740574-243f-4b39-94a8-c507a47cf8fb}" + ); + let json: serde_json::Value = + serde_json::from_str(&context.json).expect("terminal context JSON"); + assert_eq!(json["window_title"], "PowerShell 1"); + assert_eq!(json["cwd"], "C:\\workspace"); + assert_eq!(json["shell"], "pwsh.exe"); + } + #[tokio::test] async fn build_terminal_context_skips_agent_pane() { let mgr = shell_mgr_with_pane(serde_json::json!({ diff --git a/tools/wta/src/ui/delegate_popup.rs b/tools/wta/src/ui/delegate_popup.rs new file mode 100644 index 0000000000..7c55f07e14 --- /dev/null +++ b/tools/wta/src/ui/delegate_popup.rs @@ -0,0 +1,33 @@ +use ratatui::prelude::*; +use ratatui::widgets::{Clear, List, ListItem, ListState}; + +use super::popup; +use crate::theme; + +pub struct DelegatePopupState { + pub selected: usize, + pub pane_focused: bool, +} + +pub fn render_popup(frame: &mut Frame, state: DelegatePopupState, input_area: Rect) { + let area = popup::anchored_above(frame, input_area, 2); + frame.render_widget(Clear, area); + let items = [ + ListItem::new(t!("delegate_picker.tab").into_owned()), + ListItem::new(t!("delegate_picker.panel").into_owned()), + ]; + let mut list_state = ListState::default(); + list_state.select(Some(state.selected.min(items.len() - 1))); + frame.render_stateful_widget( + List::new(items) + .block(popup::block(t!("delegate_picker.title").into_owned())) + .highlight_style(if state.pane_focused { + theme::SELECTED + } else { + theme::SELECTED_INACTIVE + }) + .highlight_symbol("> "), + area, + &mut list_state, + ); +} diff --git a/tools/wta/src/ui/layout.rs b/tools/wta/src/ui/layout.rs index 1c69ac2292..5f08cec130 100644 --- a/tools/wta/src/ui/layout.rs +++ b/tools/wta/src/ui/layout.rs @@ -2,8 +2,8 @@ use crate::app::{App, AppMode, View, DEFAULT_TAB_ID}; use ratatui::prelude::*; use super::{ - action_panel, agent_popup, agents_view, auth, chat, command_popup, debug_panel, input, - model_popup, permission, recommendations, setup, + action_panel, agent_popup, agents_view, auth, chat, command_popup, debug_panel, delegate_popup, + input, model_popup, pane_popup, permission, recommendations, setup, }; pub fn render(frame: &mut Frame, app: &mut App) { @@ -123,20 +123,16 @@ pub fn render(frame: &mut Frame, app: &mut App) { // permission/recommendation content between full and compact forms. let chat_content_width = main_area.width.saturating_sub(2); // h_chat 1+1 padding let chat_estimate = chat::estimated_block_height(app, chat_content_width); - let recommendation_natural_height = app - .current_tab() + let recommendation_natural_height = + app.current_tab() .turn .recommendations() .map(|recommendations| { action_panel::recommendation_panel_height(recommendations, main_area.width) }); - let permission_natural_height = app - .current_tab() - .permission - .front() - .map(|permission| { - action_panel::permission_card_height(permission, main_area.width) - .min(u16::MAX as usize) as u16 + let permission_natural_height = app.current_tab().permission.front().map(|permission| { + action_panel::permission_card_height(permission, main_area.width).min(u16::MAX as usize) + as u16 }); let panel_layout = action_panel::plan(action_panel::LayoutRequest { available_rows: main_area.height, @@ -197,12 +193,7 @@ pub fn render(frame: &mut Frame, app: &mut App) { chat::render(frame, app, h_chat[1]); app.sync_rec_scroll_max(main_area.width, panel_layout.recommendation_height); - recommendations::render( - frame, - app, - h_rec[1], - panel_layout.recommendation_mode, - ); + recommendations::render(frame, app, h_rec[1], panel_layout.recommendation_mode); if !app.current_tab().permission.is_empty() { permission::render(frame, app, h_perm[1]); } @@ -256,6 +247,12 @@ pub fn render(frame: &mut Frame, app: &mut App) { if let Some(agent_state) = app.agent_popup_state() { agent_popup::render_popup(frame, agent_state, chunks[7]); } + if let Some(pane_state) = app.pane_popup_state() { + pane_popup::render_popup(frame, pane_state, chunks[7]); + } + if let Some(delegate_state) = app.delegate_popup_state() { + delegate_popup::render_popup(frame, delegate_state, chunks[7]); + } // `/help` overlay sits on top of everything so the user can always // dismiss it with Esc. diff --git a/tools/wta/src/ui/mod.rs b/tools/wta/src/ui/mod.rs index 75f5069712..e4c21f5faa 100644 --- a/tools/wta/src/ui/mod.rs +++ b/tools/wta/src/ui/mod.rs @@ -1,5 +1,5 @@ -mod agent_popup; pub(crate) mod action_panel; +mod agent_popup; pub mod agents_view; mod auth; pub(crate) mod card; @@ -7,9 +7,11 @@ pub(crate) mod chat; pub(crate) mod command_format; mod command_popup; mod debug_panel; +mod delegate_popup; mod input; mod layout; mod model_popup; +mod pane_popup; mod permission; mod popup; mod recommendations; @@ -18,8 +20,10 @@ pub mod shimmer; pub use agent_popup::AgentPopupState; pub use command_popup::{PopupCandidates, PopupState}; +pub use delegate_popup::DelegatePopupState; #[cfg(test)] pub(crate) use input::input_height; pub use layout::render; pub use model_popup::ModelPopupState; +pub use pane_popup::{PanePopupCandidate, PanePopupState}; pub use shimmer::CYCLE_FRAMES as ACTIVITY_CYCLE_FRAMES; diff --git a/tools/wta/src/ui/pane_popup.rs b/tools/wta/src/ui/pane_popup.rs new file mode 100644 index 0000000000..cb154459e9 --- /dev/null +++ b/tools/wta/src/ui/pane_popup.rs @@ -0,0 +1,62 @@ +use ratatui::prelude::*; +use ratatui::widgets::{Clear, List, ListItem, ListState, Paragraph}; + +use super::popup; +use crate::theme; + +const POPUP_MAX_VISIBLE: usize = 8; + +pub struct PanePopupCandidate { + pub label: String, + pub detail: String, +} + +pub struct PanePopupState { + pub candidates: Vec, + pub selected: usize, + pub pane_focused: bool, +} + +pub fn render_popup(frame: &mut Frame, state: PanePopupState, input_area: Rect) { + let area = popup::anchored_above( + frame, + input_area, + state.candidates.len().clamp(1, POPUP_MAX_VISIBLE) as u16, + ); + frame.render_widget(Clear, area); + if state.candidates.is_empty() { + frame.render_widget( + Paragraph::new(t!("pane_picker.empty").into_owned()) + .block(popup::block(t!("pane_picker.title").into_owned())) + .style(theme::DIM), + area, + ); + return; + } + let items = state + .candidates + .iter() + .map(|candidate| { + ListItem::new(Line::from(vec![ + Span::styled(format!(" {} ", candidate.label), theme::INPUT_TEXT), + Span::styled(candidate.detail.as_str(), theme::DIM), + ])) + }) + .collect::>(); + let mut list_state = ListState::default(); + list_state.select(Some( + state.selected.min(state.candidates.len().saturating_sub(1)), + )); + frame.render_stateful_widget( + List::new(items) + .block(popup::block(t!("pane_picker.title").into_owned())) + .highlight_style(if state.pane_focused { + theme::SELECTED + } else { + theme::SELECTED_INACTIVE + }) + .highlight_symbol("> "), + area, + &mut list_state, + ); +} diff --git a/tools/wta/src/ui/recommendations.rs b/tools/wta/src/ui/recommendations.rs index 884c22e3f7..1af5de99d6 100644 --- a/tools/wta/src/ui/recommendations.rs +++ b/tools/wta/src/ui/recommendations.rs @@ -23,7 +23,9 @@ use crate::ui::card::{self, CARD_MIN_SIZE}; /// fit. This avoids the previous "tall card in squashed pane → nothing /// renders" failure mode. pub fn render(frame: &mut Frame, app: &App, area: Rect, mode: PanelMode) { - let Some(recs) = app.current_tab().turn.recommendations() else { return }; + let Some(recs) = app.current_tab().turn.recommendations() else { + return; + }; if mode == PanelMode::Hidden || area.width == 0 || area.height == 0 { return; } @@ -79,7 +81,8 @@ fn render_compact(frame: &mut Frame, app: &App, area: Rect) { let Some(choice) = recommendations.choices.get(selected) else { return; }; - let (summary, buttons, body_kind) = extract_card_content(choice); + let (summary, buttons, body_kind) = + extract_card_content(choice, app.current_tab().active_prepared_mode); let marker = "○"; let position = if recommendations.choices.len() > 1 { format!(" ↑↓ {}/{} ", selected + 1, recommendations.choices.len()) @@ -102,10 +105,7 @@ fn render_compact(frame: &mut Frame, app: &App, area: Rect) { ]), crate::rtl::text_alignment(), ), - Rect { - height: 1, - ..area - }, + Rect { height: 1, ..area }, ); if area.height > 1 { @@ -188,7 +188,8 @@ fn render_card( return; }; - let (command_text, buttons, body_kind) = extract_card_content(choice); + let (command_text, buttons, body_kind) = + extract_card_content(choice, app.current_tab().active_prepared_mode); let body_style = match body_kind { CardBodyKind::Code => theme::CARD_CODE, CardBodyKind::Description => theme::CARD_DESCRIPTION, @@ -204,8 +205,7 @@ fn render_card( let button_inner = card::inset_horizontal(button_area, 2); if button_inner.width > 0 { let focused = if is_selected - && app.current_tab().recommendation_focus - == crate::app::RecommendationFocus::Button + && app.current_tab().recommendation_focus == crate::app::RecommendationFocus::Button { Some(app.current_tab().selected_button) } else { @@ -220,16 +220,28 @@ enum CardBodyKind { Description, } -fn extract_card_content(choice: &RecommendationChoice) -> (String, Vec, CardBodyKind) { +fn extract_card_content( + choice: &RecommendationChoice, + prepared_mode: Option, +) -> (String, Vec, CardBodyKind) { let display = recommendation_display_text(choice); let (buttons, body_kind) = match choice.actions.first() { - Some(RecommendedAction::Send { .. }) => ( - vec![ + Some(RecommendedAction::Send { .. }) => { + let buttons = match prepared_mode { + Some(crate::app::PreparedActionMode::Command) => vec![ t!("recommendations.button_run_command").into_owned(), t!("recommendations.button_insert_in_terminal").into_owned(), ], - CardBodyKind::Code, - ), + Some(crate::app::PreparedActionMode::DelegateSend) => { + vec![t!("recommendations.button_send_to_delegate").into_owned()] + } + None => vec![ + t!("recommendations.button_run_command").into_owned(), + t!("recommendations.button_insert_in_terminal").into_owned(), + ], + }; + (buttons, CardBodyKind::Code) + } Some(RecommendedAction::OpenAndSend { target, .. }) => { let target_label = match target { OpenTarget::Tab => t!("recommendations.button_open_in_new_tab").into_owned(), @@ -314,6 +326,32 @@ pub(super) fn recommendation_display_text(choice: &RecommendationChoice) -> Stri mod tests { use super::*; + #[test] + fn command_preparation_uses_standard_run_and_insert_buttons() { + let _guard = crate::test_support::lock_locale(); + rust_i18n::set_locale("en-US"); + let choice = RecommendationChoice { + choice: 0, + title: "List files".to_string(), + rationale: String::new(), + actions: vec![RecommendedAction::Send { + parent: "pane-one".to_string(), + input: "Get-ChildItem".to_string(), + }], + }; + + let (_, buttons, _) = + extract_card_content(&choice, Some(crate::app::PreparedActionMode::Command)); + + assert_eq!( + buttons, + vec![ + "[ Run command ]".to_string(), + "Insert in Terminal".to_string() + ] + ); + } + #[test] fn compact_summary_paragraph_right_aligns_for_rtl() { let area = Rect::new(0, 0, 8, 1);