dsh-perm-gate 0.2.1-beta.4 → 0.2.1-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.ja.md +28 -0
- package/CHANGELOG.ko.md +28 -0
- package/CHANGELOG.md +31 -0
- package/INSTALL.ja.md +14 -7
- package/INSTALL.ko.md +13 -7
- package/INSTALL.md +15 -8
- package/INSTALL.zh.md +13 -7
- package/README.ja.md +22 -13
- package/README.ko.md +23 -14
- package/README.md +26 -19
- package/README.zh.md +17 -12
- package/cordis.patch.yml +15 -3
- package/lib/client.js +7 -117
- package/lib/client.js.map +1 -1
- package/lib/runtime.d.ts +22 -5
- package/lib/runtime.js +57 -8
- package/package.json +1 -1
package/CHANGELOG.ja.md
CHANGED
|
@@ -5,6 +5,34 @@
|
|
|
5
5
|
形式は [Keep a Changelog](https://keepachangelog.com/ja/1.1.0/) に従い、
|
|
6
6
|
このプロジェクトは [Semantic Versioning](https://semver.org/spec/v2.0.0.html) に準拠します。
|
|
7
7
|
|
|
8
|
+
## [0.2.1-beta.5] - 2026-09-11
|
|
9
|
+
|
|
10
|
+
### 修正
|
|
11
|
+
|
|
12
|
+
- **DSH 0.1.2 ではゲートが全呼び出しで待機状態になり、「承認記録」ページが空のままでした。** セッションの
|
|
13
|
+
権限プリセット fold はログを `exec.agent.session.events` として読んでいました。DSH 0.1.1 はこの配列を
|
|
14
|
+
公開していましたが、0.1.2 はログを `Session.snapshotEvents()` / `ownEvents()` の背後に隠し `events`
|
|
15
|
+
メンバーを残していないため、読み取りは `undefined` を返し、`presetOf` も `undefined` を返し、
|
|
16
|
+
`presetInScope(undefined, ['permissive'])` によって `gateActive` が**すべての**呼び出しで false に
|
|
17
|
+
なりました —— ルール / grant / 拒否キーワード / 分類器 / P0 ハード拒否のいずれの判定も行われず、監査
|
|
18
|
+
イベントも記録されません(ゲート自身のティアを選択したセッションでも同様で、タブには失敗ではなく
|
|
19
|
+
「本セッションにはまだ承認記録がありません」と表示されていました)。fold は既知のすべてのアクセサ形状
|
|
20
|
+
(`events` 配列、`snapshotEvents()`、`ownEvents()`)でログを読み、ホストが何も公開しない場合にのみ
|
|
21
|
+
「イベントなし」に縮退します。fold キャッシュはログ長と末尾イベントの同一性をキーにします(0.1.2 の
|
|
22
|
+
スナップショットは同じ凍結イベントに対する毎回新しい配列のため)。`test/preset-scope.spec.ts` が両形状を
|
|
23
|
+
固定します。
|
|
24
|
+
|
|
25
|
+
### 変更
|
|
26
|
+
|
|
27
|
+
- **権限ティアの表示名を全サーフェスで「自动审查」に統一し、アイコンを廃止しました。**
|
|
28
|
+
`cordis.patch.yml` の preset `name:` が中国語の製品名になり、一般設定の既定行・入力欄のピッカー・
|
|
29
|
+
プラグイン設定タブのすべてで同じ表示になります。DSH 0.1.2 はプラグイン提供ティアの `name:` をそのまま
|
|
30
|
+
描画し、ローカライズするのは組み込み 3 値(`仅可查看` / `工作区内修改` / `完全权限`)だけなので、zh
|
|
31
|
+
セッションが見るのはこの 1 つの文字列です。マシン値は `permissive` のままです(`gatePresets` が照合
|
|
32
|
+
する値)。権限ピッカーのアイコン装飾は削除しました(`src/client/permission-icon.ts` を削除):退役した
|
|
33
|
+
`auto` ティアの盾グリフに合わせるためのもので、0.1.2 では `aria-haspopup="menu"` セレクタ経由で設定行にも
|
|
34
|
+
適用され、ピッカーのグリフは組み込み値にのみ紐づくためプラグイン ティアは描画しません。
|
|
35
|
+
|
|
8
36
|
## [Unreleased]
|
|
9
37
|
|
|
10
38
|
### 追加
|
package/CHANGELOG.ko.md
CHANGED
|
@@ -5,6 +5,34 @@
|
|
|
5
5
|
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)을 따르며,
|
|
6
6
|
이 프로젝트는 [Semantic Versioning](https://semver.org/spec/v2.0.0.html)을 준수합니다.
|
|
7
7
|
|
|
8
|
+
## [0.2.1-beta.5] - 2026-09-11
|
|
9
|
+
|
|
10
|
+
### 수정
|
|
11
|
+
|
|
12
|
+
- **DSH 0.1.2에서 게이트가 모든 호출에서 대기 상태가 되어 「승인 기록」 페이지가 비어 있었습니다.** 세션의
|
|
13
|
+
권한 preset fold가 로그를 `exec.agent.session.events`로 읽었습니다. DSH 0.1.1은 이 배열을
|
|
14
|
+
노출했지만 0.1.2는 로그를 `Session.snapshotEvents()` / `ownEvents()` 뒤로 감추고 `events` 멤버를
|
|
15
|
+
남기지 않아, 읽기가 `undefined`를 반환하고 `presetOf`도 `undefined`를 반환했으며
|
|
16
|
+
`presetInScope(undefined, ['permissive'])` 때문에 `gateActive`가 **모든** 호출에서 false가
|
|
17
|
+
되었습니다 —— 규칙 / grant / 거부 키워드 / 분류기 / P0 하드 거부 판정이 전혀 없고 감사 이벤트도
|
|
18
|
+
기록되지 않았습니다(게이트 자체 티어를 선택한 세션에서도 마찬가지여서, 탭에는 실패가 아니라
|
|
19
|
+
「이 세션에는 아직 승인 기록이 없습니다」가 표시되었습니다). fold는 알려진 모든 접근자 형태
|
|
20
|
+
(`events` 배열, `snapshotEvents()`, `ownEvents()`)로 로그를 읽고, 호스트가 아무것도 노출하지
|
|
21
|
+
않을 때만 "이벤트 없음"으로 축소됩니다. fold 캐시는 로그 길이와 마지막 이벤트의 동일성을 키로
|
|
22
|
+
사용합니다(0.1.2 스냅샷은 동일한 동결 이벤트에 대한 매번 새로운 배열입니다).
|
|
23
|
+
`test/preset-scope.spec.ts`가 두 형태를 고정합니다.
|
|
24
|
+
|
|
25
|
+
### 변경
|
|
26
|
+
|
|
27
|
+
- **권한 티어의 표시 이름을 모든 화면에서 「自动审查」로 통일하고 아이콘을 제거했습니다.**
|
|
28
|
+
`cordis.patch.yml`의 preset `name:`이 중국어 제품명이 되어 일반 설정 기본 행, 입력창 선택기,
|
|
29
|
+
플러그인 설정 탭이 모두 같은 이름을 표시합니다. DSH 0.1.2는 플러그인 티어의 `name:`을 그대로
|
|
30
|
+
렌더링하고 내장 세 값(`仅可查看` / `工作区内修改` / `完全权限`)만 지역화하므로, zh 세션이 보는 것은
|
|
31
|
+
이 하나의 문자열입니다. 머신 값은 `permissive` 그대로입니다(`gatePresets`가 대조하는 값).
|
|
32
|
+
권한 선택기의 아이콘 장식은 제거했습니다(`src/client/permission-icon.ts` 삭제): 은퇴한 `auto` 티어의
|
|
33
|
+
방패 글리프에 맞추기 위한 것이었고, 0.1.2에서는 `aria-haspopup="menu"` 선택자를 통해 설정 행에도
|
|
34
|
+
적용되었으며, 선택기의 글리프는 내장 값에만 연결되므로 플러그인 티어는 그리지 않습니다.
|
|
35
|
+
|
|
8
36
|
## [Unreleased]
|
|
9
37
|
|
|
10
38
|
### 추가
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,37 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.1-beta.5] - 2026-09-11
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **The gate stood down on every call under DSH 0.1.2, so the Approvals page stayed empty.** The
|
|
13
|
+
session's permission-preset fold read the log as `exec.agent.session.events`. DSH 0.1.1 exposed
|
|
14
|
+
that array; 0.1.2 made the log private behind `Session.snapshotEvents()` / `ownEvents()` and kept
|
|
15
|
+
no `events` member, so the read returned `undefined`, `presetOf` answered `undefined`, and
|
|
16
|
+
`presetInScope(undefined, ['permissive'])` made `gateActive` false for **every** call: no rule,
|
|
17
|
+
grant, deny-keyword, classifier, or P0 hard-deny decision, and no audit event — including in
|
|
18
|
+
sessions that had selected the gate's own tier, which is why the tab showed "本会话暂无审批记录"
|
|
19
|
+
rather than a failure. The fold now reads the log through every known accessor shape
|
|
20
|
+
(`events` array, `snapshotEvents()`, `ownEvents()`) and degrades to "no events" only when the host
|
|
21
|
+
exposes none; the fold cache keys on the log's length plus its last event's identity, since a
|
|
22
|
+
0.1.2 snapshot is a fresh array over the same frozen events on every read. `test/preset-scope.spec.ts`
|
|
23
|
+
pins both shapes: a `0.1.2`-shaped session must yield a decision (and a recorded event), and a
|
|
24
|
+
grown log must re-fold so a preset switch takes effect on the next call.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- **The permission tier is labelled 自动审查 on every surface, with no icon.** The preset's
|
|
29
|
+
`name:` in `cordis.patch.yml` is now the Chinese product string, and the General-settings default
|
|
30
|
+
row, the composer picker, and the plugin's settings tab all show it. DSH 0.1.2 renders a
|
|
31
|
+
plugin-contributed tier's `name:` verbatim and localizes only the three built-in values
|
|
32
|
+
(`仅可查看` / `工作区内修改` / `完全权限`), so the one host-supplied string is what a zh session sees;
|
|
33
|
+
the tier's machine value stays `permissive`, which is what `gatePresets` matches. The
|
|
34
|
+
permission-picker icon decoration is removed (`src/client/permission-icon.ts` deleted): it existed
|
|
35
|
+
to match the retired `auto` tier's shield glyph, it applied to the settings row through the
|
|
36
|
+
0.1.2 `aria-haspopup="menu"` selector, and a plugin tier draws no glyph because the composer's
|
|
37
|
+
glyphs are keyed to the built-in values only.
|
|
38
|
+
|
|
8
39
|
## [0.2.1-beta.4] - 2026-09-11
|
|
9
40
|
|
|
10
41
|
### Added
|
package/INSTALL.ja.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
`dsh-perm-gate` バージョン **0.2.1-beta.
|
|
15
|
+
`dsh-perm-gate` バージョン **0.2.1-beta.5**。判定チェーン、ルールファイル形式、自动审查
|
|
16
16
|
ティアについては [日本語 README](./README.ja.md) を参照してください。
|
|
17
17
|
|
|
18
18
|
## 必要条件
|
|
@@ -44,7 +44,7 @@ DSH は `engines.dsh` を強制しないため、tag が選択メカニズムで
|
|
|
44
44
|
dsh plugin --profile web add dsh-perm-gate
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
公開パッケージを取得し、`cordis.patch.yml
|
|
47
|
+
公開パッケージを取得し、`cordis.patch.yml`(自动审查セッション ティアとプラグイン
|
|
48
48
|
本体の挿入)を適用して、host / client の両方を組み込みます。
|
|
49
49
|
|
|
50
50
|
## ソースからインストール
|
|
@@ -99,7 +99,7 @@ dsh profile reload --profile web
|
|
|
99
99
|
追加します。
|
|
100
100
|
3. それらが提供していた preset の上書きを削除します。`cordis.patch.yml` は
|
|
101
101
|
`permission.config.presets` を**丸ごと置換**するため、他プラグインの古い
|
|
102
|
-
key
|
|
102
|
+
key 単位パッチが自动审查ティア(または組み込みティア)を黙って消すことがあります。
|
|
103
103
|
4. profile を再読込し、後述の `--list` で検証します。
|
|
104
104
|
|
|
105
105
|
## 検証
|
|
@@ -124,7 +124,7 @@ dsh-perm-gate --rules permissions.yaml --tool bash --args '{"command":"pnpm inst
|
|
|
124
124
|
}
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
UI では **設定 → プラグイン →
|
|
127
|
+
UI では **設定 → プラグイン → 自动审查** に、1 つのスイッチと 4 つの
|
|
128
128
|
バックエンド戦略トグルが表示されます。
|
|
129
129
|
|
|
130
130
|
## アンインストール
|
|
@@ -134,12 +134,12 @@ dsh plugin --profile web remove dsh-perm-gate
|
|
|
134
134
|
dsh profile reload --profile web
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
プラグインを削除するとパッチの寄与も失われるため、自动审查ティアはセッションの
|
|
138
138
|
権限ピッカーから再び消えます。
|
|
139
139
|
|
|
140
140
|
## トラブルシューティング
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
**権限ピッカーに自动审查ティアが出ない。**
|
|
143
143
|
DSH の bundle patch は `permission.config.presets` を key 単位でマージせず**全体置換**
|
|
144
144
|
します。profile を再読込して `cordis.patch.yml` を再適用し、後から読み込まれる
|
|
145
145
|
プラグインが `presets` を上書きしていないか確認してください。
|
|
@@ -151,9 +151,16 @@ loud-fail し、暗黙に無効化されることはありません。
|
|
|
151
151
|
|
|
152
152
|
**`llmAssist` が発火しない。**
|
|
153
153
|
`classifierEndpoint` / `classifierModel` / `classifierApiKey` が必要です
|
|
154
|
-
(**設定 → プラグイン →
|
|
154
|
+
(**設定 → プラグイン → 自动审查** または `cordis.yml` で設定)。
|
|
155
155
|
欠落や通信エラー時は人手のシームへフォールバックします。設計上 fail-closed です。
|
|
156
156
|
|
|
157
|
+
**「承認記録」ページが空のまま。**
|
|
158
|
+
ゲートが動作するのは `gatePresets` に列挙したティア(既定 `['permissive']`、
|
|
159
|
+
ピッカーでの表示名が「自动审查」)だけなので、他のティアのセッションでは
|
|
160
|
+
イベントを一切記録しません —— 記録したいセッションで権限ピッカーから
|
|
161
|
+
「自动审查」を選んでください。preset を一度も選んでいないセッションも対象外です。
|
|
162
|
+
新しいセッションの初期ティアは `permission.defaultPreset` 設定で決まります。
|
|
163
|
+
|
|
157
164
|
**設定カードに「設定名前空間が利用できません」と出る。**
|
|
158
165
|
プラグインが現在の profile に組み込まれていません。
|
|
159
166
|
`dsh plugin --profile web add dsh-perm-gate` を実行して再読込してください。
|
package/INSTALL.ko.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
`dsh-perm-gate` 버전 **0.2.1-beta.
|
|
15
|
+
`dsh-perm-gate` 버전 **0.2.1-beta.5**. 결정 체인, 규칙 파일 형식, 自动审查 티어는
|
|
16
16
|
[한국어 README](./README.ko.md)를 참고하세요.
|
|
17
17
|
|
|
18
18
|
## 요구 사항
|
|
@@ -44,7 +44,7 @@ DSH는 `engines.dsh`를 강제하지 않으므로, tag는 선택 메커니즘이
|
|
|
44
44
|
dsh plugin --profile web add dsh-perm-gate
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
게시된 패키지를 가져오고 `cordis.patch.yml`(
|
|
47
|
+
게시된 패키지를 가져오고 `cordis.patch.yml`(自动审查 세션 티어 + 플러그인 항목)을
|
|
48
48
|
적용하여 host / client 양쪽을 조립합니다.
|
|
49
49
|
|
|
50
50
|
## 소스에서 설치
|
|
@@ -98,7 +98,7 @@ dsh profile reload --profile web
|
|
|
98
98
|
2. 위 네 플러그인을 `cordis.yml`에서 제거하고 `dsh-perm-gate` 항목만 추가합니다.
|
|
99
99
|
3. 해당 플러그인들이 제공하던 preset 재정의를 삭제합니다. `cordis.patch.yml`은
|
|
100
100
|
`permission.config.presets`를 **전체 교체**하므로, 다른 플러그인의 오래된
|
|
101
|
-
key 단위 패치가
|
|
101
|
+
key 단위 패치가 自动审查 티어(또는 내장 티어)를 조용히 없앨 수 있습니다.
|
|
102
102
|
4. profile을 다시 불러오고 아래의 `--list`로 검증합니다.
|
|
103
103
|
|
|
104
104
|
## 검증
|
|
@@ -123,7 +123,7 @@ dsh-perm-gate --rules permissions.yaml --tool bash --args '{"command":"pnpm inst
|
|
|
123
123
|
}
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
UI의 **설정 → 플러그인 →
|
|
126
|
+
UI의 **설정 → 플러그인 → 自动审查**에 스위치 하나와 백엔드 전략 토글
|
|
127
127
|
네 개가 표시되어야 합니다.
|
|
128
128
|
|
|
129
129
|
## 제거
|
|
@@ -133,12 +133,12 @@ dsh plugin --profile web remove dsh-perm-gate
|
|
|
133
133
|
dsh profile reload --profile web
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
플러그인을 제거하면 패치 기여도 사라지므로
|
|
136
|
+
플러그인을 제거하면 패치 기여도 사라지므로 自动审查 티어가 세션 권한 선택기에서
|
|
137
137
|
다시 사라집니다.
|
|
138
138
|
|
|
139
139
|
## 문제 해결
|
|
140
140
|
|
|
141
|
-
**권한 선택기에
|
|
141
|
+
**권한 선택기에 自动审查 티어가 없습니다.**
|
|
142
142
|
DSH 번들 패치는 `permission.config.presets`를 key 단위로 병합하지 않고 **전체 교체**
|
|
143
143
|
합니다. profile을 다시 불러와 `cordis.patch.yml`을 재적용하고, 더 늦게 로드되는
|
|
144
144
|
플러그인이 `presets`를 덮어쓰지 않는지 확인하세요.
|
|
@@ -150,9 +150,15 @@ DSH 번들 패치는 `permission.config.presets`를 key 단위로 병합하지
|
|
|
150
150
|
|
|
151
151
|
**`llmAssist`가 동작하지 않습니다.**
|
|
152
152
|
`classifierEndpoint`, `classifierModel`, `classifierApiKey`가 필요합니다
|
|
153
|
-
(**설정 → 플러그인 →
|
|
153
|
+
(**설정 → 플러그인 → 自动审查** 또는 `cordis.yml`에서 지정).
|
|
154
154
|
값이 없거나 네트워크 오류가 나면 사람 승인 심으로 폴백합니다. 설계상 fail-closed입니다.
|
|
155
155
|
|
|
156
|
+
**「승인 기록」 페이지가 계속 비어 있습니다.**
|
|
157
|
+
게이트는 `gatePresets`에 나열한 티어(기본 `['permissive']`, 선택기 표시명 「自动审查」)
|
|
158
|
+
에서만 동작하므로 다른 티어의 세션에서는 이벤트를 전혀 기록하지 않습니다 —— 기록하려면
|
|
159
|
+
해당 세션에서 권한 선택기로 「自动审查」를 고르세요. preset을 한 번도 선택하지 않은
|
|
160
|
+
세션도 범위 밖입니다. 새 세션의 초기 티어는 `permission.defaultPreset` 설정이 정합니다.
|
|
161
|
+
|
|
156
162
|
**설정 카드에 "설정 네임스페이스를 사용할 수 없습니다"가 표시됩니다.**
|
|
157
163
|
플러그인이 현재 profile에 조립되지 않았습니다.
|
|
158
164
|
`dsh plugin --profile web add dsh-perm-gate`를 실행하고 다시 불러오세요.
|
package/INSTALL.md
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
`dsh-perm-gate` version **0.2.1-beta.
|
|
16
|
-
decision chain, the rules file format and the
|
|
15
|
+
`dsh-perm-gate` version **0.2.1-beta.5**. Continue with the [README](./README.md) for the
|
|
16
|
+
decision chain, the rules file format and the 自动审查 tier.
|
|
17
17
|
|
|
18
18
|
## Requirements
|
|
19
19
|
|
|
@@ -43,7 +43,7 @@ covers both lines and how the tags are published.
|
|
|
43
43
|
dsh plugin --profile web add dsh-perm-gate
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
This pulls the published package, applies its `cordis.patch.yml` (the
|
|
46
|
+
This pulls the published package, applies its `cordis.patch.yml` (the 自动审查
|
|
47
47
|
session tier plus the plugin entry) and assembles both halves.
|
|
48
48
|
|
|
49
49
|
## Install from source
|
|
@@ -100,7 +100,7 @@ and `dsh-movein-permissions`.
|
|
|
100
100
|
entry above.
|
|
101
101
|
3. Delete any preset overrides those plugins contributed — `cordis.patch.yml`
|
|
102
102
|
**replaces** `permission.config.presets` wholesale, so stale per-key patches
|
|
103
|
-
from other plugins can silently drop the
|
|
103
|
+
from other plugins can silently drop the 自动审查 tier (or a built-in one).
|
|
104
104
|
4. Reload the profile and verify with `--list` (below).
|
|
105
105
|
|
|
106
106
|
## Verify
|
|
@@ -125,7 +125,7 @@ Expected `--list` output shape:
|
|
|
125
125
|
}
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
In the UI, **Settings → Plugins →
|
|
128
|
+
In the UI, **Settings → Plugins → 自动审查** should render one
|
|
129
129
|
switch plus the four backend strategy toggles.
|
|
130
130
|
|
|
131
131
|
## Uninstall
|
|
@@ -135,12 +135,12 @@ dsh plugin --profile web remove dsh-perm-gate
|
|
|
135
135
|
dsh profile reload --profile web
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
Removing the plugin also removes its patch contribution, so the
|
|
138
|
+
Removing the plugin also removes its patch contribution, so the 自动审查 tier
|
|
139
139
|
disappears from the session permission picker again.
|
|
140
140
|
|
|
141
141
|
## Troubleshooting
|
|
142
142
|
|
|
143
|
-
**The
|
|
143
|
+
**The 自动审查 tier is missing from the permission picker.**
|
|
144
144
|
The DSH bundle patch replaces the whole `permission.config.presets` map instead of
|
|
145
145
|
merging per key. Reload the profile so `cordis.patch.yml` is re-applied, and make
|
|
146
146
|
sure no later plugin overwrites `presets`.
|
|
@@ -152,10 +152,17 @@ fails loud at load — it is never silently disabled.
|
|
|
152
152
|
|
|
153
153
|
**`llmAssist` never fires.**
|
|
154
154
|
It needs `classifierEndpoint`, `classifierModel` and `classifierApiKey` (set them
|
|
155
|
-
in **Settings → Plugins →
|
|
155
|
+
in **Settings → Plugins → 自动审查** or in `cordis.yml`). Any
|
|
156
156
|
missing value or network error falls back to the human seam — the gate is
|
|
157
157
|
fail-closed by design.
|
|
158
158
|
|
|
159
|
+
**The Approvals tab stays empty.**
|
|
160
|
+
The gate is scoped to the tiers listed in `gatePresets` (default
|
|
161
|
+
`['permissive']`), so it records nothing while the session runs in another tier —
|
|
162
|
+
pick 自动审查 in the permission picker for the session you want recorded. A
|
|
163
|
+
session that has never selected a preset is out of scope too. New sessions start
|
|
164
|
+
in the tier named by the `permission.defaultPreset` setting.
|
|
165
|
+
|
|
159
166
|
**Settings card shows "Settings namespace unavailable".**
|
|
160
167
|
The plugin is not assembled into the active profile. Run
|
|
161
168
|
`dsh plugin --profile web add dsh-perm-gate` and reload.
|
package/INSTALL.zh.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
`dsh-perm-gate` 版本 **0.2.1-beta.
|
|
15
|
+
`dsh-perm-gate` 版本 **0.2.1-beta.5**。裁决链、规则文件格式与自动审查档位请见
|
|
16
16
|
[中文 README](./README.zh.md)。
|
|
17
17
|
|
|
18
18
|
## 前置条件
|
|
@@ -42,7 +42,7 @@ DSH 不强制 `engines.dsh`,因此 tag 是选择机制而非兼容性关卡。
|
|
|
42
42
|
dsh plugin --profile web add dsh-perm-gate
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
该命令会拉取已发布的包、应用 `cordis.patch.yml
|
|
45
|
+
该命令会拉取已发布的包、应用 `cordis.patch.yml`(自动审查会话档位 + 插件条目),
|
|
46
46
|
并装配 host / client 两半。
|
|
47
47
|
|
|
48
48
|
## 从源码安装
|
|
@@ -95,7 +95,7 @@ dsh profile reload --profile web
|
|
|
95
95
|
2. 从 `cordis.yml` 删除上述四个插件,只加入唯一的 `dsh-perm-gate` 条目。
|
|
96
96
|
3. 删除这些插件贡献的 preset 覆盖 —— `cordis.patch.yml` 是**整体替换**
|
|
97
97
|
`permission.config.presets`,其他插件遗留的逐 key 补丁可能静默抹掉
|
|
98
|
-
|
|
98
|
+
自动审查档(或某个内置档)。
|
|
99
99
|
4. 重载 profile,并用下面的 `--list` 验证。
|
|
100
100
|
|
|
101
101
|
## 验证
|
|
@@ -120,7 +120,7 @@ dsh-perm-gate --rules permissions.yaml --tool bash --args '{"command":"pnpm inst
|
|
|
120
120
|
}
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
UI 里 **设置 → 插件 →
|
|
123
|
+
UI 里 **设置 → 插件 → 自动审查** 应渲染出一个开关加四个后台策略开关。
|
|
124
124
|
|
|
125
125
|
## 卸载
|
|
126
126
|
|
|
@@ -129,11 +129,11 @@ dsh plugin --profile web remove dsh-perm-gate
|
|
|
129
129
|
dsh profile reload --profile web
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
移除插件也会移除它的补丁贡献,自动审查档位会重新从会话权限下拉框消失。
|
|
133
133
|
|
|
134
134
|
## 排查
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
**权限下拉框里没有自动审查档。**
|
|
137
137
|
DSH 的 bundle patch 是整体替换 `permission.config.presets`,而非逐 key 合并。
|
|
138
138
|
请重载 profile 让 `cordis.patch.yml` 重新生效,并确认没有更晚加载的插件覆盖了
|
|
139
139
|
`presets`。
|
|
@@ -144,9 +144,15 @@ DSH 的 bundle patch 是整体替换 `permission.config.presets`,而非逐 key
|
|
|
144
144
|
|
|
145
145
|
**`llmAssist` 从不触发。**
|
|
146
146
|
需要配置 `classifierEndpoint`、`classifierModel`、`classifierApiKey`
|
|
147
|
-
(在 **设置 → 插件 →
|
|
147
|
+
(在 **设置 → 插件 → 自动审查** 或 `cordis.yml` 中填写)。
|
|
148
148
|
任一缺失或网络错误都会回退到人工接缝 —— 门禁按设计 fail-closed。
|
|
149
149
|
|
|
150
|
+
**「审批记录」页一直是空的。**
|
|
151
|
+
门禁只在 `gatePresets` 列出的档位里工作(默认 `['permissive']`,即下拉框里的
|
|
152
|
+
「自动审查」),会话处在别的档位时它不记录任何事件——请在权限下拉框为本会话选择
|
|
153
|
+
「自动审查」。从未选过档位的会话同样在范围之外。新会话的初始档位由
|
|
154
|
+
`permission.defaultPreset` 设置决定。
|
|
155
|
+
|
|
150
156
|
**设置卡片显示「设置命名空间不可用」。**
|
|
151
157
|
该插件未装配进当前 profile。执行 `dsh plugin --profile web add dsh-perm-gate`
|
|
152
158
|
并重载。
|
package/README.ja.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
> **互換性に関する注記:** v0.2.1-beta.
|
|
15
|
+
> **互換性に関する注記:** v0.2.1-beta.5 は `ja` / `ko` 辞書を同梱しますが、公式 DSH の
|
|
16
16
|
> `LocaleRuntime` が公開するのは `zh` / `en` のみです(`LOCALE_IDS = ["zh", "en"]`)。
|
|
17
17
|
> 素の DSH で `ja` / `ko` を選択すると `locale "<id>" is not registered` になります。
|
|
18
18
|
> `LOCALE_IDS`(locale-settings.ts)と `LOCALES` ラベル(client/index.ts)を更新した
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
> メソッドであるため、`typeof` プロブで読み取り、欠落時やエラー時には「ポリシー
|
|
41
41
|
> 不明」にフォールバックします。
|
|
42
42
|
|
|
43
|
-
バージョン **0.2.1-beta.
|
|
43
|
+
バージョン **0.2.1-beta.5** — 変更履歴は [日本語 changelog](./CHANGELOG.ja.md) を参照。
|
|
44
44
|
|
|
45
45
|
DeepSeek Harness 向けの、単一・自己完結・決定論優先・fail-closed な権限ゲートです。
|
|
46
46
|
|
|
@@ -77,10 +77,11 @@ DSH の安全まわりのエコシステムでは、この役割が `dsh-permiss
|
|
|
77
77
|
loud fail、ソースの内容ハッシュによるコンパイル キャッシュ。
|
|
78
78
|
- **監査** — すべての判定を `callId` 付きの `{ignorable:true}` イベントとして記録。
|
|
79
79
|
モデルに見える理由と記録される結果は常に一致します。
|
|
80
|
-
-
|
|
81
|
-
|
|
80
|
+
- **自动审查ティア**(`permissive`)— read-only / full-access / whitelist とは別の**独立した承認
|
|
81
|
+
モード**。汎用の「自動承認」でもなく、包括的な権限付与でもありません。フロントが露出する
|
|
82
82
|
のは**単一スイッチ**(`permissive`)だけで、バックエンドの 4 つの戦略は**組み合わせ
|
|
83
83
|
可能**でプラグイン設定から制御されます。P0 に対しては依然 fail-closed です。
|
|
84
|
+
権限ピッカーと設定行はいずれも製品名「自动审查」で表示し、アイコンは描きません。
|
|
84
85
|
- **サンドボックス昇格の自動回答**(`trustEscalation`)— サンドボックス昇格は shell /
|
|
85
86
|
pwsh / edit ツールの**内部**(`tools/pre-execute` 後)から発生するためゲートはそれを
|
|
86
87
|
見ておらず、ゲートが自動許可した呼び出しでも確認プロンプトが表示されます。この戦略を
|
|
@@ -141,13 +142,19 @@ permissions:
|
|
|
141
142
|
|
|
142
143
|
完全な例: [examples/permissions.example.yaml](./examples/permissions.example.yaml)
|
|
143
144
|
|
|
144
|
-
##
|
|
145
|
+
## 自动审查ティア(マシン値 `permissive`)
|
|
145
146
|
|
|
146
|
-
|
|
147
|
-
|
|
147
|
+
自动审查は権限ピッカーの中で 読み取り専用 / ワークスペース内変更 / 完全権限 /
|
|
148
|
+
許可リストと並ぶ**独立した承認ティア**です。汎用の「自動承認」ではなく、包括的な権限を
|
|
148
149
|
発行することもありません。人間/LLM のシーム**の前**で判定を狭めたり広めたりする
|
|
149
150
|
だけで、P0 ハード拒否は単調かつ交渉不能のままです。
|
|
150
151
|
|
|
152
|
+
ピッカーの表示名は**ホストが供給する製品名**で、言語別辞書の項目ではありません。DSH 0.1.2 は
|
|
153
|
+
プラグイン提供ティアの `name:` を 2 つの権限サーフェス(一般設定の既定行と入力欄のピッカー)で
|
|
154
|
+
そのまま描画し、自前のローカライズ済みラベルは 3 つの組み込み値にしか与えないため、
|
|
155
|
+
`cordis.patch.yml` は全セッション共通で中国語ラベルを配布します。このティアは**アイコンを
|
|
156
|
+
描きません** —— ピッカーのグリフは組み込み値にのみ紐づきます。
|
|
157
|
+
|
|
151
158
|
`cordis.yml` では:
|
|
152
159
|
|
|
153
160
|
```yaml
|
|
@@ -187,7 +194,7 @@ Whitelist と並ぶ**独立した承認ティア**です。「自動承認」で
|
|
|
187
194
|
キー化され、昇格リクエストがこれを繰り返す)を記憶し、昇格をここで `allowed-once` と自答します。
|
|
188
195
|
**すべてが満たされる場合のみ**適用されます:
|
|
189
196
|
|
|
190
|
-
-
|
|
197
|
+
- 自动审查ティアがオンで `trustEscalation` がオン;
|
|
191
198
|
- 呼び出しにゲートが許可した `callId` があり、ツール名が一致;
|
|
192
199
|
- 理由は認識された昇格で `workspace-write` または `danger-full-access` を命名。
|
|
193
200
|
|
|
@@ -199,15 +206,15 @@ never` パススルー — は人手に変更なく委譲されるため、将
|
|
|
199
206
|
|
|
200
207
|
### 選択可能なセッション ティア
|
|
201
208
|
|
|
202
|
-
`cordis.patch.yml` は DSH の `permission.config.presets`
|
|
203
|
-
|
|
204
|
-
名称
|
|
209
|
+
`cordis.patch.yml` は DSH の `permission.config.presets` に、ワークスペース内変更と
|
|
210
|
+
完全権限の間に `permissive` preset(`sandbox: workspace-write`、`approval: ask`、
|
|
211
|
+
名称 **自动审查**)を追加します。DSH の bundle patch はこの map を**全体置換**するため
|
|
205
212
|
(キー単位のマージではありません)、組み込み 3 ティア
|
|
206
213
|
(`read-only` / `workspace-write` / `danger-full-access`、
|
|
207
214
|
`@deepseek-ai/dsh-base/cordis.patch.yml` 由来)も再記載する必要があり、
|
|
208
215
|
`test/patch-presets.spec.ts` がそのキー集合を固定しています。したがって
|
|
209
216
|
セッションの権限ピッカーには「auto-approval」ではなく、**独立して選択できる承認
|
|
210
|
-
|
|
217
|
+
ティア**として「自动审查」が並びます。
|
|
211
218
|
|
|
212
219
|
ゲートが動作するのは **`gatePresets` に列挙したティアの中だけ**です(既定 `['permissive']`、
|
|
213
220
|
このプラグインが追加するティア)。それ以外のティア(Read Only / Workspace Write /
|
|
@@ -245,7 +252,9 @@ Full access / `custom`)では、ゲートの判定フローは**一切実行
|
|
|
245
252
|
|
|
246
253
|
人手に回した `ask` は回答が返るまで追跡されます。受動的な `approval/request` オブザーバが閉じた結果を記録し(`allowed-once` → **承認**、`rejected` → **拒否**、`cancelled` → **キャンセル**、`unavailable` → 拒否=承認チャネルなし)、オブザーバが関連付けできない場合(`callId` 欠落・approval サービスなし・上流リスナーの短絡)は `tools/result` が同じ ask をフォールバックとして解決します。承認時には承認後の学習進捗(`n`/しきい値)を表示し、通知バーも 3 つの終態にラベルを付けます。
|
|
247
254
|
|
|
248
|
-
さらにプリセットの**拒否キーワード黑名単**(dsh-approval-gate の `DEFAULT_DENY_KEYWORDS` を継承:`rm -rf`、`push --force`、`drop table`、`mkfs`、`git reset --hard`、`docker system prune` など)を備え、テキストがキーワードを含む呼び出し(大小文字を区別しない部分一致)は許可リスト / 許可 / LLM より先に拒否します。設定カードでリストとして編集でき(プリセット項目にはタグ付き、ワンクリック復元対応)、未設定・空ならプリセットを適用します——黑名単が静かに無効化されることはありません。
|
|
255
|
+
さらにプリセットの**拒否キーワード黑名単**(dsh-approval-gate の `DEFAULT_DENY_KEYWORDS` を継承:`rm -rf`、`push --force`、`drop table`、`mkfs`、`git reset --hard`、`docker system prune` など)を備え、テキストがキーワードを含む呼び出し(大小文字を区別しない部分一致)は許可リスト / 許可 / LLM より先に拒否します。設定カードでリストとして編集でき(プリセット項目にはタグ付き、ワンクリック復元対応)、未設定・空ならプリセットを適用します——黑名単が静かに無効化されることはありません。
|
|
256
|
+
このティアは権限ピッカーに**アイコンを表示しません** —— ピッカーのグリフは組み込み 3 値にのみ
|
|
257
|
+
紐づき、プラグイン提供ティアはテキストのみです。
|
|
249
258
|
|
|
250
259
|
|
|
251
260
|
## CLI(スタンドアロン dry-run)
|
package/README.ko.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- [日本語 changelog](./CHANGELOG.ja.md)
|
|
13
13
|
- [한국어 changelog](./CHANGELOG.ko.md)
|
|
14
14
|
|
|
15
|
-
> **호환성 안내:** v0.2.1-beta.
|
|
15
|
+
> **호환성 안내:** v0.2.1-beta.5은 `ja` / `ko` 사전을 포함하지만, 공식 DSH의 `LocaleRuntime`은
|
|
16
16
|
> `zh` / `en`만 노출합니다(`LOCALE_IDS = ["zh", "en"]`). 기본 DSH에서 `ja` / `ko`를
|
|
17
17
|
> 선택하면 `locale "<id>" is not registered` 오류가 발생합니다. `LOCALE_IDS`
|
|
18
18
|
> (locale-settings.ts)와 `LOCALES` 라벨(client/index.ts)을 갱신한 DSH fork를 사용해
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
> 모두에서 user-approval 서비스의 **개인** 메소드이므로 `typeof` 프로브를 통해
|
|
39
39
|
> 읽으며, 누락되거나 예외 발생 시 "정책_unknown"으로 후퇴합니다.
|
|
40
40
|
|
|
41
|
-
버전 **0.2.1-beta.
|
|
41
|
+
버전 **0.2.1-beta.5** — 변경 내역은 [한국어 changelog](./CHANGELOG.ko.md)를 참고하세요.
|
|
42
42
|
|
|
43
43
|
DeepSeek Harness용 단일·자족적·결정론 우선·fail-closed 권한 게이트입니다.
|
|
44
44
|
|
|
@@ -75,10 +75,11 @@ DSH 안전 생태계에서는 이 역할이 `dsh-permission-rules` / `dsh-auto-m
|
|
|
75
75
|
소스 콘텐츠 해시 기반 컴파일 캐시.
|
|
76
76
|
- **감사** — 모든 판정을 `callId`와 함께 `{ignorable:true}` 이벤트로 기록합니다.
|
|
77
77
|
모델에 보이는 이유와 기록된 결과는 항상 일치합니다.
|
|
78
|
-
-
|
|
79
|
-
모드**. "자동 승인"도 아니고 포괄적 권한 부여도 아닙니다. 프론트는 **단일 스위치**
|
|
78
|
+
- **自动审查 티어**(`permissive`) — read-only / full-access / whitelist와 구별되는 **독립 승인
|
|
79
|
+
모드**. 범용 "자동 승인"도 아니고 포괄적 권한 부여도 아닙니다. 프론트는 **단일 스위치**
|
|
80
80
|
(`permissive`)만 노출하고, 백엔드의 네 가지 전략은 **조합 가능**하며 플러그인
|
|
81
81
|
설정으로 제어됩니다. P0에 대해서는 여전히 fail-closed입니다.
|
|
82
|
+
권한 선택기와 설정 행 모두 제품명 「自动审查」로 표시하며 아이콘은 그리지 않습니다.
|
|
82
83
|
- **샌드박스 승격 자동 응답** (`trustEscalation`) — 샌드박스 승격은 shell / pwsh /
|
|
83
84
|
edit 도구의 **내부**(`tools/pre-execute` 이후)에서 발생하므로 게이트가 이를 볼 수
|
|
84
85
|
없고, 게이트가 자동 허용한 호출에도 확인 프롬프트가 나타납니다. 이 전략을 켜면 게이트가
|
|
@@ -138,13 +139,19 @@ permissions:
|
|
|
138
139
|
|
|
139
140
|
전체 예시: [examples/permissions.example.yaml](./examples/permissions.example.yaml)
|
|
140
141
|
|
|
141
|
-
##
|
|
142
|
+
## 自动审查 티어(머신 값 `permissive`)
|
|
142
143
|
|
|
143
|
-
|
|
144
|
-
나란한 **독립 승인 티어**입니다. "자동 승인"이 아니며 포괄적 권한을 발행하지도 않습니다.
|
|
144
|
+
自动审查는 권한 선택기에서 읽기 전용 / 워크스페이스 내 수정 / 완전 권한 / 허용 목록과
|
|
145
|
+
나란한 **독립 승인 티어**입니다. 범용 "자동 승인"이 아니며 포괄적 권한을 발행하지도 않습니다.
|
|
145
146
|
사람/LLM 심 **이전에** 판정을 좁히거나 넓힐 뿐이고, P0 하드 거부는 단조롭고 협상
|
|
146
147
|
불가능하게 유지됩니다.
|
|
147
148
|
|
|
149
|
+
선택기의 표시 이름은 **호스트가 공급하는 제품명**이며 언어별 사전 항목이 아닙니다. DSH 0.1.2는
|
|
150
|
+
플러그인 티어의 `name:`을 두 권한 화면(일반 설정 기본 행과 입력창 선택기)에 그대로 렌더링하고
|
|
151
|
+
자체 지역화 라벨은 세 가지 내장 값에만 부여하므로, `cordis.patch.yml`이 모든 세션에 중국어
|
|
152
|
+
라벨을 배포합니다. 이 티어는 **아이콘을 그리지 않습니다** —— 선택기의 글리프는 내장 값에만
|
|
153
|
+
연결됩니다.
|
|
154
|
+
|
|
148
155
|
`cordis.yml`에서:
|
|
149
156
|
|
|
150
157
|
```yaml
|
|
@@ -187,7 +194,7 @@ LLM이 `safe`로 판정하고 게이트가 자동 허용한 호출조차 샌드
|
|
|
187
194
|
`callId`로 키화, 승격 요청이 이를 반복)을 기억하고 승격을 여기서 `allowed-once`로
|
|
188
195
|
자응답합니다. **모든 조건이 충족될 때만** 적용됩니다:
|
|
189
196
|
|
|
190
|
-
-
|
|
197
|
+
- 自动审查 티어가 켜져 있고 `trustEscalation`이 켜져 있음;
|
|
191
198
|
- 호출에 게이트가 허용한 `callId`가 있고, 툴 이름이 일치;
|
|
192
199
|
- 원인이 알려진 승격이며 `workspace-write` 또는 `danger-full-access`를 명시.
|
|
193
200
|
|
|
@@ -199,15 +206,15 @@ never` 패스스루 — 는 사람에 그대로 위임되므로 향후 DSH 변
|
|
|
199
206
|
|
|
200
207
|
### 선택 가능한 세션 티어
|
|
201
208
|
|
|
202
|
-
`cordis.patch.yml`은 DSH의 `permission.config.presets`에
|
|
203
|
-
|
|
204
|
-
이름
|
|
209
|
+
`cordis.patch.yml`은 DSH의 `permission.config.presets`에 워크스페이스 내 수정과
|
|
210
|
+
완전 권한 사이의 `permissive` preset(`sandbox: workspace-write`, `approval: ask`,
|
|
211
|
+
이름 **自动审查**)을 추가합니다. DSH의 bundle patch는 이 map을 **전체 교체**하므로
|
|
205
212
|
(키 단위 병합이 아닙니다) 내장 3개 티어
|
|
206
213
|
(`read-only` / `workspace-write` / `danger-full-access`,
|
|
207
214
|
`@deepseek-ai/dsh-base/cordis.patch.yml` 기준)도 다시 기재해야 하며,
|
|
208
215
|
`test/patch-presets.spec.ts`가 그 키 집합을 고정합니다. 따라서 세션 권한
|
|
209
|
-
선택기에는 "auto-approval"이 아니라 **독립적으로 선택 가능한 승인 티어**인
|
|
210
|
-
놓입니다.
|
|
216
|
+
선택기에는 "auto-approval"이 아니라 **독립적으로 선택 가능한 승인 티어**인
|
|
217
|
+
「自动审查」가 놓입니다.
|
|
211
218
|
|
|
212
219
|
게이트가 동작하는 범위는 **`gatePresets`에 나열한 티어 안뿐**입니다(기본 `['permissive']`,
|
|
213
220
|
이 플러그인이 추가하는 티어). 그 밖의 티어(Read Only / Workspace Write / Full access /
|
|
@@ -248,7 +255,9 @@ host는 네임스페이스를 live로 읽으므로 변경은 재시작 없이
|
|
|
248
255
|
키워드를 포함하는 호출(대소문자 구분 없는 부분 일치)은 허용 목록/권한/LLM보다 먼저 거부됩니다. 설정
|
|
249
256
|
카드에서 목록으로 편집할 수 있고(프리셋 항목에는 태그 표시, 원클릭 복원 지원) 미설정·빈 목록 시 프리셋이
|
|
250
257
|
적용됩니다——블랙리스트가 조용히 꺼지지 않습니다.
|
|
251
|
-
|
|
258
|
+
블랙리스트가 조용히 꺼지는 일은 없습니다.
|
|
259
|
+
이 티어는 권한 선택기에 **아이콘을 표시하지 않습니다** —— 선택기의 글리프는 내장 세 값에만
|
|
260
|
+
연결되고, 플러그인 티어는 텍스트만입니다.
|
|
252
261
|
|
|
253
262
|
|
|
254
263
|
## CLI(독립 실행 dry-run)
|