small gleam coding and persistent agent daemon with a detachable cli and a canvas ui albedo.sh

make extensions more composable and deprivilege python #205

Open okami.mom
targeting main from components-rebased
Open opened by and assigned to okami.mom
targeting main from components-rebased

Redoes the extension plugin system as composable components. An extension is now a small record of install-time parts (tables, migrations, cleanup, settings) plus an optional session component and an optional daemon component, each of which registers what it offers under typed keys and acquires its resources together with their undo steps, so every capability is composed in one pass, has its collisions decided in one place and is torn down the same way, instead of special-casing each plugin kind and its consumers.

Python no longer has a privileged place on the Gleam side of the daemon. The runtime prepares compositions only, keeps no per-session state and imports no python module; opening a session boots nothing, the session actor owns its composition and kernel phase as one explicit value with the requests that wait on it parked inside it, and it reaches its kernel through one generic daemon key, daemon/session_resources, whose operations name no python type and which the python extension implements as plain effects, admitted from the same shared budget as composition work, so another extension could keep per-session resources the same way.

Background jobs now belong to a helper process that runs next to the kernel, on the kernel's own host, rather than to the interpreter, so a kernel crash, wedge replacement, upgrade, swap or idle release neither ends nor has to carry over running jobs, and a job handle is an id that survives a namespace restore. Deleting or closing a session, moving its workspace and /kernel restart still end its jobs, which makes a restart the way to give a model a clean slate.

Commits 0