Releases · bbingz/polycli · GitHub
Skip to content

Releases: bbingz/polycli

v0.6.31

Choose a tag to compare

@bbingz bbingz released this 15 Jul 14:39

polycli v0.6.31

English · 简体中文 · 日本語

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.started record with no job.
  • setup and health reject 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_long guidance; 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 cancelled only 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 taskkill calls.
  • 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:bundles now renders expected bundles and terminal metadata from source with esbuild write:false, then compares every tracked artifact byte-for-byte without overwriting it.
  • GitHub CI and release:check run that freshness gate before npm 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 --json payloads remain compatible; JSON v2 stays opt-in.
  • Default review collection remains unbounded; only explicit --max-diff-bytes truncates input.
  • @bbingz/polycli-runtime remains private and provider modules remain flat.
  • Host plugins, OpenCode, and terminal CLI move to 0.6.31; @bbingz/polycli-utils moves to 1.0.5; @bbingz/polycli-timing remains 1.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, and Release Readiness: READY after all 14 findings were adjudicated.
  • The local full suite passed: 906 tests, 906 passed, 0 failed.
  • npm run release:check passed 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, build 0.6.31, 20 commands, resolved utils 1.0.5) and imported the OpenCode package without invoking a provider.

Release artifacts

  • GitHub release: v0.6.31 — tag commit a70eb093bc7892e2f6b653ed29ca8bba5d66489b, published 2026-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

Choose a tag to compare

@bbingz bbingz released this 15 Jul 09:02

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, and attemptId across 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 SIGKILL when needed, and settles only once.

Versioned automation and cursor observation

  • Added opt-in --json-v2 for every operational command with schema-validated result discriminators, typed errors, bounded suggestions/next steps, and private-path/secret redaction. Existing --json remains 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 --wait with opaque cursor anchors, bounded pages, explicit expiration/rotation behavior, and raw logs retained as pointers only.

Verification

  • npm run release:check passed 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: PASS and CODE QUALITY: APPROVED across Gates A-D.
  • Public-registry installation smoke loaded terminal agent-context and the OpenCode PolycliPlugin entry 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 time 2026-07-15T08:55:13.583Z, shasum 882e134363d70545c15e060a8da6c1274a2aa1e7).
  • npm @bbingz/polycli-utils@1.0.4 (latest, registry time 2026-07-15T08:51:16.560Z, shasum f89c94947199f4d9d61ec6eddca889bb83a95ec4).
  • npm @bbingz/polycli-opencode@0.6.30 (latest, registry time 2026-07-15T08:55:44.359Z, shasum 9f71767156d2278f3f9bbe0cadc3fd1c90ae289f).
  • @bbingz/polycli-timing@1.0.2 is unchanged and was not republished.

v0.6.29

Choose a tag to compare

@bbingz bbingz released this 15 Jul 02:12

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 setup uses 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:check now 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 opencode runtime 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 --auto execution mode and preserves structured session.error messages.
  • 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.3 adds atomic NDJSON batch publication and retention grouping for logical record pairs.
  • @bbingz/polycli-timing@1.0.2 validates declared optional fields and aggregates percentiles by comparable provider/kind/scope/outcome/persistence cohorts instead of pooling incompatible records.

Verification

  • npm run release:check passed 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 latest tag 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 (publishedAt 2026-07-15T02:12:20Z; tag commit 8f9603480c036b910bc9942195a897037006a6f8).
  • npm @bbingz/polycli@0.6.29 (latest, registry time 2026-07-15T02:09:46.979Z, shasum c63a5135d77417da46e0b16ef9592d4e74ca5e5b).
  • npm @bbingz/polycli-utils@1.0.3 (latest, registry time 2026-07-15T02:10:38.964Z, shasum 94791ca68cb00f1740f5af540da0f8e29541cb5c).
  • npm @bbingz/polycli-timing@1.0.2 (latest, registry time 2026-07-15T02:10:59.440Z, shasum bd305c872ecd50e0abef6b6bd4abefcc1240e15a).
  • npm @bbingz/polycli-opencode@0.6.29 (latest, registry time 2026-07-15T02:11:18.658Z, shasum cdf927ecc557602800e18b5feb5f0d3d2e88c0bb).

v0.6.28

Choose a tag to compare

@bbingz bbingz released this 26 Jun 15:21

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

Choose a tag to compare

@bbingz bbingz released this 19 Jun 09:29

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

Choose a tag to compare

@bbingz bbingz released this 19 Jun 09:03

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

Choose a tag to compare

@bbingz bbingz released this 19 Jun 08:09

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

Choose a tag to compare

@bbingz bbingz released this 16 Jun 07:26

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

Choose a tag to compare

@bbingz bbingz released this 16 Jun 06:44

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

Choose a tag to compare

@bbingz bbingz released this 16 Jun 02:52

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).