@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,26 @@
1
+ export { runCli } from './cli.js';
2
+ export { initProject } from './init.js';
3
+ export { scanRepository } from './scanner.js';
4
+ export { createBootstrapPlan } from './planner.js';
5
+ export { compileWiki } from './compiler.js';
6
+ export { assemblePageContext, assembleAllPageContexts, redactSecretLikeText } from './context-assembler.js';
7
+ export type { AssemblePageContextInput, PageContext, PageContextBudget, PageContextPage, PageContextType } from './context-assembler.js';
8
+ export { lintWiki } from './linter.js';
9
+ export { lintDocs } from './docs-linter.js';
10
+ export { publishWiki, rewriteInternalWikiLinks, PUBLISH_TARGETS } from './publisher.js';
11
+ export type { PublishWikiOptions, PublishTarget } from './publisher.js';
12
+ export { loadConfig, DEFAULT_CONFIG } from './config.js';
13
+ export { buildPrompt, buildFoundationPrompt, buildModulePrompt, buildCrossCuttingPrompt } from './prompts.js';
14
+ export type { PageArchetype, PromptContext, BuiltPrompt, SourceCardContext, DocCardContext, ModuleInfo } from './prompts.js';
15
+ export { MockLLMProvider, OpenAICompatibleProvider, LLMProviderError, LLM_DEFAULTS, createProvider, resolveProviderConfig, buildRequest } from './llm-provider.js';
16
+ export type { LLMProvider, LLMRequest, LLMResponse, LLMProviderConfig, ResolvedLLMProviderConfig, BuildRequestOptions } from './llm-provider.js';
17
+ export { detectPageState, extractHumanNotes, injectHumanNotes, preserveHumanNotes } from './page-ownership.js';
18
+ export type { PageState } from './page-ownership.js';
19
+ export { FRONTMATTER_POLICIES, isFrontmatterPolicy, stripFrontmatter, applyFrontmatterPolicy, parseFrontmatterPolicy } from './frontmatter.js';
20
+ export type { FrontmatterPolicy } from './frontmatter.js';
21
+ export { WikiPatchError, validateWikiPatch, parseWikiPatch, synthesizeWikiPage } from './wiki-patch.js';
22
+ export type { WikiPatch, WikiPatchFrontmatter, WikiPatchIssue, SynthesizeOptions } from './wiki-patch.js';
23
+ export { buildSearchIndex, searchWiki, searchIndex, formatSearchResults, defaultSearchDirForWiki, SEARCH_INDEX_VERSION } from './search.js';
24
+ export type { SearchIndex, SearchIndexEntry, SearchResult } from './search.js';
25
+ export { buildWikiQueryAnswer, buildWikiExplanation, findWikiGraphPath, formatWikiQueryAnswer, formatWikiExplanation, formatWikiGraphPath, defaultGraphPathForWiki } from './wiki-query.js';
26
+ export type { WikiEvidence, WikiQueryAnswer, WikiExplanation, WikiGraphPathResult } from './wiki-query.js';
@@ -0,0 +1,18 @@
1
+ export { runCli } from './cli.js';
2
+ export { initProject } from './init.js';
3
+ export { scanRepository } from './scanner.js';
4
+ export { createBootstrapPlan } from './planner.js';
5
+ export { compileWiki } from './compiler.js';
6
+ export { assemblePageContext, assembleAllPageContexts, redactSecretLikeText } from './context-assembler.js';
7
+ export { lintWiki } from './linter.js';
8
+ export { lintDocs } from './docs-linter.js';
9
+ export { publishWiki, rewriteInternalWikiLinks, PUBLISH_TARGETS } from './publisher.js';
10
+ export { loadConfig, DEFAULT_CONFIG } from './config.js';
11
+ export { buildPrompt, buildFoundationPrompt, buildModulePrompt, buildCrossCuttingPrompt } from './prompts.js';
12
+ export { MockLLMProvider, OpenAICompatibleProvider, LLMProviderError, LLM_DEFAULTS, createProvider, resolveProviderConfig, buildRequest } from './llm-provider.js';
13
+ export { detectPageState, extractHumanNotes, injectHumanNotes, preserveHumanNotes } from './page-ownership.js';
14
+ export { FRONTMATTER_POLICIES, isFrontmatterPolicy, stripFrontmatter, applyFrontmatterPolicy, parseFrontmatterPolicy } from './frontmatter.js';
15
+ export { WikiPatchError, validateWikiPatch, parseWikiPatch, synthesizeWikiPage } from './wiki-patch.js';
16
+ export { buildSearchIndex, searchWiki, searchIndex, formatSearchResults, defaultSearchDirForWiki, SEARCH_INDEX_VERSION } from './search.js';
17
+ export { buildWikiQueryAnswer, buildWikiExplanation, findWikiGraphPath, formatWikiQueryAnswer, formatWikiExplanation, formatWikiGraphPath, defaultGraphPathForWiki } from './wiki-query.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE5G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE9G,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEnK,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/G,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/I,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE5I,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function initProject({ repoPath, force, writeAgents }: {
2
+ repoPath?: string;
3
+ force?: boolean;
4
+ writeAgents?: boolean;
5
+ }): Promise<{
6
+ summary: {
7
+ repoPath: string;
8
+ written: any[];
9
+ skipped: any[];
10
+ next_step: string;
11
+ };
12
+ }>;
@@ -0,0 +1,121 @@
1
+ import path from 'node:path';
2
+ import { LLM_DEFAULTS } from './llm-provider.js';
3
+ import { ensureDir, fileExists, writeJson, writeText } from './utils/fs.js';
4
+ const DEFAULT_CONFIG = {
5
+ schema_version: 1,
6
+ role: 'consumer-repository',
7
+ source: {
8
+ repo: '.',
9
+ default_mode: 'bootstrap',
10
+ exclude: [
11
+ '.git/**',
12
+ 'node_modules/**',
13
+ 'dist/**',
14
+ 'build/**',
15
+ 'coverage/**',
16
+ '.llmwiki/run/**',
17
+ '.llmwiki/wiki/**',
18
+ 'tmp/**'
19
+ ],
20
+ suppress_nested_repositories: true
21
+ },
22
+ documentation: {
23
+ ingest: true,
24
+ authority: 'secondary',
25
+ include: ['README.md', 'docs/**/*.md', 'ADR/**/*.md', '.github/**/*.md'],
26
+ exclude: ['CHANGELOG.md', 'docs/archive/**', 'docs/old/**'],
27
+ stale_after_days: 180,
28
+ require_code_validation: true,
29
+ allow_unvalidated_context: true,
30
+ preserve_original_claims: false,
31
+ fail_on_stale_docs: false,
32
+ fail_on_conflicting_docs: true
33
+ },
34
+ compiler: {
35
+ mode: 'deterministic',
36
+ llm: {
37
+ provider: LLM_DEFAULTS.hostedProvider,
38
+ base_url: LLM_DEFAULTS.baseUrl,
39
+ model: LLM_DEFAULTS.model,
40
+ api_key_env: LLM_DEFAULTS.apiKeyEnv,
41
+ system_prompt: LLM_DEFAULTS.systemPrompt,
42
+ temperature: LLM_DEFAULTS.temperature,
43
+ max_output_tokens: LLM_DEFAULTS.maxOutputTokens,
44
+ timeout_ms: LLM_DEFAULTS.timeoutMs,
45
+ retries: LLM_DEFAULTS.retries,
46
+ validation_retries: LLM_DEFAULTS.validationRetries
47
+ }
48
+ },
49
+ wiki: {
50
+ local_dir: '.llmwiki/wiki',
51
+ publish_remote_env: 'LLMWIKI_PUBLISH_REMOTE',
52
+ publish_branch: 'master',
53
+ max_pages: 500,
54
+ preserve_human_sections: true
55
+ },
56
+ publish: {
57
+ target: 'github-wiki',
58
+ wiki: {
59
+ branch: 'master',
60
+ frontmatter: 'provenance'
61
+ },
62
+ pages: {
63
+ branch: 'gh-pages',
64
+ path: '.',
65
+ frontmatter: 'preserve'
66
+ }
67
+ },
68
+ lint: {
69
+ fail_on_errors: true,
70
+ warn_on_orphans: true,
71
+ block_secret_like_content: true,
72
+ broken_links: 'error',
73
+ stale_docs: 'warning',
74
+ contradicted_docs: 'error',
75
+ unvalidated_doc_claims: 'warning'
76
+ }
77
+ };
78
+ const DEFAULT_SCHEMA = `# LLM Wiki Schema\n\nThis file defines how this repository is compiled into GitHub Wiki pages by repo-wiki.\n\n## Source of truth\n\nThe repository at the pinned Git commit is authoritative. Generated wiki pages are derived artifacts.\n\n## Required generated pages\n\n- Home.md\n- _Sidebar.md\n- Index.md\n- Log.md\n- Agent-Context-Pack.md\n- Repository-Overview.md\n- Architecture.md\n- Build-Test-and-Run.md\n- Open-Questions.md\n- Documentation-Debt-Report.md\n\n## Source traversal\n\n- \`source.exclude\` is a path-oriented filter, not a full glob engine.\n- Exact paths and directory-style patterns such as \`tmp/**\` are supported.\n- Nested Git repository/worktree roots are suppressed by default and can be re-enabled with \`source.suppress_nested_repositories=false\`.\n\n## Documentation ingestion\n\nMarkdown documentation is ingested as secondary evidence by default. It can reveal intent and terminology, but operational or behavioral claims should be validated against code, tests, CI, configuration, or generated schemas. Stale or contradicted markdown is reported by \`repo-wiki lint-docs\`.\n\n## Rules\n\n- Prefer updating existing pages over creating new pages.\n- Preserve marked human-maintained sections.\n- Add uncertain claims to Open-Questions.md.\n- Cite source paths for material claims.\n- Do not copy secrets, tokens, private keys, or .env values.\n`;
79
+ const AGENT_POINTER = `# Repository Wiki Knowledge Base\n\nThis repository can be compiled into a GitHub Wiki knowledge base with repo-wiki.\n\nRecommended local bootstrap:\n\n\`\`\`bash\nnpx repo-wiki run --mode bootstrap --repo . --scan .llmwiki/run --plan .llmwiki/bootstrap-plan.json --wiki .llmwiki/wiki\n\`\`\`\n\nBefore non-trivial changes, read the generated wiki entry points when available:\n\n1. .llmwiki/wiki/Agent-Context-Pack.md\n2. .llmwiki/wiki/Index.md\n3. The relevant module page\n4. .llmwiki/wiki/Documentation-Debt-Report.md when docs influenced an answer\n\nSource code at the current commit is authoritative if the wiki is stale.\n`;
80
+ export async function initProject({ repoPath = '.', force = false, writeAgents = false }) {
81
+ const absoluteRepo = path.resolve(repoPath);
82
+ const llmwikiDir = path.join(absoluteRepo, '.llmwiki');
83
+ const configPath = path.join(llmwikiDir, 'config.json');
84
+ const schemaPath = path.join(llmwikiDir, 'schema.md');
85
+ const agentsPath = path.join(absoluteRepo, 'AGENTS.repo-wiki.md');
86
+ const written = [];
87
+ const skipped = [];
88
+ await ensureDir(llmwikiDir);
89
+ if (force || !await fileExists(configPath)) {
90
+ await writeJson(configPath, DEFAULT_CONFIG);
91
+ written.push(path.relative(absoluteRepo, configPath));
92
+ }
93
+ else {
94
+ skipped.push(path.relative(absoluteRepo, configPath));
95
+ }
96
+ if (force || !await fileExists(schemaPath)) {
97
+ await writeText(schemaPath, DEFAULT_SCHEMA);
98
+ written.push(path.relative(absoluteRepo, schemaPath));
99
+ }
100
+ else {
101
+ skipped.push(path.relative(absoluteRepo, schemaPath));
102
+ }
103
+ if (writeAgents) {
104
+ if (force || !await fileExists(agentsPath)) {
105
+ await writeText(agentsPath, AGENT_POINTER);
106
+ written.push(path.relative(absoluteRepo, agentsPath));
107
+ }
108
+ else {
109
+ skipped.push(path.relative(absoluteRepo, agentsPath));
110
+ }
111
+ }
112
+ return {
113
+ summary: {
114
+ repoPath: absoluteRepo,
115
+ written,
116
+ skipped,
117
+ next_step: 'Run repo-wiki run --mode bootstrap --repo . --scan .llmwiki/run --plan .llmwiki/bootstrap-plan.json --wiki .llmwiki/wiki'
118
+ }
119
+ };
120
+ }
121
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function detectLanguage(filePath: any): string;
2
+ export declare function classifyPath(filePath: any): "test" | "ci" | "docs" | "data" | "infra" | "package" | "source";
@@ -0,0 +1,62 @@
1
+ const extensionMap = new Map([
2
+ ['.js', 'JavaScript'],
3
+ ['.mjs', 'JavaScript'],
4
+ ['.cjs', 'JavaScript'],
5
+ ['.jsx', 'JavaScript React'],
6
+ ['.ts', 'TypeScript'],
7
+ ['.tsx', 'TypeScript React'],
8
+ ['.json', 'JSON'],
9
+ ['.md', 'Markdown'],
10
+ ['.yml', 'YAML'],
11
+ ['.yaml', 'YAML'],
12
+ ['.py', 'Python'],
13
+ ['.go', 'Go'],
14
+ ['.rs', 'Rust'],
15
+ ['.java', 'Java'],
16
+ ['.kt', 'Kotlin'],
17
+ ['.rb', 'Ruby'],
18
+ ['.rake', 'Ruby'],
19
+ ['.ru', 'Ruby'],
20
+ ['.gemspec', 'Ruby'],
21
+ ['.php', 'PHP'],
22
+ ['.cs', 'C#'],
23
+ ['.sql', 'SQL'],
24
+ ['.sh', 'Shell'],
25
+ ['.dockerfile', 'Dockerfile']
26
+ ]);
27
+ export function detectLanguage(filePath) {
28
+ const lower = filePath.toLowerCase();
29
+ const base = lower.split(/[\\/]/).pop() || lower;
30
+ if (lower.endsWith('dockerfile') || lower.includes('/dockerfile')) {
31
+ return 'Dockerfile';
32
+ }
33
+ if (base === 'gemfile' || base === 'rakefile') {
34
+ return 'Ruby';
35
+ }
36
+ const ext = lower.includes('.') ? lower.slice(lower.lastIndexOf('.')) : '';
37
+ return extensionMap.get(ext) || 'Text';
38
+ }
39
+ export function classifyPath(filePath) {
40
+ const lower = filePath.toLowerCase();
41
+ const isRubyTestFile = /(?:^|[\\/])spec[\\/].+\.rb$/.test(lower) || /_test\.rb$/.test(lower);
42
+ if (/[\\/]test[\\/]/.test(lower) || /[\\/]tests[\\/]/.test(lower) || /\.(test|spec)\.[mc]?[jt]sx?$/.test(lower) || isRubyTestFile) {
43
+ return 'test';
44
+ }
45
+ if (lower.startsWith('.github/workflows/') || lower.includes('/ci/') || lower.includes('/.github/')) {
46
+ return 'ci';
47
+ }
48
+ if (lower.includes('/docs/') || lower.endsWith('readme.md') || lower.endsWith('.md')) {
49
+ return 'docs';
50
+ }
51
+ if (lower.includes('/migrations/') || lower.includes('/prisma/migrations/') || lower.endsWith('.sql') || lower.endsWith('schema.prisma')) {
52
+ return 'data';
53
+ }
54
+ if (lower.includes('/infra/') || lower.includes('/terraform/') || lower.includes('/helm/') || lower.includes('/k8s/')) {
55
+ return 'infra';
56
+ }
57
+ if (lower.endsWith('package.json') || lower.endsWith('pnpm-lock.yaml') || lower.endsWith('package-lock.json')) {
58
+ return 'package';
59
+ }
60
+ return 'source';
61
+ }
62
+ //# sourceMappingURL=language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language.js","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ type LintIssue = {
2
+ level: 'error' | 'warning';
3
+ code: string;
4
+ message: string;
5
+ };
6
+ type GraphHealthFinding = {
7
+ code: 'GRAPH001' | 'GRAPH002' | 'GRAPH003' | 'GRAPH004';
8
+ severity: 'warning';
9
+ page_or_path: string;
10
+ target: string | null;
11
+ message: string;
12
+ };
13
+ export declare function lintWiki({ wikiDir, scanDir }: {
14
+ wikiDir: string;
15
+ scanDir: string;
16
+ }): Promise<{
17
+ manifest: any;
18
+ issues: LintIssue[];
19
+ summary: {
20
+ wikiDir: string;
21
+ pages: number;
22
+ errors: number;
23
+ warnings: number;
24
+ issues: LintIssue[];
25
+ graph_health: {
26
+ findings: GraphHealthFinding[];
27
+ errors: number;
28
+ warnings: number;
29
+ total: number;
30
+ };
31
+ };
32
+ }>;
33
+ export {};