Skip to content

alpha.22: Jarvis reaches every module, macros overhaul, focus timer that keeps running - #23

Merged
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3
Jul 29, 2026
Merged

alpha.22: Jarvis reaches every module, macros overhaul, focus timer that keeps running#23
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3

Conversation

@codebooo

Copy link
Copy Markdown
Owner

Twelve requested items (0.1.0-alpha.22).

1. Motion

Fades run longer (420 ms in, 260 ms out) and every scale is gone, so nothing reads as a corner reveal: screen transitions, the quick-capture button and the Vault reveal are all pure cross-fades.

2. Jarvis in every module

New contracts in core:serviceLifeDataProvider for a module's read side, plus Jarvis-facing LifeActions. Screen Time, Plants, Brick, News, Clear Sky, Downloader, Pastebin and Focus each register both, so the chat module still depends on zero feature modules.

He can now act: create pastes (including one-time encrypted ones), queue downloads, water or add plants, start and stop Brick modes, run and stop the focus timer, sync and export screen time, run macros — on top of the existing tasks, notes, reminders, events and timers.

On the reading side, detail is fetched on demand: the model emits [[get: topic]], the app answers with that module's data and re-runs the turn once. The always-on snapshot stays small, so a chat about poetry costs nothing extra while a question about screen time gets the real numbers. Two reads per turn, one extra pass, hard capped.

3. Macros text field

Single line again, with proper top padding — the label no longer rides into the app bar.

4. Macros overhaul

  • Build by hand: "+" opens an editor with a searchable action picker, per-step fields, reordering, delete, and "Test now" that runs without saving.
  • Edit any macro, AI-written or not, from the list or the detail screen.
  • 50+ actions across apps, navigation, screen, timing, device and LifeOS itself: open app/link/settings page, tap by text, content description or view id, long-press, type, clear, scroll, four swipes, wait-for-text, media keys, volume, torch, vibrate, clipboard, share, toast, plus LifeOS tasks, notes, timers, focus sessions and Brick modes.
  • AI compilation fixed. Root cause of "12 steps for opening Spotify → Spotify App not found": the model invented steps and target names, and nothing checked them. Now it sees the installed app list, is told the fewest-steps rule ("open Spotify" is exactly LAUNCH + WAIT), duplicate steps are collapsed, and LAUNCH targets are normalised against real labels (the "App" suffix is stripped). Compiled steps open in the editor instead of being saved blind.

5. Timer hint

"Type a duration" is gone — tapping a wheel is the affordance.

6. Focus time edited in place

Tap the time in the ring and it becomes the field. The dialog is gone; accepts "25", "25:00" and "1:05:00".

7. Overlay moves and resizes

Drag it anywhere, pinch between 96 and 320 dp; stroke and label scale with it, and the position and size survive hide/show.

8. Overlay X syncs

The service publishes its visibility, the controller mirrors it, so the in-app button flips back to "Overlay" when you close the ring with its X.

9. Focus timer keeps running

State moved out of the composable into a singleton driven by an absolute deadline. Switching tabs, going Home or leaving the app no longer resets or stops it; sessions are still recorded on finish.

10. Home tiles auto-scroll

Holding a tile near the top or bottom edge scrolls the grid, speed scaled by how close to the edge you are, and the tile stays under your finger.

11. Pastebin

Verified against the API docs and a live call: Pastebin's developer API has no burn-after-read and no paste password — those exist only in its web UI, which is why the switches did nothing. Rather than keep dead switches, both now route to PrivateBin: AES-256-GCM over raw-deflated JSON, PBKDF2-HMAC-SHA256 key material, key in the link fragment, server holds only ciphertext. I verified the exact wire format end to end (create → fetch → decrypt) against a live instance before porting it to Kotlin.

Also fixed: maintenance pages and bad logins were being mistaken for a URL or a user key (the API answers 200 with HTML), signed-in pastes now go under the account, and the composer says which backend a paste will use before you create it. The instance is configurable.

