@goodandready/dsh-context-lens 0.1.17 → 0.1.19

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/README.ru.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
- <h3>Интеллектуальный AST-скелетонизатор кода, оптимизатор контекста и компрессор логов для DeepSeek Harness</h3>
5
+ <h3>AST-скелетонизатор кода, компрессор терминальных логов и Token Guard для DeepSeek Harness</h3>
6
6
 
7
7
  <p align="center">
8
8
  <a href="https://www.npmjs.com/package/@goodandready/dsh-context-lens"><img src="https://img.shields.io/npm/v/@goodandready/dsh-context-lens.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
@@ -11,7 +11,7 @@
11
11
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
12
12
  </p>
13
13
 
14
- <!-- Обязательная кнопка перехода на витрину всех проектов -->
14
+ <!-- Кнопка перехода на витрину -->
15
15
  <p align="center">
16
16
  <a href="https://goodandready.app/"><img src="https://img.shields.io/badge/Все_проекты_автора-goodandready.app-ff4500.svg?style=for-the-badge&logo=rocket&logoColor=white&labelColor=1a1a2e" alt="Все проекты автора"></a>
17
17
  </p>
@@ -25,9 +25,9 @@
25
25
  <table align="center">
26
26
  <tr>
27
27
  <td align="center">
28
- ⭐ <strong>Если вам нравится этот плагин, поставьте ему звезду на GitHub</strong> — это покажет мне, что плагин вам полезен, и будет мотивировать меня развивать его дальше.
28
+ ⭐ <strong>Если вам нравится этот плагин, поставьте ему Star на GitHub</strong> — это покажет мне, что плагин полезен, и добавит мотивации продолжать его развитие.
29
29
  <br><br>
30
- 🐛 <strong>Если вы нашли баг или хотите предложить новый функционал</strong>, создайте issue на GitHub на любом языке — я рассмотрю ваше предложение и реализую полезные идеи в одной из следующих версий плагина.
30
+ 🐛 <strong>Если вы нашли баг или хотите предложить новую функцию</strong>, создайте Issue на GitHub на любом языке — я рассмотрю предложение и реализую полезные улучшения в одной из следующих версий плагина.
31
31
  </td>
32
32
  </tr>
33
33
  </table>
@@ -36,158 +36,143 @@
36
36
 
37
37
  ---
38
38
 
39
- ## ⚡ Обзор
39
+ ## ⚡ Обзор и решаемая проблема
40
40
 
41
- **`dsh-context-lens`** оптимизирует контекстное окно и бюджет токенов агентов **DeepSeek Harness**.
41
+ При анализе крупных проектов и выполнении тестов контекстное окно языковой модели мгновенно заполняется реализацией второстепенных файлов и простынями логов. Это приводит к перерасходу токенов, росту задержек генерации и потере внимания агента.
42
42
 
43
- Большие объёмы контекста приводят к высоким затратам токенов, замедлению генерации и быстрой перегрузке лимитов. При изучении крупных репозиториев или прогоне тестов тысячи токенов тратятся на однотипные тела функций, логи успешных тестов и сборку.
44
-
45
- Плагин внедряет **фокусировку на активных файлах, AST-скелетонизацию исходного кода (JS/TS/Python/Go/Rust/Java/C/C++/SQL) и сверхбыструю эвристическую компрессию логов**, снижая расход контекста **до 85%** при сохранении 100% сигнатур типов, интерфейсов и сообщений об ошибках.
43
+ **`dsh-context-lens`** решает эту проблему комплексно:
44
+ 1. **Фокусировка на активных путях (`context_lens_focus`)**: Редактируемые файлы передаются агенту целиком, а вспомогательные файлы рабочей зоны сворачиваются в легковесные AST-каркасы.
45
+ 2. **Многоязыковая AST-скелетонизация**: Сжатие кода на **70–85%** с сохранением классов, типов, методов и сигнатур (TypeScript, JavaScript, Python, Go, C/C++, Rust, SQL).
46
+ 3. **Эвристическая компрессия логов**: Удаление шума успешных проверок с сохранением ключевых ошибок и стек-трейсов, сжатие логов до **90%**.
47
+ 4. **Сессионная телеметрия токенов и Token Guard**: Отслеживание экономии в реальном времени, визуальные бейджи и алерты при исчерпании лимита бюджета.
46
48
 
