agnes-the-ai-analyst/cli
ZdenekSrotyr aee585fac6 fix: devil's advocate R2 — narrow shared-client try, PID tmp suffix, Syntax error anchor
R2 adversarial review surfaced 3 issues, all addressed:

#1 cli/client.py:572-577 outer try/except wrapped both _get_shared_client()
AND the actual download. A 401/403/404/5xx from the server triggered a
full second download attempt with a fresh client — wasted bandwidth on
hard failures, no fail-fast on revoked PAT. Narrowed the try to only
the shared-client construction; the download itself is no longer
retried under the fallback except.

#2 concurrent agnes pull invocations (e.g. SessionStart hook + manual
run) collided on bare <target>.tmp / <target>.partN paths — one process's
in-progress write got yanked by the other's cleanup, manifest hash
check then failed spuriously. Per-process suffix (<target>.{pid}.tmp,
<target>.{pid}.partN) makes intermediate files disjoint; the final
os.replace to the bare target is atomic so last-writer-wins.

#3 _looks_like_bq_rewrite_parse_error patterns 'Syntax error' could
false-positive on a query like WHERE log_msg = 'Syntax error in foo'
that fails for an unrelated reason (quota, network) and has the
literal substring echoed in the error text. Anchored to 'Syntax error: '
(with trailing colon) — BQ always emits the colon in this error
format, user SQL string literals normally don't.
2026-05-06 13:57:29 +02:00
..
commands Merge remote-tracking branch 'origin/main' into pr180-review 2026-05-06 07:27:25 +02:00
lib feat(pull): aggregated progress + non-TTY textual fallback 2026-05-06 13:09:37 +02:00
skills chore(docs): replace stale da verbs and vendor-specific install paths 2026-05-04 21:22:19 +02:00
__init__.py feat: add Docker, CLI tool, scheduler, and agent skills 2026-03-27 15:30:03 +01:00
client.py fix: devil's advocate R2 — narrow shared-client try, PID tmp suffix, Syntax error anchor 2026-05-06 13:57:29 +02:00
config.py fix(devin-review): stale-token override + status sessions counter + lock comment 2026-05-04 21:26:30 +02:00
error_render.py chore(cli-rename): replace stale da verbs in active code paths 2026-05-04 21:10:43 +02:00
main.py Merge remote-tracking branch 'origin/main' into pr180-review 2026-05-06 07:27:25 +02:00
snapshot_meta.py chore(cli-rename): replace stale da verbs in active code paths 2026-05-04 21:10:43 +02:00
update_check.py feat(workspace-prompt): decision tree + size-hint so analyst Claude gets it right first try 2026-05-05 16:44:24 +02:00
v2_client.py feat(store): bundle export/import + agnes store update + agnes admin store push 2026-05-05 11:51:31 +02:00