diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 59d0c02..64c7937 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,84 +1,51 @@ --- -_last_updated_: 2026-08-22T16:45:00Z -session_id: llm-web-proxy-2026-08-22 +_last_updated_: 2026-08-22T14:49:52Z +session_id: llm-web-proxy-deploy-2026-08-22 --- # Next session handoff -## llm-web-proxy — построен (эта сессия) +## Recent commits (эта сессия) +- llm-web-proxy `8dd8a45` feat: configurable modelPrefix — lwp/ aliases (default off, backward compat) +- llm-web-proxy `6342d85` fix(version): честный semver 0.1.5 (sed промахивался в 3 коммитах) +- llm-web-proxy `675112b` feat: lwp config set port +- llm-web-proxy `8d93c25` feat: executor spec logging — tool/stream/session/upstream события +- llm-web-proxy `22e0663` feat: minimal dashboard — /metrics JSON + HTML +- skills `349aa7c` feat: web-search skill (search_web tool, RED→GREEN, live-verified) +- pi-extensions `1542603` + `b0e62af` feat: search_web tool (vision-subagent pattern) +- .admin `625ab3e6` docs(tasks): llm-web-proxy npm global install fixed -Кастомный web-LLM провайдер для pi + Claude Code (веб-чаты DeepSeek вместо API). -Код: `C:/Users/vitya/projects/.common/lib/llm-web-proxy` (git repo, remote `victor/llm-web-proxy`). -Таска: `.tasks/llm-web-proxy.md` (спека). Вики: `.wiki/` в проекте (концепты tool-emulation/combo/blocking). - -### Что работает (58 тестов GREEN, live-проверено) -- `/v1/chat/completions` (OpenAI) + `/v1/messages` (Anthropic, Claude Code) — оба формата -- Эмуляция `` → tool_calls / tool_use (из кода omniroute, vendor/) -- 4 комбо: flash/pro + flash-search/pro-search (search отдельно, НЕ смешивать с агентскими) -- Round-robin по аккаунтам (megan/yulia/vitya) + cooldown/circuit + failover -- API-ключи (SHA-256, `lwp key create`), auth на /v1/* -- Блокировки: операторская (`lwp account block --until`) + авто-детект mute (persist в data/) -- Per-account proxy (undici), конфиг через CLI (`lwp combo/account/key/status/test`) -- npm-пакет: data-dir кроссплатформенно (APPDATA/XDG), `lwp serve`, `lwp autostart enable` - (win .vbs / linux systemd-user / mac launchd — паттерн omniroute) -- Уведомления: нативные toast (node-notifier) по умолчанию; ntfy — OFF (включается конфигом) -- Docker: docker-compose (data volume), НО docker демон на машине был выключен — проверка в docker не финальна - -### Состояние аккаунтов deepseek-web -- **megan: muted** в DeepSeek до 2026-08-23 14:38 МСК (авто-блок стоит, переживает рестарт) -- yulia, vitya — работают. Ротация идёт по ним. - -### pi-интеграция -`~/.pi/agent/models.json` → провайдер `llm-web` (baseUrl http://127.0.0.1:8788/v1, ключ выпущен) -- `local/deepseek-flash-web`, `local/deepseek-pro-web` -- `local/deepseek-flash-search-web`, `local/deepseek-pro-search-web` -- omniroute удалён из models.json (заменён llm-web-proxy) - -### Планы на следующую сессию (по приоритету) -1. **npm i -g реально не проверен** — прогнать `npm pack` + `npm i -g ` на win; - проверить `lwp serve`/`lwp autostart` из глобальной установки (files-список, resolveCli пути). -2. **mac/linux ветки autostart не протестированы** — только pure-builder тесты; live только win .vbs. -3. **lwp serve при автозапуске** — .vbs указывает на bin/lwp.mjs в .common; при глобальной установке - путь другой — проверить, что autostart резолвит правильный cli. -4. **qwen-web** — ключ есть, падал по DNS (EAI_AGAIN); починить = второй web-канал. -5. **gemini-web / kimi-web / grok-web** — кандидаты (emulated tool calling), добавить отдельными комбо. -6. **Скилл с субагент-поиском** на `*-search` комбо — план юзера (writing-skills). - -### Открытые вопросы юзеру -- npm i -g локально или в registry (verdaccio)? Деплой llm-web-proxy как службы — уже autostart. - ---- - -# Next session handoff - -## Recent commits -- .admin `da97d25c` docs(tasks): F&F daemon-image closed — fixes accepted (0.10.1) -- .admin `6fdb9b51` docs(tasks): F&F daemon-image 7/7 PASS + findings F1/F2 -- .admin `aa88f538` docs(handoff): сессия 0.2.0-симуляция завершена (предыдущая сессия) - -## F&F daemon-npm-image-storage — ЗАКРЫТ (эта сессия) -Лестница **7/7 PASS** + фиксы sched (commit e755b52, daemon **0.10.1**, digest `269093a08f6e…`) приняты после ретеста затронутых поверхностей (F1/F2/N2 живьём + регресс ступеней 1/2/3/5 — без изменений). Письма: отчёт `2026-08-21T23-27-41Z-admin.md`, акцепт `2026-08-21T23-41-30Z-admin.md` (sched/.agents/inbox, gitignored file-drop). Стенд: `.tmp/fnf-daemon-image/` (gitignored): Dockerfile.mongo (0.10.0), Dockerfile.doc-recipe-v2 (0.10.1, как в доках), my-storage.mjs, my-storage-bad.mjs, tasks.json. Дальше — sched/books сами. +## Сделано (эта сессия) +- **npm i -g v0.1.6** — реальная глобальная установка; починены files-контракт (autostart.js/notify.js/paths.js не были в тарболе), serve-путь (dist резолвился от data-dir), autostart .vbs пересоздан на глобальный CLI. +- **Дашборд**: /metrics (окна 1h/6h/24h/all, per-account/combo/endpoint, failoverByStatus) + одна HTML-страница (селектор окон, фильтр эндпоинтов, локальное время); GET / отдаёт её. +- **Executor-логирование спеки #8**: event=tool-prompt / raw-reply (sanitized sample) / parse (calls/valid/args_empty) / upstream / session / stream (counting wrapper). Метрики C/D/E на дашборде ожили (live: 100% valid args). +- **modelPrefix**: опциональный (default "" = off); `lwp/deepseek-flash-web` → комбо. CLI `lwp config set prefix