47
49
  ```mermaid
48
50
  graph LR
49
- subgraph RawContext [Исходные файлы и терминал]
50
- Code[📁 Файлы проекта: Полные тела функций] --> LensEngine[Ядро сжатия dsh-context-lens]
51
- Logs[📋 Логи тестов: Тысячи строк шума] --> LensEngine
51
+ subgraph RawContext [Входные контекстные потоки]
52
+ Code[📁 Исходный код: Полные тела функций] --> LensEngine[Движок dsh-context-lens]
53
+ Logs[📋 Логи сборки и тестов: Многословный вывод] --> LensEngine
52
54
  end
53
55
 
54
- subgraph LensEngine [Обработка контекста]
55
- LensEngine --> Focus{Проверка фокуса}
56
+ subgraph LensEngine [Конвейер обработки контекста]
57
+ LensEngine --> Focus{Оценка фокуса}
56
58
  Focus -->|Фокусный файл| RawKeep[Полный исходный код]
57
- Focus -->|Остальной проект| AST[AST-скелетонизатор: сигнатуры, классы, типы]
58
- LensEngine --> LogFilter[Компрессор логов: стек-трейсы и ошибки]
59
+ Focus -->|Внешний контекст| AST[AST-скелетонизатор: Типы и сигнатуры]
60
+ LensEngine --> LogFilter[Компрессор логов: Только ошибки и трейсы]
59
61
  end
60
62
 
61
- subgraph Savings [Экономия токенов]
62
- AST --> Agent[🤖 Агент DSH: Компактный и быстрый контекст]
63
+ subgraph Output [Оптимизированный контекст агента]
64
+ AST --> Agent[🤖 Контекст агента DSH: Компактный промпт]
63
65
  RawKeep --> Agent
64
66
  LogFilter --> Agent
65
- Agent --> Tracker[📊 Счётчик сэкономленных токенов]
67
+ Agent --> Tracker[📊 Телеметрия экономии и Token Guard]
66
68
  end
67
69
 
68
70
  style RawContext fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4
69
71
  style LensEngine fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4
70
- style Savings fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
72
+ style Output fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
71
73
  ```
72
74
 
73
75
  ---
74
76
 
