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.
Files changed (198) hide show
  1. package/CHANGELOG.md +214 -0
  2. package/README.md +305 -0
  3. package/SETUP.md +171 -0
  4. package/dist/capture.d.ts +34 -0
  5. package/dist/capture.d.ts.map +1 -0
  6. package/dist/capture.js +461 -0
  7. package/dist/capture.js.map +1 -0
  8. package/dist/cli.d.ts +15 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +405 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands.d.ts +15 -0
  13. package/dist/commands.d.ts.map +1 -0
  14. package/dist/commands.js +786 -0
  15. package/dist/commands.js.map +1 -0
  16. package/dist/context.d.ts +61 -0
  17. package/dist/context.d.ts.map +1 -0
  18. package/dist/context.js +289 -0
  19. package/dist/context.js.map +1 -0
  20. package/dist/daemon.d.ts +49 -0
  21. package/dist/daemon.d.ts.map +1 -0
  22. package/dist/daemon.js +226 -0
  23. package/dist/daemon.js.map +1 -0
  24. package/dist/frontmatter.d.ts +59 -0
  25. package/dist/frontmatter.d.ts.map +1 -0
  26. package/dist/frontmatter.js +170 -0
  27. package/dist/frontmatter.js.map +1 -0
  28. package/dist/gepa/dataset.d.ts +36 -0
  29. package/dist/gepa/dataset.d.ts.map +1 -0
  30. package/dist/gepa/dataset.js +148 -0
  31. package/dist/gepa/dataset.js.map +1 -0
  32. package/dist/gepa/evaluator.d.ts +51 -0
  33. package/dist/gepa/evaluator.d.ts.map +1 -0
  34. package/dist/gepa/evaluator.js +317 -0
  35. package/dist/gepa/evaluator.js.map +1 -0
  36. package/dist/gepa/index.d.ts +66 -0
  37. package/dist/gepa/index.d.ts.map +1 -0
  38. package/dist/gepa/index.js +240 -0
  39. package/dist/gepa/index.js.map +1 -0
  40. package/dist/gepa/llm.d.ts +35 -0
  41. package/dist/gepa/llm.d.ts.map +1 -0
  42. package/dist/gepa/llm.js +268 -0
  43. package/dist/gepa/llm.js.map +1 -0
  44. package/dist/gepa/optimized/capture-prompt.txt +65 -0
  45. package/dist/gepa/optimizer.d.ts +29 -0
  46. package/dist/gepa/optimizer.d.ts.map +1 -0
  47. package/dist/gepa/optimizer.js +249 -0
  48. package/dist/gepa/optimizer.js.map +1 -0
  49. package/dist/gepa/targets.d.ts +39 -0
  50. package/dist/gepa/targets.d.ts.map +1 -0
  51. package/dist/gepa/targets.js +326 -0
  52. package/dist/gepa/targets.js.map +1 -0
  53. package/dist/gepa/types.d.ts +168 -0
  54. package/dist/gepa/types.d.ts.map +1 -0
  55. package/dist/gepa/types.js +124 -0
  56. package/dist/gepa/types.js.map +1 -0
  57. package/dist/index.d.ts +21 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +294 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/ingest.d.ts +88 -0
  62. package/dist/ingest.d.ts.map +1 -0
  63. package/dist/ingest.js +105 -0
  64. package/dist/ingest.js.map +1 -0
  65. package/dist/link-discovery.d.ts +40 -0
  66. package/dist/link-discovery.d.ts.map +1 -0
  67. package/dist/link-discovery.js +122 -0
  68. package/dist/link-discovery.js.map +1 -0
  69. package/dist/link-utils.d.ts +30 -0
  70. package/dist/link-utils.d.ts.map +1 -0
  71. package/dist/link-utils.js +145 -0
  72. package/dist/link-utils.js.map +1 -0
  73. package/dist/lint.d.ts +39 -0
  74. package/dist/lint.d.ts.map +1 -0
  75. package/dist/lint.js +827 -0
  76. package/dist/lint.js.map +1 -0
  77. package/dist/maintainer.d.ts +24 -0
  78. package/dist/maintainer.d.ts.map +1 -0
  79. package/dist/maintainer.js +358 -0
  80. package/dist/maintainer.js.map +1 -0
  81. package/dist/processor.d.ts +14 -0
  82. package/dist/processor.d.ts.map +1 -0
  83. package/dist/processor.js +361 -0
  84. package/dist/processor.js.map +1 -0
  85. package/dist/query.d.ts +69 -0
  86. package/dist/query.d.ts.map +1 -0
  87. package/dist/query.js +107 -0
  88. package/dist/query.js.map +1 -0
  89. package/dist/raw.d.ts +57 -0
  90. package/dist/raw.d.ts.map +1 -0
  91. package/dist/raw.js +219 -0
  92. package/dist/raw.js.map +1 -0
  93. package/dist/redact.d.ts +21 -0
  94. package/dist/redact.d.ts.map +1 -0
  95. package/dist/redact.js +143 -0
  96. package/dist/redact.js.map +1 -0
  97. package/dist/scope.d.ts +54 -0
  98. package/dist/scope.d.ts.map +1 -0
  99. package/dist/scope.js +161 -0
  100. package/dist/scope.js.map +1 -0
  101. package/dist/scripts/bulk-link-fix.d.ts +9 -0
  102. package/dist/scripts/bulk-link-fix.d.ts.map +1 -0
  103. package/dist/scripts/bulk-link-fix.js +106 -0
  104. package/dist/scripts/bulk-link-fix.js.map +1 -0
  105. package/dist/session-tools.d.ts +33 -0
  106. package/dist/session-tools.d.ts.map +1 -0
  107. package/dist/session-tools.js +211 -0
  108. package/dist/session-tools.js.map +1 -0
  109. package/dist/state.d.ts +54 -0
  110. package/dist/state.d.ts.map +1 -0
  111. package/dist/state.js +176 -0
  112. package/dist/state.js.map +1 -0
  113. package/dist/store.d.ts +56 -0
  114. package/dist/store.d.ts.map +1 -0
  115. package/dist/store.js +227 -0
  116. package/dist/store.js.map +1 -0
  117. package/dist/summarize.d.ts +56 -0
  118. package/dist/summarize.d.ts.map +1 -0
  119. package/dist/summarize.js +231 -0
  120. package/dist/summarize.js.map +1 -0
  121. package/dist/tag-registry.d.ts +56 -0
  122. package/dist/tag-registry.d.ts.map +1 -0
  123. package/dist/tag-registry.js +146 -0
  124. package/dist/tag-registry.js.map +1 -0
  125. package/dist/templates/prompts.d.ts +63 -0
  126. package/dist/templates/prompts.d.ts.map +1 -0
  127. package/dist/templates/prompts.js +260 -0
  128. package/dist/templates/prompts.js.map +1 -0
  129. package/dist/tools.d.ts +26 -0
  130. package/dist/tools.d.ts.map +1 -0
  131. package/dist/tools.js +1033 -0
  132. package/dist/tools.js.map +1 -0
  133. package/dist/watcher.d.ts +25 -0
  134. package/dist/watcher.d.ts.map +1 -0
  135. package/dist/watcher.js +84 -0
  136. package/dist/watcher.js.map +1 -0
  137. package/dist/webui/client/dist/index.html +1885 -0
  138. package/dist/webui/server.d.ts +31 -0
  139. package/dist/webui/server.d.ts.map +1 -0
  140. package/dist/webui/server.js +566 -0
  141. package/dist/webui/server.js.map +1 -0
  142. package/dist/wiki.d.ts +103 -0
  143. package/dist/wiki.d.ts.map +1 -0
  144. package/dist/wiki.js +428 -0
  145. package/dist/wiki.js.map +1 -0
  146. package/package.json +142 -0
  147. package/scripts/gepa/__pycache__/dataset.cpython-313.pyc +0 -0
  148. package/scripts/gepa/__pycache__/lm_providers.cpython-313.pyc +0 -0
  149. package/scripts/gepa/__pycache__/metric.cpython-313.pyc +0 -0
  150. package/scripts/gepa/__pycache__/program.cpython-313.pyc +0 -0
  151. package/scripts/gepa/__pycache__/wiki_reader.cpython-313.pyc +0 -0
  152. package/scripts/gepa/dataset.py +192 -0
  153. package/scripts/gepa/lm_providers.py +472 -0
  154. package/scripts/gepa/metric.py +279 -0
  155. package/scripts/gepa/optimize.py +367 -0
  156. package/scripts/gepa/program.py +99 -0
  157. package/scripts/gepa/pyproject.toml +19 -0
  158. package/scripts/gepa/run-all.sh +53 -0
  159. package/scripts/gepa/uv.lock +2241 -0
  160. package/scripts/gepa/wiki_reader.py +113 -0
  161. package/skills/para/SKILL.md +77 -0
  162. package/skills/setup/SKILL.md +20 -0
  163. package/src/capture.ts +563 -0
  164. package/src/cli.ts +416 -0
  165. package/src/commands.ts +878 -0
  166. package/src/context.ts +390 -0
  167. package/src/daemon.ts +288 -0
  168. package/src/frontmatter.ts +219 -0
  169. package/src/gepa/index.ts +287 -0
  170. package/src/gepa/optimized/capture-prompt.txt +65 -0
  171. package/src/index.ts +384 -0
  172. package/src/ingest.ts +177 -0
  173. package/src/link-discovery.ts +170 -0
  174. package/src/link-utils.ts +169 -0
  175. package/src/lint.ts +1018 -0
  176. package/src/maintainer.ts +404 -0
  177. package/src/processor.ts +415 -0
  178. package/src/python/__pycache__/minimax_lm.cpython-312.pyc +0 -0
  179. package/src/python/minimax_lm.py +198 -0
  180. package/src/python/rlm_capture.py +215 -0
  181. package/src/query.ts +148 -0
  182. package/src/raw.ts +276 -0
  183. package/src/redact.ts +159 -0
  184. package/src/scope.ts +214 -0
  185. package/src/scripts/bulk-link-fix.ts +126 -0
  186. package/src/session-tools.ts +260 -0
  187. package/src/state.ts +271 -0
  188. package/src/store.ts +288 -0
  189. package/src/summarize.ts +273 -0
  190. package/src/tag-registry.ts +157 -0
  191. package/src/templates/index.md +17 -0
  192. package/src/templates/prompts.ts +274 -0
  193. package/src/templates/schema.md +116 -0
  194. package/src/tools.ts +1293 -0
  195. package/src/watcher.ts +101 -0
  196. package/src/webui/client/dist/index.html +1885 -0
  197. package/src/webui/server.ts +765 -0
  198. package/src/wiki.ts +550 -0
