Skip to content

Releases: Icatme/pi-go

v0.19.0

Choose a tag to compare

@Icatme Icatme released this 04 Nov 00:08
86cc438

v0.19.0

Explicit execution receipts

Applications can opt into bounded host-side receipts for direct Agent calls,
standalone Codemode and nonpersistent model runs. Receipts retain reported local
commits after hook failures, cancellation and result rejection, and distinguish
actual executor completion from an early return to the caller.

Use agent.RunToolCallWithReceipts, Sandbox.RunWithReceipts or
Runner.RunWithReceipts. Keep the returned handle until outstanding bodies are
reconciled. A false committed flag means unknown, not proof of no effect.

Session-backed single direct calls persist intent/final receipt records behind
legacy runtime fences. Existing readers can browse the session; unaware legacy
runners return ErrInterrupted. This does not add persistent model execution,
checkpoint recovery, automatic retry, deduplication or an atomic transaction
between external effects and session storage.

Opt-in filesystem and execution tools

agent/fstools provides bounded ls, read, find, grep, preview_edit,
create_file, atomic_replace and edit tools, plus explicit read-only and
workspace-write presets. Writes require a receipt-aware entry point. Linux and
a trusted host workspace are required; read/write operations also rely on the
documented procfs and filesystem capabilities. Other platforms fail closed.
Replacement remains last-writer-wins and can change inode metadata; it is not CAS.

agent/exectools adapts host-supplied command and Python executors with input,
combined-output and deadline bounds. It does not locate or start a process or
interpreter. The application supplies isolation and actual termination/reaping.
Context cancellation requests termination; it cannot certify that a backend has
stopped. Only confirmed host reports become committed receipt facts.

Upgrade notes

  • Legacy Engine entry points continue accepting nil contexts. Receipt-boundary
    normalization preserves their existing validation errors instead of panicking.
  • Existing public struct layouts, Tool.Invoke, events, execution JSON and
    session formats are unchanged from v0.18.0. No tools or external backends are
    enabled automatically.
  • Receipts are observations, not a retry barrier. A model or script can issue
    another call after failure, including after a committed effect. Applications
    must provide their own write and retry policy.
  • PR #153 supersedes the old filesystem stack (#139–141, #143, #145–149).
    Do not merge those histories or the incompatible #144 afterward.
  • Builds require Go 1.26.2 or newer. See the receipt contract,
    direct-session protocol,
    filesystem guide and
    executor guide.
go get github.com/Icatme/pi-go@v0.19.0
go install github.com/Icatme/pi-go/cmd/pigo@v0.19.0

Downloads and verification

CLI archives cover Windows amd64, Linux amd64/arm64 and macOS amd64/arm64. Each includes the MIT license and notices/licenses for the dependencies linked into the CLI. Verify downloads against SHA256SUMS.txt.

All five binaries were built from release commit 86cc438 with clean VCS metadata, and archive contents were checked against the built files. Windows and local WSL Linux amd64 binaries reported 0.19.0; Linux arm64 and macOS binaries were cross-compiled, not runtime-certified.

User-local validation passed: Windows Go 1.26.4 full root and examples race tests, vet and module verification; local WSL Linux Go 1.26.2 full root and examples race tests and root vet. The nil-context regression was reproduced across five public Engine entries, fixed and reviewed again. After the fix, all affected Agent/Codemode/collector packages passed Linux race tests again. Actual v0.18.0 code opened the new direct-call receipt log and refused legacy execution with ErrInterrupted; historical positional literals compiled against both versions. Live provider flags stayed disabled. No external command/Python backend was executed or certified.

Merged in dependency order: #150, #151, #152 (including compatibility fix 9906351), #153 and #154; independent docs #138/#142 and release preparation #155 are also included. No GitHub PR Approval was submitted.

Full changes since v0.18.0

v0.18.0

Choose a tag to compare

@Icatme Icatme released this 02 Nov 11:08
5dcf3c4

v0.18.0

Kiro adapters for Go applications

Register an adapter for buffered responses, incremental text, or incremental text
with tool calls. Applications supply the HTTP executor and scoped credentials.
Tool calls become available for authorization after the complete response validates.
Applications can also fetch a scoped model catalog and explicitly refresh IDC or
desktop credentials. See the provider guide.

