bvandeusen
f4e39c00eb
fix: use ref.watch in build() and avoid stale snapshot in loadMore catch
2026-04-06 08:26:59 -04:00
bvandeusen
e08a8906e3
feat: add NewsNotifier and feedsProvider
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-06 08:22:24 -04:00
bvandeusen
01ea6b48db
feat: add RssItemMeta.fromNewsItem adapter factory
2026-04-06 08:18:34 -04:00
bvandeusen
b56f3d3a0f
feat: add NewsApi, openArticleInChat, and newsApiProvider
2026-04-06 08:16:00 -04:00
bvandeusen
77fc82af45
feat: add NewsItem and BriefingFeed models with tests
2026-04-06 08:13:06 -04:00
bvandeusen
a2fc0d6c7d
docs: add Android news screen implementation plan
2026-04-06 08:11:12 -04:00
bvandeusen
2a2f9e6e85
docs: add Android news screen design spec
2026-04-06 08:04:18 -04:00
bvandeusen
95d0f529ea
fix: invalidate project tasks on return from task edit screen
2026-04-06 07:15:35 -04:00
bvandeusen
36bc36cd9d
feat: replace Projects tab with More bottom sheet (news/calendar stubs)
2026-04-06 07:14:38 -04:00
bvandeusen
a23af0658a
docs: add Android nav restructure implementation plan
2026-04-06 06:40:06 -04:00
bvandeusen
39d9f7e053
docs: add Android nav restructure + projects staleness fix spec
2026-04-06 06:35:31 -04:00
bvandeusen
9944680c5b
Release v26.04.05.1 — Voice I/O
v26.04.05.1
2026-04-05 23:55:13 +00:00
bvandeusen
29ff9f821a
fix: override record_linux to 1.3.0 for platform interface compatibility
...
record_linux 0.7.2 doesn't implement startStream from record_platform_interface 1.5.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:50:05 -04:00
bvandeusen
1b08b2fd9e
feat(voice): integrate voice mode into Briefing screen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:47:38 -04:00
bvandeusen
211bf0d658
feat(voice): integrate one-shot voice capture into Quick Capture bar
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:46:34 -04:00
bvandeusen
2231c60bfb
feat(voice): integrate voice mode into Chat screen
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:45:53 -04:00
bvandeusen
81077349a5
feat(voice): add VoiceMicButton animated widget
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:44:55 -04:00
bvandeusen
2cb566336b
feat(voice): add VoiceNotifier with recording, silence detection, and streaming TTS
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:44:21 -04:00
bvandeusen
6e33d74178
feat(voice): add VoiceRepository and provider registration
2026-04-05 14:40:49 -04:00
bvandeusen
c90b0b3d48
feat(voice): add VoiceApi and VoiceStatus model
2026-04-05 14:40:19 -04:00
bvandeusen
e891e8ba52
feat(voice): add record + just_audio dependencies, RECORD_AUDIO permission
2026-04-05 14:39:35 -04:00
bvandeusen
89fe8994fb
docs: add Android Voice I/O implementation plan
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:36:48 -04:00
bvandeusen
3a3f44b00b
docs: add Android Voice I/O design spec
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-05 14:19:48 -04:00
bvandeusen
d97f7b0ebd
feat(knowledge): wire 4-tab shell, retire LibraryScreen, complete Knowledge View feature
2026-04-05 00:03:23 -04:00
bvandeusen
2ab24a99a8
feat(knowledge): add edit button to ProjectTasksScreen app bar
2026-04-04 23:56:40 -04:00
bvandeusen
e39d31fe43
feat(knowledge): add ProjectsScreen and ProjectEditScreen, sort projects by updated_at
2026-04-04 23:56:18 -04:00
bvandeusen
a50193dbc0
feat(knowledge): update Project model, ProjectsApi sort, and NoteEditScreen noteType support
2026-04-04 23:52:10 -04:00
bvandeusen
f5ba2d25a3
feat(knowledge): add KnowledgeScreen with tabs, search, tag filters, and infinite scroll
2026-04-04 23:50:19 -04:00
bvandeusen
b5d9efa3ec
feat(knowledge): add KnowledgeItemCard widget
2026-04-04 23:49:18 -04:00
bvandeusen
e0b56fc149
feat(knowledge): add KnowledgeNotifier with two-tier pagination state
2026-04-04 23:48:47 -04:00
bvandeusen
535833abfe
test: add KnowledgeItem model unit tests
2026-04-04 23:40:29 -04:00
bvandeusen
deec2318f7
feat(knowledge): add KnowledgeApi, KnowledgeRepository, wire providers
2026-04-04 23:39:43 -04:00
bvandeusen
2920252f13
feat(knowledge): add KnowledgeItem model
2026-04-04 23:38:19 -04:00
bvandeusen
c8cdcbf230
feat(knowledge): add noteType field to Note model, api, repository, provider
2026-04-04 23:37:53 -04:00
bvandeusen
e89626a782
feat(knowledge): add knowledge + projectEdit route constants
2026-04-04 22:55:50 -04:00
bvandeusen
ac4b2359a5
docs: add Knowledge View design spec for Android app
...
Covers four-tab navigation (Briefing/Knowledge/Chat/Projects),
two-tier pagination (50 IDs / 12-item batches), type-aware cards,
bottom sheet type picker, Projects screen with sorted project list,
ProjectEditScreen, and manifest/config checklist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-04 22:30:44 -04:00
bvandeusen
f11e869a1b
Merge pull request 'Release v26.03.27.1' ( #11 ) from dev into main
...
Release v26.03.27.1
v26.03.27.1
2026-03-27 04:12:30 +00:00
bvandeusen
23509adfa8
feat: news story cards in Android briefing screen
...
Replaces bare Story-N reaction rows with full NewsCard widgets: source label,
relative timestamp, linked headline, 2-line snippet, and 👍 /👎 reactions.
Reads rss_items from message metadata (requires backend ≥ this sprint).
Adds url_launcher ^6.3.1 for opening article links in the browser.
Adds https/http <queries> entries to AndroidManifest for Android 11+.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-27 00:08:51 -04:00
bvandeusen
24cef2e78c
Merge pull request 'Release v26.03.26.4' ( #10 ) from dev into main
...
Release v26.03.26.4
v26.03.26.4
2026-03-27 03:54:53 +00:00
bvandeusen
399da397da
fix: add release keystore signing to CI to fix self-update installs
...
Without a consistent signing key, each CI build was signed with the
ephemeral debug keystore from the Flutter container — causing Android
to reject updates with INSTALL_FAILED_UPDATE_INCOMPATIBLE.
Secrets stored in repo: RELEASE_KEYSTORE_BASE64, RELEASE_KEYSTORE_PASSWORD,
RELEASE_KEY_ALIAS. CI decodes the keystore and writes key.properties
before building so every release APK is signed identically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 23:41:56 -04:00
bvandeusen
2bdd663719
chore: merge main into dev, keep consolidated ci.yml
2026-03-26 18:18:38 -04:00
bvandeusen
ba889a38be
Merge pull request 'dev → main' ( #9 ) from dev into main
...
dev → main
v26.03.26.3
2026-03-26 22:08:04 +00:00
bvandeusen
7fce19a37c
feat: silent background polling for briefing screen
...
Timer.periodic every 60s calls silentRefresh() on BriefingNotifier.
silentRefresh() patches AsyncData directly — never triggers AsyncLoading —
so existing content stays on screen while the fetch is in flight.
WidgetsBindingObserver pauses polling when app is backgrounded.
Polling is also skipped while a reply is actively streaming.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:43:06 -04:00
bvandeusen
9f524e158d
fix: weather card spacing and sizing consistency
...
- Consistent 8px vertical rhythm (was 6/4/10 mix)
- Larger current temp (36px vs 32px) for better visual weight
- Fixed 64px forecast column width prevents uneven wrapping
- Forecast condition text clipped at 2 lines with ellipsis
- 12px spacing around forecast divider
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:36:53 -04:00
bvandeusen
46d0427901
feat: weather card and RSS reactions in briefing screen
...
- Parse metadata field on Message model (weather, rss_item_ids)
- Add WeatherCard widget: location, current temp, condition, today hi/lo,
delta from yesterday, scrollable 3-day forecast strip
- BriefingScreen shows WeatherCard above the first assistant message that
carries weather metadata (mirrors web BriefingView.vue behaviour)
- RSS reaction buttons (👍 /👎 ) shown below assistant messages with
rss_item_ids; optimistic toggle with rollback on failure
- Add postRssReaction / deleteRssReaction to BriefingApi
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:30:26 -04:00
bvandeusen
45294ade31
feat: sync device timezone to backend on startup
...
On shell mount, reads the IANA timezone from the device via
flutter_timezone and POSTs it to PUT /api/settings as user_timezone.
Mirrors the web app's App.vue behaviour so briefing events and the
chat route use the correct local time on Android.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-26 17:24:59 -04:00
bvandeusen
89c31f1904
Merge pull request 'dev' ( #8 ) from dev into main
...
Reviewed-on: #8
v26.03.26.2
2026-03-16 15:58:46 +00:00
bvandeusen
9f1d2317af
fix: request install-packages permission at runtime before APK install
...
Android 8+ requires canRequestPackageInstalls() to return true even when
REQUEST_INSTALL_PACKAGES is declared in the manifest. Add permission_handler
and check/request Permission.requestInstallPackages before downloading;
redirects user to Settings if not granted and shows a clear error message.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 11:56:24 -04:00
bvandeusen
c3d9cc273f
fix: quick capture incorrectly treated as offline on LLM timeout
...
The global receiveTimeout is 30s but quick capture runs LLM inference
that can take much longer. receiveTimeout fired, fell through to the
NetworkException fallback in dioToApp, and the work queue queued it as
an offline item.
- quick_capture_api.dart: override receiveTimeout to 120s for the
/api/quick-capture request
- api_client.dart: handle receiveTimeout/sendTimeout explicitly in the
error interceptor, converting them to AppException (not NetworkException)
so slow responses are never mistaken for being offline
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-16 07:54:00 -04:00
bvandeusen
63e01389e8
Merge pull request 'dev to main: big fix and improvements' ( #6 ) from dev into main
...
Reviewed-on: #6
v26.03.16.1
v26.03.12.4
2026-03-12 21:44:43 -04:00