pi-para 0.6.7 → 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.
- package/ARCHITECTURE.md +4 -6
- package/CHANGELOG.md +14 -0
- package/CONFIGURATION.md +1 -16
- package/README.md +2 -13
- package/SETUP.md +1 -7
- package/STRUCTURE.md +7 -18
- package/dist/cli-legacy.d.ts +2 -1
- package/dist/cli-legacy.d.ts.map +1 -1
- package/dist/cli-legacy.js +13 -25
- package/dist/cli-legacy.js.map +1 -1
- package/dist/cli.d.ts +2 -24
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -271
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +1 -28
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +1 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -5
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -64
- package/dist/index.js.map +1 -1
- package/dist/link-utils.d.ts +1 -1
- package/dist/link-utils.js +1 -1
- package/dist/settings.d.ts +0 -3
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +0 -11
- package/dist/settings.js.map +1 -1
- package/dist/tools/edit-read.d.ts +18 -0
- package/dist/tools/edit-read.d.ts.map +1 -0
- package/dist/tools/edit-read.js +161 -0
- package/dist/tools/edit-read.js.map +1 -0
- package/dist/tools/ingest.d.ts +12 -0
- package/dist/tools/ingest.d.ts.map +1 -0
- package/dist/tools/ingest.js +48 -0
- package/dist/tools/ingest.js.map +1 -0
- package/dist/tools/lint.d.ts +10 -0
- package/dist/tools/lint.d.ts.map +1 -0
- package/dist/tools/lint.js +57 -0
- package/dist/tools/lint.js.map +1 -0
- package/dist/tools/migrate.d.ts +6 -0
- package/dist/tools/migrate.d.ts.map +1 -0
- package/dist/tools/migrate.js +36 -0
- package/dist/tools/migrate.js.map +1 -0
- package/dist/tools/move.d.ts +9 -0
- package/dist/tools/move.d.ts.map +1 -0
- package/dist/tools/move.js +61 -0
- package/dist/tools/move.js.map +1 -0
- package/dist/tools/query.d.ts +12 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +47 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/schemas.d.ts +109 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +80 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/shared.d.ts +14 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +25 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/summarize.d.ts +8 -0
- package/dist/tools/summarize.d.ts.map +1 -0
- package/dist/tools/summarize.js +82 -0
- package/dist/tools/summarize.js.map +1 -0
- package/dist/tools/write.d.ts +23 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +215 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/tools.d.ts +1 -8
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +13 -795
- package/dist/tools.js.map +1 -1
- package/package.json +2 -6
- package/src/cli-legacy.ts +14 -26
- package/src/cli.ts +29 -293
- package/src/commands.ts +0 -21
- package/src/config.ts +1 -6
- package/src/index.ts +5 -66
- package/src/link-utils.ts +1 -1
- package/src/settings.ts +0 -14
- package/src/tools/edit-read.ts +193 -0
- package/src/tools/ingest.ts +63 -0
- package/src/tools/lint.ts +74 -0
- package/src/tools/migrate.ts +44 -0
- package/src/tools/move.ts +79 -0
- package/src/tools/query.ts +63 -0
- package/src/tools/schemas.ts +157 -0
- package/src/tools/shared.ts +35 -0
- package/src/tools/summarize.ts +89 -0
- package/src/tools/write.ts +252 -0
- package/src/tools.ts +18 -1046
- package/dist/daemon.d.ts +0 -49
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js +0 -226
- package/dist/daemon.js.map +0 -1
- package/dist/link-discovery.d.ts +0 -40
- package/dist/link-discovery.d.ts.map +0 -1
- package/dist/link-discovery.js +0 -122
- package/dist/link-discovery.js.map +0 -1
- package/dist/maintainer.d.ts +0 -24
- package/dist/maintainer.d.ts.map +0 -1
- package/dist/maintainer.js +0 -358
- package/dist/maintainer.js.map +0 -1
- package/dist/watcher.d.ts +0 -25
- package/dist/watcher.d.ts.map +0 -1
- package/dist/watcher.js +0 -84
- package/dist/watcher.js.map +0 -1
- package/dist/webui/client/dist/index.html +0 -1885
- package/dist/webui/server.d.ts +0 -31
- package/dist/webui/server.d.ts.map +0 -1
- package/dist/webui/server.js +0 -566
- package/dist/webui/server.js.map +0 -1
- package/scripts/build-assets.mjs +0 -17
- package/src/daemon.ts +0 -288
- package/src/link-discovery.ts +0 -170
- package/src/maintainer.ts +0 -404
- package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
- package/src/python/minimax_lm.py +0 -198
- package/src/python/rlm_capture.py +0 -215
- package/src/watcher.ts +0 -101
- package/src/webui/client/dist/index.html +0 -1885
- package/src/webui/server.ts +0 -765
|
@@ -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 @@
|
|
|
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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"}
|
|
@@ -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 { WikiQueryDetails } from "./schemas.js";
|
|
6
|
+
export declare function createQueryExecute(_wikiDir: string, store: QMDStore, getScope: () => ProjectScope, getGraphBoost?: () => boolean): (params: {
|
|
7
|
+
query: string;
|
|
8
|
+
global?: boolean;
|
|
9
|
+
category?: ParaCategory;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}) => Promise<AgentToolResult<WikiQueryDetails>>;
|
|
12
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.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,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,IAG3B,QAAQ;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACnF,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA4C9C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { queryWiki as queryWikiLib, formatQueryResults } from "../query.js";
|
|
2
|
+
import { QUERY_PROMPT } from "../templates/prompts.js";
|
|
3
|
+
// -- Factory: wiki_query execute ---------------------------------------------
|
|
4
|
+
export function createQueryExecute(_wikiDir, store, getScope, getGraphBoost) {
|
|
5
|
+
return async (params) => {
|
|
6
|
+
const scope = getScope();
|
|
7
|
+
const result = await queryWikiLib(store, {
|
|
8
|
+
query: params.query,
|
|
9
|
+
global: params.global,
|
|
10
|
+
category: params.category,
|
|
11
|
+
limit: params.limit,
|
|
12
|
+
graphBoost: getGraphBoost?.() ?? true,
|
|
13
|
+
}, scope);
|
|
14
|
+
if (result.results.length === 0) {
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: `No wiki pages found for "${params.query}". The wiki may not have content on this topic yet.`,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
details: {
|
|
23
|
+
resultCount: 0,
|
|
24
|
+
scopeUsed: result.wasGlobal ? "global" : scope.name,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const formatted = formatQueryResults(result.results);
|
|
29
|
+
const toolResultText = [
|
|
30
|
+
QUERY_PROMPT,
|
|
31
|
+
"",
|
|
32
|
+
`Query: "${params.query}"`,
|
|
33
|
+
`Scope: ${result.wasGlobal ? "global (all scopes)" : scope.name}`,
|
|
34
|
+
`Results: ${result.results.length}`,
|
|
35
|
+
"",
|
|
36
|
+
formatted,
|
|
37
|
+
].join("\n");
|
|
38
|
+
return {
|
|
39
|
+
content: [{ type: "text", text: toolResultText }],
|
|
40
|
+
details: {
|
|
41
|
+
resultCount: result.results.length,
|
|
42
|
+
scopeUsed: result.wasGlobal ? "global" : scope.name,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,KAAe,EACf,QAA4B,EAC5B,aAA6B;IAE7B,OAAO,KAAK,EACV,MAAoF,EACxC,EAAE;QAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE;YACvC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,aAAa,EAAE,EAAE,IAAI,IAAI;SACtC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,MAAM,CAAC,KAAK,qDAAqD;qBACpG;iBACF;gBACD,OAAO,EAAE;oBACP,WAAW,EAAE,CAAC;oBACd,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;iBACpD;aACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG;YACrB,YAAY;YACZ,EAAE;YACF,WAAW,MAAM,CAAC,KAAK,GAAG;YAC1B,UAAU,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YACjE,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,EAAE;YACF,SAAS;SACV,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,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;gBAClC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;aACpD;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import type { LintReport } from "../lint.js";
|
|
3
|
+
export declare const PARA_ENUM: Type.TUnsafe<"projects" | "areas" | "resources" | "archives">;
|
|
4
|
+
export declare const PARA_ENUM_NO_ARCHIVES: Type.TUnsafe<"projects" | "areas" | "resources">;
|
|
5
|
+
export declare const WikiIngestParams: Type.TObject<{
|
|
6
|
+
source: Type.TString;
|
|
7
|
+
sourceType: Type.TOptional<Type.TUnsafe<"url" | "file" | "text">>;
|
|
8
|
+
category: Type.TOptional<Type.TUnsafe<"projects" | "areas" | "resources">>;
|
|
9
|
+
scope: Type.TOptional<Type.TArray<Type.TString>>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const WikiQueryParams: Type.TObject<{
|
|
12
|
+
query: Type.TString;
|
|
13
|
+
global: Type.TOptional<Type.TBoolean>;
|
|
14
|
+
category: Type.TOptional<Type.TUnsafe<"projects" | "areas" | "resources" | "archives">>;
|
|
15
|
+
limit: Type.TOptional<Type.TNumber>;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const WikiEditSchema: Type.TObject<{
|
|
18
|
+
oldText: Type.TString;
|
|
19
|
+
newText: Type.TString;
|
|
20
|
+
}>;
|
|
21
|
+
export declare const WikiWritePageSchema: Type.TObject<{
|
|
22
|
+
category: Type.TUnsafe<"projects" | "areas" | "resources" | "archives">;
|
|
23
|
+
slug: Type.TString;
|
|
24
|
+
title: Type.TString;
|
|
25
|
+
scope: Type.TArray<Type.TString>;
|
|
26
|
+
tags: Type.TArray<Type.TString>;
|
|
27
|
+
body: Type.TString;
|
|
28
|
+
mode: Type.TUnsafe<"replace" | "edit" | "append" | "create">;
|
|
29
|
+
edits: Type.TOptional<Type.TArray<Type.TObject<{
|
|
30
|
+
oldText: Type.TString;
|
|
31
|
+
newText: Type.TString;
|
|
32
|
+
}>>>;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const WikiWriteParams: Type.TObject<{
|
|
35
|
+
pages: Type.TArray<Type.TObject<{
|
|
36
|
+
category: Type.TUnsafe<"projects" | "areas" | "resources" | "archives">;
|
|
37
|
+
slug: Type.TString;
|
|
38
|
+
title: Type.TString;
|
|
39
|
+
scope: Type.TArray<Type.TString>;
|
|
40
|
+
tags: Type.TArray<Type.TString>;
|
|
41
|
+
body: Type.TString;
|
|
42
|
+
mode: Type.TUnsafe<"replace" | "edit" | "append" | "create">;
|
|
43
|
+
edits: Type.TOptional<Type.TArray<Type.TObject<{
|
|
44
|
+
oldText: Type.TString;
|
|
45
|
+
newText: Type.TString;
|
|
46
|
+
}>>>;
|
|
47
|
+
}>>;
|
|
48
|
+
indexContent: Type.TOptional<Type.TString>;
|
|
49
|
+
logSummary: Type.TOptional<Type.TString>;
|
|
50
|
+
}>;
|
|
51
|
+
export declare const WikiEditParams: Type.TObject<{
|
|
52
|
+
path: Type.TString;
|
|
53
|
+
edits: Type.TArray<Type.TObject<{
|
|
54
|
+
oldText: Type.TString;
|
|
55
|
+
newText: Type.TString;
|
|
56
|
+
}>>;
|
|
57
|
+
title: Type.TOptional<Type.TString>;
|
|
58
|
+
scope: Type.TOptional<Type.TArray<Type.TString>>;
|
|
59
|
+
tags: Type.TOptional<Type.TArray<Type.TString>>;
|
|
60
|
+
logSummary: Type.TOptional<Type.TString>;
|
|
61
|
+
}>;
|
|
62
|
+
export declare const WikiReadParams: Type.TObject<{
|
|
63
|
+
path: Type.TString;
|
|
64
|
+
}>;
|
|
65
|
+
export declare const WikiMoveParams: Type.TObject<{
|
|
66
|
+
path: Type.TString;
|
|
67
|
+
to: Type.TUnsafe<"projects" | "areas" | "resources" | "archives">;
|
|
68
|
+
}>;
|
|
69
|
+
export declare const WikiLintParams: Type.TObject<{
|
|
70
|
+
autoFix: Type.TOptional<Type.TBoolean>;
|
|
71
|
+
}>;
|
|
72
|
+
export declare const WikiMigrateParams: Type.TObject<{}>;
|
|
73
|
+
export declare const WikiSummarizeParams: Type.TObject<{
|
|
74
|
+
target: Type.TString;
|
|
75
|
+
depth: Type.TOptional<Type.TUnsafe<"brief" | "detailed">>;
|
|
76
|
+
}>;
|
|
77
|
+
export interface WikiIngestDetails {
|
|
78
|
+
sourceType: "url" | "file" | "text";
|
|
79
|
+
rawPath?: string;
|
|
80
|
+
sourceLength: number;
|
|
81
|
+
}
|
|
82
|
+
export interface WikiQueryDetails {
|
|
83
|
+
resultCount: number;
|
|
84
|
+
scopeUsed: string;
|
|
85
|
+
}
|
|
86
|
+
export interface WikiWriteDetails {
|
|
87
|
+
pagesWritten: string[];
|
|
88
|
+
indexUpdated: boolean;
|
|
89
|
+
logAppended: boolean;
|
|
90
|
+
pagesSkipped?: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface WikiReadDetails {
|
|
93
|
+
found: boolean;
|
|
94
|
+
path?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface WikiMoveDetails {
|
|
97
|
+
from: string;
|
|
98
|
+
to: string;
|
|
99
|
+
}
|
|
100
|
+
export interface WikiLintDetails {
|
|
101
|
+
issueCount: number;
|
|
102
|
+
fixedCount: number;
|
|
103
|
+
stats: LintReport["stats"];
|
|
104
|
+
}
|
|
105
|
+
export interface WikiSummarizeDetails {
|
|
106
|
+
target: string;
|
|
107
|
+
pageCount: number;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,eAAO,MAAM,SAAS,+DAGrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,kDAGjC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;EAW3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;EAS1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;EAGzB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAa9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;EAY1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;EASzB,CAAC;AAEH,eAAO,MAAM,cAAc;;EAIzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;EAKzB,CAAC;AAEH,eAAO,MAAM,cAAc;;EAIzB,CAAC;AAEH,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,eAAO,MAAM,mBAAmB;;;EAS9B,CAAC;AAIH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { StringEnum } from "@earendil-works/pi-ai";
|
|
2
|
+
import { Type } from "typebox";
|
|
3
|
+
// -- Parameter schemas -------------------------------------------------------
|
|
4
|
+
export const PARA_ENUM = StringEnum(["projects", "areas", "resources", "archives"], { description: "PARA category" });
|
|
5
|
+
export const PARA_ENUM_NO_ARCHIVES = StringEnum(["projects", "areas", "resources"], { description: "PARA category (archives excluded for new content)" });
|
|
6
|
+
export const WikiIngestParams = Type.Object({
|
|
7
|
+
source: Type.String({ description: "URL, file path, or raw text to ingest" }),
|
|
8
|
+
sourceType: Type.Optional(StringEnum(["url", "file", "text"], {
|
|
9
|
+
description: "Source type (auto-detected if omitted)",
|
|
10
|
+
})),
|
|
11
|
+
category: Type.Optional(PARA_ENUM_NO_ARCHIVES),
|
|
12
|
+
scope: Type.Optional(Type.Array(Type.String(), { description: "Scope tags for the ingested content" })),
|
|
13
|
+
});
|
|
14
|
+
export const WikiQueryParams = Type.Object({
|
|
15
|
+
query: Type.String({ description: "Natural language search query" }),
|
|
16
|
+
global: Type.Optional(Type.Boolean({ description: "Search all scopes, not just current project" })),
|
|
17
|
+
category: Type.Optional(PARA_ENUM),
|
|
18
|
+
limit: Type.Optional(Type.Number({ description: "Max results (default 10)" })),
|
|
19
|
+
});
|
|
20
|
+
export const WikiEditSchema = Type.Object({
|
|
21
|
+
oldText: Type.String({ description: "Exact text to find in the page body" }),
|
|
22
|
+
newText: Type.String({ description: "Replacement text" }),
|
|
23
|
+
});
|
|
24
|
+
export const WikiWritePageSchema = Type.Object({
|
|
25
|
+
category: PARA_ENUM,
|
|
26
|
+
slug: Type.String({ description: "Page slug (lowercase, hyphens)" }),
|
|
27
|
+
title: Type.String({ description: "Page title" }),
|
|
28
|
+
scope: Type.Array(Type.String(), { description: "Scope tags" }),
|
|
29
|
+
tags: Type.Array(Type.String(), { description: "Topic tags" }),
|
|
30
|
+
body: Type.String({ description: "Page body in markdown (wiki summary format)" }),
|
|
31
|
+
mode: StringEnum(["create", "replace", "append", "edit"], {
|
|
32
|
+
description: "Write mode: create new, replace existing, append to existing, or edit specific sections",
|
|
33
|
+
}),
|
|
34
|
+
edits: Type.Optional(Type.Array(WikiEditSchema, {
|
|
35
|
+
description: "For mode=edit: targeted text replacements (oldText→newText). Page must exist.",
|
|
36
|
+
})),
|
|
37
|
+
});
|
|
38
|
+
export const WikiWriteParams = Type.Object({
|
|
39
|
+
pages: Type.Array(WikiWritePageSchema, {
|
|
40
|
+
description: "Pages to write or update",
|
|
41
|
+
}),
|
|
42
|
+
// DEPRECATED: indexContent is ignored. Index is auto-rebuilt from all pages on disk.
|
|
43
|
+
// Kept in schema to avoid breaking existing callers.
|
|
44
|
+
indexContent: Type.Optional(Type.String({ description: "Updated index.md content (full replacement)" })),
|
|
45
|
+
logSummary: Type.Optional(Type.String({ description: "One-line summary for log.md" })),
|
|
46
|
+
});
|
|
47
|
+
export const WikiEditParams = Type.Object({
|
|
48
|
+
path: Type.String({ description: "Existing page path (e.g. 'resources/ssl-cert-gotchas')" }),
|
|
49
|
+
edits: Type.Array(WikiEditSchema, {
|
|
50
|
+
description: "Atomic exact text replacements. Every oldText must appear exactly once or no changes are written.",
|
|
51
|
+
}),
|
|
52
|
+
title: Type.Optional(Type.String({ description: "Optional replacement page title" })),
|
|
53
|
+
scope: Type.Optional(Type.Array(Type.String(), { description: "Optional replacement scope tags" })),
|
|
54
|
+
tags: Type.Optional(Type.Array(Type.String(), { description: "Optional replacement topic tags" })),
|
|
55
|
+
logSummary: Type.Optional(Type.String({ description: "One-line summary for log.md" })),
|
|
56
|
+
});
|
|
57
|
+
export const WikiReadParams = Type.Object({
|
|
58
|
+
path: Type.String({
|
|
59
|
+
description: "Page path (e.g. 'projects/auth-refactor') or page title",
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
export const WikiMoveParams = Type.Object({
|
|
63
|
+
path: Type.String({
|
|
64
|
+
description: "Current page path (e.g. 'projects/auth-refactor')",
|
|
65
|
+
}),
|
|
66
|
+
to: PARA_ENUM,
|
|
67
|
+
});
|
|
68
|
+
export const WikiLintParams = Type.Object({
|
|
69
|
+
autoFix: Type.Optional(Type.Boolean({ description: "Auto-fix simple issues (default true)" })),
|
|
70
|
+
});
|
|
71
|
+
export const WikiMigrateParams = Type.Object({});
|
|
72
|
+
export const WikiSummarizeParams = Type.Object({
|
|
73
|
+
target: Type.String({
|
|
74
|
+
description: "Page path, category name (e.g. 'projects'), or 'all'",
|
|
75
|
+
}),
|
|
76
|
+
depth: Type.Optional(StringEnum(["brief", "detailed"], {
|
|
77
|
+
description: "Summary depth (default brief)",
|
|
78
|
+
})),
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CACjC,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAU,EACvD,EAAE,WAAW,EAAE,eAAe,EAAE,CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAC7C,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAU,EAC3C,EAAE,WAAW,EAAE,mDAAmD,EAAE,CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;IAC7E,UAAU,EAAE,IAAI,CAAC,QAAQ,CACvB,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAU,EAAE;QAC3C,WAAW,EAAE,wCAAwC;KACtD,CAAC,CACH;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC9C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,CAClF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IACpE,MAAM,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CAC7E;IACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,CACzD;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IAC5E,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IACpE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACjD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAC/D,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAC9D,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC;IACjF,IAAI,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAU,EAAE;QACjE,WAAW,EAAE,yFAAyF;KACvG,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAC9C,WAAW,EAAE,+EAA+E;KAC7F,CAAC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;QACrC,WAAW,EAAE,0BAA0B;KACxC,CAAC;IACF,qFAAqF;IACrF,qDAAqD;IACrD,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6CAA6C,EAAE,CAAC,CAC5E;IACD,UAAU,EAAE,IAAI,CAAC,QAAQ,CACvB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAC5D;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wDAAwD,EAAE,CAAC;IAC5F,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;QAChC,WAAW,EAAE,mGAAmG;KACjH,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,CAAC;IACrF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,CAAC;IACnG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAClG,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,yDAAyD;KACvE,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,mDAAmD;KACjE,CAAC;IACF,EAAE,EAAE,SAAS;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC,CACvE;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,sDAAsD;KACpE,CAAC;IACF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAClB,UAAU,CAAC,CAAC,OAAO,EAAE,UAAU,CAAU,EAAE;QACzC,WAAW,EAAE,+BAA+B;KAC7C,CAAC,CACH;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { QMDStore } from "qmd-engine";
|
|
2
|
+
import { type ParaCategory } from "../wiki.js";
|
|
3
|
+
/** Resolve a page path like "projects/auth-refactor" into category + slug. */
|
|
4
|
+
export declare function parsePagePath(path: string): {
|
|
5
|
+
category: ParaCategory;
|
|
6
|
+
slug: string;
|
|
7
|
+
} | null;
|
|
8
|
+
/**
|
|
9
|
+
* Schedule index rebuild + QMD reindex after latency-sensitive edits.
|
|
10
|
+
* Debounced per wiki directory and coordinated through the scheduler queue so
|
|
11
|
+
* multiple Pi processes do not run the same maintenance task concurrently.
|
|
12
|
+
*/
|
|
13
|
+
export declare function scheduleWikiMaintenance(wikiDir: string, store: QMDStore, markDirty: () => void): void;
|
|
14
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAIhE,8EAA8E;AAC9E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,GACX;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUjD;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,IAAI,GACpB,IAAI,CAEN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { enqueueWikiMaintenance } from "../scheduler/index.js";
|
|
2
|
+
import { PARA_CATEGORIES } from "../wiki.js";
|
|
3
|
+
// -- Source resolution helpers -----------------------------------------------
|
|
4
|
+
/** Resolve a page path like "projects/auth-refactor" into category + slug. */
|
|
5
|
+
export function parsePagePath(path) {
|
|
6
|
+
const parts = path.split("/");
|
|
7
|
+
if (parts.length === 2) {
|
|
8
|
+
const cat = parts[0];
|
|
9
|
+
if (PARA_CATEGORIES.includes(cat)) {
|
|
10
|
+
const slug = parts[1].replace(/\.md$/, "");
|
|
11
|
+
return { category: cat, slug };
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
// -- Background maintenance --------------------------------------------------
|
|
17
|
+
/**
|
|
18
|
+
* Schedule index rebuild + QMD reindex after latency-sensitive edits.
|
|
19
|
+
* Debounced per wiki directory and coordinated through the scheduler queue so
|
|
20
|
+
* multiple Pi processes do not run the same maintenance task concurrently.
|
|
21
|
+
*/
|
|
22
|
+
export function scheduleWikiMaintenance(wikiDir, store, markDirty) {
|
|
23
|
+
enqueueWikiMaintenance(wikiDir, store, markDirty);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/tools/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AAEhE,+EAA+E;AAE/E,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAC3B,IAAY;IAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAiB,CAAC;QACrC,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3C,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,KAAe,EACf,SAAqB;IAErB,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentToolResult } from "@earendil-works/pi-agent-core";
|
|
2
|
+
import type { ProjectScope } from "../scope.js";
|
|
3
|
+
import type { WikiSummarizeDetails } from "./schemas.js";
|
|
4
|
+
export declare function createSummarizeExecute(wikiDir: string, getScope: () => ProjectScope): (params: {
|
|
5
|
+
target: string;
|
|
6
|
+
depth?: "brief" | "detailed";
|
|
7
|
+
}) => Promise<AgentToolResult<WikiSummarizeDetails>>;
|
|
8
|
+
//# sourceMappingURL=summarize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../src/tools/summarize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAKzD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,YAAY,IAG1B,QAAQ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;CAAE,KACvD,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAyElD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { generateOverviewPrompt } from "../summarize.js";
|
|
2
|
+
import { listPages, readPage, PARA_CATEGORIES } from "../wiki.js";
|
|
3
|
+
import { parsePagePath } from "./shared.js";
|
|
4
|
+
// -- Factory: wiki_summarize execute -----------------------------------------
|
|
5
|
+
export function createSummarizeExecute(wikiDir, getScope) {
|
|
6
|
+
return async (params) => {
|
|
7
|
+
const scope = getScope();
|
|
8
|
+
const pages = [];
|
|
9
|
+
if (params.target === "all") {
|
|
10
|
+
// Summarize entire wiki
|
|
11
|
+
const refs = await listPages(wikiDir);
|
|
12
|
+
for (const ref of refs) {
|
|
13
|
+
const page = await readPage(wikiDir, ref.category, ref.slug);
|
|
14
|
+
if (page)
|
|
15
|
+
pages.push(page);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else if (PARA_CATEGORIES.includes(params.target)) {
|
|
19
|
+
// Summarize a category
|
|
20
|
+
const refs = await listPages(wikiDir, params.target);
|
|
21
|
+
for (const ref of refs) {
|
|
22
|
+
const page = await readPage(wikiDir, ref.category, ref.slug);
|
|
23
|
+
if (page)
|
|
24
|
+
pages.push(page);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Summarize a single page
|
|
29
|
+
const parsed = parsePagePath(params.target);
|
|
30
|
+
if (parsed) {
|
|
31
|
+
const page = await readPage(wikiDir, parsed.category, parsed.slug);
|
|
32
|
+
if (page)
|
|
33
|
+
pages.push(page);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Try finding by slug alone across categories
|
|
37
|
+
const allPages = await listPages(wikiDir);
|
|
38
|
+
const targetLower = params.target.toLowerCase();
|
|
39
|
+
for (const ref of allPages) {
|
|
40
|
+
if (ref.slug === targetLower || ref.title.toLowerCase() === targetLower) {
|
|
41
|
+
const page = await readPage(wikiDir, ref.category, ref.slug);
|
|
42
|
+
if (page)
|
|
43
|
+
pages.push(page);
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (pages.length === 0) {
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{
|
|
53
|
+
type: "text",
|
|
54
|
+
text: `No pages found for target "${params.target}". Nothing to summarize.`,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
details: { target: params.target, pageCount: 0 },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Generate a bounded overview prompt for the LLM. For large targets like
|
|
61
|
+
// `all`, brief mode must not dump every full page body into model context.
|
|
62
|
+
const depth = params.depth ?? "brief";
|
|
63
|
+
const overviewPrompt = generateOverviewPrompt(pages, scope, { depth });
|
|
64
|
+
const depthNote = depth === "detailed"
|
|
65
|
+
? "\nProvide a DETAILED summary with full Key Facts, Insights, and Connections for each theme."
|
|
66
|
+
: "\nProvide a BRIEF overview — one paragraph per theme, focus on high-level patterns.";
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: overviewPrompt + depthNote +
|
|
72
|
+
"\n\nYou may optionally create a summary page via wiki_write if the overview is worth preserving.",
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
details: {
|
|
76
|
+
target: params.target,
|
|
77
|
+
pageCount: pages.length,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=summarize.js.map
|