@mfittko/repo-wiki 0.2.1

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 (190) hide show
  1. package/.llmwiki/schema.md +107 -0
  2. package/AGENTS.md +42 -0
  3. package/CHANGELOG.md +91 -0
  4. package/LICENSE +21 -0
  5. package/README.md +254 -0
  6. package/dist/bin/repo-wiki.d.ts +2 -0
  7. package/dist/bin/repo-wiki.js +7 -0
  8. package/dist/bin/repo-wiki.js.map +1 -0
  9. package/dist/src/cli.d.ts +1 -0
  10. package/dist/src/cli.js +404 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/compiler.d.ts +55 -0
  13. package/dist/src/compiler.js +2046 -0
  14. package/dist/src/compiler.js.map +1 -0
  15. package/dist/src/config.d.ts +63 -0
  16. package/dist/src/config.js +86 -0
  17. package/dist/src/config.js.map +1 -0
  18. package/dist/src/context-assembler.d.ts +68 -0
  19. package/dist/src/context-assembler.js +378 -0
  20. package/dist/src/context-assembler.js.map +1 -0
  21. package/dist/src/data-model-signals.d.ts +1 -0
  22. package/dist/src/data-model-signals.js +13 -0
  23. package/dist/src/data-model-signals.js.map +1 -0
  24. package/dist/src/docs-ingestor.d.ts +138 -0
  25. package/dist/src/docs-ingestor.js +844 -0
  26. package/dist/src/docs-ingestor.js.map +1 -0
  27. package/dist/src/docs-linter.d.ts +14 -0
  28. package/dist/src/docs-linter.js +164 -0
  29. package/dist/src/docs-linter.js.map +1 -0
  30. package/dist/src/docs-validation.d.ts +36 -0
  31. package/dist/src/docs-validation.js +297 -0
  32. package/dist/src/docs-validation.js.map +1 -0
  33. package/dist/src/extractors.d.ts +50 -0
  34. package/dist/src/extractors.js +2275 -0
  35. package/dist/src/extractors.js.map +1 -0
  36. package/dist/src/frontmatter.d.ts +46 -0
  37. package/dist/src/frontmatter.js +377 -0
  38. package/dist/src/frontmatter.js.map +1 -0
  39. package/dist/src/index.d.ts +26 -0
  40. package/dist/src/index.js +18 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/init.d.ts +12 -0
  43. package/dist/src/init.js +121 -0
  44. package/dist/src/init.js.map +1 -0
  45. package/dist/src/language.d.ts +2 -0
  46. package/dist/src/language.js +62 -0
  47. package/dist/src/language.js.map +1 -0
  48. package/dist/src/linter.d.ts +33 -0
  49. package/dist/src/linter.js +398 -0
  50. package/dist/src/linter.js.map +1 -0
  51. package/dist/src/llm-provider.d.ts +267 -0
  52. package/dist/src/llm-provider.js +474 -0
  53. package/dist/src/llm-provider.js.map +1 -0
  54. package/dist/src/page-ownership.d.ts +38 -0
  55. package/dist/src/page-ownership.js +96 -0
  56. package/dist/src/page-ownership.js.map +1 -0
  57. package/dist/src/planner.d.ts +55 -0
  58. package/dist/src/planner.js +422 -0
  59. package/dist/src/planner.js.map +1 -0
  60. package/dist/src/prompts.d.ts +103 -0
  61. package/dist/src/prompts.js +344 -0
  62. package/dist/src/prompts.js.map +1 -0
  63. package/dist/src/publisher.d.ts +68 -0
  64. package/dist/src/publisher.js +662 -0
  65. package/dist/src/publisher.js.map +1 -0
  66. package/dist/src/repository-analysis.d.ts +88 -0
  67. package/dist/src/repository-analysis.js +485 -0
  68. package/dist/src/repository-analysis.js.map +1 -0
  69. package/dist/src/scanner.d.ts +122 -0
  70. package/dist/src/scanner.js +309 -0
  71. package/dist/src/scanner.js.map +1 -0
  72. package/dist/src/search.d.ts +71 -0
  73. package/dist/src/search.js +410 -0
  74. package/dist/src/search.js.map +1 -0
  75. package/dist/src/secret-patterns.d.ts +3 -0
  76. package/dist/src/secret-patterns.js +14 -0
  77. package/dist/src/secret-patterns.js.map +1 -0
  78. package/dist/src/utils/args.d.ts +2 -0
  79. package/dist/src/utils/args.js +19 -0
  80. package/dist/src/utils/args.js.map +1 -0
  81. package/dist/src/utils/dotenv.d.ts +7 -0
  82. package/dist/src/utils/dotenv.js +73 -0
  83. package/dist/src/utils/dotenv.js.map +1 -0
  84. package/dist/src/utils/fs.d.ts +22 -0
  85. package/dist/src/utils/fs.js +83 -0
  86. package/dist/src/utils/fs.js.map +1 -0
  87. package/dist/src/utils/git.d.ts +13 -0
  88. package/dist/src/utils/git.js +39 -0
  89. package/dist/src/utils/git.js.map +1 -0
  90. package/dist/src/wiki-graph.d.ts +74 -0
  91. package/dist/src/wiki-graph.js +335 -0
  92. package/dist/src/wiki-graph.js.map +1 -0
  93. package/dist/src/wiki-patch.d.ts +152 -0
  94. package/dist/src/wiki-patch.js +489 -0
  95. package/dist/src/wiki-patch.js.map +1 -0
  96. package/dist/src/wiki-query.d.ts +63 -0
  97. package/dist/src/wiki-query.js +255 -0
  98. package/dist/src/wiki-query.js.map +1 -0
  99. package/dist/test/cli.test.d.ts +1 -0
  100. package/dist/test/cli.test.js +514 -0
  101. package/dist/test/cli.test.js.map +1 -0
  102. package/dist/test/compiler-eval.test.d.ts +1 -0
  103. package/dist/test/compiler-eval.test.js +234 -0
  104. package/dist/test/compiler-eval.test.js.map +1 -0
  105. package/dist/test/compiler.test.d.ts +1 -0
  106. package/dist/test/compiler.test.js +2537 -0
  107. package/dist/test/compiler.test.js.map +1 -0
  108. package/dist/test/context-assembler.test.d.ts +1 -0
  109. package/dist/test/context-assembler.test.js +379 -0
  110. package/dist/test/context-assembler.test.js.map +1 -0
  111. package/dist/test/docs-linter.test.d.ts +1 -0
  112. package/dist/test/docs-linter.test.js +900 -0
  113. package/dist/test/docs-linter.test.js.map +1 -0
  114. package/dist/test/dotenv.test.d.ts +1 -0
  115. package/dist/test/dotenv.test.js +77 -0
  116. package/dist/test/dotenv.test.js.map +1 -0
  117. package/dist/test/extractors-go.test.d.ts +1 -0
  118. package/dist/test/extractors-go.test.js +393 -0
  119. package/dist/test/extractors-go.test.js.map +1 -0
  120. package/dist/test/extractors-rust.test.d.ts +1 -0
  121. package/dist/test/extractors-rust.test.js +219 -0
  122. package/dist/test/extractors-rust.test.js.map +1 -0
  123. package/dist/test/extractors-utils.test.d.ts +1 -0
  124. package/dist/test/extractors-utils.test.js +786 -0
  125. package/dist/test/extractors-utils.test.js.map +1 -0
  126. package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.d.ts +1 -0
  127. package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.js +4 -0
  128. package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.js.map +1 -0
  129. package/dist/test/frontmatter.test.d.ts +1 -0
  130. package/dist/test/frontmatter.test.js +287 -0
  131. package/dist/test/frontmatter.test.js.map +1 -0
  132. package/dist/test/init-planner.test.d.ts +1 -0
  133. package/dist/test/init-planner.test.js +688 -0
  134. package/dist/test/init-planner.test.js.map +1 -0
  135. package/dist/test/linter.test.d.ts +1 -0
  136. package/dist/test/linter.test.js +426 -0
  137. package/dist/test/linter.test.js.map +1 -0
  138. package/dist/test/llm-provider.test.d.ts +1 -0
  139. package/dist/test/llm-provider.test.js +783 -0
  140. package/dist/test/llm-provider.test.js.map +1 -0
  141. package/dist/test/page-ownership.test.d.ts +1 -0
  142. package/dist/test/page-ownership.test.js +247 -0
  143. package/dist/test/page-ownership.test.js.map +1 -0
  144. package/dist/test/publisher.test.d.ts +1 -0
  145. package/dist/test/publisher.test.js +1297 -0
  146. package/dist/test/publisher.test.js.map +1 -0
  147. package/dist/test/repository-analysis.test.d.ts +1 -0
  148. package/dist/test/repository-analysis.test.js +182 -0
  149. package/dist/test/repository-analysis.test.js.map +1 -0
  150. package/dist/test/run-compiled-tests.d.ts +1 -0
  151. package/dist/test/run-compiled-tests.js +48 -0
  152. package/dist/test/run-compiled-tests.js.map +1 -0
  153. package/dist/test/scanner.test.d.ts +1 -0
  154. package/dist/test/scanner.test.js +551 -0
  155. package/dist/test/scanner.test.js.map +1 -0
  156. package/dist/test/search.test.d.ts +1 -0
  157. package/dist/test/search.test.js +92 -0
  158. package/dist/test/search.test.js.map +1 -0
  159. package/dist/test/update-changelog.test.d.ts +1 -0
  160. package/dist/test/update-changelog.test.js +125 -0
  161. package/dist/test/update-changelog.test.js.map +1 -0
  162. package/dist/test/wiki-graph.test.d.ts +1 -0
  163. package/dist/test/wiki-graph.test.js +164 -0
  164. package/dist/test/wiki-graph.test.js.map +1 -0
  165. package/dist/test/wiki-patch.test.d.ts +1 -0
  166. package/dist/test/wiki-patch.test.js +610 -0
  167. package/dist/test/wiki-patch.test.js.map +1 -0
  168. package/dist/test/wiki-query.test.d.ts +1 -0
  169. package/dist/test/wiki-query.test.js +163 -0
  170. package/dist/test/wiki-query.test.js.map +1 -0
  171. package/docs/PLAN.md +993 -0
  172. package/docs/WHY.md +61 -0
  173. package/docs/plans/agent-integration.md +85 -0
  174. package/docs/plans/ci-publishing.md +111 -0
  175. package/docs/plans/doc-validation.md +92 -0
  176. package/docs/plans/github-action.md +113 -0
  177. package/docs/plans/incremental-mode.md +98 -0
  178. package/docs/plans/karpathy-llm-wiki-alignment.md +84 -0
  179. package/docs/plans/llm-compiler.md +160 -0
  180. package/docs/plans/production-scanner.md +104 -0
  181. package/docs/plans/query-and-file-back.md +103 -0
  182. package/docs/plans/search-index.md +118 -0
  183. package/docs/plans/trust-hardening.md +74 -0
  184. package/docs/plans/wiki-graph.md +183 -0
  185. package/docs/plans/wiki-health.md +76 -0
  186. package/package.json +83 -0
  187. package/prompts/compiler.md +16 -0
  188. package/prompts/lint.md +18 -0
  189. package/prompts/page-templates.md +25 -0
  190. package/skills/repo-wiki-cli/SKILL.md +139 -0
