Skip to content

v1.17.0

Choose a tag to compare

@marmutapp marmutapp released this 09 Jul 15:41

Added

  • Nine new tool adapters — the 10-tool adapter wave (freebuff descoped).
    Observer now captures 26 adapters total. Each new adapter ships with a
    testdata fixture, an operator doc, an integration-registry row, a dashboard
    tool color, and a docs/cross-adapter-schema-mapping.md section (§3.11–3.19):

    • qwen-code — Qwen Code CLI (Gemini-CLI fork), Claude-Code-shaped JSONL
      under ~/.qwen; GROSS input netted against cached.
    • kiro-cli — AWS Kiro CLI; mode-dependent dual store (interactive flat
      bundles vs --no-interactive SQLite conversations_v2 keyed by the RAW
      cwd, translated through crossmount); SigV4, native-exempt.
    • crush — Charmbracelet Crush; project-local .crush/crush.db
      discovered via projects.json; Unix-SECONDS timestamps.
    • kimi-code — Moonshot Kimi CLI; wire.jsonl usage.record
      (inputOther is already NET); no seed lane (DocAssisted only).
    • grok — xAI Grok CLI; 8-file ACP session bundles, with per-request
      token splits pulled from the GLOBAL ~/.grok/logs/unified.jsonl
      correlated by sid (no timestamp heuristics).
    • devin — Devin CLI; SQLite message_nodes TREE walked along
      main_chain_id to dedupe regeneration branches so tokens never
      double-count; per-message metadata.metrics tokens.
    • aider — Aider; per-repo .aider.chat.history.md Markdown, with watch
      roots = discovered transcript FILE paths (a bounded breadth-first
      native-home walk memoized once per process); prose tokens GROSS→netted.
    • qoder — Alibaba Qoder CLI; Claude-Code-shaped JSONL under
      ~/.qoder/projects; NO local model or tokens (server-side only —
      honest-zero, native-exempt).
    • goose — Block Goose; WAL SQLite sessions.db with SESSION-level
      tokens only (accumulated_* + accumulated_cost); input GROSS→netted vs
      cache_read; SessionID is store-scoped (<id>@<sha8(store)>) so the
      YYYYMMDD_seq ids can't collide across a WSL + Windows store pair.

    Fresh installs pick all nine up automatically; an EXPLICIT enabled_adapters
    list must add the new tool names (qwen-code, kiro-cli, crush,
    kimi-code, grok, devin, aider, qoder, goose) — the startup WARN
    names any that are missing.

  • Seeded session-handoff launchers for the new adaptersobserver qwen,
    observer kiro, observer kimi, observer grok, observer qoder, and
    observer goose accept --continue-from <session-id> to distill a handover
    and seed it as the tool's first prompt (18 launchers total). qwen,
    kiro, grok, qoder, and goose seed directly; kimi is DocAssisted
    (no -p seed lane). devin, aider, and crush deliberately ship no
    launcher (no scriptable seed lane).

  • The watcher and adapter registry now accept a FILE as a watch root
    (not only a directory), which the aider adapter needs for its per-repo
    transcript-file watch set.

  • Guarded proxy-route config-lane writersinternal/proxyroute gained
    RegisterKimiCode (TOML base_url in ~/.kimi-code/config.toml),
    RegisterCrush (JSON map-merge in crush.json), and RegisterQwenCode
    (rewrites ~/.qwen/settings.json model.baseUrl, stricter guard: refuses
    any custom host). Each backs up (.bak) and writes via temp/rename, skips
    benignly when the config is missing, is idempotent when already observer,
    and refuses a foreign URL; API keys are never touched. A new additive
    registry field Capability.ProxyProbe marks "writer ready, promotion
    pending a live probe"; these writers fire ONLY through observer init
    batch under --all (honoring --skip-proxy-route), or one per-tool consent
    prompt in the interactive checklist (default NO). ⚠️ Once a tool is routed,
    stopping the daemon breaks it until reverted (the standard routed-tool
    caveat — see the daemon-restart runbook).

  • Per-adapter Backfill scan modes in the dashboard — Settings → Backfill
    now derives one scan-<tool> row per integration-registry adapter (26 rows),
    backed by the generic observer scan --force --adapter <tool> lane
    (idempotent; overrides enabled_adapters for the run). A future adapter's
    Backfill row appears automatically.

  • Pricing: GPT-5.6 and Grok 4.5 model launches. Added gpt-5.6-sol
    ($5/$30), gpt-5.6-terra ($2.50/$15), gpt-5.6-luna ($1/$6), and a
    gpt-5.6 family row. GPT-5.6 introduces the first non-Anthropic explicit
    cache-write tier
    (writes at 1.25× uncached input, reads keep the 90%
    discount); the write rate is wired into the cost table but INERT until a live
    5.6 response grounds the cache-write usage field. Added grok-4.5 ($2/$6,
    the new xAI flagship — previously under-billed via the grok family row at
    4.3 rates) and grok-build-0.1 / grok-build ($1/$2); bumped the grok
    family prefix to flagship rates. docs/pricing-reference.md updated.

