Skip to content

Latest commit

 

History

History
189 lines (170 loc) · 10.5 KB

CHANGELOG.md

File metadata and controls

189 lines (170 loc) · 10.5 KB

Changelog

All notable changes to CodeWiki. The format follows Keep a Changelog, and the project uses Semantic Versioning.

[Unreleased]

Added

  • Google provider. google (Gemini API key) and google-vertex (Vertex AI with Google credentials: ADC or Workload Identity Federation, plus --google-project and --google-location) run on Gemini without a base URL. Agent loops use pydantic-ai's native GoogleModel, so Gemini 3 thought signatures survive tool-call turns, and the cost summary prices Gemini runs from genai-prices (#20).
  • Rust analyzer. Structs, unions, enums, traits, free functions, and impl/trait methods become components, with trait-impl, field-type, struct-literal, and call edges. #[cfg(test)] modules are skipped, and build.rs is classified as a build artifact.
  • Dart / Flutter analyzer. Classes, mixins, extensions, enums, top-level functions and getters, and methods become components, with inheritance, field-type, instantiation and call edges. package:/relative imports, exports and part files decide which definition a name resolves to, and library-private names never resolve outside their library; names not visible through imports are dropped rather than guessed. Without a pubspec.yaml in the analyzed tree, package: imports cannot be resolved, so Dart calls fall back to name matching across Dart files (with a warning). Flutter-aware: widgets and State classes are typed, instantiations in build() become widget-to-widget edges, ref.watch/ref.read link widgets to Riverpod providers (including @riverpod codegen), and GoRouter routes link to their screens. Generated *.g.dart/*.freezed.dart files and .dart_tool/ are ignored, and Dart modules get Flutter-specific documentation guidance.
  • Go analyzer. Functions, methods, structs, interfaces (and their method signatures), and other defined types (type Kind int) become components. Methods are keyed by their receiver type (Buffer.Push, pointer or value receiver alike), whichever file of the package declares them. Edges cover calls (plain, pkg.F(), and method calls on receivers, parameters and locals whose type can be inferred), struct field and embedded types, composite literals, types named in signatures and local vars, and types that implement an interface of their own package. Names resolve inside the package (directory) they name; imports of the repository's own packages map to directories through the module path in go.mod (and local replace directives), and standard-library or third-party calls are dropped. _test.go files and vendor/ are skipped.
  • Zig analyzer. Functions, containers (struct, enum, union, opaque), their member functions (Point.add), and generic type functions (fn List(comptime T: type) type { return struct {...}; }) become components. Edges cover calls (plain, alias.fn(), and method calls on Self, parameters, and locals whose type can be inferred), T{...} literals, and types named in parameters, return types, fields, and annotated locals. @import("x.zig") aliases and re-exports (const T = @import("x.zig").T;) resolve to the file that declares the name, as do module names that the root build.zig registers with addModule; std, builtin, and third-party packages are dropped. test blocks and zig-cache/, .zig-cache/, zig-out/ are skipped, build.zig is also a build artifact, and build.zig.zon is a manifest.
  • Vue single-file components. Each .vue file becomes a component (ArticleList.vue::ArticleList), and its options-API members (methods, computed, watch, lifecycle hooks such as mounted or setup) become its methods. <script> and <script setup> blocks go through the JavaScript or TypeScript analyzer (lang="ts"), keeping the .vue file's line numbers. Edges link a component to the .vue files and modules it imports (relative paths and the @/ alias), to the components its template uses (<article-preview> or <ArticlePreview>), and to the members and script functions its template expressions call or bind.
  • Autotools build files. configure.ac, Makefile.am (and other *.am), acinclude.m4, and macros under m4/ are build artifacts. A Makefile.am gets a unit per library or program it builds (libfoo.la), linked to the sources in its _SOURCES lists, and SUBDIRS links to the sub-directory Makefile.ams. A configure.ac gets a unit per AC_ARG_ENABLE / AC_ARG_WITH option and links to the Makefile.ams that AC_CONFIG_FILES generates.

Changed

  • Docs mirror the module tree (#125). A module's page now sits next to the folder that holds its sub-modules (auth.md, auth/login.md) instead of every page sharing one flat folder. Links between pages are relative. After each run, pages saved in the wrong folder are moved and wrong links are repaired. --flat keeps the old layout for small models. The layout is recorded in metadata.json, and --update keeps it, so existing flat docs stay flat. The GitHub Pages viewer, the web app and the MCP tools (doc_path in processing_order.json) follow the layout.

2.0.0 - 2026-09-18

The first release since 1.0.1. Everything that landed on main in between is listed here.

Added

  • Artifact-aware generation (#106). Build, CI, container, packaging, manifest, configuration, schema, and script files become nodes in the dependency graph, with heuristic edges to the code they reference. A deterministic artifact index goes into every module prompt, and a guaranteed Build, Deployment and Configuration module is inserted when clustering drops most artifact nodes. Flags: --artifacts/--no-artifacts, --artifact-token-budget, --with-prose, --artifact-exclude.
  • Component-level incremental updater (#111). --update now diffs the saved dependency graph against the current code, repairs the module tree (renames, deletions, routing of new components, re-clustering of grown modules), builds a change report per leaf module, and runs one agent per affected module that patches its page and the pages that describe it. Falls back to a full build when too much changed. Every decision is written to update_record.json. Flags: --update-rung, --tau-ren, --tau-nb, --tau-grow, --tau-full, --tau-tree, --k-hop, --max-diff-tokens.
  • --compare-to <commit> to set the base commit for an update (#67).
  • More complete code graphs. Free functions become documentation units in function-centric projects. Scope-, namespace-, include-, and import-aware call resolution for C, C++, Java (#64, #68), and C# raised to the Java standard. An external symbol table keeps library calls out of the graph.
  • Language analyzers: Kotlin (#41), PHP, Ruby (#97), Scala (#108).
  • Subscription providers claude-code and codex (#60, #70): every LLM call goes through the local CLI via caw, no API key needed.
  • Atlas Cloud provider (#69), Azure OpenAI (#49), AWS Bedrock (#40).
  • MCP server (#9, #66) with eight LLM-free tools (analyze_repo, read_code_components, write_doc_file, edit_doc_file, save_module_tree, get_processing_order, get_prompt, close_session) plus the legacy generate_docs and get_module_tree; file side-channel workspace; module-level change detection; codewiki mcp command; a Claude skill under skills/.
  • Prompt caching for agentic calls, --prompt-caching/--no-prompt-caching (#81).
  • .gitignore handling, --use-gitignore/--no-gitignore (#80).
  • Configurable --max-tokens, --max-token-per-module, --max-token-per-leaf-module, --max-depth; --fallback-model; --instructions and codewiki config agent defaults.
  • SECURITY.md and LICENSE (#107). CI workflow: pytest and ruff on Python 3.12.
  • CHANGELOG.md (this file) and the guides/ folder.

Changed

  • --update runs the component-level updater. The 1.x file-level invalidation is still available as --update-rung 0.
  • Artifacts are documented by default. --no-artifacts restores the code-only behaviour of 1.x.
  • generator_version in metadata.json is read from the package version instead of a hardcoded string.
  • Hand-written guides moved from the top level and docker/ into guides/: DEVELOPMENT.md -> guides/development.md, IDE_DRIVEN_GUIDE.md -> guides/mcp-ide-mode.md, docker/DOCKER_README.md -> guides/docker.md. New: guides/cli-reference.md, guides/providers.md, guides/artifact-aware-generation.md, guides/incremental-updates.md.
  • README rewritten around 2.0. The benchmark section reports the 2.0 rebenchmark on the seven CodeWikiBench repositories, with DeepWiki and 1.0 re-run under the same setting.
  • Component ids reformatted to path::name (#48). Ruff rule set pinned; Node.js requirement clarified as install-time only.
  • Project URLs in pyproject.toml point at the real repository.

Fixed

  • Overview and module prompts exceeding the Codex input cap on large repositories (#92, #94).
  • Resume skipping modules whose documentation was missing (#94).
  • --update in whole-repository mode not regenerating invalidated modules (#100).
  • The CLI adapter not passing commit_id, which made --update behave like a full build.
  • Leaf-node filtering dropping identifiers such as handleInvalidInput (#102); leaf-node reduction now logged at INFO (#103).
  • C codebases producing zero leaf nodes.
  • node_modules excluded from analysis; missing runtime dependencies added; non-standard responses from OpenAI-compatible proxies handled.
  • Mermaid validation hang in the MCP server; MCP path-traversal guards and edit-history caps.
  • Star history chart in the README (#95); mermaid-py behaviour comments (#110).

[1.0.1] - 2025-10-18

  • CLI release: codewiki config set, codewiki config show, codewiki config validate, codewiki generate with --output, --create-branch, --github-pages, --no-cache, --include, --exclude, --focus, --doc-type, --verbose.
  • API keys stored in the system keychain with a file fallback.

[1.0.0] - 2025-09

  • Initial public release with the paper: hierarchical decomposition, recursive agents, Mermaid diagrams, seven languages (Python, Java, JavaScript, TypeScript, C, C++, C#), web application, Docker image, CodeWikiBench.