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.
- package/README.md +23 -0
- package/dist/archive-artifacts-cli.d.ts +50 -0
- package/dist/archive-artifacts-cli.d.ts.map +1 -0
- package/dist/artifact-archive.d.ts +48 -0
- package/dist/artifact-archive.d.ts.map +1 -0
- package/dist/artifact-pull.d.ts +22 -0
- package/dist/artifact-pull.d.ts.map +1 -0
- package/dist/banner.d.ts +3 -0
- package/dist/banner.d.ts.map +1 -0
- package/dist/connectors-cli.d.ts +31 -0
- package/dist/connectors-cli.d.ts.map +1 -0
- package/dist/credentials.d.ts +46 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/csv.d.ts +49 -0
- package/dist/csv.d.ts.map +1 -0
- package/dist/dataset-download.d.ts +6 -0
- package/dist/dataset-download.d.ts.map +1 -0
- package/dist/dataset-edit-rows.d.ts +10 -0
- package/dist/dataset-edit-rows.d.ts.map +1 -0
- package/dist/dataset-upload-snapshot.d.ts +13 -0
- package/dist/dataset-upload-snapshot.d.ts.map +1 -0
- package/dist/daytona-slice-rehearsal.d.ts +89 -0
- package/dist/daytona-slice-rehearsal.d.ts.map +1 -0
- package/dist/daytona-slice.d.ts +106 -0
- package/dist/daytona-slice.d.ts.map +1 -0
- package/dist/deploy-key-merge-core.d.ts +121 -0
- package/dist/deploy-key-merge-core.d.ts.map +1 -0
- package/dist/diff-comments-cli.d.ts +12 -0
- package/dist/diff-comments-cli.d.ts.map +1 -0
- package/dist/diff-comments-cli.js +21 -2
- package/dist/egress-allowlist-cli.d.ts +23 -0
- package/dist/egress-allowlist-cli.d.ts.map +1 -0
- package/dist/egress-policy.d.ts +108 -0
- package/dist/egress-policy.d.ts.map +1 -0
- package/dist/error-response.d.ts +9 -0
- package/dist/error-response.d.ts.map +1 -0
- package/dist/file-parser.d.ts +5 -0
- package/dist/file-parser.d.ts.map +1 -0
- package/dist/gepa-engine-dispatch.d.ts +9 -0
- package/dist/gepa-engine-dispatch.d.ts.map +1 -0
- package/dist/gepa-engine-dispatch.js +307 -0
- package/dist/gepa-python-command.d.ts +6 -0
- package/dist/gepa-python-command.d.ts.map +1 -0
- package/dist/gepa-python-command.js +26 -0
- package/dist/gepa-python-paths.d.ts +6 -0
- package/dist/gepa-python-paths.d.ts.map +1 -0
- package/dist/gepa-python-paths.js +42 -0
- package/dist/git-credential.d.ts +69 -0
- package/dist/git-credential.d.ts.map +1 -0
- package/dist/git-recovery-environment.d.ts +31 -0
- package/dist/git-recovery-environment.d.ts.map +1 -0
- package/dist/github-setup.d.ts +122 -0
- package/dist/github-setup.d.ts.map +1 -0
- package/dist/global-flags.d.ts +12 -0
- package/dist/global-flags.d.ts.map +1 -0
- package/dist/help.d.ts +46 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +93 -25
- package/dist/hosted-boot.d.ts +273 -0
- package/dist/hosted-boot.d.ts.map +1 -0
- package/dist/hosted-bootstrap-rehearsal.d.ts +86 -0
- package/dist/hosted-bootstrap-rehearsal.d.ts.map +1 -0
- package/dist/hosted-bootstrap.d.ts +188 -0
- package/dist/hosted-bootstrap.d.ts.map +1 -0
- package/dist/hosted-broker-server.d.ts +50 -0
- package/dist/hosted-broker-server.d.ts.map +1 -0
- package/dist/hosted-git-http-server.d.ts +36 -0
- package/dist/hosted-git-http-server.d.ts.map +1 -0
- package/dist/hosted-harness-claude.d.ts +195 -0
- package/dist/hosted-harness-claude.d.ts.map +1 -0
- package/dist/hosted-harness-opencode.d.ts +227 -0
- package/dist/hosted-harness-opencode.d.ts.map +1 -0
- package/dist/hosted-harness.d.ts +118 -0
- package/dist/hosted-harness.d.ts.map +1 -0
- package/dist/hosted-harvest.d.ts +68 -0
- package/dist/hosted-harvest.d.ts.map +1 -0
- package/dist/hosted-headless.d.ts +72 -0
- package/dist/hosted-headless.d.ts.map +1 -0
- package/dist/hosted-loop-lifecycle.d.ts +206 -0
- package/dist/hosted-loop-lifecycle.d.ts.map +1 -0
- package/dist/hosted-loop.d.ts +170 -0
- package/dist/hosted-loop.d.ts.map +1 -0
- package/dist/hosted-run-event-sink.d.ts +222 -0
- package/dist/hosted-run-event-sink.d.ts.map +1 -0
- package/dist/hosted-runtime-assets.d.ts +186 -0
- package/dist/hosted-runtime-assets.d.ts.map +1 -0
- package/dist/hosted-session-cli.d.ts +258 -0
- package/dist/hosted-session-cli.d.ts.map +1 -0
- package/dist/hosted-skill-staging.d.ts +73 -0
- package/dist/hosted-skill-staging.d.ts.map +1 -0
- package/dist/http.d.ts +8 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +119 -129
- package/dist/instruction-set-gepa-launch.d.ts +3 -0
- package/dist/instruction-set-gepa-launch.d.ts.map +1 -0
- package/dist/instruction-set-gepa-launch.js +15 -0
- package/dist/instruction-set-loader.d.ts +6 -0
- package/dist/instruction-set-loader.d.ts.map +1 -0
- package/dist/instruction-set-loader.js +59 -0
- package/dist/instruction-set-manifest.d.ts +14 -0
- package/dist/instruction-set-manifest.d.ts.map +1 -0
- package/dist/instruction-set-manifest.js +162 -0
- package/dist/instruction-sets-cli.d.ts +40 -0
- package/dist/instruction-sets-cli.d.ts.map +1 -0
- package/dist/instruction-sets-cli.js +361 -0
- package/dist/json-response.d.ts +4 -0
- package/dist/json-response.d.ts.map +1 -0
- package/dist/jsonl-stream.d.ts +8 -0
- package/dist/jsonl-stream.d.ts.map +1 -0
- package/dist/kill-switch-cli.d.ts +30 -0
- package/dist/kill-switch-cli.d.ts.map +1 -0
- package/dist/loopback-serve.d.ts +25 -0
- package/dist/loopback-serve.d.ts.map +1 -0
- package/dist/manifests-cli.d.ts +22 -0
- package/dist/manifests-cli.d.ts.map +1 -0
- package/dist/markdown-report-input.d.ts +7 -0
- package/dist/markdown-report-input.d.ts.map +1 -0
- package/dist/markdown-report-input.js +15 -1
- package/dist/merge-job.d.ts +155 -0
- package/dist/merge-job.d.ts.map +1 -0
- package/dist/model-configs-cli.d.ts +19 -0
- package/dist/model-configs-cli.d.ts.map +1 -0
- package/dist/model-configs-cli.js +104 -0
- package/dist/optimization-export-cli.d.ts +19 -0
- package/dist/optimization-export-cli.d.ts.map +1 -0
- package/dist/optimizations-list-cli.d.ts +20 -0
- package/dist/optimizations-list-cli.d.ts.map +1 -0
- package/dist/optimizations-promote-cli.d.ts +8 -0
- package/dist/optimizations-promote-cli.d.ts.map +1 -0
- package/dist/optimizations-promote-cli.js +34 -0
- package/dist/option-validation.d.ts +15 -0
- package/dist/option-validation.d.ts.map +1 -0
- package/dist/preview-runtime.d.ts +63 -0
- package/dist/preview-runtime.d.ts.map +1 -0
- package/dist/prompt-draft-push.d.ts +60 -0
- package/dist/prompt-draft-push.d.ts.map +1 -0
- package/dist/prompt-label-cli.d.ts +11 -0
- package/dist/prompt-label-cli.d.ts.map +1 -0
- package/dist/prompt-label-cli.js +29 -0
- package/dist/prompt-length-wire.d.ts +28 -0
- package/dist/prompt-length-wire.d.ts.map +1 -0
- package/dist/prompt-length-wire.js +2 -2
- package/dist/prompt-report-cli.d.ts +10 -0
- package/dist/prompt-report-cli.d.ts.map +1 -0
- package/dist/prompt-report-cli.js +2 -2
- package/dist/prompt-summary-table.d.ts +15 -0
- package/dist/prompt-summary-table.d.ts.map +1 -0
- package/dist/prompt-summary-table.js +6 -0
- package/dist/registration-tag-warning.d.ts +32 -0
- package/dist/registration-tag-warning.d.ts.map +1 -0
- package/dist/report-comments-cli.d.ts +16 -0
- package/dist/report-comments-cli.d.ts.map +1 -0
- package/dist/report-markdown-blankness.d.ts +2 -0
- package/dist/report-markdown-blankness.d.ts.map +1 -0
- package/dist/report-markdown-blankness.js +6 -0
- package/dist/report-replacement-warning.d.ts +17 -0
- package/dist/report-replacement-warning.d.ts.map +1 -0
- package/dist/report-replacement-warning.js +31 -0
- package/dist/repository-backup-core.d.ts +225 -0
- package/dist/repository-backup-core.d.ts.map +1 -0
- package/dist/repository-recovery-manifest.d.ts +83 -0
- package/dist/repository-recovery-manifest.d.ts.map +1 -0
- package/dist/run-event-digest.d.ts +74 -0
- package/dist/run-event-digest.d.ts.map +1 -0
- package/dist/runner-dir-verify.d.ts +66 -0
- package/dist/runner-dir-verify.d.ts.map +1 -0
- package/dist/runner-instruction-set-contract.d.ts +24 -0
- package/dist/runner-instruction-set-contract.d.ts.map +1 -0
- package/dist/runner-instruction-set-contract.js +50 -0
- package/dist/sandbox-hygiene.d.ts +45 -0
- package/dist/sandbox-hygiene.d.ts.map +1 -0
- package/dist/sandbox-provider.d.ts +193 -0
- package/dist/sandbox-provider.d.ts.map +1 -0
- package/dist/scorer-draft-push.d.ts +50 -0
- package/dist/scorer-draft-push.d.ts.map +1 -0
- package/dist/scorers-cli.d.ts +20 -0
- package/dist/scorers-cli.d.ts.map +1 -0
- package/dist/scorers-cli.js +22 -0
- package/dist/scorers-verify-parity-bridge.d.ts +16 -0
- package/dist/scorers-verify-parity-bridge.d.ts.map +1 -0
- package/dist/scorers-verify-parity-bridge.js +90 -0
- package/dist/scorers-verify-parity.d.ts +81 -0
- package/dist/scorers-verify-parity.d.ts.map +1 -0
- package/dist/scorers-verify-parity.js +502 -0
- package/dist/scores-accept-cli.d.ts +21 -0
- package/dist/scores-accept-cli.d.ts.map +1 -0
- package/dist/secret-redaction.d.ts +47 -0
- package/dist/secret-redaction.d.ts.map +1 -0
- package/dist/session-timeline.d.ts +54 -0
- package/dist/session-timeline.d.ts.map +1 -0
- package/dist/setup-prompt.d.ts +5 -0
- package/dist/setup-prompt.d.ts.map +1 -0
- package/dist/skill-installer.d.ts +68 -0
- package/dist/skill-installer.d.ts.map +1 -0
- package/dist/skilled-proposer-launch.d.ts +7 -0
- package/dist/skilled-proposer-launch.d.ts.map +1 -0
- package/dist/skilled-proposer-launch.js +60 -0
- package/dist/smoke.d.ts +102 -0
- package/dist/smoke.d.ts.map +1 -0
- package/dist/start-intent.d.ts +12 -0
- package/dist/start-intent.d.ts.map +1 -0
- package/dist/task-assignment-manifest.d.ts +15 -0
- package/dist/task-assignment-manifest.d.ts.map +1 -0
- package/dist/task-create-error.d.ts +18 -0
- package/dist/task-create-error.d.ts.map +1 -0
- package/dist/team-connectors-cli.d.ts +29 -0
- package/dist/team-connectors-cli.d.ts.map +1 -0
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/vercel-sandbox-provider.d.ts +156 -0
- package/dist/vercel-sandbox-provider.d.ts.map +1 -0
- package/dist/workbench-cli.d.ts +233 -0
- package/dist/workbench-cli.d.ts.map +1 -0
- package/dist/workspace-sync.d.ts +207 -0
- package/dist/workspace-sync.d.ts.map +1 -0
- package/dist/workspace.d.ts +92 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/zip-draft-push.d.ts +55 -0
- package/dist/zip-draft-push.d.ts.map +1 -0
- package/package.json +15 -2
- package/requirements/README.md +138 -0
- package/requirements/skilled-proposer.in +66 -0
- package/requirements/skilled-proposer.lock +265 -0
- package/scripts/build-cli-dist.mjs +30 -0
- package/scripts/ensure-skilled-proposer-venv.mjs +5 -0
- package/scripts/orizu-source-checkout.d.mts +1 -0
- package/scripts/orizu-source-checkout.mjs +10 -0
- package/scripts/refresh-skilled-proposer-lock.mjs +256 -0
- package/scripts/vendor-gepa-python.mjs +187 -4
- package/src/diff-comments-cli.ts +41 -3
- package/src/gepa-engine-dispatch.ts +340 -0
- package/src/gepa-python-command.ts +31 -0
- package/src/gepa-python-paths.ts +56 -0
- package/src/help.ts +95 -25
- package/src/index.ts +131 -166
- package/src/instruction-set-gepa-launch.ts +28 -0
- package/src/instruction-set-loader.ts +37 -0
- package/src/instruction-set-manifest.ts +120 -0
- package/src/instruction-sets-cli.ts +306 -0
- package/src/markdown-report-input.ts +19 -1
- package/src/model-configs-cli.ts +119 -0
- package/src/optimizations-promote-cli.ts +41 -0
- package/src/prompt-label-cli.ts +55 -0
- package/src/prompt-length-wire.ts +1 -1
- package/src/prompt-report-cli.ts +2 -2
- package/src/prompt-summary-table.ts +12 -0
- package/src/report-markdown-blankness.ts +6 -0
- package/src/report-replacement-warning.ts +35 -0
- package/src/runner-instruction-set-contract.ts +64 -0
- package/src/scorers-cli.ts +40 -0
- package/src/scorers-verify-parity-bridge.ts +90 -0
- package/src/scorers-verify-parity.ts +564 -0
- package/src/skilled-proposer-launch.ts +89 -0
- package/src/skilled-proposer-venv-manager.mjs +757 -0
- package/tsconfig.json +2 -0
- package/vendor/gepa-python/LICENSE +7 -0
- package/vendor/gepa-python/manifest.json +107 -0
- package/vendor/gepa-python/src/gepa/__init__.py +22 -0
- package/vendor/gepa-python/src/gepa/adapters/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/__init__.py +1 -0
- package/vendor/gepa-python/src/gepa/adapters/anymaths_adapter/anymaths_adapter.py +174 -0
- package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/__init__.py +26 -0
- package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/confidence_adapter.py +618 -0
- package/vendor/gepa-python/src/gepa/adapters/confidence_adapter/scoring.py +206 -0
- package/vendor/gepa-python/src/gepa/adapters/default_adapter/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/adapters/default_adapter/default_adapter.py +206 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/dspy_adapter.py +525 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_adapter/instruction_proposal.py +500 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/__init__.py +6 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/dspy_program_proposal_signature.py +137 -0
- package/vendor/gepa-python/src/gepa/adapters/dspy_full_program_adapter/full_program_adapter.py +269 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/__init__.py +56 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/evaluation_metrics.py +226 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/generic_rag_adapter.py +496 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/rag_pipeline.py +238 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_store_interface.py +212 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/__init__.py +2 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/chroma_store.py +196 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/lancedb_store.py +422 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/milvus_store.py +409 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/qdrant_store.py +368 -0
- package/vendor/gepa-python/src/gepa/adapters/generic_rag_adapter/vector_stores/weaviate_store.py +418 -0
- package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/__init__.py +11 -0
- package/vendor/gepa-python/src/gepa/adapters/langchain_adapter/langchain_adapter.py +261 -0
- package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/__init__.py +37 -0
- package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_adapter.py +693 -0
- package/vendor/gepa-python/src/gepa/adapters/mcp_adapter/mcp_client.py +364 -0
- package/vendor/gepa-python/src/gepa/adapters/optimize_anything_adapter/optimize_anything_adapter.py +879 -0
- package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/adapters/terminal_bench_adapter/terminal_bench_adapter.py +217 -0
- package/vendor/gepa-python/src/gepa/api.py +468 -0
- package/vendor/gepa-python/src/gepa/core/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/core/adapter.py +227 -0
- package/vendor/gepa-python/src/gepa/core/callbacks.py +551 -0
- package/vendor/gepa-python/src/gepa/core/data_loader.py +74 -0
- package/vendor/gepa-python/src/gepa/core/engine.py +1025 -0
- package/vendor/gepa-python/src/gepa/core/result.py +271 -0
- package/vendor/gepa-python/src/gepa/core/state.py +706 -0
- package/vendor/gepa-python/src/gepa/examples/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/examples/aime.py +24 -0
- package/vendor/gepa-python/src/gepa/examples/anymaths-bench/eval_default.py +111 -0
- package/vendor/gepa-python/src/gepa/examples/anymaths-bench/train_anymaths.py +177 -0
- package/vendor/gepa-python/src/gepa/examples/mcp_adapter/__init__.py +4 -0
- package/vendor/gepa-python/src/gepa/examples/mcp_adapter/mcp_optimization_example.py +456 -0
- package/vendor/gepa-python/src/gepa/examples/rag_adapter/__init__.py +9 -0
- package/vendor/gepa-python/src/gepa/examples/rag_adapter/rag_optimization.py +824 -0
- package/vendor/gepa-python/src/gepa/examples/terminal-bench/train_terminus.py +161 -0
- package/vendor/gepa-python/src/gepa/gepa_utils.py +117 -0
- package/vendor/gepa-python/src/gepa/gskill/__init__.py +1 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/cost_tracker.py +194 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code.py +1117 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/claude_code_skills.py +613 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/evaluate/mini_swe_agent.py +440 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/experiment_logger.py +367 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/swe_fitness_fn.py +209 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/swe_harness.py +352 -0
- package/vendor/gepa-python/src/gepa/gskill/gskill/train_optimize_anything.py +830 -0
- package/vendor/gepa-python/src/gepa/image.py +104 -0
- package/vendor/gepa-python/src/gepa/lm.py +261 -0
- package/vendor/gepa-python/src/gepa/logging/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/logging/experiment_tracker.py +457 -0
- package/vendor/gepa-python/src/gepa/logging/logger.py +75 -0
- package/vendor/gepa-python/src/gepa/logging/utils.py +130 -0
- package/vendor/gepa-python/src/gepa/optimize_anything.py +1701 -0
- package/vendor/gepa-python/src/gepa/proposer/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/proposer/base.py +53 -0
- package/vendor/gepa-python/src/gepa/proposer/merge.py +403 -0
- package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/base.py +64 -0
- package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflection_lm.py +178 -0
- package/vendor/gepa-python/src/gepa/proposer/reflective_mutation/reflective_mutation.py +641 -0
- package/vendor/gepa-python/src/gepa/py.typed +0 -0
- package/vendor/gepa-python/src/gepa/strategies/__init__.py +0 -0
- package/vendor/gepa-python/src/gepa/strategies/acceptance.py +66 -0
- package/vendor/gepa-python/src/gepa/strategies/batch_sampler.py +103 -0
- package/vendor/gepa-python/src/gepa/strategies/candidate_selector.py +82 -0
- package/vendor/gepa-python/src/gepa/strategies/component_selector.py +36 -0
- package/vendor/gepa-python/src/gepa/strategies/eval_policy.py +64 -0
- package/vendor/gepa-python/src/gepa/strategies/instruction_proposal.py +153 -0
- package/vendor/gepa-python/src/gepa/strategies/proposal_sampling.py +128 -0
- package/vendor/gepa-python/src/gepa/strategies/proposal_selection.py +84 -0
- package/vendor/gepa-python/src/gepa/utils/__init__.py +63 -0
- package/vendor/gepa-python/src/gepa/utils/code_execution.py +626 -0
- package/vendor/gepa-python/src/gepa/utils/stdio_capture.py +145 -0
- package/vendor/gepa-python/src/gepa/utils/stop_condition.py +230 -0
- package/vendor/gepa-python/src/gepa/visualization.py +359 -0
- package/vendor/orizu-gepa/pyproject.toml +18 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/__init__.py +9 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/__main__.py +5 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/adapter.py +138 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/callbacks.py +666 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/cli.py +7 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/engine.py +269 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +52 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/preflight.py +64 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/reflection.py +186 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/runtime.py +721 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/skilled_proposer_bridge.py +381 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/stop_conditions.py +55 -0
- package/vendor/orizu-gepa/src/orizu_gepa_connector/translator.py +203 -0
- package/vendor/orizu-gepa-python/pyproject.toml +1 -1
- package/vendor/orizu-gepa-python/src/orizu_gepa/cli.py +1 -0
- package/vendor/orizu-gepa-python/src/orizu_gepa/client.py +52 -7
- package/vendor/orizu-gepa-python/src/orizu_gepa/local_log.py +52 -0
- package/vendor/orizu-gepa-python/src/orizu_gepa/optimizer.py +10 -5
- package/vendor/orizu-gepa-python/src/orizu_gepa/reflection.py +323 -68
- package/vendor/orizu-gepa-python/src/orizu_gepa/runner.py +207 -13
- package/vendor/skills/orizu-cli/SKILL.md +3 -1
- package/vendor/skills/orizu-cli/references/cli-reference.md +85 -1
- package/vendor/skills/orizu-cli/references/migrate-existing-gepa-setup.md +303 -0
- package/vendor/skills/orizu-cli/references/optimization-reports.md +1 -1
- package/vendor/skills/orizu-cli/references/optimization-with-gepa.md +26 -1
- 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)")
|