Skip to content

Releases: bbingz/polycli

v0.6.28

26 Jun 15:21

Choose a tag to compare

polycli v0.6.28

Patch on top of v0.6.27 that publishes the 2026-06-26 provider-state re-verification and the two adapter fixes it found: Copilot exact session resume and MiniMax finish-reason parsing.

The v0.6.22 Claude behavior remains unchanged: ordinary Claude ask / review calls use headless claude -p with plan/no-tools/no-MCP constraints, while explicit/internal tmux TUI runtime support remains available.

What changed

Provider-state re-verification

  • Re-checked all 11 provider CLIs against live local installs, upstream version sources where available, and adapter flag/auth/argv contracts: claude, gemini, qwen, copilot, opencode, pi, cmd, minimax, kimi, grok, and agy.
  • No version gaps or breaking CLI drift were found. Confirmed local versions include claude 2.1.193, gemini 0.49.0, qwen 0.19.2, copilot 1.0.65, opencode 1.17.11, pi 0.80.2, cmd 0.40.8, mmx 1.0.16, kimi-code 0.19.1, grok 0.2.64, and agy 1.0.12.

Copilot exact resume

  • buildCopilotInvocation now emits --session-id <id> for resume-by-exact-id instead of --resume <id>. Copilot CLI 1.0.65 treats --resume as an optional-value flag whose by-id examples use --resume=<id>; the documented exact by-id flag is --session-id <id>.
  • This is reachable from host ask / rescue --provider copilot --resume <id> paths because the companion maps that option to resumeSessionId.

MiniMax finish reason

  • extractMiniMaxResponseFromMmxJson now preserves root-level stop_reason as finishReason, matching Anthropic Messages-shaped mmx JSON responses with content[] text blocks.

Docs and durable context

  • Refreshed Kimi labels from the old kimi-code v0.6.0 reference to kimi-code 0.19.1.
  • Updated provider-paths, roadmap current state, and local project memory with the 11-provider snapshot and the deliberately deferred follow-ups.

Verification

  • Focused runtime tests: Copilot invocation argv and MiniMax stop_reason parsing.
  • npm test and npm run release:check green before release.

Release artifacts

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).

v0.6.27

19 Jun 09:29

Choose a tag to compare

Clears the remaining v0.6.26-review residuals. See PR #13 and docs/release-notes-v0.6.27.md.

  • fix: reclaim result/config/log artifacts for terminal jobs pruned past MAX_JOBS (background-job disk leak)
  • test: enforce fixture path/meta contract (provider==dir, name==stem); cover OpenCode exit-2 at the execution layer
  • docs: sync roadmap Current-state (still said latest was v0.6.24)

npm: @bbingz/polycli@0.6.27, @bbingz/polycli-opencode@0.6.27

v0.6.26

19 Jun 09:03

Choose a tag to compare

Fixes a review-found Grok nested-error bug, tightens the cc-X recipe validator, adds Qwen argv coverage, and syncs release-state docs. See PR #12 and docs/release-notes-v0.6.26.md.

  • fix (High): grok extractTerminalError now detects a nested error object ({error:{message:...}}) instead of reporting visible partial text as ok:true
  • chore: cc-X validator constrains status to verified/marketplace-unstable; runQwenPrompt --model argv regression
  • docs: README (en/zh/ja) + roadmap synced from v0.6.24 to v0.6.26

npm: @bbingz/polycli@0.6.26, @bbingz/polycli-opencode@0.6.26

v0.6.25

19 Jun 08:09

Choose a tag to compare

Re-verified workflow-review remediation, tmux test stabilization, and cc-X domestic-model endpoint recipes. See PR #11 and CHANGELOG.md for details.

  • fix: opencode exit-2 soft signal, cancelJob kill-before-cleanup, grok MaxTokens success, run-ledger 0700 dir hardening (+ RED-proven tests)
  • docs: cc-X endpoint recipes (docs/cc-x-endpoints.md + docs/cc-x-recipes.json) riding the existing claude/opencode runtimes; no provider adapter (Path B)
  • test: stabilize the last tmux fake-bin test under parallel load

