pi-para 0.6.6 → 0.7.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 (140) hide show
  1. package/ARCHITECTURE.md +4 -6
  2. package/CHANGELOG.md +22 -0
  3. package/CONFIGURATION.md +1 -16
  4. package/README.md +2 -13
  5. package/SETUP.md +1 -7
  6. package/STRUCTURE.md +7 -18
  7. package/dist/cli-legacy.d.ts +2 -1
  8. package/dist/cli-legacy.d.ts.map +1 -1
  9. package/dist/cli-legacy.js +13 -25
  10. package/dist/cli-legacy.js.map +1 -1
  11. package/dist/cli.d.ts +2 -24
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +29 -271
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands.d.ts.map +1 -1
  16. package/dist/commands.js +1 -28
  17. package/dist/commands.js.map +1 -1
  18. package/dist/config.d.ts +1 -5
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +0 -5
  21. package/dist/config.js.map +1 -1
  22. package/dist/context.d.ts.map +1 -1
  23. package/dist/context.js +2 -1
  24. package/dist/context.js.map +1 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +6 -64
  27. package/dist/index.js.map +1 -1
  28. package/dist/link-utils.d.ts +1 -1
  29. package/dist/link-utils.js +1 -1
  30. package/dist/scheduler/index.d.ts.map +1 -1
  31. package/dist/scheduler/index.js +9 -3
  32. package/dist/scheduler/index.js.map +1 -1
  33. package/dist/settings.d.ts +0 -3
  34. package/dist/settings.d.ts.map +1 -1
  35. package/dist/settings.js +0 -11
  36. package/dist/settings.js.map +1 -1
  37. package/dist/store.d.ts +11 -0
  38. package/dist/store.d.ts.map +1 -1
  39. package/dist/store.js +48 -16
  40. package/dist/store.js.map +1 -1
  41. package/dist/tools/edit-read.d.ts +18 -0
  42. package/dist/tools/edit-read.d.ts.map +1 -0
  43. package/dist/tools/edit-read.js +161 -0
  44. package/dist/tools/edit-read.js.map +1 -0
  45. package/dist/tools/ingest.d.ts +12 -0
  46. package/dist/tools/ingest.d.ts.map +1 -0
  47. package/dist/tools/ingest.js +48 -0
  48. package/dist/tools/ingest.js.map +1 -0
  49. package/dist/tools/lint.d.ts +10 -0
  50. package/dist/tools/lint.d.ts.map +1 -0
  51. package/dist/tools/lint.js +57 -0
  52. package/dist/tools/lint.js.map +1 -0
  53. package/dist/tools/migrate.d.ts +6 -0
  54. package/dist/tools/migrate.d.ts.map +1 -0
  55. package/dist/tools/migrate.js +36 -0
  56. package/dist/tools/migrate.js.map +1 -0
  57. package/dist/tools/move.d.ts +9 -0
  58. package/dist/tools/move.d.ts.map +1 -0
  59. package/dist/tools/move.js +61 -0
  60. package/dist/tools/move.js.map +1 -0
  61. package/dist/tools/query.d.ts +12 -0
  62. package/dist/tools/query.d.ts.map +1 -0
  63. package/dist/tools/query.js +47 -0
  64. package/dist/tools/query.js.map +1 -0
  65. package/dist/tools/schemas.d.ts +109 -0
  66. package/dist/tools/schemas.d.ts.map +1 -0
  67. package/dist/tools/schemas.js +80 -0
  68. package/dist/tools/schemas.js.map +1 -0
  69. package/dist/tools/shared.d.ts +14 -0
  70. package/dist/tools/shared.d.ts.map +1 -0
  71. package/dist/tools/shared.js +25 -0
  72. package/dist/tools/shared.js.map +1 -0
  73. package/dist/tools/summarize.d.ts +8 -0
  74. package/dist/tools/summarize.d.ts.map +1 -0
  75. package/dist/tools/summarize.js +82 -0
  76. package/dist/tools/summarize.js.map +1 -0
  77. package/dist/tools/write.d.ts +23 -0
  78. package/dist/tools/write.d.ts.map +1 -0
  79. package/dist/tools/write.js +215 -0
  80. package/dist/tools/write.js.map +1 -0
  81. package/dist/tools.d.ts +1 -8
  82. package/dist/tools.d.ts.map +1 -1
  83. package/dist/tools.js +13 -795
  84. package/dist/tools.js.map +1 -1
  85. package/dist/wiki-tool-guidance.js +2 -2
  86. package/dist/wiki-tool-guidance.js.map +1 -1
  87. package/package.json +2 -6
  88. package/src/cli-legacy.ts +14 -26
  89. package/src/cli.ts +29 -293
  90. package/src/commands.ts +0 -21
  91. package/src/config.ts +1 -6
  92. package/src/context.ts +2 -1
  93. package/src/index.ts +5 -66
  94. package/src/link-utils.ts +1 -1
  95. package/src/scheduler/index.ts +9 -3
  96. package/src/settings.ts +0 -14
  97. package/src/store.ts +52 -15
  98. package/src/tools/edit-read.ts +193 -0
  99. package/src/tools/ingest.ts +63 -0
  100. package/src/tools/lint.ts +74 -0
  101. package/src/tools/migrate.ts +44 -0
  102. package/src/tools/move.ts +79 -0
  103. package/src/tools/query.ts +63 -0
  104. package/src/tools/schemas.ts +157 -0
  105. package/src/tools/shared.ts +35 -0
  106. package/src/tools/summarize.ts +89 -0
  107. package/src/tools/write.ts +252 -0
  108. package/src/tools.ts +18 -1046
  109. package/src/wiki-tool-guidance.ts +2 -2
  110. package/dist/daemon.d.ts +0 -49
  111. package/dist/daemon.d.ts.map +0 -1
  112. package/dist/daemon.js +0 -226
  113. package/dist/daemon.js.map +0 -1
  114. package/dist/link-discovery.d.ts +0 -40
  115. package/dist/link-discovery.d.ts.map +0 -1
  116. package/dist/link-discovery.js +0 -122
  117. package/dist/link-discovery.js.map +0 -1
  118. package/dist/maintainer.d.ts +0 -24
  119. package/dist/maintainer.d.ts.map +0 -1
  120. package/dist/maintainer.js +0 -358
  121. package/dist/maintainer.js.map +0 -1
  122. package/dist/watcher.d.ts +0 -25
  123. package/dist/watcher.d.ts.map +0 -1
  124. package/dist/watcher.js +0 -84
  125. package/dist/watcher.js.map +0 -1
  126. package/dist/webui/client/dist/index.html +0 -1885
  127. package/dist/webui/server.d.ts +0 -31
  128. package/dist/webui/server.d.ts.map +0 -1
  129. package/dist/webui/server.js +0 -566
  130. package/dist/webui/server.js.map +0 -1
  131. package/scripts/build-assets.mjs +0 -17
  132. package/src/daemon.ts +0 -288
  133. package/src/link-discovery.ts +0 -170
  134. package/src/maintainer.ts +0 -404
  135. package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
  136. package/src/python/minimax_lm.py +0 -198
  137. package/src/python/rlm_capture.py +0 -215
  138. package/src/watcher.ts +0 -101
  139. package/src/webui/client/dist/index.html +0 -1885
  140. package/src/webui/server.ts +0 -765
