pi-para 0.6.0 → 0.6.2
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 +0 -9
- package/CHANGELOG.md +22 -0
- package/CONFIGURATION.md +5 -23
- package/README.md +7 -31
- package/SETUP.md +5 -3
- package/STRUCTURE.md +0 -9
- 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 +34 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +461 -0
- package/dist/capture.js.map +1 -0
- 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 +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +15 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +791 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +94 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +228 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +63 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +311 -0
- package/dist/context.js.map +1 -0
- 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 +49 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +226 -0
- package/dist/daemon.js.map +1 -0
- package/dist/doctor.d.ts +20 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +197 -0
- package/dist/doctor.js.map +1 -0
- package/dist/frontmatter.d.ts +59 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +170 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +357 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +88 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +105 -0
- package/dist/ingest.js.map +1 -0
- package/dist/link-discovery.d.ts +40 -0
- package/dist/link-discovery.d.ts.map +1 -0
- package/dist/link-discovery.js +122 -0
- package/dist/link-discovery.js.map +1 -0
- package/dist/link-utils.d.ts +30 -0
- package/dist/link-utils.d.ts.map +1 -0
- package/dist/link-utils.js +145 -0
- package/dist/link-utils.js.map +1 -0
- package/dist/lint.d.ts +39 -0
- package/dist/lint.d.ts.map +1 -0
- package/dist/lint.js +827 -0
- package/dist/lint.js.map +1 -0
- package/dist/maintainer.d.ts +24 -0
- package/dist/maintainer.d.ts.map +1 -0
- package/dist/maintainer.js +358 -0
- package/dist/maintainer.js.map +1 -0
- 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 +14 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +361 -0
- package/dist/processor.js.map +1 -0
- 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 +69 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +120 -0
- package/dist/query.js.map +1 -0
- package/dist/raw.d.ts +57 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +219 -0
- package/dist/raw.js.map +1 -0
- package/dist/redact.d.ts +21 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +143 -0
- package/dist/redact.js.map +1 -0
- 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 +70 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +245 -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/scope.d.ts +54 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +161 -0
- package/dist/scope.js.map +1 -0
- package/dist/scripts/bulk-link-fix.d.ts +9 -0
- package/dist/scripts/bulk-link-fix.d.ts.map +1 -0
- package/dist/scripts/bulk-link-fix.js +106 -0
- package/dist/scripts/bulk-link-fix.js.map +1 -0
- package/dist/session-tools.d.ts +33 -0
- package/dist/session-tools.d.ts.map +1 -0
- package/dist/session-tools.js +211 -0
- package/dist/session-tools.js.map +1 -0
- package/dist/settings.d.ts +37 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +176 -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/state.d.ts +54 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +176 -0
- package/dist/state.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 +71 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +282 -0
- package/dist/store.js.map +1 -0
- package/dist/summarize.d.ts +60 -0
- package/dist/summarize.d.ts.map +1 -0
- package/dist/summarize.js +266 -0
- package/dist/summarize.js.map +1 -0
- package/dist/tag-registry.d.ts +56 -0
- package/dist/tag-registry.d.ts.map +1 -0
- package/dist/tag-registry.js +146 -0
- package/dist/tag-registry.js.map +1 -0
- package/dist/templates/prompts.d.ts +51 -0
- package/dist/templates/prompts.d.ts.map +1 -0
- package/dist/templates/prompts.js +203 -0
- package/dist/templates/prompts.js.map +1 -0
- package/dist/tools.d.ts +26 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +1198 -0
- package/dist/tools.js.map +1 -0
- package/dist/watcher.d.ts +25 -0
- package/dist/watcher.d.ts.map +1 -0
- package/dist/watcher.js +84 -0
- package/dist/watcher.js.map +1 -0
- package/dist/webui/client/dist/index.html +1885 -0
- package/dist/webui/server.d.ts +31 -0
- package/dist/webui/server.d.ts.map +1 -0
- package/dist/webui/server.js +566 -0
- package/dist/webui/server.js.map +1 -0
- 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 +108 -0
- package/dist/wiki.d.ts.map +1 -0
- package/dist/wiki.js +497 -0
- package/dist/wiki.js.map +1 -0
- package/package.json +2 -1
- package/scripts/build-assets.mjs +1 -13
- package/skills/setup/SKILL.md +1 -1
- package/src/cli.ts +0 -70
- package/src/commands.ts +78 -3
- package/src/config.ts +0 -25
- package/src/doctor.ts +21 -1
- package/src/index.ts +16 -38
- package/src/scheduler/index.ts +64 -0
- package/src/settings.ts +88 -0
- package/src/setup.ts +1 -1
- package/src/templates/prompts.ts +0 -56
- package/scripts/gepa/dataset.py +0 -192
- package/scripts/gepa/lm_providers.py +0 -472
- package/scripts/gepa/metric.py +0 -279
- package/scripts/gepa/optimize.py +0 -367
- package/scripts/gepa/program.py +0 -99
- package/scripts/gepa/pyproject.toml +0 -19
- package/scripts/gepa/run-all.sh +0 -53
- package/scripts/gepa/wiki_reader.py +0 -113
- package/src/gepa/index.ts +0 -287
- package/src/gepa/optimized/capture-prompt.txt +0 -65
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* One-time bulk fix: auto-link slugs, normalize tags, sync frontmatter.links
|
|
4
|
+
* across all wiki pages.
|
|
5
|
+
*
|
|
6
|
+
* Usage: npx tsx src/scripts/bulk-link-fix.ts [--dry-run]
|
|
7
|
+
*/
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { listPages, readPage, writePage, } from "../wiki.js";
|
|
11
|
+
import { autoLinkSlugs, syncFrontmatterLinks } from "../link-utils.js";
|
|
12
|
+
import { normalizeTags, normalizeScopes } from "../tag-registry.js";
|
|
13
|
+
const WIKI_DIR = join(homedir(), ".pi", "wiki");
|
|
14
|
+
const dryRun = process.argv.includes("--dry-run");
|
|
15
|
+
async function main() {
|
|
16
|
+
console.log(`\n📚 Bulk Wiki Fix — ${dryRun ? "DRY RUN" : "LIVE"}`);
|
|
17
|
+
console.log(` Wiki: ${WIKI_DIR}\n`);
|
|
18
|
+
// Load all pages
|
|
19
|
+
const refs = await listPages(WIKI_DIR);
|
|
20
|
+
const pages = [];
|
|
21
|
+
for (const ref of refs) {
|
|
22
|
+
const page = await readPage(WIKI_DIR, ref.category, ref.slug);
|
|
23
|
+
if (page)
|
|
24
|
+
pages.push(page);
|
|
25
|
+
}
|
|
26
|
+
const allSlugs = new Set(pages.map(p => p.slug));
|
|
27
|
+
console.log(` Found ${pages.length} pages, ${allSlugs.size} unique slugs\n`);
|
|
28
|
+
let linksAdded = 0;
|
|
29
|
+
let tagsNormalized = 0;
|
|
30
|
+
let frontmatterSynced = 0;
|
|
31
|
+
let pagesChanged = 0;
|
|
32
|
+
for (const page of pages) {
|
|
33
|
+
const originalBody = page.body;
|
|
34
|
+
const originalTags = [...page.frontmatter.tags];
|
|
35
|
+
const originalLinks = [...page.frontmatter.links];
|
|
36
|
+
const originalScope = [...page.frontmatter.scope];
|
|
37
|
+
// 1. Normalize scopes first (tags depend on scope)
|
|
38
|
+
const newScope = normalizeScopes(page.frontmatter.scope);
|
|
39
|
+
// 2. Auto-link slug mentions in body
|
|
40
|
+
let newBody = autoLinkSlugs(originalBody, allSlugs, page.slug);
|
|
41
|
+
// 3. Sync frontmatter.links from body [[wikilinks]]
|
|
42
|
+
const newLinks = syncFrontmatterLinks(newBody);
|
|
43
|
+
// 4. Normalize tags (using normalized scope for dedup)
|
|
44
|
+
const newTags = normalizeTags(page.frontmatter.tags, newScope);
|
|
45
|
+
// Check what changed
|
|
46
|
+
const bodyChanged = newBody !== originalBody;
|
|
47
|
+
const linksChanged = JSON.stringify(newLinks.sort()) !== JSON.stringify(originalLinks.sort());
|
|
48
|
+
const tagsChanged = JSON.stringify(newTags) !== JSON.stringify(originalTags.sort());
|
|
49
|
+
const scopeChanged = JSON.stringify(newScope) !== JSON.stringify(originalScope.sort());
|
|
50
|
+
if (!bodyChanged && !linksChanged && !tagsChanged && !scopeChanged)
|
|
51
|
+
continue;
|
|
52
|
+
pagesChanged++;
|
|
53
|
+
const addedLinksCount = newLinks.filter(l => !originalLinks.includes(l)).length;
|
|
54
|
+
linksAdded += addedLinksCount;
|
|
55
|
+
if (tagsChanged)
|
|
56
|
+
tagsNormalized++;
|
|
57
|
+
if (linksChanged)
|
|
58
|
+
frontmatterSynced++;
|
|
59
|
+
// Report
|
|
60
|
+
const changes = [];
|
|
61
|
+
if (scopeChanged) {
|
|
62
|
+
changes.push(`scope: [${originalScope.join(", ")}] → [${newScope.join(", ")}]`);
|
|
63
|
+
}
|
|
64
|
+
if (bodyChanged) {
|
|
65
|
+
const addedLinks = newLinks.filter(l => !originalLinks.includes(l));
|
|
66
|
+
changes.push(`+${addedLinks.length} wikilinks: ${addedLinks.join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
if (tagsChanged) {
|
|
69
|
+
changes.push(`tags: [${originalTags.join(", ")}] → [${newTags.join(", ")}]`);
|
|
70
|
+
}
|
|
71
|
+
if (linksChanged && !bodyChanged) {
|
|
72
|
+
changes.push(`frontmatter.links synced`);
|
|
73
|
+
}
|
|
74
|
+
console.log(` ${dryRun ? "WOULD FIX" : "FIXED"} ${page.category}/${page.slug}`);
|
|
75
|
+
for (const c of changes) {
|
|
76
|
+
console.log(` → ${c}`);
|
|
77
|
+
}
|
|
78
|
+
if (!dryRun) {
|
|
79
|
+
const updatedPage = {
|
|
80
|
+
...page,
|
|
81
|
+
body: newBody,
|
|
82
|
+
frontmatter: {
|
|
83
|
+
...page.frontmatter,
|
|
84
|
+
scope: newScope,
|
|
85
|
+
tags: newTags,
|
|
86
|
+
links: newLinks,
|
|
87
|
+
updated: new Date().toISOString(),
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
await writePage(WIKI_DIR, updatedPage);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
console.log(`\n━━━ Summary ━━━`);
|
|
94
|
+
console.log(` Pages changed: ${pagesChanged} / ${pages.length}`);
|
|
95
|
+
console.log(` Wikilinks added: ${linksAdded}`);
|
|
96
|
+
console.log(` Tags normalized: ${tagsNormalized}`);
|
|
97
|
+
console.log(` Frontmatter synced: ${frontmatterSynced}`);
|
|
98
|
+
if (dryRun)
|
|
99
|
+
console.log(`\n (dry run — no files modified, re-run without --dry-run to apply)`);
|
|
100
|
+
console.log();
|
|
101
|
+
}
|
|
102
|
+
main().catch(err => {
|
|
103
|
+
console.error("Error:", err);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=bulk-link-fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-link-fix.js","sourceRoot":"","sources":["../../src/scripts/bulk-link-fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session exploration tools for the Agent.
|
|
3
|
+
*
|
|
4
|
+
* These tools give the Agent the ability to explore a session file
|
|
5
|
+
* without loading the entire thing into the prompt — the TypeScript
|
|
6
|
+
* equivalent of RLM's REPL-based exploration.
|
|
7
|
+
*/
|
|
8
|
+
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
9
|
+
interface SessionMessage {
|
|
10
|
+
role: string;
|
|
11
|
+
text: string;
|
|
12
|
+
toolCalls: string[];
|
|
13
|
+
charOffset: number;
|
|
14
|
+
}
|
|
15
|
+
export interface LoadedSession {
|
|
16
|
+
messages: SessionMessage[];
|
|
17
|
+
serialized: string;
|
|
18
|
+
stats: {
|
|
19
|
+
totalMessages: number;
|
|
20
|
+
userMessages: number;
|
|
21
|
+
assistantMessages: number;
|
|
22
|
+
toolResults: number;
|
|
23
|
+
toolCalls: number;
|
|
24
|
+
totalChars: number;
|
|
25
|
+
compactionSummaries: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Load and pre-process a session JSONL file. */
|
|
29
|
+
export declare function loadSession(sessionPath: string): LoadedSession;
|
|
30
|
+
/** Create session exploration tools bound to a loaded session. */
|
|
31
|
+
export declare function createSessionTools(session: LoadedSession): AgentTool[];
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=session-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-tools.d.ts","sourceRoot":"","sources":["../src/session-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,+BAA+B,CAAC;AAIhF,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAED,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAyF9D;AAgBD,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAqHtE"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session exploration tools for the Agent.
|
|
3
|
+
*
|
|
4
|
+
* These tools give the Agent the ability to explore a session file
|
|
5
|
+
* without loading the entire thing into the prompt — the TypeScript
|
|
6
|
+
* equivalent of RLM's REPL-based exploration.
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync } from "node:fs";
|
|
9
|
+
import { Type } from "typebox";
|
|
10
|
+
/** Load and pre-process a session JSONL file. */
|
|
11
|
+
export function loadSession(sessionPath) {
|
|
12
|
+
const raw = readFileSync(sessionPath, "utf-8");
|
|
13
|
+
const lines = raw.split("\n").filter((l) => l.trim());
|
|
14
|
+
const messages = [];
|
|
15
|
+
const parts = [];
|
|
16
|
+
let charOffset = 0;
|
|
17
|
+
let compactionSummaries = 0;
|
|
18
|
+
let toolCallCount = 0;
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
let entry;
|
|
21
|
+
try {
|
|
22
|
+
entry = JSON.parse(line);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (entry.type === "compaction" && typeof entry.summary === "string") {
|
|
28
|
+
const text = `[Compaction Summary]:\n${entry.summary}`;
|
|
29
|
+
parts.push(text);
|
|
30
|
+
messages.push({ role: "compaction", text, toolCalls: [], charOffset });
|
|
31
|
+
charOffset += text.length + 2;
|
|
32
|
+
compactionSummaries++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (entry.type !== "message")
|
|
36
|
+
continue;
|
|
37
|
+
const msg = entry.message;
|
|
38
|
+
if (!msg)
|
|
39
|
+
continue;
|
|
40
|
+
const role = msg.role;
|
|
41
|
+
if (!["user", "assistant", "toolResult"].includes(role))
|
|
42
|
+
continue;
|
|
43
|
+
const content = msg.content;
|
|
44
|
+
let text = "";
|
|
45
|
+
const toolCalls = [];
|
|
46
|
+
if (typeof content === "string") {
|
|
47
|
+
text = content;
|
|
48
|
+
}
|
|
49
|
+
else if (Array.isArray(content)) {
|
|
50
|
+
const textParts = [];
|
|
51
|
+
for (const block of content) {
|
|
52
|
+
if (typeof block !== "object" || block === null)
|
|
53
|
+
continue;
|
|
54
|
+
const b = block;
|
|
55
|
+
if (b.type === "text" && typeof b.text === "string") {
|
|
56
|
+
textParts.push(b.text);
|
|
57
|
+
}
|
|
58
|
+
else if (b.type === "toolCall" && typeof b.name === "string") {
|
|
59
|
+
const argsStr = JSON.stringify(b.arguments ?? {});
|
|
60
|
+
toolCalls.push(`${b.name}(${argsStr.length > 300 ? argsStr.slice(0, 300) + "..." : argsStr})`);
|
|
61
|
+
toolCallCount++;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
text = textParts.join("\n");
|
|
65
|
+
if (toolCalls.length > 0) {
|
|
66
|
+
text += `\n[Tools]: ${toolCalls.join("; ")}`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!text.trim())
|
|
70
|
+
continue;
|
|
71
|
+
// Truncate tool results
|
|
72
|
+
if (role === "toolResult" && text.length > 1000) {
|
|
73
|
+
text = text.slice(0, 1000) + "\n[truncated]";
|
|
74
|
+
}
|
|
75
|
+
const label = { user: "User", assistant: "Assistant", toolResult: "Tool" }[role] ?? role;
|
|
76
|
+
const formatted = `[${label}]: ${text}`;
|
|
77
|
+
parts.push(formatted);
|
|
78
|
+
messages.push({ role, text: formatted, toolCalls, charOffset });
|
|
79
|
+
charOffset += formatted.length + 2;
|
|
80
|
+
}
|
|
81
|
+
const serialized = parts.join("\n\n");
|
|
82
|
+
return {
|
|
83
|
+
messages,
|
|
84
|
+
serialized,
|
|
85
|
+
stats: {
|
|
86
|
+
totalMessages: messages.length,
|
|
87
|
+
userMessages: messages.filter((m) => m.role === "user").length,
|
|
88
|
+
assistantMessages: messages.filter((m) => m.role === "assistant").length,
|
|
89
|
+
toolResults: messages.filter((m) => m.role === "toolResult").length,
|
|
90
|
+
toolCalls: toolCallCount,
|
|
91
|
+
totalChars: serialized.length,
|
|
92
|
+
compactionSummaries,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// -- Tool definitions --------------------------------------------------------
|
|
97
|
+
const SliceParams = Type.Object({
|
|
98
|
+
start: Type.Number({ description: "Start character offset" }),
|
|
99
|
+
end: Type.Number({ description: "End character offset" }),
|
|
100
|
+
});
|
|
101
|
+
const SearchParams = Type.Object({
|
|
102
|
+
query: Type.String({ description: "Text to search for (case-insensitive)" }),
|
|
103
|
+
maxResults: Type.Optional(Type.Number({ description: "Max results (default 10)" })),
|
|
104
|
+
});
|
|
105
|
+
const StatsParams = Type.Object({});
|
|
106
|
+
/** Create session exploration tools bound to a loaded session. */
|
|
107
|
+
export function createSessionTools(session) {
|
|
108
|
+
const sessionSlice = {
|
|
109
|
+
name: "session_slice",
|
|
110
|
+
label: "Session Slice",
|
|
111
|
+
description: `Read a slice of the session text (${session.stats.totalChars} chars total). Use to explore specific sections.`,
|
|
112
|
+
parameters: SliceParams,
|
|
113
|
+
execute: async (_id, params) => {
|
|
114
|
+
const start = Math.max(0, params.start);
|
|
115
|
+
const end = Math.min(session.serialized.length, params.end);
|
|
116
|
+
const slice = session.serialized.slice(start, end);
|
|
117
|
+
return {
|
|
118
|
+
content: [
|
|
119
|
+
{
|
|
120
|
+
type: "text",
|
|
121
|
+
text: `[chars ${start}-${end} of ${session.serialized.length}]\n\n${slice}`,
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
details: { start, end, length: slice.length },
|
|
125
|
+
};
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
const sessionSearch = {
|
|
129
|
+
name: "session_search",
|
|
130
|
+
label: "Session Search",
|
|
131
|
+
description: "Search the session for a keyword. Returns matching sections with character offsets.",
|
|
132
|
+
parameters: SearchParams,
|
|
133
|
+
execute: async (_id, params) => {
|
|
134
|
+
const query = params.query.toLowerCase();
|
|
135
|
+
const maxResults = params.maxResults ?? 10;
|
|
136
|
+
const matches = [];
|
|
137
|
+
const text = session.serialized.toLowerCase();
|
|
138
|
+
let pos = 0;
|
|
139
|
+
while (matches.length < maxResults) {
|
|
140
|
+
const idx = text.indexOf(query, pos);
|
|
141
|
+
if (idx === -1)
|
|
142
|
+
break;
|
|
143
|
+
// Extract context around match
|
|
144
|
+
const contextStart = Math.max(0, idx - 200);
|
|
145
|
+
const contextEnd = Math.min(session.serialized.length, idx + query.length + 200);
|
|
146
|
+
matches.push({
|
|
147
|
+
offset: idx,
|
|
148
|
+
context: session.serialized.slice(contextStart, contextEnd),
|
|
149
|
+
});
|
|
150
|
+
pos = idx + query.length;
|
|
151
|
+
}
|
|
152
|
+
if (matches.length === 0) {
|
|
153
|
+
return {
|
|
154
|
+
content: [{ type: "text", text: `No matches for "${params.query}"` }],
|
|
155
|
+
details: { matchCount: 0 },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
const resultText = matches
|
|
159
|
+
.map((m, i) => `Match ${i + 1} (offset ${m.offset}):\n${m.context}\n`)
|
|
160
|
+
.join("\n---\n");
|
|
161
|
+
return {
|
|
162
|
+
content: [
|
|
163
|
+
{
|
|
164
|
+
type: "text",
|
|
165
|
+
text: `Found ${matches.length} match(es) for "${params.query}":\n\n${resultText}`,
|
|
166
|
+
},
|
|
167
|
+
],
|
|
168
|
+
details: { matchCount: matches.length },
|
|
169
|
+
};
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
const sessionStats = {
|
|
173
|
+
name: "session_stats",
|
|
174
|
+
label: "Session Stats",
|
|
175
|
+
description: "Get session overview: message counts, size, topics.",
|
|
176
|
+
parameters: StatsParams,
|
|
177
|
+
execute: async () => {
|
|
178
|
+
const s = session.stats;
|
|
179
|
+
// Extract user message topics (first 100 chars of each, cap at 50)
|
|
180
|
+
const allUserMsgs = session.messages.filter((m) => m.role === "user");
|
|
181
|
+
const displayLimit = 50;
|
|
182
|
+
const userTopics = allUserMsgs
|
|
183
|
+
.slice(0, displayLimit)
|
|
184
|
+
.map((m) => m.text.replace(/^\[User\]: /, "").slice(0, 100))
|
|
185
|
+
.map((t, i) => ` ${i + 1}. ${t}`);
|
|
186
|
+
if (allUserMsgs.length > displayLimit) {
|
|
187
|
+
userTopics.push(` ... and ${allUserMsgs.length - displayLimit} more user messages. Use session_search to find specific topics.`);
|
|
188
|
+
}
|
|
189
|
+
const sizeLabel = s.totalChars > 1_000_000 ? `${(s.totalChars / 1_000_000).toFixed(1)}M`
|
|
190
|
+
: s.totalChars > 1_000 ? `${(s.totalChars / 1_000).toFixed(0)}K`
|
|
191
|
+
: `${s.totalChars}`;
|
|
192
|
+
const text = [
|
|
193
|
+
`Session: ${sizeLabel} chars, ${s.totalMessages} messages`,
|
|
194
|
+
` User: ${s.userMessages}, Assistant: ${s.assistantMessages}, Tool results: ${s.toolResults}`,
|
|
195
|
+
` Tool calls: ${s.toolCalls}, Compaction summaries: ${s.compactionSummaries}`,
|
|
196
|
+
"",
|
|
197
|
+
"Strategy: Use session_search to find topics, then session_slice to read details.",
|
|
198
|
+
`Valid slice range: 0 to ${s.totalChars}`,
|
|
199
|
+
"",
|
|
200
|
+
"User messages (topics):",
|
|
201
|
+
...userTopics,
|
|
202
|
+
].join("\n");
|
|
203
|
+
return {
|
|
204
|
+
content: [{ type: "text", text }],
|
|
205
|
+
details: s,
|
|
206
|
+
};
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
return [sessionSlice, sessionSearch, sessionStats];
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=session-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-tools.js","sourceRoot":"","sources":["../src/session-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ParaUserConfig, ProviderCredentialRef } from "./config.js";
|
|
2
|
+
export declare function modelSelectionLabel(selection: ParaUserConfig["models"]["capture"]): string;
|
|
3
|
+
export declare function providerProfileLabel(profile: ProviderCredentialRef | null | undefined): string;
|
|
4
|
+
export declare function setContextMaxTokens(config: ParaUserConfig, value: string): number;
|
|
5
|
+
export declare function setSearchLimit(config: ParaUserConfig, value: string): number;
|
|
6
|
+
export declare function setLintStaleDays(config: ParaUserConfig, value: string): number;
|
|
7
|
+
export declare function toggleSearchGraphBoost(config: ParaUserConfig): boolean;
|
|
8
|
+
export declare function toggleLintAutoFix(config: ParaUserConfig): boolean;
|
|
9
|
+
export declare function setCaptureModelAuto(config: ParaUserConfig): void;
|
|
10
|
+
export declare function setCaptureModel(config: ParaUserConfig, provider: string, model: string): ProviderCredentialRef;
|
|
11
|
+
export declare function setWebWikiEnabled(config: ParaUserConfig, enabled: boolean): void;
|
|
12
|
+
export declare function setWebWikiHost(config: ParaUserConfig, host: string): void;
|
|
13
|
+
export declare function setWebWikiPort(config: ParaUserConfig, value: string): number;
|
|
14
|
+
export declare function setProviderProfileField(profile: ProviderCredentialRef, field: "provider" | "baseUrl" | "model" | "apiFormat" | "credentialRef", value: string): void;
|
|
15
|
+
export declare function setProviderDims(profile: ProviderCredentialRef, value: string): number;
|
|
16
|
+
export declare function ensureEmbeddingProfile(config: ParaUserConfig): ProviderCredentialRef;
|
|
17
|
+
export declare function ensureRerankProfile(config: ParaUserConfig): ProviderCredentialRef;
|
|
18
|
+
export declare function disableRerank(config: ParaUserConfig): void;
|
|
19
|
+
/** Known API providers selectable in /wiki-settings (baseUrl + format prefilled). */
|
|
20
|
+
export interface ProviderPreset {
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
baseUrl: string;
|
|
24
|
+
apiFormat: "openai" | "anthropic";
|
|
25
|
+
defaultEmbedModel?: string;
|
|
26
|
+
defaultRerankModel?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare const PROVIDER_PRESETS: ProviderPreset[];
|
|
29
|
+
export declare function findProviderPreset(id: string): ProviderPreset | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Apply a provider preset to an embedding/rerank profile: sets provider,
|
|
32
|
+
* baseUrl, apiFormat, and the preset's default model for the profile kind.
|
|
33
|
+
* Leaves credentialRef and dims untouched (dims must match any existing
|
|
34
|
+
* vector index; credential wiring is a separate explicit step).
|
|
35
|
+
*/
|
|
36
|
+
export declare function applyProviderPreset(profile: ProviderCredentialRef, preset: ProviderPreset, kind: "embedding" | "rerank"): void;
|
|
37
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAG1F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAK9F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI9E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAGtE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAGjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAQ9G;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAEhF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,eAAe,EACvE,KAAK,EAAE,MAAM,GACZ,IAAI,CAgBN;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAQpF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAQjF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAE1D;AAID,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,GAAG,WAAW,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAoD5C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAAG,QAAQ,GAC3B,IAAI,CAMN"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
export function modelSelectionLabel(selection) {
|
|
2
|
+
if (selection === "auto")
|
|
3
|
+
return "auto";
|
|
4
|
+
return `${selection.provider}/${selection.model ?? "auto"} via ${selection.credentialRef}`;
|
|
5
|
+
}
|
|
6
|
+
export function providerProfileLabel(profile) {
|
|
7
|
+
if (!profile)
|
|
8
|
+
return "not configured";
|
|
9
|
+
const model = profile.model ?? "model not set";
|
|
10
|
+
const location = profile.baseUrl ? ` at ${profile.baseUrl}` : "";
|
|
11
|
+
return `${profile.provider}/${model}${location} via ${profile.credentialRef}`;
|
|
12
|
+
}
|
|
13
|
+
export function setContextMaxTokens(config, value) {
|
|
14
|
+
const parsed = parsePositiveInteger(value, config.context.maxTokens);
|
|
15
|
+
config.context.maxTokens = parsed;
|
|
16
|
+
return parsed;
|
|
17
|
+
}
|
|
18
|
+
export function setSearchLimit(config, value) {
|
|
19
|
+
const parsed = parsePositiveInteger(value, config.context.searchLimit);
|
|
20
|
+
config.context.searchLimit = parsed;
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
export function setLintStaleDays(config, value) {
|
|
24
|
+
const parsed = parsePositiveInteger(value, config.lint.staleDays);
|
|
25
|
+
config.lint.staleDays = parsed;
|
|
26
|
+
return parsed;
|
|
27
|
+
}
|
|
28
|
+
export function toggleSearchGraphBoost(config) {
|
|
29
|
+
config.context.searchGraphBoost = !config.context.searchGraphBoost;
|
|
30
|
+
return config.context.searchGraphBoost;
|
|
31
|
+
}
|
|
32
|
+
export function toggleLintAutoFix(config) {
|
|
33
|
+
config.lint.autoFix = !config.lint.autoFix;
|
|
34
|
+
return config.lint.autoFix;
|
|
35
|
+
}
|
|
36
|
+
export function setCaptureModelAuto(config) {
|
|
37
|
+
config.models.capture = "auto";
|
|
38
|
+
}
|
|
39
|
+
export function setCaptureModel(config, provider, model) {
|
|
40
|
+
const profile = {
|
|
41
|
+
provider,
|
|
42
|
+
model,
|
|
43
|
+
credentialRef: `pi-auth:${provider}`,
|
|
44
|
+
};
|
|
45
|
+
config.models.capture = profile;
|
|
46
|
+
return profile;
|
|
47
|
+
}
|
|
48
|
+
export function setWebWikiEnabled(config, enabled) {
|
|
49
|
+
config.webWiki.enabled = enabled;
|
|
50
|
+
}
|
|
51
|
+
export function setWebWikiHost(config, host) {
|
|
52
|
+
config.webWiki.host = host.trim() || config.webWiki.host;
|
|
53
|
+
}
|
|
54
|
+
export function setWebWikiPort(config, value) {
|
|
55
|
+
const parsed = parsePositiveInteger(value, config.webWiki.port);
|
|
56
|
+
config.webWiki.port = parsed;
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
export function setProviderProfileField(profile, field, value) {
|
|
60
|
+
if (field === "apiFormat") {
|
|
61
|
+
if (value !== "openai" && value !== "anthropic" && value !== "custom") {
|
|
62
|
+
throw new Error("apiFormat must be openai, anthropic, or custom");
|
|
63
|
+
}
|
|
64
|
+
profile.apiFormat = value;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (field === "credentialRef") {
|
|
68
|
+
if (value !== "none" && !value.startsWith("pi-auth:") && !value.startsWith("secret:")) {
|
|
69
|
+
throw new Error("credentialRef must be pi-auth:<provider>, secret:<name>, or none");
|
|
70
|
+
}
|
|
71
|
+
profile.credentialRef = value;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
profile[field] = value;
|
|
75
|
+
}
|
|
76
|
+
export function setProviderDims(profile, value) {
|
|
77
|
+
const parsed = parsePositiveInteger(value, profile.dims ?? 0);
|
|
78
|
+
profile.dims = parsed;
|
|
79
|
+
return parsed;
|
|
80
|
+
}
|
|
81
|
+
export function ensureEmbeddingProfile(config) {
|
|
82
|
+
config.qmd.embedding ??= {
|
|
83
|
+
provider: "openai",
|
|
84
|
+
model: "text-embedding-3-small",
|
|
85
|
+
apiFormat: "openai",
|
|
86
|
+
credentialRef: "secret:embedding",
|
|
87
|
+
};
|
|
88
|
+
return config.qmd.embedding;
|
|
89
|
+
}
|
|
90
|
+
export function ensureRerankProfile(config) {
|
|
91
|
+
config.qmd.rerank ??= {
|
|
92
|
+
provider: "jina",
|
|
93
|
+
model: "jina-reranker-v2-base-multilingual",
|
|
94
|
+
apiFormat: "openai",
|
|
95
|
+
credentialRef: "secret:rerank",
|
|
96
|
+
};
|
|
97
|
+
return config.qmd.rerank;
|
|
98
|
+
}
|
|
99
|
+
export function disableRerank(config) {
|
|
100
|
+
config.qmd.rerank = null;
|
|
101
|
+
}
|
|
102
|
+
export const PROVIDER_PRESETS = [
|
|
103
|
+
{
|
|
104
|
+
id: "openai",
|
|
105
|
+
label: "OpenAI",
|
|
106
|
+
baseUrl: "https://api.openai.com/v1",
|
|
107
|
+
apiFormat: "openai",
|
|
108
|
+
defaultEmbedModel: "text-embedding-3-small",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: "openrouter",
|
|
112
|
+
label: "OpenRouter",
|
|
113
|
+
baseUrl: "https://openrouter.ai/api/v1",
|
|
114
|
+
apiFormat: "openai",
|
|
115
|
+
defaultEmbedModel: "openai/text-embedding-3-small",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: "gemini",
|
|
119
|
+
label: "Google Gemini (OpenAI-compatible)",
|
|
120
|
+
baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
|
|
121
|
+
apiFormat: "openai",
|
|
122
|
+
defaultEmbedModel: "text-embedding-004",
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: "mistral",
|
|
126
|
+
label: "Mistral",
|
|
127
|
+
baseUrl: "https://api.mistral.ai/v1",
|
|
128
|
+
apiFormat: "openai",
|
|
129
|
+
defaultEmbedModel: "mistral-embed",
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "voyage",
|
|
133
|
+
label: "Voyage AI",
|
|
134
|
+
baseUrl: "https://api.voyageai.com/v1",
|
|
135
|
+
apiFormat: "openai",
|
|
136
|
+
defaultEmbedModel: "voyage-3-lite",
|
|
137
|
+
defaultRerankModel: "rerank-2-lite",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: "jina",
|
|
141
|
+
label: "Jina AI",
|
|
142
|
+
baseUrl: "https://api.jina.ai/v1",
|
|
143
|
+
apiFormat: "openai",
|
|
144
|
+
defaultEmbedModel: "jina-embeddings-v3",
|
|
145
|
+
defaultRerankModel: "jina-reranker-v2-base-multilingual",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
id: "ollama",
|
|
149
|
+
label: "Ollama (local server)",
|
|
150
|
+
baseUrl: "http://127.0.0.1:11434/v1",
|
|
151
|
+
apiFormat: "openai",
|
|
152
|
+
defaultEmbedModel: "nomic-embed-text",
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
export function findProviderPreset(id) {
|
|
156
|
+
return PROVIDER_PRESETS.find((p) => p.id === id);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Apply a provider preset to an embedding/rerank profile: sets provider,
|
|
160
|
+
* baseUrl, apiFormat, and the preset's default model for the profile kind.
|
|
161
|
+
* Leaves credentialRef and dims untouched (dims must match any existing
|
|
162
|
+
* vector index; credential wiring is a separate explicit step).
|
|
163
|
+
*/
|
|
164
|
+
export function applyProviderPreset(profile, preset, kind) {
|
|
165
|
+
profile.provider = preset.id;
|
|
166
|
+
profile.baseUrl = preset.baseUrl;
|
|
167
|
+
profile.apiFormat = preset.apiFormat;
|
|
168
|
+
const model = kind === "embedding" ? preset.defaultEmbedModel : preset.defaultRerankModel;
|
|
169
|
+
if (model)
|
|
170
|
+
profile.model = model;
|
|
171
|
+
}
|
|
172
|
+
function parsePositiveInteger(value, fallback) {
|
|
173
|
+
const parsed = parseInt(value, 10);
|
|
174
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type LoadedParaConfig } from "./config.js";
|
|
2
|
+
export interface SetupOptions {
|
|
3
|
+
homeDir?: string;
|
|
4
|
+
yes?: boolean;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
localPath?: string;
|
|
7
|
+
validateQmd?: boolean;
|
|
8
|
+
initWiki?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface SetupResult {
|
|
11
|
+
dryRun: boolean;
|
|
12
|
+
extensionRef: string;
|
|
13
|
+
configPath: string;
|
|
14
|
+
wikiDir: string;
|
|
15
|
+
changes: string[];
|
|
16
|
+
warnings: string[];
|
|
17
|
+
migratedFromLegacy: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runSetup(options?: SetupOptions): Promise<SetupResult>;
|
|
20
|
+
export declare function formatSetupResult(result: SetupResult): string;
|
|
21
|
+
export declare function resolveExtensionRef(localPath?: string): string;
|
|
22
|
+
export declare function ensurePiExtensionRegistration(settingsPath: string, extensionRef: string, opts?: {
|
|
23
|
+
dryRun?: boolean;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
changed: boolean;
|
|
26
|
+
packages: string[];
|
|
27
|
+
}>;
|
|
28
|
+
export declare function summarizeSetupConfig(loaded: LoadedParaConfig): string;
|
|
29
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpE,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,QAAQ,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+C/E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAM7D;AAED,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYnD;AAOD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAErE"}
|