Skip to content

v0.31

Choose a tag to compare

@github-actions github-actions released this 16 Jul 18:57
· 463 commits to main since this release

Release v0.31.0

Release v0.31 — incremental update from v0.30 with 126 merged PRs.

What's Changed

🐛 Bug Fixes

  • #1275: feat(#1270): [Bug] --no-github path produces workspace without git repo or .pi/settings.json — container scripts fail
  • #1273: feat(#1269): [Bug] Init submodule setup incomplete: ignored flask_blogs, no --init --recursive, no URL prompting
  • #1265: feat(#1262): [Bug] v1.0.0 release tag never pushed — no Go CLI binary published, install doc recommends non-downloadable artifact
  • #1264: feat(#1261): [Bug] cmd/cheasee-pi test package does not compile on main — stray braces in init_test.go
  • #1263: feat(#1258): [Bug] Supervisor PR pipeline pushes stale branch — no rebase before push causes merge conflicts
  • #1260: feat(#1248): [Bug] Install/README quick-start buries run-pi.sh, forces multiple individual docker commands despite simplicity goal
  • #1259: feat(#1249): [Bug] .goreleaser.yml missing windows build — epic #1202 specifies linux/mac/windows
  • #1257: feat(#1247): [Bug] No Go CLI release artifacts published — GoReleaser never triggered, binary not downloadable
  • #1256: feat(#1246): [Bug] Init extractor writes compose files to workdir root, not docker/ — inconsistent with docker/.env and run-pi.sh
  • #1255: feat(#1245): [Bug] API key integration gap: init writes ~/.config/cheasee-pi/auth.json, runtime reads ~/.pi/agent/auth.json and no mount exists
  • #1254: feat(#1243): [Bug] Init success message and installation doc reference non-existent 'cheasee-pi start' subcommand
  • #1253: feat(#1244): [Bug] installation.md claims init saves auth to ~/.pi/agent/auth.json (actual: ~/.config/cheasee-pi/auth.json)
  • #1252: feat(#1236): [Bug] PR creation force-push overwrites existing branch commits when worktree recreated from main
  • #1251: feat(#1242): [Bug] cheasee-pi init --no-github skips compose extraction and docker/.env generation
  • #1250: feat(#1241): [Bug] Go CLI root command misdescribes product as Raspberry Pi management
  • #1157: feat(#1154): [Bug] Subagent comments silently dropped — ignore/ dir missing + textPushedThisTurn flag blocks message_end extraction
  • #1150: feat(#1142): [Bug] Subagent tool calls missing from session metadata toolStats
  • #1146: feat(#1136): [Bug] proper-lockfile onCompromised throw crashes pi subprocess from setTimeout callback
  • #1143: feat(#1137): [Bug] execCommand reports code:0 when subprocess killed by signal — masks timeouts in scrapeling adapter
  • #1140: feat(#1138): [Bug] ensureVenv holds proper-lockfile during long pip install — timer crash window + blocks concurrent agents
  • #1127: feat(#1103): [Bug] Hardcoded /home/miria/ absolute paths in source, skills, and docs — breaks portability
  • #1085: feat(#1067): [Bug] duplicate-code.ts: filterClonesToChangedFiles references undefined cloneFiles
  • #1073: feat(#1066): [Bug] structural-analyzer: uses 'ast-grep scan --pattern' but ast-grep 0.43 requires 'ast-grep run --pattern'
  • #1027: feat(#1007): [Bug] Supervisor: thinking output truncated to last streaming fragment (thinkingPushedThisTurn gate skips full message content)
  • #1017: feat(#1000): [Bug] Docker container's git worktree prune deletes main worktree registration on shared filesystem
  • #1006: feat(#1004): [Bug] Supervisor: inconsistent subagent widget rendering between pipeline run and merge conflict resolution

