@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,83 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import path from 'node:path';
3
+ export async function ensureDir(dirPath) {
4
+ await fs.mkdir(dirPath, { recursive: true });
5
+ }
6
+ export async function readJson(filePath) {
7
+ const raw = await fs.readFile(filePath, 'utf8');
8
+ return JSON.parse(raw);
9
+ }
10
+ export async function writeJson(filePath, data) {
11
+ await ensureDir(path.dirname(filePath));
12
+ await fs.writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
13
+ }
14
+ export async function writeText(filePath, content) {
15
+ await ensureDir(path.dirname(filePath));
16
+ await fs.writeFile(filePath, content.endsWith('\n') ? content : `${content}\n`, 'utf8');
17
+ }
18
+ export async function fileExists(filePath) {
19
+ try {
20
+ await fs.access(filePath);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ export async function walkFiles(rootDir, options = {}) {
28
+ const exclude = [...new Set([...(options.exclude || DEFAULT_WALK_EXCLUDES), ...(options.additionalExclude || [])])];
29
+ const files = [];
30
+ const absoluteRoot = path.resolve(rootDir);
31
+ async function walk(current) {
32
+ const entries = await fs.readdir(current, { withFileTypes: true });
33
+ if (options.suppressNestedRepositories && path.resolve(current) !== absoluteRoot && hasGitMarker(entries)) {
34
+ options.onSuppressNestedRepository?.(path.relative(rootDir, current).replaceAll(path.sep, '/'));
35
+ return;
36
+ }
37
+ for (const entry of entries) {
38
+ const absolute = path.join(current, entry.name);
39
+ const relative = path.relative(rootDir, absolute).replaceAll(path.sep, '/');
40
+ if (shouldExclude(relative, entry.name, exclude)) {
41
+ continue;
42
+ }
43
+ if (entry.isDirectory()) {
44
+ await walk(absolute);
45
+ }
46
+ else if (entry.isFile()) {
47
+ files.push({ absolute, relative });
48
+ }
49
+ }
50
+ }
51
+ await walk(rootDir);
52
+ files.sort((a, b) => a.relative.localeCompare(b.relative));
53
+ return files;
54
+ }
55
+ function hasGitMarker(entries) {
56
+ return entries.some((entry) => entry.name === '.git' && (entry.isDirectory() || entry.isFile() || entry.isSymbolicLink()));
57
+ }
58
+ export const DEFAULT_WALK_EXCLUDES = [
59
+ '.git',
60
+ 'node_modules',
61
+ 'dist',
62
+ 'build',
63
+ 'coverage',
64
+ '.next',
65
+ '.turbo',
66
+ '.cache',
67
+ '.llmwiki/run',
68
+ '.llmwiki/wiki',
69
+ 'tmp/**'
70
+ ];
71
+ function shouldExclude(relative, name, exclude) {
72
+ if (exclude.includes(name)) {
73
+ return true;
74
+ }
75
+ return exclude.some((pattern) => {
76
+ if (pattern.endsWith('/**')) {
77
+ const base = pattern.slice(0, -3).replace(/\/+$/, '');
78
+ return relative === base || relative.startsWith(`${base}/`);
79
+ }
80
+ return relative === pattern || relative.startsWith(`${pattern}/`);
81
+ });
82
+ }
83
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type RunGitOptions = {
2
+ cwd?: string;
3
+ env?: NodeJS.ProcessEnv;
4
+ maxBuffer?: number;
5
+ };
6
+ export declare function runGit(args: string[], options?: RunGitOptions): Promise<{
7
+ stdout: string;
8
+ stderr: string;
9
+ }>;
10
+ export declare function getGitCommit(repoPath: string, fallback?: string): Promise<string>;
11
+ export declare function getGitRemote(repoPath: string, fallback?: string): Promise<string>;
12
+ export declare function getGitStatus(repoPath: string): Promise<string>;
13
+ export {};
@@ -0,0 +1,39 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ export async function runGit(args, options = {}) {
5
+ const { stdout, stderr } = await execFileAsync('git', args, {
6
+ cwd: options.cwd,
7
+ env: options.env || process.env,
8
+ maxBuffer: options.maxBuffer || 20 * 1024 * 1024
9
+ });
10
+ return { stdout: stdout.trim(), stderr: stderr.trim() };
11
+ }
12
+ export async function getGitCommit(repoPath, fallback = 'unknown') {
13
+ try {
14
+ const { stdout } = await runGit(['rev-parse', 'HEAD'], { cwd: repoPath });
15
+ return stdout || fallback;
16
+ }
17
+ catch {
18
+ return fallback;
19
+ }
20
+ }
21
+ export async function getGitRemote(repoPath, fallback = 'unknown') {
22
+ try {
23
+ const { stdout } = await runGit(['config', '--get', 'remote.origin.url'], { cwd: repoPath });
24
+ return stdout || fallback;
25
+ }
26
+ catch {
27
+ return fallback;
28
+ }
29
+ }
30
+ export async function getGitStatus(repoPath) {
31
+ try {
32
+ const { stdout } = await runGit(['status', '--porcelain'], { cwd: repoPath });
33
+ return stdout;
34
+ }
35
+ catch {
36
+ return '';
37
+ }
38
+ }
39
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAI1C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,UAAyB,EAAE;IACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;QAC1D,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;KACjD,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAQ,GAAG,SAAS;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,OAAO,MAAM,IAAI,QAAQ,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAQ,GAAG,SAAS;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,OAAO,MAAM,IAAI,QAAQ,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,74 @@
1
+ export type WikiGraphNode = {
2
+ id: string;
3
+ kind: string;
4
+ path: string;
5
+ page_state?: string;
6
+ };
7
+ export type WikiGraphEdge = {
8
+ type: string;
9
+ from: string;
10
+ to: string;
11
+ };
12
+ export type WikiGraphData = {
13
+ schema_version: number;
14
+ nodes: WikiGraphNode[];
15
+ edges: WikiGraphEdge[];
16
+ };
17
+ export type WikiGraphIndex = {
18
+ graph: WikiGraphData;
19
+ graphPath: string | null;
20
+ graphLabel: string;
21
+ nodeById: Map<string, WikiGraphNode>;
22
+ nodesByKind: Map<string, WikiGraphNode[]>;
23
+ nodesByPath: Map<string, WikiGraphNode[]>;
24
+ edgesByType: Map<string, WikiGraphEdge[]>;
25
+ outgoingEdgesByNodeId: Map<string, WikiGraphEdge[]>;
26
+ incomingEdgesByNodeId: Map<string, WikiGraphEdge[]>;
27
+ };
28
+ export type AffectedWikiGraphPageSelection = {
29
+ pageId: string;
30
+ pagePath: string;
31
+ pageState: string;
32
+ changedPaths: string[];
33
+ };
34
+ export type WikiGraphTraversalSelection = {
35
+ nodeId: string;
36
+ path: string;
37
+ kind: string;
38
+ };
39
+ export declare class WikiGraphError extends Error {
40
+ code: string;
41
+ graphPath: string | null;
42
+ constructor(message: string, graphPath?: string | null);
43
+ }
44
+ export declare function loadWikiGraph(graphPath: string): Promise<WikiGraphIndex>;
45
+ export declare function buildWikiGraphIndex(rawGraph: unknown, options?: {
46
+ graphPath?: string;
47
+ }): WikiGraphIndex;
48
+ export declare function parseWikiGraph(rawGraph: unknown, options?: {
49
+ graphPath?: string;
50
+ }): WikiGraphData;
51
+ export declare function isSupportedWikiGraphSchema(index: WikiGraphIndex | WikiGraphData): boolean;
52
+ export declare function getNodeById(index: WikiGraphIndex, nodeId: string): WikiGraphNode | null;
53
+ export declare function getNodesByKind(index: WikiGraphIndex, kind: string): WikiGraphNode[];
54
+ export declare function getNodesByPath(index: WikiGraphIndex, graphPath: string, options?: {
55
+ kind?: string;
56
+ }): WikiGraphNode[];
57
+ export declare function getEdgesByType(index: WikiGraphIndex, type: string): WikiGraphEdge[];
58
+ export declare function getOutgoingEdges(index: WikiGraphIndex, nodeId: string, options?: {
59
+ type?: string;
60
+ }): WikiGraphEdge[];
61
+ export declare function getIncomingEdges(index: WikiGraphIndex, nodeId: string, options?: {
62
+ type?: string;
63
+ }): WikiGraphEdge[];
64
+ export declare function getAdjacentNodes(index: WikiGraphIndex, nodeId: string, options?: {
65
+ direction?: 'outgoing' | 'incoming';
66
+ type?: string;
67
+ }): WikiGraphNode[];
68
+ export declare function selectLinkedPagePaths(index: WikiGraphIndex, pagePath: string): WikiGraphTraversalSelection[];
69
+ export declare function selectPageProvenancePaths(index: WikiGraphIndex, pagePath: string): WikiGraphTraversalSelection[];
70
+ export declare function getManagedPagePaths(index: WikiGraphIndex): Set<string>;
71
+ export declare function selectAffectedPagePaths(index: WikiGraphIndex, changedPaths: string[], options?: {
72
+ managedOnly?: boolean;
73
+ }): AffectedWikiGraphPageSelection[];
74
+ export declare function isManagedPageState(pageState: string | undefined): boolean;
@@ -0,0 +1,335 @@
1
+ import path from 'node:path';
2
+ import { readJson } from './utils/fs.js';
3
+ const MANAGED_PAGE_STATES = new Set(['generated', 'mixed']);
4
+ const GRAPH_NODE_KINDS_WITH_PATH_LOOKUPS = new Set(['page', 'source', 'documentation', 'module']);
5
+ const SUPPORTED_GRAPH_NODE_KINDS = new Set(['page', 'source', 'documentation', 'module']);
6
+ const SUPPORTED_GRAPH_EDGE_TYPES = new Set(['affects', 'wiki_link', 'provenance', 'owns']);
7
+ export class WikiGraphError extends Error {
8
+ code;
9
+ graphPath;
10
+ constructor(message, graphPath) {
11
+ super(graphPath ? `${message} (${path.basename(graphPath)})` : message);
12
+ this.name = 'WikiGraphError';
13
+ this.code = 'INVALID_GRAPH';
14
+ this.graphPath = graphPath || null;
15
+ }
16
+ }
17
+ export async function loadWikiGraph(graphPath) {
18
+ const raw = await readJson(graphPath);
19
+ return buildWikiGraphIndex(raw, { graphPath });
20
+ }
21
+ export function buildWikiGraphIndex(rawGraph, options = {}) {
22
+ const graph = parseWikiGraph(rawGraph, options);
23
+ const nodeById = new Map();
24
+ const nodesByKind = new Map();
25
+ const nodesByPath = new Map();
26
+ const edgesByType = new Map();
27
+ const outgoingEdgesByNodeId = new Map();
28
+ const incomingEdgesByNodeId = new Map();
29
+ for (const node of graph.nodes) {
30
+ if (nodeById.has(node.id)) {
31
+ throw new WikiGraphError(`Graph nodes must have unique ids; found duplicate ${node.id}.`, options.graphPath);
32
+ }
33
+ nodeById.set(node.id, node);
34
+ pushIndexed(nodesByKind, node.kind, node);
35
+ if (GRAPH_NODE_KINDS_WITH_PATH_LOOKUPS.has(node.kind)) {
36
+ pushIndexed(nodesByPath, node.path, node);
37
+ }
38
+ }
39
+ for (const edge of graph.edges) {
40
+ const fromNode = nodeById.get(edge.from);
41
+ if (!fromNode) {
42
+ throw new WikiGraphError(`Graph edge ${edge.type} references missing from-node ${edge.from}.`, options.graphPath);
43
+ }
44
+ const toNode = nodeById.get(edge.to);
45
+ if (!toNode) {
46
+ throw new WikiGraphError(`Graph edge ${edge.type} references missing to-node ${edge.to}.`, options.graphPath);
47
+ }
48
+ validateEdgeEndpoints(edge, fromNode, toNode, options.graphPath);
49
+ pushIndexed(edgesByType, edge.type, edge);
50
+ pushIndexed(outgoingEdgesByNodeId, edge.from, edge);
51
+ pushIndexed(incomingEdgesByNodeId, edge.to, edge);
52
+ }
53
+ return {
54
+ graph,
55
+ graphPath: options.graphPath || null,
56
+ graphLabel: path.basename(options.graphPath || 'graph.json'),
57
+ nodeById,
58
+ nodesByKind,
59
+ nodesByPath,
60
+ edgesByType,
61
+ outgoingEdgesByNodeId,
62
+ incomingEdgesByNodeId
63
+ };
64
+ }
65
+ export function parseWikiGraph(rawGraph, options = {}) {
66
+ if (!rawGraph || typeof rawGraph !== 'object' || Array.isArray(rawGraph)) {
67
+ throw new WikiGraphError('Graph artifact must be a JSON object.', options.graphPath);
68
+ }
69
+ const graph = rawGraph;
70
+ if (!Number.isInteger(graph.schema_version)) {
71
+ throw new WikiGraphError('Graph artifact schema_version must be an integer.', options.graphPath);
72
+ }
73
+ if (!Array.isArray(graph.nodes)) {
74
+ throw new WikiGraphError('Graph artifact nodes must be an array.', options.graphPath);
75
+ }
76
+ if (!Array.isArray(graph.edges)) {
77
+ throw new WikiGraphError('Graph artifact edges must be an array.', options.graphPath);
78
+ }
79
+ const nodes = graph.nodes.map((node, index) => parseNode(node, index, options.graphPath)).sort(compareGraphNodes);
80
+ const edges = graph.edges.map((edge, index) => parseEdge(edge, index, options.graphPath)).sort(compareGraphEdges);
81
+ return {
82
+ schema_version: Number(graph.schema_version),
83
+ nodes,
84
+ edges
85
+ };
86
+ }
87
+ export function isSupportedWikiGraphSchema(index) {
88
+ const graph = 'graph' in index ? index.graph : index;
89
+ return graph.schema_version === 1;
90
+ }
91
+ export function getNodeById(index, nodeId) {
92
+ return index.nodeById.get(nodeId) || null;
93
+ }
94
+ export function getNodesByKind(index, kind) {
95
+ return [...(index.nodesByKind.get(kind) || [])];
96
+ }
97
+ export function getNodesByPath(index, graphPath, options = {}) {
98
+ const candidates = index.nodesByPath.get(normalizeGraphPath(graphPath)) || [];
99
+ if (!options.kind) {
100
+ return [...candidates];
101
+ }
102
+ return candidates.filter((node) => node.kind === options.kind);
103
+ }
104
+ export function getEdgesByType(index, type) {
105
+ return [...(index.edgesByType.get(type) || [])];
106
+ }
107
+ export function getOutgoingEdges(index, nodeId, options = {}) {
108
+ const edges = index.outgoingEdgesByNodeId.get(nodeId) || [];
109
+ if (!options.type) {
110
+ return [...edges];
111
+ }
112
+ return edges.filter((edge) => edge.type === options.type);
113
+ }
114
+ export function getIncomingEdges(index, nodeId, options = {}) {
115
+ const edges = index.incomingEdgesByNodeId.get(nodeId) || [];
116
+ if (!options.type) {
117
+ return [...edges];
118
+ }
119
+ return edges.filter((edge) => edge.type === options.type);
120
+ }
121
+ export function getAdjacentNodes(index, nodeId, options = {}) {
122
+ const direction = options.direction || 'outgoing';
123
+ const edges = direction === 'incoming'
124
+ ? getIncomingEdges(index, nodeId, { type: options.type })
125
+ : getOutgoingEdges(index, nodeId, { type: options.type });
126
+ return edges
127
+ .map((edge) => getNodeById(index, direction === 'incoming' ? edge.from : edge.to))
128
+ .filter((node) => !!node);
129
+ }
130
+ export function selectLinkedPagePaths(index, pagePath) {
131
+ return selectPageTraversalNodes(index, pagePath, 'wiki_link', ['page']);
132
+ }
133
+ export function selectPageProvenancePaths(index, pagePath) {
134
+ return selectPageTraversalNodes(index, pagePath, 'provenance', ['source', 'documentation']);
135
+ }
136
+ export function getManagedPagePaths(index) {
137
+ const managed = new Set();
138
+ for (const node of getNodesByKind(index, 'page')) {
139
+ if (isManagedPageState(node.page_state)) {
140
+ managed.add(node.path);
141
+ }
142
+ }
143
+ return managed;
144
+ }
145
+ export function selectAffectedPagePaths(index, changedPaths, options = {}) {
146
+ const managedOnly = options.managedOnly !== false;
147
+ const selections = new Map();
148
+ for (const changedPath of normalizeAndUniqueGraphPaths(changedPaths)) {
149
+ const sourceNodes = getNodesByPath(index, changedPath)
150
+ .filter((node) => node.kind === 'source' || node.kind === 'documentation');
151
+ for (const sourceNode of sourceNodes) {
152
+ for (const edge of getOutgoingEdges(index, sourceNode.id, { type: 'affects' })) {
153
+ const pageNode = getNodeById(index, edge.to);
154
+ if (!pageNode || pageNode.kind !== 'page') {
155
+ continue;
156
+ }
157
+ const pageState = String(pageNode.page_state || 'generated');
158
+ if (managedOnly && !isManagedPageState(pageState)) {
159
+ continue;
160
+ }
161
+ let selection = selections.get(pageNode.path);
162
+ if (!selection) {
163
+ selection = {
164
+ pageId: pageNode.id,
165
+ pagePath: pageNode.path,
166
+ pageState,
167
+ changedPaths: new Set()
168
+ };
169
+ selections.set(pageNode.path, selection);
170
+ }
171
+ selection.changedPaths.add(changedPath);
172
+ }
173
+ }
174
+ }
175
+ return [...selections.values()]
176
+ .map((selection) => ({
177
+ pageId: selection.pageId,
178
+ pagePath: selection.pagePath,
179
+ pageState: selection.pageState,
180
+ changedPaths: [...selection.changedPaths].sort()
181
+ }))
182
+ .sort((left, right) => left.pagePath.localeCompare(right.pagePath));
183
+ }
184
+ export function isManagedPageState(pageState) {
185
+ return MANAGED_PAGE_STATES.has(String(pageState || 'generated'));
186
+ }
187
+ function selectPageTraversalNodes(index, pagePath, edgeType, targetKinds) {
188
+ const pageNodes = getNodesByPath(index, pagePath, { kind: 'page' });
189
+ const targetKindSet = new Set(targetKinds);
190
+ const selected = new Map();
191
+ for (const pageNode of pageNodes) {
192
+ for (const edge of getOutgoingEdges(index, pageNode.id, { type: edgeType })) {
193
+ const targetNode = getNodeById(index, edge.to);
194
+ if (!targetNode || !targetKindSet.has(targetNode.kind)) {
195
+ continue;
196
+ }
197
+ selected.set(targetNode.id, {
198
+ nodeId: targetNode.id,
199
+ path: targetNode.path,
200
+ kind: targetNode.kind
201
+ });
202
+ }
203
+ }
204
+ return [...selected.values()].sort(compareTraversalSelections);
205
+ }
206
+ function compareTraversalSelections(left, right) {
207
+ return left.kind.localeCompare(right.kind)
208
+ || left.path.localeCompare(right.path)
209
+ || left.nodeId.localeCompare(right.nodeId);
210
+ }
211
+ function parseNode(rawNode, index, graphPath) {
212
+ if (!rawNode || typeof rawNode !== 'object' || Array.isArray(rawNode)) {
213
+ throw new WikiGraphError(`Graph node at index ${index} must be an object.`, graphPath);
214
+ }
215
+ const node = rawNode;
216
+ if (typeof node.id !== 'string' || !node.id) {
217
+ throw new WikiGraphError(`Graph node at index ${index} must include a non-empty string id.`, graphPath);
218
+ }
219
+ if (typeof node.kind !== 'string' || !node.kind) {
220
+ throw new WikiGraphError(`Graph node ${String(node.id)} must include a non-empty string kind.`, graphPath);
221
+ }
222
+ if (!SUPPORTED_GRAPH_NODE_KINDS.has(String(node.kind))) {
223
+ throw new WikiGraphError(`Graph node ${String(node.id)} has unsupported kind ${String(node.kind)}.`, graphPath);
224
+ }
225
+ if (typeof node.path !== 'string' || !node.path) {
226
+ throw new WikiGraphError(`Graph node ${String(node.id)} must include a non-empty string path.`, graphPath);
227
+ }
228
+ const normalizedPath = normalizeGraphPath(String(node.path));
229
+ validateNodeId({
230
+ id: String(node.id),
231
+ kind: String(node.kind),
232
+ path: normalizedPath
233
+ }, graphPath);
234
+ return {
235
+ id: String(node.id),
236
+ kind: String(node.kind),
237
+ path: normalizedPath,
238
+ ...(typeof node.page_state === 'string' ? { page_state: String(node.page_state) } : {})
239
+ };
240
+ }
241
+ function parseEdge(rawEdge, index, graphPath) {
242
+ if (!rawEdge || typeof rawEdge !== 'object' || Array.isArray(rawEdge)) {
243
+ throw new WikiGraphError(`Graph edge at index ${index} must be an object.`, graphPath);
244
+ }
245
+ const edge = rawEdge;
246
+ if (typeof edge.type !== 'string' || !edge.type) {
247
+ throw new WikiGraphError(`Graph edge at index ${index} must include a non-empty string type.`, graphPath);
248
+ }
249
+ if (!SUPPORTED_GRAPH_EDGE_TYPES.has(String(edge.type))) {
250
+ throw new WikiGraphError(`Graph edge at index ${index} has unsupported type ${String(edge.type)}.`, graphPath);
251
+ }
252
+ if (typeof edge.from !== 'string' || !edge.from) {
253
+ throw new WikiGraphError(`Graph edge at index ${index} must include a non-empty string from.`, graphPath);
254
+ }
255
+ if (typeof edge.to !== 'string' || !edge.to) {
256
+ throw new WikiGraphError(`Graph edge at index ${index} must include a non-empty string to.`, graphPath);
257
+ }
258
+ return {
259
+ type: String(edge.type),
260
+ from: String(edge.from),
261
+ to: String(edge.to)
262
+ };
263
+ }
264
+ function normalizeAndUniqueGraphPaths(paths) {
265
+ return [...new Set((paths || []).map(normalizeGraphPath).filter(Boolean))].sort();
266
+ }
267
+ function normalizeGraphPath(value) {
268
+ return String(value || '')
269
+ .replace(/\\/g, '/')
270
+ .replace(/^\.\//, '')
271
+ .trim();
272
+ }
273
+ function compareGraphNodes(left, right) {
274
+ return left.kind.localeCompare(right.kind)
275
+ || left.path.localeCompare(right.path)
276
+ || left.id.localeCompare(right.id);
277
+ }
278
+ function compareGraphEdges(left, right) {
279
+ return left.type.localeCompare(right.type)
280
+ || left.from.localeCompare(right.from)
281
+ || left.to.localeCompare(right.to);
282
+ }
283
+ function validateNodeId(node, graphPath) {
284
+ if (node.kind === 'documentation') {
285
+ if (node.id === `documentation:${node.path}` || node.id === `source:${node.path}`) {
286
+ return;
287
+ }
288
+ throw new WikiGraphError(`Graph node ${node.id} must match its kind/path (expected documentation:${node.path} or source:${node.path}).`, graphPath);
289
+ }
290
+ if (node.kind === 'module') {
291
+ if (/^module:[^:\s][^:\n\r]*$/.test(node.id)) {
292
+ return;
293
+ }
294
+ throw new WikiGraphError(`Graph node ${node.id} must use module:<id> format.`, graphPath);
295
+ }
296
+ if (node.id !== `${node.kind}:${node.path}`) {
297
+ throw new WikiGraphError(`Graph node ${node.id} must match its kind/path (expected ${node.kind}:${node.path}).`, graphPath);
298
+ }
299
+ }
300
+ function validateEdgeEndpoints(edge, fromNode, toNode, graphPath) {
301
+ switch (edge.type) {
302
+ case 'affects':
303
+ if ((fromNode.kind === 'source' || fromNode.kind === 'documentation' || fromNode.kind === 'module') && toNode.kind === 'page') {
304
+ return;
305
+ }
306
+ break;
307
+ case 'wiki_link':
308
+ if (fromNode.kind === 'page' && toNode.kind === 'page') {
309
+ return;
310
+ }
311
+ break;
312
+ case 'provenance':
313
+ if (fromNode.kind === 'page' && (toNode.kind === 'source' || toNode.kind === 'documentation')) {
314
+ return;
315
+ }
316
+ break;
317
+ case 'owns':
318
+ if (fromNode.kind === 'module' && (toNode.kind === 'page' || toNode.kind === 'source' || toNode.kind === 'documentation')) {
319
+ return;
320
+ }
321
+ break;
322
+ default:
323
+ break;
324
+ }
325
+ throw new WikiGraphError(`Graph edge ${edge.type} has invalid endpoint kinds ${fromNode.kind} -> ${toNode.kind}.`, graphPath);
326
+ }
327
+ function pushIndexed(index, key, value) {
328
+ let bucket = index.get(key);
329
+ if (!bucket) {
330
+ bucket = [];
331
+ index.set(key, bucket);
332
+ }
333
+ bucket.push(value);
334
+ }
335
+ //# sourceMappingURL=wiki-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-graph.js","sourceRoot":"","sources":["../../src/wiki-graph.ts"],"names":[],"mappings":"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"}