* refactor(extensions): trim channel-private exports
* chore(deadcode): refresh Telegram export baseline
* fix(telegram): drop unused media import
* refactor(telegram): drop dead media re-export
* style(telegram): format media runtime imports
The composer gear popover mixed misplaced, mislabeled, and dead controls.
Replace it with a three-row View menu (Reasoning, Tool calls, Keep
commentary); drop the manual-refresh machinery and the auto-scroll modes
(near-bottom stays the only behavior); move the cron-session filter to the
sidebar sort menu as a working persisted toggle; move the send shortcut and
microphone picker to Settings -> Appearance -> Chat; delete the ephemeral
voice/model/sensitivity overrides in favor of the server talk config.
Settings keep an in-memory fallback when localStorage is blocked, and talk
sessions re-read persisted settings at launch.
* fix(codex): do not promote missing_tool_result on abort/interrupt
Keep synthetic tool.result rows for transcript integrity, but skip
promoting the missing-tool invariant to promptError when the turn is
already aborted or interrupted so mid-exec cancel paths keep abort
classification and assistant text (#104898).
* fix(codex): preserve explicit abort outcome
---------
Co-authored-by: Altay <altay@hey.com>
Control UI chat now keeps still-running background tasks visible after the agent turn settles: a status row above the composer shows the claw glyph parked nose-down (static, opacity breath only), a live elapsed time with tabular digits so the row never shifts, and a "1 running task"/"N running tasks" link that opens the background-tasks rail. The row hides while the agent is working, while disconnected, and once the last task finishes. Reuses the pane's existing tasks.list snapshot and live task events — no new polling or RPC. Includes a mock-dev-harness running-task fixture and generated locale translations for the two new strings.
Closes#106107
Evidence: focused suites green on Blacksmith Testbox (chat-background-tasks 16 tests, chat-view 185 tests); live mock-gateway verification with screenshots on the PR; autoreview (gpt-5.6-sol, xhigh) clean after fixing its two findings (aria-hidden ticking timer, disconnected suppression).
Prevent LINE group allowlist policy from inheriting DM allowFrom entries, so open DMs do not broaden group access. Keep group-specific allowlists and per-group overrides as the only group admission sources, and document the scoped behavior.
Co-authored-by: pgondhi987 <pgondhi987@users.noreply.github.com>
Fix Discord inbound replies where Discord provides a message reference but omits the nested referenced message payload.
Refactor hydration so complete gateway replies fetch only the missing referenced message, while partial payloads still hydrate the current message first and reuse any referenced payload returned by Discord. Preserve non-blocking behavior for deleted references, forwarded messages, and failed reference fetches.
Closes#105862.
Supersedes #105901.
Co-authored-by: momothemage <niuzhengnan@163.com>
Surfaces skills.workshop.autonomous.enabled in the Control UI Workshop tab:
a Self-learning header toggle plus an enable pitch card on the empty
proposal board. Reads the include-resolved config snapshot, patches the
canonical key over the existing runtimeConfig RFC 7396 merge-patch seam,
and surfaces patch failures in the workshop error banner. Copy states the
token cost and that drafts arrive as pending proposals (no unconditional
review guarantee, which would be false under approvalPolicy "auto").
Splits workshop empty states, header controls, and the self-learning
module out of the oversized page/view files. Locale bundles synced
(fallbacks=0 across 20 locales).
Closes#106054
Surfaces skills.workshop.autonomous.enabled in the Control UI Workshop tab:
a Self-learning header toggle plus an enable pitch card on the empty
proposal board. Reads the include-resolved config snapshot, patches the
canonical key over the existing runtimeConfig RFC 7396 merge-patch seam,
and surfaces patch failures in the workshop error banner. Copy states the
token cost and that drafts arrive as pending proposals (no unconditional
review guarantee, which would be false under approvalPolicy "auto").
Splits workshop empty states, header controls, and the self-learning
module out of the oversized page/view files. Locale bundles synced
(fallbacks=0 across 20 locales).
Closes#106054
* fix(ui): make catalog sessions selectable in place and continuable from desktop-app sources
- sidebar: no phantom chat row for catalog keys, active highlight on catalog rows,
adopted sessions render as their live row inside the catalog group (deduped from
the regular list), host subtitle only for paired-node rows
- chat: view-only banner only after catalog metadata proves canContinue=false
- chat->sidebar continued event binds the adopted row before the next catalog poll
- anthropic: local claude-desktop sessions share the ~/.claude/projects store, so
list them as continuable and allow catalog continue to fork-resume them
* refactor(ui): extract catalog row rendering and lookup into shared modules
Keeps app-sidebar/chat-pane/anthropic session-catalog under the LOC ratchet by
moving cohesive blocks: sidebar catalog groups + adopted-row binding into
app-sidebar-session-catalogs.ts, the catalog metadata lookup into
catalog-key.ts, and the Claude node-host commands into
session-catalog-node-commands.ts; ratchet baselines down for all three.
* fix(ui): explain the disabled composer when catalog metadata cannot resolve a session
* style(ui): keep chat-pane within the LOC ratchet
* fix(anthropic): keep catalog node-command helpers module-local and repin SDK surface
The node-command module now owns its capability constant, projects-store
probe, and params parsing, so the catalog engine exports nothing new.
Repin the SDK surface budgets (+1 export/+1 callable landed on main
without a pin bump); unexport the UI helper types knip flagged.
* refactor(deadcode): trim auto-reply and CLI exports
* refactor(deadcode): trim cron and task exports
* refactor(deadcode): trim fleet and process exports
* test(deadcode): exercise live task and process seams
* test(fleet): cover stream redaction through owner module
* refactor(security): trim dead internal exports
* refactor(secrets): trim dead internal exports
* refactor(deadcode): trim remaining src exports
* refactor(deadcode): remove test-only runtime exports
* refactor(deadcode): trim pairing test exports
* refactor(deadcode): reconcile refreshed baseline
* test(auto-reply): deduplicate queue state imports
* refactor(ui): direct enable/disable and remove actions on plugin cards
Replace the state chip + kebab menu on plugin cards, installed rows,
ClawHub results, and MCP server rows with a direct Enable/Disable
button and a trash icon for removable entries. Drop the redundant
'View details' menu item (the whole card opens details) and delete the
now-unused menu machinery, document listeners, and CSS.
* style: oxfmt plugins-page test helper
* chore(i18n): prune removed pluginsPage menu keys from locale bundles
Reorder Settings -> Gateway by intent: pairing (Add Gateway with Scan QR,
setup code, discovered gateways) right below status, nav-bar QR scanner
button on the gateway route, and a Scan QR to Pair status-card hero while
nothing is paired (honoring the shared connect lock). Manual Gateway and
credentials move to the bottom. Fix setup-code Connect busy spinner to
track the whole attempt. New strings ran the full native i18n pipeline.
Closes#106013
* feat(ios): guide first launch through pairing explainer and permissions
* fix(ios): keep first-run flow resumable and surface limited grants in onboarding
* chore(ios): regenerate native i18n after rebase
* chore(android): project refreshed native translations into strings.xml
* fix(ios): move i18n wrapper contract to shared permission row and sync catalog