Commit Graph
220 Commits
Author SHA1 Message Date
M57 ab92b31d2e fix: ktlint wrapping violations on toast message and intent builder 2026-06-21 17:16:05 +03:00
M57 37fc9d9f17 fix: clarify toast - gateway restart required for platform toggle changes 2026-06-21 17:11:28 +03:00
M57 d2e59b2741 fix(#214): notification tap now navigates to correct session
Root cause: MainActivity had no onNewIntent override. When the app was
backgrounded and a notification was tapped, Android brought the existing
task to the foreground and delivered the intent via onNewIntent — but
since it wasn't overridden, the session ID from the notification was
silently dropped and the user saw the last-active session.

Fix:
1. Changed notificationSessionId from a local val to a Compose
   mutableStateOf so it's observable across recompositions.
2. Added onNewIntent override that reads the session ID from the
   incoming intent and updates the observable state.
3. Added FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP to the
   notification PendingIntent for reliable task management.
2026-06-21 16:40:30 +03:00
M57 262578528b fix: stabilize flaky testAutoReconnect with polling assertion 2026-06-21 16:26:07 +03:00
M57 d4eb36f032 fix: ktlint parameter-list-wrapping on getMessagingPlatforms 2026-06-21 16:12:35 +03:00
M57 35c608b2bf fix(#201): fix platforms endpoint response shape mismatch
GET /api/messaging/platforms returns a JSON object with a platforms
array inside, but the app expected a bare array. Wraps the response
in a new MessagingPlatformResponse model.

- Adds MessagingPlatformResponse.kt wrapper model
- Updates HermesApiService.kt return type + adds profile query param
- Updates ChannelsViewModel.kt to unwrap .platforms
- Updates E2eIntegrationTest.kt mock to match new response shape
2026-06-21 16:03:36 +03:00
M57 a89b932a0e Merge pull request #236 from Hy4ri/feat/issue-208-theme-presets
feat(#208): add Monochrome, Gruvbox, Catppuccin and AMOLED theme presets
2026-06-21 13:10:38 +03:00
M57 50e6ff5f7c fix(#236): resolve merge conflict markers in AuthManager.kt 2026-06-21 13:06:11 +03:00
Hy4ri 8e8fca756a feat(#208): add Monochrome, Gruvbox, Catppuccin and AMOLED theme presets 2026-06-21 13:01:55 +03:00
M57 f738f33fc5 Merge pull request #235 from Hy4ri/feat/issue-207-chat-bubble-contrast
fix(#207): dynamic contrast adjustments for chat bubbles legibility
2026-06-21 12:46:50 +03:00
Hy4ri 315e1097b2 fix(#207): dynamic contrast adjustments for chat bubbles legibility 2026-06-21 12:43:15 +03:00
M57 7d8d2707c6 Merge pull request #234 from Hy4ri/feat/issue-232-dynamic-theme
feat(#232): dynamic theme switch on settings save
2026-06-21 12:39:21 +03:00
Hy4ri 78da6af6be feat(#232): dynamic light/dark theme switch without restart 2026-06-21 12:33:57 +03:00
M57 7ce19cd52c Merge pull request #233 from Hy4ri/feat/issue-232-cron-icons
feat(#232): replace cron action text buttons with compact icons
2026-06-21 12:30:30 +03:00
Hy4ri 4221908bd9 feat(#232): replace cron action text buttons with compact icons 2026-06-21 12:26:54 +03:00
M57 d1d5b0937c Merge pull request #231 from Hy4ri/refactor/issue-78-strings-extraction
refactor(#78): extract hardcoded strings to strings.xml
2026-06-21 12:23:10 +03:00
Hy4ri 69ff66b8de style: remove unused R import in Navigation.kt to pass ktlint 2026-06-21 12:00:08 +03:00
Hy4ri 44e2006434 refactor(#78): extract UI strings for remaining batch 2.3 screens 2026-06-21 11:55:18 +03:00
Hy4ri b1950ece34 refactor(#78): extract UI strings for toolsets webhooks pairing and config screens 2026-06-21 11:48:33 +03:00
Hy4ri dcb23ba0a3 refactor(#78): extract UI strings for logs, system, model, and sessions/history screens 2026-06-21 11:41:41 +03:00
Hy4ri cdad31b555 refactor(#78): extract UI strings for chat, settings, connect, kanban, and skills screens 2026-06-21 11:38:33 +03:00
Hy4ri acd6cbf751 refactor(#78): extract notification strings to resources 2026-06-21 11:31:09 +03:00
Hy4ri 7ca3399a01 chore: enable Android emulator and system images in Nix flake 2026-06-21 11:21:29 +03:00
Hy4ri c34f6f1e47 refactor(#78): extract navigation and drawer labels to string resources 2026-06-21 11:09:44 +03:00
Hy4ri 8efbe02c27 refactor(#78): extract shared components and common strings to resources 2026-06-21 11:00:20 +03:00
Hy4ri 19d44c077b chore: format codebase with ktlint 2026-06-21 10:57:18 +03:00
M57 4087ee0cac fix: switch issue templates to YAML forms, remove broken markdown templates
Markdown-based issue templates with frontmatter were silently ignored
by GitHub (likely an empty-string assignees field or frontmatter
format issue). Switched to the newer YAML-based issue forms which use
a structured schema format that GitHub explicitly supports.

- bug_report.yml: structured form with required fields for description,
  reproduction steps, environment, screenshots
- feature_request.yml: form with problem/motivation, proposed solution,
  alternatives, mockups
- config.yml: unchanged, keeps blank_issues_enabled: false
2026-06-21 10:39:27 +03:00
M57 20b8eae282 Merge pull request #229 from Hy4ri/fix/issue-template-frontmatter
fix: remove invalid assignees field from issue template frontmatter
2026-06-21 10:36:18 +03:00
M57 10a98128b5 fix: remove invalid assignees field from issue template frontmatter
The 'assignees: ''' value breaks GitHub's YAML parser, causing
templates to be silently ignored and falling back to blank issue +
discussions. Removed the field entirely since no auto-assignment
is needed.
2026-06-21 10:35:58 +03:00
M57 52bfadcae8 Merge pull request #228 from Hy4ri/feat/issue-templates
docs: add GitHub issue templates (bug report + feature request)
2026-06-21 10:33:39 +03:00
M57 6ebcb3930d docs: add GitHub issue templates (bug report + feature request)
Adds a config.yml chooser and two markdown templates:
- bug_report.md — structured bug report with reproduction steps,
  environment info, and screenshot slot
- feature_request.md — enhancement/UX/refactor request with
  problem statement, proposed solution, and alternatives

Both follow the project's bracket-prefix title convention.
2026-06-21 10:33:00 +03:00
M57andM57 bc3ddd626b docs: add GitHub PR template (#227)
Adds a .github/PULL_REQUEST_TEMPLATE.md with sections for summary,
type of change, screenshots, testing steps, and project-specific
checklist items (HermesScaffold, NavigationController, room schema,
screen dedup check).

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-21 10:29:03 +03:00
M57andM57 a5c070b353 ux: swap positions of new chat and search buttons in top bar (Issue #212) (#226)
Swapped the order of the Search toggle and New Chat icon buttons
in the ChatScreen top bar actions slot. Search is now on the left
(right-side outer position) which matches user expectations —
the new chat button was accidentally tapped when reaching for search.

Fixes #212

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
2026-06-21 10:24:32 +03:00
M57 4e8da7b90c fix(security): allow cleartext traffic globally to support LAN IP connections (#200)
* feat(skills): add category and status filters (#111)

* fix(security): allow cleartext traffic globally to support LAN IP connections
2026-06-21 01:09:28 +03:00
M57 63575272c9 feat(skills): add category and status filters (#111) (#199) 2026-06-21 00:49:58 +03:00
M57 081996d376 refactor: extract entryProvider from MainNavigation (#197)
Extract the overly long `entryProvider` lambda out of `MainNavigation` into a separate `appEntryProvider` function to improve code readability and maintainability.
2026-06-21 00:31:59 +03:00
M57 f7a334ecfd Refactor CronExpressionFormatter to improve maintainability (#192)
Extract logic from a single long method `cronToHumanReadable` into distinct parser helpers for shortcuts, day of month, days of week, and general time handling. Move repetitive static properties and small format helpers to the object scope.
2026-06-21 00:30:02 +03:00
M57 5e90a4d1a7 fix(chat): conditional auto-scroll on new messages (#131) (#193) 2026-06-21 00:29:26 +03:00
M57 00c6e75f50 feat(connect): saved connection profiles support (#107) (#191)
* feat(#107): implement saved connection profiles support

* fix(connect): fallback profiles resolution and stubbing in tests
2026-06-21 00:18:35 +03:00
M57 0eed12d18e Refactor: Extract hardcoded "todo" to constant in KanbanScreen (#190)
- Extracted the hardcoded string "todo" to a `DEFAULT_COLUMN` constant in `KanbanScreen.kt` to improve code health and readability.
- Replaced the hardcoded string literal in the `viewModel.createTask` call with the new constant.
2026-06-21 00:17:37 +03:00
M57 63a927fae2 chore: Update softprops/action-gh-release to v3 to use Node 24 (#189)
Fixes the deprecation warning for Node 20 by bumping the action version.
2026-06-21 00:15:29 +03:00
M57 60c4096e9c Performance improvement for chat search filtering (#188) 2026-06-21 00:00:36 +03:00
M57 4547861c71 test: Add HermesWsClient test (#187) 2026-06-20 23:56:04 +03:00
M57 49fd12ac34 fix(#115): send enabled flag on config save and propagate configuration errors (#186) 2026-06-20 23:54:43 +03:00
M57 2b7facb7f4 Add NetworkResult Test for SafeApiCall and Mapping (#185)
* Add tests for NetworkResult and safeApiCall

* Fix ktlint errors formatting
2026-06-20 23:52:23 +03:00
M57 045932ca8b Optimize collection creation in Navigation.kt (#180)
* ⚡ Optimize collection creation in Navigation.kt

Replaced uses of `.map { ... }.toSet()` with `.mapTo(mutableSetOf()) { ... }` in Navigation.kt. This avoids the creation of intermediate ArrayList objects, saving unnecessary memory allocations.

* ⚡ Optimize collection creation in Navigation.kt

Replaced uses of `.map { ... }.toSet()` with `.mapTo(mutableSetOf()) { ... }` in Navigation.kt. This avoids the creation of intermediate ArrayList objects, saving unnecessary memory allocations. Fixed ktlint formatting issues causing CI failure.
2026-06-20 23:44:39 +03:00
M57 81b2ff3aa5 Add error path coverage for CronExpressionFormatter (#182)
* test: add error path coverage for CronExpressionFormatter

Added a new test case to cover the fallback code path when cron parsing throws an exception. This test ensures the formatting correctly defaults to returning "Raw: <schedule>" when an invalid string like '0 12 1 15 *' or '0 9 * * 8' is passed.

It also introduces mockk integration to mock android.util.Log which prevents RuntimeExceptions from being thrown during local JUnit tests when logging errors in the catch block.

* test: add error path coverage for CronExpressionFormatter and fix ktlint issues

Added a new test case to cover the fallback code path when cron parsing throws an exception. This test ensures the formatting correctly defaults to returning "Raw: <schedule>" when an invalid string like '0 12 1 15 *' or '0 9 * * 8' is passed.

It also introduces mockk integration to mock android.util.Log which prevents RuntimeExceptions from being thrown during local JUnit tests when logging errors in the catch block.

Also removed trailing whitespace and an empty line at the start of the class to fix ktlint checking in CI.
2026-06-20 23:43:46 +03:00
M57 34af34af6d perf: avoid intermediate allocation in bottomNavKeys (#184)
Replaces `.map { ... }.toSet()` with `.mapTo(mutableSetOf()) { ... }`
when resolving `bottomNavKeys` to avoid creating and discarding an
intermediate `ArrayList` during recomposition.
2026-06-20 23:42:40 +03:00
M57 3eb9e09f86 test: Add tests for malformed Base64 decoding in ConnectViewModel (#183) 2026-06-20 23:41:31 +03:00
M57 838b888f9b ⚡ Optimize Set creation in ChatViewModel (#181)
Refactored `chatMessages.map { it.id }.toSet()` to `chatMessages.mapTo(HashSet(chatMessages.size)) { it.id }` to avoid creating and discarding an unnecessary intermediate ArrayList.

Benchmark results show a ~31% performance improvement on 5000 iterations for typical sizes.
2026-06-20 23:38:36 +03:00