pi-para 0.5.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/CHANGELOG.md +214 -0
- package/README.md +305 -0
- package/SETUP.md +171 -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.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +405 -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 +786 -0
- package/dist/commands.js.map +1 -0
- package/dist/context.d.ts +61 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +289 -0
- package/dist/context.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/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/gepa/dataset.d.ts +36 -0
- package/dist/gepa/dataset.d.ts.map +1 -0
- package/dist/gepa/dataset.js +148 -0
- package/dist/gepa/dataset.js.map +1 -0
- package/dist/gepa/evaluator.d.ts +51 -0
- package/dist/gepa/evaluator.d.ts.map +1 -0
- package/dist/gepa/evaluator.js +317 -0
- package/dist/gepa/evaluator.js.map +1 -0
- package/dist/gepa/index.d.ts +66 -0
- package/dist/gepa/index.d.ts.map +1 -0
- package/dist/gepa/index.js +240 -0
- package/dist/gepa/index.js.map +1 -0
- package/dist/gepa/llm.d.ts +35 -0
- package/dist/gepa/llm.d.ts.map +1 -0
- package/dist/gepa/llm.js +268 -0
- package/dist/gepa/llm.js.map +1 -0
- package/dist/gepa/optimized/capture-prompt.txt +65 -0
- package/dist/gepa/optimizer.d.ts +29 -0
- package/dist/gepa/optimizer.d.ts.map +1 -0
- package/dist/gepa/optimizer.js +249 -0
- package/dist/gepa/optimizer.js.map +1 -0
- package/dist/gepa/targets.d.ts +39 -0
- package/dist/gepa/targets.d.ts.map +1 -0
- package/dist/gepa/targets.js +326 -0
- package/dist/gepa/targets.js.map +1 -0
- package/dist/gepa/types.d.ts +168 -0
- package/dist/gepa/types.d.ts.map +1 -0
- package/dist/gepa/types.js +124 -0
- package/dist/gepa/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +294 -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/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/query.d.ts +69 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +107 -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/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/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/store.d.ts +56 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +227 -0
- package/dist/store.js.map +1 -0
- package/dist/summarize.d.ts +56 -0
- package/dist/summarize.d.ts.map +1 -0
- package/dist/summarize.js +231 -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 +63 -0
- package/dist/templates/prompts.d.ts.map +1 -0
- package/dist/templates/prompts.js +260 -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 +1033 -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.d.ts +103 -0
- package/dist/wiki.d.ts.map +1 -0
- package/dist/wiki.js +428 -0
- package/dist/wiki.js.map +1 -0
- package/package.json +142 -0
- package/scripts/gepa/__pycache__/dataset.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/lm_providers.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/metric.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/program.cpython-313.pyc +0 -0
- package/scripts/gepa/__pycache__/wiki_reader.cpython-313.pyc +0 -0
- package/scripts/gepa/dataset.py +192 -0
- package/scripts/gepa/lm_providers.py +472 -0
- package/scripts/gepa/metric.py +279 -0
- package/scripts/gepa/optimize.py +367 -0
- package/scripts/gepa/program.py +99 -0
- package/scripts/gepa/pyproject.toml +19 -0
- package/scripts/gepa/run-all.sh +53 -0
- package/scripts/gepa/uv.lock +2241 -0
- package/scripts/gepa/wiki_reader.py +113 -0
- package/skills/para/SKILL.md +77 -0
- package/skills/setup/SKILL.md +20 -0
- package/src/capture.ts +563 -0
- package/src/cli.ts +416 -0
- package/src/commands.ts +878 -0
- package/src/context.ts +390 -0
- package/src/daemon.ts +288 -0
- package/src/frontmatter.ts +219 -0
- package/src/gepa/index.ts +287 -0
- package/src/gepa/optimized/capture-prompt.txt +65 -0
- package/src/index.ts +384 -0
- package/src/ingest.ts +177 -0
- package/src/link-discovery.ts +170 -0
- package/src/link-utils.ts +169 -0
- package/src/lint.ts +1018 -0
- package/src/maintainer.ts +404 -0
- package/src/processor.ts +415 -0
- package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
- package/src/python/minimax_lm.py +198 -0
- package/src/python/rlm_capture.py +215 -0
- package/src/query.ts +148 -0
- package/src/raw.ts +276 -0
- package/src/redact.ts +159 -0
- package/src/scope.ts +214 -0
- package/src/scripts/bulk-link-fix.ts +126 -0
- package/src/session-tools.ts +260 -0
- package/src/state.ts +271 -0
- package/src/store.ts +288 -0
- package/src/summarize.ts +273 -0
- package/src/tag-registry.ts +157 -0
- package/src/templates/index.md +17 -0
- package/src/templates/prompts.ts +274 -0
- package/src/templates/schema.md +116 -0
- package/src/tools.ts +1293 -0
- package/src/watcher.ts +101 -0
- package/src/webui/client/dist/index.html +1885 -0
- package/src/webui/server.ts +765 -0
- package/src/wiki.ts +550 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/gepa/targets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GEPA (Genetic-Evolutionary Prompt Adaptation) — shared types.
|
|
3
|
+
*
|
|
4
|
+
* All types used across the GEPA optimizer pipeline:
|
|
5
|
+
* config, targets, candidates, evaluation, Pareto frontier, and deployment.
|
|
6
|
+
*/
|
|
7
|
+
/** GEPA optimizer configuration (stored in config.json under "gepa" key). */
|
|
8
|
+
export interface GEPAConfig {
|
|
9
|
+
/** Model for reflection/mutation. Format: "provider/model-id".
|
|
10
|
+
* Resolution: this → daemonModel → AuthStorage auto-detect → qmd config. */
|
|
11
|
+
reflectionModel: string | null;
|
|
12
|
+
/** Maximum optimization iterations per target. */
|
|
13
|
+
maxIterations: number;
|
|
14
|
+
/** Maximum number of candidates retained on the Pareto frontier. */
|
|
15
|
+
paretoSize: number;
|
|
16
|
+
/** When true, optimized prompts are loaded at runtime instead of originals. */
|
|
17
|
+
useOptimized: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Default GEPA config values. */
|
|
20
|
+
export declare const DEFAULT_GEPA_CONFIG: GEPAConfig;
|
|
21
|
+
/** The kind of content being optimized. */
|
|
22
|
+
export type TargetType = "prompt" | "skill";
|
|
23
|
+
/** An optimization target — a prompt template or skill document to improve. */
|
|
24
|
+
export interface Target {
|
|
25
|
+
/** Unique identifier (e.g. "wiki-system-prompt", "para-skill"). */
|
|
26
|
+
name: string;
|
|
27
|
+
/** Whether this is a prompt template or a skill document. */
|
|
28
|
+
type: TargetType;
|
|
29
|
+
/** Retrieve the current (original) content of this target. */
|
|
30
|
+
getCurrentContent: () => Promise<string>;
|
|
31
|
+
/** Constraints the optimizer must respect (e.g. "must include PARA categories"). */
|
|
32
|
+
constraints: string[];
|
|
33
|
+
/** Optional description of what this target does (used in reflection). */
|
|
34
|
+
description?: string;
|
|
35
|
+
/** File path where the original content lives (for reference/logging). */
|
|
36
|
+
sourcePath?: string;
|
|
37
|
+
}
|
|
38
|
+
/** A unique identifier for a candidate in the optimization run. */
|
|
39
|
+
export type CandidateId = string;
|
|
40
|
+
/** A mutated version of a target's content, with evaluation scores. */
|
|
41
|
+
export interface Candidate {
|
|
42
|
+
/** Unique identifier for this candidate. */
|
|
43
|
+
id: CandidateId;
|
|
44
|
+
/** The mutated prompt/skill content. */
|
|
45
|
+
content: string;
|
|
46
|
+
/** Composite score (0-1), computed from dimension scores. */
|
|
47
|
+
score: number;
|
|
48
|
+
/** Per-dimension evaluation results. */
|
|
49
|
+
dimensions: EvalDimension[];
|
|
50
|
+
/** Which iteration produced this candidate. */
|
|
51
|
+
iteration: number;
|
|
52
|
+
/** ID of the parent candidate this was mutated from (null for the original). */
|
|
53
|
+
parentId: CandidateId | null;
|
|
54
|
+
/** The mutation description applied to produce this candidate. */
|
|
55
|
+
mutationDescription?: string;
|
|
56
|
+
}
|
|
57
|
+
/** A single scored dimension from the LLM judge. */
|
|
58
|
+
export interface EvalDimension {
|
|
59
|
+
/** Dimension name (e.g. "clarity", "actionability"). */
|
|
60
|
+
name: string;
|
|
61
|
+
/** Score from 0 (worst) to 1 (best). */
|
|
62
|
+
score: number;
|
|
63
|
+
/** Brief textual feedback from the judge for this dimension. */
|
|
64
|
+
feedback: string;
|
|
65
|
+
/** Weight of this dimension in the composite score (0-1, should sum to 1). */
|
|
66
|
+
weight: number;
|
|
67
|
+
}
|
|
68
|
+
/** Full evaluation result returned by the LLM judge. */
|
|
69
|
+
export interface EvalResult {
|
|
70
|
+
/** Composite score (0-1), weighted average of dimension scores. */
|
|
71
|
+
score: number;
|
|
72
|
+
/** Per-dimension scores and feedback. */
|
|
73
|
+
dimensions: EvalDimension[];
|
|
74
|
+
/** Overall textual feedback from the judge. */
|
|
75
|
+
overallFeedback: string;
|
|
76
|
+
}
|
|
77
|
+
/** Standard evaluation dimensions used across all targets. */
|
|
78
|
+
export declare const STANDARD_DIMENSIONS: ReadonlyArray<{
|
|
79
|
+
name: string;
|
|
80
|
+
weight: number;
|
|
81
|
+
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Pareto frontier — maintains the best non-dominated candidates.
|
|
84
|
+
*
|
|
85
|
+
* A candidate dominates another if it scores >= on ALL dimensions
|
|
86
|
+
* and strictly > on at least one. The frontier keeps only non-dominated
|
|
87
|
+
* candidates, capped at `maxSize`.
|
|
88
|
+
*/
|
|
89
|
+
export declare class ParetoFrontier {
|
|
90
|
+
private _candidates;
|
|
91
|
+
private readonly maxSize;
|
|
92
|
+
constructor(maxSize?: number);
|
|
93
|
+
/** Current candidates on the frontier. */
|
|
94
|
+
get candidates(): ReadonlyArray<Candidate>;
|
|
95
|
+
/** Number of candidates on the frontier. */
|
|
96
|
+
get size(): number;
|
|
97
|
+
/**
|
|
98
|
+
* Attempt to add a candidate to the frontier.
|
|
99
|
+
* Returns true if the candidate was added (i.e., it is non-dominated).
|
|
100
|
+
*/
|
|
101
|
+
add(candidate: Candidate): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Get the best candidate by composite score.
|
|
104
|
+
* Returns undefined if the frontier is empty.
|
|
105
|
+
*/
|
|
106
|
+
best(): Candidate | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Get the top N candidates by composite score.
|
|
109
|
+
*/
|
|
110
|
+
topN(n: number): Candidate[];
|
|
111
|
+
/** Serialize the frontier for persistence. */
|
|
112
|
+
toJSON(): CandidateJSON[];
|
|
113
|
+
/** Restore the frontier from persisted data. */
|
|
114
|
+
static fromJSON(data: CandidateJSON[], maxSize: number): ParetoFrontier;
|
|
115
|
+
}
|
|
116
|
+
/** JSON-serializable candidate shape (same as Candidate). */
|
|
117
|
+
type CandidateJSON = Omit<Candidate, never>;
|
|
118
|
+
/** A saved optimized prompt, ready for deployment. */
|
|
119
|
+
export interface OptimizedPrompt {
|
|
120
|
+
/** Target name this optimized prompt belongs to. */
|
|
121
|
+
targetName: string;
|
|
122
|
+
/** The optimized content. */
|
|
123
|
+
content: string;
|
|
124
|
+
/** Composite score achieved. */
|
|
125
|
+
score: number;
|
|
126
|
+
/** ISO timestamp when optimization completed. */
|
|
127
|
+
optimizedAt: string;
|
|
128
|
+
/** Number of iterations run. */
|
|
129
|
+
iterationsRun: number;
|
|
130
|
+
/** Model used for optimization (e.g. "anthropic/claude-opus-4-6"). */
|
|
131
|
+
modelUsed: string;
|
|
132
|
+
/** Original score before optimization (for comparison). */
|
|
133
|
+
originalScore?: number;
|
|
134
|
+
/** The dimensions breakdown. */
|
|
135
|
+
dimensions?: EvalDimension[];
|
|
136
|
+
}
|
|
137
|
+
/** Summary of a complete optimization run. */
|
|
138
|
+
export interface OptimizationRunSummary {
|
|
139
|
+
/** Target that was optimized. */
|
|
140
|
+
targetName: string;
|
|
141
|
+
/** Total iterations executed. */
|
|
142
|
+
iterations: number;
|
|
143
|
+
/** Original (baseline) score. */
|
|
144
|
+
originalScore: number;
|
|
145
|
+
/** Best score achieved. */
|
|
146
|
+
bestScore: number;
|
|
147
|
+
/** Score improvement (best - original). */
|
|
148
|
+
improvement: number;
|
|
149
|
+
/** Model used. */
|
|
150
|
+
model: string;
|
|
151
|
+
/** ISO timestamp when the run started. */
|
|
152
|
+
startedAt: string;
|
|
153
|
+
/** ISO timestamp when the run completed. */
|
|
154
|
+
completedAt: string;
|
|
155
|
+
/** Duration in seconds. */
|
|
156
|
+
durationSeconds: number;
|
|
157
|
+
/** Number of candidates that made it to the Pareto frontier. */
|
|
158
|
+
frontierSize: number;
|
|
159
|
+
}
|
|
160
|
+
/** Minimal LLM completion client interface used by the optimizer. */
|
|
161
|
+
export interface LLMClient {
|
|
162
|
+
/** Send a prompt to the LLM and get a text response. */
|
|
163
|
+
complete(prompt: string, system?: string): Promise<string>;
|
|
164
|
+
/** The model identifier being used (e.g. "anthropic/claude-opus-4-6"). */
|
|
165
|
+
modelId: string;
|
|
166
|
+
}
|
|
167
|
+
export {};
|
|
168
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gepa/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB;iFAC6E;IAC7E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IAEtB,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IAEnB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,kCAAkC;AAClC,eAAO,MAAM,mBAAmB,EAAE,UAKjC,CAAC;AAIF,2CAA2C;AAC3C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,+EAA+E;AAC/E,MAAM,WAAW,MAAM;IACrB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IAEb,6DAA6D;IAC7D,IAAI,EAAE,UAAU,CAAC;IAEjB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC,oFAAoF;IACpF,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,EAAE,EAAE,WAAW,CAAC;IAEhB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAEhB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IAEd,wCAAwC;IACxC,UAAU,EAAE,aAAa,EAAE,CAAC;IAE5B,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAElB,gFAAgF;IAChF,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAE7B,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAID,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IAEb,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IAEd,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IAEjB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,UAAU,EAAE,aAAa,EAAE,CAAC;IAE5B,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAMtE,CAAC;AAIX;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,MAAW;IAIhC,0CAA0C;IAC1C,IAAI,UAAU,IAAI,aAAa,CAAC,SAAS,CAAC,CAEzC;IAED,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAyBlC;;;OAGG;IACH,IAAI,IAAI,SAAS,GAAG,SAAS;IAK7B;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAM5B,8CAA8C;IAC9C,MAAM,IAAI,aAAa,EAAE;IAYzB,gDAAgD;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc;CAOxE;AAED,6DAA6D;AAC7D,KAAK,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAyB5C,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IAEnB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IAEd,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;IAEtB,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAElB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gCAAgC;IAChC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAID,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IAEtB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IAEpB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IAEd,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;IAExB,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3D,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GEPA (Genetic-Evolutionary Prompt Adaptation) — shared types.
|
|
3
|
+
*
|
|
4
|
+
* All types used across the GEPA optimizer pipeline:
|
|
5
|
+
* config, targets, candidates, evaluation, Pareto frontier, and deployment.
|
|
6
|
+
*/
|
|
7
|
+
/** Default GEPA config values. */
|
|
8
|
+
export const DEFAULT_GEPA_CONFIG = {
|
|
9
|
+
reflectionModel: null,
|
|
10
|
+
maxIterations: 50,
|
|
11
|
+
paretoSize: 10,
|
|
12
|
+
useOptimized: false,
|
|
13
|
+
};
|
|
14
|
+
/** Standard evaluation dimensions used across all targets. */
|
|
15
|
+
export const STANDARD_DIMENSIONS = [
|
|
16
|
+
{ name: "structure", weight: 0.15 },
|
|
17
|
+
{ name: "clarity", weight: 0.25 },
|
|
18
|
+
{ name: "actionability", weight: 0.25 },
|
|
19
|
+
{ name: "completeness", weight: 0.20 },
|
|
20
|
+
{ name: "error-prevention", weight: 0.15 },
|
|
21
|
+
];
|
|
22
|
+
// -- Pareto Frontier ---------------------------------------------------------
|
|
23
|
+
/**
|
|
24
|
+
* Pareto frontier — maintains the best non-dominated candidates.
|
|
25
|
+
*
|
|
26
|
+
* A candidate dominates another if it scores >= on ALL dimensions
|
|
27
|
+
* and strictly > on at least one. The frontier keeps only non-dominated
|
|
28
|
+
* candidates, capped at `maxSize`.
|
|
29
|
+
*/
|
|
30
|
+
export class ParetoFrontier {
|
|
31
|
+
_candidates = [];
|
|
32
|
+
maxSize;
|
|
33
|
+
constructor(maxSize = 10) {
|
|
34
|
+
this.maxSize = maxSize;
|
|
35
|
+
}
|
|
36
|
+
/** Current candidates on the frontier. */
|
|
37
|
+
get candidates() {
|
|
38
|
+
return this._candidates;
|
|
39
|
+
}
|
|
40
|
+
/** Number of candidates on the frontier. */
|
|
41
|
+
get size() {
|
|
42
|
+
return this._candidates.length;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Attempt to add a candidate to the frontier.
|
|
46
|
+
* Returns true if the candidate was added (i.e., it is non-dominated).
|
|
47
|
+
*/
|
|
48
|
+
add(candidate) {
|
|
49
|
+
// Check if the new candidate is dominated by any existing candidate
|
|
50
|
+
for (const existing of this._candidates) {
|
|
51
|
+
if (dominates(existing, candidate)) {
|
|
52
|
+
return false; // dominated — don't add
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Remove any existing candidates that are dominated by the new one
|
|
56
|
+
this._candidates = this._candidates.filter((existing) => !dominates(candidate, existing));
|
|
57
|
+
// Add the new candidate
|
|
58
|
+
this._candidates.push(candidate);
|
|
59
|
+
// If over capacity, remove the lowest-scoring candidate
|
|
60
|
+
if (this._candidates.length > this.maxSize) {
|
|
61
|
+
this._candidates.sort((a, b) => b.score - a.score);
|
|
62
|
+
this._candidates = this._candidates.slice(0, this.maxSize);
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the best candidate by composite score.
|
|
68
|
+
* Returns undefined if the frontier is empty.
|
|
69
|
+
*/
|
|
70
|
+
best() {
|
|
71
|
+
if (this._candidates.length === 0)
|
|
72
|
+
return undefined;
|
|
73
|
+
return this._candidates.reduce((best, c) => (c.score > best.score ? c : best));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get the top N candidates by composite score.
|
|
77
|
+
*/
|
|
78
|
+
topN(n) {
|
|
79
|
+
return [...this._candidates]
|
|
80
|
+
.sort((a, b) => b.score - a.score)
|
|
81
|
+
.slice(0, n);
|
|
82
|
+
}
|
|
83
|
+
/** Serialize the frontier for persistence. */
|
|
84
|
+
toJSON() {
|
|
85
|
+
return this._candidates.map((c) => ({
|
|
86
|
+
id: c.id,
|
|
87
|
+
content: c.content,
|
|
88
|
+
score: c.score,
|
|
89
|
+
dimensions: c.dimensions,
|
|
90
|
+
iteration: c.iteration,
|
|
91
|
+
parentId: c.parentId,
|
|
92
|
+
mutationDescription: c.mutationDescription,
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
/** Restore the frontier from persisted data. */
|
|
96
|
+
static fromJSON(data, maxSize) {
|
|
97
|
+
const frontier = new ParetoFrontier(maxSize);
|
|
98
|
+
for (const c of data) {
|
|
99
|
+
frontier._candidates.push(c);
|
|
100
|
+
}
|
|
101
|
+
return frontier;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if candidate `a` dominates candidate `b`.
|
|
106
|
+
* `a` dominates `b` if a.score >= b.score on ALL dimensions
|
|
107
|
+
* and strictly > on at least one.
|
|
108
|
+
*/
|
|
109
|
+
function dominates(a, b) {
|
|
110
|
+
if (a.dimensions.length !== b.dimensions.length)
|
|
111
|
+
return false;
|
|
112
|
+
let strictlyBetterOnAtLeastOne = false;
|
|
113
|
+
for (let i = 0; i < a.dimensions.length; i++) {
|
|
114
|
+
const aDim = a.dimensions.find((d) => d.name === b.dimensions[i].name);
|
|
115
|
+
if (!aDim)
|
|
116
|
+
return false; // different dimension sets — can't compare
|
|
117
|
+
if (aDim.score < b.dimensions[i].score)
|
|
118
|
+
return false; // a is worse on this dim
|
|
119
|
+
if (aDim.score > b.dimensions[i].score)
|
|
120
|
+
strictlyBetterOnAtLeastOne = true;
|
|
121
|
+
}
|
|
122
|
+
return strictlyBetterOnAtLeastOne;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gepa/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-para — PARA Knowledge Base Extension for pi
|
|
3
|
+
*
|
|
4
|
+
* Main extension entry point. Wires together wiki filesystem, qmd store,
|
|
5
|
+
* scope detection, context injection, tools, and commands.
|
|
6
|
+
*
|
|
7
|
+
* Session capture is handled by a separate daemon (pi-para-daemon).
|
|
8
|
+
* This extension registers completed sessions for the daemon to process.
|
|
9
|
+
*/
|
|
10
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
11
|
+
export type { ParaCategory, WikiPage, PageFrontmatter, PageRef, LogEntry } from "./wiki.js";
|
|
12
|
+
export type { WikiSearchOptions, WikiSearchResult } from "./store.js";
|
|
13
|
+
export type { ProjectScope, ScopeConfig } from "./scope.js";
|
|
14
|
+
export type { IngestOptions, IngestReport, IngestResult } from "./ingest.js";
|
|
15
|
+
export type { QueryOptions, QueryResult } from "./query.js";
|
|
16
|
+
export type { LintOptions, LintReport, LintIssue, WikiStats } from "./lint.js";
|
|
17
|
+
export type { ContextOptions } from "./context.js";
|
|
18
|
+
export type { RawSource, SessionDigest } from "./raw.js";
|
|
19
|
+
export type { SummarizeOptions } from "./summarize.js";
|
|
20
|
+
export default function piPara(pi: ExtensionAPI): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAcpF,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAqJvD,wBAA8B,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsMpE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-para — PARA Knowledge Base Extension for pi
|
|
3
|
+
*
|
|
4
|
+
* Main extension entry point. Wires together wiki filesystem, qmd store,
|
|
5
|
+
* scope detection, context injection, tools, and commands.
|
|
6
|
+
*
|
|
7
|
+
* Session capture is handled by a separate daemon (pi-para-daemon).
|
|
8
|
+
* This extension registers completed sessions for the daemon to process.
|
|
9
|
+
*/
|
|
10
|
+
import { readFile, writeFile, mkdir, appendFile } from "node:fs/promises";
|
|
11
|
+
import { join, dirname } from "node:path";
|
|
12
|
+
import { homedir, networkInterfaces } from "node:os";
|
|
13
|
+
import { detectScope } from "./scope.js";
|
|
14
|
+
import { initWiki } from "./wiki.js";
|
|
15
|
+
import { openStore, closeStore } from "./store.js";
|
|
16
|
+
import { registerTools } from "./tools.js";
|
|
17
|
+
import { setupContextInjection, markContextDirty } from "./context.js";
|
|
18
|
+
import { registerCommands } from "./commands.js";
|
|
19
|
+
import { createServer } from "node:http";
|
|
20
|
+
function getDefaultConfig() {
|
|
21
|
+
return {
|
|
22
|
+
wikiDir: join(homedir(), ".pi", "wiki"),
|
|
23
|
+
contextMaxTokens: 4000,
|
|
24
|
+
contextIncludeSchema: true,
|
|
25
|
+
contextIncludeIndex: true,
|
|
26
|
+
lintAutoFix: true,
|
|
27
|
+
lintStaleDays: 90,
|
|
28
|
+
searchLimit: 10,
|
|
29
|
+
searchIncludeArchives: false,
|
|
30
|
+
searchGraphBoost: true,
|
|
31
|
+
daemonModel: null,
|
|
32
|
+
webWiki: {
|
|
33
|
+
enabled: false,
|
|
34
|
+
host: "0.0.0.0",
|
|
35
|
+
port: 10973,
|
|
36
|
+
},
|
|
37
|
+
gepa: {
|
|
38
|
+
useOptimized: true,
|
|
39
|
+
studentModel: null,
|
|
40
|
+
teacherModel: null,
|
|
41
|
+
judgeModel: null,
|
|
42
|
+
auto: "light",
|
|
43
|
+
threads: 2,
|
|
44
|
+
seed: 42,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function loadConfig() {
|
|
49
|
+
const defaults = getDefaultConfig();
|
|
50
|
+
const configPath = join(defaults.wikiDir, "config.json");
|
|
51
|
+
try {
|
|
52
|
+
const raw = await readFile(configPath, "utf-8");
|
|
53
|
+
const parsed = JSON.parse(raw);
|
|
54
|
+
const wikiDir = parsed.wikiDir
|
|
55
|
+
? parsed.wikiDir.replace(/^~\//, `${homedir()}/`)
|
|
56
|
+
: defaults.wikiDir;
|
|
57
|
+
return { ...defaults, ...parsed, wikiDir };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
try {
|
|
61
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
62
|
+
await writeFile(configPath, JSON.stringify(defaults, null, 2), "utf-8");
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Non-fatal
|
|
66
|
+
}
|
|
67
|
+
return { ...defaults };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// -- LAN IP detection --------------------------------------------------------
|
|
71
|
+
/** Check if the daemon's web server is alive on the given port. */
|
|
72
|
+
function checkWebServerAlive(port) {
|
|
73
|
+
return new Promise((resolve) => {
|
|
74
|
+
const req = createServer().listen(port, "127.0.0.1");
|
|
75
|
+
req.on("error", (err) => {
|
|
76
|
+
req.close();
|
|
77
|
+
// EADDRINUSE means something is already listening — daemon is running
|
|
78
|
+
resolve(err.code === "EADDRINUSE");
|
|
79
|
+
});
|
|
80
|
+
req.on("listening", () => {
|
|
81
|
+
// Port is free — no daemon web server
|
|
82
|
+
req.close();
|
|
83
|
+
resolve(false);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function getLanIp() {
|
|
88
|
+
const interfaces = networkInterfaces();
|
|
89
|
+
for (const name of Object.keys(interfaces)) {
|
|
90
|
+
const addrs = interfaces[name];
|
|
91
|
+
if (!addrs)
|
|
92
|
+
continue;
|
|
93
|
+
for (const addr of addrs) {
|
|
94
|
+
if (addr.family === "IPv4" && !addr.internal) {
|
|
95
|
+
return addr.address;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
const ENTRY_TYPE = "pi-para-state";
|
|
102
|
+
function reconstructState(ctx) {
|
|
103
|
+
let latest = null;
|
|
104
|
+
for (const entry of ctx.sessionManager.getBranch()) {
|
|
105
|
+
if (entry.type === "custom" && entry.customType === ENTRY_TYPE) {
|
|
106
|
+
latest = entry.data;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return latest;
|
|
110
|
+
}
|
|
111
|
+
// -- Extension entry point ---------------------------------------------------
|
|
112
|
+
export default async function piPara(pi) {
|
|
113
|
+
const config = await loadConfig();
|
|
114
|
+
const wikiDir = config.wikiDir;
|
|
115
|
+
let store = null;
|
|
116
|
+
let currentScope = null;
|
|
117
|
+
let storeDisabled = false;
|
|
118
|
+
const getScope = () => {
|
|
119
|
+
if (!currentScope) {
|
|
120
|
+
return { name: "unknown", include: ["unknown"], exclude: [], source: "dirname" };
|
|
121
|
+
}
|
|
122
|
+
return currentScope;
|
|
123
|
+
};
|
|
124
|
+
const setScope = (scope) => {
|
|
125
|
+
currentScope = scope;
|
|
126
|
+
markContextDirty();
|
|
127
|
+
pi.appendEntry(ENTRY_TYPE, {
|
|
128
|
+
lastScope: scope,
|
|
129
|
+
sessionFile: null,
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
const getConfig = () => ({
|
|
133
|
+
contextMaxTokens: config.contextMaxTokens,
|
|
134
|
+
contextIncludeSchema: config.contextIncludeSchema,
|
|
135
|
+
contextIncludeIndex: config.contextIncludeIndex,
|
|
136
|
+
});
|
|
137
|
+
// Lazy retry: if the store failed at startup, try reopening on first tool use.
|
|
138
|
+
// This handles cases where the db was temporarily locked or had transient errors.
|
|
139
|
+
let storeRetrying = false;
|
|
140
|
+
async function retryStoreOpen() {
|
|
141
|
+
if (storeRetrying)
|
|
142
|
+
return false;
|
|
143
|
+
storeRetrying = true;
|
|
144
|
+
try {
|
|
145
|
+
store = await openStore(wikiDir);
|
|
146
|
+
storeDisabled = false;
|
|
147
|
+
markContextDirty(); // rebuild context now that store works
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
storeRetrying = false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Store proxy — delegates to real store once opened, with lazy retry on failure
|
|
158
|
+
const storeProxy = new Proxy({}, {
|
|
159
|
+
get(_target, prop) {
|
|
160
|
+
if (!store) {
|
|
161
|
+
if (storeDisabled) {
|
|
162
|
+
// Return an async function that retries opening the store first
|
|
163
|
+
return async (...args) => {
|
|
164
|
+
const reopened = await retryStoreOpen();
|
|
165
|
+
if (reopened && store) {
|
|
166
|
+
const method = store[prop];
|
|
167
|
+
if (typeof method === "function") {
|
|
168
|
+
return method.apply(store, args);
|
|
169
|
+
}
|
|
170
|
+
return method;
|
|
171
|
+
}
|
|
172
|
+
throw new Error("Wiki search is disabled: qmd store failed to open.");
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return (..._args) => {
|
|
176
|
+
throw new Error("Wiki store not initialized yet.");
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return store[prop];
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
// Register tools, context injection, commands
|
|
183
|
+
registerTools(pi, wikiDir, storeProxy, getScope, markContextDirty, () => config.searchGraphBoost);
|
|
184
|
+
setupContextInjection(pi, wikiDir, storeProxy, () => currentScope, getConfig);
|
|
185
|
+
registerCommands(pi, wikiDir, storeProxy, getScope, setScope);
|
|
186
|
+
// -- session_start ---------------------------------------------------------
|
|
187
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
188
|
+
ctx.ui.setStatus("pi-para", "wiki: loading...");
|
|
189
|
+
try {
|
|
190
|
+
await initWiki(wikiDir);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
ctx.ui.notify(`Wiki init failed: ${err instanceof Error ? err.message : String(err)}`, "error");
|
|
194
|
+
}
|
|
195
|
+
ctx.ui.setStatus("pi-para", "wiki: indexing...");
|
|
196
|
+
storeDisabled = false;
|
|
197
|
+
try {
|
|
198
|
+
store = await openStore(wikiDir);
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
store = null;
|
|
202
|
+
storeDisabled = true;
|
|
203
|
+
ctx.ui.notify(`Wiki search disabled: ${err instanceof Error ? err.message : String(err)}`, "warning");
|
|
204
|
+
}
|
|
205
|
+
currentScope = await detectScope(ctx.cwd);
|
|
206
|
+
const savedState = reconstructState(ctx);
|
|
207
|
+
if (savedState?.lastScope.source === "config") {
|
|
208
|
+
currentScope = savedState.lastScope;
|
|
209
|
+
}
|
|
210
|
+
pi.appendEntry(ENTRY_TYPE, {
|
|
211
|
+
lastScope: currentScope,
|
|
212
|
+
sessionFile: ctx.sessionManager.getSessionFile() ?? null,
|
|
213
|
+
});
|
|
214
|
+
// Check if daemon's web wiki server is running (don't start our own)
|
|
215
|
+
if (config.webWiki.enabled) {
|
|
216
|
+
const port = config.webWiki.port;
|
|
217
|
+
try {
|
|
218
|
+
const alive = await checkWebServerAlive(port);
|
|
219
|
+
if (alive) {
|
|
220
|
+
const lanIp = getLanIp();
|
|
221
|
+
const url = lanIp ? `http://${lanIp}:${port}` : `http://localhost:${port}`;
|
|
222
|
+
ctx.ui.setStatus("pi-para", `wiki: ${url}`);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
ctx.ui.setStatus("pi-para", "wiki: ready (start daemon for web UI)");
|
|
226
|
+
setTimeout(() => ctx.ui.setStatus("pi-para", undefined), 5000);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
ctx.ui.setStatus("pi-para", "wiki: ready");
|
|
231
|
+
setTimeout(() => ctx.ui.setStatus("pi-para", undefined), 3000);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
ctx.ui.setStatus("pi-para", "wiki: ready");
|
|
236
|
+
setTimeout(() => ctx.ui.setStatus("pi-para", undefined), 3000);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// -- session_tree ----------------------------------------------------------
|
|
240
|
+
pi.on("session_tree", async (_event, ctx) => {
|
|
241
|
+
const savedState = reconstructState(ctx);
|
|
242
|
+
if (savedState?.lastScope.source === "config") {
|
|
243
|
+
currentScope = savedState.lastScope;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
currentScope = await detectScope(ctx.cwd);
|
|
247
|
+
}
|
|
248
|
+
markContextDirty();
|
|
249
|
+
});
|
|
250
|
+
// -- session_compact: register session for daemon capture on compaction ----
|
|
251
|
+
pi.on("session_compact", async (_event, ctx) => {
|
|
252
|
+
// Compaction means the session has accumulated enough content that details
|
|
253
|
+
// are about to be compressed/lost. Perfect time to capture knowledge.
|
|
254
|
+
const sessionFile = ctx.sessionManager.getSessionFile();
|
|
255
|
+
if (sessionFile) {
|
|
256
|
+
try {
|
|
257
|
+
const registry = join(wikiDir, ".completed-sessions");
|
|
258
|
+
const entry = `${new Date().toISOString()}|${sessionFile}\n`;
|
|
259
|
+
await appendFile(registry, entry);
|
|
260
|
+
ctx.ui.setStatus("pi-para", "wiki: capture queued (compaction)");
|
|
261
|
+
setTimeout(() => ctx.ui.setStatus("pi-para", undefined), 5000);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// Non-fatal
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
// -- session_shutdown: register session for daemon, close store ------------
|
|
269
|
+
pi.on("session_shutdown", async (_event, ctx) => {
|
|
270
|
+
// 1. Register session as completed (for daemon to process later)
|
|
271
|
+
const sessionFile = ctx.sessionManager.getSessionFile();
|
|
272
|
+
if (sessionFile) {
|
|
273
|
+
try {
|
|
274
|
+
const registry = join(wikiDir, ".completed-sessions");
|
|
275
|
+
const entry = `${new Date().toISOString()}|${sessionFile}\n`;
|
|
276
|
+
await appendFile(registry, entry);
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// Non-fatal — daemon can also discover sessions via filesystem scan
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// 2. Close the store (instant)
|
|
283
|
+
if (store) {
|
|
284
|
+
try {
|
|
285
|
+
await closeStore(store);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
// Non-fatal
|
|
289
|
+
}
|
|
290
|
+
store = null;
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|