Commit Graph
119 Commits
Author SHA1 Message Date
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
M57andM57 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
M57andM57 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
M57andM57 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
M57andM57 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
M57andM57 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
M57andM57 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
M57andM57 6375e3fa1d fix(#74): mark unparseable cron expressions instead of silently returning raw
Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-19 20:52:44 +03:00
11d97a2d5f fix(#75): replace non-null assertion on simpleName with safe mapNotNull
* ci: prevent concurrency cancellation on rapid main merges

The concurrency group used github.ref which is static for main
(refs/heads/main). When multiple PRs merged rapidly (~2 min apart),
each merge commit cancelled the previous CI run before it could finish.

Fix: use github.sha for push events to main (unique per commit) while
keeping the ref-based group for PR branches (cancels on new commits to
the same PR branch).

* refactor(#82): remove dead SkeletonList/SkeletonCard composables

* fix(#72): echo server's WebSocket close code instead of hardcoded 1000

* fix(#75): replace non-null assertion on simpleName with safe mapNotNull

---------

Co-authored-by: ronia <ronia@m57>
Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-19 20:48:48 +03:00
16e5973dc9 fix(#72): echo server's WebSocket close code instead of hardcoded 1000
* ci: prevent concurrency cancellation on rapid main merges

The concurrency group used github.ref which is static for main
(refs/heads/main). When multiple PRs merged rapidly (~2 min apart),
each merge commit cancelled the previous CI run before it could finish.

Fix: use github.sha for push events to main (unique per commit) while
keeping the ref-based group for PR branches (cancels on new commits to
the same PR branch).

* refactor(#82): remove dead SkeletonList/SkeletonCard composables

* fix(#72): echo server's WebSocket close code instead of hardcoded 1000

---------

Co-authored-by: ronia <ronia@m57>
Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-19 20:45:42 +03:00
24847cf0d6 refactor(#82): remove dead SkeletonList/SkeletonCard composables
* ci: prevent concurrency cancellation on rapid main merges

The concurrency group used github.ref which is static for main
(refs/heads/main). When multiple PRs merged rapidly (~2 min apart),
each merge commit cancelled the previous CI run before it could finish.

Fix: use github.sha for push events to main (unique per commit) while
keeping the ref-based group for PR branches (cancels on new commits to
the same PR branch).

* refactor(#82): remove dead SkeletonList/SkeletonCard composables

---------

Co-authored-by: ronia <ronia@m57>
Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-19 20:45:37 +03:00
M57andronia b0ba1b7f00 ci: prevent concurrency cancellation on rapid main merges
The concurrency group used github.ref which is static for main
(refs/heads/main). When multiple PRs merged rapidly (~2 min apart),
each merge commit cancelled the previous CI run before it could finish.

Fix: use github.sha for push events to main (unique per commit) while
keeping the ref-based group for PR branches (cancels on new commits to
the same PR branch).

Co-authored-by: ronia <ronia@m57>
2026-06-19 20:33:36 +03:00
M57 8519add306 Merge pull request #87 from Hy4ri/fix/release-source-archive-dir
ci(release): add missing mkdir -p release before source archive
2026-06-19 20:25:32 +03:00
ronia d6966afb7b ci(release): add missing mkdir -p release before source archive
The Create source archive step tried to write into release/ without
creating the directory first, causing fatal error on run #8.
2026-06-19 20:23:46 +03:00
M57 a026e750f3 Merge pull request #86 from Hy4ri/refactor/issue-81-remove-commandpanel
[refactor] Delete dead CommandPanel component (#81)
2026-06-19 20:21:00 +03:00
Hy4ri 0525398700 Refactor: Delete dead CommandPanel component (#81) 2026-06-19 20:20:52 +03:00
M57 637cbd73f5 Merge pull request #85 from Hy4ri/refactor/issue-80-proguard-coroutines
[refactor] Remove blanket coroutines keep rule from ProGuard (#80)
2026-06-19 20:19:43 +03:00
Hy4ri 6cc6fb3ecc Refactor: Remove blanket coroutines keep rule from ProGuard (#80) 2026-06-19 20:19:34 +03:00
M57andronia a8600668c2 docs: add AGENTS.md with build, style, and workflow guidance for AI coding agents (#84)
Co-authored-by: ronia <ronia@m57>
2026-06-19 20:17:55 +03:00
M57 209ce331b8 Merge pull request #83 from Hy4ri/refactor/issue-77-remove-workmanager
[refactor] Remove unused WorkManager dependency (#77)
2026-06-19 20:13:37 +03:00
Hy4ri 39b1d94ad4 Refactor: Remove unused WorkManager dependency (#77) 2026-06-19 20:13:28 +03:00
M57 028b490fd3 Merge pull request #62 from Hy4ri/fix/issue-45-ws-stuck
Fix WebSocket connection stuck on subsequent launches (Issue #45)
2026-06-19 20:05:36 +03:00
Hy4ri 23ff263641 Fix WebSocket connection stuck on subsequent launches (Issue #45) 2026-06-19 19:56:50 +03:00
M57 6b9bab9c25 Merge pull request #61 from Hy4ri/fix/issue-59-keyboard-gap
Consume window insets in NavDisplay to eliminate keyboard gaps (Issue #59)
2026-06-19 19:49:56 +03:00
Hy4ri 4ecde51e2c Consume window insets in NavDisplay to eliminate keyboard gaps (Issue #59) 2026-06-19 19:47:49 +03:00
M57 379c9e07e7 Merge pull request #57 from Hy4ri/fix/issue-44-chat-search
Fix chat search breaking vertical scrolling and layout (Issue #44)
2026-06-19 19:41:20 +03:00
Hy4ri 80578b93d6 Render SearchBarRow inside the main Column container below the top app bar 2026-06-19 19:36:20 +03:00
Hy4ri 3734cb361f Use height-constrained CompactSearchInput inside SearchBarRow to prevent topbar height dynamic expansion 2026-06-19 19:17:55 +03:00
Hy4ri 11c5da260d Pin top app bar in ChatScreen and support pinTopBar parameter in HermesScaffold 2026-06-19 19:09:04 +03:00
M57 95b6106b4c Merge pull request #55 from Hy4ri/feat/source-archive-release
feat: attach source code archive to release assets (closes #54)
2026-06-19 19:00:48 +03:00
M57 77ed9c9120 Merge pull request #56 from Hy4ri/fix/issue-51-cron-human-readable
Implement human-readable cron schedule formatter (Issue #51)
2026-06-19 19:00:40 +03:00
Hy4ri f7132a76cd Fix chat search breaking vertical scrolling and layout (Issue #44) 2026-06-19 18:59:43 +03:00
Hy4ri 055b3381b1 Implement human-readable cron expression formatter on CronJobsScreen 2026-06-19 18:49:41 +03:00
ronia 4e6525689d feat: attach source code archive to release assets (closes #54) 2026-06-19 18:47:50 +03:00
M57 3e093aaa72 Merge pull request #53 from Hy4ri/fix/issue-47-reorder-nav-items
feat: add bottom nav reordering in settings (closes #47)
2026-06-19 18:46:09 +03:00
M57 9d5e46e769 Merge pull request #52 from Hy4ri/fix/issue-48-chat-input-space
fix: remove space between bottom bar and chat input field (closes #48)
2026-06-19 18:45:07 +03:00
Hy4ri 2fce6ad97a feat(settings): add up/down arrow buttons to reorder bottom nav items 2026-06-19 18:41:02 +03:00
Hy4ri 54ebe8714e fix(chat): remove double padding and zero out nested Scaffold window insets 2026-06-19 18:37:48 +03:00
M57 a7fcfd4088 Merge pull request #50 from Hy4ri/fix/issue-49-always-show-bottom-bar
fix: keep bottom navigation bar always visible (closes #49)
2026-06-19 18:36:26 +03:00
Hy4ri 0cdf8fd779 fix(navigation): show bottom bar on all screens except ConnectScreen 2026-06-19 18:31:37 +03:00
M57 2e56e2d9da Merge pull request #46 from Hy4ri/fix/issue-43-bottom-navbar
fix: bottom navbar updates dynamically (closes #43)
2026-06-19 18:29:21 +03:00
Hy4ri 3a610c7c80 fix(ci): fix trailing spaces and revert visibility/padding changes 2026-06-19 18:23:17 +03:00
Hy4ri 9e3a7ab339 fix: always show bottom bar, resolve chat input double padding, and format codebase 2026-06-19 18:14:41 +03:00