Commit Graph
66 Commits
Author SHA1 Message Date
m57 dc4f2b0794 revert(chat): remove busy-send panel and composer queue button (#1308) 2026-09-27 22:23:59 +03:00
m57 7c09810b23 feat(#1287): plugin/skill install approval cards (#1301) 2026-09-27 12:08:57 +03:00
m57 c34de55dd9 fix(#1283): respect plugin ownership of MCP servers (#1296) 2026-09-26 21:44:41 +03:00
Nikhil Nair 2084f9083d feat(#1247): slide-up lock + release/network fixes for voice notes (#1280) 2026-09-26 18:48:49 +03:00
m57 1ba1a62f31 fix(#1263): preserve nested inline Markdown styles (#1268) 2026-09-25 23:05:27 +03:00
m57 e80b00a6a7 fix(#1263): render Markdown inside table cells (#1267) 2026-09-25 22:48:50 +03:00
m57 83ac8a3418 fix(#1263): render completed reasoning as Markdown (#1269) 2026-09-25 22:47:00 +03:00
Nikhil NairandM57 ae9003decd feat(#1247): hold-to-record voice notes with server-side transcription (#1250)
Co-authored-by: M57 <41645758+Hy4ri@users.noreply.github.com>
2026-09-25 17:43:52 +03:00
AlexDev_andm57 35e6ebc8d5 feat(chat): add explicit busy-send modes and recoverable queue (#1254)
Co-authored-by: m57 <41645758+Hy4ri@users.noreply.github.com>
2026-09-25 13:26:25 +03:00
AlexDev_ 0d4c0b40ad feat(chat): show session-scoped reply failure details (#1255) 2026-09-24 21:37:04 +03:00
AlexDev_ 94ec95a33c fix(chat): keep historical cache out of the live transcript tail (#1253) 2026-09-24 21:27:39 +03:00
m57 4a732870d7 feat(chat): show read and write file contents in code viewer card (#1238) 2026-09-23 14:00:55 +03:00
m57 0eb8d9a8c1 fix: show tool discovery details in chat bubbles (#1237) 2026-09-23 12:58:21 +03:00
m57 1270a08810 feat(#1220): complete Kanban management operations parity (#1234) 2026-09-23 12:25:37 +03:00
m57 33d87a11ec fix(#1230,#1221): clarify inactive plugins and verify uninstall (#1236) 2026-09-23 12:25:21 +03:00
m57 721edef618 feat(#1222): add background connection toggle to chat menu (#1235) 2026-09-23 11:50:18 +03:00
m57 f34292aa83 feat(#1218): support backend-owned connector setup operations (#1229) 2026-09-22 20:20:44 +03:00
m57 16967c7e91 feat(#1217): add compacted-session timeline navigation (#1227) 2026-09-22 18:29:06 +03:00
AlexDev_andm57 a78b20bc99 feat(chat): add paged history with stable transcript and scroll identity (#1211)
Co-authored-by: m57 <41645758+Hy4ri@users.noreply.github.com>
2026-09-22 14:42:03 +03:00
M57 0e1ab9b204 fix(test): opt-in to ExperimentalMaterial3Api in ContextUsageComponentsTest 2026-09-21 11:43:13 +03:00
M57 02e14a4ab4 test(chat): add ContextUsageComponentsTest regression tests and clarify context tokens note 2026-09-21 11:27:31 +03:00
m57 83fb738ccd perf(model): share catalog store and show pinned models immediately (#1202) 2026-09-20 12:31:35 +03:00
M57 dc77b306b6 feat: auto-dismiss reply notifications when read in chat (#1195) 2026-09-19 22:58:43 +03:00
M57 03ce822119 feat: opt-in release candidate update channel (#1199) 2026-09-19 22:25:49 +03:00
M57 a61a1b9974 feat: add setting to toggle model provider visibility in chat composer (#1194) 2026-09-19 14:56:25 +03:00
M57 abce60ad7a feat: unify audio and video attachment playback (#1188) 2026-09-18 20:20:34 +03:00
M57 a415445bbf feat: gate chat send until session fully resumed (#1187) 2026-09-17 23:25:12 +03:00
M57 9690ce8dc6 fix: improve History search and prevent duplicate-key crashes (#1186) 2026-09-17 23:00:53 +03:00
M57 c2cb08a563 fix: recognize stable APK releases as newer than release candidates (#1184) 2026-09-17 22:00:12 +03:00
M57 ac180ba5df test(#1163): cover nested payloads and escaped streaming text 2026-09-17 16:15:11 +03:00
M57 d0b4db53f6 test(#1163): verify streaming parser on Android emulator 2026-09-17 15:50:13 +03:00
M57 1bb91bce65 fix(kanban): scroll workspace row before instrumented clicks (#1137) 2026-09-17 00:54:53 +03:00
M57 6f076a79d3 fix(kanban): preserve transfer cleanup and screen lifecycle (#1137) 2026-09-17 00:33:57 +03:00
M57 aa428b80f8 fix(kanban): compile instrumented regression tests (#1137) 2026-09-16 22:17:45 +03:00
M57 1735de7d9d fix(kanban): address PR correctness and CI regressions (#1137) 2026-09-16 21:49:35 +03:00
M57 190a93a4cf test(kanban): add payload, event formatter, runtime and instrumentation tests (#1137) 2026-09-16 18:15:36 +03:00
Alfredo Ortegón Sepúlveda aed8ba4a6d feat(sessions): show project and last activity on history cards (#1133) 2026-09-16 00:14:09 +03:00
M57 529b424eb4 feat(chat): add configurable message stats (#1134) 2026-09-16 00:00:09 +03:00
M57 afffcd95e8 feat(chat): redesign attachment picker tray (#1130) 2026-09-15 21:56:06 +03:00
M57 984053b0e7 feat(chat): simplify assistant message states (#1131) 2026-09-15 21:43:20 +03:00
M57 e6b441cfc6 fix(chat): scroll long composer model names (#1129) 2026-09-15 21:13:23 +03:00
Alfredo Ortegón Sepúlveda e5adfcf571 feat(chat): restyle the composer as a single card (#1114) 2026-09-15 16:37:46 +03:00
M57 fe465ad93c fix(ui): collapse provider model pickers (#1126) 2026-09-15 13:10:13 +03:00
M57 7e8af8db01 feat(sessions): show live status for active sessions in History (#1101) (#1104) 2026-09-13 14:45:33 +03:00
M57 52e0104cd2 feat(connectors): surface active session integrations (#1091) (#1100) 2026-09-13 13:41:13 +03:00
M57 29bc367aec feat(subagents): live active subagents roster and transcript tail (#1089) (#1098) 2026-09-13 11:06:34 +03:00
M57 69cd34d289 feat(vault): credential vault status and mid-turn auth prompt handling (#1090) (#1097) 2026-09-13 00:20:07 +03:00
AlexDev_ 0ae5ed4db2 feat(chat): stabilize multi-image attachment picker (#986) 2026-08-27 10:50:55 +03:00
M57andM57 7540f7228a fix(chat): show send button for attachment-only sends (#956) (#956)
The AnimatedContent gate on the composer's send button required
inputFieldValue.text.isNotBlank() in addition to canSend, so attaching an
image or file with an empty input hid the button entirely — the attachment
could never be sent on its own. ChatInputPolicy.canSend already allowed
attachment-only sends and ChatViewModel.sendMessage already accepted blank
text with pending attachments, but the button never rendered to trigger it.

Drop the stale text gate so the send affordance tracks canSend (non-empty
text OR pending attachments, plus connection). The backend handles
image-only turns natively: prompt.submit with empty text + queued images
routes through build_native_content_parts, which wraps the pixels with an
[Image attached at: ...] hint.

Add a Compose UI regression test asserting the send button is displayed
with a pending image attachment and an empty input.

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-08-22 21:58:53 +03:00
M57 fad49b7b66 feat(chat): compact sticky task progress chip (#942) (#943)
* feat(chat): compact sticky task progress chip (#942)

Re-add a glanceable progress strip above the chat timeline while work is
active. Distinct from the inline TodoTaskCard (permanent timeline record):
this chip is the temporary "what is happening right now" surface.

- Shows only while todos are incomplete or a subagent is running.
- Bounds to the same hydrated state.todos / subagentIndicators the card
  uses -- NOT the old broken state.todos gate removed in #811.
- Label: "Tasks 2/5 · <in-progress task> · N agent" (agent count when relevant).
- Tap opens SubagentInspectionSheet + resumes bottom-follow.
- Auto-hides when all work completes/cancels; rebuilds on session resume.
- i18n strings added (en/zh/ko); ktlint clean; compileDebugKotlin + unit
  tests green.

* refactor(chat): drop inline TodoTaskCard, keep single sticky progress chip

Per follow-up to #942: the inline todo card in the chat view is removed. The
sticky TaskProgressChip above the timeline is now the only glanceable surface;
the tool message itself remains the permanent record.

- Remove inline TodoTaskCard early-return in ToolBubble.kt (todo tool output
  now renders like any other tool bubble).
- Delete TodoTaskCard.kt + TodoTaskCardTest.kt (SecurityRiskChip lives in
  ToolBubble.kt, so risk display is unaffected).
- Redesign chip: replace the ElectricBolt icon with a real
  CircularProgressIndicator (no emoji), keep ChevronRight affordance.
- Label handles the no-todos case (subagents only): 'N agent running'.
- Drop dead todo_task_count string; add task_progress_agent_running (en/zh/ko).

ktlint clean; compileDebugKotlin + chat unit tests green.

* chore: clear pre-existing compile warnings

- HermesWsClient.kt: drop unnecessary safe call on non-null ResponseBody
  (resp.body.string()) and the now-dead 'body != null' guard it implied.
- SessionsScreen.kt: replace deprecated Icons.Filled.CallSplit with the
  AutoMirrored variant (match existing Send usage in this file).

ktlint clean; compileDebugKotlin SUCCESSFUL with no warnings.

* chore(chat): replace emoji status markers with Material icons in inspection sheet

The sticky progress chip opens SubagentInspectionSheet on tap; that sheet used
emoji Text glyphs for status. Replaced with real Material icons:

- Todo rows: completed -> CheckCircle (success), in-progress -> Autorenew
  (primary), cancelled -> Cancel (warning), pending -> RadioButtonUnchecked
  (muted).
- Subagent rows: complete -> CheckCircle (success), failed -> Cancel (error),
  running -> Autorenew (primary).
- Section headers: ElectricBolt -> FormatListBulleted (agent plan) + Groups
  (subagents).

Icons tinted via LocalHermesStatusColors. No emoji remain in the chip's tap
surface. ktlint clean; compileDebugKotlin SUCCESSFUL.

* fix(lint): drop orphaned todo_task_count translation in ko

Removing the string from the default (en) locale left a stale Korean
translation, which tripped Lint's ExtraTranslation error and aborted
lintDebug. Removing the orphan so default + translations stay in sync.

android-lint now BUILD SUCCESSFUL (0 errors).

* fix(chat): address #943 review - progress count, resume hydration, chip tests, plurals

- TaskProgressChip: current-task number is now the first unfinished,
  non-cancelled todo's 1-based position (active index + 1), so a completed
  task 1 + in-progress task 2 reads as 2/5 instead of 1/5 (review point 2).
- Deterministic resume hydration: hydrate todos directly from cached Room
  messages and from the merged REST transcript inside ChatViewModel load
  paths, in addition to the WS reducer, so a resumed session rebuilds the
  chip without waiting for a follow-up event (review point 3).
- Extracted computeChipDisplay / shouldShowProgressChip pure functions and
  added TaskProgressChipTest covering active-task progress, completed/cancelled
  hide, subagent-only state, and transcript-resume hydration (review point 4).
- agent count strings are now Android plurals (task_progress_agents /
  task_progress_agent_running) in en/zh/ko to avoid '2 agent' (review point 5).

Co-Authored-By trailer intentionally omitted per repo convention.

* fix(chat): derive chip number and content from the same selected task

computeChipDisplay selected the task number from the first unfinished/
non-cancelled todo but the content independently from the first in_progress
todo. With a pending task 1 + in_progress task 2 this produced 'Tasks 1/N ·
<task2 content>'. Now both values come from one selected item (prefer
in_progress, fall back to first pending/non-terminal).

Adds two focused tests: same-item selection, and pending-only fallback.
2026-08-21 00:03:50 +03:00