Both stream entry points validate the original history before conversion. This
preserves pointer-valued text blocks and rejects malformed history before sending
credentials. Agent records Kiro context usage only on successful completion.

Agent and Codemode fixes

  • Chat preserves a final-only answer after an earlier tool turn emitted text deltas.
  • Turn loops distinguish current model failures from errors in replayed history.
    Reflection preserves typed terminal causes, and terminal model errors suppress
    pending tool execution.
  • Completed runs release their invocation contexts. During a run,
    TryClearMessages, TryReplaceMessages and TrySetSessionID return
    ErrAlreadyRunning. The existing void methods ignore concurrent changes.
  • Invocation resource keys containing incomparable values are rejected before
    resource creation. Codemode rejects JavaScript properties that JSON conversion
    would silently discard when passing values to tools, output or storage. Copying
    a valid JSON value no longer invokes inherited descriptor getters.

Upgrade notes

agent.AgentEvent gains a ModelResponse field. Switch positional literals to
named fields. Custom runners that emit model-generated message events should
set this field so the turn loop can recognize a message-only terminal failure.

Stream entry points resolve the API module before preparing the conversation.
A lazy module's factory can therefore run on a call whose context validation
subsequently fails.

Agent snapshots now encode a nonnil empty ToolCall.ParsedArgs as {}, preserving
an intentional empty edit across restore. Missing historical edits cannot be
recovered from old snapshots. The seven-field positional literal remains valid.
Code that directly assigns a ToolCall to an anonymous struct with the old JSON tag
must use an explicit conversion or the exported type. See the
migration guide.

Builds require Go 1.26.2 or newer.

go get github.com/Icatme/pi-go@v0.18.0
go install github.com/Icatme/pi-go/cmd/pigo@v0.18.0

Downloads and verification

CLI downloads cover Windows amd64, Linux amd64/arm64, and macOS amd64/arm64.
Each archive contains the license and dependency notices. Use SHA256SUMS.txt
to verify your download.

On Windows amd64 with Go 1.26.4, the root and examples modules passed uncached
race tests, vet and module verification. The external ToolCall fixture compiled.
Codemode passed 30 tests in Node VM and 30 in the pinned QuickJS WASM runtime.
All five binaries were cross-checked against the release commit and archive
contents. The Windows and WSL Linux amd64 CLI banners reported 0.18.0.
Linux arm64 and the macOS builds were cross-compiled. Kiro tests used synthetic
HTTP services.

Full changes since v0.17.3

v0.17.1

Choose a tag to compare

@Icatme Icatme released this 23 Oct 11:27

MIT licensing, clearer documentation, and packaged CLI downloads for the 0.17 series.

Changes since v0.17.0

  • Add the MIT license for pi-go and retain the original Pi AI copyright notice.
  • Reorganize the README around installation, a complete quick start, CLI usage,
    packages and examples. Move detailed model, provider, quota and development
    guidance into focused documents with a shared index.
  • Update the package version and examples module requirement to v0.17.1.

Included in the 0.17 series

  • Bound raw, parsed, normalized and before-hook tool arguments with
    ToolDefinition.MaxArgumentBytes, including direct, model and child calls.
  • Prepare required/nullable tool schemas with agent/strictschema, preserving
    optional omission and exact scalar values through the default validator.
  • Retain host context and current-run messages with
    session.CompactionOptions.ProtectedTailMessages.
  • Inspect classified provider failures with pigo.ProviderFailureOf.
  • Read skill frontmatter with one optional leading UTF-8 BOM, while preserving
    raw resources and body content. Use the maintained YAML organization parser.

See the v0.17.0 notes
for API contracts and upgrade details. v0.17.1 adds no runtime API changes.
Go 1.26.2 or newer is required to build from source.

go get github.com/Icatme/pi-go@v0.17.1
go install github.com/Icatme/pi-go/cmd/pigo@v0.17.1

Downloads

CLI archives cover Windows amd64, Linux amd64/arm64 and macOS amd64/arm64.
Each archive includes the MIT license and notices for its bundled dependencies.
SHA256SUMS.txt provides download integrity checks for all five archives.

Validation