75
- ## ✨ Ключевые возможности
76
-
77
- ### 1. 🧬 Мультиязычный AST-скелетонизатор кода (`lib/ast/skeletonizer.js`)
78
- * Извлекает структурные интерфейсы, сигнатуры функций, методы классов, типы и экспорты для **TypeScript, JavaScript, Python, Go, Rust и Java**;
79
- * Поддерживает `pub async fn`, `async fn`, `pub(crate)` и `pub(super)` в Rust;
80
- * Сохраняет JSDoc, docstrings и структурные комментарии над определениями;
81
- * Удаляет внутренние тела функций и комментарии реализации, оставляя точную архитектуру файла;
82
- * Позволяет агенту обозревать всю структуру проекта без загрузки лишних десятков тысяч токенов.
83
-
84
- ### 2. 🗜️ Быстрый компрессор логов (`lib/compression/log-compressor.js`)
85
- * Высокопроизводительный $O(n)$ фильтр шума логов тестирования и сборки (Jest, Vitest, Pytest, Go test, NPM, Webpack, Cargo, Maven/Gradle);
86
- * Автоматическая очистка терминальных ANSI-эскейп последовательностей;
87
- * Вырезает успешные проверки (`PASS`, `✓`, `ok`) и служебные уведомления;
88
- * Сохраняет строки падений, стек-трейсы, расхождения в утверждениях (`Expected ... Received ...`) и контекстное окружение ошибки;
89
- * 3 Режима сжатия: `raw`, `balanced`, `aggressive`.
90
-
91
- ### 3. 🎯 Фокусировка на активных путях (`context_lens_focus`)
92
- * Динамическое назначение рабочих файлов/директорий;
93
- * Все внешние файлы проекта автоматически сворачиваются в легкие структурные скелеты.
94
-
95
- ### 4. 📊 Трекер экономии токенов (`lib/tokens/tracker.js` & `lib/client.js`)
96
- * Фиксация точного числа токенов до и после сжатия;
97
- * Подсчёт накопленной экономии за сессию с отображением процента эффективности в Web UI;
98
- * Контроль сессионного бюджета токенов (Token Budget Guard) с предупреждением при превышении 90%.
77
+ ## ✨ Полный разбор возможностей
78
+
79
+ ### 1. 🧬 Многоязыковой AST-скелетонизатор
80
+ * **Поддерживаемые языки**: TypeScript, JavaScript, Python, Go, C/C++, Rust, SQL DDL.
81
+ * **Сохранение архитектурной структуры**: Оставляет импорты, классы, интерфейсы, сигнатуры функций и документирующие комментарии, вырезая громоздкие тела методов.
82
+ * **Многострочные сигнатуры**: Корректно аккумулирует сложные типизированные параметры и возвращаемые промисы до терминаторов блоков.
83
+ * **Чистый регулярный парсер**: Нулевой оверхед, отсутствие бинарных парсеров и мгновенная работа на любой ОС.
84
+
85
+ ### 2. 📋 Эвристический компрессор логов тестирования и сборки
86
+ * **Поддерживаемые инструменты**: Jest, Vitest, Pytest, Go test, Cargo, Webpack, Vite, TSC, Maven, Gradle.
87
+ * **Точечная фильтрация**: Сохраняет сообщения об ошибках, стек-трейсы, различия в assert (`Expected ... Received ...`) и строки контекста падений.
88
+ * **3 режима сжатия**:
89
+ - `raw`: Фильтрация очевидного шума с сохранением общего хода выполнения.
90
+ - `balanced`: Баланс между сжатием и контекстом вокруг упавших тестов (по умолчанию).
91
+ - `aggressive`: Выделение строго строк ошибок и фреймов вызовов.
92
+ * **Очистка ANSI**: Автоматическое удаление цветовых кодов терминала.
93
+
94
+ ### 3. 🎯 Сессионная фокусировка (`context_lens_focus`)
95
+ * Задаёт список рабочих файлов или каталогов, редактируемых в рамках текущей задачи.
96
+ * Фокус строго изолирован в разрезе сессии (`sessionId`).
97
+ * Сброс фокуса доступен в один клик через кнопку в интерфейсе или вызов `context_lens_focus` с пустым списком.
98
+
99
+ ### 4. 📊 Трекер экономии токенов и Token Guard
100
+ * Расчёт реального расхода до и после сжатия.
101
+ * Отображение суммарно сэкономленных токенов, процента оптимизации и шкалы сессионного бюджета.
102
+ * Настраиваемый порог предупреждения (`budgetAlertPercent`) с динамической сменой статуса индикатора.
103
+
104
+ ### 5. 🖥️ Визуальные интерфейсы и совместимость с боковыми панелями
105
+ Context Lens оформлен по единому стандарту дизайн-системы `.cl-*` и токенов `--dsw-alias-*`:
106
+ * **Индикатор в шапке диалога**: Размещён в слоте `conversation.session.header.utilities` (`order: 7`). Показывает статус (`◐ Lens`, `◐ <N>%` или `⚠`) и открывает интерактивный Popover с метриками и историей операций.
107
+ * **Поддержка двух боковых панелей**: Совместим как с нативной правой панелью DSH (`ctx.sidebarRightTabs` + слот `sidebar.right.pane.tab`), так и с легаси `dsh-better-sidebar`.
108
+ * **Изоляция сбоев (ErrorBoundary)**: Все визуальные компоненты обёрнуты в защитные границы React с кнопкой повтора («Retry»).
109
+ * **Встроенный One-Click апдейтер**: Проверка обновлений в npm и безопасная установка в один клик из карточки настроек.
99
110
 
100
111
  ---
101
112
 
102
- ## 🛠️ Инструменты агента (4 инструмента)
113
+ ## 🛠️ Справочник инструментов агента (5 инструментов)
114
+
115
+ Все инструменты строго соответствуют контракту DSH: метод `output.render` возвращает массив `ContentBlock[]` (`[{ type: 'text', text: ... }]`), исключая повреждение сессий в ядре `@deepseek-ai/dsh-llm`.
103
116
 
104
117
  | Имя инструмента | Параметры | Описание |
105
118
  |---|---|---|