package/dist/store.js CHANGED
@@ -4,6 +4,7 @@
4
4
  * Handles store creation/opening, search with scope filtering,
5
5
  * re-indexing after wiki changes, and embedding lifecycle.
6
6
  */
7
+ import { AsyncLocalStorage } from "node:async_hooks";
7
8
  import { readFileSync, existsSync } from "node:fs";
8
9
  import { homedir } from "node:os";
9
10
  import { join } from "node:path";
@@ -22,6 +23,48 @@ const PARA_CONTEXTS = {
22
23
  const RAW_CONTEXT = "Immutable source material: articles, documents, notes. Not synthesized.";
23
24
  // -- Pending embed tracking --------------------------------------------------
24
25
  const pendingEmbeds = new WeakMap();
26
+ // qmd-engine's API adapter logs recoverable provider failures directly to
27
+ // console.error before returning null. Capture only those known messages so
28
+ // best-effort vector search and scheduler retries do not flash raw errors in
29
+ // the Pi UI. Other console errors continue to pass through unchanged.
30
+ const qmdEmbedDiagnosticContext = new AsyncLocalStorage();
31
+ let qmdEmbedCaptureCount = 0;
32
+ let qmdEmbedOriginalConsoleError = null;
33
+ const qmdEmbedConsoleInterceptor = (...args) => {
34
+ const sink = qmdEmbedDiagnosticContext.getStore();
35
+ const first = String(args[0] ?? "");
36
+ if (sink && /^embed(?:Batch)? error:/i.test(first)) {
37
+ sink.push(args.map((arg) => arg instanceof Error ? arg.message : String(arg)).join(" "));
38
+ return;
39
+ }
40
+ qmdEmbedOriginalConsoleError?.(...args);
41
+ };
42
+ /** Run a QMD embedding operation without leaking its recoverable raw stderr. */
43
+ export async function captureQmdEmbedErrors(operation) {
44
+ const diagnostics = [];
45
+ if (qmdEmbedCaptureCount++ === 0) {
46
+ qmdEmbedOriginalConsoleError = console.error;
47
+ console.error = qmdEmbedConsoleInterceptor;
48
+ }
49
+ try {
50
+ return await qmdEmbedDiagnosticContext.run(diagnostics, async () => {
51
+ try {
52
+ return { ok: true, value: await operation(), diagnostics };
53
+ }
54
+ catch (error) {
55
+ return { ok: false, error, diagnostics };
56
+ }
57
+ });
58
+ }
59
+ finally {
60
+ qmdEmbedCaptureCount--;
61
+ if (qmdEmbedCaptureCount === 0) {
62
+ if (console.error === qmdEmbedConsoleInterceptor && qmdEmbedOriginalConsoleError)
63
+ console.error = qmdEmbedOriginalConsoleError;
64
+ qmdEmbedOriginalConsoleError = null;
65
+ }
66
+ }
67
+ }
25
68
  // -- Inert-provider tracking ---------------------------------------------------
26
69
  /** Stores opened with the NO_LOCAL_PROVIDERS shim (no real API provider). */
27
70
  const inertProviderStores = new WeakSet();
@@ -121,23 +164,10 @@ export async function openStore(wikiDir, opts = {}) {
121
164
  if (opts.backgroundEmbed !== false && opts.paraConfig?.qmd.embedEnabled !== false) {
122
165
  // Schedule embedding in background (non-blocking).
123
166
  // BM25 search works immediately; hybrid search improves once embed completes.
124
- // Suppress console.error from qmd's internal embed failures.
125
- const origError = console.error;
126
- const embedPromise = store.embed().then(() => {
127
- pendingEmbeds.delete(store);
128
- }).catch(() => {
129
- // Embedding failures are non-fatal — hybrid search degrades to BM25
167
+ const embedPromise = captureQmdEmbedErrors(() => store.embed()).then(() => {
168
+ // Embedding failures are non-fatal — hybrid search degrades to BM25.
130
169
  pendingEmbeds.delete(store);
131
- }).finally(() => {
132
- console.error = origError;
133
170
  });
134
- // Temporarily suppress embed error noise during background embed
135
- console.error = (...args) => {
136
- const msg = String(args[0] ?? "");
137
- if (msg.includes("embed error") || msg.includes("fetch failed"))
138
- return;
139
- origError(...args);
140
- };
141
171
  pendingEmbeds.set(store, embedPromise);
142
172
  }
143
173
  return store;
@@ -231,7 +261,9 @@ async function mergeLexAndVectorResults(store, query, lexResults, limit) {
231
261
  const llm = store.internal.llm;
232
262
  const embedModel = llm?.embedModelName;
233
263
  if (status.hasVectorIndex && llm && embedModel) {
234
- vecResults = await store.internal.searchVec(query, embedModel, limit, "wiki", llm);
264
+ const vectorAttempt = await captureQmdEmbedErrors(() => store.internal.searchVec(query, embedModel, limit, "wiki", llm));
265
+ if (vectorAttempt.ok)
266
+ vecResults = vectorAttempt.value;
235
267
  }
236
268
  }
237
269
  catch {
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ import type { QMDStore } from "qmd-engine";
3
+ import type { WikiReadDetails, WikiWriteDetails } from "./schemas.js";
4
+ export declare function createEditExecute(wikiDir: string, store: QMDStore, markDirty: () => void): (params: {
5
+ path: string;
6
+ edits: Array<{
7
+ oldText: string;
8
+ newText: string;
9
+ }>;
10
+ title?: string;
11
+ scope?: string[];
12
+ tags?: string[];
13
+ logSummary?: string;
14
+ }) => Promise<AgentToolResult<WikiWriteDetails>>;
15
+ export declare function createReadExecute(wikiDir: string): (params: {
16
+ path: string;
17
+ }) => Promise<AgentToolResult<WikiReadDetails>>;
18
+ //# sourceMappingURL=edit-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-read.d.ts","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KACA,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA6F9C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,IAE7C,QAAQ;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KACvB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAoE7C"}
@@ -0,0 +1,161 @@
1
+ import { formatFreshness } from "../query.js";
2
+ import { autoLinkSlugs, syncFrontmatterLinks } from "../link-utils.js";
3
+ import { normalizeTags, normalizeScopes } from "../tag-registry.js";
4
+ import { redactSecrets } from "../redact.js";
5
+ import { appendLog, gitCommit, listPages, readIndex, readPage, writePage } from "../wiki.js";
6
+ import { parsePagePath, scheduleWikiMaintenance } from "./shared.js";
7
+ // -- Factory: wiki_read execute ----------------------------------------------
8
+ export function createEditExecute(wikiDir, store, markDirty) {
9
+ return async (params) => {
10
+ const parsed = parsePagePath(params.path);
11
+ if (!parsed) {
12
+ return {
13
+ content: [{ type: "text", text: `Invalid page path: ${params.path}` }],
14
+ details: { pagesWritten: [], pagesSkipped: [params.path], indexUpdated: false, logAppended: false },
15
+ };
16
+ }
17
+ const existing = await readPage(wikiDir, parsed.category, parsed.slug);
18
+ const pagePath = `${parsed.category}/${parsed.slug}`;
19
+ if (!existing) {
20
+ return {
21
+ content: [{ type: "text", text: `Page not found: ${pagePath}` }],
22
+ details: { pagesWritten: [], pagesSkipped: [pagePath], indexUpdated: false, logAppended: false },
23
+ };
24
+ }
25
+ if (params.edits.length === 0) {
26
+ return {
27
+ content: [{ type: "text", text: "No edits supplied." }],
28
+ details: { pagesWritten: [], pagesSkipped: [pagePath], indexUpdated: false, logAppended: false },
29
+ };
30
+ }
31
+ // Atomic validation: all oldText strings must exist exactly once before writing.
32
+ const errors = [];
33
+ for (const edit of params.edits) {
34
+ const first = existing.body.indexOf(edit.oldText);
35
+ const last = existing.body.lastIndexOf(edit.oldText);
36
+ if (first === -1) {
37
+ errors.push(`oldText not found: "${edit.oldText.slice(0, 60)}..."`);
38
+ }
39
+ else if (first !== last) {
40
+ errors.push(`oldText is not unique: "${edit.oldText.slice(0, 60)}..."`);
41
+ }
42
+ }
43
+ if (errors.length > 0) {
44
+ return {
45
+ content: [{ type: "text", text: `No changes written.\n${errors.join("\n")}` }],
46
+ details: { pagesWritten: [], pagesSkipped: [pagePath], indexUpdated: false, logAppended: false },
47
+ };
48
+ }
49
+ let editedBody = existing.body;
50
+ for (const edit of params.edits) {
51
+ editedBody = editedBody.replace(edit.oldText, edit.newText);
52
+ }
53
+ // Surgical edit path: do not scan/autolink/rebuild/reindex the whole wiki.
54
+ // wiki_edit is often called mid-task and must stay fast; broader maintenance
55
+ // can run via wiki_lint/rebuildIndex or on startup.
56
+ const linkedBody = redactSecrets(editedBody).text;
57
+ const now = new Date().toISOString();
58
+ const rawScope = params.scope ?? existing.frontmatter.scope;
59
+ const newScope = normalizeScopes(rawScope);
60
+ const rawTags = params.tags ?? existing.frontmatter.tags;
61
+ const updatedPage = {
62
+ category: parsed.category,
63
+ slug: parsed.slug,
64
+ frontmatter: {
65
+ ...existing.frontmatter,
66
+ title: params.title ?? existing.frontmatter.title,
67
+ scope: newScope,
68
+ tags: normalizeTags(rawTags, newScope),
69
+ updated: now,
70
+ links: syncFrontmatterLinks(linkedBody),
71
+ },
72
+ body: linkedBody,
73
+ };
74
+ await writePage(wikiDir, updatedPage);
75
+ if (params.logSummary) {
76
+ await appendLog(wikiDir, {
77
+ date: now.split("T")[0],
78
+ operation: "edit",
79
+ summary: params.logSummary,
80
+ pages: [pagePath],
81
+ });
82
+ }
83
+ markDirty();
84
+ await gitCommit(wikiDir, params.logSummary ?? `wiki_edit: ${pagePath}`);
85
+ scheduleWikiMaintenance(wikiDir, store, markDirty);
86
+ return {
87
+ content: [{ type: "text", text: `Edited ${pagePath}. Scheduled background index/search refresh.` }],
88
+ details: {
89
+ pagesWritten: [pagePath],
90
+ pagesSkipped: [],
91
+ indexUpdated: false,
92
+ logAppended: !!params.logSummary,
93
+ },
94
+ };
95
+ };
96
+ }
97
+ export function createReadExecute(wikiDir) {
98
+ return async (params) => {
99
+ const now = Date.now();
100
+ const normalizedPath = params.path.trim().toLowerCase().replace(/^\/+/, "");
101
+ if (normalizedPath === "index" || normalizedPath === "index.md" || normalizedPath === "wiki-index") {
102
+ const index = await readIndex(wikiDir);
103
+ return {
104
+ content: [{ type: "text", text: index }],
105
+ details: { found: true, path: "index.md" },
106
+ };
107
+ }
108
+ // Try parsing as category/slug path
109
+ const parsed = parsePagePath(params.path);
110
+ if (parsed) {
111
+ const page = await readPage(wikiDir, parsed.category, parsed.slug);
112
+ if (page) {
113
+ const fm = page.frontmatter;
114
+ const freshness = formatFreshness(fm.updated, now);
115
+ const header = [
116
+ `# ${fm.title}`,
117
+ `PARA: ${fm.para} | Scope: ${fm.scope.join(", ")} | Tags: ${fm.tags.join(", ")}`,
118
+ `Created: ${fm.created} | Updated: ${fm.updated} | ${freshness}`,
119
+ fm.sources.length > 0 ? `Sources: ${fm.sources.join(", ")}` : "",
120
+ fm.links.length > 0 ? `Links: ${fm.links.map((l) => `[[${l}]]`).join(", ")}` : "",
121
+ ]
122
+ .filter(Boolean)
123
+ .join("\n");
124
+ return {
125
+ content: [{ type: "text", text: `${header}\n\n${page.body}` }],
126
+ details: { found: true, path: `${parsed.category}/${parsed.slug}` },
127
+ };
128
+ }
129
+ }
130
+ // Try finding by title (case-insensitive search across all pages)
131
+ const allPages = await listPages(wikiDir);
132
+ const titleLower = params.path.toLowerCase();
133
+ for (const ref of allPages) {
134
+ if (ref.title.toLowerCase() === titleLower || ref.slug === titleLower) {
135
+ const page = await readPage(wikiDir, ref.category, ref.slug);
136
+ if (page) {
137
+ const fm = page.frontmatter;
138
+ const freshness = formatFreshness(fm.updated, now);
139
+ const header = [
140
+ `# ${fm.title}`,
141
+ `PARA: ${fm.para} | Scope: ${fm.scope.join(", ")} | Tags: ${fm.tags.join(", ")}`,
142
+ `Created: ${fm.created} | Updated: ${fm.updated} | ${freshness}`,
143
+ fm.sources.length > 0 ? `Sources: ${fm.sources.join(", ")}` : "",
144
+ fm.links.length > 0 ? `Links: ${fm.links.map((l) => `[[${l}]]`).join(", ")}` : "",
145
+ ]
146
+ .filter(Boolean)
147
+ .join("\n");
148
+ return {
149
+ content: [{ type: "text", text: `${header}\n\n${page.body}` }],
150
+ details: { found: true, path: `${ref.category}/${ref.slug}` },
151
+ };
152
+ }
153
+ }
154
+ }
155
+ return {
156
+ content: [{ type: "text", text: `Page not found: "${params.path}"` }],
157
+ details: { found: false },
158
+ };
159
+ };
160
+ }
161
+ //# sourceMappingURL=edit-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-read.js","sourceRoot":"","sources":["../../src/tools/edit-read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ import type { QMDStore } from "qmd-engine";
3
+ import type { ProjectScope } from "../scope.js";
4
+ import type { ParaCategory } from "../wiki.js";
5
+ import type { WikiIngestDetails } from "./schemas.js";
6
+ export declare function createIngestExecute(wikiDir: string, _store: QMDStore, getScope: () => ProjectScope): (params: {
7
+ source: string;
8
+ sourceType?: "url" | "file" | "text";
9
+ category?: ParaCategory;
10
+ scope?: string[];
11
+ }) => Promise<AgentToolResult<WikiIngestDetails>>;
12
+ //# sourceMappingURL=ingest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/tools/ingest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,MAAM,YAAY,IAG1B,QAAQ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,KAC1G,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CA6C/C"}
@@ -0,0 +1,48 @@
1
+ import { resolveSource, truncateSource } from "../ingest.js";
2
+ import { INGEST_PROMPT } from "../templates/prompts.js";
3
+ // -- Factory: wiki_ingest execute --------------------------------------------
4
+ export function createIngestExecute(wikiDir, _store, getScope) {
5
+ return async (params) => {
6
+ const scope = getScope();
7
+ const resolved = await resolveSource(wikiDir, {
8
+ source: params.source,
9
+ sourceType: params.sourceType,
10
+ scope: params.scope,
11
+ category: params.category,
12
+ }, scope);
13
+ const categoryHint = resolved.categoryHint
14
+ ? `\nSuggested PARA category: ${resolved.categoryHint}`
15
+ : "";
16
+ // Assemble the tool result with instructions for the LLM
17
+ const toolResultText = [
18
+ INGEST_PROMPT,
19
+ "",
20
+ `Current scope: ${resolved.scopeName} (tags: ${resolved.scopeTags.join(", ")})`,
21
+ categoryHint,
22
+ resolved.rawPath ? `Raw source saved to: ${resolved.rawPath}` : "",
23
+ "",
24
+ "<wiki-schema>",
25
+ resolved.schema,
26
+ "</wiki-schema>",
27
+ "",
28
+ "<wiki-index>",
29
+ resolved.index,
30
+ "</wiki-index>",
31
+ "",
32
+ "<source-content>",
33
+ truncateSource(resolved.content),
34
+ "</source-content>",
35
+ "",
36
+ "Now analyze the source content and use wiki_write to create/update pages, update the index, and log the operation.",
37
+ ].join("\n");
38
+ return {
39
+ content: [{ type: "text", text: toolResultText }],
40
+ details: {
41
+ sourceType: resolved.sourceType,
42
+ rawPath: resolved.rawPath,
43
+ sourceLength: resolved.content.length,
44
+ },
45
+ };
46
+ };
47
+ }
48
+ //# sourceMappingURL=ingest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/tools/ingest.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,+EAA+E;AAE/E,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,MAAgB,EAChB,QAA4B;IAE5B,OAAO,KAAK,EACV,MAA2G,EAC9D,EAAE;QAC/C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE;YAC5C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,EAAE,KAAK,CAAC,CAAC;QAEV,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;YACxC,CAAC,CAAC,8BAA8B,QAAQ,CAAC,YAAY,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;QAEP,yDAAyD;QACzD,MAAM,cAAc,GAAG;YACrB,aAAa;YACb,EAAE;YACF,kBAAkB,QAAQ,CAAC,SAAS,WAAW,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC/E,YAAY;YACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;YAClE,EAAE;YACF,eAAe;YACf,QAAQ,CAAC,MAAM;YACf,gBAAgB;YAChB,EAAE;YACF,cAAc;YACd,QAAQ,CAAC,KAAK;YACd,eAAe;YACf,EAAE;YACF,kBAAkB;YAClB,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC;YAChC,mBAAmB;YACnB,EAAE;YACF,oHAAoH;SACrH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YACjD,OAAO,EAAE;gBACP,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;aACtC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ import type { QMDStore } from "qmd-engine";
3
+ import type { WikiLintDetails } from "./schemas.js";
4
+ export declare function createLintExecute(wikiDir: string, store: QMDStore, markDirty: () => void, getLintConfig?: () => {
5
+ autoFix: boolean;
6
+ staleDays: number;
7
+ }): (params: {
8
+ autoFix?: boolean;
9
+ }) => Promise<AgentToolResult<WikiLintDetails>>;
10
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,EACrB,aAAa,CAAC,EAAE,MAAM;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,IAG3D,QAAQ;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5B,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAuD7C"}
@@ -0,0 +1,57 @@
1
+ import { lintWiki } from "../lint.js";
2
+ import { PARA_CATEGORIES } from "../wiki.js";
3
+ import { LINT_PROMPT } from "../templates/prompts.js";
4
+ import { scheduleWikiMaintenance } from "./shared.js";
5
+ // -- Factory: wiki_lint execute ----------------------------------------------
6
+ export function createLintExecute(wikiDir, store, markDirty, getLintConfig) {
7
+ return async (params) => {
8
+ const configured = getLintConfig?.();
9
+ const report = await lintWiki(wikiDir, {
10
+ autoFix: params.autoFix ?? configured?.autoFix ?? true,
11
+ staleDays: configured?.staleDays ?? 90,
12
+ });
13
+ if (report.fixed.length > 0) {
14
+ scheduleWikiMaintenance(wikiDir, store, markDirty);
15
+ }
16
+ const { issues, fixed, stats } = report;
17
+ // Format report for the LLM
18
+ const parts = [];
19
+ parts.push("## Wiki Lint Report\n");
20
+ parts.push(`Total pages: ${stats.totalPages}`);
21
+ parts.push(`By category: ${PARA_CATEGORIES.map((c) => `${c}: ${stats.byCategory[c]}`).join(", ")}`);
22
+ parts.push(`Total links: ${stats.totalLinks} (broken: ${stats.brokenLinks})`);
23
+ parts.push(`Orphan pages: ${stats.orphanPages}`);
24
+ if (stats.oldestPage)
25
+ parts.push(`Oldest page: ${stats.oldestPage}`);
26
+ if (stats.newestPage)
27
+ parts.push(`Newest page: ${stats.newestPage}`);
28
+ if (stats.lastIngest)
29
+ parts.push(`Last ingest: ${stats.lastIngest}`);
30
+ if (fixed.length > 0) {
31
+ parts.push(`\n## Auto-fixed (${fixed.length})\n`);
32
+ for (const f of fixed) {
33
+ parts.push(`- [${f.severity}] ${f.page ?? ""}: ${f.message}`);
34
+ }
35
+ }
36
+ if (issues.length > 0) {
37
+ parts.push(`\n## Remaining Issues (${issues.length})\n`);
38
+ for (const issue of issues) {
39
+ parts.push(`- [${issue.severity}] ${issue.category}${issue.page ? ` (${issue.page})` : ""}: ${issue.message}`);
40
+ }
41
+ parts.push("");
42
+ parts.push(LINT_PROMPT);
43
+ }
44
+ else {
45
+ parts.push("\nNo remaining issues. Wiki is healthy.");
46
+ }
47
+ return {
48
+ content: [{ type: "text", text: parts.join("\n") }],
49
+ details: {
50
+ issueCount: issues.length,
51
+ fixedCount: fixed.length,
52
+ stats,
53
+ },
54
+ };
55
+ };
56
+ }
57
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/tools/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ export declare function createMigrateExecute(wikiDir: string): () => Promise<AgentToolResult<{
3
+ migratedCount: number;
4
+ totalPages: number;
5
+ }>>;
6
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/tools/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMrE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,SAEE,OAAO,CAAC,eAAe,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAkCzF"}
@@ -0,0 +1,36 @@
1
+ import { CURRENT_SCHEMA_VERSION, migrateToLatest } from "../frontmatter.js";
2
+ import { listPages, readPage, writePage } from "../wiki.js";
3
+ // -- Factory: wiki_migrate execute -------------------------------------------
4
+ export function createMigrateExecute(wikiDir) {
5
+ return async () => {
6
+ const allRefs = await listPages(wikiDir);
7
+ let migratedCount = 0;
8
+ for (const ref of allRefs) {
9
+ const page = await readPage(wikiDir, ref.category, ref.slug);
10
+ if (!page)
11
+ continue;
12
+ const version = page.frontmatter.schemaVersion ?? 1;
13
+ if (version >= CURRENT_SCHEMA_VERSION)
14
+ continue;
15
+ const rawObj = page.frontmatter;
16
+ const result = migrateToLatest(rawObj, page.body);
17
+ const migratedFm = result.fm;
18
+ migratedFm.updated = new Date().toISOString();
19
+ await writePage(wikiDir, {
20
+ category: ref.category,
21
+ slug: ref.slug,
22
+ frontmatter: migratedFm,
23
+ body: result.body,
24
+ });
25
+ migratedCount++;
26
+ }
27
+ const summary = migratedCount > 0
28
+ ? `Migrated ${migratedCount} page(s) to schema version ${CURRENT_SCHEMA_VERSION}.`
29
+ : `All ${allRefs.length} page(s) already at schema version ${CURRENT_SCHEMA_VERSION}.`;
30
+ return {
31
+ content: [{ type: "text", text: summary }],
32
+ details: { migratedCount, totalPages: allRefs.length },
33
+ };
34
+ };
35
+ }
36
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/tools/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAwB,MAAM,YAAY,CAAC;AAElF,+EAA+E;AAE/E,MAAM,UAAU,oBAAoB,CAClC,OAAe;IAEf,OAAO,KAAK,IAA6E,EAAE;QACzF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,CAAC;YACpD,IAAI,OAAO,IAAI,sBAAsB;gBAAE,SAAS;YAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAiD,CAAC;YACtE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAElD,MAAM,UAAU,GAAG,MAAM,CAAC,EAAgC,CAAC;YAC3D,UAAU,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,SAAS,CAAC,OAAO,EAAE;gBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,aAAa,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC;YAC/B,CAAC,CAAC,YAAY,aAAa,8BAA8B,sBAAsB,GAAG;YAClF,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,sCAAsC,sBAAsB,GAAG,CAAC;QAEzF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE;SACvD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AgentToolResult } from "@earendil-works/pi-agent-core";
2
+ import type { QMDStore } from "qmd-engine";
3
+ import { type ParaCategory } from "../wiki.js";
4
+ import type { WikiMoveDetails } from "./schemas.js";
5
+ export declare function createMoveExecute(wikiDir: string, store: QMDStore, markDirty: () => void): (params: {
6
+ path: string;
7
+ to: ParaCategory;
8
+ }) => Promise<AgentToolResult<WikiMoveDetails>>;
9
+ //# sourceMappingURL=move.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../src/tools/move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAwE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKpD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,IAGnB,QAAQ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,KACzC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CA+D7C"}
@@ -0,0 +1,61 @@
1
+ import { appendLog, gitCommit, movePage, readPage, rebuildIndex } from "../wiki.js";
2
+ import { parsePagePath, scheduleWikiMaintenance } from "./shared.js";
3
+ // -- Factory: wiki_move execute ----------------------------------------------
4
+ export function createMoveExecute(wikiDir, store, markDirty) {
5
+ return async (params) => {
6
+ const parsed = parsePagePath(params.path);
7
+ if (!parsed) {
8
+ throw new Error(`Invalid page path: "${params.path}". Expected format: category/slug`);
9
+ }
10
+ const page = await readPage(wikiDir, parsed.category, parsed.slug);
11
+ if (!page) {
12
+ throw new Error(`Page not found: "${params.path}"`);
13
+ }
14
+ if (parsed.category === params.to) {
15
+ return {
16
+ content: [
17
+ {
18
+ type: "text",
19
+ text: `Page "${params.path}" is already in ${params.to}. No move needed.`,
20
+ },
21
+ ],
22
+ details: { from: params.path, to: `${params.to}/${parsed.slug}` },
23
+ };
24
+ }
25
+ const ref = {
26
+ category: parsed.category,
27
+ slug: parsed.slug,
28
+ title: page.frontmatter.title,
29
+ path: `${parsed.category}/${parsed.slug}.md`,
30
+ };
31
+ await movePage(wikiDir, ref, params.to);
32
+ // Rebuild index.md inline (fast, single-pass); defer QMD reindex to the
33
+ // debounced background maintenance queue like wiki_write/wiki_edit.
34
+ await rebuildIndex(wikiDir);
35
+ scheduleWikiMaintenance(wikiDir, store, markDirty);
36
+ markDirty();
37
+ // Git commit
38
+ await gitCommit(wikiDir, `move: ${page.frontmatter.title} → ${params.to}`);
39
+ // Log the move
40
+ const now = new Date().toISOString();
41
+ await appendLog(wikiDir, {
42
+ date: now.split("T")[0],
43
+ operation: "move",
44
+ summary: `Moved ${page.frontmatter.title} from ${parsed.category} to ${params.to}`,
45
+ pages: [`${params.to}/${parsed.slug}`],
46
+ });
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: `Moved "${page.frontmatter.title}" from ${parsed.category}/ to ${params.to}/`,
52
+ },
53
+ ],
54
+ details: {
55
+ from: `${parsed.category}/${parsed.slug}`,
56
+ to: `${params.to}/${parsed.slug}`,
57
+ },
58
+ };
59
+ };
60
+ }
61
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../../src/tools/move.ts"],"names":[],"mappings":"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"}