✨ Features & Enhancements

  • #1274: feat(#1271): [Feature] Init should prompt for fork repo URL interactively
  • #1272: feat(#1268): [Feature] Init should generate .pi/settings.json with user's fork identity
  • #1239: feat(#1228): Add GoReleaser config and GitHub release workflow
  • #1238: feat(#1227): Implement GitHub OAuth device flow repo setup and compose extraction
  • #1216: feat(#1207): [Feature] Replace gh CLI wrappers with @octokit/rest
  • #1209: feat(#1208): [Feature] Replace manual config validation with zod
  • #1205: feat(#1186): Agent stream dedup regression — thinkingOutputLines populated when flag is set
  • #1203: feat(#1189): Worktree sandbox behavioral regressions — false negatives on path safety checks
  • #1201: feat(#1184): Chat-progress widget rendering changed — tests fail on output format
  • #1200: feat(#1190): Structural analyzer and check-extensions version check regression
  • #1199: feat(#1185): Pipeline handler mock missing ctx.ui.setWidget — 12 subtests fail
  • #1198: feat(#1191): Supervisor source pattern tests outdated after refactoring
  • #1197: feat(#1183): Message renderer output header changed — tests expect old label
  • #1196: fix: upgrade undici to 8.5.0 (CVE-2026-9697)
  • #1195: feat(#1180): Test files reference non-existent paths after refactoring
  • #1194: feat(#1181): lsp-client test needs --experimental-test-module-mocks flag
  • #1193: feat(#1179): [Feature] Implement in-process agent runner (runAgentInProcess) to eliminate subprocess memory overhead
  • #1192: feat(#1182): FooterConfig value-wrapper API changed — tests access undefined .value
  • #1178: feat(#1167): Bug: caveman - /caveman handler crashes on undefined args via unchecked optional chain
  • #1172: feat(#1161): Bug: context-info - session_shutdown calls stopTimer instead of dispose, leaving disposed=false
  • #1168: feat(#1145): [Improvement] Add investigation efficiency instruction to AGENTS.md — isolate failing tests before deep-diving
  • #1156: feat(#1144): [Improvement] Add clarification-seeking instruction to AGENTS.md — ask user before exhaustive investigation on data contradiction
  • #1155: feat(#1129): [Feature] Show subagent thinking level in supervisor widget + result message
  • #1153: feat(#1126): Supervisor pre-transition gates have inconsistent blocking policy
  • #1152: feat(#1122): [Feature] Add osv-scanner vulnerability gate to supervisor pipeline
  • #1149: feat(#1134): Bug: web_crawl - URL validation allows non-HTTP schemes (file://, data://, ftp://)
  • #1139: feat(#1133): Bug: tsc-checkpoint - watcher not invalidated when worktree changes
  • #1131: feat(#1130): [Feature] Warn when configured thinking level differs from effective level after clamping
  • #1102: feat(#1096): Bug: session-advice - no-batch inflated consecutive call count from tool_result entries
  • #1101: feat(#1094): Bug: session-advice - identical-args false positive from tool_result entries
  • #1100: feat(#1097): Bug: session-advice - redundant-reads false positive from tool_result entries
  • #1099: feat(#1093): [Feature] Promote supervisor subprocess path, delete in-process subagent machinery, add session replay
  • #1083: feat(#1071): [Feature] Remove in-place scrolling rendering from supervisor — single message-based rendering path
  • #1070: feat(#1054): [Test] GitHub issue comment output tests — handlePostAgentSuccess()
  • #1065: feat(#1035): Architecture Review: root — 2026-06-20
  • #1062: feat(#1055): [Test] Capture harness for supervisor output testing
  • #1061: feat(#1052): [Test] Widget rendering snapshot tests — buildWidgetLines()
  • #1011: feat(#999): Bug: supervisor crash-cleanup 10s timeout races git branch -D, leaves orphan branch
  • #1005: feat(#990): Bug: ripgrep-search - Unclosed bracket in truncated display indicator
  • #1002: feat(#989): Bug: ripgrep-search - max_count uses Type.Number() instead of Type.Integer()
  • #1001: feat(#988): Bug: caveman - configStore.saveConfig not awaited in config-ui.ts handleApply
  • #986: feat(#862): Add supervisor issue info to terminal footer
  • #985: feat(#861): Add skill for filing issues on external repos
  • #983: feat(#981): ripgrep-search: auto-correct file path passed as 'directory' parameter