On Windows with Go 1.26.4 and GOWORK=off, the root and examples modules passed
go test -mod=readonly -race ./... -count=1, go vet -mod=readonly ./... and
go mod verify. Live-provider calls were disabled. Cross-built binaries do not
by themselves demonstrate execution on Linux or macOS.

Full change list: v0.17.0...v0.17.1.

Package verification

All five CLI archives were built with Go 1.26.4 and CGO disabled. Build metadata
matches the clean release commit. Package checks verify license and notice
contents, Unix executable permissions, and the extracted Windows CLI's 0.17.1
version banner. Linux and macOS binaries were cross-compiled on Windows.

The release commit passed all six CI jobs,
including the native Codemode/MCP matrix on Linux amd64/arm64, Windows amd64,
and macOS amd64/arm64. All six uploaded files were downloaded again: archive
checksums, license contents, executable permissions and GitHub asset digests
match the locally verified packages. The downloaded Windows CLI reports 0.17.1.
The published Go module resolves directly to the release tag without a local replacement.

v0.15.0

Choose a tag to compare

@Icatme Icatme released this 14 Oct 07:36

Command Code's new model catalog and native protocols, reliable reasoning replay, and GPT-6 Luna image preparation.

Changes

  • Refresh Command Code's public catalog to 89 chat models, including Claude Haiku 5.5, GPT-6 Luna, Qwen 3.8 Omni Flash, DeepSeek V4.1, and Gemini 4 Argon. Update advertised image/reasoning capabilities, context and output limits, estimated prices and pricing tiers.
  • Discover and cache native Messages, Responses and Chat Completions support from advertised endpoints. Preserve incremental reasoning, tool calls, tool results and native protocol identity during replay. Only an explicit HTTP 403 upgrade_required selects the Go-plan generate route.
  • Preserve Claude's signed thinking blocks when visible thinking text is empty. Keep signatures isolated by model, provider and protocol. Clamp generate reasoning efforts to supported levels, including Qwen 3.8 high to xhigh.
  • Prepare Command Code GPT-6 Luna PNG inputs as JPEG before sending, addressing the upstream PNG recognition defect observed in live validation. Cover both user and tool-result images without modifying caller history.
  • Add model/request sampling parameters and thinking-level-specific overrides for OpenAI Completions and Responses. Preserve explicit zero/null overrides, reject protocol controls in sampling maps and validate the final merged sampling values.
  • Allow case-insensitive Codex originator and User-Agent overrides on SSE and WebSocket requests. WebSocket reuse now respects the effective identity headers; authorization remains credential-derived.
  • Fix Windows MCP OAuth directory-lock contention when a previous lock is pending deletion. Distinguish that state from actual permission denial while preserving cross-process exclusivity and cancellation.

Upgrade notes

  • Luna PNG conversion is lossy: JPEG quality 95, unchanged dimensions, and a white background for transparency. Local conversion limits are 32 MiB of PNG data, 64 Mi pixels and 65535 pixels per side. Malformed or oversized PNGs fail before HTTP. Other models and image formats are unchanged.
  • A reasoning response can contain an opaque signature or encrypted block without visible reasoning text. The adapter retains these blocks for supported native replay; it does not invent text deltas.
  • Command Code availability depends on the credential's plan. The catalog and estimated prices are snapshots, not an entitlement or billing guarantee. Use COMMAND_CODE_API_KEY, explicit request credentials, or the documented auth configuration.
  • Normalized Responses reasoning options retain the logical pi thinking level until wire serialization. Sampling maps apply only to OpenAI Completions and Responses; protocol fields belong in their dedicated options.
  • No storage migration or third-party dependency update. Go 1.26.2 or newer is required.
go get github.com/Icatme/pi-go@v0.15.0

Validation and downloads

The implementation passed root and example package tests, vet, builds and focused race tests. GOAT live calls verified reasoning, tool call/result replay and image input with Claude Haiku 5.5, GPT-6 Luna and Qwen 3.8 Omni Flash; DeepSeek V4.1 Flash also passed native capability checks. Luna's original PNG fixture passes after automatic JPEG preparation. Claude opaque signatures and Luna encrypted reasoning were checked in real replay payloads. These are bounded synthetic probes, not exhaustive acceptance of every catalog model.

