@mfittko/repo-wiki 0.2.4 → 0.2.5
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/CHANGELOG.md +21 -0
- package/README.md +37 -0
- package/dist/src/cli.js +15 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/extension-install.d.ts +11 -0
- package/dist/src/extension-install.js +73 -0
- package/dist/src/extension-install.js.map +1 -0
- package/dist/src/extension.d.ts +10 -0
- package/dist/src/extension.js +370 -0
- package/dist/src/extension.js.map +1 -0
- package/dist/test/extension.test.d.ts +1 -0
- package/dist/test/extension.test.js +404 -0
- package/dist/test/extension.test.js.map +1 -0
- package/package.json +11 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,8 +7,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.5] - 2026-06-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Ship `@mfittko/repo-wiki` as a pi-coding-agent extension.
|
|
14
|
+
- `src/extension.ts` registers a `repo_wiki` slash command and structured tools for scan, plan, compile, lint, publish, search, query, path, and explain.
|
|
15
|
+
- `repo-wiki extension install [--global|--project] [--pi-dir <dir>] [--force]` writes the pi extension shim and copies the bundled `repo-wiki-cli` skill.
|
|
16
|
+
- `package.json` exports `@mfittko/repo-wiki/extension` and includes the extension build artifacts and `skills/` in the npm tarball.
|
|
17
|
+
- `extension install` now refuses to overwrite an existing shim or skill unless `--force` is supplied.
|
|
18
|
+
- Slash command and CLI tool use a quote/escape-aware argv splitter so paths with spaces work correctly.
|
|
19
|
+
- `@earendil-works/pi-coding-agent` moved from devDependencies to dependencies so the extension entrypoint is importable at runtime.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- Update build, CI, and release automation to support the change.
|
|
23
|
+
- Expand automated test coverage for the updated behavior.
|
|
24
|
+
|
|
10
25
|
## [0.2.4] - 2026-06-13
|
|
11
26
|
|
|
27
|
+
### Added
|
|
28
|
+
- Add repository field for npm provenance.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- Update build, CI, and release automation to support the change.
|
|
32
|
+
|
|
12
33
|
### Fixed
|
|
13
34
|
- Add `repository` field to `package.json` so npm provenance validation passes during publish.
|
|
14
35
|
|
package/README.md
CHANGED
|
@@ -58,6 +58,43 @@ npx repo-wiki --help
|
|
|
58
58
|
|
|
59
59
|
No clone or local build step is required for normal downstream consumption. The package guarantees the files listed in `package.json#files`, including `dist/`, `README.md`, `CHANGELOG.md`, `.llmwiki/schema.md`, `.llmwiki/config.json`, and the `docs/`, `prompts/`, and `skills/` trees. Local development from a source clone should use `npm install` instead (the `prepare` script runs the build).
|
|
60
60
|
|
|
61
|
+
## Use as a pi extension
|
|
62
|
+
|
|
63
|
+
`@mfittko/repo-wiki` also ships as a [pi-coding-agent](https://github.com/earendil-works/pi-coding-agent) extension. After installing the npm package, enable the extension and skill:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm install @mfittko/repo-wiki
|
|
67
|
+
npx @mfittko/repo-wiki extension install
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
To install into the global pi agent directory instead of the current project:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx @mfittko/repo-wiki extension install --global
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If a previous shim or skill already exists at the target location, the installer refuses to overwrite it. Re-run with `--force` to replace:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx @mfittko/repo-wiki extension install --force
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Inside `pi`, run `/reload` to load the extension. You can then use the slash command and tools:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
/repo_wiki scan --repo .
|
|
86
|
+
/repo_wiki compile --scan .llmwiki/run --plan .llmwiki/bootstrap-plan.json --wiki .llmwiki/wiki
|
|
87
|
+
/repo_wiki lint --wiki .llmwiki/wiki
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Registered tools include:
|
|
91
|
+
|
|
92
|
+
- `repo_wiki_cli` – run raw CLI arguments
|
|
93
|
+
- `repo_wiki_scan`, `repo_wiki_plan`, `repo_wiki_compile`, `repo_wiki_lint`, `repo_wiki_publish`
|
|
94
|
+
- `repo_wiki_search`, `repo_wiki_query`, `repo_wiki_path`, `repo_wiki_explain`
|
|
95
|
+
|
|
96
|
+
The extension entrypoint is published as `@mfittko/repo-wiki/extension` and the skill is shipped in `skills/repo-wiki-cli/SKILL.md`.
|
|
97
|
+
|
|
61
98
|
## Quick start
|
|
62
99
|
|
|
63
100
|
Initialize a repository for repo-wiki:
|
package/dist/src/cli.js
CHANGED
|
@@ -11,6 +11,7 @@ import { lintDocs } from './docs-linter.js';
|
|
|
11
11
|
import { loadConfig } from './config.js';
|
|
12
12
|
import { publishWiki, PUBLISH_TARGETS, defaultFrontmatterPolicyForTarget } from './publisher.js';
|
|
13
13
|
import { isFrontmatterPolicy, parseFrontmatterPolicy } from './frontmatter.js';
|
|
14
|
+
import { runExtensionInstall } from './extension-install.js';
|
|
14
15
|
const HELP = `
|
|
15
16
|
repo-wiki <command> [options]
|
|
16
17
|
|
|
@@ -27,6 +28,7 @@ Commands:
|
|
|
27
28
|
path Find a deterministic traversal in .llmwiki/graph.json.
|
|
28
29
|
explain Explain a wiki page or graph node with evidence.
|
|
29
30
|
run Run scan -> plan -> lint-docs -> compile -> lint, optionally followed by publish.
|
|
31
|
+
extension Install the pi extension shim and skill (extension install [--global|--project] [--pi-dir <dir>] [--force]).
|
|
30
32
|
|
|
31
33
|
Options:
|
|
32
34
|
--target <github-wiki|github-pages>
|
|
@@ -255,6 +257,19 @@ export async function runCli(argv) {
|
|
|
255
257
|
}
|
|
256
258
|
return;
|
|
257
259
|
}
|
|
260
|
+
case 'extension': {
|
|
261
|
+
const subCommand = rest[0];
|
|
262
|
+
if (subCommand !== 'install') {
|
|
263
|
+
throw new Error(`Unknown extension subcommand: ${subCommand ?? '(none)'}\n\n${HELP}`);
|
|
264
|
+
}
|
|
265
|
+
await runExtensionInstall({
|
|
266
|
+
global: Boolean(options.global),
|
|
267
|
+
project: Boolean(options.project),
|
|
268
|
+
piDir: getStringOption(options, 'pi-dir'),
|
|
269
|
+
force: Boolean(options.force)
|
|
270
|
+
});
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
258
273
|
default:
|
|
259
274
|
throw new Error(`Unknown command: ${command}\n\n${HELP}`);
|
|
260
275
|
}
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ExtensionInstallOptions {
|
|
2
|
+
/** Install into the global pi agent directory instead of the current project. */
|
|
3
|
+
global?: boolean;
|
|
4
|
+
/** Install into the current project's .pi directory (default). */
|
|
5
|
+
project?: boolean;
|
|
6
|
+
/** Override the base .pi directory (defaults to ~/.pi/agent or ./.pi). */
|
|
7
|
+
piDir?: string;
|
|
8
|
+
/** Overwrite an existing shim and skill destination. Defaults to false. */
|
|
9
|
+
force?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function runExtensionInstall(options?: ExtensionInstallOptions): Promise<void>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { mkdir, rm, cp, writeFile, stat } from 'node:fs/promises';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
const SHIM = `// Auto-generated by \`npx @mfittko/repo-wiki extension install\`
|
|
6
|
+
import repoWiki from '@mfittko/repo-wiki/extension';
|
|
7
|
+
|
|
8
|
+
export default repoWiki;
|
|
9
|
+
`;
|
|
10
|
+
export async function runExtensionInstall(options = {}) {
|
|
11
|
+
if (options.global && options.project) {
|
|
12
|
+
const err = new Error('Cannot use --global and --project together; choose one.');
|
|
13
|
+
err.code = 'EXT_INSTALL_SCOPE_CONFLICT';
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
const cwd = process.cwd();
|
|
17
|
+
const baseDir = (() => {
|
|
18
|
+
if (options.piDir) {
|
|
19
|
+
return path.resolve(options.piDir);
|
|
20
|
+
}
|
|
21
|
+
if (options.global) {
|
|
22
|
+
return path.resolve(os.homedir(), '.pi/agent');
|
|
23
|
+
}
|
|
24
|
+
return path.resolve(cwd, '.pi');
|
|
25
|
+
})();
|
|
26
|
+
const extensionsDir = path.join(baseDir, 'extensions');
|
|
27
|
+
const skillsDir = path.join(baseDir, 'skills');
|
|
28
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
29
|
+
// dist/src/extension-install.js -> dist -> package root
|
|
30
|
+
const packageRoot = path.resolve(path.dirname(currentFile), '../..');
|
|
31
|
+
const skillSource = path.join(packageRoot, 'skills', 'repo-wiki-cli');
|
|
32
|
+
await mkdir(extensionsDir, { recursive: true });
|
|
33
|
+
await mkdir(skillsDir, { recursive: true });
|
|
34
|
+
const shimPath = path.join(extensionsDir, 'repo-wiki.ts');
|
|
35
|
+
const skillDestination = path.join(skillsDir, 'repo-wiki-cli');
|
|
36
|
+
// Refuse to clobber existing paths unless --force is set.
|
|
37
|
+
const collisions = [];
|
|
38
|
+
try {
|
|
39
|
+
await stat(shimPath);
|
|
40
|
+
collisions.push(shimPath);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// missing, fine
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
await stat(skillDestination);
|
|
47
|
+
collisions.push(skillDestination);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// missing, fine
|
|
51
|
+
}
|
|
52
|
+
if (collisions.length > 0 && !options.force) {
|
|
53
|
+
const message = `Refusing to overwrite existing path(s):\n${collisions.join('\n')}\nRe-run with \`--force\` to replace.`;
|
|
54
|
+
const err = new Error(message);
|
|
55
|
+
err.code = 'EXT_INSTALL_COLLISION';
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
if (options.force) {
|
|
59
|
+
await rm(shimPath, { recursive: true, force: true });
|
|
60
|
+
}
|
|
61
|
+
await writeFile(shimPath, SHIM, 'utf8');
|
|
62
|
+
await rm(skillDestination, { recursive: true, force: true });
|
|
63
|
+
await cp(skillSource, skillDestination, { recursive: true, preserveTimestamps: true, force: true });
|
|
64
|
+
const summary = {
|
|
65
|
+
installed: true,
|
|
66
|
+
scope: options.piDir ? 'custom' : options.global ? 'global' : 'project',
|
|
67
|
+
shim: shimPath,
|
|
68
|
+
skill: skillDestination,
|
|
69
|
+
reloadHint: 'Run `pi`, then `/reload` to load the repo-wiki extension.',
|
|
70
|
+
};
|
|
71
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=extension-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-install.js","sourceRoot":"","sources":["../../src/extension-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
export declare function truncateForTool(text: string, maxBytes?: number, maxLines?: number): string;
|
|
3
|
+
/**
|
|
4
|
+
* Split an input string into argv tokens while respecting single and double
|
|
5
|
+
* quotes and backslash escapes, matching typical shell behavior. Returns an
|
|
6
|
+
* empty array for an empty/whitespace-only input; callers should substitute
|
|
7
|
+
* their own default when the array is empty.
|
|
8
|
+
*/
|
|
9
|
+
export declare function splitArgs(input: string): string[];
|
|
10
|
+
export default function repoWikiExtension(pi: ExtensionAPI): void;
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { Type } from 'typebox';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { runCli } from './cli.js';
|
|
4
|
+
import { scanRepository } from './scanner.js';
|
|
5
|
+
import { createBootstrapPlan } from './planner.js';
|
|
6
|
+
import { compileWiki } from './compiler.js';
|
|
7
|
+
import { lintWiki } from './linter.js';
|
|
8
|
+
import { publishWiki } from './publisher.js';
|
|
9
|
+
import { buildWikiQueryAnswer, buildWikiExplanation, findWikiGraphPath, defaultGraphPathForWiki, } from './wiki-query.js';
|
|
10
|
+
import { searchWiki, defaultSearchDirForWiki } from './search.js';
|
|
11
|
+
import { loadConfig } from './config.js';
|
|
12
|
+
const repoWikiCommandSchema = Type.Object({
|
|
13
|
+
args: Type.Optional(Type.String({ description: 'Arguments passed to the repo-wiki CLI' })),
|
|
14
|
+
});
|
|
15
|
+
const repoWikiScanSchema = Type.Object({
|
|
16
|
+
repoPath: Type.Optional(Type.String({ description: 'Repository path' })),
|
|
17
|
+
mode: Type.Optional(Type.Union([Type.Literal('bootstrap'), Type.Literal('incremental')], { description: 'Scan mode: bootstrap (full) or incremental (changed paths only)' })),
|
|
18
|
+
outDir: Type.Optional(Type.String({ description: 'Output scan directory' })),
|
|
19
|
+
baseRef: Type.Optional(Type.String()),
|
|
20
|
+
headRef: Type.Optional(Type.String()),
|
|
21
|
+
});
|
|
22
|
+
const repoWikiPlanSchema = Type.Object({
|
|
23
|
+
scanDir: Type.Optional(Type.String({ description: 'Scan directory' })),
|
|
24
|
+
outFile: Type.Optional(Type.String({ description: 'Plan output file' })),
|
|
25
|
+
});
|
|
26
|
+
const repoWikiCompileSchema = Type.Object({
|
|
27
|
+
repoPath: Type.Optional(Type.String({ description: 'Repository path for config' })),
|
|
28
|
+
scanDir: Type.Optional(Type.String()),
|
|
29
|
+
planFile: Type.Optional(Type.String()),
|
|
30
|
+
wikiDir: Type.Optional(Type.String()),
|
|
31
|
+
});
|
|
32
|
+
const repoWikiLintSchema = Type.Object({
|
|
33
|
+
wikiDir: Type.Optional(Type.String()),
|
|
34
|
+
scanDir: Type.Optional(Type.String()),
|
|
35
|
+
});
|
|
36
|
+
const repoWikiPublishSchema = Type.Object({
|
|
37
|
+
wikiDir: Type.Optional(Type.String()),
|
|
38
|
+
remote: Type.Optional(Type.String()),
|
|
39
|
+
branch: Type.Optional(Type.String()),
|
|
40
|
+
dryRun: Type.Optional(Type.Boolean()),
|
|
41
|
+
});
|
|
42
|
+
const repoWikiQuerySchema = Type.Object({
|
|
43
|
+
question: Type.String({ description: 'Question to answer from the wiki' }),
|
|
44
|
+
wikiDir: Type.Optional(Type.String()),
|
|
45
|
+
graphPath: Type.Optional(Type.String()),
|
|
46
|
+
limit: Type.Optional(Type.Number({ default: 5 })),
|
|
47
|
+
});
|
|
48
|
+
const repoWikiPathSchema = Type.Object({
|
|
49
|
+
from: Type.String({ description: 'Start node or page' }),
|
|
50
|
+
to: Type.String({ description: 'End node or page' }),
|
|
51
|
+
wikiDir: Type.Optional(Type.String({ description: 'Wiki directory' })),
|
|
52
|
+
graphPath: Type.Optional(Type.String()),
|
|
53
|
+
});
|
|
54
|
+
const repoWikiExplainSchema = Type.Object({
|
|
55
|
+
target: Type.String({ description: 'Page or node to explain' }),
|
|
56
|
+
wikiDir: Type.Optional(Type.String()),
|
|
57
|
+
graphPath: Type.Optional(Type.String()),
|
|
58
|
+
});
|
|
59
|
+
const repoWikiSearchSchema = Type.Object({
|
|
60
|
+
query: Type.String({ description: 'Search query' }),
|
|
61
|
+
wikiDir: Type.Optional(Type.String()),
|
|
62
|
+
limit: Type.Optional(Type.Number({ default: 10 })),
|
|
63
|
+
});
|
|
64
|
+
export function truncateForTool(text, maxBytes = 50000, maxLines = 2000) {
|
|
65
|
+
const marker = '\n\n[Output truncated]';
|
|
66
|
+
const markerBytes = Buffer.byteLength(marker, 'utf8');
|
|
67
|
+
const targetBytes = Math.max(0, maxBytes - markerBytes);
|
|
68
|
+
const lines = text.split('\n');
|
|
69
|
+
if (lines.length > maxLines || Buffer.byteLength(text, 'utf8') > maxBytes) {
|
|
70
|
+
const head = lines.slice(0, maxLines);
|
|
71
|
+
let joined = head.join('\n');
|
|
72
|
+
while (Buffer.byteLength(joined, 'utf8') > targetBytes && head.length > 1) {
|
|
73
|
+
head.pop();
|
|
74
|
+
joined = head.join('\n');
|
|
75
|
+
}
|
|
76
|
+
// Hard-truncate any remaining single oversized line to honour the budget.
|
|
77
|
+
while (Buffer.byteLength(joined, 'utf8') > targetBytes) {
|
|
78
|
+
const buf = Buffer.from(joined, 'utf8');
|
|
79
|
+
joined = buf.subarray(0, Math.max(0, targetBytes - 1)).toString('utf8');
|
|
80
|
+
joined = joined.replace(/\uFFFD+$/, '');
|
|
81
|
+
}
|
|
82
|
+
return `${joined}${marker}`;
|
|
83
|
+
}
|
|
84
|
+
return text;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Split an input string into argv tokens while respecting single and double
|
|
88
|
+
* quotes and backslash escapes, matching typical shell behavior. Returns an
|
|
89
|
+
* empty array for an empty/whitespace-only input; callers should substitute
|
|
90
|
+
* their own default when the array is empty.
|
|
91
|
+
*/
|
|
92
|
+
export function splitArgs(input) {
|
|
93
|
+
const tokens = [];
|
|
94
|
+
let current = '';
|
|
95
|
+
let inSingle = false;
|
|
96
|
+
let inDouble = false;
|
|
97
|
+
let escape = false;
|
|
98
|
+
for (const ch of input) {
|
|
99
|
+
if (escape) {
|
|
100
|
+
current += ch;
|
|
101
|
+
escape = false;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (ch === '\\' && !inSingle) {
|
|
105
|
+
escape = true;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (ch === "'" && !inDouble) {
|
|
109
|
+
inSingle = !inSingle;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (ch === '"' && !inSingle) {
|
|
113
|
+
inDouble = !inDouble;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (/\s/.test(ch) && !inSingle && !inDouble) {
|
|
117
|
+
if (current.length > 0) {
|
|
118
|
+
tokens.push(current);
|
|
119
|
+
current = '';
|
|
120
|
+
}
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
current += ch;
|
|
124
|
+
}
|
|
125
|
+
if (escape) {
|
|
126
|
+
throw new Error('Unterminated backslash escape');
|
|
127
|
+
}
|
|
128
|
+
if (inSingle || inDouble) {
|
|
129
|
+
throw new Error(`Unterminated ${inSingle ? 'single' : 'double'} quote`);
|
|
130
|
+
}
|
|
131
|
+
if (current.length > 0) {
|
|
132
|
+
tokens.push(current);
|
|
133
|
+
}
|
|
134
|
+
return tokens;
|
|
135
|
+
}
|
|
136
|
+
async function runCliIsolated(argv) {
|
|
137
|
+
const previousExitCode = process.exitCode;
|
|
138
|
+
process.exitCode = undefined;
|
|
139
|
+
try {
|
|
140
|
+
await runCli(argv);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
process.exitCode = previousExitCode;
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
const leaked = process.exitCode;
|
|
147
|
+
process.exitCode = previousExitCode;
|
|
148
|
+
if (leaked !== undefined && leaked !== 0) {
|
|
149
|
+
throw new Error(`repo-wiki CLI exited with status ${leaked}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export default function repoWikiExtension(pi) {
|
|
153
|
+
function notify(ctx, message, type = 'info') {
|
|
154
|
+
if (ctx.ui?.notify) {
|
|
155
|
+
ctx.ui.notify(message, type);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
pi.registerCommand('repo_wiki', {
|
|
159
|
+
description: 'Run a repo-wiki CLI command',
|
|
160
|
+
handler: async (args, ctx) => {
|
|
161
|
+
const tokens = args.trim() ? splitArgs(args) : ['--help'];
|
|
162
|
+
try {
|
|
163
|
+
await runCliIsolated(tokens);
|
|
164
|
+
notify(ctx, 'repo-wiki command finished', 'info');
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
168
|
+
notify(ctx, `repo-wiki command failed: ${message}`, 'error');
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
pi.registerTool({
|
|
174
|
+
name: 'repo_wiki_cli',
|
|
175
|
+
label: 'Repo Wiki CLI',
|
|
176
|
+
description: 'Run a repo-wiki CLI subcommand by passing raw arguments.',
|
|
177
|
+
promptSnippet: 'Run repo-wiki CLI commands inside pi.',
|
|
178
|
+
promptGuidelines: ['Use repo_wiki_cli when the user asks for repo-wiki CLI behavior and structured tool arguments are not needed.'],
|
|
179
|
+
parameters: repoWikiCommandSchema,
|
|
180
|
+
async execute(_toolCallId, params) {
|
|
181
|
+
const tokens = params.args?.trim() ? splitArgs(params.args) : ['--help'];
|
|
182
|
+
await runCliIsolated(tokens);
|
|
183
|
+
return { content: [{ type: 'text', text: 'repo-wiki CLI command finished' }], details: {} };
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
pi.registerTool({
|
|
187
|
+
name: 'repo_wiki_scan',
|
|
188
|
+
label: 'Repo Wiki Scan',
|
|
189
|
+
description: 'Scan a repository into source cards and a manifest.',
|
|
190
|
+
promptSnippet: 'Scan a repository for repo-wiki.',
|
|
191
|
+
promptGuidelines: ['Use repo_wiki_scan before planning or compiling a wiki.'],
|
|
192
|
+
parameters: repoWikiScanSchema,
|
|
193
|
+
async execute(_toolCallId, params) {
|
|
194
|
+
const result = await scanRepository({
|
|
195
|
+
mode: params.mode ?? 'bootstrap',
|
|
196
|
+
repoPath: params.repoPath || '.',
|
|
197
|
+
outDir: params.outDir || '.llmwiki/run',
|
|
198
|
+
baseRef: params.baseRef,
|
|
199
|
+
headRef: params.headRef,
|
|
200
|
+
});
|
|
201
|
+
const text = JSON.stringify(result.summary, null, 2);
|
|
202
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result.summary };
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
pi.registerTool({
|
|
206
|
+
name: 'repo_wiki_plan',
|
|
207
|
+
label: 'Repo Wiki Plan',
|
|
208
|
+
description: 'Create a bootstrap or incremental wiki compilation plan.',
|
|
209
|
+
promptSnippet: 'Create a repo-wiki page plan.',
|
|
210
|
+
promptGuidelines: ['Use repo_wiki_plan after scan and before compile.'],
|
|
211
|
+
parameters: repoWikiPlanSchema,
|
|
212
|
+
async execute(_toolCallId, params) {
|
|
213
|
+
const result = await createBootstrapPlan({
|
|
214
|
+
scanDir: params.scanDir || '.llmwiki/run',
|
|
215
|
+
outFile: params.outFile || '.llmwiki/bootstrap-plan.json',
|
|
216
|
+
});
|
|
217
|
+
const text = JSON.stringify(result.summary, null, 2);
|
|
218
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result.summary };
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
pi.registerTool({
|
|
222
|
+
name: 'repo_wiki_compile',
|
|
223
|
+
label: 'Repo Wiki Compile',
|
|
224
|
+
description: 'Generate local wiki markdown from a scan and plan.',
|
|
225
|
+
promptSnippet: 'Compile a repo-wiki from scan and plan.',
|
|
226
|
+
promptGuidelines: ['Use repo_wiki_compile after scan and plan.'],
|
|
227
|
+
parameters: repoWikiCompileSchema,
|
|
228
|
+
async execute(_toolCallId, params) {
|
|
229
|
+
const repoPath = params.repoPath || '.';
|
|
230
|
+
const config = await loadConfig(repoPath);
|
|
231
|
+
const result = await compileWiki({
|
|
232
|
+
scanDir: params.scanDir || '.llmwiki/run',
|
|
233
|
+
planFile: params.planFile || '.llmwiki/bootstrap-plan.json',
|
|
234
|
+
wikiDir: params.wikiDir || '.llmwiki/wiki',
|
|
235
|
+
config,
|
|
236
|
+
});
|
|
237
|
+
const text = JSON.stringify(result.summary, null, 2);
|
|
238
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result.summary };
|
|
239
|
+
},
|
|
240
|
+
});
|
|
241
|
+
pi.registerTool({
|
|
242
|
+
name: 'repo_wiki_lint',
|
|
243
|
+
label: 'Repo Wiki Lint',
|
|
244
|
+
description: 'Validate generated wiki pages.',
|
|
245
|
+
promptSnippet: 'Lint a repo-wiki.',
|
|
246
|
+
promptGuidelines: ['Use repo_wiki_lint after compile to validate the wiki.'],
|
|
247
|
+
parameters: repoWikiLintSchema,
|
|
248
|
+
async execute(_toolCallId, params) {
|
|
249
|
+
const result = await lintWiki({
|
|
250
|
+
wikiDir: params.wikiDir || '.llmwiki/wiki',
|
|
251
|
+
scanDir: params.scanDir || '.llmwiki/run',
|
|
252
|
+
});
|
|
253
|
+
const text = JSON.stringify(result.summary, null, 2);
|
|
254
|
+
const isError = result.summary.errors > 0;
|
|
255
|
+
if (isError) {
|
|
256
|
+
throw new Error(`Wiki lint failed with ${result.summary.errors} error(s)\n${truncateForTool(text)}`);
|
|
257
|
+
}
|
|
258
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result.summary };
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
pi.registerTool({
|
|
262
|
+
name: 'repo_wiki_publish',
|
|
263
|
+
label: 'Repo Wiki Publish',
|
|
264
|
+
description: 'Push local wiki pages to GitHub Wiki.',
|
|
265
|
+
promptSnippet: 'Publish a repo-wiki to GitHub Wiki.',
|
|
266
|
+
promptGuidelines: ['Use repo_wiki_publish only when the user asks to publish and a remote is configured.'],
|
|
267
|
+
parameters: repoWikiPublishSchema,
|
|
268
|
+
async execute(_toolCallId, params) {
|
|
269
|
+
const wikiDir = params.wikiDir || '.llmwiki/wiki';
|
|
270
|
+
const config = await loadConfig(path.dirname(path.dirname(wikiDir)));
|
|
271
|
+
const target = 'github-wiki';
|
|
272
|
+
const branchFromConfig = config.publish?.wiki?.branch;
|
|
273
|
+
const result = await publishWiki({
|
|
274
|
+
wikiDir,
|
|
275
|
+
remote: params.remote,
|
|
276
|
+
target,
|
|
277
|
+
branch: params.branch || branchFromConfig,
|
|
278
|
+
pagesPath: '.',
|
|
279
|
+
dryRun: Boolean(params.dryRun),
|
|
280
|
+
frontmatterPolicy: 'provenance',
|
|
281
|
+
});
|
|
282
|
+
const text = JSON.stringify(result.summary, null, 2);
|
|
283
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result.summary };
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
pi.registerTool({
|
|
287
|
+
name: 'repo_wiki_search',
|
|
288
|
+
label: 'Repo Wiki Search',
|
|
289
|
+
description: 'Search local wiki pages with the offline index.',
|
|
290
|
+
promptSnippet: 'Search the repo-wiki.',
|
|
291
|
+
promptGuidelines: ['Use repo_wiki_search to find wiki pages by keyword.'],
|
|
292
|
+
parameters: repoWikiSearchSchema,
|
|
293
|
+
async execute(_toolCallId, params) {
|
|
294
|
+
const wikiDir = params.wikiDir || '.llmwiki/wiki';
|
|
295
|
+
const result = await searchWiki({
|
|
296
|
+
query: params.query,
|
|
297
|
+
wikiDir,
|
|
298
|
+
outDir: defaultSearchDirForWiki(wikiDir),
|
|
299
|
+
limit: params.limit ?? 10,
|
|
300
|
+
});
|
|
301
|
+
const text = JSON.stringify({ query: result.summary.query, totalResults: result.summary.totalResults, results: result.results }, null, 2);
|
|
302
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result };
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
pi.registerTool({
|
|
306
|
+
name: 'repo_wiki_query',
|
|
307
|
+
label: 'Repo Wiki Query',
|
|
308
|
+
description: 'Answer a question from wiki search and graph evidence.',
|
|
309
|
+
promptSnippet: 'Query the repo-wiki for an answer.',
|
|
310
|
+
promptGuidelines: ['Use repo_wiki_query for evidence-backed answers about the repository.'],
|
|
311
|
+
parameters: repoWikiQuerySchema,
|
|
312
|
+
async execute(_toolCallId, params) {
|
|
313
|
+
const wikiDir = params.wikiDir || '.llmwiki/wiki';
|
|
314
|
+
const result = await buildWikiQueryAnswer({
|
|
315
|
+
question: params.question,
|
|
316
|
+
wikiDir,
|
|
317
|
+
graphPath: params.graphPath || defaultGraphPathForWiki(wikiDir),
|
|
318
|
+
outDir: defaultSearchDirForWiki(wikiDir),
|
|
319
|
+
limit: params.limit ?? 5,
|
|
320
|
+
});
|
|
321
|
+
const text = JSON.stringify(result, null, 2);
|
|
322
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result };
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
pi.registerTool({
|
|
326
|
+
name: 'repo_wiki_path',
|
|
327
|
+
label: 'Repo Wiki Path',
|
|
328
|
+
description: 'Find a deterministic graph path between two wiki nodes.',
|
|
329
|
+
promptSnippet: 'Find a path in the repo-wiki graph.',
|
|
330
|
+
promptGuidelines: ['Use repo_wiki_path to explain relationships between wiki pages.'],
|
|
331
|
+
parameters: repoWikiPathSchema,
|
|
332
|
+
async execute(_toolCallId, params) {
|
|
333
|
+
const wikiDir = params.wikiDir || '.llmwiki/wiki';
|
|
334
|
+
const result = await findWikiGraphPath({
|
|
335
|
+
from: params.from,
|
|
336
|
+
to: params.to,
|
|
337
|
+
graphPath: params.graphPath || defaultGraphPathForWiki(wikiDir),
|
|
338
|
+
});
|
|
339
|
+
const text = JSON.stringify(result, null, 2);
|
|
340
|
+
if (!result.found) {
|
|
341
|
+
throw new Error(`No path found from ${params.from} to ${params.to} (reason: ${result.reason ?? 'unknown'})`);
|
|
342
|
+
}
|
|
343
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result };
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
pi.registerTool({
|
|
347
|
+
name: 'repo_wiki_explain',
|
|
348
|
+
label: 'Repo Wiki Explain',
|
|
349
|
+
description: 'Explain a wiki page or graph node with evidence.',
|
|
350
|
+
promptSnippet: 'Explain a repo-wiki node or page.',
|
|
351
|
+
promptGuidelines: ['Use repo_wiki_explain to summarize a specific wiki topic.'],
|
|
352
|
+
parameters: repoWikiExplainSchema,
|
|
353
|
+
async execute(_toolCallId, params) {
|
|
354
|
+
const wikiDir = params.wikiDir || '.llmwiki/wiki';
|
|
355
|
+
const result = await buildWikiExplanation({
|
|
356
|
+
target: params.target,
|
|
357
|
+
wikiDir,
|
|
358
|
+
graphPath: params.graphPath || defaultGraphPathForWiki(wikiDir),
|
|
359
|
+
outDir: defaultSearchDirForWiki(wikiDir),
|
|
360
|
+
});
|
|
361
|
+
const text = JSON.stringify(result, null, 2);
|
|
362
|
+
if (!result.found) {
|
|
363
|
+
const detail = result.explanation ? `: ${result.explanation}` : '';
|
|
364
|
+
throw new Error(`Could not explain ${params.target}${detail}`);
|
|
365
|
+
}
|
|
366
|
+
return { content: [{ type: 'text', text: truncateForTool(text) }], details: result };
|
|
367
|
+
},
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,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,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC,CAAC;CAC3F,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACxE,IAAI,EAAE,IAAI,CAAC,QAAQ,CACjB,IAAI,CAAC,KAAK,CACR,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EACxD,EAAE,WAAW,EAAE,iEAAiE,EAAE,CACnF,CACF;IACD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IAC1E,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACvC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CAClD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACxD,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IACpD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACtE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;IAC/D,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IACnD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI;IAC7E,MAAM,MAAM,GAAG,wBAAwB,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1E,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,0EAA0E;QAC1E,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,IAAI,CAAC;YACd,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,QAAQ,GAAG,CAAC,QAAQ,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAc;IAC1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG,gBAAgB,CAAC;QACpC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAChC,OAAO,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAgB;IACxD,SAAS,MAAM,CAAC,GAAqB,EAAE,OAAe,EAAE,OAAqC,MAAM;QACjG,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE;QAC9B,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,GAAqB,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,EAAE,4BAA4B,EAAE,MAAM,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,CAAC,GAAG,EAAE,6BAA6B,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC7D,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,0DAA0D;QACvE,aAAa,EAAE,uCAAuC;QACtD,gBAAgB,EAAE,CAAC,+GAA+G,CAAC;QACnI,UAAU,EAAE,qBAAqB;QACjC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA4C;YACrE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzE,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC9F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,qDAAqD;QAClE,aAAa,EAAE,kCAAkC;QACjD,gBAAgB,EAAE,CAAC,yDAAyD,CAAC;QAC7E,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAyC;YAClE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;gBAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,GAAG;gBAChC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc;gBACvC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,0DAA0D;QACvE,aAAa,EAAE,+BAA+B;QAC9C,gBAAgB,EAAE,CAAC,mDAAmD,CAAC;QACvE,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAyC;YAClE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;gBACvC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,cAAc;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,8BAA8B;aAC1D,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,oDAAoD;QACjE,aAAa,EAAE,yCAAyC;QACxD,gBAAgB,EAAE,CAAC,4CAA4C,CAAC;QAChE,UAAU,EAAE,qBAAqB;QACjC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA4C;YACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,cAAc;gBACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,8BAA8B;gBAC3D,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;gBAC1C,MAAM;aACP,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,gCAAgC;QAC7C,aAAa,EAAE,mBAAmB;QAClC,gBAAgB,EAAE,CAAC,wDAAwD,CAAC;QAC5E,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAyC;YAClE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;gBAC5B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;gBAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,cAAc;aAC1C,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAI,MAAM,CAAC,OAAO,CAAC,MAAiB,GAAG,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,aAAa,EAAE,qCAAqC;QACpD,gBAAgB,EAAE,CAAC,sFAAsF,CAAC;QAC1G,UAAU,EAAE,qBAAqB;QACjC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA4C;YACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,aAAa,CAAC;YAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;gBAC/B,OAAO;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,gBAAgB;gBACzC,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC9B,iBAAiB,EAAE,YAAY;aAChC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/F,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,iDAAiD;QAC9D,aAAa,EAAE,uBAAuB;QACtC,gBAAgB,EAAE,CAAC,qDAAqD,CAAC;QACzE,UAAU,EAAE,oBAAoB;QAChC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA2C;YACpE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO;gBACP,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC;gBACxC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;aAC1B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1I,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvF,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,wDAAwD;QACrE,aAAa,EAAE,oCAAoC;QACnD,gBAAgB,EAAE,CAAC,uEAAuE,CAAC;QAC3F,UAAU,EAAE,mBAAmB;QAC/B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA0C;YACnE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;gBACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO;gBACP,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,uBAAuB,CAAC,OAAO,CAAC;gBAC/D,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC;gBACxC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;aACzB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvF,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,yDAAyD;QACtE,aAAa,EAAE,qCAAqC;QACpD,gBAAgB,EAAE,CAAC,iEAAiE,CAAC;QACrF,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAyC;YAClE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;gBACrC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,uBAAuB,CAAC,OAAO,CAAC;aAChE,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,aAAa,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAC5F,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvF,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,CAAC;QACd,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,kDAAkD;QAC/D,aAAa,EAAE,mCAAmC;QAClD,gBAAgB,EAAE,CAAC,2DAA2D,CAAC;QAC/E,UAAU,EAAE,qBAAqB;QACjC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAA4C;YACrE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;gBACxC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO;gBACP,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,uBAAuB,CAAC,OAAO,CAAC;gBAC/D,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC;aACzC,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QACvF,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtemp, rm, stat, readFile } from 'node:fs/promises';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import repoWikiExtension, { splitArgs } from '../src/extension.js';
|
|
8
|
+
import { runExtensionInstall } from '../src/extension-install.js';
|
|
9
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
10
|
+
const packageRoot = path.resolve(path.dirname(currentFile), '../..');
|
|
11
|
+
function createFakeExtensionApi() {
|
|
12
|
+
const commands = [];
|
|
13
|
+
const tools = [];
|
|
14
|
+
const events = [];
|
|
15
|
+
const pi = {
|
|
16
|
+
registerCommand: (name, options) => {
|
|
17
|
+
commands.push({ name, description: options.description });
|
|
18
|
+
},
|
|
19
|
+
registerTool: (tool) => {
|
|
20
|
+
tools.push({ name: tool.name, label: tool.label, description: tool.description });
|
|
21
|
+
},
|
|
22
|
+
on: (name, handler) => {
|
|
23
|
+
events.push({ name, handler });
|
|
24
|
+
},
|
|
25
|
+
registerShortcut: () => { },
|
|
26
|
+
registerFlag: () => { },
|
|
27
|
+
getFlag: () => undefined,
|
|
28
|
+
registerMessageRenderer: () => { },
|
|
29
|
+
sendMessage: () => { },
|
|
30
|
+
sendUserMessage: () => { },
|
|
31
|
+
appendEntry: () => { },
|
|
32
|
+
setSessionName: () => { },
|
|
33
|
+
getSessionName: () => undefined,
|
|
34
|
+
setLabel: () => { },
|
|
35
|
+
exec: async () => ({ code: 0, stdout: '', stderr: '' }),
|
|
36
|
+
getActiveTools: () => [],
|
|
37
|
+
getAllTools: () => [],
|
|
38
|
+
setActiveTools: () => { },
|
|
39
|
+
setModel: async () => false,
|
|
40
|
+
getThinkingLevel: () => 'off',
|
|
41
|
+
setThinkingLevel: () => { },
|
|
42
|
+
events: { on: () => { }, emit: () => { } },
|
|
43
|
+
registerProvider: () => { },
|
|
44
|
+
unregisterProvider: () => { },
|
|
45
|
+
getCommands: () => commands,
|
|
46
|
+
};
|
|
47
|
+
return { pi, commands, tools, events };
|
|
48
|
+
}
|
|
49
|
+
test('repoWikiExtension registers the repo_wiki command and expected tools', () => {
|
|
50
|
+
const { pi, commands, tools } = createFakeExtensionApi();
|
|
51
|
+
repoWikiExtension(pi);
|
|
52
|
+
const commandNames = commands.map((c) => c.name);
|
|
53
|
+
assert.ok(commandNames.includes('repo_wiki'), `expected repo_wiki command, got ${commandNames.join(', ')}`);
|
|
54
|
+
const toolNames = tools.map((t) => t.name);
|
|
55
|
+
for (const name of [
|
|
56
|
+
'repo_wiki_cli',
|
|
57
|
+
'repo_wiki_scan',
|
|
58
|
+
'repo_wiki_plan',
|
|
59
|
+
'repo_wiki_compile',
|
|
60
|
+
'repo_wiki_lint',
|
|
61
|
+
'repo_wiki_publish',
|
|
62
|
+
'repo_wiki_search',
|
|
63
|
+
'repo_wiki_query',
|
|
64
|
+
'repo_wiki_path',
|
|
65
|
+
'repo_wiki_explain',
|
|
66
|
+
]) {
|
|
67
|
+
assert.ok(toolNames.includes(name), `expected tool ${name}, got ${toolNames.join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
test('extension install writes shim and skill to custom piDir', async () => {
|
|
71
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-install-'));
|
|
72
|
+
try {
|
|
73
|
+
await runExtensionInstall({ piDir: tmpDir });
|
|
74
|
+
const shimPath = path.join(tmpDir, 'extensions', 'repo-wiki.ts');
|
|
75
|
+
const skillPath = path.join(tmpDir, 'skills', 'repo-wiki-cli', 'SKILL.md');
|
|
76
|
+
assert.ok(await stat(shimPath).then(() => true, () => false), 'shim not written');
|
|
77
|
+
const shim = await readFile(shimPath, 'utf8');
|
|
78
|
+
assert.ok(shim.includes("@mfittko/repo-wiki/extension"), 'shim does not import extension export');
|
|
79
|
+
assert.ok(shim.includes('export default repoWiki'), 'shim does not re-export default');
|
|
80
|
+
assert.ok(await stat(skillPath).then(() => true, () => false), 'skill not copied');
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
test('extension entrypoint and skill files are listed in package files and published tarball', async () => {
|
|
87
|
+
const files = new Set([
|
|
88
|
+
path.join(packageRoot, 'dist/src/extension.js'),
|
|
89
|
+
path.join(packageRoot, 'dist/src/extension.d.ts'),
|
|
90
|
+
path.join(packageRoot, 'skills/repo-wiki-cli/SKILL.md'),
|
|
91
|
+
]);
|
|
92
|
+
for (const file of files) {
|
|
93
|
+
assert.ok(await stat(file).then(() => true, () => false), `missing ${path.relative(packageRoot, file)}`);
|
|
94
|
+
}
|
|
95
|
+
// Verify the files are listed in package.json#files and included in the published tarball.
|
|
96
|
+
const pkg = JSON.parse(await readFile(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
97
|
+
assert.ok(Array.isArray(pkg.files), 'package.json#files missing');
|
|
98
|
+
for (const required of ['dist/', 'skills/', 'dist/src/extension.js', 'dist/src/extension.d.ts']) {
|
|
99
|
+
assert.ok(pkg.files?.some((entry) => entry === required || required.startsWith(entry)), `package.json#files does not include ${required}`);
|
|
100
|
+
}
|
|
101
|
+
// Verify npm pack --dry-run tarball contains the extension assets.
|
|
102
|
+
const { stdout, stderr } = await execFileAsync('npm', ['pack', '--dry-run'], { cwd: packageRoot });
|
|
103
|
+
const combined = `${stdout}\n${stderr}`;
|
|
104
|
+
const lines = combined.trim().split(/\r?\n/).filter((line) => line.trim().length > 0);
|
|
105
|
+
const tarballs = lines.filter((line) => line.trim().endsWith('.tgz'));
|
|
106
|
+
const tarball = tarballs[tarballs.length - 1];
|
|
107
|
+
assert.ok(tarball && tarball.length > 0, `npm pack produced no tarball name; lines: ${lines.join(' | ')}`);
|
|
108
|
+
const required = [
|
|
109
|
+
'dist/src/extension.js',
|
|
110
|
+
'dist/src/extension.d.ts',
|
|
111
|
+
'skills/repo-wiki-cli/SKILL.md',
|
|
112
|
+
];
|
|
113
|
+
for (const path of required) {
|
|
114
|
+
assert.ok(combined.includes(path), `tarball missing ${path}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
import { execFile } from 'node:child_process';
|
|
118
|
+
import { promisify } from 'node:util';
|
|
119
|
+
import { writeFile, mkdir } from 'node:fs/promises';
|
|
120
|
+
const execFileAsync = promisify(execFile);
|
|
121
|
+
function createCapturingExtensionApi() {
|
|
122
|
+
const commands = [];
|
|
123
|
+
const tools = [];
|
|
124
|
+
const pi = {
|
|
125
|
+
registerCommand: (name, options) => {
|
|
126
|
+
commands.push({ name, options });
|
|
127
|
+
},
|
|
128
|
+
registerTool: (tool) => {
|
|
129
|
+
tools.push(tool);
|
|
130
|
+
},
|
|
131
|
+
on: () => { },
|
|
132
|
+
registerShortcut: () => { },
|
|
133
|
+
registerFlag: () => { },
|
|
134
|
+
getFlag: () => undefined,
|
|
135
|
+
registerMessageRenderer: () => { },
|
|
136
|
+
sendMessage: () => { },
|
|
137
|
+
sendUserMessage: () => { },
|
|
138
|
+
appendEntry: () => { },
|
|
139
|
+
setSessionName: () => { },
|
|
140
|
+
getSessionName: () => undefined,
|
|
141
|
+
setLabel: () => { },
|
|
142
|
+
exec: async () => ({ code: 0, stdout: '', stderr: '' }),
|
|
143
|
+
getActiveTools: () => [],
|
|
144
|
+
getAllTools: () => [],
|
|
145
|
+
setActiveTools: () => { },
|
|
146
|
+
setModel: async () => false,
|
|
147
|
+
getThinkingLevel: () => 'off',
|
|
148
|
+
setThinkingLevel: () => { },
|
|
149
|
+
events: { on: () => { }, emit: () => { } },
|
|
150
|
+
registerProvider: () => { },
|
|
151
|
+
unregisterProvider: () => { },
|
|
152
|
+
};
|
|
153
|
+
return { pi, commands, tools };
|
|
154
|
+
}
|
|
155
|
+
async function createGitRepo(parentDir) {
|
|
156
|
+
const repoDir = path.join(parentDir, 'repo');
|
|
157
|
+
const srcDir = path.join(repoDir, 'src');
|
|
158
|
+
await mkdir(srcDir, { recursive: true });
|
|
159
|
+
await writeFile(path.join(srcDir, 'index.js'), 'export function hello() { return 1; }\n', 'utf8');
|
|
160
|
+
await execFileAsync('git', ['init'], { cwd: repoDir });
|
|
161
|
+
await execFileAsync('git', ['config', 'user.email', 'test@example.com'], { cwd: repoDir });
|
|
162
|
+
await execFileAsync('git', ['config', 'user.name', 'Test User'], { cwd: repoDir });
|
|
163
|
+
await execFileAsync('git', ['add', '.'], { cwd: repoDir });
|
|
164
|
+
await execFileAsync('git', ['commit', '-m', 'init'], { cwd: repoDir });
|
|
165
|
+
return repoDir;
|
|
166
|
+
}
|
|
167
|
+
test('extension tool execute covers scan, plan, compile, lint, search, query, explain, path, publish dry-run, and cli fallback', async () => {
|
|
168
|
+
const { pi, tools, commands } = createCapturingExtensionApi();
|
|
169
|
+
repoWikiExtension(pi);
|
|
170
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-e2e-'));
|
|
171
|
+
try {
|
|
172
|
+
const repoDir = await createGitRepo(tmpDir);
|
|
173
|
+
const scanDir = path.join(tmpDir, 'scan');
|
|
174
|
+
const planFile = path.join(tmpDir, 'plan.json');
|
|
175
|
+
const wikiDir = path.join(tmpDir, 'wiki');
|
|
176
|
+
const getTool = (name) => {
|
|
177
|
+
const tool = tools.find((t) => t.name === name);
|
|
178
|
+
assert.ok(tool, `tool ${name} not registered`);
|
|
179
|
+
return tool;
|
|
180
|
+
};
|
|
181
|
+
const scanResult = await getTool('repo_wiki_scan').execute('id', { repoPath: repoDir, mode: 'bootstrap', outDir: scanDir });
|
|
182
|
+
const scanSummary = scanResult.details;
|
|
183
|
+
assert.equal(scanSummary.mode, 'bootstrap');
|
|
184
|
+
assert.equal(scanSummary.files, 1);
|
|
185
|
+
const planResult = await getTool('repo_wiki_plan').execute('id', { scanDir, outFile: planFile });
|
|
186
|
+
assert.ok(planResult.details.pages >= 1);
|
|
187
|
+
const compileResult = await getTool('repo_wiki_compile').execute('id', { repoPath: repoDir, scanDir, planFile, wikiDir });
|
|
188
|
+
assert.ok(compileResult.details.pages >= 1);
|
|
189
|
+
const lintResult = await getTool('repo_wiki_lint').execute('id', { wikiDir, scanDir });
|
|
190
|
+
assert.equal(typeof lintResult.details.errors, 'number');
|
|
191
|
+
const searchResult = await getTool('repo_wiki_search').execute('id', { query: 'function', wikiDir, limit: 5 });
|
|
192
|
+
assert.ok(searchResult.details.results);
|
|
193
|
+
const queryResult = await getTool('repo_wiki_query').execute('id', { question: 'what does hello do?', wikiDir, limit: 5 });
|
|
194
|
+
assert.ok(queryResult.details.answer);
|
|
195
|
+
const explainResult = await getTool('repo_wiki_explain').execute('id', { target: 'Module-index-js.md', wikiDir });
|
|
196
|
+
assert.equal(explainResult.details.found, true);
|
|
197
|
+
const pathResult = await getTool('repo_wiki_path').execute('id', { from: 'src/index.js', to: 'Module-index-js.md', wikiDir });
|
|
198
|
+
assert.equal(pathResult.details.found, true);
|
|
199
|
+
const publishResult = await getTool('repo_wiki_publish').execute('id', { wikiDir, dryRun: true });
|
|
200
|
+
assert.ok(['published', 'skipped-no-remote', 'dry-run'].includes(publishResult.details.status));
|
|
201
|
+
await getTool('repo_wiki_cli').execute('id', { args: `scan --repo ${repoDir} --out ${path.join(tmpDir, 'cli-scan')}` });
|
|
202
|
+
const repoWikiCmd = commands.find((c) => c.name === 'repo_wiki');
|
|
203
|
+
assert.ok(repoWikiCmd);
|
|
204
|
+
await repoWikiCmd.options.handler('--help', { ui: { notify: () => { } } });
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
test('extension install supports global scope', async () => {
|
|
211
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-global-'));
|
|
212
|
+
try {
|
|
213
|
+
await runExtensionInstall({ global: true, piDir: tmpDir });
|
|
214
|
+
const shimPath = path.join(tmpDir, 'extensions', 'repo-wiki.ts');
|
|
215
|
+
assert.ok(await stat(shimPath).then(() => true, () => false));
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
test('extension install refuses to overwrite existing files without --force', async () => {
|
|
222
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-refuse-'));
|
|
223
|
+
try {
|
|
224
|
+
await runExtensionInstall({ piDir: tmpDir });
|
|
225
|
+
// Second run without --force must throw EXT_INSTALL_COLLISION.
|
|
226
|
+
await assert.rejects(() => runExtensionInstall({ piDir: tmpDir }), (err) => err.code === 'EXT_INSTALL_COLLISION');
|
|
227
|
+
// The pre-existing shim must remain untouched.
|
|
228
|
+
const shim = await readFile(path.join(tmpDir, 'extensions', 'repo-wiki.ts'), 'utf8');
|
|
229
|
+
assert.ok(shim.includes('@mfittko/repo-wiki/extension'), 'shim should not have been clobbered');
|
|
230
|
+
// With --force, install succeeds and replaces both paths.
|
|
231
|
+
await runExtensionInstall({ piDir: tmpDir, force: true });
|
|
232
|
+
const shimAfter = await readFile(path.join(tmpDir, 'extensions', 'repo-wiki.ts'), 'utf8');
|
|
233
|
+
assert.ok(shimAfter.includes('@mfittko/repo-wiki/extension'));
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
test('repo_wiki_lint tool throws when wiki has lint errors', async () => {
|
|
240
|
+
const { pi, tools } = createCapturingExtensionApi();
|
|
241
|
+
repoWikiExtension(pi);
|
|
242
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-lint-'));
|
|
243
|
+
try {
|
|
244
|
+
const wikiDir = path.join(tmpDir, 'wiki');
|
|
245
|
+
const scanDir = path.join(tmpDir, 'scan');
|
|
246
|
+
await mkdir(wikiDir, { recursive: true });
|
|
247
|
+
await mkdir(scanDir, { recursive: true });
|
|
248
|
+
await writeFile(path.join(scanDir, 'manifest.json'), JSON.stringify({ files: [] }), 'utf8');
|
|
249
|
+
await writeFile(path.join(wikiDir, 'Orphan.md'), '# Orphan\n', 'utf8');
|
|
250
|
+
const lintTool = tools.find((t) => t.name === 'repo_wiki_lint');
|
|
251
|
+
await assert.rejects(async () => { await lintTool.execute('id', { wikiDir, scanDir }); }, /Wiki lint failed/);
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
test('repo_wiki_path tool throws when no path exists', async () => {
|
|
258
|
+
const { pi, tools } = createCapturingExtensionApi();
|
|
259
|
+
repoWikiExtension(pi);
|
|
260
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-path-'));
|
|
261
|
+
try {
|
|
262
|
+
const wikiDir = path.join(tmpDir, 'wiki');
|
|
263
|
+
await mkdir(wikiDir, { recursive: true });
|
|
264
|
+
await writeFile(path.join(tmpDir, 'graph.json'), JSON.stringify({ schema_version: 1, nodes: [], edges: [] }), 'utf8');
|
|
265
|
+
const pathTool = tools.find((t) => t.name === 'repo_wiki_path');
|
|
266
|
+
await assert.rejects(async () => { await pathTool.execute('id', { from: 'missing-a', to: 'missing-b', wikiDir, graphPath: path.join(tmpDir, 'graph.json') }); }, /No path found/);
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
test('repo_wiki_explain tool throws when target is not found', async () => {
|
|
273
|
+
const { pi, tools } = createCapturingExtensionApi();
|
|
274
|
+
repoWikiExtension(pi);
|
|
275
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-explain-'));
|
|
276
|
+
try {
|
|
277
|
+
const wikiDir = path.join(tmpDir, 'wiki');
|
|
278
|
+
await mkdir(wikiDir, { recursive: true });
|
|
279
|
+
const explainTool = tools.find((t) => t.name === 'repo_wiki_explain');
|
|
280
|
+
await assert.rejects(async () => { await explainTool.execute('id', { target: 'missing-target', wikiDir }); }, /Could not explain/);
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
test('repo_wiki command handler propagates CLI errors', async () => {
|
|
287
|
+
const { pi, commands } = createCapturingExtensionApi();
|
|
288
|
+
repoWikiExtension(pi);
|
|
289
|
+
const cmd = commands.find((c) => c.name === 'repo_wiki');
|
|
290
|
+
await assert.rejects(async () => {
|
|
291
|
+
await cmd.options.handler('this-command-does-not-exist-fortest', { ui: { notify: () => { } } });
|
|
292
|
+
}, /Unknown command/);
|
|
293
|
+
});
|
|
294
|
+
test('extension install defaults to project scope in cwd', async () => {
|
|
295
|
+
const { pi } = createCapturingExtensionApi();
|
|
296
|
+
repoWikiExtension(pi);
|
|
297
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-project-'));
|
|
298
|
+
const originalCwd = process.cwd();
|
|
299
|
+
try {
|
|
300
|
+
process.chdir(tmpDir);
|
|
301
|
+
await runExtensionInstall({ project: true });
|
|
302
|
+
const extensionFile = path.join(tmpDir, '.pi', 'extensions', 'repo-wiki.ts');
|
|
303
|
+
const skillFile = path.join(tmpDir, '.pi', 'skills', 'repo-wiki-cli', 'SKILL.md');
|
|
304
|
+
assert.ok(await stat(extensionFile).then(() => true, () => false), 'project shim not written');
|
|
305
|
+
assert.ok(await stat(skillFile).then(() => true, () => false), 'project skill not copied');
|
|
306
|
+
}
|
|
307
|
+
finally {
|
|
308
|
+
process.chdir(originalCwd);
|
|
309
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
test('splitArgs parses simple and quoted arguments', () => {
|
|
313
|
+
assert.deepEqual(splitArgs('scan --repo .'), ['scan', '--repo', '.']);
|
|
314
|
+
assert.deepEqual(splitArgs(' scan --repo . '), ['scan', '--repo', '.']);
|
|
315
|
+
assert.deepEqual(splitArgs('compile --wiki "./my wiki"'), ['compile', '--wiki', './my wiki']);
|
|
316
|
+
assert.deepEqual(splitArgs("compile --wiki 'my wiki'"), ['compile', '--wiki', 'my wiki']);
|
|
317
|
+
assert.deepEqual(splitArgs('a "b c" d'), ['a', 'b c', 'd']);
|
|
318
|
+
assert.deepEqual(splitArgs(''), []);
|
|
319
|
+
assert.deepEqual(splitArgs(' '), []);
|
|
320
|
+
});
|
|
321
|
+
test('runExtensionInstall rejects --global combined with --project', async () => {
|
|
322
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-scope-conflict-'));
|
|
323
|
+
try {
|
|
324
|
+
await assert.rejects(() => runExtensionInstall({ global: true, project: true, piDir: tmpDir }), (err) => err.code === 'EXT_INSTALL_SCOPE_CONFLICT');
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
test('truncateForTool hard-truncates a single oversized line', async () => {
|
|
331
|
+
const { truncateForTool } = await import('../src/extension.js');
|
|
332
|
+
const longLine = 'x'.repeat(200);
|
|
333
|
+
const out = truncateForTool(longLine, 100, 10);
|
|
334
|
+
// Output must respect maxBytes and end with truncation marker.
|
|
335
|
+
assert.ok(Buffer.byteLength(out, 'utf8') <= 100, 'output should fit within maxBytes');
|
|
336
|
+
assert.ok(out.includes('[Output truncated]'), 'missing truncation marker');
|
|
337
|
+
});
|
|
338
|
+
test('repo_wiki_lint error includes summary text when errors present', async () => {
|
|
339
|
+
const { pi, tools } = createCapturingExtensionApi();
|
|
340
|
+
repoWikiExtension(pi);
|
|
341
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-lint-summary-'));
|
|
342
|
+
try {
|
|
343
|
+
const wikiDir = path.join(tmpDir, 'wiki');
|
|
344
|
+
const scanDir = path.join(tmpDir, 'scan');
|
|
345
|
+
await mkdir(wikiDir, { recursive: true });
|
|
346
|
+
await mkdir(scanDir, { recursive: true });
|
|
347
|
+
await writeFile(path.join(scanDir, 'manifest.json'), JSON.stringify({ files: [] }), 'utf8');
|
|
348
|
+
await writeFile(path.join(wikiDir, 'Orphan.md'), '# Orphan\n', 'utf8');
|
|
349
|
+
const lintTool = tools.find((t) => t.name === 'repo_wiki_lint');
|
|
350
|
+
try {
|
|
351
|
+
await lintTool.execute('id', { wikiDir, scanDir });
|
|
352
|
+
assert.fail('expected lint to throw');
|
|
353
|
+
}
|
|
354
|
+
catch (err) {
|
|
355
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
356
|
+
assert.match(msg, /error\(s\)/);
|
|
357
|
+
assert.ok(msg.length > 50, `expected detailed error message, got: ${msg.slice(0, 200)}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
finally {
|
|
361
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
test('runExtensionInstall reports scope custom when only --pi-dir is set', async () => {
|
|
365
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-scope-'));
|
|
366
|
+
try {
|
|
367
|
+
// Capture stdout to read summary JSON.
|
|
368
|
+
const originalLog = console.log;
|
|
369
|
+
let captured = '';
|
|
370
|
+
console.log = (msg) => { captured = msg; };
|
|
371
|
+
try {
|
|
372
|
+
await runExtensionInstall({ piDir: tmpDir });
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
console.log = originalLog;
|
|
376
|
+
}
|
|
377
|
+
const summary = JSON.parse(captured);
|
|
378
|
+
assert.equal(summary.scope, 'custom');
|
|
379
|
+
}
|
|
380
|
+
finally {
|
|
381
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
test('splitArgs rejects unterminated quotes and backslash escapes', () => {
|
|
385
|
+
assert.throws(() => splitArgs('a "b'), /Unterminated double quote/);
|
|
386
|
+
assert.throws(() => splitArgs("a 'b"), /Unterminated single quote/);
|
|
387
|
+
assert.throws(() => splitArgs('foo\\'), /Unterminated backslash escape/);
|
|
388
|
+
});
|
|
389
|
+
test('extension install --force replaces an existing shim directory', async () => {
|
|
390
|
+
const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'repo-wiki-ext-force-dir-'));
|
|
391
|
+
try {
|
|
392
|
+
await runExtensionInstall({ piDir: tmpDir });
|
|
393
|
+
const shimPath = path.join(tmpDir, 'extensions', 'repo-wiki.ts');
|
|
394
|
+
await rm(shimPath, { force: true });
|
|
395
|
+
await mkdir(shimPath, { recursive: true });
|
|
396
|
+
await runExtensionInstall({ piDir: tmpDir, force: true });
|
|
397
|
+
const shim = await readFile(shimPath, 'utf8');
|
|
398
|
+
assert.ok(shim.includes('@mfittko/repo-wiki/extension'));
|
|
399
|
+
}
|
|
400
|
+
finally {
|
|
401
|
+
await rm(tmpDir, { recursive: true, force: true });
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
//# sourceMappingURL=extension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../test/extension.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mfittko/repo-wiki",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Node.js CLI and library for compiling any Git repository and its validated documentation into a GitHub Wiki knowledge base.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
".": {
|
|
12
12
|
"types": "./dist/src/index.d.ts",
|
|
13
13
|
"import": "./dist/src/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./extension": {
|
|
16
|
+
"types": "./dist/src/extension.d.ts",
|
|
17
|
+
"import": "./dist/src/extension.js"
|
|
14
18
|
}
|
|
15
19
|
},
|
|
16
20
|
"files": [
|
|
@@ -23,7 +27,9 @@
|
|
|
23
27
|
"CHANGELOG.md",
|
|
24
28
|
"README.md",
|
|
25
29
|
"AGENTS.md",
|
|
26
|
-
"LICENSE"
|
|
30
|
+
"LICENSE",
|
|
31
|
+
"dist/src/extension.js",
|
|
32
|
+
"dist/src/extension.d.ts"
|
|
27
33
|
],
|
|
28
34
|
"engines": {
|
|
29
35
|
"node": ">=24"
|
|
@@ -74,7 +80,9 @@
|
|
|
74
80
|
},
|
|
75
81
|
"types": "./dist/src/index.d.ts",
|
|
76
82
|
"dependencies": {
|
|
77
|
-
"typescript": "^5.8.3"
|
|
83
|
+
"typescript": "^5.8.3",
|
|
84
|
+
"typebox": "1.1.38",
|
|
85
|
+
"@earendil-works/pi-coding-agent": "^0.79.3"
|
|
78
86
|
},
|
|
79
87
|
"devDependencies": {
|
|
80
88
|
"@types/node": "^22.15.21",
|