dsh-context-compression-improved 0.4.0-beta.1 → 0.5.0

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.
Files changed (71) hide show
  1. package/CHANGELOG.ja.md +68 -36
  2. package/CHANGELOG.ko.md +67 -35
  3. package/CHANGELOG.md +195 -134
  4. package/CHANGELOG.zh.md +64 -36
  5. package/README.ja.md +1 -1
  6. package/README.ko.md +1 -1
  7. package/README.md +1 -1
  8. package/README.zh.md +1 -1
  9. package/docs/installation.ja.md +2 -2
  10. package/docs/installation.ko.md +2 -2
  11. package/docs/installation.md +103 -78
  12. package/docs/installation.zh.md +100 -77
  13. package/docs/repair-log.md +54 -0
  14. package/package.json +1 -1
  15. package/packages/selector/lib/{config.js → advisor-state.js} +329 -5
  16. package/packages/selector/lib/client.d.ts +7 -0
  17. package/packages/selector/lib/client.js +33 -3
  18. package/packages/selector/lib/index.d.ts +7 -0
  19. package/packages/selector/lib/index.js +112 -3
  20. package/packages/selector/lib/pruner.d.ts +128 -1
  21. package/packages/selector/lib/pruner.js +2802 -1374
  22. package/packages/selector/src/client/ReviewOverlay.tsx +1 -1
  23. package/packages/selector/src/client/index.ts +1 -1
  24. package/packages/selector/src/client/preset-options.ts +2 -0
  25. package/packages/selector/src/index.ts +129 -49
  26. package/packages/selector/src/profiles.ts +48 -0
  27. package/packages/selector/src/pruner/content.ts +18 -5
  28. package/packages/selector/src/pruner/state.ts +3 -0
  29. package/packages/selector/src/pruner/types.ts +23 -5
  30. package/packages/selector/src/pruner.ts +297 -162
  31. package/packages/selector/src/runtime/adaptive-cost.ts +23 -12
  32. package/packages/selector/src/runtime/audit.ts +40 -2
  33. package/packages/selector/src/runtime/config.ts +88 -1
  34. package/packages/selector/src/runtime/measurement.ts +31 -2
  35. package/packages/selector/src/runtime/reducers.ts +1115 -97
  36. package/packages/selector/src/runtime/tokenpilot/advisor-prompt.ts +188 -0
  37. package/packages/selector/src/runtime/tokenpilot/advisor-state.ts +133 -0
  38. package/packages/selector/src/runtime/tokenpilot/advisor.ts +419 -0
  39. package/packages/selector/src/runtime/tokenpilot/dedup.ts +1 -1
  40. package/packages/selector/src/runtime/tokenpilot/estimator.ts +8 -118
  41. package/packages/selector/src/runtime/tokenpilot/locator.ts +1 -1
  42. package/packages/selector/src/runtime/tokenpilot/proposal.ts +76 -32
  43. package/packages/selector/src/runtime/tokenpilot/read-state.ts +23 -2
  44. package/packages/selector/src/runtime/tokenpilot/review-registry.ts +117 -0
  45. package/packages/selector/src/runtime/tokenpilot/sidechannel.ts +303 -0
  46. package/packages/selector/src/runtime/toolclass.ts +103 -0
  47. package/packages/selector/src/runtime/types.ts +37 -0
  48. package/packages/selector/tests/advisor-report.host.spec.ts +223 -0
  49. package/packages/selector/tests/public/package-contract.client.spec.ts +2 -1
  50. package/packages/selector/tests/review-routes-registry.host.spec.ts +142 -0
  51. package/packages/selector/tests/runtime/adaptive-cost.spec.ts +7 -7
  52. package/packages/selector/tests/runtime/advisor-invariant.spec.ts +272 -0
  53. package/packages/selector/tests/runtime/advisor.spec.ts +226 -0
  54. package/packages/selector/tests/runtime/audit.spec.ts +88 -1
  55. package/packages/selector/tests/runtime/char-basis.spec.ts +30 -0
  56. package/packages/selector/tests/runtime/code-skeleton.spec.ts +14 -3
  57. package/packages/selector/tests/runtime/frequency-longstrings.spec.ts +74 -0
  58. package/packages/selector/tests/runtime/html-reducer.spec.ts +212 -0
  59. package/packages/selector/tests/runtime/line-mapping.spec.ts +153 -0
  60. package/packages/selector/tests/runtime/prose-reducers.spec.ts +133 -0
  61. package/packages/selector/tests/runtime/public/public-runtime.spec.ts +198 -27
  62. package/packages/selector/tests/runtime/read-input-cap.spec.ts +33 -0
  63. package/packages/selector/tests/runtime/search-reducer.spec.ts +110 -0
  64. package/packages/selector/tests/runtime/sidechannel.spec.ts +241 -0
  65. package/packages/selector/tests/runtime/toc-and-bundled.spec.ts +159 -0
  66. package/packages/selector/tests/runtime/tokenpilot/profile-baseline.spec.ts +12 -0
  67. package/packages/selector/tests/runtime/tokenpilot/proposal.spec.ts +194 -0
  68. package/packages/selector/tests/runtime/tokenpilot/pruner-review.spec.ts +70 -1
  69. package/packages/selector/tests/runtime/tokenpilot/read-state.spec.ts +24 -0
  70. package/packages/selector/tests/runtime/toolclass.spec.ts +156 -0
  71. package/scripts/toolclass-corpus-replay.mjs +281 -0
