Files
freemo 1885990081
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
CI / helm (push) Waiting to run
CI / push-validation (push) Waiting to run
CI / status-check (push) Blocked by required conditions
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
CI / security (push) Waiting to run
CI / quality (push) Waiting to run
CI / unit_tests (push) Waiting to run
CI / integration_tests (push) Waiting to run
CI / e2e_tests (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / benchmark-publish (push) Waiting to run
build: auto opencode agents rewritten
2026-04-27 12:49:08 -04:00
..

Scripts Reference

Helper scripts for interacting with the Forgejo API. All scripts are written in TypeScript and executed via npx --yes tsx. They require Node.js ≥ 18 and zero external npm dependencies.

Scripts directory: scripts/

Available Scripts

PR Listing Scripts

Six scripts that classify every open PR into one of six mutually exclusive buckets. Together they cover the complete PR pipeline used by pr-merge-pool-supervisor and pr-review-pool-supervisor.

Script One-liner
list_prs General-purpose PR lister — all filter options (--stale, --ci-status, --min-approvals, --has-request-changes, …), importable as a module by the wrappers below
list_prs_ready_to_merge Open PRs with ≥ 1 approval, already current with their base branch, and CI passing — merge immediately
list_prs_stale_clean Open PRs with ≥ 1 approval, behind their base branch, no conflicts, any CI status — server-side rebase then merge
list_prs_stale_conflicts Open PRs with ≥ 1 approval, behind their base branch, merge conflicts present, any CI status — local clone, resolve, force-push, then merge
list_prs_needs_review_not_stale Open PRs with zero approvals, current with their base branch, any CI status — review only needed
list_prs_needs_review_stale_clean Open PRs with zero approvals, stale but conflict-free, any CI status — review + server-side rebase needed
list_prs_needs_review_stale_conflicts Open PRs with zero approvals, stale with conflicts, any CI status — review + local conflict resolution needed

Review Pipeline PR Listing Scripts

Five scripts that classify every open PR with zero approvals into one of five mutually exclusive review buckets (excluding unaddressed REQUEST_CHANGES and CI-pending PRs). Together they cover the complete peer review pipeline used by pr-review-supervisor.

Script One-liner
list_prs_addressed_changes_ci_passing Open PRs with passing CI, zero approvals, active REQUEST_CHANGES, and addressed feedback (author pushed commits since review) — highest-priority re-review
list_prs_no_active_review_ci_passing Open PRs with passing CI, zero approvals, and no active REQUEST_CHANGES — ready for a fresh first review
list_prs_addressed_changes_ci_failing Open PRs with failing CI, zero approvals, active REQUEST_CHANGES, and addressed feedback — re-review with CI failure noted
list_prs_no_active_review_ci_failing Open PRs with failing CI, zero approvals, and no active REQUEST_CHANGES — first review with CI failure noted
list_prs_missing_ci_checks Open PRs with zero approvals and no CI checks reported at all — lightweight review flagging missing CI

Cross-Cutting PR Listing Scripts

Two additional scripts that cut across the six-bucket pipeline to surface specific actionable states regardless of approval/staleness classification.

Script One-liner
list_prs_ci_failing Open PRs with failing CI, any review or staleness status — CI must be fixed before any downstream step can proceed
list_prs_changes_requested Open PRs with passing CI, zero approvals, and at least one active REQUEST_CHANGES review — author must address reviewer feedback

Issue Listing Scripts

Script One-liner
list_issues Open issues excluding State/In Progress, sorted by milestone due date (oldest first) then priority (highest first) within each milestone tier

PR Action Scripts

Script One-liner
rebase_pr Triggers a Forgejo server-side rebase on a single stale, conflict-free PR — no local clone required
merge_pr Initiates a rebase-style merge (with automerge scheduling) on a single PR, handling open issue dependencies before calling the merge endpoint

OpenCode Session Scripts

These scripts wrap the localhost:4096 OpenCode Server API. They are used exclusively by the async-agent-util agent. No other agent may call these scripts directly or interact with localhost:4096.

Shared Module

Script One-liner
session_api Shared types and API client — importable module only, not a standalone CLI

Session Management Scripts

Script One-liner
session_list List all sessions with current status and last-activity timestamps
session_start Start an async agent in a new session; handles existing-session detection and restart
session_find_by_tag Find sessions whose [TAG] exactly matches the given string
session_find_by_prefix Find sessions whose tag starts with a prefix; optional -SUP exclusion
session_messages Retrieve and format messages from a single session
session_stop Stop (and delete) sessions by ID or tag-prefix pattern
session_delete Delete a specific session by ID; guards against deleting busy sessions
session_health_data Collect raw health signals for all sessions — the caller classifies health states
session_prompt Send a prompt to an existing session (fire-and-forget) — the canonical "send continue" / nudge script

Session Wait / Blocking Scripts

Script One-liner
session_wait_till_idle Core blocking script — polls sessions and blocks while busy count >= threshold; supports both supervisor and worker modes
session_wait_till_supervisor_idle Wrapper — blocks until busy supervisor count (tags ending in -SUP) drops below expected count
session_wait_till_worker_idle Wrapper — blocks until busy worker count in a specific pool drops below pool size

Session Script Quick Reference

All session scripts accept an optional --server URL to override the default http://localhost:4096.

# Start format common to all session scripts:
npx --yes tsx /app/.opencode/skills/auto-agents-system/scripts/<script>.ts [FLAGS]
Operation Script Key Flags
List all sessions session_list.ts (none)
Start async agent session_start.ts --tag --agent (--prompt | --prompt-file) [--restart]
Send prompt to existing session session_prompt.ts --session-id --agent (--prompt | --prompt-file)
Find by exact tag session_find_by_tag.ts --tag
Find by tag prefix session_find_by_prefix.ts --prefix [--exclude-supervisor]
Get messages session_messages.ts --session-id [--limit]
Stop sessions session_stop.ts --session-id or --tag-pattern [--no-delete]
Delete session session_delete.ts --session-id [--force]
Get health data session_health_data.ts [--message-limit]
Wait (supervisors or workers) session_wait_till_idle.ts --mode --max-pool-size --timeout [--tag-prefix]
Wait for supervisor slot session_wait_till_supervisor_idle.ts --expected-supervisors --timeout
Wait for worker slot session_wait_till_worker_idle.ts --tag-prefix --pool-size --timeout

The Six-Bucket Pipeline

The six listing scripts define a complete, non-overlapping classification of open PRs. The two approval states (approved vs needs review) are each split by three staleness states, giving six buckets in total. Bucket 1 additionally requires CI to be passing; approved + not-stale PRs with failing or pending CI are held out of all buckets until their CI resolves.

Every open PR belongs to exactly one bucket at any moment
(or is temporarily absent if CI is blocking it from Bucket 1):

  ── Approved (≥ 1 non-dismissed approval) ──────────────────────────────────
  Bucket 1 — list_prs_ready_to_merge               (approved + not stale + CI passing)
  Bucket 2 — list_prs_stale_clean                   (approved + stale, no conflicts, any CI)
  Bucket 3 — list_prs_stale_conflicts               (approved + stale, has conflicts, any CI)

  ── Needs Review (0 approvals) ─────────────────────────────────────────────
  Bucket 4 — list_prs_needs_review_not_stale        (no approvals + not stale, any CI)
  Bucket 5 — list_prs_needs_review_stale_clean      (no approvals + stale, no conflicts, any CI)
  Bucket 6 — list_prs_needs_review_stale_conflicts  (no approvals + stale, has conflicts, any CI)

  ── Temporarily absent (not in any bucket) ─────────────────────────────────
  • stale_state == stale_unknown   → Forgejo still computing conflict status; appears shortly
  • approved + not stale + CI failing/pending/unknown → held out of Bucket 1 until CI passes

Typical action sequence per bucket:

Bucket 1:  merge_pr                  (CI already green — safe to merge immediately)
Bucket 2:  rebase_pr → merge_pr
Bucket 3:  clone → rebase locally → resolve conflicts → force-push → merge_pr
Bucket 4:  (dispatch reviewer → on approval, moves to Bucket 1 if CI passes)
Bucket 5:  (dispatch reviewer → on approval, moves to Bucket 2)
Bucket 6:  (dispatch reviewer → on approval, moves to Bucket 3)

The Five-Bucket Review Pipeline

The five review pipeline scripts define a complete, non-overlapping classification of open PRs with zero approvals that are candidates for peer review. The two review states (addressed REQUEST_CHANGES vs no active REQUEST_CHANGES) are each split by CI status, plus a catch-all for missing CI.

PRs with unaddressed REQUEST_CHANGES (author has not pushed commits since the review) and PRs with CI pending are intentionally excluded — unaddressed feedback is the implementation supervisor's domain, and CI-pending PRs should wait for CI to resolve before review.

Every open PR with zero approvals belongs to exactly one review bucket
(or is excluded as noted below):

  ── Addressed REQUEST_CHANGES (author pushed since review) ─────────────────
  Bucket 1 — list_prs_addressed_changes_ci_passing    (addressed + CI passing)
  Bucket 3 — list_prs_addressed_changes_ci_failing    (addressed + CI failing)

  ── No Active REQUEST_CHANGES ──────────────────────────────────────────────
  Bucket 2 — list_prs_no_active_review_ci_passing     (no review + CI passing)
  Bucket 4 — list_prs_no_active_review_ci_failing     (no review + CI failing)

  ── Missing CI ─────────────────────────────────────────────────────────────
  Bucket 5 — list_prs_missing_ci_checks               (no CI checks reported)

  ── Excluded (not in any review bucket) ────────────────────────────────────
  • hasUnaddressedRequestChanges == true → implementation supervisor handles
  • ci_status == 'pending'              → wait for CI to resolve

Typical action per review bucket:

Bucket 1:  full re-review (verify addressed feedback) → approve or request changes
Bucket 2:  full first review (fresh evaluation) → approve or request changes
Bucket 3:  re-review + flag CI failures → request changes
Bucket 4:  first review + flag CI failures → request changes
Bucket 5:  lightweight review flagging missing CI → request changes

Quick Invocation Reference

All scripts share the same four connection flags:

npx --yes tsx /app/.opencode/skills/auto-agents-system/scripts/<script>.ts \
  --url  <forgejo-base-url>   \   # e.g. https://git.example.com
  --pat  <personal-access-token>  \
  --owner <repo-owner-or-org>     \
  --repo  <repo-name>

merge_pr and rebase_pr additionally require --pr <number>. merge_pr has an optional --dep error|delete|reverse flag. All list_prs_* wrappers accept only the four connection flags — their filter parameters are hard-coded and cannot be overridden on the CLI. list_prs itself accepts optional filter flags: --state, --min-approvals, --max-approvals, --mergeable, --stale, --ci-status, and --has-request-changes.

--ci-status accepts a comma-separated whitelist of CI states to include: passing, failing, pending, unknown (any combination). Omit to include all CI states. Example: --ci-status passing,pending

--has-request-changes accepts true or false. true restricts results to PRs where at least one reviewer's latest non-dismissed review is REQUEST_CHANGES. false restricts to PRs with no such active review. Omit to include all PRs regardless of request-changes status.

Each PR object in all outputs includes a ci_status field (passing | failing | pending | unknown) derived from the Forgejo combined commit-status endpoint for the PR's head SHA.

All scripts write JSON to stdout and progress/diagnostics to stderr. Exit code 0 = success, 1 = error.