`. +- **web-search скилл + search_web тул**: RED (без скила субагент отказался) → GREEN (вызвал search_web, ответ с [1] blog.rust-lang.org). Дефолт-модель lwp/deepseek-pro-search-web (pro-search). Поиск включён по умолчанию, «без поиска» — off до конца сессии (как using-interns grant). +- **Деплой**: llm-web-proxy глобально установлен (конфиг/секреты/ключи в %APPDATA%\llm-web-proxy), autostart .vbs → глобальный CLI, сервер жив на 8788. ## Open треки | Трек | Готовность | Entry-point | |---|---|---| -| Реальный деплой apilki (npmjs + github.com) | ждёт отмашки | «Спроси user'а» | -| sched-vds-deploy | 🟡 paused | ждёт результатов миграции books→sched (phase-3) | -| books миграция на sched | в процессе | victor/books `sched-migration-phase-3` (blocked), victor/sched `books-sched-integration` (paused) | -| sched-pipelines-local-stack | Status: active в STATUS.md; по handoff предыдущей сессии кампания финализирована (0.1.0 published, повторные раны noop) → кандидат на закрытие (предложено в ритуале) | .tasks/STATUS.md | +| llm-web-proxy п.2 mac/linux autostart | не проверить на win (только pure-builder тесты есть) | .tasks/STATUS.md 🔴 | +| llm-web-proxy п.4 qwen-web | 🟡 — ключ есть, падал EAI_AGAIN (DNS) | .tasks/llm-web-proxy.md | +| llm-web-proxy п.5 gemini/kimi/grok-web | кандидаты (emulated tool calling) | .tasks/llm-web-proxy.md | +| web-search скилл | установлен, тестирован — следующий шаг: юзер-сценарии в живых сессиях | skills/web-search/SKILL.md | +| Реальный деплой apilki (npmjs+github) | ждёт отмашки | «Спроси user'а» | ## Спроси user'а -- **Реальный деплой apilki-билдеров**: npmjs + github.com (не мок). Требует отмашки + настоящие NPM_TOKEN/GITHUB_TOKEN (в pass). Не гонять без явной команды. -- (F&F daemon-image — закрыт, вопросов нет) +- **qwen-web** (п.4): чинить DNS = второй web-канал? Нужен ли сейчас. +- **Дашборд** оставить крутиться или стоп (сейчас сервер жив, autostart поднимет при перезагрузке). +- (старое) Реальный деплой apilki-билдеров npmjs+github — за явной отмашкой + токены в pass. ## Не делать (preemptive guards) - Не запускать реальный publish в npmjs/github.com без явной отмашки. -- **sched-vds-deploy не запускать** — paused по решению vitya (2026-08-21), ждём миграцию books→sched. -- Не писать токены в git/handoff/письма (secrets rule: только pass). ⚠️ tasks.generated.json с токеном — gitignored, не коммитить. -- Не лезть в код агентов самим (юзер: «ты сам в код не лезь») — фиксы через режект-письма; исключение — стенд-конфиг (.admin). -- Не трогать `llm-router-failover-proxy` (юзер закрыл 2026-08-18). +- **sched-vds-deploy не запускать** — paused по решению vitya (2026-08-21). +- Не писать токены в git/handoff/письма (secrets rule: только pass). +- Не лезть в код агентов самим (фиксы через режект-письма). +- **Не смешивать search-комбо с агентскими** (search ломает эмуляцию тулов) — search только через субагента/тул search_web. ## Memory updates за сессию -- **Кандидат на shared-wiki ingest**: verdaccio-токен в производных docker-образах — BuildKit secret, не ARG (ARG → JWT в `docker history`, воспроизведено на schedd-mongo 0.10.0); `npmMinimalAgeGate: 0` обязателен для yarn 4.18 против verdaccio (нет publish-time метаданных). Касается books T2-паттерна (FROM + yarn add + env) и любых композиций поверх @sched/*. -- **Кандидат на shared-wiki ingest**: Windows git-bash + docker run — нужен `MSYS_NO_PATHCONV=1` (иначе POSIX-пути манглятся в `C:/Program Files/Git/…` → `unable to open database file`). sched задокументировал в 13.self-hosting. -- (прошлая сессия, не заингещено): паттерн «симуляция апстрим-апдейта в мок-стенде»; «мок не зеркалит прод-контракт» (3 случая). +- llm-web-proxy: data-dir кроссплатформенно (APPDATA/XDG), конфиг/секреты/ключи раздельны (config.json / secrets.json / keys.json). +- pi-интеграция: провайдер `llm-web` в ~/.pi/agent/models.json, модели `lwp/deepseek-*-web` (префикс lwp/ теперь настраивается в прокси, modelPrefix). +- Тул-паттерн «субагент-на-специфичной-модели»: vision-subagent (describe_image) и web-search (search_web) — pi-расширения, модель из конфига (env/JSON), modelRegistry.complete на чистом контексте. Кандидат в shared-wiki (concept: pi-extensions subagent-tool pattern). +- semver-урок: sed-бампы писать в одном шаге с коммитом, проверять `grep version` до push (3 коммита уехали с застрявшей 0.1.2). diff --git a/.tasks/STATUS.md b/.tasks/STATUS.md index 93e0087..edd8c53 100644 --- a/.tasks/STATUS.md +++ b/.tasks/STATUS.md @@ -7,7 +7,7 @@ _Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** schedd **0.9.0 ## 🔴 [llm-web-proxy] — кастомный web-LLM провайдер для pi + Claude Code (web-чаты, эмуляция тулов, без оверкилла omniroute) **Status:** active — claimed 2026-08-22 (vitya, креды из omniroute) -**Where I stopped:** npm-глобальная установка проверена и починена (v0.1.1): files-контракт + serve/autostart пути. Следующее: п.2 mac/linux autostart live-тест, п.4 qwen-web (DNS), п.6 скилл субагент-поиска. +**Where I stopped:** Сессия 2026-08-22 закрыта — провайдер построен (58→82 теста) и развёрнут в систему: `npm i -g` v0.1.6 (глобально, autostart-пути починены), дашборд (/metrics + HTML, окна/эндпоинты/локальное время), executor-логирование спеки (tool-prompt/raw-reply/parse/upstream/session/stream), `lwp config set port/prefix`, настраиваемый modelPrefix (lwp/ — дефолт без префикса). Провайдер `llm-web` в pi → модели `lwp/deepseek-*-web`. Скилл web-search + тул search_web (pi-extensions) — RED→GREEN пройден, live-проверен. Осталось: п.2 mac/linux autostart live-тест (не проверить на win), п.4 qwen-web (DNS EAI_AGAIN), п.5 gemini/kimi/grok-web кандидаты. **Next action:** вытащить из docker-контейнера omniroute (`/app/open-sse/`): executors/deepseek-web.ts + translators (deepseekWebTools.ts, webTools.ts, claude-to-openai.ts, openai-to-claude.ts); собрать скелет src/server.js (`/v1/chat/completions` + `/v1/messages` + `/health`) с round-robin и логированием (req/tool-prompt/raw-reply/parse/upstream/session/stream/failover). **Branch:** master **Weight:** needs-claude