package/CHANGELOG.ja.md CHANGED
@@ -1,36 +1,68 @@
1
- # 変更履歴(フォークの追加エントリー)
2
-
3
- > 完全な履歴(アップストリーム 0.1.0 以前を含む)は [CHANGELOG.md](CHANGELOG.md) を参照。このファイルはフォークの追加エントリーのみを翻訳したものです。 · [English](CHANGELOG.md) · [中文](CHANGELOG.zh.md) · [한국어](CHANGELOG.ko.md)
4
-
5
- ## Unreleased(未リリース)
6
- ### Changed(0.1.5 互換 / compat/0.1.5 ブランチ)
7
-
8
- - runtime パッケージを selector パッケージへ統合しました。1 回のインストールでスタック全体が入り、
9
- リポジトリのルートがインストール面になります(`name`、`main`、`types`、`./pruner`
10
- `./invariant` を含む `exports`、`dependencies`、`dsh`)。ツールチェーン・スクリプト・CI
11
- 単一パッケージへ揃えました。実機で検証済みの estimator-catalog ルート登録(二重プレフィックス、
12
- 保護された二経路の有効化、リクエスト毎のサービス解決、可観測なライフサイクルログ)を本ラインへ
13
- 再適用し、ホスト側のガードを追加しました。`ab2175a` で `z.any()` に落とされていた settings
14
- スキーマを復元し、Custom の既定値が再び公開されます。
15
- - ブランチ上で公式 DeepSeek Harness `v0.1.5-rc.2` に適応。`@deepseek-ai/dsh-*` 全開発依存と e2e 公式ホスト一覧を `0.1.1-rc.2` から `0.1.5-rc.2` へ更新(cordis `4.0.2`、schemastery `3.18.2`、新分割パッケージ群と `dsh-client-store` クライアントスタックを含む)。
16
- - surface 置換は v3 の `startSeq`/`endSeq` 形状とブランド化 `SessionSeq` を使用。surface node のイベント解決は配列インデックスではなく seq 検索に変更。
17
- - クライアントバンドルは削除された `@deepseek-ai/dsh-client-runtime` を参照しない。settings 型は `@deepseek-ai/dsh-client-ui-settings`、セッション hooks は `@deepseek-ai/dsh-client-ui-session` から取得。`engines.dsh >=0.1.5-alpha.1 <0.2.0-0` を宣言。
18
- - Harness 0.1.5 はセッション `agentPreset` をブラウザへ公開しないため、クライアント側で Minimal セッションを検出できない。セレクターは選択可能なまま。
19
- - テストを 0.1.5 のセマンティクスに更新(`.await()`、`SessionProjectionRegistry`、`stream: []`、文字列の settings 名前空間)。
20
-
21
- ### 修正
22
-
23
- - エスティメーターカードは Harness ホストチャネルで API キーを要求しなくなりました。ホストチャネルを選ぶと、ライブのプロバイダー/モデル ドロップダウンが表示され、実際に使われるルート(明示的な上書き、なければセッション既定モデル)を明示します。キー入力欄と 2 つ目の手入力モデル欄は表示されません — エンドポイント URL、モデルのテキスト欄、書き込み専用キーはダイレクト接続チャネルだけに属します。
24
- - `presetOptions` の書き込みをパス指定方式に変更しました。従来はセクション全体を置き換えていたため、エスティメーターの 2 つ目のフィールド(プロバイダー、モデル、エンドポイント)に触れると `estimatorMode` と他のすべての上書きが削除され、パネルは保存成功と表示したままエスティメーターが静かにオフへ戻っていました。現在は各フィールドが自分のパスだけを書き込み、`undefined` は指定したフィールドだけを消去し、confirm-on-write はチャネル単独ではなく同じフィールド群を検証します。
25
- - 回帰カバレッジを追加:`packages/selector/tests/preset-options-write.client.spec.ts`(パス単位の書き込み、兄弟フィールドの保持、明示的な消去、変更なし時の無書き込み、未コミット書き込みの報告)と `packages/selector/tests/estimator-channel.client.spec.tsx`(チャネル別フィールド、カタログのドロップダウン、手入力フォールバック)。
26
-
27
- ### 追加
28
-
29
- - 直交するコードスケルトン圧縮ゲート(`codeSkeleton.enabled`、デフォルトはオフ):超大規模なソースコード系ツール結果の初回露出時に、インポートと宣言のスケルトンを保持できます(関数本体は省略、エラー行は保持)。失敗時は元の先頭トリミングへフォールバックします。ゲートはすべてのプロファイルから独立し、正確なトークナイザー計測を前提とします。
30
- - セレクター設定セクションにゲートのトグルを追加(簡体字中国語・英語のコピー付き)。
31
- - 新セクションのブラウザー/ランタイム デコード整合テスト、`saveCodeSkeleton` の confirm-on-write コントラクトテスト、およびドキュメント全体のパリティ行列拡張。
32
-
33
- ### 変更
34
-
35
- - ESLint フラット設定ベースライン(`pnpm lint`、CI でも強制)と `pnpm test:watch` による TDD ループを追加。デッドインポートを整理し、lint ベースラインで浮かび上がった 2 つのエラー経路を強化しました。
36
- - 本リポジトリは `WilliamShi666/dsh-context-compression-selector` の改良フォークとして管理されます。ドキュメントは英語・簡体字中国語・日本語・韓国語で提供されます。
1
+ # 変更履歴(フォークの追加エントリー)
2
+
3
+ > 完全な履歴(アップストリーム 0.1.0 以前を含む)は [CHANGELOG.md](CHANGELOG.md) を参照。このファイルはフォークの追加エントリーのみを翻訳したものです。 · [English](CHANGELOG.md) · [中文](CHANGELOG.zh.md) · [한국어](CHANGELOG.ko.md)
4
+
5
+ ## 0.5.0 - 2026-09-20
6
+
7
+ ### Added(追加)
8
+
9
+ - アドバイザリー関連度アドバイザー(統計と提案のみ、デフォルト無効):各ターン境界で
10
+ fire-and-forget のパスを実行し、最新の `todo/write` イベントからセッションの末端タスク
11
+ 意味を要約し(todolist が無い場合は直近のユーザーテキストへフォールバック)、履歴
12
+ tool-result 候選の「内容+コメント意味 ↔ 現在タスク」の関連度を増分スコアリングし、
13
+ prefix-decay(characterPressure 重み付けの関連度平均の逆数)を算出します。関連度の低い
14
+ 古いセグメントは `recertified` として記録されますが、これは将来の history 積極度判断への
15
+ 提案入力に過ぎず——今回それを消費する経路は存在せず、アドバイザーの出力が着地すべき
16
+ reduction を抑制・遅延・書き換えすることは決してありません(専用の不変テストで固定)。
17
+ `presetOptions.advisor*` 設定キーで設定(`advisorMode` `''|'host'|'direct'`、既定 `''`;
18
+ direct チャネルは estimator のエンドポイントを再利用;`SideChannel` に任意の overrides
19
+ 引数を追加し、設定を共有せずトランスポートを共有)。可観測性:新しい `advisor-outcome`
20
+ 監査レコード(content-free、summary / scoring / decay の各フェーズごとに 1 件)と、読み
21
+ 取り専用 HTTP ルート `GET .../advisor-report?sessionId=`(デプロイ opt-in フラグ
22
+ `advisorReportRoute`、review ルートと同じ骨格)。クライアント UI は今回意図的に未提供。
23
+
24
+ ## 0.4.0 - 2026-09-20
25
+
26
+ ### Fixed(修正)
27
+
28
+ - プラグインはルーティング model id に依存しなくなりました。すべての計画ゲートは
29
+ exact tokenizer カウントの代わりに文字基数(Unicode コードポイント、
30
+ `characterPressure` / `pressureCost` 経由)で判定するため、バンドル tokenizer を
31
+ 持たないルート(実運用の `deepseek-flash`)でもリライトが沈黙せず着地します。
32
+ token しきい値のキー名と値は保持され(既存の 4.0 文字/token 規約で変換、
33
+ 凍結済み profile ベースラインは無変更)、token 数値はテレメトリに降格され、
34
+ rewrite 監査レコードの新フィールド `measurementBasis` が正直に区別します
35
+ (`exact-tokenizer` `characters`、派生時は `tokenizerId: 'characters'` /
36
+ `tokenizerRevision: 'chars-per-token-4.0'`)。ロールバック: 後続の変更が本コミットに
37
+ 依存していないことを確認した上で `git revert 7a1972a` を実行してください。
38
+ ### Changed(0.1.5 互換 / compat/0.1.5 ブランチ)
39
+
40
+ - runtime パッケージを selector パッケージへ統合しました。1 回のインストールでスタック全体が入り、
41
+ リポジトリのルートがインストール面になります(`name`、`main`、`types`、`./pruner` と
42
+ `./invariant` を含む `exports`、`dependencies`、`dsh`)。ツールチェーン・スクリプト・CI も
43
+ 単一パッケージへ揃えました。実機で検証済みの estimator-catalog ルート登録(二重プレフィックス、
44
+ 保護された二経路の有効化、リクエスト毎のサービス解決、可観測なライフサイクルログ)を本ラインへ
45
+ 再適用し、ホスト側のガードを追加しました。`ab2175a` で `z.any()` に落とされていた settings
46
+ スキーマを復元し、Custom の既定値が再び公開されます。
47
+ - ブランチ上で公式 DeepSeek Harness `v0.1.5-rc.2` に適応。`@deepseek-ai/dsh-*` 全開発依存と e2e 公式ホスト一覧を `0.1.1-rc.2` から `0.1.5-rc.2` へ更新(cordis `4.0.2`、schemastery `3.18.2`、新分割パッケージ群と `dsh-client-store` クライアントスタックを含む)。
48
+ - surface 置換は v3 の `startSeq`/`endSeq` 形状とブランド化 `SessionSeq` を使用。surface node のイベント解決は配列インデックスではなく seq 検索に変更。
49
+ - クライアントバンドルは削除された `@deepseek-ai/dsh-client-runtime` を参照しない。settings 型は `@deepseek-ai/dsh-client-ui-settings`、セッション hooks は `@deepseek-ai/dsh-client-ui-session` から取得。`engines.dsh >=0.1.5-alpha.1 <0.2.0-0` を宣言。
50
+ - Harness 0.1.5 はセッション `agentPreset` をブラウザへ公開しないため、クライアント側で Minimal セッションを検出できない。セレクターは選択可能なまま。
51
+ - テストを 0.1.5 のセマンティクスに更新(`.await()`、`SessionProjectionRegistry`、`stream: []`、文字列の settings 名前空間)。
52
+
53
+ ### 修正
54
+
55
+ - エスティメーターカードは Harness ホストチャネルで API キーを要求しなくなりました。ホストチャネルを選ぶと、ライブのプロバイダー/モデル ドロップダウンが表示され、実際に使われるルート(明示的な上書き、なければセッション既定モデル)を明示します。キー入力欄と 2 つ目の手入力モデル欄は表示されません — エンドポイント URL、モデルのテキスト欄、書き込み専用キーはダイレクト接続チャネルだけに属します。
56
+ - `presetOptions` の書き込みをパス指定方式に変更しました。従来はセクション全体を置き換えていたため、エスティメーターの 2 つ目のフィールド(プロバイダー、モデル、エンドポイント)に触れると `estimatorMode` と他のすべての上書きが削除され、パネルは保存成功と表示したままエスティメーターが静かにオフへ戻っていました。現在は各フィールドが自分のパスだけを書き込み、`undefined` は指定したフィールドだけを消去し、confirm-on-write はチャネル単独ではなく同じフィールド群を検証します。
57
+ - 回帰カバレッジを追加:`packages/selector/tests/preset-options-write.client.spec.ts`(パス単位の書き込み、兄弟フィールドの保持、明示的な消去、変更なし時の無書き込み、未コミット書き込みの報告)と `packages/selector/tests/estimator-channel.client.spec.tsx`(チャネル別フィールド、カタログのドロップダウン、手入力フォールバック)。
58
+
59
+ ### 追加
60
+
61
+ - 直交するコードスケルトン圧縮ゲート(`codeSkeleton.enabled`、デフォルトはオフ):超大規模なソースコード系ツール結果の初回露出時に、インポートと宣言のスケルトンを保持できます(関数本体は省略、エラー行は保持)。失敗時は元の先頭トリミングへフォールバックします。ゲートはすべてのプロファイルから独立し、正確なトークナイザー計測を前提とします。
62
+ - セレクター設定セクションにゲートのトグルを追加(簡体字中国語・英語のコピー付き)。
63
+ - 新セクションのブラウザー/ランタイム デコード整合テスト、`saveCodeSkeleton` の confirm-on-write コントラクトテスト、およびドキュメント全体のパリティ行列拡張。
64
+
65
+ ### 変更
66
+
67
+ - ESLint フラット設定ベースライン(`pnpm lint`、CI でも強制)と `pnpm test:watch` による TDD ループを追加。デッドインポートを整理し、lint ベースラインで浮かび上がった 2 つのエラー経路を強化しました。
68
+ - 本リポジトリは `WilliamShi666/dsh-context-compression-selector` の改良フォークとして管理されます。ドキュメントは英語・簡体字中国語・日本語・韓国語で提供されます。
package/CHANGELOG.ko.md CHANGED
@@ -1,35 +1,67 @@
1
- # 변경 로그(포크 추가 항목)
2
-
3
- > 전체 히스토리(업스트림 0.1.0 이전 포함)는 [CHANGELOG.md](CHANGELOG.md)를 참고하세요. 이 파일은 포크의 추가 항목만 번역한 것입니다. · [English](CHANGELOG.md) · [中文](CHANGELOG.zh.md) · [日本語](CHANGELOG.ja.md)
4
-
5
- ## Unreleased(미출시)
6
- ### Changed(0.1.5 호환 / compat/0.1.5 브랜치)
7
-
8
- - runtime 패키지를 selector 패키지로 통합했습니다. 한 번의 설치로 전체 스택이 들어오고,
9
- 저장소 루트가 설치면이 됩니다(`name`, `main`, `types`, `./pruner`와 `./invariant`를 포함한
10
- `exports`, `dependencies`, `dsh`). 툴체인, 스크립트, CI도 단일 패키지로 정리했습니다.
11
- 실기에서 검증한 estimator-catalog 라우트 등록(이중 접두사, 보호된 이중 채널 활성화, 요청별
12
- 서비스 해석, 관측 가능한 수명주기 로그)을 라인에 재적용하고 호스트 측 가드를 추가했습니다.
13
- `ab2175a`에서 `z.any()`로 낮춰졌던 settings 스키마를 복원해 Custom 기본값이 다시 게시됩니다.
14
- - 브랜치에서 공식 DeepSeek Harness `v0.1.5-rc.2`에 적응. 모든 `@deepseek-ai/dsh-*` 개발 의존성과 e2e 공식 호스트 목록을 `0.1.1-rc.2`에서 `0.1.5-rc.2`로 업데이트(cordis `4.0.2`, schemastery `3.18.2`, 새 분할 패키지들과 `dsh-client-store` 클라이언트 스택 포함).
15
- - surface 치환은 v3의 `startSeq`/`endSeq` 형태와 브랜딩된 `SessionSeq` 사용. surface node의 이벤트 해석을 배열 인덱스에서 seq 조회로 변경.
16
- - 클라이언트 번들은 제거된 `@deepseek-ai/dsh-client-runtime`을 참조하지 않음. settings 타입은 `@deepseek-ai/dsh-client-ui-settings`, 세션 hooks는 `@deepseek-ai/dsh-client-ui-session`에서 가져옴. `engines.dsh >=0.1.5-alpha.1 <0.2.0-0` 선언.
17
- - Harness 0.1.5는 세션 `agentPreset`을 브라우저에 노출하지 않으므로 클라이언트에서 Minimal 세션을 감지할 수 없음. 셀렉터는 선택 가능한 상태 유지.
18
- - 테스트를 0.1.5 시맨틱에 맞춰 업데이트(`.await()`, `SessionProjectionRegistry`, `stream: []`, 문자열 settings 네임스페이스).
19
-
20
- ### 수정
21
-
22
- - 추정기 카드가 Harness 호스트 채널에서 더 이상 API 키를 요구하지 않습니다. 호스트 채널을 선택하면 라이브 프로바이더/모델 드롭다운이 표시되고 실제로 사용될 라우트(명시적 재정의, 없으면 세션 기본 모델)를 알려줍니다. 키 입력란과 두 번째 수동 모델 입력란은 렌더링되지 않습니다 — 엔드포인트 URL, 모델 텍스트 필드, 쓰기 전용 키는 직접 연결 채널에만 속합니다.
23
- - `presetOptions` 쓰기를 경로 지정 방식으로 변경했습니다. 기존에는 섹션 전체를 교체했기 때문에 추정기의 두 번째 필드(프로바이더, 모델, 엔드포인트)를 건드리면 `estimatorMode`와 다른 모든 재정의가 삭제되어, 패널은 저장 성공을 보고하는데도 추정기가 조용히 꺼졌습니다. 이제 각 필드는 자기 경로만 쓰고, `undefined`는 지목한 필드만 지우며, confirm-on-write는 채널 하나가 아니라 같은 필드 집합을 검증합니다.
24
- - 회귀 커버리지 추가: `packages/selector/tests/preset-options-write.client.spec.ts`(경로 단위 쓰기, 형제 필드 보존, 명시적 삭제, 변경 없음 시 무쓰기, 미커밋 쓰기 보고)와 `packages/selector/tests/estimator-channel.client.spec.tsx`(채널별 필드, 카탈로그 드롭다운, 수동 폴백).
25
-
26
- ### 추가
27
-
28
- - 직교하는 코드 스켈레톤 압축 게이트(`codeSkeleton.enabled`, 기본값 off): 매우 소스코드 도구 결과가 처음 노출될 때 임포트와 선언부의 스켈레톤을 보존할 수 있습니다(함수 본문 생략, 에러 라인 유지). 실패 시 기존의 head 트리밍으로 폴백합니다. 게이트는 모든 프로파일과 독립적이며 정확한 토크나이저 측정이 전제입니다.
29
- - 셀렉터 설정 섹션에 게이트의 토글 추가(간체 중국어·영문 카피 포함).
30
- - 새 섹션의 브라우저/런타임 디코드 정합성 테스트, `saveCodeSkeleton`의 confirm-on-write 컨트랙트 테스트, 전체 문서 패리티 매트릭스 확장.
31
-
32
- ### 변경
33
-
34
- - ESLint 플랫 설정 베이스라인(`pnpm lint`, CI에서도 강제)과 `pnpm test:watch` TDD 루프를 추가. 죽은 임포트를 정리하고, lint 베이스라인에서 드러난 두 오류 경로를 보강했습니다.
35
- - 저장소는 이제 `WilliamShi666/dsh-context-compression-selector`의 개선 포크로 관리됩니다. 문서는 영어·중국어(간체)·일본어·한국어로 제공됩니다.
1
+ # 변경 로그(포크 추가 항목)
2
+
3
+ > 전체 히스토리(업스트림 0.1.0 이전 포함)는 [CHANGELOG.md](CHANGELOG.md)를 참고하세요. 이 파일은 포크의 추가 항목만 번역한 것입니다. · [English](CHANGELOG.md) · [中文](CHANGELOG.zh.md) · [日本語](CHANGELOG.ja.md)
4
+
5
+ ## 0.5.0 - 2026-09-20
6
+
7
+ ### Added(추가)
8
+
9
+ - 어드바이저리 관련도 어드바이저(통계와 제안 전용, 기본 꺼짐): 모든 턴 경계에서
10
+ fire-and-forget 패스를 실행하여, 최신 `todo/write` 이벤트에서 세션의 후미 작업 의미를
11
+ 요약하고(todolist 없으면 최근 사용자 텍스트로 폴백), 역사적 tool-result 후보의
12
+ "내용+주석 의미 현재 작업" 관련도를 증분 스코어링하며, prefix-decay 수치(characterPressure
13
+ 가중 관련도 평균의 역) 계산합니다. 관련도가 낮은 오래된 세그먼트는 `recertified`
14
+ 표시되지만 이는 향후 history 공격성 판단을 위한 제안 입력일 뿐——이번 라운드에서 이를
15
+ 소비하는 경로는 없으며, 어드바이저 출력이 착지해야 reduction 억제·지연·재작성하는
16
+ 일은 결코 없습니다(전용 불변 테스트로 고정). `presetOptions.advisor*` 설정 키로 구성
17
+ (`advisorMode` `''|'host'|'direct'`, 기본 `''`; direct 채널은 estimator 엔드포인트 재사용;
18
+ `SideChannel` 선택적 overrides 매개변수 추가로 설정 공유 없이 전송 계층 공유).
19
+ 관측성: 새로운 `advisor-outcome` 감사 레코드(content-free, summary / scoring / decay 각
20
+ 페이즈별 1개)와 읽기 전용 HTTP 라우트 `GET .../advisor-report?sessionId=`(배포 opt-in
21
+ 플래그 `advisorReportRoute`, review 라우트와 동일한 뼈대). 클라이언트 UI 는 이번 라운드에서
22
+ 의도적으로 제공하지 않습니다.
23
+
24
+ ## 0.4.0 - 2026-09-20
25
+
26
+ ### Fixed(수정)
27
+
28
+ - 플러그인이 이상 라우팅 model id 의존하지 않습니다. 모든 계획 게이트는
29
+ exact tokenizer 카운트 대신 문자 기준(Unicode 코드 포인트, `characterPressure` /
30
+ `pressureCost` 경유)으로 판단하므로, 번들 tokenizer 없는 라우트(실운영
31
+ `deepseek-flash`)에서도 리라이트가 침묵 없이 착지합니다. token 임계값의 키 이름과
32
+ 값은 유지되고(기존 4.0 문자/token 규약으로 변환, 고정된 profile 베이스라인 무변경),
33
+ token 수치는 텔레메트리로 강등되며 rewrite 감사 레코드의 새 필드 `measurementBasis`가
34
+ 정직하게 구분합니다(`exact-tokenizer` `characters`, 파생
35
+ `tokenizerId: 'characters'` / `tokenizerRevision: 'chars-per-token-4.0'`).
36
+ 롤백: 이후 변경이 이 커밋에 의존하지 않는지 확인한 뒤 `git revert 7a1972a` 를
37
+ 실행하세요.
38
+ ### Changed(0.1.5 호환 / compat/0.1.5 브랜치)
39
+
40
+ - runtime 패키지를 selector 패키지로 통합했습니다. 한 번의 설치로 전체 스택이 들어오고,
41
+ 저장소 루트가 설치면이 됩니다(`name`, `main`, `types`, `./pruner`와 `./invariant`를 포함한
42
+ `exports`, `dependencies`, `dsh`). 툴체인, 스크립트, CI도 단일 패키지로 정리했습니다.
43
+ 실기에서 검증한 estimator-catalog 라우트 등록(이중 접두사, 보호된 이중 채널 활성화, 요청별
44
+ 서비스 해석, 관측 가능한 수명주기 로그)을 이 라인에 재적용하고 호스트 측 가드를 추가했습니다.
45
+ `ab2175a`에서 `z.any()`로 낮춰졌던 settings 스키마를 복원해 Custom 기본값이 다시 게시됩니다.
46
+ - 이 브랜치에서 공식 DeepSeek Harness `v0.1.5-rc.2`에 적응. 모든 `@deepseek-ai/dsh-*` 개발 의존성과 e2e 공식 호스트 목록을 `0.1.1-rc.2`에서 `0.1.5-rc.2`로 업데이트(cordis `4.0.2`, schemastery `3.18.2`, 새 분할 패키지들과 `dsh-client-store` 클라이언트 스택 포함).
47
+ - surface 치환은 v3의 `startSeq`/`endSeq` 형태와 브랜딩된 `SessionSeq` 사용. surface node의 이벤트 해석을 배열 인덱스에서 seq 조회로 변경.
48
+ - 클라이언트 번들은 제거된 `@deepseek-ai/dsh-client-runtime`을 참조하지 않음. settings 타입은 `@deepseek-ai/dsh-client-ui-settings`, 세션 hooks는 `@deepseek-ai/dsh-client-ui-session`에서 가져옴. `engines.dsh >=0.1.5-alpha.1 <0.2.0-0` 선언.
49
+ - Harness 0.1.5는 세션 `agentPreset`을 브라우저에 노출하지 않으므로 클라이언트에서 Minimal 세션을 감지할 수 없음. 셀렉터는 선택 가능한 상태 유지.
50
+ - 테스트를 0.1.5 시맨틱에 맞춰 업데이트(`.await()`, `SessionProjectionRegistry`, `stream: []`, 문자열 settings 네임스페이스).
51
+
52
+ ### 수정
53
+
54
+ - 추정기 카드가 Harness 호스트 채널에서 더 이상 API 키를 요구하지 않습니다. 호스트 채널을 선택하면 라이브 프로바이더/모델 드롭다운이 표시되고 실제로 사용될 라우트(명시적 재정의, 없으면 세션 기본 모델)를 알려줍니다. 키 입력란과 두 번째 수동 모델 입력란은 렌더링되지 않습니다 — 엔드포인트 URL, 모델 텍스트 필드, 쓰기 전용 키는 직접 연결 채널에만 속합니다.
55
+ - `presetOptions` 쓰기를 경로 지정 방식으로 변경했습니다. 기존에는 섹션 전체를 교체했기 때문에 추정기의 두 번째 필드(프로바이더, 모델, 엔드포인트)를 건드리면 `estimatorMode`와 다른 모든 재정의가 삭제되어, 패널은 저장 성공을 보고하는데도 추정기가 조용히 꺼졌습니다. 이제 각 필드는 자기 경로만 쓰고, `undefined`는 지목한 필드만 지우며, confirm-on-write는 채널 하나가 아니라 같은 필드 집합을 검증합니다.
56
+ - 회귀 커버리지 추가: `packages/selector/tests/preset-options-write.client.spec.ts`(경로 단위 쓰기, 형제 필드 보존, 명시적 삭제, 변경 없음 시 무쓰기, 미커밋 쓰기 보고)와 `packages/selector/tests/estimator-channel.client.spec.tsx`(채널별 필드, 카탈로그 드롭다운, 수동 폴백).
57
+
58
+ ### 추가
59
+
60
+ - 직교하는 코드 스켈레톤 압축 게이트(`codeSkeleton.enabled`, 기본값 off): 매우 큰 소스코드 도구 결과가 처음 노출될 때 임포트와 선언부의 스켈레톤을 보존할 수 있습니다(함수 본문 생략, 에러 라인 유지). 실패 시 기존의 head 트리밍으로 폴백합니다. 게이트는 모든 프로파일과 독립적이며 정확한 토크나이저 측정이 전제입니다.
61
+ - 셀렉터 설정 섹션에 게이트의 토글 추가(간체 중국어·영문 카피 포함).
62
+ - 새 섹션의 브라우저/런타임 디코드 정합성 테스트, `saveCodeSkeleton`의 confirm-on-write 컨트랙트 테스트, 전체 문서 패리티 매트릭스 확장.
63
+
64
+ ### 변경
65
+
66
+ - ESLint 플랫 설정 베이스라인(`pnpm lint`, CI에서도 강제)과 `pnpm test:watch` TDD 루프를 추가. 죽은 임포트를 정리하고, lint 베이스라인에서 드러난 두 오류 경로를 보강했습니다.
67
+ - 이 저장소는 이제 `WilliamShi666/dsh-context-compression-selector`의 개선 포크로 관리됩니다. 문서는 영어·중국어(간체)·일본어·한국어로 제공됩니다.