Changed

  • Adapter routability promotions. aider, goose, and grok were
    live-grounded through the :8820 proxy and promoted to routable_now
    (observer drives no route today; the launchers stay non-proxied).
    kimi-code and crush were promoted further to observer-driven Proxy
    routes after live turns landed api_turns rows through their config-lane
    writers. qwen-code stays route-blocked — its (empty) modelProviders map
    overrides model.baseUrl, so the env/base-URL lanes are grounded-dead and
    the writer needs a matching provider entry first.
  • Dashboard tool-identity colors for the 10 previously-uncolored adapters
    (light + dark tokens, CVD-validated), plus the missing tools.ts entries.

Fixed

  • Actions page window selector was a no-op. The 7d/14d/30d window computed
    windowDays but never passed it to /api/actions (only the Timeline
    day-counts honored it). /api/actions gained the same optional days
    contract as /api/sessions (0 = unwindowed; legacy callers unchanged) and
    the page now threads the selected window.
  • antigravity-cli cross-OS + guard coverage. Added the antigravity-cli
    cross-OS project-root anchors and its guard watcher-conformance row.

Downloads

Pre-built binaries for each supported platform are attached below. Linux variants bundle antigravity-bridge.exe next to the observer binary for WSL2 users of the Antigravity adapter.

Platform Asset
Linux x86_64 observer-v1.17.0-linux-x64.tar.gz
Linux arm64 observer-v1.17.0-linux-arm64.tar.gz
macOS x86_64 (Intel) observer-v1.17.0-darwin-x64.tar.gz
macOS arm64 (Apple Silicon) observer-v1.17.0-darwin-arm64.tar.gz
Windows x86_64 observer-v1.17.0-win32-x64.zip

Verify with sha256sum -c SHA256SUMS (or shasum -a 256 -c SHA256SUMS on macOS) from the directory containing the downloads.

Also available via npm: npm install -g @superbased/observer@1.17.0

Org server (Docker)

The self-hosted org server ships as a Docker image and as per-platform observer-org-v1.17.0-* archives (attached below).

docker pull ghcr.io/marmutapp/observer-org:v1.17.0

The image is keyless-signed with cosign. Verify it:

cosign verify ghcr.io/marmutapp/observer-org:v1.17.0 \
  --certificate-identity-regexp 'https://github.com/marmutapp/superbased-observer-private/.*' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

Supply chain

CycloneDX SBOMs are attached: observer.cdx.json and observer-org.cdx.json.

SLSA Level 3 build provenance for the binaries is attached below as a *.intoto.jsonl attestation. The build runs on the private origin repo, so pass that as the source when verifying an extracted binary with slsa-verifier v2.7.0 or newer (older versions fail with unexpected tlog entry type: expected intoto:0.0.2, got dsse:0.0.1):

slsa-verifier verify-artifact ./observer \
  --provenance-path *.intoto.jsonl \
  --source-uri github.com/marmutapp/superbased-observer-private