pi-para 0.5.2 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +160 -0
- package/CHANGELOG.md +29 -0
- package/CONFIGURATION.md +243 -0
- package/README.md +140 -237
- package/SETUP.md +196 -112
- package/STRUCTURE.md +140 -0
- package/dist/atomic-write.d.ts +2 -0
- package/dist/atomic-write.d.ts.map +1 -0
- package/dist/atomic-write.js +18 -0
- package/dist/atomic-write.js.map +1 -0
- package/dist/capture.d.ts +4 -4
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +1 -1
- package/dist/capture.js.map +1 -1
- package/dist/cli-legacy.d.ts +4 -0
- package/dist/cli-legacy.d.ts.map +1 -0
- package/dist/cli-legacy.js +41 -0
- package/dist/cli-legacy.js.map +1 -0
- package/dist/cli.d.ts +2 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +135 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +3 -3
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +189 -256
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +104 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +242 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +4 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -7
- package/dist/context.js.map +1 -1
- package/dist/credentials.d.ts +27 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +85 -0
- package/dist/credentials.js.map +1 -0
- package/dist/daemon.d.ts +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/doctor.d.ts +20 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +171 -0
- package/dist/doctor.js.map +1 -0
- package/dist/gepa/index.js +1 -1
- package/dist/gepa/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +102 -37
- package/dist/index.js.map +1 -1
- package/dist/maintainer.d.ts +2 -2
- package/dist/maintainer.d.ts.map +1 -1
- package/dist/maintainer.js +2 -2
- package/dist/maintainer.js.map +1 -1
- package/dist/model-resolver.d.ts +30 -0
- package/dist/model-resolver.d.ts.map +1 -0
- package/dist/model-resolver.js +71 -0
- package/dist/model-resolver.js.map +1 -0
- package/dist/paths.d.ts +20 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +33 -0
- package/dist/paths.js.map +1 -0
- package/dist/processor.d.ts +2 -2
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +2 -2
- package/dist/processor.js.map +1 -1
- package/dist/qmd-providers.d.ts +12 -0
- package/dist/qmd-providers.d.ts.map +1 -0
- package/dist/qmd-providers.js +45 -0
- package/dist/qmd-providers.js.map +1 -0
- package/dist/query.d.ts +1 -1
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +14 -1
- package/dist/query.js.map +1 -1
- package/dist/repair.d.ts +11 -0
- package/dist/repair.d.ts.map +1 -0
- package/dist/repair.js +41 -0
- package/dist/repair.js.map +1 -0
- package/dist/scheduler/controls.d.ts +35 -0
- package/dist/scheduler/controls.d.ts.map +1 -0
- package/dist/scheduler/controls.js +98 -0
- package/dist/scheduler/controls.js.map +1 -0
- package/dist/scheduler/index.d.ts +48 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +193 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/leases.d.ts +22 -0
- package/dist/scheduler/leases.d.ts.map +1 -0
- package/dist/scheduler/leases.js +74 -0
- package/dist/scheduler/leases.js.map +1 -0
- package/dist/scheduler/session-capture.d.ts +33 -0
- package/dist/scheduler/session-capture.d.ts.map +1 -0
- package/dist/scheduler/session-capture.js +108 -0
- package/dist/scheduler/session-capture.js.map +1 -0
- package/dist/scheduler/state.d.ts +56 -0
- package/dist/scheduler/state.d.ts.map +1 -0
- package/dist/scheduler/state.js +210 -0
- package/dist/scheduler/state.js.map +1 -0
- package/dist/session-tools.d.ts +1 -1
- package/dist/session-tools.d.ts.map +1 -1
- package/dist/settings.d.ts +19 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +106 -0
- package/dist/settings.js.map +1 -0
- package/dist/setup.d.ts +29 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +90 -0
- package/dist/setup.js.map +1 -0
- package/dist/status.d.ts +22 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +93 -0
- package/dist/status.js.map +1 -0
- package/dist/store.d.ts +23 -8
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +89 -34
- package/dist/store.js.map +1 -1
- package/dist/summarize.d.ts +6 -2
- package/dist/summarize.d.ts.map +1 -1
- package/dist/summarize.js +60 -25
- package/dist/summarize.js.map +1 -1
- package/dist/templates/prompts.d.ts +1 -1
- package/dist/templates/prompts.d.ts.map +1 -1
- package/dist/templates/prompts.js +1 -1
- package/dist/tools.d.ts +5 -5
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +243 -78
- package/dist/tools.js.map +1 -1
- package/dist/wiki-tool-guidance.d.ts +6 -0
- package/dist/wiki-tool-guidance.d.ts.map +1 -0
- package/dist/wiki-tool-guidance.js +70 -0
- package/dist/wiki-tool-guidance.js.map +1 -0
- package/dist/wiki.d.ts +6 -1
- package/dist/wiki.d.ts.map +1 -1
- package/dist/wiki.js +88 -19
- package/dist/wiki.js.map +1 -1
- package/package.json +80 -15
- package/scripts/install.ps1 +44 -0
- package/scripts/install.sh +62 -0
- package/scripts/smoke-install.mjs +61 -0
- package/skills/para/SKILL.md +1 -1
- package/skills/setup/SKILL.md +1 -1
- package/src/atomic-write.ts +17 -0
- package/src/capture.ts +4 -4
- package/src/cli-legacy.ts +43 -0
- package/src/cli.ts +133 -28
- package/src/commands.ts +203 -243
- package/src/config.ts +355 -0
- package/src/context.ts +29 -14
- package/src/credentials.ts +100 -0
- package/src/daemon.ts +1 -1
- package/src/doctor.ts +204 -0
- package/src/gepa/index.ts +1 -1
- package/src/index.ts +119 -40
- package/src/maintainer.ts +4 -4
- package/src/model-resolver.ts +96 -0
- package/src/paths.ts +48 -0
- package/src/processor.ts +4 -4
- package/src/qmd-providers.ts +63 -0
- package/src/query.ts +15 -1
- package/src/repair.ts +49 -0
- package/src/scheduler/controls.ts +125 -0
- package/src/scheduler/index.ts +210 -0
- package/src/scheduler/leases.ts +98 -0
- package/src/scheduler/session-capture.ts +146 -0
- package/src/scheduler/state.ts +304 -0
- package/src/session-tools.ts +1 -1
- package/src/settings.ts +126 -0
- package/src/setup.ts +116 -0
- package/src/status.ts +115 -0
- package/src/store.ts +116 -31
- package/src/summarize.ts +72 -16
- package/src/templates/prompts.ts +1 -1
- package/src/tools.ts +280 -90
- package/src/wiki-tool-guidance.ts +84 -0
- package/src/wiki.ts +98 -26
package/dist/store.d.ts
CHANGED
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* qmd store lifecycle — manages the
|
|
2
|
+
* qmd store lifecycle — manages the qmd-engine store instance.
|
|
3
3
|
*
|
|
4
4
|
* Handles store creation/opening, search with scope filtering,
|
|
5
5
|
* re-indexing after wiki changes, and embedding lifecycle.
|
|
6
6
|
*/
|
|
7
|
-
import type { QMDStore } from "
|
|
7
|
+
import type { QMDStore } from "qmd-engine";
|
|
8
|
+
import type { ParaUserConfig } from "./config.js";
|
|
8
9
|
import type { PageFrontmatter, PageRef, ParaCategory } from "./wiki.js";
|
|
9
10
|
import type { ProjectScope } from "./scope.js";
|
|
10
|
-
export type { QMDStore } from "
|
|
11
|
+
export type { QMDStore } from "qmd-engine";
|
|
12
|
+
export interface OpenStoreOptions {
|
|
13
|
+
paraConfig?: ParaUserConfig;
|
|
14
|
+
secretsPath?: string;
|
|
15
|
+
authStorage?: {
|
|
16
|
+
getApiKey(provider: string): Promise<string | undefined>;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Start slow vector embedding in the background after BM25 indexing.
|
|
20
|
+
* Pi session startup disables this so single-shot `pi -p` processes can exit
|
|
21
|
+
* promptly; callers can still invoke embedIfNeeded() explicitly.
|
|
22
|
+
*/
|
|
23
|
+
backgroundEmbed?: boolean;
|
|
24
|
+
}
|
|
11
25
|
export interface WikiSearchOptions {
|
|
12
26
|
scope?: ProjectScope;
|
|
13
27
|
category?: ParaCategory;
|
|
@@ -28,10 +42,10 @@ export interface WikiSearchResult {
|
|
|
28
42
|
* - wiki: all .md files except raw/
|
|
29
43
|
* - raw: .md files under raw/, not included in default queries
|
|
30
44
|
*
|
|
31
|
-
* Adds PARA category contexts
|
|
32
|
-
*
|
|
45
|
+
* Adds PARA category contexts and runs update() for BM25. When requested,
|
|
46
|
+
* also schedules embed() in the background.
|
|
33
47
|
*/
|
|
34
|
-
export declare function openStore(wikiDir: string): Promise<QMDStore>;
|
|
48
|
+
export declare function openStore(wikiDir: string, opts?: OpenStoreOptions): Promise<QMDStore>;
|
|
35
49
|
/**
|
|
36
50
|
* Close the store. Awaits any pending embed operation (with timeout) first.
|
|
37
51
|
*/
|
|
@@ -39,8 +53,9 @@ export declare function closeStore(store: QMDStore): Promise<void>;
|
|
|
39
53
|
/**
|
|
40
54
|
* Search the wiki with scope and category filtering.
|
|
41
55
|
*
|
|
42
|
-
* Uses
|
|
43
|
-
*
|
|
56
|
+
* Uses vector search when an embedding index is available, merged with BM25
|
|
57
|
+
* lexical search for exact keyword matches. Each result's frontmatter is parsed
|
|
58
|
+
* to apply scope/category/archive filters.
|
|
44
59
|
*/
|
|
45
60
|
export declare function searchWiki(store: QMDStore, query: string, opts: WikiSearchOptions): Promise<WikiSearchResult[]>;
|
|
46
61
|
/**
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE;QAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;KAAE,CAAC;IAC3E;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,eAAe,CAAC;CAC9B;AA8DD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkE/F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAY/D;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqE7B;AAkCD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE"}
|
package/dist/store.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* qmd store lifecycle — manages the
|
|
2
|
+
* qmd store lifecycle — manages the qmd-engine store instance.
|
|
3
3
|
*
|
|
4
4
|
* Handles store creation/opening, search with scope filtering,
|
|
5
5
|
* re-indexing after wiki changes, and embedding lifecycle.
|
|
@@ -8,8 +8,9 @@ import { readFileSync, existsSync } from "node:fs";
|
|
|
8
8
|
import { homedir } from "node:os";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { parse as parseYaml } from "yaml";
|
|
11
|
-
import { createStore, extractSnippet } from "
|
|
11
|
+
import { createStore, extractSnippet } from "qmd-engine";
|
|
12
12
|
import { parseFrontmatter } from "./frontmatter.js";
|
|
13
|
+
import { buildQmdProvidersFromParaConfig } from "./qmd-providers.js";
|
|
13
14
|
import { matchesScope } from "./scope.js";
|
|
14
15
|
// -- PARA context descriptions -----------------------------------------------
|
|
15
16
|
const PARA_CONTEXTS = {
|
|
@@ -21,6 +22,20 @@ const PARA_CONTEXTS = {
|
|
|
21
22
|
const RAW_CONTEXT = "Immutable source material: articles, documents, notes. Not synthesized.";
|
|
22
23
|
// -- Pending embed tracking --------------------------------------------------
|
|
23
24
|
const pendingEmbeds = new WeakMap();
|
|
25
|
+
// -- qmd provider config -----------------------------------------------------
|
|
26
|
+
/**
|
|
27
|
+
* qmd-engine currently falls back to node-llama-cpp when no API provider is
|
|
28
|
+
* configured. pi-para never uses local LLMs, so provide an inert API endpoint
|
|
29
|
+
* whenever neither pi-para profiles nor legacy provider config exists. BM25
|
|
30
|
+
* search works without calling this endpoint; accidental vector/chat calls fail
|
|
31
|
+
* fast instead of downloading/building local models.
|
|
32
|
+
*/
|
|
33
|
+
const NO_LOCAL_PROVIDERS = {
|
|
34
|
+
embed: {
|
|
35
|
+
url: "http://127.0.0.1:9",
|
|
36
|
+
model: "disabled-local-llm",
|
|
37
|
+
},
|
|
38
|
+
};
|
|
24
39
|
// -- qmd config loading ------------------------------------------------------
|
|
25
40
|
/**
|
|
26
41
|
* Read providers from ~/.config/qmd/index.yml.
|
|
@@ -47,13 +62,21 @@ function loadQmdProviders() {
|
|
|
47
62
|
* - wiki: all .md files except raw/
|
|
48
63
|
* - raw: .md files under raw/, not included in default queries
|
|
49
64
|
*
|
|
50
|
-
* Adds PARA category contexts
|
|
51
|
-
*
|
|
65
|
+
* Adds PARA category contexts and runs update() for BM25. When requested,
|
|
66
|
+
* also schedules embed() in the background.
|
|
52
67
|
*/
|
|
53
|
-
export async function openStore(wikiDir) {
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
const
|
|
68
|
+
export async function openStore(wikiDir, opts = {}) {
|
|
69
|
+
// Prefer pi-para's in-memory provider profiles. Legacy QMD YAML remains a
|
|
70
|
+
// fallback for migrated installs and tests that do not pass paraConfig.
|
|
71
|
+
const configuredProviders = opts.paraConfig
|
|
72
|
+
? opts.paraConfig.qmd.providerConfig === "legacy-qmd-compatible"
|
|
73
|
+
? loadQmdProviders()
|
|
74
|
+
: await buildQmdProvidersFromParaConfig(opts.paraConfig, {
|
|
75
|
+
secretsPath: opts.secretsPath,
|
|
76
|
+
authStorage: opts.authStorage,
|
|
77
|
+
})
|
|
78
|
+
: loadQmdProviders();
|
|
79
|
+
const providers = configuredProviders ?? NO_LOCAL_PROVIDERS;
|
|
57
80
|
const store = await createStore({
|
|
58
81
|
dbPath: join(wikiDir, ".qmd.sqlite"),
|
|
59
82
|
config: {
|
|
@@ -69,7 +92,7 @@ export async function openStore(wikiDir) {
|
|
|
69
92
|
includeByDefault: false,
|
|
70
93
|
},
|
|
71
94
|
},
|
|
72
|
-
|
|
95
|
+
providers: providers,
|
|
73
96
|
},
|
|
74
97
|
});
|
|
75
98
|
// Add PARA category contexts to the wiki collection
|
|
@@ -80,26 +103,28 @@ export async function openStore(wikiDir) {
|
|
|
80
103
|
await store.addContext("raw", "/", RAW_CONTEXT);
|
|
81
104
|
// Sync filesystem -> BM25 index (fast, search ready immediately)
|
|
82
105
|
await store.update();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
if (opts.backgroundEmbed !== false && opts.paraConfig?.qmd.embedEnabled !== false) {
|
|
107
|
+
// Schedule embedding in background (non-blocking).
|
|
108
|
+
// BM25 search works immediately; hybrid search improves once embed completes.
|
|
109
|
+
// Suppress console.error from qmd's internal embed failures.
|
|
110
|
+
const origError = console.error;
|
|
111
|
+
const embedPromise = store.embed().then(() => {
|
|
112
|
+
pendingEmbeds.delete(store);
|
|
113
|
+
}).catch(() => {
|
|
114
|
+
// Embedding failures are non-fatal — hybrid search degrades to BM25
|
|
115
|
+
pendingEmbeds.delete(store);
|
|
116
|
+
}).finally(() => {
|
|
117
|
+
console.error = origError;
|
|
118
|
+
});
|
|
119
|
+
// Temporarily suppress embed error noise during background embed
|
|
120
|
+
console.error = (...args) => {
|
|
121
|
+
const msg = String(args[0] ?? "");
|
|
122
|
+
if (msg.includes("embed error") || msg.includes("fetch failed"))
|
|
123
|
+
return;
|
|
124
|
+
origError(...args);
|
|
125
|
+
};
|
|
126
|
+
pendingEmbeds.set(store, embedPromise);
|
|
127
|
+
}
|
|
103
128
|
return store;
|
|
104
129
|
}
|
|
105
130
|
/**
|
|
@@ -109,7 +134,10 @@ export async function closeStore(store) {
|
|
|
109
134
|
const pending = pendingEmbeds.get(store);
|
|
110
135
|
if (pending) {
|
|
111
136
|
// Wait for pending embed with a short timeout — don't hang forever
|
|
112
|
-
const timeout = new Promise((resolve) =>
|
|
137
|
+
const timeout = new Promise((resolve) => {
|
|
138
|
+
const timer = setTimeout(resolve, 5_000);
|
|
139
|
+
timer.unref?.();
|
|
140
|
+
});
|
|
113
141
|
await Promise.race([pending, timeout]);
|
|
114
142
|
pendingEmbeds.delete(store);
|
|
115
143
|
}
|
|
@@ -118,8 +146,9 @@ export async function closeStore(store) {
|
|
|
118
146
|
/**
|
|
119
147
|
* Search the wiki with scope and category filtering.
|
|
120
148
|
*
|
|
121
|
-
* Uses
|
|
122
|
-
*
|
|
149
|
+
* Uses vector search when an embedding index is available, merged with BM25
|
|
150
|
+
* lexical search for exact keyword matches. Each result's frontmatter is parsed
|
|
151
|
+
* to apply scope/category/archive filters.
|
|
123
152
|
*/
|
|
124
153
|
export async function searchWiki(store, query, opts) {
|
|
125
154
|
const limit = opts.limit ?? 10;
|
|
@@ -135,12 +164,13 @@ export async function searchWiki(store, query, opts) {
|
|
|
135
164
|
metadata.category = opts.category;
|
|
136
165
|
}
|
|
137
166
|
const fetchLimit = opts.scope ? limit * 3 : limit;
|
|
138
|
-
const
|
|
167
|
+
const lexResults = await store.searchLex(query, {
|
|
139
168
|
limit: fetchLimit,
|
|
140
169
|
collection: "wiki",
|
|
141
170
|
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
142
171
|
graphBoost: opts.graphBoost ?? true,
|
|
143
172
|
});
|
|
173
|
+
const rawResults = await mergeLexAndVectorResults(store, query, lexResults, fetchLimit);
|
|
144
174
|
const results = [];
|
|
145
175
|
for (const result of rawResults) {
|
|
146
176
|
// Parse category and slug from the display path (e.g. "projects/auth-refactor.md")
|
|
@@ -167,7 +197,7 @@ export async function searchWiki(store, query, opts) {
|
|
|
167
197
|
page: {
|
|
168
198
|
category,
|
|
169
199
|
slug,
|
|
170
|
-
title: frontmatter.title || result.title,
|
|
200
|
+
title: frontmatter.title || result.title || slug,
|
|
171
201
|
path: `${category}/${slug}.md`,
|
|
172
202
|
},
|
|
173
203
|
score: result.score,
|
|
@@ -179,6 +209,31 @@ export async function searchWiki(store, query, opts) {
|
|
|
179
209
|
}
|
|
180
210
|
return results;
|
|
181
211
|
}
|
|
212
|
+
async function mergeLexAndVectorResults(store, query, lexResults, limit) {
|
|
213
|
+
let vecResults = [];
|
|
214
|
+
try {
|
|
215
|
+
const status = await store.getStatus();
|
|
216
|
+
const llm = store.internal.llm;
|
|
217
|
+
const embedModel = llm?.embedModelName;
|
|
218
|
+
if (status.hasVectorIndex && llm && embedModel) {
|
|
219
|
+
vecResults = await store.internal.searchVec(query, embedModel, limit, "wiki", llm);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Semantic search is best-effort; lexical BM25 remains the reliable fallback.
|
|
224
|
+
}
|
|
225
|
+
const merged = new Map();
|
|
226
|
+
for (const result of lexResults) {
|
|
227
|
+
merged.set(result.displayPath, { ...result, score: result.score * 0.85 });
|
|
228
|
+
}
|
|
229
|
+
for (const result of vecResults) {
|
|
230
|
+
const existing = merged.get(result.displayPath);
|
|
231
|
+
if (!existing || result.score > existing.score) {
|
|
232
|
+
merged.set(result.displayPath, result);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return [...merged.values()].sort((a, b) => b.score - a.score).slice(0, limit * 2);
|
|
236
|
+
}
|
|
182
237
|
/**
|
|
183
238
|
* Re-index the store (fast filesystem scan). Makes new/changed
|
|
184
239
|
* content BM25-searchable immediately. Call after wiki writes.
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/summarize.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface SummarizeOptions {
|
|
|
27
27
|
* (bashExecution, compactionSummary, branchSummary, etc.). Falls back to
|
|
28
28
|
* a compatible reimplementation for plain user/assistant/toolResult messages.
|
|
29
29
|
*
|
|
30
|
-
* @param messages - AgentMessage[] from @
|
|
30
|
+
* @param messages - AgentMessage[] from @earendil-works/pi-agent-core
|
|
31
31
|
* @returns Serialized text in [User]: / [Assistant]: / [Tool result]: format
|
|
32
32
|
*/
|
|
33
33
|
export declare function serializeSessionForWiki(messages: unknown[]): string;
|
|
@@ -52,5 +52,9 @@ export declare function generateSummary(content: string, options: SummarizeOptio
|
|
|
52
52
|
* @param scope - Current project scope for context
|
|
53
53
|
* @returns Prompt string for the LLM
|
|
54
54
|
*/
|
|
55
|
-
export
|
|
55
|
+
export interface OverviewPromptOptions {
|
|
56
|
+
depth?: "brief" | "detailed";
|
|
57
|
+
maxChars?: number;
|
|
58
|
+
}
|
|
59
|
+
export declare function generateOverviewPrompt(pages: WikiPage[], scope: ProjectScope, options?: OverviewPromptOptions): string;
|
|
56
60
|
//# sourceMappingURL=summarize.d.ts.map
|
package/dist/summarize.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAuGD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAYR;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,MAAM,CA2DR;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAuGD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,GAClB,MAAM,CAYR;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,MAAM,CA2DR;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,EAAE,EACjB,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAgCR"}
|
package/dist/summarize.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Functions here generate prompt strings — they do NOT call the LLM.
|
|
10
10
|
* The caller (capture.ts, tools.ts) passes the prompt to a standalone Agent.
|
|
11
11
|
*/
|
|
12
|
-
import { convertToLlm, serializeConversation, } from "@
|
|
12
|
+
import { convertToLlm, serializeConversation, } from "@earendil-works/pi-coding-agent";
|
|
13
13
|
import { SUMMARIZE_SYSTEM_PROMPT, ITERATIVE_UPDATE_PROMPT, OVERVIEW_PROMPT, CAPTURE_PROMPT, } from "./templates/prompts.js";
|
|
14
14
|
// -- Constants ---------------------------------------------------------------
|
|
15
15
|
/** Maximum characters for a tool result in serialized output. */
|
|
@@ -45,7 +45,7 @@ function extractTextContent(content) {
|
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* Fallback serialization that mirrors pi's serializeConversation format.
|
|
48
|
-
* Used when @
|
|
48
|
+
* Used when @earendil-works/pi-coding-agent is not available.
|
|
49
49
|
*
|
|
50
50
|
* Formats: [User]:, [Assistant]:, [Assistant thinking]:,
|
|
51
51
|
* [Assistant tool calls]:, [Tool result]:
|
|
@@ -115,7 +115,7 @@ function serializeMessagesFallback(messages) {
|
|
|
115
115
|
* (bashExecution, compactionSummary, branchSummary, etc.). Falls back to
|
|
116
116
|
* a compatible reimplementation for plain user/assistant/toolResult messages.
|
|
117
117
|
*
|
|
118
|
-
* @param messages - AgentMessage[] from @
|
|
118
|
+
* @param messages - AgentMessage[] from @earendil-works/pi-agent-core
|
|
119
119
|
* @returns Serialized text in [User]: / [Assistant]: / [Tool result]: format
|
|
120
120
|
*/
|
|
121
121
|
export function serializeSessionForWiki(messages) {
|
|
@@ -198,34 +198,69 @@ export function generateSummary(content, options) {
|
|
|
198
198
|
].join("\n");
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
* @param scope - Current project scope for context
|
|
209
|
-
* @returns Prompt string for the LLM
|
|
210
|
-
*/
|
|
211
|
-
export function generateOverviewPrompt(pages, scope) {
|
|
201
|
+
const DEFAULT_BRIEF_OVERVIEW_MAX_CHARS = 28_000;
|
|
202
|
+
const DEFAULT_DETAILED_OVERVIEW_MAX_CHARS = 80_000;
|
|
203
|
+
const BRIEF_EXCERPT_CHARS = 180;
|
|
204
|
+
const DETAILED_BODY_CHARS = 2_000;
|
|
205
|
+
export function generateOverviewPrompt(pages, scope, options = {}) {
|
|
206
|
+
const depth = options.depth ?? "brief";
|
|
207
|
+
const maxChars = options.maxChars ?? (depth === "detailed" ? DEFAULT_DETAILED_OVERVIEW_MAX_CHARS : DEFAULT_BRIEF_OVERVIEW_MAX_CHARS);
|
|
212
208
|
const scopeInfo = `Current scope: ${scope.name} (tags: ${scope.include.join(", ")})`;
|
|
213
|
-
const
|
|
214
|
-
const fm = page.frontmatter;
|
|
215
|
-
return [
|
|
216
|
-
`### ${fm.title} (${page.category}/${page.slug})`,
|
|
217
|
-
`PARA: ${fm.para} | Scope: ${fm.scope.join(", ")} | Tags: ${fm.tags.join(", ")}`,
|
|
218
|
-
"",
|
|
219
|
-
page.body,
|
|
220
|
-
].join("\n");
|
|
221
|
-
});
|
|
222
|
-
return [
|
|
209
|
+
const header = [
|
|
223
210
|
OVERVIEW_PROMPT,
|
|
224
211
|
"",
|
|
225
212
|
scopeInfo,
|
|
226
213
|
`Total pages: ${pages.length}`,
|
|
214
|
+
`Input mode: ${depth === "detailed" ? "bounded detailed excerpts" : "compact metadata/excerpts"}`,
|
|
227
215
|
"",
|
|
228
|
-
...pageEntries,
|
|
229
216
|
].join("\n");
|
|
217
|
+
const entries = [];
|
|
218
|
+
let usedChars = header.length;
|
|
219
|
+
let omitted = 0;
|
|
220
|
+
for (const page of pages) {
|
|
221
|
+
const entry = depth === "detailed" ? detailedPageEntry(page) : briefPageEntry(page);
|
|
222
|
+
if (usedChars + entry.length + 2 > maxChars) {
|
|
223
|
+
omitted++;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
entries.push(entry);
|
|
227
|
+
usedChars += entry.length + 2;
|
|
228
|
+
}
|
|
229
|
+
const omittedNote = omitted > 0
|
|
230
|
+
? `\n\n[${omitted} page(s) omitted to keep wiki_summarize within the context budget. Use a category, page path, or depth=\"detailed\" on a narrower target for more detail.]`
|
|
231
|
+
: "";
|
|
232
|
+
return `${header}${entries.join("\n\n")}${omittedNote}`;
|
|
233
|
+
}
|
|
234
|
+
function briefPageEntry(page) {
|
|
235
|
+
const fm = page.frontmatter;
|
|
236
|
+
const excerpt = firstUsefulExcerpt(page.body, BRIEF_EXCERPT_CHARS);
|
|
237
|
+
return [
|
|
238
|
+
`- ${fm.title} (${page.category}/${page.slug})`,
|
|
239
|
+
` PARA: ${fm.para} | Scope: ${fm.scope.join(", ")} | Tags: ${fm.tags.join(", ") || "-"} | Updated: ${fm.updated ?? "-"}`,
|
|
240
|
+
excerpt ? ` Excerpt: ${excerpt}` : undefined,
|
|
241
|
+
fm.links?.length ? ` Links: ${fm.links.slice(0, 8).map((link) => `[[${link}]]`).join(", ")}` : undefined,
|
|
242
|
+
].filter(Boolean).join("\n");
|
|
243
|
+
}
|
|
244
|
+
function detailedPageEntry(page) {
|
|
245
|
+
const fm = page.frontmatter;
|
|
246
|
+
return [
|
|
247
|
+
`### ${fm.title} (${page.category}/${page.slug})`,
|
|
248
|
+
`PARA: ${fm.para} | Scope: ${fm.scope.join(", ")} | Tags: ${fm.tags.join(", ")}`,
|
|
249
|
+
`Updated: ${fm.updated ?? "-"} | Links: ${(fm.links ?? []).slice(0, 12).map((link) => `[[${link}]]`).join(", ") || "-"}`,
|
|
250
|
+
"",
|
|
251
|
+
truncateForSummary(page.body, DETAILED_BODY_CHARS),
|
|
252
|
+
].join("\n");
|
|
253
|
+
}
|
|
254
|
+
function firstUsefulExcerpt(body, maxChars) {
|
|
255
|
+
const cleaned = body
|
|
256
|
+
.split(/\r?\n/)
|
|
257
|
+
.map((line) => line.trim())
|
|
258
|
+
.filter((line) => line && !line.startsWith("#") && !/^[-*]\s*\[?\[?/.test(line))
|
|
259
|
+
.join(" ")
|
|
260
|
+
.replace(/\s+/g, " ")
|
|
261
|
+
.trim();
|
|
262
|
+
if (!cleaned)
|
|
263
|
+
return "";
|
|
264
|
+
return cleaned.length <= maxChars ? cleaned : `${cleaned.slice(0, maxChars - 1)}…`;
|
|
230
265
|
}
|
|
231
266
|
//# sourceMappingURL=summarize.js.map
|
package/dist/summarize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EACL,YAAY,EACZ,qBAAqB,GACtB,MAAM
|
|
1
|
+
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../src/summarize.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export declare const INGEST_PROMPT = "Analyze the source content below and integ
|
|
|
26
26
|
/**
|
|
27
27
|
* Prompt sent when the LLM synthesizes an answer from wiki search results.
|
|
28
28
|
*/
|
|
29
|
-
export declare const QUERY_PROMPT = "Read the retrieved wiki pages below and synthesize an answer to the user's question.\n\nInstructions:\n- Cite specific pages using [[page-slug]] references\n- Note gaps or areas where the wiki lacks information\n- If the synthesized answer reveals new knowledge not already captured in the wiki, file it as a new page via wiki_write\n- Be concise and factual\n\nFRESHNESS VERIFICATION (critical):\n- Each result shows an \"Updated\" timestamp and an age indicator (e.g. \"\u26A0\uFE0F STALE \u2014 45 days old\"). Treat pages not updated in >14 days with healthy skepticism.\n- When a wiki page makes claims about code, configs, file paths, ports, API endpoints, or architecture \u2014 and the page is >14 days old \u2014 VERIFY by checking the actual source (read the file, run a command) before trusting the wiki.\n- When you discover a wiki page contains outdated or incorrect information, IMMEDIATELY fix it with
|
|
29
|
+
export declare const QUERY_PROMPT = "Read the retrieved wiki pages below and synthesize an answer to the user's question.\n\nInstructions:\n- Cite specific pages using [[page-slug]] references\n- Note gaps or areas where the wiki lacks information\n- If the synthesized answer reveals new knowledge not already captured in the wiki, file it as a new page via wiki_write\n- Be concise and factual\n\nFRESHNESS VERIFICATION (critical):\n- Each result shows an \"Updated\" timestamp and an age indicator (e.g. \"\u26A0\uFE0F STALE \u2014 45 days old\"). Treat pages not updated in >14 days with healthy skepticism.\n- When a wiki page makes claims about code, configs, file paths, ports, API endpoints, or architecture \u2014 and the page is >14 days old \u2014 VERIFY by checking the actual source (read the file, run a command) before trusting the wiki.\n- When you discover a wiki page contains outdated or incorrect information, IMMEDIATELY fix it with wiki_edit so future queries get correct answers. This is the self-healing loop.\n- If you cannot verify a claim (e.g. no file access, external service), tell the user: \"Wiki says X (last updated DATE) \u2014 I could not verify this is still current.\"\n- Never silently pass along stale wiki content as fact. Either verify it or flag it.";
|
|
30
30
|
/**
|
|
31
31
|
* System prompt for summarization — produces structured wiki pages from content.
|
|
32
32
|
* Mirrors pi's SUMMARIZATION_SYSTEM_PROMPT but outputs wiki format.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB9C;AAmBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4vDAuBsF,CAAC;AAItH;;;GAGG;AACH,eAAO,MAAM,aAAa,i+CAqBqE,CAAC;AAIhG;;GAEG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwB9C;AAmBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,4vDAuBsF,CAAC;AAItH;;;GAGG;AACH,eAAO,MAAM,aAAa,i+CAqBqE,CAAC;AAIhG;;GAEG;AACH,eAAO,MAAM,YAAY,4uCAa4D,CAAC;AAItF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gpBAoBY,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,siBASmB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,eAAe,uWAM+B,CAAC;AAI5D;;GAEG;AACH,eAAO,MAAM,WAAW,ilBAW6B,CAAC;AAItD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,8nEA2B4F,CAAC;AAE/H;;;GAGG;AACH,eAAO,MAAM,cAAc,48BAgB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,8DAA8D,CAAC"}
|
|
@@ -129,7 +129,7 @@ Instructions:
|
|
|
129
129
|
FRESHNESS VERIFICATION (critical):
|
|
130
130
|
- Each result shows an "Updated" timestamp and an age indicator (e.g. "⚠️ STALE — 45 days old"). Treat pages not updated in >14 days with healthy skepticism.
|
|
131
131
|
- When a wiki page makes claims about code, configs, file paths, ports, API endpoints, or architecture — and the page is >14 days old — VERIFY by checking the actual source (read the file, run a command) before trusting the wiki.
|
|
132
|
-
- When you discover a wiki page contains outdated or incorrect information, IMMEDIATELY fix it with
|
|
132
|
+
- When you discover a wiki page contains outdated or incorrect information, IMMEDIATELY fix it with wiki_edit so future queries get correct answers. This is the self-healing loop.
|
|
133
133
|
- If you cannot verify a claim (e.g. no file access, external service), tell the user: "Wiki says X (last updated DATE) — I could not verify this is still current."
|
|
134
134
|
- Never silently pass along stale wiki content as fact. Either verify it or flag it.`;
|
|
135
135
|
// -- Summarize Prompts -------------------------------------------------------
|
package/dist/tools.d.ts
CHANGED
|
@@ -6,21 +6,21 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Factory functions (createXxxExecute) close over wikiDir and store — no ctx dependency.
|
|
8
8
|
*/
|
|
9
|
-
import type { AgentTool } from "@
|
|
10
|
-
import type { ExtensionAPI } from "@
|
|
11
|
-
import type { QMDStore } from "
|
|
9
|
+
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
11
|
+
import type { QMDStore } from "qmd-engine";
|
|
12
12
|
import type { ProjectScope } from "./scope.js";
|
|
13
13
|
/**
|
|
14
14
|
* Register all wiki tools with the pi extension API.
|
|
15
15
|
*
|
|
16
|
-
* Tools: wiki_ingest, wiki_query, wiki_write, wiki_read,
|
|
16
|
+
* Tools: wiki_ingest, wiki_query, wiki_write, wiki_edit, wiki_read,
|
|
17
17
|
* wiki_move, wiki_lint, wiki_summarize
|
|
18
18
|
*/
|
|
19
19
|
export declare function registerTools(pi: ExtensionAPI, wikiDir: string, store: QMDStore, getScope: () => ProjectScope, markDirty: () => void, getGraphBoost?: () => boolean): void;
|
|
20
20
|
/**
|
|
21
21
|
* Create standalone AgentTool instances for the mini-agent (capture/lint/summarize).
|
|
22
22
|
* Returns only the tools needed for autonomous wiki operations:
|
|
23
|
-
* wiki_write, wiki_read, wiki_query, wiki_move.
|
|
23
|
+
* wiki_write, wiki_edit, wiki_read, wiki_query, wiki_move.
|
|
24
24
|
*/
|
|
25
25
|
export declare function createStandaloneTools(wikiDir: string, store: QMDStore, getScope: () => ProjectScope, markDirty?: () => void): AgentTool[];
|
|
26
26
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsgC/C;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,SAAS,EAAE,MAAM,IAAI,EACrB,aAAa,CAAC,EAAE,MAAM,OAAO,GAC5B,IAAI,CAgWN;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,MAAM,YAAY,EAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,GACrB,SAAS,EAAE,CAiDb"}
|