Skip to content

v0.0.2

Choose a tag to compare

@github-actions github-actions released this 23 Oct 19:45
· 747 commits to main since this release
25ea836

Plak

  • Conversations carry across builds and configuration changes: /reload and
    session import move the full neutral conversation through export
    document version 8 (imports 8 and 7). /reload strips provider replay that
    the destination cannot validate, with a one-line notice instead of failing;
    file session import always strips provider replay.
  • Background work: shell groups left running after a command are promoted to
    owned background jobs, with plak run --leave-jobs-running; repeated quiet
    process polls are held and released on host notices.
  • MCP: OAuth for HTTP servers (auth = "oauth" with oauth_issuer,
    oauth_client_id, oauth_client_secret and oauth_callback_port;
    plak mcp add --oauth; plak mcp login|logout), with the home-scoped
    mcp.client_id_metadata_url for Client ID Metadata Document registration;
    resources (resources = true, plak mcp add --resources, a read_resource
    tool); and prompts (plak mcp prompts).
  • TUI: delivered child mail renders as compact expandable groups; Menu uses a
    list and detail pane at 140+ columns; Usage offers [refresh] beside a
    Codex, SuperGrok or Claude account whose token needs a refresh, which
    refreshes it (as plak refresh does) and re-reads its usage; the label
    highlights only under the pointer or after Up/Down; Usage and Providers read
    credential state off the host loop, so a prompt sent while another process
    holds a subscription lock is accepted at once; streaming code fences
    highlight incrementally; long inline code and URLs wrap. A scrolled-up
    transcript stays anchored while output arrives, and a send-now steer shows
    its row immediately.
  • plak doctor and plak status warn when a compiled provider review expires
    within 14 days or has expired, naming the surface and UTC date.
  • Startup: store integrity scans moved to plak doctor; the binary identity
    comes from an install-time manifest. Resume and fork open faster, and the
    projector no longer copies the transcript on every commit.
  • Truncated final answers are reported instead of shown as complete:
    plak run prints the answer but exits 5 (turn_failed:output-limit), not
    0. Empty output-limit responses retry once.
  • Telemetry records retries once per attempt and keeps failed wire exchanges
    individually; refused workspace reclamation backs off and trims proven
    disposable caches.
  • jj support is opt-in at build time (--features jj); release tarballs and
    default builds are git-only. Copies use a command allowlist, a repository
    discovery ceiling and a frozen base; plak doctor reports jj readiness.
    The optional integration uses jj-lib 0.46.
  • Release binaries are stripped and built with fat LTO. The release
    tarball's THIRD-PARTY lists exactly the packages the release build links
    (no jj-lib, gix or test-support entries from the workspace-wide resolve).
  • OpenRouter: an error the provider reports inside an already accepted stream
    reads OpenRouter returned an in-band error after accepting the request: HTTP <status> (<class>) from <upstream>; stream validation failed now
    means a real protocol violation. Chat is the recommended OpenRouter protocol
    for non-Anthropic models.

Plakous

  • Codex uses the GPT-6 base prompt for GPT-6 models.
  • Code Mode exec_command/write_stdin return parsed objects.
  • Codex cache affinity and request IDs match its backend expectations;
    Anthropic API-key turns use prompt-cache breakpoints.
  • Request uploads time out on idle progress instead of total duration.
  • A failed request's attempt summary ([N requests; last: ...]) names the
    provider's refusal class (rate limited, unavailable, timeout) on every
    provider, and OpenRouter failures carry the provider's HTTP status, including
    an in-band one, on the model error and the JSONL turn_lifecycle.
  • OpenRouter derives its input capacity from the catalog.
  • NativeSubscriptions::access_token_expired reports, from local state only,
    whether a Ready subscription credential's stored access token has expired.
  • Long Responses sessions keep working past 4096 history items or 3 MiB of
    replay: per-response limits no longer apply to accumulated history.
    Provider replay is bound to the account that produced it, so changing
    accounts never sends one account's encrypted reasoning under another.
  • Hosted runtime construction goes through one sealed RuntimeFactory port.
  • Oversized user messages are refused at admission.
  • A Codex native compaction mid-turn keeps the current round's tool batch
    verbatim after the compaction item, so the model still sees the output it
    asked for; when that successor would not fit or shrink, the tail-less
    successor from the same compaction item is published instead. A native
    compaction no longer keeps earlier continuation, plan restoration,
    placeholder or replay-omission notes above its compaction item; process
    notices stay. The plan restoration and continuation notes are appended after
    the batch, so a second native compaction in a turn no longer leaves the
    earlier note above the new summary.
  • Re-reading a compaction's receipt (recovery, or /compact repeated with the
    same operation) no longer reports the session as corrupt when the successor
    carries a post-compaction note, and a compaction completed during recovery
    keeps its plan restoration note, as the live fold does.
  • Python Code Mode (py-ptc) runs Monty 1.2.0 under adapter
    plakous.monty-python-adapter.v7. A refused Path.scan (glob, rglob, walk)
    raises RuntimeError instead of returning an empty result; bisect, csv,
    hashlib, os.path and tomllib are importable.

