You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Expedition taskflows
Five new core operations, exported from @input-output-hk/agent-review, that act on a pull request instead of reviewing one: stabilize (sync a branch with its base, reporting up-to-date, updated, conflict, blocked, draft, or gone), expedite, requestPeerReview, approveDependencyUpgrade, and watchAndReReview. With them: the central safety gate (evaluateGates, DEFAULT_GATE_POLICY), the path-based change classifier (classifyChange), the dependency-upgrade classifier, and the action-marker helpers (buildActionMarker, findActionMarkers) that keep a proposal comment idempotent per head commit. The gateway grew the reads and writes these need: mergeability, check runs, branch protection, detailed pull files, requested reviewers, actor type, and the open security-alert count, plus updateBranch, mergePull, removeLabel, and addAssignees. Every one of them is propose-only unless the caller passes autonomy: "auto" on that individual call.
Five new pi tools that move a pull request forward instead of reviewing one: pr_stabilize (sync a branch with its base), pr_expedite (evaluate the expedition gate, then propose or merge), pr_request_review (request an agent peer review, once per round), pr_approve_dep_upgrade (evaluate a bot dependency upgrade, then propose or approve and merge), and pr_watch (decide the reviewer's next action: re-review, wait, hold-for-human, abandoned, approved, or none). The two that can merge take an explicit autonomy parameter that defaults to propose and is never read from the config file, and their optional maxFiles/maxLines can only tighten the default size caps, never widen them.
Three taskflows ship with the pi package under taskflows/: pr-requester (my own open pull requests), pr-reviewer (reviews requested from me, plus the pull requests I am watching), and pr-steward (bot dependency upgrades). Each one is a zero-token discover script, a bounded fan-out over the typed tools, and a zero-token summary. Copy a flow into a repository's .pi/taskflows/, list the repositories in its config.json, and run it with /tf:<name>. This repository dogfoods all three from its own .pi/taskflows/.
Propose-only is the default everywhere and it lives in the flow argument, not in configuration: autonomy defaults to propose, and no config file the flows read can turn it up. Auto therefore takes a visible per-invocation opt-in (/tf:pr-steward autonomy=auto). Every flow bounds its fan-out at four concurrent pull requests.
A knownAgentLogins array in the global config (~/.agent-peer-review/config.json), also settable with the comma-separated AGENT_REVIEW_KNOWN_AGENTS environment variable, names the logins that count as agents rather than humans when the safety gate asks whether a human review is in flight. Empty by default, which is the safe end: an unlisted reviewer is always assumed to be a human.
pi-taskflow is an optional peer dependency of @input-output-hk/agent-review-pi, so it is not installed for you. The flows need it explicitly (pi install npm:pi-taskflow), and it requires Node.js 22.19.0 or newer. See docs/taskflows.md.
Security and dependencies
Cleared every fixable open Dependabot alert. @fastify/static moved to 10.1.3 and vite to 6.4.3 in the dashboard (which also clears esbuild), the docs site picked up patched mermaid, js-yaml, nanoid, and dompurify, and the undici transitives reached 8.9.0. The last one needed the @earendil-works/pi-coding-agent development dependency raised to 0.84.1: that package publishes its own npm-shrinkwrap.json, which pins its subtree and silently defeats a root overrides entry. Neither published package changed a runtime dependency, and the peer floor stayed at 0.83.0 so consumer compatibility is unchanged. Two image-size advisories in the documentation site's transitive tree remain open because no patched version exists upstream; they affect the docs build only, which reads this repository's own images.
Release process
On-demand releases from main. A one-click Release workflow (from the Actions tab) bumps the version across every workspace with a single semver-aware script, finalizes this changelog, commits to main, and creates the GitHub release, which the existing publish workflow ships. A new check:version CI gate keeps the version consistent across all files, and npm run version:set <patch|minor|major> performs the bump locally. See docs/releasing.md.
Dashboard
The local, unpublished dashboard package gained its full UI: the Overview, Repos, repo Pulls, and Pull detail views, a hand-rolled client router with a light and dark theme toggle, and sanitized rendering of review summaries and inline notes. Build it with npm run -w dashboard build and serve it with agent-review-dashboard serve.
Two aggregate views and the endpoints behind them: Agents (one row per captured agent and model identity, with its review count, primary and second-opinion split, verdict distribution, agreement breakdown, average turnaround, and repository count, plus a single "Unknown" row for reviews with no captured metadata) and Collaborators (one row per pull request author, with the reviews and verdicts their pull requests received and how many distinct agent identities reviewed them). Both are filterable by repository, served read-only from /api/agents and /api/collaborators. Verdict counts exclude reviews that recorded no verdict, so the views show raw counts rather than shares of a total, and the agreement column states that it is derived from posted second opinions rather than an authenticated signal. Semantic --success and --warning theme tokens join --danger so a good, a bad, and an ordinary value never share the brand red.