npm: @bbingz/polycli@0.6.25, @bbingz/polycli-opencode@0.6.25

v0.6.24

16 Jun 07:26

Choose a tag to compare

polycli v0.6.24

Patch on top of v0.6.23 that fixes status wait timeout semantics found by a second real multi-provider release review.

The v0.6.22 Claude behavior remains unchanged: ordinary Claude ask / review calls use headless claude -p with plan/no-tools/no-MCP constraints, while explicit/internal tmux TUI runtime support remains available.

What changed

Status wait timeout behavior

  • status --all --wait --json now exits with status 2 when it times out, matching the waitTimedOut:true payload instead of returning shell success.
  • Text status --all --wait now prints Timed out waiting for all jobs. before the running-jobs snapshot.
  • status --wait --timeout-ms <value> now requires a positive integer; invalid values such as abc are rejected instead of becoming NaN.
  • The existing single-job status --wait path uses the same timeout parser and timeout exit-code handling.
  • The all-job waiter no longer performs an unused initial status snapshot read.

Regression coverage

  • Added integration coverage for status --all --wait timeout in JSON and text modes.
  • Added integration coverage for invalid status wait timeout values.
  • Hardened the explicit Claude tmux TUI worker regression assertion against missing timing.meta.

Verification

  • Second multi-provider release review after v0.6.23: claude, copilot, opencode, pi, cmd, gemini, qwen, minimax, and grok completed; kimi was blocked by quota 403; agy correctly rejected /review because it lacks an enforceable read-only plan mode.
  • Focused red/green regression command: node --test --test-name-pattern "status --all --wait|status --wait rejects invalid timeout values|_job-worker preserves explicit claude tmux TUI" plugins/polycli/scripts/tests/integration.test.mjs.
  • node --test plugins/polycli/scripts/tests/integration.test.mjs passed 60/60.
  • npm test passed 516/516.
  • npm run release:check passed, including bundle/fixture/manifest/host-map/Codex adapter/review-drift checks, Claude plugin validation, and npm pack dry-runs.

Release artifacts

  • GitHub release v0.6.24: https://github.com/bbingz/polycli/releases/tag/v0.6.24 (publishedAt 2026-06-16T07:26:49Z)
  • npm @bbingz/polycli-opencode@0.6.24 (latest, time.modified 2026-06-16T07:28:01.606Z, shasum 5da8640b1bba6b3da6309bd87692596c9cc8fb34)
  • npm @bbingz/polycli@0.6.24 (latest, time.modified 2026-06-16T07:28:13.403Z, shasum 8a766b320a3f5ed18b6e083ab98b87c6fc753b9e)

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).

v0.6.23

16 Jun 06:44

Choose a tag to compare

polycli v0.6.23

Patch on top of v0.6.22 that ships the control-plane fixes found by a real full-provider Polycli smoke review after the Claude print-default release.

The v0.6.22 Claude behavior remains unchanged: ordinary Claude ask / review calls use headless claude -p with plan/no-tools/no-MCP constraints, while explicit/internal tmux TUI runtime support remains available.

What changed

Health probe env hydration

  • health --provider opencode now hydrates prompt runtime options before probing, so injected OPENCODE_CONFIG_CONTENT no longer replaces the parent environment.
  • This preserves PATH and removes false spawn opencode ENOENT health failures when opencode is available on PATH.
  • The deny-all OpenCode config remains injected for constrained prompt/review flows.

All-job wait semantics

  • status --all --wait now waits until every active job in the workspace reaches a terminal state, then returns the normal all-job status snapshot.
  • JSON output includes waitTimedOut; text output exits with status 2 on timeout, matching the existing wait failure style.