@@ -0,0 +1,404 @@
1
+ import { parseArgs } from './utils/args.js';
2
+ import { loadDotEnv } from './utils/dotenv.js';
3
+ import { initProject } from './init.js';
4
+ import { scanRepository } from './scanner.js';
5
+ import { createBootstrapPlan } from './planner.js';
6
+ import { compileWiki } from './compiler.js';
7
+ import { formatSearchResults, searchWiki, defaultSearchDirForWiki } from './search.js';
8
+ import { buildWikiExplanation, buildWikiQueryAnswer, defaultGraphPathForWiki, findWikiGraphPath, formatWikiExplanation, formatWikiGraphPath, formatWikiQueryAnswer } from './wiki-query.js';
9
+ import { lintWiki } from './linter.js';
10
+ import { lintDocs } from './docs-linter.js';
11
+ import { loadConfig } from './config.js';
12
+ import { publishWiki, PUBLISH_TARGETS, defaultFrontmatterPolicyForTarget } from './publisher.js';
13
+ import { isFrontmatterPolicy, parseFrontmatterPolicy } from './frontmatter.js';
14
+ const HELP = `
15
+ repo-wiki <command> [options]
16
+
17
+ Commands:
18
+ init Add .llmwiki config/schema files to a repository.
19
+ scan Scan a repository into .llmwiki source cards and manifest files.
20
+ plan Create a bootstrap or incremental wiki compilation plan.
21
+ compile Generate or update local wiki markdown pages.
22
+ lint Validate generated wiki pages.
23
+ lint-docs Validate ingested markdown documentation before compilation.
24
+ publish Push local wiki pages to GitHub Wiki or GitHub Pages.
25
+ search Search local wiki pages through the built-in offline index.
26
+ query Answer from local wiki/search/graph evidence.
27
+ path Find a deterministic traversal in .llmwiki/graph.json.
28
+ explain Explain a wiki page or graph node with evidence.
29
+ run Run scan -> plan -> lint-docs -> compile -> lint, optionally followed by publish.
30
+
31
+ Options:
32
+ --target <github-wiki|github-pages>
33
+ Publish destination (default: github-wiki).
34
+ --pages-path <path>
35
+ Publish path for github-pages target (default: .).
36
+ --frontmatter-policy <strip|html-comment|preserve|provenance>
37
+ --frontmatter <strip|html-comment|preserve|provenance>
38
+ Frontmatter handling when publishing to the selected target.
39
+ github-wiki defaults to provenance; github-pages defaults to preserve.
40
+ html-comment is accepted for forward compatibility and currently behaves like strip.
41
+
42
+ Examples:
43
+ repo-wiki init --repo . --write-agents
44
+ repo-wiki run --mode bootstrap --repo . --scan .llmwiki/run --plan .llmwiki/bootstrap-plan.json --wiki .llmwiki/wiki
45
+ repo-wiki publish --target github-wiki --wiki .llmwiki/wiki --remote https://github.com/OWNER/REPO.wiki.git
46
+ repo-wiki publish --target github-pages --wiki .llmwiki/wiki --remote https://github.com/OWNER/REPO.git --branch gh-pages --pages-path .
47
+ repo-wiki search "architecture" --wiki .llmwiki/wiki --json
48
+ repo-wiki query "How does compile work?" --wiki .llmwiki/wiki --json
49
+ repo-wiki path Architecture.md src/compiler.ts --graph .llmwiki/graph.json --json
50
+ repo-wiki explain Module-compiler-ts.md --wiki .llmwiki/wiki --json
51
+ npx repo-wiki run --mode bootstrap --repo /path/to/existing/repo --wiki /tmp/repo-wiki
52
+ `.trim();
53
+ function getStringOption(options, key) {
54
+ const value = options[key];
55
+ return typeof value === 'string' ? value : undefined;
56
+ }
57
+ function getPublishTargetOption(options, configuredTarget) {
58
+ const value = getStringOption(options, 'target') || configuredTarget;
59
+ if (!value) {
60
+ return 'github-wiki';
61
+ }
62
+ if (isPublishTarget(value)) {
63
+ return value;
64
+ }
65
+ console.error(`Warning: unknown --target "${value}"; falling back to "github-wiki".`);
66
+ return 'github-wiki';
67
+ }
68
+ function getFrontmatterPolicyOption(options, target, configuredPolicy) {
69
+ const explicitOptionName = getFrontmatterOptionName(options);
70
+ const explicitValue = explicitOptionName ? getStringOption(options, explicitOptionName.slice(2)) : undefined;
71
+ const value = explicitValue || configuredPolicy;
72
+ const defaultPolicy = defaultFrontmatterPolicyForTarget(target);
73
+ const policy = value === undefined ? defaultPolicy : isFrontmatterPolicy(value) ? parseFrontmatterPolicy(value) : defaultPolicy;
74
+ if (explicitValue !== undefined && !isFrontmatterPolicy(explicitValue)) {
75
+ console.error(`Warning: unknown ${explicitOptionName} "${explicitValue}"; falling back to "${defaultPolicy}".`);
76
+ }
77
+ else if (policy === 'html-comment') {
78
+ console.error(`Warning: ${explicitOptionName || '--frontmatter-policy'} html-comment is reserved for future metadata comments and currently behaves like strip.`);
79
+ }
80
+ return policy;
81
+ }
82
+ function getFrontmatterOptionName(options) {
83
+ if (getStringOption(options, 'frontmatter-policy') !== undefined) {
84
+ return '--frontmatter-policy';
85
+ }
86
+ if (getStringOption(options, 'frontmatter') !== undefined) {
87
+ return '--frontmatter';
88
+ }
89
+ return null;
90
+ }
91
+ export async function runCli(argv) {
92
+ const [command, ...rest] = argv;
93
+ const options = parseArgs(rest);
94
+ await loadDotEnv(getDotEnvBaseDir(command, options));
95
+ if (!command || command === 'help' || command === '--help' || command === '-h') {
96
+ console.log(HELP);
97
+ return;
98
+ }
99
+ switch (command) {
100
+ case 'init': {
101
+ const result = await initProject({
102
+ repoPath: getStringOption(options, 'repo') || '.',
103
+ force: Boolean(options.force),
104
+ writeAgents: Boolean(options['write-agents'])
105
+ });
106
+ console.log(JSON.stringify(result.summary, null, 2));
107
+ return;
108
+ }
109
+ case 'scan': {
110
+ const result = await scanRepository({
111
+ mode: getStringOption(options, 'mode') || 'bootstrap',
112
+ repoPath: getStringOption(options, 'repo') || '.',
113
+ outDir: getStringOption(options, 'out') || getStringOption(options, 'scan') || '.llmwiki/run',
114
+ baseRef: getStringOption(options, 'base'),
115
+ headRef: getStringOption(options, 'head')
116
+ });
117
+ console.log(JSON.stringify(result.summary, null, 2));
118
+ return;
119
+ }
120
+ case 'plan': {
121
+ const result = await createBootstrapPlan({
122
+ scanDir: getStringOption(options, 'scan') || '.llmwiki/run',
123
+ outFile: getStringOption(options, 'out') || getStringOption(options, 'plan') || '.llmwiki/bootstrap-plan.json'
124
+ });
125
+ console.log(JSON.stringify(result.summary, null, 2));
126
+ return;
127
+ }
128
+ case 'compile': {
129
+ const compileRepoPath = getStringOption(options, 'repo') || '.';
130
+ const compileConfig = await loadConfig(compileRepoPath);
131
+ const result = await compileWiki({
132
+ scanDir: getStringOption(options, 'scan') || '.llmwiki/run',
133
+ planFile: getStringOption(options, 'plan') || '.llmwiki/bootstrap-plan.json',
134
+ wikiDir: getStringOption(options, 'wiki') || '.llmwiki/wiki',
135
+ config: compileConfig
136
+ });
137
+ console.log(JSON.stringify(result.summary, null, 2));
138
+ return;
139
+ }
140
+ case 'lint': {
141
+ const result = await lintWiki({
142
+ wikiDir: getStringOption(options, 'wiki') || '.llmwiki/wiki',
143
+ scanDir: getStringOption(options, 'scan') || '.llmwiki/run'
144
+ });
145
+ for (const finding of result.summary.graph_health?.findings || []) {
146
+ console.error(`${finding.severity.toUpperCase()} ${finding.code} ${finding.message}`);
147
+ }
148
+ console.log(JSON.stringify(result.summary, null, 2));
149
+ if (result.summary.errors > 0) {
150
+ process.exitCode = 1;
151
+ }
152
+ return;
153
+ }
154
+ case 'lint-docs': {
155
+ const result = await lintDocs({
156
+ scanDir: getStringOption(options, 'scan') || '.llmwiki/run',
157
+ repoPath: getStringOption(options, 'repo') || '.'
158
+ });
159
+ console.log(JSON.stringify(result.summary, null, 2));
160
+ if (result.summary.errors > 0) {
161
+ process.exitCode = 1;
162
+ }
163
+ return;
164
+ }
165
+ case 'publish': {
166
+ const config = await loadConfig(process.cwd());
167
+ const target = getPublishTargetOption(options, config.publish?.target);
168
+ const result = await publishWiki({
169
+ wikiDir: getStringOption(options, 'wiki') || '.llmwiki/wiki',
170
+ remote: getStringOption(options, 'remote'),
171
+ target,
172
+ branch: getStringOption(options, 'branch') || getConfiguredBranch(config.publish, target),
173
+ pagesPath: getStringOption(options, 'pages-path') || config.publish?.pages?.path || '.',
174
+ message: getStringOption(options, 'message'),
175
+ dryRun: Boolean(options['dry-run']),
176
+ frontmatterPolicy: getFrontmatterPolicyOption(options, target, getConfiguredFrontmatterPolicy(config.publish, target))
177
+ });
178
+ console.log(JSON.stringify(result.summary, null, 2));
179
+ return;
180
+ }
181
+ case 'search': {
182
+ const positionals = getPositionals(rest);
183
+ const query = positionals.join(' ').trim();
184
+ if (!query) {
185
+ throw new Error('Missing search query. Usage: repo-wiki search <query> [--wiki <path>] [--json]');
186
+ }
187
+ const wikiDir = getStringOption(options, 'wiki') || '.llmwiki/wiki';
188
+ const outDir = getStringOption(options, 'index') || getStringOption(options, 'search') || defaultSearchDirForWiki(wikiDir);
189
+ const limit = parsePositiveInt(getStringOption(options, 'limit')) || 10;
190
+ const result = await searchWiki({ query, wikiDir, outDir, limit });
191
+ if (Boolean(options.json)) {
192
+ console.log(JSON.stringify({
193
+ query: result.summary.query,
194
+ limit: result.summary.limit,
195
+ totalResults: result.summary.totalResults,
196
+ index: result.summary.index,
197
+ results: result.results
198
+ }, null, 2));
199
+ }
200
+ else {
201
+ console.log(formatSearchResults(query, result.results));
202
+ }
203
+ return;
204
+ }
205
+ case 'query': {
206
+ const positionals = getPositionals(rest);
207
+ const question = positionals.join(' ').trim();
208
+ if (!question) {
209
+ throw new Error('Missing query question. Usage: repo-wiki query <question> [--wiki <path>] [--graph <path>] [--json]');
210
+ }
211
+ const wikiDir = getStringOption(options, 'wiki') || '.llmwiki/wiki';
212
+ const graphPath = getStringOption(options, 'graph') || defaultGraphPathForWiki(wikiDir);
213
+ const outDir = getStringOption(options, 'index') || getStringOption(options, 'search') || defaultSearchDirForWiki(wikiDir);
214
+ const limit = parsePositiveInt(getStringOption(options, 'limit')) || 5;
215
+ const result = await buildWikiQueryAnswer({ question, wikiDir, graphPath, outDir, limit });
216
+ console.log(Boolean(options.json) ? JSON.stringify(result, null, 2) : formatWikiQueryAnswer(result));
217
+ return;
218
+ }
219
+ case 'path': {
220
+ const positionals = getPositionals(rest);
221
+ const [from, to] = positionals;
222
+ if (!from || !to) {
223
+ throw new Error('Missing path endpoints. Usage: repo-wiki path <from> <to> [--graph <path>] [--json]');
224
+ }
225
+ const wikiDir = getStringOption(options, 'wiki') || '.llmwiki/wiki';
226
+ const graphPath = getStringOption(options, 'graph') || defaultGraphPathForWiki(wikiDir);
227
+ const result = await findWikiGraphPath({ graphPath, from, to });
228
+ console.log(Boolean(options.json) ? JSON.stringify(result, null, 2) : formatWikiGraphPath(result));
229
+ if (!result.found) {
230
+ process.exitCode = 1;
231
+ }
232
+ return;
233
+ }
234
+ case 'explain': {
235
+ const positionals = getPositionals(rest);
236
+ const target = positionals.join(' ').trim();
237
+ if (!target) {
238
+ throw new Error('Missing explain target. Usage: repo-wiki explain <node-or-page> [--wiki <path>] [--graph <path>] [--json]');
239
+ }
240
+ const wikiDir = getStringOption(options, 'wiki') || '.llmwiki/wiki';
241
+ const graphPath = getStringOption(options, 'graph') || defaultGraphPathForWiki(wikiDir);
242
+ const outDir = getStringOption(options, 'index') || getStringOption(options, 'search') || defaultSearchDirForWiki(wikiDir);
243
+ const result = await buildWikiExplanation({ target, wikiDir, graphPath, outDir });
244
+ console.log(Boolean(options.json) ? JSON.stringify(result, null, 2) : formatWikiExplanation(result));
245
+ if (!result.found) {
246
+ process.exitCode = 1;
247
+ }
248
+ return;
249
+ }
250
+ case 'run': {
251
+ const result = await runPipeline(options);
252
+ console.log(JSON.stringify(result.summary, null, 2));
253
+ if (result.summary.status === 'blocked') {
254
+ process.exitCode = 1;
255
+ }
256
+ return;
257
+ }
258
+ default:
259
+ throw new Error(`Unknown command: ${command}\n\n${HELP}`);
260
+ }
261
+ }
262
+ function getDotEnvBaseDir(command, options) {
263
+ const repoPath = getStringOption(options, 'repo');
264
+ if (repoPath && ['init', 'scan', 'compile', 'lint-docs', 'run'].includes(command || '')) {
265
+ return repoPath;
266
+ }
267
+ return process.cwd();
268
+ }
269
+ async function runPipeline(options) {
270
+ const mode = getStringOption(options, 'mode') || 'bootstrap';
271
+ const repoPath = getStringOption(options, 'repo') || '.';
272
+ const config = await loadConfig(repoPath);
273
+ const scanDir = getStringOption(options, 'scan') || '.llmwiki/run';
274
+ const planFile = getStringOption(options, 'plan') || (mode === 'incremental' ? '.llmwiki/incremental-plan.json' : '.llmwiki/bootstrap-plan.json');
275
+ const wikiDir = getStringOption(options, 'wiki') || '.llmwiki/wiki';
276
+ const scan = await scanRepository({
277
+ mode,
278
+ repoPath,
279
+ outDir: scanDir,
280
+ baseRef: getStringOption(options, 'base'),
281
+ headRef: getStringOption(options, 'head')
282
+ });
283
+ const plan = await createBootstrapPlan({
284
+ scanDir,
285
+ outFile: planFile
286
+ });
287
+ const docsLint = await lintDocs({
288
+ scanDir,
289
+ repoPath
290
+ });
291
+ if (docsLint.summary.errors > 0) {
292
+ const reason = 'docs-lint-errors';
293
+ return {
294
+ scan,
295
+ plan,
296
+ docsLint,
297
+ compile: null,
298
+ lint: null,
299
+ publish: null,
300
+ summary: {
301
+ status: 'blocked',
302
+ blockedStage: 'lint-docs',
303
+ mode,
304
+ repoPath,
305
+ scan: scan.summary,
306
+ plan: plan.summary,
307
+ docsLint: docsLint.summary,
308
+ compile: { status: 'skipped', reason },
309
+ lint: { status: 'skipped', reason },
310
+ publish: options.publish ? { status: 'blocked', reason } : null
311
+ }
312
+ };
313
+ }
314
+ const compile = await compileWiki({
315
+ scanDir,
316
+ planFile,
317
+ wikiDir,
318
+ config
319
+ });
320
+ const lint = await lintWiki({
321
+ wikiDir,
322
+ scanDir
323
+ });
324
+ let publish = null;
325
+ let publishSummary = null;
326
+ if (options.publish && lint.summary.errors > 0) {
327
+ publishSummary = { status: 'blocked', reason: 'wiki-lint-errors' };
328
+ }
329
+ else if (options.publish) {
330
+ const target = getPublishTargetOption(options, config.publish?.target);
331
+ publish = await publishWiki({
332
+ wikiDir,
333
+ remote: getStringOption(options, 'remote'),
334
+ target,
335
+ branch: getStringOption(options, 'branch') || getConfiguredBranch(config.publish, target),
336
+ pagesPath: getStringOption(options, 'pages-path') || config.publish?.pages?.path || '.',
337
+ message: getStringOption(options, 'message'),
338
+ dryRun: Boolean(options['dry-run']),
339
+ frontmatterPolicy: getFrontmatterPolicyOption(options, target, getConfiguredFrontmatterPolicy(config.publish, target))
340
+ });
341
+ publishSummary = publish.summary;
342
+ }
343
+ const lintBlocked = lint.summary.errors > 0;
344
+ return {
345
+ scan,
346
+ plan,
347
+ compile,
348
+ lint,
349
+ publish,
350
+ summary: {
351
+ status: lintBlocked ? 'blocked' : 'ok',
352
+ blockedStage: lintBlocked ? 'lint' : null,
353
+ mode,
354
+ repoPath,
355
+ scan: scan.summary,
356
+ plan: plan.summary,
357
+ docsLint: docsLint.summary,
358
+ compile: compile.summary,
359
+ lint: lint.summary,
360
+ publish: publishSummary
361
+ }
362
+ };
363
+ }
364
+ function isPublishTarget(value) {
365
+ return PUBLISH_TARGETS.includes(value);
366
+ }
367
+ function getConfiguredBranch(configuredPublish, target) {
368
+ if (target === 'github-pages') {
369
+ return configuredPublish?.pages?.branch || 'gh-pages';
370
+ }
371
+ return configuredPublish?.wiki?.branch || 'master';
372
+ }
373
+ function getConfiguredFrontmatterPolicy(configuredPublish, target) {
374
+ if (target === 'github-pages') {
375
+ return configuredPublish?.pages?.frontmatter || configuredPublish?.frontmatter;
376
+ }
377
+ if (target === 'github-wiki') {
378
+ return configuredPublish?.wiki?.frontmatter || configuredPublish?.frontmatter;
379
+ }
380
+ return configuredPublish?.frontmatter;
381
+ }
382
+ function getPositionals(argv) {
383
+ const positionals = [];
384
+ for (let index = 0; index < argv.length; index += 1) {
385
+ const token = argv[index];
386
+ if (!token.startsWith('--')) {
387
+ positionals.push(token);
388
+ continue;
389
+ }
390
+ const next = argv[index + 1];
391
+ if (next && !next.startsWith('--')) {
392
+ index += 1;
393
+ }
394
+ }
395
+ return positionals;
396
+ }
397
+ function parsePositiveInt(value) {
398
+ if (!value) {
399
+ return null;
400
+ }
401
+ const parsed = Number.parseInt(value, 10);
402
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : null;
403
+ }
404
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { LLMProvider } from './llm-provider.js';
2
+ export declare function compileWiki({ scanDir, planFile, wikiDir, config, _provider }: {
3
+ scanDir: string;
4
+ planFile: string;
5
+ wikiDir: string;
6
+ /** Full config object (e.g. from loadConfig). Selects compiler.mode and LLM settings. */
7
+ config?: any | null;
8
+ /** Override the LLM provider (for testing). Only used when compiler.mode=llm. */
9
+ _provider?: LLMProvider | null;
10
+ }): Promise<{
11
+ contexts: any;
12
+ search: {
13
+ index: import("./search.js").SearchIndex;
14
+ summary: {
15
+ outDir: string;
16
+ outFile: string;
17
+ pages: number;
18
+ sourceCommits: string[];
19
+ };
20
+ };
21
+ summary: {
22
+ wikiDir: string;
23
+ compiler_mode: string;
24
+ pages: number;
25
+ deterministic_pages: number;
26
+ llm_pages: number;
27
+ skipped: number;
28
+ skipped_by_state: Record<string, number>;
29
+ commit: any;
30
+ contexts: any;
31
+ architecture_decision: ArchDecision;
32
+ search: {
33
+ outDir: string;
34
+ outFile: string;
35
+ pages: number;
36
+ sourceCommits: string[];
37
+ };
38
+ };
39
+ }>;
40
+ /**
41
+ * The status vocabulary for Architecture.md handling in a compile run.
42
+ * - 'skipped': content is effectively unchanged; existing file preserved byte-for-byte.
43
+ * - 'section-patched': only module group sections changed within the same module list.
44
+ * - 'full-regenerated': module list or broader structure changed; full content written.
45
+ */
46
+ export type ArchDecision = 'skipped' | 'section-patched' | 'full-regenerated';
47
+ /**
48
+ * Compute the Architecture.md handling decision by comparing new vs existing content.
49
+ *
50
+ * Returns:
51
+ * - 'skipped' if content is effectively unchanged after normalizing volatile fields.
52
+ * - 'section-patched' if only module group sections changed within the same module list.
53
+ * - 'full-regenerated' if the module list or broader structure changed.
54
+ */
55
+ export declare function computeArchDecision(newContent: string, existingContent: string | null): ArchDecision;