Skip to content

Releases: CJackHwang/Succinix

Succinix v0.6.0

Choose a tag to compare

@CJackHwang CJackHwang released this 13 Aug 20:21

Succinix v0.6.0 — dsh service keys: ctx.fs · ctx.sandbox · ctx.terminals · ctx.sessionPersistence

Browser-native Linux, MIT licensed. This release aligns the engine to the dsh (DeepSeek Harness) service contract: the self-namespaced ctx.succinix single-key surface is removed, and the engine now provides the dsh 0.1.0-rc.6 service keys over the same browser-native execution world (WebContainer + Lifo + Pyodide). Cordis baseline moves to @deepseek-ai/cordis@4.0.1.

dsh service alignment (breaking)

  • ctx.succinix removed — no legacy key, no deprecation shim; the engine provides ctx.fs, ctx.sandbox, ctx.terminals, ctx.sessionPersistence per the dsh 0.1.0-rc.6 contract.
  • ctx.fs — 12 primitives, 13 error codes, sandboxMode, sandboxPolicy, opaque targetKey, LF-normalized outcomes, bounded readBytes (dsh error/identity contracts).
  • ctx.sandbox.confine — fail-closed: accepts read-only and workspace-write; real node|npm|npx subprocesses throw SANDBOX_UNAVAILABLE in confined mode.
  • ctx.terminals — owner-scoped registry, fixed signal whitelist, one in-flight send per session, idempotent quiescent kill.
  • ctx.sessionPersistence — event-sourced JSONL mirror: contiguous seq, torn-tail repair, raw artifacts, opaque revisions.
  • Command-context fields renamed: ctx.succinixState / ctx.succinixPluginssuccinixState / succinixPlugins.

Contract discipline

  • Vendored dsh 0.1.0-rc.6 contract snapshots under docs/contracts/dsh-0.1.0-rc.6/ — CI no longer depends on temporary directories.
  • New gates wired into npm run check: scripts/check-dsh-shapes.mjs (export shape diff vs official d.ts), scripts/check-dsh-keys.mjs.
  • Unit + browser e2e coverage for the four dsh services, including the external examples/cordis-app contract.

Quality

  • npm run check green: typecheck / lint / 517 unit tests / build / audit / static / engine-package / docs / plugin-boundaries / dsh gates.
  • npm run test:e2e green: verify-deploy 76 passed; scenarios 14/14 (87 checks); lang-verify 32; instance-demo 28/28; instance-routing 27/27; cordis-app 45/45.

Full changelog:

https://github.com/CJackHwang/Succinix/blob/main/CHANGELOG.md

v0.4.0...v0.6.0

Succinix v0.4.0

Choose a tag to compare

@CJackHwang CJackHwang released this 11 Aug 09:44

Succinix v0.4.0 — Platform release: Terminal SDK · Multi-instance · Multi-user

Browser-native Linux, MIT licensed. This release turns Succinix into an embeddable multi-tenant Linux runtime: the terminal interaction core is now a UI-free SDK, state/snapshots/process views partition per instance, and multi-user semantics are documented as organizational isolation (not a security boundary).

Terminal SDK (E1–E4)

  • SuccinixTerminalSession — UI-free terminal interaction core (command history, Tab completion, real Ctrl+C interrupt, command queue, cwd-following prompt) over the narrow TerminalRpc / TerminalOutput contracts.
  • createTerminalBoot — parameterized boot flow (steps / retry / testMode) with BootUI progress markers.
  • The standalone app is now a thin assembly layer over the SDK — no behavior change.
  • New package export: @succinix/engine/terminal (self-contained, zero node: references).

Multi-instance (M1–M5)

  • @succinix/engine/instance exports createSuccinixInstance({ wc, instanceId, ... }) — aggregates executor + terminal session + per-instance snapshot persistence, services and port views.
  • Additive instanceId protocol field: state files under /workspace/.succinix-<id>, per-instance IndexedDB snapshot keys, per-instance ps filtering, per-instance interrupt and kill authorization (cross-instance kills rejected).
  • ?instance=<id> starts the standalone app as a named instance — dual-tab demo, e2e verified (27/27 checks).
  • Same-page multi-instance (future host use): shared RPC channel + single watchdog + per-instance service/port registries (documented boundary — Lifo interaction cwd is page-level).

Multi-user semantics (U1)

  • userId and instanceId are the same field; ?user=<id> seeds a per-user home (/workspace/users/<id>), prompt and node/python spawns start there, state/snapshots/process views are per-user.
  • Host-side kill authorization rejects cross-instance/system kills for non-default instances.
  • Documented as organizational isolation, not a security boundary (AGENTS.md / SDK.md / PROTOCOL.md).

Quality

  • Self-test ?test=1: 76 passed, 0 failed, 5 skipped (was 71).
  • Vitest: 336 tests across 26 files (was 118).
  • Bench (measured): boot → prompt ~6.1 s (dominated by WebContainer.boot, environment-dependent); Lifo/Node command p50 ≈ 79 ms — no regression vs 0.3.0; snapshot N=200 → 13 ms.
  • host.js grew 5 KB → 15 KB (per-instance routing lives in the host daemon); lifo-core.js unchanged (lazy-loaded).

Full changelog:

https://github.com/CJackHwang/Succinix/blob/main/CHANGELOG.md

v0.3.0...v0.4.0

Succinix v0.3.0

Choose a tag to compare

@CJackHwang CJackHwang released this 10 Aug 08:04

Succinix v0.3.0

Browser-native Linux — a full Linux-like OS inside WebContainers, MIT licensed.

Highlights

  • Boot screen simplified — no DOM splash overlay; boot logs ([ OK ] lines) stream straight into the terminal, motd + prompt follow directly after self-test.
  • Built-in Python on Pyodide 314.0.4 (Python 3.14.2) — resident daemon, state accumulates across commands, pip/pip3 + python -m pip via micropip. Pure-Python wheels persist across refresh; compiled wheels need a re-install (documented boundary).
  • Process ownership annotationps() responses carry scope (system/container/unknown) + containerId, enabling host projects (e.g. SunamAI) to filter processes per container and block cross-container kills.
  • TODO-optimizations: full 19-item batch (P0–P6) — bounded snapshot loss window (30 s max-age force), single-host respawn invariant, engine/host-route pure logic extraction, Ctrl+C interrupt + command queue clear, Up/Down history + Tab completion, shared theme/util/version modules, ~94.5% line coverage gate.
  • Language ecosystem verificationscripts/lang-verify.mjs (28 checks: Python/Pyodide, Node/TS, Ruby WASM probe, shared-FS read/write across runtimes), docs/LANGUAGES.md measurement-backed support matrix.

Fixes

  • cd / returns to workspace root (session-cwd sync missed non-/workspace paths)
  • Prompt follows session cwd — cd /workspace/projguest@succinix:~/proj$
  • Auto-snapshot 30 s age-force re-arms after restore; post-request /cmd.json delete no longer swallows out-of-band probes
  • Spawn failure race: fast-exiting processes reported ok:false instead of a phantom success

Ecosystem