🔧 Code Quality & Architecture

  • #1234: feat(#1223): ICA: GitHub import-seam fragmentation
  • #1233: feat(#1222): ICA: GitHubPort / OctokitClient dead-island
  • #1231: feat(#1215): ICA: Shallow pass-through modules dilute locality
  • #1220: feat(#1211): ICA: formatToolCall/isToolCallLine reimplements pi native rendering
  • #1219: feat(#1214): ICA: Bespoke tolerant JSON parser reinvents jsonrepair
  • #1218: feat(#1213): ICA: Custom JSONL debug logger reinvents pino
  • #1217: feat(#1212): ICA: Diverged thinking-level formatting duplicated across extensions
  • #1206: feat(#1188): Supervisor pipeline budgetExceeded guard duplicated — retry test fails
  • #1177: feat(#1165): Duplicate Code: check-extensions — PI import-scanner logic + ExecFn type in ast-scanner.ts / issue-builder.ts
  • #1176: feat(#1166): Dead Code: format-on-save - unused DEFAULT_PLUGINS constant in prettier-adapter.mts
  • #1175: feat(#1163): Dead Code: lsp-auditor - mergeResults function in formatting.ts is dead
  • #1174: feat(#1164): Dead Code: lsp-auditor - unused LSP protocol interfaces in lib/lsp-types.ts
  • #1173: feat(#1162): Duplicate Code: supervisor - JSON sanitization shared logic in agent/output.ts
  • #1171: feat(#1160): Dead Code: check-extensions - commented-out cleanArg function in ast-scanner.ts
  • #1170: feat(#1158): Dead Code: check-extensions - issue-builder.ts is entirely dead production code
  • #1169: feat(#1159): Dead Code: check-extensions - manifest-reader.ts is entirely dead production code
  • #1147: feat(#1135): Bug: web_crawl - StealthyFetcher._browser does not exist in Scrapling 0.4.9 — SIGTERM browser cleanup is dead code
  • #1091: feat(#1078): ICA: ripgrep-search args + parse single-consumer pure-function modules
  • #1090: feat(#1076): ICA: worktree-sandbox/shell-tokens single-caller extraction
  • #1089: feat(#1079): ICA: lib/extension-state caveman resolvers — circular lib↔caveman seam
  • #1088: feat(#1050): ICA: context-info one-export file fragmentation
  • #1087: feat(#1049): ICA: Triple bash-detection implementation — shared lib never adopted
  • #1074: feat(#1046): ICA: session/model.ts shallow helpers + duplicated test bodies
  • #1072: feat(#1045): ICA: Dead test-only pass-through exports
  • #1069: feat(#1044): ICA: execAsPi leaky seam — github module over-depends on ExtensionAPI
  • #1068: feat(#1048): ICA: context-info prompts.ts / skills.ts near-miss clone
  • #1064: feat(#1039): ICA: Deprecated tsc formatter twin
  • #1063: feat(#1040): ICA: checks/shared.ts generic one-liners
  • #1060: feat(#1038): ICA: Two parallel event normalizers
  • #1059: feat(#1036): ICA: Extension-path resolver twins
  • #1051: feat(#1037): ICA: Idle/gap duplicate detectors
  • #1047: feat(#1023): ICA: ExecFn type duplicated with divergent contracts
  • #1043: feat(#1021): ICA: session-advice waste-signals/index single-consumer barrel unusable in tests
  • #1042: feat(#1022): ICA: supervisor/agent/stream.ts thin wrapper around event adapter
  • #1034: feat(#1019): ICA: tsc-decisions + lsp-decisions near-miss clone audit-gate decisions
  • #1033: feat(#998): Dead Code: context-info - 4 unused type re-exports in index.ts
  • #1032: feat(#1020): ICA: supervisor/config dead no-op stubs shadowing lib/ implementations
  • #1031: feat(#1016): ICA: agent-harness/lib/constants.ts constants module with refusers
  • #1030: feat(#1024): ICA: session-advice advisor.ts self-proclaimed shallow re-export facade
  • #1029: feat(#1015): ICA: caveman/session.ts unused re-export shim
  • #1028: feat(#1013): ICA: scrapling CrawlerEngine port — single-adapter seam
  • #1026: feat(#1014): ICA: lib/extensionState.ts dead duplicate of extension-state.ts
  • #1025: feat(#996): Dead Code: context-info - DEFAULT_THRESHOLDS dead export in config.ts
  • #1010: feat(#995): Dead Code: context-info - THRESHOLD_HEX_COLORS dead export in formatting.ts
  • #1009: feat(#994): Dead Code: context-info - processStartTime dead export in footer.ts
  • #1008: feat(#993): Dead Code: context-info - isJsonMode dead export in telemetry.ts
  • #1003: feat(#992): Duplicate Code: supervisor - Checks module orchestration boilerplate (dead-code.ts ↔ duplicate-code.ts)
  • #982: feat(#979): Duplicate Code: worktree-sandbox - Test boilerplate duplication across 4 test files (~200+ lines)

📚 Documentation

  • #1240: feat(#1229): Rewrite installation doc for Go CLI and native Docker workflows
  • #1237: feat(#1226): Initialize Go module with Cobra scaffold Docker check and auth config
  • #1235: feat(#1225): Document native Docker runtime workflow in daily usage guide
  • #1232: feat(#1224): Add docker run-pi convenience script for one-command session start
  • #1204: feat(#1187): buildAgentTask missing Dockerfile + gateFailureContext combined block
  • #1151: feat(#1124): [Feature] Add Dockerfile awareness instruction to developer agent task prompt

🔗 Dependencies

  • #1267: fix(#1267): bump golang.org/x/crypto to 0.54.0 and golang.org/x/net to 0.57.0
  • #1266: fix(#1267): bump golang.org/x/crypto to 0.52.0 and golang.org/x/net to 0.55.0

Full Changelog: v0.30...v0.31