minima-cli 0.9.0__tar.gz → 0.11.0__tar.gz
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.
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.env.example +0 -16
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/prod.yml +2 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/CHANGELOG.md +91 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/CLAUDE.md +3 -3
- {minima_cli-0.9.0 → minima_cli-0.11.0}/PKG-INFO +4 -7
- {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/__init__.py +2 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/autocapture.py +1 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/client.py +26 -2
- minima_cli-0.11.0/client_sdk/minima_client/integrations/__init__.py +6 -0
- minima_cli-0.11.0/client_sdk/minima_client/integrations/claude_code.py +124 -0
- minima_cli-0.11.0/client_sdk/minima_client/integrations/litellm_router.py +203 -0
- minima_cli-0.11.0/client_sdk/minima_client/integrations/openhands_router.py +99 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/client-sdk.md +41 -8
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/configuration.md +0 -20
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/ground-truth-build-guide.md +1 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/package.json +1 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/loop.ts +19 -10
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/faux.ts +18 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/cli/main.ts +26 -6
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/minima_db.ts +261 -38
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/budget.ts +20 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/check.ts +86 -16
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/client.ts +2 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/confidence.ts +1 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/config.ts +27 -4
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/ground_truth.ts +349 -63
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/gt_contract.ts +6 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/index.ts +2 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/judge.ts +18 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/meter.ts +18 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/plan_council.ts +175 -57
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/plan_session.ts +64 -13
- minima_cli-0.11.0/packages/tui/src/minima/plan_turn.ts +165 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/router.ts +19 -10
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/runtime.ts +79 -29
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/schemas.ts +50 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/spawn.ts +25 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/why.ts +36 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/bash.ts +6 -5
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/app.tsx +222 -159
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/layout.ts +102 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/permissions.ts +39 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/text-input.tsx +13 -4
- minima_cli-0.11.0/packages/tui/tests/bash-group.test.ts +56 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/behavior.test.ts +90 -9
- minima_cli-0.11.0/packages/tui/tests/check.test.ts +346 -0
- minima_cli-0.11.0/packages/tui/tests/config_env.test.ts +62 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/db.test.ts +3 -2
- minima_cli-0.11.0/packages/tui/tests/db_migrate.test.ts +122 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/feedback-grounded.test.ts +70 -8
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gate.test.ts +125 -19
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ground_truth.test.ts +85 -5
- minima_cli-0.11.0/packages/tui/tests/grounded.test.ts +307 -0
- minima_cli-0.11.0/packages/tui/tests/gt-attribution.test.ts +206 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-e2e.test.ts +44 -48
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-footer.test.ts +26 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/hooks.test.ts +22 -0
- minima_cli-0.11.0/packages/tui/tests/judge-cost-booking.test.ts +219 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/judge.test.ts +31 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ladder.test.ts +18 -10
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/layout.test.ts +161 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/minima.test.ts +48 -8
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/minima_memory.test.ts +1 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/permissions.test.ts +91 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/plan_council.test.ts +330 -17
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/plan_session.test.ts +182 -8
- minima_cli-0.11.0/packages/tui/tests/plan_turn.test.ts +218 -0
- minima_cli-0.11.0/packages/tui/tests/resume-gt.test.ts +116 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/pyproject.toml +5 -5
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/feedback.py +158 -35
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/health.py +0 -4
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/savings.py +25 -1
- minima_cli-0.11.0/src/minima/catalog/data/benchmark_priors.json +223 -0
- minima_cli-0.11.0/src/minima/catalog/data/model_aliases.json +37 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/store.py +45 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/config.py +19 -109
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/main.py +13 -6
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/adapter.py +44 -50
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/keys.py +6 -4
- minima_cli-0.11.0/src/minima/memory/records.py +326 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/calibration.py +28 -29
- minima_cli-0.11.0/src/minima/metrics/ope.py +145 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/aggregate.py +30 -25
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/decisionlog.py +52 -10
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/engine.py +117 -368
- minima_cli-0.11.0/src/minima/recommender/escalation.py +57 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/score.py +0 -57
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/types.py +25 -25
- minima_cli-0.11.0/src/minima/schemas/feedback.py +73 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/recommend.py +15 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/savings.py +16 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/routerbench.py +28 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/run_seed.py +9 -3
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/synthetic.py +2 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/passthrough.py +0 -8
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/conftest.py +7 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/harness.py +2 -8
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/factories.py +5 -48
- minima_cli-0.11.0/tests/integration/test_feedback_loop.py +418 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_measurement_api.py +66 -38
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_observed_cost_ranking.py +4 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_recommend_api.py +21 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_escalation_fixes.py +1 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_full_surface_live.py +5 -15
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_mubit_roundtrip.py +10 -2
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_recall_params_live.py +1 -0
- minima_cli-0.11.0/tests/unit/test_accumulating_records.py +140 -0
- minima_cli-0.11.0/tests/unit/test_adapters.py +225 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_calibration_fit.py +1 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_escalation.py +0 -56
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_latency_quality.py +1 -17
- minima_cli-0.11.0/tests/unit/test_lookup_parse.py +54 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_metrics.py +2 -1
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_metrics_demo.py +1 -29
- minima_cli-0.11.0/tests/unit/test_ope.py +141 -0
- minima_cli-0.11.0/tests/unit/test_records_catalog.py +193 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_recstore_sqlite.py +0 -23
- minima_cli-0.11.0/tests/unit/test_sdk_usage.py +39 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_store_backends.py +0 -65
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_tenancy.py +0 -14
- minima_cli-0.11.0/tests/unit/test_ts_mirror.py +50 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/uv.lock +2032 -283
- minima_cli-0.9.0/packages/tui/tests/check.test.ts +0 -173
- minima_cli-0.9.0/packages/tui/tests/grounded.test.ts +0 -194
- minima_cli-0.9.0/src/minima/catalog/data/model_aliases.json +0 -12
- minima_cli-0.9.0/src/minima/llm/__init__.py +0 -1
- minima_cli-0.9.0/src/minima/llm/anthropic.py +0 -106
- minima_cli-0.9.0/src/minima/llm/base.py +0 -202
- minima_cli-0.9.0/src/minima/llm/gemini.py +0 -130
- minima_cli-0.9.0/src/minima/llm/registry.py +0 -54
- minima_cli-0.9.0/src/minima/memory/records.py +0 -190
- minima_cli-0.9.0/src/minima/recommender/escalation.py +0 -100
- minima_cli-0.9.0/src/minima/recommender/propensity.py +0 -189
- minima_cli-0.9.0/src/minima/schemas/feedback.py +0 -43
- minima_cli-0.9.0/tests/integration/test_escalation_reasoner.py +0 -147
- minima_cli-0.9.0/tests/integration/test_feedback_loop.py +0 -166
- minima_cli-0.9.0/tests/live/test_reasoner_live.py +0 -135
- minima_cli-0.9.0/tests/unit/test_collapse_guard.py +0 -161
- minima_cli-0.9.0/tests/unit/test_exploration.py +0 -56
- minima_cli-0.9.0/tests/unit/test_ipw.py +0 -48
- minima_cli-0.9.0/tests/unit/test_lever_cost.py +0 -67
- minima_cli-0.9.0/tests/unit/test_reasoner.py +0 -132
- minima_cli-0.9.0/tests/unit/test_records_catalog.py +0 -108
- minima_cli-0.9.0/tests/unit/test_shadow_bandit.py +0 -74
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.dockerignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/catalog-snapshot.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/ci.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/release-cli.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/staging.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/AGENTS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/Dockerfile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/LICENSE +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/Makefile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/assert/check.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/assert/db.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/env.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/headless.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/mock_server.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/rig.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/scratch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/_example/mathx.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/_example/tests/test_public.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/csv.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/object.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/stats.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/transform.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/csv.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/object.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/stats.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/transform.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/chunk.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/droot.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/duration.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/wrap.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/checksum.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/intervals.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/rle.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/roman.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/chunk/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/droot/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/duration/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/wrap/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/conftest.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_checksum_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_intervals_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_rle_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_roman_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/brackets/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/drift/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/ordinal/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/slug/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/brackets.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/drift.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/ordinal.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/slug.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/pytest.ini +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/__main__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/cli.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/dates.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/migrations.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/query.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/storage.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/conftest.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_cli.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_dates.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_query.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_storage.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/app.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/auth.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/errors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/admin.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/links.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/notes.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/stats.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/persist.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/ratelimit.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/respond.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/router.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/server.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/validate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/auth.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/health.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/helpers.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/links.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/notes.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/persist.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/ratelimit.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/router.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/stats.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/store.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/validate.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f10_recovery_ladder.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f12_learning_loop.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f1_headless.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f4_cost_budget.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f5_task_dag_worktree.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f6_resume_lineage.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f7_permissions_plan.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f9_offline_reconnect.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/attempt.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/build_index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibrate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibrate_all.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibration_report.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/materialize.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/savings_ab.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/savings_report.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/validate_task.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/run.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/calibration.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/savings_ab.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/errors.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/agent-core-architecture.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/agent-core-implementation-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/api-reference.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/concepts.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/examples.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/feature-gap-analysis.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/getting-started.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/goals-feature-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/ground-truth-tui-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/harness.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/multi-tenancy.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/operations.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/publishing.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/seeding.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/.dockerignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/Dockerfile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Accordion.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Badge.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Card.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/CardGroup.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Frame.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Note.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/PageHeader.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Steps.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Tabs.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/sidebar.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/netlify.toml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/nginx.conf +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/package-lock.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/api-reference/endpoints.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/cli.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/configuration.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/installation.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/interactive.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/overview.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/routing.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/sessions.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/tools.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/troubleshooting.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/index.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/client-sdk.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/concepts.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/examples.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/getting-started.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/favicon.png +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/logo-dark.svg +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/logo-light.svg +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/styles/global.css +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/vocs.config.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/01_quickstart.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/02_recommend_and_feedback.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/03_constraints_and_tradeoff.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/04_workflow.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/05_autocapture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/06_routed_llm_call.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/07_multitenant_admin.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_escalation.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_escalation_learn.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_gemini.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_retention.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_warmup.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_warmup_vary.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/metrics_demo.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/smoke_test.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/maybe.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/maybe.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/biome.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/bun.lock +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/build-all.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/build.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/install.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/pty_capture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/stub-devtools.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/agent.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/events.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/state.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/tools.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/compat.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/events.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/provider_catalog.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/provider_quirks.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/_common.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/anthropic.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/base.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/google.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/openai_compat.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/registry.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/stream.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/usage.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/metrics.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/rehydrate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/sink.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/errtext.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/behavior.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/catalog.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/errors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/gt_factors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/mapping.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/memory.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/mubit_memory_factory.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/run_modes.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/session/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/session/store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_ddg.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_exa.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_io.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_search.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/apply_patch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/at_mentions.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/builtin.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/edit.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/glob.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/grep.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/ls.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/question.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/read.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/schema.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/task.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/todowrite.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/web_fetch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/web_search.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/write.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/auth.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/busy.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/child_tree.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/compact.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/config_store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/context.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/current_action.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/messages.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/model-picker.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/mouse-scroll.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/projects.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/routing-warnings.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/status.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/tips.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/types.d.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/version.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/agent.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ai.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/anthropic.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/apply_patch.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/auth.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/budget.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/busy.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/candidate-filter.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/catalog.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/client.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/confidence.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/config_store.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/current_action.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/effort.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/error-ux.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/google.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-contract.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt_factors.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/isolation.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/memory.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/mouse-scroll.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/openai_compat.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/recall-user-id.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/render-buffer.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/run_modes.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/session.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/spawn.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/task.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/thinking.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/tips.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/tools.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/why.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packaging/homebrew/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/packaging/homebrew/render_formula.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/_manifest.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/calibration.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/feedback.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/health.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/models.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/recommend.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/savings.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/strategies.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/workflow.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/results.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/eval/classify_dataset.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/eval/eval_classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing-web.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/auth.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/errors.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/calibration.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/recommend.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/data/capability_priors.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/merge.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/refresh.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/litellm.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/openrouter.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/deps.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/logging.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/threadpool.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/_pg_pool.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/_redis_client.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/durablerefs.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/recstore.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/common.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/models_catalog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/workflow.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/items.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/llmrouterbench.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/context.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/version.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/BENCHMARKS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/CRITERIA.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/RESULTS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/llmrouterbench_config.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/prompt_length_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/test_routerbench_savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_auth.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_lesson_promotion.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_strategies_api.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_workflow_models_health.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_phase3_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_aggregate.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_aggregate_decay.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_autocapture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_classify_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_classify_keys.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_cluster.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_cost_band.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_decisionlog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_iterations.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_neighbor_classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_prompt_length_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_score.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_thompson.py +0 -0
|
@@ -77,21 +77,6 @@ MINIMA_LATENCY_MIN_N=3
|
|
|
77
77
|
# Affects the "estimate" cost basis only.
|
|
78
78
|
MINIMA_DIFFICULTY_OUTPUT_MULTIPLIERS={"trivial": 0.5, "easy": 0.75, "medium": 1.0, "hard": 1.5, "expert": 2.0}
|
|
79
79
|
|
|
80
|
-
# --- Cheap-LLM reasoner (recommend-only); set provider=anthropic|gemini + the matching key ---
|
|
81
|
-
# Requires the provider extra: `uv sync --extra reasoner-anthropic` and/or `--extra reasoner-gemini`.
|
|
82
|
-
MINIMA_REASONER_PROVIDER=none
|
|
83
|
-
MINIMA_REASONER_MODEL=
|
|
84
|
-
MINIMA_REASONER_TIMEOUT_MS=15000
|
|
85
|
-
# Output cap. Gemini 3.x reasons before emitting JSON; <4096 can truncate the response.
|
|
86
|
-
MINIMA_REASONER_MAX_TOKENS=4096
|
|
87
|
-
MINIMA_REASONER_BLEND=0.5
|
|
88
|
-
# Adaptive blend: weight the LLM's estimate by how thin the deterministic evidence is
|
|
89
|
-
# (cold candidates lean on the LLM; well-evidenced ones barely move). false = fixed blend.
|
|
90
|
-
MINIMA_REASONER_BLEND_ADAPTIVE=true
|
|
91
|
-
MINIMA_REASONER_BLEND_MAX=0.8
|
|
92
|
-
MINIMA_REASONER_CLASSIFY=true
|
|
93
|
-
ANTHROPIC_API_KEY=
|
|
94
|
-
GEMINI_API_KEY=
|
|
95
80
|
|
|
96
81
|
# --- Selection-bias correction (inverse propensity weighting) ---
|
|
97
82
|
MINIMA_IPW_ENABLED=true
|
|
@@ -114,7 +99,6 @@ MINIMA_CATALOG_REFRESH_SECONDS=21600
|
|
|
114
99
|
MINIMA_CATALOG_STALE_AFTER_SECONDS=86400
|
|
115
100
|
MINIMA_LITELLM_PRICES_URL=https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json
|
|
116
101
|
MINIMA_OPENROUTER_MODELS_URL=https://openrouter.ai/api/v1/models
|
|
117
|
-
OPENROUTER_API_KEY=
|
|
118
102
|
|
|
119
103
|
# --- Service ---
|
|
120
104
|
MINIMA_HOST=0.0.0.0
|
|
@@ -88,8 +88,8 @@ jobs:
|
|
|
88
88
|
--network=${{ env.NETWORK }} \
|
|
89
89
|
--subnet=${{ env.SUBNET }} \
|
|
90
90
|
--vpc-egress=private-ranges-only \
|
|
91
|
-
--set-env-vars="MUBIT_ENDPOINT=https://api.mubit.ai,MUBIT_TRANSPORT=http,MINIMA_RECALL_MODE=agent_routed,MINIMA_LOG_LEVEL=info,MINIMA_RECOMMENDATION_STORE=cloudsql,MINIMA_RECSTORE_BACKEND=redis
|
|
92
|
-
--set-secrets="
|
|
91
|
+
--set-env-vars="MUBIT_ENDPOINT=https://api.mubit.ai,MUBIT_TRANSPORT=http,MINIMA_RECALL_MODE=agent_routed,MINIMA_LOG_LEVEL=info,MINIMA_RECOMMENDATION_STORE=cloudsql,MINIMA_RECSTORE_BACKEND=redis" \
|
|
92
|
+
--set-secrets="OPENROUTER_API_KEY=minima-prod-openrouter-key:latest,MINIMA_DATABASE_URL=minima-prod-db-url:latest,MINIMA_REDIS_URL=minima-prod-redis-url:latest" \
|
|
93
93
|
--quiet
|
|
94
94
|
|
|
95
95
|
- name: Print service URL
|
|
@@ -4,6 +4,97 @@ All notable changes to Minima are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [0.11.0] - 2026-07-16
|
|
8
|
+
|
|
9
|
+
The learning-loop rework: honest labels in, fabricated ones out, and a posterior
|
|
10
|
+
that actually accumulates. Verified end-to-end against Mubit v0.12.0 (locally
|
|
11
|
+
built and the deployed instance) before release.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- **Truth rule across the wire** — quality is nullable everywhere; feedback carries
|
|
15
|
+
`evidence_source` (`gate` | `judge` | `human` | `none`) as the provenance of the
|
|
16
|
+
quality signal (the legacy `judged`/`verified_in_production` flags still map);
|
|
17
|
+
unlabeled turns and infra failures (`error_cause="infra"`) are cost/latency
|
|
18
|
+
telemetry only — they never touch the success aggregate, reinforcement, or
|
|
19
|
+
calibration. The fabricated 0.9-quality default is gone.
|
|
20
|
+
- **Ground truth and honest labels are the default** — the GT verification spine is
|
|
21
|
+
ON (`MINIMA_TUI_GROUND_TRUTH=0` opts out); green gate verdicts are the label
|
|
22
|
+
source for gated turns, a sampled LLM judge (`MINIMA_JUDGE_SAMPLE`, default 15%)
|
|
23
|
+
labels a slice of the rest, and judge spend stays booked to the session wallet.
|
|
24
|
+
- **Accumulating evidence** — the durable (cluster, model) record is a
|
|
25
|
+
read-modify-write upsert carrying outcome counters and sample rings, so organic
|
|
26
|
+
evidence no longer caps at n≈1 and one failure can't erase history. Recall embeds
|
|
27
|
+
the same gist text the write path stores, and a budgeted keyed lookup
|
|
28
|
+
(`/v2/core/lookup`, `evidence_only` recall) gives an exact-match evidence channel
|
|
29
|
+
(pairs with Mubit v0.12.0, now live).
|
|
30
|
+
- **Thompson sampling is the default selection policy** — calibrated posterior
|
|
31
|
+
sampling with a capped explore share (`minima_selection_policy=argmin` or
|
|
32
|
+
`minima_argmin_orgs` opt out). The selection zoo (collapse guard, epsilon,
|
|
33
|
+
exploration bonus, shadow UCB, evidence-mass IPW) is deleted, and
|
|
34
|
+
`GET /v1/policy-value` reports doubly-robust regret-vs-oracle.
|
|
35
|
+
- **Benchmark-derived catalog priors** replace hand-tuned capability numbers;
|
|
36
|
+
cross-generation seed aliasing is deleted (no more crediting 2024 outcomes to
|
|
37
|
+
2026 model ids); `minima-seed` defaults to the synthetic pack.
|
|
38
|
+
- **The pre-decision LLM reasoner is deleted** — escalation is diagnostic-only
|
|
39
|
+
(`escalation_suggested:*` warnings + decision-log reasons); the harness recovery
|
|
40
|
+
ladder owns the cascade. Config shrinks 97 → 64 settings; recommendation-store
|
|
41
|
+
I/O and calibrator refits run off the event loop; a TS-mirror contract test pins
|
|
42
|
+
the wire schemas to `packages/tui/src/minima/schemas.ts`.
|
|
43
|
+
- **The harness is a reference client** — phase tags, difficulty, and
|
|
44
|
+
`chosen_effort` go on the wire; cache-boundary stickiness prefers the incumbent
|
|
45
|
+
model mid-session when the tradeoff is marginal.
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- **Typed SDK feedback** — `Usage(input_tokens, output_tokens, cost_usd, latency_ms)`
|
|
49
|
+
on `feedback()` in both clients, honest autocapture framing, and a loop quickstart
|
|
50
|
+
in the docs.
|
|
51
|
+
- **Harness adapters** (`pip install "minima-cli[adapters]"`) — LiteLLM custom
|
|
52
|
+
routing strategy + realized-cost feedback logger, OpenHands `RouterLLM`, and a
|
|
53
|
+
`minima-route` CLI for shell-level integrations.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
- **Reinforcement id-space discipline** — keyed-lookup hits carry numeric core-plane
|
|
57
|
+
node ids, which are never sent as reinforcement references anymore; the durable
|
|
58
|
+
record is the primary reference so one unresolvable neighbor can't drop the whole
|
|
59
|
+
reinforcement call (pairs with Mubit's cross-run `record_outcome` resolution fix).
|
|
60
|
+
- Live-suite tests updated to the new contracts (diagnostic-only escalation,
|
|
61
|
+
deterministic asserts pinned to argmin) and adapter tests skip cleanly when the
|
|
62
|
+
frameworks are absent.
|
|
63
|
+
|
|
64
|
+
## [0.10.0] - 2026-07-12
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
- **Ground-truth spine hardened end-to-end** (still opt-in via `MINIMA_TUI_GROUND_TRUTH=1`):
|
|
68
|
+
- Gate verdicts now carry the `rec_id` of the turn that minted them, so grounded
|
|
69
|
+
feedback can never be poisoned by a stale gate from an earlier prompt, and a
|
|
70
|
+
blocked step's red verdict is superseded by its retry (content-first flip
|
|
71
|
+
identity). Plans close when their last flip is verified, instead of haunting
|
|
72
|
+
every later turn.
|
|
73
|
+
- Step identity survives rewording (token-set matching), a step's baseline resets
|
|
74
|
+
when its `verify` command changes (no fabricated red→green), and resuming a run
|
|
75
|
+
re-adopts its active plan.
|
|
76
|
+
- Bash writes and sub-agent writes are attributed to the run; unattributed
|
|
77
|
+
("blind") writes cap confidence at 🟡 instead of silently passing.
|
|
78
|
+
- Check runner: verify commands run in their own process group and are killed as a
|
|
79
|
+
group on timeout/abort (no orphaned children), run under a minimal env allowlist,
|
|
80
|
+
and honor `MINIMA_TUI_CHECK_TIMEOUT`.
|
|
81
|
+
- `/plan` council: injected findings are fenced as untrusted data, the whole plan
|
|
82
|
+
turn aborts cleanly on Esc (partial research kept), and each council round is
|
|
83
|
+
budget-metered ($0.25/round soft cap).
|
|
84
|
+
- **Default path** (no flag required): the SQLite migration runner is race-safe across
|
|
85
|
+
concurrent sessions and self-heals a previously wedged DB; a bash tool timeout/abort
|
|
86
|
+
kills the whole process group; a throwing after-hook no longer wedges the agent loop;
|
|
87
|
+
the `task` tool is blocked in plan mode.
|
|
88
|
+
- Gate-focus modal: keyboard verdict overrides (approve / reject / steer with a note)
|
|
89
|
+
reach the correct gate, and the TUI footer/overlay no longer overflow on narrow
|
|
90
|
+
terminals.
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
- With `MINIMA_LLM_JUDGE=1`, judge grading spend is now booked to the session wallet —
|
|
94
|
+
visible in `/cost` (as `judge overhead`), the footer, and enforced by `--budget` —
|
|
95
|
+
while staying out of feedback's `actual_cost_usd` so the cost model Minima learns
|
|
96
|
+
from stays clean.
|
|
97
|
+
|
|
7
98
|
## [0.9.0] - 2026-07-10
|
|
8
99
|
|
|
9
100
|
### Added
|
|
@@ -58,7 +58,7 @@ bun run build # -> dist/minima native binary (bun build --compile)
|
|
|
58
58
|
Python (`src/minima`):
|
|
59
59
|
|
|
60
60
|
- `from __future__ import annotations` at the top of every module.
|
|
61
|
-
- Pydantic v2 `BaseModel` for serializable schemas; `@dataclass(slots=True)` for internal types; `StrEnum` for enums; `Protocol` for seams (`Memory`, `
|
|
61
|
+
- Pydantic v2 `BaseModel` for serializable schemas; `@dataclass(slots=True)` for internal types; `StrEnum` for enums; `Protocol` for seams (`Memory`, `QualityJudge`).
|
|
62
62
|
- Async-first. Bridge sync SDKs (Mubit) off the event loop via `anyio`/threadpools.
|
|
63
63
|
- Logging: `structlog` via `get_logger("minima.<sub>")`.
|
|
64
64
|
- ruff `line-length=100`, target `py311`, lint set `E,F,I,UP,B,C4`. **Never break the hot path**: bookkeeping/feedback failures are logged-and-swallowed.
|
|
@@ -74,7 +74,7 @@ Request flow (`api/routers/recommend.py` → `recommender/engine.py`):
|
|
|
74
74
|
1. **classify** (`recommender/classify.py`) — derives task features/type from the prompt (regex + signal tables).
|
|
75
75
|
2. **recall** (`memory/adapter.py`) — the *only* Mubit touchpoint; pulls similar past `task → model → outcome` records using Mubit's server-side embeddings (no local embedding model).
|
|
76
76
|
3. **aggregate + score** (`recommender/aggregate.py`, `score.py`) — ranks candidates by *real* cost. The cost basis is one of three tiers chosen for the whole candidate set: `estimate` (catalog prices, cold start) → `observed` (median realized $/call) → `rescaled` (this request's input priced + observed output behavior).
|
|
77
|
-
4. **escalation** (`recommender/escalation.py`) —
|
|
77
|
+
4. **escalation** (`recommender/escalation.py`) — DIAGNOSTIC only: thin/conflicting/tied evidence is surfaced as `escalation_suggested:*` warnings + decision-log reasons. The harness owns the cascade (its recovery ladder re-decides after a VERIFIED failure); the old pre-decision LLM reasoner was deleted.
|
|
78
78
|
5. **feedback** (`api/routers/feedback.py`) — writes the outcome back to Mubit, reinforcing memory.
|
|
79
79
|
|
|
80
80
|
Other packages: `catalog/` (model cost + capability priors), `tenancy/` (multi-tenant runtime — many orgs, per-org Mubit, one deployment; auth is pass-through: the client's Mubit key IS the credential), `seeding/` (`minima-seed` CLI for cold-start history), `schemas/` (Pydantic request/response models — the wire source of truth; every field must also land in the TS mirror `packages/tui/src/minima/schemas.ts`).
|
|
@@ -85,7 +85,7 @@ Everything external is behind a Protocol so it can be faked in tests. The server
|
|
|
85
85
|
|
|
86
86
|
`MinimaAgent.promptRouted(task)` = **route** (`src/minima/router.ts` → `POST /v1/recommend`) → **run** (agent loop in `src/agent/`, streams the model, executes tools, before/afterToolCall hook stacks, abort via AbortSignal) → **judge** (`src/minima/judge.ts`, abstains unless `MINIMA_LLM_JUDGE=1`) → **feed back** (`POST /v1/feedback` with realized cost). Layers: `src/ai/` (multi-provider LLM API + `faux` test provider) · `src/agent/` (loop, tools, hooks) · `src/minima/` (router, runtime, meter, budget, spawn/sub-agents, ground truth) · `src/tools/` (bash/edit/read/write/grep/todowrite/websearch…) · `src/tui/` (Ink app) · `src/db/` (SQLite spine).
|
|
87
87
|
|
|
88
|
-
**Ground-Truth verification spine** (shipped 2026-07, `docs/ground-truth-build-guide.md`):
|
|
88
|
+
**Ground-Truth verification spine** (shipped 2026-07, `docs/ground-truth-build-guide.md`): **ON by default** since Phase 0b (opt out with `MINIMA_TUI_GROUND_TRUTH=0`). Plan steps carry `verify` shell commands, the harness runs them (baseline → done-gate red→green), verdicts land in the `gates` ledger (migrations v3–v5), a confidence tier drives the UI (🟢 glide / 🟡 flag / 🔴 stop), and grounded outcomes stamp `routing_decisions` for deterministic-over-judge feedback. Green-tier gate verdicts are the harness's honest label source (`evidence_source="gate"` — the only origin that may claim verified-in-production); a sampled LLM judge (`MINIMA_JUDGE_SAMPLE`, default 15% of ungated turns, `MINIMA_LLM_JUDGE=0` disables) labels the rest; everything else is cost/latency telemetry. `/plan` (planner persona + design council + `GROUND_TRUTH.md` output) is part of this spine. Anything gated on ground truth belongs behind `config.groundTruth`, never behind prompt text.
|
|
89
89
|
|
|
90
90
|
Design principles that constrain any work in this direction:
|
|
91
91
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: minima-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.0
|
|
4
4
|
Summary: Minima CLI: cost-aware LLM model routing — recommend cheaper models, backed by Mubit memory.
|
|
5
5
|
Project-URL: Homepage, https://docs.minima.sh
|
|
6
6
|
Project-URL: Documentation, https://docs.minima.sh
|
|
@@ -26,10 +26,11 @@ Requires-Dist: pydantic-settings>=2.3
|
|
|
26
26
|
Requires-Dist: pydantic>=2.7
|
|
27
27
|
Requires-Dist: structlog>=24.1
|
|
28
28
|
Requires-Dist: tenacity>=8.4
|
|
29
|
+
Provides-Extra: adapters
|
|
30
|
+
Requires-Dist: litellm>=1.60; extra == 'adapters'
|
|
31
|
+
Requires-Dist: openhands-sdk>=1.30; (python_version >= '3.12') and extra == 'adapters'
|
|
29
32
|
Provides-Extra: dev
|
|
30
|
-
Requires-Dist: anthropic>=0.40; extra == 'dev'
|
|
31
33
|
Requires-Dist: fastapi>=0.115; extra == 'dev'
|
|
32
|
-
Requires-Dist: google-genai>=0.3; extra == 'dev'
|
|
33
34
|
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
34
35
|
Requires-Dist: psycopg2-binary>=2.9; extra == 'dev'
|
|
35
36
|
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
@@ -38,10 +39,6 @@ Requires-Dist: redis>=5.0; extra == 'dev'
|
|
|
38
39
|
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
39
40
|
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
40
41
|
Requires-Dist: uvicorn[standard]>=0.30; extra == 'dev'
|
|
41
|
-
Provides-Extra: reasoner-anthropic
|
|
42
|
-
Requires-Dist: anthropic>=0.40; extra == 'reasoner-anthropic'
|
|
43
|
-
Provides-Extra: reasoner-gemini
|
|
44
|
-
Requires-Dist: google-genai>=0.3; extra == 'reasoner-gemini'
|
|
45
42
|
Provides-Extra: seed
|
|
46
43
|
Requires-Dist: datasets>=2.20; extra == 'seed'
|
|
47
44
|
Requires-Dist: huggingface-hub>=0.24; extra == 'seed'
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
from minima.schemas.common import Constraints, OutcomeLabel, TaskInput
|
|
4
4
|
from minima.schemas.workflow import WorkflowRequest, WorkflowStep
|
|
5
5
|
from minima_client import autocapture
|
|
6
|
-
from minima_client.client import AsyncMinimaClient, MinimaClient
|
|
6
|
+
from minima_client.client import AsyncMinimaClient, MinimaClient, Usage
|
|
7
7
|
from minima_client.errors import MinimaError
|
|
8
8
|
|
|
9
9
|
__all__ = [
|
|
10
|
+
"Usage",
|
|
10
11
|
"AsyncMinimaClient",
|
|
11
12
|
"Constraints",
|
|
12
13
|
"MinimaClient",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Optional
|
|
1
|
+
"""Optional TRACE ENRICHMENT (not the feedback loop): mubit.learn auto-capture in Minima's lane.
|
|
2
2
|
|
|
3
3
|
This is a thin, opinionated wrapper over ``mubit.learn``. Calling :func:`enable` pins
|
|
4
4
|
the learn run to the same memory lane Minima recalls from (``minima:<namespace>``) and a
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from dataclasses import dataclass
|
|
5
6
|
from typing import Any
|
|
6
7
|
|
|
7
8
|
import httpx
|
|
@@ -45,12 +46,33 @@ def _headers(api_key: str | None) -> dict[str, str]:
|
|
|
45
46
|
return {"Authorization": f"Bearer {api_key}"} if api_key else {}
|
|
46
47
|
|
|
47
48
|
|
|
49
|
+
@dataclass(slots=True)
|
|
50
|
+
class Usage:
|
|
51
|
+
"""Realized per-call usage — the single biggest accuracy lever of the loop.
|
|
52
|
+
|
|
53
|
+
Report what the provider ACTUALLY billed (never echo Minima's own est_cost_usd
|
|
54
|
+
back): these numbers are what let the cost basis climb estimate -> observed ->
|
|
55
|
+
rescaled for your org.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
input_tokens: int = 0
|
|
59
|
+
output_tokens: int = 0
|
|
60
|
+
cost_usd: float = 0.0
|
|
61
|
+
latency_ms: int | None = None
|
|
62
|
+
|
|
63
|
+
|
|
48
64
|
def _feedback_request(
|
|
49
65
|
recommendation_id: str,
|
|
50
66
|
chosen_model_id: str,
|
|
51
67
|
outcome: OutcomeLabel | str,
|
|
68
|
+
usage: Usage | None = None,
|
|
52
69
|
**kwargs: Any,
|
|
53
70
|
) -> FeedbackRequest:
|
|
71
|
+
if usage is not None:
|
|
72
|
+
kwargs.setdefault("input_tokens", usage.input_tokens or None)
|
|
73
|
+
kwargs.setdefault("output_tokens", usage.output_tokens or None)
|
|
74
|
+
kwargs.setdefault("actual_cost_usd", usage.cost_usd or None)
|
|
75
|
+
kwargs.setdefault("latency_ms", usage.latency_ms)
|
|
54
76
|
return FeedbackRequest(
|
|
55
77
|
recommendation_id=recommendation_id,
|
|
56
78
|
chosen_model_id=chosen_model_id,
|
|
@@ -132,9 +154,10 @@ class MinimaClient:
|
|
|
132
154
|
recommendation_id: str,
|
|
133
155
|
chosen_model_id: str,
|
|
134
156
|
outcome: OutcomeLabel | str,
|
|
157
|
+
usage: Usage | None = None,
|
|
135
158
|
**kwargs: Any,
|
|
136
159
|
) -> FeedbackResponse:
|
|
137
|
-
req = _feedback_request(recommendation_id, chosen_model_id, outcome, **kwargs)
|
|
160
|
+
req = _feedback_request(recommendation_id, chosen_model_id, outcome, usage, **kwargs)
|
|
138
161
|
return FeedbackResponse.model_validate(self._post("/v1/feedback", req))
|
|
139
162
|
|
|
140
163
|
def models(
|
|
@@ -254,9 +277,10 @@ class AsyncMinimaClient:
|
|
|
254
277
|
recommendation_id: str,
|
|
255
278
|
chosen_model_id: str,
|
|
256
279
|
outcome: OutcomeLabel | str,
|
|
280
|
+
usage: Usage | None = None,
|
|
257
281
|
**kwargs: Any,
|
|
258
282
|
) -> FeedbackResponse:
|
|
259
|
-
req = _feedback_request(recommendation_id, chosen_model_id, outcome, **kwargs)
|
|
283
|
+
req = _feedback_request(recommendation_id, chosen_model_id, outcome, usage, **kwargs)
|
|
260
284
|
return FeedbackResponse.model_validate(await self._post("/v1/feedback", req))
|
|
261
285
|
|
|
262
286
|
async def strategies(
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"""Adapters that plug Minima's recommend->feedback loop into existing harnesses.
|
|
2
|
+
|
|
3
|
+
Each adapter is dependency-light: the target framework is imported lazily so the
|
|
4
|
+
package works without it installed. Install the frameworks to use (and test) them:
|
|
5
|
+
``uv sync --extra adapters`` or ``pip install litellm openhands-sdk``.
|
|
6
|
+
"""
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""``minima-route`` — a tiny CLI so ANY harness (Claude Code included) can consume
|
|
2
|
+
Minima's loop from shell seams.
|
|
3
|
+
|
|
4
|
+
Pick a model for a task (prints the bare model id, or full JSON with ``--json``)::
|
|
5
|
+
|
|
6
|
+
model=$(minima-route recommend "refactor the auth module" \
|
|
7
|
+
--candidates claude-haiku-4-5,claude-sonnet-4-6)
|
|
8
|
+
claude --model "$model" -p "refactor the auth module"
|
|
9
|
+
|
|
10
|
+
Close the loop after you ran it (realized numbers, never Minima's own estimate)::
|
|
11
|
+
|
|
12
|
+
minima-route feedback "$rec_id" "$model" success \
|
|
13
|
+
--cost 0.0042 --input-tokens 1800 --output-tokens 600 --latency-ms 9000 \
|
|
14
|
+
--source human
|
|
15
|
+
|
|
16
|
+
Connection comes from ``MINIMA_URL`` (default https://api.minima.sh) and
|
|
17
|
+
``MINIMA_API_KEY``/``MUBIT_API_KEY``, overridable with ``--url``/``--api-key``.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import json
|
|
24
|
+
import os
|
|
25
|
+
import sys
|
|
26
|
+
|
|
27
|
+
from minima_client.client import MinimaClient, Usage
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _client(args: argparse.Namespace) -> MinimaClient:
|
|
31
|
+
url = args.url or os.environ.get("MINIMA_URL") or "https://api.minima.sh"
|
|
32
|
+
key = args.api_key or os.environ.get("MINIMA_API_KEY") or os.environ.get("MUBIT_API_KEY")
|
|
33
|
+
return MinimaClient(url, api_key=key)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _cmd_recommend(args: argparse.Namespace) -> int:
|
|
37
|
+
constraints = (
|
|
38
|
+
{"candidate_models": [c.strip() for c in args.candidates.split(",") if c.strip()]}
|
|
39
|
+
if args.candidates
|
|
40
|
+
else None
|
|
41
|
+
)
|
|
42
|
+
with _client(args) as minima:
|
|
43
|
+
rec = minima.recommend(
|
|
44
|
+
args.task,
|
|
45
|
+
cost_quality_tradeoff=args.slider,
|
|
46
|
+
constraints=constraints,
|
|
47
|
+
namespace=args.namespace,
|
|
48
|
+
)
|
|
49
|
+
if args.json:
|
|
50
|
+
print(
|
|
51
|
+
json.dumps(
|
|
52
|
+
{
|
|
53
|
+
"recommendation_id": rec.recommendation_id,
|
|
54
|
+
"model_id": rec.recommended_model.model_id,
|
|
55
|
+
"est_cost_usd": rec.recommended_model.est_cost_usd,
|
|
56
|
+
"predicted_success": rec.recommended_model.predicted_success,
|
|
57
|
+
"warnings": rec.warnings,
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
else:
|
|
62
|
+
print(rec.recommended_model.model_id)
|
|
63
|
+
return 0
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _cmd_feedback(args: argparse.Namespace) -> int:
|
|
67
|
+
with _client(args) as minima:
|
|
68
|
+
resp = minima.feedback(
|
|
69
|
+
args.recommendation_id,
|
|
70
|
+
args.model,
|
|
71
|
+
args.outcome,
|
|
72
|
+
usage=Usage(
|
|
73
|
+
input_tokens=args.input_tokens or 0,
|
|
74
|
+
output_tokens=args.output_tokens or 0,
|
|
75
|
+
cost_usd=args.cost or 0.0,
|
|
76
|
+
latency_ms=args.latency_ms,
|
|
77
|
+
),
|
|
78
|
+
quality_score=args.quality,
|
|
79
|
+
evidence_source=args.source,
|
|
80
|
+
)
|
|
81
|
+
print(json.dumps({"accepted": resp.accepted, "warnings": resp.warnings}))
|
|
82
|
+
return 0 if resp.accepted else 1
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
86
|
+
parser = argparse.ArgumentParser(prog="minima-route", description=__doc__)
|
|
87
|
+
parser.add_argument("--url", default=None)
|
|
88
|
+
parser.add_argument("--api-key", default=None)
|
|
89
|
+
sub = parser.add_subparsers(dest="command", required=True)
|
|
90
|
+
|
|
91
|
+
rec = sub.add_parser("recommend", help="print the model Minima recommends for a task")
|
|
92
|
+
rec.add_argument("task")
|
|
93
|
+
rec.add_argument("--candidates", default=None, help="comma-separated model ids")
|
|
94
|
+
rec.add_argument("--slider", type=float, default=None, help="cost/quality 0..10")
|
|
95
|
+
rec.add_argument("--namespace", default=None)
|
|
96
|
+
rec.add_argument("--json", action="store_true", help="full JSON incl. recommendation_id")
|
|
97
|
+
rec.set_defaults(func=_cmd_recommend)
|
|
98
|
+
|
|
99
|
+
fb = sub.add_parser("feedback", help="report the realized outcome back")
|
|
100
|
+
fb.add_argument("recommendation_id")
|
|
101
|
+
fb.add_argument("model")
|
|
102
|
+
fb.add_argument("outcome", choices=["success", "partial", "failure"])
|
|
103
|
+
fb.add_argument("--cost", type=float, default=None, help="realized USD (never the estimate)")
|
|
104
|
+
fb.add_argument("--input-tokens", type=int, default=None)
|
|
105
|
+
fb.add_argument("--output-tokens", type=int, default=None)
|
|
106
|
+
fb.add_argument("--latency-ms", type=int, default=None)
|
|
107
|
+
fb.add_argument("--quality", type=float, default=None, help="0..1 if you graded it")
|
|
108
|
+
fb.add_argument(
|
|
109
|
+
"--source",
|
|
110
|
+
default="human",
|
|
111
|
+
choices=["gate", "judge", "human", "none"],
|
|
112
|
+
help="label provenance (none = cost telemetry only)",
|
|
113
|
+
)
|
|
114
|
+
fb.set_defaults(func=_cmd_feedback)
|
|
115
|
+
return parser
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def main(argv: list[str] | None = None) -> int:
|
|
119
|
+
args = build_parser().parse_args(argv)
|
|
120
|
+
return int(args.func(args))
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
if __name__ == "__main__":
|
|
124
|
+
sys.exit(main())
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"""LiteLLM adapter: Minima as a custom routing strategy + a feedback logger.
|
|
2
|
+
|
|
3
|
+
Usage::
|
|
4
|
+
|
|
5
|
+
import litellm
|
|
6
|
+
from litellm import Router
|
|
7
|
+
from minima_client import MinimaClient
|
|
8
|
+
from minima_client.integrations.litellm_router import (
|
|
9
|
+
MinimaFeedbackLogger,
|
|
10
|
+
MinimaRoutingStrategy,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
router = Router(model_list=[...]) # your deployments as usual
|
|
14
|
+
minima = MinimaClient("https://api.minima.sh", api_key="<mubit-key>")
|
|
15
|
+
strategy = MinimaRoutingStrategy(minima, router)
|
|
16
|
+
router.set_custom_routing_strategy(strategy)
|
|
17
|
+
litellm.callbacks = [MinimaFeedbackLogger(minima, strategy)]
|
|
18
|
+
|
|
19
|
+
Every ``router.completion(model="my-group", ...)`` then asks Minima which deployment
|
|
20
|
+
to run, and the logger reports realized cost back. Without a quality signal the
|
|
21
|
+
feedback is COST TELEMETRY only (``evidence_source="none"``) — pass ``quality_fn``
|
|
22
|
+
to grade responses and make the outcomes teach the success posterior too.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import hashlib
|
|
28
|
+
import time
|
|
29
|
+
from collections import OrderedDict
|
|
30
|
+
from collections.abc import Callable
|
|
31
|
+
from typing import Any
|
|
32
|
+
|
|
33
|
+
from litellm.integrations.custom_logger import CustomLogger
|
|
34
|
+
from litellm.router import CustomRoutingStrategyBase
|
|
35
|
+
|
|
36
|
+
_CORRELATION_CAP = 512
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _task_text(messages: list[dict[str, str]] | None, fallback: str) -> str:
|
|
40
|
+
for message in reversed(messages or []):
|
|
41
|
+
if message.get("role") == "user" and message.get("content"):
|
|
42
|
+
return str(message["content"])
|
|
43
|
+
return fallback
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _bare_model(litellm_model: str) -> str:
|
|
47
|
+
"""'anthropic/claude-haiku-4-5' -> 'claude-haiku-4-5' (Minima catalog ids are bare)."""
|
|
48
|
+
return litellm_model.rsplit("/", 1)[-1]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _correlation_key(model_group: str, task: str) -> str:
|
|
52
|
+
return hashlib.sha1(f"{model_group}:{task}".encode()).hexdigest() # noqa: S324
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class MinimaRoutingStrategy(CustomRoutingStrategyBase):
|
|
56
|
+
"""Pick the deployment Minima recommends; remember the rec_id for feedback."""
|
|
57
|
+
|
|
58
|
+
def __init__(
|
|
59
|
+
self,
|
|
60
|
+
minima: Any,
|
|
61
|
+
router: Any,
|
|
62
|
+
*,
|
|
63
|
+
cost_quality_tradeoff: float | None = None,
|
|
64
|
+
namespace: str | None = None,
|
|
65
|
+
):
|
|
66
|
+
self._minima = minima
|
|
67
|
+
self._router = router
|
|
68
|
+
self._slider = cost_quality_tradeoff
|
|
69
|
+
self._namespace = namespace
|
|
70
|
+
# (model_group, task-hash) -> (rec_id, minima_model_id, ts): the logger joins
|
|
71
|
+
# its success/failure event back to the recommendation. Bounded LRU.
|
|
72
|
+
self._pending: OrderedDict[str, tuple[str, str, float]] = OrderedDict()
|
|
73
|
+
|
|
74
|
+
# -- correlation ----------------------------------------------------------
|
|
75
|
+
def _remember(self, key: str, rec_id: str, model_id: str) -> None:
|
|
76
|
+
self._pending[key] = (rec_id, model_id, time.time())
|
|
77
|
+
self._pending.move_to_end(key)
|
|
78
|
+
while len(self._pending) > _CORRELATION_CAP:
|
|
79
|
+
self._pending.popitem(last=False)
|
|
80
|
+
|
|
81
|
+
def take_recommendation(self, model_group: str, task: str) -> tuple[str, str] | None:
|
|
82
|
+
entry = self._pending.pop(_correlation_key(model_group, task), None)
|
|
83
|
+
return (entry[0], entry[1]) if entry else None
|
|
84
|
+
|
|
85
|
+
# -- deployment selection --------------------------------------------------
|
|
86
|
+
def _deployments(self, model_group: str) -> list[dict]:
|
|
87
|
+
return self._router.get_model_list(model_name=model_group) or []
|
|
88
|
+
|
|
89
|
+
def _pick(
|
|
90
|
+
self,
|
|
91
|
+
model_group: str,
|
|
92
|
+
messages: list[dict[str, str]] | None,
|
|
93
|
+
) -> dict | None:
|
|
94
|
+
deployments = self._deployments(model_group)
|
|
95
|
+
if not deployments:
|
|
96
|
+
return None
|
|
97
|
+
by_bare = {
|
|
98
|
+
_bare_model(str(d.get("litellm_params", {}).get("model", ""))): d
|
|
99
|
+
for d in deployments
|
|
100
|
+
}
|
|
101
|
+
task = _task_text(messages, model_group)
|
|
102
|
+
try:
|
|
103
|
+
rec = self._minima.recommend(
|
|
104
|
+
task,
|
|
105
|
+
cost_quality_tradeoff=self._slider,
|
|
106
|
+
constraints={"candidate_models": sorted(by_bare)},
|
|
107
|
+
namespace=self._namespace,
|
|
108
|
+
)
|
|
109
|
+
except Exception: # noqa: BLE001 — routing must fail open to LiteLLM's default
|
|
110
|
+
return None
|
|
111
|
+
model_id = rec.recommended_model.model_id
|
|
112
|
+
deployment = by_bare.get(model_id)
|
|
113
|
+
if deployment is None:
|
|
114
|
+
return None
|
|
115
|
+
self._remember(_correlation_key(model_group, task), rec.recommendation_id, model_id)
|
|
116
|
+
return deployment
|
|
117
|
+
|
|
118
|
+
async def async_get_available_deployment(
|
|
119
|
+
self,
|
|
120
|
+
model: str,
|
|
121
|
+
messages: list[dict[str, str]] | None = None,
|
|
122
|
+
input: list | str | None = None, # noqa: A002 — LiteLLM's signature
|
|
123
|
+
specific_deployment: bool | None = False,
|
|
124
|
+
request_kwargs: dict | None = None,
|
|
125
|
+
):
|
|
126
|
+
return self._pick(model, messages)
|
|
127
|
+
|
|
128
|
+
def get_available_deployment(
|
|
129
|
+
self,
|
|
130
|
+
model: str,
|
|
131
|
+
messages: list[dict[str, str]] | None = None,
|
|
132
|
+
input: list | str | None = None, # noqa: A002 — LiteLLM's signature
|
|
133
|
+
specific_deployment: bool | None = False,
|
|
134
|
+
request_kwargs: dict | None = None,
|
|
135
|
+
):
|
|
136
|
+
return self._pick(model, messages)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class MinimaFeedbackLogger(CustomLogger):
|
|
140
|
+
"""Report realized cost/latency (and optional quality) back to Minima."""
|
|
141
|
+
|
|
142
|
+
def __init__(
|
|
143
|
+
self,
|
|
144
|
+
minima: Any,
|
|
145
|
+
strategy: MinimaRoutingStrategy,
|
|
146
|
+
*,
|
|
147
|
+
quality_fn: Callable[[Any], float | None] | None = None,
|
|
148
|
+
):
|
|
149
|
+
super().__init__()
|
|
150
|
+
self._minima = minima
|
|
151
|
+
self._strategy = strategy
|
|
152
|
+
self._quality_fn = quality_fn
|
|
153
|
+
|
|
154
|
+
def _join(self, kwargs: dict) -> tuple[str, str] | None:
|
|
155
|
+
group = str(kwargs.get("model", ""))
|
|
156
|
+
task = _task_text(kwargs.get("messages"), group)
|
|
157
|
+
return self._strategy.take_recommendation(group, task)
|
|
158
|
+
|
|
159
|
+
async def async_log_success_event(self, kwargs, response_obj, start_time, end_time) -> None:
|
|
160
|
+
joined = self._join(kwargs)
|
|
161
|
+
if joined is None:
|
|
162
|
+
return
|
|
163
|
+
rec_id, model_id = joined
|
|
164
|
+
usage = getattr(response_obj, "usage", None)
|
|
165
|
+
quality = None
|
|
166
|
+
if self._quality_fn is not None:
|
|
167
|
+
try:
|
|
168
|
+
quality = self._quality_fn(response_obj)
|
|
169
|
+
except Exception: # noqa: BLE001 — a broken grader must not break the call
|
|
170
|
+
quality = None
|
|
171
|
+
try:
|
|
172
|
+
self._minima.feedback(
|
|
173
|
+
rec_id,
|
|
174
|
+
model_id,
|
|
175
|
+
"success" if quality is None or quality >= 0.8 else "partial",
|
|
176
|
+
quality_score=quality,
|
|
177
|
+
# No grader => honest telemetry, not a fabricated success label.
|
|
178
|
+
evidence_source="judge" if quality is not None else "none",
|
|
179
|
+
input_tokens=getattr(usage, "prompt_tokens", None),
|
|
180
|
+
output_tokens=getattr(usage, "completion_tokens", None),
|
|
181
|
+
actual_cost_usd=kwargs.get("response_cost"),
|
|
182
|
+
latency_ms=int((end_time - start_time).total_seconds() * 1000)
|
|
183
|
+
if hasattr(end_time - start_time, "total_seconds")
|
|
184
|
+
else None,
|
|
185
|
+
)
|
|
186
|
+
except Exception: # noqa: BLE001 — feedback must never break the caller's run
|
|
187
|
+
return
|
|
188
|
+
|
|
189
|
+
async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time) -> None:
|
|
190
|
+
joined = self._join(kwargs)
|
|
191
|
+
if joined is None:
|
|
192
|
+
return
|
|
193
|
+
rec_id, model_id = joined
|
|
194
|
+
try:
|
|
195
|
+
self._minima.feedback(
|
|
196
|
+
rec_id,
|
|
197
|
+
model_id,
|
|
198
|
+
"failure",
|
|
199
|
+
evidence_source="none",
|
|
200
|
+
error_cause="infra",
|
|
201
|
+
)
|
|
202
|
+
except Exception: # noqa: BLE001
|
|
203
|
+
return
|