diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 64c7937..6e0d13e 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,51 +1,32 @@ --- -_last_updated_: 2026-08-22T14:49:52Z -session_id: llm-web-proxy-deploy-2026-08-22 +_last_updated_: 2026-08-22T15:40:00Z +session_id: qwen-web-waf-wall-2026-08-22 --- # Next session handoff -## 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 - -## Сделано (эта сессия) -- **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.
+## Recent commits
+- lwp `74a271a`: feat(notify) — информативные toast'ы token-expired (combo + actionable detail из ошибки executor'а), v0.1.8, 94 теста
+- lwp `6ef57bc`: feat(qwen-web) — executor (v2 API, cookie jar, captcha/WAF-детект), --executor CLI, v0.1.7, запушено
+- .admin `591ad2ac`/`9d0c2c05`: подзадача llm-web-proxy-qwen-web (заведена → executor готов)
+- Бонус-фикс: **Docker Desktop починен** — Electron GPU-крэш (AMD-драйвер нояб 2021) → `DisableHardwareAcceleration: true` в `%APPDATA%\Docker\settings-store.json` (бэкап .bak-20260822). Холодный старт 36с, 0 крэшей.
## Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
-| 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'а» |
+| [llm-web-proxy-qwen-web] (🟡 paused) | executor готов+задеплоен (v0.1.8, комбо qwen-web/qwen-main, свежий cookie юзера в secrets.json); СТЕНА: baxia-WAF капча | **юзер покажет рабочий подход** («из под omniroute работает»); сравнить с executor'ом В КОНТЕЙНЕРЕ omniroute (≠ GitHub main, который я портировал) |
+| [llm-web-proxy] (🔴 active) | остаток: п.2 mac/linux autostart live-тест, п.5 gemini/kimi/grok-web | `.tasks/llm-web-proxy.md` |
+| Docker Desktop | починен; наблюдать — не рецидивирует ли GPU-крэш (если да → обновить AMD-драйвер) | `docker ps` + `%LOCALAPPDATA%\Docker\log\host\electron-*.log` |
## Спроси user'а
-- **qwen-web** (п.4): чинить DNS = второй web-канал? Нужен ли сейчас.
-- **Дашборд** оставить крутиться или стоп (сейчас сервер жив, autostart поднимет при перезагрузке).
-- (старое) Реальный деплой apilki-билдеров npmjs+github — за явной отмашкой + токены в pass.
+- qwen-web: юзер обещал показать что-то интересное (вероятно, рабочий путь через omniroute). Начать с этого.
+- Если qwen-web останется капчей-заблокированным — решить: (а) CDP-драйвеный executor, (б) портировать рабочую версию из контейнера omniroute, (в) закрыть подзадачу как «WAF-wall, не масштабируется».
## Не делать (preemptive guards)
-- Не запускать реальный publish в npmjs/github.com без явной отмашки.
-- **sched-vds-deploy не запускать** — paused по решению vitya (2026-08-21).
-- Не писать токены в git/handoff/письма (secrets rule: только pass).
-- Не лезть в код агентов самим (фиксы через режект-письма).
-- **Не смешивать search-комбо с агентскими** (search ломает эмуляцию тулов) — search только через субагента/тул search_web.
+- НЕ переписывать qwen executor'а с GitHub main ещё раз — в контейнере omniroute лежит РАБОЧАЯ версия (проверить `/app/open-sse/executors/qwen-web.ts` в docker exec, diff с портом).
+- НЕ вставлять cookie'и в коммиты/handoff (секреты). Cookie: lwp `secrets.json` (gitignored), /tmp/qwen_cookie_new.txt (свежий, от юзера), /tmp/qwen_cookie.txt (старый из omniroute DB).
+- НЕ трогать CDP-браузер :9222 без нужды — там юзер разгадывал капчу вручную, сессия хрупкая.
+- НЕ закрывать [llm-web-proxy-qwen-web] без явного решения юзера.
## Memory updates за сессию
-- 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 960767d..7c86d8d 100644
--- a/.tasks/STATUS.md
+++ b/.tasks/STATUS.md
@@ -1,4 +1,5 @@
# Admin Task Board
+_Updated: 2026-08-22 — 🟡 **[llm-web-proxy-qwen-web] PAUSED** (решение vitya: стоп, next-сессия покажет рабочий подход; WAF-стена: baxia капча даже из браузера). Docker починен (GPU-крэш → DisableHardwareAcceleration). Хендофф записан._
_Updated: 2026-08-22 — 🔵 **[llm-web-proxy-qwen-web]** executor готов и задеплоен (0.1.7, 92 теста, капча-детект, фикс model-alias), live заблокирован капчей — нужен свежий Cookie от vitya. Docker Desktop починен (GPU-крэш → DisableHardwareAcceleration)._
_Updated: 2026-08-22 — 🆕 подзадача ⚪ **[llm-web-proxy-qwen-web]** заведена (п.4 qwen-web: DNS EAI_AGAIN перепроверен — chat.qwen.ai резолвится, блокер снят; ключ есть; комбо добавить в lwp). ⚪ **[llm-web-proxy] заведена** (спека .tasks/llm-web-proxy.md: кастомный web-LLM провайдер для pi + Claude Code — web-чаты, эмуляция тулов, без оверкилла omniroute; делать в следующей сессии). 🟢 **[sched-pipelines-local-stack] ЗАКРЫТА** (ритуал закрытия, решение vitya): мок-кампания финализирована ранее (0.1.0 published оба воркера, повторные раны noop, 0.2.0-кейс проверен симуляцией и откачен; фикс #7 httpGet fetch-Response контракта принят). Реальный деплой apilki — за отмашкой юзера (в «Спроси user'а»); VDS-миграция — таска sched-vds-deploy (paused). Wiki: +2 концепта в shared (verdaccio-token-buildkit-secret, msys-no-pathconv-docker-windows).
_Updated: 2026-08-21 — 🟢 **[sched-fnf-daemon-image-storage] F&F ЗАКРЫТ: 7/7 + фиксы F1/F2/N1/N2 ПРИНЯТЫ** (их письмо 23:40Z, commit e755b52, daemon 0.10.1). Ретест затронутых поверхностей на `registry.kzntsv.site/sched-daemon:0.10.1` (digest 269093a08f6e…): F1 — 0.10.1 стартует против исправленного `deploy/tasks.json` (schedules); F2 — рецепт из доков (BuildKit secret + npmMinimalAgeGate:0) собран 1-в-1, history 0 JWT, storage-mongo 0.4.0, +смоук ступени 4 (коллекции, ран); N2 — баннер `storage=custom module=./my-storage.mjs` (тест пинит module=); N1 — нота MSYS_NO_PATHCONV в доках. Регресс 1/2/3/5 на 0.10.1 — тексты фейлов идентичны. Акцепт: `sched/.agents/inbox/2026-08-21T23-41-30Z-admin.md`.
@@ -17,12 +18,11 @@ _Updated: 2026-08-20 — 🟡 **[sched-pipelines-local-stack]** schedd **0.9.0
---
-## 🔵 [llm-web-proxy-qwen-web] — добавить qwen-web комбо в lwp (подзадача llm-web-proxy, п.4)
+## 🟡 [llm-web-proxy-qwen-web] — добавить qwen-web комбо в lwp (подзадача llm-web-proxy, п.4)
-**Status:** blocked
-**Blocker:** свежий Cookie header chat.qwen.ai от vitya (сессия из omniroute заблокирована слайдер-капчей — FAIL_SYS_USER_VALIDATE; нужен один раз решить капчу в браузере и вставить новый cookie)
-**Where I stopped:** EXECUTOR ГОТОВ и задеплоен — 10 новых тестов (92 всего), версия 0.1.7, `lwp combo add --executor` добавлен, комбо qwen-web/qwen-main в конфиге, executor зарегистрирован в server.js. Live-цепочка проверена: new-chat 200 → completion 200 → детект капча-эневелопа (FAIL_SYS/punish) → 401 вместо пустого ответа. Два дефекта порта найдены и пофикшены: (1) HTTP-200 JSON-обёртка капчи молча давала пустой ответ — теперь 401 с actionable-сообщением; (2) body.model (имя комбо) перебивал acct.model — апстрим получал "qwen-web" вместо qwen3.7-max. Docker Desktop починен заодно (GPU-крэш, DisableHardwareAcceleration).
-**Next action:** vitya: открыть chat.qwen.ai, решить капчу, скопировать свежий Cookie header (cna/ssxmod_itna/token) → обновить `lwp account add qwen-web qwen-main --token