Releases: bbingz/polycli
v0.6.28
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, andagy. - 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
buildCopilotInvocationnow emits--session-id <id>for resume-by-exact-id instead of--resume <id>. Copilot CLI 1.0.65 treats--resumeas 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 toresumeSessionId.
MiniMax finish reason
extractMiniMaxResponseFromMmxJsonnow preserves root-levelstop_reasonasfinishReason, matching Anthropic Messages-shapedmmxJSON responses withcontent[]text blocks.
Docs and durable context
- Refreshed Kimi labels from the old
kimi-code v0.6.0reference tokimi-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_reasonparsing. npm testandnpm run release:checkgreen before release.
Release artifacts
- GitHub release
v0.6.28: https://github.com/bbingz/polycli/releases/tag/v0.6.28 - npm
@bbingz/polycli@0.6.28and@bbingz/polycli-opencode@0.6.28(latest).
Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).
v0.6.27
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
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
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
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 --jsonnow exits with status 2 when it times out, matching thewaitTimedOut:truepayload instead of returning shell success.- Text
status --all --waitnow printsTimed out waiting for all jobs.before the running-jobs snapshot. status --wait --timeout-ms <value>now requires a positive integer; invalid values such asabcare rejected instead of becomingNaN.- The existing single-job
status --waitpath 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 --waittimeout 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
/reviewbecause 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.mjspassed 60/60.npm testpassed 516/516.npm run release:checkpassed, 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 (publishedAt2026-06-16T07:26:49Z) - npm
@bbingz/polycli-opencode@0.6.24(latest,time.modified2026-06-16T07:28:01.606Z, shasum5da8640b1bba6b3da6309bd87692596c9cc8fb34) - npm
@bbingz/polycli@0.6.24(latest,time.modified2026-06-16T07:28:13.403Z, shasum8a766b320a3f5ed18b6e083ab98b87c6fc753b9e)
Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).
v0.6.23
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 opencodenow hydrates prompt runtime options before probing, so injectedOPENCODE_CONFIG_CONTENTno longer replaces the parent environment.- This preserves
PATHand removes falsespawn opencode ENOENThealth failures whenopencodeis available on PATH. - The deny-all OpenCode config remains injected for constrained prompt/review flows.
All-job wait semantics
status --all --waitnow 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_CONTENTinjection and PATH preservation. - Added a
status --all --waitregression 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/reviewbecause 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:truewithhealthyProviders:["opencode"]. node --test plugins/polycli/scripts/tests/integration.test.mjspassed 58/58.npm testpassed 514/514.npm run release:checkpassed, 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 (publishedAt2026-06-16T06:44:46Z) - npm
@bbingz/polycli-opencode@0.6.23(latest,time.modified2026-06-16T06:49:58.445Z, shasum96a99bb18f69fd40dd8a3c78506311fc89b0d0d7) - npm
@bbingz/polycli@0.6.23(latest,time.modified2026-06-16T06:50:22.282Z, shasum02d016850b5998eabb2bb3faefa6c12ca7e4bfcc)
Utility packages stay on the independent v1.x cadence (@bbingz/polycli-utils@1.0.2, @bbingz/polycli-timing@1.0.1).
v0.6.22
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
askandreviewnow use headlessclaude -pby 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, andtail) is measured again for ordinaryask/reviewcalls. - 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
mainbehavior 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 ...returnedPOLYCLI_CLAUDE_PRINT_SMOKE_20260616. - Live terminal CLI smoke:
node packages/polycli-terminal/bin/polycli.mjs ask --provider claude --json ...returnedPOLYCLI_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
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
askandreviewnow start a detached tmux TUI session by default instead of using theclaude -ppath. - 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/tailtiming isunsupportedfor Claude tmux TUI mode.totalmeasures only tmux startup and prompt submission, withtimingMeta.tmuxDetached: trueandllmCompletionObserved: 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
updateStatepath instead of a naked load/save write cycle. - The stop-time review gate now uses a per-run
POLYCLI_STOP_REVIEW_*sentinel token, so echoedALLOW:/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, andgrok.
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.mdscopes the Claudestream-json+--verboserule 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
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 modelszero-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:
-pone-shot (no--yolo/--plancombo), resume-by-id via--session(kimi-code dropped-r), structuredsession.resume_hintparsing, 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;
cmdno 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.1unchanged.
Verification: npm test 483/483; npm run release:check green (validators + claude plugin validate + publish dry-runs).
v0.6.19
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
sessionIdand a verifiedsessionArtifactPath(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.listshows recorded sessions plus tracked-but-not-purgeable ones with a reason;purgeis 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--helpflags, read-only option key/value, and exactextraArgTokensnow live in one place.check-review-cli-drift.mjsderives its checks from it andreview.mjssources its read-only keys from it; a consistency test assertsextraArgTokensexactly equals the--flags the review constraint builder emits (catches a flag added OR removed). Data co-location, not aBaseProvider. - Drift gate + local auth-anchor sanity check:
check:review-driftis wired intorelease: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/XDGoverride 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.