# Version 0.2.0

Released on 2026-08-03.

- [2026-08-03] Tooling: Release assets are mirrored to Alibaba Cloud OSS — the mirror-oss release job re-uploads the exact checksum-verified GitHub Release artifacts (`latest.json` last, only after every asset landed), and the installers gain a download-source switch (`PENGUIN_DOWNLOAD_SOURCE=auto|oss|github`, auto preferring OSS with a same-version GitHub fallback) plus validated `PENGUIN_DOWNLOAD_BASE_URL` overrides, with a staging workflow and installer tests covering the mirror path. ([details](2026-08-03-oss-distribution.md))

- [2026-08-03] Web App: three chat-navigation aids — ↑ recalls the session's previous inputs shell-style in the composer, the "Reasoning & Tools" header and the current thinking/tool row stick to the top of the stream stacked by level so long runs collapse from anywhere inside them, and a zero-width tick-rail minimap over the stream's left gutter previews every exchange on hover (question + truncated answer) for one-click jumps. ([details](2026-08-03-web-chat-navigation.md))

- [2026-08-03] Models: the qianwenai groups move to the current lineup (qwen3.8-max and deepseek-v4-flash-0731 in, qwen3.7-max and qwen3.8-max-preview out), OpenRouter gains deepseek/deepseek-v4-flash-0731 and openai/gpt-5.6-luna, drops the delisted poolside/laguna-m.1:free and has every row's cache/input/output prices re-read from the models API, the last unpriced SiliconFlow rows get list prices, and new Projects default to deepseek-v4-flash — existing Projects keep their stored models and default. ([details](2026-08-03-model-catalog-qianwenai-flash.md))

- [2026-08-02] Web App: steering messages survive reloads with their content visible and can carry file attachments, tool-card subtitles render once fully formed instead of jittering, and the session list is DB-served by default with an opt-in CLI-session toggle and paged sidebar groups. ([details](2026-08-02-web-app-steering-and-session-list.md))

- [2026-08-02] File tools: `read_file` / `edit_file` diagnose a missing path — deepest existing ancestor, first missing segment, nearest-named entries — instead of a bare "File not found" that read as absolute paths being rejected; the agent-creation Skill spells out `agent_state/AGENTS.md`. ([details](2026-08-02-file-tool-missing-path-diagnostics.md))

- [2026-08-02] Web App: the manual "Check for updates" row reports every outcome — busy spinner while checking, success toasts for both up-to-date and update-found (naming the release, with the row itself becoming the update entry), and the existing failure/disabled notices — via a unit-tested outcome classifier. ([details](2026-08-02-update-check-feedback.md))

- [2026-07-31] Tooling: each Release now attaches exactly one artifact per target — a flat installer bundle sealing the native installer, the program payload and its checksum — serving online and offline installation from the same file, with mandatory checksums at both layers, no more raw archives or `*-offline` wrappers, and hermetic installer tests in CI; in-place upgrades survive filesystems that pin in-use directories (the `penguin update` overlayfs `Device or resource busy` failure), the Windows payload drops its policy-blocked `penguin.ps1` launcher, and the installer broadcasts the user-Path change so new terminal windows find `penguin`. ([details](2026-07-31-unified-installer-artifact.md))

- [2026-07-31] Backward compatibility: the batch's compat decisions in one place — installers keep a content-probed legacy path so pre-0.1.6 releases and old local archives stay installable (with its removal owner named), old saved installer scripts break loudly against new assets by design, the dropped `penguin.ps1` launcher cleans itself up on upgrade, and the truncated-output batch is additive with nothing to migrate. ([details](2026-07-31-backward-compatibility.md))

- [2026-07-31] Core: tool output that exceeds `maxOutputLength` in an Agent Session is now saved to the Session scratchpad and the recovery path appended to the same truncated result the model and frontends see — no new tool, no change to the visible cap or the stream-equals-complete contract — wired through one generic `EnvironmentConfig.sessionScratchpadDir` parameter, with per-call 8 MiB bounds and UTF-8-safe head/tail for larger calls; every model-visible path core composes (prompt Environment lines, attachment lines, goal file, tool messages, recovery notes) now shares one forward-slash spelling on Windows via `modelVisiblePath`, file tools keep accepting both Windows spellings, and the Web App's file cards match Windows paths in any separator spelling. ([details](2026-07-31-recover-truncated-tool-output.md))

- [2026-07-31] Evaluation Center: Case details separate Target Agent task materials from project-member-visible scoring rubrics, Score charts use a padded dynamic axis without discarding stored values, and the benchmark Skills write YAML-safe Scoreboard summaries. ([details](2026-07-31-evaluation-center-case-details.md))

- [2026-07-30] Web App: the main conversation's file summary moves to the completed Task boundary — one card per Task scanning all of its assistant text, nested agent conversations keep their per-message summaries, and file-existence caching stops retaining negative results so a later Task can surface a newly created path. ([details](2026-07-30-file-summary-task-boundary.md))
