Skip to content

Commit 1beb8ce

Browse files
committed
v1.0.0 — CodeAtlas initial release
Visualize any codebase in 5 minutes. Local-first, privacy-focused. Features: - Multi-language parsing: JavaScript, TypeScript, Python, Java - Three perspectives: System Framework, Logic Operation, Data Journey - AI-powered analysis: Claude, Gemini, OpenAI, Ollama - Wiki knowledge export + Obsidian knowledge graph - i18n: English + Traditional Chinese - Zero-config launch: npm install -g codeatlas && codeatlas MIT License — Copyright 2026 Stanshy
0 parents  commit 1beb8ce

376 files changed

Lines changed: 81210 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintrc.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/** @type {import('eslint').Linter.Config} */
2+
module.exports = {
3+
root: true,
4+
parser: '@typescript-eslint/parser',
5+
parserOptions: {
6+
ecmaVersion: 2022,
7+
sourceType: 'module',
8+
project: true,
9+
},
10+
plugins: ['@typescript-eslint'],
11+
extends: [
12+
'eslint:recommended',
13+
'plugin:@typescript-eslint/recommended',
14+
'plugin:@typescript-eslint/recommended-requiring-type-checking',
15+
],
16+
rules: {
17+
'@typescript-eslint/no-explicit-any': 'error',
18+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
19+
'@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }],
20+
'@typescript-eslint/no-import-type-side-effects': 'error',
21+
'no-console': ['warn', { allow: ['warn', 'error'] }],
22+
},
23+
ignorePatterns: ['dist/', 'node_modules/', '*.js', '!.eslintrc.js'],
24+
overrides: [
25+
{
26+
// Parser provider files use dynamic require() to load optional native
27+
// bindings and WASM modules. The external modules have no TypeScript
28+
// type declarations, so `any` is the intentional escape hatch here.
29+
files: [
30+
'packages/core/src/parser/providers/native-tree-sitter.ts',
31+
'packages/core/src/parser/providers/wasm-tree-sitter.ts',
32+
'packages/core/src/parser/providers/typescript-compiler.ts',
33+
],
34+
rules: {
35+
'@typescript-eslint/no-explicit-any': 'off',
36+
'@typescript-eslint/no-unsafe-assignment': 'off',
37+
'@typescript-eslint/no-unsafe-call': 'off',
38+
'@typescript-eslint/no-unsafe-member-access': 'off',
39+
'@typescript-eslint/no-unsafe-argument': 'off',
40+
'@typescript-eslint/no-redundant-type-constituents': 'off',
41+
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
42+
'@typescript-eslint/consistent-type-imports': 'off',
43+
},
44+
},
45+
{
46+
// AI provider stubs intentionally have no await — they throw immediately
47+
// or return a static string. The async signature is required by the
48+
// SummaryProvider interface so callers can await them uniformly.
49+
files: [
50+
'packages/core/src/ai/anthropic.ts',
51+
'packages/core/src/ai/disabled.ts',
52+
'packages/core/src/ai/openai.ts',
53+
],
54+
rules: {
55+
'@typescript-eslint/require-await': 'off',
56+
},
57+
},
58+
{
59+
// scanner/index.ts uses a safe cast on readdir's return type because the
60+
// TypeScript overload signature does not narrow to string names when
61+
// encoding:'utf8' is passed; the cast is correct and intentional.
62+
files: ['packages/core/src/scanner/index.ts'],
63+
rules: {
64+
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
65+
},
66+
},
67+
{
68+
// server.ts uses a manually-typed reply helper that returns `any` so it
69+
// works with both Fastify v4 and v5 reply signatures without importing
70+
// the concrete generic type.
71+
files: ['packages/cli/src/server.ts'],
72+
rules: {
73+
'@typescript-eslint/no-unsafe-call': 'off',
74+
'@typescript-eslint/no-unsafe-member-access': 'off',
75+
},
76+
},
77+
{
78+
// CLI command files must use console.log/warn/error to communicate with
79+
// the terminal — that is their sole output mechanism.
80+
files: ['packages/cli/src/commands/**/*.ts'],
81+
rules: {
82+
'no-console': 'off',
83+
},
84+
},
85+
{
86+
// web.ts is a CLI sub-command that also uses console for server status.
87+
files: ['packages/cli/src/web.ts'],
88+
rules: {
89+
'no-console': 'off',
90+
},
91+
},
92+
],
93+
};

.github/workflows/ci.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
ci:
15+
runs-on: ubuntu-latest
16+
timeout-minutes: 10
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Setup Node.js
23+
uses: actions/setup-node@v4
24+
with:
25+
node-version: '20'
26+
27+
- name: Setup pnpm
28+
uses: pnpm/action-setup@v4
29+
with:
30+
version: 9
31+
32+
- name: Get pnpm store directory
33+
shell: bash
34+
run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
35+
36+
- name: Cache pnpm dependencies
37+
uses: actions/cache@v4
38+
with:
39+
path: ${{ env.STORE_PATH }}
40+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
41+
restore-keys: |
42+
${{ runner.os }}-pnpm-store-
43+
44+
- name: Install dependencies
45+
run: pnpm install
46+
47+
- name: Lint
48+
run: pnpm run lint
49+
50+
- name: Type Check
51+
run: pnpm run type-check
52+
53+
- name: Build
54+
run: pnpm run build
55+
56+
- name: Test
57+
run: pnpm run test

.gitignore

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Dependencies
2+
node_modules/
3+
.pnp
4+
.pnp.js
5+
6+
# Build outputs
7+
dist/
8+
build/
9+
out/
10+
11+
# TypeScript incremental build info
12+
*.tsbuildinfo
13+
14+
# CodeAtlas runtime
15+
.codeatlas/
16+
17+
# Test coverage
18+
coverage/
19+
.nyc_output/
20+
21+
# Environment variables
22+
.env
23+
.env.local
24+
.env.*.local
25+
26+
# Logs
27+
*.log
28+
npm-debug.log*
29+
pnpm-debug.log*
30+
yarn-debug.log*
31+
yarn-error.log*
32+
logs/
33+
34+
# OS generated files
35+
.DS_Store
36+
.DS_Store?
37+
._*
38+
.Spotlight-V100
39+
.Trashes
40+
ehthumbs.db
41+
Thumbs.db
42+
43+
# Editor directories and files
44+
.vscode/*
45+
!.vscode/extensions.json
46+
!.vscode/settings.json
47+
.idea/
48+
*.swp
49+
*.swo
50+
*~
51+
52+
# Vitest
53+
.vitest-cache/
54+
55+
# Claude Code harness runtime
56+
.claude/hook-execution.jsonl
57+
.claude/settings.local.json
58+
59+
# Internal files — excluded from GitHub (orphan branch)
60+
# These are kept in local git history but not pushed to public repo
61+
CLAUDE.md
62+
.claude/
63+
.knowledge/
64+
proposal/
65+
.tasks/

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ignore-scripts=false

.prettierrc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"semi": true,
3+
"singleQuote": true,
4+
"trailingComma": "all",
5+
"printWidth": 100,
6+
"tabWidth": 2,
7+
"useTabs": false,
8+
"bracketSpacing": true,
9+
"arrowParens": "always",
10+
"endOfLine": "lf"
11+
}

CHANGELOG.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/).
6+
7+
---
8+
9+
## [1.0.0] - 2026-04-10
10+
11+
### Added
12+
13+
**Core Parsing Engine**
14+
- Multi-language static analysis for JavaScript, TypeScript, Python, and Java using tree-sitter Node.js bindings
15+
- Import resolution and dependency graph construction for all supported languages
16+
- Class, method, and function extraction with signature-level granularity
17+
- Endpoint detection for REST API routes across common frameworks
18+
- Incremental parsing support to avoid re-analyzing unchanged files
19+
20+
**Three Perspectives Visualization**
21+
- System Framework (SF) view — directory-level architecture overview with automatic role classification (controller, service, model, utility, config, and more)
22+
- Logic Operation (LO) view — method-level call flow graph with category grouping, showing how functions invoke each other across file boundaries
23+
- Data Journey (DJ) view — endpoint-level request tracing with step-by-step data flow from HTTP entry point through service and persistence layers
24+
25+
**AI-Powered Analysis**
26+
- Pluggable AI provider architecture supporting Claude (Anthropic), Gemini (Google), OpenAI, and Ollama (local)
27+
- AI-generated code summaries at the file, class, and method level
28+
- Intelligent role classification to distinguish controllers, services, repositories, and utilities without manual annotation
29+
- Endpoint description generation for REST APIs including parameter and response documentation
30+
- All AI features are optional — the tool is fully functional with AI disabled
31+
32+
**Wiki Knowledge Export**
33+
- Generate Obsidian-compatible Markdown files from any analyzed codebase
34+
- Cross-referenced internal links using `[[WikiLink]]` notation for seamless navigation
35+
- Interactive knowledge graph rendered from exported Markdown in Obsidian Graph View
36+
- Structured export covering architecture overview, module descriptions, and endpoint references
37+
- `codeatlas wiki` command for standalone export without opening the full web UI
38+
39+
**Web UI**
40+
- React-based visualization powered by React Flow for node-graph rendering and D3.js for force-directed layouts
41+
- Three-perspective tab navigation with persistent view state across perspective switches
42+
- Context-sensitive detail panels for nodes — shows summary, file path, dependencies, and AI analysis when available
43+
- Toolbar with search, filter, and layout controls for large graphs
44+
- Camera preset shortcuts for navigating complex graphs quickly
45+
- DJPanel for endpoint flow inspection with expandable step trace
46+
- LODetailPanel and SFDetailPanel for method-level and directory-level node details respectively
47+
48+
**CLI Interface**
49+
- `codeatlas` — launch the web UI in the default browser with welcome screen
50+
- `codeatlas web` — start the local Fastify server and open the visualization UI
51+
- `codeatlas wiki` — run analysis and export Obsidian-compatible Markdown to the output directory
52+
- `codeatlas analyze` — run static analysis only and output graph JSON without starting the web server
53+
54+
**Welcome and Onboarding Experience**
55+
- Zero-config launch: running `codeatlas` opens the browser directly to a project selection screen
56+
- Recent projects list with quick-open support
57+
- AI provider setup guidance with step-by-step configuration instructions built into the UI
58+
- First-run detection with contextual hints for new users
59+
60+
**Progress Tracking**
61+
- Real-time analysis progress reporting via Server-Sent Events (SSE) streaming
62+
- Per-file progress updates during large project analysis
63+
- Error reporting inline without aborting the full analysis run
64+
65+
**i18n: Internationalization**
66+
- Full English and Traditional Chinese (zh-TW) language support across the entire web UI
67+
- Language toggle accessible from the toolbar
68+
- All UI strings, panel labels, tooltips, error messages, and onboarding copy translated
69+
- i18n architecture designed for additional language contributions
70+
71+
**Privacy-First Architecture**
72+
- All analysis runs locally on the user's machine
73+
- Code and graph data never leave the local environment
74+
- No telemetry, no analytics, no network requests during analysis
75+
- AI features use the user's own API keys with direct provider connections — no proxy
76+
77+
**Developer Experience**
78+
- pnpm monorepo with three packages: `@codeatlas/core`, `@codeatlas/cli`, `@codeatlas/web`
79+
- `fixtures/` directory with sample projects in TypeScript, JavaScript, Python, and Java for reproducible testing
80+
- Vitest test suite covering the core parsing engine and graph construction logic
81+
- Fastify server with clean separation between static file serving and API routing
82+
- Graph JSON output format versioned and documented in `api-design.md`
83+
84+
---
85+
86+
[1.0.0]: https://github.com/Stanshy/CodeAtlas/releases/tag/v1.0.0

0 commit comments

Comments
 (0)