플러그인 권한
권한은 사용자가 플러그인이 무엇을 할 수 있는지 결정하게 하는 메커니즘입니다. 채팅 기록 읽기부터 네트워크 요청까지를 다룹니다.
권한 모델
권한은 능력의 이름을 나타내는 문자열입니다. 매니페스트에 선언하는 것은 요청이지 자동 접근이 아닙니다. 플러그인이 활성화되기 전에 사용자가 요청된 모든 권한을 확인해야 하며, 호스트는 사용 지점마다 부여를 강제합니다.
기본 제공 집합은 안정적이고 버전이 있는 계약입니다.
| 권한 | 부여 내용 |
|---|---|
chat.read | 채팅 메시지와 메타데이터 읽기 |
chat.write | 채팅 메시지 생성 또는 수정 |
characters.read | 캐릭터와 캐릭터 카드 읽기 |
characters.write | 캐릭터 생성 또는 수정 |
lorebook.read | 로어북 항목 읽기 |
lorebook.write | 로어북 항목 생성 또는 수정 |
prompt.inspect | 조립된 프롬프트 검사 |
prompt.modify | 프롬프트 수정 또는 생성 출력 사후 처리 |
providers.register | 프로바이더 어댑터와 토크나이저 등록 |
ui.toolbar | 툴바 작업 추가 |
ui.sidebar | 사이드바 패널 추가 |
ui.messageActions | 메시지 작업 추가 |
ui.shell | 셸 슬롯에 콘텐츠 추가 |
clipboard.read | 클립보드 읽기 |
clipboard.write | 클립보드 쓰기 |
notifications | 알림 표시 |
server.routes | 백엔드 라우트 마운트 |
legacy.trusted | 신뢰할 수 있는 컨텍스트에서 문서화된 SillyTavern 레거시 코드 실행 |
범위가 있는 권한
일부 권한은 kind:scope 형식으로 작성되는 범위를 지닙니다.
network:<hostname>— 특정 호스트에서 가져오기 권한. 예:network:api.example.com. 부여되지 않은 호스트에 대한 요청은 거부됩니다.network:*— 모든 호스트에서 가져오기를 허용하는 와일드카드. 호스트는 이를 완전한 네트워크 접근으로 취급하며 동의 UI는 강화된 경고로 표시합니다. 구체적인 호스트를 나열하는 것을 선호하며, 와일드카드를 요청하는 플러그인 게시는 권장되지 않습니다.files:plugin— 플러그인 자체 데이터 디렉터리 안에서 읽기 및 쓰기.files:user-selected— 사용자가 명시적으로 선택한 파일에 대한 접근.
hasPermission은 부여된 집합을 필수 권한과 대조해 검사하고,
parsePermission은 kind:scope 문자열을 부분으로 나눕니다.
validatePermissions 함수는 빈 값, 중복, 알 수 없는 권한 같은 잘못된
문자열을 거부합니다.
부여가 강제되는 방식
권한을 선언하는 것만으로는 충분하지 않습니다. 호스트는 집행 지점에서 부여를 적용합니다.
- UI 등록은 마운트 전에
ui.*권한을 검사합니다. - 라우트는
server.routes를 검사합니다. - 권한 검사된
fetch는network:<host>를 검사합니다. - 가상 파일 시스템은
files:*를 검사합니다. - 프로바이더 및 컨텍스트 API는
providers.register와prompt.modify를 검사합니다.
능력 커널(@neotavern/plugin-sdk의 kernel 네임스페이스)은 웹 호스트와
서버 양쪽에서 부여를 검사하는 공유 계층이므로 브라우저와 백엔드가
항상 같은 실효 권리를 봅니다. 부여는 단조 증가하는 리비전으로
저장되고 부트스트랩 핸드셰이크 중 샌드박스에 전달되며 런타임에
철회할 수 있습니다. 진행 중인 작업은 CAPABILITY_REVOKED 오류로
완료되고 열린 핸들은 호스트가 닫습니다.
동의와 업데이트 시 재동의
설치는 요청된 권한의 전체 목록을 보여줍니다. 플러그인은 모든 권한을
확인할 때까지 needs-consent 상태로 유지되며, 패키지에 npm 의존성이
있으면 UI가 의존성 목록을 보여줍니다.
플러그인 업데이트는 권한 검사 관점에서 새 설치입니다. 호스트는
diffPermissions로 이전 매니페스트와 새 매니페스트의 차이를
계산합니다. 업데이트가 권한을 추가하면:
- 플러그인 런타임이 즉시 비활성화됩니다;
- 사용자에게 새 권한 동의를 요청합니다;
- 동의가 주어질 때까지 플러그인은 비활성화 상태로 유지됩니다.
권한 제거는 동의가 필요하지 않습니다. 일반 규칙은 명시적인 사용자 결정 없이는 부여된 권한 집합이 절대 커지지 않는다는 것입니다. 전체 권한 상수와 헬퍼 목록은 생성된 Plugin SDK 레퍼런스를 참조하세요.