pi-para 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/ARCHITECTURE.md +160 -0
  2. package/CHANGELOG.md +51 -0
  3. package/CONFIGURATION.md +243 -0
  4. package/README.md +140 -237
  5. package/SETUP.md +196 -112
  6. package/STRUCTURE.md +140 -0
  7. package/package.json +86 -18
  8. package/scripts/build-assets.mjs +29 -0
  9. package/scripts/install.ps1 +55 -0
  10. package/scripts/install.sh +63 -0
  11. package/scripts/smoke-install.mjs +63 -0
  12. package/skills/para/SKILL.md +1 -1
  13. package/skills/setup/SKILL.md +1 -1
  14. package/src/atomic-write.ts +17 -0
  15. package/src/capture.ts +4 -4
  16. package/src/cli-legacy.ts +43 -0
  17. package/src/cli.ts +133 -28
  18. package/src/commands.ts +203 -243
  19. package/src/config.ts +355 -0
  20. package/src/context.ts +29 -14
  21. package/src/credentials.ts +100 -0
  22. package/src/daemon.ts +1 -1
  23. package/src/doctor.ts +209 -0
  24. package/src/gepa/index.ts +1 -1
  25. package/src/index.ts +119 -40
  26. package/src/maintainer.ts +4 -4
  27. package/src/model-resolver.ts +96 -0
  28. package/src/paths.ts +48 -0
  29. package/src/processor.ts +4 -4
  30. package/src/qmd-providers.ts +63 -0
  31. package/src/query.ts +15 -1
  32. package/src/repair.ts +49 -0
  33. package/src/scheduler/controls.ts +125 -0
  34. package/src/scheduler/index.ts +210 -0
  35. package/src/scheduler/leases.ts +98 -0
  36. package/src/scheduler/session-capture.ts +146 -0
  37. package/src/scheduler/state.ts +304 -0
  38. package/src/session-tools.ts +1 -1
  39. package/src/settings.ts +126 -0
  40. package/src/setup.ts +116 -0
  41. package/src/status.ts +115 -0
  42. package/src/store.ts +116 -31
  43. package/src/summarize.ts +72 -16
  44. package/src/templates/prompts.ts +1 -1
  45. package/src/tools.ts +280 -90
  46. package/src/wiki-tool-guidance.ts +84 -0
  47. package/src/wiki.ts +98 -26
  48. package/dist/capture.d.ts +0 -34
  49. package/dist/capture.d.ts.map +0 -1
  50. package/dist/capture.js +0 -461
  51. package/dist/capture.js.map +0 -1
  52. package/dist/cli.d.ts +0 -15
  53. package/dist/cli.d.ts.map +0 -1
  54. package/dist/cli.js +0 -405
  55. package/dist/cli.js.map +0 -1
  56. package/dist/commands.d.ts +0 -15
  57. package/dist/commands.d.ts.map +0 -1
  58. package/dist/commands.js +0 -786
  59. package/dist/commands.js.map +0 -1
  60. package/dist/context.d.ts +0 -61
  61. package/dist/context.d.ts.map +0 -1
  62. package/dist/context.js +0 -289
  63. package/dist/context.js.map +0 -1
  64. package/dist/daemon.d.ts +0 -49
  65. package/dist/daemon.d.ts.map +0 -1
  66. package/dist/daemon.js +0 -226
  67. package/dist/daemon.js.map +0 -1
  68. package/dist/frontmatter.d.ts +0 -59
  69. package/dist/frontmatter.d.ts.map +0 -1
  70. package/dist/frontmatter.js +0 -170
  71. package/dist/frontmatter.js.map +0 -1
  72. package/dist/gepa/dataset.d.ts +0 -36
  73. package/dist/gepa/dataset.d.ts.map +0 -1
  74. package/dist/gepa/dataset.js +0 -148
  75. package/dist/gepa/dataset.js.map +0 -1
  76. package/dist/gepa/evaluator.d.ts +0 -51
  77. package/dist/gepa/evaluator.d.ts.map +0 -1
  78. package/dist/gepa/evaluator.js +0 -317
  79. package/dist/gepa/evaluator.js.map +0 -1
  80. package/dist/gepa/index.d.ts +0 -66
  81. package/dist/gepa/index.d.ts.map +0 -1
  82. package/dist/gepa/index.js +0 -240
  83. package/dist/gepa/index.js.map +0 -1
  84. package/dist/gepa/llm.d.ts +0 -35
  85. package/dist/gepa/llm.d.ts.map +0 -1
  86. package/dist/gepa/llm.js +0 -268
  87. package/dist/gepa/llm.js.map +0 -1
  88. package/dist/gepa/optimized/capture-prompt.txt +0 -65
  89. package/dist/gepa/optimizer.d.ts +0 -29
  90. package/dist/gepa/optimizer.d.ts.map +0 -1
  91. package/dist/gepa/optimizer.js +0 -249
  92. package/dist/gepa/optimizer.js.map +0 -1
  93. package/dist/gepa/targets.d.ts +0 -39
  94. package/dist/gepa/targets.d.ts.map +0 -1
  95. package/dist/gepa/targets.js +0 -326
  96. package/dist/gepa/targets.js.map +0 -1
  97. package/dist/gepa/types.d.ts +0 -168
  98. package/dist/gepa/types.d.ts.map +0 -1
  99. package/dist/gepa/types.js +0 -124
  100. package/dist/gepa/types.js.map +0 -1
  101. package/dist/index.d.ts +0 -21
  102. package/dist/index.d.ts.map +0 -1
  103. package/dist/index.js +0 -294
  104. package/dist/index.js.map +0 -1
  105. package/dist/ingest.d.ts +0 -88
  106. package/dist/ingest.d.ts.map +0 -1
  107. package/dist/ingest.js +0 -105
  108. package/dist/ingest.js.map +0 -1
  109. package/dist/link-discovery.d.ts +0 -40
  110. package/dist/link-discovery.d.ts.map +0 -1
  111. package/dist/link-discovery.js +0 -122
  112. package/dist/link-discovery.js.map +0 -1
  113. package/dist/link-utils.d.ts +0 -30
  114. package/dist/link-utils.d.ts.map +0 -1
  115. package/dist/link-utils.js +0 -145
  116. package/dist/link-utils.js.map +0 -1
  117. package/dist/lint.d.ts +0 -39
  118. package/dist/lint.d.ts.map +0 -1
  119. package/dist/lint.js +0 -827
  120. package/dist/lint.js.map +0 -1
  121. package/dist/maintainer.d.ts +0 -24
  122. package/dist/maintainer.d.ts.map +0 -1
  123. package/dist/maintainer.js +0 -358
  124. package/dist/maintainer.js.map +0 -1
  125. package/dist/processor.d.ts +0 -14
  126. package/dist/processor.d.ts.map +0 -1
  127. package/dist/processor.js +0 -361
  128. package/dist/processor.js.map +0 -1
  129. package/dist/query.d.ts +0 -69
  130. package/dist/query.d.ts.map +0 -1
  131. package/dist/query.js +0 -107
  132. package/dist/query.js.map +0 -1
  133. package/dist/raw.d.ts +0 -57
  134. package/dist/raw.d.ts.map +0 -1
  135. package/dist/raw.js +0 -219
  136. package/dist/raw.js.map +0 -1
  137. package/dist/redact.d.ts +0 -21
  138. package/dist/redact.d.ts.map +0 -1
  139. package/dist/redact.js +0 -143
  140. package/dist/redact.js.map +0 -1
  141. package/dist/scope.d.ts +0 -54
  142. package/dist/scope.d.ts.map +0 -1
  143. package/dist/scope.js +0 -161
  144. package/dist/scope.js.map +0 -1
  145. package/dist/scripts/bulk-link-fix.d.ts +0 -9
  146. package/dist/scripts/bulk-link-fix.d.ts.map +0 -1
  147. package/dist/scripts/bulk-link-fix.js +0 -106
  148. package/dist/scripts/bulk-link-fix.js.map +0 -1
  149. package/dist/session-tools.d.ts +0 -33
  150. package/dist/session-tools.d.ts.map +0 -1
  151. package/dist/session-tools.js +0 -211
  152. package/dist/session-tools.js.map +0 -1
  153. package/dist/state.d.ts +0 -54
  154. package/dist/state.d.ts.map +0 -1
  155. package/dist/state.js +0 -176
  156. package/dist/state.js.map +0 -1
  157. package/dist/store.d.ts +0 -56
  158. package/dist/store.d.ts.map +0 -1
  159. package/dist/store.js +0 -227
  160. package/dist/store.js.map +0 -1
  161. package/dist/summarize.d.ts +0 -56
  162. package/dist/summarize.d.ts.map +0 -1
  163. package/dist/summarize.js +0 -231
  164. package/dist/summarize.js.map +0 -1
  165. package/dist/tag-registry.d.ts +0 -56
  166. package/dist/tag-registry.d.ts.map +0 -1
  167. package/dist/tag-registry.js +0 -146
  168. package/dist/tag-registry.js.map +0 -1
  169. package/dist/templates/prompts.d.ts +0 -63
  170. package/dist/templates/prompts.d.ts.map +0 -1
  171. package/dist/templates/prompts.js +0 -260
  172. package/dist/templates/prompts.js.map +0 -1
  173. package/dist/tools.d.ts +0 -26
  174. package/dist/tools.d.ts.map +0 -1
  175. package/dist/tools.js +0 -1033
  176. package/dist/tools.js.map +0 -1
  177. package/dist/watcher.d.ts +0 -25
  178. package/dist/watcher.d.ts.map +0 -1
  179. package/dist/watcher.js +0 -84
  180. package/dist/watcher.js.map +0 -1
  181. package/dist/webui/client/dist/index.html +0 -1885
  182. package/dist/webui/server.d.ts +0 -31
  183. package/dist/webui/server.d.ts.map +0 -1
  184. package/dist/webui/server.js +0 -566
  185. package/dist/webui/server.js.map +0 -1
  186. package/dist/wiki.d.ts +0 -103
  187. package/dist/wiki.d.ts.map +0 -1
  188. package/dist/wiki.js +0 -428
  189. package/dist/wiki.js.map +0 -1
  190. package/scripts/gepa/__pycache__/dataset.cpython-313.pyc +0 -0
  191. package/scripts/gepa/__pycache__/lm_providers.cpython-313.pyc +0 -0
  192. package/scripts/gepa/__pycache__/metric.cpython-313.pyc +0 -0
  193. package/scripts/gepa/__pycache__/program.cpython-313.pyc +0 -0
  194. package/scripts/gepa/__pycache__/wiki_reader.cpython-313.pyc +0 -0
  195. package/scripts/gepa/uv.lock +0 -2241
