Compare commits
21
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02d6be9384 | ||
|
|
feccde9127 | ||
|
|
3b8032454b | ||
|
|
acc7a60710 | ||
|
|
13f6031cad | ||
|
|
cf23e06788 | ||
|
|
6e418c1b75 | ||
|
|
22c0c3bf80 | ||
|
|
a44f512b46 | ||
|
|
f652953414 | ||
|
|
ea3355541d | ||
|
|
accfdfac64 | ||
|
|
b62be38958 | ||
|
|
62228d1995 | ||
|
|
2801e6616e | ||
|
|
28d624be2d | ||
|
|
42aaa6d56b | ||
|
|
2aeedc9f01 | ||
|
|
2610530cd8 | ||
|
|
31ccd9fe46 | ||
|
|
a757556f9d |
@@ -591,6 +591,8 @@ jobs:
|
|||||||
и прочее — для них есть свои агенты; дублирование только шумит.
|
и прочее — для них есть свои агенты; дублирование только шумит.
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. В отличие от
|
Тебе дают путь к репозиторию, уже склонированному локально. В отличие от
|
||||||
PR-ревью, у тебя нет дифа — смотри на весь проект.
|
PR-ревью, у тебя нет дифа — смотри на весь проект.
|
||||||
|
|
||||||
@@ -657,6 +659,8 @@ jobs:
|
|||||||
такой (это домен другого агента — auth). Не дублируй чужие домены.
|
такой (это домен другого агента — auth). Не дублируй чужие домены.
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
||||||
проект, не только на недавние изменения.
|
проект, не только на недавние изменения.
|
||||||
|
|
||||||
@@ -727,6 +731,8 @@ jobs:
|
|||||||
пользовательского ввода. Не дублируй домены других агентов (auth, authz).
|
пользовательского ввода. Не дублируй домены других агентов (auth, authz).
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
||||||
проект, не только на недавние изменения. Учти: детерминированные сканеры
|
проект, не только на недавние изменения. Учти: детерминированные сканеры
|
||||||
(semgrep/gitleaks) уже гоняются на каждый PR — фокусируйся на том, что
|
(semgrep/gitleaks) уже гоняются на каждый PR — фокусируйся на том, что
|
||||||
@@ -797,6 +803,8 @@ jobs:
|
|||||||
allowlist). Не дублируй домены других агентов.
|
allowlist). Не дублируй домены других агентов.
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
||||||
проект, не только на недавние изменения.
|
проект, не только на недавние изменения.
|
||||||
|
|
||||||
@@ -866,6 +874,8 @@ jobs:
|
|||||||
криптографию, а не "нашёл строку похожую на ключ".
|
криптографию, а не "нашёл строку похожую на ключ".
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
||||||
проект.
|
проект.
|
||||||
|
|
||||||
@@ -934,6 +944,8 @@ jobs:
|
|||||||
не будет действовать недобросовестно.
|
не будет действовать недобросовестно.
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
Тебе дают путь к репозиторию, уже склонированному локально. Смотри на весь
|
||||||
проект.
|
проект.
|
||||||
|
|
||||||
@@ -1008,6 +1020,8 @@ jobs:
|
|||||||
выводом, находка проходит без реальной проверки.
|
выводом, находка проходит без реальной проверки.
|
||||||
|
|
||||||
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
Тебе НЕЛЬЗЯ писать, править или исполнять код — только read/grep/glob/lsp.
|
||||||
|
Инструмента "list" НЕ существует — для просмотра содержимого
|
||||||
|
директорий используй glob (например "**/*"), а не list.
|
||||||
|
|
||||||
Как проверять:
|
Как проверять:
|
||||||
- Открой указанный файл и строки — действительно ли код выглядит так, как
|
- Открой указанный файл и строки — действительно ли код выглядит так, как
|
||||||
@@ -1053,11 +1067,20 @@ jobs:
|
|||||||
for domain in "${DOMAIN_ARR[@]}"; do
|
for domain in "${DOMAIN_ARR[@]}"; do
|
||||||
echo "=== домен: $domain ==="
|
echo "=== домен: $domain ==="
|
||||||
set +e
|
set +e
|
||||||
./opencode run --agent "audit-$domain" --format json \
|
# timeout, не голый opencode: живьём поймали модель,
|
||||||
|
# зациклившуюся на несуществующем инструменте "list"
|
||||||
|
# (retry без самокоррекции) — без внешней границы
|
||||||
|
# такой домен держит job часами вместо ожидаемых
|
||||||
|
# единиц минут на пустом репозитории. 480с — щедрый
|
||||||
|
# запас над нормой (~1 минута на домен), не жёсткий
|
||||||
|
# лимит по содержанию: таймаут просто списывает
|
||||||
|
# домен как "без находок", а не блокирует остальные.
|
||||||
|
timeout 480 ./opencode run --agent "audit-$domain" --format json \
|
||||||
"Проведи аудит своего домена по всему репозиторию. Репозиторий уже склонирован в текущей директории (рабочая копия main)." \
|
"Проведи аудит своего домена по всему репозиторию. Репозиторий уже склонирован в текущей директории (рабочая копия main)." \
|
||||||
> "/tmp/audit-results/$domain.jsonl" 2>"/tmp/audit-results/$domain.log"
|
> "/tmp/audit-results/$domain.jsonl" 2>"/tmp/audit-results/$domain.log"
|
||||||
CODE=$?
|
CODE=$?
|
||||||
set -e
|
set -e
|
||||||
|
[ "$CODE" = "124" ] && echo " ПРЕВЫШЕН ТАЙМАУТ (480с) — домен $domain засчитан как без находок"
|
||||||
echo " код завершения: $CODE"
|
echo " код завершения: $CODE"
|
||||||
echo " --- stderr ---"
|
echo " --- stderr ---"
|
||||||
tail -30 "/tmp/audit-results/$domain.log" || true
|
tail -30 "/tmp/audit-results/$domain.log" || true
|
||||||
@@ -1151,11 +1174,22 @@ jobs:
|
|||||||
payload_text = json.dumps(cand, ensure_ascii=False)
|
payload_text = json.dumps(cand, ensure_ascii=False)
|
||||||
with open(f"/tmp/audit-results/verify-{i}.jsonl", "w") as out, \
|
with open(f"/tmp/audit-results/verify-{i}.jsonl", "w") as out, \
|
||||||
open(f"/tmp/audit-results/verify-{i}.log", "w") as errlog:
|
open(f"/tmp/audit-results/verify-{i}.log", "w") as errlog:
|
||||||
subprocess.run(
|
# timeout: та же причина, что и у доменных
|
||||||
["./opencode", "run", "--agent", "audit-verifier", "--format", "json",
|
# агентов (см. комментарий там) — верификатор
|
||||||
f"Проверь эту находку (JSON), репозиторий уже склонирован рядом: {payload_text}"],
|
# читает те же read/grep/glob/lsp и рискует
|
||||||
stdout=out, stderr=errlog,
|
# той же ловушкой на несуществующем "list".
|
||||||
)
|
timed_out = False
|
||||||
|
try:
|
||||||
|
subprocess.run(
|
||||||
|
["./opencode", "run", "--agent", "audit-verifier", "--format", "json",
|
||||||
|
f"Проверь эту находку (JSON), репозиторий уже склонирован рядом: {payload_text}"],
|
||||||
|
stdout=out, stderr=errlog, timeout=480,
|
||||||
|
)
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
timed_out = True
|
||||||
|
if timed_out:
|
||||||
|
print(f" candidate {i} ({cand.get('_domain')}): ПРЕВЫШЕН ТАЙМАУТ верификатора (480с) — находка отброшена, не подтверждена")
|
||||||
|
continue
|
||||||
verdict_text = last_text(f"/tmp/audit-results/verify-{i}.jsonl")
|
verdict_text = last_text(f"/tmp/audit-results/verify-{i}.jsonl")
|
||||||
try:
|
try:
|
||||||
verdict = json.loads(verdict_text) if verdict_text else {}
|
verdict = json.loads(verdict_text) if verdict_text else {}
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
# Какие находки блокируют merge. Читает security.yml на каждом
|
|
||||||
# скане; отсутствие файла — те же значения по умолчанию.
|
|
||||||
security:
|
security:
|
||||||
block_on:
|
block_on:
|
||||||
- critical
|
- critical
|
||||||
- high
|
- high
|
||||||
|
- medium
|
||||||
min_confidence: 0.7
|
min_confidence: 0.7
|
||||||
|
scan_enabled: true
|
||||||
|
review_enabled: true
|
||||||
|
|||||||
Reference in New Issue
Block a user