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
M57
d44df3f339
fix( #102 ): add EmptyState views for successful empty responses across data screens ( #179 )
2026-06-20 23:27:17 +03:00
M57
d1f4e9eb67
fix( #67 ): restrict cleartext traffic to local subnets and Tailscale range ( #178 )
2026-06-20 23:17:00 +03:00
M57
f2e11413cc
fix( #66 ): enable room schema export and configure release migration safe-guards ( #177 )
2026-06-20 22:57:08 +03:00
M57
a315c9d3d4
fix( #63 ): require keystore env variables for release builds ( #176 )
...
* fix(#63 ): require keystore env variables for release builds
* fix(ci): conditionalize signing requirement to release tasks only
2026-06-20 22:47:46 +03:00
M57
64a047f095
feat: move session history to a dedicated history screen ( #175 )
...
* feat: move session history to a dedicated history screen
Closes #159 .
* fix(ci): fix ktlint style issues and unresolved NavigationController reference
2026-06-20 22:27:54 +03:00
Hy4ri
34d339e6c9
fix(nav): correct proguard keep rule to use extends instead of implements
...
Proguard/R8 uses extends for both subclassing and interface implementation, so the implements keyword was invalid.
2026-06-20 18:16:30 +03:00
Hy4ri
a2d0aa0785
ci: upgrade all setup/cache/checkout actions to resolve deprecation warnings
...
Upgrade checkout@v7, setup-java@v5, cache@v5, upload-artifact@v7, and setup-gradle@v6 to support Node 24 natively.
2026-06-20 18:07:30 +03:00
Hy4ri
59be56260b
ci: remove forcing actions to node24
...
Avoid deprecation warnings related to forcing Node.js 24 on Node.js 20 actions.
2026-06-20 18:01:53 +03:00
M57
d862172d78
fix(nav): keep NavKey implementation names in proguard ( #174 )
...
Avoid obfuscating screen classes/objects since their simpleNames are matched for bottom nav setup.
2026-06-20 17:54:58 +03:00
M57
82f2a5142f
ci: update release workflow to Node.js 24 and setup-gradle validation ( #173 )
...
Closes #171 .
2026-06-20 17:49:41 +03:00
M57
54a195bd94
fix(auth): initialize AuthManager in custom application class ( #172 )
...
Closes #68 . Redundant initialization in MainActivity has been removed.
2026-06-20 17:43:40 +03:00
M57
a50628696f
test( #100 ): add unit test to verify upsert for completion-only message ( #170 )
2026-06-20 17:38:07 +03:00
M57
8763271056
fix( #101 ): collect events once in init to prevent duplicate collectors on reconnect ( #169 )
2026-06-20 17:32:24 +03:00
M57
74714fc1df
fix( #99 ): gate tool and clarify events by session id to prevent leaks ( #168 )
2026-06-20 17:27:34 +03:00
M57
6cb4e17882
fix( #127 ): serialize tool event data to JSON for pretty formatting ( #167 )
...
* fix(#127 ): serialize tool event data to JSON for pretty formatting
* fix(test): format tool start test case to satisfy ktlint
2026-06-20 17:22:28 +03:00
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