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,364 @@
1
+ """
2
+ Unified MCP Client - Supports stdio, SSE, and StreamableHTTP transports.
3
+
4
+ This utility provides a single abstraction for connecting to MCP servers
5
+ using different transport mechanisms.
6
+ """
7
+
8
+ import asyncio
9
+ import json
10
+ import logging
11
+ from abc import ABC, abstractmethod
12
+ from typing import Any
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class BaseMCPClient(ABC):
18
+ """Abstract base class for MCP clients."""
19
+
20
+ def __init__(self):
21
+ self.request_id = 0
22
+
23
+ @abstractmethod
24
+ async def start(self):
25
+ """Start the MCP connection."""
26
+ pass
27
+
28
+ @abstractmethod
29
+ async def send_request(self, method: str, params: dict | None = None) -> dict:
30
+ """Send JSON-RPC request and get response."""
31
+ pass
32
+
33
+ @abstractmethod
34
+ async def close(self):
35
+ """Close the connection."""
36
+ pass
37
+
38
+ async def initialize(self) -> dict:
39
+ """Initialize MCP session (common across all transports)."""
40
+ result = await self.send_request(
41
+ "initialize",
42
+ {
43
+ "protocolVersion": "2024-11-05",
44
+ "capabilities": {},
45
+ "clientInfo": {"name": "gepa-mcp-adapter", "version": "1.0"},
46
+ },
47
+ )
48
+ await self._send_initialized_notification()
49
+ return result
50
+
51
+ @abstractmethod
52
+ async def _send_initialized_notification(self):
53
+ """Send initialized notification (transport-specific)."""
54
+ pass
55
+
56
+ async def list_tools(self) -> list[dict]:
57
+ """List available tools."""
58
+ result = await self.send_request("tools/list")
59
+ return result.get("tools", [])
60
+
61
+ async def call_tool(self, name: str, arguments: dict) -> dict:
62
+ """Call a tool."""
63
+ return await self.send_request("tools/call", {"name": name, "arguments": arguments})
64
+
65
+
66
+ class StdioMCPClient(BaseMCPClient):
67
+ """MCP client using stdio transport (subprocess-based)."""
68
+
69
+ def __init__(self, command: str, args: list[str]):
70
+ super().__init__()
71
+ self.command = command
72
+ self.args = args
73
+ self.process = None
74
+
75
+ async def start(self):
76
+ """Start the MCP server process."""
77
+ logger.info(f"Starting stdio MCP server: {self.command} {' '.join(self.args)}")
78
+ self.process = await asyncio.create_subprocess_exec(
79
+ self.command,
80
+ *self.args,
81
+ stdin=asyncio.subprocess.PIPE,
82
+ stdout=asyncio.subprocess.PIPE,
83
+ stderr=asyncio.subprocess.DEVNULL,
84
+ )
85
+
86
+ async def send_request(self, method: str, params: dict | None = None) -> dict:
87
+ """Send JSON-RPC request via stdio."""
88
+ if not self.process or not self.process.stdin or not self.process.stdout:
89
+ raise RuntimeError("Process not started or streams not available")
90
+
91
+ self.request_id += 1
92
+ request = {"jsonrpc": "2.0", "method": method, "id": self.request_id}
93
+
94
+ if params is not None:
95
+ request["params"] = params
96
+
97
+ # Send request
98
+ request_str = json.dumps(request) + "\n"
99
+ self.process.stdin.write(request_str.encode())
100
+ await self.process.stdin.drain()
101
+
102
+ # Read response
103
+ response_line = await self.process.stdout.readline()
104
+ response = json.loads(response_line.decode())
105
+
106
+ if "error" in response:
107
+ raise Exception(f"MCP error: {response['error']}")
108
+
109
+ return response.get("result", {})
110
+
111
+ async def _send_initialized_notification(self):
112
+ """Send initialized notification via stdio."""
113
+ if not self.process or not self.process.stdin:
114
+ raise RuntimeError("Process not started or stdin not available")
115
+
116
+ notification = {"jsonrpc": "2.0", "method": "notifications/initialized"}
117
+ notification_str = json.dumps(notification) + "\n"
118
+ self.process.stdin.write(notification_str.encode())
119
+ await self.process.stdin.drain()
120
+
121
+ async def close(self):
122
+ """Close the subprocess."""
123
+ if self.process and self.process.stdin:
124
+ self.process.stdin.close()
125
+ await self.process.wait()
126
+ logger.info("Stdio MCP connection closed")
127
+
128
+
129
+ class SSEMCPClient(BaseMCPClient):
130
+ """MCP client using Server-Sent Events transport."""
131
+
132
+ def __init__(self, url: str, headers: dict[str, str] | None = None, timeout: float = 30):
133
+ super().__init__()
134
+ self.url = url
135
+ self.headers = headers or {}
136
+ self.timeout = timeout
137
+ self.read_stream = None
138
+ self.write_stream = None
139
+ self._sse_context = None
140
+
141
+ async def start(self):
142
+ """Start the SSE connection."""
143
+ from mcp.client.sse import sse_client # type: ignore[import-untyped]
144
+
145
+ logger.info(f"Connecting to SSE MCP server at {self.url}")
146
+
147
+ self._sse_context = sse_client(
148
+ url=self.url,
149
+ headers=self.headers,
150
+ timeout=self.timeout,
151
+ sse_read_timeout=300,
152
+ )
153
+
154
+ streams = await self._sse_context.__aenter__()
155
+ self.read_stream, self.write_stream = streams
156
+ logger.info("SSE connection established")
157
+
158
+ async def send_request(self, method: str, params: dict | None = None) -> dict:
159
+ """Send JSON-RPC request via SSE."""
160
+ from mcp.shared.message import SessionMessage # type: ignore[import-untyped]
161
+ from mcp.types import JSONRPCMessage, JSONRPCRequest # type: ignore[import-untyped]
162
+
163
+ if not self.read_stream or not self.write_stream:
164
+ raise RuntimeError("SSE streams not initialized")
165
+
166
+ self.request_id += 1
167
+ request_dict = {
168
+ "jsonrpc": "2.0",
169
+ "method": method,
170
+ "id": self.request_id,
171
+ }
172
+
173
+ if params is not None:
174
+ request_dict["params"] = params
175
+
176
+ logger.debug(f"Sending SSE request: {method} (id={self.request_id})")
177
+
178
+ request = JSONRPCRequest(**request_dict)
179
+ session_message = SessionMessage(message=JSONRPCMessage(request))
180
+ await self.write_stream.send(session_message)
181
+
182
+ # Read response
183
+ response_message = await self.read_stream.receive()
184
+
185
+ if hasattr(response_message.message.root, "error"):
186
+ error = response_message.message.root.error
187
+ raise Exception(f"MCP error: {error}")
188
+
189
+ if hasattr(response_message.message.root, "result"):
190
+ return response_message.message.root.result
191
+
192
+ raise Exception(f"Unexpected response format: {response_message}")
193
+
194
+ async def _send_initialized_notification(self):
195
+ """Send initialized notification via SSE."""
196
+ from mcp.shared.message import SessionMessage # type: ignore[import-untyped]
197
+ from mcp.types import JSONRPCMessage, JSONRPCNotification # type: ignore[import-untyped]
198
+
199
+ if not self.write_stream:
200
+ raise RuntimeError("SSE write stream not initialized")
201
+
202
+ notification = JSONRPCNotification(
203
+ jsonrpc="2.0",
204
+ method="notifications/initialized",
205
+ )
206
+
207
+ session_message = SessionMessage(message=JSONRPCMessage(notification))
208
+ await self.write_stream.send(session_message)
209
+
210
+ async def close(self):
211
+ """Close the SSE connection."""
212
+ if self._sse_context:
213
+ try:
214
+ await self._sse_context.__aexit__(None, None, None)
215
+ logger.info("SSE connection closed")
216
+ except Exception as e:
217
+ logger.warning(f"Error closing SSE connection: {e}")
218
+
219
+
220
+ class StreamableHTTPMCPClient(BaseMCPClient):
221
+ """MCP client using StreamableHTTP transport (production-grade)."""
222
+
223
+ def __init__(
224
+ self,
225
+ url: str,
226
+ headers: dict[str, str] | None = None,
227
+ timeout: float = 30,
228
+ sse_read_timeout: float = 300,
229
+ ):
230
+ super().__init__()
231
+ self.url = url
232
+ self.headers = headers or {}
233
+ self.timeout = timeout
234
+ self.sse_read_timeout = sse_read_timeout
235
+ self.read_stream = None
236
+ self.write_stream = None
237
+ self._transport_context = None
238
+
239
+ async def start(self):
240
+ """Start the StreamableHTTP connection."""
241
+ from mcp.client.streamable_http import streamable_http_client # type: ignore[import-untyped]
242
+
243
+ logger.info(f"Connecting to StreamableHTTP MCP server at {self.url}")
244
+
245
+ self._transport_context = streamable_http_client(
246
+ url=self.url,
247
+ headers=self.headers,
248
+ timeout=self.timeout,
249
+ sse_read_timeout=self.sse_read_timeout,
250
+ )
251
+
252
+ streams = await self._transport_context.__aenter__()
253
+ self.read_stream, self.write_stream = streams
254
+ logger.info("StreamableHTTP connection established")
255
+
256
+ async def send_request(self, method: str, params: dict | None = None) -> dict:
257
+ """Send JSON-RPC request via StreamableHTTP."""
258
+ from mcp.shared.message import SessionMessage # type: ignore[import-untyped]
259
+ from mcp.types import JSONRPCMessage, JSONRPCRequest # type: ignore[import-untyped]
260
+
261
+ if not self.read_stream or not self.write_stream:
262
+ raise RuntimeError("StreamableHTTP streams not initialized")
263
+
264
+ self.request_id += 1
265
+ request_dict = {
266
+ "jsonrpc": "2.0",
267
+ "method": method,
268
+ "id": self.request_id,
269
+ }
270
+
271
+ if params is not None:
272
+ request_dict["params"] = params
273
+
274
+ logger.debug(f"Sending StreamableHTTP request: {method} (id={self.request_id})")
275
+
276
+ request = JSONRPCRequest(**request_dict)
277
+ session_message = SessionMessage(message=JSONRPCMessage(request))
278
+ await self.write_stream.send(session_message)
279
+
280
+ # Read response
281
+ response_message = await self.read_stream.receive()
282
+
283
+ if hasattr(response_message.message.root, "error"):
284
+ error = response_message.message.root.error
285
+ raise Exception(f"MCP error: {error}")
286
+
287
+ if hasattr(response_message.message.root, "result"):
288
+ return response_message.message.root.result
289
+
290
+ raise Exception(f"Unexpected response format: {response_message}")
291
+
292
+ async def _send_initialized_notification(self):
293
+ """Send initialized notification via StreamableHTTP."""
294
+ from mcp.shared.message import SessionMessage # type: ignore[import-untyped]
295
+ from mcp.types import JSONRPCMessage, JSONRPCNotification # type: ignore[import-untyped]
296
+
297
+ if not self.write_stream:
298
+ raise RuntimeError("StreamableHTTP write stream not initialized")
299
+
300
+ notification = JSONRPCNotification(
301
+ jsonrpc="2.0",
302
+ method="notifications/initialized",
303
+ )
304
+
305
+ session_message = SessionMessage(message=JSONRPCMessage(notification))
306
+ await self.write_stream.send(session_message)
307
+
308
+ async def close(self):
309
+ """Close the StreamableHTTP connection."""
310
+ if self._transport_context:
311
+ try:
312
+ await self._transport_context.__aexit__(None, None, None)
313
+ logger.info("StreamableHTTP connection closed")
314
+ except Exception as e:
315
+ logger.warning(f"Error closing StreamableHTTP connection: {e}")
316
+
317
+
318
+ def create_mcp_client(
319
+ server_params: Any = None,
320
+ remote_url: str | None = None,
321
+ remote_transport: str = "sse",
322
+ remote_headers: dict[str, str] | None = None,
323
+ remote_timeout: float = 30,
324
+ sse_read_timeout: float = 300,
325
+ ) -> BaseMCPClient:
326
+ """
327
+ Factory function to create the appropriate MCP client.
328
+
329
+ Args:
330
+ server_params: StdioServerParameters for local server
331
+ remote_url: URL for remote server
332
+ remote_transport: "sse" or "streamable_http"
333
+ remote_headers: HTTP headers for remote connections
334
+ remote_timeout: Timeout for HTTP operations
335
+ sse_read_timeout: Timeout for SSE streaming
336
+
337
+ Returns:
338
+ BaseMCPClient instance (Stdio, SSE, or StreamableHTTP)
339
+
340
+ Raises:
341
+ ValueError: If configuration is invalid
342
+ """
343
+ if server_params and remote_url:
344
+ raise ValueError("Provide either server_params (local) or remote_url (remote), not both")
345
+ if not server_params and not remote_url:
346
+ raise ValueError("Must provide either server_params (local) or remote_url (remote)")
347
+
348
+ if server_params:
349
+ return StdioMCPClient(command=server_params.command, args=server_params.args)
350
+ elif remote_url: # Type guard ensures remote_url is not None
351
+ if remote_transport == "sse":
352
+ return SSEMCPClient(url=remote_url, headers=remote_headers, timeout=remote_timeout)
353
+ elif remote_transport == "streamable_http":
354
+ return StreamableHTTPMCPClient(
355
+ url=remote_url,
356
+ headers=remote_headers,
357
+ timeout=remote_timeout,
358
+ sse_read_timeout=sse_read_timeout,
359
+ )
360
+ else:
361
+ raise ValueError(f"Unknown remote transport: {remote_transport}. Must be 'sse' or 'streamable_http'")
362
+ else:
363
+ # This should never happen due to earlier checks
364
+ raise ValueError("Must provide either server_params (local) or remote_url (remote)")