project-librarian 0.2.0
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.
- package/LICENSE +21 -0
- package/README.ja.md +227 -0
- package/README.ko.md +229 -0
- package/README.md +280 -0
- package/README.zh.md +227 -0
- package/SKILL.md +335 -0
- package/agents/openai.yaml +3 -0
- package/dist/args.js +235 -0
- package/dist/code-index-db.js +34 -0
- package/dist/code-index-file-policy.js +120 -0
- package/dist/code-index-sql.js +9 -0
- package/dist/code-index.js +1856 -0
- package/dist/hooks.js +321 -0
- package/dist/init-project-wiki.js +246 -0
- package/dist/install-skill.js +142 -0
- package/dist/migration.js +356 -0
- package/dist/modes.js +823 -0
- package/dist/templates.js +552 -0
- package/dist/types.js +2 -0
- package/dist/wiki-files.js +289 -0
- package/dist/workspace.js +212 -0
- package/package.json +71 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 project-librarian contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ja.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# Project Librarian
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/project-librarian)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://nodejs.org/api/sqlite.html)
|
|
7
|
+
|
|
8
|
+
Codex と Claude Code のための簡潔なプロジェクトメモリとコード根拠。
|
|
9
|
+
|
|
10
|
+
Project Librarian は、リポジトリローカルの計画 wiki、簡潔な起動 hook、任意の SQLite コード根拠 index を作成します。エージェントはプロジェクト計画から開始し、必要な文書へルーティングされ、リポジトリ全体を繰り返しスキャンせずにコードに基づく根拠を確認できます。
|
|
11
|
+
|
|
12
|
+
言語: [English](README.md) | [한국어](README.ko.md) | [日本語](README.ja.md) | [简体中文](README.zh.md)
|
|
13
|
+
|
|
14
|
+
## 存在理由
|
|
15
|
+
|
|
16
|
+
LLM コーディングエージェントは、セッションごとにプロジェクトを再発見するためにコンテキストとツール呼び出しを消費しがちです。古い会話の読み取り、Markdown のスキャン、ソース検索、関連ファイルの推測が繰り返されます。
|
|
17
|
+
|
|
18
|
+
Project Librarian はエージェントに 2 つのローカル正本を提供します。
|
|
19
|
+
|
|
20
|
+
| 表面 | エージェントが得るもの |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `wiki/startup.md` + `wiki/index.md` | 短いセッション開始要約とルーター。必要な計画ページだけを読みます。 |
|
|
23
|
+
| `wiki/canonical/` および `wiki/decisions/` | 現在のプロジェクト事実、制約、リスク、パッケージ契約、CLI 動作、持続的な意思決定。 |
|
|
24
|
+
| `.codex/` および `.claude/` hook | 全 wiki をロードしない Codex/Claude Code 起動コンテキスト。 |
|
|
25
|
+
| `.project-wiki/code-evidence.sqlite` | ファイル、シンボル、import、route、所有者、ワークスペースグラフ、レポート、影響確認のための再生成可能なコード根拠。 |
|
|
26
|
+
| 診断とマイグレーションモード | リンク確認、品質確認、マイグレーション受信箱、古い信号のレポート、作業フローの問題発見時の issue draft。 |
|
|
27
|
+
|
|
28
|
+
重要なのは「文書を増やすこと」ではありません。最初のエージェント読み取り量を小さく保ち、より深いプロジェクト正本とコード根拠への信頼できる経路を与えることです。
|
|
29
|
+
|
|
30
|
+
## ベンチマーク結果
|
|
31
|
+
|
|
32
|
+
ベンチマークはメンテナー向けリリース根拠であり、公開ユーザー向け作業フローではありません。README とリリースノートが曖昧な性能表現ではなく、境界付きの数値で説明できるようにする根拠です。
|
|
33
|
+
|
|
34
|
+
最新 clean 大規模レポート: `benchmarks/reports/current-large.json`、2026-06-09T08:08:07.238Z 生成、Node v22.19.0、darwin arm64、Apple M4 Pro、commit `18e730882c4f`、測定実行 5 回と破棄したウォームアップ実行 1 回。時間測定状態は `stable`、unstable metrics は `none`、git 状態の指紋は clean です。
|
|
35
|
+
|
|
36
|
+
| 項目 | 結果 |
|
|
37
|
+
| --- | ---: |
|
|
38
|
+
| Markdown コンテキスト推定回避量の中央値 | 99.61% |
|
|
39
|
+
| Markdown コンテキスト推定回避量の最小値 | 99.43% |
|
|
40
|
+
| 読み取り時間削減の中央値 | 99.47% |
|
|
41
|
+
| 読み取り時間削減の最小値 | 99.26% |
|
|
42
|
+
| 測定した wiki ページ | 1,601 |
|
|
43
|
+
| コード index ファイル | 1,608 |
|
|
44
|
+
| コード index 時間 | 336.312ms |
|
|
45
|
+
| コード index スループット | 4,781.27 files/sec |
|
|
46
|
+
| 増分 index 時間 | 186.776ms |
|
|
47
|
+
| 全体に対する増分時間削減 | 45.52% |
|
|
48
|
+
| アーキテクチャレポート時間 | 251.175ms |
|
|
49
|
+
| アーキテクチャレポート根拠テーブル | 6 |
|
|
50
|
+
| アーキテクチャレポート route | 24 |
|
|
51
|
+
| サンプルリポジトリ | 3 |
|
|
52
|
+
| ベンチマーク実行 | 5 |
|
|
53
|
+
| ウォームアップ実行 | 1 |
|
|
54
|
+
| 時間測定状態 | stable |
|
|
55
|
+
| 不安定な測定値 | none |
|
|
56
|
+
|
|
57
|
+
シナリオ要約:
|
|
58
|
+
|
|
59
|
+
| シナリオ | 規模 | 結果 |
|
|
60
|
+
| --- | ---: | --- |
|
|
61
|
+
| 文書の多い wiki | 500ページ | 99.74% Markdown コンテキスト推定回避、99.47% 読み取り削減、43.83ms query |
|
|
62
|
+
| モノレポ wiki | 320ページ | 99.43% Markdown コンテキスト推定回避、99.26% 読み取り削減、81.12ms doctor |
|
|
63
|
+
| スコープ別ルーター wiki | 720ページ | 99.61% Markdown コンテキスト推定回避、99.55% 読み取り削減、67.684ms refresh |
|
|
64
|
+
| コードの多い混合 index | 1,608ファイル | 336.312ms full index、186.776ms incremental、251.175ms report、626.969ms Tree-sitter index |
|
|
65
|
+
| サンプルリポジトリ検証 | 3リポジトリ、16ファイル | 132.363ms コード index 中央値、135.694ms アーキテクチャレポート中央値 |
|
|
66
|
+
|
|
67
|
+
主張範囲: トークン推定値は `ceil(characters / 4)` による Markdown コンテキストサイズ推定です。モデル tokenizer 出力や API 課金カウンターではなく、実際の LLM トークン使用量を測定していません。ベンチマークは、targeted retrieval で読む wiki コンテキストが、fixture の全 wiki Markdown ファイルを読む naive full-wiki scan に比べてどれだけ Markdown コンテキスト入力を避けるかを比較します。コード index 測定値は生成/サンプルリポジトリで測定したローカル CLI 子プロセス時間です。
|
|
68
|
+
|
|
69
|
+
## インストール
|
|
70
|
+
|
|
71
|
+
初期 skill install にだけ `npx` を使います。
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx project-librarian install-skill --scope user --agents both
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
現在のリポジトリにインストール:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npx project-librarian install-skill --scope project --agents both
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`install-skill` は再利用可能な skill ファイルだけをコピーします。`AGENTS.md`、`CLAUDE.md`、`wiki/`、`.codex/hooks.json`、`.claude/settings.json` は作成または更新しません。
|
|
84
|
+
|
|
85
|
+
| 状況 | コマンド |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| Codex と Claude Code にグローバルインストール | `npx project-librarian install-skill --scope user --agents both` |
|
|
88
|
+
| 現在のリポジトリにインストール | `npx project-librarian install-skill --scope project --agents both` |
|
|
89
|
+
| Codex のみ | `npx project-librarian install-skill --agents codex` |
|
|
90
|
+
| Claude Code のみ | `npx project-librarian install-skill --agents claude` |
|
|
91
|
+
| インストール結果をプレビュー | `npx project-librarian install-skill --scope project --agents both --dry-run` |
|
|
92
|
+
|
|
93
|
+
## エージェント実行経路
|
|
94
|
+
|
|
95
|
+
インストール後、エージェントは `npx` ではなく、インストール済みのローカルコピーを `node` で実行してください。これにより、制限されたエージェント環境でネットワークアクセスと固定されていないパッケージ実行を避けられます。
|
|
96
|
+
|
|
97
|
+
| インストール先 | 実行経路 |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| プロジェクト範囲 Codex skill | `node .codex/skills/project-librarian/dist/init-project-wiki.js` |
|
|
100
|
+
| プロジェクト範囲 Claude skill | `node .claude/skills/project-librarian/dist/init-project-wiki.js` |
|
|
101
|
+
| ユーザー範囲 Codex skill | `node ~/.codex/skills/project-librarian/dist/init-project-wiki.js` |
|
|
102
|
+
| ユーザー範囲 Claude skill | `node ~/.claude/skills/project-librarian/dist/init-project-wiki.js` |
|
|
103
|
+
|
|
104
|
+
以下の例では次を使います。
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
PROJECT_LIBRARIAN="node .codex/skills/project-librarian/dist/init-project-wiki.js"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
インストール先に合うローカル実行経路を使ってください。
|
|
111
|
+
|
|
112
|
+
## 一般的なエージェント作業
|
|
113
|
+
|
|
114
|
+
プロジェクトルートで wiki を作成または更新します。
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
$PROJECT_LIBRARIAN
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Wiki の検証と保守:
|
|
121
|
+
|
|
122
|
+
| 目的 | エージェントコマンド |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| wiki 作成または更新 | `$PROJECT_LIBRARIAN` |
|
|
125
|
+
| 既存 docs/wiki のマイグレーション | `$PROJECT_LIBRARIAN --migrate` |
|
|
126
|
+
| 生成された設定の検証 | `$PROJECT_LIBRARIAN --lint` |
|
|
127
|
+
| リンクと文書品質の確認 | `$PROJECT_LIBRARIAN --doctor` |
|
|
128
|
+
| 診断前に生成 routing を更新 | `$PROJECT_LIBRARIAN --doctor --fix` |
|
|
129
|
+
| project wiki 検索 | `$PROJECT_LIBRARIAN --query "authentication decisions"` |
|
|
130
|
+
| 候補メモの保存 | `$PROJECT_LIBRARIAN --capture-inbox --title "Candidate" --content "Details"` |
|
|
131
|
+
| 古い、または未解決の wiki ページの報告 | `$PROJECT_LIBRARIAN --prune-check` |
|
|
132
|
+
| git config を変えず hook ファイルをインストール | `$PROJECT_LIBRARIAN --no-git-config` |
|
|
133
|
+
|
|
134
|
+
コード根拠:
|
|
135
|
+
|
|
136
|
+
| 目的 | エージェントコマンド |
|
|
137
|
+
| --- | --- |
|
|
138
|
+
| 既定の根拠 cache 作成 | `$PROJECT_LIBRARIAN --code-index --code-scope src` |
|
|
139
|
+
| 複数 scope の build | `$PROJECT_LIBRARIAN --code-index --code-scope src --code-scope packages/api` |
|
|
140
|
+
| 増分更新を要求 | `$PROJECT_LIBRARIAN --code-index --incremental` |
|
|
141
|
+
| full rebuild を強制 | `$PROJECT_LIBRARIAN --code-index --code-index-full` |
|
|
142
|
+
| 任意の Tree-sitter backend を使用 | `$PROJECT_LIBRARIAN --code-index --code-parser tree-sitter` |
|
|
143
|
+
| cache 状態を表示 | `$PROJECT_LIBRARIAN --code-status` |
|
|
144
|
+
| index 済みファイル一覧 | `$PROJECT_LIBRARIAN --code-files` |
|
|
145
|
+
| アーキテクチャ/所有者レポートを出力 | `$PROJECT_LIBRARIAN --code-report` |
|
|
146
|
+
| レポート section だけ出力 | `$PROJECT_LIBRARIAN --code-report --code-report-section routes` |
|
|
147
|
+
| 影響根拠を確認 | `$PROJECT_LIBRARIAN --code-impact healthHandler` |
|
|
148
|
+
| index 済みシンボルを検索 | `$PROJECT_LIBRARIAN --code-search-symbol Auth` |
|
|
149
|
+
| 保守的な読み取り専用 SQL を実行 | `$PROJECT_LIBRARIAN --code-query "select path from files order by path"` |
|
|
150
|
+
|
|
151
|
+
コード根拠モードは一度に 1 つだけ実行できます。`--incremental`、`--code-index-full`、`--code-parser` は `--code-index` と一緒に使う場合のみ有効です。
|
|
152
|
+
|
|
153
|
+
## インストールされるファイル
|
|
154
|
+
|
|
155
|
+
- `AGENTS.md`
|
|
156
|
+
- `CLAUDE.md`
|
|
157
|
+
- `wiki/AGENTS.md`
|
|
158
|
+
- `.codex/hooks.json`
|
|
159
|
+
- `.codex/hooks/wiki-session-start.js`
|
|
160
|
+
- `.claude/settings.json`
|
|
161
|
+
- `.claude/hooks/wiki-session-start.js`
|
|
162
|
+
- `.githooks/prepare-commit-msg`
|
|
163
|
+
- `.githooks/wiki-commit-trailers.js`
|
|
164
|
+
- `wiki/canonical/`, `wiki/decisions/`, `wiki/inbox/`, `wiki/meta/`, `wiki/sources/`, `wiki/migration/`
|
|
165
|
+
- 破棄可能なコード根拠 cache としての `.project-wiki/code-evidence.sqlite`
|
|
166
|
+
|
|
167
|
+
## 仕組み
|
|
168
|
+
|
|
169
|
+
1. Bootstrap は保存優先の wiki 構造と、marker で境界付けられたエージェント指示 section を作成します。
|
|
170
|
+
2. セッション開始 hook は文字数予算付きの `wiki/startup.md` と `wiki/index.md` だけを注入します。
|
|
171
|
+
3. 詳細な計画正本は canonical、decision、source、meta page にあり、エージェントが必要なときに読みます。
|
|
172
|
+
4. `--refresh-index` は新しい wiki page をルーティングし、route が多い場合は `wiki/indexes/auto-*.md` スコープ別ルーターに分割します。
|
|
173
|
+
5. `--code-index` は `.project-wiki/` 配下に破棄可能な SQLite 根拠 cache を作ります。
|
|
174
|
+
6. `--code-report`、`--code-impact`、`--code-search-symbol`、`--code-query` が計画更新用のコード根拠を提供します。
|
|
175
|
+
7. 診断は壊れたリンク、重複 route、orphan page、古いページ、欠落した TL;DR、根拠 gap、マイグレーションコピーリスクを報告します。
|
|
176
|
+
|
|
177
|
+
マイグレーションはレビュー優先です。`--migrate` は既存 `wiki/` を `wiki_legacy*` として保存し、migration inbox を作成し、legacy Markdown を新しい canonical truth に直接コピーしません。
|
|
178
|
+
|
|
179
|
+
## 言語サポート表
|
|
180
|
+
|
|
181
|
+
| 言語 | 拡張子 | 既定の抽出 | Tree-sitter 抽出 | index される根拠 |
|
|
182
|
+
| --- | --- | --- | --- | --- |
|
|
183
|
+
| TypeScript | `.ts`, `.tsx`, `.cts`, `.mts` | `typescript-ast` | `tree-sitter-typescript`, `tree-sitter-tsx` | 関数、クラス、メソッド、変数、interface、type、enum、import、export、呼び出し、一般的な HTTP route |
|
|
184
|
+
| JavaScript | `.js`, `.jsx`, `.cjs`, `.mjs` | `typescript-ast` | `tree-sitter-javascript` | 関数、クラス、メソッド、変数、import、export、`require()` 呼び出し、一般的な HTTP route |
|
|
185
|
+
| Python | `.py` | `python-light` | `tree-sitter-python` | 関数、クラス、`import`、`from ... import` |
|
|
186
|
+
| Go | `.go` | `go-light` | `tree-sitter-go` | 関数、メソッド、型、const、var、単一 import、import block |
|
|
187
|
+
| Rust | `.rs` | 一覧のみ | `tree-sitter-rust` | 関数、struct、enum、trait、impl、`use` import |
|
|
188
|
+
| Java | `.java` | 一覧のみ | `tree-sitter-java` | クラス、interface、enum、メソッド、import |
|
|
189
|
+
| PHP | `.php` | 一覧のみ | `tree-sitter-php` | 関数、クラス、interface、trait、メソッド、namespace use |
|
|
190
|
+
| Kotlin | `.kt`, `.kts` | 一覧のみ | `tree-sitter-kotlin` | 関数、クラス、object、import |
|
|
191
|
+
| Swift | `.swift` | 一覧のみ | `tree-sitter-swift` | 関数、クラス、struct、protocol、enum、import |
|
|
192
|
+
| C | `.c`, `.h` | 一覧のみ | `tree-sitter-c` | 関数、struct、enum、include |
|
|
193
|
+
| C++ | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | 一覧のみ | `tree-sitter-cpp` | 関数、class/struct、namespace、enum、include/using |
|
|
194
|
+
| C# | `.cs` | 一覧のみ | `tree-sitter-csharp` | class、interface、struct、enum、メソッド、using |
|
|
195
|
+
|
|
196
|
+
`.rb`、`.vue`、`.css` は認識されますが一覧のみです。設定ファイルは設定根拠または一覧根拠として index されます。
|
|
197
|
+
|
|
198
|
+
## CLI リファレンス
|
|
199
|
+
|
|
200
|
+
エージェント実行にはローカル実行経路を使います。
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
$PROJECT_LIBRARIAN [init] [options]
|
|
204
|
+
$PROJECT_LIBRARIAN install-skill [--scope user|project] [--agents codex|claude|both]
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
重要なオプション: `--migrate`, `--lint`, `--link-check`, `--quality-check`, `--doctor`, `--doctor --fix`, `--query`, `--refresh-index`, `--capture-inbox`, `--issue-draft`, `--issue-create`, `--glossary-init`, `--prune-check`, `--review-migration`, `--no-git-config`, `--code-index`, `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`.
|
|
208
|
+
|
|
209
|
+
## 開発
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm install
|
|
213
|
+
npm run typecheck
|
|
214
|
+
npm run build
|
|
215
|
+
npm test
|
|
216
|
+
npm pack --dry-run
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
メンテナー向けベンチマークコマンドは [benchmarks/README.md](benchmarks/README.md) にあります。これはリリース根拠と公開主張の検証用であり、通常のエンドユーザー設定ではありません。
|
|
220
|
+
|
|
221
|
+
## 着想
|
|
222
|
+
|
|
223
|
+
このプロジェクトは Andrej Karpathy の [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) パターンに影響を受けています。
|
|
224
|
+
|
|
225
|
+
## ライセンス
|
|
226
|
+
|
|
227
|
+
MIT
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Project Librarian
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/project-librarian)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://nodejs.org/api/sqlite.html)
|
|
7
|
+
|
|
8
|
+
Codex와 Claude Code를 위한 간결한 프로젝트 메모리와 코드 근거.
|
|
9
|
+
|
|
10
|
+
Project Librarian은 저장소 로컬 계획 위키, 간결한 시작 훅, 선택적 SQLite 코드 근거 인덱스를 생성합니다. 에이전트는 프로젝트 계획에서 시작하고, 필요한 문서로 라우팅하며, 전체 저장소를 반복 스캔하지 않고 코드로 뒷받침되는 근거를 확인할 수 있습니다.
|
|
11
|
+
|
|
12
|
+
언어: [English](README.md) | [한국어](README.ko.md) | [日本語](README.ja.md) | [简体中文](README.zh.md)
|
|
13
|
+
|
|
14
|
+
## 존재 이유
|
|
15
|
+
|
|
16
|
+
LLM 코딩 에이전트는 매 세션마다 프로젝트를 다시 발견하느라 컨텍스트와 도구 호출을 낭비합니다. 오래된 대화 읽기, Markdown 스캔, 소스 검색, 관련 파일 추측이 반복됩니다.
|
|
17
|
+
|
|
18
|
+
Project Librarian은 에이전트에게 두 가지 로컬 정본을 제공합니다.
|
|
19
|
+
|
|
20
|
+
| 표면 | 에이전트가 얻는 것 |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `wiki/startup.md` + `wiki/index.md` | 짧은 세션 시작 요약과 라우터. 필요한 계획 페이지만 읽습니다. |
|
|
23
|
+
| `wiki/canonical/` 및 `wiki/decisions/` | 현재 프로젝트 사실, 제약, 리스크, 패키지 계약, CLI 동작, 지속되는 결정. |
|
|
24
|
+
| `.codex/` 및 `.claude/` 훅 | 전체 위키를 로드하지 않는 Codex/Claude Code 시작 컨텍스트. |
|
|
25
|
+
| `.project-wiki/code-evidence.sqlite` | 파일, 심볼, import, route, 소유권, 작업공간 그래프, 보고서, 영향 확인을 위한 재생성 가능한 코드 근거. |
|
|
26
|
+
| 진단 및 마이그레이션 모드 | 링크 확인, 품질 확인, 마이그레이션 수신함, 오래된 신호 보고서, 작업 흐름 문제 발견 시 이슈 초안. |
|
|
27
|
+
|
|
28
|
+
핵심은 “문서를 더 많이 쓰자”가 아닙니다. 첫 에이전트 읽기량을 작게 유지하고, 더 깊은 프로젝트 정본과 코드 근거로 가는 신뢰 가능한 경로를 제공하는 것입니다.
|
|
29
|
+
|
|
30
|
+
## 벤치마크 결과
|
|
31
|
+
|
|
32
|
+
벤치마크는 관리자 릴리스 근거이며 공개 사용자 작업 흐름이 아닙니다. README와 릴리스 노트가 모호한 성능 표현 대신 경계가 있는 숫자로 설명할 수 있게 하기 위한 근거입니다.
|
|
33
|
+
|
|
34
|
+
최신 clean 대규모 보고서: `benchmarks/reports/current-large.json`, 2026-06-09T08:08:07.238Z 생성, Node v22.19.0, darwin arm64, Apple M4 Pro, commit `18e730882c4f`, 측정 실행 5회와 버린 예열 실행 1회. 시간 측정 상태는 `stable`, unstable metrics는 `none`이며 git 상태 지문은 clean입니다.
|
|
35
|
+
|
|
36
|
+
| 항목 | 결과 |
|
|
37
|
+
| --- | ---: |
|
|
38
|
+
| Markdown 컨텍스트 추정 회피량 중앙값 | 99.61% |
|
|
39
|
+
| Markdown 컨텍스트 추정 회피량 최솟값 | 99.43% |
|
|
40
|
+
| 읽기 시간 감소 중앙값 | 99.47% |
|
|
41
|
+
| 읽기 시간 감소 최솟값 | 99.26% |
|
|
42
|
+
| 측정한 위키 페이지 | 1,601 |
|
|
43
|
+
| 코드 인덱스 파일 | 1,608 |
|
|
44
|
+
| 코드 인덱스 시간 | 336.312ms |
|
|
45
|
+
| 코드 인덱스 처리량 | 4,781.27 files/sec |
|
|
46
|
+
| 증분 인덱스 시간 | 186.776ms |
|
|
47
|
+
| 전체 대비 증분 시간 감소 | 45.52% |
|
|
48
|
+
| 아키텍처 보고서 시간 | 251.175ms |
|
|
49
|
+
| 아키텍처 보고서 근거 테이블 | 6 |
|
|
50
|
+
| 아키텍처 보고서 라우트 | 24 |
|
|
51
|
+
| 샘플 저장소 | 3 |
|
|
52
|
+
| 벤치마크 실행 | 5 |
|
|
53
|
+
| 예열 실행 | 1 |
|
|
54
|
+
| 시간 측정 상태 | stable |
|
|
55
|
+
| 불안정한 측정값 | none |
|
|
56
|
+
|
|
57
|
+
시나리오 요약:
|
|
58
|
+
|
|
59
|
+
| 시나리오 | 규모 | 결과 |
|
|
60
|
+
| --- | ---: | --- |
|
|
61
|
+
| 문서가 많은 위키 | 500페이지 | 99.74% Markdown 컨텍스트 추정 회피, 99.47% 읽기 감소, 43.83ms query |
|
|
62
|
+
| 모노레포 위키 | 320페이지 | 99.43% Markdown 컨텍스트 추정 회피, 99.26% 읽기 감소, 81.12ms doctor |
|
|
63
|
+
| 범위별 라우터 위키 | 720페이지 | 99.61% Markdown 컨텍스트 추정 회피, 99.55% 읽기 감소, 67.684ms refresh |
|
|
64
|
+
| 코드가 많은 혼합 인덱스 | 1,608파일 | 336.312ms 전체 인덱스, 186.776ms 증분, 251.175ms 보고서, 626.969ms Tree-sitter 인덱스 |
|
|
65
|
+
| 샘플 저장소 검증 | 3개 저장소, 16파일 | 132.363ms 코드 인덱스 중앙값, 135.694ms 아키텍처 보고서 중앙값 |
|
|
66
|
+
|
|
67
|
+
주장 범위: 토큰 추정치는 `ceil(characters / 4)`를 사용한 Markdown 컨텍스트 크기 추정입니다. 모델 토크나이저 출력이나 API 과금 카운터가 아니며, 실제 LLM 토큰 사용량을 측정하지 않습니다. 벤치마크는 targeted retrieval로 읽는 위키 컨텍스트가 fixture의 모든 위키 Markdown 파일을 읽는 naive full-wiki scan 대비 얼마나 많은 Markdown 컨텍스트 입력을 피하는지 비교합니다. 코드 인덱스 측정값은 생성/샘플 저장소에서 측정한 로컬 CLI 하위 프로세스 시간입니다.
|
|
68
|
+
|
|
69
|
+
## 설치
|
|
70
|
+
|
|
71
|
+
초기 skill 설치에만 `npx`를 사용합니다.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx project-librarian install-skill --scope user --agents both
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
현재 저장소에 설치:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npx project-librarian install-skill --scope project --agents both
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
`install-skill`은 재사용 가능한 skill 파일만 복사합니다. `AGENTS.md`, `CLAUDE.md`, `wiki/`, `.codex/hooks.json`, `.claude/settings.json`은 만들거나 갱신하지 않습니다.
|
|
84
|
+
|
|
85
|
+
| 상황 | 명령 |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| Codex와 Claude Code에 전역 설치 | `npx project-librarian install-skill --scope user --agents both` |
|
|
88
|
+
| 현재 저장소에 설치 | `npx project-librarian install-skill --scope project --agents both` |
|
|
89
|
+
| Codex만 설치 | `npx project-librarian install-skill --agents codex` |
|
|
90
|
+
| Claude Code만 설치 | `npx project-librarian install-skill --agents claude` |
|
|
91
|
+
| 설치 결과 미리 보기 | `npx project-librarian install-skill --scope project --agents both --dry-run` |
|
|
92
|
+
|
|
93
|
+
`--agents`는 `codex,claude` 같은 comma-separated 값도 받습니다. `--scope`는 `user` 또는 `project`를 받습니다.
|
|
94
|
+
|
|
95
|
+
## 에이전트 실행 경로
|
|
96
|
+
|
|
97
|
+
설치 후 에이전트는 `npx`가 아니라 설치된 로컬 복사본을 `node`로 실행해야 합니다. 이렇게 하면 제한된 에이전트 환경에서 네트워크 접근과 고정되지 않은 패키지 실행을 피할 수 있습니다.
|
|
98
|
+
|
|
99
|
+
| 설치 위치 | 실행 경로 |
|
|
100
|
+
| --- | --- |
|
|
101
|
+
| 프로젝트 범위 Codex skill | `node .codex/skills/project-librarian/dist/init-project-wiki.js` |
|
|
102
|
+
| 프로젝트 범위 Claude skill | `node .claude/skills/project-librarian/dist/init-project-wiki.js` |
|
|
103
|
+
| 사용자 범위 Codex skill | `node ~/.codex/skills/project-librarian/dist/init-project-wiki.js` |
|
|
104
|
+
| 사용자 범위 Claude skill | `node ~/.claude/skills/project-librarian/dist/init-project-wiki.js` |
|
|
105
|
+
|
|
106
|
+
아래 예시는 다음 runner를 사용합니다.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
PROJECT_LIBRARIAN="node .codex/skills/project-librarian/dist/init-project-wiki.js"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
설치 위치에 맞는 로컬 실행 경로를 사용하세요.
|
|
113
|
+
|
|
114
|
+
## 일반 에이전트 작업 흐름
|
|
115
|
+
|
|
116
|
+
프로젝트 루트에서 위키를 만들거나 갱신합니다.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
$PROJECT_LIBRARIAN
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
위키 검증과 유지보수:
|
|
123
|
+
|
|
124
|
+
| 목적 | 에이전트 명령 |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| wiki 생성 또는 갱신 | `$PROJECT_LIBRARIAN` |
|
|
127
|
+
| 기존 docs/wiki 마이그레이션 | `$PROJECT_LIBRARIAN --migrate` |
|
|
128
|
+
| 생성된 설정 검증 | `$PROJECT_LIBRARIAN --lint` |
|
|
129
|
+
| 링크와 문서 품질 점검 | `$PROJECT_LIBRARIAN --doctor` |
|
|
130
|
+
| 진단 전에 생성된 라우팅 갱신 | `$PROJECT_LIBRARIAN --doctor --fix` |
|
|
131
|
+
| project wiki 검색 | `$PROJECT_LIBRARIAN --query "authentication decisions"` |
|
|
132
|
+
| 후보 메모 저장 | `$PROJECT_LIBRARIAN --capture-inbox --title "Candidate" --content "Details"` |
|
|
133
|
+
| 오래되었거나 미해결인 위키 페이지 보고 | `$PROJECT_LIBRARIAN --prune-check` |
|
|
134
|
+
| git config 변경 없이 훅 파일 설치 | `$PROJECT_LIBRARIAN --no-git-config` |
|
|
135
|
+
|
|
136
|
+
코드 근거:
|
|
137
|
+
|
|
138
|
+
| 목적 | 에이전트 명령 |
|
|
139
|
+
| --- | --- |
|
|
140
|
+
| 기본 근거 캐시 생성 | `$PROJECT_LIBRARIAN --code-index --code-scope src` |
|
|
141
|
+
| 여러 범위 빌드 | `$PROJECT_LIBRARIAN --code-index --code-scope src --code-scope packages/api` |
|
|
142
|
+
| 증분 갱신 요구 | `$PROJECT_LIBRARIAN --code-index --incremental` |
|
|
143
|
+
| 전체 재생성 강제 | `$PROJECT_LIBRARIAN --code-index --code-index-full` |
|
|
144
|
+
| 선택적 Tree-sitter backend 사용 | `$PROJECT_LIBRARIAN --code-index --code-parser tree-sitter` |
|
|
145
|
+
| 캐시 상태 보기 | `$PROJECT_LIBRARIAN --code-status` |
|
|
146
|
+
| 인덱싱된 파일 목록 | `$PROJECT_LIBRARIAN --code-files` |
|
|
147
|
+
| 아키텍처/소유권 보고서 출력 | `$PROJECT_LIBRARIAN --code-report` |
|
|
148
|
+
| 보고서 섹션 하나만 출력 | `$PROJECT_LIBRARIAN --code-report --code-report-section routes` |
|
|
149
|
+
| 영향 근거 확인 | `$PROJECT_LIBRARIAN --code-impact healthHandler` |
|
|
150
|
+
| 인덱싱된 심볼 검색 | `$PROJECT_LIBRARIAN --code-search-symbol Auth` |
|
|
151
|
+
| 보수적인 읽기 전용 SQL 실행 | `$PROJECT_LIBRARIAN --code-query "select path from files order by path"` |
|
|
152
|
+
|
|
153
|
+
코드 근거 모드는 한 번에 하나만 실행할 수 있습니다. `--incremental`, `--code-index-full`, `--code-parser`는 `--code-index`와 함께 쓸 때만 유효합니다.
|
|
154
|
+
|
|
155
|
+
## 설치되는 파일
|
|
156
|
+
|
|
157
|
+
- `AGENTS.md`
|
|
158
|
+
- `CLAUDE.md`
|
|
159
|
+
- `wiki/AGENTS.md`
|
|
160
|
+
- `.codex/hooks.json`
|
|
161
|
+
- `.codex/hooks/wiki-session-start.js`
|
|
162
|
+
- `.claude/settings.json`
|
|
163
|
+
- `.claude/hooks/wiki-session-start.js`
|
|
164
|
+
- `.githooks/prepare-commit-msg`
|
|
165
|
+
- `.githooks/wiki-commit-trailers.js`
|
|
166
|
+
- `wiki/canonical/`, `wiki/decisions/`, `wiki/inbox/`, `wiki/meta/`, `wiki/sources/`, `wiki/migration/`
|
|
167
|
+
- 폐기 가능한 코드 근거 캐시인 `.project-wiki/code-evidence.sqlite`
|
|
168
|
+
|
|
169
|
+
## 작동 방식
|
|
170
|
+
|
|
171
|
+
1. Bootstrap은 보존 우선 위키 구조와 marker로 경계가 정해진 에이전트 지시 섹션을 만듭니다.
|
|
172
|
+
2. 세션 시작 훅은 문자 예산이 적용된 `wiki/startup.md`와 `wiki/index.md`만 주입합니다.
|
|
173
|
+
3. 상세 계획 정본은 canonical, decision, source, meta page에 있고 에이전트가 필요할 때 읽습니다.
|
|
174
|
+
4. `--refresh-index`는 새 위키 페이지를 라우팅하며, route가 많으면 `wiki/indexes/auto-*.md` 범위별 라우터로 분리합니다.
|
|
175
|
+
5. `--code-index`는 `.project-wiki/` 아래 폐기 가능한 SQLite 근거 캐시를 만듭니다.
|
|
176
|
+
6. `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`가 계획 갱신용 코드 근거를 제공합니다.
|
|
177
|
+
7. 진단은 깨진 링크, 중복 route, orphan page, 오래된 페이지, 누락된 TL;DR, 근거 gap, 마이그레이션 복사 위험을 보고합니다.
|
|
178
|
+
|
|
179
|
+
마이그레이션은 검토 우선입니다. `--migrate`는 기존 `wiki/`를 `wiki_legacy*`로 보존하고 마이그레이션 inbox를 작성하며 legacy Markdown을 새 canonical truth로 직접 복사하지 않습니다.
|
|
180
|
+
|
|
181
|
+
## 언어 지원 표
|
|
182
|
+
|
|
183
|
+
| 언어 | 확장자 | 기본 추출 | Tree-sitter 추출 | 인덱싱되는 근거 |
|
|
184
|
+
| --- | --- | --- | --- | --- |
|
|
185
|
+
| TypeScript | `.ts`, `.tsx`, `.cts`, `.mts` | `typescript-ast` | `tree-sitter-typescript`, `tree-sitter-tsx` | 함수, 클래스, 메서드, 변수, 인터페이스, 타입, enum, import, export, 호출, 일반 HTTP route |
|
|
186
|
+
| JavaScript | `.js`, `.jsx`, `.cjs`, `.mjs` | `typescript-ast` | `tree-sitter-javascript` | 함수, 클래스, 메서드, 변수, import, export, `require()` 호출, 일반 HTTP route |
|
|
187
|
+
| Python | `.py` | `python-light` | `tree-sitter-python` | 함수, 클래스, `import`, `from ... import` |
|
|
188
|
+
| Go | `.go` | `go-light` | `tree-sitter-go` | 함수, 메서드, 타입, const, var, 단일 import, import block |
|
|
189
|
+
| Rust | `.rs` | 목록 전용 | `tree-sitter-rust` | 함수, struct, enum, trait, impl, `use` import |
|
|
190
|
+
| Java | `.java` | 목록 전용 | `tree-sitter-java` | 클래스, interface, enum, 메서드, import |
|
|
191
|
+
| PHP | `.php` | 목록 전용 | `tree-sitter-php` | 함수, 클래스, interface, trait, 메서드, namespace use |
|
|
192
|
+
| Kotlin | `.kt`, `.kts` | 목록 전용 | `tree-sitter-kotlin` | 함수, 클래스, object, import |
|
|
193
|
+
| Swift | `.swift` | 목록 전용 | `tree-sitter-swift` | 함수, 클래스, struct, protocol, enum, import |
|
|
194
|
+
| C | `.c`, `.h` | 목록 전용 | `tree-sitter-c` | 함수, struct, enum, include |
|
|
195
|
+
| C++ | `.cc`, `.cpp`, `.cxx`, `.hpp`, `.hh`, `.hxx` | 목록 전용 | `tree-sitter-cpp` | 함수, class/struct, namespace, enum, include/using |
|
|
196
|
+
| C# | `.cs` | 목록 전용 | `tree-sitter-csharp` | class, interface, struct, enum, 메서드, using |
|
|
197
|
+
|
|
198
|
+
`.rb`, `.vue`, `.css`는 인식되지만 목록 전용입니다. 설정 파일은 설정 근거 또는 목록 근거로 인덱싱됩니다.
|
|
199
|
+
|
|
200
|
+
## CLI 참조
|
|
201
|
+
|
|
202
|
+
에이전트 실행에는 로컬 실행 경로를 사용합니다.
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
$PROJECT_LIBRARIAN [init] [options]
|
|
206
|
+
$PROJECT_LIBRARIAN install-skill [--scope user|project] [--agents codex|claude|both]
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
중요 옵션: `--migrate`, `--lint`, `--link-check`, `--quality-check`, `--doctor`, `--doctor --fix`, `--query`, `--refresh-index`, `--capture-inbox`, `--issue-draft`, `--issue-create`, `--glossary-init`, `--prune-check`, `--review-migration`, `--no-git-config`, `--code-index`, `--code-report`, `--code-impact`, `--code-search-symbol`, `--code-query`.
|
|
210
|
+
|
|
211
|
+
## 개발
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
npm install
|
|
215
|
+
npm run typecheck
|
|
216
|
+
npm run build
|
|
217
|
+
npm test
|
|
218
|
+
npm pack --dry-run
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
관리자 벤치마크 명령은 [benchmarks/README.md](benchmarks/README.md)에 있습니다. 이 명령은 릴리스 근거와 공개 주장 검증을 위한 것이며, 일반 최종 사용자 설정 절차가 아닙니다.
|
|
222
|
+
|
|
223
|
+
## 영감
|
|
224
|
+
|
|
225
|
+
이 프로젝트는 Andrej Karpathy의 [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) 패턴에서 영감을 받았습니다.
|
|
226
|
+
|
|
227
|
+
## 라이선스
|
|
228
|
+
|
|
229
|
+
MIT
|