| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(site): rebuild /docs on Fumadocs with examples and search The repo's docs/ and examples/ READMEs stay the single source: a prebuild step copies them into the docs collection with frontmatter, sidebar order from the index tables, and links rewritten so doc-to-doc stays on the site and everything else goes to GitHub. The build fails when a page and its index table disagree. Every existing /docs/<page>/ URL is unchanged. Examples get their own section, search runs from a static index, and llms.txt/llms-full.txt are generated from the same pages. The docs UI's CSS loads only under /docs; the global reset moved into a cascade layer so it no longer overrides it, with the homepage layout verified unchanged. | 3 天前 | |
test(cli): make config writer assertions portable | 2 个月前 | |
feat(cli): add 'wigolo auth discover' and 'wigolo auth status' subcommands | 5 个月前 | |
feat(cli): --json for config --plain — machine-readable settings dump --json forces headless output and prints one JSON object with dataDir + settings; masked/secret fields collapse to a presence flag so no credential leaks (mirrors the --plain masking). | 2 个月前 | |
chore(tui): cleanup deprecated screens + headless --set parity Slice 12 of 12 — final dead-code sweep + headless write parity. Deletes 9 unreferenced TUI components (MainMenu, BrowserSelect, ReviewToggles, SystemCheck, Summary, InstallProgress, SkillInstall, Dashboard, DashboardCleanup) and 3 dead hooks (useInstall, useSystemCheck, useAgentDetect) plus their tests, all leftover from the pre-wizard era. Drops CURATED_ENV_VARS / ENV_GROUP_LABELS / readEnvSettings / writeEnvSettings and the supporting persist-settings action module — config.ts --plain now walks the schema CATALOG directly so there is one source of truth for which fields exist and how they validate. Removes the now-unused ToggleMap, COMPONENT_REGISTRY, FIREFOX_COMPONENT, ScreenId, EntryMode, ComponentMeta exports from actions/types.ts; types.test.ts retired with them. Adds wigolo config --set <key>=<value> for non-secret fields with full parity: - resolves the field via CATALOG by env-var key - rejects masked/secret fields with a shell-history-leak warning - coerces strings into the schema type (number/toggle/multiselect) - runs FieldDef.validate before staging - drives the same propagation.save() flow the Ink shell uses so config.json + every detected agent's env block stay in sync - reports saved keys, propagated agent ids, and per-agent failures | 4 个月前 | |
feat(serve): lazy REST delegation, MCP bearer gate, bind gate + banner http-server delegates /v1, /openapi.json, /compat via a memoized dynamic import of the REST router (rest/ + ajv never load at boot/stdio). Token- configured serve now bearer-gates /mcp,/sse,/messages (401 envelope); /health and /admin stay on their own paths. CLI adds --allow-unauthenticated, a fail- closed bind gate before start, and REST/OpenAPI/auth/shim banner lines. | 2 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 2 个月前 | |
fix(doctor): lazy-aware exit contract + passive model probes (spec D5) Fresh installs must exit green. Five changes to src/cli/doctor.ts: - Browser verdict is lazy-aware: a browser binary absent from disk reports 'lazy — downloads on first use' and does NOT degrade (mirrors the P0 setup-status classifier). A binary on disk that will not launch still degrades — lazy is not blind. - searxng bootstrap section is skipped entirely on the default core backend (searxngConfigured() false), reusing the collectFixableChecks gate, instead of degrading on an absent state.json. - checkCoreEmbeddings and checkReranker become passive cache-presence checks (fastembed dir vs the distinct dataDir/transformers cross-encoder dir). No model is loaded, so doctor performs zero downloads on a fresh dir; downloads stay in --fix/warmup. - New data-dir writability probe: surfaces the bind-mount EACCES class at diagnosis time with an actionable message naming the dir. - doctor --json gains version + install_channel for cross-channel triage. | 2 个月前 | |
fix(doctor): lazy-aware exit contract + passive model probes (spec D5) Fresh installs must exit green. Five changes to src/cli/doctor.ts: - Browser verdict is lazy-aware: a browser binary absent from disk reports 'lazy — downloads on first use' and does NOT degrade (mirrors the P0 setup-status classifier). A binary on disk that will not launch still degrades — lazy is not blind. - searxng bootstrap section is skipped entirely on the default core backend (searxngConfigured() false), reusing the collectFixableChecks gate, instead of degrading on an absent state.json. - checkCoreEmbeddings and checkReranker become passive cache-presence checks (fastembed dir vs the distinct dataDir/transformers cross-encoder dir). No model is loaded, so doctor performs zero downloads on a fresh dir; downloads stay in --fix/warmup. - New data-dir writability probe: surfaces the bind-mount EACCES class at diagnosis time with an actionable message naming the dir. - doctor --json gains version + install_channel for cross-channel triage. | 2 个月前 | |
fix(doctor): gate python/docker runtime degradation on searxng being configured python/docker are prerequisites only for the opt-in search-engine sidecar. The unconditional 'both missing => degraded' check (the gap D5 missed) failed the 'doctor green on fresh install' acceptance on runtime-less environments like a slim container under the default core backend. Gate it on searxngConfigured() exactly like the searxng section and collectFixableChecks already are. Tests: core backend + no runtimes => exit 0/OK; searxng configured with a READY bootstrap + no runtimes => still exit 1 (isolated so only the runtime check can be the degradation source). | 2 个月前 | |
feat(doctor): surface the opt-in local-model tier state Add buildLocalTierDoctorLines + wire it into doctor after the existing ollama block: report WIGOLO_LOCAL_LLM=off (default, discoverable) vs auto with the resolved endpoint + model, or enabled-but-unreachable. The resolver (and its fast negative-cached probe) runs only when the flag is on; off never probes. Untrusted model names are terminal-sanitized. Component names allowed here. | 2 个月前 | |
feat(sp4): doctor shows provider, key location, and masked key value Task 6/8. maskApiKey and formatProviderDoctorLines exported from doctor.ts. runDoctorInner LLM section now reads keystore per provider (keychain/file/env) and shows masked value + location alongside existing env-var status. Keys are NEVER logged or shown in plaintext. Tests: 6 passing (masking rules, no-leak assertions, format lines). | 4 个月前 | |
feat: install browser system deps on Linux + launch smoke-test (#116) warmup historically reported a browser "ok" once the binary was on disk, but on bare Linux the binary lands without the OS shared libs (libnss3, libgbm, ...) so chromium.launch() fails at runtime. existsSync only proved the file was present, not that it launches. - Add src/fetch/browser-probe.ts: a single shared probeBrowser() helper (executablePath + existsSync + real headless launch smoke-test under a timeout) used by BOTH warmup and doctor, so they can never disagree. - warmup now installs OS system libs on Linux via install-deps: directly when root, via passwordless `sudo -n` when available, else SKIP (never prompts for a password / never hangs CI or the TUI). macOS/Windows skip deps entirely. - A browser is only reported ok when it actually launches. On Linux when launch fails and deps were skipped, the error carries the exact remediation: `sudo npx playwright install-deps <browser>`. - doctor uses the same probe; surfaces "on disk but will not launch" and the install-deps hint on Linux. | 3 个月前 | |
fix(doctor): recognize the GOOGLE_API_KEY gemini alias in the LLM check After GEMINI_API_KEY became canonical, doctor's env detection looked only at the canonical var, so a user with GOOGLE_API_KEY set saw 'gemini: no key' even though synthesis uses it. Detect via providerKeyFromEnv (alias-aware). The LLM-section tests now mock the keystore so they depend only on env vars, removing the OS-keychain dependency that made them pass or fail by machine. | 2 个月前 | |
feat(cli): schema-driven flag bridge | 2 个月前 | |
feat(cli): --json for status and health status --json emits {status, version, searxng, reranker, embeddings, cache, agents} on stdout, keeping the pretty block off stdout. health --json emits the daemon health report on stdout (error object + exit 1 when the daemon is unreachable); the exit-code-meaningful status field maps healthy→0. Logs stay on stderr in both. | 2 个月前 | |
feat(cli): schema-driven generated help + completeness tests | 2 个月前 | |
fix(cli): sanitize trafilatura/flashrank/cdp in help capability text | 2 个月前 | |
feat(cli): wigolo tune — inspect/reset per-domain self-tuning | 2 个月前 | |
fix(init): skip warmup's redundant verify pass (doctor cold checks cover it) — cleaner setup log | 2 个月前 | |
feat(cli): autodetect ollama and hint in init (both interactive + plain paths) | 3 个月前 | |
feat(binary): pkg-aware entry, sqlite-vec extraction, headless TUI fallback Prepare the src layer for the single-file binary build: - src/index.ts: extract the top-level CLI flow into an exported async main(); removes top-level await so the entry can be esbuild-bundled to CJS for pkg. Behaviour-neutral (same routing, same natural-exit exit codes). - src/cache/db.ts: under a packaged binary, copy the sqlite-vec dylib out of the /snapshot VFS to <dataDir>/native/ and dlopen from a real path (fixes the dlopen-from-snapshot failure and the doubled .dylib.dylib suffix). npm path unchanged. - src/util/packaged.ts: shared isPackagedBinary() detection + fallback message. - init --wizard / config TUI print an actionable headless-fallback message inside the binary (Ink stack cannot boot there) instead of crashing. | 2 个月前 | |
fix(opencode): harden config synchronization Preserve JSONC formatting, make current/legacy migration rollback-safe, and align status, init output, tests, and marketing with MCP-only OpenCode support. | 2 个月前 | |
feat(cli): --json output for auth/plugin/backfill | 2 个月前 | |
feat(cli): autodetect ollama and hint in init (both interactive + plain paths) | 3 个月前 | |
test(cli): assert plugin validate --json bad-plugin emits single {status} doc + exit 1 | 2 个月前 | |
test(sp3): add router-config test and update mcp-stdio-no-ink test Now that config/dashboard are wired in parseCommand, update the mcp-stdio-no-ink test to assert config routes to 'config' not 'unknown'. Add router-config.test.ts covering config/dashboard routing invariants. | 4 个月前 | |
feat(cli): --json for setup mcp — machine-readable agent-registration summary Emit a single JSON object on stdout (human summary stays on stderr) with per-agent write results; status drives the exit code. | 2 个月前 | |
feat(setup-mcp): honor --non-interactive / --agents flags | 5 个月前 | |
docs(cli): stop advertising the retired --non-interactive alias in verify/setup help | 2 个月前 | |
feat(repl): NDJSON shell, exit plumbing, history hygiene, .json toggle | 2 个月前 | |
fix(skills-cli): --json purity + real per-file remove dry-run - F7: under --json, suppress all human renderers so stdout is exactly one JSON document (usage/help go to stderr). All three subcommands, all paths. - F8: wire remove --dry-run to the engine's planRemove — a real per-file remove/refuse/notice preview that mutates neither fs nor receipts, replacing the faked intent line. | 2 个月前 | |
feat(cli): --json for status and health status --json emits {status, version, searxng, reranker, embeddings, cache, agents} on stdout, keeping the pretty block off stdout. health --json emits the daemon health report on stdout (error object + exit 1 when the daemon is unreachable); the exit-code-meaningful status field maps healthy→0. Logs stay on stderr in both. | 2 个月前 | |
feat(cli): opt-in telemetry + extended doctor health checks | 4 个月前 | |
feat(cli): full schema flag parity across 10 tools | 2 个月前 | |
fix(cli): seed direct web engines for one-shot research/agent/find_similar One-shot CLI passed engines:[] (searxng-free), but the research/agent/find_similar pipelines search the passed engine instances directly (unlike search/fetch, which use the core provider). Result: one-shot 'wigolo research' returned zero sources. Seed the same keyless DuckDuckGo+Bing direct engines the MCP server uses. search is unaffected (core provider ignores the passed list — still fans out to all engines). | 2 个月前 | |
fix(cli): capability-language JSON key for browser-preference in tune | 2 个月前 | |
fix(cli): uninstall --help wins over --json (no destructive run) | 2 个月前 | |
docs(cli): stop advertising the retired --non-interactive alias in verify/setup help | 2 个月前 | |
fix(warmup): treat absent sudo binary (spawn ENOENT) as the skip deps strategy runCommand rejects on spawn errors, so on sudo-less environments (slim containers) the deps-strategy probe crashed the entire browser install before the launch smoke-test — even when the binary installed fine and the OS libraries are baked. Catch the probe rejection and return 'skip', the same verdict as a failed non-passwordless probe. Empirically confirmed pre-fix: spawn('sudo') ENOENT rejects runCommand and propagates through installLinuxDeps/installBrowser, failing runWarmup. | 2 个月前 | |
test(sp1): update tests to reflect lightpanda removal - Remove tests/integration/lightpanda.test.ts (module deleted) - Remove tests/unit/fetch/lightpanda.test.ts (module deleted) - db.test.ts: assert lightpanda_routing table is ABSENT after init - config.test.ts: remove lightpanda config-field describe block - warmup-python-env.test.ts: remove warmup-Lightpanda-URL describe block - warmup-firefox.test.ts, warmup-embedding.test.ts: neutral existsSync mock - browser-select.test.tsx: Lightpanda absent, Chromium is first option | 4 个月前 | |
feat: install browser system deps on Linux + launch smoke-test (#116) warmup historically reported a browser "ok" once the binary was on disk, but on bare Linux the binary lands without the OS shared libs (libnss3, libgbm, ...) so chromium.launch() fails at runtime. existsSync only proved the file was present, not that it launches. - Add src/fetch/browser-probe.ts: a single shared probeBrowser() helper (executablePath + existsSync + real headless launch smoke-test under a timeout) used by BOTH warmup and doctor, so they can never disagree. - warmup now installs OS system libs on Linux via install-deps: directly when root, via passwordless `sudo -n` when available, else SKIP (never prompts for a password / never hangs CI or the TUI). macOS/Windows skip deps entirely. - A browser is only reported ok when it actually launches. On Linux when launch fails and deps were skipped, the error carries the exact remediation: `sudo npx playwright install-deps <browser>`. - doctor uses the same probe; surfaces "on disk but will not launch" and the install-deps hint on Linux. | 3 个月前 | |
refactor(warmup): reporter-driven async install pipeline | 5 个月前 | |
feat(warmup): report the opt-in local-model tier in the summary Add formatLocalLlmWarmupLine + a summary note reporting WIGOLO_LOCAL_LLM state: off (default, discoverable), reachable endpoint+model, or enabled-but-absent. warmup installs no models — it only reports the resolved state. Resolver runs only when the flag is on; off never probes. Model names terminal-sanitized. | 2 个月前 | |
test(sp1): update tests to reflect lightpanda removal - Remove tests/integration/lightpanda.test.ts (module deleted) - Remove tests/unit/fetch/lightpanda.test.ts (module deleted) - db.test.ts: assert lightpanda_routing table is ABSENT after init - config.test.ts: remove lightpanda config-field describe block - warmup-python-env.test.ts: remove warmup-Lightpanda-URL describe block - warmup-firefox.test.ts, warmup-embedding.test.ts: neutral existsSync mock - browser-select.test.tsx: Lightpanda absent, Chromium is first option | 4 个月前 | |
fix(warmup): capability-named keys in --json output (A1) The --json machine contract serialized keys literally named playwright/searxng, leaking implementation library names and bypassing the capability-language rule the OpenAPI surface already enforces. Map at the serialization boundary only: playwright->browserEngine, searxng->searchSidecar (+ their *Error keys). The internal WarmupResult type is unchanged, so no consumer rename. Human summary prose keeps its sanctioned parenthetical component names. | 2 个月前 | |
fix(init): skip warmup's redundant verify pass (doctor cold checks cover it) — cleaner setup log | 2 个月前 | |
fix(warmup): don't retry a timed-out browser download A timeout already consumed the full 300s budget; a fresh, non-resuming re-download just times out again and doubles the wait. Retry only non-timeout errors (resets); on timeout, fail fast with the existing mirror hint. | 2 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 天前 | ||
| 2 个月前 | ||
| 5 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 5 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 5 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 |