orizu 0.5.19 → 0.5.21

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 (378) hide show
  1. package/README.md +23 -0
  2. package/dist/archive-artifacts-cli.d.ts +50 -0
  3. package/dist/archive-artifacts-cli.d.ts.map +1 -0
  4. package/dist/artifact-archive.d.ts +48 -0
  5. package/dist/artifact-archive.d.ts.map +1 -0
  6. package/dist/artifact-pull.d.ts +22 -0
  7. package/dist/artifact-pull.d.ts.map +1 -0
  8. package/dist/banner.d.ts +3 -0
  9. package/dist/banner.d.ts.map +1 -0
  10. package/dist/connectors-cli.d.ts +31 -0
  11. package/dist/connectors-cli.d.ts.map +1 -0
  12. package/dist/credentials.d.ts +46 -0
  13. package/dist/credentials.d.ts.map +1 -0
  14. package/dist/csv.d.ts +49 -0
  15. package/dist/csv.d.ts.map +1 -0
  16. package/dist/dataset-download.d.ts +6 -0
  17. package/dist/dataset-download.d.ts.map +1 -0
  18. package/dist/dataset-edit-rows.d.ts +10 -0
  19. package/dist/dataset-edit-rows.d.ts.map +1 -0
  20. package/dist/dataset-upload-snapshot.d.ts +13 -0
  21. package/dist/dataset-upload-snapshot.d.ts.map +1 -0
  22. package/dist/daytona-slice-rehearsal.d.ts +89 -0
  23. package/dist/daytona-slice-rehearsal.d.ts.map +1 -0
  24. package/dist/daytona-slice.d.ts +106 -0
  25. package/dist/daytona-slice.d.ts.map +1 -0
  26. package/dist/deploy-key-merge-core.d.ts +121 -0
  27. package/dist/deploy-key-merge-core.d.ts.map +1 -0
  28. package/dist/diff-comments-cli.d.ts +12 -0
  29. package/dist/diff-comments-cli.d.ts.map +1 -0
  30. package/dist/diff-comments-cli.js +21 -2
  31. package/dist/egress-allowlist-cli.d.ts +23 -0
  32. package/dist/egress-allowlist-cli.d.ts.map +1 -0
  33. package/dist/egress-policy.d.ts +108 -0
  34. package/dist/egress-policy.d.ts.map +1 -0
  35. package/dist/error-response.d.ts +9 -0
  36. package/dist/error-response.d.ts.map +1 -0
  37. package/dist/file-parser.d.ts +5 -0
  38. package/dist/file-parser.d.ts.map +1 -0
  39. package/dist/gepa-engine-dispatch.d.ts +9 -0
  40. package/dist/gepa-engine-dispatch.d.ts.map +1 -0
  41. package/dist/gepa-engine-dispatch.js +307 -0
  42. package/dist/gepa-python-command.d.ts +6 -0
  43. package/dist/gepa-python-command.d.ts.map +1 -0
  44. package/dist/gepa-python-command.js +26 -0
  45. package/dist/gepa-python-paths.d.ts +6 -0
  46. package/dist/gepa-python-paths.d.ts.map +1 -0
  47. package/dist/gepa-python-paths.js +42 -0
  48. package/dist/git-credential.d.ts +69 -0
  49. package/dist/git-credential.d.ts.map +1 -0
  50. package/dist/git-recovery-environment.d.ts +31 -0
  51. package/dist/git-recovery-environment.d.ts.map +1 -0
  52. package/dist/github-setup.d.ts +122 -0
  53. package/dist/github-setup.d.ts.map +1 -0
  54. package/dist/global-flags.d.ts +12 -0
  55. package/dist/global-flags.d.ts.map +1 -0
  56. package/dist/help.d.ts +46 -0
  57. package/dist/help.d.ts.map +1 -0
  58. package/dist/help.js +93 -25
  59. package/dist/hosted-boot.d.ts +273 -0
  60. package/dist/hosted-boot.d.ts.map +1 -0
  61. package/dist/hosted-bootstrap-rehearsal.d.ts +86 -0
  62. package/dist/hosted-bootstrap-rehearsal.d.ts.map +1 -0
  63. package/dist/hosted-bootstrap.d.ts +188 -0
  64. package/dist/hosted-bootstrap.d.ts.map +1 -0
  65. package/dist/hosted-broker-server.d.ts +50 -0
  66. package/dist/hosted-broker-server.d.ts.map +1 -0
  67. package/dist/hosted-git-http-server.d.ts +36 -0
  68. package/dist/hosted-git-http-server.d.ts.map +1 -0
  69. package/dist/hosted-harness-claude.d.ts +195 -0
  70. package/dist/hosted-harness-claude.d.ts.map +1 -0
  71. package/dist/hosted-harness-opencode.d.ts +227 -0
  72. package/dist/hosted-harness-opencode.d.ts.map +1 -0
  73. package/dist/hosted-harness.d.ts +118 -0
  74. package/dist/hosted-harness.d.ts.map +1 -0
  75. package/dist/hosted-harvest.d.ts +68 -0
  76. package/dist/hosted-harvest.d.ts.map +1 -0
  77. package/dist/hosted-headless.d.ts +72 -0
  78. package/dist/hosted-headless.d.ts.map +1 -0
  79. package/dist/hosted-loop-lifecycle.d.ts +206 -0
  80. package/dist/hosted-loop-lifecycle.d.ts.map +1 -0
  81. package/dist/hosted-loop.d.ts +170 -0
  82. package/dist/hosted-loop.d.ts.map +1 -0
  83. package/dist/hosted-run-event-sink.d.ts +222 -0
  84. package/dist/hosted-run-event-sink.d.ts.map +1 -0
  85. package/dist/hosted-runtime-assets.d.ts +186 -0
  86. package/dist/hosted-runtime-assets.d.ts.map +1 -0
  87. package/dist/hosted-session-cli.d.ts +258 -0
  88. package/dist/hosted-session-cli.d.ts.map +1 -0
  89. package/dist/hosted-skill-staging.d.ts +73 -0
  90. package/dist/hosted-skill-staging.d.ts.map +1 -0
  91. package/dist/http.d.ts +8 -0
  92. package/dist/http.d.ts.map +1 -0
  93. package/dist/index.d.ts +22 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +119 -129
  96. package/dist/instruction-set-gepa-launch.d.ts +3 -0
  97. package/dist/instruction-set-gepa-launch.d.ts.map +1 -0
  98. package/dist/instruction-set-gepa-launch.js +15 -0
  99. package/dist/instruction-set-loader.d.ts +6 -0
  100. package/dist/instruction-set-loader.d.ts.map +1 -0
  101. package/dist/instruction-set-loader.js +59 -0
  102. package/dist/instruction-set-manifest.d.ts +14 -0
  103. package/dist/instruction-set-manifest.d.ts.map +1 -0
  104. package/dist/instruction-set-manifest.js +162 -0
  105. package/dist/instruction-sets-cli.d.ts +40 -0
  106. package/dist/instruction-sets-cli.d.ts.map +1 -0
  107. package/dist/instruction-sets-cli.js +361 -0
  108. package/dist/json-response.d.ts +4 -0
  109. package/dist/json-response.d.ts.map +1 -0
  110. package/dist/jsonl-stream.d.ts +8 -0
  111. package/dist/jsonl-stream.d.ts.map +1 -0
  112. package/dist/kill-switch-cli.d.ts +30 -0
  113. package/dist/kill-switch-cli.d.ts.map +1 -0
  114. package/dist/loopback-serve.d.ts +25 -0
  115. package/dist/loopback-serve.d.ts.map +1 -0
  116. package/dist/manifests-cli.d.ts +22 -0
  117. package/dist/manifests-cli.d.ts.map +1 -0
  118. package/dist/markdown-report-input.d.ts +7 -0
  119. package/dist/markdown-report-input.d.ts.map +1 -0
  120. package/dist/markdown-report-input.js +15 -1
  121. package/dist/merge-job.d.ts +155 -0
  122. package/dist/merge-job.d.ts.map +1 -0
  123. package/dist/model-configs-cli.d.ts +19 -0
  124. package/dist/model-configs-cli.d.ts.map +1 -0
  125. package/dist/model-configs-cli.js +104 -0
  126. package/dist/optimization-export-cli.d.ts +19 -0
  127. package/dist/optimization-export-cli.d.ts.map +1 -0
  128. package/dist/optimizations-list-cli.d.ts +20 -0
  129. package/dist/optimizations-list-cli.d.ts.map +1 -0
  130. package/dist/optimizations-promote-cli.d.ts +8 -0
  131. package/dist/optimizations-promote-cli.d.ts.map +1 -0
  132. package/dist/optimizations-promote-cli.js +34 -0
  133. package/dist/option-validation.d.ts +15 -0
  134. package/dist/option-validation.d.ts.map +1 -0
  135. package/dist/preview-runtime.d.ts +63 -0
  136. package/dist/preview-runtime.d.ts.map +1 -0
  137. package/dist/prompt-draft-push.d.ts +60 -0
  138. package/dist/prompt-draft-push.d.ts.map +1 -0
  139. package/dist/prompt-label-cli.d.ts +11 -0
  140. package/dist/prompt-label-cli.d.ts.map +1 -0
  141. package/dist/prompt-label-cli.js +29 -0
  142. package/dist/prompt-length-wire.d.ts +28 -0
  143. package/dist/prompt-length-wire.d.ts.map +1 -0
  144. package/dist/prompt-length-wire.js +2 -2
  145. package/dist/prompt-report-cli.d.ts +10 -0
  146. package/dist/prompt-report-cli.d.ts.map +1 -0
  147. package/dist/prompt-report-cli.js +2 -2
  148. package/dist/prompt-summary-table.d.ts +15 -0
  149. package/dist/prompt-summary-table.d.ts.map +1 -0
  150. package/dist/prompt-summary-table.js +6 -0
  151. package/dist/registration-tag-warning.d.ts +32 -0
  152. package/dist/registration-tag-warning.d.ts.map +1 -0
  153. package/dist/report-comments-cli.d.ts +16 -0
  154. package/dist/report-comments-cli.d.ts.map +1 -0
  155. package/dist/report-markdown-blankness.d.ts +2 -0
  156. package/dist/report-markdown-blankness.d.ts.map +1 -0
  157. package/dist/report-markdown-blankness.js +6 -0
  158. package/dist/report-replacement-warning.d.ts +17 -0
  159. package/dist/report-replacement-warning.d.ts.map +1 -0
  160. package/dist/report-replacement-warning.js +31 -0
  161. package/dist/repository-backup-core.d.ts +225 -0
  162. package/dist/repository-backup-core.d.ts.map +1 -0
  163. package/dist/repository-recovery-manifest.d.ts +83 -0
  164. package/dist/repository-recovery-manifest.d.ts.map +1 -0
  165. package/dist/run-event-digest.d.ts +74 -0
  166. package/dist/run-event-digest.d.ts.map +1 -0
  167. package/dist/runner-dir-verify.d.ts +66 -0
  168. package/dist/runner-dir-verify.d.ts.map +1 -0
  169. package/dist/runner-instruction-set-contract.d.ts +24 -0
  170. package/dist/runner-instruction-set-contract.d.ts.map +1 -0
  171. package/dist/runner-instruction-set-contract.js +50 -0
  172. package/dist/sandbox-hygiene.d.ts +45 -0
  173. package/dist/sandbox-hygiene.d.ts.map +1 -0
  174. package/dist/sandbox-provider.d.ts +193 -0
  175. package/dist/sandbox-provider.d.ts.map +1 -0
  176. package/dist/scorer-draft-push.d.ts +50 -0
  177. package/dist/scorer-draft-push.d.ts.map +1 -0
  178. package/dist/scorers-cli.d.ts +20 -0
  179. package/dist/scorers-cli.d.ts.map +1 -0
  180. package/dist/scorers-cli.js +22 -0
  181. package/dist/scorers-verify-parity-bridge.d.ts +16 -0
  182. package/dist/scorers-verify-parity-bridge.d.ts.map +1 -0
  183. package/dist/scorers-verify-parity-bridge.js +90 -0
  184. package/dist/scorers-verify-parity.d.ts +81 -0
  185. package/dist/scorers-verify-parity.d.ts.map +1 -0
  186. package/dist/scorers-verify-parity.js +502 -0
  187. package/dist/scores-accept-cli.d.ts +21 -0
  188. package/dist/scores-accept-cli.d.ts.map +1 -0
  189. package/dist/secret-redaction.d.ts +47 -0
  190. package/dist/secret-redaction.d.ts.map +1 -0
  191. package/dist/session-timeline.d.ts +54 -0
  192. package/dist/session-timeline.d.ts.map +1 -0
  193. package/dist/setup-prompt.d.ts +5 -0
  194. package/dist/setup-prompt.d.ts.map +1 -0
  195. package/dist/skill-installer.d.ts +68 -0
  196. package/dist/skill-installer.d.ts.map +1 -0
  197. package/dist/skilled-proposer-launch.d.ts +7 -0
  198. package/dist/skilled-proposer-launch.d.ts.map +1 -0
  199. package/dist/skilled-proposer-launch.js +60 -0
  200. package/dist/smoke.d.ts +102 -0
  201. package/dist/smoke.d.ts.map +1 -0
  202. package/dist/start-intent.d.ts +12 -0
  203. package/dist/start-intent.d.ts.map +1 -0
  204. package/dist/task-assignment-manifest.d.ts +15 -0
  205. package/dist/task-assignment-manifest.d.ts.map +1 -0
  206. package/dist/task-create-error.d.ts +18 -0
  207. package/dist/task-create-error.d.ts.map +1 -0
  208. package/dist/team-connectors-cli.d.ts +29 -0
  209. package/dist/team-connectors-cli.d.ts.map +1 -0
  210. package/dist/types.d.ts +39 -0
  211. package/dist/types.d.ts.map +1 -0
  212. package/dist/vercel-sandbox-provider.d.ts +156 -0
  213. package/dist/vercel-sandbox-provider.d.ts.map +1 -0
  214. package/dist/workbench-cli.d.ts +233 -0
  215. package/dist/workbench-cli.d.ts.map +1 -0
  216. package/dist/workspace-sync.d.ts +207 -0
  217. package/dist/workspace-sync.d.ts.map +1 -0
  218. package/dist/workspace.d.ts +92 -0
  219. package/dist/workspace.d.ts.map +1 -0
  220. package/dist/zip-draft-push.d.ts +55 -0
  221. package/dist/zip-draft-push.d.ts.map +1 -0
  222. package/package.json +15 -2
  223. package/requirements/README.md +138 -0
  224. package/requirements/skilled-proposer.in +66 -0
  225. package/requirements/skilled-proposer.lock +265 -0
  226. package/scripts/build-cli-dist.mjs +30 -0
  227. package/scripts/ensure-skilled-proposer-venv.mjs +5 -0
  228. package/scripts/orizu-source-checkout.d.mts +1 -0
  229. package/scripts/orizu-source-checkout.mjs +10 -0
  230. package/scripts/refresh-skilled-proposer-lock.mjs +256 -0
  231. package/scripts/vendor-gepa-python.mjs +187 -4
  232. package/src/diff-comments-cli.ts +41 -3
  233. package/src/gepa-engine-dispatch.ts +340 -0
  234. package/src/gepa-python-command.ts +31 -0
  235. package/src/gepa-python-paths.ts +56 -0
  236. package/src/help.ts +95 -25
  237. package/src/index.ts +131 -166
  238. package/src/instruction-set-gepa-launch.ts +28 -0
  239. package/src/instruction-set-loader.ts +37 -0
  240. package/src/instruction-set-manifest.ts +120 -0
  241. package/src/instruction-sets-cli.ts +306 -0
  242. package/src/markdown-report-input.ts +19 -1
  243. package/src/model-configs-cli.ts +119 -0
  244. package/src/optimizations-promote-cli.ts +41 -0
  245. package/src/prompt-label-cli.ts +55 -0
  246. package/src/prompt-length-wire.ts +1 -1
  247. package/src/prompt-report-cli.ts +2 -2
  248. package/src/prompt-summary-table.ts +12 -0
  249. package/src/report-markdown-blankness.ts +6 -0
  250. package/src/report-replacement-warning.ts +35 -0
  251. package/src/runner-instruction-set-contract.ts +64 -0
  252. package/src/scorers-cli.ts +40 -0
  253. package/src/scorers-verify-parity-bridge.ts +90 -0
  254. package/src/scorers-verify-parity.ts +564 -0
  255. package/src/skilled-proposer-launch.ts +89 -0
  256. package/src/skilled-proposer-venv-manager.mjs +757 -0
  257. package/tsconfig.json +2 -0
  258. package/vendor/gepa-python/LICENSE +7 -0
  259. package/vendor/gepa-python/manifest.json +107 -0
  260. package/vendor/gepa-python/src/gepa/__init__.py +22 -0
  261. package/vendor/gepa-python/src/gepa/adapters/__init__.py +0 -0
  262. package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/__init__.py +1 -0
  263. package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
  264. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/__init__.py +26 -0
  265. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/confidence_adapter.py +618 -0
  266. package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/scoring.py +206 -0
  267. package/vendor/gepa-python/src/gepa/adapters/default_adapter/__init__.py +0 -0
  268. package/vendor/gepa-python/src/gepa/adapters/default_adapter/default_adapter.py +206 -0
  269. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/__init__.py +0 -0
  270. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/dspy_adapter.py +525 -0
  271. package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/instruction_proposal.py +500 -0
  272. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/__init__.py +6 -0
  273. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
  274. package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/full_program_adapter.py +269 -0
  275. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/__init__.py +56 -0
  276. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
  277. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
  278. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
  279. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
  280. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
  281. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
  282. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
  283. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
  284. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
  285. package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
  286. package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/__init__.py +11 -0
  287. package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/langchain_adapter.py +261 -0
  288. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/__init__.py +37 -0
  289. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_adapter.py +693 -0
  290. package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_client.py +364 -0
  291. package/vendor/gepa-python/src/gepa/adapters/optimize_anything_adapter/optimize_anything_adapter.py +879 -0
  292. package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/__init__.py +0 -0
  293. package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
  294. package/vendor/gepa-python/src/gepa/api.py +468 -0
  295. package/vendor/gepa-python/src/gepa/core/__init__.py +0 -0
  296. package/vendor/gepa-python/src/gepa/core/adapter.py +227 -0
  297. package/vendor/gepa-python/src/gepa/core/callbacks.py +551 -0
  298. package/vendor/gepa-python/src/gepa/core/data_loader.py +74 -0
  299. package/vendor/gepa-python/src/gepa/core/engine.py +1025 -0
  300. package/vendor/gepa-python/src/gepa/core/result.py +271 -0
  301. package/vendor/gepa-python/src/gepa/core/state.py +706 -0
  302. package/vendor/gepa-python/src/gepa/examples/__init__.py +0 -0
  303. package/vendor/gepa-python/src/gepa/examples/aime.py +24 -0
  304. package/vendor/gepa-python/src/gepa/examples/anymaths-bench/eval_default.py +111 -0
  305. package/vendor/gepa-python/src/gepa/examples/anymaths-bench/train_anymaths.py +177 -0
  306. package/vendor/gepa-python/src/gepa/examples/mcp_adapter/__init__.py +4 -0
  307. package/vendor/gepa-python/src/gepa/examples/mcp_adapter/mcp_optimization_example.py +456 -0
  308. package/vendor/gepa-python/src/gepa/examples/rag_adapter/__init__.py +9 -0
  309. package/vendor/gepa-python/src/gepa/examples/rag_adapter/rag_optimization.py +824 -0
  310. package/vendor/gepa-python/src/gepa/examples/terminal-bench/train_terminus.py +161 -0
  311. package/vendor/gepa-python/src/gepa/gepa_utils.py +117 -0
  312. package/vendor/gepa-python/src/gepa/gskill/__init__.py +1 -0
  313. package/vendor/gepa-python/src/gepa/gskill/gskill/__init__.py +0 -0
  314. package/vendor/gepa-python/src/gepa/gskill/gskill/cost_tracker.py +194 -0
  315. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/__init__.py +0 -0
  316. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code.py +1117 -0
  317. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code_skills.py +613 -0
  318. package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/mini_swe_agent.py +440 -0
  319. package/vendor/gepa-python/src/gepa/gskill/gskill/experiment_logger.py +367 -0
  320. package/vendor/gepa-python/src/gepa/gskill/gskill/swe_fitness_fn.py +209 -0
  321. package/vendor/gepa-python/src/gepa/gskill/gskill/swe_harness.py +352 -0
  322. package/vendor/gepa-python/src/gepa/gskill/gskill/train_optimize_anything.py +830 -0
  323. package/vendor/gepa-python/src/gepa/image.py +104 -0
  324. package/vendor/gepa-python/src/gepa/lm.py +261 -0
  325. package/vendor/gepa-python/src/gepa/logging/__init__.py +0 -0
  326. package/vendor/gepa-python/src/gepa/logging/experiment_tracker.py +457 -0
  327. package/vendor/gepa-python/src/gepa/logging/logger.py +75 -0
  328. package/vendor/gepa-python/src/gepa/logging/utils.py +130 -0
  329. package/vendor/gepa-python/src/gepa/optimize_anything.py +1701 -0
  330. package/vendor/gepa-python/src/gepa/proposer/__init__.py +0 -0
  331. package/vendor/gepa-python/src/gepa/proposer/base.py +53 -0
  332. package/vendor/gepa-python/src/gepa/proposer/merge.py +403 -0
  333. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/__init__.py +0 -0
  334. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/base.py +64 -0
  335. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflection_lm.py +178 -0
  336. package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflective_mutation.py +641 -0
  337. package/vendor/gepa-python/src/gepa/py.typed +0 -0
  338. package/vendor/gepa-python/src/gepa/strategies/__init__.py +0 -0
  339. package/vendor/gepa-python/src/gepa/strategies/acceptance.py +66 -0
  340. package/vendor/gepa-python/src/gepa/strategies/batch_sampler.py +103 -0
  341. package/vendor/gepa-python/src/gepa/strategies/candidate_selector.py +82 -0
  342. package/vendor/gepa-python/src/gepa/strategies/component_selector.py +36 -0
  343. package/vendor/gepa-python/src/gepa/strategies/eval_policy.py +64 -0
  344. package/vendor/gepa-python/src/gepa/strategies/instruction_proposal.py +153 -0
  345. package/vendor/gepa-python/src/gepa/strategies/proposal_sampling.py +128 -0
  346. package/vendor/gepa-python/src/gepa/strategies/proposal_selection.py +84 -0
  347. package/vendor/gepa-python/src/gepa/utils/__init__.py +63 -0
  348. package/vendor/gepa-python/src/gepa/utils/code_execution.py +626 -0
  349. package/vendor/gepa-python/src/gepa/utils/stdio_capture.py +145 -0
  350. package/vendor/gepa-python/src/gepa/utils/stop_condition.py +230 -0
  351. package/vendor/gepa-python/src/gepa/visualization.py +359 -0
  352. package/vendor/orizu-gepa/pyproject.toml +18 -0
  353. package/vendor/orizu-gepa/src/orizu_gepa_connector/__init__.py +9 -0
  354. package/vendor/orizu-gepa/src/orizu_gepa_connector/__main__.py +5 -0
  355. package/vendor/orizu-gepa/src/orizu_gepa_connector/adapter.py +138 -0
  356. package/vendor/orizu-gepa/src/orizu_gepa_connector/callbacks.py +666 -0
  357. package/vendor/orizu-gepa/src/orizu_gepa_connector/cli.py +7 -0
  358. package/vendor/orizu-gepa/src/orizu_gepa_connector/engine.py +269 -0
  359. package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +52 -0
  360. package/vendor/orizu-gepa/src/orizu_gepa_connector/preflight.py +64 -0
  361. package/vendor/orizu-gepa/src/orizu_gepa_connector/reflection.py +186 -0
  362. package/vendor/orizu-gepa/src/orizu_gepa_connector/runtime.py +721 -0
  363. package/vendor/orizu-gepa/src/orizu_gepa_connector/skilled_proposer_bridge.py +381 -0
  364. package/vendor/orizu-gepa/src/orizu_gepa_connector/stop_conditions.py +55 -0
  365. package/vendor/orizu-gepa/src/orizu_gepa_connector/translator.py +203 -0
  366. package/vendor/orizu-gepa-python/pyproject.toml +1 -1
  367. package/vendor/orizu-gepa-python/src/orizu_gepa/cli.py +1 -0
  368. package/vendor/orizu-gepa-python/src/orizu_gepa/client.py +52 -7
  369. package/vendor/orizu-gepa-python/src/orizu_gepa/local_log.py +52 -0
  370. package/vendor/orizu-gepa-python/src/orizu_gepa/optimizer.py +10 -5
  371. package/vendor/orizu-gepa-python/src/orizu_gepa/reflection.py +323 -68
  372. package/vendor/orizu-gepa-python/src/orizu_gepa/runner.py +207 -13
  373. package/vendor/skills/orizu-cli/SKILL.md +3 -1
  374. package/vendor/skills/orizu-cli/references/cli-reference.md +85 -1
  375. package/vendor/skills/orizu-cli/references/migrate-existing-gepa-setup.md +303 -0
  376. package/vendor/skills/orizu-cli/references/optimization-reports.md +1 -1
  377. package/vendor/skills/orizu-cli/references/optimization-with-gepa.md +26 -1
  378. package/vendor/skills/orizu-cli/references/prompt-control-plane.md +113 -10