106
- | `context_lens_focus` | `paths: string[]`, `maxDepth?: number` | Задаёт пути активного фокуса; всё остальное сворачивается в AST-скелеты |
107
- | `context_lens_compress_log` | `text: string` *(или `log`)*, `mode?: "raw"\|"balanced"\|"aggressive"`, `maxLines?: number`, `auto?: boolean` | Сжимает вывод тестов и терминала, сохраняя стек-трейсы и ошибки |
108
- | `context_lens_compress_code` | `code: string`, `language?: string`, `maxDepth?: number`, `filePath?: string` | Генерирует структурный AST-скелет из переданного исходного кода |
109
- | `context_lens_stats` | *(нет)* | Возвращает метрики сэкономленных токенов, историю и статус бюджета |
119
+ | `context_lens_focus` | `paths: string[]`, `sessionId?: string` | Назначает активные рабочие файлы сессии; сворачивает внешнее окружение в AST-каркасы |
120
+ | `context_lens_compress_log` | `text: string` *(или `log`)*, `mode?: "raw"|"balanced"|"aggressive"`, `maxLines?: number`, `auto?: boolean` | Сжимает вывод тестов и терминала, сохраняя только ошибки и контекст падений |
121
+ | `context_lens_compress_code` | `code: string`, `language?: string`, `maxDepth?: number`, `filePath?: string`, `sessionId?: string` | Формирует структурный AST-скелет из исходного кода |
122
+ | `context_lens_track` | `sessionId?: string` | Возвращает накопленную статистику экономии токенов, историю и статус бюджета сессии |
123
+ | `context_lens_reset` | `sessionId?: string` | Сбрасывает накопленные счётчики и историю сжатий при старте новой задачи |
110
124
 
111
125
  ---
112
126
 
113
- ## 📦 Быстрая установка
127
+ ## 🔌 HTTP API плагина
114
128
 
115
- ```bash
116
- dsh plugin --profile web add @goodandready/dsh-context-lens
117
- ```
129
+ | Маршрут | Метод | Защита и проверки | Описание |
130
+ |---|---|---|---|
131
+ | `/dsh-context-lens/status` | `GET` | Открытый (safe read) | Возвращает сессионную статистику, активные пути фокуса и историю сжатий |
132
+ | `/dsh-context-lens/clear-focus` | `POST` | Loopback / Same-Origin | Сбрасывает пути фокуса для указанной сессии (GET отклоняется с кодом 405) |
133
+ | `/dsh-context-lens/compress-preview` | `POST` | Loopback / Same-Origin | Предпросмотр сжатия лога с лимитом тела 256 КБ и клампингом `maxLines` (1–5000) |
134
+ | `/api/dsh-context-lens/update` | `GET`, `POST` | Loopback + заголовок защиты | Модуль фонового обновления плагина из официального реестра npm |
118
135
 
119
136
  ---
120
137
 
121
- ## ⚙️ Пример конфигурации (`settings.yaml`)
138
+ ## ⚙️ Справочник настроек (`settings.yaml`)
139
+
140
+ Настройки доступны через `settings.yaml` или в интерфейсе DSH во вкладке **Настройки → Плагины → Context Lens**.
122
141
 
123
142
  ```yaml
124
143
  dsh-context-lens:
125
- compressionMode: balanced # 'raw', 'balanced' или 'aggressive'
126
- astSkeletonMaxDepth: 3 # Максимальная глубина обхода AST-сигнатур (1..10)
127
- tokenSavingsTracking: true # Включить трекинг сэкономленных токенов
128
- autoCompressThreshold: 4000 # Порог авто-сжатия в символах (0 для отключения)
144
+ compressionMode: balanced # Режим сжатия логов: 'raw', 'balanced', или 'aggressive'
145
+ astSkeletonMaxDepth: 3 # Максимальная глубина обхода сигнатур AST (1..10)
146
+ tokenSavingsTracking: true # Отслеживание и отображение экономии токенов
147
+ autoCompressThreshold: 4000 # Порог автосжатия логов в символах (0 для отключения)
129
148
  budgetLimit: 100000 # Сессионный лимит бюджета токенов
130
- autoCollapse: true # Автоматически сворачивать UI при исчерпании бюджета
149
+ budgetAlertPercent: 90 # Процент бюджета для вывода предупреждения (50..99)
150
+ autoCollapse: true # Отображение предупреждающего бейджа при исчерпании бюджета
131
151
  ```
