roadmap: #285 filed

This commit is contained in:
Yeachan-Heo 2026-04-26 09:26:56 +00:00
parent 92a598e7e6
commit 639e1e338e

View File

@ -17215,3 +17215,15 @@ Gap. There is no product contract boundary separating implemented slash commands
Required fix shape: choose one of two explicit paths. Product path: implement `/ultraplan` by calling the internal prompt/runtime with an `InternalPromptProgressReporter::ultraplan`, persist the generated plan in session state, include numbered steps/risks/verification/rollback, and support JSON/resume behavior if appropriate. Honesty path: demote `/ultraplan` to a clearly labeled placeholder/stub, remove the "deep planning" promise from USAGE/help, and point users to the actual planning workflow. Acceptance: running `/ultraplan <task>` either returns a real structured plan or clearly refuses as not implemented; it must not succeed with a static meta-template.
**Status:** Open. No source code changed. Filed 2026-04-26 18:25 KST. Branch: feat/jobdori-168c-emission-routing. HEAD: `1a7b8ea` before filing. Cluster delta: slash-command-contract-vs-runtime +1; concrete user-signal source: Sigrid report of `ultraplan` usability complaints. Concrete delta this cycle: ROADMAP-only follow-up appended from docs/code audit.
## Pinpoint #285 — Provider/model/websearch selection is split across hard-coded registries and env vars instead of a single settings-file contract, blocking user-requested multi-provider/multi-model config and swappable search backends
Dogfooded 2026-04-26 18:27 KST from Sigrid's channel request to make search engine selection and multi-provider/multi-model declarations configurable in settings. Static audit shows the runtime settings layer only parses a single optional `model`, `aliases`, permission settings, MCP, plugins, sandbox, OAuth, provider fallbacks, and trusted roots in `rust/crates/runtime/src/config.rs`. There is no structured `providers`, `models`, or `websearch` config section. Provider routing is still mostly code/env driven: `rust/crates/api/src/providers/mod.rs` has a hard-coded `MODEL_REGISTRY`, prefix checks (`claude`, `grok`, `openai/`, `qwen`, `kimi`), and env-var based base URL/auth resolution. `ProviderClient::from_model` dispatches from the model string and env metadata rather than a loaded provider graph. `WebSearch` ignores runtime settings entirely: `build_search_url` uses `CLAWD_WEB_SEARCH_BASE_URL` if set, otherwise DuckDuckGo HTML search.
Concrete failure mode: a user wants one settings file to declare `providers.lmstudio = { type: "openai", url: "http://.../v1" }`, `models[] = { name, provider, maxContext }`, default `model`, default permission mode, and `websearch = { provider: "tavily", apiKey: ... }`. Today the model name can be set, but the provider endpoint/auth/model metadata/search backend cannot be expressed as first-class config. Users must rely on global env vars, hard-coded model prefix heuristics, and hidden DuckDuckGo/base-url behavior, which makes local LM Studio/vLLM/Ollama, hosted OpenAI-compatible providers, and Tavily/Brave/search-provider swaps difficult to reason about and impossible to inspect via `claw doctor` as one coherent source of truth.
Gap. Claw Code lacks a declarative provider graph and websearch backend contract in `settings.json`. This is distinct from #283 (one compaction threshold only env-settable): #285 is the broader provider/search capability plane. It also intersects with #273/#275 provenance because `status`/`doctor` cannot report the real provider source-of-truth if it lives partly in env and partly in model-prefix code.
Required fix shape: (a) add schema-backed settings sections for `providers`, `models`, and `websearch` with safe secret handling (support env indirection for API keys instead of encouraging raw key commits); (b) define precedence `CLI > local/project/user config > env > built-in defaults`; (c) make `ProviderClient` resolve from the merged config graph, including custom OpenAI-compatible base URLs, auth env/key refs, max context, max output, and reasoning/tool quirks; (d) make `WebSearch` dispatch through configured providers such as DuckDuckGo, Tavily, Brave, or custom base URL; (e) surface the resolved provider/model/search backend in `claw status --output-format json` and `claw doctor`; (f) add tests for LM Studio-style OpenAI-compatible config, multi-model selection, and Tavily-style search backend config without leaking raw API keys in output. Acceptance: the user-requested provider/model/search shape can be placed in settings, resolved deterministically, and audited without relying on undocumented env-only behavior.
**Status:** Open. No source code changed. Filed 2026-04-26 18:28 KST. Branch: feat/jobdori-168c-emission-routing. HEAD: `92a598e` before filing. Cluster delta: declarative-provider-websearch-config +1; concrete user-signal source: Sigrid request in #clawcode-building-in-public. Concrete delta this cycle: ROADMAP-only follow-up appended from config/provider/websearch audit.