The exact release commit passed all six CI jobs. Five CGO-disabled CLI archives cover Windows amd64, Linux amd64/arm64 and macOS amd64/arm64. Packaging verifies embedded source revisions and clean-tree flags, Unix executable modes, the Windows CLI banner and downloaded SHA-256 checksums.

Full change list: v0.14.0...v0.15.0.

Source commit: b1a930e1f1b3dff6df1844d44c43ad47fcfc3b8d. CLI artifacts built with Go 1.26.4 on Windows amd64.

v0.14.0

Choose a tag to compare

@Icatme Icatme released this 05 Oct 03:40
619c07d

Native Responses tools, dynamic function declarations, and lower overhead in MCP, Codemode, and checkpoint paths.

Changes

  • Add opt-in native text and grammar tool inputs, with explicit prefer/require policies, host parsing, and tool-sampling capability resolution. Codemode can use native inputs while retaining its JSON function fallback.
  • Preserve the position of dynamic Responses function declarations, including namespaces and replay identity. Fix declarations and system updates after failed history is filtered.
  • Recognize additional gateway context-overflow errors without broadening unrelated error classification.
  • Normalize Responses request context once and separate tool outcome preparation from validation while preserving execution, hook, and state-acceptance semantics.
  • Reduce repeated hashing and serialization of owned MCP artifacts, cached catalog schemas, Codemode aliases and embedded WASM, and live approval bindings. Retain validation at external serialization and replay boundaries, including concurrent catalog reads.

Upgrade notes

  • Native tool sampling is initially enabled only for the exact openai / gpt-6-astra / openai-responses capability entry. Other combinations follow the requested fallback policy. See native tool contracts.
  • Native-capable dynamic tool history must be supplied in full. Requests using previous_response_id with that history fail before authentication hooks or network I/O, including tool removal, redefinition, and folded-system fallback. See dynamic tool declarations.
  • The checkpoint v1 encoding, approval digests, and previously persisted partial decisions remain compatible. This release introduces no storage migration; the v0.13.0 session Storage and JSONL v2 requirements still apply.
  • Go 1.26.2 or newer is required. Third-party dependency versions are unchanged.
go get github.com/Icatme/pi-go@v0.14.0

Validation and downloads

The integrated implementation at 2105613fc327b900998db83df278ab98c5a0a5f1 passed all six CI jobs, including provider race tests, all root and example package tests, vet, and native Codemode/MCP coverage on Linux amd64/arm64, Windows amd64, and macOS amd64/arm64. The exact release commit also passed all six CI jobs.

Five CGO-disabled CLI archives are built from the clean release commit using Go 1.26.2 on Windows amd64. Packaging verifies the embedded source revision and clean-tree flags, Unix executable permissions, and the Windows amd64 CLI banner. Downloaded archives are checked against SHA256SUMS.txt before publication.

Live provider acceptance and grammar compilation are not claimed; provider regression coverage uses synthetic fixtures.

Full change list: v0.13.0...v0.14.0.

Source commit: 619c07d315e594db863c62d9ee3769734007f8fe.

Exact release commit CI: https://github.com/Icatme/pi-go/actions/runs/37258534466

v0.13.0

Choose a tag to compare

@Icatme Icatme released this 03 Oct 08:13

Pi 1.0 first-round follow-up: durable Codemode branch state, atomic session transactions and managed MCP restart, plus the correctness fixes from #21.

Changes

  • Add consistent branch snapshots and compare-and-append batches, with branch-version conflict detection, JSONL v2 atomic records and exclusive file-writer ownership.
  • Add journaled agent runs through Session.PrepareRun. Persist tool intent before dispatch, then commit final results, basic child execution facts and accepted state together.
  • Restore bounded Codemode JSON state and legitimate tool selections after restart, fork or compaction. Bind restoration to host identity and authorization epoch, and rebuild executors from the current catalog.
  • Demonstrate separate-process save/resume in examples/mcp-managed, including fresh resource reads and current permission checks.
  • Fix journal prefix preservation, cancellation and approval-failure finalization, escaped-state limits, normalized transaction IDs and durable child-call records. Approval-service failures now settle every unexecuted call and preserve the original error without dispatching allowed siblings.
  • Stop Codex OAuth login immediately when callback binding fails or cancellation occurs. Classify model-capacity failures under the existing bounded retry policy; zero-retry, quota and post-output restrictions remain intact.

