fix(auto-reply): honor direct silent empty replies#74555
Conversation
|
Codex review: needs maintainer review before merge. What this changes: The PR updates auto-reply runner setup so explicit direct/dm Maintainer follow-up before merge: This is already an open implementation PR with a coherent patch and no blocking review findings; the remaining action is maintainer review and CI completion, not a replacement repair job. Security review: Security review cleared: The diff only changes TypeScript auto-reply policy wiring plus tests, docs, and changelog; it does not add dependencies, workflows, permissions, secrets handling, downloads, or package execution paths. Review detailsBest possible solution: Land this PR or an equivalent narrow fix after CI finishes, preserving conservative direct-chat defaults while allowing operators who explicitly set direct silent replies to get the same clean empty/reasoning-only silence handling already supported by the runner. Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 57e4994caf6d. |
aa4b926 to
dadc67a
Compare
|
Landed in 97e2f5b. Thanks @vyctorbrzezowski. Verified after rebasing onto current
|
Summary
silentReply.direct: "allow"told direct-chat prompts to useNO_REPLY, but empty or reasoning-only direct turns were still treated as failed empty responses.NO_REPLY, without changing conservative direct-chat defaults.allowEmptyAssistantReplyAsSilentonly when the resolved prompt-policy context is direct andsilentReply.directresolves toallow.AI-assisted: yes. I understand what the code changes do.
Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Root Cause (if applicable)
allowEmptyAssistantReplyAsSilentwas gated behindisGroupChatonly.silentReply.direct: "allow".disallow, so the fix must only apply to explicit direct policy context.Regression Test Plan (if applicable)
src/auto-reply/reply/get-reply-run.media-only.test.tsrunPreparedReplyis the seam that computes and forwardsallowEmptyAssistantReplyAsSilentinto the runner.src/agents/pi-embedded-runner/run.incomplete-turn.test.ts.User-visible / Behavior Changes
Operators who explicitly configure
silentReply.direct: "allow"can now have clean empty or reasoning-only direct/dm model turns treated as intentional silence. Direct chats still disallow this by default.Diagram (if applicable)
N/A
Security Impact (required)
Yes/No): NoYes/No): NoYes/No): NoYes/No): NoYes/No): NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
agents.defaults.silentReply.direct = "allow"Steps
silentReply.direct: "allow".Expected
Actual
isGroupChat.Evidence
Human Verification (required)
What you personally verified (not just CI), and how:
resolveGroupSilentReplyBehavior; direct allow requires direct prompt-policy context.Commands run:
codex review --base origin/maininitially found one P2 around native direct commands targeting another session. That finding was fixed and covered with a regression test. A final retry completed successfully with no remaining findings.Review Conversations
Compatibility / Migration
Yes/No): YesYes/No): NoYes/No): NoRisks and Mitigations
silentReply.direct: "allow"; defaults remain conservative and targeted native commands are covered.