diff --git a/.env.example b/.env.example index c9c2939..ba3fcf1 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,3 @@ -# AI Provider -AI_PROVIDER_BASE_URL=https://your-ai-provider.example.com/v1/ -AI_PROVIDER_API_KEY=your-api-key-here - # OpenAI Embeddings (Memory CLI) # OpenRouter defaults (Qwen3 8B, batch=50). For OpenAI direct, use: # OPENAI_BASE_URL=https://api.openai.com/v1 @@ -38,7 +34,7 @@ TUNNEL_DOMAIN= # Remote: http://:8765/mcp ANTIDETECT_BROWSER_MCP_URL=http://localhost:8765/mcp -# OpenCode Memory (required — memory-setup tool exits 1 if OPENCODE_MEMORY_REMOTE unset) -# Point at your fork of opencode-memory (see README "Memory setup" for the upstream repo) +# OpenCode Memory (optional — auto-setup on first memory-save if unset) +# Point at your fork of opencode-memory to sync via git push OPENCODE_MEMORY_REMOTE=https://github.com/your-username/your-opencode-memory.git OPENCODE_MEMORY_DIR=/root/.local/share/opencode/opencode-memory \ No newline at end of file diff --git a/.opencode/opencode.json b/.opencode/opencode.json index e091af6..c6e81ac 100644 --- a/.opencode/opencode.json +++ b/.opencode/opencode.json @@ -12,35 +12,6 @@ }, "disabled_providers": [], "provider": { - "new_api": { - "name": "new api", - "npm": "@ai-sdk/openai-compatible", - "options": { - "baseURL": "{env:AI_PROVIDER_BASE_URL}", - "apiKey": "{env:AI_PROVIDER_API_KEY}" - }, - "models": { - "gemini-3.5-flash": { - "name": "Gemini 3.5 Flash", - "reasoning": true, - "attachment": true, - "modalities": { - "input": [ - "text", - "image" - ], - "output": [ - "text" - ] - }, - "limit": { - "context": 250000, - "input": 250000, - "output": 16384 - } - } - } - }, "openrouter": { "models": { "deepseek/deepseek-v4-flash": { diff --git a/README.md b/README.md index c016599..dbedf28 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,10 @@ docker compose up -d Скопируйте `.env.example` → `.env`, заполните ключи. +### Память + +Файловая память (markdown + git) с keyword и semantic поиском. 5 tools: `memory-save`, `memory-search`, `memory-list`, `memory-access`, `memory-doctor`. Zero-config — первый `memory-save` создаёт репозиторий и индекс автоматически. Semantic поиск опционален: работает если задан `OPENAI_BASE_URL`, иначе keyword (ripgrep) всегда работает как fallback. + ## English ### Quick start @@ -62,6 +66,10 @@ Access at http://localhost:4096 Copy `.env.example` → `.env`, fill in keys. +### Memory + +File-based memory (markdown + git) with keyword and semantic search. 5 tools: `memory-save`, `memory-search`, `memory-list`, `memory-access`, `memory-doctor`. Zero-config — first `memory-save` creates the repo and index automatically. Semantic search is optional: works if `OPENAI_BASE_URL` is set, otherwise keyword (ripgrep) always works as fallback. + ## License MIT — see [LICENSE](LICENSE). diff --git a/docs/decisions/047-pr-106-remove-deprecated-ai-provider.md b/docs/decisions/047-pr-106-remove-deprecated-ai-provider.md new file mode 100644 index 0000000..839b462 --- /dev/null +++ b/docs/decisions/047-pr-106-remove-deprecated-ai-provider.md @@ -0,0 +1,14 @@ +# ADR-047: Remove deprecated `new_api` AI provider + +## Статус +Accepted (2026-07-26) + +## Контекст +В `.opencode/opencode.json` присутствовал блок провайдера `new_api` (gemini-3.5-flash, `@ai-sdk/openai-compatible`), завязанный на env vars `AI_PROVIDER_BASE_URL` / `AI_PROVIDER_API_KEY`. Провайдер был deprecated: embeddings уже переведены на `OPENAI_*` env vars (PR #75), активный LLM-провайдер — `openrouter`. `new_api` не упоминался нигде кроме `opencode.json:15-43` — мёртвый код, создававший ложное впечатление доступной альтернативы и требовавший неиспользуемые env vars в `.env.example`. + +## Решение +Удалить блок `new_api` из `provider` в `.opencode/opencode.json` и соответствующие `AI_PROVIDER_*` env vars из `.env.example`. Заодно уточнить комментарий `OPENCODE_MEMORY_REMOTE` — теперь optional (auto-setup при первом `memory-save`), а не required. Добавить секцию «Память»/«Memory» в `README.md` для onboarding. + +## Альтернативы +- Оставить `new_api` как есть — сохраняет мёртвый код и неиспользуемые env vars, вводит в заблуждение новых пользователей. Отклонено: пользователь подтвердил удаление. +- Перевести `new_api` на `OPENAI_*` env vars вместо удаления — избыточно, `openrouter` уже покрывает LLM-провайдер. \ No newline at end of file diff --git a/docs/handoff/pr-106-remove-deprecated-ai-provider.md b/docs/handoff/pr-106-remove-deprecated-ai-provider.md new file mode 100644 index 0000000..58262c3 --- /dev/null +++ b/docs/handoff/pr-106-remove-deprecated-ai-provider.md @@ -0,0 +1,23 @@ +--- +pr: 106 +title: chore(config): remove deprecated ai provider and add memory readme section +--- + +## Что сделано +- Удалён блок `new_api` провайдера из `.opencode/opencode.json` (строки 15-43) — deprecated, не использовался +- Удалены `AI_PROVIDER_BASE_URL` / `AI_PROVIDER_API_KEY` из `.env.example` (строки 1-4) +- Обновлён комментарий про `OPENCODE_MEMORY_REMOTE` в `.env.example` — больше не required, auto-setup при первом `memory-save` +- Добавлена короткая секция «Память» / «Memory» в `README.md` (5 строк RU + 5 строк EN) + +## Почему +`AI_PROVIDER_*` env vars и провайдер `new_api` (gemini-3.5-flash) — deprecated. Embeddings уже на `OPENAI_*` env vars (PR #75), LLM-провайдер `openrouter` активен. `new_api` не упоминался нигде кроме `opencode.json:15-43` — мёртвый код. Пользователь подтвердил удаление. + +Секция про память в README — для onboarding: краткое описание 5 tools, zero-config, progressive enhancement (keyword всегда, semantic опционален). + +Closes #105 + +## Pending +— + +## Watch out +— \ No newline at end of file diff --git a/docs/project-map/README.md b/docs/project-map/README.md index 06f1baa..416502a 100644 --- a/docs/project-map/README.md +++ b/docs/project-map/README.md @@ -62,7 +62,7 @@ opencode-config/ │ │ ├── scaffold-handoff.sh # Scaffold handoff + ADR stubs │ │ ├── spec-status.py # 9-phase spec oracle │ │ └── tunnel.sh # Cloudflare tunnel toggle bash (named mode via CLOUDFLARE_TUNNEL_TOKEN) — PR#34 -│ ├── opencode.json # MCP servers, providers, permissions, agents (role-based tools) — PR#40, PR#69 (plugin block REMOVED PR#103) +│ ├── opencode.json # MCP servers, providers, permissions, agents (role-based tools) — PR#40, PR#69 (plugin block REMOVED PR#103, deprecated `new_api` provider REMOVED PR#106) │ ├── package.json # npm deps for tools/*.ts (deps: @vscode/ripgrep; devDeps: @types/node, typescript) — PR#101 │ └── .gitignore # Ignores node_modules, etc. ├── docs/ @@ -121,7 +121,7 @@ opencode-config/ ├── .pre-commit-config.yaml # ruff + UV hooks ├── docker-compose.yml # 2 services (dind + opencode), opencode_network, 4 bind mounts, port 4096 on 0.0.0.0 — PR#24, PR#51 ├── Dockerfile # node:22-trixie-slim (Debian 13 trixie, glibc 2.41) + uv + gh + chromium + docker.io + opencode-ai + repomix + cloudflared (@mathew-cf/opencode-memory REMOVED PR#103) — PR#24, PR#34, PR#57, PR#71, PR#103 -├── .env.example # Placeholder-only env template (user copies to .env) — PR#24, PR#34 (TUNNEL_DOMAIN), PR#36 (OPENCODE_MEMORY_REMOTE/DIR) +├── .env.example # Placeholder-only env template (user copies to .env) — PR#24, PR#34 (TUNNEL_DOMAIN), PR#36 (OPENCODE_MEMORY_REMOTE/DIR), PR#106 (AI_PROVIDER_* removed, OPENCODE_MEMORY_REMOTE now optional) ├── app_data/ │ ├── opencode-memory/ # Persistent memory (separate git repo, gitignored) — PR#36 │ ├── workspaces/ # Agent working directory (.gitkeep)