Regression coverage

  • Added an opencode health regression that verifies both OPENCODE_CONFIG_CONTENT injection and PATH preservation.
  • Added a status --all --wait regression with two concurrent background jobs.
  • Added companion worker coverage for the explicitly retained Claude executionMode: "tmux-tui" runtime path.

Verification

  • Full-provider smoke review against v0.6.22: claude, copilot, opencode, pi, cmd, gemini, qwen, minimax, and grok completed; kimi was blocked by quota 403; agy correctly rejected /review because it lacks an enforceable read-only plan mode.
  • Focused red/green regression command: node --test --test-name-pattern "health preserves PATH|status --all --wait|_job-worker preserves explicit claude tmux TUI|review runs claude print mode" plugins/polycli/scripts/tests/integration.test.mjs.
  • Live opencode health probe after the fix returned ok:true with healthyProviders:["opencode"].
  • node --test plugins/polycli/scripts/tests/integration.test.mjs passed 58/58.
  • npm test passed 514/514.
  • npm run release:check passed, including bundle/fixture/manifest/host-map/Codex adapter/review-drift checks, Claude plugin validation, and npm pack dry-runs.

Release artifacts

  • GitHub release v0.6.23: https://github.com/bbingz/polycli/releases/tag/v0.6.23 (publishedAt 2026-06-16T06:44:46Z)
  • npm @bbingz/polycli-opencode@0.6.23 (latest, time.modified 2026-06-16T06:49:58.445Z, shasum 96a99bb18f69fd40dd8a3c78506311fc89b0d0d7)
  • npm @bbingz/polycli@0.6.23 (latest, time.modified 2026-06-16T06:50:22.282Z, shasum 02d016850b5998eabb2bb3faefa6c12ca7e4bfcc)

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).

v0.6.22

16 Jun 02:52

Choose a tag to compare

polycli v0.6.22

Patch on top of v0.6.21 that restores Claude ask / review to the synchronous headless claude -p path after Anthropic paused the Agent SDK / claude -p dedicated-credit change.

The Path B stance remains intact: provider modules stay flat, provider-specific parsing stays in runtime, and timing capability differences stay explicit.

What changed

Claude print defaults restored

  • Claude ask and review now use headless claude -p by default again, so callers get a synchronous model answer instead of a detached tmux startup payload.
  • The conservative Claude constraints remain in place: --permission-mode plan --tools "" --mcp-config '{"mcpServers":{}}' --strict-mcp-config.
  • Fine-grained Claude stream timing (ttft, gen, and tail) is measured again for ordinary ask / review calls.
  • Detached tmux TUI mode remains available in runtime for explicit/internal callers, especially workflow cases that need an interactive Claude Code runtime.

Docs and memory

  • README, provider-path, roadmap, v1 public-surface, and workflow design docs now distinguish current main behavior from the historical v0.6.21 tmux-default release.
  • The audit follow-up and project-local memory records mark the 2026-06-14/15 tmux-default policy as superseded by the 2026-06-16 Anthropic credit pause.

Verification

  • npm run release:check
  • Live Claude companion smoke: node plugins/polycli/scripts/polycli-companion.mjs ask --provider claude --json ... returned POLYCLI_CLAUDE_PRINT_SMOKE_20260616.
  • Live terminal CLI smoke: node packages/polycli-terminal/bin/polycli.mjs ask --provider claude --json ... returned POLYCLI_TERMINAL_PRINT_SMOKE_20260616.

Release artifacts

  • GitHub release v0.6.22
  • npm @bbingz/polycli-opencode@0.6.22
  • npm @bbingz/polycli@0.6.22

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).

v0.6.21

15 Jun 14:09

Choose a tag to compare

polycli v0.6.21

Patch on top of v0.6.20 that ships Claude tmux TUI defaults and the third-party review remediation set. The Path B stance remains intact: provider modules stay flat, provider-specific parsing stays in runtime, and timing capability differences stay explicit.

