Skip to content

v0.15.1

Choose a tag to compare

@tenequm tenequm released this 24 Aug 22:37
· 23 commits to main since this release
2cf5491

Two new harnesses, and the machinery that made them cheap to add. pond now ingests letta-code and grok-build (xAI's grok CLI) sessions, bringing the registry to twelve harnesses, eleven of them auto-discovered. Both adapters were requested by Kyle Little (#170, #171), who runs letta as the orchestrator over codex, pi, claude-code, omp and grok workers, and were the first picked by the roadmap's reaction ordering. Both were built end to end from a new add-adapter playbook and a shared conformance harness - the second one needed zero edits to either, which was the bar the playbook had to meet. Every adapter now carries a docs/adapters/<name>.md spec with an 11-row decision table and a Last verified date against a named upstream version, so "does pond still read this format?" has a written answer instead of a guess.

Upgrading: the new adapters are registered but not enabled on an existing install - pond sync never enables anything as a side effect. Run pond adapters discover (or re-run pond init) once; it finds ~/.letta/transcripts and ~/.grok/sessions and adds them to your config. A relocated LETTA_TRANSCRIPT_ROOT or GROK_HOME is configured as an explicit path.

🎉 New Features

  • adapter: add grok-build (#179) (28bc262)
    • Reads ~/.grok/sessions/<encoded-cwd>/<session-uuid>/updates.jsonl (GROK_HOME honored). Project resolves from summary.json's recorded cwd, then the bucket's .cwd sidecar, then the decoded bucket name - the three places grok writes it, in the order they are trustworthy. Tool calls become an assistant call plus a tool result under one call_id, with both failure modes and an interrupted call covered by the fixture; plans, hook events, image blocks and every x.ai/* extension ride the lossless carrier rather than being dropped.
    • Subagent lineage: grok records the parent->child link only parent-side (subagents/<child>/meta.json), so the adapter builds the map once and stores each child's meta in its own session - a child restored on its own re-emits the sidecar, which is what makes the per-session round trip exact. Forks, /rewind and compaction are all appends in 1.0.x (measured: the pre-rewind file is a byte prefix of the post-rewind file), so freshness is a bounded tail peek.
    • Fixture: 15 sessions self-captured in a sandbox on macOS and on Windows 11, model grok-4.6, swept clean. Verified against grok-build 1.0.5 and the xai-org/grok-build v1.0.6 source snapshot.
  • adapter: add letta-code (#177) (29aadc4)
    • Reads the letta CLI's client-side transcripts at ~/.letta/transcripts/<agent>/<conversation>/transcript.jsonl (LETTA_TRANSCRIPT_ROOT honored). Session identity is the path and the project is the agent id; message ids are position-derived because letta's own letta-msg-<n> ids are process-scoped and repeat inside one conversation. A tool_call row that carries result fields yields both the call and its result under the same call_id.
    • Native restore replays every captured record byte-for-byte into the source layout; foreign restore reconstructs under letta's own sanitized alphabet. Verified against letta-code 0.30.30.
  • make adapter addition routine - add-adapter skill, conformance harness, contributor flow (#173) (295c6cc)
    • /add-adapter (.agents/skills/add-adapter/SKILL.md) is a two-phase playbook: spec the format from the upstream writer code and capture a sandboxed self-capture fixture, then implement from the spec. Its centerpiece is an 11-row decision table (identity, project, ordering, tool correlation, provenance, lineage, non-capture, restore face, freshness oracle, Windows) with each row tied to the spec rule that makes it binding.
    • One conformance harness for every adapter: clean ingest counts, every searchable row inside the brand scope, re-sync is a no-op (each session skipped fresh, by id), and a round trip in the mode the adapter declares - with a first-difference diff on failure. Retrofitted onto oh-my-pi, opencode, claude-ai-export, claude-code and pi-coding-agent, which surfaced that pi honestly reports Foreign for v4/SQLite-origin sessions no released pi can read; that is now a declared downgrade rather than a silent pass.
    • A guard test keeps src/adapter/ import-isolated from the store's write path, commit discipline and query plans, which is why "fmt, clippy --all-targets, cargo test green" is the whole bar for an adapter PR. CONTRIBUTING.md, the README's Supported harnesses table with Last verified dates, and spec 6.9 (format archaeology lives in docs/adapters/) round out the contributor flow.

📚 Documentation

  • readme: name grok-build in the auto-discovered harness list (8c532da)

🧹 Chores

  • kache caching architecture (per-job k27 prefixes, bulk pull warm-up, kache 0.15.0) (#176) (dd51e9d)
    • The hosted Windows gate drops from 17.8-19.5 min to 12.4 min (9m 6s of moon time) at a 99.6% hit rate with zero per-hit S3 round trips: each job now has its own key-schema-tagged prefix, bulk-pulled in one 45 s pass before cargo starts, so the 287 MB lance unit that used to time out kache's 3 s demand ceiling and recompile on every run is restored instead. The remote lives in committed .github/kache/*.toml files selected by KACHE_CONFIG and asserted at bootstrap, which is what let both legs move to kache 0.15.0 and its under-keying fix. Windows release builds go from ~64 min cold to ~20 min warm. The plan with every measurement is docs/plans/2608-24-ci-caching-architecture.md.

Full Changelog: v0.15.0...v0.15.1