[3.7.0] - 2026-05-30
Theme: AI-driven project knowledge base (skill-seekers scan) — bootstrap a complete skill set for a project in one command, with safety/observability/coverage hardening throughout.
Added
skill-seekers scan <dir>command (#327) — point at any project; an AI agent inspects manifests, README, Dockerfile/CI, sampled source files (first 2 KB each), and the git remote, then emits one Skill Seekers config per detected framework plus a<project>-codebase.jsonfor the project's own code. Each config stamped withmetadata.detected_versionso re-scans report added / version-bumped / removed dependencies. Internationalized canonical-name resolver (CJK + EU language suffixes) so detections like "Godot 引擎" resolvegodot. Out-dir cache means re-scans reuse prior emissions and respect manual edits. Doctor-style report with pluralized counts and resolved / AI-generated / unresolved / archived breakdown.- Coverage: scan recognizes ~50 manifest types (Pipfile, environment.yml, deno.json, flake.nix, Chart.yaml, stack.yaml, deps.edn, dune-project, BUILD.bazel, …) and walks
src/lib/app/cmd/crates/packages/apps/services/backend/frontendplus root-level files (catches Django, flat-layout Python, Go, Rust workspaces, JS monorepos). - Cost + safety flags:
--max-ai-generations N(default 10) caps unbounded AI generation for monorepos;--dry-runpreviews what would be emitted without writing or invoking AI;--probe-urlsHEAD-probes AI-generated URLs with retry-on-404;--no-fetch/--no-generate/--no-publish-promptfor offline / CI use. - Community submission (opt-in): freshly AI-generated configs can be submitted to the community registry via a native-async flow. Pre-checks
GITHUB_TOKEN, idempotency-guards against duplicate issues, retries transient failures with backoff. - Archival: configs that disappear from detections are moved (not deleted) to
out_dir/.archived/<UTC-timestamp>/so the user never loses hand-edited work andout_dirstays clean. - Docs: new
docs/getting-started/05-scan-a-project.md; entries in README, FAQ, CLI Reference, Feature Matrix, Config Format, Environment Variables, and the Quick Start cross-link.
Changed
- CLI dispatch unified (#327) —
scananddoctornow consume the parsed-args namespace directly viaCommand(args).execute()instead of building a secondargparse.ArgumentParser. Eliminates the_reconstruct_argvhack for these commands; remaining ~14 commands flagged for migration. - Config schema:
detected_versionlives undermetadata.detected_version(alongsidemetadata.versionfor the config-schema version) rather than at top level. Backwards-compatible reader; old top-level placements migrate on next stamp. SourceDetector.CODE_PROJECT_MARKERSis now public (was_CODE_PROJECT_MARKERS); cross-module callers no longer reach into a private attribute.
Fixed
- Correctness (#327) — diff layer keyed by stable filename slug instead of internal config name (eliminates phantom add/remove churn);
resolve_config_pathlookups now append.jsonso local-disk + user-dir paths actually find files; out-dir cache prevents redundant API/AI calls on re-scan; lowercase filename slugs prevent duplicate-file accumulation across runs. - Safety (#327) — atomic JSON writes via
os.replaceso SIGINT mid-write can't corrupt a config and silently flip it to "removed" on the next scan;_safe_sizeguardsstat()so a broken symlink insrc/no longer crashes the scan;AgentClient.callexceptions caught and logged; AI-generated config names rejected if they fail the registry regex; URL probe catches AI hallucinations ofbase_urlbefore writing. - Observability (#327) —
logging.basicConfigin scan sologger.warning/errorreaches the user (was silently dropped); non-zero exit code when no configs and no codebase config were emitted, so CI pipelines detect total-failure scans. - Publish flow (#327) — native async (
asyncio.runat single entry,asyncio.to_threadforinput()); pre-checkGITHUB_TOKENwith actionable hint instead of asking N "yes/no" questions and failing N times; idempotency check (search existing open issues) prevents duplicate submissions; retry with backoff on transient failures; nested-event-loop detection with clear message instead of opaque traceback.