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.
Files changed (706) hide show
  1. {minima_cli-0.9.0 → minima_cli-0.11.0}/.env.example +0 -16
  2. {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/prod.yml +2 -2
  3. {minima_cli-0.9.0 → minima_cli-0.11.0}/CHANGELOG.md +91 -0
  4. {minima_cli-0.9.0 → minima_cli-0.11.0}/CLAUDE.md +3 -3
  5. {minima_cli-0.9.0 → minima_cli-0.11.0}/PKG-INFO +4 -7
  6. {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/__init__.py +2 -1
  7. {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/autocapture.py +1 -1
  8. {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/client.py +26 -2
  9. minima_cli-0.11.0/client_sdk/minima_client/integrations/__init__.py +6 -0
  10. minima_cli-0.11.0/client_sdk/minima_client/integrations/claude_code.py +124 -0
  11. minima_cli-0.11.0/client_sdk/minima_client/integrations/litellm_router.py +203 -0
  12. minima_cli-0.11.0/client_sdk/minima_client/integrations/openhands_router.py +99 -0
  13. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/client-sdk.md +41 -8
  14. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/configuration.md +0 -20
  15. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/ground-truth-build-guide.md +1 -1
  16. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/package.json +1 -1
  17. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/loop.ts +19 -10
  18. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/faux.ts +18 -1
  19. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/cli/main.ts +26 -6
  20. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/minima_db.ts +261 -38
  21. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/budget.ts +20 -1
  22. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/check.ts +86 -16
  23. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/client.ts +2 -0
  24. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/confidence.ts +1 -0
  25. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/config.ts +27 -4
  26. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/ground_truth.ts +349 -63
  27. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/gt_contract.ts +6 -0
  28. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/index.ts +2 -0
  29. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/judge.ts +18 -1
  30. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/meter.ts +18 -0
  31. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/plan_council.ts +175 -57
  32. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/plan_session.ts +64 -13
  33. minima_cli-0.11.0/packages/tui/src/minima/plan_turn.ts +165 -0
  34. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/router.ts +19 -10
  35. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/runtime.ts +79 -29
  36. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/schemas.ts +50 -1
  37. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/spawn.ts +25 -2
  38. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/why.ts +36 -2
  39. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/bash.ts +6 -5
  40. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/app.tsx +222 -159
  41. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/layout.ts +102 -0
  42. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/permissions.ts +39 -1
  43. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/text-input.tsx +13 -4
  44. minima_cli-0.11.0/packages/tui/tests/bash-group.test.ts +56 -0
  45. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/behavior.test.ts +90 -9
  46. minima_cli-0.11.0/packages/tui/tests/check.test.ts +346 -0
  47. minima_cli-0.11.0/packages/tui/tests/config_env.test.ts +62 -0
  48. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/db.test.ts +3 -2
  49. minima_cli-0.11.0/packages/tui/tests/db_migrate.test.ts +122 -0
  50. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/feedback-grounded.test.ts +70 -8
  51. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gate.test.ts +125 -19
  52. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ground_truth.test.ts +85 -5
  53. minima_cli-0.11.0/packages/tui/tests/grounded.test.ts +307 -0
  54. minima_cli-0.11.0/packages/tui/tests/gt-attribution.test.ts +206 -0
  55. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-e2e.test.ts +44 -48
  56. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-footer.test.ts +26 -2
  57. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/hooks.test.ts +22 -0
  58. minima_cli-0.11.0/packages/tui/tests/judge-cost-booking.test.ts +219 -0
  59. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/judge.test.ts +31 -0
  60. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ladder.test.ts +18 -10
  61. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/layout.test.ts +161 -0
  62. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/minima.test.ts +48 -8
  63. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/minima_memory.test.ts +1 -1
  64. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/permissions.test.ts +91 -0
  65. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/plan_council.test.ts +330 -17
  66. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/plan_session.test.ts +182 -8
  67. minima_cli-0.11.0/packages/tui/tests/plan_turn.test.ts +218 -0
  68. minima_cli-0.11.0/packages/tui/tests/resume-gt.test.ts +116 -0
  69. {minima_cli-0.9.0 → minima_cli-0.11.0}/pyproject.toml +5 -5
  70. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/feedback.py +158 -35
  71. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/health.py +0 -4
  72. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/savings.py +25 -1
  73. minima_cli-0.11.0/src/minima/catalog/data/benchmark_priors.json +223 -0
  74. minima_cli-0.11.0/src/minima/catalog/data/model_aliases.json +37 -0
  75. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/store.py +45 -1
  76. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/config.py +19 -109
  77. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/main.py +13 -6
  78. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/adapter.py +44 -50
  79. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/keys.py +6 -4
  80. minima_cli-0.11.0/src/minima/memory/records.py +326 -0
  81. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/calibration.py +28 -29
  82. minima_cli-0.11.0/src/minima/metrics/ope.py +145 -0
  83. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/aggregate.py +30 -25
  84. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/decisionlog.py +52 -10
  85. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/engine.py +117 -368
  86. minima_cli-0.11.0/src/minima/recommender/escalation.py +57 -0
  87. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/score.py +0 -57
  88. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/types.py +25 -25
  89. minima_cli-0.11.0/src/minima/schemas/feedback.py +73 -0
  90. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/recommend.py +15 -1
  91. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/savings.py +16 -0
  92. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/routerbench.py +28 -2
  93. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/run_seed.py +9 -3
  94. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/synthetic.py +2 -1
  95. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/passthrough.py +0 -8
  96. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/conftest.py +7 -1
  97. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/harness.py +2 -8
  98. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/factories.py +5 -48
  99. minima_cli-0.11.0/tests/integration/test_feedback_loop.py +418 -0
  100. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_measurement_api.py +66 -38
  101. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_observed_cost_ranking.py +4 -2
  102. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_recommend_api.py +21 -0
  103. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_escalation_fixes.py +1 -0
  104. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_full_surface_live.py +5 -15
  105. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_mubit_roundtrip.py +10 -2
  106. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_recall_params_live.py +1 -0
  107. minima_cli-0.11.0/tests/unit/test_accumulating_records.py +140 -0
  108. minima_cli-0.11.0/tests/unit/test_adapters.py +225 -0
  109. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_calibration_fit.py +1 -0
  110. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_escalation.py +0 -56
  111. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_latency_quality.py +1 -17
  112. minima_cli-0.11.0/tests/unit/test_lookup_parse.py +54 -0
  113. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_metrics.py +2 -1
  114. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_metrics_demo.py +1 -29
  115. minima_cli-0.11.0/tests/unit/test_ope.py +141 -0
  116. minima_cli-0.11.0/tests/unit/test_records_catalog.py +193 -0
  117. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_recstore_sqlite.py +0 -23
  118. minima_cli-0.11.0/tests/unit/test_sdk_usage.py +39 -0
  119. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_store_backends.py +0 -65
  120. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_tenancy.py +0 -14
  121. minima_cli-0.11.0/tests/unit/test_ts_mirror.py +50 -0
  122. {minima_cli-0.9.0 → minima_cli-0.11.0}/uv.lock +2032 -283
  123. minima_cli-0.9.0/packages/tui/tests/check.test.ts +0 -173
  124. minima_cli-0.9.0/packages/tui/tests/grounded.test.ts +0 -194
  125. minima_cli-0.9.0/src/minima/catalog/data/model_aliases.json +0 -12
  126. minima_cli-0.9.0/src/minima/llm/__init__.py +0 -1
  127. minima_cli-0.9.0/src/minima/llm/anthropic.py +0 -106
  128. minima_cli-0.9.0/src/minima/llm/base.py +0 -202
  129. minima_cli-0.9.0/src/minima/llm/gemini.py +0 -130
  130. minima_cli-0.9.0/src/minima/llm/registry.py +0 -54
  131. minima_cli-0.9.0/src/minima/memory/records.py +0 -190
  132. minima_cli-0.9.0/src/minima/recommender/escalation.py +0 -100
  133. minima_cli-0.9.0/src/minima/recommender/propensity.py +0 -189
  134. minima_cli-0.9.0/src/minima/schemas/feedback.py +0 -43
  135. minima_cli-0.9.0/tests/integration/test_escalation_reasoner.py +0 -147
  136. minima_cli-0.9.0/tests/integration/test_feedback_loop.py +0 -166
  137. minima_cli-0.9.0/tests/live/test_reasoner_live.py +0 -135
  138. minima_cli-0.9.0/tests/unit/test_collapse_guard.py +0 -161
  139. minima_cli-0.9.0/tests/unit/test_exploration.py +0 -56
  140. minima_cli-0.9.0/tests/unit/test_ipw.py +0 -48
  141. minima_cli-0.9.0/tests/unit/test_lever_cost.py +0 -67
  142. minima_cli-0.9.0/tests/unit/test_reasoner.py +0 -132
  143. minima_cli-0.9.0/tests/unit/test_records_catalog.py +0 -108
  144. minima_cli-0.9.0/tests/unit/test_shadow_bandit.py +0 -74
  145. {minima_cli-0.9.0 → minima_cli-0.11.0}/.dockerignore +0 -0
  146. {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/catalog-snapshot.yml +0 -0
  147. {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/ci.yml +0 -0
  148. {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/release-cli.yml +0 -0
  149. {minima_cli-0.9.0 → minima_cli-0.11.0}/.github/workflows/staging.yml +0 -0
  150. {minima_cli-0.9.0 → minima_cli-0.11.0}/.gitignore +0 -0
  151. {minima_cli-0.9.0 → minima_cli-0.11.0}/AGENTS.md +0 -0
  152. {minima_cli-0.9.0 → minima_cli-0.11.0}/Dockerfile +0 -0
  153. {minima_cli-0.9.0 → minima_cli-0.11.0}/LICENSE +0 -0
  154. {minima_cli-0.9.0 → minima_cli-0.11.0}/Makefile +0 -0
  155. {minima_cli-0.9.0 → minima_cli-0.11.0}/README.md +0 -0
  156. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/.gitignore +0 -0
  157. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/README.md +0 -0
  158. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/assert/check.ts +0 -0
  159. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/assert/db.ts +0 -0
  160. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/env.ts +0 -0
  161. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/headless.ts +0 -0
  162. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/mock_server.ts +0 -0
  163. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/rig.ts +0 -0
  164. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/driver/scratch.ts +0 -0
  165. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/_example/mathx.py +0 -0
  166. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/_example/tests/test_public.py +0 -0
  167. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/README.md +0 -0
  168. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/package.json +0 -0
  169. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/csv.ts +0 -0
  170. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/index.ts +0 -0
  171. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/object.ts +0 -0
  172. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/stats.ts +0 -0
  173. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/src/transform.ts +0 -0
  174. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/csv.test.ts +0 -0
  175. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/object.test.ts +0 -0
  176. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/stats.test.ts +0 -0
  177. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/js-lib/tests/transform.test.ts +0 -0
  178. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/README.md +0 -0
  179. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/chunk.js +0 -0
  180. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/droot.js +0 -0
  181. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/duration.js +0 -0
  182. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/js/wrap.js +0 -0
  183. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/checksum.py +0 -0
  184. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/intervals.py +0 -0
  185. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/rle.py +0 -0
  186. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/py/roman.py +0 -0
  187. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/chunk/smoke.test.js +0 -0
  188. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/droot/smoke.test.js +0 -0
  189. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/duration/smoke.test.js +0 -0
  190. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/js/wrap/smoke.test.js +0 -0
  191. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/conftest.py +0 -0
  192. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_checksum_smoke.py +0 -0
  193. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_intervals_smoke.py +0 -0
  194. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_rle_smoke.py +0 -0
  195. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/py/test_roman_smoke.py +0 -0
  196. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/brackets/smoke.test.ts +0 -0
  197. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/drift/smoke.test.ts +0 -0
  198. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/ordinal/smoke.test.ts +0 -0
  199. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/tests/ts/slug/smoke.test.ts +0 -0
  200. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/brackets.ts +0 -0
  201. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/drift.ts +0 -0
  202. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/ordinal.ts +0 -0
  203. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/katas/ts/slug.ts +0 -0
  204. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/.gitignore +0 -0
  205. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/README.md +0 -0
  206. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/pytest.ini +0 -0
  207. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/__init__.py +0 -0
  208. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/__main__.py +0 -0
  209. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/cli.py +0 -0
  210. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/dates.py +0 -0
  211. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/migrations.py +0 -0
  212. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/models.py +0 -0
  213. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/query.py +0 -0
  214. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/report.py +0 -0
  215. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/taskman/storage.py +0 -0
  216. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/__init__.py +0 -0
  217. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/conftest.py +0 -0
  218. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_cli.py +0 -0
  219. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_dates.py +0 -0
  220. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_models.py +0 -0
  221. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_query.py +0 -0
  222. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_report.py +0 -0
  223. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/py-cli/tests/test_storage.py +0 -0
  224. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/README.md +0 -0
  225. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/package.json +0 -0
  226. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/app.ts +0 -0
  227. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/auth.ts +0 -0
  228. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/errors.ts +0 -0
  229. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/admin.ts +0 -0
  230. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/links.ts +0 -0
  231. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/notes.ts +0 -0
  232. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/handlers/stats.ts +0 -0
  233. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/persist.ts +0 -0
  234. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/ratelimit.ts +0 -0
  235. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/respond.ts +0 -0
  236. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/router.ts +0 -0
  237. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/server.ts +0 -0
  238. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/store.ts +0 -0
  239. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/types.ts +0 -0
  240. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/src/validate.ts +0 -0
  241. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/auth.test.ts +0 -0
  242. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/health.test.ts +0 -0
  243. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/helpers.ts +0 -0
  244. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/links.test.ts +0 -0
  245. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/notes.test.ts +0 -0
  246. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/persist.test.ts +0 -0
  247. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/ratelimit.test.ts +0 -0
  248. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/router.test.ts +0 -0
  249. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/stats.test.ts +0 -0
  250. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/store.test.ts +0 -0
  251. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tests/validate.test.ts +0 -0
  252. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/fixtures/templates/ts-api/tsconfig.json +0 -0
  253. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f10_recovery_ladder.ts +0 -0
  254. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f12_learning_loop.ts +0 -0
  255. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f1_headless.ts +0 -0
  256. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f4_cost_budget.ts +0 -0
  257. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f5_task_dag_worktree.ts +0 -0
  258. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f6_resume_lineage.ts +0 -0
  259. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f7_permissions_plan.ts +0 -0
  260. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/flows/f9_offline_reconnect.ts +0 -0
  261. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/attempt.ts +0 -0
  262. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/build_index.ts +0 -0
  263. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibrate.ts +0 -0
  264. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibrate_all.ts +0 -0
  265. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/calibration_report.ts +0 -0
  266. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/materialize.ts +0 -0
  267. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/savings_ab.ts +0 -0
  268. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/savings_report.ts +0 -0
  269. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/gen/validate_task.ts +0 -0
  270. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/run.ts +0 -0
  271. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/bug.patch +0 -0
  272. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/hidden_tests.patch +0 -0
  273. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/_example/ex-001/task.json +0 -0
  274. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/calibration.jsonl +0 -0
  275. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/bug.patch +0 -0
  276. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/hidden_tests.patch +0 -0
  277. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-001/task.json +0 -0
  278. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/bug.patch +0 -0
  279. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/hidden_tests.patch +0 -0
  280. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-002/task.json +0 -0
  281. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/bug.patch +0 -0
  282. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/hidden_tests.patch +0 -0
  283. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-003/task.json +0 -0
  284. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/bug.patch +0 -0
  285. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/hidden_tests.patch +0 -0
  286. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-004/task.json +0 -0
  287. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/hidden_tests.patch +0 -0
  288. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/oracle.patch +0 -0
  289. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-005/task.json +0 -0
  290. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/bug.patch +0 -0
  291. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/hidden_tests.patch +0 -0
  292. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/js-lib/jl-006/task.json +0 -0
  293. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/hidden_tests.patch +0 -0
  294. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/oracle.patch +0 -0
  295. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-001/task.json +0 -0
  296. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/hidden_tests.patch +0 -0
  297. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/oracle.patch +0 -0
  298. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-002/task.json +0 -0
  299. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/hidden_tests.patch +0 -0
  300. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/oracle.patch +0 -0
  301. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-003/task.json +0 -0
  302. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/hidden_tests.patch +0 -0
  303. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/oracle.patch +0 -0
  304. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-004/task.json +0 -0
  305. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/hidden_tests.patch +0 -0
  306. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/oracle.patch +0 -0
  307. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-005/task.json +0 -0
  308. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/hidden_tests.patch +0 -0
  309. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/oracle.patch +0 -0
  310. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-006/task.json +0 -0
  311. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/hidden_tests.patch +0 -0
  312. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/oracle.patch +0 -0
  313. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-007/task.json +0 -0
  314. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/hidden_tests.patch +0 -0
  315. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/oracle.patch +0 -0
  316. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-008/task.json +0 -0
  317. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/hidden_tests.patch +0 -0
  318. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/oracle.patch +0 -0
  319. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-009/task.json +0 -0
  320. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/hidden_tests.patch +0 -0
  321. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/oracle.patch +0 -0
  322. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-010/task.json +0 -0
  323. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/hidden_tests.patch +0 -0
  324. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/oracle.patch +0 -0
  325. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-011/task.json +0 -0
  326. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/hidden_tests.patch +0 -0
  327. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/oracle.patch +0 -0
  328. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/katas/ka-012/task.json +0 -0
  329. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/bug.patch +0 -0
  330. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/hidden_tests.patch +0 -0
  331. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-001/task.json +0 -0
  332. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/bug.patch +0 -0
  333. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/hidden_tests.patch +0 -0
  334. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-002/task.json +0 -0
  335. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/bug.patch +0 -0
  336. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/hidden_tests.patch +0 -0
  337. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-003/task.json +0 -0
  338. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/bug.patch +0 -0
  339. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/hidden_tests.patch +0 -0
  340. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-004/task.json +0 -0
  341. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/bug.patch +0 -0
  342. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/hidden_tests.patch +0 -0
  343. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-005/task.json +0 -0
  344. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/bug.patch +0 -0
  345. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/hidden_tests.patch +0 -0
  346. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-006/task.json +0 -0
  347. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/bug.patch +0 -0
  348. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/hidden_tests.patch +0 -0
  349. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-007/task.json +0 -0
  350. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/bug.patch +0 -0
  351. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/hidden_tests.patch +0 -0
  352. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/py-cli/pc-008/task.json +0 -0
  353. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/savings_ab.jsonl +0 -0
  354. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/tasks.jsonl +0 -0
  355. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/hidden_tests.patch +0 -0
  356. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/oracle.patch +0 -0
  357. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-001/task.json +0 -0
  358. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/hidden_tests.patch +0 -0
  359. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/oracle.patch +0 -0
  360. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-002/task.json +0 -0
  361. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/hidden_tests.patch +0 -0
  362. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/oracle.patch +0 -0
  363. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-003/task.json +0 -0
  364. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/bug.patch +0 -0
  365. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/hidden_tests.patch +0 -0
  366. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-004/task.json +0 -0
  367. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/bug.patch +0 -0
  368. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/hidden_tests.patch +0 -0
  369. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-005/task.json +0 -0
  370. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/bug.patch +0 -0
  371. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/hidden_tests.patch +0 -0
  372. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-006/task.json +0 -0
  373. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/bug.patch +0 -0
  374. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/hidden_tests.patch +0 -0
  375. {minima_cli-0.9.0 → minima_cli-0.11.0}/bench/tasks/ts-api/ta-007/task.json +0 -0
  376. {minima_cli-0.9.0 → minima_cli-0.11.0}/client_sdk/minima_client/errors.py +0 -0
  377. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/README.md +0 -0
  378. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/agent-core-architecture.md +0 -0
  379. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/agent-core-implementation-plan.md +0 -0
  380. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/api-reference.md +0 -0
  381. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/concepts.md +0 -0
  382. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/examples.md +0 -0
  383. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/feature-gap-analysis.md +0 -0
  384. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/getting-started.md +0 -0
  385. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/goals-feature-plan.md +0 -0
  386. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/ground-truth-tui-plan.md +0 -0
  387. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/harness.md +0 -0
  388. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/multi-tenancy.md +0 -0
  389. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/operations.md +0 -0
  390. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/publishing.md +0 -0
  391. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs/seeding.md +0 -0
  392. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/.dockerignore +0 -0
  393. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/Dockerfile +0 -0
  394. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Accordion.tsx +0 -0
  395. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Badge.tsx +0 -0
  396. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Card.tsx +0 -0
  397. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/CardGroup.tsx +0 -0
  398. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Frame.tsx +0 -0
  399. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Note.tsx +0 -0
  400. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/PageHeader.tsx +0 -0
  401. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Steps.tsx +0 -0
  402. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/Tabs.tsx +0 -0
  403. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/index.ts +0 -0
  404. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/components/sidebar.ts +0 -0
  405. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/netlify.toml +0 -0
  406. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/nginx.conf +0 -0
  407. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/package-lock.json +0 -0
  408. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/package.json +0 -0
  409. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/api-reference/endpoints.mdx +0 -0
  410. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/cli.mdx +0 -0
  411. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/configuration.mdx +0 -0
  412. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/installation.mdx +0 -0
  413. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/interactive.mdx +0 -0
  414. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/overview.mdx +0 -0
  415. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/routing.mdx +0 -0
  416. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/sessions.mdx +0 -0
  417. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/tools.mdx +0 -0
  418. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/harness/troubleshooting.mdx +0 -0
  419. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/index.mdx +0 -0
  420. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/client-sdk.mdx +0 -0
  421. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/concepts.mdx +0 -0
  422. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/examples.mdx +0 -0
  423. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/pages/sdk/getting-started.mdx +0 -0
  424. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/favicon.png +0 -0
  425. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/logo-dark.svg +0 -0
  426. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/images/logo-light.svg +0 -0
  427. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/public/styles/global.css +0 -0
  428. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/tsconfig.json +0 -0
  429. {minima_cli-0.9.0 → minima_cli-0.11.0}/docs-site/vocs.config.ts +0 -0
  430. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/01_quickstart.sh +0 -0
  431. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/02_recommend_and_feedback.py +0 -0
  432. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/03_constraints_and_tradeoff.py +0 -0
  433. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/04_workflow.py +0 -0
  434. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/05_autocapture.py +0 -0
  435. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/06_routed_llm_call.py +0 -0
  436. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/07_multitenant_admin.py +0 -0
  437. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/README.md +0 -0
  438. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_escalation.py +0 -0
  439. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_escalation_learn.py +0 -0
  440. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_gemini.py +0 -0
  441. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_retention.py +0 -0
  442. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_warmup.py +0 -0
  443. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/agent_warmup_vary.py +0 -0
  444. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/metrics_demo.py +0 -0
  445. {minima_cli-0.9.0 → minima_cli-0.11.0}/examples/smoke_test.py +0 -0
  446. {minima_cli-0.9.0 → minima_cli-0.11.0}/maybe.js +0 -0
  447. {minima_cli-0.9.0 → minima_cli-0.11.0}/maybe.ts +0 -0
  448. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/.gitignore +0 -0
  449. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/README.md +0 -0
  450. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/biome.json +0 -0
  451. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/bun.lock +0 -0
  452. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/build-all.ts +0 -0
  453. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/build.ts +0 -0
  454. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/install.sh +0 -0
  455. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/pty_capture.py +0 -0
  456. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/scripts/stub-devtools.ts +0 -0
  457. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/agent.ts +0 -0
  458. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/events.ts +0 -0
  459. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/index.ts +0 -0
  460. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/state.ts +0 -0
  461. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/agent/tools.ts +0 -0
  462. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/compat.ts +0 -0
  463. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/events.ts +0 -0
  464. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/index.ts +0 -0
  465. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/provider_catalog.ts +0 -0
  466. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/provider_quirks.ts +0 -0
  467. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/_common.ts +0 -0
  468. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/anthropic.ts +0 -0
  469. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/base.ts +0 -0
  470. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/google.ts +0 -0
  471. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/index.ts +0 -0
  472. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/providers/openai_compat.ts +0 -0
  473. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/registry.ts +0 -0
  474. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/stream.ts +0 -0
  475. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/types.ts +0 -0
  476. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/ai/usage.ts +0 -0
  477. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/metrics.ts +0 -0
  478. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/rehydrate.ts +0 -0
  479. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/db/sink.ts +0 -0
  480. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/errtext.ts +0 -0
  481. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/index.ts +0 -0
  482. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/behavior.ts +0 -0
  483. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/catalog.ts +0 -0
  484. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/errors.ts +0 -0
  485. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/gt_factors.ts +0 -0
  486. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/mapping.ts +0 -0
  487. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/memory.ts +0 -0
  488. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/minima/mubit_memory_factory.ts +0 -0
  489. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/run_modes.ts +0 -0
  490. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/session/index.ts +0 -0
  491. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/session/store.ts +0 -0
  492. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_ddg.ts +0 -0
  493. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_exa.ts +0 -0
  494. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_io.ts +0 -0
  495. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/_search.ts +0 -0
  496. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/apply_patch.ts +0 -0
  497. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/at_mentions.ts +0 -0
  498. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/builtin.ts +0 -0
  499. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/edit.ts +0 -0
  500. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/glob.ts +0 -0
  501. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/grep.ts +0 -0
  502. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/index.ts +0 -0
  503. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/ls.ts +0 -0
  504. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/question.ts +0 -0
  505. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/read.ts +0 -0
  506. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/schema.ts +0 -0
  507. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/task.ts +0 -0
  508. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/todowrite.ts +0 -0
  509. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/types.ts +0 -0
  510. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/web_fetch.ts +0 -0
  511. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/web_search.ts +0 -0
  512. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tools/write.ts +0 -0
  513. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/auth.ts +0 -0
  514. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/busy.tsx +0 -0
  515. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/child_tree.tsx +0 -0
  516. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/compact.ts +0 -0
  517. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/config_store.ts +0 -0
  518. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/context.ts +0 -0
  519. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/current_action.ts +0 -0
  520. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/messages.tsx +0 -0
  521. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/model-picker.tsx +0 -0
  522. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/mouse-scroll.ts +0 -0
  523. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/projects.ts +0 -0
  524. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/routing-warnings.ts +0 -0
  525. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/status.tsx +0 -0
  526. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/tui/tips.ts +0 -0
  527. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/types.d.ts +0 -0
  528. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/src/version.ts +0 -0
  529. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/agent.test.ts +0 -0
  530. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/ai.test.ts +0 -0
  531. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/anthropic.test.ts +0 -0
  532. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/apply_patch.test.ts +0 -0
  533. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/auth.test.ts +0 -0
  534. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/budget.test.ts +0 -0
  535. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/busy.test.ts +0 -0
  536. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/candidate-filter.test.ts +0 -0
  537. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/catalog.test.ts +0 -0
  538. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/client.test.ts +0 -0
  539. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/confidence.test.ts +0 -0
  540. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/config_store.test.ts +0 -0
  541. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/current_action.test.ts +0 -0
  542. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/effort.test.ts +0 -0
  543. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/error-ux.test.ts +0 -0
  544. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/google.test.ts +0 -0
  545. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt-contract.test.ts +0 -0
  546. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/gt_factors.test.ts +0 -0
  547. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/isolation.test.ts +0 -0
  548. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/memory.test.ts +0 -0
  549. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/mouse-scroll.test.ts +0 -0
  550. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/openai_compat.test.ts +0 -0
  551. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/recall-user-id.test.ts +0 -0
  552. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/render-buffer.test.ts +0 -0
  553. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/run_modes.test.ts +0 -0
  554. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/session.test.ts +0 -0
  555. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/spawn.test.ts +0 -0
  556. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/task.test.ts +0 -0
  557. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/thinking.test.ts +0 -0
  558. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/tips.test.ts +0 -0
  559. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/tools.test.ts +0 -0
  560. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tests/why.test.ts +0 -0
  561. {minima_cli-0.9.0 → minima_cli-0.11.0}/packages/tui/tsconfig.json +0 -0
  562. {minima_cli-0.9.0 → minima_cli-0.11.0}/packaging/homebrew/README.md +0 -0
  563. {minima_cli-0.9.0 → minima_cli-0.11.0}/packaging/homebrew/render_formula.py +0 -0
  564. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
  565. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run1.json +0 -0
  566. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run2.json +0 -0
  567. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/strategies_run3.json +0 -0
  568. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_125009/tasks.jsonl +0 -0
  569. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/REPORT.md +0 -0
  570. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
  571. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run1.json +0 -0
  572. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run2.json +0 -0
  573. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run3.json +0 -0
  574. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run4.json +0 -0
  575. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/strategies_run5.json +0 -0
  576. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/summary.json +0 -0
  577. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_130252/tasks.jsonl +0 -0
  578. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
  579. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/strategies_run1.json +0 -0
  580. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/strategies_run2.json +0 -0
  581. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_182838/tasks.jsonl +0 -0
  582. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/REPORT.md +0 -0
  583. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/memory_audit.json +0 -0
  584. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
  585. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run1.json +0 -0
  586. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run2.json +0 -0
  587. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run3.json +0 -0
  588. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run4.json +0 -0
  589. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/strategies_run5.json +0 -0
  590. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/summary.json +0 -0
  591. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260612_183343/tasks.jsonl +0 -0
  592. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/REPORT.md +0 -0
  593. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/memory_audit.json +0 -0
  594. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
  595. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run1.json +0 -0
  596. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run2.json +0 -0
  597. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run3.json +0 -0
  598. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run4.json +0 -0
  599. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/strategies_run5.json +0 -0
  600. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/summary.json +0 -0
  601. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260615_101732/tasks.jsonl +0 -0
  602. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/memory_audit.json +0 -0
  603. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/recall_debug.jsonl +0 -0
  604. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/20260624_103307/tasks.jsonl +0 -0
  605. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  606. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/summary.json +0 -0
  607. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  608. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
  609. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  610. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/summary.json +0 -0
  611. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  612. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
  613. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
  614. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/escalation_20260612_201825/summary.json +0 -0
  615. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/_manifest.json +0 -0
  616. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/calibration.json +0 -0
  617. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/feedback.json +0 -0
  618. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/health.json +0 -0
  619. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/models.json +0 -0
  620. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/recommend.json +0 -0
  621. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/savings.json +0 -0
  622. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/strategies.json +0 -0
  623. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/playground_p1/workflow.json +0 -0
  624. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/REPORT.md +0 -0
  625. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/results.jsonl +0 -0
  626. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/retention_20260612_201828/summary.json +0 -0
  627. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  628. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
  629. {minima_cli-0.9.0 → minima_cli-0.11.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  630. {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/eval/classify_dataset.json +0 -0
  631. {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/eval/eval_classify.py +0 -0
  632. {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing-web.ts +0 -0
  633. {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing.sh +0 -0
  634. {minima_cli-0.9.0 → minima_cli-0.11.0}/scripts/test-routing.ts +0 -0
  635. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/__init__.py +0 -0
  636. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/__init__.py +0 -0
  637. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/auth.py +0 -0
  638. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/errors.py +0 -0
  639. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/__init__.py +0 -0
  640. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/calibration.py +0 -0
  641. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/capabilities.py +0 -0
  642. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/models.py +0 -0
  643. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/recommend.py +0 -0
  644. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/api/routers/strategies.py +0 -0
  645. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/__init__.py +0 -0
  646. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/data/capability_priors.json +0 -0
  647. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/merge.py +0 -0
  648. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/refresh.py +0 -0
  649. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/__init__.py +0 -0
  650. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/litellm.py +0 -0
  651. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/catalog/sources/openrouter.py +0 -0
  652. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/deps.py +0 -0
  653. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/logging.py +0 -0
  654. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/__init__.py +0 -0
  655. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/memory/threadpool.py +0 -0
  656. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/__init__.py +0 -0
  657. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/report.py +0 -0
  658. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/metrics/savings.py +0 -0
  659. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/__init__.py +0 -0
  660. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/_pg_pool.py +0 -0
  661. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/_redis_client.py +0 -0
  662. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/classify.py +0 -0
  663. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/durablerefs.py +0 -0
  664. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/recommender/recstore.py +0 -0
  665. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/__init__.py +0 -0
  666. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/capabilities.py +0 -0
  667. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/common.py +0 -0
  668. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/models_catalog.py +0 -0
  669. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/strategies.py +0 -0
  670. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/schemas/workflow.py +0 -0
  671. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/__init__.py +0 -0
  672. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/items.py +0 -0
  673. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/seeding/llmrouterbench.py +0 -0
  674. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/__init__.py +0 -0
  675. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/tenancy/context.py +0 -0
  676. {minima_cli-0.9.0 → minima_cli-0.11.0}/src/minima/version.py +0 -0
  677. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/__init__.py +0 -0
  678. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/BENCHMARKS.md +0 -0
  679. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/CRITERIA.md +0 -0
  680. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/RESULTS.md +0 -0
  681. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/__init__.py +0 -0
  682. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/llmrouterbench_config.py +0 -0
  683. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/prompt_length_benchmark.py +0 -0
  684. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
  685. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/eval/test_routerbench_savings.py +0 -0
  686. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_auth.py +0 -0
  687. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_lesson_promotion.py +0 -0
  688. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_strategies_api.py +0 -0
  689. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/integration/test_workflow_models_health.py +0 -0
  690. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  691. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/live/test_phase3_live.py +0 -0
  692. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_aggregate.py +0 -0
  693. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_aggregate_decay.py +0 -0
  694. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_autocapture.py +0 -0
  695. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_capabilities.py +0 -0
  696. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_classify_benchmark.py +0 -0
  697. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_classify_keys.py +0 -0
  698. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_cluster.py +0 -0
  699. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_cost_band.py +0 -0
  700. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_decisionlog.py +0 -0
  701. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_iterations.py +0 -0
  702. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_neighbor_classify.py +0 -0
  703. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_prompt_length_benchmark.py +0 -0
  704. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_score.py +0 -0
  705. {minima_cli-0.9.0 → minima_cli-0.11.0}/tests/unit/test_strategies.py +0 -0
  706. {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,MINIMA_REASONER_PROVIDER=gemini,MINIMA_REASONER_MODEL=gemini-3.5-flash" \
92
- --set-secrets="GEMINI_API_KEY=minima-prod-gemini-key:latest,ANTHROPIC_API_KEY=minima-prod-anthropic-key:latest,OPENROUTER_API_KEY=minima-prod-openrouter-key:latest,MINIMA_DATABASE_URL=minima-prod-db-url:latest,MINIMA_REDIS_URL=minima-prod-redis-url:latest" \
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`, `Reasoner`, `QualityJudge`).
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`) — when memory is thin/conflicting, optionally consult a cheap-LLM reasoner (`llm/`, off by default, `MINIMA_REASONER_PROVIDER`).
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`): behind `MINIMA_TUI_GROUND_TRUTH=1` (**off by default the default path must behave exactly as before**). When on: 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. `/plan` (planner persona + design council + `GROUND_TRUTH.md` output) is part of this gate. Anything that changes default-path behavior does NOT belong behind guidance text — gate it on `config.groundTruth`.
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.9.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 zero-code intake: route ``mubit.learn`` auto-capture into Minima's lane.
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