@@ -1,240 +0,0 @@
1
- /**
2
- * GEPA optimizer orchestrator — TypeScript side.
3
- *
4
- * 1. Extracts all prompt/tool/skill instruction texts from source
5
- * 2. Writes targets.json for the Python DSPy GEPA script
6
- * 3. Reads auth.json → passes API keys as env vars to uv subprocess
7
- * 4. Calls `uv run scripts/gepa/optimize.py`
8
- * 5. Reads results.json → saves optimized prompts to disk
9
- */
10
- import { spawn } from "node:child_process";
11
- import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from "node:fs";
12
- import { homedir } from "node:os";
13
- import { dirname, join, resolve } from "node:path";
14
- // -- Paths -------------------------------------------------------------------
15
- const WIKI_DIR = join(homedir(), ".pi", "wiki");
16
- const GEPA_DIR = join(WIKI_DIR, "gepa");
17
- const INPUT_DIR = join(GEPA_DIR, "input");
18
- const OUTPUT_DIR = join(GEPA_DIR, "output");
19
- const OPTIMIZED_DIR = join(GEPA_DIR, "optimized");
20
- const HISTORY_DIR = join(GEPA_DIR, "history");
21
- // -- Package root ------------------------------------------------------------
22
- function findPackageRoot() {
23
- let dir = dirname(new URL(import.meta.url).pathname);
24
- for (let i = 0; i < 5; i++) {
25
- const pkgPath = join(dir, "package.json");
26
- if (existsSync(pkgPath)) {
27
- try {
28
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
29
- if (pkg.name === "@picassio/pi-para")
30
- return dir;
31
- }
32
- catch { }
33
- }
34
- dir = dirname(dir);
35
- }
36
- return resolve(dirname(new URL(import.meta.url).pathname), "../..");
37
- }
38
- // -- Helpers: extract strings from TS source ---------------------------------
39
- function extractTSConst(source, name) {
40
- const m = source.match(new RegExp(`(?:export\\s+)?const\\s+${name}\\s*=\\s*\`([\\s\\S]*?)\`;`));
41
- return m ? m[1].trim() : null;
42
- }
43
- function extractToolInstructions(source) {
44
- const tools = {};
45
- const blocks = [...source.matchAll(/registerTool\(\{[\s\S]*?name:\s*"(wiki_\w+)"[\s\S]*?(?=registerTool\(\{|$)/g)];
46
- for (const block of blocks) {
47
- const name = block[1].replace("wiki_", "wiki-");
48
- const text = block[0];
49
- const descStrs = [...(text.match(/description:\s*\n?\s*([\s\S]*?)(?:promptSnippet:|promptGuidelines:|parameters:)/)?.[1] ?? "").matchAll(/["'`]([^"'`]+)["'`]/g)];
50
- const desc = descStrs.map(s => s[1]).join(" ");
51
- const snippet = text.match(/promptSnippet:\s*["'`]([^"'`]+)["'`]/)?.[1] ?? "";
52
- const guideMatch = text.match(/promptGuidelines:\s*\[([\s\S]*?)\]/);
53
- const guides = guideMatch ? [...guideMatch[1].matchAll(/["'`]([^"'`]+)["'`]/g)].map(s => s[1]).join("\n") : "";
54
- const combined = [`Tool: ${name}`, desc && `Description: ${desc.trim()}`, snippet && `Snippet: ${snippet}`, guides && `Guidelines:\n${guides}`].filter(Boolean).join("\n");
55
- if (combined.length > 50)
56
- tools[name] = combined;
57
- }
58
- return tools;
59
- }
60
- function toKebab(name) {
61
- return name.replace(/_/g, "-").replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
62
- }
63
- // -- Target extraction -------------------------------------------------------
64
- export function extractTargets(packageRoot) {
65
- const root = packageRoot ?? findPackageRoot();
66
- const targets = [];
67
- // Prompt templates
68
- const promptsFile = join(root, "src", "templates", "prompts.ts");
69
- if (existsSync(promptsFile)) {
70
- const src = readFileSync(promptsFile, "utf-8");
71
- for (const n of ["WIKI_SYSTEM_PROMPT", "INGEST_PROMPT", "QUERY_PROMPT", "CAPTURE_SYSTEM_PROMPT", "CAPTURE_PROMPT", "EXPLICIT_CAPTURE_PROMPT", "SUMMARIZE_SYSTEM_PROMPT", "ITERATIVE_UPDATE_PROMPT", "OVERVIEW_PROMPT", "LINT_PROMPT"]) {
72
- const c = extractTSConst(src, n);
73
- if (c)
74
- targets.push({ name: toKebab(n), type: "prompt", content: c, sourceFile: promptsFile });
75
- }
76
- }
77
- // Maintainer + processor prompts
78
- for (const [file, constName, targetName] of [
79
- ["src/maintainer.ts", "MAINTENANCE_SYSTEM_PROMPT", "maintenance-system-prompt"],
80
- ["src/processor.ts", "CAPTURE_SYSTEM_PROMPT", "processor-capture-prompt"],
81
- ]) {
82
- const p = join(root, file);
83
- if (existsSync(p)) {
84
- const c = extractTSConst(readFileSync(p, "utf-8"), constName);
85
- if (c)
86
- targets.push({ name: targetName, type: "prompt", content: c, sourceFile: p });
87
- }
88
- }
89
- // Tool instructions
90
- const toolsFile = join(root, "src", "tools.ts");
91
- if (existsSync(toolsFile)) {
92
- for (const [n, c] of Object.entries(extractToolInstructions(readFileSync(toolsFile, "utf-8")))) {
93
- targets.push({ name: `tool-${n}`, type: "tool", content: c, sourceFile: toolsFile });
94
- }
95
- }
96
- // Skills
97
- for (const s of ["para", "setup"]) {
98
- const p = join(root, "skills", s, "SKILL.md");
99
- if (existsSync(p)) {
100
- const raw = readFileSync(p, "utf-8");
101
- const body = raw.match(/^---\s*\n[\s\S]*?\n---\s*\n([\s\S]*)$/)?.[1]?.trim() ?? raw;
102
- targets.push({ name: `skill-${s}`, type: "skill", content: body, sourceFile: p });
103
- }
104
- }
105
- return targets;
106
- }
107
- // -- Auth env vars -----------------------------------------------------------
108
- function getAuthEnvVars() {
109
- const env = {};
110
- try {
111
- const auth = JSON.parse(readFileSync(join(homedir(), ".pi", "agent", "auth.json"), "utf-8"));
112
- if (auth.anthropic?.access) {
113
- env.ANTHROPIC_OAUTH_TOKEN = auth.anthropic.access;
114
- env.ANTHROPIC_API_KEY = auth.anthropic.access;
115
- }
116
- else if (auth.anthropic?.key)
117
- env.ANTHROPIC_API_KEY = auth.anthropic.key;
118
- if (auth.minimax?.key)
119
- env.MINIMAX_API_KEY = auth.minimax.key;
120
- if (auth.openrouter?.key)
121
- env.OPENROUTER_API_KEY = auth.openrouter.key;
122
- else if (auth.openrouter?.openrouter_key)
123
- env.OPENROUTER_API_KEY = auth.openrouter.openrouter_key;
124
- }
125
- catch {
126
- try {
127
- const raw = readFileSync(join(homedir(), ".config", "qmd", "index.yml"), "utf-8");
128
- const m = raw.match(/chat:[\s\S]*?key:\s*(.+)/);
129
- if (m) {
130
- const k = m[1].trim();
131
- if (raw.includes("minimaxi.com"))
132
- env.MINIMAX_CN_API_KEY = k;
133
- else
134
- env.MINIMAX_API_KEY = k;
135
- }
136
- }
137
- catch { }
138
- }
139
- return env;
140
- }
141
- // -- Main orchestrator -------------------------------------------------------
142
- export async function runGEPA(options = {}) {
143
- const root = findPackageRoot();
144
- const scriptsDir = join(root, "scripts", "gepa");
145
- for (const d of [INPUT_DIR, OUTPUT_DIR, OPTIMIZED_DIR, HISTORY_DIR])
146
- mkdirSync(d, { recursive: true });
147
- // Load GEPA config from config.json (user-configurable defaults)
148
- let gepaConfig = {};
149
- try {
150
- const cfg = JSON.parse(readFileSync(join(WIKI_DIR, "config.json"), "utf-8"));
151
- gepaConfig = cfg.gepa ?? {};
152
- }
153
- catch { }
154
- // Resolution: CLI flag → options → config.json → default
155
- const studentModel = options.studentModel ?? options.model
156
- ?? gepaConfig.studentModel ?? "anthropic/claude-sonnet-4-20250514";
157
- const teacherModel = options.teacherModel ?? options.reflectionModel
158
- ?? gepaConfig.teacherModel ?? "anthropic/claude-opus-4-6";
159
- const judgeModel = options.judgeModel
160
- ?? gepaConfig.judgeModel ?? studentModel;
161
- const auto = options.auto ?? gepaConfig.auto ?? "light";
162
- const threads = options.threads ?? gepaConfig.threads ?? 2;
163
- const seed = options.seed ?? gepaConfig.seed ?? 42;
164
- const allTargets = extractTargets(root);
165
- let targets = options.target ? allTargets.filter(t => t.name === options.target) : allTargets;
166
- if (options.target && targets.length === 0)
167
- throw new Error(`Target '${options.target}' not found. Available: ${allTargets.map(t => t.name).join(", ")}`);
168
- console.log(`[gepa] Found ${targets.length} target(s) to optimize`);
169
- console.log(`[gepa] Student: ${studentModel}, Teacher: ${teacherModel}, Judge: ${judgeModel}, Budget: ${auto}`);
170
- const targetsFile = join(INPUT_DIR, "targets.json");
171
- writeFileSync(targetsFile, JSON.stringify({ targets: targets.map(t => ({ name: t.name, type: t.type, content: t.content })) }, null, 2));
172
- const outputFile = join(OUTPUT_DIR, "results.json");
173
- const uvArgs = [
174
- "run", "--project", scriptsDir, join(scriptsDir, "optimize.py"),
175
- "--targets-file", targetsFile, "--wiki-dir", WIKI_DIR, "--output", outputFile,
176
- "--model", studentModel,
177
- "--reflection-model", teacherModel,
178
- "--judge-model", judgeModel,
179
- "--auto", auto,
180
- "--threads", String(threads),
181
- "--seed", String(seed),
182
- ...(options.maxMetricCalls ? ["--max-metric-calls", String(options.maxMetricCalls)] : []),
183
- ...(options.target ? ["--target", options.target] : []),
184
- ];
185
- console.log(`[gepa] Running: uv ${uvArgs.slice(0, 6).join(" ")} ...`);
186
- await new Promise((resolve, reject) => {
187
- const proc = spawn("uv", uvArgs, { cwd: scriptsDir, env: { ...process.env, ...getAuthEnvVars() }, stdio: ["pipe", "inherit", "inherit"] });
188
- proc.on("close", c => c === 0 ? resolve() : reject(new Error(`uv exited with code ${c}`)));
189
- proc.on("error", e => reject(new Error(`Failed to spawn uv: ${e.message}`)));
190
- });
191
- if (!existsSync(outputFile))
192
- throw new Error("Output file not created");
193
- const output = JSON.parse(readFileSync(outputFile, "utf-8"));
194
- for (const r of output.results) {
195
- if (r.status === "success" && r.optimized_instruction) {
196
- mkdirSync(OPTIMIZED_DIR, { recursive: true });
197
- writeFileSync(join(OPTIMIZED_DIR, `${r.target}.txt`), r.optimized_instruction, "utf-8");
198
- const hDir = join(HISTORY_DIR, r.target);
199
- mkdirSync(hDir, { recursive: true });
200
- writeFileSync(join(hDir, `${new Date().toISOString().replace(/[:.]/g, "-")}.json`), JSON.stringify(r, null, 2));
201
- console.log(`[gepa] Saved optimized: ${r.target}`);
202
- }
203
- }
204
- return output;
205
- }
206
- // -- Query functions ---------------------------------------------------------
207
- export function listOptimized() {
208
- if (!existsSync(OPTIMIZED_DIR))
209
- return [];
210
- const results = [];
211
- for (const f of readdirSync(OPTIMIZED_DIR).filter(f => f.endsWith(".txt"))) {
212
- const name = f.replace(".txt", "");
213
- let score = 0, timestamp = "", model = "";
214
- try {
215
- const entries = readdirSync(join(HISTORY_DIR, name)).filter(f => f.endsWith(".json")).sort().reverse();
216
- if (entries[0]) {
217
- const d = JSON.parse(readFileSync(join(HISTORY_DIR, name, entries[0]), "utf-8"));
218
- score = d.optimized_score ?? 0;
219
- timestamp = d.timestamp ?? "";
220
- model = d.model ?? "";
221
- }
222
- }
223
- catch { }
224
- results.push({ name, score, timestamp, model });
225
- }
226
- return results;
227
- }
228
- export function compareTarget(targetName) {
229
- const target = extractTargets().find(t => t.name === targetName);
230
- if (!target)
231
- return null;
232
- try {
233
- const opt = readFileSync(join(OPTIMIZED_DIR, `${targetName}.txt`), "utf-8");
234
- return { original: target.content, optimized: opt };
235
- }
236
- catch {
237
- return null;
238
- }
239
- }
240
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gepa/index.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * GEPA LLM provider abstraction.
3
- *
4
- * Uses pi's native model system (pi-ai + pi-coding-agent) for LLM calls.
5
- * No DSPy, no LiteLLM — direct integration with the pi model stack.
6
- *
7
- * Resolution order for model selection:
8
- * 1. config.json gepa.reflectionModel
9
- * 2. config.json daemonModel
10
- * 3. AuthStorage auto-detect (anthropic > openai > openrouter > google-antigravity > github-copilot)
11
- * 4. qmd config (~/.config/qmd/index.yml)
12
- */
13
- import type { Model, Api } from "@mariozechner/pi-ai";
14
- import type { LLMClient, GEPAConfig } from "./types.js";
15
- /** Resolved model + getApiKey pair, same shape as cli.ts createModel(). */
16
- interface ResolvedModel {
17
- model: Model<Api>;
18
- getApiKey: (provider: string) => Promise<string>;
19
- modelId: string;
20
- }
21
- /** Extract GEPA config with defaults applied. */
22
- export declare function loadGEPAConfig(): GEPAConfig;
23
- /**
24
- * Resolve a model through the full resolution chain.
25
- * Throws if no model is available.
26
- */
27
- export declare function resolveModel(configOverride?: Partial<GEPAConfig>): Promise<ResolvedModel>;
28
- /**
29
- * Create an LLM client for GEPA operations.
30
- *
31
- * Uses pi-ai's `completeSimple()` for direct model calls — no Agent overhead.
32
- */
33
- export declare function createLLMClient(configOverride?: Partial<GEPAConfig>): Promise<LLMClient>;
34
- export {};
35
- //# sourceMappingURL=llm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/gepa/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAoB,MAAM,qBAAqB,CAAC;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKxD,2EAA2E;AAC3E,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB;AAqBD,iDAAiD;AACjD,wBAAgB,cAAc,IAAI,UAAU,CAM3C;AAiKD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAyD/F;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAgD9F"}
package/dist/gepa/llm.js DELETED
@@ -1,268 +0,0 @@
1
- /**
2
- * GEPA LLM provider abstraction.
3
- *
4
- * Uses pi's native model system (pi-ai + pi-coding-agent) for LLM calls.
5
- * No DSPy, no LiteLLM — direct integration with the pi model stack.
6
- *
7
- * Resolution order for model selection:
8
- * 1. config.json gepa.reflectionModel
9
- * 2. config.json daemonModel
10
- * 3. AuthStorage auto-detect (anthropic > openai > openrouter > google-antigravity > github-copilot)
11
- * 4. qmd config (~/.config/qmd/index.yml)
12
- */
13
- import { readFileSync, existsSync } from "node:fs";
14
- import { join } from "node:path";
15
- import { homedir } from "node:os";
16
- import { DEFAULT_GEPA_CONFIG } from "./types.js";
17
- // -- Config loading ----------------------------------------------------------
18
- function loadParaConfig() {
19
- try {
20
- const configPath = join(homedir(), ".pi", "wiki", "config.json");
21
- const raw = readFileSync(configPath, "utf-8");
22
- return JSON.parse(raw);
23
- }
24
- catch {
25
- return {};
26
- }
27
- }
28
- /** Extract GEPA config with defaults applied. */
29
- export function loadGEPAConfig() {
30
- const config = loadParaConfig();
31
- return {
32
- ...DEFAULT_GEPA_CONFIG,
33
- ...config.gepa,
34
- };
35
- }
36
- // -- Model resolution --------------------------------------------------------
37
- async function resolveNamedModel(modelSpec) {
38
- const [provider, ...rest] = modelSpec.split("/");
39
- const modelId = rest.join("/");
40
- if (!provider || !modelId)
41
- return null;
42
- const { getModel } = await import("@mariozechner/pi-ai");
43
- let model;
44
- try {
45
- model = getModel(provider, modelId);
46
- }
47
- catch {
48
- // Model not found
49
- }
50
- if (!model)
51
- return null;
52
- const getApiKey = await buildApiKeyResolver();
53
- return {
54
- model,
55
- getApiKey,
56
- modelId: `${provider}/${modelId}`,
57
- };
58
- }
59
- async function autoDetectModel() {
60
- try {
61
- const { AuthStorage } = await import("@mariozechner/pi-coding-agent");
62
- const { getModels, getEnvApiKey } = await import("@mariozechner/pi-ai");
63
- const authStorage = AuthStorage.create();
64
- const preferredProviders = [
65
- "anthropic",
66
- "openai",
67
- "openrouter",
68
- "google-antigravity",
69
- "github-copilot",
70
- ];
71
- for (const provider of preferredProviders) {
72
- if (!authStorage.hasAuth(provider))
73
- continue;
74
- const key = await authStorage.getApiKey(provider);
75
- if (!key)
76
- continue;
77
- const models = getModels(provider);
78
- const sorted = [...models].sort((a, b) => (b.contextWindow ?? 0) - (a.contextWindow ?? 0));
79
- const picked = sorted.find((m) => !m.reasoning) ?? sorted[0];
80
- if (picked) {
81
- const getApiKey = async (p) => {
82
- const k = await authStorage.getApiKey(p);
83
- return k ?? getEnvApiKey(p) ?? "";
84
- };
85
- return {
86
- model: picked,
87
- getApiKey,
88
- modelId: `${provider}/${picked.id}`,
89
- };
90
- }
91
- }
92
- }
93
- catch {
94
- // AuthStorage not available
95
- }
96
- return null;
97
- }
98
- async function envVarModel() {
99
- const { getProviders, getModels, getEnvApiKey } = await import("@mariozechner/pi-ai");
100
- const providers = getProviders();
101
- for (const provider of providers) {
102
- const key = getEnvApiKey(provider);
103
- if (!key)
104
- continue;
105
- const models = getModels(provider);
106
- const sorted = [...models].sort((a, b) => (b.contextWindow ?? 0) - (a.contextWindow ?? 0));
107
- const picked = sorted.find((m) => !m.reasoning) ?? sorted[0];
108
- if (picked) {
109
- const getApiKeyFn = async (_p) => getEnvApiKey(_p) ?? "";
110
- return {
111
- model: picked,
112
- getApiKey: getApiKeyFn,
113
- modelId: `${provider}/${picked.id}`,
114
- };
115
- }
116
- }
117
- return null;
118
- }
119
- async function qmdConfigModel() {
120
- const configPath = join(homedir(), ".config", "qmd", "index.yml");
121
- if (!existsSync(configPath))
122
- return null;
123
- try {
124
- const { parse } = await import("yaml");
125
- const cfg = parse(readFileSync(configPath, "utf-8"));
126
- const chat = cfg?.providers?.chat;
127
- if (!chat?.url || !chat?.key)
128
- return null;
129
- const model = {
130
- id: chat.model || "MiniMax-M2.7-highspeed",
131
- name: chat.model || "MiniMax-M2.7-highspeed",
132
- provider: "custom",
133
- api: chat.api === "anthropic" ? "anthropic-messages" : "openai-completions",
134
- baseUrl: chat.url,
135
- reasoning: false,
136
- input: ["text"],
137
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
138
- contextWindow: 196_000,
139
- maxTokens: 8192,
140
- };
141
- const apiKey = chat.key;
142
- const getApiKey = async (_provider) => apiKey;
143
- return {
144
- model,
145
- getApiKey,
146
- modelId: `custom/${model.id}`,
147
- };
148
- }
149
- catch {
150
- return null;
151
- }
152
- }
153
- async function buildApiKeyResolver() {
154
- let authStorage = null;
155
- try {
156
- const { AuthStorage } = await import("@mariozechner/pi-coding-agent");
157
- authStorage = AuthStorage.create();
158
- }
159
- catch {
160
- // AuthStorage not available
161
- }
162
- const { getEnvApiKey } = await import("@mariozechner/pi-ai");
163
- return async (provider) => {
164
- if (authStorage) {
165
- const k = await authStorage.getApiKey(provider);
166
- if (k)
167
- return k;
168
- }
169
- return getEnvApiKey(provider) ?? "";
170
- };
171
- }
172
- // -- Model resolution pipeline -----------------------------------------------
173
- /**
174
- * Resolve a model through the full resolution chain.
175
- * Throws if no model is available.
176
- */
177
- export async function resolveModel(configOverride) {
178
- const config = loadParaConfig();
179
- const gepaConfig = { ...DEFAULT_GEPA_CONFIG, ...config.gepa, ...configOverride };
180
- // 1. Explicit GEPA reflection model
181
- if (gepaConfig.reflectionModel) {
182
- console.log(`[gepa] Trying gepa.reflectionModel: ${gepaConfig.reflectionModel}`);
183
- const resolved = await resolveNamedModel(gepaConfig.reflectionModel);
184
- if (resolved) {
185
- console.log(`[gepa] Using reflection model: ${resolved.modelId} (context: ${resolved.model.contextWindow})`);
186
- return resolved;
187
- }
188
- console.log(`[gepa] reflectionModel "${gepaConfig.reflectionModel}" not found, falling back`);
189
- }
190
- // 2. daemonModel from config
191
- if (config.daemonModel) {
192
- console.log(`[gepa] Trying daemonModel: ${config.daemonModel}`);
193
- const resolved = await resolveNamedModel(config.daemonModel);
194
- if (resolved) {
195
- console.log(`[gepa] Using daemon model: ${resolved.modelId} (context: ${resolved.model.contextWindow})`);
196
- return resolved;
197
- }
198
- console.log(`[gepa] daemonModel "${config.daemonModel}" not found, falling back`);
199
- }
200
- // 3. AuthStorage auto-detect
201
- console.log(`[gepa] Auto-detecting model via AuthStorage...`);
202
- const autoDetected = await autoDetectModel();
203
- if (autoDetected) {
204
- console.log(`[gepa] Using auto-detected model: ${autoDetected.modelId} (context: ${autoDetected.model.contextWindow})`);
205
- return autoDetected;
206
- }
207
- // 4. Env var detection
208
- console.log(`[gepa] Trying env var model detection...`);
209
- const envModel = await envVarModel();
210
- if (envModel) {
211
- console.log(`[gepa] Using env model: ${envModel.modelId} (context: ${envModel.model.contextWindow})`);
212
- return envModel;
213
- }
214
- // 5. qmd config fallback
215
- console.log(`[gepa] Trying qmd config fallback...`);
216
- const qmdModel = await qmdConfigModel();
217
- if (qmdModel) {
218
- console.log(`[gepa] Using qmd model: ${qmdModel.modelId} (context: ${qmdModel.model.contextWindow})`);
219
- return qmdModel;
220
- }
221
- throw new Error("[gepa] No LLM model available. Configure one of:\n" +
222
- " - gepa.reflectionModel in ~/.pi/wiki/config.json\n" +
223
- " - daemonModel in ~/.pi/wiki/config.json\n" +
224
- " - API keys (ANTHROPIC_API_KEY, OPENAI_API_KEY, etc.)\n" +
225
- " - ~/.config/qmd/index.yml chat provider");
226
- }
227
- // -- LLM Client creation -----------------------------------------------------
228
- /**
229
- * Create an LLM client for GEPA operations.
230
- *
231
- * Uses pi-ai's `completeSimple()` for direct model calls — no Agent overhead.
232
- */
233
- export async function createLLMClient(configOverride) {
234
- const resolved = await resolveModel(configOverride);
235
- const { completeSimple } = await import("@mariozechner/pi-ai");
236
- return {
237
- modelId: resolved.modelId,
238
- async complete(prompt, system) {
239
- const apiKey = await resolved.getApiKey(resolved.model.provider);
240
- const response = await completeSimple(resolved.model, {
241
- systemPrompt: system,
242
- messages: [
243
- {
244
- role: "user",
245
- content: prompt,
246
- timestamp: Date.now(),
247
- },
248
- ],
249
- }, {
250
- apiKey,
251
- maxTokens: resolved.model.maxTokens,
252
- });
253
- // Extract text from the assistant response content blocks
254
- const textParts = [];
255
- for (const block of response.content) {
256
- if (block.type === "text") {
257
- textParts.push(block.text);
258
- }
259
- }
260
- const result = textParts.join("\n");
261
- if (!result.trim()) {
262
- throw new Error(`[gepa] Empty response from ${resolved.modelId} (stop: ${response.stopReason})`);
263
- }
264
- return result;
265
- },
266
- };
267
- }
268
- //# sourceMappingURL=llm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../../src/gepa/llm.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- You are a knowledge extraction specialist for technical project wikis. Your task is to analyze coding session conversations and capture ALL project-relevant knowledge into wiki pages.
2
-
3
- ## Input Format
4
- You will receive:
5
- - task_context: Brief description of the coding session topic and project
6
- - session-conversation: The actual conversation content to analyze
7
-
8
- ## Wiki Page Structure Requirements
9
- Create wiki pages using this exact structure:
10
-
11
- ```
12
- # Page Title (kebab-case for technical terms)
13
-
14
- ## Topic
15
- Brief description of what this page covers (1-2 sentences)
16
-
17
- ## Key Facts
18
- - Bullet points with specific technical details
19
- - Include paths, configs, server details, commands
20
- - Use **bold** for important terms/concepts
21
- - Capture operational facts - they're often most valuable
22
-
23
- ## Insights (Optional)
24
- - Analysis of implications, patterns, or broader context
25
- - How this connects to larger architectural patterns
26
- - Lessons learned or best practices identified
27
-
28
- ## Connections
29
- - [[Related Wiki Page]] - Brief description of relationship
30
- - Use kebab-case for technical project names
31
- - Include both specific project pages and general concept pages
32
-
33
- ## Sources
34
- - Session file path or conversation source
35
- ```
36
-
37
- ## PARA Compliance Requirements
38
- - Use kebab-case for all project names and technical terms in page titles and connections
39
- - Technical reference material should be categorized as Resources
40
- - Include scope indicators through consistent naming and cross-references
41
-
42
- ## Knowledge Capture Bias
43
- **Capture bias: when in doubt, capture it.**
44
- - Small operational facts (paths, configs, commands) are often most valuable
45
- - Technical architecture details, even if seemingly minor
46
- - API findings, verification results, compatibility issues
47
- - Extension systems, plugin architectures, integration points
48
- - Security considerations and safeguards
49
-
50
- ## Wiki Management Strategy
51
- 1. **Search first**: Use wiki_query to find existing pages on the topic
52
- 2. **Update over create**: If matching page exists, use wiki_read then wiki_write with exact slug to update
53
- 3. **Create only if needed**: Only make new pages if wiki_query finds no relevant results
54
- 4. **Never pass indexContent**: The index auto-rebuilds from pages on disk
55
- 5. **Always include sources**: Add session file path to Sources section
56
-
57
- ## Special Project Context
58
- Based on the examples, you're working with:
59
- - **pi-mono/pi-para projects**: Modular knowledge management and agent systems
60
- - **Extension architectures**: Plugin-based systems for AI agents and knowledge tools
61
- - **Quarto integration**: .qmd files as first-class knowledge artifacts
62
- - **API verification**: Testing and validation processes for extensions
63
- - **Security considerations**: Prompt injection safeguards in agent systems
64
-
65
- Only respond with "nothing to capture" if the session contains purely greetings or completely off-topic chitchat with zero project knowledge.