Repository navigation
Releases: bbingz/polycli
Release list
v0.6.31
polycli v0.6.31
Review-remediation patch on top of v0.6.30. This release closes every confirmed issue from the post-release comprehensive review while preserving the Path B boundary: provider adapters remain flat and explicit, the runtime package remains private, and no provider protocol framework is introduced.
What changed
Truthful CLI and observation contracts
- A no-change background review now returns the real skipped result instead of a synthetic
job.startedrecord with no job. setupandhealthreject ambiguous positional-plus-flag provider targets before provider, auth, or state access.- TUI agent-context effects now disclose local recovery-state writes; default status keeps all active jobs visible while bounding terminal history.
- Every persisted ledger preview is sanitized at the storage boundary.
Bounded provider execution and safe prompt transport
- On POSIX, timeout, abort, decoder overflow, termination failure, and missing-close paths now terminate or escalate the provider process group and settle exactly once with a canonical typed error. Windows streaming paths retain a direct-child termination fallback.
- Aggregate stdout and stderr capture are independently bounded while total byte counts remain available for diagnostics.
- Claude and Gemini move oversized prompts to verified stdin transport. Argv-only providers reject unsafe command lines before spawn with typed
argument_list_too_longguidance; review input is still unlimited unless the caller explicitly chooses--max-diff-bytes. - Claude, Copilot, OpenCode, and Qwen no longer promote arbitrary UUIDs from answer prose into provider session identity.
Recoverable background lifecycle
- Cancellation persists a non-terminal intent and publishes
cancelledonly after worker identity is verified and the worker is stopped. - SessionEnd delegates to the authoritative cancel path under one deadline that also bounds state/ledger locks, process identity probes, and Windows
taskkillcalls. - Config, log, open, and spawn failures use a private recovery sidecar so a transient pre-envelope failure cannot leave a permanent pidless queued job.
- Worker, cancellation, and terminal-ledger races preserve one complete terminal pair and clean owned runtime/config/recovery artifacts before terminal state becomes observable.
Reproducible generated artifacts
validate:bundlesnow renders expected bundles and terminal metadata from source with esbuildwrite:false, then compares every tracked artifact byte-for-byte without overwriting it.- GitHub CI and
release:checkrun that freshness gate beforenpm test, which performs the in-place build. - A regression test changes source while all five tracked bundles remain mutually identical and proves the pre-build validator rejects them.
Compatibility
- Existing public
--jsonpayloads remain compatible; JSON v2 stays opt-in. - Default review collection remains unbounded; only explicit
--max-diff-bytestruncates input. @bbingz/polycli-runtimeremains private and provider modules remain flat.- Host plugins, OpenCode, and terminal CLI move to
0.6.31;@bbingz/polycli-utilsmoves to1.0.5;@bbingz/polycli-timingremains1.0.2.
Verification
- Five scoped implementation groups each passed independent spec-compliance and code-quality review.
- The final whole-branch review returned
Spec Compliance: PASS,Code Quality: APPROVED, andRelease Readiness: READYafter all 14 findings were adjudicated. - The local full suite passed: 906 tests, 906 passed, 0 failed.
npm run release:checkpassed source-derived bundle freshness, strict fixture freshness, manifests, host maps, Codex guidance, installed-CLI review flag drift, both Claude plugin validations, and all npm package dry-runs.- Native Windows execution was not available. Windows argv budgeting and
taskkill/deadline branches were covered by deterministic simulation; only POSIX process-group and live process-tree behavior received native execution coverage. - PR #16 CI and the post-merge main CI both passed. A clean registry install exercised offline terminal
agent-context --json(schema 1, build0.6.31, 20 commands, resolved utils1.0.5) and imported the OpenCode package without invoking a provider.
Release artifacts
- GitHub release:
v0.6.31— tag commita70eb093bc7892e2f6b653ed29ca8bba5d66489b, published2026-07-15T14:39:17Z - npm:
@bbingz/polycli@0.6.31—57d0f77811767c4310623af03f27af82375abae8 - npm:
@bbingz/polycli-opencode@0.6.31—65c990f89df099bb0a1a95104a0a8400abb0f6ca - npm:
@bbingz/polycli-utils@1.0.5—99df508a6bffe601e79569927bedf4016d3d471f - unchanged npm package:
@bbingz/polycli-timing@1.0.2
v0.6.30
polycli v0.6.30
Agent-native control-plane release on top of v0.6.29. Polycli is now self-describing, stricter at the CLI boundary, explicit about run identity and lifecycle, and incrementally observable without becoming a daemon or workflow engine.
The Path B architecture remains unchanged: provider adapters stay flat and explicit, @bbingz/polycli-runtime remains private, and host or external workflow systems continue to own orchestration.
What changed
Declarative command contract and offline discovery
- Added one declarative command registry as the source for strict parsing, generated root/nested help, typo suggestions, host-map validation, generated terminal metadata, error/output catalogs, and
agent-context. - Added deterministic offline
polycli agent-context --json, exposing build and schema versions, command grammar and effects, provider capabilities, review-safety levels, JSON schemas, typed errors, and exit codes without provider/auth/state probes. - Registered commands now reject unknown flags before provider invocation and suggest bounded command-local candidates. Tokens after
--remain literal prompt/focus text.
Explicit identity and lifecycle reliability
- Split
hostSessionId,providerSessionId,invocationId, andattemptIdacross state, job envelopes, and ledger events while keeping old state and ledger records readable without migration. - Foreground, background, setup, health, cancellation, and recovery paths now publish one attempt-keyed terminal pair; projections no longer apply an older attempt's terminal evidence to a newer attempt.
- Decoder overflow terminates the provider child/process group, escalates to
SIGKILLwhen needed, and settles only once.
Versioned automation and cursor observation
- Added opt-in
--json-v2for every operational command with schema-validated result discriminators, typed errors, bounded suggestions/next steps, and private-path/secret redaction. Existing--jsonremains compatible and stays the host default. - Added explicit job selectors (
id:,prefix:,latest,latest-active,latest-terminal) and typed waits that distinguish satisfied, timed out, and terminal-mismatch outcomes. - Added redacted
debug tail --after --limit --waitwith opaque cursor anchors, bounded pages, explicit expiration/rotation behavior, and raw logs retained as pointers only.
Verification
npm run release:checkpassed before publication with 771/771 tests.- Release verification included regenerated bundle equality, fixture metadata plus strict freshness, manifest/host/Codex adapter validation, review-drift probes, Claude plugin validation, and npm publish dry-runs.
- Three independent spec/code-quality reviews returned
SPEC COMPLIANCE: PASSandCODE QUALITY: APPROVEDacross Gates A-D. - Public-registry installation smoke loaded terminal
agent-contextand the OpenCodePolycliPluginentry successfully.
Release artifacts
- GitHub release
v0.6.30: https://github.com/bbingz/polycli/releases/tag/v0.6.30 - npm
@bbingz/polycli@0.6.30(latest, registry time2026-07-15T08:55:13.583Z, shasum882e134363d70545c15e060a8da6c1274a2aa1e7). - npm
@bbingz/polycli-utils@1.0.4(latest, registry time2026-07-15T08:51:16.560Z, shasumf89c94947199f4d9d61ec6eddca889bb83a95ec4). - npm
@bbingz/polycli-opencode@0.6.30(latest, registry time2026-07-15T08:55:44.359Z, shasum9f71767156d2278f3f9bbe0cadc3fd1c90ae289f). @bbingz/polycli-timing@1.0.2is unchanged and was not republished.
v0.6.29
polycli v0.6.29
Patch on top of v0.6.28 that makes the current provider and host surface release-ready: durable background-job terminal state, current fixture lifecycle/freshness, current provider CLI contracts, and comparable timing aggregation.
The Path B architecture remains unchanged. Provider modules stay flat, @bbingz/polycli-runtime stays private, and the stable OpenCode runtime remains opencode.
What changed
Durable background jobs and observability
- Background jobs now make terminal result envelopes, timing records, and paired run-ledger events durable together. Cancellation keeps the job active until its worker stop and ledger transaction are verified, and recovery handles dead workers or preserved terminal intents without publishing partial terminal state.
- Session artifact handling records only verified paths and purge continues to operate only on recorded, validated artifacts.
- Default
setupuses install plus status-only authentication probes; model-based auth probes require explicit--probe-auth.
Fixture freshness and capture lifecycle
- Refreshed real parser fixtures using authorized local captures, including Claude Code
2.1.210; fixtures remain minimally scrubbed replay inputs rather than raw account transcripts. - The Gemini Code Assist individual Google sign-in capture route is recorded as
retired. API Key and Vertex AI remain separate, unverified routes. - The inactive local Copilot subscription capture route is
archived: its parser fixtures stay replayed, but freshness probing is paused until an explicitly authorized re-capture. This does not remove the Copilot runtime provider or host plugin. npm run release:checknow blocks active stale fixture versions with strict freshness while reporting valid archived and retired fixture rows separately.- Added an OpenCode2 preview fixture compatibility channel without replacing stable
opencoderuntime behavior.
Provider, timing, and storage contracts
- Copilot terminal events can replace an earlier session id, so exact-resume status reflects the final structured session id.
- OpenCode uses its current
--autoexecution mode and preserves structuredsession.errormessages. - Review safety drift checks cover current provider help surfaces and distinguish enforced, prompt-only, and unsupported automatic stop-review behavior.
@bbingz/polycli-utils@1.0.3adds atomic NDJSON batch publication and retention grouping for logical record pairs.@bbingz/polycli-timing@1.0.2validates declared optional fields and aggregates percentiles by comparable provider/kind/scope/outcome/persistence cohorts instead of pooling incompatible records.
Verification
npm run release:checkpassed before publication (618/618 tests).- Release verification includes the full test suite, regenerated bundle equality, fixture metadata plus strict freshness, manifest/host/Codex adapter validation, review-drift probes, Claude plugin validation, and npm publish dry-runs.
- Registry read-after-write confirmed every published version is the
latesttag and its tarball shasum matches the pre-publish dry-run.
Release artifacts
- GitHub release
v0.6.29: https://github.com/bbingz/polycli/releases/tag/v0.6.29 (publishedAt2026-07-15T02:12:20Z; tag commit8f9603480c036b910bc9942195a897037006a6f8). - npm
@bbingz/polycli@0.6.29(latest, registry time2026-07-15T02:09:46.979Z, shasumc63a5135d77417da46e0b16ef9592d4e74ca5e5b). - npm
@bbingz/polycli-utils@1.0.3(latest, registry time2026-07-15T02:10:38.964Z, shasum94791ca68cb00f1740f5af540da0f8e29541cb5c). - npm
@bbingz/polycli-timing@1.0.2(latest, registry time2026-07-15T02:10:59.440Z, shasumbd305c872ecd50e0abef6b6bd4abefcc1240e15a). - npm
@bbingz/polycli-opencode@0.6.29(latest, registry time2026-07-15T02:11:18.658Z, shasumcdf927ecc557602800e18b5feb5f0d3d2e88c0bb).
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).
