dsh-session-guard 3.2.3 → 3.2.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 CHANGED
@@ -1,133 +1,143 @@
1
- # 変更履歴
2
-
3
- `dsh-session-guard` の主な変更を記録します。バージョンはセマンティックバージョニングに従います。
4
-
5
- - [English changelog](./CHANGELOG.md)
6
- - [日本語 changelog](./CHANGELOG.ja.md)
7
- - [한국어 changelog](./CHANGELOG.ko.md)
8
-
9
- ## 0.4.0 — 2026-09-18(誤ったバージョン番号。3.0.0 に置き換え)
10
-
11
- ### 修正
12
-
13
- - **バージョン識別**:本ラインは `0.4.0` として公開されましたが、`dsh.plugin.json` と本変更履歴は
14
- すでに `3.0.0` を名乗っており、1 つの成果物に 2 つのバージョン番号が存在していました。
15
- `package.json` を `3.0.0` に統一し、パッケージ版・マニフェスト版・変更履歴が一致しました。
16
- npm のバージョンは不変のため `0.4.0` は歴史的記録として残します。`3.0.0` 公開後は
17
- `dist-tag dsh-0.1.5` を `3.0.0` に向け直すべきです。
18
- - **ドキュメント**:README/INSTALL(zh/en/ja/ko)が兄弟ラインを `main` にあると説明していたのを
19
- 修正。0.1.2 ラインのリリースブランチは **`legacy/0.1.2`**(npm dist-tag `dsh-0.1.2`、
20
- バージョン `0.3.1`)で、`main` は `0.2.0-beta.1` で凍結されています。INSTALL.zh/ja/ko の
21
- 重複したブランチ断片を修正し、dist-tag を明示したインストールコマンドを
22
- 記載。「2.x / 3.x」は**ラインの通称**でありバージョン番号ではないことを明記しました。
23
-
24
- ### 備考
25
-
26
- - **ソース変更なし**(`3.0.0` 比)。`0.4.0` は同一ツリーのパッケージングのみの公開です。
27
-
28
- ## 3.0.0 — 2026-09-14
29
-
30
- ### 変更
31
-
32
- - **DSH v0.1.5-rc.2 専用ライン(`compat/0.1.5`)。** `engines.dsh` と `dsh-client-*` の peer
33
- 範囲を `>=0.1.5-rc.2 <0.2.0-0` に狭めました(semver のプレリリース規則上、旧
34
- `>=0.1.0-rc.7` は `0.1.5-rc.2` に一致しません)。`dsh.plugin.json` に `engines.dsh` を追加。
35
- 旧ホスト向けには `main` 上の 2.x / 0.2.x ラインが継続します。
36
- - **`session.events` → `snapshotEvents()`。** DSH 0.1.5 で `session.events` 配列アクセサが
37
- 削除されたため(compatibility-guide §20.3)、`pause-gate.js` はデュアルパスのヘルパーで
38
- セッションイベントを読みます:まず `snapshotEvents()`、防御的に旧 `events` 配列へフォール
39
- バック、どちらも無ければ `null`(fail-open)。対象は `findToolOutcome` と `lastUserPrompt`
40
- のみで、イベント型のマッチングは不変です。
41
-
42
- ### 変更なし
43
-
44
- - その他の接続面は一切変更なし:自前の webServer prefix ルート(`/session-guard/rpc`)、
45
- `settings.register`、`settings.plugin.item` スロット、クライアント注入、
46
- `llm.listConfigurableProviders()` は公開済み 0.1.5-rc.2 バンドルに対して検証済み
47
- (`tools/check-api-drift.ps1`、必須アサーション 12/12)。
48
-
49
- ### 未実施
50
-
51
- - 実機 DSH 0.1.5-rc.2 ホストでのライブスモーク(perm-gate の 0.1.5 ラインと同じ状態)。
52
-
53
- ## 0.2.0-beta.2 — 2026-09-13
54
-
55
- ### 修正(DSH 0.1.5 互換 — `compat/0.1.5` ブランチ)
56
-
57
- - **レジューム入隊のデュアルパス。** DSH 0.1.5 では Inbox が agent-loop の読み取り専用
58
- 投影に変わるため、`agent.followup` が存在しない可能性があります。レジューム時は
59
- `agent.followup` → `agent.send` → warn 降級(例外は投げない)の順で試行します。
60
- - **レジュームメッセージの `source` に `form: 'instructions'` を追加**(0.1.5 の
61
- `ContextFormed` 契約。旧バージョンは未知フィールドを無視します)。
62
- - **`webServer.register` を try/catch で保護**:ルート登録の失敗はログのみで、
63
- `apply` から例外を投げてホストのプラグイン読み込みを壊しません。
64
- - 0.1.5-rc.2 ソースに対し `WebRoute`(exact/prefix + SSE)契約が不変であることを確認。
65
- クライアントの `fetch('/session-guard/...')` に `/api` プレフィックスは不要です。
66
-
67
- ## 0.2.0-beta.1 — 2026-09-10
68
-
69
- ### 追加
70
-
71
- - **step 級ゲート(`agent/pre-step`)**:ピーク時、ターン境界で中断するのではなく、**次の step のモデルリクエスト前**にターンを保留します。セッションは次の `agent/pre-step` まで走り、そこでゲートが閉じます(設定 `stepLevelPause`、既定 on)。退峰時は**その場で**再開し、followup メッセージは不要。ゲート条件:ピーク(北京時間)+ 非週末 + `step > 1` + 対象 provider が公式(`providerGuard`)+ リクエスト級 hold なし + このピーク期間でスキップなし。新規モジュール `src/step-gate.js`(純関数 `decideStepHold` + hold / release / abort / timeout エンジン)。
72
- - **`stepResume` ポート + RPC + `/resume`**:`sessionGuard.stepResume(sessionId, {bypass})`、`POST /session-guard/rpc {action:'stepResume'}`、`/resume` のいずれでもゲートを解放。手動再開はそのピーク期間中のゲートを停止します。
73
- - **タイムアウト昇格**:`stepGateTimeoutMs`(既定 300000)でゲートを解放し**ターン級 force 一時停止へ昇格**。長時間ピークでもデッドロックせず、「5 分ごとに 1 step」の滴漏も起きません。
74
- - **「⏸ 一時停止」ボタン**(クライアント、slot `conversation.input.right`、id `session-guard-pause`、order 20 — input-traffic の凍結ボタンの左)。1 秒ごとに `/session-guard/state` をポーリングし、未保留時は無効、保留時は `stepResume` を呼びます。バッジは order 40 へ移動し、step 保留数を表示。
75
- - **新規設定**:`stepLevelPause`、`stepGateTimeoutMs`。
76
- - **新規状態**:`GET /session-guard/state` が `paused: { step, turn }` と `stepGate: { held, since, bypass }` を返し、`/status` は `stepHeld`、`/diag` は `stepGate` を返します。サービス側 `state().paused` は互換のため真偽値のまま(新フィールド `pausedStep`)。
77
-
78
- ### 修正
79
-
80
- - **step 保留とターン級一時停止のデッドロック**:`pauseTask` / `resumeTask` / `cancelTask` が先に step ゲートを解放します。step 保留は `agent/pre-step` 上にあり `assistant/message` / `tool/result` が永遠に来ないため、`safe` 一時停止が永久に待ち、`paused` も永続化されませんでした。
81
-
82
- ### 変更
83
-
84
- - **ピーク入りで実行中ターンを中断しなくなりました**(`stepLevelPause` 有効時、`onEnterPeak` は `stopNextTurn` ではなく step ゲートを arm)。無効時は従来のターン級動作のままです。
85
- - input-traffic の凍結ボタンのラベルは **「凍結して追加」** になりました(`冻结追加` / `Freeze & append` / `동결 후 추가`)。再開ラベルは **「再開して追加」**(`恢复追加` / `Resume & append` / `재개 후 추가`)——ターンを凍結しつつキューを保持する動作で、一時停止ボタンとは別物です。
86
- - **一時停止ボタンはトグルになりました**:「一時停止」/「再開」(グレー無効状態は廃止)。「一時停止」は新規 `stepPause` を呼び、**次の step 境界**でセッションを保留します(step 1 も対象、峰谷 / provider の制限なし)。「再開」は `stepResume`。新ポートメソッド `sessionGuard.stepPause(sessionId)`。
87
- - **SSE プッシュ**:新ルート `GET /session-guard/events?session=<id>` が step ゲート状態の変化を即時配信——ピークで自動的に閉じた瞬間にボタンが「再開」へ変わります。10 秒ポーリングはフォールバックとして残ります。`/state` は `paused.manual` と `stepGate.manual` を返すようになりました。
88
- - **スタイルを input-traffic のコンポーザーボタンに揃えました**(高さ 24px / 角丸 6px / 12px フォント / 同じ border・hover・pressed トークン)。ボタンとステータスバッジの両方。スタイルは `<style data-plugin-css="session-guard-client">` で一度だけ注入。
89
-
90
- ## Unreleased
91
-
92
- ### 追加
93
-
94
- - **公式ソース二次判定(ピーク × 対象 provider)**:ピーク時は対象ルートが DeepSeek 公式ソースの場合のみ遮断し、ローカル/第三者 provider は通常実行。判定順は明示 `officialProviders` id リスト → 実時間 `baseURL` エンドポイント → catalog 内蔵エンドポイント(pi-ai の `deepseek`)→ 内蔵 id(`deepseek-official`)で、`matchedBy` を返します。新規モジュール:`src/provider.js`(純関数)、`src/provider-directory.js`、`src/deferrals.js`、`src/request-guard.js`、`src/targets.js`、`src/wiring.js`。
95
- - **リクエスト級バックストップ(`agent/request`)**:ピーク入場後に起動したセッション、途中で公式ソースへ切り替えたセッションを捕捉(30s tick は遷移時に `running` だったセッションのみ処理)。既定 `hold` はエラーなしで保留し、退峰の瞬間に解放(`msUntilOffPeak`);`error` は識別可能な `PEAK_DEFERRED` を投げ延後キューに記録。
96
- - **新しい設定**:`providerGuard`、`officialProviders`、`officialBaseURLs`、`deferredResume`、`deferredResumeText`、`deferredMode`、`deferredMaxHoldMs`(既定 6h)、`guardSubagents`。
97
- - **新しいルート**:`GET /session-guard/provider?provider=<id>`(判定診断)。`/session-guard/status` は `providerGuard` / `held` / `deferred` を返します。
98
- - **ドリフトガード** `tools/check-api-drift.ps1`(4 つの tag で必須 API の存在を検証)。
99
-
100
- ### 変更
101
-
102
- - **DSH 二重バージョン対応(0.1.0-rc.7 … 0.1.2-rc.1)**:`dsh-v0.1.1-rc.2` と `dsh-v0.1.2-rc.1` を 1 つの成果物でカバー。
103
- - **設定面は共通 API のみ**:`settings.register` + `settings.get`。`installSection`(0.1.2+)と削除された `installSettingsSection` は使用しません。任意 API は特性検出して降格。
104
- - **`src/retry.js` は正確な `PEAK_DEFERRED` のみ短絡**:429 / `RATE_LIMIT` / `TRANSPORT` / タイムアウトは引き続き瞬時扱い。DSH のグローバルリトライ(`dsh-llm-retry`)は不変。
105
- - バッジが「ピーク・公式のみ」と「ピーク・全停止」を区別。
106
-
107
- ## 0.1.4 — 2026-09-09
108
-
109
- ### 変更
110
-
111
- - **公開ベータ**(`0.1.4-beta.1`):二重バージョン系のベータチャネル向けにバージョン表記・README 互換表・パッケージメタデータを整備。
112
-
113
- ## 0.1.1 — 2026-08-24
114
-
115
- ### 追加
116
-
117
- - **バックエンド自動リトライ(D9)**:`turn/end` の瞬時失敗(error/429/max-tokens)はアダプティブバックオフの `followup(retryText)` で自動再開。永久失敗(認証/残高/モデル/コンテキスト上限)は停止。ユーザー介入または成功ターンで連続失敗カウントをリセット。
118
- - **凍結/ゲート譲歩**:`isFrozen(sessionId)` が真のときリトライをスキップ、セッションゲートを迂回しません。
119
-
120
- ### 変更
121
-
122
- - `sessionGuard` 冗余ポートが `state(sessionId)` を公開し、`{ queueLocked, lockReason, paused, taskControlAvailable, taskControl }` を返すように。
123
- - HTTP ルート `GET /session-guard/diag` がリトライ状態を含むランタイム診断を返すように。
124
-
125
- ### 修正
126
-
127
- - 週末検出を裸 `getUTCDay()` から `Intl.DateTimeFormat`(設定タイムゾーン使用)に変更し、北京タイムゾーンの 8 時間境界バグを修正。
128
-
129
- ## 0.1.0 — 2026-08-18
130
-
131
- ### 追加
132
-
133
- - 初回リリース:ピーク自動一時停止(グローバル)、週末モード、`sessionGuard` 冗余ポート + RPC ブリッジによるセッションごとの凍結/再開、カスタムセッションゲート、設定パネル。
1
+ # 変更履歴
2
+
3
+ `dsh-session-guard` の主な変更を記録します。バージョンはセマンティックバージョニングに従います。
4
+
5
+ - [English changelog](./CHANGELOG.md)
6
+ - [日本語 changelog](./CHANGELOG.ja.md)
7
+ - [한국어 changelog](./CHANGELOG.ko.md)
8
+
9
+ ## 3.2.4 — 2026-09-27
10
+
11
+ ### Fixed
12
+ - **セッション形式 v4 対応(ホスト >= 0.1.7-rc.1)**: セッション書き込み 3 箇所で、v4 ホストが拒否する旧署名 `source: { kind: 'plugin', plugin: 'session-guard' }` を廃止し、プロデューサー所有 kind に変更しました(`SessionFormatError` でラウンド全体が失敗する問題を修正):
13
+ - 遅延再開の notice 注入(`src/wiring.js`)
14
+ - 自動リトライの notice 注入(`src/retry.js`)
15
+ - 一時停止からの再開 followup(`src/pause-gate.js`、```kind: `plugin:${pluginId}````)
16
+ - **tool-result v4 native 対応(N1)**: `src/pause-gate.js` の `findToolOutcome` は、v4 の一等 `role:'tool'` メッセージ(`toolCallId`/`isError` が message 最上位)を優先して読みます。v3 の `tool-result` ブロック経路は歴史互換として残存。未対応だと一時停止中の失敗ツールが再開時に「完了済み」と誤判される静かな誤判定を修正。`src/tool-call-id.js` も native 最上位 id を最優先に。0.1.1/0.1.2 時代のヘッダ注記を三形状世代表に訂正。
17
+ `form` など他フィールドは不変。既存の旧署名行はホスト自身の v3→v4 移行が昇格するため、履歴データは書き換えません。根拠: `@deepseek-ai/dsh-session-format-v3-to-v4@0.1.7-rc.2` は `source.kind` が非空かつ `'plugin'` でないことのみ検証します。
18
+
19
+ ## 0.4.0 — 2026-09-18(誤ったバージョン番号。3.0.0 に置き換え)
20
+
21
+ ### 修正
22
+
23
+ - **バージョン識別**:本ラインは `0.4.0` として公開されましたが、`dsh.plugin.json` と本変更履歴は
24
+ すでに `3.0.0` を名乗っており、1 つの成果物に 2 つのバージョン番号が存在していました。
25
+ `package.json` を `3.0.0` に統一し、パッケージ版・マニフェスト版・変更履歴が一致しました。
26
+ npm のバージョンは不変のため `0.4.0` は歴史的記録として残します。`3.0.0` 公開後は
27
+ `dist-tag dsh-0.1.5` を `3.0.0` に向け直すべきです。
28
+ - **ドキュメント**:README/INSTALL(zh/en/ja/ko)が兄弟ラインを `main` にあると説明していたのを
29
+ 修正。0.1.2 ラインのリリースブランチは **`legacy/0.1.2`**(npm dist-tag `dsh-0.1.2`、
30
+ バージョン `0.3.1`)で、`main` は `0.2.0-beta.1` で凍結されています。INSTALL.zh/ja/ko の
31
+ 重複したブランチ断片を修正し、dist-tag を明示したインストールコマンドを
32
+ 記載。「2.x / 3.x」は**ラインの通称**でありバージョン番号ではないことを明記しました。
33
+
34
+ ### 備考
35
+
36
+ - **ソース変更なし**(`3.0.0` 比)。`0.4.0` は同一ツリーのパッケージングのみの公開です。
37
+
38
+ ## 3.0.0 — 2026-09-14
39
+
40
+ ### 変更
41
+
42
+ - **DSH v0.1.5-rc.2 専用ライン(`compat/0.1.5`)。** `engines.dsh` と `dsh-client-*` の peer
43
+ 範囲を `>=0.1.5-rc.2 <0.2.0-0` に狭めました(semver のプレリリース規則上、旧
44
+ `>=0.1.0-rc.7` は `0.1.5-rc.2` に一致しません)。`dsh.plugin.json` に `engines.dsh` を追加。
45
+ 旧ホスト向けには `main` 上の 2.x / 0.2.x ラインが継続します。
46
+ - **`session.events` → `snapshotEvents()`。** DSH 0.1.5 で `session.events` 配列アクセサが
47
+ 削除されたため(compatibility-guide §20.3)、`pause-gate.js` はデュアルパスのヘルパーで
48
+ セッションイベントを読みます:まず `snapshotEvents()`、防御的に旧 `events` 配列へフォール
49
+ バック、どちらも無ければ `null`(fail-open)。対象は `findToolOutcome` と `lastUserPrompt`
50
+ のみで、イベント型のマッチングは不変です。
51
+
52
+ ### 変更なし
53
+
54
+ - その他の接続面は一切変更なし:自前の webServer prefix ルート(`/session-guard/rpc`)、
55
+ `settings.register`、`settings.plugin.item` スロット、クライアント注入、
56
+ `llm.listConfigurableProviders()` は公開済み 0.1.5-rc.2 バンドルに対して検証済み
57
+ (`tools/check-api-drift.ps1`、必須アサーション 12/12)。
58
+
59
+ ### 未実施
60
+
61
+ - 実機 DSH 0.1.5-rc.2 ホストでのライブスモーク(perm-gate の 0.1.5 ラインと同じ状態)。
62
+
63
+ ## 0.2.0-beta.2 — 2026-09-13
64
+
65
+ ### 修正(DSH 0.1.5 互換 — `compat/0.1.5` ブランチ)
66
+
67
+ - **レジューム入隊のデュアルパス。** DSH 0.1.5 では Inbox が agent-loop の読み取り専用
68
+ 投影に変わるため、`agent.followup` が存在しない可能性があります。レジューム時は
69
+ `agent.followup` → `agent.send` → warn 降級(例外は投げない)の順で試行します。
70
+ - **レジュームメッセージの `source` に `form: 'instructions'` を追加**(0.1.5 の
71
+ `ContextFormed` 契約。旧バージョンは未知フィールドを無視します)。
72
+ - **`webServer.register` を try/catch で保護**:ルート登録の失敗はログのみで、
73
+ `apply` から例外を投げてホストのプラグイン読み込みを壊しません。
74
+ - 0.1.5-rc.2 ソースに対し `WebRoute`(exact/prefix + SSE)契約が不変であることを確認。
75
+ クライアントの `fetch('/session-guard/...')` に `/api` プレフィックスは不要です。
76
+
77
+ ## 0.2.0-beta.1 — 2026-09-10
78
+
79
+ ### 追加
80
+
81
+ - **step 級ゲート(`agent/pre-step`)**:ピーク時、ターン境界で中断するのではなく、**次の step のモデルリクエスト前**にターンを保留します。セッションは次の `agent/pre-step` まで走り、そこでゲートが閉じます(設定 `stepLevelPause`、既定 on)。退峰時は**その場で**再開し、followup メッセージは不要。ゲート条件:ピーク(北京時間)+ 非週末 + `step > 1` + 対象 provider が公式(`providerGuard`)+ リクエスト級 hold なし + このピーク期間でスキップなし。新規モジュール `src/step-gate.js`(純関数 `decideStepHold` + hold / release / abort / timeout エンジン)。
82
+ - **`stepResume` ポート + RPC + `/resume`**:`sessionGuard.stepResume(sessionId, {bypass})`、`POST /session-guard/rpc {action:'stepResume'}`、`/resume` のいずれでもゲートを解放。手動再開はそのピーク期間中のゲートを停止します。
83
+ - **タイムアウト昇格**:`stepGateTimeoutMs`(既定 300000)でゲートを解放し**ターン級 force 一時停止へ昇格**。長時間ピークでもデッドロックせず、「5 分ごとに 1 step」の滴漏も起きません。
84
+ - **「⏸ 一時停止」ボタン**(クライアント、slot `conversation.input.right`、id `session-guard-pause`、order 20 — input-traffic の凍結ボタンの左)。1 秒ごとに `/session-guard/state` をポーリングし、未保留時は無効、保留時は `stepResume` を呼びます。バッジは order 40 へ移動し、step 保留数を表示。
85
+ - **新規設定**:`stepLevelPause`、`stepGateTimeoutMs`。
86
+ - **新規状態**:`GET /session-guard/state` が `paused: { step, turn }` と `stepGate: { held, since, bypass }` を返し、`/status` は `stepHeld`、`/diag` は `stepGate` を返します。サービス側 `state().paused` は互換のため真偽値のまま(新フィールド `pausedStep`)。
87
+
88
+ ### 修正
89
+
90
+ - **step 保留とターン級一時停止のデッドロック**:`pauseTask` / `resumeTask` / `cancelTask` が先に step ゲートを解放します。step 保留は `agent/pre-step` 上にあり `assistant/message` / `tool/result` が永遠に来ないため、`safe` 一時停止が永久に待ち、`paused` も永続化されませんでした。
91
+
92
+ ### 変更
93
+
94
+ - **ピーク入りで実行中ターンを中断しなくなりました**(`stepLevelPause` 有効時、`onEnterPeak` は `stopNextTurn` ではなく step ゲートを arm)。無効時は従来のターン級動作のままです。
95
+ - input-traffic の凍結ボタンのラベルは **「凍結して追加」** になりました(`冻结追加` / `Freeze & append` / `동결 후 추가`)。再開ラベルは **「再開して追加」**(`恢复追加` / `Resume & append` / `재개 후 추가`)——ターンを凍結しつつキューを保持する動作で、一時停止ボタンとは別物です。
96
+ - **一時停止ボタンはトグルになりました**:「一時停止」/「再開」(グレー無効状態は廃止)。「一時停止」は新規 `stepPause` を呼び、**次の step 境界**でセッションを保留します(step 1 も対象、峰谷 / provider の制限なし)。「再開」は `stepResume`。新ポートメソッド `sessionGuard.stepPause(sessionId)`。
97
+ - **SSE プッシュ**:新ルート `GET /session-guard/events?session=<id>` が step ゲート状態の変化を即時配信——ピークで自動的に閉じた瞬間にボタンが「再開」へ変わります。10 秒ポーリングはフォールバックとして残ります。`/state` は `paused.manual` と `stepGate.manual` を返すようになりました。
98
+ - **スタイルを input-traffic のコンポーザーボタンに揃えました**(高さ 24px / 角丸 6px / 12px フォント / 同じ border・hover・pressed トークン)。ボタンとステータスバッジの両方。スタイルは `<style data-plugin-css="session-guard-client">` で一度だけ注入。
99
+
100
+ ## Unreleased
101
+
102
+ ### 追加
103
+
104
+ - **公式ソース二次判定(ピーク × 対象 provider)**:ピーク時は対象ルートが DeepSeek 公式ソースの場合のみ遮断し、ローカル/第三者 provider は通常実行。判定順は明示 `officialProviders` id リスト → 実時間 `baseURL` エンドポイント → catalog 内蔵エンドポイント(pi-ai の `deepseek`)→ 内蔵 id(`deepseek-official`)で、`matchedBy` を返します。新規モジュール:`src/provider.js`(純関数)、`src/provider-directory.js`、`src/deferrals.js`、`src/request-guard.js`、`src/targets.js`、`src/wiring.js`。
105
+ - **リクエスト級バックストップ(`agent/request`)**:ピーク入場後に起動したセッション、途中で公式ソースへ切り替えたセッションを捕捉(30s tick は遷移時に `running` だったセッションのみ処理)。既定 `hold` はエラーなしで保留し、退峰の瞬間に解放(`msUntilOffPeak`);`error` は識別可能な `PEAK_DEFERRED` を投げ延後キューに記録。
106
+ - **新しい設定**:`providerGuard`、`officialProviders`、`officialBaseURLs`、`deferredResume`、`deferredResumeText`、`deferredMode`、`deferredMaxHoldMs`(既定 6h)、`guardSubagents`。
107
+ - **新しいルート**:`GET /session-guard/provider?provider=<id>`(判定診断)。`/session-guard/status` は `providerGuard` / `held` / `deferred` を返します。
108
+ - **ドリフトガード** `tools/check-api-drift.ps1`(4 つの tag で必須 API の存在を検証)。
109
+
110
+ ### 変更
111
+
112
+ - **DSH 二重バージョン対応(0.1.0-rc.7 … 0.1.2-rc.1)**:`dsh-v0.1.1-rc.2` と `dsh-v0.1.2-rc.1` を 1 つの成果物でカバー。
113
+ - **設定面は共通 API のみ**:`settings.register` + `settings.get`。`installSection`(0.1.2+)と削除された `installSettingsSection` は使用しません。任意 API は特性検出して降格。
114
+ - **`src/retry.js` は正確な `PEAK_DEFERRED` のみ短絡**:429 / `RATE_LIMIT` / `TRANSPORT` / タイムアウトは引き続き瞬時扱い。DSH のグローバルリトライ(`dsh-llm-retry`)は不変。
115
+ - バッジが「ピーク・公式のみ」と「ピーク・全停止」を区別。
116
+
117
+ ## 0.1.4 — 2026-09-09
118
+
119
+ ### 変更
120
+
121
+ - **公開ベータ**(`0.1.4-beta.1`):二重バージョン系のベータチャネル向けにバージョン表記・README 互換表・パッケージメタデータを整備。
122
+
123
+ ## 0.1.1 — 2026-08-24
124
+
125
+ ### 追加
126
+
127
+ - **バックエンド自動リトライ(D9)**:`turn/end` の瞬時失敗(error/429/max-tokens)はアダプティブバックオフの `followup(retryText)` で自動再開。永久失敗(認証/残高/モデル/コンテキスト上限)は停止。ユーザー介入または成功ターンで連続失敗カウントをリセット。
128
+ - **凍結/ゲート譲歩**:`isFrozen(sessionId)` が真のときリトライをスキップ、セッションゲートを迂回しません。
129
+
130
+ ### 変更
131
+
132
+ - `sessionGuard` 冗余ポートが `state(sessionId)` を公開し、`{ queueLocked, lockReason, paused, taskControlAvailable, taskControl }` を返すように。
133
+ - HTTP ルート `GET /session-guard/diag` がリトライ状態を含むランタイム診断を返すように。
134
+
135
+ ### 修正
136
+
137
+ - 週末検出を裸 `getUTCDay()` から `Intl.DateTimeFormat`(設定タイムゾーン使用)に変更し、北京タイムゾーンの 8 時間境界バグを修正。
138
+
139
+ ## 0.1.0 — 2026-08-18
140
+
141
+ ### 追加
142
+
143
+ - 初回リリース:ピーク自動一時停止(グローバル)、週末モード、`sessionGuard` 冗余ポート + RPC ブリッジによるセッションごとの凍結/再開、カスタムセッションゲート、設定パネル。