Skip to content
Closed
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
5 changes: 5 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Makepad otherwise derives the macOS menu-bar name from the checkout directory.
# Keep native Cargo launches branded correctly even when the folder is "makeos".
[env]
MAKEPAD_BUNDLE_NAME = { value = "OctoSense", force = true }
MAKEPAD_BUNDLE_IDENTIFIER = { value = "dev.makepad.octosense", force = true }
372 changes: 142 additions & 230 deletions Cargo.lock

Large diffs are not rendered by default.

26 changes: 13 additions & 13 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,31 +37,31 @@ name = "octosense"
path = "src/main.rs"

[dependencies]
makepad-widgets = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-studio-protocol = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-network = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-wm-api = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-widgets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-studio-protocol = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-network = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-wm-api = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
# The AI services wire only: the WM relays frames between the aichat child and the apps.
makepad-ai-services = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-strict-json = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-ai-services = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-strict-json = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
# In-process hosting (aicontrol §3): the module contract, the palette applied
# into each instance's isolate, and the modules this build links.
makepad-app-module = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-wm-theme = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-sheets = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833", default-features = false, optional = true }
makepad-photos = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833", default-features = false, optional = true }
makepad-app-module = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-wm-theme = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-sheets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3", default-features = false, optional = true }
makepad-photos = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3", default-features = false, optional = true }
octosense-reference = { path = "apps/reference", optional = true }
# The assistant as a module, seated in the pane in-process: the web build's
# only chat, a desktop option. Without the engine feature: no model runtime,
# NoModel and the tool console (the child process keeps the real models).
makepad-aichat = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833", default-features = false, optional = true }
makepad-aichat = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3", default-features = false, optional = true }

# A phone cannot spawn the desktop catalog's Cargo binaries. Link the
# available modules into native mobile builds without requiring CLI flags.
[target.'cfg(any(target_os = "android", target_os = "ios"))'.dependencies]
octosense-reference = { path = "apps/reference" }
makepad-sheets = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833", default-features = false }
makepad-photos = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833", default-features = false }
makepad-sheets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3", default-features = false }
makepad-photos = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3", default-features = false }

[features]
default = []
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ cargo run --release

The first build downloads Makepad and other dependencies. The host and Reference app need no sibling Makepad checkout, Studio process, model download, or wallpaper download. The additional default apps use the sibling `../makepad` checkout and build on first launch; unavailable apps are hidden. Fonts and other framework resources are read from Cargo's dependency checkout during source development, so keep that cache available.

On macOS, `.cargo/config.toml` sets the native menu-bar name to **OctoSense**.
Makepad otherwise derives it from the checkout directory, which may still be
named `makeos`. Rebuild and relaunch after updating; Cargo regenerates the
development `Info.plist` automatically.

The build target selects the startup shell automatically: Android uses the Android phone layout, iOS uses the iOS phone layout, and desktop/web builds keep Omarchy. You can still switch styles from the shell's style menu. Native phone toolbars are 48 points high and respect the window's safe-area insets.

The default desktop starts empty. AI assistant startup, background app prewarming, demo filesystem generation, and wallpaper downloads are off. **System → Quit OctoSense** closes the desktop and its hosted processes.
Expand Down
4 changes: 2 additions & 2 deletions apps/reference/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ edition = "2021"
publish = false

[dependencies]
makepad-widgets = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-app-module = { git = "https://github.com/makepad/makepad.git", rev = "74b63be83e101ab3a28d3604df77e9662d50a833" }
makepad-widgets = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
makepad-app-module = { git = "https://github.com/OctoSense-org/makepad.git", rev = "712b9f16d1992131bb99c070673faa1929fe75f3" }
12 changes: 12 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Windows reserves only 1 MiB for the main thread by default. OctoSense's
// startup evaluates and constructs a large Makepad script/widget tree on that
// thread, whose bounded peak exceeds the default before the first window is
// shown. /STACK changes the PE address-space reserve; pages are still committed
// only as they are used.
fn main() {
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let target_env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
if target_os == "windows" && target_env == "msvc" {
println!("cargo:rustc-link-arg-bins=/STACK:16777216");
}
}
26 changes: 26 additions & 0 deletions docs/validation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,29 @@
# macOS application-name validation — 2026-09-11

On `fix/macos-app-name`, `.cargo/config.toml` explicitly sets
`MAKEPAD_BUNDLE_NAME=OctoSense` and
`MAKEPAD_BUNDLE_IDENTIFIER=dev.makepad.octosense`. The pinned Makepad build script
otherwise derives its generated `Info.plist` name from the checkout folder.
Here that folder is still `makeos`, producing `Makeos` despite the correct
OctoSense window and menu strings in the application source.

Verified with isolated native launches:

- Before the change, the actual macOS menu bar reported `Apple, Makeos`.
- After locked debug and release workspace builds, both generated plists report
`OctoSense` for `CFBundleName` and `CFBundleDisplayName`, and
`dev.makepad.octosense` for `CFBundleIdentifier`.
- Both `cargo run --locked` and `cargo run --locked --release` reported
`Apple, OctoSense` through macOS accessibility inspection. The application
rendered without runtime errors and each test process exited normally.

Evidence is in `target/macos-branding/`, including build logs and the captured
menu titles. `NSRunningApplication.localizedName` reports the executable name
for these bare Cargo launches, so validation reads the actual menu bar instead.
Existing legacy state-path compatibility and historical provenance remain valid.

---

# OctoSense light appearance validation — 2026-09-11

On `feat/desktop-wallpaper`, OctoSense now supports the existing Light/Dark
Expand Down
9 changes: 6 additions & 3 deletions src/clients.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ use crate::host;
#[cfg(unix)]
use std::os::unix::process::CommandExt;

use makepad_widgets::makepad_platform::thread::{CancellationToken, Lane, SignalToUI, TaskPool, ThreadSpawner, ThreadOptions};
#[cfg(unix)]
use makepad_widgets::makepad_platform::thread::CancellationToken;
use makepad_widgets::makepad_platform::thread::{Lane, SignalToUI, TaskPool, ThreadSpawner, ThreadOptions};
#[cfg(any(unix, test))]
use makepad_widgets::Cx;

use crate::hub::ClientId;
Expand Down Expand Up @@ -609,7 +612,7 @@ pub fn kill_child_group(child: &mut Child, _grace: std::time::Duration, _pool: &
/// Final slot teardown owns the child from here on. Signal and reap it wholly
/// on a heavy pool worker; dropping a slot on the UI thread never waits for a
/// process or decoder wrapper to exit.
fn reap_child_group(mut child: Child, grace: std::time::Duration, pool: &TaskPool) {
fn reap_child_group(mut child: Child, _grace: std::time::Duration, pool: &TaskPool) {
#[cfg(unix)]
let pid = {
let pid = child.id() as i32;
Expand All @@ -622,7 +625,7 @@ fn reap_child_group(mut child: Child, grace: std::time::Duration, pool: &TaskPoo
#[cfg(unix)]
{
let wait = CancellationToken::new();
let _ = wait.wait_until(Cx::monotonic_now() + grace.as_secs_f64());
let _ = wait.wait_until(Cx::monotonic_now() + _grace.as_secs_f64());
if signal::alive(-pid) {
signal::kill_group(pid, signal::SIGKILL);
}
Expand Down