@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,55 @@
1
+ export declare function createBootstrapPlan({ scanDir, outFile }: {
2
+ scanDir: any;
3
+ outFile: any;
4
+ }): Promise<{
5
+ plan: {
6
+ incremental_selection?: {
7
+ graph_path: string;
8
+ changed_paths: string[];
9
+ always_affected_pages: string[];
10
+ selected_pages: {
11
+ page: string;
12
+ reasons: string[];
13
+ changed_paths: string[];
14
+ }[];
15
+ summary: {
16
+ selected_pages: number;
17
+ graph_available: boolean;
18
+ graph_used: boolean;
19
+ changed_paths_available: boolean;
20
+ fallback_reason: string;
21
+ };
22
+ };
23
+ schema_version: number;
24
+ mode: any;
25
+ repo_path: any;
26
+ remote: any;
27
+ commit: any;
28
+ generated_at: string;
29
+ phases: {
30
+ name: string;
31
+ purpose: string;
32
+ pages: any[];
33
+ }[];
34
+ modules: any[];
35
+ pages: any[];
36
+ affected_page_graph: {
37
+ source_to_pages: {
38
+ source: string;
39
+ pages: {
40
+ page: string;
41
+ reasons: string[];
42
+ }[];
43
+ }[];
44
+ summary: {
45
+ mapped_sources: number;
46
+ total_page_references: number;
47
+ };
48
+ };
49
+ };
50
+ summary: {
51
+ pages: number;
52
+ modules: number;
53
+ outFile: any;
54
+ };
55
+ }>;
@@ -0,0 +1,422 @@
1
+ import path from 'node:path';
2
+ import { hasDataModelSignals } from './data-model-signals.js';
3
+ import { readJson, writeJson } from './utils/fs.js';
4
+ import { loadWikiGraph, selectAffectedPagePaths } from './wiki-graph.js';
5
+ const ALWAYS_AFFECTED_INCREMENTAL_PAGES = ['Agent-Context-Pack.md', 'Index.md', 'Log.md', '_Sidebar.md'];
6
+ export async function createBootstrapPlan({ scanDir, outFile }) {
7
+ const manifest = await readJson(path.join(scanDir, 'manifest.json'));
8
+ const modules = groupIntoModules(manifest.files);
9
+ const pages = createPagePlan(manifest, modules);
10
+ const affectedPageGraph = buildAffectedPageGraph(manifest, modules, pages);
11
+ const incrementalSelection = await buildIncrementalSelection(manifest, pages, scanDir);
12
+ const plan = {
13
+ schema_version: 1,
14
+ mode: manifest.mode || 'bootstrap',
15
+ repo_path: manifest.repo_path,
16
+ remote: manifest.remote,
17
+ commit: manifest.commit,
18
+ generated_at: new Date().toISOString(),
19
+ phases: [
20
+ {
21
+ name: 'foundation',
22
+ purpose: 'Create core navigation and agent entry points.',
23
+ pages: pages.filter((page) => page.phase === 'foundation').map((page) => page.path)
24
+ },
25
+ {
26
+ name: 'modules',
27
+ purpose: 'Create module/service/package pages from top-level source groupings.',
28
+ pages: pages.filter((page) => page.phase === 'modules').map((page) => page.path)
29
+ },
30
+ {
31
+ name: 'cross-cutting',
32
+ purpose: 'Create API, data, infrastructure, testing, and security pages.',
33
+ pages: pages.filter((page) => page.phase === 'cross-cutting').map((page) => page.path)
34
+ },
35
+ {
36
+ name: 'link-and-lint',
37
+ purpose: 'Update navigation pages, verify links, flag gaps, and prepare publication.',
38
+ pages: ['Index.md', '_Sidebar.md', 'Open-Questions.md', 'Documentation-Debt-Report.md', 'Log.md']
39
+ }
40
+ ],
41
+ modules,
42
+ pages,
43
+ affected_page_graph: affectedPageGraph,
44
+ ...(incrementalSelection ? { incremental_selection: incrementalSelection } : {})
45
+ };
46
+ await writeJson(outFile, plan);
47
+ return {
48
+ plan,
49
+ summary: {
50
+ pages: pages.length,
51
+ modules: modules.length,
52
+ outFile
53
+ }
54
+ };
55
+ }
56
+ async function buildIncrementalSelection(manifest, pages, scanDir) {
57
+ if (manifest.mode !== 'incremental') {
58
+ return null;
59
+ }
60
+ const plannedPages = new Set((pages || []).map((page) => String(page?.path || '')).filter(Boolean));
61
+ const changedPathAttribution = extractChangedPaths(manifest);
62
+ const changedPaths = changedPathAttribution.paths;
63
+ const graphMatchedChangedPaths = new Set();
64
+ const selected = new Map();
65
+ function markSelected(pagePath, reason, changedPath) {
66
+ if (!plannedPages.has(pagePath)) {
67
+ return;
68
+ }
69
+ let entry = selected.get(pagePath);
70
+ if (!entry) {
71
+ entry = { reasons: new Set(), changedPaths: new Set() };
72
+ selected.set(pagePath, entry);
73
+ }
74
+ entry.reasons.add(reason);
75
+ if (changedPath) {
76
+ entry.changedPaths.add(changedPath);
77
+ }
78
+ }
79
+ let graphAvailable = false;
80
+ let graphUsed = false;
81
+ let fallbackReason = null;
82
+ const graphPath = path.join(path.dirname(scanDir), 'graph.json');
83
+ try {
84
+ const graph = await loadWikiGraph(graphPath);
85
+ graphAvailable = true;
86
+ if (changedPathAttribution.available) {
87
+ const affectedPages = selectAffectedPagePaths(graph, changedPaths);
88
+ for (const affectedPage of affectedPages) {
89
+ const isAlwaysAffected = ALWAYS_AFFECTED_INCREMENTAL_PAGES.includes(affectedPage.pagePath);
90
+ if (isAlwaysAffected || affectedPage.changedPaths.length > 0) {
91
+ for (const changedPath of affectedPage.changedPaths) {
92
+ markSelected(affectedPage.pagePath, 'graph_affects', changedPath);
93
+ graphMatchedChangedPaths.add(changedPath);
94
+ graphUsed = true;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ if (!isNodeError(error) || error.code !== 'ENOENT') {
102
+ throw error;
103
+ }
104
+ fallbackReason = 'fallback_missing_graph';
105
+ }
106
+ if (graphAvailable && !changedPathAttribution.available) {
107
+ fallbackReason = 'fallback_missing_changed_paths';
108
+ }
109
+ if (graphAvailable && changedPathAttribution.available && changedPaths.some((changedPath) => !graphMatchedChangedPaths.has(changedPath))) {
110
+ fallbackReason = 'fallback_unmatched_changed_paths';
111
+ }
112
+ if (fallbackReason) {
113
+ for (const pagePath of [...plannedPages].sort()) {
114
+ markSelected(pagePath, fallbackReason);
115
+ }
116
+ }
117
+ for (const pagePath of ALWAYS_AFFECTED_INCREMENTAL_PAGES) {
118
+ markSelected(pagePath, 'always_affected_global');
119
+ }
120
+ const selectedPages = [...selected.entries()]
121
+ .map(([page, detail]) => ({
122
+ page,
123
+ reasons: [...detail.reasons].sort(),
124
+ changed_paths: [...detail.changedPaths].sort()
125
+ }))
126
+ .sort((a, b) => a.page.localeCompare(b.page));
127
+ return {
128
+ graph_path: graphPath,
129
+ changed_paths: changedPaths,
130
+ always_affected_pages: [...ALWAYS_AFFECTED_INCREMENTAL_PAGES],
131
+ selected_pages: selectedPages,
132
+ summary: {
133
+ selected_pages: selectedPages.length,
134
+ graph_available: graphAvailable,
135
+ graph_used: graphUsed,
136
+ changed_paths_available: changedPathAttribution.available,
137
+ fallback_reason: fallbackReason
138
+ }
139
+ };
140
+ }
141
+ function extractChangedPaths(manifest) {
142
+ const raw = [
143
+ manifest?.changed_paths,
144
+ manifest?.changedPaths,
145
+ manifest?.analysis?.changed_paths,
146
+ manifest?.analysis?.changedPaths,
147
+ manifest?.incremental?.changed_paths,
148
+ manifest?.incremental?.changedPaths
149
+ ];
150
+ let available = false;
151
+ const changed = new Set();
152
+ for (const candidate of raw) {
153
+ if (!Array.isArray(candidate)) {
154
+ continue;
155
+ }
156
+ available = true;
157
+ for (const item of candidate) {
158
+ const value = typeof item === 'string'
159
+ ? item
160
+ : (item && typeof item.path === 'string' ? item.path : '');
161
+ const normalized = normalizeRelativePath(value);
162
+ if (normalized) {
163
+ changed.add(normalized);
164
+ }
165
+ }
166
+ }
167
+ return {
168
+ available,
169
+ paths: [...changed].sort()
170
+ };
171
+ }
172
+ function normalizeRelativePath(value) {
173
+ return String(value || '')
174
+ .replace(/\\/g, '/')
175
+ .replace(/^\.\//, '')
176
+ .trim();
177
+ }
178
+ function isNodeError(error) {
179
+ return error instanceof Error && 'code' in error;
180
+ }
181
+ function groupIntoModules(files) {
182
+ const groups = new Map();
183
+ for (const file of files) {
184
+ if (file.skipped_content && file.bytes > 1_000_000) {
185
+ continue;
186
+ }
187
+ const groupName = inferGroupName(file.path);
188
+ const existing = groups.get(groupName) || {
189
+ name: groupName,
190
+ slug: slugify(groupName),
191
+ files: [],
192
+ categories: {},
193
+ languages: {},
194
+ runtime_hints: {},
195
+ important_reasons: new Set()
196
+ };
197
+ existing.files.push(file.path);
198
+ existing.categories[file.category] = (existing.categories[file.category] || 0) + 1;
199
+ existing.languages[file.language] = (existing.languages[file.language] || 0) + 1;
200
+ for (const hint of file.runtime_hints || []) {
201
+ existing.runtime_hints[hint] = (existing.runtime_hints[hint] || 0) + 1;
202
+ }
203
+ for (const reason of file.reasons || []) {
204
+ existing.important_reasons.add(reason);
205
+ }
206
+ groups.set(groupName, existing);
207
+ }
208
+ return [...groups.values()]
209
+ .map((group) => ({
210
+ ...group,
211
+ important_reasons: [...group.important_reasons].sort(),
212
+ files: group.files.sort()
213
+ }))
214
+ .sort((a, b) => b.files.length - a.files.length || a.name.localeCompare(b.name));
215
+ }
216
+ function inferGroupName(filePath) {
217
+ const parts = filePath.split('/');
218
+ if (parts[0] === 'apps' && parts[1])
219
+ return `Service ${parts[1]}`;
220
+ if (parts[0] === 'services' && parts[1])
221
+ return `Service ${parts[1]}`;
222
+ if (parts[0] === 'packages' && parts[1])
223
+ return `Package ${parts[1]}`;
224
+ if (parts[0] === 'src' && parts[1])
225
+ return `Module ${parts[1]}`;
226
+ if (parts[0] === 'lib' && parts[1])
227
+ return `Module ${parts[1]}`;
228
+ if (parts[0] === 'infra')
229
+ return 'Infrastructure';
230
+ if (parts[0] === 'docs')
231
+ return 'Documentation';
232
+ if (parts[0] === '.github')
233
+ return 'CI and Automation';
234
+ return 'Repository Root';
235
+ }
236
+ function createPagePlan(manifest, modules) {
237
+ const foundation = [
238
+ page('Home.md', 'foundation', 'Human and agent entry point.'),
239
+ page('_Sidebar.md', 'foundation', 'GitHub Wiki navigation sidebar.'),
240
+ page('Index.md', 'foundation', 'Full page index and routing map.'),
241
+ page('Log.md', 'foundation', 'Chronological compilation log.'),
242
+ page('Agent-Context-Pack.md', 'foundation', 'Small, high-signal entry page for coding agents.'),
243
+ page('Repository-Overview.md', 'foundation', 'Repository purpose, languages, and structure.'),
244
+ page('Architecture.md', 'foundation', 'Architecture summary inferred from source layout.'),
245
+ page('Build-Test-and-Run.md', 'foundation', 'Detected build, test, and run commands.'),
246
+ page('Open-Questions.md', 'foundation', 'Known gaps and uncertain inferences.'),
247
+ page('Documentation-Debt-Report.md', 'foundation', 'Markdown documentation validation, staleness, and claim-confidence report.')
248
+ ];
249
+ const modulePages = modules
250
+ .filter((module) => module.files.length >= 1)
251
+ .slice(0, 50)
252
+ .map((module) => page(`${module.slug}.md`, 'modules', `Compiled page for ${module.name}.`, module.name));
253
+ const crossCutting = [
254
+ page('Dependency-Map.md', 'cross-cutting', 'Internal and external dependency overview.'),
255
+ page('Testing-Strategy.md', 'cross-cutting', 'Detected tests and verification strategy.'),
256
+ page('Configuration-and-Environment.md', 'cross-cutting', 'Environment variables and configuration surfaces.'),
257
+ page('Security-and-Secrets.md', 'cross-cutting', 'Security-sensitive areas and secret-handling policy.'),
258
+ page('Operational-Runbook.md', 'cross-cutting', 'Operational commands, deployment, and troubleshooting notes.')
259
+ ];
260
+ if (manifest.totals.runtime_hints?.['http-route']) {
261
+ crossCutting.push(page('API-HTTP-Routes.md', 'cross-cutting', 'Detected HTTP routing surfaces.'));
262
+ }
263
+ if (hasDataModelSignals(manifest)) {
264
+ crossCutting.push(page('Data-Model-and-Migrations.md', 'cross-cutting', 'Data models, migrations, and schema-related files.'));
265
+ }
266
+ return [...foundation, ...modulePages, ...crossCutting];
267
+ }
268
+ function page(path, phase, purpose, moduleName = null) {
269
+ return { path, phase, purpose, moduleName };
270
+ }
271
+ function slugify(value) {
272
+ return value
273
+ .replace(/[^A-Za-z0-9]+/g, '-')
274
+ .replace(/^-+|-+$/g, '') || 'Page';
275
+ }
276
+ function buildAffectedPageGraph(manifest, modules, pages) {
277
+ // Index: source file path → module wiki page filename
278
+ const fileToModuleSlug = new Map();
279
+ for (const module of modules) {
280
+ const slugPage = `${module.slug}.md`;
281
+ for (const file of module.files) {
282
+ fileToModuleSlug.set(file, slugPage);
283
+ }
284
+ }
285
+ // Reverse import graph: imported file → Set of importer file paths
286
+ const reverseImports = new Map();
287
+ for (const edge of manifest.analysis?.dependency_graph?.edges || []) {
288
+ if (typeof edge.to === 'string' && !edge.to.startsWith('package:')) {
289
+ if (!reverseImports.has(edge.to)) {
290
+ reverseImports.set(edge.to, new Set());
291
+ }
292
+ reverseImports.get(edge.to).add(edge.from);
293
+ }
294
+ }
295
+ // Index: test file path → Set of covered source file paths
296
+ const testToCoveredSources = new Map();
297
+ for (const mapping of manifest.analysis?.test_to_source?.mappings || []) {
298
+ if (mapping.test && Array.isArray(mapping.sources)) {
299
+ testToCoveredSources.set(mapping.test, new Set(mapping.sources));
300
+ }
301
+ }
302
+ // Set of wiki pages that are actually planned
303
+ const plannedPages = new Set(pages.map((p) => p.path));
304
+ // Internal structure: source → page → Set<reason>
305
+ const entries = new Map();
306
+ function addPage(source, wikiPage, reason) {
307
+ if (!plannedPages.has(wikiPage)) {
308
+ return;
309
+ }
310
+ let pageMap = entries.get(source);
311
+ if (!pageMap) {
312
+ pageMap = new Map();
313
+ entries.set(source, pageMap);
314
+ }
315
+ let reasons = pageMap.get(wikiPage);
316
+ if (!reasons) {
317
+ reasons = new Set();
318
+ pageMap.set(wikiPage, reasons);
319
+ }
320
+ reasons.add(reason);
321
+ }
322
+ for (const card of manifest.files || []) {
323
+ const source = card.path;
324
+ // Direct module page
325
+ const directSlug = fileToModuleSlug.get(source);
326
+ if (directSlug) {
327
+ addPage(source, directSlug, 'direct_module');
328
+ }
329
+ // Transitive module pages: pages of modules that import this file
330
+ for (const importer of reverseImports.get(source) || []) {
331
+ const importerSlug = fileToModuleSlug.get(importer);
332
+ if (importerSlug && importerSlug !== directSlug) {
333
+ addPage(source, importerSlug, 'import_transitive');
334
+ }
335
+ }
336
+ // Test files → Testing-Strategy.md and covered source module pages
337
+ if (card.category === 'test') {
338
+ addPage(source, 'Testing-Strategy.md', 'test_coverage');
339
+ for (const coveredSource of testToCoveredSources.get(source) ?? new Set()) {
340
+ const coveredSlug = fileToModuleSlug.get(coveredSource);
341
+ if (coveredSlug) {
342
+ addPage(source, coveredSlug, 'test_covered_module');
343
+ }
344
+ }
345
+ }
346
+ // Files participating in the dependency graph → Dependency-Map.md
347
+ if ((card.imports?.length ?? 0) > 0 || reverseImports.has(source)) {
348
+ addPage(source, 'Dependency-Map.md', 'dependency_change');
349
+ }
350
+ // Route surfaces → API-HTTP-Routes.md
351
+ if ((card.route_surfaces?.length ?? 0) > 0) {
352
+ addPage(source, 'API-HTTP-Routes.md', 'cross_cutting_routes');
353
+ }
354
+ // Migration or ORM model surfaces → Data-Model-and-Migrations.md
355
+ if ((card.migration_surfaces?.length ?? 0) > 0 || (card.model_surfaces?.length ?? 0) > 0) {
356
+ addPage(source, 'Data-Model-and-Migrations.md', 'cross_cutting_data_model');
357
+ }
358
+ // Environment variables → Configuration-and-Environment.md
359
+ if ((card.environment_variables?.length ?? 0) > 0) {
360
+ addPage(source, 'Configuration-and-Environment.md', 'cross_cutting_config');
361
+ }
362
+ // Auth or billing signals → Security-and-Secrets.md
363
+ if (card.reasons?.some((r) => ['auth', 'billing-or-payment'].includes(r))) {
364
+ addPage(source, 'Security-and-Secrets.md', 'cross_cutting_security');
365
+ }
366
+ // Architecture-relevant signals → Architecture.md
367
+ // Module membership: file belongs to a tracked module (affects module list / structural map)
368
+ if (directSlug) {
369
+ addPage(source, 'Architecture.md', 'module_membership');
370
+ }
371
+ // Cross-module dependency: this file is imported by a file in a different module
372
+ for (const importer of reverseImports.get(source) || []) {
373
+ const importerSlug = fileToModuleSlug.get(importer);
374
+ if (importerSlug && importerSlug !== directSlug) {
375
+ addPage(source, 'Architecture.md', 'cross_module_dependency');
376
+ break; // One cross-module importer is sufficient to mark Architecture.md affected
377
+ }
378
+ }
379
+ // Route surfaces affect architecture-level API claims
380
+ if ((card.route_surfaces?.length ?? 0) > 0) {
381
+ addPage(source, 'Architecture.md', 'cross_cutting_routes');
382
+ }
383
+ // Data model / migration surfaces affect architecture-level data claims
384
+ if ((card.migration_surfaces?.length ?? 0) > 0 || (card.model_surfaces?.length ?? 0) > 0) {
385
+ addPage(source, 'Architecture.md', 'cross_cutting_data_model');
386
+ }
387
+ // Environment variables / config surfaces affect architecture-level config claims
388
+ if ((card.environment_variables?.length ?? 0) > 0) {
389
+ addPage(source, 'Architecture.md', 'cross_cutting_config');
390
+ }
391
+ // Auth / billing signals affect architecture-level security claims
392
+ if (card.reasons?.some((r) => ['auth', 'billing-or-payment'].includes(r))) {
393
+ addPage(source, 'Architecture.md', 'cross_cutting_security');
394
+ }
395
+ }
396
+ // Documentation cards → Documentation-Debt-Report.md (plus their direct module page if any)
397
+ for (const docCard of manifest.documentation?.files || []) {
398
+ const source = docCard.path;
399
+ addPage(source, 'Documentation-Debt-Report.md', 'docs_debt');
400
+ const directSlug = fileToModuleSlug.get(source);
401
+ if (directSlug) {
402
+ addPage(source, directSlug, 'direct_module');
403
+ }
404
+ }
405
+ const sourceToPagesArray = [...entries.entries()]
406
+ .filter(([, pageMap]) => pageMap.size > 0)
407
+ .map(([source, pageMap]) => ({
408
+ source,
409
+ pages: [...pageMap.entries()]
410
+ .map(([page, reasons]) => ({ page, reasons: [...reasons].sort() }))
411
+ .sort((a, b) => a.page.localeCompare(b.page))
412
+ }))
413
+ .sort((a, b) => a.source.localeCompare(b.source));
414
+ return {
415
+ source_to_pages: sourceToPagesArray,
416
+ summary: {
417
+ mapped_sources: sourceToPagesArray.length,
418
+ total_page_references: sourceToPagesArray.reduce((sum, entry) => sum + entry.pages.length, 0)
419
+ }
420
+ };
421
+ }
422
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Prompt template structure for LLM-backed wiki synthesis.
3
+ *
4
+ * Four page archetypes map to distinct templates:
5
+ * - foundation : repo-wide pages (Home, Build-Test-and-Run, Agent-Context-Pack, …)
6
+ * - architecture : dedicated repository architecture synthesis for Architecture.md
7
+ * - module : per-module pages derived from grouped source cards
8
+ * - cross-cutting: shared-concern pages (Dependency-Map, Testing-Strategy, …)
9
+ */
10
+ export type PageArchetype = 'foundation' | 'module' | 'cross-cutting' | 'architecture';
11
+ export type RouteContext = {
12
+ kind?: string | null;
13
+ framework?: string | null;
14
+ methods?: string[];
15
+ path?: string | null;
16
+ handler?: string | null;
17
+ };
18
+ export type MigrationContext = {
19
+ kind?: string | null;
20
+ id?: string | null;
21
+ name?: string | null;
22
+ };
23
+ export type ModelContext = {
24
+ name?: string | null;
25
+ kind?: string | null;
26
+ framework?: string | null;
27
+ };
28
+ export interface SourceCardContext {
29
+ path: string;
30
+ category: string;
31
+ language: string;
32
+ symbols?: string[];
33
+ imports?: string[];
34
+ reasons?: string[];
35
+ runtime_hints?: string[];
36
+ environment_variables?: string[];
37
+ routes?: RouteContext[];
38
+ migrations?: MigrationContext[];
39
+ models?: ModelContext[];
40
+ excerpt?: string;
41
+ }
42
+ export interface DocCardContext {
43
+ path: string;
44
+ status: string;
45
+ claims?: string[];
46
+ excerpt?: string;
47
+ }
48
+ export interface ModuleInfo {
49
+ name: string;
50
+ slug: string;
51
+ files: string[];
52
+ categories: Record<string, number>;
53
+ languages: Record<string, number>;
54
+ important_reasons?: string[];
55
+ }
56
+ export interface PromptContext {
57
+ /** Wiki page slug/filename without .md extension (e.g. "Module-Auth"). */
58
+ pageName: string;
59
+ /** Human-readable page title (e.g. "Auth"). */
60
+ pageTitle: string;
61
+ repoRemote?: string;
62
+ repoCommit?: string;
63
+ sourceCards: SourceCardContext[];
64
+ docCards?: DocCardContext[];
65
+ /** True when a module's evidence paths are all markdown/documentation files. */
66
+ docsOnlyModule?: boolean;
67
+ /** Current wiki page text, if one already exists. */
68
+ existingContent?: string;
69
+ /** Only set for module archetype. */
70
+ moduleInfo?: ModuleInfo;
71
+ }
72
+ export interface BuiltPrompt {
73
+ system: string;
74
+ user: string;
75
+ }
76
+ /**
77
+ * Architecture page: dedicated archetype for `Architecture.md`.
78
+ * Uses a richer system prompt and an outline with Mermaid diagram guidance.
79
+ */
80
+ export declare function buildArchitecturePrompt(context: PromptContext): BuiltPrompt;
81
+ /**
82
+ * Foundation pages: Home, Build-Test-and-Run, Agent-Context-Pack, etc.
83
+ * These are repo-wide summary pages derived from the full source inventory.
84
+ */
85
+ export declare function buildFoundationPrompt(context: PromptContext): BuiltPrompt;
86
+ /**
87
+ * Module pages: one page per logical code grouping.
88
+ * Grounded in the source cards for the module's files.
89
+ */
90
+ export declare function buildModulePrompt(context: PromptContext): BuiltPrompt;
91
+ /**
92
+ * Cross-cutting pages: Dependency-Map, Testing-Strategy, Security-and-Secrets, etc.
93
+ * These aggregate information from multiple modules.
94
+ */
95
+ export declare function buildCrossCuttingPrompt(context: PromptContext): BuiltPrompt;
96
+ /**
97
+ * Build a prompt for the given page archetype and context.
98
+ *
99
+ * @param archetype - Page archetype ('foundation' | 'architecture' | 'module' | 'cross-cutting')
100
+ * @param context - Assembled context for this page
101
+ * @returns { system, user } prompt pair ready for an LLM provider
102
+ */
103
+ export declare function buildPrompt(archetype: PageArchetype, context: PromptContext): BuiltPrompt;