CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Changelog
All notable changes to pawbot are recorded here. Release notes describe the
supported surface and known boundaries of each published version.
## Unreleased
## 0.8.3
### Fixed
- Native TUI downloads now report TLS, network, HTTP and checksum errors
accurately instead of incorrectly claiming that a release archive is missing.
Temporary download failures are retried once; TLS certificate verification
and archive integrity checks remain enabled.
## 0.8.2
### Added
- Added an opt-in Promptfoo suite for six controlled local workspace tasks,
with real file tools, independent outcome checks, repeat trials, and
sanitized experiment evidence. These small samples are not production
success-rate measurements.
### Fixed
- Subagents that stop before completion, including at execution limits, no
longer report successful completion to the parent. Preserve the stop reason
and any partial result for both synchronous and background delegation.
## 0.8.1
### Fixed
- Subagents now inherit the initiating turn's denied tool capabilities,
approval callbacks and capability scope, and recovery confirmation callback.
Both blocking and background delegation preserve session/chat routing;
approving delegation does not approve each child operation. Standalone
subagent managers also enforce their configured denied capabilities.
- Added deterministic before/after regression evidence and checks for queued
session isolation, approval timeout/cancellation, workspace boundaries,
full-access recovery confirmation, and SDK compatibility.
- Stopping a session invalidates its unconsumed subagent results, including
notifications already on the message bus or waiting for a session lock.
Old results cannot start or contaminate a later turn; valid results are
consumed once without affecting other sessions.
- MCP legacy HTTP sessions now reconnect on the SDK v2 protocol error
`-32600 / Session not found`. The real idle-timeout/shutdown regression
fixture now uses the current SDK and fails visibly if its server cannot start.
- CI exercises both actual WebUI and TUI clients against a gateway process
with a local scripted provider for delegation approval, denial, stop, and
interrupted-turn recovery.
- The stdin-close regression explicitly waits for process exit before checking
its exit code, and always cleans up its exec session. Receiving output alone
is not a completion guarantee for normal polling.
## 0.8.0
### Added
- Added a pinned Promptfoo integration with 10 sanitized diagnostic cases,
isolated Python trials, fixed local tool fixtures, shared deterministic
assertions, optional advisory LLM Judge, and JSON/HTML/browser reports.
- Added an API-key-free Promptfoo CI smoke check and report summaries that
separate execution errors, quality failures, Agent/Judge tokens, and
comparable baseline/candidate measurements.
- Added installed-wheel Gateway checks for bundled WebUI assets, authenticated
model configuration changes, timezone/network settings, chat, and recovery.
### Changed
- Replaced the self-built live evaluation workbench, management API, catalog,
CLI, and dedicated export path with the repository's Promptfoo suite.
Runtime TaskContract verification, Harness/Task Eval, Trace, and Record & Replay remain.
- Native TUI and PyPI publication now run manually for an exact version tag.
PyPI publication requires all five matching native archives and checksum
sidecars; TUI publication runs manually for the exact release tag.
### Fixed
- The Channels → WebSocket local WebUI link now follows the current browser
origin, including custom ports, instead of opening a hard-coded localhost port.
- Included hashed WebUI chunks in normal Git commits and validated local
asset references during bundle inspection and wheel/sdist builds.
- Rejected extra outcome facts and corrected advisory Judge score and token
reporting, without treating unavailable Judge results as zero quality.
- Stabilized Markdown setup and runtime checkpoint waits in full test runs.
### Local verification
- Python: 7,011 passed, 54 skipped, 83.03% coverage; WebUI: 1,134 passed;
TUI: 164 passed. Lint, strict type checks, builds, and quality gates passed.
- Three Gateway checks passed against a wheel installed in a clean environment.
- The current fixed diagnostic suite passed 30/30 real-model trials with no
execution errors. This is not a production success rate or an improvement
claim; the optional Judge has not been calibrated with independent human labels.
- The v0.8.0 release-preparation commit passed all 11 remote CI jobs on `main`
before its version tag was created. Setup, report navigation, and case
maintenance are documented in the
[Promptfoo guide](docs/agent-evaluation-promptfoo.zh-CN.md).
## 0.7.3 - 2026-09-28
### Fixed
- Fixed the WebUI mutation route for removing custom task evaluation cases;
the evaluation-set delete action now reaches the backend instead of returning
`unknown WebUI mutation action`.
- Improved WebUI stop responsiveness for long-running tasks by terminating
child execution before joining the active turn and ignoring late stream
events from a turn that the user already stopped.
### Verification
- Local Python: 6,999 passed, 54 skipped, 82.89% coverage.
- Local WebUI: 1,134 passed; Ruff, basedpyright, frontend lint, and build passed.
- GitHub Actions passed all CI, smoke, replay, TUI, package, and quality-gate jobs.
## 0.7.2 - 2026-09-28
### Added
- Added safe recovery for model output truncation during tool-call arguments;
incomplete calls are discarded and repeated no-progress failures stop with
structured error codes instead of looping.
- Added DeepSeek Flash and DeepSeek V4 Pro capability metadata, compatibility
aliases for legacy DeepSeek model IDs, and a DeepSeek-specific 65,536-token
output default.
- Added WebUI management for saved regression samples in the Agent task
evaluation set, including add and remove actions.
### Changed
- Candidate problem runs now use WebUI conversation titles or readable user
request previews instead of internal candidate IDs.
- Documented DeepSeek as the most thoroughly validated provider path and added
guidance for provider-specific issue and pull-request contributions.
### Verification
- Local Python: 6,996 passed, 54 skipped, 82.90% coverage.
- Local WebUI: 1,134 passed.
- GitHub Actions passed Python 3.11/Linux, Python 3.13/Windows, WebUI, native
TUI, Record & Replay, package smoke, installer smoke, and quality gates.
## 0.7.1 - 2026-09-27
### Fixed
- Improved Agent reply and WebUI response speed by moving event-journal and
turn-context disk work out of the Gateway event loop.
- Kept long-running Agent tasks from blocking WebUI settings and controls.
- Reduced CLI Apps catalog loading on Windows from repeated PATH probing to one
directory scan with final checks for installed applications.
- Preserved WebSocket event ordering and reconnect recovery while bounding the
retained event journal.
### Verification
- GitHub Actions passed on the `v0.7.1` release candidate: Python 3.11/Linux,
Python 3.13/Windows, WebUI, native TUI, package smoke, Record & Replay,
Linux/macOS/Windows installer smoke tests, and the quality gate.
- A local 100-second WebUI run completed five real Agent turns, including an
`exec` tool turn, without a settings timeout.
## 0.7.0 - 2026-09-23
### Added
- Added a versioned 20-case live model evaluation suite for synthetic incident
triage, with isolated local fixtures, repeated trials, outcome/trajectory/safety
reports, cost estimates, latency, and baseline comparison.
- Added an opt-in OpenTelemetry OTLP exporter for Agent spans and low-cardinality
metrics. Local Trace and replay remain available without an exporter.
- Added token-estimate provenance to local Trace, control-flow documentation,
and a reviewed-candidate export path for sanitized live evaluation cases.
### Changed
- Migrated the MCP client to SDK v2, with modern discovery and a legacy
method-not-found fallback, HTTPX2 transport protection, and OAuth issuer checks.
- Added operation context for tool adapters that explicitly support idempotency.
- Calibrated the synthetic evaluation oracle to accept reviewed safe paraphrases
and avoid treating a qualified retry-safety assumption as affirmative advice.
### Known boundaries
- Live evaluation and OTLP setup use the CLI/configuration; this release does not
add a new WebUI page for them.
- The bundled cases are synthetic and were calibrated against the same saved
responses used for comparison. They do not establish production task quality.
- Checkpoint recovery does not undo remote side effects; unknown write outcomes
still require reconciliation or explicit approval before retry.
### Verification
- GitHub Actions on main commit `ebb01fe`: Python 3.11/Linux, 7,010 passed and
15 skipped at 82.83% coverage; Python 3.13/Windows, 6,979 passed and 46
skipped at 82.82% coverage.
- WebUI, production build, native TUI, package smoke, Record & Replay, Linux/
macOS/Windows installer smoke tests, and the quality gate all passed.
- Built wheel and sdist installed in clean Python 3.11 environments. WebUI chat,
Trace, offline replay (1/1 consistent), and a Microsoft Learn MCP connection
passed local smoke checks.
- TUI CI and release packaging workflows are pinned to Bun 1.3.13 to match the
bundled license, relinking, and source-offer documents. The five-platform TUI
release archive workflow remains to be run for the release tag before publish.
## 0.6.5 - 2026-09-21
### Changed
- Removed the optional Langfuse exporter, configuration, CLI, WebUI settings,
provider wrapper, and dependency.
- Local Trace is now the only observability source; Record & Replay, rolling
evidence, Task Eval, Harness, personalization, and memory remain available.
- Removed the external exporter from the Agent turn path so Trace callbacks
cannot perform external network work.
## 0.6.4 - 2026-09-21
### Fixed
- Prevented Token estimation, recording detail, status, rolling candidates, and
evaluation-set reads from blocking the Gateway event loop during long Agent
tasks.
- Added missing WebUI routes for rolling replay candidates and task evaluation
actions.
- Made the execution and regression page load each panel independently, so one
slow diagnostic request no longer leaves the entire page empty.
### Verification
- Python: 6930 passed, 54 skipped.
- WebUI: 1126 passed; production build passed.
- Ruff and basedpyright passed.
## 0.6.3 - 2026-09-21
### Fixed
- Fixed the WebUI model settings query that loaded reasoning-effort options
with the gateway's path-scoped settings service.
- Added a regression test for this settings route so the pure lookup remains
compatible with the shared path-aware read wrapper.
## 0.6.2 - 2026-09-21
### Fixed
- Prevented long Replay/Eval operations from blocking Trace, execution, and
personalization controls on the same WebUI connection.
- Moved synchronous Trace and recording-file scans off the Gateway event loop.
- Added action-scoped WebUI request locks for fast queries and short local
memory/personalization mutations.
- Added regression coverage for Trace and personalization requests during a
long-running WebUI mutation.
### Verification
- Python: 6928 passed, 54 skipped; coverage 82.73%.
- WebUI: 1126 passed; lint and production build passed.
- Ruff and basedpyright passed.
## 0.6.1 - 2026-09-21
### Fixed
- Fixed Langfuse Session aggregation by propagating the Pawbot session key as
the SDK's first-class `sessionId` on root and child observations.
- Replaced the unsupported Langfuse v3-style trace update call with the
Langfuse 4.x observation attribute propagation API.
- Added regression coverage for WebSocket and non-ASCII/overlong session keys.
### Verification
- Confirmed live Langfuse v2 Observations contain the same `sessionId` on Agent,
LLM, Tool, and completion observations.
## 0.6.0 - 2026-09-21
### Added
- Added a provider-independent Langfuse observation exporter for Agent turns,
LLM generations, Tool observations, task verification, and replay comparison.
- Added `pawbot langfuse status`, `configure`, and `test` commands.
- Added WebUI configuration for Langfuse endpoint, environment, sampling, and
bounded Prompt/Tool previews.
- Upgraded the optional Langfuse dependency to Python SDK 4.7+ for the current
Observations API and OTEL ingestion path.
### Fixed
- Fixed WebUI mutation routing for personalization and memory clear actions;
saving personalization, memory switches, and clearing memory no longer
returns `unknown WebUI mutation action`.
### Verification
- Python: 6923 passed, 54 skipped.
- WebUI: 1126 passed; production build and lint passed.
- Ruff and basedpyright passed.
- Live Langfuse verification confirmed Agent, LLM, Tool, stage, checkpoint,
and turn-completion observations under one Trace ID.
## 0.5.3 - 2026-09-20
### Added
- Added a separate WebUI **Personalization** section for global, user-authored
instructions, independent from execution and regression tooling.
- Added global memory switches for using confirmed memories and generating
background candidates.
- Added `/memories` controls for inspecting and overriding memory behavior in
the current conversation.
- Added memory search and audit-preserving clear-all behavior.
### Changed
- Personalization instructions are injected as a bounded, user-authored context
layer before project guidance and confirmed memory.
- Moved memory management out of **Execution & regression** and into
**Personalization** in the WebUI.
- README and usage diagrams now show personalization and memory policy as part
of the turn context path.
### Fixed
- Chinese memory keys such as `用户称呼=大海星` are normalized safely instead
of becoming an empty key; Chinese credential labels remain blocked.
### Verification
- Python: 6919 passed, 54 skipped.
- WebUI: 1126 passed; production build passed.
- Ruff and basedpyright passed.
## 0.5.2 - 2026-09-20
### Added
- Added memory provenance fields for source, trust, origin, evidence references,
content fingerprints, and superseding records. External, Tool, and Dream
content cannot silently become trusted memory.
- Added deterministic `TaskContract` assertions for `must`, `must_not`, and
partial `ordered` constraints, with per-assertion evidence and
`passed`/`failed`/`not_evaluable` results.
- Added a local Gateway event journal with `event_id`, `stream_id`, and
monotonic sequence numbers, plus protocol-v1 resume after an event gap.
- Added a durable idempotency ledger for protocol-v1 WebUI mutations.
- Added the read-only `pawbot doctor` command for configuration, workspace,
Gateway, event journal, operation ledger, and WebUI bundle diagnostics.
### Changed
- WebUI clients automatically negotiate Gateway protocol v1 while older clients
continue to use the compatible event shape.
- Task Eval and Harness reports now include assertion-level task evidence.
- WebUI and Dream prompts explicitly treat historical, Tool, web, MCP, and file
content as reference data rather than higher-priority instructions.
### Verification
- Python: 6913 passed, 54 skipped.
- WebUI: 1126 passed.
- Agent Harness: 9/9 passed; Task Eval Set: 6/6 passed.
## Unreleased
No unreleased changes.
## 0.5.1 - 2026-09-19
### Added
- Added DeepSeek-focused Provider contract tests for V4 capabilities, long
context metadata, reasoning controls, Tool Call history, streaming deltas,
usage, and provider error semantics.
- Added fault-injection checks for recovery, recording manifests, Provider
failures, and unified TurnOutcome invariants to the quality gate.
- Added optional process-local request guardrails for per-sender concurrency and
Provider in-flight/RPM limits; provider-specific environment variables take
precedence over global values.
### Changed
- Documented that DeepSeek has the strongest validation coverage while other
Provider endpoints remain compatibility paths that require endpoint-specific
verification.
- Clarified the security boundary between local Trace/Record & Replay evidence
and a distributed compliance audit system.
## 0.5.0 - 2026-09-16
### Added
- Added runtime task completion checks through `TaskContract`, with explicit
`passed`, `failed`, and `not_evaluable` results.
- Added final-answer, successful-tool, tool-result, workspace-file, and custom
validator assertions for SDK and one-shot CLI runs.
- Added task-verification feedback so a failed completion check can return the
missing conditions to the Agent within its existing turn budget.
- Added Tool execution policies for side-effect class, idempotency,
reversibility, recovery strategy, and bounded execution receipts.
- Added stable operation fingerprints and recovery confirmation for interrupted,
timed-out, or uncertain side-effecting operations.
### Changed
- Record & Replay now stores task contracts and re-evaluates them during offline
replay.
- Trace and WebUI now show task verification separately from replay consistency
and original execution errors.
- Agent Harness scenarios use the same runtime task evaluator as normal Agent
runs; the quality gate covers the new evaluator and recovery policy tests.
- Added `pawbot agent --task-contract <file>` for one-shot declarative checks.
### Safety
- Read-only and explicitly idempotent operations can be retried after an
interruption; unknown, non-idempotent, and irreversible operations fail closed
until a human confirms the retry.
- Provider-native conversation state excludes Pawbot's local recovery metadata.
## 0.4.2 - 2026-09-16
### Fixed
- Fixed `pawbot update` on Windows when Pawbot is installed as a persistent
uv or pipx tool. The update is handed off to a detached PowerShell helper so
the running launcher is released before it is replaced.
### Changed
- Expanded the README usage guide to explain which capabilities belong in
WebUI, CLI, or CI.
## 0.4.1 - 2026-09-16
### Added
- Added two deterministic task Fixtures for change-and-verify and
investigate-and-summarize workflows, both executed through the real
`AgentRunner` with in-memory state.
- Added Harness aggregate metrics for task evaluability and pass rate, model
requests, Tool attempts, and Tool failures.
- Added a public Agent Harness experiment baseline describing the fixtures,
evidence model, reproducibility command, and known limitations.
### Changed
- Added a dedicated CI step that prints the machine-readable Agent Harness
report so trajectory and task results are visible in the public workflow.
## 0.4.0 - 2026-09-16
### Added
- Added a deterministic Agent Harness Benchmark covering normal Tool use,
Tool failure recovery, Provider errors, model timeouts, cancellation, and
turn-budget boundaries.
- Added `pawbot harness list/run` and a local/CI quality gate that combines
whitespace, Ruff, basedpyright, Harness, Agent/approval contract, and public
Record & Replay fixture checks.
- Added task-level completion contracts alongside trajectory checks, so a
deterministic execution path is no longer presented as a task-quality score.
- Added fail-closed Tool approval callbacks and `ToolApprovalManager` for
human confirmation before write, execute, or network-capable Tools run,
including WebUI and native TUI decision surfaces.
- Added experiment and environment provenance to Harness reports and recorded
sample metadata without copying local paths or credentials.
## 0.3.9 - 2026-09-13
### Added
- Added `pawbot update`, which detects the active uv, pipx, or pip installation
method and upgrades Pawbot without rerunning onboarding or rewriting user
configuration.
- Added the `recording` extra for optional vcrpy HTTP cassette support and a
local HTTPX cassette regression test.
### Fixed
- Made the native TUI prefer terminal-native selection in SSH and Mosh sessions,
improving copy and paste behavior in Termius while retaining an explicit
`PAWBOT_TUI_MOUSE=1` opt-in.
- Avoided treating remote `Ctrl+V` as a server-side image clipboard request;
terminal paste events remain available for remote clients.
## 0.3.8 - 2026-09-13
### Fixed
- Made Record & Replay fail closed when a tool observation is missing, while
preserving the current turn budget and denied-capability policy.
- Enforced wildcard WebSocket authentication, including trusted-proxy
assertion checks and protected token issuance.
- Returned an OpenAI-compatible SSE error event and `[DONE]` when streaming
execution fails.
- Fixed the Docker Compose API image's optional dependency and API-key entry
point; bounded API session-lock lifetime and corrected relative exec paths.
- Kept configured model aliases visible in the WebUI model picker and recorded
provider-hosted tool events for later inspection.
## 0.3.7 - 2026-09-10
### Fixed
- Removed duplicate model labels from the TUI when the selected model preset
has the same ID as the active model.
- Kept the TUI welcome card focused on version and workspace information;
live model and access state now has one clear home in the title controls.
## 0.3.6 - 2026-09-10
### Fixed
- Localized the complete Record & Replay settings surface, including invalid
recording reasons, so switching the WebUI to English no longer leaves the
feature in Chinese.
- Added headless Linux WebUI guidance and the `pawbot webui --remote` shortcut;
server startup no longer presents `127.0.0.1` as if it were a remotely
reachable address.
- Sent a stable `x-opencode-session` and a Pawbot user agent for OpenCode Go
requests, preserving the conversation routing contract required by that
gateway.
- Separated replay consistency from original execution health in the WebUI;
a deterministic replay can now remain visibly paired with an original tool
or model failure instead of looking like an overall success.
- Added a readable model-request failure card with the recorded HTTP status,
provider error type, and error code.
### Added
- Connected the TUI model picker and `/model`/`/models` commands to the current
provider's live `/models` catalogue.
- Added session-scoped model pins for live or manually entered model IDs;
switching a session does not rewrite the global configuration.
- Made the curated model capability table authoritative for known model IDs so
stale provider metadata cannot downgrade a known context window or reasoning
vocabulary.
- Enabled native Anthropic model discovery with its required authentication and
model-capability fields; Azure, Bedrock, and OAuth-only providers remain on
their dedicated/manual paths instead of being sent an incompatible generic
`/models` request.
## 0.3.5 - 2026-09-10
### Changed
- Reworked the WebUI replay detail into a readable execution trace showing the
user request, provider-returned thinking, model decisions, tool calls,
tool-result previews, and final answer in order.
- Kept long parameters and results collapsed behind their own event while
preserving a dedicated full-screen raw JSON/JSONL inspector.
- Clarified that a green replay result is an offline orchestration regression
check under recorded inputs and observations, not a model-quality score or a
live tool/provider test.
## 0.3.4 - 2026-09-10
### Changed
- Reworked the WebUI Record & Replay view around a compact per-turn summary:
user request, final answer, model, decision count, tool count, and outcome
are visible first.
- Moved the complete turn-level JSON records into a dedicated full-screen
viewer so raw execution data remains available without overwhelming the
normal inspection path.
- Clarified replay terminology to distinguish an offline orchestration check
from a log viewer or a model-quality score.
## 0.3.3 - 2026-09-09
### Fixed
- Published checksum-verified native TUI archives for the supported desktop and
server platforms; packaged installs now download the matching client instead
of failing with a missing-archive message.
- Made Quick Start discover models from a configured compatible provider and
apply the shared context-window and reasoning-capability metadata to the
generated preset, with manual entry retained for unsupported catalogues.
- Added explicit remote WebUI binding with safe authentication and operator
guidance; localhost remains the default.
- Re-enabled registry-backed terminal model autocomplete and recommendations.
## 0.3.2 - 2026-09-09
### Fixed
- Made the macOS/Linux and Windows installers preflight `venv`/`ensurepip`, stop
cleanly on dependency failures, verify the installed CLI, and report the
actual launcher/PATH state without printing a false success command.
- Added cross-platform installer smoke coverage for Ubuntu, macOS, and Windows,
including a missing-venv failure regression test.
### Release notes
- This patch release improves first-install diagnostics and launcher discovery;
the Agent runtime behavior is unchanged.
## 0.3.1 - 2026-09-09
### Added
- Added turn budgets for iterations, tool calls, wall time, tokens, and costs.
- Added tool lifecycle evidence, cancellation diagnostics, replay benchmarks,
and core Provider/Tool/Session contract tests.
- Added WebUI replay diagnostics and the `pawbot replay` command.
### Changed
- Reframed the project around a replayable, inspectable AI agent.
- Added a sanitized Record & Replay fixture for regression tests.
- Added CI coverage for Python quality gates, WebUI checks, package smoke tests,
and clean installation.
- Removed local interview materials, local data, private configuration, and
stale release planning documents from the public source surface.
- Stabilized oversized structured tool-result references and recursive glob
matching.
### Fixed
- Removed stale repository, documentation, and deployment links from the public
project description.
- Made local documentation paths the safe default when no hosted documentation
URL is configured.
### Boundaries
- The default agent process remains single-process and single-node.
- Record & Replay verifies orchestration against recorded rails; it does not
make a live provider deterministic.