M57 and GitHub
6ec277af8b
feat(mcp): MCP dashboard enhancements — JSON config import, token overhead badges, and batch health testing ( #1037 )
2026-09-01 20:18:45 +03:00
M57 and GitHub
d8385a2b02
feat(ws): adopt WS ping method for heartbeat and latency tracking ( #1036 )
2026-09-01 19:44:39 +03:00
21db9bfdab
fix(memory): scope memory endpoints to active profile and auto-reload on profile switch ( #1035 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-09-01 19:20:18 +03:00
11dd1eff92
feat(chat): live subagent steering and cancellation action sheet ( closes #1030 ) ( #1034 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-09-01 18:19:00 +03:00
908255f5ad
feat: support session-level hidden flag in SessionListResponse and SessionsScreen ( #1033 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-09-01 16:56:28 +03:00
ceb4813218
feat(chat): support hierarchical nested subtasks in Todos via parent property ( #1018 ) ( #1028 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-31 22:09:15 +03:00
3fd9ac767f
feat(ws): adopt event replay via session.events.since on reconnect ( #1016 ) ( #1027 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-31 19:32:17 +03:00
53c8eca714
feat: adopt side-questions via prompt.btw and /btw command in Chat ( fixes #1015 ) ( #1026 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-31 15:54:09 +03:00
cfe3e736fd
chore: upgrade ktlint to 1.8.0 and format codebase ( #1024 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-31 12:27:40 +03:00
M57
ad838f696e
chore: add missing imports and fix test closing brace
2026-08-31 11:24:45 +03:00
Hy4ri
d8e3992c33
fix: memory screen reset actions serialization error ( fixes #1020 )
2026-08-31 11:10:26 +03:00
M57
cdcecb9734
feat(profiles): add local on-device profile hiding and filtering
2026-08-30 20:51:06 +03:00
5c8ab7ed6c
feat(bots): smart streaming auto-scroll and scroll-to-bottom FAB in group chat ( #1013 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-30 00:21:02 +03:00
97b6641d84
feat(bots): emergency stop button and /stop slash command in group chat ( #1012 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-30 00:02:16 +03:00
bd4a73dd48
feat(bots): horizontal swipe between bots and groups tabs with drawer gesture gating ( #1011 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 23:48:08 +03:00
174f8dee7d
feat(bots): selectable text, timestamps, and copy buttons in group chat ( #1009 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 19:24:51 +03:00
fbe602cb4f
feat(bots): lightweight tool execution indicators in group chat ( #1008 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 19:11:14 +03:00
0d09f43469
feat(bots): reactive multi-agent group chat orchestration with CAS leasing ( #1007 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 18:44:08 +03:00
7e24f5eba3
fix(bots): sync cross-device group chats and roster from desktop projection ( #1006 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 13:56:40 +03:00
5bc6e5f855
feat(settings): in-app chat font size setting ( #1004 ) ( #1005 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-29 11:36:56 +03:00
db3f8c736e
feat(markdown): support variable-length code fences and nested codeblocks ( #1003 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-28 20:27:17 +03:00
7a2c453f58
fix(history): guard fluid pagination against infinite network loop on small session lists ( #1002 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-28 19:44:28 +03:00
2332bdd5d5
feat(nav): root swipe-back on chat with double-back exit and subpage hierarchy ( #1001 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-28 18:38:01 +03:00
f04d878358
feat(bots): add multi-agent group chat collaboration room ( #998 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-28 17:50:37 +03:00
M57 and GitHub
0cdccad855
fix(bots): create clean profile without cloning default soul and custom skills ( #997 )
2026-08-27 19:06:58 +03:00
14fde03083
feat(image): migrate to Coil 3.6.0 with OkHttp network fetcher ( #996 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-27 15:13:18 +03:00
4d9dfb99db
feat(db): migrate to androidx.room3 3.0.2 with SQLCipherDriver ( #994 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-27 13:47:32 +03:00
AlexDev_ and GitHub
0ae5ed4db2
feat(chat): stabilize multi-image attachment picker ( #986 )
2026-08-27 10:50:55 +03:00
AlexDev_ and GitHub
c7d7abf4a1
fix(chat): prevent timeline prefetch ANRs ( #985 )
2026-08-27 10:47:04 +03:00
ce8fdc45bd
fix(notification): open tapped chat at bottom ( #984 )
...
Co-authored-by: M57 <41645758+Hy4ri@users.noreply.github.com >
2026-08-27 10:41:08 +03:00
M57 and M57
9c91df56f3
fix(theme): replace Color.Gray fallback with Color.Unspecified in palette color pickers
...
Resolves checkColorLiterals hardcoded color guard failure in CreateBotDialog and EditBotBottomSheet.
2026-08-27 02:38:05 +03:00
M57 and GitHub
2fed891d78
feat(ui): add Bots and Groups tab strip with GroupCard and disband action ( #987 )
2026-08-27 01:53:54 +03:00
M57 and GitHub
6ca248d28b
feat(ui): add EditBotBottomSheet with avatar editor and bot deletion ( #983 )
2026-08-27 01:53:15 +03:00
M57 and GitHub
274120cc86
feat(ui): add CreateGroupChatDialog for multi-bot room creation ( #982 )
2026-08-27 01:52:34 +03:00
M57 and GitHub
d4d6a04afc
feat(ui): add CreateBotDialog to BotsScreen with avatar customizer ( #981 )
2026-08-27 01:51:43 +03:00
M57 and GitHub
b422ead921
feat(chat): add @bot mention autocomplete to ChatComposer ( #980 )
2026-08-27 01:51:10 +03:00
M57 and GitHub
4e666b49a8
feat(chat): intercept /new in canonical Bot Chat sessions to /compact ( #979 )
2026-08-27 01:50:43 +03:00
M57 and GitHub
48c9039e02
feat(ui): add BotsScreen and BotsViewModel with active presence strip ( #977 )
2026-08-27 01:49:31 +03:00
M57 and GitHub
6af349cdf2
feat(ui): add reusable Material3 BotAvatar component ( #974 )
2026-08-27 01:49:08 +03:00
M57 and GitHub
c028077647
feat(models): support bot metadata, canonical sessions, and group sync in Profile models ( #973 )
2026-08-27 01:48:43 +03:00
4f3a57e340
chore(metadata): move fastlane directory to project root ( #976 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-26 21:24:19 +03:00
1f1ebf3597
feat(update): redesign in-app updater with smart cooldown, release notes, and in-place dialog ( #971 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-26 07:42:41 +03:00
460472f631
fix(chat): queue prompts while session creation is in flight (issue #969 ) ( #970 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-26 06:35:44 +03:00
14b9c1d1d3
fix(chat): support multi-level nested bullet, task, and ordered markdown lists ( #965 ) ( #968 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-25 17:41:47 +03:00
9217f9f8b6
fix(sessions): tolerate integer and string boolean formats for pinned field ( #966 ) ( #967 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-25 17:05:14 +03:00
M57 and GitHub
ece0288ca8
feat(update): surface backend update receipt in action popup ( #958 ) ( #964 )
...
Adopt GET /api/hermes/update/receipt and append its summary to the
end of the hermes-update action progress popup after it finishes.
Additive only: existing checkHermesUpdate + connection-retry polling
is untouched. 404 (old backend) is handled gracefully.
- add UpdateReceiptResponse data model matching backend schema
- add getUpdateReceipt() to HermesApiService
- ActionProgressController gains trailingLines + pushTrailingLines
- ActionProgressDialog renders trailingLines after the log
- SystemViewModel fetches receipt on action finish and formats it
- extract pure formatUpdateReceiptLines for mockk-free testing
2026-08-24 01:35:59 +03:00
5fd732be9b
fix(chat): preserve ordered list numbering in loose lists ( #959 ) ( #963 )
...
ORDERED_RE only captured item text and discarded the source number, and the
parse loop broke on the first blank line — so loose numbered lists (blank lines
between items) re-indexed every item to 1.
- capture the prefix number and emit it as MdBlock.Ordered.index
- treat a blank line as list-internal when the next non-blank line is another
ordered item, so loose lists stay one ordered list
- keep sequential numbering for tight lists (1,2,3) and honor custom starts
add regression tests in MarkdownTextFeatureTest (loose, custom-start, tight).
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-24 00:16:27 +03:00
764cb3455f
fix(auth): await cookie scope hydration on cold start ( #961 ) ( #962 )
...
* fix(auth): await cookie scope hydration before ticket mint and request loading (#961 )
* refactor(auth): scope latch activation to active store hydration
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-23 23:57:37 +03:00
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
69578e7818
refactor: extract media + server-message-mapping from ChatViewModel ( #955 )
...
* refactor: extract ChatMediaDelegate from ChatViewModel (verbatim move)
* refactor: extract mapServerMessages to ChatServerMessageMapper (verbatim move)
* style: remove orphaned comments after media extraction, ktlint format
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-08-22 20:44:43 +03:00