Repository navigation
Makepad's apps as native apps: Calculator, Clock, Notes, Reminders and Weather with their own agents; Task as a process app - #309
Conversation
74d60e9 to
7998ee5
Compare
ff65636 to
f0ef008
Compare
f0ef008 to
03db2f7
Compare
The desktop's app catalog was generated from Makepad's whole WM registry, so it shipped Mixer, Score, VJ, Fab, Fabric, Video and Studio beside the apps OctoSense supports. desktop/config/apps.overlay.json now names the upstream apps to keep (`pick`): Browser, Files, Terminal, Task, Sheets, Clock, Weather, Finance, Notes, Reminders, Calculator and Route. Image, PDF and AI stay appended as before. upstream.py's merge_catalog keeps only the picked rows, pick_problems names a pick upstream no longer curates, and the catalog command writes the shipped config/apps.json and the full config/apps.makepad.json (still what --apps reads). The phone library's groups follow the kept apps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Five of the Makepad apps the desktop keeps become native apps (native-apps.json). Each is linked as a module: on by default in the desktop shell, off on the phone for now. Each declares its tools verbatim from its ai.rs. - agent.system_tools: the app's own read tools the system agent may call (Calculator's eval, Clock's now, Notes' search and read, Reminders' due and list, Weather's current). tools/native_apps.py checks that each one is the app's own, shareable and read-only. The system chat's grants add them for the apps this build links. - The relay sends any native app's own tools to its AI bus service in the open instance (serves_on_bus), not only the Terminal's. - The assistant pane's own process (aichat) is no longer listed as an app: the dock and the launcher leave it out (apps::listed). - A test path for the system agent's calls: the remote's /event?data=system-call:<tool> <json> runs a declared read tool through the relay and logs the reply. - AGENTS.md, the READMEs and the code walkthroughs describe them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A native app may now have no module (`"module": null`). It is built from its binary into crates/process-apps and never linked into a shell. On a target without processes its hosting is `none`. tools/native_apps.py checks the shape: a bin is required, the shells are off, and `none` is for an app without a module only. The shell's hosting and the legacy- home adoption skip such an app. Task (the process monitor) is the first, sandboxed like every native process app. A process-only app is never linked, so the system agent's grants now take the native apps that run here: linked, or able to start as their own process (apps::process_form). A closed app answers that it is not running, as a closed module app does. Browser follows on its own. Through process-apps, makepad-browser enables makepad-widgets' `cef` feature, which unifies into every `cargo test -p makepad-widgets` in this workspace (the phone workflow runs two). makepad-cef's build script then fetches a Chromium distribution in CI, so Browser needs a build in Makepad's own workspace. AGENTS.md and the READMEs name Task. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
03db2f7 to
b3127ae
Compare
|
Local CI passed on b3127ae ( GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.
Notes:
|
|
Decision (3 Oct): the native-Browser follow-up mentioned above is dropped for now. The CEF Browser stays the plain Makepad catalog app it already is ( |
mobile_surface's non-floating navigation branch runs only where mobile_navigation::ENABLED is false, which is never on Android, so its `if android` band height and `!(android && insets.bottom > 0)` pill condition could not hold; the band is `bottom` and the pill always draws. apps::is_linked, the other HUB-05 point, is no longer test-only: since #309 native_system_tools calls it, so it stays. BACKLOG.md says so.
Five reviewers audited every file under docs/ against the code at 89e6c42. Each finding was confirmed in the code, git log or gh before it was applied. A final review of this diff found 11 more problems, which are fixed. - Native agents (#309, #329, #330): ai-services, architecture and the walkthrough now describe: - the five Makepad apps' agents, through OctosPeer and serve_tools with no workspace, and their system_tools; - the Terminal's own_tools; - native peers living with the open window. They no longer say that Rinx is the only native agent or that nothing uses the peer link. - terminal.run exists only while the Terminal runs as its own sandboxed process. Release packages ship no process-app binary, so there the Terminal runs in-process and Task is absent. Task is named as a process app. - Admitted AGENT.md and skill text go with every turn. Mail has eight tools and an incoming-mail trigger. agents.provision and agents.status accept only os.mail. - Smaller fixes: keys on Windows, the window-manager override path, phone glance cards, unsandboxed catalog apps, octos_peer frame names, TurnFrom (Person), the default build's octos-core, the packaged kernel, the octos child's runtime, and local-ci's merge scope, clone lock and rom.yml paths. - ADRs get dated notes: 0002 is partly implemented; 0004 has three plan items open and notes on Task, the Terminal's agent, host tools and #238; 0005 has notes on app-contract 1.1.0; Home 0001 and 0002 get notes. The ADR index statuses are updated, and the Photos and icons plans are marked done. - Chinese parity: mail-agent-events regains its sequence diagram. ai-services, architecture, the walkthrough and the mail-events report regain their missing rows and details. - <app> written outside code is escaped (GitHub stripped it). ai-services-processes.png and ai-services-cross-app-call.png show the shipped peer link and peer/input as solid, and mark the mail.send hop as planned. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The five Makepad apps that became native apps in OctoSense-org#309 were desktop only. Their native-apps.json entries now link them into the phone shell by default as well (shells.phone "default"), like Rinx and App Hub: in-process modules, each with its own agent and its read tools for the system agent. On a Redmi Note 12 (Android 15), Calculator laid its keypad out for the phone and then lost it: the phone shell's style reapply after a hosted module's first frame wrote the DSL's key sizes back, and Calculator skipped the layout it thought it had applied. makepad OctoSense-org#99 makes it lay out again after every apply; until the next makepad move it is a stacked runtime patch (makepad-calculator-restyle, tree 47a8b47d). The phone and desktop READMEs name the apps on the phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Makepad apps the desktop keeps, decided on 2 Oct: Files, Browser, Image, PDF, Calculator, Clock, Notes, Reminders, Task, Route, Weather and Finance, with AI as the assistant pane. Mixer, Score, VJ, Fab, Fabric, Video and Studio are dropped. Six of the kept apps become native apps: five with their own agents, and Task as its own sandboxed process. Browser follows separately (see below).
Commits
desktop/config/apps.overlay.jsonnames the upstream apps to keep (pick).upstream.pywrites the shippedconfig/apps.jsonand the fullconfig/apps.makepad.json(what--appsreads).agent.octos). Makepad model: one-shot model calls for contained apps (model.complete) #95 opens the module's peer link and answers the app's tools there.agent.system_tools).tools/native_apps.pychecks that each one is the app's own, shareable and read-only.serves_on_bus), not only the Terminal's.aichat) is no longer listed as an app./event?data=system-call:<tool> <json>runs a declared read tool through the relay and logs the reply."module": null: such an app is built intocrates/process-apps, never linked into a shell, and has hostingnonewhere there are no processes.apps::process_form).Browser is not in this PR (it follows on its own). Through
crates/process-apps, makepad-browser enablesmakepad-widgets/cef. Cargo unifies that feature into everycargo test -p makepad-widgetsin this workspace, and the phone workflow runs two. makepad-cef's build script then fetches a Chromium distribution, which this PR's first local CI run did (CEF 154). Browser needs a build in Makepad's own workspace instead. #305 and makepad #98 are already in for it.Depends on
octosense-app-contract1.1.0. 1.1.0 is on crates.io since 3 Oct and reserves calculator, clock, notes, reminders, weather, browser and task (App Hub News M4: digest card on the glance screen (glance.publish) #63, News M5: system toolbox (search, deep research, page reading, crawl) granted to app agents #64, News M7: in-app conversation and memory #66), so App Hub's gate refuses those ids to script apps. With 1.1.0, App Hub's admission tests needed its fixture rename (weather→forecast), hence the pin.Validated in a hidden desktop shell (macOS, with makepad #94–#98 and #305)
calculator.eval7*6 → 42,clock.now,notes.search,reminders.due,weather.current.crates/process-appsand runs sandboxed.<jail>/cef/browser, andbrowser.tabsandbrowser.pageanswered the system agent.Not in this PR
Checks
Runs before the rebase onto #312 (tree
0462fa14plus the 1.1.0 lock):python3 tools/native_apps.py --check: passes.python3 tools/setup.py --check --cargo: passes.cargo metadata --locked: passes. The lock gains makepad-browser, makepad-cef and makepad-task.python3 -m unittest discover -s tools -p 'test_*.py': 98 OK.desktop/scripts: 59 OK (Python 3.12, which hastomllib).cargo test --locked -p octosense-shell(desktop): 773 passed.phone/:cargo test --locked --features mobile-apps -p octosense-shell: 828 passed before the lock moved. With app-contract 1.1.0 locked,a_script_app_may_not_take_a_native_apps_id_or_namespacepasses too.weather. Pin App Hub 0d5b47a2 and octosense-app-contract 1.1.0 #312 fixed that on main, and this branch is rebased on it.cargo test --locked -p octosense-ai-host --features octos-core,llm: 38 passed.cargo check --locked -p octosense, fromphone/cargo check --locked -p octosense-home --features mobile-apps, andtools/check-shell-graph.sh -p octosense: pass.clients::tests::makepad_launches_build_outside_cargos_checkoutuses a neutralexamplerow, since Browser is now a native app.🤖 Generated with Claude Code