132
152
 
133
- ---
153
+ | Параметр | Тип | По умолчанию | Описание |
154
+ |---|---|---|---|
155
+ | `compressionMode` | `string` | `balanced` | Базовый режим сжатия логов (`raw`, `balanced`, `aggressive`) |
156
+ | `astSkeletonMaxDepth` | `number` | `3` | Максимальная глубина вложенности AST-сигнатур (от 1 до 10) |
157
+ | `tokenSavingsTracking` | `boolean` | `true` | Расчёт сэкономленных токенов до и после сжатия |
158
+ | `autoCompressThreshold` | `number` | `4000` | Порог авто-сжатия терминального вывода (символов) |
159
+ | `budgetLimit` | `number` | `100000` | Выделенный бюджет токенов на одну сессию |
160
+ | `budgetAlertPercent` | `number` | `90` | Процент расхода бюджета для активации предупреждения (от 50 до 99) |
161
+ | `autoCollapse` | `boolean` | `true` | Отображение бейджа низкого бюджета в карточке настроек и шапке |
134
162
 
135
- ## 📝 История версий
163
+ ---
136
164
 
137
- ### v0.1.10
138
- * **Fix**: Регистрация индикатора сессии в актуальном слоте ядра `conversation.session.header.utilities` (`order: 7`).
139
- * **Fix**: Чип теперь отображается всегда (`◐ Lens` при отсутствии сжатий, `◐ <N>%` при наличии сэкономленных токенов, `⚠` при низком остатке бюджета).
140
- * **Feature**: Интерактивный выпадающий Popover по клику на чип: детальные метрики токенов, шкала прогресса бюджета, последние 3 операции и кнопка обновления.
165
+ ## 📦 Быстрая установка
141
166
 
142
- ### v0.1.9
143
- * **Fix**: Удаление устаревших модулей ядра из инъекций клиента для совместимости с DSH 0.1.2-rc.1.
167
+ ```bash
168
+ dsh plugin --profile web add @goodandready/dsh-context-lens
169
+ ```
144
170
 
145
- ### v0.1.8
146
- * **Fix**: Поддержка как `text`, так и `log` в параметрах инструмента `context_lens_compress_log`.
147
- * **Fix**: Кроссплатформенное разрешение путей в тестах на Windows (`fileURLToPath`).
148
- * **Fix**: Динамическая передача и учёт `budgetLimit` в трекере токенов.
149
- * **Fix**: Корректная обработка цветных логов с терминальными ANSI-кодами.
150
- * **Fix**: Расширена поддержка Rust (`pub async fn`, `pub(crate)`) и правильные комментарии `#` для Python в AST-скелетонизаторе.
171
+ > [!TIP]
172
+ > После установки перезагрузите страницу Web UI или перезапустите сервис (`systemctl --user restart dsh-web`) для активации инструментов контекста.
151
173
 
152
174
  ---
153
175
 
154
176
  ## 📄 Лицензия
155
177
 
156
178
  MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
