feat(config): general to glm-5.2, add vision agent, drop plan model #100
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/config/glm-vision-agent"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
.opencode/opencode.json(секцияagent):plan(primary-агент теперь без явной модели — наследует глобальную из UI).general.model→ollama-cloud/glm-5.2(былоdeepseek-v4-pro); остальные поляgeneralбез изменений (steps: 150,permission.task,tools).permission.taskуgeneralиreviewerдобавлено"vision": "allow"после"scout": "allow"→{"*": "deny", "explore": "allow", "scout": "allow", "vision": "allow"}.vision:model: ollama-cloud/minimax-m3,hidden: true,permission.taskсexplore/scoutallow,toolsвсе write-опции вfalse(commit/create_pr/create_issue/merge_pr/post_review).reviewer,explore,scout,memory-syncer— без изменений..opencode/agents/vision.md(новый файл, по паттернуreviewer.md):description,mode: subagent,temperature: 0.1,steps: 150,hidden: true,permissionсedit: deny,doom_loop: deny,bashread-only allow-список (скопирован изreviewer.md, БЕЗ curl к Forgejo API — vision не работает с PR/issue).AGENTS.md: добавлена секция «Зрение» (универсальное правило, без привязки к моделям) после «Code Style» / перед «Config Edits».tests/test_permissions.py:test_agents_have_models: убранplan, добавленvision.test_agent_models_exact: убранplan;general→glm-5.2; добавленvision→minimax-m3.test_general_reviewer_task_permissions: ожидает{"*": "deny", "explore": "allow", "scout": "allow", "vision": "allow"}для general и reviewer.test_vision_readonly_and_hidden: проверяетtools(все false),hidden: trueв JSON иpermission.edit == "deny",permission.doom_loop == "deny"вvision.mdfrontmatter.tests/test_agent_frontmatter.py:vision.mdдобавлен вAGENT_FILES; счётчики «All 2»/«all 2» → «All 3»/«all 3».Почему
После PR #98 (per-agent models + task delegation) сложилась картина: основные кодинг-модели text-only, зрение есть только у
minimax-m3. Пользователь хочет:general(кодинг) сdeepseek-v4-proнаglm-5.2— предпочтение по качеству кода.visionнаminimax-m3(image+video+text) для любых задач со зрением — скриншоты, анализ UI, проверка браузера на сайтах-детекторах бот-защиты. Архитектурно оправдано: зрение нужно редко; vision-модель не расходует токены основных моделей.modelуplan(primary-агент) — модель plan'а выбирается в UI под задачу, не фиксируется в конфиге (документированное поведение opencode: primary без явной модели наследует глобальную).reviewer/explore/scout/memory-syncer— без изменений (инварианты issue).Watch out
visionсhidden: trueне виден в @-меню, но вызывается черезtask.permission.taskуgeneral/reviewerразрешаетvision(добавленоallow); уexplore/scoutнамеренно НЕ добавлено (read-only исследователи, зрение им без надобности — отдельная задача, если понадобится).vision → explore/scoutразрешено;vision → general/reviewer/memory-syncerзапрещено ("*": "deny").vision.mdbash allow-список скопирован изreviewer.md, но убран curl к Forgejo API (vision не работает с PR/issue) и убраны serena/pipeline-status/spec-status deny-правила (оставлен только базовый read-only набор + git read-only).toolsvision — управляются черезpermission(по умолчанию все MCP включены у всех агентов; vision использует antidetect-browser для скриншотов).glm-5.2,minimax-m3,deepseek-v4-pro— встроенные в opencode 1.18.18, регистрация в секцииproviderне нужна.Pending
—
Closes #99
Code Review Summary
PR добавляет агента
vision(minimax-m3, hidden, read-only), переключаетgeneralнаglm-5.2, удаляетplan(primary наследует глобальную модель), добавляет универсальное правило «Зрение» вAGENTS.md. Все 34 теста проходят,check-permissions.pyexit 0, cross-file impact безопасен (нет readers дляplan/deepseek-v4-pro).Positives
visionсhidden: true,permission.task(explore/scout allow,*: deny),toolsвсе write-опции вfalse.general/reviewerpermission.taskобновлены сvision: allow(last-match-wins сохранён).edit: deny,doom_loop: deny(внутриpermission:),mode: subagent,temperature: 0.1,steps: 150,hidden: true. Bash allow-list корректно скопирован изreviewer.mdбез curl к Forgejo API (vision не работает с PR/issue).test_vision_readonly_and_hiddenпокрывает JSONtools/hidden+ frontmatterpermission.edit/doom_loop.test_agent_frontmatter.pyкорректно обновил счётчики «2»→«3» иAGENT_FILES.test_agents_have_models/test_agent_models_exact/test_general_reviewer_task_permissionsобновлены под новый набор агентов.rgпо.opencode/scripts/иtests/не нашёл readers, ссылающихся наplanagent илиdeepseek-v4-proдляgeneral.pipeline-status.py:NEXT_ACTIONSупоминает толькоgeneral/reviewer/memory-syncer(не переименованы). Удалениеplanи смена моделиgeneralбезопасны.## Что сделано/## Почему/## Watch out/## Pendingзаполнены осмысленно,Closes #99привязан.Suggestions (info, not blocking)
"python3*": allowбез deny-правил для oracle-скриптов (pipeline-status.py,spec-status.py,project-status.py). Вreviewer.md:63-72есть явные deny-правила — уvisionих нет. Риск ниже (vision не работает с пайплайнами), но потенциально vision может запустить oracle-скрипт через bash. Fix: добавить"python3 *pipeline-status.py*": denyи аналоги дляspec-status.py/project-status.py(6 правил, как вreviewer.md:63-72).for name in ("explore", "scout", "general", "reviewer", "memory-syncer", "vision")проверяет 6. Fix: «All 6 subagents»._parse_frontmatter/_parse_yaml_blockдублируются изtest_agent_frontmatter.py(задокументировано в комментарии «Mirrors the parser intest_agent_frontmatter.py»). Fix (опционально): вынести вconftest.pyили общий helper-модуль, чтобы избежать двух копий ~40 строк.reviewer.md/memory-syncer.md— не блокирующее, minor consistency).visionнетserena_*: falseвtools(в отличие отmemory-syncer:462). PR body объясняет: vision использует MCP-тулы (antidetect-browser для скриншотов), Serena по умолчанию включена. Разумное проектное решение — не блокирующее.Verdict: APPROVE