12. Jarvis vision

Attach photos from the gallery. On-device Gemma reads them through a vision session (MediaPipe image modality, setMaxNumImages, images decoded to at most 768 px); NAS Ollama gets them as base64. Attachments are copied into app storage first, because the picker's Uri permission does not outlive the turn. Both the attachment and the reply stay in the thread.

Verification

:app:assembleDebug, :app:assembleRelease (minified) and the full test task pass. Room schema 16 with an auto-migration.


Generated by Claude Code

…running

Motion
- Fades are slower (420 ms in, 260 ms out) and every scale is gone, so nothing
  reads as a corner reveal any more: screen transitions, the quick-capture
  button and the Vault reveal all cross-fade.

Jarvis
- New core:service contracts: LifeDataProvider for a module's read side and a
  batch of Jarvis-facing LifeActions. Screen Time, Plants, Brick, News, Clear
  Sky, Downloader, Pastebin and Focus each register both, so the chat module
  still depends on no feature module.
- He can act everywhere: create pastes (including one-time encrypted ones),
  queue downloads, water or add plants, start and stop Brick modes, run and
  stop the focus timer, sync and export screen time, run macros.
- Detail is fetched on demand: the model emits [[get: topic]], the app answers
  with that module's data and re-runs the turn once. The always-on snapshot
  stays small, so a chat that needs no data costs nothing extra.
- Images: attach photos from the gallery and the model reads them. On-device
  Gemma uses a vision session (MediaPipe image modality, images decoded to at
  most 768 px), NAS Ollama gets them as base64. Attachments are copied into app
  storage first, because the picker's permission does not outlive the turn.

Macros
- Build one by hand: a "+" opens an editor with a searchable action picker,
  per-step fields, reordering, delete and a "Test now" that runs without saving.
- Edit any macro, AI-written or not, from the list or the detail screen.
- The vocabulary now covers apps, navigation, screen interaction, timing,
  device control and LifeOS itself - open app/link/settings page, tap by text,
  description or view id, long-press, type, clear, scroll, four swipes,
  wait-for-text, media keys, volume, torch, vibrate, clipboard, share, toast,
  and LifeOS tasks, notes, timers, focus sessions and Brick modes.
- AI compilation is fixed: the model sees the installed app list, is told to use
  the fewest steps ("open Spotify" is two), duplicate steps are collapsed, and
  LAUNCH targets are normalised against installed labels, so "Spotify App" no
  longer fails at run time. Compiled steps open in the editor for review.
- The prompt field is a single line again and no longer clips into the app bar.

Focus
- The timer lives in a singleton driven by an absolute deadline, so tab
  switches, Home and app switches no longer reset or stop it.
- The time in the middle of the ring is edited in place; the dialog is gone.
- The overlay can be dragged anywhere and pinched between 96 and 320 dp, its
  stroke and label scale with it, and closing it with its own X updates the
  in-app Overlay button.

Pastebin
- Pastebin's developer API has no burn-after-read and no paste password, which
  is why those switches did nothing. Both now route to PrivateBin instead:
  AES-256-GCM over raw-deflated JSON with PBKDF2-HMAC-SHA256 key material, the
  key in the link fragment, verified end to end against a live instance.
- Maintenance pages and bad logins are reported as errors instead of being
  mistaken for a URL or a user key, and signed-in pastes go under the account.
- The composer says which backend a paste will use before it is created, and
  the instance is configurable.

Home
- Dragging a tile near the top or bottom edge now auto-scrolls the grid.

Clock
- The timer's "Type a duration" hint is gone; tapping a wheel is the affordance.

Version 0.1.0-alpha.22. Room schema 16.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011kSsXNrSk6NDjM2FjFZ7Y9
@codebooo
codebooo force-pushed the claude/lifeos-production-plan-v3-dmynx3 branch from 07368d0 to 9784cae Compare July 29, 2026 10:43
@codebooo
codebooo merged commit fce5dad into main Jul 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants