project-librarian 0.5.5 โ†’ 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CONTRIBUTING.md +36 -0
  2. package/README.ko.md +57 -364
  3. package/README.md +56 -363
  4. package/dist/args.js +6 -1
  5. package/dist/code-index/extractors/light-languages.js +285 -0
  6. package/dist/code-index/extractors/registry.js +12 -0
  7. package/dist/code-index/extractors/shared.js +18 -1
  8. package/dist/code-index/extractors/typescript.js +30 -16
  9. package/dist/code-index/modes.js +136 -32
  10. package/dist/code-index/native-helper-matrix.js +99 -0
  11. package/dist/code-index/native-helper.js +292 -0
  12. package/dist/code-index/schema.js +72 -13
  13. package/dist/code-index/search.js +1 -1
  14. package/dist/code-index-file-policy.js +9 -1
  15. package/dist/code-index.js +363 -12
  16. package/dist/init-project-wiki.js +5 -0
  17. package/dist/native/darwin-arm64/project-librarian-indexer +0 -0
  18. package/dist/native/darwin-x64/project-librarian-indexer +0 -0
  19. package/dist/native/linux-arm64/project-librarian-indexer +0 -0
  20. package/dist/native/linux-arm64-musl/project-librarian-indexer +0 -0
  21. package/dist/native/linux-x64/project-librarian-indexer +0 -0
  22. package/dist/native/linux-x64-musl/project-librarian-indexer +0 -0
  23. package/dist/native/project-librarian-indexer-manifest.json +70 -0
  24. package/dist/native/win32-arm64/project-librarian-indexer.exe +0 -0
  25. package/dist/native/win32-x64/project-librarian-indexer.exe +0 -0
  26. package/docs/README.md +11 -0
  27. package/docs/benchmarks.md +64 -0
  28. package/docs/cli-reference.md +60 -0
  29. package/docs/code-evidence.md +87 -0
  30. package/docs/ko/README.md +13 -0
  31. package/docs/ko/benchmarks.md +64 -0
  32. package/docs/ko/cli-reference.md +60 -0
  33. package/docs/ko/code-evidence.md +87 -0
  34. package/docs/ko/maintainer.md +76 -0
  35. package/docs/ko/usage.md +167 -0
  36. package/docs/maintainer.md +76 -0
  37. package/docs/usage.md +175 -0
  38. package/package.json +11 -1
@@ -0,0 +1,70 @@
1
+ {
2
+ "artifact": "project-librarian-indexer",
3
+ "helpers": [
4
+ {
5
+ "architecture": "arm64",
6
+ "format": "mach-o",
7
+ "path": "dist/native/darwin-arm64/project-librarian-indexer",
8
+ "sha256": "f5c69130f6c0441044141c761f1ccdc7e6ee4d06e327ce0f50d43a7aed76cc95",
9
+ "size": 2697520,
10
+ "triple": "darwin-arm64"
11
+ },
12
+ {
13
+ "architecture": "x64",
14
+ "format": "mach-o",
15
+ "path": "dist/native/darwin-x64/project-librarian-indexer",
16
+ "sha256": "25041398ba2de3ed749c14103d358ed4a7934a05459eb63c6cf5f6ae58c7fb03",
17
+ "size": 2770592,
18
+ "triple": "darwin-x64"
19
+ },
20
+ {
21
+ "architecture": "arm64",
22
+ "format": "elf",
23
+ "path": "dist/native/linux-arm64/project-librarian-indexer",
24
+ "sha256": "01bf4437fd62446958438ac58e9ca8bef811bdc6d70a63fc1a0ca1b627521e67",
25
+ "size": 3065520,
26
+ "triple": "linux-arm64"
27
+ },
28
+ {
29
+ "architecture": "arm64",
30
+ "format": "elf",
31
+ "path": "dist/native/linux-arm64-musl/project-librarian-indexer",
32
+ "sha256": "b7287995bea678a6f55bd03761e5b0985d483e875d7594395b81bdb1e90a8dd9",
33
+ "size": 3100840,
34
+ "triple": "linux-arm64-musl"
35
+ },
36
+ {
37
+ "architecture": "x64",
38
+ "format": "elf",
39
+ "path": "dist/native/linux-x64/project-librarian-indexer",
40
+ "sha256": "5d93bb7576afbdde0acbde7983a874f2666f0d59227524c1eb42cc75b457c5ed",
41
+ "size": 3110696,
42
+ "triple": "linux-x64"
43
+ },
44
+ {
45
+ "architecture": "x64",
46
+ "format": "elf",
47
+ "path": "dist/native/linux-x64-musl/project-librarian-indexer",
48
+ "sha256": "518aea0fc53ed7731751db4bb436a0be98f8583659d51aeff769bedb7a7cb8ab",
49
+ "size": 3247384,
50
+ "triple": "linux-x64-musl"
51
+ },
52
+ {
53
+ "architecture": "arm64",
54
+ "format": "pe",
55
+ "path": "dist/native/win32-arm64/project-librarian-indexer.exe",
56
+ "sha256": "392157f4d3591c48a66ee674b99a8a34cda3d38cc76df6343276becb23a7055c",
57
+ "size": 2098688,
58
+ "triple": "win32-arm64"
59
+ },
60
+ {
61
+ "architecture": "x64",
62
+ "format": "pe",
63
+ "path": "dist/native/win32-x64/project-librarian-indexer.exe",
64
+ "sha256": "fabe69234daa9a6a738d0b7160c84573853d7a9e3be14c19ec6a27ca171e3f8a",
65
+ "size": 2375680,
66
+ "triple": "win32-x64"
67
+ }
68
+ ],
69
+ "schema_version": 1
70
+ }
package/docs/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Project Librarian Docs
2
+
3
+ Start from the main [README](../README.md) when evaluating the project. These pages hold the details that are useful after the first-screen overview.
4
+
5
+ | Document | Contents |
6
+ | --- | --- |
7
+ | [Usage](usage.md) | Install scopes, runner paths, generated files, migration behavior, and common agent requests. |
8
+ | [Code Evidence](code-evidence.md) | Code-evidence index, MCP server, freshness contract, scale gate, language support, and native helper policy. |
9
+ | [CLI Reference](cli-reference.md) | Complete command and option reference. |
10
+ | [Benchmark Evidence](benchmarks.md) | Published benchmark claims, limits, task-family definitions, and reproduction commands. |
11
+ | [Maintainer Guide](maintainer.md) | Local development, release readiness, trusted publishing, and benchmark operations. |
@@ -0,0 +1,64 @@
1
+ # Benchmark Evidence
2
+
3
+ These numbers are maintainer release evidence, not a blanket promise. Every value is real Codex JSONL usage and local wall-clock time (ChatGPT/Codex auth, `gpt-5.5`), measured hermetically: isolated Codex home, allowlist-only environment, clean tree, post-run fixture validation, with 3 measured runs plus 1 warmup per scenario against an `organic` control that has no Project Librarian.
4
+
5
+ The wiki-routing track and the code-graph track are measured and reported separately. A win on one never backs a claim about the other.
6
+
7
+ ## Reproduce A Release Candidate
8
+
9
+ ```bash
10
+ npm run benchmark:release:preview
11
+ npm run benchmark:release -- --allow-codex-run
12
+ ```
13
+
14
+ Measured release runs stream `[benchmark:progress]` lines to stderr for the scenario count, expected Codex exec total, current exec ordinal, phase, prompt id, exit status, elapsed time, and raw JSONL path. stdout stays reserved for the final JSON result.
15
+
16
+ Generated benchmark reports under `benchmarks/reports/llm/` are ignored by default. Maintainers should commit deliberate release baselines only when they are meant to support a public claim.
17
+
18
+ ## Wiki Track
19
+
20
+ Cost-weighted tokens, Project Librarian vs control:
21
+
22
+ | Scale | decision_lookup | aggregation | multi_session (2nd session) |
23
+ | --- | --- | --- | --- |
24
+ | Small | 14.4% less | 81.0% more | 22.0% less |
25
+ | Medium | 52.0% less | 19.0% less | 54.1% less |
26
+ | Large | 71.1% less | 29.0% less | 71.8% less |
27
+
28
+ Latest synthetic wiki-track release candidate: 2026-06-19, `gpt-5.5`, 42 scenarios, 3 measured runs plus 1 warmup each. The overall claim gate **passed**: 42/42 scenarios passed correctness, all 42 scenarios were claimable, and every corpus gate met the 3-run minimum.
29
+
30
+ The release claim is bounded to the synthetic wiki-routing track and the listed task families. It is not a claim about code-graph behavior, real repositories, every agent surface, or every question shape. Published boundaries remain visible: small `aggregation` still costs 81.0% more with the wiki, small `release_policy` costs 9.4% more in the full report, and `aggregation` stays slower at every scale even when token cost drops.
31
+
32
+ ## Code-Graph Track
33
+
34
+ Measured on two SHA-pinned open-source repositories with hand-authored answer keys and the answer-shaped MCP tools injected into the hermetic Codex home. The claim gate passed with 30/30 runs correct after two evaluator false positives were fixed and the report was re-scored from raw JSONL; recompute-from-raw is the standing audit policy.
35
+
36
+ Cost-weighted tokens, Project Librarian vs control:
37
+
38
+ | Question | excalidraw (~1.2k files) | backstage (~11.8k files) |
39
+ | --- | --- | --- |
40
+ | impact_trace | 117% more | **27.7% less** |
41
+ | workspace_graph | 106% more | 2.6% less |
42
+ | ownership_lookup | - | 99% more |
43
+
44
+ The claim is a scale crossover, and the losses are published next to the win. On the 11.8k-file repository the tool wins the expensive traversal question (`impact_trace` 27.7% fewer cost-weighted tokens, 24.5% fewer scan bytes) and breaks even on the workspace graph, but everything loses on the small repository and cheap lookups (CODEOWNERS ownership) lose at every measured scale.
45
+
46
+ ## Benchmark Names
47
+
48
+ Repositories under test:
49
+
50
+ - **excalidraw** - a real open-source whiteboard/diagramming app (~1.2k files); the small-repo data point.
51
+ - **backstage** - Spotify's open-source developer-portal platform (~11.8k files); the large-repo data point.
52
+
53
+ Question types:
54
+
55
+ - **decision_lookup** - find the latest project decision and its date from the wiki.
56
+ - **aggregation** - answer a question whose facts are scattered across several pages and must be synthesized.
57
+ - **multi_session** - a second session on the same project, measuring whether the durable wiki helps the next session, not just the first.
58
+ - **impact_trace** - trace the full set of direct and indirect importers for a changing module.
59
+ - **ownership_lookup** - resolve the owner by CODEOWNERS last-match precedence.
60
+ - **workspace_graph** - resolve the workspace/package dependency graph.
61
+
62
+ ## Maintainer Commands
63
+
64
+ Maintainer benchmark commands also live in [benchmarks/README.md](../benchmarks/README.md). They are for release evidence and public claim validation, not normal end-user setup.
@@ -0,0 +1,60 @@
1
+ # CLI Reference
2
+
3
+ Use the resolved local runner for automation or direct CLI execution:
4
+
5
+ ```bash
6
+ node .codex/skills/project-librarian/dist/init-project-wiki.js [init|update] [options]
7
+ node .codex/skills/project-librarian/dist/init-project-wiki.js install [--scope user|project] [--agents codex|claude|cursor|gemini|all]
8
+ ```
9
+
10
+ `install-skill` remains a compatibility alias for `install`.
11
+
12
+ `update` is the explicit existing-project update command. It rejects `--migrate` and `--adopt-existing`; use top-level `--migrate` when legacy docs or wiki content should be preserved into `wiki_legacy*` and reviewed. When project-scoped Project Librarian skill installs already exist for the selected agent surfaces, `update` copies the current package's reusable skill files into those project skill directories before refreshing the managed setup.
13
+
14
+ ### Important Options
15
+
16
+ | Option | Purpose |
17
+ | --- | --- |
18
+ | `install --scope user|project --agents <list> --dry-run` | Install reusable skill files globally or into the current repository; `--dry-run` previews copied files for install only. |
19
+ | `update --agents <list>` | Refresh an existing setup and existing project-scoped skill copies; selected surfaces can be `codex`, `claude`, `cursor`, `gemini`, or `all`. |
20
+ | `--migrate`, `--adopt-existing` | Preserve an existing wiki as `wiki_legacy*`, create migration inboxes, and generate unit-map/split-plan/coverage review files. |
21
+ | `--lint` | Validate generated setup without editing files. |
22
+ | `--link-check` | Report broken wiki links, duplicate routes, orphan pages, and pages the startup router cannot reach within the depth budget. |
23
+ | `--quality-check` | Report stale, conflicting, and low-quality wiki document signals. |
24
+ | `--doctor` | Run lint, link-check, and quality-check together. |
25
+ | `--doctor --fix` | Safely refresh generated index routing before diagnostics. `--fix` is only a modifier for `--doctor`. |
26
+ | `--migration-lint` | Validate migration coverage, unit-map, split-plan, and review scaffolding separately from normal lint. |
27
+ | `--migration-quality-check` | Report migration policy/structure signals separately from normal quality-check. |
28
+ | `--migration-doctor` | Run migration-lint and migration-quality-check together. |
29
+ | `--query <terms>` | Search wiki paths, metadata, titles, and bodies; answer-first output with per-page TL;DR lines under a hard size cap. |
30
+ | `--wiki-impact <page-or-term>` | Show wiki backlinks, `decision_ref` citations, outgoing links, and router depth for matching pages. |
31
+ | `--wiki-visualize` | Write a self-contained static wiki graph visualizer to `.project-wiki/wiki-graph.html`. |
32
+ | `--wiki-visualize-out <path>` | With `--wiki-visualize`, write to a custom repository-relative path under `.project-wiki/`. |
33
+ | `--refresh-index` | Update generated auto-discovered wiki routing. |
34
+ | `--capture-inbox --title <title> --content <content> --category <category>` | Append a candidate note to the wiki inbox; category defaults to `project-candidate`. |
35
+ | `--handoff-save --goal <goal> --state <state> --next <action>` | Save generated local session handoff state under `.project-wiki/session/`. Repeat `--next`, `--decision`, `--blocked`, `--open-question`, `--verification`, `--last-success-command`, and `--last-failure-command` as needed. |
36
+ | `--handoff-show`, `--handoff-status`, `--handoff-clear` | Print, inspect, or remove generated session handoff state. Startup hooks mention the handoff when it exists but do not inject the full file by default. |
37
+ | `--handoff-promote-inbox` | Append selected generated handoff facts to `wiki/inbox/project-candidates.md` as a pending candidate. It does not write canonical, plan, or decision pages. |
38
+ | `--handoff-injection-enable`, `--handoff-injection-disable`, `--handoff-injection-status` | Opt in, opt out, or inspect the capped full handoff injection experiment. Default startup behavior remains pointer-only. |
39
+ | `--issue-draft --issue-title <title>` | Print a read-only GitHub issue body draft for problems or side effects. |
40
+ | `--issue-create --issue-title <title> --issue-body-file <path>` | Create a GitHub issue through `gh` after explicit user approval; `--issue-body-file` reuses an existing Markdown body. |
41
+ | `--glossary-init` | Create and route the optional glossary page. |
42
+ | `--prune-check` | Report active pages with stale or unresolved lifecycle signals. |
43
+ | `--prune-check --prune-check-strict` | Omit pages selected only because their `updated` date is older than today. |
44
+ | `--review-migration`, `--semantic-migrate` | Sync migration coverage and inbox statuses into migration review files. |
45
+ | `--no-git-config` | Install hook files without changing `git core.hooksPath`. |
46
+ | `--code-index` | Build the disposable code evidence index. |
47
+ | `--code-scope <path>` | With `--code-index`, restrict indexing to one or more project-relative files or directories. |
48
+ | `--code-index-out <path>` | Use a custom SQLite output path under `.project-wiki/`; applies to index and read modes. |
49
+ | `--acknowledge-small-repo` | With `--code-index`, proceed below the ~5k-file scale gate after the cost warning. |
50
+ | `--incremental`, `--code-index-incremental`, `--code-index-full` | With `--code-index`, require an incremental update or force a full rebuild. |
51
+ | `--code-parser <mode>` | With `--code-index`, select `default` or optional `tree-sitter` extraction. |
52
+ | `--code-index-health` | Inspect code evidence cache compatibility and print rebuild guidance without writing. |
53
+ | `--code-index-engine <engine>` | Override the default `auto` index engine with `typescript` or `native-rust`. |
54
+ | `--code-status`, `--code-files` | Inspect cache freshness or list indexed files. |
55
+ | `--code-report` | Print architecture and ownership summaries from the evidence index. |
56
+ | `--code-report-section <section>` | Print one section: `coverage`, `ownership`, `languages`, `parsers`, `workspaces`, `workspace-graph`, `routes`, `hotspots`, `configs`, or `edges`. |
57
+ | `--code-impact <term>` | Show file, symbol, route, import, edge, and owner impact evidence. |
58
+ | `--code-context-pack <term>` | Print a budgeted first-pass context pack with structural file, symbol, route, import, edge, and ownership evidence. |
59
+ | `--code-search-symbol <term>` | Search indexed symbols. |
60
+ | `--code-query <sql>` | Run conservative read-only SQL over the evidence index. |
@@ -0,0 +1,87 @@
1
+ # Code Evidence
2
+
3
+ Project Librarian can build a disposable SQLite index under `.project-wiki/` and serve it through read-only CLI and MCP surfaces. This is optional; the planning wiki works without it.
4
+
5
+ ## Freshness Contract
6
+
7
+ Before citing `--code-report`, `--code-impact`, `--code-context-pack`, or MCP tool output as current code-structure evidence, run:
8
+
9
+ ```bash
10
+ project-librarian --code-status
11
+ ```
12
+
13
+ or MCP `code_status`, and require `stale_files: 0`. Stale reports are pointers for rebuild, not authoritative project truth.
14
+
15
+ ## Scale Gate
16
+
17
+ The code-evidence index is measured as a scale crossover, not a universal win. Below ~5k indexable files, `--code-index` halts unless `--acknowledge-small-repo` is passed. Bootstrap skips MCP auto-registration unless an existing `.project-wiki` SQLite index shows the user already opted in.
18
+
19
+ Measured release evidence:
20
+
21
+ | Question | excalidraw (~1.2k files) | backstage (~11.8k files) |
22
+ | --- | --- | --- |
23
+ | impact_trace | 117% more | **27.7% less** |
24
+ | workspace_graph | 106% more | 2.6% less |
25
+ | ownership_lookup | - | 99% more |
26
+
27
+ The index pays off only on genuinely large repositories for expensive traversal questions. Cheap lookups can lose even at larger scale.
28
+
29
+ ## MCP Server
30
+
31
+ `project-librarian mcp` runs a hand-rolled stdio MCP server (JSON-RPC 2.0 over newline-delimited JSON, no MCP SDK dependency) that serves the existing `.project-wiki` code-evidence index read-only. The package's hard runtime dependency is `typescript`; code evidence also uses Node's `node:sqlite`, with Tree-sitter grammars remaining optional.
32
+
33
+ The server exposes answer-shaped tools:
34
+
35
+ - `code_context_pack`
36
+ - `code_impact`
37
+ - `code_ownership`
38
+ - `code_workspace_graph`
39
+ - `code_search`
40
+ - `code_status`
41
+
42
+ Responses lead with a one-line answer, follow with compact path/symbol/signature evidence, cap each reply, and prepend a warning when `code_status` reports the index is stale.
43
+
44
+ The server also exposes fixed resources:
45
+
46
+ - `project-librarian://wiki/startup`
47
+ - `project-librarian://wiki/index`
48
+ - `project-librarian://code/status`
49
+
50
+ It includes prompt templates for wiki taxonomy updates, code impact traces, maintenance improvement reviews, and retrieval quality reviews. Resource reads come from a fixed URI registry rather than arbitrary filesystem paths.
51
+
52
+ Bootstrap registers the server for Claude Code (`.mcp.json`), Cursor (`.cursor/mcp.json`), and Gemini CLI (`mcpServers` in `.gemini/settings.json`), preserving any existing servers and keys and reporting `exists` on a re-run. When the repository contains a local runner the registration uses `node <runner> mcp`; otherwise it uses the installed `project-librarian mcp` binary.
53
+
54
+ Codex registers MCP servers at the user level only (`codex mcp add`), so bootstrap does not write a project-level Codex MCP config. To use the server with Codex, run it once per machine:
55
+
56
+ ```bash
57
+ codex mcp add project-librarian -- node .codex/skills/project-librarian/dist/init-project-wiki.js mcp
58
+ ```
59
+
60
+ ## Language Support Matrix
61
+
62
+ The matrix lists languages with implemented symbol/import extraction. Other recognized extensions are inventory-only. Default mode uses `typescript-ast`, `*-light` extraction for the listed non-JS languages, config extraction, and inventory rows. `--code-parser tree-sitter` switches supported source files to `tree-sitter-*` profiles.
63
+
64
+ | Language | Extensions | Default extraction | Tree-sitter extraction | Indexed evidence |
65
+ | --- | --- | --- | --- | --- |
66
+ | TypeScript | `.ts`, `.tsx`, `.cts`, `.mts` | `typescript-ast` | `tree-sitter-typescript`, `tree-sitter-tsx` | functions, classes, methods, variables, interfaces, types, enums, imports, exports, calls, common HTTP routes |
67
+ | JavaScript | `.js`, `.jsx`, `.cjs`, `.mjs` | `typescript-ast` | `tree-sitter-javascript` | functions, classes, methods, variables, imports, exports, `require()` calls, calls, common HTTP routes |
68
+ | Python | `.py` | `python-light` | `tree-sitter-python` | functions, classes, `import`, `from ... import` |
69
+ | Go | `.go` | `go-light` | `tree-sitter-go` | functions, methods, types, consts, vars, single imports, import blocks |
70
+ | Rust | `.rs` | `rust-light` | `tree-sitter-rust` | functions, structs, enums, traits, impls, `use` imports |
71
+ | Java | `.java` | `java-light` | `tree-sitter-java` | classes, interfaces, enums, methods, imports |
72
+ | PHP | `.php` | `php-light` | `tree-sitter-php` | functions, classes, interfaces, traits, methods, namespace uses |
73
+ | Kotlin | `.kt`, `.kts` | `kotlin-light` | `tree-sitter-kotlin` | functions, classes, objects, imports |
74
+ | Swift | `.swift` | `swift-light` | `tree-sitter-swift` | functions, classes, structs, protocols, enums, imports |
75
+ | C | `.c`, `.h` | `c-light` | `tree-sitter-c` | functions, structs, enums, includes |
76
+ | C++ | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | `cpp-light` | `tree-sitter-cpp` | functions, classes/structs, namespaces, enums, includes/usings |
77
+ | C# | `.cs` | `csharp-light` | `tree-sitter-csharp` | classes, interfaces, structs, enums, methods, usings |
78
+
79
+ Recognized but inventory-only extensions include `.rb`, `.vue`, and `.css`. Config files (`.json`, `.yaml`, `.yml`, `.toml`, `.env.example`, `package.json`, `tsconfig.json`, `Dockerfile`, and `Makefile`) are indexed as configuration or inventory evidence.
80
+
81
+ ## Native Helper Policy
82
+
83
+ Experimental `--code-index-engine native-rust` runs the native helper for `typescript-ast`, `config`, the listed `*-light` profiles, and inventory-only source files. Omitted `--code-index-engine` means `auto`; full-index auto uses the native helper when a helper is available and at least one structurally extracted native profile is present, while config-only or inventory-only repositories stay on TypeScript. Compatible incremental auto uses the Rust direct-writer when a helper is available and the changed files are native-eligible.
84
+
85
+ Helper resolution checks `PROJECT_LIBRARIAN_NATIVE_INDEXER` first, then `dist/native/<platform>-<arch>/project-librarian-indexer` or `.exe`; Linux musl installs resolve to `dist/native/linux-<arch>-musl/`.
86
+
87
+ Public releases must not ship only one staged helper. `release:check` accepts either no packaged native helper or a complete supported matrix (`darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-arm64-musl`, `linux-x64`, `linux-x64-musl`, `win32-arm64`, `win32-x64`), checks helper executable bits, Mach-O/ELF/PE platform headers, and the packaged-helper SHA-256 manifest. The GitHub publish workflow builds the supported helper matrix, runs `npm run native:package-manifest`, verifies `npm run native:package-audit:matrix`, and publishes only after the final helper-including package passes `npm run release:check`.
@@ -0,0 +1,13 @@
1
+ # Project Librarian ๋ฌธ์„œ
2
+
3
+ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ํ‰๊ฐ€ํ•  ๋•Œ๋Š” ๋จผ์ € [ํ•œ๊ตญ์–ด README](../../README.ko.md)๋ฅผ ์ฝ์œผ์„ธ์š”. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ฒซ ํ™”๋ฉด์— ๋ชจ๋‘ ๋‹ด๊ธฐ์—๋Š” ๊ธด ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํ•œ๊ตญ์–ด๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
4
+
5
+ ์ด ํ•œ๊ตญ์–ด ๋ฌธ์„œ๋Š” GitHub ์ €์žฅ์†Œ์šฉ์ž…๋‹ˆ๋‹ค. npm ํŒจํ‚ค์ง€์—๋Š” ์˜์–ด ์ƒ์„ธ ๋ฌธ์„œ๋งŒ ํฌํ•จ๋˜๋ฉฐ, `docs/ko/`๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
6
+
7
+ | ๋ฌธ์„œ | ๋‚ด์šฉ |
8
+ | --- | --- |
9
+ | [์‚ฌ์šฉ ๊ฐ€์ด๋“œ](usage.md) | ์„ค์น˜ ๋ฒ”์œ„, ์‹คํ–‰ ๊ฒฝ๋กœ, ์ƒ์„ฑ ํŒŒ์ผ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋™์ž‘, ์ผ๋ฐ˜ ์—์ด์ „ํŠธ ์š”์ฒญ. |
10
+ | [์ฝ”๋“œ ๊ทผ๊ฑฐ](code-evidence.md) | ์ฝ”๋“œ ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค, MCP ์„œ๋ฒ„, ์ตœ์‹ ์„ฑ ๊ณ„์•ฝ, ๊ทœ๋ชจ ๊ฒŒ์ดํŠธ, ์–ธ์–ด ์ง€์›, ๋„ค์ดํ‹ฐ๋ธŒ ํ—ฌํผ ์ •์ฑ…. |
11
+ | [CLI ์ฐธ์กฐ](cli-reference.md) | ์ „์ฒด ๋ช…๋ น๊ณผ ์˜ต์…˜ ์ฐธ์กฐ. |
12
+ | [๋ฒค์น˜๋งˆํฌ ๊ทผ๊ฑฐ](benchmarks.md) | ๊ณต๊ฐœ ๋ฒค์น˜๋งˆํฌ ์ฃผ์žฅ, ํ•œ๊ณ„, ์ž‘์—… ์œ ํ˜•, ์žฌํ˜„ ๋ช…๋ น. |
13
+ | [๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ](maintainer.md) | ๋กœ์ปฌ ๊ฐœ๋ฐœ, ๋ฆด๋ฆฌ์Šค ์ค€๋น„, ์‹ ๋ขฐ ๋ฐฐํฌ, ๋ฒค์น˜๋งˆํฌ ์šด์˜. |
@@ -0,0 +1,64 @@
1
+ # ๋ฒค์น˜๋งˆํฌ ๊ทผ๊ฑฐ
2
+
3
+ ์—ฌ๊ธฐ ์ˆ˜์น˜๋Š” ๋ชจ๋“  ์ƒํ™ฉ์— ๋Œ€ํ•œ ์•ฝ์†์ด ์•„๋‹ˆ๋ผ ๊ด€๋ฆฌ์ž ๋ฆด๋ฆฌ์Šค ๊ทผ๊ฑฐ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ’์€ ์‹ค์ œ Codex JSONL ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋กœ์ปฌ ์‹คํ–‰ ์‹œ๊ฐ„(ChatGPT/Codex ์ธ์ฆ, `gpt-5.5`)์ด๋ฉฐ, ๊ฒฉ๋ฆฌ๋œ Codex home, ํ—ˆ์šฉ ๋ชฉ๋ก ์ „์šฉ ํ™˜๊ฒฝ, ๊นจ๋—ํ•œ ์ž‘์—… ํŠธ๋ฆฌ, ์‹คํ–‰ ํ›„ fixture ๊ฒ€์ฆ ์กฐ๊ฑด์—์„œ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์ธก์ • 3ํšŒ์™€ ์˜ˆ์—ด 1ํšŒ๋กœ, Project Librarian์ด ์—†๋Š” `organic` ๋Œ€์กฐ๊ตฐ๊ณผ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค.
4
+
5
+ ์œ„ํ‚ค ๋ผ์šฐํŒ… ํŠธ๋ž™๊ณผ ์ฝ”๋“œ ๊ทธ๋ž˜ํ”„ ํŠธ๋ž™์€ ๋ถ„๋ฆฌํ•ด ์ธก์ •ํ•˜๊ณ  ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํŠธ๋ž™์˜ ์Šน๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ํŠธ๋ž™์˜ ์ฃผ์žฅ์„ ๋’ท๋ฐ›์นจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
6
+
7
+ ## ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ์žฌํ˜„
8
+
9
+ ```bash
10
+ npm run benchmark:release:preview
11
+ npm run benchmark:release -- --allow-codex-run
12
+ ```
13
+
14
+ ์‹ค์ธก ๋ฆด๋ฆฌ์Šค ์‹คํ–‰์€ stderr์— `[benchmark:progress]` ์ค„์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ด ์‹œ๋‚˜๋ฆฌ์˜ค ์ˆ˜, ์˜ˆ์ƒ Codex ์‹คํ–‰ ์ด๋Ÿ‰, ํ˜„์žฌ ์‹คํ–‰ ์ˆœ๋ฒˆ, ๋‹จ๊ณ„, ํ”„๋กฌํ”„ํŠธ ID, ์ข…๋ฃŒ ์ƒํƒœ, ๊ฒฝ๊ณผ ์‹œ๊ฐ„, ์›์‹œ JSONL ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. stdout์€ ์ตœ์ข… JSON ๊ฒฐ๊ณผ ์ „์šฉ์ž…๋‹ˆ๋‹ค.
15
+
16
+ `benchmarks/reports/llm/` ์•„๋ž˜ ์ƒ์„ฑ ๋ณด๊ณ ์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ์ฃผ์žฅ ๊ทผ๊ฑฐ๋กœ ์“ฐ๋ ค๋Š” ๋ฆด๋ฆฌ์Šค ๊ธฐ์ค€์„ ๋งŒ ์˜๋„์ ์œผ๋กœ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
17
+
18
+ ## ์œ„ํ‚ค ํŠธ๋ž™
19
+
20
+ ๋น„์šฉ ๊ฐ€์ค‘ ํ† ํฐ, Project Librarian ๋Œ€ ๋Œ€์กฐ๊ตฐ:
21
+
22
+ | ๊ทœ๋ชจ | decision_lookup | aggregation | multi_session (2๋ฒˆ์งธ ์„ธ์…˜) |
23
+ | --- | --- | --- | --- |
24
+ | ์†Œํ˜• | 14.4% ์ ์Œ | 81.0% ๋งŽ์Œ | 22.0% ์ ์Œ |
25
+ | ์ค‘ํ˜• | 52.0% ์ ์Œ | 19.0% ์ ์Œ | 54.1% ์ ์Œ |
26
+ | ๋Œ€ํ˜• | 71.1% ์ ์Œ | 29.0% ์ ์Œ | 71.8% ์ ์Œ |
27
+
28
+ ์ตœ์‹  ํ•ฉ์„ฑ ์œ„ํ‚ค ํŠธ๋ž™ ๋ฆด๋ฆฌ์Šค ํ›„๋ณด๋Š” 2026-06-19์— `gpt-5.5`๋กœ ์ธก์ •ํ–ˆ์œผ๋ฉฐ, 42๊ฐœ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฐ 3ํšŒ ์ธก์ •ํ•˜๊ณ  1ํšŒ ์˜ˆ์—ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์ฃผ์žฅ ๊ฒŒ์ดํŠธ๋Š” **ํ†ต๊ณผ**ํ–ˆ์Šต๋‹ˆ๋‹ค. 42/42๊ฐœ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ •ํ™•์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ–ˆ๊ณ , 42๊ฐœ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ชจ๋‘ claimable์ด์—ˆ์œผ๋ฉฐ, ๋ชจ๋“  corpus gate๊ฐ€ 3-run ์ตœ์†Œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค.
29
+
30
+ ์ด ๋ฆด๋ฆฌ์Šค ์ฃผ์žฅ์€ ํ•ฉ์„ฑ ์œ„ํ‚ค ๋ผ์šฐํŒ… ํŠธ๋ž™๊ณผ ํ‘œ๊ธฐ๋œ ์ž‘์—… ์œ ํ˜•์— ํ•œ์ •๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ทธ๋ž˜ํ”„ ๋™์ž‘, ์‹ค์ œ ์ €์žฅ์†Œ, ๋ชจ๋“  ์—์ด์ „ํŠธ ํ‘œ๋ฉด, ๋ชจ๋“  ์งˆ๋ฌธ ํ˜•ํƒœ์— ๋Œ€ํ•œ ์ฃผ์žฅ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ˆจ๊ธฐ์ง€ ์•Š๋Š” ํ•œ๊ณ„๋„ ๋‚จ์Šต๋‹ˆ๋‹ค. ์†Œํ˜• `aggregation`์€ ์œ„ํ‚ค๋ฅผ ์ผฐ์„ ๋•Œ 81.0% ๋” ๋น„์‹ธ๊ณ , ์ „์ฒด ๋ณด๊ณ ์„œ์˜ ์†Œํ˜• `release_policy`๋„ 9.4% ๋” ๋น„์‹ธ๋ฉฐ, `aggregation`์€ ํ† ํฐ ๋น„์šฉ์ด ์ค„์–ด๋“œ๋Š” ๊ทœ๋ชจ์—์„œ๋„ ์‹คํ–‰ ์‹œ๊ฐ„์€ ๋งค๋ฒˆ ๋” ๋А๋ฆฝ๋‹ˆ๋‹ค.
31
+
32
+ ## ์ฝ”๋“œ ๊ทธ๋ž˜ํ”„ ํŠธ๋ž™
33
+
34
+ SHA๋กœ ๊ณ ์ •ํ•œ ์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ 2๊ณณ์—์„œ, ์†์œผ๋กœ ์ž‘์„ฑํ•œ ์ •๋‹ต ํ‚ค์™€ ๊ฒฉ๋ฆฌ๋œ Codex home์— ์ฃผ์ž…ํ•œ ๋‹ต๋ณ€ ํ˜•ํƒœ MCP ๋„๊ตฌ๋กœ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ฐ€๊ธฐ ๊ฑฐ์ง“ ์–‘์„ฑ 2๊ฑด์„ ๊ณ ์น˜๊ณ  ์›์‹œ JSONL์—์„œ ์žฌ์ฑ„์ ํ•œ ๋’ค 30/30 ์ •ํ™•์œผ๋กœ ์ฃผ์žฅ ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ, ์›์‹œ ๋ฐ์ดํ„ฐ์—์„œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ƒ์‹œ ๊ฐ์‚ฌ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.
35
+
36
+ ๋น„์šฉ ๊ฐ€์ค‘ ํ† ํฐ, Project Librarian ๋Œ€ ๋Œ€์กฐ๊ตฐ:
37
+
38
+ | ์งˆ๋ฌธ | excalidraw (์•ฝ 1.2k ํŒŒ์ผ) | backstage (์•ฝ 11.8k ํŒŒ์ผ) |
39
+ | --- | --- | --- |
40
+ | impact_trace | 117% ๋งŽ์Œ | **27.7% ์ ์Œ** |
41
+ | workspace_graph | 106% ๋งŽ์Œ | 2.6% ์ ์Œ |
42
+ | ownership_lookup | - | 99% ๋งŽ์Œ |
43
+
44
+ ์ฃผ์žฅ์€ ๊ทœ๋ชจ ๊ต์ฐจ์ ์ด๋ฉฐ ์†์‹ค๋„ ์Šน๋ฆฌ ์˜†์— ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. 11.8k ํŒŒ์ผ ์ €์žฅ์†Œ์—์„œ๋Š” ๋น„์‹ผ ์ˆœํšŒ ์งˆ๋ฌธ(`impact_trace` ๋น„์šฉ ๊ฐ€์ค‘ ํ† ํฐ 27.7% ๊ฐ์†Œ, ์Šค์บ” ๋ฐ”์ดํŠธ 24.5% ๊ฐ์†Œ)์—์„œ ์ด๊ธฐ๊ณ  workspace graph๋Š” ์†์ต๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์†Œํ˜• ์ €์žฅ์†Œ์—์„œ๋Š” ๋ชจ๋‘ ์ง€๊ณ , CODEOWNERS ์†Œ์œ ๊ถŒ ๊ฐ™์€ ์ €๋ ดํ•œ ์กฐํšŒ๋Š” ๋ชจ๋“  ์ธก์ • ๊ทœ๋ชจ์—์„œ ์ง‘๋‹ˆ๋‹ค.
45
+
46
+ ## ๋ฒค์น˜๋งˆํฌ ์ด๋ฆ„
47
+
48
+ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ ์ €์žฅ์†Œ:
49
+
50
+ - **excalidraw** - ์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ™”์ดํŠธ๋ณด๋“œ/๋‹ค์ด์–ด๊ทธ๋žจ ์•ฑ(์•ฝ 1.2k ํŒŒ์ผ). ์†Œํ˜• ์ €์žฅ์†Œ ํ‘œ๋ณธ.
51
+ - **backstage** - Spotify์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐœ๋ฐœ์ž ํฌํ„ธ ํ”Œ๋žซํผ(์•ฝ 11.8k ํŒŒ์ผ). ๋Œ€ํ˜• ์ €์žฅ์†Œ ํ‘œ๋ณธ.
52
+
53
+ ์งˆ๋ฌธ ์œ ํ˜•:
54
+
55
+ - **decision_lookup** - ์œ„ํ‚ค์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ ํ”„๋กœ์ ํŠธ ๊ฒฐ์ •๊ณผ ๊ทธ ๋‚ ์งœ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
56
+ - **aggregation** - ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ํฉ์–ด์ง„ ์‚ฌ์‹ค์„ ์ข…ํ•ฉํ•ด์•ผ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.
57
+ - **multi_session** - ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์˜ ๋‘ ๋ฒˆ์งธ ์„ธ์…˜์œผ๋กœ, ์ง€์†๋˜๋Š” ์œ„ํ‚ค๊ฐ€ ๋‹ค์Œ ์„ธ์…˜์—๋„ ๋„์›€์ด ๋˜๋Š”์ง€ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
58
+ - **impact_trace** - ๋ฐ”๋€Œ๋Š” ๋ชจ๋“ˆ์˜ ์ง์ ‘/๊ฐ„์ ‘ importer ์ „์ฒด๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
59
+ - **ownership_lookup** - CODEOWNERS ๋งˆ์ง€๋ง‰ ์ผ์น˜ ์šฐ์„ ์ˆœ์œ„๋กœ ์†Œ์œ ์ž๋ฅผ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค.
60
+ - **workspace_graph** - workspace/package ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ํŒ์ •ํ•ฉ๋‹ˆ๋‹ค.
61
+
62
+ ## ๊ด€๋ฆฌ์ž ๋ช…๋ น
63
+
64
+ ๊ด€๋ฆฌ์ž ๋ฒค์น˜๋งˆํฌ ๋ช…๋ น์€ [benchmarks/README.md](../../benchmarks/README.md)์—๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋ฆด๋ฆฌ์Šค ๊ทผ๊ฑฐ์™€ ๊ณต๊ฐœ ์ฃผ์žฅ ๊ฒ€์ฆ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž ์„ค์ • ์ ˆ์ฐจ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
@@ -0,0 +1,60 @@
1
+ # CLI ์ฐธ์กฐ
2
+
3
+ ์ž๋™ํ™”๋‚˜ ์ง์ ‘ CLI ์‹คํ–‰์—๋Š” ํ™•์ธ๋œ ๋กœ์ปฌ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
4
+
5
+ ```bash
6
+ node .codex/skills/project-librarian/dist/init-project-wiki.js [init|update] [options]
7
+ node .codex/skills/project-librarian/dist/init-project-wiki.js install [--scope user|project] [--agents codex|claude|cursor|gemini|all]
8
+ ```
9
+
10
+ `install-skill`์€ `install`์˜ ํ˜ธํ™˜์„ฑ ๋ณ„์นญ์œผ๋กœ ๊ณ„์† ์ง€์›๋ฉ๋‹ˆ๋‹ค.
11
+
12
+ `update`๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ๊ฐฑ์‹ ์„ ๋ช…์‹œํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค. `--migrate`์™€ `--adopt-existing`๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฌธ์„œ๋‚˜ ์œ„ํ‚ค ๋‚ด์šฉ์„ `wiki_legacy*`๋กœ ๋ณด์กดํ•˜๊ณ  ๊ฒ€ํ† ํ•ด์•ผ ํ•œ๋‹ค๋ฉด top-level `--migrate`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ๋œ ์—์ด์ „ํŠธ ํ‘œ๋ฉด์— ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„ Project Librarian ์Šคํ‚ฌ ์„ค์น˜๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด `update`๋Š” ํ˜„์žฌ ํŒจํ‚ค์ง€์˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ ํŒŒ์ผ์„ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์Šคํ‚ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•œ ๋’ค ๊ด€๋ฆฌ ์„ค์ •์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.
13
+
14
+ ### ์ฃผ์š” ์˜ต์…˜
15
+
16
+ | ์˜ต์…˜ | ๋ชฉ์  |
17
+ | --- | --- |
18
+ | `install --scope user|project --agents <list> --dry-run` | ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌ ํŒŒ์ผ์„ ์ „์—ญ ๋˜๋Š” ํ˜„์žฌ ์ €์žฅ์†Œ์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. `--dry-run`์€ install์—์„œ ๋ณต์‚ฌ๋  ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. |
19
+ | `update --agents <list>` | ๊ธฐ์กด ์„ค์ •๊ณผ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„ ์Šคํ‚ฌ ๋ณต์‚ฌ๋ณธ์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ๋ฉด์€ `codex`, `claude`, `cursor`, `gemini`, `all` ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. |
20
+ | `--migrate`, `--adopt-existing` | ๊ธฐ์กด ์œ„ํ‚ค๋ฅผ `wiki_legacy*`๋กœ ๋ณด์กดํ•˜๊ณ  migration inbox, unit-map, split-plan, coverage ๊ฒ€ํ†  ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. |
21
+ | `--lint` | ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ๋œ ์„ค์ •์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. |
22
+ | `--link-check` | ๊นจ์ง„ ์œ„ํ‚ค ๋งํฌ, ์ค‘๋ณต route, orphan page, ์‹œ์ž‘ ๋ผ์šฐํ„ฐ depth ์˜ˆ์‚ฐ ์•ˆ์—์„œ ๋‹ฟ์ง€ ์•Š๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. |
23
+ | `--quality-check` | ์˜ค๋ž˜๋˜์—ˆ๊ฑฐ๋‚˜ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ํ’ˆ์งˆ์ด ๋‚ฎ์€ ์œ„ํ‚ค ๋ฌธ์„œ ์‹ ํ˜ธ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. |
24
+ | `--doctor` | lint, link-check, quality-check๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. |
25
+ | `--doctor --fix` | ์ง„๋‹จ ์ „์— ์ƒ์„ฑ๋œ index routing์„ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. `--fix`๋Š” `--doctor`์˜ modifier์ž…๋‹ˆ๋‹ค. |
26
+ | `--migration-lint` | migration coverage, unit-map, split-plan, review scaffolding์„ ์ผ๋ฐ˜ lint์™€ ๋ถ„๋ฆฌํ•ด ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. |
27
+ | `--migration-quality-check` | migration ์ •์ฑ…/๊ตฌ์กฐ ์‹ ํ˜ธ๋ฅผ ์ผ๋ฐ˜ quality-check์™€ ๋ถ„๋ฆฌํ•ด ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. |
28
+ | `--migration-doctor` | migration-lint์™€ migration-quality-check๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. |
29
+ | `--query <terms>` | ์œ„ํ‚ค ๊ฒฝ๋กœ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ œ๋ชฉ, ๋ณธ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ๋Š” answer-first ์ถœ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. |
30
+ | `--wiki-impact <page-or-term>` | ์ผ์น˜ํ•˜๋Š” ํŽ˜์ด์ง€์˜ backlinks, `decision_ref` ์ธ์šฉ, outgoing link, router depth๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. |
31
+ | `--wiki-visualize` | `.project-wiki/wiki-graph.html`์— ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์ •์  ์œ„ํ‚ค ๊ทธ๋ž˜ํ”„๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. |
32
+ | `--wiki-visualize-out <path>` | `--wiki-visualize`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด `.project-wiki/` ์•„๋ž˜ ์‚ฌ์šฉ์ž ์ง€์ • ์ €์žฅ์†Œ ์ƒ๋Œ€ ๊ฒฝ๋กœ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. |
33
+ | `--refresh-index` | ์ž๋™ ๋ฐœ๊ฒฌ๋œ ์œ„ํ‚ค routing์„ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค. |
34
+ | `--capture-inbox --title <title> --content <content> --category <category>` | ํ›„๋ณด ๋ฉ”๋ชจ๋ฅผ ์œ„ํ‚ค inbox์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. category ๊ธฐ๋ณธ๊ฐ’์€ `project-candidate`์ž…๋‹ˆ๋‹ค. |
35
+ | `--handoff-save --goal <goal> --state <state> --next <action>` | `.project-wiki/session/` ์•„๋ž˜์— ์ƒ์„ฑํ˜• ๋กœ์ปฌ ์„ธ์…˜ ํ•ธ๋“œ์˜คํ”„๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋ฉด `--next`, `--decision`, `--blocked`, `--open-question`, `--verification`, `--last-success-command`, `--last-failure-command`๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. |
36
+ | `--handoff-show`, `--handoff-status`, `--handoff-clear` | ์ƒ์„ฑ๋œ ์„ธ์…˜ ํ•ธ๋“œ์˜คํ”„๋ฅผ ์ถœ๋ ฅ, ์ ๊ฒ€, ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ›…์€ ํ•ธ๋“œ์˜คํ”„๊ฐ€ ์žˆ์„ ๋•Œ ์กด์žฌ๋งŒ ์•Œ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์ฒด ํŒŒ์ผ์„ ์ฃผ์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |
37
+ | `--handoff-promote-inbox` | ์ƒ์„ฑ๋œ ํ•ธ๋“œ์˜คํ”„์˜ ์„ ๋ณ„๋œ ์‚ฌ์‹ค์„ `wiki/inbox/project-candidates.md`์— pending ํ›„๋ณด๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. canonical, plan, decision ํŽ˜์ด์ง€๋Š” ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |
38
+ | `--handoff-injection-enable`, `--handoff-injection-disable`, `--handoff-injection-status` | ์ œํ•œ๋œ ์ „์ฒด ํ•ธ๋“œ์˜คํ”„ ์ฃผ์ž… ์‹คํ—˜์„ ์ผœ๊ณ , ๋„๊ณ , ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‹œ์ž‘ ๋™์ž‘์€ pointer-only์ž…๋‹ˆ๋‹ค. |
39
+ | `--issue-draft --issue-title <title>` | ๋ฌธ์ œ๋‚˜ ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ GitHub issue ๋ณธ๋ฌธ ์ดˆ์•ˆ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. |
40
+ | `--issue-create --issue-title <title> --issue-body-file <path>` | ๋ช…์‹œ์  ์‚ฌ์šฉ์ž ์Šน์ธ ํ›„ `gh`๋กœ GitHub issue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. `--issue-body-file`์€ ๊ธฐ์กด Markdown ๋ณธ๋ฌธ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. |
41
+ | `--glossary-init` | ์„ ํƒ์  glossary ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  route์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. |
42
+ | `--prune-check` | stale ๋˜๋Š” unresolved lifecycle ์‹ ํ˜ธ๊ฐ€ ์žˆ๋Š” active page๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. |
43
+ | `--prune-check --prune-check-strict` | `updated` ๋‚ ์งœ๊ฐ€ ์˜ค๋Š˜๋ณด๋‹ค ์˜ค๋ž˜๋๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ์„ ํƒ๋œ ํŽ˜์ด์ง€๋Š” ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค. |
44
+ | `--review-migration`, `--semantic-migrate` | migration coverage์™€ inbox status๋ฅผ migration review ํŒŒ์ผ์— ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. |
45
+ | `--no-git-config` | `git core.hooksPath`๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ํ›… ํŒŒ์ผ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. |
46
+ | `--code-index` | ํ๊ธฐ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. |
47
+ | `--code-scope <path>` | `--code-index`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์ธ๋ฑ์‹ฑ ๋ฒ”์œ„๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ ์ƒ๋Œ€ ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. |
48
+ | `--code-index-out <path>` | `.project-wiki/` ์•„๋ž˜ ์‚ฌ์šฉ์ž ์ง€์ • SQLite ์ถœ๋ ฅ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. index์™€ read mode์— ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. |
49
+ | `--acknowledge-small-repo` | `--code-index`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์•ฝ 5k ํŒŒ์ผ ๋ฏธ๋งŒ ๊ทœ๋ชจ ๊ฒฝ๊ณ  ํ›„์—๋„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. |
50
+ | `--incremental`, `--code-index-incremental`, `--code-index-full` | `--code-index`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์ฆ๋ถ„ ๊ฐฑ์‹ ์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ์ „์ฒด ์žฌ์ƒ์„ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. |
51
+ | `--code-parser <mode>` | `--code-index`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด `default` ๋˜๋Š” ์„ ํƒ์  `tree-sitter` ์ถ”์ถœ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. |
52
+ | `--code-index-health` | ํŒŒ์ผ์„ ์“ฐ์ง€ ์•Š๊ณ  ์ฝ”๋“œ ๊ทผ๊ฑฐ ์บ์‹œ ํ˜ธํ™˜์„ฑ๊ณผ ์žฌ๋นŒ๋“œ ์•ˆ๋‚ด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. |
53
+ | `--code-index-engine <engine>` | ๊ธฐ๋ณธ `auto` ์ธ๋ฑ์Šค ์—”์ง„์„ `typescript` ๋˜๋Š” `native-rust`๋กœ overrideํ•ฉ๋‹ˆ๋‹ค. |
54
+ | `--code-status`, `--code-files` | ์บ์‹œ ์ตœ์‹ ์„ฑ์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์ธ๋ฑ์‹ฑ๋œ ํŒŒ์ผ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. |
55
+ | `--code-report` | ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค์—์„œ ๊ตฌ์กฐ์™€ ์†Œ์œ ๊ถŒ ์š”์•ฝ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. |
56
+ | `--code-report-section <section>` | `coverage`, `ownership`, `languages`, `parsers`, `workspaces`, `workspace-graph`, `routes`, `hotspots`, `configs`, `edges` ์ค‘ ํ•œ ์„น์…˜์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. |
57
+ | `--code-impact <term>` | ํŒŒ์ผ, ์‹ฌ๋ณผ, route, import, edge, owner ์˜ํ–ฅ ๊ทผ๊ฑฐ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. |
58
+ | `--code-context-pack <term>` | ๊ตฌ์กฐ ํŒŒ์ผ, ์‹ฌ๋ณผ, route, import, edge, ์†Œ์œ ๊ถŒ ๊ทผ๊ฑฐ๋ฅผ ๋‹ด์€ ์˜ˆ์‚ฐ ์ œํ•œ first-pass context pack์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. |
59
+ | `--code-search-symbol <term>` | ์ธ๋ฑ์‹ฑ๋œ ์‹ฌ๋ณผ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. |
60
+ | `--code-query <sql>` | ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค์—์„œ ๋ณด์ˆ˜์  ์ฝ๊ธฐ ์ „์šฉ SQL์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. |
@@ -0,0 +1,87 @@
1
+ # ์ฝ”๋“œ ๊ทผ๊ฑฐ
2
+
3
+ Project Librarian์€ `.project-wiki/` ์•„๋ž˜ ํ๊ธฐ ๊ฐ€๋Šฅํ•œ SQLite ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ฝ๊ธฐ ์ „์šฉ CLI์™€ MCP ํ‘œ๋ฉด์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ ๊ณ„ํš ์œ„ํ‚ค๋Š” ์ฝ”๋“œ ๊ทผ๊ฑฐ ์—†์ด๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
4
+
5
+ ## ์ตœ์‹ ์„ฑ ๊ณ„์•ฝ
6
+
7
+ `--code-report`, `--code-impact`, `--code-context-pack`, MCP ๋„๊ตฌ ์ถœ๋ ฅ์„ ํ˜„์žฌ ์ฝ”๋“œ ๊ตฌ์กฐ ๊ทผ๊ฑฐ๋กœ ์ธ์šฉํ•˜๊ธฐ ์ „์—๋Š” ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
8
+
9
+ ```bash
10
+ project-librarian --code-status
11
+ ```
12
+
13
+ ๋˜๋Š” MCP `code_status`๋ฅผ ์‹คํ–‰ํ•˜๊ณ  `stale_files: 0`์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋ณด๊ณ ์„œ๋Š” ์žฌ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์‹ ํ˜ธ์ด์ง€ ๊ถŒ์œ„ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ง„์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.
14
+
15
+ ## ๊ทœ๋ชจ ๊ฒŒ์ดํŠธ
16
+
17
+ ์ฝ”๋“œ ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค๋Š” ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ์ด๊ธฐ๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทœ๋ชจ ๊ต์ฐจ์ ์ด ์žˆ๋Š” ๋„๊ตฌ๋กœ ์ธก์ •๋์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅ ํŒŒ์ผ์ด ์•ฝ 5k๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด `--acknowledge-small-repo`๋ฅผ ์ฃผ์ง€ ์•Š๋Š” ํ•œ `--code-index`๋Š” ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด `.project-wiki` SQLite ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ์„ ํƒํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ MCP ์ž๋™ ๋“ฑ๋ก๋„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
18
+
19
+ ์ธก์ •๋œ ๋ฆด๋ฆฌ์Šค ๊ทผ๊ฑฐ:
20
+
21
+ | ์งˆ๋ฌธ | excalidraw (์•ฝ 1.2k ํŒŒ์ผ) | backstage (์•ฝ 11.8k ํŒŒ์ผ) |
22
+ | --- | --- | --- |
23
+ | impact_trace | 117% ๋งŽ์Œ | **27.7% ์ ์Œ** |
24
+ | workspace_graph | 106% ๋งŽ์Œ | 2.6% ์ ์Œ |
25
+ | ownership_lookup | - | 99% ๋งŽ์Œ |
26
+
27
+ ์ธ๋ฑ์Šค๋Š” ํฐ ์ €์žฅ์†Œ์˜ ๋น„์‹ผ ์ˆœํšŒ ์งˆ๋ฌธ์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ์ €๋ ดํ•œ ์กฐํšŒ๋Š” ํฐ ๊ทœ๋ชจ์—์„œ๋„ ์†ํ•ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
28
+
29
+ ## MCP ์„œ๋ฒ„
30
+
31
+ `project-librarian mcp`๋Š” ๊ธฐ์กด `.project-wiki` ์ฝ”๋“œ ๊ทผ๊ฑฐ ์ธ๋ฑ์Šค๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ง์ ‘ ๊ตฌํ˜„ stdio MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์ค„๋ฐ”๊ฟˆ ๊ตฌ๋ถ„ JSON ์œ„์˜ JSON-RPC 2.0์„ ์‚ฌ์šฉํ•˜๋ฉฐ MCP SDK ์˜์กด์„ฑ์€ ์—†์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ํ•„์ˆ˜ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์€ `typescript`์ด๊ณ , ์ฝ”๋“œ ๊ทผ๊ฑฐ ๊ธฐ๋Šฅ์€ Node์˜ `node:sqlite`๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Tree-sitter ๋ฌธ๋ฒ• ํŒจํ‚ค์ง€๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
32
+
33
+ ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ต๋ณ€ ํ˜•ํƒœ ๋„๊ตฌ:
34
+
35
+ - `code_context_pack`
36
+ - `code_impact`
37
+ - `code_ownership`
38
+ - `code_workspace_graph`
39
+ - `code_search`
40
+ - `code_status`
41
+
42
+ ์‘๋‹ต์€ ํ•œ ์ค„ ๋‹ต๋ณ€์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ฐ„๊ฒฐํ•œ ๊ฒฝ๋กœ/์‹ฌ๋ณผ/์‹œ๊ทธ๋‹ˆ์ฒ˜ ๊ทผ๊ฑฐ๊ฐ€ ๋’ค๋”ฐ๋ฅด๋ฉฐ, ์‘๋‹ต ๊ธธ์ด๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. `code_status`๊ฐ€ ์ธ๋ฑ์Šค๊ฐ€ ์˜ค๋ž˜๋˜์—ˆ๋‹ค๊ณ  ๋ณด๊ณ ํ•˜๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์•ž์— ๋ถ™์ž…๋‹ˆ๋‹ค.
43
+
44
+ ๊ณ ์ • ๋ฆฌ์†Œ์Šค๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
45
+
46
+ - `project-librarian://wiki/startup`
47
+ - `project-librarian://wiki/index`
48
+ - `project-librarian://code/status`
49
+
50
+ ์œ„ํ‚ค ๋ถ„๋ฅ˜ ๊ฐฑ์‹ , ์ฝ”๋“œ ์˜ํ–ฅ ์ถ”์ , ์œ ์ง€๋ณด์ˆ˜ ๊ฐœ์„  ๊ฒ€ํ† , ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ๊ฒ€ํ† ์šฉ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์ฝ๊ธฐ๋Š” ์ž„์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ณ ์ • URI ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
51
+
52
+ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ Claude Code(`.mcp.json`), Cursor(`.cursor/mcp.json`), Gemini CLI(`.gemini/settings.json`์˜ `mcpServers`)์— ์„œ๋ฒ„๋ฅผ ๋“ฑ๋กํ•˜๋ฉฐ ๊ธฐ์กด ์„œ๋ฒ„์™€ ํ‚ค๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ์— ๋กœ์ปฌ ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด `node <runner> mcp`๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์—†์œผ๋ฉด ์„ค์น˜๋œ `project-librarian mcp` ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
53
+
54
+ Codex๋Š” MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉ์ž ์ˆ˜์ค€์—์„œ๋งŒ ๋“ฑ๋กํ•˜๋ฏ€๋กœ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€ Codex MCP ์„ค์ •์„ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Codex์—์„œ ์“ฐ๋ ค๋ฉด ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
55
+
56
+ ```bash
57
+ codex mcp add project-librarian -- node .codex/skills/project-librarian/dist/init-project-wiki.js mcp
58
+ ```
59
+
60
+ ## ์–ธ์–ด ์ง€์› ํ‘œ
61
+
62
+ ์ด ํ‘œ๋Š” ์‹ฌ๋ณผ/import ์ถ”์ถœ์ด ๊ตฌํ˜„๋œ ์–ธ์–ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ ๋ฐ–์˜ ์ธ์‹๋œ ํ™•์žฅ์ž๋Š” inventory-only์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” JS/TS์— `typescript-ast`, ๋‚˜๋จธ์ง€ ์–ธ์–ด์— `*-light`, ์„ค์ • ์ถ”์ถœ, inventory row๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. `--code-parser tree-sitter`๋Š” ์ง€์› ์†Œ์Šค ํŒŒ์ผ์„ `tree-sitter-*` ํ”„๋กœํŒŒ์ผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
63
+
64
+ | ์–ธ์–ด | ํ™•์žฅ์ž | ๊ธฐ๋ณธ ์ถ”์ถœ | Tree-sitter ์ถ”์ถœ | ์ธ๋ฑ์‹ฑ๋˜๋Š” ๊ทผ๊ฑฐ |
65
+ | --- | --- | --- | --- | --- |
66
+ | TypeScript | `.ts`, `.tsx`, `.cts`, `.mts` | `typescript-ast` | `tree-sitter-typescript`, `tree-sitter-tsx` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜, ์ธํ„ฐํŽ˜์ด์Šค, ํƒ€์ž…, enum, import/export, ํ˜ธ์ถœ, ์ผ๋ฐ˜ HTTP route |
67
+ | JavaScript | `.js`, `.jsx`, `.cjs`, `.mjs` | `typescript-ast` | `tree-sitter-javascript` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ๋ณ€์ˆ˜, import/export, `require()` ํ˜ธ์ถœ, ํ˜ธ์ถœ, ์ผ๋ฐ˜ HTTP route |
68
+ | Python | `.py` | `python-light` | `tree-sitter-python` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, `import`, `from ... import` |
69
+ | Go | `.go` | `go-light` | `tree-sitter-go` | ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ, ํƒ€์ž…, const, var, ๋‹จ์ผ import, import block |
70
+ | Rust | `.rs` | `rust-light` | `tree-sitter-rust` | ํ•จ์ˆ˜, struct, enum, trait, impl, `use` import |
71
+ | Java | `.java` | `java-light` | `tree-sitter-java` | ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, enum, ๋ฉ”์„œ๋“œ, import |
72
+ | PHP | `.php` | `php-light` | `tree-sitter-php` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, trait, ๋ฉ”์„œ๋“œ, namespace use |
73
+ | Kotlin | `.kt`, `.kts` | `kotlin-light` | `tree-sitter-kotlin` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, object, import |
74
+ | Swift | `.swift` | `swift-light` | `tree-sitter-swift` | ํ•จ์ˆ˜, ํด๋ž˜์Šค, struct, protocol, enum, import |
75
+ | C | `.c`, `.h` | `c-light` | `tree-sitter-c` | ํ•จ์ˆ˜, struct, enum, include |
76
+ | C++ | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | `cpp-light` | `tree-sitter-cpp` | ํ•จ์ˆ˜, ํด๋ž˜์Šค/struct, namespace, enum, include/using |
77
+ | C# | `.cs` | `csharp-light` | `tree-sitter-csharp` | ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, struct, enum, ๋ฉ”์„œ๋“œ, using |
78
+
79
+ `.rb`, `.vue`, `.css`๋Š” ์ธ์‹ํ•˜์ง€๋งŒ inventory-only์ž…๋‹ˆ๋‹ค. `.json`, `.yaml`, `.yml`, `.toml`, `.env.example`, `package.json`, `tsconfig.json`, `Dockerfile`, `Makefile`์€ ์„ค์ • ๋˜๋Š” inventory ๊ทผ๊ฑฐ๋กœ ์ธ๋ฑ์‹ฑ๋ฉ๋‹ˆ๋‹ค.
80
+
81
+ ## ๋„ค์ดํ‹ฐ๋ธŒ ํ—ฌํผ ์ •์ฑ…
82
+
83
+ ์‹คํ—˜์  `--code-index-engine native-rust`๋Š” `typescript-ast`, `config`, ํ‘œ์˜ `*-light` ํ”„๋กœํŒŒ์ผ, inventory-only ์†Œ์Šค ํŒŒ์ผ์„ ๋„ค์ดํ‹ฐ๋ธŒ ํ—ฌํผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. `--code-index-engine`์„ ์ƒ๋žตํ•˜๋ฉด `auto`์ž…๋‹ˆ๋‹ค. full-index auto๋Š” ํ—ฌํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ์ถ”์ถœ๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํ”„๋กœํŒŒ์ผ์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์„ ๋•Œ ๋„ค์ดํ‹ฐ๋ธŒ ํ—ฌํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, config-only ๋˜๋Š” inventory-only ์ €์žฅ์†Œ๋Š” TypeScript ๊ฒฝ๋กœ์— ๋‚จ๊น๋‹ˆ๋‹ค. ํ˜ธํ™˜๋˜๋Š” incremental auto๋Š” ํ—ฌํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋ณ€๊ฒฝ ํŒŒ์ผ์ด native-eligible์ด๋ฉด Rust direct-writer๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
84
+
85
+ ํ—ฌํผ ํƒ์ƒ‰์€ `PROJECT_LIBRARIAN_NATIVE_INDEXER`๋ฅผ ๋จผ์ € ๋ณด๊ณ , ์—†์œผ๋ฉด `dist/native/<platform>-<arch>/project-librarian-indexer` ๋˜๋Š” `.exe`๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Linux musl ์„ค์น˜๋Š” `dist/native/linux-<arch>-musl/`์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
86
+
87
+ ๊ณต๊ฐœ ๋ฆด๋ฆฌ์Šค๋Š” staged helper ํ•˜๋‚˜๋งŒ ๋ฐฐํฌํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. `release:check`๋Š” packaged native helper๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ง€์› ํ”Œ๋žซํผ ์ „์ฒด matrix(`darwin-arm64`, `darwin-x64`, `linux-arm64`, `linux-arm64-musl`, `linux-x64`, `linux-x64-musl`, `win32-arm64`, `win32-x64`)๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ†ต๊ณผํ•˜๋ฉฐ, helper ์‹คํ–‰ ๋น„ํŠธ, Mach-O/ELF/PE ํ”Œ๋žซํผ ํ—ค๋”, packaged-helper SHA-256 manifest๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
@@ -0,0 +1,76 @@
1
+ # ๊ด€๋ฆฌ์ž ๊ฐ€์ด๋“œ
2
+
3
+ README ์ฒซ ํ™”๋ฉด์— ๋„ฃ๊ธฐ์—๋Š” ๊นŠ์€ ๊ฐœ๋ฐœ๊ณผ ๋ฆด๋ฆฌ์Šค ์šด์˜ ์ •๋ณด๋ฅผ ๋ชจ์€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
4
+
5
+ ## ๊ฐœ๋ฐœ
6
+
7
+ ์†Œ์Šค๋Š” TypeScript์ž…๋‹ˆ๋‹ค. ์ปค๋ฐ‹๋œ `dist/` ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” npm ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ์„ค์น˜๋œ ์Šคํ‚ฌ ๋ณต์‚ฌ๋ณธ์ด ์‚ฌ์šฉํ•˜๋Š” ์ปดํŒŒ์ผ๋œ JavaScript์ž…๋‹ˆ๋‹ค.
8
+
9
+ ```bash
10
+ npm install
11
+ npm run typecheck
12
+ npm run build
13
+ npm run check:dist
14
+ npm test
15
+ npm run test:coverage
16
+ npm run benchmark:llm:raw-audit
17
+ npm run benchmark:llm:delta-analysis
18
+ npm run benchmark:claim-ledger
19
+ npm run release:check
20
+ npm pack --dry-run
21
+ ```
22
+
23
+ `src/` ์•„๋ž˜ TypeScript๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด ์ปค๋ฐ‹ ์ „์— ๋‹ค์‹œ ๋นŒ๋“œํ•ด `dist/`๊ฐ€ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `npm run check:dist`๋Š” ์ฒดํฌ์ธ๋œ ์ƒ์„ฑ ํŒŒ์ผ์ด ์ตœ์‹  ๋นŒ๋“œ ์ถœ๋ ฅ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
24
+
25
+ `npm run test:coverage`๋Š” Node ๋‚ด์žฅ coverage๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ line, branch, function threshold๋ฅผ ๋ณด์ˆ˜์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. coverage๋Š” ๋‹จ์ˆœ ๋ณด๊ณ ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ regression gate์ž…๋‹ˆ๋‹ค.
26
+
27
+ ์ง€์› ๋Ÿฐํƒ€์ž„ ํ•˜ํ•œ์€ Node.js 22.13+์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ type definition์€ Node 22 ์ง€์› ๊ณ„์•ฝ๊ณผ ๋งž์•„์•ผ ํ•˜๋ฉฐ, ์ง€์› ์‚ฌ์šฉ์ž์—๊ฒŒ ์—†๋Š” API๋ฅผ TypeScript๊ฐ€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก Node 22 ํ˜ธํ™˜์„ฑ ํ™•์ธ์œผ๋กœ ๋’ท๋ฐ›์นจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
28
+
29
+ ## ๋ฆด๋ฆฌ์Šค ์ค€๋น„
30
+
31
+ `npm run release:check`๋Š” ๋กœ์ปฌ ์ „์šฉ ๊ด€๋ฆฌ์ž ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ, Node ๋‚ด์žฅ coverage, ๋ฒค์น˜๋งˆํฌ parser smoke, real-corpus offline demo, benchmark release preview, benchmark claim-ledger classification, raw hygiene audit, package dry-run inspection, native helper package-matrix, binary-format, SHA-256 provenance-manifest ๊ฒ€์‚ฌ, dist ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€/parity, README benchmark-claim boundary, ๋ฌธ์„œ CLI reference coverage, README/README.ko code-evidence freshness/scale-gate ๋ฌธ์„œํ™”, trusted-publishing workflow ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
32
+
33
+ ์ด ๋ช…๋ น์€ publishํ•˜์ง€ ์•Š๊ณ , raw benchmark artifact๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์‹ค์ธก Codex benchmark๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
34
+
35
+ `release:check` ํ†ต๊ณผ๋Š” ๋Ÿฐํƒ€์ž„ ๋ณด์ฆ์ด ์•„๋‹ˆ๋ผ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฆด๋ฆฌ์Šค ์ค€๋น„ ๊ทผ๊ฑฐ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ checkout์—์„œ ์œ„ ๋กœ์ปฌ ๊ฒŒ์ดํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์Œ์„ ์ฆ๋ช…ํ•˜๋ฉฐ, package dry run์ด ์˜ˆ์ƒ publish boundary ์•ˆ์— ๋จธ๋ฌผ๊ณ , source/test/repo-local wiki/workflow state/raw benchmark output/local cache๋ฅผ ์ œ์™ธํ•˜๋ฉฐ, partial, ์ž˜๋ชป ๋ผ๋ฒจ๋ง๋œ, manifest ์—†๋Š”, stale manifest, checksum mismatch ์ƒํƒœ์˜ `dist/native/` helper matrix๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”์ง€๋„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
36
+
37
+ ## ๋ฐฐํฌ
38
+
39
+ ๋ฐฐํฌ๋Š” GitHub Release๊ฐ€ published๋œ ๋’ค `.github/workflows/publish.yml`์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Non-OIDC job์€ source package๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , ์ง€์› native helper๋ฅผ ๋นŒ๋“œํ•˜๊ณ , `dist/native/`๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ , helper manifest๋ฅผ ์ƒ์„ฑํ•˜๊ณ , helper๊ฐ€ ํฌํ•จ๋œ package์—์„œ `release:check`๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
40
+
41
+ ์ตœ์ข… publish job์€ ๋ณดํ˜ธ๋œ `npm-publish` GitHub Environment๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ, GitHub OIDC๋ฅผ ํ†ตํ•œ npm trusted publishing(`id-token: write`)๊ณผ `npm publish --access public`์„ ์‚ฌ์šฉํ•˜๊ณ  npm provenance๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ release path์—๋Š” `NODE_AUTH_TOKEN`์ด๋‚˜ npm token secret์„ ์“ฐ๋ฉด ์•ˆ ๋˜๋ฉฐ, release-critical first-party GitHub Actions๋Š” full commit SHA์— pin๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `release:check`๊ฐ€ ์ด workflow contract๋ฅผ ๋กœ์ปฌ์—์„œ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
42
+
43
+ Trusted publishing๊ณผ npm provenance๋Š” ํŒจํ‚ค์ง€๊ฐ€ GitHub OIDC workflow๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋์Œ์„ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. benchmark correctness, end-user repository์˜ code-evidence freshness, security audit๋ฅผ ์ฆ๋ช…ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ณ„๋„ ๊ทผ๊ฑฐ ํŠธ๋ž™์ž…๋‹ˆ๋‹ค.
44
+
45
+ ## ์ฝ”๋“œ ๊ทผ๊ฑฐ ๋Ÿฐํƒ€์ž„ ์ ๊ฒ€
46
+
47
+ ์ฝ”๋“œ ๊ทผ๊ฑฐ ๋Ÿฐํƒ€์ž„/์ €์žฅ์†Œ ์ ๊ฒ€์—๋Š” `npm run perf:code-efficiency`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ 3k/10k/50k fixture๋ฅผ ๋งŒ๋“ค๊ณ  `benchmarks/reports/code-performance-efficiency/current.json`๊ณผ `.md`๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น timing์—๋Š” CLI startup๊ณผ freshness check๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, `query_groups` ์„น์…˜์€ ๋Œ€ํ‘œ file/symbol/route/import/edge query์˜ ์ง์ ‘ DB timing์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
48
+
49
+ ๋ณด๊ณ ์„œ๋Š” ์ฒดํฌ์ธ๋œ `mixed-monorepo`, `web-service`, `python-cli`, `docs-heavy` corpus๋„ synthetic scale fixture์™€ ๋ถ„๋ฆฌํ•ด ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. `--actual-repo <path>`๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  `--compare-native`๋ฅผ ํ•จ๊ป˜ ์ฃผ๋ฉด local real repository๋ฅผ ๊ฐ™์€ TypeScript/Rust timing ๋ฐ row-delta report์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. source directory๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
50
+
51
+ ์‹ค์ œ ์ €์žฅ์†Œ native policy check:
52
+
53
+ ```bash
54
+ npm run perf:code-full-rebuild -- --source-root <dir> --helper <helper>
55
+ npm run perf:code-incremental -- --source-root <dir> --helper <helper>
56
+ ```
57
+
58
+ ์ฒซ ๋ช…๋ น์€ fresh repo copy์—์„œ TypeScript์™€ Rust forced full rebuild๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์€ controlled file mutation ๋’ค TypeScript incremental update์™€ Rust incremental writer๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
59
+
60
+ ## ๋ฒค์น˜๋งˆํฌ raw ์ถœ๋ ฅ
61
+
62
+ ์‹ค์ธก LLM benchmark run์€ 1์ผ๋ณด๋‹ค ์˜ค๋ž˜๋œ stale prior raw run directory์™€ isolated Codex home์„ ์ž๋™ ์ •๋ฆฌํ•˜๊ณ , claimable-run failure๊ฐ€ ๋ฐœ์ƒํ•ด๋„ current run์˜ home์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Raw JSONL, stderr, report, manifest๋Š” retention window ์•ˆ์—์„œ๋Š” ๋‚จ์Šต๋‹ˆ๋‹ค.
63
+
64
+ ์˜ค๋ž˜๋œ ignored raw output์€ retained isolated Codex home์„ ์‚ญ์ œํ•˜๊ธฐ ์ „์— dry-run-first helper๋กœ ๊ฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
65
+
66
+ ```bash
67
+ npm run benchmark:llm:raw-audit -- --older-than-days 14
68
+ npm run benchmark:llm:prune-raw -- --older-than-days 14
69
+ npm run benchmark:llm:prune-raw -- --older-than-days 14 --execute
70
+ ```
71
+
72
+ `npm run benchmark:llm:delta-analysis`๋Š” ์ฒดํฌ์ธ๋œ ์‹ค์ธก LLM report๋ฅผ ์ฝ๊ณ  Codex๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ฑ„ cost-weighted regression์„ ์ˆœ์œ„ํ™”ํ•ฉ๋‹ˆ๋‹ค. `-- --include-traces`๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋Œ€ํ‘œ raw JSONL command trace๋ฅผ ํฌํ•จํ•˜๊ณ  broad-search/router-read driver๋ฅผ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์†Œํ˜• aggregation์ฒ˜๋Ÿผ ์•ฝํ•œ cell์— ์ƒˆ benchmark claim์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ๋จผ์ € ๋ณด๋Š” ์ง„๋‹จ ์ง€์ ์ž…๋‹ˆ๋‹ค.
73
+
74
+ ์‹ค์ธก LLM run์€ ๊ธฐ๋ณธ์ ์œผ๋กœ `--scenario-order run-major-balanced`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ measured run index๊ฐ€ ์„ ํƒ๋œ ๋ชจ๋“  scenario๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋ฐ˜๋ณต๋งˆ๋‹ค ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์–ด with/without pair๊ฐ€ ๋ฐ˜๋ณต ์‹คํ–‰์—์„œ condition๋ณ„๋กœ ๋ญ‰์น˜์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ scenario-grouped ์ง„๋‹จ์„ ์žฌํ˜„ํ•  ๋•Œ๋งŒ `--scenario-order scenario-major`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
75
+
76
+ `npm run typecheck:ts7`์€ ์„ ํƒ์  TypeScript 7 RC ํ˜ธํ™˜์„ฑ probe์ž…๋‹ˆ๋‹ค. `npx`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, compiler API์™€ ์ด ํ”„๋กœ์ ํŠธ TypeScript extractor์˜ ์ธก์ •๋œ parity record๊ฐ€ ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ `test`, `release:check`, CI gate ๋ฐ–์— ๋‘ก๋‹ˆ๋‹ค.