157
-
158
- ## Changed in v0.1.11
159
-
160
- Исправления audit #33–#47 / #18: режим auto-compress не форсирует balanced; budgetLimit останавливает подсчёт; focus per-session; поля settings card; optional betterSidebar; серверный preview; Python imports / Java locals; общий estimateTokens; удалён unused peer dsh-credentials.
161
-
162
- ## Changed in v0.1.12
163
-
164
- #43: extract shared `StatusPanel` used by LensTab and HeaderChip popover (budget bar, history, refresh).
165
-
166
- ## Changed in v0.1.13
167
-
168
- - **Fix (#50)**: Безопасная регистрация вкладки BetterSidebar через `ctx.inject(['betterSidebar'], ...)` вместо прямого чтения свойства из Cordis Context Proxy. Устранена ошибка `cannot get property "betterSidebar" without inject` при загрузке клиентской половины в DSH.
169
- - **Fix (#50)**: Безопасное обращение к `_ctx.settingsScope` в `PluginCard` через try/catch.
170
- - **Тесты**: Добавлены регрессионные тесты со строгим Cordis Context Proxy.
171
-
172
- ## Changed in v0.1.15
173
-
174
- - **Функциональность (#54)**: Поддержка встроенной правой боковой панели DSH (`ctx.sidebarRightTabs` + слот `sidebar.right.pane.tab`) из DSH 0.1.5-alpha.1.
175
- - **Совместимость (#54)**: Сохранена интеграция с легаси `dsh-better-sidebar` с детерминированными неконфликтующими идентификаторами (`@goodandready/dsh-context-lens` и `dsh-context-lens:tab`).
176
- - **Отказоустойчивость (#54)**: Чистая инициализация во всех 4 конфигурациях (только Native, только Legacy, обе активны, обе отсутствуют).
177
- - **Тесты (#54)**: Добавлена матрица тестов в `test/sidebar-matrix-54.test.mjs`.
178
-
179
- ## Changed in v0.1.14
180
-
181
- - **Исправление (#52)**: Поддержка многострочных сигнатур функций и методов в `skeletonizer.js` (TypeScript, JavaScript, Rust, Go) со сложными типами параметров и аннотациями возвращаемых значений.
182
- - **Функция (#52)**: Добавлен инструмент `context_lens_reset` для сброса собранной статистики токенов и истории сжатий перед запуском новой задачи.
183
- - **Качество и локализация (#52)**: Динамическое переключение языка интерфейса (RU/EN) в чипе шапки (`HeaderChip`), боковой вкладке (`LensTab`) и панели статуса (`StatusPanel`) через `ctx.locale`.
184
- - **Производительность (#52)**: Адаптивный поллинг в `HeaderChip` с паузой при неактивной вкладке браузера (`document.visibilityState`) и учащённым опросом (4 сек) только при открытом поповере.
185
- - **Стабильность (#52)**: Атомарное сохранение конфигурации в карточке настроек (`scope.patch` / `scope.setAll`) без риска частичной записи.
186
-
187
- ### Визуальный стиль и отказоустойчивость UI (v0.1.16+)
188
-
189
- Context Lens приведен к единому стандарту оформления `dsh-clinebot`:
190
- - **Нативные токены**: 100% совместимость со светлой и тёмной темами DSH через токены `--dsw-alias-*`.
191
- - **Изоляция сбоев интерфейса**: Компоненты (`PluginCard`, `LensTab`, `StatusPanel`) обёрнуты в `ErrorBoundary` с кнопкой быстрого повтора («Retry»).
192
- - **Реактивные настройки**: Автоматическое обновление через `scope.subscribe()` и мгновенное чтение через `scope.getSnapshot()`.
193
- - **Наглядная телеметрия**: Компактные карточки метрик сэкономленных токенов, процента оптимизации и шкалы сессионного бюджета.
package/README.zh.md CHANGED
@@ -36,11 +36,15 @@
36
36
 
37
37
  ---
38
38
 
39
- ## ⚡ 插件概览
39
+ ## ⚡ 插件概览与问题背景
40
40
 
41
- **`dsh-context-lens`** 为 **DeepSeek Harness** 智能体提供深度上下文窗口与 Token 预算优化。
41
+ 超长代码库上下文与冗长的构建/测试输出流会迅速填满大语言模型的上下文窗口,造成严重的 Token 资金浪费、显著增加推理延迟,并导致智能体注意力涣散与幻觉。
42
42
 
43
- 超长上下文不仅消耗高昂 Token 成本,还会导致模型注意力涣散并频繁触发限流。本插件通过**工作区文件焦点聚焦、跨语言 AST 结构骨架提取(支持 JS/TS/Python/Go/Rust/Java/C/C++/SQL)以及 $O(n)$ 终端测试日志启发式精简**,在保留 100% 架构接口与错误堆栈的前提下,将上下文体积削减**高达 85%**。
43
+ **`dsh-context-lens`** 提供了完整的上下文优化管线:
44
+ 1. **工作区焦点聚焦 (`context_lens_focus`)**:对当前正在编辑的核心文件保持 100% 完整源码,将其余依赖代码库自动精简为轻量级 AST 骨架。
45
+ 2. **多语言 AST 结构骨架化**:支持 TypeScript, JavaScript, Python, Go, C/C++, Rust, SQL DDL,完整保留类型、类结构与函数签名,将源码体积削减 **70–85%**。
46
+ 3. **启发式测试日志压缩**:自动消除测试通过的冗余输出,精准萃取关键报错堆栈、断言差异与失败上下文,将日志体积削减高达 **90%**。
47
+ 4. **会话 Token 遥测与预算守卫**:实时精确统计压缩前后节省的 Token 数量,支持自定义预算水位预警并在 DSH 界面直观显示。
44
48
 
45
49
  ```mermaid
46
50
  graph LR
@@ -70,12 +74,103 @@ graph LR
70
74
 
71
75
  ---
72
76
 
73
- ## 📦 安装指南
77
+ ## ✨ 核心特性深度解析
78
+
79
+ ### 1. 🧬 跨语言 AST 结构骨架提取器
80
+ * **支持语言**:TypeScript, JavaScript, Python, Go, C/C++, Rust 以及 SQL DDL。
81
+ * **架构完整性**:保留所有模块导入、类定义、接口、导出类型、函数签名与文档注释,剔除内部庞大实现细节。
82
+ * **多行签名提取**:无缝解析复杂的跨行泛型参数、长参数列表与返回类型注解。
83
+ * **纯正则轻量化实现**:零重型原生依赖,零二进制解析器包袱,极速跨平台运行。
84
+
85
+ ### 2. 📋 启发式终端日志精简引擎
86
+ * **支持测试与构建工具**:Jest, Vitest, Pytest, Go test, Cargo, Webpack, Vite, TSC, Maven, Gradle。
87
+ * **定向错误萃取**:精准识别报错摘要、异常调用堆栈、断言匹配差异 (`Expected ... Received ...`) 与错误上下文窗口。
88
+ * **3 种压缩模式**:
89
+ - `raw`:过滤基础噪音行,保留总体执行日志。
90
+ - `balanced`:在压缩率与报错上下文之间保持平衡(默认推荐)。
91
+ - `aggressive`:严格仅保留报错行与堆栈帧。
92
+ * **ANSI 码清理**:预先剥离终端控制字符与彩色 ANSI 转义序列。
93
+
94
+ ### 3. 🎯 会话文件焦点范围管理 (`context_lens_focus`)
95
+ * 允许针对当前任务设定一组活跃聚焦文件或目录。
96
+ * 焦点文件保持完整代码,未聚焦文件自动折叠为 AST 结构骨架。
97
+ * 焦点状态在会话级别严格隔离 (`sessionId`),可通过 UI 或 API 一键清除。
98
+
99
+ ### 4. 📊 Token 消耗遥测与预算守卫
100
+ * 采用精准分词估算逻辑,实时计算压缩前后的 Token 变化。
101
+ * 统计累计节省 Token、压缩比率与会话预算百分比。
102
+ * 支持设置预警阈值 (`budgetAlertPercent`),预算临界时动态发出提示。
103
+
104
+ ### 5. 🖥️ 视觉界面与双侧边栏原生集成
105
+ 完全遵循 `.cl-*` 设计标准与 DeepSeek Harness `--dsw-alias-*` 主题变量系统:
106
+ * **对话顶栏微件**:挂载于 `conversation.session.header.utilities` 槽位(`order: 7`)。常态化显示效率徽章(`◐ Lens`, `◐ <N>%` 或 `⚠` 警告),点击展开包含详细数据与操作记录的交互式 Popover。
107
+ * **双侧边栏深度兼容**:同时支持 DSH 原生右侧边栏(`ctx.sidebarRightTabs` + `sidebar.right.pane.tab`)及旧版 `dsh-better-sidebar`,独立 ID 互不冲突。
108
+ * **ErrorBoundary 容灾屏障**:所有视图组件(`PluginCard`, `LensTab`, `StatusPanel`)均包裹在独立 React 错误边界内,避免页面崩溃。
109
+ * **一键平滑升级**:设置卡片实时检测 npm 最新版本并支持免命令行一键升级。
110
+
111
+ ---
112
+
113
+ ## 🛠️ 智能体工具参考 (5 Tools)
114
+
115
+ 所有工具严格遵循 DeepSeek Harness 核心工具契约规范,`output.render` 均返回规范的 `ContentBlock[]` 数组 (`[{ type: 'text', text: ... }]`),保障底层会话日志投影 100% 稳定可靠。
116
+
117
+ | 工具名称 | 参数 | 说明 |
118
+ |---|---|---|
119
+ | `context_lens_focus` | `paths: string[]`, `sessionId?: string` | 设定当前会话的活跃聚焦文件/路径;未聚焦代码自动折叠为 AST 骨架 |
120
+ | `context_lens_compress_log` | `text: string` *(或 `log`)*, `mode?: "raw"|"balanced"|"aggressive"`, `maxLines?: number`, `auto?: boolean` | 精简终端与测试输出日志,仅保留核心错误信息与报错堆栈 |
121
+ | `context_lens_compress_code` | `code: string`, `language?: string`, `maxDepth?: number`, `filePath?: string`, `sessionId?: string` | 将源代码提炼为紧凑的结构化 AST 骨架 |
122
+ | `context_lens_track` | `sessionId?: string` | 获取当前会话的累计 Token 节省统计、历史记录与预算状态 |
123
+ | `context_lens_reset` | `sessionId?: string` | 开启新任务时重置 Token 追踪计数器与历史记录 |
124
+
125
+ ---
126
+
127
+ ## 🔌 HTTP 接口参考
128
+
129
+ | 路由 | 请求方法 | 权限与安全策略 | 功能说明 |
130
+ |---|---|---|---|
131
+ | `/dsh-context-lens/status` | `GET` | 开放只读 | 查询会话 Token 节省数据、当前焦点路径与操作历史 |
132
+ | `/dsh-context-lens/clear-focus` | `POST` | 仅限环回 (Loopback) / 同源 | 清除指定会话的焦点路径设置(GET 请求返回 405) |
133
+ | `/dsh-context-lens/compress-preview` | `POST` | 仅限环回 / 同源 | 日志压缩预览(限制请求体 256KB,`maxLines` 范围 1–5000) |
134
+ | `/api/dsh-context-lens/update` | `GET`, `POST` | 环回 + 安全请求头校验 | 应用内一键升级模块,安全调用后台进行版本更新 |
135
+
136
+ ---
137
+
138
+ ## ⚙️ 配置面板参考 (`settings.yaml`)
139
+
140
+ 可通过 `settings.yaml` 或在 DSH Web 界面中的 **设置 → 插件设置 → Context Lens** 进行配置。
141
+
142
+ ```yaml
143
+ dsh-context-lens:
144
+ compressionMode: balanced # 日志精简策略: 'raw', 'balanced', 或 'aggressive'
145
+ astSkeletonMaxDepth: 3 # AST 结构骨架最大解析深度 (1..10)
146
+ tokenSavingsTracking: true # 开启并展示实时 Token 节省监控
147
+ autoCompressThreshold: 4000 # 自动触发日志精简的字符长度阈值 (设为 0 禁用)
148
+ budgetLimit: 100000 # 单会话 Token 预算上限限额
149
+ budgetAlertPercent: 90 # 触发预警徽章的预算百分比水位 (50..99)
150
+ autoCollapse: true # 预算临界时在界面显示警告徽章
151
+ ```
152
+
153
+ | 参数项 | 类型 | 默认值 | 功能说明 |
154
+ |---|---|---|---|
155
+ | `compressionMode` | `string` | `balanced` | 默认日志压缩激进度 (`raw`, `balanced`, `aggressive`) |
156
+ | `astSkeletonMaxDepth` | `number` | `3` | AST 骨架提取最大深度层级(1 至 10) |
157
+ | `tokenSavingsTracking` | `boolean` | `true` | 实时追踪压缩前后的 Token 节省数据 |
158
+ | `autoCompressThreshold` | `number` | `4000` | 超过该字符长度时自动执行日志压缩 |
159
+ | `budgetLimit` | `number` | `100000` | 单会话分配的最大 Token 预算上限 |
160
+ | `budgetAlertPercent` | `number` | `90` | 触发低预算预警的百分比阈值(50 至 99) |
161
+ | `autoCollapse` | `boolean` | `true` | 在设置卡片与顶栏徽章中显示预算告急提示 |
162
+
163
+ ---
164
+
165
+ ## 📦 快速安装
74
166
 
75
167
  ```bash
76
168
  dsh plugin --profile web add @goodandready/dsh-context-lens
77
169
  ```
78
170
 
171
+ > [!TIP]
172
+ > 安装完成后,请刷新 DSH Web 界面或重启服务 (`systemctl --user restart dsh-web`) 以激活上下文压缩工具。
173
+
79
174
  ---
80
175
 
81
176
  ## 📄 开源协议