oh-my-llmwikimode 1.0.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +494 -0
  3. package/bin/llmwiki.js +1493 -0
  4. package/docs/INSTALLATION.md +228 -0
  5. package/docs/SCOPE_LOCK.md +79 -0
  6. package/docs/STAGE1_GUIDE.md +265 -0
  7. package/docs/STAGE2_AGENT_TEAM_GUIDE.md +141 -0
  8. package/docs/STAGE3_CONVERSATIONAL_GROWTH_GUIDE.md +50 -0
  9. package/docs/TEST_WORKSHEET.md +120 -0
  10. package/docs/github-private-bootstrap.md +53 -0
  11. package/docs/release.md +79 -0
  12. package/docs/stage4-slice1-manual-test.md +259 -0
  13. package/docs/stage4-slice1-user-guide.md +269 -0
  14. package/docs/user-guide-ko.md +452 -0
  15. package/package.json +76 -0
  16. package/scripts/install-llmwiki.ps1 +229 -0
  17. package/src/config.js +74 -0
  18. package/src/curator/browser-data.js +134 -0
  19. package/src/curator/queue.js +324 -0
  20. package/src/curator/schema.js +237 -0
  21. package/src/curator/scoring.js +83 -0
  22. package/src/hooks.js +199 -0
  23. package/src/librarian/schema.js +218 -0
  24. package/src/librarian/weekly-digest.js +478 -0
  25. package/src/security.js +127 -0
  26. package/src/server.js +860 -0
  27. package/src/stage4/graph-reasoning/analyzer.js +255 -0
  28. package/src/stage4/graph-reasoning/browser-data.js +130 -0
  29. package/src/stage4/graph-reasoning/index.js +35 -0
  30. package/src/stage4/graph-reasoning/loader.js +122 -0
  31. package/src/stage4/graph-reasoning/queue.js +154 -0
  32. package/src/stage4/graph-reasoning/schema.js +190 -0
  33. package/src/team/browser-data.js +142 -0
  34. package/src/team/capabilities.js +79 -0
  35. package/src/team/dispatch.js +108 -0
  36. package/src/team/queue.js +290 -0
  37. package/src/team/schema.js +225 -0
  38. package/src/team/shared-memory.js +183 -0
  39. package/src/todo/browser-data.js +71 -0
  40. package/src/todo/queue.js +159 -0
  41. package/src/todo/schema.js +90 -0
  42. package/src/utils/embedding-model.js +111 -0
  43. package/src/wiki/alias-suggestions.js +180 -0
  44. package/src/wiki/browser-data.js +284 -0
  45. package/src/wiki/doctor.js +218 -0
  46. package/src/wiki/entry-normalizer.js +139 -0
  47. package/src/wiki/ingest.js +443 -0
  48. package/src/wiki/lesson-proposal-analyzer.js +463 -0
  49. package/src/wiki/lesson-proposal-manager.js +331 -0
  50. package/src/wiki/lesson-template.js +182 -0
  51. package/src/wiki/lint.js +294 -0
  52. package/src/wiki/notebooklm-adapter.js +264 -0
  53. package/src/wiki/query.js +304 -0
  54. package/src/wiki/raw-manager.js +400 -0
  55. package/src/wiki/search-feedback.js +211 -0
  56. package/src/wiki/semantic-index.js +333 -0
  57. package/src/wiki/semantic-search.js +170 -0
  58. package/src/wiki/source-ledger.js +370 -0
  59. package/src/wiki/store.js +1329 -0
  60. package/src/wiki/usage-events.js +144 -0
