Skip to content

openhands: strengthen role agent prompts - #243

Draft
JoTalbot wants to merge 182 commits into
mainfrom
agent/oh-prompt-upgrade-20260825
Draft

openhands: strengthen role agent prompts#243
JoTalbot wants to merge 182 commits into
mainfrom
agent/oh-prompt-upgrade-20260825

Conversation

@JoTalbot

Copy link
Copy Markdown
Owner

Что изменено

  • усилен общий протокол работы OpenHands-агентов;
  • добавлена защита от prompt injection через task/context;
  • роли получили более чёткие критерии scope, evidence, self-check и завершения;
  • Reviewer/Tester/Security/QA получили более строгие требования к доказательствам;
  • сохранены существующие permission gates и архитектура build_prompt;
  • добавлены тесты новых обязательных секций промпта.

Затронуто

  • aios_core/openhands/profiles.py
  • tests/test_openhands_profiles.py

Проверки

Изменения проверены статически; запуск CI выполняется после создания PR.

@github-actions github-actions Bot added the tests label Aug 25, 2026

Copy link
Copy Markdown
Owner Author

Обнаружил блокирующую интеграционную проблему: runner.py импортирует SpecialistReviewPipeline, но SpecialistSpawner вообще не подключён. В _run_security_review_stage() при policy.security_forced и отсутствии conversation_id выполняется raise TransitionError("security review required: Security Specialist не был запущен"). Поэтому динамический Security Specialist не запускается, а задача просто блокируется. Нужно подключить SpecialistSpawner к OHOrchestrator и передавать полученный conversation_id в extras.conversation_ids до вызова _run_review_stage(). До этого PR не готов к merge.

@arena-ai-coding-agent

Copy link
Copy Markdown

Повторная проверка head 32e62bd6 в изолированном archive выявила два merge-blocker'а (файлы не менял из-за ACTIVE coordination claim):

  1. Audit workflow падает при collection
aios_core/openhands/runner.py:52
(TaskStatus.QA, AgentRole.QA, TaskStatus.COMPLETED)
AttributeError: QA

TaskStatus из canonical orchestrator не содержит QA; ниже runner уже использует OHStatus.QA. В _MVP_STAGES также нужен OHStatus.QA (либо строка должна быть удалена, если tuple больше не источник transitions).

Воспроизведение — ровно список audit workflow в чистом git archive head:

pytest -q tests/test_openhands_checkpoint_chain.py \
  tests/test_openhands_checkpoint_identity.py \
  tests/test_openhands_checkpoint_integrity.py \
  tests/test_openhands_critical_checkpoints.py \
  tests/test_openhands_git_identity_gate.py \
  tests/test_openhands_audit_restore_fail_closed.py
  1. SpecialistSpawner несовместим с реальным Cloud API V1 contract

Официальный V1 POST /api/v1/app-conversations возвращает start-task {id: ...}; conversation появляется после wait_start_task() в поле app_conversation_id. Сейчас код делает:

conversation_id = result.get("conversation_id") or result.get("id")
start_task_id = result.get("start_task_id") or result.get("task_id")

То есть реальный start-task id ошибочно становится conversation ID, wait_start_task пропускается, затем wait_execution(start_task_id) опрашивает не тот ресурс.

Fail-closed sequence:

  1. start_task_id = start_task_id | task_id | id;
  2. conversation ID брать только из conversation_id | app_conversation_id;
  3. если conversation ID ещё нет — обязательно wait_start_task(start_task_id);
  4. извлечь app_conversation_id | conversation_id из terminal start-task;
  5. если его всё ещё нет — error; иначе wait_execution(conversation_id).

Нужен contract-test с реальным shape: start_conversation -> {"id": "st-1"}, wait_start_task -> {"status":"READY", "app_conversation_id":"conv-1"} и assertion, что execution ждёт conv-1, не st-1.

После этих двух fixes повторно запустить dedicated OpenHands audit check. Auto-spawn wiring в latest head уже присутствует, поэтому старый комментарий о полном отсутствии SpecialistSpawner частично устарел; блокирует именно Cloud V1 ID mapping + collection error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant