@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.
Files changed (55) hide show
  1. package/README.md +7 -0
  2. package/dist/extensions/llm-wiki/lib/dashboard-command.js +7 -2
  3. package/dist/extensions/llm-wiki/lib/dashboard.js +1 -1
  4. package/dist/extensions/llm-wiki/lib/guardrails.js +1 -1
  5. package/dist/extensions/llm-wiki/lib/host.js +2 -2
  6. package/dist/extensions/llm-wiki/lib/ingest-worker.js +1 -1
  7. package/dist/extensions/llm-wiki/lib/knowledge-links.js +1 -1
  8. package/dist/extensions/llm-wiki/lib/legacy-repair.js +1 -1
  9. package/dist/extensions/llm-wiki/lib/metadata.js +1 -1
  10. package/dist/extensions/llm-wiki/lib/model-command.js +77 -4
  11. package/dist/extensions/llm-wiki/lib/recall.js +2 -2
  12. package/dist/extensions/llm-wiki/lib/runtime.js +1 -1
  13. package/dist/extensions/llm-wiki/lib/settings-command.js +7 -2
  14. package/dist/extensions/llm-wiki/lib/source-extractors.js +21 -5
  15. package/dist/extensions/llm-wiki/lib/source-packet.js +10 -2
  16. package/dist/extensions/llm-wiki/lib/subagent.js +1 -1
  17. package/dist/extensions/llm-wiki/lib/tools.js +4 -1
  18. package/dist/extensions/llm-wiki/lib/trajectory.js +1 -1
  19. package/dist/extensions/llm-wiki/lib/utils.js +1 -1
  20. package/dist/extensions/llm-wiki/lib/vault-format.js +1 -1
  21. package/dist/extensions/llm-wiki/lib/visible-status.js +1 -1
  22. package/dist/mcp/operations.js +1 -1
  23. package/docs/superpowers/plans/2026-08-29-custom-wiki-page-types.md +378 -0
  24. package/docs/superpowers/plans/2026-08-29-keyless-provider-ingest-fix.md +256 -0
  25. package/docs/superpowers/plans/2026-09-02-wiki-lint-fresh-vault-and-windows-capture-fixes.md +284 -0
  26. package/extensions/llm-wiki/index.ts +1 -1
  27. package/extensions/llm-wiki/lib/bootstrap.ts +2 -2
  28. package/extensions/llm-wiki/lib/dashboard-command.ts +10 -4
  29. package/extensions/llm-wiki/lib/dashboard.ts +1 -1
  30. package/extensions/llm-wiki/lib/embeddings.ts +1 -1
  31. package/extensions/llm-wiki/lib/guardrails.ts +3 -3
  32. package/extensions/llm-wiki/lib/host.ts +4 -4
  33. package/extensions/llm-wiki/lib/ingest-worker.ts +8 -8
  34. package/extensions/llm-wiki/lib/knowledge-links.ts +1 -1
  35. package/extensions/llm-wiki/lib/legacy-repair.ts +4 -4
  36. package/extensions/llm-wiki/lib/metadata.ts +3 -3
  37. package/extensions/llm-wiki/lib/model-command.ts +116 -6
  38. package/extensions/llm-wiki/lib/observation.ts +2 -2
  39. package/extensions/llm-wiki/lib/recall.ts +5 -5
  40. package/extensions/llm-wiki/lib/retro.ts +2 -2
  41. package/extensions/llm-wiki/lib/runtime.ts +2 -2
  42. package/extensions/llm-wiki/lib/settings-command.ts +11 -4
  43. package/extensions/llm-wiki/lib/source-extractors.ts +20 -12
  44. package/extensions/llm-wiki/lib/source-packet.ts +13 -5
  45. package/extensions/llm-wiki/lib/subagent.ts +2 -2
  46. package/extensions/llm-wiki/lib/task-config.ts +1 -1
  47. package/extensions/llm-wiki/lib/tools.ts +7 -4
  48. package/extensions/llm-wiki/lib/trajectories-command.ts +1 -1
  49. package/extensions/llm-wiki/lib/trajectory.ts +3 -3
  50. package/extensions/llm-wiki/lib/utils.ts +2 -2
  51. package/extensions/llm-wiki/lib/vault-format.ts +2 -2
  52. package/extensions/llm-wiki/lib/visible-status.ts +1 -1
  53. package/extensions/llm-wiki/lib/wiki-service.ts +1 -1
  54. package/mcp/operations.ts +4 -4
  55. package/package.json +9 -9
@@ -1,11 +1,11 @@
1
1
  import { join } from "node:path";
2
- import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
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 { type VaultPaths, fmtDate, resolveVaultPaths } from "./utils.js";
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 "@mariozechner/pi-coding-agent";
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(/[\-_./\\]+/g, " ")
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
- paths: VaultPaths,
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 "@mariozechner/pi-coding-agent";
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 { type VaultPaths, fmtDate, readJson, resolveVaultPaths } from "./utils.js";
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 "@mariozechner/pi-coding-agent";
2
- import { TASK_DEFAULTS, type TaskConfig, loadTaskConfig, noticesEnabled } from "./task-config.js";
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 "@mariozechner/pi-coding-agent";
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 "@mariozechner/pi-tui";
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
- "sh",
274
- ["-c", `uvx --from 'markitdown[docx,pdf]' markitdown "${source}" 2>/dev/null || echo ""`],
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
- const markitdown = await exec(
285
- pi,
286
- "sh",
287
- ["-c", `which uvx >/dev/null 2>&1 && echo "yes" || echo "no"`],
288
- { signal },
289
- );
290
- return markitdown.stdout.trim() === "yes";
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("&#")) return String.fromCodePoint(Number.parseInt(entity.slice(2, -1)));
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\/!?][^>]*>/g, "");
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.split("/").pop() || "unknown";
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 "@mariozechner/pi-agent-core";
7
- import type { Api, Message, Model } from "@mariozechner/pi-ai";
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, readFileSync, readdirSync, writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join, relative } from "node:path";
3
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
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, appendEvent, rebuildMetadata, rebuildMetadataLight } from "./metadata.js";
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,4 +1,4 @@
1
- import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
  import { loadTaskConfig, persistTrajectoriesEnabled, trajectoriesEnabled } from "./task-config.js";
3
3
 
4
4
  /**
@@ -1,15 +1,15 @@
1
- import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
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 "@mariozechner/pi-coding-agent";
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, readFileSync, readdirSync } from "node:fs";
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, relativePhysicalPath } from "./utils.js";
9
+ import { relativePhysicalPath, type VaultPaths } from "./utils.js";
10
10
 
11
11
  export type KnowledgeFormat = "legacy" | "okf-0.2";
12
12
 
@@ -1,4 +1,4 @@
1
- import { MODEL_STATUS_KEY, formatActiveModelLabel } from "./model-command.js";
1
+ import { formatActiveModelLabel, MODEL_STATUS_KEY } from "./model-command.js";
2
2
  import type { Runtime } from "./runtime.js";
3
3
  import { noticesEnabled } from "./task-config.js";
4
4
 
@@ -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 "@mariozechner/pi-coding-agent";
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, readJson } from "../extensions/llm-wiki/lib/utils.js";
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.11.7",
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
- "@mariozechner/pi-coding-agent": "*"
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
- "@mariozechner/pi-tui": "0.70.6",
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": "^1.9.4",
96
- "@mariozechner/pi-agent-core": "^0.70.2",
97
- "@mariozechner/pi-ai": "^0.70.2",
98
- "@mariozechner/pi-coding-agent": "^0.70.2",
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": "^22",
101
+ "@types/node": "^26",
102
102
  "@vitest/coverage-v8": "^3.2.4",
103
103
  "astro": "^7.2.9",
104
- "typescript": "^5.7.0",
104
+ "typescript": "^7.0.2",
105
105
  "vitest": "^3.0.0"
106
106
  },
107
107
  "scripts": {