Persisted formats

  • Export document version 8; imports versions 8 and 7. State key
    r25.e29.p33.t8: 0.0.1 state is not opened or migrated. To carry a 0.0.1
    session, use /reload from the running 0.0.1 build, or export with that
    binary and import the v7 document with 0.0.2. New exports use v8.
  • Runtime format epoch 29: native compaction provenance records how many
    retained segments follow the compaction item.

Security

  • rustls-webpki 0.103.16 and webpki-roots 1.0.10 fix RUSTSEC-2026-0382
    (distrusted intermediates accepted) and RUSTSEC-2026-0381 (distrusted
    roots).

Pins

  • No-change release-candidate review dated 2026-10-22. Review expiries (UTC):
    Codex subscription profile, 2026-11-21T23:59:59Z; OpenRouter Chat dialect,
    2026-11-21T00:00:00Z; xAI and OpenAI API profiles, 2027-01-20T00:00:00Z;
    Grok subscription profile, 2027-01-31T00:00:00Z; Claude subscription and
    Anthropic API profiles, 2027-09-22T00:00:00Z.
  • When a newer build renews a review, accept the renewed notice with
    plak models <account> (this release asks again for Codex), which keeps the
    login; plak login runs a full new login.

Known limitations

  • No OS sandbox and no tool-approval prompts: process tools run with your full
    host authority. Credentials are plaintext 0600 files; there is no OS
    keychain. See known limits.
  • The claude route presents the Claude Code client identity. Plak is not an
    official Anthropic client; use it at your own risk.
  • Routes with compiled review windows refuse after their expiry until a
    newer build renews them; see the current dates above.
  • Compaction summaries are written by the model. DeepSeek V4.1 Flash
    (deepseek/deepseek-v4.1-flash-1017) on OpenRouter leaves out earlier
    details once large tool outputs follow them, so after a compaction it may
    re-read files; see
    known limits.
  • API-key routes compact locally only: no provider compaction, token counting,
    user-configurable cache settings or hosted programmatic tool calling yet.
  • xAI sometimes refuses a follow-up turn on content-policy grounds in long Grok
    sessions; Plak reports it as a provider content-policy refusal.
  • Image input on OpenRouter's free gemma-4-31b-it:free is unproven.
  • One message is capped at 16 MiB encoded, and that encoding stores each image
    byte as a JSON number (about 3.6 bytes for compressed image data). A prompt
    therefore holds about 4.5 MiB of images in total, one maximum-size
    (3.75 MiB) image, although up to 8 images are accepted.
  • Starting a new TUI session whose [root] agent template names a model that
    is not in its account's catalog clears [root] agent from config.toml;
    choose the model again.
  • Template [env] reaches only the on_mint hook, not tool calls.
  • Dormant jj copies are retained because coverage inspection is unavailable;
    close or discard them explicitly.
  • An adopted candidate reports how many files landed, not which.
  • Responses prefix drift is not persisted and the producer is unnamed after
    reopen. Telemetry does not yet record wire bytes or per-kind event counts.
  • Not yet available: skills, tool search, a browser tool, agents as tools, MCP
    elicitation, and keyboard navigation between transcript items.
  • There is no uninstall command; remove ~/.local/lib/plak and its links in
    ~/.local/bin by hand.
  • The build audit waives three zip extraction advisories
    (RUSTSEC-2026-0367, -0368, -0369): the affected zip 8.6.0, pulled in by the
    Monty type checker, only reads its embedded typeshed archive in memory and
    never extracts files. cargo install of plakous-py-worker cannot apply the
    repository's monty-typeshed patch, so it builds the upstream crate, which
    depends on the advisory-affected zip 0.6.6 and whose type-checker archive is
    not byte-reproducible; release tarballs and source builds use the reviewed
    snapshot.