ACP 바인딩 명령 인증 (제안)

상태: 제안됨, 아직 구현되지 않음.

이 문서는 ACP 바인딩된 대화에서 네이티브 명령에 대한 장기 인증 모델을 설명합니다. 실험 제안이며 현재 프로덕션 동작을 대체하지 않습니다.

구현된 동작은 다음 소스 및 테스트를 참조하세요:

  • src/telegram/bot-native-commands.ts
  • src/discord/monitor/native-command.ts
  • src/auto-reply/reply/commands-core.ts

문제

현재 명령별 검사(예: /new/reset)는 허용 목록이 비어 있어도 ACP 바인딩된 채널/토픽 내에서 동작해야 합니다. 이것은 즉각적인 UX 문제를 해결하지만, 명령 이름 기반 예외는 확장성이 없습니다.

장기 방향

명령 인증을 임시 핸들러 로직에서 명령 메타데이터 + 공유 정책 평가기로 이동합니다.

1) 명령 정의에 인증 정책 메타데이터 추가

각 명령 정의가 인증 정책을 선언해야 합니다. 예시 형태:

type CommandAuthPolicy =
  | { mode: "owner_or_allowlist" } // 기본, 현재 엄격한 동작
  | { mode: "bound_acp_or_owner_or_allowlist" } // 명시적으로 바인딩된 ACP 대화에서 허용
  | { mode: "owner_only" };

/new/resetbound_acp_or_owner_or_allowlist를 사용합니다. 대부분의 다른 명령은 owner_or_allowlist로 유지됩니다.

2) 채널 간 하나의 평가기 공유

다음을 사용하여 명령 인증을 평가하는 하나의 헬퍼를 도입:

  • 명령 정책 메타데이터
  • 발신자 인증 상태
  • 해석된 대화 바인딩 상태

Telegram과 Discord 네이티브 핸들러 모두 동일한 헬퍼를 호출하여 동작 드리프트를 방지해야 합니다.

3) 바인딩 매치를 우회 경계로 사용

정책이 바인딩된 ACP 우회를 허용할 때, 현재 대화에 대해 설정된 바인딩 매치가 해석된 경우에만 인증합니다 (현재 세션 키가 ACP처럼 보인다는 이유만으로가 아님).

이를 통해 경계를 명시적으로 유지하고 우연한 확대를 최소화합니다.

이것이 더 나은 이유

  • 더 많은 명령 이름 조건 없이 미래 명령으로 확장 가능.
  • 채널 간 동작 일관성 유지.
  • 명시적 바인딩 매치를 요구하여 현재 보안 모델 보존.
  • 허용 목록을 보편적 요구 사항이 아닌 선택적 강화로 유지.

출시 계획 (미래)

  1. 명령 레지스트리 타입과 명령 데이터에 명령 인증 정책 필드 추가.
  2. 공유 평가기를 구현하고 Telegram + Discord 네이티브 핸들러 마이그레이션.
  3. /new/reset을 메타데이터 기반 정책으로 이동.
  4. 정책 모드 및 채널 인터페이스별 테스트 추가.

비목표

  • 이 제안은 ACP 세션 생명주기 동작을 변경하지 않음.
  • 이 제안은 모든 ACP 바인딩 명령에 허용 목록을 요구하지 않음.
  • 이 제안은 기존 라우트 바인딩 의미론을 변경하지 않음.