Upgrade notes

This minor release intentionally changes the session storage contract:

  • Custom session.Storage implementations must implement atomic ReadBranch and CompareAppend. Repeated AppendEntry calls are not an atomic substitute.
  • JSONL v1 histories are rejected without modification. Hosts must explicitly migrate old histories before opening them as v2; this release includes no automatic migrator.
  • Interrupted or ambiguous tool execution requires host reconciliation. The runtime does not replay scripts or roll back external side effects. JS stacks and executable closures are not persisted.

No third-party dependency version changes. Requires Go 1.26.2 or newer.

go get github.com/Icatme/pi-go@v0.13.0

Validation and downloads

Root and examples all-package race tests, vet, builds, module verification and tidy checks passed locally on Windows with Go 1.26.4; affected agent packages were rechecked after the final repair. The repaired PR head passed all six CI jobs, covering native Windows amd64, Linux amd64/arm64 and macOS amd64/arm64. The exact release commit also passed the full matrix.

Five CLI archives are built from the source commit below with CGO disabled. Embedded source revisions, archive contents, Unix executable permissions, SHA-256 checksums and the Windows CLI version are verified. Check downloads against SHA256SUMS.txt.

Live provider requests, OAuth browser UI acceptance and actual power-loss testing were not performed.

Full change list: v0.12.1...v0.13.0.

Source commit: 6ab184a8e411644206a83cba0a68a8328d18b536.

pi-go v0.12.1

Choose a tag to compare

@Icatme Icatme released this 03 Oct 01:42

Patch release for v0.12.0, containing the follow-up fixes in #19 and #20 plus the stateful OAuth reconnect repair.

Fixes

  • Match the MCP SDK's case-sensitive wire-envelope decoding and preserve raw results and cached resource data across caller mutations.
  • Contain tool-result validator panics after execution, retaining completed side effects and child-tool finalization while rejecting the result.
  • Honor rotated preregistered OAuth client secrets for code exchanges and refreshes. Mixed registration strategies now derive stable credential keys without hashing the mutable client secret.
  • Fence refreshed-token publication and allow reentrant OAuth change callbacks to retire or reconnect sessions without deadlocking. Panicking callbacks retire the connection before another tool dispatch.
  • Cancel in-flight OAuth refreshes when a connection is retired, including during connection setup. Interrupted refreshes keep their durable pending claim and require explicit authentication.
  • Allow explicit reconnect after access-token expiry. Old-session teardown never starts a refresh; the new connection can refresh an unclaimed credential. Actual DELETE transport failures remain visible.

Upgrade note

Mixed-strategy confidential-client keys previously included the configured client secret. Those old entries require one explicit login under the new derived key; omit AuthKey.ClientID to derive it. They are not migrated automatically because copying refresh credentials across keys could bypass refresh claims. Subsequent secret rotations preserve the new key. Single-strategy and mixed-strategy public-client keys are unchanged.

No public Go API change or dependency-version upgrade is introduced. Requires Go 1.26.2 or newer.

go get github.com/Icatme/pi-go@v0.12.1

Validation and downloads

Root and examples all-package race tests, vet, module verification and tidy checks passed locally on Windows with Go 1.26.4. The implementation at 3517a6c passed the complete native Windows, Linux amd64/arm64 and macOS amd64/arm64 CI matrix before the version-only release preparation. Live provider tests were not run.

CLI archives for those five platforms are built with CGO disabled. Embedded source revisions, archive contents, Unix executable permissions, SHA-256 checksums and the Windows CLI version are verified. Check downloaded archives against the attached SHA256SUMS.txt.

Full change list: v0.12.0...v0.12.1.

Source commit: dcdcf9b740190f20ace5d8bbad7a9670fe2eafd1.

pi-go v0.12.0

Choose a tag to compare

@Icatme Icatme released this 02 Oct 12:27

Adds the optional MCP and Codemode runtime, dynamic tool exposure, and MCP resources. This release includes the core and provider changes since v0.11.2 and the reviewed MCP stack in #16, #17, and #18.

