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,29 +0,0 @@
1
- /**
2
- * GEPA core optimization loop.
3
- *
4
- * Implements the Genetic-Evolutionary Prompt Adaptation algorithm:
5
- * 1. Score the original prompt (baseline)
6
- * 2. For N iterations: reflect → mutate → evaluate → update Pareto frontier
7
- * 3. Return the best candidate from the frontier
8
- *
9
- * Early stopping: score >= 0.95, or no improvement in 10 consecutive iterations.
10
- */
11
- import type { GEPAConfig, Target, Candidate, LLMClient, EvalResult } from "./types.js";
12
- import { ParetoFrontier } from "./types.js";
13
- declare const EARLY_STOP_SCORE = 0.95;
14
- declare const STAGNATION_LIMIT = 10;
15
- declare const REFLECTION_SYSTEM_PROMPT: string;
16
- export interface OptimizationResult {
17
- best: Candidate;
18
- frontier: ParetoFrontier;
19
- baselineScore: number;
20
- baselineEval: EvalResult;
21
- iterationsRun: number;
22
- stopReason: "max-iterations" | "early-stop-score" | "stagnation";
23
- }
24
- declare function buildReflectionPrompt(parent: Candidate, target: Target, iteration: number, maxIterations: number): string;
25
- declare function validateConstraints(content: string, constraints: string[]): string[];
26
- declare function selectParent(frontier: ParetoFrontier): Candidate;
27
- export declare function optimize(target: Target, config: GEPAConfig, llm: LLMClient, context: string): Promise<OptimizationResult>;
28
- export { buildReflectionPrompt, validateConstraints, selectParent, REFLECTION_SYSTEM_PROMPT, EARLY_STOP_SCORE, STAGNATION_LIMIT, };
29
- //# sourceMappingURL=optimizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../src/gepa/optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,MAAM,EACN,SAAS,EACT,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAuB,MAAM,YAAY,CAAC;AAKjE,QAAA,MAAM,gBAAgB,OAAO,CAAC;AAC9B,QAAA,MAAM,gBAAgB,KAAK,CAAC;AAG5B,QAAA,MAAM,wBAAwB,QAE2B,CAAC;AAI1D,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,UAAU,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,YAAY,CAAC;CAClE;AAID,iBAAS,qBAAqB,CAC5B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,MAAM,CA+CR;AAID,iBAAS,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAe7E;AAmBD,iBAAS,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAWzD;AAID,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CA6I7B;AAiFD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,GACjB,CAAC"}
@@ -1,249 +0,0 @@
1
- /**
2
- * GEPA core optimization loop.
3
- *
4
- * Implements the Genetic-Evolutionary Prompt Adaptation algorithm:
5
- * 1. Score the original prompt (baseline)
6
- * 2. For N iterations: reflect → mutate → evaluate → update Pareto frontier
7
- * 3. Return the best candidate from the frontier
8
- *
9
- * Early stopping: score >= 0.95, or no improvement in 10 consecutive iterations.
10
- */
11
- import { randomUUID } from "node:crypto";
12
- import { ParetoFrontier, DEFAULT_GEPA_CONFIG } from "./types.js";
13
- import { evaluateCandidate } from "./evaluator.js";
14
- // -- Constants ---------------------------------------------------------------
15
- const EARLY_STOP_SCORE = 0.95;
16
- const STAGNATION_LIMIT = 10;
17
- const MAX_MUTATION_RETRIES = 2;
18
- const REFLECTION_SYSTEM_PROMPT = "You are a prompt optimization expert. You improve prompts by analyzing " +
19
- "evaluation feedback and making targeted improvements.";
20
- // -- Reflection prompt builder -----------------------------------------------
21
- function buildReflectionPrompt(parent, target, iteration, maxIterations) {
22
- const sortedDims = [...parent.dimensions].sort((a, b) => a.score - b.score);
23
- const dimFeedback = sortedDims
24
- .map((d) => ` - ${d.name}: ${d.score.toFixed(2)}/1.00 — ${d.feedback}`)
25
- .join("\n");
26
- const constraintSection = target.constraints.length > 0
27
- ? `\n## Required Constraints (MUST be preserved)\n\n${target.constraints.map((c, i) => `${i + 1}. ${c}`).join("\n")}\n`
28
- : "";
29
- const descSection = target.description
30
- ? `\n**Purpose**: ${target.description}\n`
31
- : "";
32
- const weakest = sortedDims.slice(0, 2);
33
- const weakestNames = weakest.map((d) => d.name).join(" and ");
34
- return `# Prompt Optimization — Iteration ${iteration}/${maxIterations}
35
-
36
- ## Target: "${target.name}" (${target.type})${descSection}
37
-
38
- ## Current Prompt (score: ${parent.score.toFixed(3)})
39
-
40
- <current_prompt>
41
- ${parent.content}
42
- </current_prompt>
43
-
44
- ## Evaluation Feedback (per dimension, weakest first)
45
-
46
- ${dimFeedback}
47
-
48
- ## Weakest Dimensions
49
-
50
- Focus your improvements primarily on **${weakestNames}**, which scored lowest.
51
- ${constraintSection}
52
- ## Instructions
53
-
54
- Produce an improved version of this prompt. Rules:
55
- 1. Keep ALL required concepts and constraints — do not remove anything essential.
56
- 2. Focus on improving the weakest dimensions listed above.
57
- 3. Make targeted, specific improvements — do not rewrite from scratch unnecessarily.
58
- 4. Every sentence must earn its place — remove filler, improve precision.
59
- 5. Maintain the same overall structure unless the structure itself is the problem.
60
-
61
- Output ONLY the improved prompt text, nothing else. No explanations, no commentary, no markdown code fences wrapping the prompt.`;
62
- }
63
- // -- Constraint validation ---------------------------------------------------
64
- function validateConstraints(content, constraints) {
65
- if (constraints.length === 0)
66
- return [];
67
- const lower = content.toLowerCase();
68
- const violations = [];
69
- for (const constraint of constraints) {
70
- const terms = extractKeyTerms(constraint);
71
- const hasTerm = terms.some((t) => lower.includes(t.toLowerCase()));
72
- if (!hasTerm) {
73
- violations.push(constraint);
74
- }
75
- }
76
- return violations;
77
- }
78
- function extractKeyTerms(constraint) {
79
- const filler = new Set([
80
- "must", "should", "include", "have", "contain", "mention",
81
- "use", "provide", "specify", "ensure", "be", "the", "a", "an",
82
- "and", "or", "for", "with", "about", "that", "this", "is", "are",
83
- "in", "of", "to", "not", "no", "any", "all", "each",
84
- ]);
85
- return constraint
86
- .toLowerCase()
87
- .replace(/[^a-z0-9\s-]/g, "")
88
- .split(/\s+/)
89
- .filter((w) => w.length > 2 && !filler.has(w));
90
- }
91
- // -- Parent selection --------------------------------------------------------
92
- function selectParent(frontier) {
93
- const best = frontier.best();
94
- if (!best)
95
- throw new Error("[gepa] Cannot select parent from empty frontier");
96
- if (frontier.size <= 1 || Math.random() < 0.7) {
97
- return best;
98
- }
99
- const candidates = frontier.candidates;
100
- const idx = Math.floor(Math.random() * candidates.length);
101
- return candidates[idx];
102
- }
103
- // -- Core optimization loop --------------------------------------------------
104
- export async function optimize(target, config, llm, context) {
105
- const maxIterations = config.maxIterations ?? DEFAULT_GEPA_CONFIG.maxIterations;
106
- const paretoSize = config.paretoSize ?? DEFAULT_GEPA_CONFIG.paretoSize;
107
- const frontier = new ParetoFrontier(paretoSize);
108
- // Step 1: Baseline evaluation
109
- console.log(`[gepa] Evaluating baseline for "${target.name}"...`);
110
- const originalContent = await target.getCurrentContent();
111
- const baselineEval = await evaluateCandidate(originalContent, target, context, llm);
112
- const baselineCandidate = {
113
- id: randomUUID(),
114
- content: originalContent,
115
- score: baselineEval.score,
116
- dimensions: baselineEval.dimensions,
117
- iteration: 0,
118
- parentId: null,
119
- mutationDescription: "original",
120
- };
121
- frontier.add(baselineCandidate);
122
- console.log(`[gepa] Baseline score: ${baselineEval.score.toFixed(3)} ` +
123
- `[${baselineEval.dimensions.map((d) => `${d.name}:${d.score.toFixed(2)}`).join(", ")}]`);
124
- if (baselineEval.score >= EARLY_STOP_SCORE) {
125
- console.log(`[gepa] Baseline score >= ${EARLY_STOP_SCORE}, no optimization needed`);
126
- return {
127
- best: baselineCandidate,
128
- frontier,
129
- baselineScore: baselineEval.score,
130
- baselineEval,
131
- iterationsRun: 0,
132
- stopReason: "early-stop-score",
133
- };
134
- }
135
- // Step 2: Optimization iterations
136
- let iterationsWithoutImprovement = 0;
137
- let bestScoreSeen = baselineEval.score;
138
- let stopReason = "max-iterations";
139
- for (let i = 1; i <= maxIterations; i++) {
140
- const parent = selectParent(frontier);
141
- const mutatedContent = await generateMutation(parent, target, llm, i, maxIterations);
142
- if (!mutatedContent) {
143
- console.log(`[gepa] iter ${i}/${maxIterations}: mutation failed, skipping`);
144
- iterationsWithoutImprovement++;
145
- if (iterationsWithoutImprovement >= STAGNATION_LIMIT) {
146
- console.log(`[gepa] Stagnation: no improvement in ${STAGNATION_LIMIT} iterations, stopping`);
147
- stopReason = "stagnation";
148
- break;
149
- }
150
- continue;
151
- }
152
- const evalResult = await evaluateCandidate(mutatedContent, target, context, llm);
153
- const candidate = {
154
- id: randomUUID(),
155
- content: mutatedContent,
156
- score: evalResult.score,
157
- dimensions: evalResult.dimensions,
158
- iteration: i,
159
- parentId: parent.id,
160
- mutationDescription: `Mutation from "${parent.id.slice(0, 8)}" at iter ${i}`,
161
- };
162
- const added = frontier.add(candidate);
163
- if (candidate.score > bestScoreSeen) {
164
- bestScoreSeen = candidate.score;
165
- iterationsWithoutImprovement = 0;
166
- }
167
- else {
168
- iterationsWithoutImprovement++;
169
- }
170
- const currentBest = frontier.best();
171
- const bestScore = currentBest?.score ?? baselineEval.score;
172
- const addedMarker = added ? " +" : "";
173
- console.log(`[gepa] iter ${i}/${maxIterations}: score ${candidate.score.toFixed(3)} ` +
174
- `(best: ${bestScore.toFixed(3)})${addedMarker}`);
175
- if (candidate.score >= EARLY_STOP_SCORE) {
176
- console.log(`[gepa] Score ${candidate.score.toFixed(3)} >= ${EARLY_STOP_SCORE}, stopping early`);
177
- stopReason = "early-stop-score";
178
- break;
179
- }
180
- if (iterationsWithoutImprovement >= STAGNATION_LIMIT) {
181
- console.log(`[gepa] Stagnation: no improvement in ${STAGNATION_LIMIT} iterations, stopping`);
182
- stopReason = "stagnation";
183
- break;
184
- }
185
- }
186
- // Step 3: Return results
187
- const best = frontier.best() ?? baselineCandidate;
188
- const maxIterationSeen = Math.max(...frontier.candidates.map((c) => c.iteration), 0);
189
- const improvement = best.score - baselineEval.score;
190
- console.log(`[gepa] Optimization complete for "${target.name}": ` +
191
- `${baselineEval.score.toFixed(3)} → ${best.score.toFixed(3)} ` +
192
- `(+${improvement.toFixed(3)}) in ${maxIterationSeen} iterations ` +
193
- `[${stopReason}]`);
194
- return {
195
- best,
196
- frontier,
197
- baselineScore: baselineEval.score,
198
- baselineEval,
199
- iterationsRun: maxIterationSeen,
200
- stopReason,
201
- };
202
- }
203
- // -- Mutation generation -----------------------------------------------------
204
- async function generateMutation(parent, target, llm, iteration, maxIterations) {
205
- for (let attempt = 0; attempt <= MAX_MUTATION_RETRIES; attempt++) {
206
- try {
207
- const reflectionPrompt = buildReflectionPrompt(parent, target, iteration, maxIterations);
208
- const response = await llm.complete(reflectionPrompt, REFLECTION_SYSTEM_PROMPT);
209
- const mutated = cleanMutationResponse(response);
210
- if (!mutated || mutated.length < 50) {
211
- console.warn(`[gepa] Mutation too short (${mutated?.length ?? 0} chars), ` +
212
- `retry ${attempt + 1}/${MAX_MUTATION_RETRIES + 1}`);
213
- continue;
214
- }
215
- const violations = validateConstraints(mutated, target.constraints);
216
- if (violations.length > 0) {
217
- console.warn(`[gepa] Mutation violates ${violations.length} constraint(s), ` +
218
- `retry ${attempt + 1}/${MAX_MUTATION_RETRIES + 1}`);
219
- continue;
220
- }
221
- if (mutated.trim() === parent.content.trim()) {
222
- console.warn(`[gepa] Mutation identical to parent, retry ${attempt + 1}/${MAX_MUTATION_RETRIES + 1}`);
223
- continue;
224
- }
225
- return mutated;
226
- }
227
- catch (error) {
228
- const msg = error instanceof Error ? error.message : String(error);
229
- console.error(`[gepa] Mutation LLM call failed (attempt ${attempt + 1}/${MAX_MUTATION_RETRIES + 1}): ${msg}`);
230
- if (attempt >= MAX_MUTATION_RETRIES)
231
- return null;
232
- }
233
- }
234
- return null;
235
- }
236
- function cleanMutationResponse(response) {
237
- let cleaned = response.trim();
238
- const fenceMatch = cleaned.match(/^```(?:markdown|md|text|txt)?\s*\n([\s\S]*?)\n?```\s*$/);
239
- if (fenceMatch) {
240
- cleaned = fenceMatch[1].trim();
241
- }
242
- if ((cleaned.startsWith('"') && cleaned.endsWith('"')) ||
243
- (cleaned.startsWith("'") && cleaned.endsWith("'"))) {
244
- cleaned = cleaned.slice(1, -1).trim();
245
- }
246
- return cleaned;
247
- }
248
- export { buildReflectionPrompt, validateConstraints, selectParent, REFLECTION_SYSTEM_PROMPT, EARLY_STOP_SCORE, STAGNATION_LIMIT, };
249
- //# sourceMappingURL=optimizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../src/gepa/optimizer.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * GEPA target definitions — what prompts/skills can be optimized.
3
- *
4
- * Each target knows how to load its current content, where the source lives,
5
- * and what constraints must be preserved during optimization.
6
- *
7
- * Targets:
8
- * 1. wiki-system-prompt — Wiki agent persona (templates/prompts.ts)
9
- * 2. ingest-prompt — Source ingestion (templates/prompts.ts)
10
- * 3. query-prompt — Search result synthesis (templates/prompts.ts)
11
- * 4. capture-system-prompt — Session capture agent (templates/prompts.ts)
12
- * 5. capture-prompt — Auto-capture at shutdown (templates/prompts.ts)
13
- * 6. maintenance-system-prompt — Wiki maintenance agent (maintainer.ts, non-exported)
14
- * 7. processor-capture-prompt — Daemon capture agent (processor.ts, non-exported)
15
- * 8. skill-para — Active PARA behavioral guidelines (skills/para/SKILL.md)
16
- * 9. skill-setup — Setup instructions (skills/setup/SKILL.md)
17
- */
18
- import type { Target } from "./types.js";
19
- /** Get the path where an optimized version of a target is saved. */
20
- export declare function getOptimizedPath(name: string): string;
21
- /** Get the history directory for a target. */
22
- export declare function getHistoryDir(name: string): string;
23
- /** Check if an optimized version exists for a target. */
24
- export declare function isOptimized(name: string): Promise<boolean>;
25
- /** A loaded target with its content ready. */
26
- export interface LoadedTarget extends Target {
27
- displayName: string;
28
- filePath: string;
29
- }
30
- /**
31
- * Load a single target by name.
32
- * @throws if target name is not recognized
33
- */
34
- export declare function loadTarget(name: string): LoadedTarget;
35
- /** Load all targets. */
36
- export declare function listTargets(): LoadedTarget[];
37
- /** Get all target names. */
38
- export declare function listTargetNames(): string[];
39
- //# sourceMappingURL=targets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../../src/gepa/targets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,YAAY,CAAC;AAiBrD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,yDAAyD;AACzD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhE;AAgSD,8CAA8C;AAC9C,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAkBrD;AAED,wBAAwB;AACxB,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAW5C;AAED,4BAA4B;AAC5B,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
@@ -1,326 +0,0 @@
1
- /**
2
- * GEPA target definitions — what prompts/skills can be optimized.
3
- *
4
- * Each target knows how to load its current content, where the source lives,
5
- * and what constraints must be preserved during optimization.
6
- *
7
- * Targets:
8
- * 1. wiki-system-prompt — Wiki agent persona (templates/prompts.ts)
9
- * 2. ingest-prompt — Source ingestion (templates/prompts.ts)
10
- * 3. query-prompt — Search result synthesis (templates/prompts.ts)
11
- * 4. capture-system-prompt — Session capture agent (templates/prompts.ts)
12
- * 5. capture-prompt — Auto-capture at shutdown (templates/prompts.ts)
13
- * 6. maintenance-system-prompt — Wiki maintenance agent (maintainer.ts, non-exported)
14
- * 7. processor-capture-prompt — Daemon capture agent (processor.ts, non-exported)
15
- * 8. skill-para — Active PARA behavioral guidelines (skills/para/SKILL.md)
16
- * 9. skill-setup — Setup instructions (skills/setup/SKILL.md)
17
- */
18
- import { readFile } from "node:fs/promises";
19
- import { join, dirname } from "node:path";
20
- import { existsSync } from "node:fs";
21
- import { homedir } from "node:os";
22
- import { fileURLToPath } from "node:url";
23
- // -- Path helpers ------------------------------------------------------------
24
- const __filename = fileURLToPath(import.meta.url);
25
- const __dirname = dirname(__filename);
26
- /** Project root (two levels up from src/gepa/ → dist/gepa/ at runtime). */
27
- function getProjectRoot() {
28
- // At build time: src/gepa/targets.ts → project root is ../../
29
- // At runtime: dist/gepa/targets.js → project root is ../../
30
- return join(__dirname, "..", "..");
31
- }
32
- /** Optimized prompts directory. */
33
- const GEPA_DIR = join(homedir(), ".pi", "wiki", "gepa");
34
- /** Get the path where an optimized version of a target is saved. */
35
- export function getOptimizedPath(name) {
36
- return join(GEPA_DIR, "optimized", `${name}.txt`);
37
- }
38
- /** Get the history directory for a target. */
39
- export function getHistoryDir(name) {
40
- return join(GEPA_DIR, "history", name);
41
- }
42
- /** Check if an optimized version exists for a target. */
43
- export async function isOptimized(name) {
44
- return existsSync(getOptimizedPath(name));
45
- }
46
- // -- Non-exported prompt extraction ------------------------------------------
47
- /**
48
- * Extract a template literal from a TypeScript source file.
49
- *
50
- * Finds a `const NAME = \`...\`` pattern and extracts the content.
51
- * Falls back to searching the dist JS file if the TS source isn't found.
52
- */
53
- async function extractTemplLiteralFromSource(filePath, varName) {
54
- // Try .ts first, then .js (runtime in dist/)
55
- let actualPath = filePath;
56
- if (!existsSync(actualPath)) {
57
- actualPath = filePath.replace(/\.ts$/, ".js");
58
- }
59
- if (!existsSync(actualPath)) {
60
- // Try relative to project root
61
- const root = getProjectRoot();
62
- actualPath = join(root, "src", filePath.split("/src/").pop() ?? "");
63
- if (!existsSync(actualPath)) {
64
- actualPath = join(root, "dist", filePath.split("/src/").pop()?.replace(/\.ts$/, ".js") ?? "");
65
- }
66
- }
67
- const source = await readFile(actualPath, "utf-8");
68
- // Match: const NAME = `...`; (possibly with line-spanning content)
69
- const pattern = new RegExp(`(?:const|let|var)\\s+${varName}\\s*=\\s*\`([\\s\\S]*?)\`\\s*;`);
70
- const match = source.match(pattern);
71
- if (!match || !match[1]) {
72
- throw new Error(`[gepa] Could not extract "${varName}" from ${actualPath}. ` +
73
- `Make sure the variable is defined as a template literal.`);
74
- }
75
- // Unescape template literal content
76
- return match[1]
77
- .replace(/\\`/g, "`")
78
- .replace(/\\\$/g, "$")
79
- .replace(/\\\\/g, "\\");
80
- }
81
- /**
82
- * Extract SKILL.md content, stripping YAML frontmatter.
83
- */
84
- async function loadSkillContent(filePath) {
85
- const raw = await readFile(filePath, "utf-8");
86
- // Strip YAML frontmatter (--- ... ---)
87
- const fmMatch = raw.match(/^---\s*\n[\s\S]*?\n---\s*\n/);
88
- if (fmMatch) {
89
- return raw.slice(fmMatch[0].length).trim();
90
- }
91
- return raw.trim();
92
- }
93
- function flattenConstraints(c) {
94
- return c.requiredConcepts;
95
- }
96
- function buildTargets() {
97
- const root = getProjectRoot();
98
- return [
99
- {
100
- name: "wiki-system-prompt",
101
- type: "prompt",
102
- displayName: "Wiki System Prompt",
103
- description: "System prompt for the standalone wiki agent — persona and rules for PARA wiki management",
104
- filePath: join(root, "src/templates/prompts.ts"),
105
- constraints: {
106
- requiredConcepts: [
107
- "PARA categories (resources, areas, projects, archives)",
108
- "scope must be kebab-case project name",
109
- "tags must be kebab-case",
110
- "wikilinks to connect related pages",
111
- "never include API keys or secrets",
112
- "wiki summary format",
113
- "index is auto-rebuilt",
114
- ],
115
- },
116
- async getContent() {
117
- const { WIKI_SYSTEM_PROMPT } = await import("../templates/prompts.js");
118
- return WIKI_SYSTEM_PROMPT;
119
- },
120
- },
121
- {
122
- name: "ingest-prompt",
123
- type: "prompt",
124
- displayName: "Ingest Prompt",
125
- description: "Instructions for integrating new source material into the wiki",
126
- filePath: join(root, "src/templates/prompts.ts"),
127
- constraints: {
128
- requiredConcepts: [
129
- "review existing pages before creating new ones",
130
- "PARA category assignment with resources as default",
131
- "wiki summary format (Topic, Key Facts, Insights, Connections, Open Questions, Sources)",
132
- "flag contradictions",
133
- "scope must be kebab-case",
134
- "wikilinks and Connections section",
135
- ],
136
- },
137
- async getContent() {
138
- const { INGEST_PROMPT } = await import("../templates/prompts.js");
139
- return INGEST_PROMPT;
140
- },
141
- },
142
- {
143
- name: "query-prompt",
144
- type: "prompt",
145
- displayName: "Query Prompt",
146
- description: "Instructions for synthesizing answers from wiki search results",
147
- filePath: join(root, "src/templates/prompts.ts"),
148
- constraints: {
149
- requiredConcepts: [
150
- "cite specific pages using wikilink references",
151
- "freshness verification",
152
- "self-healing — fix incorrect wiki pages",
153
- "note gaps in wiki coverage",
154
- ],
155
- },
156
- async getContent() {
157
- const { QUERY_PROMPT } = await import("../templates/prompts.js");
158
- return QUERY_PROMPT;
159
- },
160
- },
161
- {
162
- name: "capture-system-prompt",
163
- type: "prompt",
164
- displayName: "Capture System Prompt",
165
- description: "System prompt for the standalone capture agent in templates/prompts.ts",
166
- filePath: join(root, "src/templates/prompts.ts"),
167
- constraints: {
168
- requiredConcepts: [
169
- "PARA category rules",
170
- "scope must be kebab-case project name",
171
- "never include API keys, tokens, passwords, or secrets",
172
- "search wiki_query before creating pages",
173
- "update existing pages instead of creating duplicates",
174
- "wiki summary format",
175
- "index is auto-rebuilt",
176
- "capture architecture decisions, debugging solutions, server details, configs",
177
- ],
178
- },
179
- async getContent() {
180
- const { CAPTURE_SYSTEM_PROMPT } = await import("../templates/prompts.js");
181
- return CAPTURE_SYSTEM_PROMPT;
182
- },
183
- },
184
- {
185
- name: "capture-prompt",
186
- type: "prompt",
187
- displayName: "Capture Prompt",
188
- description: "Prompt template for auto-capture at session shutdown",
189
- filePath: join(root, "src/templates/prompts.ts"),
190
- constraints: {
191
- requiredConcepts: [
192
- "capture ALL project-relevant knowledge",
193
- "use wiki_query to search for existing pages first",
194
- "prefer updating over creating",
195
- "include session file path in Sources",
196
- "do NOT pass indexContent",
197
- ],
198
- },
199
- async getContent() {
200
- const { CAPTURE_PROMPT } = await import("../templates/prompts.js");
201
- return CAPTURE_PROMPT;
202
- },
203
- },
204
- {
205
- name: "maintenance-system-prompt",
206
- type: "prompt",
207
- displayName: "Maintenance System Prompt",
208
- description: "System prompt for the wiki maintenance agent (non-exported, in maintainer.ts)",
209
- filePath: join(root, "src/maintainer.ts"),
210
- constraints: {
211
- requiredConcepts: [
212
- "duplicate detection and merging",
213
- "wikilink discovery",
214
- "PARA category review with resources as default",
215
- "tag cleanup kebab-case",
216
- "content quality (Topic, Key Facts, Connections)",
217
- "staleness review",
218
- "project lifecycle review",
219
- "conservative approach — when unsure leave it alone",
220
- "never include secrets",
221
- ],
222
- },
223
- async getContent() {
224
- return extractTemplLiteralFromSource(join(root, "src/maintainer.ts"), "MAINTENANCE_SYSTEM_PROMPT");
225
- },
226
- },
227
- {
228
- name: "processor-capture-prompt",
229
- type: "prompt",
230
- displayName: "Processor Capture Prompt",
231
- description: "System prompt for the daemon's session capture agent (non-exported, in processor.ts)",
232
- filePath: join(root, "src/processor.ts"),
233
- constraints: {
234
- requiredConcepts: [
235
- "PARA category rules",
236
- "scope must be kebab-case project name",
237
- "never include API keys, tokens, passwords, or secrets",
238
- "search wiki_query before creating pages",
239
- "update existing pages over creating duplicates",
240
- "session exploration tools (session_stats, session_search, session_slice)",
241
- "wiki summary format (Topic, Key Facts, Insights, Sources)",
242
- ],
243
- },
244
- async getContent() {
245
- return extractTemplLiteralFromSource(join(root, "src/processor.ts"), "CAPTURE_SYSTEM_PROMPT");
246
- },
247
- },
248
- {
249
- name: "skill-para",
250
- type: "skill",
251
- displayName: "PARA Skill",
252
- description: "Active PARA behavioral guidelines — tells agents how to use the wiki during work",
253
- filePath: join(root, "skills/para/SKILL.md"),
254
- constraints: {
255
- requiredConcepts: [
256
- "wiki_query before planning",
257
- "wiki_write for decisions and solutions",
258
- "resources for almost everything",
259
- "projects only for goals with end dates",
260
- "scope must be kebab-case project name",
261
- "wikilinks",
262
- ],
263
- },
264
- async getContent() {
265
- return loadSkillContent(join(root, "skills/para/SKILL.md"));
266
- },
267
- },
268
- {
269
- name: "skill-setup",
270
- type: "skill",
271
- displayName: "Setup Skill",
272
- description: "Setup instructions for pi-para — install, configure, and start",
273
- filePath: join(root, "skills/setup/SKILL.md"),
274
- constraints: {
275
- requiredConcepts: [
276
- "qmd search engine",
277
- "configure providers",
278
- "daemon",
279
- ],
280
- },
281
- async getContent() {
282
- return loadSkillContent(join(root, "skills/setup/SKILL.md"));
283
- },
284
- },
285
- ];
286
- }
287
- /**
288
- * Load a single target by name.
289
- * @throws if target name is not recognized
290
- */
291
- export function loadTarget(name) {
292
- const targets = buildTargets();
293
- const def = targets.find((t) => t.name === name);
294
- if (!def) {
295
- const valid = targets.map((t) => t.name).join(", ");
296
- throw new Error(`[gepa] Unknown target "${name}". Valid targets: ${valid}`);
297
- }
298
- return {
299
- name: def.name,
300
- type: def.type,
301
- displayName: def.displayName,
302
- description: def.description,
303
- sourcePath: def.filePath,
304
- constraints: flattenConstraints(def.constraints),
305
- getCurrentContent: def.getContent,
306
- filePath: def.filePath,
307
- };
308
- }
309
- /** Load all targets. */
310
- export function listTargets() {
311
- return buildTargets().map((def) => ({
312
- name: def.name,
313
- type: def.type,
314
- displayName: def.displayName,
315
- description: def.description,
316
- sourcePath: def.filePath,
317
- constraints: flattenConstraints(def.constraints),
318
- getCurrentContent: def.getContent,
319
- filePath: def.filePath,
320
- }));
321
- }
322
- /** Get all target names. */
323
- export function listTargetNames() {
324
- return buildTargets().map((t) => t.name);
325
- }
326
- //# sourceMappingURL=targets.js.map