v0.0.29 — StorageClient & Cost Tracking API
Standalone StorageClient (#29)
Browse and download checkpoint files from S3 without creating an Evolve instance or sandbox.
const s = storage({ url: "s3://my-bucket/prefix/" });
const checkpoints = await s.listCheckpoints({ tag: "poker-agent" });
const files = await s.downloadFiles("latest", { glob: ["workspace/output/*.json"] });listCheckpoints(),getCheckpoint(),downloadFiles()— full checkpoint browsing APIEvolve.storage()accessor for bound client on existing instances- Supports both BYOK (user's S3 bucket) and Gateway (Evolve-managed) modes
- Security hardening: entry type allowlist, path traversal prevention, tar injection protection, streaming SHA-256 integrity
- 62 new unit tests
- Full Python SDK parity via bridge
Per-Run Cost Tracking API (#31)
Query per-run and per-session LLM spend. Requires gateway mode.
const r1 = await evolve.run({ prompt: "Analyze the data" });
const session = await evolve.getSessionCost();
console.log(session.totalCost); // 0.42 (USD)
console.log(session.runs.length); // per-run breakdown
const cost = await evolve.getRunCost({ runId: r1.runId });
console.log(cost.cost, cost.model);getSessionCost()/get_session_cost()— total cost, tokens, and per-run breakdowngetRunCost({ runId } | { index })/get_run_cost(run_id= | index=)— cost by ID or index (negative indexing supported)RunCostandSessionCosttypes with full token/cost/model breakdown- Supported for Claude and Codex agents (Gemini, Qwen, Kimi, OpenCode coming next)
- Works after
kill()viapreviousSessionTagfallback AgentResponse.runId/run_idfor correlating runs to costs- Full Python SDK parity (bridge + dataclasses + validation)
Other Changes
- Nextra docs site with CI/CD pipeline and 4-level test suite
- Publish workflow now idempotent on re-runs (skips already-published versions)
- Fixed Python bridge
InvalidStateErroron timeout/cancellation race conditions - Fixed gateway storage mode regression and BSD tar year-format parsing
- Fixed duplicate
model_providerkey in Codex TOML config
Install
npm install @evolvingmachines/sdk # TypeScript
pip install evolve-sdk==0.0.29 # Python