Changes

  • Codemode runs JavaScript in embedded QuickJS WASM through wazero, with async tool orchestration, BM25 discovery, bounded memory and output, numeric precision checks, and an atomic in-memory store scoped to each invocation. Fixed WASM compilation is cached while VM state remains isolated.
  • Managed MCP connections use the official Go SDK for HTTP and stdio. Raw wire results stay associated with SDK cache entries and identity epochs; explicit OAuth login/logout and credential compare-and-swap stores preserve authorization and retry boundaries.
  • Toolsets support dynamic exposure, lazy discovery, branch-scoped selection, and trusted restoration. Resource adapters expose lists, templates, text/image reads, and explicit artifact export with permission checks before execution and delivery.
  • The agent runtime gains replayable system messages and tool declarations, request preparation, queue inspection, programmatic tool calls, structured results, and explicit tool failure and execution-state facts.
  • Provider updates restore native TokenHarbor support, update model catalogs and thinking mappings, expose raw provider stream events, and tighten tool-call integrity handling.

Migration

The following public API changes require caller updates:

  • ToolExecutorFunc now receives (context.Context, ToolExecutionContext). Read the tool call, arguments, update callback, and permission checker from the execution context. Check permission again immediately before an external side effect. See the executor migration guide.
  • Replace ShouldStopAfterTurn with FinishTurn, returning AgentTurnDecision. The previous true maps to TurnActionEnd; the previous false maps to the zero-value decision. The callback runs before EventTurnEnd and also observes error and abort outcomes.
  • Replace SetSystemPrompt with replayable RoleSystem messages, for example AppendMessage(NewSystemMessage(...)). Use named Sections for replacement semantics; Content appends. Custom message converters must handle system messages.

Tool execution errors remain failures after hooks. Use Failure, Execution, and ToolCallOutcome.Err for execution facts; tool-error events expose ToolErr, while Err describes runtime/stream errors. See the runtime contracts.

The OpenCode Go built-in catalog removes kimi-k2.6, grok-4.5, qwen3.6-plus, and qwen3.7-max. Configurations using these IDs should select a model from the current catalog.

Codemode state is scoped to an invocation. Durable VM/script recovery is not provided; checkpoint execution does not support PrepareRequest or container ChildTools/ResolveChildTools. OAuth interaction, permissions, and artifact destinations are supplied by the host application.

Validation and downloads

Root and examples tests, race checks, vet, and module verification passed. The merged implementation passed native CI on Windows amd64, Linux amd64/arm64, and macOS amd64/arm64. Release CLI builds use Go 1.26.4 with CGO disabled; embedded source revisions, archive contents, Unix executable permissions, checksums, and the Windows CLI version were verified. Live provider tests were not run for this release.

Requires Go 1.26.2 or newer. Install the module with go get github.com/Icatme/pi-go@v0.12.0.

CLI archives are attached for all five platforms. Verify downloads against SHA256SUMS.txt.

Source commit: dcec61a5a3b0e58856d6ffc9eea283bcb8ac8a97.

pi-go v0.11.2

Choose a tag to compare

@Icatme Icatme released this 12 Sep 10:53

Fix stream cancellation and memory retention in long-running applications.

  • Canceling or closing a stream releases its dispatcher, pending snapshots, and context callbacks while preserving the provider result and a single aborted terminal notification.
  • Pending events now have count and estimated-payload limits. Delta events are evicted first; exceeding the lifecycle-event budget terminates the stream with an error.
  • PrintStream cancels its run when output fails. Includes the Complete/CompleteSimple event-draining repair from v0.11.1.
  • Includes the mainline updates since the previous GitHub Release: provider delivery evidence and SSE bounds, account quota queries, CommandCode transport/catalog updates, and agent runtime/accounting fixes.

Validated with root and examples tests, race checks, vet, module verification, and cross-platform CLI builds. Live provider tests were not run for this release.

Downloads: Windows amd64, Linux amd64/arm64, and macOS amd64/arm64 CLI archives. Verify downloads against SHA256SUMS.txt.

Go module: go get github.com/Icatme/pi-go@v0.11.2.
Source commit: bac621d2e898bf02980f30ec8d643eb0bede5737.

pi-go v0.8.1

Choose a tag to compare

@Icatme Icatme released this 03 Sep 07:47

Preserves HTTP status, response headers, provider request IDs, and Retry-After evidence for terminal OpenAI Responses failures so downstream relays can apply durable provider backoff. No provider retry policy changes.