@@ -0,0 +1,99 @@
1
+ """DSPy Module proxy for prompt optimization.
2
+
3
+ Each optimization target is wrapped in a lightweight proxy module.
4
+ The Signature's docstring (instruction) IS the prompt being optimized.
5
+ GEPA evolves the instruction to maximize the metric.
6
+
7
+ One LLM call per eval (not 10-50 like the full agent loop).
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import dspy
13
+
14
+
15
+ class WikiTaskOutput(dspy.Signature):
16
+ """You are a wiki knowledge management agent for a PARA-structured knowledge base."""
17
+
18
+ task_context: str = dspy.InputField(
19
+ desc="Context describing the wiki task to perform"
20
+ )
21
+ output: str = dspy.OutputField(
22
+ desc="Structured wiki output following PARA conventions: "
23
+ "Topic, Key Facts, Insights, Connections with [[wikilinks]], Sources"
24
+ )
25
+
26
+
27
+ class PromptProxy(dspy.Module):
28
+ """Lightweight proxy for prompt/instruction optimization.
29
+
30
+ The Signature's instruction text is what GEPA evolves.
31
+ forward() runs a single dspy.Predict call (1 LLM call).
32
+
33
+ Usage:
34
+ proxy = PromptProxy.from_instruction(current_prompt_text)
35
+ # GEPA optimizes proxy → evolved instruction = optimized prompt
36
+ """
37
+
38
+ def __init__(self, instruction: str | None = None):
39
+ super().__init__()
40
+
41
+ if instruction:
42
+ # Create a signature class with the instruction as docstring
43
+ class CustomSig(WikiTaskOutput):
44
+ pass
45
+ CustomSig.__doc__ = instruction
46
+ self.predict = dspy.Predict(CustomSig)
47
+ else:
48
+ self.predict = dspy.Predict(WikiTaskOutput)
49
+
50
+ def forward(self, task_context: str) -> dspy.Prediction:
51
+ return self.predict(task_context=task_context)
52
+
53
+ @classmethod
54
+ def from_instruction(cls, instruction: str) -> "PromptProxy":
55
+ """Create a proxy from a prompt/instruction string."""
56
+ return cls(instruction=instruction)
57
+
58
+ def get_instruction(self) -> str | None:
59
+ """Get the current instruction text."""
60
+ sig = getattr(self.predict, "signature", None)
61
+ if sig:
62
+ inst = getattr(sig, "instructions", None)
63
+ if inst and not inst.startswith("str(object"):
64
+ return inst
65
+ doc = getattr(sig, "__doc__", None)
66
+ if doc and not doc.startswith("str(object"):
67
+ return doc
68
+ return None
69
+
70
+
71
+ def extract_evolved_instruction(optimized_proxy: PromptProxy) -> str | None:
72
+ """Extract the GEPA-evolved instruction from an optimized proxy.
73
+
74
+ After GEPA optimization, the proxy's Predict signature contains
75
+ the evolved instruction text. This extracts it.
76
+ """
77
+ # Check predict.signature first
78
+ if hasattr(optimized_proxy, "predict"):
79
+ pred = optimized_proxy.predict
80
+ for attr_name in ("extended_signature", "signature"):
81
+ sig = getattr(pred, attr_name, None)
82
+ if sig:
83
+ for field in ("instructions", "__doc__"):
84
+ text = getattr(sig, field, None)
85
+ if text and len(text) > 50 and not text.startswith("str(object"):
86
+ return text
87
+
88
+ # Fallback to named_predictors
89
+ try:
90
+ for name, predictor in optimized_proxy.named_predictors():
91
+ sig = getattr(predictor, "signature", None)
92
+ if sig:
93
+ inst = getattr(sig, "instructions", None) or getattr(sig, "__doc__", None)
94
+ if inst and len(inst) > 50 and not inst.startswith("str(object"):
95
+ return inst
96
+ except Exception:
97
+ pass
98
+
99
+ return None
@@ -0,0 +1,19 @@
1
+ [project]
2
+ name = "pi-para-gepa"
3
+ version = "0.1.0"
4
+ description = "GEPA optimizer for pi-para prompts, tools, and skills"
5
+ requires-python = ">=3.11"
6
+ dependencies = [
7
+ "dspy>=2.6.0",
8
+ "anthropic>=0.52.0",
9
+ "openai>=1.30.0",
10
+ "pyyaml>=6.0.0",
11
+ ]
12
+
13
+ [tool.hatch.build.targets.wheel]
14
+ packages = ["lm_providers", "wiki_reader", "dataset", "program", "metric", "optimize"]
15
+ include = ["*.py"]
16
+
17
+ [build-system]
18
+ requires = ["hatchling"]
19
+ build-backend = "hatchling.build"
@@ -0,0 +1,53 @@
1
+ #!/bin/bash
2
+ # Run GEPA optimization one target at a time.
3
+ # Default: Sonnet for task/judge (fast, cheap), Opus for reflection (smart mutations).
4
+ # Each target invocation re-reads auth.json for fresh token.
5
+ set -e
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+ PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
9
+ MODEL="${1:-anthropic/claude-sonnet-4-20250514}"
10
+ REFLECTION_MODEL="${2:-anthropic/claude-opus-4-6}"
11
+ AUTO="${3:-light}"
12
+
13
+ echo "[gepa-all] Model: $MODEL | Reflection: $REFLECTION_MODEL | Budget: $AUTO"
14
+ echo "[gepa-all] Started at $(date)"
15
+
16
+ # Get target list
17
+ TARGETS=$(cd "$PROJECT_DIR" && node dist/cli.js gepa targets 2>/dev/null | awk '{print $1}')
18
+
19
+ TOTAL=$(echo "$TARGETS" | wc -l)
20
+ CURRENT=0
21
+ SUCCEEDED=0
22
+ FAILED=0
23
+
24
+ for TARGET in $TARGETS; do
25
+ CURRENT=$((CURRENT + 1))
26
+ echo ""
27
+ echo "================================================================"
28
+ echo "[gepa-all] [$CURRENT/$TOTAL] Optimizing: $TARGET"
29
+ echo "[gepa-all] $(date)"
30
+ echo "================================================================"
31
+
32
+ cd "$PROJECT_DIR"
33
+ if node dist/cli.js gepa optimize \
34
+ --target "$TARGET" \
35
+ --model "$MODEL" \
36
+ --reflection-model "$REFLECTION_MODEL" \
37
+ --auto "$AUTO" 2>&1; then
38
+ SUCCEEDED=$((SUCCEEDED + 1))
39
+ echo "[gepa-all] ✅ $TARGET done"
40
+ else
41
+ FAILED=$((FAILED + 1))
42
+ echo "[gepa-all] ❌ $TARGET failed"
43
+ fi
44
+
45
+ # Brief pause between targets to avoid rate limits
46
+ sleep 5
47
+ done
48
+
49
+ echo ""
50
+ echo "================================================================"
51
+ echo "[gepa-all] ALL DONE at $(date)"
52
+ echo "[gepa-all] Succeeded: $SUCCEEDED / $TOTAL, Failed: $FAILED"
53
+ echo "================================================================"