M57 and M57
3c5fcf504c
feat( #154 ): add word-by-word typing effect toggle and speed slider in settings ( #165 )
...
* feat(#154 ): add word-by-word typing effect toggle and speed slider in settings
* fix(settings): import Slider to fix build failure
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 17:09:42 +03:00
M57
8c9c11df23
refactor( #103 ): centralize navigation mutations through NavigationController.resetTo() ( #164 )
...
* refactor(#103 ): centralize navigation mutations through NavigationController.resetTo()
* fix(chat): fix scroll-to-bottom FAB compilation errors
2026-06-20 17:01:37 +03:00
M57 and M57
ff4649b601
fix( #130 ): fix compilation errors in scroll-to-bottom FAB ( #166 )
...
* fix(#130 ): fix compilation errors in scroll-to-bottom FAB
* fix(#130 ): add missing R import, context, and string resources
* fix(#130 ): use stringResource() instead of context.getString() for Compose lint
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 16:45:05 +03:00
M57 and M57
03cfcf8504
feat( #125 ): fix clarify input pre-filling and parse/route clarify_id ( #156 )
...
* feat(#125 ): fix clarification input pre-filling and parse/route clarify_id
* fix(#156 ): fix ktlint violations in ChatViewModelTest.kt
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 16:35:58 +03:00
M57 and M57
4544d88f8d
feat( #130 ): add scroll-to-bottom FAB that appears when user scrolls up ( #163 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 14:12:25 +03:00
M57 and M57
ca21e22147
ci( #71 ): change FGS type from dataSync to remoteMessaging for indefinite WebSocket listener ( #162 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 14:07:46 +03:00
M57 and M57
87392f5e57
fix( #148 ): prevent chatTitle being overwritten by response handlers ( #161 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 14:04:59 +03:00
M57 and M57
0ec70beb84
refactor( #104 ): prune unused ChatMessageDao APIs and stale test stubs ( #160 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 13:57:51 +03:00
M57 and M57
3f19224228
feat( #123 ): add primary screens to drawer categorically ( #158 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 13:46:08 +03:00
M57 and M57
c6d7a45905
fix( #135 ): guard goBack() against empty back stack ( #157 )
...
goBack() now uses ChatScreen as a fallback when the stack has
only one item, preventing the Settings back-button crash.
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 13:29:19 +03:00
M57
62b1115924
Merge pull request #155 from Hy4ri/feat/issue-125-clarification-respond-routing
...
feat(#125 ): pre-fill clarification input and route response via clarify.respond
2026-06-20 12:57:31 +03:00
Hy4ri
cbd743a5c9
feat( #125 ): pre-fill clarification input and route response via clarify.respond
2026-06-20 12:51:44 +03:00
M57
399691ed34
Merge pull request #153 from Hy4ri/feat/issue-125-clarification-input
...
feat(#125 ): add free-form text input and guidelines to ClarifyDialog
2026-06-20 12:33:16 +03:00
Hy4ri
8d31e37baa
feat( #125 ): add free-form text input and option tap/long-press behavior to ClarifyDialog
2026-06-20 12:28:14 +03:00
M57
42f8cfe509
Merge pull request #152 from Hy4ri/fix/issue-146-lost-replies
...
fix(#146 ): finalize active streaming message before tool execution or new message start
2026-06-20 12:20:55 +03:00
Hy4ri
98b8588d41
fix( #146 ): finalize active streaming message before tool execution or new message start
2026-06-20 12:16:11 +03:00
M57
196883b5c1
Merge pull request #151 from Hy4ri/refactor/chat-system-stability
...
refactor: stabilize chat system streaming, session loading, and connection state
2026-06-20 12:12:26 +03:00
Hy4ri
58ee32cbd1
fix(chat): remove extra closing brace in ChatViewModel.kt
2026-06-20 12:04:42 +03:00
Hy4ri
890ca05d16
fix(chat): align block indents and format multiline expressions
2026-06-20 11:18:08 +03:00
Hy4ri
5ba266cefd
fix(chat): resolve compilation errors and formatting violations
2026-06-20 11:12:34 +03:00
Hy4ri
d0eedf053f
refactor(chat): stabilize streaming, session loading, and connection status
...
Optimize streaming message updates, correct session load merging, and derive connection state reactively. Add reconnection UI banner.
2026-06-20 11:04:56 +03:00
M57 and M57
a2d299e136
feat( #129 ): remove redundant source archive, add About version card in Settings ( #149 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 10:30:18 +03:00
M57 and M57
f5edf1569c
fix( #141 ): notification tap opens original session instead of new session ( #147 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 10:10:10 +03:00
M57 and M57
ae62b05e6d
fix( #144 ): add timestamp to tool/command message bubbles ( #145 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 10:01:44 +03:00
M57 and M57
7248f66abf
feat( #136 ): visible copy button overlay on long-press of message bubbles ( #143 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-20 09:46:10 +03:00
M57 and ronia
113467a99d
fix( #140 ): fix skills content API endpoints — path params to query params ( #142 )
...
Co-authored-by: ronia <ronia@m57>
2026-06-20 02:43:26 +03:00
M57 and ronia
261ee6379a
feat( #132 ): dynamic session title with ellipsis truncation ( #139 )
...
Co-authored-by: ronia <ronia@m57>
2026-06-20 02:37:55 +03:00
M57 and ronia
913c6fa878
fix( #134 ): remove settings button from chat top bar ( #138 )
...
Co-authored-by: ronia <ronia@m57>
2026-06-20 02:28:36 +03:00
M57 and ronia
27ac4d72a4
fix( #133 ): only show status dot red when offline, hide when connected ( #137 )
...
Co-authored-by: ronia <ronia@m57>
2026-06-20 02:25:29 +03:00
M57
61d49d2355
fix(chat): don't reload cached msgs on SESSION_RESUME ack
2026-06-20 00:54:16 +03:00
M57
0fabad820d
fix(chat): fix old session resume losing server session ID
...
* fix(chat): reset agent typing status when resuming old sessions
* fix(chat): fix race condition in websocket request registration
* test(chat): update mocks for new send/sendMessage onSent callback
* style(chat): use named onSent param instead of trailing lambda
* style(chat): fix import ordering for ConcurrentHashMap
* test(chat): fix remaining 2-arg verify calls for send()
2026-06-20 00:40:16 +03:00
M57
46b24593f9
feat( #58 ): implement skill markdown/yaml editor UI ( #121 )
2026-06-19 23:58:34 +03:00
M57
022e9de195
Merge pull request #120 from Hy4ri/feat/issue-116-notification-reply
...
feat(#116 ): add direct reply action to background notifications
2026-06-19 23:48:55 +03:00
Hy4ri
ce5428f66b
feat( #116 ): add direct reply action to background notifications
2026-06-19 23:44:40 +03:00
M57
ad508be0fa
Merge pull request #119 from Hy4ri/feat/issue-114-chat-notification
...
fix(#114 ): separate notification channels and set service to low priority
2026-06-19 23:41:27 +03:00
Hy4ri
a7d730cae5
fix( #114 ): reduce intrusion of background service notification
2026-06-19 23:36:31 +03:00
M57
b1c628ee24
Merge pull request #118 from Hy4ri/feat/issue-60-tool-json-parsing
...
feat(#60 ): human-readable tool JSON parsing in chat
2026-06-19 23:32:27 +03:00
Hy4ri
45f78443ab
feat( #60 ): format tool output JSON for readability
2026-06-19 23:28:16 +03:00
M57
85dc48fcd6
Merge pull request #117 from Hy4ri/revert-pr-42
...
Revert "Merge pull request #42 from Hy4ri/feat/sessions-screen"
2026-06-19 23:24:36 +03:00
Hy4ri
8755338636
Revert "Merge pull request #42 from Hy4ri/feat/sessions-screen"
...
This reverts commit 7d50b5acd7 , reversing
changes made to ee97be50cb .
2026-06-19 23:18:26 +03:00
M57
7d50b5acd7
Merge pull request #42 from Hy4ri/feat/sessions-screen
...
feat: dedicated Sessions browser screen (Issue #40 )
2026-06-19 23:14:40 +03:00
Hy4ri
402664b6f2
fix: fix compilation errors in SessionsScreen.kt
2026-06-19 23:09:55 +03:00
M57
ee97be50cb
Merge pull request #113 from Hy4ri/refactor/issue-79-retrofit-error-handling
...
fix(#79 ): centralize retrofit error handling with NetworkResult
2026-06-19 23:03:21 +03:00
Hy4ri
508aea8bfa
fix( #79 ): centralize retrofit error handling with NetworkResult
2026-06-19 22:58:33 +03:00
M57 and M57
43df3c6e73
fix( #64 ): call wsClient.disconnect() directly in onCleared() instead of launching on cancelled scope ( #94 )
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 22:18:04 +03:00
M57 and M57
abcec14cb5
feat( #76 ): add testTag identifiers to composable elements for UI test targeting ( #98 )
...
Adds testTag modifiers to key interactive elements across the core
composables, enabling Espresso/Compose UI tests to locate them:
Navigation.kt — 'nav_*' on bottom bar items, 'drawer_*' on drawer items
HermesScaffold — 'back_button', 'menu_button', 'refresh_button'
StateViews.kt — 'loading_state', 'loading_spinner', 'error_retry_button',
'empty_state_action'
ChatScreen.kt — 'chat_input', 'send_button', 'interrupt_button'
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 22:15:53 +03:00
M57 and M57
cc52442be3
fix( #65 ): request POST_NOTIFICATIONS runtime permission on Android 13+ ( #97 )
...
* fix(#65 ): request POST_NOTIFICATIONS runtime permission on Android 13+
On API 33+ the manifest declaration alone is not enough — the app must
request POST_NOTIFICATIONS via ActivityResultContracts.RequestPermission
at runtime before it can show any notification, including the foreground
service notification from ChatNotificationService.
- Added rememberLauncherForActivityResult for POST_NOTIFICATIONS
- Added LaunchedEffect(Unit) that fires the permission request on first
composition when running on API 33+ and permission is not yet granted
- The next lifecycle event (ON_STOP → NotificationHelper.start) picks
up the permission if granted
* fix: add missing import android.os.Build for POST_NOTIFICATIONS permission check
* fix: add missing import for rememberLauncherForActivityResult (androidx.activity.compose)
---------
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 22:15:47 +03:00
M57 and M57
27a896c634
docs( #70 ): sync project structure in README with actual codebase ( #96 )
...
- Removed references to HermesControlApp.kt, EmptyState.kt, LoadingState.kt
(none of these files exist)
- Replaced with StateViews.kt, SharedComponents.kt
- Added data/ws/ (WebSocket TUI Gateway layer)
- Added notification/ (ChatNotificationService foreground service)
- Added util/ (CronExpressionFormatter)
- Added missing theme files: HermesStatusColors.kt, Spacing.kt, Shapes.kt
- Added settings/ and connect/ screen directories
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 22:15:41 +03:00
M57 and M57
451412851f
fix( #69 ): replace mipmap launcher icon with proper notification vector drawable ( #95 )
...
Notification smallIcon must use a simple mono vector drawable, not a
launcher mipmap. Launcher icons render broken in the status bar on
many devices.
- Added app/src/main/res/drawable/ic_notification.xml (simple info icon)
- Updated both showReplyNotification and buildForegroundNotification to
reference R.drawable.ic_notification instead of R.mipmap.ic_launcher
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 22:15:36 +03:00
M57 and M57
607a1b0439
fix( #73 ): surface clear errors for malformed pairing strings instead of silent fallback
...
Co-authored-by: M57 <hy4ri@users.noreply.github.com >
2026-06-19 21:09:19 +03:00