Skip to content

Approval card has no way to approve permanently (per Bot or per group) #540

Closed

Description

@Birfy

Environment

FlyBot on DSH 0.2.0-rc.2, Chinese locale. Group FlyBot 交付组 (Bots Chief / Maintainer / SelfTest / Release), roster panel.

Steps to reproduce

  1. A member Bot (here Release) runs a bash command in a group that needs a sandbox escalation.
  2. The roster shows 等你批准 with a card: title bash, Locate release sections in AGENTS.md, reason escalate sandbox to danger-full-access: 只读检索…, command grep -n -i "release\|changelog....
  3. The card offers only 拒绝 (Reject) and 允许一次 (Allow once).

Actual

Every matching request asks again. The owner: "总是一直问我审批权限,要能永久批准" / "紧急修复这个".

Expected

The owner can grant a standing approval from the card with an explicit button, so later matching requests are allowed without asking, and can revoke it later.

Owner decision

Owner decision 2026-10-20 20:11 (Asia/Shanghai, Danyang / Birfy): add a permanent "Always allow" approval to the approval card.
Owner update 2026-10-20 20:12: it must also work for a whole group (要能对群组生效). The card offers a scope choice: Always allow for this Bot (zh 此 Bot 始终允许) and Always allow for this group (zh 本群始终允许, shown when the Bot's request comes from a group). Group scope: all of the owner's Bots in that group get that permission kind auto-allowed. Owner-only (the Bot's owner), persisted across restarts, revocable from Group settings (group grants) and Bot settings (per-Bot grants). Approval stays an explicit UI control, never a typed reply (#349).

Where it sits

  • Card: core/src/client/member-status.js ApprovalCard (Reject / Allow once), and core/src/client/inbox.js InboxCard.
  • Answer path: actions.answerApproval → approval-answer (core/src/host/channel.js) → core/src/host/approvals.js answerApproval, which maps only allow → allowed-once and reject → rejected.
  • DSH: ApprovalOutcome is 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable' (@deepseek-ai/dsh-user-approval); ApprovalPolicy is 'ask' | 'never'. DSH has no persistent allow outcome, so the standing grant lives in FlyBot and answers future matching approval/request events with allowed-once through the documented waterfall (no DSH patch).

Suggested direction

Permission kind = tool name + sandbox escalation mode parsed from the DSH reason (escalate sandbox to <mode>:), e.g. bash · danger-full-access. Store grants on the Bot record / room record; check them in the approval/request listener before asking.

Activity

  1. added
    bugSomething isn't working
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    area:uiWeb/desktop UI and copy
    area:securityAuth, grants, approvals, secrets
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 20, 2026
  2. self-assigned this
    on Oct 20, 2026
  3. Birfy commented on Oct 20, 2026

    @Birfy
    CollaboratorAuthor

    Claimed (owner-ordered urgent fix, 2026-10-20 20:12 Asia/Shanghai). Branch fix/always-allow-approval on Birfy/FlyBot. Plan: FlyBot-side standing grants (per Bot / per group) checked in the approval/request waterfall; no DSH patch (DSH has no persistent outcome).

  4. added a commit that references this issue on Oct 20, 2026
    17af764
  5. removed
    agent-readyMaintainer-approved spec: an agent may take it. Only maintainers set this; never in a template
    agent-workingAn agent has claimed this issue (the claim comment names the branch)
    on Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:securityAuth, grants, approvals, secretsarea:uiWeb/desktop UI and copybugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions