viway — Project Knowledge Base Secretary
VSCode-расширение, которое автоматически ведёт структурированную базу знаний проекта в .viway/ (8 папок: 00_archive / 01_intent / 02_inputs / 03_process / 04_relations / 05_plans / 06_open / 07_visualization). Читает транскрипты Claude Code и Codex CLI, пишет структурированные ops через OpenRouter или Anthropic API.
Текущая версия: 0.6.2
Что делает расширение
| Возможность |
Как работает |
| Per-turn агент (▶ Запустить) |
На каждый turn запускается agent loop с workspace-tools (read_file, search_workspace, list_directory, read_git_log, read_viway, read_processed_history, check_existing, read_open_questions). Применяет 1-5 ops/папку. |
| Harvest агент (✨ Собрать) |
Полный re-synthesis выбранной папки: 30 итераций recon → write. |
| Stop hook auto-process |
После каждого ответа Claude Code автоматически запускает per-turn агента (5s debounce + 90s settle window). |
| Snapshot + restore |
Снимок .viway/ перед каждой обработкой, откат через QuickPick. |
| Live timeline |
Горизонтальная лента турнов в сайдбаре. Auto-scroll к последнему, edge-fade indicators, цветовая кодировка статусов. |
| Turn detail |
Кликабельные блоки → отдельный webview с tool calls log + applied ops + errors. |
| Settings webview |
12 секций, ~40 настроек: провайдер / модель / depth / tools whitelist / промпты / sampling / routing. |
| 🆕 Audit / Аудит работы (0.6.2) |
viway: Аудит работы секретаря или кнопка «Аудит» в дашборде. Markdown-отчёт: cumulative cost, status histogram, аномалии (failed / partial / auto-journal / high-reproc), последние 20 turn'ов, Stop hook boundaries, last-call inline. |
| Bundled fonts |
PT Sans (Latin + Cyrillic) + JetBrains Mono в VSIX (~191 KB) — работает offline / в corporate proxy. |
Что нового в 0.6.2
- T121 — окончательный фикс дробления турнов: убран
SUB_END_TURNS_PER_CHUNK=3 (count-based split). Один user-message теперь = один agent loop, без искусственного раздробления. Расход −20-30% на сессиях с длинными tool loops.
- Stop hook →
~/.viway/turn-boundaries.jsonl: authoritative END-маркер каждого turn'а. База для аналитики и future parser integration.
- Log Analyzer / «Аудит работы секретаря»: новая VSCode команда + кнопка в дашборде.
- UI: chips Src/Vol/Depth перенесены в «Состояние» как status-row'ы. «Действия» переехали в самый низ дашборда.
Подробнее в CHANGELOG.md.
Что нового в 0.6.1
- T120 — parser thinking-only fix: Opus 4.x extended-thinking режим записывает каждый ответ как 2 entries (thinking + text), парсер раньше считал оба как sub-end_turn → дробил turn. Фикс пропускает thinking-only entries.
- Speed/cost оптимизации OpenRouter:
parallel_tool_calls: true (−15-25s/turn), transforms: ['middle-out'] (−30% input на длинных loops), provider: { sort: 'throughput' } (автовыбор быстрейшего backend).
- UI редизайн «Обработка диалога»: auto-process → лампа без текста, timeline auto-scroll к последнему turn'у, session selector превратился в полноценный
<select> dropdown, Запустить/Остановить — single toggle button.
Установка
Из marketplace
code --install-extension viway.viway-v3
После установки:
- Cmd+Shift+P →
viway: Создать .viway/ → выбери workspace.
- Cmd+Shift+P →
viway: Settings → задай OpenRouter или Anthropic ключ.
- Cmd+Shift+P →
viway: Установить Stop hook → авто-обработка после каждого ответа.
Из VSIX вручную
code --install-extension viway-v3-0.6.2.vsix --force
Требования
- Node.js 18+ (только для сборки)
- VSCode 1.90+ (или Antigravity)
- API ключ: OpenRouter (есть free tier) или Anthropic
code в PATH
Сборка из исходников
cd <repo>/v3/extension
npm install
npx tsc --noEmit # type check
npm test # 63 теста vitest
npm run package # собирает viway-v3-<version>.vsix
Структура исходников
| Путь |
Назначение |
src/extension.ts |
Entry point, command handlers, AppState |
src/secretary/turnAgent.ts |
Per-turn agent loop |
src/secretary/synthesizer.ts |
Harvest agent (✨ Собрать) |
src/secretary/agentTools.ts |
8 read tools (read_file, search_workspace, list_directory, read_git_log, read_viway, read_processed_history, check_existing, read_open_questions) |
src/secretary/applier.ts |
Op application + 6 защитных слоёв |
src/secretary/openRouterClient.ts |
OpenRouter (parallel_tool_calls + middle-out + throughput sort) |
src/secretary/anthropicClient.ts |
Anthropic SDK |
src/transcript/parser.ts |
Claude jsonl parser — T120/T121 fixes against splitting |
src/transcript/codex.ts |
Codex jsonl parser |
src/state/manager.ts |
Atomic JSON state persistence (mutex + EXDEV fallback) |
src/ui/dashboard.ts |
Sidebar webview (timeline + session dropdown + folder cards) |
src/ui/settingsView.ts |
Settings webview tab |
src/ui/turnDetailView.ts |
Turn detail webview tab |
src/ui/logAnalyzer.ts |
🆕 Markdown audit report builder (0.6.2) |
src/snapshot/snapshotter.ts |
.viway/ snapshots |
src/hook/installer.ts |
Stop hook setup |
hooks/stop.py |
Stop hook script — пишет turn-boundaries.jsonl |
prompts/ |
System prompt + 7 per-folder overlays |
template/ |
.viway/ skeleton (8 папок) |
media/fonts/ |
Bundled WOFF2 (PT Sans + JetBrains Mono) |
dist/ |
Собранный runtime — НЕ РЕДАКТИРУЙ |
Ключи и настройки
API ключи хранятся в VSCode SecretStorage:
viway.openRouterApiKey
viway.anthropicApiKey
Активный провайдер: viway.provider (openrouter | anthropic)
Ключевые настройки агента (Settings webview):
viway.agentDepth (quick / standard / deep / unlimited) — max iterations per-turn
viway.maxOpsPerFolder (1-5, default 1) — лимит ops на папку за turn
viway.toolReadBudget (default 200_000 chars) — soft cap на tool-result контекст
viway.harvestUseAgentLoop (default true) — agentic harvest vs legacy single-shot
viway.harvestAgentMaxIterations (default 30) — max iterations для ✨ Собрать
viway.transcriptSource (all / claude / codex) — какой CLI читать
viway.processScope (lastSession / lastTurn / last5Turns) — объём для ▶ Запустить
viway.legacyWorkspacePaths — старые пути проекта при перемещении
viway.maxTokens (default 64128) — output budget per call
viway.reasoning (off / low / medium / high) — thinking budget
viway.includeThinking — передавать секретарю [thinking] блоки Claude в slice
viway.autoProcess (default true) — авто-обработка по Stop hook
viway.selfVerification (default true) — self-verify ops после applier
Workspace migration
При перемещении папки добавь старый путь в viway.legacyWorkspacePaths — тогда старые транскрипты Claude Code из ~/.claude/projects/<encoded-path>/*.jsonl найдутся. Codex сессии не восстанавливаются (cwd зашит в session_meta).
State persistence (.viway/.state/)
| Файл |
Назначение |
processed.json |
Курсоры обработки per-session + per-turn records |
harvest-history.json |
История ✨ Собрать с cursors per-folder |
harvest-logs/<folder>.<iso>.json |
Детальная trace каждого harvest run |
turn-logs/<session>.<endUuid>.json |
Детальная trace каждого per-turn run |
cumulative-metrics.json |
Накопительные метрики (calls / tokens / cost / conflicts) |
processing-history.json |
Последние 50 запусков (для дашборда) |
errors.json |
Кольцевой буфер последних 50 ошибок |
snapshots.json |
Реестр snapshot'ов |
endpoint.json |
Hook server endpoint |
last-call.md |
Markdown-диагностика последнего вызова |
~/.viway/turn-boundaries.jsonl |
🆕 Stop hook authoritative END-маркеры (0.6.2) |
Diagnostics
Если что-то идёт не так:
- Странный расход / много iterations → Cmd+Shift+P →
viway: Аудит работы секретаря (0.6.2). Покажет аномалии и last-call inline.
- Per-turn ничего не пишет → открой Turn detail кликом по блоку в timeline, проверь Tool calls + Errors секции.
- Harvest 0 ops →
cat .viway/.state/harvest-logs/<folder>.<iso>.json | python3 -m json.tool — увидишь tool calls и finalAssistantText (модель часто объясняет почему пропустила).
- Транскрипты не находятся после перемещения → ⚙ → Workspace alias paths → добавь старый путь.
- VSCode не видит новую версию VSIX → ⚙ → Обслуживание → 🔄 Обновить расширение (Reload Window).
- «Опять разделил диалог» → проверь версию extension'а: 0.6.0 имел count-based split (фикс в 0.6.1 для thinking, 0.6.2 убрал count полностью).
Тесты
npx vitest run # 63 теста
Покрытие: parser (T120/T121 регрессии), applier (защитные слои), state manager, synthesizer, prompt routing, codex parser, time utils, graph viewer.
Лицензия
MIT
| |