751dbfed337bc18ec6dd96cc7b3f241bb3207acb
12 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8ed4b96b1a |
feat(auto-agents): perf + observability + persistent comment cache
Folds B1-B4 + C2-C5 from the post-live-test plan into one commit:
B1 — npx tsx pre-warm in dispatchers-launcher.sh closes the cold-cache
30s AbortSignal timeout that killed both dispatchers' first cycle.
B2 — per-tier worker timeout
(IMPLEMENTER_DISPATCHER_WORKER_TIMEOUT_TIER_{N}_SECONDS) lets Tier 1
(qwen-large) and Tier 2 (kimi) get more wallclock than gpt-5-mini;
floor 60s.
B3 — _rebuild_prompt_from_cached_result skips the full prefetch on
tier transitions (worktree-reset puts everything back at the
prefetched head_sha, so the prefetch result + det_sections don't
change). Saves ~7 min per tier transition on comment-heavy PRs.
B4 — git-commit-util.md documents the FORBIDDEN naive recovery
pattern (git fetch && git reset --hard) that lost PR #30 attempt
3's real fix in the live test. Two correct paths now spelled out:
--force-with-lease=<branch>:<old-remote-sha> or stash+rebase+pop.
C2 — _pr_clone._refresh_mirror_with_retry adds one retry on git
fetch failure and force-reclones the bare mirror if both attempts
fail. Previously a single exit 128 logged WARN and continued with
stale data forever.
C3 — in-flight turn markers (asterisk suffix on input/output token
counts) in the per-turn log when completed=False. The archived
turn dict's completed field was already there; the log now surfaces
it. Sub-agent timeout archiving was already correct via
_archive_subagent_tree.
C4 — new module _recent_push_cache.py records per-PR push events
(head_sha + timestamp + cycle metadata). Prefetch surfaces in the
sentinel under recent_implementer_push (with --field accessor)
when the cached push matches the PR's current head_sha within
1h. Prevents the "dispatcher re-cycles right after pushing,
worker re-does the same compliance work" failure mode from
PR #28 cycle 2 in the live test.
C5 (replaces C1) — new module _pr_comments_cache.py wraps
_review_fetch.fetch_pr_comments with disk-backed delta-fetch
semantics. PR #30's 1340+ comment fetch (which previously took
~30s and hit the 20-page pagination cap) now becomes a 5-10 item
delta. Cache is per-PR, shared between reviewer + implementer
dispatchers, has 24h staleness bound, kill-switch via
IMPLEMENTER_DISPATCHER_COMMENT_CACHE_DISABLE=1.
Tests: 1484 passed, 3 skipped (+20 from
|
||
|
|
132a5a2269 |
feat(auto-agents): centralise model registry under .opencode/models with session-create model stamp
Every agent's model assignment now lives in a single-line text file at
.opencode/models/<name>.txt; default.txt is the 27-agent catch-all.
opencode.json's agent.<name>.model uses
{file:./.opencode/models/<name>.txt} interpolation, and
tools/_opencode_worker.py reads the same files at session-create to
stamp the resolved model on the session record (observability + drift
sentinel; OpenCode does NOT propagate session-level model to
prompt_async — schema for that is undocumented and deferred to Stage
2). 39 .md frontmatter `model:` lines stripped; the two intentional
inheritors (task-implementor, agent-evolution-pool-supervisor) keep
their model-less frontmatter.
Operator workflow for swapping a model is now: edit
.opencode/models/<role>.txt, restart OpenCode so opencode.json's
{file:...} re-resolves, run the dispatcher. Live-swap without restart
was attempted (override on prompt_async); OpenCode 0.x silently
dropped those requests (200 OK, no assistant message) and the
prompt_async override was reverted. The session-create override
remains for observability + drift detection.
End-to-end validation (2026-05-10): dispatch_review.py on PR #25 with
default.txt=openai/gpt-5-mini produced a clean REQUEST_CHANGES review
in 26 s for ~$0.016; dispatch_implementer.py on PR #30 with
tier-qwen-* files remapped to openai/{gpt-5-nano, gpt-5-mini,
gpt-5-codex} ran the full implementation-worker → tier-dispatcher →
estimator-implementation → tier-qwen-med → task-implementor →
git-isolator-util chain in 16 min with model=gpt-5-mini end-to-end.
Also documents the printenv VAR form as the only allowed env-read in
implementation-worker.md and task-implementor.md (live testing
showed the worker burning 2–4 turns on permission-denied
trial-and-error trying printf and echo variants).
Tests: 21 in tests/auto_agents/test_opencode_worker_models.py
(resolver semantics with caplog assertions on every malformed-input
path; session-create body shape; prompt_async body never carries
model; three repo-level invariants — every {file:...} reference
resolves, every .md is wired or in the inheritor allowlist, no .md
has a model: frontmatter). 1027 auto_agents tests pass / 3 skipped.
Note: .opencode/models/default.txt and the three tier-qwen-*.txt
files are committed with their OpenAI swaps in place (gpt-5-mini,
gpt-5-nano, gpt-5-mini, gpt-5-codex respectively) because the
CleverThis HuggingFace endpoints are paused. Revert with `git diff
HEAD~1 -- .opencode/models/*.txt | git apply -R` if/when they come
back.
Co-authored-by: Cursor <cursoragent@cursor.com>
|
||
|
|
e247c10219 |
chore(opencode): reconcile providers and agents with agents/final-working
Imports the source-of-truth tier selector shape (tier-qwen-small/med/ large, tier-kimi) and the explicit-only variable-propagation contract from agents/final-working, while preserving this branch's deterministic merge_drive.py / conflict_drive.py ownership model and the implementer/reviewer claim-release behavior so LLM workers do not race the host drivers. Rebuilds root opencode.json so host-launched OpenCode sees the same live HF endpoints as the devcontainer, and corrects pipeline-agent model pins to the live default CleverThis-15/Qwen3-6-35B-A3B-GGUF-UD-Q3-K-XL after CleverThis-8 was decommissioned. Drops the stale single tier-qwen selector. Telemetry pricing keys are updated to match the new model pin. Scope is intentionally limited to provider/model routing and agent- definition reconciliation; the Tier 2 deterministic dispatchers and their telemetry land in a separate commit. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|
|
ce396d2b43 |
build: reordered agent perms
CI / benchmark-publish (push) Waiting to run
CI / push-validation (push) Successful in 30s
CI / helm (push) Successful in 42s
CI / build (push) Successful in 47s
CI / quality (push) Successful in 1m14s
CI / lint (push) Successful in 1m25s
CI / typecheck (push) Successful in 1m35s
CI / security (push) Successful in 1m34s
CI / e2e_tests (push) Successful in 5m57s
CI / integration_tests (push) Successful in 7m11s
CI / unit_tests (push) Successful in 9m0s
CI / docker (push) Failing after 1s
CI / coverage (push) Successful in 12m23s
CI / status-check (push) Failing after 3s
|
||
|
|
9632ea55dd |
build: trying new qwen instruct model instead
CI / status-check (push) Blocked by required conditions
CI / lint (push) Successful in 48s
CI / typecheck (push) Successful in 1m15s
CI / security (push) Successful in 1m14s
CI / quality (push) Successful in 41s
CI / push-validation (push) Successful in 30s
CI / helm (push) Successful in 42s
CI / build (push) Successful in 47s
CI / integration_tests (push) Successful in 4m13s
CI / e2e_tests (push) Successful in 5m6s
CI / unit_tests (push) Successful in 6m25s
CI / docker (push) Successful in 1m46s
CI / coverage (push) Failing after 17m43s
CI / benchmark-publish (push) Has started running
|
||
|
|
bdcc44cb09 |
build: read and write permissions set seperate edit since read seems to be getting denied as does write
CI / helm (push) Successful in 39s
CI / lint (push) Successful in 57s
CI / build (push) Successful in 53s
CI / quality (push) Successful in 1m24s
CI / typecheck (push) Successful in 1m30s
CI / security (push) Successful in 1m43s
CI / integration_tests (push) Successful in 3m31s
CI / e2e_tests (push) Failing after 3m49s
CI / push-validation (push) Successful in 25s
CI / unit_tests (push) Successful in 4m42s
CI / docker (push) Successful in 1m28s
CI / coverage (push) Successful in 10m44s
CI / status-check (push) Failing after 3s
CI / benchmark-publish (push) Successful in 1h30m7s
|
||
|
|
3a6d42ee79 |
build: fixed some bad permissions and no longer require prompt to be written to a file for supervisors
CI / status-check (push) Blocked by required conditions
CI / push-validation (push) Successful in 31s
CI / helm (push) Successful in 50s
CI / build (push) Successful in 56s
CI / lint (push) Successful in 1m12s
CI / security (push) Successful in 1m27s
CI / typecheck (push) Successful in 1m39s
CI / quality (push) Successful in 1m37s
CI / integration_tests (push) Successful in 3m46s
CI / e2e_tests (push) Successful in 4m10s
CI / unit_tests (push) Successful in 4m55s
CI / coverage (push) Has started running
CI / docker (push) Successful in 1m26s
CI / benchmark-publish (push) Has started running
|
||
|
|
9b34d47371 |
build: new models
CI / benchmark-publish (push) Has started running
CI / push-validation (push) Successful in 48s
CI / helm (push) Successful in 1m8s
CI / build (push) Successful in 1m9s
CI / lint (push) Successful in 1m29s
CI / quality (push) Successful in 1m32s
CI / typecheck (push) Successful in 1m36s
CI / security (push) Successful in 1m35s
CI / integration_tests (push) Successful in 5m21s
CI / unit_tests (push) Successful in 6m0s
CI / e2e_tests (push) Successful in 6m6s
CI / docker (push) Successful in 1m27s
CI / coverage (push) Successful in 23m45s
CI / status-check (push) Successful in 6s
|
||
|
|
816c16901b |
build: fixed uncensored model
CI / build (push) Successful in 1m4s
CI / lint (push) Successful in 1m15s
CI / quality (push) Successful in 1m20s
CI / typecheck (push) Successful in 1m43s
CI / security (push) Successful in 1m57s
CI / helm (push) Successful in 42s
CI / benchmark-publish (push) Failing after 36s
CI / integration_tests (push) Successful in 4m35s
CI / e2e_tests (push) Successful in 5m40s
CI / unit_tests (push) Successful in 6m11s
CI / push-validation (push) Successful in 23s
CI / docker (push) Successful in 1m37s
CI / coverage (push) Successful in 12m23s
CI / status-check (push) Successful in 3s
CI / benchmark-publish (pull_request) Has been skipped
CI / push-validation (pull_request) Successful in 30s
CI / helm (pull_request) Successful in 35s
CI / build (pull_request) Successful in 1m4s
CI / lint (pull_request) Successful in 1m22s
CI / quality (pull_request) Successful in 1m23s
CI / security (pull_request) Successful in 1m38s
CI / typecheck (pull_request) Successful in 2m3s
CI / unit_tests (pull_request) Successful in 4m40s
CI / integration_tests (pull_request) Successful in 5m11s
CI / e2e_tests (pull_request) Successful in 5m38s
CI / docker (pull_request) Successful in 1m27s
CI / coverage (pull_request) Successful in 10m45s
CI / status-check (pull_request) Successful in 3s
|
||
|
|
516c600c0e |
build: updated and rename hosted models
CI / status-check (push) Blocked by required conditions
CI / lint (push) Successful in 49s
CI / typecheck (push) Successful in 1m25s
CI / security (push) Successful in 1m23s
CI / quality (push) Successful in 40s
CI / push-validation (push) Successful in 35s
CI / helm (push) Successful in 42s
CI / build (push) Successful in 54s
CI / benchmark-publish (push) Failing after 43s
CI / integration_tests (push) Successful in 4m41s
CI / e2e_tests (push) Successful in 5m9s
CI / unit_tests (push) Successful in 5m56s
CI / coverage (push) Has started running
CI / docker (push) Successful in 1m36s
|
||
|
|
1691def164 |
build: Moved to using new default qwen instance
CI / build (push) Successful in 1m0s
CI / lint (push) Successful in 1m17s
CI / quality (push) Successful in 1m24s
CI / typecheck (push) Successful in 1m32s
CI / security (push) Successful in 1m49s
CI / benchmark-publish (push) Failing after 39s
CI / push-validation (push) Successful in 24s
CI / helm (push) Successful in 25s
CI / integration_tests (push) Successful in 3m40s
CI / e2e_tests (push) Successful in 4m8s
CI / unit_tests (push) Successful in 4m53s
CI / docker (push) Successful in 1m42s
CI / coverage (push) Successful in 11m13s
CI / status-check (push) Successful in 3s
|
||
|
|
1885990081
|
build: auto opencode agents rewritten
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
|