@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.
- package/.llmwiki/schema.md +107 -0
- package/AGENTS.md +42 -0
- package/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/README.md +254 -0
- package/dist/bin/repo-wiki.d.ts +2 -0
- package/dist/bin/repo-wiki.js +7 -0
- package/dist/bin/repo-wiki.js.map +1 -0
- package/dist/src/cli.d.ts +1 -0
- package/dist/src/cli.js +404 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/compiler.d.ts +55 -0
- package/dist/src/compiler.js +2046 -0
- package/dist/src/compiler.js.map +1 -0
- package/dist/src/config.d.ts +63 -0
- package/dist/src/config.js +86 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/context-assembler.d.ts +68 -0
- package/dist/src/context-assembler.js +378 -0
- package/dist/src/context-assembler.js.map +1 -0
- package/dist/src/data-model-signals.d.ts +1 -0
- package/dist/src/data-model-signals.js +13 -0
- package/dist/src/data-model-signals.js.map +1 -0
- package/dist/src/docs-ingestor.d.ts +138 -0
- package/dist/src/docs-ingestor.js +844 -0
- package/dist/src/docs-ingestor.js.map +1 -0
- package/dist/src/docs-linter.d.ts +14 -0
- package/dist/src/docs-linter.js +164 -0
- package/dist/src/docs-linter.js.map +1 -0
- package/dist/src/docs-validation.d.ts +36 -0
- package/dist/src/docs-validation.js +297 -0
- package/dist/src/docs-validation.js.map +1 -0
- package/dist/src/extractors.d.ts +50 -0
- package/dist/src/extractors.js +2275 -0
- package/dist/src/extractors.js.map +1 -0
- package/dist/src/frontmatter.d.ts +46 -0
- package/dist/src/frontmatter.js +377 -0
- package/dist/src/frontmatter.js.map +1 -0
- package/dist/src/index.d.ts +26 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/init.d.ts +12 -0
- package/dist/src/init.js +121 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/language.d.ts +2 -0
- package/dist/src/language.js +62 -0
- package/dist/src/language.js.map +1 -0
- package/dist/src/linter.d.ts +33 -0
- package/dist/src/linter.js +398 -0
- package/dist/src/linter.js.map +1 -0
- package/dist/src/llm-provider.d.ts +267 -0
- package/dist/src/llm-provider.js +474 -0
- package/dist/src/llm-provider.js.map +1 -0
- package/dist/src/page-ownership.d.ts +38 -0
- package/dist/src/page-ownership.js +96 -0
- package/dist/src/page-ownership.js.map +1 -0
- package/dist/src/planner.d.ts +55 -0
- package/dist/src/planner.js +422 -0
- package/dist/src/planner.js.map +1 -0
- package/dist/src/prompts.d.ts +103 -0
- package/dist/src/prompts.js +344 -0
- package/dist/src/prompts.js.map +1 -0
- package/dist/src/publisher.d.ts +68 -0
- package/dist/src/publisher.js +662 -0
- package/dist/src/publisher.js.map +1 -0
- package/dist/src/repository-analysis.d.ts +88 -0
- package/dist/src/repository-analysis.js +485 -0
- package/dist/src/repository-analysis.js.map +1 -0
- package/dist/src/scanner.d.ts +122 -0
- package/dist/src/scanner.js +309 -0
- package/dist/src/scanner.js.map +1 -0
- package/dist/src/search.d.ts +71 -0
- package/dist/src/search.js +410 -0
- package/dist/src/search.js.map +1 -0
- package/dist/src/secret-patterns.d.ts +3 -0
- package/dist/src/secret-patterns.js +14 -0
- package/dist/src/secret-patterns.js.map +1 -0
- package/dist/src/utils/args.d.ts +2 -0
- package/dist/src/utils/args.js +19 -0
- package/dist/src/utils/args.js.map +1 -0
- package/dist/src/utils/dotenv.d.ts +7 -0
- package/dist/src/utils/dotenv.js +73 -0
- package/dist/src/utils/dotenv.js.map +1 -0
- package/dist/src/utils/fs.d.ts +22 -0
- package/dist/src/utils/fs.js +83 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/git.d.ts +13 -0
- package/dist/src/utils/git.js +39 -0
- package/dist/src/utils/git.js.map +1 -0
- package/dist/src/wiki-graph.d.ts +74 -0
- package/dist/src/wiki-graph.js +335 -0
- package/dist/src/wiki-graph.js.map +1 -0
- package/dist/src/wiki-patch.d.ts +152 -0
- package/dist/src/wiki-patch.js +489 -0
- package/dist/src/wiki-patch.js.map +1 -0
- package/dist/src/wiki-query.d.ts +63 -0
- package/dist/src/wiki-query.js +255 -0
- package/dist/src/wiki-query.js.map +1 -0
- package/dist/test/cli.test.d.ts +1 -0
- package/dist/test/cli.test.js +514 -0
- package/dist/test/cli.test.js.map +1 -0
- package/dist/test/compiler-eval.test.d.ts +1 -0
- package/dist/test/compiler-eval.test.js +234 -0
- package/dist/test/compiler-eval.test.js.map +1 -0
- package/dist/test/compiler.test.d.ts +1 -0
- package/dist/test/compiler.test.js +2537 -0
- package/dist/test/compiler.test.js.map +1 -0
- package/dist/test/context-assembler.test.d.ts +1 -0
- package/dist/test/context-assembler.test.js +379 -0
- package/dist/test/context-assembler.test.js.map +1 -0
- package/dist/test/docs-linter.test.d.ts +1 -0
- package/dist/test/docs-linter.test.js +900 -0
- package/dist/test/docs-linter.test.js.map +1 -0
- package/dist/test/dotenv.test.d.ts +1 -0
- package/dist/test/dotenv.test.js +77 -0
- package/dist/test/dotenv.test.js.map +1 -0
- package/dist/test/extractors-go.test.d.ts +1 -0
- package/dist/test/extractors-go.test.js +393 -0
- package/dist/test/extractors-go.test.js.map +1 -0
- package/dist/test/extractors-rust.test.d.ts +1 -0
- package/dist/test/extractors-rust.test.js +219 -0
- package/dist/test/extractors-rust.test.js.map +1 -0
- package/dist/test/extractors-utils.test.d.ts +1 -0
- package/dist/test/extractors-utils.test.js +786 -0
- package/dist/test/extractors-utils.test.js.map +1 -0
- package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.d.ts +1 -0
- package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.js +4 -0
- package/dist/test/fixtures/compiler-e2e/basic-node-service/repo/infra/deploy.js.map +1 -0
- package/dist/test/frontmatter.test.d.ts +1 -0
- package/dist/test/frontmatter.test.js +287 -0
- package/dist/test/frontmatter.test.js.map +1 -0
- package/dist/test/init-planner.test.d.ts +1 -0
- package/dist/test/init-planner.test.js +688 -0
- package/dist/test/init-planner.test.js.map +1 -0
- package/dist/test/linter.test.d.ts +1 -0
- package/dist/test/linter.test.js +426 -0
- package/dist/test/linter.test.js.map +1 -0
- package/dist/test/llm-provider.test.d.ts +1 -0
- package/dist/test/llm-provider.test.js +783 -0
- package/dist/test/llm-provider.test.js.map +1 -0
- package/dist/test/page-ownership.test.d.ts +1 -0
- package/dist/test/page-ownership.test.js +247 -0
- package/dist/test/page-ownership.test.js.map +1 -0
- package/dist/test/publisher.test.d.ts +1 -0
- package/dist/test/publisher.test.js +1297 -0
- package/dist/test/publisher.test.js.map +1 -0
- package/dist/test/repository-analysis.test.d.ts +1 -0
- package/dist/test/repository-analysis.test.js +182 -0
- package/dist/test/repository-analysis.test.js.map +1 -0
- package/dist/test/run-compiled-tests.d.ts +1 -0
- package/dist/test/run-compiled-tests.js +48 -0
- package/dist/test/run-compiled-tests.js.map +1 -0
- package/dist/test/scanner.test.d.ts +1 -0
- package/dist/test/scanner.test.js +551 -0
- package/dist/test/scanner.test.js.map +1 -0
- package/dist/test/search.test.d.ts +1 -0
- package/dist/test/search.test.js +92 -0
- package/dist/test/search.test.js.map +1 -0
- package/dist/test/update-changelog.test.d.ts +1 -0
- package/dist/test/update-changelog.test.js +125 -0
- package/dist/test/update-changelog.test.js.map +1 -0
- package/dist/test/wiki-graph.test.d.ts +1 -0
- package/dist/test/wiki-graph.test.js +164 -0
- package/dist/test/wiki-graph.test.js.map +1 -0
- package/dist/test/wiki-patch.test.d.ts +1 -0
- package/dist/test/wiki-patch.test.js +610 -0
- package/dist/test/wiki-patch.test.js.map +1 -0
- package/dist/test/wiki-query.test.d.ts +1 -0
- package/dist/test/wiki-query.test.js +163 -0
- package/dist/test/wiki-query.test.js.map +1 -0
- package/docs/PLAN.md +993 -0
- package/docs/WHY.md +61 -0
- package/docs/plans/agent-integration.md +85 -0
- package/docs/plans/ci-publishing.md +111 -0
- package/docs/plans/doc-validation.md +92 -0
- package/docs/plans/github-action.md +113 -0
- package/docs/plans/incremental-mode.md +98 -0
- package/docs/plans/karpathy-llm-wiki-alignment.md +84 -0
- package/docs/plans/llm-compiler.md +160 -0
- package/docs/plans/production-scanner.md +104 -0
- package/docs/plans/query-and-file-back.md +103 -0
- package/docs/plans/search-index.md +118 -0
- package/docs/plans/trust-hardening.md +74 -0
- package/docs/plans/wiki-graph.md +183 -0
- package/docs/plans/wiki-health.md +76 -0
- package/package.json +83 -0
- package/prompts/compiler.md +16 -0
- package/prompts/lint.md +18 -0
- package/prompts/page-templates.md +25 -0
- 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"}
|
package/dist/src/init.js
ADDED
|
@@ -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,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 {};
|