Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ on:
- 'crates/**'
- 'apps/**'
- 'Cargo.toml'
- 'native-apps.json'
- 'Cargo.lock'
- '.cargo/**'
- 'native-runtime.lock.json'
Expand All @@ -24,6 +25,7 @@ on:
- 'crates/**'
- 'apps/**'
- 'Cargo.toml'
- 'native-apps.json'
- 'Cargo.lock'
- '.cargo/**'
- 'native-runtime.lock.json'
Expand Down Expand Up @@ -80,3 +82,5 @@ jobs:
python3 -m unittest discover -s tools -p 'test_*.py'
- name: One Makepad, App Hub, octos and Rinx in the locked graph
run: python3 tools/setup.py --check --cargo
- name: The native apps' generated places match native-apps.json
run: python3 tools/native_apps.py --check
13 changes: 7 additions & 6 deletions .github/workflows/phone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ on:
- 'crates/**'
- 'apps/**'
- 'Cargo.toml'
- 'native-apps.json'
- 'Cargo.lock'
- '.cargo/**'
- 'native-runtime.lock.json'
Expand All @@ -25,6 +26,7 @@ on:
- 'crates/**'
- 'apps/**'
- 'Cargo.toml'
- 'native-apps.json'
- 'Cargo.lock'
- '.cargo/**'
- 'native-runtime.lock.json'
Expand Down Expand Up @@ -61,7 +63,7 @@ jobs:
# default and mobile-apps builds link it, on desktop and Android.
cargo check --locked -p octosense-home
cargo check --locked -p octosense-home --features mobile-apps
cargo check --locked -p octosense-home -p octosense-reference -p octosense-appcard -p octosense-news -p octosense-photos -p octosense-maps --features mobile-apps,app-appcard
cargo check --locked -p octosense-home -p octosense-reference -p octosense-appcard --features mobile-apps,app-appcard
# The graph guards every shell passes (tools/check-shell-graph.sh):
# the AI services (octosense-ai-host, the octos kernel, app-peers)
# in the default and mobile-apps graphs, host and Android; AppCard's
Expand All @@ -70,22 +72,21 @@ jobs:
bash ../tools/check-shell-graph.sh -p octosense-home
- name: Verify the single runtime graph
run: python3 tools/setup.py --check --cargo
- name: The native apps' generated places match native-apps.json
run: python3 tools/native_apps.py --check
- name: Build Home, App Hub admission and runtime policy tests
working-directory: phone
timeout-minutes: 60
run: cargo test --locked --features mobile-apps -p octosense-shell -p octosense-home -p octosense-app-policy -p octosense-app-hub -p octosense-news -p octosense-appcard -p octosense-ai-host --no-run
run: cargo test --locked --features mobile-apps -p octosense-shell -p octosense-home -p octosense-app-policy -p octosense-app-hub -p octosense-appcard -p octosense-ai-host --no-run
- name: Test Home, App Hub admission and runtime policy
working-directory: phone
timeout-minutes: 30
run: |
# octosense-app-hub-app is App Hub's shared shell crate, a git
# dependency with dev-dependencies: cargo cannot test it from here;
# OctoSense-App-Hub's CI tests it.
cargo test --locked --features mobile-apps -p octosense-shell -p octosense-home -p octosense-app-policy -p octosense-app-hub -p octosense-news -p octosense-appcard -p octosense-ai-host
cargo test --locked --features mobile-apps -p octosense-shell -p octosense-home -p octosense-app-policy -p octosense-app-hub -p octosense-appcard -p octosense-ai-host
# The opt-in AppCard build: its module registers into the shell.
cargo test --locked --features mobile-apps,app-appcard -p octosense-shell appcard
# Maps' isolate tests need init_cx_os(), whose macOS game-input setup
# traps off the main thread, where libtest runs tests (RUNTIME-01).
cargo test --locked -p octosense-maps -- --skip view::tests --skip module::tests
cargo test --locked -p makepad-widgets splash_policy
cargo test --locked -p makepad-script-std gate::tests
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
| A system app | `apps/<name>/bundle/` | App Hub's `card-host --bundle apps/<name>/bundle --system`; then in a shell |
| A host service (`mail`, `llm`, `model`) | `apps/mail/host-service/`, `apps/ai-providers/` | `cargo test --locked -p octosense-mail-service -p octosense-llm-service` |
| AppCard (opt-in) | `apps/appcard/` | [apps/appcard/AGENTS.md](apps/appcard/AGENTS.md), `apps.yml` |
| An external pin (Makepad, OctoScript, App Hub, octos, Rinx) | root `Cargo.toml` `[workspace.dependencies]`, `native-runtime.lock.json`, `runtime-patches.lock.json` | `python3 tools/setup.py --update`, then `--check --cargo` |
| A native app (App Hub, Rinx, Terminal, Sheets, Reference, AppCard): its crate, pin, features, hosting per target, sandbox, storage and agent grants | `native-apps.json` only; `python3 tools/native_apps.py` writes the marked blocks in the `Cargo.toml`s, `crates/shell/src/native_apps.rs` and `Cargo.lock` | `python3 tools/native_apps.py --check`, `python3 -m unittest discover -s tools -p 'test_*.py'` |
| An external pin (Makepad, OctoScript, App Hub, octos, Rinx) | root `Cargo.toml` `[workspace.dependencies]` (a native app's in `native-apps.json`), `native-runtime.lock.json`, `runtime-patches.lock.json` | `python3 tools/setup.py --update`, then `--check --cargo` and `python3 tools/native_apps.py --check` |
| A decision | `docs/adr/` (next free number) | — |

Start every session with `python3 tools/setup.py` (it prepares `.sources/`, and changes nothing that is already right).
Expand Down
58 changes: 14 additions & 44 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 21 additions & 18 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ members = [
"crates/shell",
"crates/toolbox",
"apps/reference",
"apps/news/native",
"apps/photos/native",
"apps/maps/native",
"apps/news/host-service",
"apps/mail/host-service",
"apps/ai-providers/config",
Expand Down Expand Up @@ -57,6 +54,20 @@ license = "Apache-2.0"
authors = ["octos-app contributors"]

[workspace.dependencies]
# --- The native apps, declared in native-apps.json (ADR 0004 §1): Rinx
# (Matrix chats, Moments, articles, mini apps; the library as a hosted
# module only, never its standalone entry or its own kernel, Rinx ADR 0007),
# Terminal, App Hub (the store and the Card runner) and the opt-in Sheets,
# Reference and AppCard. A git source shares its repository's revision with
# the pins below; tools/native_apps.py writes this block and checks that.
# BEGIN native-apps: pins (generated by tools/native_apps.py from native-apps.json; do not edit)
rinx = { git = "https://github.com/hagency-org/Rinx.git", rev = "68afcf796d303aaf646eeb832d65c450a56c92b5", default-features = false, features = ["octosense-module"] }
octosense-reference = { path = "apps/reference" }
makepad-sheets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0", default-features = false }
makepad-terminal = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
octosense-appcard = { path = "apps/appcard/module" }
octosense-app-hub-app = { git = "https://github.com/OctoSense-org/OctoSense-App-Hub", rev = "e8601b80ce104db2e48208094714bdcffdce6b5a" }
# END native-apps: pins
# --- Makepad (OctoSense-org/makepad), the revision Octoscript-Makepad's
# runtime.json pins (native-runtime.lock.json); resolved to .sources/makepad.
makepad-widgets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
Expand All @@ -69,8 +80,6 @@ makepad-ai-services = { git = "https://github.com/OctoSense-org/makepad.git", re
makepad-strict-json = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
makepad-app-module = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
makepad-wm-theme = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
makepad-map-nav = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0" }
makepad-sheets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0", default-features = false }
makepad-aichat = { git = "https://github.com/OctoSense-org/makepad.git", rev = "f08eec5378fa3f83902a2794dacda03e829a0ef0", default-features = false }
# --- OctoScript (Octoscript 68f6a9df) and its Makepad runtime
# (Octoscript-Makepad 65d30a09, native-runtime.lock.json).
Expand All @@ -82,9 +91,8 @@ octoscript-capabilities = { git = "https://github.com/OctoSense-org/Octoscript.g
octoscript-schema = { git = "https://github.com/OctoSense-org/Octoscript.git", rev = "68f6a9df55692b5d8ef8873a12721e279a3f40d6" }
octoscript-makepad = { git = "https://github.com/OctoSense-org/Octoscript-Makepad.git", rev = "5fc3681026247761d2e2e16e15b0c4dff3a1c521" }
octoscript-node = { git = "https://github.com/OctoSense-org/Octoscript-Makepad.git", rev = "5fc3681026247761d2e2e16e15b0c4dff3a1c521" }
# --- App Hub: the shells' store/Card runner/system apps crate and the host
# service registry the Mail and llm services register into. One revision.
octosense-app-hub-app = { git = "https://github.com/OctoSense-org/OctoSense-App-Hub", rev = "e8601b80ce104db2e48208094714bdcffdce6b5a" }
# --- App Hub's host service registry the Mail and llm services register
# into; the same revision as App Hub's app crate (a native app, above).
octosense-appstore = { git = "https://github.com/OctoSense-org/OctoSense-App-Hub", rev = "e8601b80ce104db2e48208094714bdcffdce6b5a" }
# --- octos: ONE source for every octos crate (octos-org/octos main at the
# merge of octos#2601, the `serve --host-managed` follow-ups). Move octos-core, octos-cli
Expand All @@ -96,9 +104,6 @@ octos-cli = { git = "https://github.com/octos-org/octos.git", rev = "5e7577f0cb9
# toolbox scope) for the toolbox's `octos-engine` feature. Same source and
# revision as above.
octos-research = { git = "https://github.com/octos-org/octos.git", rev = "5e7577f0cb92cf618b965745434b0200e2b82865", default-features = false }
# --- Rinx (Matrix chats, Moments, articles, mini apps) as a hosted module:
# the library only, never its standalone entry or its own kernel (Rinx ADR 0007).
rinx = { git = "https://github.com/hagency-org/Rinx.git", rev = "68afcf796d303aaf646eeb832d65c450a56c92b5", default-features = false, features = ["octosense-module"] }
# --- AppCard's inline renderers.
streaming-markdown-kit = { git = "https://github.com/Project-Robius-China/streaming-markdown-kit.git", branch = "main" }
makepad-diagram-kit = { git = "https://github.com/Project-Robius-China/makepad-diagram-kit.git", branch = "main" }
Expand All @@ -114,11 +119,6 @@ octosense-llm-config = { path = "apps/ai-providers/config" }
octosense-llm-service = { path = "apps/ai-providers/host-service" }
octosense-mail-service = { path = "apps/mail/host-service" }
octosense-news-service = { path = "apps/news/host-service" }
octosense-reference = { path = "apps/reference" }
octosense-appcard = { path = "apps/appcard/module" }
octosense-news = { path = "apps/news/native" }
octosense-photos = { path = "apps/photos/native" }
octosense-maps = { path = "apps/maps/native" }
octos-app = { path = "apps/appcard/app/app", default-features = false }
octos-app-store = { path = "apps/appcard/app/crates/octos-app-store" }
octos-app-transport = { path = "apps/appcard/app/crates/octos-app-transport" }
Expand Down Expand Up @@ -197,12 +197,15 @@ makepad-ai-services = { path = ".sources/makepad/libs/ai/services" }
makepad-strict-json = { path = ".sources/makepad/libs/strict_json" }
makepad-app-module = { path = ".sources/makepad/libs/app_module" }
makepad-wm-theme = { path = ".sources/makepad/libs/wm_theme" }
makepad-map-nav = { path = ".sources/makepad/libs/map_nav" }
makepad-sheets = { path = ".sources/makepad/apps/sheets" }
makepad-aichat = { path = ".sources/makepad/apps/aichat" }
# Rinx's article editor: the Markdown and math components.
makepad-markdown = { path = ".sources/makepad/libs/markdown" }
makepad-markdown-widgets = { path = ".sources/makepad/libs/markdown_widgets" }
# The native apps from Makepad (native-apps.json `source.local`).
# BEGIN native-apps: patch https://github.com/OctoSense-org/makepad.git (generated by tools/native_apps.py from native-apps.json; do not edit)
makepad-sheets = { path = ".sources/makepad/apps/sheets" }
makepad-terminal = { path = ".sources/makepad/apps/terminal" }
# END native-apps: patch https://github.com/OctoSense-org/makepad.git

# AppCard's inline-renderer kits name makepad-widgets by the ZhangHanDong URL.
[patch."https://github.com/ZhangHanDong/makepad.git"]
Expand Down
15 changes: 8 additions & 7 deletions apps/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ them. They live in `apps/` of the [OctoSense repository](../README.md); until
assistant, a Rust module (`octos-app`) that the shells link in-process and
that runs on the shell's octos kernel. It is **opt-in**: both shells link
it only with `--features app-appcard`, and it is not shipped by default.
- **Native comparison modules** (`news/native`, `photos/native`,
`maps/native`) and **Reference** (`reference`): Rust modules Home links
behind features (`app-news`, `app-photos`, `app-maps`, `app-reference`);
the desktop links only Reference this way (its `app-photos` is Makepad's
own Photos module).
- **Reference** (`reference`): a Rust module the shells link behind
`app-reference` (always on phones). Every native app the shells link is
declared in [`../native-apps.json`](../native-apps.json). News, Photos and
Maps are script apps only: their earlier native modules were deleted
(native-apps ADR 0004 §1, [#110](https://github.com/OctoSense-org/OctoSense/pull/110)). Photos' sample library, which Home mounts, is in
`photos/resources/`.

The shell services these apps rely on are next door:
[`../crates/kernel`](../crates/kernel) (the octos kernel service, see
Expand Down Expand Up @@ -77,7 +78,7 @@ host's mail service, `llm` reaches the host's LLM-provider service. `net` reache
- **Photos**: the bundle ships only 75 thumbnails (`bundle/thumbs/`, about
2 MB). The full-size files the viewer shows are served at
`{{assets}}/photos/...` only when a shell mounts them: Home mounts
`photos/native/resources/photos` (about 87 MB, `phone/system-apps.json`);
`photos/resources/photos` (about 87 MB, `phone/system-apps.json`);
the desktop mounts nothing (`desktop/system-apps.json`), so the viewer has
no full-size image there.
- **Maps**: on the OnePlus 6 (2026-09-27) search, place, route, adding and
Expand Down Expand Up @@ -120,7 +121,7 @@ standalone launcher and ROM image). Each packaging:
"schema": 1,
"source": "../apps",
"apps": ["news", "photos", "maps", "camera", "mail", "ai-providers"],
"assets": { "photos": { "photos": "../apps/photos/native/resources/photos" } }
"assets": { "photos": { "photos": "../apps/photos/resources/photos" } }
}
```

Expand Down
13 changes: 7 additions & 6 deletions apps/README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ OctoSense-System-Apps 仓库(已归档)。
一个由 Shell 进程内链接的 Rust 模块(`octos-app`),运行在 Shell 的
octos 内核之上。它**需显式启用**:两个 Shell 只有在使用 `--features app-appcard`
时才链接它,默认不随产品发布。
- **原生对比模块**(`news/native`、`photos/native`、`maps/native`)和
**Reference**(`reference`):Home 通过 feature(`app-news`、`app-photos`、
`app-maps`、`app-reference`)链接的 Rust 模块;桌面端只以这种方式链接
Reference(它的 `app-photos` 是 Makepad 自带的 Photos 模块)。
- **Reference**(`reference`):Shell 通过 `app-reference` 链接的 Rust
模块(手机上始终链接)。Shell 链接的所有原生应用都在
[`../native-apps.json`](../native-apps.json) 中声明。News、Photos 和 Maps
只有脚本应用版本:早期的原生模块已删除(原生应用 ADR 0004 §1,[#110](https://github.com/OctoSense-org/OctoSense/pull/110))。Home 挂载的
Photos 示例图库位于 `photos/resources/`。

这些应用依赖的 Shell 服务就在旁边:
[`../crates/kernel`](../crates/kernel)(octos 内核服务,见 [octos 内核](#octos-内核))和
Expand Down Expand Up @@ -68,7 +69,7 @@ OctoScript-App-Design-Flow 的 `AGENTS.md`,再读 `docs/QUICKSTART.md`),
提供相机,因此其他环境下拍摄未经测试。
- **Photos**:bundle 只带 75 张缩略图(`bundle/thumbs/`,约 2 MB)。查看器
显示的原图只有在 Shell 挂载后才会出现在 `{{assets}}/photos/...`:Home
挂载 `photos/native/resources/photos`(约 87 MB,见 `phone/system-apps.json`);
挂载 `photos/resources/photos`(约 87 MB,见 `phone/system-apps.json`);
桌面端不挂载任何目录(`desktop/system-apps.json`),所以那里的查看器没有原图。
- **Maps**:在 OnePlus 6 上(2026-09-27)搜索、地点详情、路线、添加和移除途经点、
逐向导航驾驶以及 2D 视图都正常。3D 驾驶视图会画出路线但没有地图瓦片,手机和桌面
Expand Down Expand Up @@ -102,7 +103,7 @@ OctoScript-App-Design-Flow 的 `AGENTS.md`,再读 `docs/QUICKSTART.md`),
"schema": 1,
"source": "../apps",
"apps": ["news", "photos", "maps", "camera", "mail", "ai-providers"],
"assets": { "photos": { "photos": "../apps/photos/native/resources/photos" } }
"assets": { "photos": { "photos": "../apps/photos/resources/photos" } }
}
```

Expand Down
Loading