What changed

Claude tmux TUI defaults

  • Claude ask and review now start a detached tmux TUI session by default instead of using the claude -p path.
  • Successful Claude tmux launches return detached: true, responseKind: "tmux_tui_session_started", tmuxSession, attachCommand, and a warning that the model response is visible inside the tmux session.
  • Fine-grained ttft / gen / tail timing is unsupported for Claude tmux TUI mode. total measures only tmux startup and prompt submission, with timingMeta.tmuxDetached: true and llmCompletionObserved: false.
  • Claude tmux orchestration forwards only an allowlist of Claude/Anthropic/proxy/cert environment variables into the tmux server and cleans up the created tmux session on SIGINT/SIGTERM during startup.

Review-remediation fixes

  • Claude auth status now treats legacy non-JSON success output as authenticated/unauthenticated when explicit text is present, and marks unknown successful output as inconclusive instead of a logout.
  • The session lifecycle hook now cleans up session jobs through the locked updateState path instead of a naked load/save write cycle.
  • The stop-time review gate now uses a per-run POLYCLI_STOP_REVIEW_* sentinel token, so echoed ALLOW: / BLOCK: lines from the previous Claude response cannot be mistaken for the gate verdict.
  • Fixture freshness probes now include the current 11-provider runtime surface, including cmd, agy, and grok.

Docs and release hygiene

  • README capability notes document Claude tmux TUI timing semantics.
  • Provider path and v1 public-surface docs document agy, grok, and the Claude tmux TUI default.
  • CLAUDE.md scopes the Claude stream-json + --verbose rule to print/headless mode.

Verification

  • npm run release:check
  • GitHub Actions Node 20 verification

Release artifacts

  • GitHub release v0.6.21
  • npm @bbingz/polycli-opencode@0.6.21
  • npm @bbingz/polycli@0.6.21

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).

v0.6.20 — grok (11th provider) + kimi-code migration + deep-review hardening

02 Jun 08:59

Choose a tag to compare

