Skip to content

AI providers system app and the llm host service - #38

Merged
ymote merged 2 commits into
mainfrom
feat/system-apps
Sep 27, 2026
Merged

ymote merged 2 commits into
mainfrom
feat/system-apps

Conversation

@ymote

@ymote ymote commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Adds the AI providers system app to the desktop. main already hosts the system apps (App Hub's Card runner, the Mail host service, runtime Octoscript-Makepad 463e3da8 / makepad cd812acd, opt-in AppCard), so this PR is now a small addition on top of it (rebased onto #46). It was rebuilt from main: the old system-apps wiring, the runtime patch and the App Hub alias are gone.

What changes

  • Pins: none. main (App Hub 3e993d4c, System-Apps c0f2199c #46) already pins OctoSense-System-Apps c0f2199c, which carries the AI providers bundle, octosense-llm-service and octosense-llm-config, and App Hub 3e993d4c. That App Hub rev includes the llm capability and is the rev the Mail and llm services pin, so there's still one App Hub and no [patch] alias.
  • system-apps.json: adds ai-providers.
  • app-hub feature: also links octosense-llm-service and octosense-llm-config.
  • register_host_services (src/apps.rs): registers llm next to Mail with these options:
    • the core dir is the AppCard kernel's octos home (OCTOS_APP_CORE_DIR, else ~/octos-home/.octos);
    • image picker: the macOS open panel, filtered to PNG and JPEG;
    • image drops: a screenshot dropped on the AI providers window while the import sheet waits (src/llm_image.rs);
    • OCTOSENSE_LLM_TEST_IMAGE answers a pick in hidden test runs;
    • on_changed restarts the running AppCard module so its kernel reads the new profile. This hook is registered only with --features app-appcard; otherwise there's nothing to restart.
  • Start → Settings: becomes Appearance plus AI providers once the build ships the app.
  • Scripts: scripts/system_apps_remote.sh and scripts/ai_providers_remote.sh are hidden --remote end-to-end runs. Each uses a temp home, a temp octos dir and file vaults; the AI providers run also uses fake keys only and runs under sandbox-exec with outbound 443 denied.
  • README (en/zh): updated to match.

Verification (macOS, runtime at the lock's makepad cd812acd)

  • Build checks:
    • cargo check --locked --features mobile-apps passes.
    • cargo tree -i octos-core finds no match (host and aarch64-linux-android), so AppCard stays opt-in.
    • cargo check --locked --workspace --features mobile-apps,app-appcard passes.
    • tools/setup-native.py --check passes, and the graph has one makepad and one App Hub source.
  • Tests: 229 pass with default features, 231 with mobile-apps, and 232 with mobile-apps,app-appcard.
  • system_apps_remote.sh: 3 green runs out of 4. The one failure was a 439 ms hang in macOS's own theme loading (CoreUI) on the first native event, unrelated to this change. Each green run covers:
    • the launcher lists news, photos, maps, camera, mail and ai-providers;
    • Photos draws;
    • Mail's host sign-in sheet opens;
    • AI providers runs under storage + llm;
    • bundles and jails land in the right places;
    • there are no panics.
    • One change: the Card runner building an app's first Splash VM on the UI thread (~300 ms) is now listed as a known first-open hang, next to the bundle unpack.
  • ai_providers_remote.sh: 2 green runs of 14 steps each:
    • the add wizard (DeepSeek, then Z.ai against a local fake endpoint);
    • the model pull-down;
    • paste, drop and picker imports of the QR-A fixture, including a wrong PIN;
    • the phone-QR export, read back from the grab and matching _main.json, with the countdown auto-closing;
    • no key text in the UI tree or the logs; no panic or Splash error.

Depends on (all merged)

Known gaps

  • AppCard restart: only in-process AppCard module instances are restarted. An AppCard running as a separate process reads the new providers when it next starts.
  • No camera scanner on the desktop: import is from an image, or by pasting the code.

🤖 Generated with Claude Code

@ymote ymote changed the title Ship system apps (News, Photos, Maps, Mail, AI providers) as contained apps AI providers system app and the llm host service Sep 26, 2026
ymote and others added 2 commits September 26, 2026 17:04
Link the AI providers system app from the pinned OctoSense-System-Apps
(c0f2199c, which carries #1: the AI providers app, the
octosense-llm-service `llm` host service and octosense-llm-config) on
App Hub 3e993d4c (which has the `llm` capability), the rev both the Mail and
llm services pin: one App Hub in the graph, no alias.

- system-apps.json selects ai-providers.
- The `app-hub` feature links octosense-llm-service and -config;
  register_host_services registers `llm` next to Mail with the AppCard
  kernel's octos home as its core dir, the desktop image picker (the open
  panel, filtered to PNG and JPEG) and image drops on the import sheet
  (src/llm_image.rs; OCTOSENSE_LLM_TEST_IMAGE answers a pick for hidden
  test runs).
- With app-appcard linked, a change to the provider set restarts the
  running AppCard module so its kernel reads the new profile; without it
  nothing is registered as a change hook.
- Start > Settings becomes Appearance plus AI providers once the build
  ships the app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/system_apps_remote.sh and scripts/ai_providers_remote.sh drive a
hidden release build (MAKEPAD_HIDE_WINDOWS=1, --remote) with a temp
OCTOSENSE_HOME, octos core dir and file vaults. The AI providers run is
sandboxed with outbound HTTPS denied and uses fake keys only: the add
wizard, paste, drop and picker imports of the QR-A fixture, and the phone
QR export read back and compared with the saved profile.

The system-apps run also treats the Card runner building an app's first
Splash VM on the UI thread as a known first-open hang, as it already did
for the bundle unpack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ymote
ymote marked this pull request as ready for review September 27, 2026 00:18
@ymote
ymote merged commit cae5cfb into main Sep 27, 2026
2 checks passed
chrislearn pushed a commit to chrislearn/OctoSense that referenced this pull request Sep 29, 2026
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
chrislearn pushed a commit to chrislearn/OctoSense that referenced this pull request Sep 29, 2026
AI providers system app and the llm host service
chrislearn pushed a commit to chrislearn/OctoSense that referenced this pull request Sep 29, 2026
… Hub 64bd6c01

makepad main 975c5630 adds OctoSense-org#37 (Slug text in one supersample loop), OctoSense-org#39
(cursor and glass shaders with one call site per figure and blur level),
OctoSense-org#38 (PerfGraph quads) and OctoSense-org#40 + OctoSense-org#41 (in-process terminal module; its
`run` needs the person's confirmation). Octoscript-Makepad#49 releases it;
App Hub#21 pins the same set.

The makepad-settings runtime patch reapplies unchanged on the new base
(same sha256); runtime-patches.lock.json records the new base and tree.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ymote added a commit that referenced this pull request Oct 1, 2026
… (until #204)

App Hub main (58c3c8ae) includes App Hub #38: every ServiceCall carries
may_prompt, and App Hub's own sheet handler refuses a sheet when it is
false. Before #38 nothing read it and a sheet was always allowed. Every
ServiceCall OctoSense builds (the shell's agent tool calls in
script_apps.rs, and the services' tests) passes may_prompt: true, so
behaviour is unchanged; no OctoSense service reads the field yet.

Isolates are unchanged too: App Hub's isolate_settings now sets
host_prompts true for a foreground app, so a glance tile's requests carry
may_prompt true and its sheets are allowed, as today. Refusing sheets on
background surfaces is #204's work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chrislearn pushed a commit to chrislearn/OctoSense that referenced this pull request Oct 8, 2026
…ncy-org/Rinx#37) [skip ci]

- native-apps.json pins Rinx at tag v1.0.0 (commit 0879548b), the first Rinx
  release; the root pin is `tag = "v1.0.0"` and Cargo.lock records the commit.
  From 68afcf79 this brings Rinx OctoSense-org#38 (feature parity), OctoSense-org#39 (hosted pane
  layouts), OctoSense-org#42 (Back at the root is the host's; sign-in in ~5 s on a fresh
  Android install) and OctoSense-org#43 (1.0.0).
- tools/native_apps.py: a git source may carry `tag` (a release tag,
  vX.Y.Z or vX.Y.Z-rc.N) with the commit it names in `rev`; apps in
  TAGGED_RELEASES (Rinx) must; --check also reads Cargo.lock and refuses a
  lock whose commit for the tag differs from the manifest's (a moved tag).
- Tests for each rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant