Commit Graph
49 Commits
Author SHA1 Message Date
surma 21e154381b Remove box (Surma's private container service client) and spikes; drop personal hosts and paths from docs and code 2026-11-12 11:11:25 +00:00
surma 3628159cd0 Merge v3 with the generic web server in the shared workspace 2026-11-12 00:36:50 +00:00
surma 6576005014 Verify streamed replay and release disconnected web clients 2026-11-12 00:33:00 +00:00
surma 6fbb74d46a test: use packaged fixtures without host Git history 2026-11-11 23:40:12 +00:00
surma 586bae953d build: unify production crates and vendor the patched shell
Assisted-by: SurmAgent:OpenAI
2026-11-11 22:04:16 +00:00
surma f5e1d7aed5 flake: wrap the host in a separate symlinkJoin, so crane's toolchain reference removal keeps cargo on the wrapper PATH 2026-11-11 21:38:03 +00:00
surma d72e40356c Seed a minimal WASI web chat and move host approvals to port 8090 2026-11-11 11:42:08 +00:00
surma e6c13f2518 Provide independent source tree references for the sandbox P1 checks 2026-11-08 04:34:45 +00:00
surma 05c21f0eaf Merge T77 and match the complete development source snapshot 2026-11-08 02:59:38 +00:00
surma d797857c94 Run the selected test commands through a custom Crane check phase 2026-11-08 02:52:37 +00:00
surma 67b99c50a9 Retain compile-time fixtures for the shared integration executable 2026-11-08 02:33:15 +00:00
surma e939978e48 Select sandbox-safe modules from the shared host test binary 2026-11-08 02:32:55 +00:00
surma b38da84b31 Retain the vendored Deno sources that runtime initialization loads 2026-11-08 01:58:49 +00:00
surma 3c8502f3af Restore the P1 sandbox check after the shell stream fix 2026-11-08 01:08:30 +00:00
surma c8ff644870 Temporarily skip the looping P1 test per T17 Note 3 2026-11-08 00:22:01 +00:00
surma 78dbe78bb1 Preserve the full upstream snapshot with symlink-aware world copies 2026-11-07 21:22:24 +00:00
surma 84266611ba Include agent definitions and skills in the development bundle 2026-11-07 20:56:17 +00:00
surma 092eb4772e Point sandbox integration tests at the packaged bundle cache 2026-11-07 19:58:33 +00:00
surma 983fd0a234 Exclude the browser fixture from the initial snapshot index 2026-11-07 16:23:42 +00:00
surma 1d06547936 Omit the dangling browser fixture from the world source snapshot 2026-11-07 16:23:08 +00:00
surma 4ac1024e1c Preserve upstream source symlinks in the packaged snapshot 2026-11-07 16:03:34 +00:00
surma 5cba2d36aa Merge v3 and package the builder closure and complete userland 2026-11-07 15:02:25 +00:00
surma c96e59417a builder: add native Cargo service and world CLI 2026-11-07 11:59:28 +00:00
surma f74b16dea9 builder: add runtime tools and preserve the host Cargo configuration 2026-11-07 10:36:25 +00:00
surma 94f8d6d30c Preserve the configured kache wrapper in the development shell 2026-11-07 10:35:26 +00:00
surma ff542f4946 Keep world copies writable and include embedded host assets 2026-11-07 06:54:40 +00:00
surma 2d38101870 Give sandbox checks a writable compilation cache 2026-11-07 02:38:33 +00:00
surma a2bc0545a4 Match the V8 archive to deno_core's simdutf feature 2026-11-07 00:01:03 +00:00
surma e7be031238 Package the complete v3 bundle and retain WITX sources 2026-11-06 22:21:03 +00:00
surma f2df0ce362 Prepare v3 Nix packaging and OpenSSL build inputs 2026-11-06 19:51:44 +00:00
SAU-134 implementer 8c46d9b9d0 host: add supervisor-gated clean core.restart RPC
Return success before scheduling the existing shutdown path, coalesce pending
requests, and mark #loop invocations with SAUSAGE_LOOP=1. Keep core.exit
compatibility and document explicit per-call approval for all agents.

Card: SAU-134
2026-10-26 09:16:10 +00:00
surma b536beb069 YAML configuration, init without a wizard, and openai-chat-completions
ci / check (push) Successful in 15m52s
- /config/agent.yaml and /config/boot.yaml replace the JSON files, read
  with serde_yaml_ng (also in the agent, inside WASM).
- sausage init asks nothing and reads no SAUSAGE_* variables. It writes
  commented templates with an example for each API, and prints the path
  to edit. Until the agent is configured, agent.chat names the missing
  field. allow_no_token: true permits a local model without a key.
- The agent speaks openai-chat-completions, the format of OpenRouter,
  Ollama, and most providers. base_url follows each SDK: with /v1 for
  the OpenAI shapes, without it for Anthropic.
- Checked against the proxy with glm-5.3-flash: the agent wrote, built,
  and activated a counter plugin in 55 s.
2026-10-23 11:27:48 +01:00
surma ab1adbd5e3 flake: link host code with mold on Linux; DECISIONS: mold, and no LTO
mold applies to the host target only, in the dev shell, the crane builds,
and the packaged binary (proc macros and build scripts of plugins). A
rebuild of the host test binary after a change takes 0.9 s (15 s with
GNU ld). Measured LTO: no gain worth 4 more minutes per release build.
2026-10-23 10:20:39 +01:00
surma c926f3bc72 tests: remove the singleton stress test; #[ignore] means disabled again
128 fast activate/revert cycles are not a realistic load. restarts_service
covers the restart of a service after an upgrade. nix flake check runs
the normal tests only.
2026-10-23 08:31:48 +01:00
surma 93f092e02b cargo.build: a persistent build cache shared by all worlds
- The cargo target folder is <cache>/cargo-target, next to Wasmtime's
  cache, which moves to <cache>/wasmtime: Wasmtime's cleanup worker
  deletes unknown entries in its folder, also Cargo's artifacts.
- Builds use the SDK at <cache>/sdk/<content hash>/, so cargo reuses
  the compiled SDK in every world. /plugins/cargo/sdk/ stays for agents.
- Tests run in the release profile and share compiled crates with the
  release build.
- The cargo and cli tests use a persistent cache in CARGO_TARGET_TMPDIR:
  warm, the cargo suite takes 11 s (was 235 s) and the cli suite 6 s
  (was 149 s).
- nix flake check runs ignored stress tests. AGENTS.md: rules for fast
  tests.
2026-10-23 08:05:15 +01:00
surma d7b78ed0fd core: review fixes, init builds the agent, console without a terminal
Activation path (review T6R): a broken plugin or a stray file in
/plugins blocks no activation; candidates replace their own entries;
discovery has a 10 s deadline and its process is stopped after the
answer; an unchanged hash keeps plugin.prev.wasm; activations run in
their own task; the watcher is not recursive; no duplicate services;
rpc.retired waits for live processes of its version; reads and hashes
on blocking threads.

Guest I/O and per-call paths: a stdin write error is EOF, stdout and
stderr are drained before the status; stderr is lossy UTF-8 and goes
to the journal from its own reader; compiled components are freed;
shutdown starts no new processes; lock queues drop stopping processes;
compile before the admission gate; CommandPre per component;
core.unlock in order; null errors are successes; the journal thread
survives SQLite errors.

sausage init builds the agent with cargo.build; sausage without a
command creates ./world. The console reads plain lines without a
terminal. PROTOCOL.md and DECISIONS.md describe the decided rules. The
flake tests the whole workspace and checks the packaged cargo.build.
2026-10-23 02:25:03 +01:00
surma a536d873e6 cargo: compile C for wasm32-wasip2 with a WASI clang
ci / check (push) Successful in 18s
The Nix package, the dev shell, and the test check set CC_wasm32_wasip2
and AR_wasm32_wasip2 to the clang of pkgsCross.wasi32 (wasi-libc), so
build scripts with the cc crate work, for example rusqlite with bundled
SQLite. The runtime-toolchain check links C into a probe with the
packaged host and an empty PATH.
2026-10-22 20:16:38 +01:00
Sausage Agent 6923ca3e60 preserve the packaged runtime Rust toolchain
ci / check (push) Successful in 6s
2026-10-17 16:36:08 +00:00
Sausage Agent c504532513 drive packaged host runtime check over pipes
ci / check (push) Failing after 1m16s
2026-10-17 16:33:31 +00:00
Sausage Agent eb35a79698 trace the packaged host runtime check
ci / check (push) Failing after 1m47s
2026-10-17 16:29:02 +00:00
Sausage Agent bfcd71e2f4 test packaged host cargo runtime with an empty PATH
ci / check (push) Failing after 1m33s
2026-10-17 16:25:14 +00:00
Sausage Agent f008d0cc60 nix: lock crane; don't store the test run's target folder
ci / check (push) Successful in 39s
2026-10-17 08:02:08 +00:00
Sausage Agent 81daddfd70 nix: build with crane, dependencies cached separately
ci / check (push) Successful in 10m50s
buildDepsOnly builds the dependencies of the host and the tests once
(keyed only on Cargo.toml/Cargo.lock); packages.default and checks.tests
reuse them, so a change to our crates no longer recompiles every crate.
checks.package builds the binary the host loop runs.
2026-10-17 07:49:54 +00:00
Sausage agent d6d3c9a2f2 Bare sausage creates ./world if needed and runs it (default app)
ci / check (push) Successful in 5s
- cli: the subcommand is optional; without one, sausage runs ./world and
  runs init first when ./world is not a world yet (test: cli/tests/cli.rs).
  So `nix run git+https://gitea.surma.technology/surma/sausage` works.
- flake: .#loop without a folder runs bare sausage.
- README: mention the bare command and the bare loop.
2026-10-16 21:09:06 +00:00
Sausage Agent d0876626df Public repo: .#loop fetches over public HTTPS, README for outsiders
ci / check (push) Successful in 8s
- flake.nix: .#loop runs git+https://gitea.surma.technology/surma/sausage
  (SAUSAGE_FLAKE overrides it); drop loop-internal / --internal (LAN SSH).
- README: clone step, LLM token requirement, loop URL and SAUSAGE_FLAKE.
- ci.yml: comment without internal host name.
2026-10-16 20:40:26 +00:00
Sausage Agent e1409b93f2 CI: nix flake check runs all tests; Gitea workflow
ci / check (push) Successful in 8s
- flake: checks.tests = the sausage package with doCheck (tests of sausage,
  sausage-actor, agent; fixtures build offline from vendored crates).
- .gitea/workflows/ci.yml: `nix flake check -L` on runner label `nixos`.

Not compiled: written by the Sausage agent.
2026-10-16 00:44:55 +00:00
Sausage Agent 3435b556fb Broker exit request and nix run .#loop for self-updating hosts
- broker: `{"type":"exit"}` answers `exiting`; `sausage run` then stops all
  actors and exits with code 75.
- flake: apps `loop` / `loop-internal` run `nix run --refresh git+ssh://.../surma/sausage -- run <world>`
  in a loop; exit code 0 (/quit) ends the loop, anything else restarts.
- PROTOCOL.md, README.md, test in cli/tests/host.rs.

Not compiled: written by the Sausage agent, which cannot build the native host.
2026-10-16 00:37:25 +00:00
surma 567646ba87 Flake 2026-10-15 23:39:52 +01:00
surma 1f49d0f7bb Sausage: host, broker, commit-on-close filesystem, cargo actor, console, agent
Imported from the spike branch, with:
- a library crate (Host API) for the CLI and the tests
- JSON test scenarios for candidates
- commit on close only for new or truncated files
- a Nix flake: nix run -- init, nix run -- run
2026-10-15 10:45:23 +01:00