@zosmaai/pi-llm-wiki 0.11.7 → 0.12.0
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/README.md +7 -0
- package/dist/extensions/llm-wiki/lib/dashboard-command.js +7 -2
- package/dist/extensions/llm-wiki/lib/dashboard.js +1 -1
- package/dist/extensions/llm-wiki/lib/guardrails.js +1 -1
- package/dist/extensions/llm-wiki/lib/host.js +2 -2
- package/dist/extensions/llm-wiki/lib/ingest-worker.js +1 -1
- package/dist/extensions/llm-wiki/lib/knowledge-links.js +1 -1
- package/dist/extensions/llm-wiki/lib/legacy-repair.js +1 -1
- package/dist/extensions/llm-wiki/lib/metadata.js +1 -1
- package/dist/extensions/llm-wiki/lib/model-command.js +77 -4
- package/dist/extensions/llm-wiki/lib/recall.js +2 -2
- package/dist/extensions/llm-wiki/lib/runtime.js +1 -1
- package/dist/extensions/llm-wiki/lib/settings-command.js +7 -2
- package/dist/extensions/llm-wiki/lib/source-extractors.js +21 -5
- package/dist/extensions/llm-wiki/lib/source-packet.js +10 -2
- package/dist/extensions/llm-wiki/lib/subagent.js +1 -1
- package/dist/extensions/llm-wiki/lib/tools.js +4 -1
- package/dist/extensions/llm-wiki/lib/trajectory.js +1 -1
- package/dist/extensions/llm-wiki/lib/utils.js +1 -1
- package/dist/extensions/llm-wiki/lib/vault-format.js +1 -1
- package/dist/extensions/llm-wiki/lib/visible-status.js +1 -1
- package/dist/mcp/operations.js +1 -1
- package/docs/superpowers/plans/2026-08-29-custom-wiki-page-types.md +378 -0
- package/docs/superpowers/plans/2026-08-29-keyless-provider-ingest-fix.md +256 -0
- package/docs/superpowers/plans/2026-09-02-wiki-lint-fresh-vault-and-windows-capture-fixes.md +284 -0
- package/extensions/llm-wiki/index.ts +1 -1
- package/extensions/llm-wiki/lib/bootstrap.ts +2 -2
- package/extensions/llm-wiki/lib/dashboard-command.ts +10 -4
- package/extensions/llm-wiki/lib/dashboard.ts +1 -1
- package/extensions/llm-wiki/lib/embeddings.ts +1 -1
- package/extensions/llm-wiki/lib/guardrails.ts +3 -3
- package/extensions/llm-wiki/lib/host.ts +4 -4
- package/extensions/llm-wiki/lib/ingest-worker.ts +8 -8
- package/extensions/llm-wiki/lib/knowledge-links.ts +1 -1
- package/extensions/llm-wiki/lib/legacy-repair.ts +4 -4
- package/extensions/llm-wiki/lib/metadata.ts +3 -3
- package/extensions/llm-wiki/lib/model-command.ts +116 -6
- package/extensions/llm-wiki/lib/observation.ts +2 -2
- package/extensions/llm-wiki/lib/recall.ts +5 -5
- package/extensions/llm-wiki/lib/retro.ts +2 -2
- package/extensions/llm-wiki/lib/runtime.ts +2 -2
- package/extensions/llm-wiki/lib/settings-command.ts +11 -4
- package/extensions/llm-wiki/lib/source-extractors.ts +20 -12
- package/extensions/llm-wiki/lib/source-packet.ts +13 -5
- package/extensions/llm-wiki/lib/subagent.ts +2 -2
- package/extensions/llm-wiki/lib/task-config.ts +1 -1
- package/extensions/llm-wiki/lib/tools.ts +7 -4
- package/extensions/llm-wiki/lib/trajectories-command.ts +1 -1
- package/extensions/llm-wiki/lib/trajectory.ts +3 -3
- package/extensions/llm-wiki/lib/utils.ts +2 -2
- package/extensions/llm-wiki/lib/vault-format.ts +2 -2
- package/extensions/llm-wiki/lib/visible-status.ts +1 -1
- package/extensions/llm-wiki/lib/wiki-service.ts +1 -1
- package/mcp/operations.ts +4 -4
- package/package.json +9 -9
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import type { ExtensionAPI
|
|
2
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
4
|
import { scheduleReindex } from "./indexing.js";
|
|
5
5
|
import { createKnowledgeDocument, writeKnowledgeDocumentFile } from "./knowledge-document.js";
|
|
6
6
|
import { appendEvent, rebuildMetadataLight } from "./metadata.js";
|
|
7
7
|
import type { Runtime } from "./runtime.js";
|
|
8
|
-
import {
|
|
8
|
+
import { fmtDate, resolveVaultPaths, type VaultPaths } from "./utils.js";
|
|
9
9
|
import { assertWritableVault, inspectWritableVault } from "./vault-format.js";
|
|
10
10
|
|
|
11
11
|
// ─── Types ─────────────────────────────────────────────
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import type { ExtensionAPI } from "@
|
|
3
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
4
4
|
import { Type } from "typebox";
|
|
5
5
|
import {
|
|
6
|
+
cosineSimilarity,
|
|
6
7
|
type Embedder,
|
|
7
8
|
type EmbeddingStore,
|
|
8
|
-
cosineSimilarity,
|
|
9
9
|
normalizeVector,
|
|
10
10
|
readEmbeddingStore,
|
|
11
11
|
resolveEmbedder,
|
|
@@ -15,11 +15,11 @@ import type { Registry } from "./metadata.js";
|
|
|
15
15
|
import type { Runtime } from "./runtime.js";
|
|
16
16
|
import type { TaskConfig } from "./task-config.js";
|
|
17
17
|
import {
|
|
18
|
-
type VaultPaths,
|
|
19
18
|
getPersonalWikiPaths,
|
|
20
19
|
isPersonalVault,
|
|
21
20
|
readJson,
|
|
22
21
|
resolveVaultPaths,
|
|
22
|
+
type VaultPaths,
|
|
23
23
|
} from "./utils.js";
|
|
24
24
|
import { inspectVaultFormat } from "./vault-format.js";
|
|
25
25
|
|
|
@@ -111,7 +111,7 @@ function normalizeText(value: unknown): string {
|
|
|
111
111
|
return flattenSearchValue(value)
|
|
112
112
|
.toLowerCase()
|
|
113
113
|
.normalize("NFKC")
|
|
114
|
-
.replace(/[
|
|
114
|
+
.replace(/[-_./\\]+/g, " ")
|
|
115
115
|
.replace(/[\p{P}\p{S}]+/gu, " ")
|
|
116
116
|
.replace(/\s+/g, " ")
|
|
117
117
|
.trim();
|
|
@@ -333,7 +333,7 @@ function chunkPreview(heading: string, content: string): string {
|
|
|
333
333
|
function extractExpansionTerms(
|
|
334
334
|
scored: Scored[],
|
|
335
335
|
originalQuery: string,
|
|
336
|
-
|
|
336
|
+
_paths: VaultPaths,
|
|
337
337
|
maxTerms = 6,
|
|
338
338
|
): string[] {
|
|
339
339
|
const topResults = scored.slice(0, Math.min(3, scored.length));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dirname, join, resolve } from "node:path";
|
|
2
|
-
import type { ExtensionAPI } from "@
|
|
2
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
4
|
import { scheduleReindex } from "./indexing.js";
|
|
5
5
|
import { createKnowledgeDocument, writeKnowledgeDocumentFile } from "./knowledge-document.js";
|
|
@@ -7,7 +7,7 @@ import { applyWikilinkGate, buildWikilinkIndex } from "./knowledge-links.js";
|
|
|
7
7
|
import { appendEvent, rebuildMetadataLight } from "./metadata.js";
|
|
8
8
|
import type { Runtime } from "./runtime.js";
|
|
9
9
|
import { loadTaskConfig, resolveWikilinkValidation } from "./task-config.js";
|
|
10
|
-
import {
|
|
10
|
+
import { fmtDate, readJson, resolveVaultPaths, type VaultPaths } from "./utils.js";
|
|
11
11
|
import { assertWritableVault, inspectWritableVault } from "./vault-format.js";
|
|
12
12
|
|
|
13
13
|
// ─── Public API ────────────────────────────────────────
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@
|
|
2
|
-
import { TASK_DEFAULTS, type TaskConfig
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { loadTaskConfig, noticesEnabled, TASK_DEFAULTS, type TaskConfig } from "./task-config.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Background-task runtime for the LLM Wiki (issue #64, part of #63).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
|
-
import type { ExtensionAPI, Theme } from "@
|
|
2
|
+
import type { ExtensionAPI, Theme } from "@earendil-works/pi-coding-agent";
|
|
3
3
|
import {
|
|
4
4
|
Container,
|
|
5
5
|
Input,
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
type SettingsListTheme,
|
|
9
9
|
Spacer,
|
|
10
10
|
Text,
|
|
11
|
-
} from "@
|
|
11
|
+
} from "@earendil-works/pi-tui";
|
|
12
12
|
import type { Runtime } from "./runtime.js";
|
|
13
13
|
import {
|
|
14
|
-
type SettingScope,
|
|
15
14
|
loadTaskConfig,
|
|
16
15
|
loadTaskConfigSources,
|
|
17
16
|
parseModelRef,
|
|
18
17
|
persistSetting,
|
|
18
|
+
type SettingScope,
|
|
19
19
|
trajectoriesEnabled,
|
|
20
20
|
} from "./task-config.js";
|
|
21
21
|
|
|
@@ -49,6 +49,7 @@ interface Ui {
|
|
|
49
49
|
keybindings: unknown,
|
|
50
50
|
done: (result?: unknown) => void,
|
|
51
51
|
) => unknown,
|
|
52
|
+
options?: { overlay?: boolean; overlayOptions?: Record<string, unknown> },
|
|
52
53
|
): Promise<unknown>;
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -363,6 +364,12 @@ function scopeTitle(scope: SettingScope): string {
|
|
|
363
364
|
return `\u{1F9E0} LLM Wiki Settings \u2014 ${scope === "global" ? "Global" : "Project"} (Esc to close)`;
|
|
364
365
|
}
|
|
365
366
|
|
|
367
|
+
// ponytail: overlay options matching pi-blackhole's config modal style
|
|
368
|
+
const OVERLAY_OPTS = {
|
|
369
|
+
overlay: true,
|
|
370
|
+
overlayOptions: { anchor: "center", width: "92%", maxHeight: "95%" },
|
|
371
|
+
};
|
|
372
|
+
|
|
366
373
|
async function showSettingsTui(ui: Ui, cwd: string, scope: SettingScope): Promise<void> {
|
|
367
374
|
if (typeof ui.custom !== "function") {
|
|
368
375
|
ui.notify(
|
|
@@ -445,7 +452,7 @@ async function showSettingsTui(ui: Ui, cwd: string, scope: SettingScope): Promis
|
|
|
445
452
|
);
|
|
446
453
|
screenRef = new SettingsScreen(scopeTitle(writeScope), list);
|
|
447
454
|
return screenRef;
|
|
448
|
-
});
|
|
455
|
+
}, OVERLAY_OPTS);
|
|
449
456
|
}
|
|
450
457
|
|
|
451
458
|
/**
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { open } from "node:fs/promises";
|
|
2
|
-
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
3
2
|
import { NodeHtmlMarkdown } from "node-html-markdown";
|
|
4
3
|
import { type ExecApi, exec } from "./utils.js";
|
|
5
4
|
|
|
@@ -270,8 +269,8 @@ async function extractWithMarkItDown(
|
|
|
270
269
|
if (!(await hasMarkItDown(pi, signal))) return "";
|
|
271
270
|
const mdResult = await exec(
|
|
272
271
|
pi,
|
|
273
|
-
"
|
|
274
|
-
["
|
|
272
|
+
"uvx",
|
|
273
|
+
["--from", "markitdown[docx,pdf]", "markitdown", source],
|
|
275
274
|
{ signal, timeout: markitdownTimeoutMs() },
|
|
276
275
|
);
|
|
277
276
|
return mdResult.stdout.trim() ? mdResult.stdout : "";
|
|
@@ -281,13 +280,21 @@ async function extractWithMarkItDown(
|
|
|
281
280
|
}
|
|
282
281
|
|
|
283
282
|
async function hasMarkItDown(pi: ExecApi, signal?: AbortSignal): Promise<boolean> {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
"
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
283
|
+
// Probe without shell to avoid CWE-78; try which/where then uvx --version
|
|
284
|
+
try {
|
|
285
|
+
await exec(pi, "which", ["uvx"], { signal });
|
|
286
|
+
return true;
|
|
287
|
+
} catch {}
|
|
288
|
+
try {
|
|
289
|
+
await exec(pi, "where", ["uvx"], { signal });
|
|
290
|
+
return true;
|
|
291
|
+
} catch {}
|
|
292
|
+
try {
|
|
293
|
+
await exec(pi, "uvx", ["--version"], { signal });
|
|
294
|
+
return true;
|
|
295
|
+
} catch {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
291
298
|
}
|
|
292
299
|
|
|
293
300
|
async function fetchTextUrl(pi: ExecApi, url: string, signal?: AbortSignal): Promise<string> {
|
|
@@ -350,7 +357,8 @@ function decodeHtmlEntities(text: string): string {
|
|
|
350
357
|
};
|
|
351
358
|
const lower = entity.toLowerCase();
|
|
352
359
|
if (map[lower]) return map[lower];
|
|
353
|
-
if (lower.startsWith("&#"))
|
|
360
|
+
if (lower.startsWith("&#"))
|
|
361
|
+
return String.fromCodePoint(Number.parseInt(entity.slice(2, -1), 10));
|
|
354
362
|
return entity;
|
|
355
363
|
});
|
|
356
364
|
}
|
|
@@ -369,7 +377,7 @@ function xmlToMarkdown(xml: string): string {
|
|
|
369
377
|
let prev = "";
|
|
370
378
|
while (prev !== text) {
|
|
371
379
|
prev = text;
|
|
372
|
-
text = text.replace(/<[a-zA-Z
|
|
380
|
+
text = text.replace(/<[a-zA-Z/!?][^>]*>/g, "");
|
|
373
381
|
}
|
|
374
382
|
text = text.replace(/</g, "");
|
|
375
383
|
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { copyFile } from "node:fs/promises";
|
|
3
|
-
import { extname, join } from "node:path";
|
|
4
|
-
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
3
|
+
import { basename, extname, join } from "node:path";
|
|
5
4
|
import { createKnowledgeDocument, serializeKnowledgeDocument } from "./knowledge-document.js";
|
|
6
5
|
import { appendEvent } from "./metadata.js";
|
|
7
6
|
import {
|
|
8
|
-
type ExtractedContent,
|
|
9
7
|
binaryExtractionFailureMessage,
|
|
10
8
|
detectBinaryMagicBytes,
|
|
9
|
+
type ExtractedContent,
|
|
11
10
|
extractUrlContent,
|
|
12
11
|
fileExtractorFor,
|
|
13
12
|
} from "./source-extractors.js";
|
|
14
13
|
import {
|
|
15
14
|
type ExecApi,
|
|
16
|
-
type VaultPaths,
|
|
17
15
|
exec,
|
|
18
16
|
fmtDate,
|
|
19
17
|
nextSourceId,
|
|
20
18
|
readText,
|
|
19
|
+
type VaultPaths,
|
|
21
20
|
writeJson,
|
|
22
21
|
} from "./utils.js";
|
|
23
22
|
import { assertWritableVault } from "./vault-format.js";
|
|
@@ -112,7 +111,7 @@ function urlCaptureSource(pi: ExecApi, url: string, signal?: AbortSignal): Captu
|
|
|
112
111
|
}
|
|
113
112
|
|
|
114
113
|
function fileCaptureSource(pi: ExecApi, filePath: string, signal?: AbortSignal): CaptureSource {
|
|
115
|
-
const fileName = filePath
|
|
114
|
+
const fileName = originalFileNameForPath(filePath);
|
|
116
115
|
const extractor = fileExtractorFor(filePath);
|
|
117
116
|
const content = extractor.shouldReadText ? readText(filePath) : "";
|
|
118
117
|
|
|
@@ -256,6 +255,15 @@ function originalFileNameForUrl(url: string): string {
|
|
|
256
255
|
return "source.html";
|
|
257
256
|
}
|
|
258
257
|
|
|
258
|
+
/**
|
|
259
|
+
* Original-artifact name for a local file capture. Uses platform basename so
|
|
260
|
+
* Windows absolute paths (drive colon + backslashes) cannot leak into the
|
|
261
|
+
* packet/original file name (issue #204).
|
|
262
|
+
*/
|
|
263
|
+
export function originalFileNameForPath(filePath: string): string {
|
|
264
|
+
return basename(filePath) || "unknown";
|
|
265
|
+
}
|
|
266
|
+
|
|
259
267
|
function contentExtractionFailureMessage(source: string): string {
|
|
260
268
|
return `_Content could not be extracted from ${source}_\n`;
|
|
261
269
|
}
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
type AgentLoopConfig,
|
|
4
4
|
type AgentTool,
|
|
5
5
|
agentLoop,
|
|
6
|
-
} from "@
|
|
7
|
-
import type { Api, Message, Model } from "@
|
|
6
|
+
} from "@earendil-works/pi-agent-core";
|
|
7
|
+
import type { Api, Message, Model } from "@earendil-works/pi-ai";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Thin sub-agent runner for the LLM Wiki background lane (issue #64, part of #63).
|
|
@@ -2,8 +2,8 @@ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import { parse as parseYaml } from "yaml";
|
|
4
4
|
import {
|
|
5
|
-
type HostKind,
|
|
6
5
|
detectHost,
|
|
6
|
+
type HostKind,
|
|
7
7
|
listGlobalSettingsFiles,
|
|
8
8
|
listProjectSettingsFiles,
|
|
9
9
|
resolveGlobalSettingsPath,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { existsSync, mkdirSync,
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join, relative } from "node:path";
|
|
3
|
-
import type { ExtensionAPI } from "@
|
|
3
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
4
4
|
import { Type } from "typebox";
|
|
5
5
|
import { bootstrapVault } from "./bootstrap.js";
|
|
6
6
|
import { launchEmbedPages, reindexEmbeddings, resolveEmbedder } from "./embeddings.js";
|
|
@@ -17,18 +17,18 @@ import {
|
|
|
17
17
|
buildWikilinkIndex,
|
|
18
18
|
} from "./knowledge-links.js";
|
|
19
19
|
import { repairLegacyKnowledgeDocuments } from "./legacy-repair.js";
|
|
20
|
-
import { type Registry,
|
|
20
|
+
import { appendEvent, type Registry, rebuildMetadata, rebuildMetadataLight } from "./metadata.js";
|
|
21
21
|
import type { Runtime } from "./runtime.js";
|
|
22
22
|
import { captureFile, captureText, captureUrl } from "./source-packet.js";
|
|
23
23
|
import { loadTaskConfig, parseModelRef, resolveWikilinkValidation } from "./task-config.js";
|
|
24
24
|
import {
|
|
25
|
-
type VaultPaths,
|
|
26
25
|
detectVaultFormat,
|
|
27
26
|
fmtDate,
|
|
28
27
|
getVaultPaths,
|
|
29
28
|
readJson,
|
|
30
29
|
resolveVaultPaths,
|
|
31
30
|
slugify,
|
|
31
|
+
type VaultPaths,
|
|
32
32
|
writeJson,
|
|
33
33
|
} from "./utils.js";
|
|
34
34
|
import {
|
|
@@ -1013,6 +1013,9 @@ function runWikiLint(paths: VaultPaths, autoFix: boolean): string {
|
|
|
1013
1013
|
// The gap snapshot is generated discovery metadata consumed by wiki_status:
|
|
1014
1014
|
// persist it on every successful lint so status never reports a stale count.
|
|
1015
1015
|
// Corrective actions below (report, event, meta rebuild) stay autoFix-only.
|
|
1016
|
+
// mkdir mirrors the autoFix report write below: on a fresh checkout the
|
|
1017
|
+
// gitignored .discoveries dir does not exist yet (issue #203).
|
|
1018
|
+
mkdirSync(paths.discoveries, { recursive: true });
|
|
1016
1019
|
writeJson(join(paths.discoveries, "gaps.json"), {
|
|
1017
1020
|
gaps,
|
|
1018
1021
|
generated: new Date().toISOString(),
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { existsSync, mkdirSync,
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import type { ExtensionAPI, ExtensionContext } from "@
|
|
3
|
+
import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
4
4
|
import { Type } from "typebox";
|
|
5
5
|
import { appendEvent, rebuildMetadataLight } from "./metadata.js";
|
|
6
6
|
import { searchWikiLayered } from "./recall.js";
|
|
7
7
|
import {
|
|
8
|
-
type VaultPaths,
|
|
9
8
|
fmtDate,
|
|
10
9
|
nextTrajectoryId,
|
|
11
10
|
readJson,
|
|
12
11
|
resolveVaultPaths,
|
|
12
|
+
type VaultPaths,
|
|
13
13
|
writeJson,
|
|
14
14
|
} from "./utils.js";
|
|
15
15
|
import { assertWritableVault, inspectWritableVault } from "./vault-format.js";
|
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
existsSync,
|
|
3
3
|
lstatSync,
|
|
4
4
|
mkdirSync,
|
|
5
|
-
readFileSync,
|
|
6
5
|
readdirSync,
|
|
6
|
+
readFileSync,
|
|
7
7
|
readlinkSync,
|
|
8
8
|
realpathSync,
|
|
9
9
|
renameSync,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from "node:fs";
|
|
13
13
|
import { homedir } from "node:os";
|
|
14
14
|
import { basename, dirname, isAbsolute, join, relative, sep } from "node:path";
|
|
15
|
-
import type { ExtensionAPI } from "@
|
|
15
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Vault utility functions for the LLM Wiki extension.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, lstatSync,
|
|
1
|
+
import { existsSync, lstatSync, readdirSync, readFileSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, join, relative, sep } from "node:path";
|
|
3
3
|
import {
|
|
4
4
|
type KnowledgeDiagnostic,
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
parseKnowledgeDocument,
|
|
7
7
|
parseMarkdownFrontmatter,
|
|
8
8
|
} from "./knowledge-document.js";
|
|
9
|
-
import { type VaultPaths
|
|
9
|
+
import { relativePhysicalPath, type VaultPaths } from "./utils.js";
|
|
10
10
|
|
|
11
11
|
export type KnowledgeFormat = "legacy" | "okf-0.2";
|
|
12
12
|
|
|
@@ -2,8 +2,8 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import type { KnowledgeDiagnostic } from "./knowledge-document.js";
|
|
4
4
|
import type { Registry } from "./metadata.js";
|
|
5
|
-
import { readJson } from "./utils.js";
|
|
6
5
|
import type { VaultPaths } from "./utils.js";
|
|
6
|
+
import { readJson } from "./utils.js";
|
|
7
7
|
import type { KnowledgeFormat } from "./vault-format.js";
|
|
8
8
|
import {
|
|
9
9
|
compareCodePoint,
|
package/mcp/operations.ts
CHANGED
|
@@ -7,23 +7,23 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { join } from "node:path";
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
11
11
|
import { bootstrapVault } from "../extensions/llm-wiki/lib/bootstrap.js";
|
|
12
12
|
import {
|
|
13
|
-
type WikilinkValidationMode,
|
|
14
13
|
applyWikilinkGate,
|
|
15
14
|
buildWikilinkIndex,
|
|
15
|
+
type WikilinkValidationMode,
|
|
16
16
|
} from "../extensions/llm-wiki/lib/knowledge-links.js";
|
|
17
17
|
import { type ProjectionResult, rebuildMetadata } from "../extensions/llm-wiki/lib/metadata.js";
|
|
18
18
|
import { type RecallResult, searchWikiLayered } from "../extensions/llm-wiki/lib/recall.js";
|
|
19
19
|
import { saveInsight } from "../extensions/llm-wiki/lib/retro.js";
|
|
20
20
|
import { captureFile, captureText, captureUrl } from "../extensions/llm-wiki/lib/source-packet.js";
|
|
21
21
|
import { resolveWikilinkValidation } from "../extensions/llm-wiki/lib/task-config.js";
|
|
22
|
-
import { type VaultPaths
|
|
22
|
+
import { readJson, type VaultPaths } from "../extensions/llm-wiki/lib/utils.js";
|
|
23
23
|
import {
|
|
24
|
-
VaultWriteError,
|
|
25
24
|
inspectVaultFormat,
|
|
26
25
|
inspectWritableVault,
|
|
26
|
+
VaultWriteError,
|
|
27
27
|
} from "../extensions/llm-wiki/lib/vault-format.js";
|
|
28
28
|
import { getWikiStatus, searchRegistry } from "../extensions/llm-wiki/lib/wiki-service.js";
|
|
29
29
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zosmaai/pi-llm-wiki",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Self-maintaining LLM Wiki for Pi — Karpathy-pattern knowledge base with immutable source capture, automated ingestion, search, linting, and Obsidian-compatible vault. auto-updating personal & company wiki.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi",
|
|
@@ -75,14 +75,14 @@
|
|
|
75
75
|
]
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
|
-
"@
|
|
78
|
+
"@earendil-works/pi-coding-agent": ">=0.78.1"
|
|
79
79
|
},
|
|
80
80
|
"engines": {
|
|
81
81
|
"node": ">=18"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
84
|
"@cfworker/json-schema": "^4.1.1",
|
|
85
|
-
"@
|
|
85
|
+
"@earendil-works/pi-tui": "0.84.4",
|
|
86
86
|
"@modelcontextprotocol/server": "^2.0.0",
|
|
87
87
|
"mdast-util-from-markdown": "^2.0.3",
|
|
88
88
|
"node-html-markdown": "^2.0.0",
|
|
@@ -92,16 +92,16 @@
|
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@astrojs/starlight": "^0.41.10",
|
|
95
|
-
"@biomejs/biome": "^
|
|
96
|
-
"@
|
|
97
|
-
"@
|
|
98
|
-
"@
|
|
95
|
+
"@biomejs/biome": "^2.5.11",
|
|
96
|
+
"@earendil-works/pi-agent-core": "^0.78.1",
|
|
97
|
+
"@earendil-works/pi-ai": "^0.78.1",
|
|
98
|
+
"@earendil-works/pi-coding-agent": "^0.78.1",
|
|
99
99
|
"@mermaid-js/mermaid-cli": "^11.12.0",
|
|
100
100
|
"@types/mdast": "^4.0.4",
|
|
101
|
-
"@types/node": "^
|
|
101
|
+
"@types/node": "^26",
|
|
102
102
|
"@vitest/coverage-v8": "^3.2.4",
|
|
103
103
|
"astro": "^7.2.9",
|
|
104
|
-
"typescript": "^
|
|
104
|
+
"typescript": "^7.0.2",
|
|
105
105
|
"vitest": "^3.0.0"
|
|
106
106
|
},
|
|
107
107
|
"scripts": {
|