@@ -0,0 +1,228 @@
1
+ # LLM Wiki Installation Guide
2
+
3
+ This guide sets up `oh-my-llmwikimode` for OpenCode with a local wiki at `~/Documents/llm-wiki`.
4
+
5
+ The installer only writes inside your user profile. It does not need administrator privileges, does not install global packages, and does not start OpenCode for you. Restart OpenCode after changing `opencode.json`.
6
+
7
+ ## Local checkout CLI commands
8
+
9
+ This repository is usually tested from a local checkout before npm publication. In that mode, do not use `npx llmwiki --help`; it can fail if `llmwiki` is not published in the npm registry yet.
10
+
11
+ Use the package-local command instead:
12
+
13
+ ```sh
14
+ npm --prefix plugins/oh-my-llmwikimode exec -- llmwiki --help
15
+ ```
16
+
17
+ For other CLI examples in this guide, replace `npx llmwiki <args>` with `npm --prefix plugins/oh-my-llmwikimode exec -- llmwiki <args>` when working from the workspace root.
18
+
19
+ ## Prerequisites
20
+
21
+ - Node.js 18 or newer.
22
+ - OpenCode installed and able to read `opencode.json`.
23
+ - The `oh-my-llmwikimode` package available through npm, a local checkout, or your team's package source.
24
+ - A writable user config directory:
25
+ - Windows: `%USERPROFILE%\.config\opencode\opencode.json`
26
+ - macOS/Linux: `~/.config/opencode/opencode.json`
27
+
28
+ Default plugin config:
29
+
30
+ ```json
31
+ {
32
+ "plugin": [
33
+ ["oh-my-llmwikimode", {
34
+ "wikiRoot": "~/Documents/llm-wiki",
35
+ "autoMemoryEnabled": true,
36
+ "autoSearchEnabled": true
37
+ }]
38
+ ]
39
+ }
40
+ ```
41
+
42
+ ## Method 1: AI Prompt + `llmwiki init` (Recommended)
43
+
44
+ The fastest way to install is to ask an AI assistant (OpenCode, Claude, etc.) to set it up for you.
45
+
46
+ ### AI-facing installation prompt
47
+
48
+ Copy and paste this prompt into your AI assistant:
49
+
50
+ ```
51
+ Install the oh-my-llmwikimode OpenCode plugin for me. Steps:
52
+
53
+ 1. Run: npx llmwiki init --wiki-root ~/Documents/llm-wiki
54
+ 2. The init command creates the wiki directory structure and writes a plugin snippet to:
55
+ ~/Documents/llm-wiki/.system/opencode.plugin-snippet.json
56
+ 3. Read that snippet file.
57
+ 4. Merge the snippet into my OpenCode config at:
58
+ - Windows: %USERPROFILE%\.config\opencode\opencode.json
59
+ - macOS/Linux: ~/.config/opencode/opencode.json
60
+ 5. If opencode.json already has an oh-my-llmwikimode entry, update it. If not, add it to the "plugin" array.
61
+ 6. Back up opencode.json before modifying.
62
+ 7. Tell me to restart OpenCode.
63
+
64
+ Do NOT overwrite existing plugin entries. Preserve the rest of the config.
65
+ ```
66
+
67
+ ### What `llmwiki init` does
68
+
69
+ ```sh
70
+ npx llmwiki init --wiki-root ~/Documents/llm-wiki
71
+ ```
72
+
73
+ The command writes:
74
+
75
+ ```text
76
+ ~/Documents/llm-wiki/.system/opencode.plugin-snippet.json
77
+ ```
78
+
79
+ It creates these folders if they do not exist: `inbox/`, `problems/`, `editorial/lessons/`, `raw/`, `.system/`.
80
+
81
+ Copy the generated snippet into your OpenCode config if you prefer a no-surprises setup, or let the AI do it.
82
+
83
+ ## Method 2: Manual steps
84
+
85
+ ### Windows
86
+
87
+ Create the wiki folders:
88
+
89
+ ```powershell
90
+ $wiki = Join-Path $HOME "Documents\llm-wiki"
91
+ New-Item -ItemType Directory -Force -Path $wiki | Out-Null
92
+ New-Item -ItemType Directory -Force -Path (Join-Path $wiki "inbox") | Out-Null
93
+ New-Item -ItemType Directory -Force -Path (Join-Path $wiki "problems") | Out-Null
94
+ New-Item -ItemType Directory -Force -Path (Join-Path $wiki "editorial\lessons") | Out-Null
95
+ New-Item -ItemType Directory -Force -Path (Join-Path $wiki "raw") | Out-Null
96
+ New-Item -ItemType Directory -Force -Path (Join-Path $wiki ".system") | Out-Null
97
+ ```
98
+
99
+ Back up your config before editing:
100
+
101
+ ```powershell
102
+ $config = Join-Path $HOME ".config\opencode\opencode.json"
103
+ Copy-Item $config "$config.bak" -ErrorAction SilentlyContinue
104
+ notepad $config
105
+ ```
106
+
107
+ Merge this plugin entry into the top-level `plugin` array:
108
+
109
+ ```json
110
+ ["oh-my-llmwikimode", {
111
+ "wikiRoot": "~/Documents/llm-wiki",
112
+ "autoMemoryEnabled": true,
113
+ "autoSearchEnabled": true
114
+ }]
115
+ ```
116
+
117
+ If `plugin` does not exist yet, use the full default config shown in the prerequisites.
118
+
119
+ ### macOS/Linux
120
+
121
+ Create the wiki folders:
122
+
123
+ ```sh
124
+ mkdir -p ~/Documents/llm-wiki/inbox
125
+ mkdir -p ~/Documents/llm-wiki/problems
126
+ mkdir -p ~/Documents/llm-wiki/editorial/lessons
127
+ mkdir -p ~/Documents/llm-wiki/raw
128
+ mkdir -p ~/Documents/llm-wiki/.system
129
+ ```
130
+
131
+ Create or edit OpenCode config:
132
+
133
+ ```sh
134
+ mkdir -p ~/.config/opencode
135
+ test -f ~/.config/opencode/opencode.json && cp ~/.config/opencode/opencode.json ~/.config/opencode/opencode.json.bak
136
+ ${EDITOR:-vi} ~/.config/opencode/opencode.json
137
+ ```
138
+
139
+ Use the default config block from the prerequisites section, or merge this entry into an existing `plugin` array:
140
+
141
+ ```json
142
+ ["oh-my-llmwikimode", {
143
+ "wikiRoot": "~/Documents/llm-wiki",
144
+ "autoMemoryEnabled": true,
145
+ "autoSearchEnabled": true
146
+ }]
147
+ ```
148
+
149
+ ## Method 3: PowerShell installer script (advanced)
150
+
151
+ For automated or scripted setups, a PowerShell installer is available in the package checkout:
152
+
153
+ ```powershell
154
+ powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install-llmwiki.ps1
155
+ ```
156
+
157
+ Custom wiki root:
158
+
159
+ ```powershell
160
+ powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install-llmwiki.ps1 -WikiRoot "~/Documents/llm-wiki"
161
+ ```
162
+
163
+ What the script does:
164
+
165
+ 1. Detects the OpenCode config directory under your user profile.
166
+ 2. Creates `~/Documents/llm-wiki` if it does not exist.
167
+ 3. Creates these folders: `inbox/`, `problems/`, `editorial/lessons/`, `raw/`, `.system/`.
168
+ 4. Reads `opencode.json`, or creates a new config object when the file does not exist.
169
+ 5. Prompts before modifying an existing `opencode.json` and writes a timestamped backup first.
170
+ 6. Adds or updates the `oh-my-llmwikimode` plugin entry.
171
+ 7. Prints next steps. Restart OpenCode manually.
172
+
173
+ ## Verification
174
+
175
+ 1. Restart OpenCode.
176
+ 2. In OpenCode, ask:
177
+
178
+ ```text
179
+ 내 위키 상태 확인해줘
180
+ ```
181
+
182
+ 3. Optional CLI checks:
183
+
184
+ ```sh
185
+ npx llmwiki init --wiki-root ~/Documents/llm-wiki --json
186
+ npx llmwiki lint --wiki-root ~/Documents/llm-wiki
187
+ ```
188
+
189
+ Expected result: OpenCode recognizes the plugin config, and the local wiki folders exist under `~/Documents/llm-wiki`.
190
+
191
+ ## Troubleshooting
192
+
193
+ ### PowerShell says script execution is disabled
194
+
195
+ Use the one-command bypass for this script only:
196
+
197
+ ```powershell
198
+ powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\install-llmwiki.ps1
199
+ ```
200
+
201
+ ### Existing `opencode.json` is invalid JSON
202
+
203
+ The installer stops before writing changes. Fix the JSON first, then rerun the installer. Your existing file is not overwritten.
204
+
205
+ ### Plugin entry is duplicated
206
+
207
+ Keep one `oh-my-llmwikimode` entry in the top-level `plugin` array. The installer updates an existing matching entry when it can parse the config.
208
+
209
+ ### OpenCode does not load the plugin
210
+
211
+ - Confirm the package name is `oh-my-llmwikimode`.
212
+ - Confirm `opencode.json` is in `%USERPROFILE%\.config\opencode\` on Windows or `~/.config/opencode/` on macOS/Linux.
213
+ - Restart OpenCode after editing config.
214
+ - Run `npx llmwiki init --wiki-root ~/Documents/llm-wiki --json` and confirm the snippet uses the same `wikiRoot`.
215
+
216
+ ### Wiki folders were created in the wrong place
217
+
218
+ Run init again with an explicit path:
219
+
220
+ ```sh
221
+ npx llmwiki init --wiki-root /absolute/path/to/llm-wiki
222
+ ```
223
+
224
+ Then update `wikiRoot` in `opencode.json` to the same path.
225
+
226
+ ### Permission errors
227
+
228
+ Choose a directory inside your user profile, such as `~/Documents/llm-wiki`. Do not use system directories that require administrator privileges.
@@ -0,0 +1,79 @@
1
+ # Scope Lock: oh-my-llmwikimode Identity and Prototype Policy
2
+
3
+ > **Status**: Active | **Version**: 1.0.0 | **Locked**: 2026-05-02
4
+ >
5
+ > 이 문서는 oh-my-llmwikimode 시스템의 canonical 이름, 경로, 정책을 고정합니다.
6
+ > 계획 문서: `.sisyphus/plans/oh-my-llmwikimode-ralph-hardening.md`
7
+
8
+ ---
9
+
10
+ ## Canonical Names (유일하게 사용할 이름)
11
+
12
+ | 대상 | Canonical 값 | 비고 |
13
+ |------|-------------|------|
14
+ | **npm package name** | `oh-my-llmwikimode` | registry에 배포될 이름 |
15
+ | **plugin ID** | `oh-my-llmwikimode` | OpenCode `opencode.json` plugin 배열에 사용 |
16
+ | **display / log prefix** | `oh-my-llmwikimode` | 콘솔 로그, UI 표시 |
17
+ | **GitHub repo** | `oh-my-llmwikimode` | repo slug |
18
+ | **state directory** | `~/.config/opencode/.llmwikimode/` | 런타임 상태/로그 저장 |
19
+ | **wiki root default** | `~/Documents/llm-wiki` | 사용자 wiki 저장소 기본 위치 |
20
+ | **display term** | "LLM Wiki" | 사용자에게 보여줄 설명용 용어 (package/plugin ID와 구분) |
21
+
22
+ ---
23
+
24
+ ## Legacy / Non-Canonical Names (사용 금지)
25
+
26
+ 다음 이름들은 **legacy, prototype, 또는 잘못된 참조**입니다. 새 코드/문서/설정에서 canonical 이름으로 사용하지 마세요.
27
+
28
+ - `opencode-plugin-llm-wiki` — 초기 prototype package 이름
29
+ - `opencode-plugin-wikiloop` — 초기 계획서에서 사용했던 plugin 이름
30
+ - `.omw` — 임의로 만든 state directory 이름 (OMO + Wiki의 줄임말이나 canonical이 아님)
31
+ - `wikiloop` — slash command alias로는 사용 가능하나 plugin ID로 사용 금지
32
+
33
+ 이름들은 **마이그레이션 문서나 이력 섹션**에서만 참조할 수 있습니다.
34
+
35
+ ---
36
+
37
+ ## Prototype Policy (root-level prototype cleanup)
38
+
39
+ ### Retired prototype artifacts
40
+ 다음 파일들은 **2026-05-02에 만들어진 premature prototype**이었고, production package와 혼동되지 않도록 정리되었습니다:
41
+
42
+ - `package.json` (root) — `name: opencode-plugin-llm-wiki`
43
+ - `.github/workflows/ci-cd.yml` (root) — 수동 release 기반, semantic-release 없음
44
+ - `package-lock.json` (root) — root prototype dependency lock
45
+ - `src/server.js` (root) — archived to `.archive/root-prototype-20260502/src/server.js`
46
+ - `test/run-tests.js` (root) — archived to `.archive/root-prototype-20260502/test/run-tests.js`
47
+
48
+ Root `README.md` and `RALPH.md` now point to the canonical package under `plugins/oh-my-llmwikimode/`.
49
+ `.ralph/bootstrap.*` and `.ralph/check.*` now run package-local commands for the canonical package.
50
+
51
+ ### 정책
52
+ 1. **root workspace는 publishable npm package가 아닙니다**.
53
+ 2. **새로운 production package는 `plugins/oh-my-llmwikimode/` 아래에만 둡니다**.
54
+ 3. **root-level package metadata나 release workflow를 다시 만들지 않습니다**.
55
+ 4. **모든 새 구현/문서/테스트는 `plugins/oh-my-llmwikimode/` 안에서만 작성**합니다.
56
+ 5. **GitHub/npm/OpenCode registration은 사용자 승인 후 별도 단계에서 진행**합니다.
57
+
58
+ ---
59
+
60
+ ## Support Matrix
61
+
62
+ | 항목 | 버전/범위 |
63
+ |------|----------|
64
+ | OpenCode SDK | `@opencode-ai/plugin` ^1.14.0 |
65
+ | Node.js | >= 18.0.0 |
66
+ | OS | Windows, macOS, Linux |
67
+ | Path style | POSIX preferred; Windows paths normalized via `path` module |
68
+
69
+ ---
70
+
71
+ ## Decision Log
72
+
73
+ | 날짜 | 결정 | 이유 |
74
+ |------|------|------|
75
+ | 2026-05-02 | `oh-my-llmwikimode`로 이름 고정 | 사용자 명시 요청; oh-my-ralph, oh-my-openagent 패밀리와 일관 |
76
+ | 2026-05-02 | package root를 `plugins/oh-my-llmwikimode/`로 분리 | root workspace에 관련 없는 파일이 많아 npm pack 안전성 확보 |
77
+ | 2026-05-02 | `.llmwikimode`를 state dir로 고정 | `.omw`는 의미 불명확; canonical name에서 직접 유래 |
78
+ | 2026-05-02 | prototype은 삭제하지 않고 reference로 유지 | 향후 migration guide나 audit trace에 활용 가능 |
79
+ | 2026-05-02 | root prototype source/test를 `.archive/root-prototype-20260502/`로 이동 | 활성 루트에 결함 있는 spike 코드가 남아 future publish/register를 혼동시키지 않도록 함 |
@@ -0,0 +1,265 @@
1
+ # Stage 1 Guide: LLM Wiki Knowledge Workbench
2
+
3
+ **버전**: v2 Stage 1
4
+ **대상**: oh-my-llmwikimode 런타임 플러그인 + oh-my-llmwiki-pack VSIX 확장
5
+
6
+ ---
7
+
8
+ ## Stage 1 개요
9
+
10
+ Stage 1은 LLM Wiki를 로컬 지식 작업대(Knowledge Workbench)로 만드는 단계입니다. 핵심 원칙은 "자동 수집, 사람이 검토"입니다.
11
+
12
+ ### Stage 1이 제공하는 것
13
+
14
+ | 기능 | 설명 |
15
+ |------|------|
16
+ | 자동 후보 캡처 | 대화에서 문제 패턴을 감지해 `inbox/`에 candidate로 저장 |
17
+ | 수동 저장 | `wiki_store`로 원하는 내용을 직접 저장 |
18
+ | 검색 | `wiki_search`로 로컬 위키에서 관련 항목 찾기 |
19
+ | 승격/거절 | `wiki_promote`로 lesson으로 승격, 또는 `rejected`로 처리 |
20
+ | CLI 명령어 | `llmwiki lint`, `query`, `ingest`, `rebuild` |
21
+ | 결정론적 그래프 | `.system/graph.json`과 `.system/browser-data.json` 자동 생성 |
22
+ | 비밀 자동 가리기 | API 키, 비밀번호 패턴을 저장 전에 가림 |
23
+ | VS Code 브라우저 | Knowledge Workbench, 그래프 뷰, Git sync |
24
+
25
+ ### Stage 1에서 없는 것
26
+
27
+ 아래 기능은 구현되지 않았습니다. 문서 어디에서도 "지원한다"고 적지 마세요.
28
+
29
+ - 사람 검토 없는 lesson 전환 기능
30
+ - 명시 승인 없는 원격 업로드 / 커밋
31
+ - Obsidian 연동 / 양방향 동기화
32
+ - MCP 서버
33
+ - SQLite 그래프 데이터베이스
34
+ - 원격 벡터 검색
35
+ - Hermes 실행 환경
36
+ - 자율 에이전트 팀 디스패치
37
+ - 실행형 Tool Pack
38
+
39
+ ---
40
+
41
+ ## 워크플로 단계별 설명
42
+
43
+ ### 1. 자동 후보 생성
44
+
45
+ OpenCode 대화에서 아래 키워드가 포함된 메시지를 별낸면, 플러그인이 문제 패턴으로 감지합니다.
46
+
47
+ ```text
48
+ bug, error, failure, crash, exception, broken, not working, fails, issue, problem
49
+ 버그, 오류, 실패, 문제, 에러, 오작동
50
+ ```
51
+
52
+ 감지되면 `inbox/`에 Markdown 파일이 자동 생성됩니다. 파일 형태:
53
+
54
+ ```markdown
55
+ ---
56
+ title: (자동 추출된 제목)
57
+ status: candidate
58
+ source: chat.message
59
+ tags:
60
+ - auto-captured
61
+ - problem
62
+ ---
63
+
64
+ (캡처된 내용)
65
+ ```
66
+
67
+ **조용한 모드 정책**: 정상적인 자동 저장은 콘솔에 출력되지 않습니다. 실제 오류(파일 쓰기 실패 등)만 표시됩니다. 저장/걸�promise기록은 위키 루트의 `.system/auto-memory-audit.jsonl`에서 확인할 수 있습니다.
68
+
69
+ 자동 저장이 걸�promise는 경우:
70
+ - `autoMemoryEnabled`가 `false`
71
+ - 메시지에 "do not store", "저장하지 마" 포함
72
+ - 메시지 크기가 안전 한도 초과
73
+ - 프롬프트 인젝션 패턴 감지
74
+ - 명시적 "저장해줘" 요청 (에이전트가 `wiki_store`로 처리)
75
+ - 남부 오케스트레이션 프롬프트 (`[analyze-mode]`, `OMO_INTERNAL_INITIATOR` 등)
76
+
77
+ ### 2. VS Code / Antigravity에서 검토
78
+
79
+ VS Code에 `oh-my-llmwiki-pack` 확장을 설치하면 Knowledge Workbench가 열립니다.
80
+
81
+ ```text
82
+ Ctrl+Shift+P → "LLM Wiki: Open Knowledge Workbench"
83
+ ```
84
+
85
+ Workbench에서 볼 수 있는 것:
86
+ - 후보 항목 목록
87
+ - 중복 경고
88
+ - 그래프 연결 정보
89
+ - 항목 내용 미리보기
90
+
91
+ ### 3. 승격 또는 거절
92
+
93
+ 검토 후 두 가지 선택이 있습니다:
94
+
95
+ **승격** (lesson으로):
96
+ ```text
97
+ wiki_promote inbox/2026-05-07-...-항목이름.md
98
+ ```
99
+ 파일이 `editorial/lessons/`로 이동하고 `status: lesson`이 됩니다.
100
+
101
+ **거절**:
102
+ 항목의 frontmatter에서 `status: candidate`를 `status: rejected`로 바꿉니다. 거절된 항목은 검색 결과에서 제외됩니다.
103
+
104
+ ### 4. 그래프 / 브라우저 보기
105
+
106
+ `.system/` 아래 파생 파일은 `llmwiki rebuild`로 재생성하거나 프로모션/거절 시 자동 갱신됩니다.
107
+
108
+ ```text
109
+ .system/
110
+ ├── index.json # 검색용 키워드 인덱스
111
+ ├── graph.json # 항목 간 연결 그래프
112
+ └── browser-data.json # VS Code 브라우저 렌더링 데이터
113
+ ```
114
+
115
+ VS Code에서 그래프 보기:
116
+ ```text
117
+ Ctrl+Shift+P → "LLM Wiki: Open Knowledge Graph"
118
+ ```
119
+
120
+ 그래프는 위키링크(`[[다른 항목]]`)와 태그 기반으로 항목을 연결합니다. `rejected`, `superseded`, `private`, `needs-clarification` 상태는 그래프에서 제외됩니다.
121
+
122
+ 그래프는 결정론적입니다. 같은 내용에서 항상 같은 그래프가 생성됩니다. 필요하면 `llmwiki rebuild`로 언제든 재생성할 수 있습니다.
123
+
124
+ ### 5. 수동 Git sync
125
+
126
+ 변경사항은 자동으로 커밋되거나 push되지 않습니다. 직접 커밋해야 합니다.
127
+
128
+ VS Code에서:
129
+ ```text
130
+ Ctrl+Shift+P → "LLM Wiki: Manual Git Sync" → "Stage & Commit"
131
+ ```
132
+
133
+ 또는 터미널에서:
134
+ ```bash
135
+ cd ~/Documents/llm-wiki
136
+ git add -A
137
+ git commit -m "update wiki entries"
138
+ # push는 선택
139
+ git push
140
+ ```
141
+
142
+ ---
143
+
144
+ ## CLI 명령어 상세
145
+
146
+ 모든 명령어는 패키지 루트(`plugins/oh-my-llmwikimode/`)에서 실행합니다.
147
+
148
+ ### `llmwiki lint`
149
+
150
+ 항목의 스키마, 수명주기, 개인정보, 중복을 검사합니다.
151
+
152
+ ```bash
153
+ npx llmwiki lint
154
+ ```
155
+
156
+ 검사 항목:
157
+ - frontmatter 필수 필드 (`title`, `status`, `source`)
158
+ - 올바른 상태값 (`candidate`, `lesson`, `rejected`, `superseded`, `needs-clarification`, `private`)
159
+ - 민감정보 노출 여부
160
+ - 같은 제목의 중복 항목
161
+
162
+ 자동 수정은 하지 않습니다. 경고만 출력합니다.
163
+
164
+ ### `llmwiki query`
165
+
166
+ 로컬 위키를 키워드로 검색합니다. 1홉 관련 항목과 관계 레이블을 포함합니다.
167
+
168
+ ```bash
169
+ npx llmwiki query "docker compose error"
170
+ ```
171
+
172
+ ### `llmwiki ingest`
173
+
174
+ 로컬 파일을 candidate로 `inbox/`에 가져옵니다.
175
+
176
+ ```bash
177
+ npx llmwiki ingest /path/to/file.md
178
+ ```
179
+
180
+ 가져오기 전 비밀번호 자동 가리기, 안전하지 않은 경로 차단이 적용됩니다.
181
+
182
+ ### `llmwiki rebuild`
183
+
184
+ `.system/index.json`, `.system/graph.json`, `.system/browser-data.json`을 처음부터 다시 만듭니다.
185
+
186
+ ```bash
187
+ npx llmwiki rebuild
188
+ ```
189
+
190
+ 결정론적이므로 언제든 안전하게 실행할 수 있습니다.
191
+
192
+ ---
193
+
194
+ ## 문제 해결
195
+
196
+ ### 플러그인이 로드되지 않을 때
197
+
198
+ 1. OpenCode를 재시작합니다.
199
+ 2. 콘솔에서 `[oh-my-llmwikimode] init:` 메시지를 확인합니다.
200
+ 3. `opencode.json`의 `plugin` 배열에 플러그인이 등록되어 있는지 확인합니다.
201
+ 4. npm 공개 전이라면 로컬 경로가 올바른지 확인합니다.
202
+
203
+ ### 검색 결과가 없을 때
204
+
205
+ 1. `~/Documents/llm-wiki/inbox/`에 파일이 있는지 확인합니다.
206
+ 2. 항목의 frontmatter에 `title` 필드가 있는지 확인합니다.
207
+ 3. 상태가 `rejected`, `superseded`, `needs-clarification`이면 검색에서 제외됩니다.
208
+ 4. 더 구체적인 키워드로 다시 검색합니다.
209
+ 5. `llmwiki rebuild`로 인덱스를 재생성합니다.
210
+
211
+ ### 자동 메모리가 동작하지 않을 때
212
+
213
+ 1. `autoMemoryEnabled`가 `true`인지 확인합니다.
214
+ 2. 메시지에 문제 키워드가 포함되어 있는지 확인합니다.
215
+ 3. "저장해줘" 같은 명시적 요청은 자동 캡처를 걸�promise니다 (정상 동작).
216
+ 4. 위키 루트의 `.system/auto-memory-audit.jsonl` 디버그 로그를 확인합니다.
217
+
218
+ ### 그래프에 항목이 보이지 않을 때
219
+
220
+ 1. 항목 상태가 `rejected`, `superseded`, `private`, `needs-clarification`이 아닌지 확인합니다.
221
+ 2. `llmwiki rebuild`로 재생성합니다.
222
+ 3. `wiki_search`를 한 번 실행해 인덱스를 갱신합니다.
223
+
224
+ ### 중복 항목이 많을 때
225
+
226
+ 같은 문제를 여러 번 말하면 중복 항목이 생길 수 있습니다. `inbox/`를 확인하고 불필요한 항목은 `status: rejected`로 바꾸거나 삭제합니다. 완전한 중복 병합은 아직 지원하지 않습니다.
227
+
228
+ ---
229
+
230
+ ## Post-MVP 로드맵 참고
231
+
232
+ 아래는 Stage 1 이후의 계획입니다. 현재 동작하지 않습니다.
233
+
234
+ | 단계 | 이름 | 핵심 내용 |
235
+ |------|------|-----------|
236
+ | **Stage 2** | Agent Team Workbench | 역할 기반 워커, 오케스트레이터 모드, 작업 큐, 능력 게이트, wiki 기반 공유 메모리 |
237
+ | **Stage 3** | Hermes-like Conversational Growth | 검토된 스킬 추출, 메모리 큐레이션, 중요도/최신성/신뢰도 점수 |
238
+ | **Stage 4** | Personal/Team AI OS | 통합 대시보드, 그래프 추론, 안전한 동기화, 팀 협업 |
239
+
240
+ Post-MVP 후보 기능 (Stage 1에 해당하지 않음):
241
+ - Obsidian 연동 / 양방향 동기화
242
+ - MCP 서버 인터페이스
243
+ - SQLite 그래프 데이터베이스
244
+ - 원격 벡터 검색
245
+ - 사람 검토 없는 lesson 전환 / 명시 승인 없는 원격 업로드
246
+ - 실행형 Tool Pack
247
+ - 공개 마켓플레이스
248
+
249
+ 자세한 내용은 [4-stage roadmap memo](../../.sisyphus/drafts/llmwiki-4-stage-roadmap-memo.md)를 참고하세요.
250
+
251
+ ---
252
+
253
+ ## 관련 문서
254
+
255
+ | 문서 | 위치 |
256
+ |------|------|
257
+ | 플러그인 README | [`README.md`](../README.md) |
258
+ | 사용자 가이드 (한국어) | [`docs/user-guide-ko.md`](user-guide-ko.md) |
259
+ | 사용자 테스트 가이드 | [`../../docs/LLMWIKI_USER_TEST_GUIDE.md`](../../docs/LLMWIKI_USER_TEST_GUIDE.md) |
260
+ | Scope Lock | [`docs/SCOPE_LOCK.md`](SCOPE_LOCK.md) |
261
+ | 4단계 로드맵 메모 | [`../../.sisyphus/drafts/llmwiki-4-stage-roadmap-memo.md`](../../../.sisyphus/drafts/llmwiki-4-stage-roadmap-memo.md) |
262
+
263
+ ---
264
+
265
+ *이 가이드는 LLM Wiki v2 Stage 1 Knowledge Workbench의 개념, 워크플로, 문제 해결을 설명합니다.*