Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
71abb35
chore(conformance): trim 70 more stale ext_conformance artifact fixtures
May 25, 2026
f6fe4e4
feat(http): configurable provider-aware request timeout (pi_agent_rus…
Dicklesworthstone May 25, 2026
99da384
docs(http): reword REQUEST_TIMEOUT_ENV doc comment for clarity
Dicklesworthstone May 25, 2026
895269a
fix(interactive): stop cursor-blink idle churn to let the runtime park
Dicklesworthstone May 29, 2026
fc758b5
fix(copilot): ship a default Copilot client_id so login works out of …
Dicklesworthstone Jun 3, 2026
6c54a37
chore(release): v0.1.17
Dicklesworthstone Jun 3, 2026
66356e6
style: rustfmt src/http/client.rs
Dicklesworthstone Jun 3, 2026
e16f54f
chore(beads): sync issues.jsonl export
Dicklesworthstone Jun 3, 2026
6352b8c
ci(publish): fail loudly when CARGO_REGISTRY_TOKEN is missing (#99)
Dicklesworthstone Jun 4, 2026
103f989
feat(build): feature-gate the TUI front-end behind a default-on `tui`…
Dicklesworthstone Jun 4, 2026
9e8af33
chore(release): v0.1.18
Dicklesworthstone Jun 4, 2026
3d96fd5
ci(publish): emit the missing-token error on stdout + drop dead summa…
Dicklesworthstone Jun 5, 2026
bbc5ade
fix(models): honor snapshot/override entries for native-adapter legac…
Dicklesworthstone Jun 6, 2026
1c1c63e
fix(http): use bundled webpki roots + cache TLS connector (#101)
Dicklesworthstone Jun 7, 2026
59dbceb
deps: drop =0.3.2 asupersync pin, upgrade to 0.3.4 (0.3.3 was yanked)
Dicklesworthstone Jun 8, 2026
b569642
fix: emit date-only (no clock time) in system prompt to preserve KV c…
Dicklesworthstone Jun 9, 2026
b499670
feat(acp): support --session-dir (persist ACP sessions) + fix nightly…
Dicklesworthstone Jun 9, 2026
9afef74
fix(providers): treat llamacpp + mistral.rs as keyless local provider…
Dicklesworthstone Jun 11, 2026
2cab08a
docs(models): use api "openai-completions" not "openai" in examples
Dicklesworthstone Jun 11, 2026
98fc3c7
feat(acp): support session/set_model and session/set_config_option (#…
Dicklesworthstone Jun 11, 2026
4cab640
ci: pin rust-toolchain to nightly-2026-02-19 (stop clippy drift)
Dicklesworthstone Jun 11, 2026
1475b68
release: v0.1.19
Dicklesworthstone Jun 11, 2026
be7c0dd
Sync Cargo.lock to released 0.1.19
Dicklesworthstone Jun 11, 2026
53d8ab3
fix(http): retry connect on WSAENOTCONN and add a Winsock remediation…
Dicklesworthstone Jun 13, 2026
f0cbfe3
fix(http): walk the io::Error get_ref chain too when detecting WSAENO…
Dicklesworthstone Jun 13, 2026
e6d20d4
release: v0.1.20 (Windows WSAENOTCONN connect retry, #106)
Dicklesworthstone Jun 13, 2026
c24165a
fix(runtime): re-enable runtime parking — idle pi --acp no longer bur…
Dicklesworthstone Jun 14, 2026
579cd9a
docs(changelog): backfill v0.1.16–v0.1.20 release notes (#108)
Dicklesworthstone Jun 18, 2026
bdaa391
fix(stream): apply model registry maxTokens to prompt turns (#110)
Dicklesworthstone Jun 22, 2026
9fc870d
feat(interactive): add /mcp command; harden TLS retry source-chain
Dicklesworthstone Jun 24, 2026
2d7c3a9
Merge origin/main into task/new-model-support-v2
AlexMikhalev Jun 25, 2026
cf9156a
test(app): update coding-plan default model assertions for new seeds
AlexMikhalev Jun 25, 2026
3428d2a
chore(deps): switch terraphim router deps to crates.io
AlexMikhalev Jun 25, 2026
a9a084b
Merge terraphim/task/new-model-support-v2 using published terraphim c…
AlexMikhalev Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .beads/.local_version

This file was deleted.

16 changes: 0 additions & 16 deletions .beads/daemon-error

This file was deleted.

6 changes: 0 additions & 6 deletions .beads/daemon.log

This file was deleted.

2,783 changes: 1,392 additions & 1,391 deletions .beads/issues.jsonl

Large diffs are not rendered by default.

45 changes: 45 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2198,3 +2198,48 @@ jobs:
ci-test-health-dashboard.json
ci-test-health-trend.jsonl
if-no-files-found: error

# SDK / library consumers (e.g. the pi-code-gui VSCode extension) embed the
# `pi` library without the interactive terminal front-end. The `tui` feature
# is in the default set, so `cargo build` is unchanged for CLI users, but the
# library must keep compiling without crossterm + the charmed_rust stack.
# This job locks that contract in so it can never silently regress.
library_no_default_features:
name: lib (--no-default-features, no TUI)
runs-on: ubuntu-latest
env:
CI: "true"
RUST_BACKTRACE: "1"
CARGO_INCREMENTAL: "0"
CARGO_PROFILE_DEV_DEBUG: "line-tables-only"
defaults:
run:
working-directory: pi_agent_rust
shell: bash
steps:
- name: Checkout pi_agent_rust
uses: actions/checkout@v4
with:
path: pi_agent_rust
fetch-depth: 0

- name: Install Rust toolchain (nightly)
uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt, clippy

- name: Cache cargo artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: pi_agent_rust -> target
prefix-key: library-no-default-features

- name: cargo check (lib, no default features, no TUI)
run: |
set -euxo pipefail
# Library-only build: SDK consumers must compile without the
# crossterm / charmed_rust terminal stack pulled in by `tui`.
# `--lib` (not `--all-targets`) is deliberate: the `pi` binary and the
# integration tests/benches require the `tui` feature, so they are
# expected to be skipped here — only the library contract is locked in.
cargo check --no-default-features --lib
21 changes: 15 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,18 +113,27 @@ jobs:
- name: Dry run publish
run: cargo publish --dry-run --locked

# #99: this publish job only runs on a real (non-prerelease) release tag, so
# reaching it without a token means the release would otherwise *silently*
# skip cargo publish and still report success — which is how crates.io fell
# behind the repo. Fail loudly instead so a missing token is visible.
- name: Require CARGO_REGISTRY_TOKEN for release publish
if: env.HAS_CARGO_REGISTRY_TOKEN != 'true'
run: |
# GitHub parses ::error:: workflow commands from stdout (not stderr).
echo "::error::CARGO_REGISTRY_TOKEN secret is not configured — cannot publish to crates.io for this release tag."
echo "crates.io publishing would have been silently skipped (see #99). Set the CARGO_REGISTRY_TOKEN repo secret, then re-run."
exit 1

- name: Publish to crates.io
if: env.HAS_CARGO_REGISTRY_TOKEN == 'true'
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish --locked

- name: Summary
# Reaching here means the token guard passed and the publish ran, so the
# old "Skipped" branch is unreachable (a missing token now fails the job).
run: |
echo "## Crates.io Publish" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
if [[ "$HAS_CARGO_REGISTRY_TOKEN" == "true" ]]; then
echo "Published pi v${{ needs.plan.outputs.version }} to crates.io" >> "$GITHUB_STEP_SUMMARY"
else
echo "Skipped - CARGO_REGISTRY_TOKEN not configured" >> "$GITHUB_STEP_SUMMARY"
fi
echo "Published pi v${{ needs.plan.outputs.version }} to crates.io" >> "$GITHUB_STEP_SUMMARY"
161 changes: 160 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,131 @@ Repository: <https://github.com/Dicklesworthstone/pi_agent_rust>

### Features

- **`/mcp` slash command** — reports MCP (Model Context Protocol) server
status in the interactive TUI instead of returning "Unknown command". Lists
any MCP servers an installed extension has registered and clarifies that Pi
does not read standalone MCP config files (`.agents/mcp.json`,
`.pi/mcp.json`, `~/.pi/agent/mcp.json`). Fixes
[#112](https://github.com/Dicklesworthstone/pi_agent_rust/issues/112).

### Bug Fixes

- **Windows `WSAENOTCONN` retry now also fires for TLS errors surfaced through
non-`Io` variants** — `is_retryable_not_connected_tls` walks the `TlsError`
source chain in addition to matching the direct `Io` variant, so a "socket
not connected" (os error 10057) reported via the TLS library is still
detected and retried with a fresh connection. Hardens
[#111](https://github.com/Dicklesworthstone/pi_agent_rust/issues/111) /
[#106](https://github.com/Dicklesworthstone/pi_agent_rust/issues/106).

## [v0.1.20] — 2026-06-13 — Tag-only

### Bug Fixes

- **Windows connect retries now survive `WSAENOTCONN` ("Socket is not
connected")** — the HTTP client retries the TCP connect when Winsock reports
`WSAENOTCONN`, and the error-classification logic walks the full
`io::Error::get_ref` source chain so the code is detected even when it is
wrapped several layers deep. A Winsock remediation hint is surfaced when the
condition is hit. Fixes [#106](https://github.com/Dicklesworthstone/pi_agent_rust/issues/106).

### Internal

- Synced `Cargo.lock` to the released `0.1.19` dependency set.

## [v0.1.19] — 2026-06-11 — Tag-only

### Features

- **ACP dynamic configuration** — ACP mode supports `session/set_model` and
`session/set_config_option`, so clients can switch the active model and tune
config options mid-session.
Fixes [#105](https://github.com/Dicklesworthstone/pi_agent_rust/issues/105).
- **ACP sessions can persist to disk** — `--session-dir` is honored in ACP mode,
letting ACP-driven sessions be stored and resumed like interactive ones.
Fixes [#102](https://github.com/Dicklesworthstone/pi_agent_rust/issues/102).

### Bug Fixes

- **System prompt emits date only (no clock time)** — the system prompt now
carries a date-only stamp instead of a full timestamp, so the leading prompt
prefix stays byte-stable within a day and provider KV caches are preserved
instead of being invalidated on every turn.
Fixes [#103](https://github.com/Dicklesworthstone/pi_agent_rust/issues/103).
- **`llamacpp` and `mistral.rs` are treated as keyless local providers** — these
local OpenAI-compatible backends no longer demand an API key to be selectable.
Fixes [#104](https://github.com/Dicklesworthstone/pi_agent_rust/issues/104).
- **Bundled TLS roots + cached connector** — the HTTP client uses bundled webpki
roots and caches the TLS connector, avoiding slow per-request system trust-store
parsing (notably the multi-second `SecTrustSettings` stall on macOS arm64).
Fixes [#101](https://github.com/Dicklesworthstone/pi_agent_rust/issues/101).
- **Snapshot/override entries honored for native-adapter legacy providers** —
`models.json` snapshot and `models-override.json` entries are no longer
silently dropped for native-adapter providers (openai-codex, github-copilot,
google-gemini-cli, google-antigravity).
Fixes [#100](https://github.com/Dicklesworthstone/pi_agent_rust/issues/100).

### Internal

- Upgraded `asupersync` to `0.3.4`, dropping the `=0.3.2` pin (`0.3.3` was
yanked).
- Pinned `rust-toolchain` to `nightly-2026-02-19` to stop clippy lint drift, and
the publish workflow now emits the missing-token error on stdout.
- Docs: model examples use the `openai-completions` API id rather than `openai`.

## [v0.1.18] — 2026-06-05 — Release

### Features

- **TUI front-end is feature-gated behind a default-on `tui` feature** — SDK and
library consumers can now build without compiling the terminal stack by
disabling the `tui` feature, while default installs are unchanged.
Fixes [#98](https://github.com/Dicklesworthstone/pi_agent_rust/issues/98).

### Internal

- The publish workflow fails loudly when `CARGO_REGISTRY_TOKEN` is missing, so
crates.io publishes can no longer be silently skipped.
Fixes [#99](https://github.com/Dicklesworthstone/pi_agent_rust/issues/99).
- Formatting and beads export housekeeping.

## [v0.1.17] — 2026-06-04 — Release

### Features

- **Configurable provider-aware HTTP request timeout** — request timeouts are now
configurable and provider-aware, addressing spurious "Request timed out"
failures on slow providers.
Fixes [#90](https://github.com/Dicklesworthstone/pi_agent_rust/issues/90).
- **Dynamic model fetch with caching** — providers can fetch their live model
list with a 5-minute TTL cache and a static-registry fallback; the static
fallback is no longer cached so a transient fetch failure does not pin a stale
list.

### Bug Fixes

- **GitHub Copilot sign-in works out of the box** — a default Copilot
`client_id` is shipped and the Copilot device flow is wired into `/login`
with an SSH/headless fallback, so login no longer requires manual client
configuration.
Fixes [#97](https://github.com/Dicklesworthstone/pi_agent_rust/issues/97).
- **Idle CPU churn from cursor blink removed** — the interactive front-end stops
the cursor-blink repaint loop while idle so the async runtime can actually
park.
- **Kimi-for-coding fallbacks modernized** — prefer K2.6/K2.5 over the legacy
K2-thinking model as concrete fallbacks.

### Internal

- Release binary size budget raised from 20 MB to 25 MB; no-mock CI now gates
only new violations via a `.no-mock-allowlist` file; fuzz target forced to
`x86_64-unknown-linux-gnu` so ASan links against dynamic libc; trimmed 70 more
stale `ext_conformance` artifact fixtures.

## [v0.1.16] — 2026-05-22 — Release

### Features

- **Configurable tool-iteration cap** — added `--max-tool-iterations <N>` CLI
flag and `PI_MAX_TOOL_ITERATIONS` env var. Both override the historical
hardcoded default of 50. Clamped to `[1, 1000]`; invalid or zero values
Expand Down Expand Up @@ -50,6 +175,35 @@ Repository: <https://github.com/Dicklesworthstone/pi_agent_rust>
default to `MiniMax-M2.7` (was `MiniMax-M2.5`), and the Kimi for Coding plan
uses its stable virtual model id `kimi-for-coding`. The single defaults
table now also feeds ad-hoc synthesis, eliminating duplication.
- **Active model auto-switches when it loses credentials** — when the selected
model's credentials disappear mid-session, the interactive front-end switches
to a still-ready model instead of failing the next turn.
Fixes [#81](https://github.com/Dicklesworthstone/pi_agent_rust/issues/81).
- **Actionable hints for host/network-unreachable connect failures** — connect
errors (host unreachable / network unreachable, e.g. the macOS arm64
`EHOSTUNREACH` case) now surface a remediation hint instead of a bare OS error.
Fixes [#88](https://github.com/Dicklesworthstone/pi_agent_rust/issues/88).

### Internal

- **`asupersync` upgraded to `0.3.2`**, fixing a post-session persistence worker
that spun at ~500% CPU after a session completed.
Fixes [#83](https://github.com/Dicklesworthstone/pi_agent_rust/issues/83).
- **Large QuickJS Node-shim conformance push** — extensive hardening of the
embedded-runtime Node API shims, especially the global `Buffer` surface
(encoding/length coercion, integer read/write bounds and validation, base64/hex
decoding, `ArrayBuffer` sharing/offsets, byte-swap parity, single-byte
encodings) plus `fs`/`crypto` shim fixes, tighter extension-VFS path scoping and
hermetic fixtures, and fail-closed handling of non-primary entrypoint load
errors. Adds the `@mariozechner/pi-ai` completion + model-registry host bridge.
- **Swarm operations + autopilot tooling** — deterministic swarm-replay engine
and ingestor, `pi doctor` swarm checks (rch warm-target affinity planner,
conflict predictor, reservation recommendations, affinity-proof gate), an
autopilot dry-run next-action planner with budget-drift watcher and failure
action catalog, a completion-audit generator, and a swarm operations runbook.
- Regenerate `rquickjs` bindings at build time on Android/Termux; track
`scripts/skill-smoke.sh` and the `pi-agent-rust` skill so the installer
regression harness passes in clean CI checkouts.

---

Expand Down Expand Up @@ -789,7 +943,12 @@ Key early commits:

---

[Unreleased]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.9...HEAD
[Unreleased]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.20...HEAD
[v0.1.20]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.19...v0.1.20
[v0.1.19]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.18...v0.1.19
[v0.1.18]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.17...v0.1.18
[v0.1.17]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.16...v0.1.17
[v0.1.16]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.15...v0.1.16
[v0.1.9]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.8...v0.1.9
[v0.1.8]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.7...v0.1.8
[v0.1.7]: https://github.com/Dicklesworthstone/pi_agent_rust/compare/v0.1.6...v0.1.7
Expand Down
Loading
Loading