@@ -0,0 +1,456 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ MCP Tool Optimization with GEPA
4
+
5
+ This example demonstrates how to use GEPA to optimize MCP tool descriptions
6
+ and system prompts. It shows both local (stdio) and remote (SSE) server support.
7
+
8
+ What you'll learn:
9
+ - Setting up MCPAdapter with local or remote servers
10
+ - Defining evaluation datasets
11
+ - Running optimization to improve tool descriptions
12
+ - Multi-tool support
13
+
14
+ MODEL CONFIGURATION:
15
+ Defaults to Ollama models (no API key needed). Requires Ollama installed: https://ollama.com
16
+ Pull models: ollama pull llama3.1:8b && ollama pull qwen3:8b
17
+
18
+ To use OpenAI models: --task-model gpt-4o-mini (requires OPENAI_API_KEY)
19
+
20
+ Requirements:
21
+ pip install gepa mcp litellm
22
+
23
+ Usage Examples:
24
+ # Run with default Ollama models (no flags needed)
25
+ python mcp_optimization_example.py
26
+
27
+ # Use OpenAI models (requires OPENAI_API_KEY)
28
+ python mcp_optimization_example.py --task-model gpt-4o-mini
29
+
30
+ # Remote MCP server
31
+ python mcp_optimization_example.py --mode remote --url YOUR_URL
32
+ """
33
+
34
+ import logging
35
+ import sys
36
+ import tempfile
37
+ from pathlib import Path
38
+
39
+ from mcp import StdioServerParameters
40
+
41
+ import gepa
42
+ from gepa.adapters.mcp_adapter import MCPAdapter
43
+
44
+ # Suppress verbose output from dependencies
45
+ try:
46
+ import litellm
47
+
48
+ litellm.set_verbose = False
49
+ litellm.drop_params = True
50
+ # Set LiteLLM logger to WARNING to suppress INFO messages
51
+ logging.getLogger("LiteLLM").setLevel(logging.WARNING)
52
+ except ImportError:
53
+ pass
54
+
55
+ # Suppress HTTP request logging
56
+ logging.getLogger("httpx").setLevel(logging.WARNING)
57
+ logging.getLogger("httpcore").setLevel(logging.WARNING)
58
+ logging.getLogger("urllib3").setLevel(logging.WARNING)
59
+
60
+ # Configure logging for GEPA output
61
+ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
62
+ logger = logging.getLogger(__name__)
63
+
64
+
65
+ # ============================================================================
66
+ # Simple MCP Server (for local testing)
67
+ # ============================================================================
68
+
69
+ SIMPLE_MCP_SERVER = '''"""Simple MCP server with file operations."""
70
+ import asyncio
71
+ from pathlib import Path
72
+ from mcp.server.fastmcp import FastMCP
73
+
74
+ # Create MCP server
75
+ mcp = FastMCP("File Server")
76
+
77
+ # Base directory for file operations
78
+ BASE_DIR = Path("/tmp/mcp_test")
79
+ BASE_DIR.mkdir(exist_ok=True)
80
+
81
+
82
+ @mcp.tool()
83
+ def read_file(path: str) -> str:
84
+ """Read contents of a file.
85
+
86
+ Args:
87
+ path: Relative path to the file
88
+ """
89
+ try:
90
+ file_path = BASE_DIR / path
91
+ if not file_path.exists():
92
+ return f"Error: File {path} not found"
93
+ return file_path.read_text()
94
+ except Exception as e:
95
+ return f"Error reading file: {e}"
96
+
97
+
98
+ @mcp.tool()
99
+ def write_file(path: str, content: str) -> str:
100
+ """Write content to a file.
101
+
102
+ Args:
103
+ path: Relative path to the file
104
+ content: Content to write
105
+ """
106
+ try:
107
+ file_path = BASE_DIR / path
108
+ file_path.parent.mkdir(parents=True, exist_ok=True)
109
+ file_path.write_text(content)
110
+ return f"Successfully wrote to {path}"
111
+ except Exception as e:
112
+ return f"Error writing file: {e}"
113
+
114
+
115
+ @mcp.tool()
116
+ def list_files() -> str:
117
+ """List all files in the base directory."""
118
+ try:
119
+ files = [str(p.relative_to(BASE_DIR)) for p in BASE_DIR.rglob("*") if p.is_file()]
120
+ if not files:
121
+ return "No files found"
122
+ return "\\\\n".join(files)
123
+ except Exception as e:
124
+ return f"Error listing files: {e}"
125
+
126
+
127
+ if __name__ == "__main__":
128
+ # Run the server
129
+ mcp.run()
130
+ '''
131
+
132
+
133
+ def create_test_server():
134
+ """Create a test MCP server file."""
135
+ temp_dir = Path(tempfile.mkdtemp(prefix="gepa_mcp_"))
136
+ server_file = temp_dir / "server.py"
137
+ server_file.write_text(SIMPLE_MCP_SERVER)
138
+ return server_file
139
+
140
+
141
+ def create_test_files():
142
+ """Create test files for the example."""
143
+ base_dir = Path("/tmp/mcp_test")
144
+ base_dir.mkdir(exist_ok=True)
145
+
146
+ (base_dir / "notes.txt").write_text("Meeting at 3pm in Room B\nDiscuss Q4 goals")
147
+ (base_dir / "data.txt").write_text("Revenue: $50000\nExpenses: $30000\nProfit: $20000")
148
+
149
+
150
+ # ============================================================================
151
+ # Dataset & Metric Definition
152
+ # ============================================================================
153
+
154
+
155
+ def create_dataset():
156
+ """Create evaluation dataset for file operations."""
157
+ return [
158
+ {
159
+ "user_query": "What's in the notes.txt file?",
160
+ "tool_arguments": {"path": "notes.txt"},
161
+ "reference_answer": "3pm",
162
+ "additional_context": {},
163
+ },
164
+ {
165
+ "user_query": "Read the content of data.txt",
166
+ "tool_arguments": {"path": "data.txt"},
167
+ "reference_answer": "50000",
168
+ "additional_context": {},
169
+ },
170
+ {
171
+ "user_query": "Show me what's in notes.txt",
172
+ "tool_arguments": {"path": "notes.txt"},
173
+ "reference_answer": "Room B",
174
+ "additional_context": {},
175
+ },
176
+ ]
177
+
178
+
179
+ def metric_fn(data_inst, output: str) -> float:
180
+ """
181
+ Simple metric: 1.0 if reference answer appears in output, 0.0 otherwise.
182
+
183
+ In practice, you'd use more sophisticated metrics based on your use case.
184
+ """
185
+ reference = data_inst.get("reference_answer", "")
186
+ return 1.0 if reference and reference.lower() in output.lower() else 0.0
187
+
188
+
189
+ # ============================================================================
190
+ # Local Server Example
191
+ # ============================================================================
192
+
193
+
194
+ def run_local_example(task_model: str = "ollama/llama3.1:8b", reflection_model: str = "ollama/qwen3:8b"):
195
+ """Run optimization with local stdio MCP server."""
196
+ logger.info("=" * 60)
197
+ logger.info("GEPA MCP Tool Optimization")
198
+ logger.info("=" * 60)
199
+
200
+ server_file = create_test_server()
201
+ create_test_files()
202
+
203
+ logger.info(f"MCP Server: Local stdio server ({server_file.name})")
204
+ logger.info("Tools: read_file")
205
+ logger.info(f"Task Model: {task_model}")
206
+ logger.info(f"Reflection Model: {reflection_model}")
207
+
208
+ adapter = MCPAdapter(
209
+ tool_names="read_file",
210
+ task_model=task_model,
211
+ metric_fn=metric_fn,
212
+ server_params=StdioServerParameters(
213
+ command="python",
214
+ args=[str(server_file)],
215
+ ),
216
+ base_system_prompt="You are a helpful file assistant.",
217
+ enable_two_pass=True,
218
+ )
219
+
220
+ dataset = create_dataset()
221
+ seed_candidate = {"tool_description": "Read file contents from disk."}
222
+
223
+ logger.info("")
224
+ logger.info("Seed Prompt (Initial Tool Description):")
225
+ logger.info(f" {seed_candidate['tool_description']}")
226
+ logger.info("")
227
+ logger.info(f"Dataset: {len(dataset)} examples")
228
+ logger.info("")
229
+ logger.info("Starting GEPA optimization...")
230
+ logger.info("-" * 60)
231
+
232
+ result = gepa.optimize(
233
+ seed_candidate=seed_candidate,
234
+ trainset=dataset,
235
+ valset=dataset,
236
+ adapter=adapter,
237
+ reflection_lm=reflection_model,
238
+ max_metric_calls=10,
239
+ )
240
+
241
+ logger.info("-" * 60)
242
+ logger.info("Optimization Complete")
243
+ logger.info("=" * 60)
244
+ best_score = result.val_aggregate_scores[result.best_idx] if result.val_aggregate_scores else 0.0
245
+ best_candidate = result.candidates[result.best_idx]
246
+ logger.info(f"Best Score: {best_score:.2f}")
247
+ logger.info("")
248
+ logger.info("Optimized Tool Description:")
249
+ logger.info(f" {best_candidate.get('tool_description', 'N/A')}")
250
+ logger.info("=" * 60)
251
+
252
+ return result
253
+
254
+
255
+ # ============================================================================
256
+ # Remote Server Example
257
+ # ============================================================================
258
+
259
+
260
+ def run_remote_example(url: str, task_model: str = "ollama/llama3.1:8b", reflection_model: str = "ollama/qwen3:8b"):
261
+ """Run optimization with remote SSE MCP server."""
262
+ logger.info("=" * 60)
263
+ logger.info("GEPA MCP Tool Optimization")
264
+ logger.info("=" * 60)
265
+
266
+ logger.info(f"MCP Server: Remote SSE server ({url})")
267
+ logger.info("Tools: search")
268
+ logger.info(f"Task Model: {task_model}")
269
+ logger.info(f"Reflection Model: {reflection_model}")
270
+
271
+ adapter = MCPAdapter(
272
+ tool_names="search",
273
+ task_model=task_model,
274
+ metric_fn=metric_fn,
275
+ remote_url=url,
276
+ remote_transport="sse",
277
+ remote_headers={},
278
+ )
279
+
280
+ dataset = [
281
+ {
282
+ "user_query": "Search for information about Python",
283
+ "tool_arguments": {"query": "Python"},
284
+ "reference_answer": "programming",
285
+ "additional_context": {},
286
+ },
287
+ ]
288
+
289
+ seed_candidate = {"tool_description": "Search for information."}
290
+
291
+ logger.info("")
292
+ logger.info("Seed Prompt (Initial Tool Description):")
293
+ logger.info(f" {seed_candidate['tool_description']}")
294
+ logger.info("")
295
+ logger.info(f"Dataset: {len(dataset)} examples")
296
+ logger.info("")
297
+ logger.info("Starting GEPA optimization...")
298
+ logger.info("-" * 60)
299
+
300
+ result = gepa.optimize(
301
+ seed_candidate=seed_candidate,
302
+ trainset=dataset,
303
+ valset=dataset,
304
+ adapter=adapter,
305
+ reflection_lm=reflection_model,
306
+ max_metric_calls=10,
307
+ )
308
+
309
+ logger.info("-" * 60)
310
+ logger.info("Optimization Complete")
311
+ logger.info("=" * 60)
312
+ best_score = result.val_aggregate_scores[result.best_idx] if result.val_aggregate_scores else 0.0
313
+ best_candidate = result.candidates[result.best_idx]
314
+ logger.info(f"Best Score: {best_score:.2f}")
315
+ logger.info("")
316
+ logger.info("Optimized Tool Description:")
317
+ logger.info(f" {best_candidate.get('tool_description', 'N/A')}")
318
+ logger.info("=" * 60)
319
+
320
+ return result
321
+
322
+
323
+ # ============================================================================
324
+ # Multi-Tool Example
325
+ # ============================================================================
326
+
327
+
328
+ def run_multitool_example(task_model: str = "ollama/llama3.1:8b", reflection_model: str = "ollama/qwen3:8b"):
329
+ """Run optimization with multiple tools."""
330
+ logger.info("=" * 60)
331
+ logger.info("GEPA MCP Tool Optimization (Multi-Tool)")
332
+ logger.info("=" * 60)
333
+
334
+ server_file = create_test_server()
335
+ create_test_files()
336
+
337
+ logger.info(f"MCP Server: Local stdio server ({server_file.name})")
338
+ logger.info("Tools: read_file, write_file, list_files")
339
+ logger.info(f"Task Model: {task_model}")
340
+ logger.info(f"Reflection Model: {reflection_model}")
341
+
342
+ adapter = MCPAdapter(
343
+ tool_names=["read_file", "write_file", "list_files"],
344
+ task_model=task_model,
345
+ metric_fn=metric_fn,
346
+ server_params=StdioServerParameters(
347
+ command="python",
348
+ args=[str(server_file)],
349
+ ),
350
+ )
351
+
352
+ dataset = [
353
+ {
354
+ "user_query": "What files are available?",
355
+ "tool_arguments": {},
356
+ "reference_answer": "notes.txt",
357
+ "additional_context": {},
358
+ },
359
+ {
360
+ "user_query": "Read notes.txt",
361
+ "tool_arguments": {"path": "notes.txt"},
362
+ "reference_answer": "3pm",
363
+ "additional_context": {},
364
+ },
365
+ ]
366
+
367
+ seed_candidate = {
368
+ "tool_description_read_file": "Read a file.",
369
+ "tool_description_write_file": "Write a file.",
370
+ "tool_description_list_files": "List files.",
371
+ }
372
+
373
+ logger.info("")
374
+ logger.info("Seed Prompts (Initial Tool Descriptions):")
375
+ for tool_name in adapter.tool_names:
376
+ key = f"tool_description_{tool_name}"
377
+ logger.info(f" {tool_name}: {seed_candidate.get(key, 'N/A')}")
378
+ logger.info("")
379
+ logger.info(f"Dataset: {len(dataset)} examples")
380
+ logger.info("")
381
+ logger.info("Starting GEPA optimization...")
382
+ logger.info("-" * 60)
383
+
384
+ result = gepa.optimize(
385
+ seed_candidate=seed_candidate,
386
+ trainset=dataset,
387
+ valset=dataset,
388
+ adapter=adapter,
389
+ reflection_lm=reflection_model,
390
+ max_metric_calls=10,
391
+ )
392
+
393
+ logger.info("-" * 60)
394
+ logger.info("Optimization Complete")
395
+ logger.info("=" * 60)
396
+ best_candidate = result.candidates[result.best_idx]
397
+ logger.info("Optimized Tool Descriptions:")
398
+ for tool_name in adapter.tool_names:
399
+ key = f"tool_description_{tool_name}"
400
+ logger.info(f" {tool_name}: {best_candidate.get(key, 'N/A')}")
401
+ logger.info("=" * 60)
402
+
403
+ return result
404
+
405
+
406
+ # ============================================================================
407
+ # Main
408
+ # ============================================================================
409
+
410
+ if __name__ == "__main__":
411
+ import argparse
412
+
413
+ parser = argparse.ArgumentParser(description="MCP Tool Optimization Example")
414
+ parser.add_argument(
415
+ "--mode",
416
+ choices=["local", "remote", "multitool"],
417
+ default="local",
418
+ help="Example mode to run",
419
+ )
420
+ parser.add_argument(
421
+ "--url",
422
+ type=str,
423
+ help="Remote MCP server URL (for remote mode)",
424
+ )
425
+ parser.add_argument(
426
+ "--task-model",
427
+ type=str,
428
+ default="ollama/llama3.1:8b",
429
+ help='Model for task execution (default: "ollama/llama3.1:8b")',
430
+ )
431
+ parser.add_argument(
432
+ "--reflection-model",
433
+ type=str,
434
+ default="ollama/qwen3:8b",
435
+ help='Model for reflection (default: "ollama/qwen3:8b")',
436
+ )
437
+
438
+ args = parser.parse_args()
439
+
440
+ try:
441
+ if args.mode == "local":
442
+ run_local_example(args.task_model, args.reflection_model)
443
+ elif args.mode == "remote":
444
+ if not args.url:
445
+ logger.error("Remote mode requires --url argument")
446
+ sys.exit(1)
447
+ run_remote_example(args.url, args.task_model, args.reflection_model)
448
+ elif args.mode == "multitool":
449
+ run_multitool_example(args.task_model, args.reflection_model)
450
+
451
+ except KeyboardInterrupt:
452
+ logger.info("\nInterrupted by user")
453
+ sys.exit(0)
454
+ except Exception as e:
455
+ logger.exception(f"Error: {e}")
456
+ sys.exit(1)
@@ -0,0 +1,9 @@
1
+ # Copyright (c) 2025 Lakshya A Agrawal and the GEPA contributors
2
+ # https://github.com/gepa-ai/gepa
3
+
4
+ """
5
+ GEPA Generic RAG Adapter Examples
6
+
7
+ This package contains examples demonstrating how to use GEPA's Generic RAG Adapter
8
+ with different vector stores and both local and cloud-based language models.
9
+ """