Third provider-expansion + hardening release, shipped through a pre-merge Codex review gate (PRs #5/#6/#7).

Highlights

  • grok (11th provider) — xAI Grok Build CLI as a first-class structured provider: json + streaming parsing, structured sessionId (no prose fabrication), grok models zero-cost auth probe, full host wiring (registry / review-flags / sessions / host-command-map / all 4 host adapters), 7 command arg-hints, 3 skills.
  • kimi → kimi-code v0.6.0 — migrated to the new CLI contract: -p one-shot (no --yolo/--plan combo), resume-by-id via --session (kimi-code dropped -r), structured session.resume_hint parsing, prompt-only /review.
  • deep-review hardening — auth-probe transient failures (timeout/429/network) now stay inconclusive-authenticated across all 10 prior providers (no false logged-out); signal-kill no longer misreads as success; atomic-save reclaims a stale no-pid lock; stream limit-after-drain; job-control double-write/cancel races closed; cmd no longer fabricates a sessionId from prose.

Review gate

Codex reviewed PRs #6/#7 (findings adjudicated against real code — 2 false positives rejected). Codex stalled on PR#5's 1249-line diff, so it was re-reviewed by a Claude 6-dimension adversarial workflow (20 agents, 14 raw findings → 0 survived). Real fixes: grok auth-probe ordering, grok host advertisement gaps, kimi -r--session, kimi session-parse guard.

Packages

  • @bbingz/polycli@0.6.20 (terminal CLI), @bbingz/polycli-opencode@0.6.20, Claude/Codex/Copilot plugin manifests @ 0.6.20.
  • @bbingz/polycli-utils@1.0.2 (atomic-save / process / stream fixes); @bbingz/polycli-timing@1.0.1 unchanged.

Verification: npm test 483/483; npm run release:check green (validators + claude plugin validate + publish dry-runs).

v0.6.19

29 May 16:03

Choose a tag to compare

polycli v0.6.19

Patch on top of v0.6.18 that adds upstream session-pollution control and provider-drift maintenance hardening — a spec-driven increment from the 2026-05-29 strategy review, gated by two Codex review rounds. No provider behavior, host command grammar, or timing schema changed; the four-state timing contract and the flat-adapter Path-B stance are intact.

What changed

Upstream session/history pollution control (Q9a/Q9b)

When polycli invokes an upstream CLI it cannot prevent that CLI from writing its own session/history files under $HOME (~/.claude/projects, ~/.gemini, …), and those accumulate. This release makes polycli-created sessions auditable and cleanable — without ever guessing paths.

  • Run-ledger events now carry the upstream sessionId and a verified sessionArtifactPath (recorded only when the artifact exists, is not a symlink, and its realpath stays under the provider's store root). Recorded at the foreground/worker run sites and the job-control recovery path; null (never fabricated) where a path is not derivable.
  • New polycli sessions [list | purge --confirm] command. list shows recorded sessions plus tracked-but-not-purgeable ones with a reason; purge is dry-run by default and deletes only with --confirm. Deletion is driven ONLY by recorded, re-validated realpaths (lstat reject-symlink, realpath-under-store-root, exact basename) — never a sessionId-derived guess and never a glob.
  • Per-provider derivation is honest: claude (~/.claude/projects/<cwd '/'→'-'>/<id>.jsonl) and kimi (~/.kimi/sessions/<md5(cwd)>/<id>/) are purgeable; gemini (per-project dir), pi (timestamp-prefixed filenames), and ephemeral providers (minimax/cmd) are reported not-purgeable with a reason rather than silently dropped.

Provider-drift maintenance hardening (Q8a/Q8b/Q8c)

  • Fixture-staleness check (npm run check:fixture-freshness): warns when a captured fixture's pinned CLI version no longer matches the locally-installed CLI, skips absent CLIs, exits 0 by default / non-zero under --strict. Converts the silent false-confidence of a version-pinned fixture into a visible signal.
  • Single review-flag source of truth (REVIEW_FLAG_EXPECTATIONS): the per-provider drift --help flags, read-only option key/value, and exact extraArgTokens now live in one place. check-review-cli-drift.mjs derives its checks from it and review.mjs sources its read-only keys from it; a consistency test asserts extraArgTokens exactly equals the --flags the review constraint builder emits (catches a flag added OR removed). Data co-location, not a BaseProvider.
  • Drift gate + local auth-anchor sanity check: check:review-drift is wired into release:check (self-skips absent CLIs; blocks only on genuine flag drift). The drift script also confirms the auth-error regex anchor phrase is still present in source — a local guard against a polycli-side refactor dropping it. It does NOT detect upstream CLI wording changes (a real upstream auth-wording probe remains an open follow-up).

Deferred (roadmap, not shipped)

  • Q8d — migrate churn-heavy providers (qwen/gemini) off stdout/JSON scraping toward upstream JSON event streams / SDKs. Multi-release effort.
  • Q9c — opt-in per-run env session isolation. A naive HOME/XDG override that prevents writes also breaks auth and --resume; needs a per-provider design.

Verification

  • npm test (453/453, up from 399)
  • npm run release:check (bundles byte-identical, fixture metadata, host-map 12 capabilities, codex-adapter, no CLI drift, npm pack/publish dry-runs)
  • node scripts/check-fixture-freshness.mjs, node scripts/check-review-cli-drift.mjs
  • Two Codex review gates: spec (CHANGES_REQUESTED → revised) and implementation (CHANGES_REQUESTED → fixed → APPROVE)

Release artifacts

  • GitHub release v0.6.19
  • npm @bbingz/polycli-opencode@0.6.19
  • npm @bbingz/polycli@0.6.19

Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.1, @bbingz/polycli-timing@1.0.1). No schema or utility changes in this slice.