Skip to content

Tags: Meirtz/Shinken

Tags

v0.0.1-alpha.20260531

Toggle v0.0.1-alpha.20260531's commit message
feat(#206): wire sandbox.checkpoint() to snapshot_ref — link replay t…

…o runtime state (#211)

B(2): connect checkpoints to the replay log so a checkpoint id is anchored at the
exact `.skn` event offset it was taken at — the replay↔runtime-state link.

- `Recorder.snapshot_ref(checkpoint_id, *, name, agent_state_ref)` emits a
  `snapshot_ref` event whose `snapshot_ref` field is the checkpoint id (the
  event's own `seq` is the offset); `Recorder.current_seq` exposes that offset.
- `sandbox.checkpoint(name, *, agent_state_ref)` (async + sync facade): calls
  `provider.checkpoint(handle, event_seq=<current offset>, agent_state_ref=...)`
  off-thread, then records the `snapshot_ref` event. Requires a provider-managed
  session (clear error otherwise).
- `provider.connect()` (base) now injects the provider+handle context, so any
  provider-opened Sandbox can checkpoint (Docker inherits it via super().connect).
- `.skn` schema: `snapshot_ref` field description updated — it IS emitted now
  (was "never"), as a pointer to a provider-held checkpoint (a `.skn` is still a
  replay bundle, not the substrate state). Packaged copy synced.

Tests: the snapshot_ref event shape; checkpoint records it at the offset handed to
the provider; provider-context required; end-to-end via DockerLocalProvider
(docker commit mocked). Full SDK suite 314 passing; ruff clean.

CI quota-blocked, verified locally. Part of #206.

v0.0.1-alpha

Toggle v0.0.1-alpha's commit message
feat(#59): optional PyAutoGUI synthetic GUI execution backend (#204)

Adds a PyAutoGUI action backend behind the existing executor abstraction,
selectable with SHINKEND_EXECUTOR=pyautogui (#58's mechanism).

- `PyAutoGuiExecutor` (shinkend/src/pyautogui.rs) maps the typed verb subset
  (move/click/double_click/right_click/scroll/type_text/key/wait) to a FIXED
  helper program invoked as a subprocess, with parameters passed as discrete
  argv — never interpolated into code, so no arbitrary Python runs over ACI.
- Fails clearly at startup when Python or PyAutoGUI is unavailable
  (`python3 -c "import pyautogui"` probe; interpreter via $SHINKEND_PYTHON).
- Wired into BackendChoice + the SHINKEND_EXECUTOR parser; point_norm targets
  are rejected with a clear message (normalize to point_px first).
- 3 command-construction tests cover every verb's argv + rejection of
  unsupported verbs / missing params / point_norm — no live desktop required.

The Linux image is unchanged (pyautogui is opt-in; install separately).
cargo fmt/test (46)/clippy clean.

CI is quota/billing-blocked repo-wide (0-step failures); verified locally with
the exact CI commands. Closes #59.