minima-cli 0.8.0__tar.gz → 0.9.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 (680) hide show
  1. {minima_cli-0.8.0 → minima_cli-0.9.0}/.gitignore +9 -0
  2. {minima_cli-0.8.0 → minima_cli-0.9.0}/CHANGELOG.md +47 -1
  3. minima_cli-0.9.0/CLAUDE.md +104 -0
  4. {minima_cli-0.8.0 → minima_cli-0.9.0}/PKG-INFO +1 -1
  5. minima_cli-0.9.0/bench/.gitignore +1 -0
  6. minima_cli-0.9.0/bench/README.md +374 -0
  7. minima_cli-0.9.0/bench/assert/check.ts +41 -0
  8. minima_cli-0.9.0/bench/assert/db.ts +74 -0
  9. minima_cli-0.9.0/bench/driver/env.ts +92 -0
  10. minima_cli-0.9.0/bench/driver/headless.ts +54 -0
  11. minima_cli-0.9.0/bench/driver/mock_server.ts +138 -0
  12. minima_cli-0.9.0/bench/driver/rig.ts +253 -0
  13. minima_cli-0.9.0/bench/driver/scratch.ts +57 -0
  14. minima_cli-0.9.0/bench/fixtures/templates/_example/mathx.py +11 -0
  15. minima_cli-0.9.0/bench/fixtures/templates/_example/tests/test_public.py +9 -0
  16. minima_cli-0.9.0/bench/fixtures/templates/js-lib/README.md +29 -0
  17. minima_cli-0.9.0/bench/fixtures/templates/js-lib/package.json +10 -0
  18. minima_cli-0.9.0/bench/fixtures/templates/js-lib/src/csv.ts +205 -0
  19. minima_cli-0.9.0/bench/fixtures/templates/js-lib/src/index.ts +55 -0
  20. minima_cli-0.9.0/bench/fixtures/templates/js-lib/src/object.ts +253 -0
  21. minima_cli-0.9.0/bench/fixtures/templates/js-lib/src/stats.ts +156 -0
  22. minima_cli-0.9.0/bench/fixtures/templates/js-lib/src/transform.ts +138 -0
  23. minima_cli-0.9.0/bench/fixtures/templates/js-lib/tests/csv.test.ts +100 -0
  24. minima_cli-0.9.0/bench/fixtures/templates/js-lib/tests/object.test.ts +108 -0
  25. minima_cli-0.9.0/bench/fixtures/templates/js-lib/tests/stats.test.ts +80 -0
  26. minima_cli-0.9.0/bench/fixtures/templates/js-lib/tests/transform.test.ts +114 -0
  27. minima_cli-0.9.0/bench/fixtures/templates/katas/README.md +15 -0
  28. minima_cli-0.9.0/bench/fixtures/templates/katas/js/chunk.js +25 -0
  29. minima_cli-0.9.0/bench/fixtures/templates/katas/js/droot.js +24 -0
  30. minima_cli-0.9.0/bench/fixtures/templates/katas/js/duration.js +27 -0
  31. minima_cli-0.9.0/bench/fixtures/templates/katas/js/wrap.js +29 -0
  32. minima_cli-0.9.0/bench/fixtures/templates/katas/py/checksum.py +27 -0
  33. minima_cli-0.9.0/bench/fixtures/templates/katas/py/intervals.py +24 -0
  34. minima_cli-0.9.0/bench/fixtures/templates/katas/py/rle.py +27 -0
  35. minima_cli-0.9.0/bench/fixtures/templates/katas/py/roman.py +21 -0
  36. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/js/chunk/smoke.test.js +6 -0
  37. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/js/droot/smoke.test.js +6 -0
  38. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/js/duration/smoke.test.js +6 -0
  39. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/js/wrap/smoke.test.js +6 -0
  40. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/py/conftest.py +8 -0
  41. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/py/test_checksum_smoke.py +5 -0
  42. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/py/test_intervals_smoke.py +5 -0
  43. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/py/test_rle_smoke.py +5 -0
  44. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/py/test_roman_smoke.py +5 -0
  45. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/ts/brackets/smoke.test.ts +6 -0
  46. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/ts/drift/smoke.test.ts +6 -0
  47. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/ts/ordinal/smoke.test.ts +6 -0
  48. minima_cli-0.9.0/bench/fixtures/templates/katas/tests/ts/slug/smoke.test.ts +6 -0
  49. minima_cli-0.9.0/bench/fixtures/templates/katas/ts/brackets.ts +25 -0
  50. minima_cli-0.9.0/bench/fixtures/templates/katas/ts/drift.ts +26 -0
  51. minima_cli-0.9.0/bench/fixtures/templates/katas/ts/ordinal.ts +22 -0
  52. minima_cli-0.9.0/bench/fixtures/templates/katas/ts/slug.ts +23 -0
  53. minima_cli-0.9.0/bench/fixtures/templates/py-cli/.gitignore +3 -0
  54. minima_cli-0.9.0/bench/fixtures/templates/py-cli/README.md +35 -0
  55. minima_cli-0.9.0/bench/fixtures/templates/py-cli/pytest.ini +3 -0
  56. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/__init__.py +20 -0
  57. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/__main__.py +8 -0
  58. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/cli.py +247 -0
  59. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/dates.py +94 -0
  60. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/migrations.py +109 -0
  61. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/models.py +193 -0
  62. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/query.py +178 -0
  63. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/report.py +211 -0
  64. minima_cli-0.9.0/bench/fixtures/templates/py-cli/taskman/storage.py +110 -0
  65. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/__init__.py +1 -0
  66. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/conftest.py +48 -0
  67. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_cli.py +169 -0
  68. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_dates.py +61 -0
  69. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_models.py +120 -0
  70. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_query.py +173 -0
  71. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_report.py +125 -0
  72. minima_cli-0.9.0/bench/fixtures/templates/py-cli/tests/test_storage.py +148 -0
  73. minima_cli-0.9.0/bench/fixtures/templates/ts-api/README.md +41 -0
  74. minima_cli-0.9.0/bench/fixtures/templates/ts-api/package.json +9 -0
  75. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/app.ts +127 -0
  76. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/auth.ts +76 -0
  77. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/errors.ts +27 -0
  78. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/handlers/admin.ts +53 -0
  79. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/handlers/links.ts +114 -0
  80. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/handlers/notes.ts +67 -0
  81. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/handlers/stats.ts +45 -0
  82. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/persist.ts +152 -0
  83. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/ratelimit.ts +92 -0
  84. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/respond.ts +20 -0
  85. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/router.ts +90 -0
  86. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/server.ts +67 -0
  87. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/store.ts +310 -0
  88. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/types.ts +96 -0
  89. minima_cli-0.9.0/bench/fixtures/templates/ts-api/src/validate.ts +219 -0
  90. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/auth.test.ts +46 -0
  91. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/health.test.ts +18 -0
  92. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/helpers.ts +58 -0
  93. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/links.test.ts +153 -0
  94. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/notes.test.ts +88 -0
  95. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/persist.test.ts +95 -0
  96. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/ratelimit.test.ts +51 -0
  97. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/router.test.ts +34 -0
  98. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/stats.test.ts +59 -0
  99. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/store.test.ts +75 -0
  100. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tests/validate.test.ts +72 -0
  101. minima_cli-0.9.0/bench/fixtures/templates/ts-api/tsconfig.json +12 -0
  102. minima_cli-0.9.0/bench/flows/f10_recovery_ladder.ts +93 -0
  103. minima_cli-0.9.0/bench/flows/f12_learning_loop.ts +228 -0
  104. minima_cli-0.9.0/bench/flows/f1_headless.ts +178 -0
  105. minima_cli-0.9.0/bench/flows/f4_cost_budget.ts +152 -0
  106. minima_cli-0.9.0/bench/flows/f5_task_dag_worktree.ts +114 -0
  107. minima_cli-0.9.0/bench/flows/f6_resume_lineage.ts +144 -0
  108. minima_cli-0.9.0/bench/flows/f7_permissions_plan.ts +202 -0
  109. minima_cli-0.9.0/bench/flows/f9_offline_reconnect.ts +116 -0
  110. minima_cli-0.9.0/bench/gen/attempt.ts +214 -0
  111. minima_cli-0.9.0/bench/gen/build_index.ts +78 -0
  112. minima_cli-0.9.0/bench/gen/calibrate.ts +92 -0
  113. minima_cli-0.9.0/bench/gen/calibrate_all.ts +114 -0
  114. minima_cli-0.9.0/bench/gen/calibration_report.ts +98 -0
  115. minima_cli-0.9.0/bench/gen/materialize.ts +126 -0
  116. minima_cli-0.9.0/bench/gen/savings_ab.ts +119 -0
  117. minima_cli-0.9.0/bench/gen/savings_report.ts +105 -0
  118. minima_cli-0.9.0/bench/gen/validate_task.ts +125 -0
  119. minima_cli-0.9.0/bench/run.ts +52 -0
  120. minima_cli-0.9.0/bench/tasks/_example/ex-001/bug.patch +10 -0
  121. minima_cli-0.9.0/bench/tasks/_example/ex-001/hidden_tests.patch +21 -0
  122. minima_cli-0.9.0/bench/tasks/_example/ex-001/task.json +13 -0
  123. minima_cli-0.9.0/bench/tasks/calibration.jsonl +330 -0
  124. minima_cli-0.9.0/bench/tasks/js-lib/jl-001/bug.patch +14 -0
  125. minima_cli-0.9.0/bench/tasks/js-lib/jl-001/hidden_tests.patch +22 -0
  126. minima_cli-0.9.0/bench/tasks/js-lib/jl-001/task.json +12 -0
  127. minima_cli-0.9.0/bench/tasks/js-lib/jl-002/bug.patch +13 -0
  128. minima_cli-0.9.0/bench/tasks/js-lib/jl-002/hidden_tests.patch +22 -0
  129. minima_cli-0.9.0/bench/tasks/js-lib/jl-002/task.json +12 -0
  130. minima_cli-0.9.0/bench/tasks/js-lib/jl-003/bug.patch +42 -0
  131. minima_cli-0.9.0/bench/tasks/js-lib/jl-003/hidden_tests.patch +55 -0
  132. minima_cli-0.9.0/bench/tasks/js-lib/jl-003/task.json +14 -0
  133. minima_cli-0.9.0/bench/tasks/js-lib/jl-004/bug.patch +48 -0
  134. minima_cli-0.9.0/bench/tasks/js-lib/jl-004/hidden_tests.patch +37 -0
  135. minima_cli-0.9.0/bench/tasks/js-lib/jl-004/task.json +14 -0
  136. minima_cli-0.9.0/bench/tasks/js-lib/jl-005/hidden_tests.patch +36 -0
  137. minima_cli-0.9.0/bench/tasks/js-lib/jl-005/oracle.patch +68 -0
  138. minima_cli-0.9.0/bench/tasks/js-lib/jl-005/task.json +14 -0
  139. minima_cli-0.9.0/bench/tasks/js-lib/jl-006/bug.patch +102 -0
  140. minima_cli-0.9.0/bench/tasks/js-lib/jl-006/hidden_tests.patch +46 -0
  141. minima_cli-0.9.0/bench/tasks/js-lib/jl-006/task.json +13 -0
  142. minima_cli-0.9.0/bench/tasks/katas/ka-001/hidden_tests.patch +40 -0
  143. minima_cli-0.9.0/bench/tasks/katas/ka-001/oracle.patch +24 -0
  144. minima_cli-0.9.0/bench/tasks/katas/ka-001/task.json +12 -0
  145. minima_cli-0.9.0/bench/tasks/katas/ka-002/hidden_tests.patch +39 -0
  146. minima_cli-0.9.0/bench/tasks/katas/ka-002/oracle.patch +27 -0
  147. minima_cli-0.9.0/bench/tasks/katas/ka-002/task.json +12 -0
  148. minima_cli-0.9.0/bench/tasks/katas/ka-003/hidden_tests.patch +40 -0
  149. minima_cli-0.9.0/bench/tasks/katas/ka-003/oracle.patch +21 -0
  150. minima_cli-0.9.0/bench/tasks/katas/ka-003/task.json +12 -0
  151. minima_cli-0.9.0/bench/tasks/katas/ka-004/hidden_tests.patch +35 -0
  152. minima_cli-0.9.0/bench/tasks/katas/ka-004/oracle.patch +28 -0
  153. minima_cli-0.9.0/bench/tasks/katas/ka-004/task.json +12 -0
  154. minima_cli-0.9.0/bench/tasks/katas/ka-005/hidden_tests.patch +40 -0
  155. minima_cli-0.9.0/bench/tasks/katas/ka-005/oracle.patch +29 -0
  156. minima_cli-0.9.0/bench/tasks/katas/ka-005/task.json +12 -0
  157. minima_cli-0.9.0/bench/tasks/katas/ka-006/hidden_tests.patch +33 -0
  158. minima_cli-0.9.0/bench/tasks/katas/ka-006/oracle.patch +15 -0
  159. minima_cli-0.9.0/bench/tasks/katas/ka-006/task.json +12 -0
  160. minima_cli-0.9.0/bench/tasks/katas/ka-007/hidden_tests.patch +40 -0
  161. minima_cli-0.9.0/bench/tasks/katas/ka-007/oracle.patch +22 -0
  162. minima_cli-0.9.0/bench/tasks/katas/ka-007/task.json +12 -0
  163. minima_cli-0.9.0/bench/tasks/katas/ka-008/hidden_tests.patch +40 -0
  164. minima_cli-0.9.0/bench/tasks/katas/ka-008/oracle.patch +27 -0
  165. minima_cli-0.9.0/bench/tasks/katas/ka-008/task.json +12 -0
  166. minima_cli-0.9.0/bench/tasks/katas/ka-009/hidden_tests.patch +40 -0
  167. minima_cli-0.9.0/bench/tasks/katas/ka-009/oracle.patch +22 -0
  168. minima_cli-0.9.0/bench/tasks/katas/ka-009/task.json +12 -0
  169. minima_cli-0.9.0/bench/tasks/katas/ka-010/hidden_tests.patch +42 -0
  170. minima_cli-0.9.0/bench/tasks/katas/ka-010/oracle.patch +34 -0
  171. minima_cli-0.9.0/bench/tasks/katas/ka-010/task.json +12 -0
  172. minima_cli-0.9.0/bench/tasks/katas/ka-011/hidden_tests.patch +46 -0
  173. minima_cli-0.9.0/bench/tasks/katas/ka-011/oracle.patch +16 -0
  174. minima_cli-0.9.0/bench/tasks/katas/ka-011/task.json +12 -0
  175. minima_cli-0.9.0/bench/tasks/katas/ka-012/hidden_tests.patch +41 -0
  176. minima_cli-0.9.0/bench/tasks/katas/ka-012/oracle.patch +26 -0
  177. minima_cli-0.9.0/bench/tasks/katas/ka-012/task.json +12 -0
  178. minima_cli-0.9.0/bench/tasks/py-cli/pc-001/bug.patch +13 -0
  179. minima_cli-0.9.0/bench/tasks/py-cli/pc-001/hidden_tests.patch +31 -0
  180. minima_cli-0.9.0/bench/tasks/py-cli/pc-001/task.json +13 -0
  181. minima_cli-0.9.0/bench/tasks/py-cli/pc-002/bug.patch +13 -0
  182. minima_cli-0.9.0/bench/tasks/py-cli/pc-002/hidden_tests.patch +31 -0
  183. minima_cli-0.9.0/bench/tasks/py-cli/pc-002/task.json +13 -0
  184. minima_cli-0.9.0/bench/tasks/py-cli/pc-003/bug.patch +13 -0
  185. minima_cli-0.9.0/bench/tasks/py-cli/pc-003/hidden_tests.patch +34 -0
  186. minima_cli-0.9.0/bench/tasks/py-cli/pc-003/task.json +13 -0
  187. minima_cli-0.9.0/bench/tasks/py-cli/pc-004/bug.patch +24 -0
  188. minima_cli-0.9.0/bench/tasks/py-cli/pc-004/hidden_tests.patch +45 -0
  189. minima_cli-0.9.0/bench/tasks/py-cli/pc-004/task.json +14 -0
  190. minima_cli-0.9.0/bench/tasks/py-cli/pc-005/bug.patch +37 -0
  191. minima_cli-0.9.0/bench/tasks/py-cli/pc-005/hidden_tests.patch +38 -0
  192. minima_cli-0.9.0/bench/tasks/py-cli/pc-005/task.json +14 -0
  193. minima_cli-0.9.0/bench/tasks/py-cli/pc-006/bug.patch +24 -0
  194. minima_cli-0.9.0/bench/tasks/py-cli/pc-006/hidden_tests.patch +39 -0
  195. minima_cli-0.9.0/bench/tasks/py-cli/pc-006/task.json +14 -0
  196. minima_cli-0.9.0/bench/tasks/py-cli/pc-007/bug.patch +89 -0
  197. minima_cli-0.9.0/bench/tasks/py-cli/pc-007/hidden_tests.patch +84 -0
  198. minima_cli-0.9.0/bench/tasks/py-cli/pc-007/task.json +14 -0
  199. minima_cli-0.9.0/bench/tasks/py-cli/pc-008/bug.patch +13 -0
  200. minima_cli-0.9.0/bench/tasks/py-cli/pc-008/hidden_tests.patch +37 -0
  201. minima_cli-0.9.0/bench/tasks/py-cli/pc-008/task.json +14 -0
  202. minima_cli-0.9.0/bench/tasks/savings_ab.jsonl +66 -0
  203. minima_cli-0.9.0/bench/tasks/tasks.jsonl +33 -0
  204. minima_cli-0.9.0/bench/tasks/ts-api/ta-001/hidden_tests.patch +41 -0
  205. minima_cli-0.9.0/bench/tasks/ts-api/ta-001/oracle.patch +31 -0
  206. minima_cli-0.9.0/bench/tasks/ts-api/ta-001/task.json +12 -0
  207. minima_cli-0.9.0/bench/tasks/ts-api/ta-002/hidden_tests.patch +68 -0
  208. minima_cli-0.9.0/bench/tasks/ts-api/ta-002/oracle.patch +68 -0
  209. minima_cli-0.9.0/bench/tasks/ts-api/ta-002/task.json +14 -0
  210. minima_cli-0.9.0/bench/tasks/ts-api/ta-003/hidden_tests.patch +67 -0
  211. minima_cli-0.9.0/bench/tasks/ts-api/ta-003/oracle.patch +105 -0
  212. minima_cli-0.9.0/bench/tasks/ts-api/ta-003/task.json +14 -0
  213. minima_cli-0.9.0/bench/tasks/ts-api/ta-004/bug.patch +24 -0
  214. minima_cli-0.9.0/bench/tasks/ts-api/ta-004/hidden_tests.patch +42 -0
  215. minima_cli-0.9.0/bench/tasks/ts-api/ta-004/task.json +14 -0
  216. minima_cli-0.9.0/bench/tasks/ts-api/ta-005/bug.patch +21 -0
  217. minima_cli-0.9.0/bench/tasks/ts-api/ta-005/hidden_tests.patch +51 -0
  218. minima_cli-0.9.0/bench/tasks/ts-api/ta-005/task.json +14 -0
  219. minima_cli-0.9.0/bench/tasks/ts-api/ta-006/bug.patch +27 -0
  220. minima_cli-0.9.0/bench/tasks/ts-api/ta-006/hidden_tests.patch +49 -0
  221. minima_cli-0.9.0/bench/tasks/ts-api/ta-006/task.json +14 -0
  222. minima_cli-0.9.0/bench/tasks/ts-api/ta-007/bug.patch +27 -0
  223. minima_cli-0.9.0/bench/tasks/ts-api/ta-007/hidden_tests.patch +79 -0
  224. minima_cli-0.9.0/bench/tasks/ts-api/ta-007/task.json +15 -0
  225. minima_cli-0.9.0/docs/ground-truth-build-guide.md +535 -0
  226. minima_cli-0.9.0/docs/ground-truth-tui-plan.md +730 -0
  227. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/README.md +4 -2
  228. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/package.json +1 -1
  229. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/agent.ts +69 -10
  230. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/loop.ts +83 -3
  231. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/faux.ts +4 -1
  232. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/google.ts +4 -1
  233. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/stream.ts +17 -0
  234. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/cli/main.ts +37 -8
  235. minima_cli-0.9.0/packages/tui/src/db/minima_db.ts +910 -0
  236. minima_cli-0.9.0/packages/tui/src/minima/behavior.ts +138 -0
  237. minima_cli-0.9.0/packages/tui/src/minima/check.ts +238 -0
  238. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/client.ts +10 -3
  239. minima_cli-0.9.0/packages/tui/src/minima/confidence.ts +15 -0
  240. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/config.ts +11 -0
  241. minima_cli-0.9.0/packages/tui/src/minima/ground_truth.ts +725 -0
  242. minima_cli-0.9.0/packages/tui/src/minima/gt_contract.ts +93 -0
  243. minima_cli-0.9.0/packages/tui/src/minima/gt_factors.ts +331 -0
  244. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/index.ts +20 -0
  245. minima_cli-0.9.0/packages/tui/src/minima/plan_council.ts +794 -0
  246. minima_cli-0.9.0/packages/tui/src/minima/plan_session.ts +455 -0
  247. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/router.ts +7 -0
  248. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/runtime.ts +128 -28
  249. minima_cli-0.9.0/packages/tui/src/minima/why.ts +124 -0
  250. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/run_modes.ts +8 -0
  251. minima_cli-0.9.0/packages/tui/src/tools/_ddg.ts +245 -0
  252. minima_cli-0.9.0/packages/tui/src/tools/_search.ts +79 -0
  253. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/builtin.ts +7 -1
  254. minima_cli-0.9.0/packages/tui/src/tools/todowrite.ts +92 -0
  255. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/web_fetch.ts +10 -6
  256. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/web_search.ts +10 -7
  257. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/app.tsx +782 -94
  258. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/child_tree.tsx +17 -4
  259. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/layout.ts +69 -0
  260. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/messages.tsx +21 -7
  261. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/permissions.ts +78 -5
  262. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/routing-warnings.ts +4 -0
  263. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/agent.test.ts +153 -0
  264. minima_cli-0.9.0/packages/tui/tests/behavior.test.ts +318 -0
  265. minima_cli-0.9.0/packages/tui/tests/check.test.ts +173 -0
  266. minima_cli-0.9.0/packages/tui/tests/confidence.test.ts +74 -0
  267. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/db.test.ts +7 -1
  268. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/error-ux.test.ts +2 -0
  269. minima_cli-0.9.0/packages/tui/tests/feedback-grounded.test.ts +196 -0
  270. minima_cli-0.9.0/packages/tui/tests/gate.test.ts +730 -0
  271. minima_cli-0.9.0/packages/tui/tests/ground_truth.test.ts +832 -0
  272. minima_cli-0.9.0/packages/tui/tests/grounded.test.ts +194 -0
  273. minima_cli-0.9.0/packages/tui/tests/gt-contract.test.ts +104 -0
  274. minima_cli-0.9.0/packages/tui/tests/gt-e2e.test.ts +339 -0
  275. minima_cli-0.9.0/packages/tui/tests/gt-footer.test.ts +52 -0
  276. minima_cli-0.9.0/packages/tui/tests/gt_factors.test.ts +211 -0
  277. minima_cli-0.9.0/packages/tui/tests/hooks.test.ts +223 -0
  278. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/ladder.test.ts +174 -2
  279. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/layout.test.ts +72 -0
  280. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/minima.test.ts +49 -0
  281. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/minima_memory.test.ts +52 -0
  282. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/permissions.test.ts +105 -0
  283. minima_cli-0.9.0/packages/tui/tests/plan_council.test.ts +396 -0
  284. minima_cli-0.9.0/packages/tui/tests/plan_session.test.ts +392 -0
  285. minima_cli-0.9.0/packages/tui/tests/recall-user-id.test.ts +87 -0
  286. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/run_modes.test.ts +50 -4
  287. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/tools.test.ts +120 -4
  288. minima_cli-0.9.0/packages/tui/tests/why.test.ts +154 -0
  289. {minima_cli-0.8.0 → minima_cli-0.9.0}/pyproject.toml +1 -1
  290. {minima_cli-0.8.0 → minima_cli-0.9.0}/uv.lock +1 -1
  291. minima_cli-0.8.0/packages/tui/src/db/minima_db.ts +0 -442
  292. minima_cli-0.8.0/packages/tui/src/tools/todowrite.ts +0 -65
  293. {minima_cli-0.8.0 → minima_cli-0.9.0}/.dockerignore +0 -0
  294. {minima_cli-0.8.0 → minima_cli-0.9.0}/.env.example +0 -0
  295. {minima_cli-0.8.0 → minima_cli-0.9.0}/.github/workflows/catalog-snapshot.yml +0 -0
  296. {minima_cli-0.8.0 → minima_cli-0.9.0}/.github/workflows/ci.yml +0 -0
  297. {minima_cli-0.8.0 → minima_cli-0.9.0}/.github/workflows/prod.yml +0 -0
  298. {minima_cli-0.8.0 → minima_cli-0.9.0}/.github/workflows/release-cli.yml +0 -0
  299. {minima_cli-0.8.0 → minima_cli-0.9.0}/.github/workflows/staging.yml +0 -0
  300. {minima_cli-0.8.0 → minima_cli-0.9.0}/AGENTS.md +0 -0
  301. {minima_cli-0.8.0 → minima_cli-0.9.0}/Dockerfile +0 -0
  302. {minima_cli-0.8.0 → minima_cli-0.9.0}/LICENSE +0 -0
  303. {minima_cli-0.8.0 → minima_cli-0.9.0}/Makefile +0 -0
  304. {minima_cli-0.8.0 → minima_cli-0.9.0}/README.md +0 -0
  305. {minima_cli-0.8.0 → minima_cli-0.9.0}/client_sdk/minima_client/__init__.py +0 -0
  306. {minima_cli-0.8.0 → minima_cli-0.9.0}/client_sdk/minima_client/autocapture.py +0 -0
  307. {minima_cli-0.8.0 → minima_cli-0.9.0}/client_sdk/minima_client/client.py +0 -0
  308. {minima_cli-0.8.0 → minima_cli-0.9.0}/client_sdk/minima_client/errors.py +0 -0
  309. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/README.md +0 -0
  310. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/agent-core-architecture.md +0 -0
  311. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/agent-core-implementation-plan.md +0 -0
  312. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/api-reference.md +0 -0
  313. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/client-sdk.md +0 -0
  314. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/concepts.md +0 -0
  315. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/configuration.md +0 -0
  316. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/examples.md +0 -0
  317. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/feature-gap-analysis.md +0 -0
  318. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/getting-started.md +0 -0
  319. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/goals-feature-plan.md +0 -0
  320. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/harness.md +0 -0
  321. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/multi-tenancy.md +0 -0
  322. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/operations.md +0 -0
  323. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/publishing.md +0 -0
  324. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs/seeding.md +0 -0
  325. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/.dockerignore +0 -0
  326. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/Dockerfile +0 -0
  327. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Accordion.tsx +0 -0
  328. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Badge.tsx +0 -0
  329. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Card.tsx +0 -0
  330. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/CardGroup.tsx +0 -0
  331. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Frame.tsx +0 -0
  332. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Note.tsx +0 -0
  333. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/PageHeader.tsx +0 -0
  334. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Steps.tsx +0 -0
  335. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/Tabs.tsx +0 -0
  336. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/index.ts +0 -0
  337. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/components/sidebar.ts +0 -0
  338. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/netlify.toml +0 -0
  339. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/nginx.conf +0 -0
  340. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/package-lock.json +0 -0
  341. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/package.json +0 -0
  342. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/api-reference/endpoints.mdx +0 -0
  343. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/cli.mdx +0 -0
  344. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/configuration.mdx +0 -0
  345. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/installation.mdx +0 -0
  346. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/interactive.mdx +0 -0
  347. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/overview.mdx +0 -0
  348. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/routing.mdx +0 -0
  349. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/sessions.mdx +0 -0
  350. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/tools.mdx +0 -0
  351. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/harness/troubleshooting.mdx +0 -0
  352. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/index.mdx +0 -0
  353. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/sdk/client-sdk.mdx +0 -0
  354. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/sdk/concepts.mdx +0 -0
  355. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/sdk/examples.mdx +0 -0
  356. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/pages/sdk/getting-started.mdx +0 -0
  357. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/public/images/favicon.png +0 -0
  358. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/public/images/logo-dark.svg +0 -0
  359. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/public/images/logo-light.svg +0 -0
  360. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/public/styles/global.css +0 -0
  361. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/tsconfig.json +0 -0
  362. {minima_cli-0.8.0 → minima_cli-0.9.0}/docs-site/vocs.config.ts +0 -0
  363. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/01_quickstart.sh +0 -0
  364. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/02_recommend_and_feedback.py +0 -0
  365. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/03_constraints_and_tradeoff.py +0 -0
  366. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/04_workflow.py +0 -0
  367. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/05_autocapture.py +0 -0
  368. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/06_routed_llm_call.py +0 -0
  369. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/07_multitenant_admin.py +0 -0
  370. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/README.md +0 -0
  371. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_escalation.py +0 -0
  372. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_escalation_learn.py +0 -0
  373. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_gemini.py +0 -0
  374. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_retention.py +0 -0
  375. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_warmup.py +0 -0
  376. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/agent_warmup_vary.py +0 -0
  377. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/metrics_demo.py +0 -0
  378. {minima_cli-0.8.0 → minima_cli-0.9.0}/examples/smoke_test.py +0 -0
  379. {minima_cli-0.8.0 → minima_cli-0.9.0}/maybe.js +0 -0
  380. {minima_cli-0.8.0 → minima_cli-0.9.0}/maybe.ts +0 -0
  381. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/.gitignore +0 -0
  382. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/biome.json +0 -0
  383. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/bun.lock +0 -0
  384. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/scripts/build-all.ts +0 -0
  385. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/scripts/build.ts +0 -0
  386. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/scripts/install.sh +0 -0
  387. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/scripts/pty_capture.py +0 -0
  388. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/scripts/stub-devtools.ts +0 -0
  389. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/events.ts +0 -0
  390. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/index.ts +0 -0
  391. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/state.ts +0 -0
  392. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/agent/tools.ts +0 -0
  393. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/compat.ts +0 -0
  394. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/events.ts +0 -0
  395. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/index.ts +0 -0
  396. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/provider_catalog.ts +0 -0
  397. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/provider_quirks.ts +0 -0
  398. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/_common.ts +0 -0
  399. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/anthropic.ts +0 -0
  400. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/base.ts +0 -0
  401. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/index.ts +0 -0
  402. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/providers/openai_compat.ts +0 -0
  403. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/registry.ts +0 -0
  404. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/types.ts +0 -0
  405. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/ai/usage.ts +0 -0
  406. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/db/metrics.ts +0 -0
  407. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/db/rehydrate.ts +0 -0
  408. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/db/sink.ts +0 -0
  409. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/errtext.ts +0 -0
  410. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/index.ts +0 -0
  411. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/budget.ts +0 -0
  412. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/catalog.ts +0 -0
  413. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/errors.ts +0 -0
  414. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/judge.ts +0 -0
  415. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/mapping.ts +0 -0
  416. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/memory.ts +0 -0
  417. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/meter.ts +0 -0
  418. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/mubit_memory_factory.ts +0 -0
  419. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/schemas.ts +0 -0
  420. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/minima/spawn.ts +0 -0
  421. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/session/index.ts +0 -0
  422. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/session/store.ts +0 -0
  423. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/_exa.ts +0 -0
  424. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/_io.ts +0 -0
  425. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/apply_patch.ts +0 -0
  426. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/at_mentions.ts +0 -0
  427. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/bash.ts +0 -0
  428. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/edit.ts +0 -0
  429. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/glob.ts +0 -0
  430. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/grep.ts +0 -0
  431. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/index.ts +0 -0
  432. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/ls.ts +0 -0
  433. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/question.ts +0 -0
  434. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/read.ts +0 -0
  435. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/schema.ts +0 -0
  436. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/task.ts +0 -0
  437. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/types.ts +0 -0
  438. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tools/write.ts +0 -0
  439. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/auth.ts +0 -0
  440. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/busy.tsx +0 -0
  441. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/compact.ts +0 -0
  442. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/config_store.ts +0 -0
  443. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/context.ts +0 -0
  444. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/current_action.ts +0 -0
  445. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/model-picker.tsx +0 -0
  446. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/mouse-scroll.ts +0 -0
  447. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/projects.ts +0 -0
  448. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/status.tsx +0 -0
  449. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/text-input.tsx +0 -0
  450. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/tui/tips.ts +0 -0
  451. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/types.d.ts +0 -0
  452. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/src/version.ts +0 -0
  453. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/ai.test.ts +0 -0
  454. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/anthropic.test.ts +0 -0
  455. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/apply_patch.test.ts +0 -0
  456. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/auth.test.ts +0 -0
  457. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/budget.test.ts +0 -0
  458. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/busy.test.ts +0 -0
  459. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/candidate-filter.test.ts +0 -0
  460. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/catalog.test.ts +0 -0
  461. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/client.test.ts +0 -0
  462. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/config_store.test.ts +0 -0
  463. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/current_action.test.ts +0 -0
  464. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/effort.test.ts +0 -0
  465. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/google.test.ts +0 -0
  466. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/isolation.test.ts +0 -0
  467. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/judge.test.ts +0 -0
  468. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/memory.test.ts +0 -0
  469. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/mouse-scroll.test.ts +0 -0
  470. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/openai_compat.test.ts +0 -0
  471. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/render-buffer.test.ts +0 -0
  472. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/session.test.ts +0 -0
  473. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/spawn.test.ts +0 -0
  474. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/task.test.ts +0 -0
  475. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/thinking.test.ts +0 -0
  476. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tests/tips.test.ts +0 -0
  477. {minima_cli-0.8.0 → minima_cli-0.9.0}/packages/tui/tsconfig.json +0 -0
  478. {minima_cli-0.8.0 → minima_cli-0.9.0}/packaging/homebrew/README.md +0 -0
  479. {minima_cli-0.8.0 → minima_cli-0.9.0}/packaging/homebrew/render_formula.py +0 -0
  480. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
  481. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_125009/strategies_run1.json +0 -0
  482. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_125009/strategies_run2.json +0 -0
  483. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_125009/strategies_run3.json +0 -0
  484. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_125009/tasks.jsonl +0 -0
  485. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/REPORT.md +0 -0
  486. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
  487. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/strategies_run1.json +0 -0
  488. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/strategies_run2.json +0 -0
  489. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/strategies_run3.json +0 -0
  490. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/strategies_run4.json +0 -0
  491. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/strategies_run5.json +0 -0
  492. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/summary.json +0 -0
  493. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_130252/tasks.jsonl +0 -0
  494. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
  495. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_182838/strategies_run1.json +0 -0
  496. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_182838/strategies_run2.json +0 -0
  497. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_182838/tasks.jsonl +0 -0
  498. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/REPORT.md +0 -0
  499. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/memory_audit.json +0 -0
  500. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
  501. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/strategies_run1.json +0 -0
  502. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/strategies_run2.json +0 -0
  503. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/strategies_run3.json +0 -0
  504. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/strategies_run4.json +0 -0
  505. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/strategies_run5.json +0 -0
  506. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/summary.json +0 -0
  507. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260612_183343/tasks.jsonl +0 -0
  508. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/REPORT.md +0 -0
  509. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/memory_audit.json +0 -0
  510. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
  511. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/strategies_run1.json +0 -0
  512. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/strategies_run2.json +0 -0
  513. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/strategies_run3.json +0 -0
  514. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/strategies_run4.json +0 -0
  515. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/strategies_run5.json +0 -0
  516. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/summary.json +0 -0
  517. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260615_101732/tasks.jsonl +0 -0
  518. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260624_103307/memory_audit.json +0 -0
  519. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260624_103307/recall_debug.jsonl +0 -0
  520. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/20260624_103307/tasks.jsonl +0 -0
  521. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  522. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_133108/summary.json +0 -0
  523. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  524. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
  525. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  526. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_134209/summary.json +0 -0
  527. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  528. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
  529. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
  530. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/escalation_20260612_201825/summary.json +0 -0
  531. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/_manifest.json +0 -0
  532. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/calibration.json +0 -0
  533. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/feedback.json +0 -0
  534. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/health.json +0 -0
  535. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/models.json +0 -0
  536. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/recommend.json +0 -0
  537. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/savings.json +0 -0
  538. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/strategies.json +0 -0
  539. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/playground_p1/workflow.json +0 -0
  540. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/retention_20260612_201828/REPORT.md +0 -0
  541. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/retention_20260612_201828/results.jsonl +0 -0
  542. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/retention_20260612_201828/summary.json +0 -0
  543. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  544. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
  545. {minima_cli-0.8.0 → minima_cli-0.9.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  546. {minima_cli-0.8.0 → minima_cli-0.9.0}/scripts/eval/classify_dataset.json +0 -0
  547. {minima_cli-0.8.0 → minima_cli-0.9.0}/scripts/eval/eval_classify.py +0 -0
  548. {minima_cli-0.8.0 → minima_cli-0.9.0}/scripts/test-routing-web.ts +0 -0
  549. {minima_cli-0.8.0 → minima_cli-0.9.0}/scripts/test-routing.sh +0 -0
  550. {minima_cli-0.8.0 → minima_cli-0.9.0}/scripts/test-routing.ts +0 -0
  551. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/__init__.py +0 -0
  552. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/__init__.py +0 -0
  553. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/auth.py +0 -0
  554. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/errors.py +0 -0
  555. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/__init__.py +0 -0
  556. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/calibration.py +0 -0
  557. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/capabilities.py +0 -0
  558. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/feedback.py +0 -0
  559. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/health.py +0 -0
  560. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/models.py +0 -0
  561. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/recommend.py +0 -0
  562. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/savings.py +0 -0
  563. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/api/routers/strategies.py +0 -0
  564. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/__init__.py +0 -0
  565. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/data/capability_priors.json +0 -0
  566. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/data/model_aliases.json +0 -0
  567. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/merge.py +0 -0
  568. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/refresh.py +0 -0
  569. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/sources/__init__.py +0 -0
  570. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/sources/litellm.py +0 -0
  571. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/sources/openrouter.py +0 -0
  572. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/catalog/store.py +0 -0
  573. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/config.py +0 -0
  574. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/deps.py +0 -0
  575. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/llm/__init__.py +0 -0
  576. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/llm/anthropic.py +0 -0
  577. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/llm/base.py +0 -0
  578. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/llm/gemini.py +0 -0
  579. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/llm/registry.py +0 -0
  580. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/logging.py +0 -0
  581. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/main.py +0 -0
  582. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/memory/__init__.py +0 -0
  583. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/memory/adapter.py +0 -0
  584. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/memory/keys.py +0 -0
  585. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/memory/records.py +0 -0
  586. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/memory/threadpool.py +0 -0
  587. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/metrics/__init__.py +0 -0
  588. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/metrics/calibration.py +0 -0
  589. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/metrics/report.py +0 -0
  590. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/metrics/savings.py +0 -0
  591. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/__init__.py +0 -0
  592. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/_pg_pool.py +0 -0
  593. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/_redis_client.py +0 -0
  594. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/aggregate.py +0 -0
  595. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/classify.py +0 -0
  596. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/decisionlog.py +0 -0
  597. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/durablerefs.py +0 -0
  598. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/engine.py +0 -0
  599. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/escalation.py +0 -0
  600. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/propensity.py +0 -0
  601. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/recstore.py +0 -0
  602. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/score.py +0 -0
  603. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/recommender/types.py +0 -0
  604. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/__init__.py +0 -0
  605. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/capabilities.py +0 -0
  606. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/common.py +0 -0
  607. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/feedback.py +0 -0
  608. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/models_catalog.py +0 -0
  609. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/recommend.py +0 -0
  610. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/savings.py +0 -0
  611. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/strategies.py +0 -0
  612. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/schemas/workflow.py +0 -0
  613. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/__init__.py +0 -0
  614. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/items.py +0 -0
  615. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/llmrouterbench.py +0 -0
  616. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/routerbench.py +0 -0
  617. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/run_seed.py +0 -0
  618. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/seeding/synthetic.py +0 -0
  619. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/tenancy/__init__.py +0 -0
  620. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/tenancy/context.py +0 -0
  621. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/tenancy/passthrough.py +0 -0
  622. {minima_cli-0.8.0 → minima_cli-0.9.0}/src/minima/version.py +0 -0
  623. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/__init__.py +0 -0
  624. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/conftest.py +0 -0
  625. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/BENCHMARKS.md +0 -0
  626. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/CRITERIA.md +0 -0
  627. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/RESULTS.md +0 -0
  628. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/__init__.py +0 -0
  629. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/harness.py +0 -0
  630. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/llmrouterbench_config.py +0 -0
  631. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/prompt_length_benchmark.py +0 -0
  632. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
  633. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/eval/test_routerbench_savings.py +0 -0
  634. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/factories.py +0 -0
  635. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_auth.py +0 -0
  636. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_escalation_reasoner.py +0 -0
  637. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_feedback_loop.py +0 -0
  638. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_lesson_promotion.py +0 -0
  639. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_measurement_api.py +0 -0
  640. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_observed_cost_ranking.py +0 -0
  641. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_recommend_api.py +0 -0
  642. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_strategies_api.py +0 -0
  643. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/integration/test_workflow_models_health.py +0 -0
  644. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  645. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_escalation_fixes.py +0 -0
  646. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_full_surface_live.py +0 -0
  647. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_mubit_roundtrip.py +0 -0
  648. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_phase3_live.py +0 -0
  649. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_reasoner_live.py +0 -0
  650. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/live/test_recall_params_live.py +0 -0
  651. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_aggregate.py +0 -0
  652. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_aggregate_decay.py +0 -0
  653. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_autocapture.py +0 -0
  654. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_calibration_fit.py +0 -0
  655. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_capabilities.py +0 -0
  656. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_classify_benchmark.py +0 -0
  657. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_classify_keys.py +0 -0
  658. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_cluster.py +0 -0
  659. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_collapse_guard.py +0 -0
  660. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_cost_band.py +0 -0
  661. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_decisionlog.py +0 -0
  662. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_escalation.py +0 -0
  663. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_exploration.py +0 -0
  664. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_ipw.py +0 -0
  665. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_iterations.py +0 -0
  666. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_latency_quality.py +0 -0
  667. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_lever_cost.py +0 -0
  668. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_metrics.py +0 -0
  669. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_metrics_demo.py +0 -0
  670. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_neighbor_classify.py +0 -0
  671. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_prompt_length_benchmark.py +0 -0
  672. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_reasoner.py +0 -0
  673. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_records_catalog.py +0 -0
  674. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_recstore_sqlite.py +0 -0
  675. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_score.py +0 -0
  676. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_shadow_bandit.py +0 -0
  677. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_store_backends.py +0 -0
  678. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_strategies.py +0 -0
  679. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_tenancy.py +0 -0
  680. {minima_cli-0.8.0 → minima_cli-0.9.0}/tests/unit/test_thompson.py +0 -0
@@ -29,3 +29,12 @@ docs/PLAN/
29
29
  # Meta files
30
30
  .codaph
31
31
  .claude
32
+
33
+ # macOS junk
34
+ .DS_Store
35
+
36
+ # accidental session dumps
37
+ context_window.json
38
+
39
+ # generated by /plan finalize during dev runs — never commit
40
+ GROUND_TRUTH.md
@@ -4,7 +4,53 @@ 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.8.0] - 2026-07-06
7
+ ## [0.9.0] - 2026-07-10
8
+
9
+ ### Added
10
+ - **Ground-Truth verification spine (experimental, opt-in via `MINIMA_TUI_GROUND_TRUTH=1`)** —
11
+ the agent's plan steps can carry `verify` shell commands; the harness runs them
12
+ (pre-work baseline → done-gate red→green), records every verdict in the SQLite ledger,
13
+ and derives a confidence tier that drives the UI (🟢 glide / 🟡 flag / 🔴 stop) plus
14
+ grounded, deterministic-over-judge feedback to Minima. Includes `/why` (inspect why the
15
+ harness trusts/distrusts a step), a plan footer strip, and red-gate override capture.
16
+ Off by default — with the flag unset the CLI behaves exactly as 0.8.x.
17
+ - **`/plan` planning workflow (part of the same experimental gate)** — a planner persona
18
+ plus a design council of sub-agents that researches, drafts, critiques, and synthesizes
19
+ a `GROUND_TRUTH.md` design document (`/plan start · status · finalize · cancel`).
20
+ Without the flag, `/plan` stays the read-only toggle it always was.
21
+ - Permission hardening for verify commands: every LLM-authored `verify` is shown verbatim
22
+ in the approval overlay (with an explicit "… +N more lines" marker when truncated), and
23
+ a stored "always allow" on todowrite never covers a verify command the user hasn't seen.
24
+
25
+ ### Changed
26
+ - Transcript rendering is memoized (windowing + `memo()` message rows, render-time ref
27
+ mutations moved to effects) — typing no longer re-renders the whole transcript per
28
+ keystroke.
29
+ - Repo-root `CLAUDE.md` added (agent-facing repo guide).
30
+
31
+ ## [0.8.0] - 2026-07-07
32
+
33
+ ### Fixed
34
+ - **Learning loop now takes effect** — the client sends a stable `user_id` on every
35
+ recommend, so Minima's memory recall actually surfaces your prior outcomes and routing
36
+ can move off the cold-start prior. Previously no `user_id` was sent, so server-side
37
+ recall was always empty and `decision_basis` never left `prior`.
38
+ - **Esc reliably aborts** — pressing Esc now cancels during the routing/recommend phase
39
+ too (it was a no-op there, so the model still ran), and an aborted turn no longer leaves
40
+ a dangling message that made the next prompt re-answer the previous one.
41
+ - **Web search/fetch work without an Exa key** — `web_search` and `web_fetch` fall back to
42
+ DuckDuckGo when `EXA_API_KEY` is unset (they previously failed at call time); with a key
43
+ set they still prefer Exa.
44
+ - **Rendering** — long lines (routing warnings, reasoning, tool output) are clipped inside
45
+ their bordered cells instead of drawing past the border; the `escalation_suggested`
46
+ internal hint is no longer leaked into the info line; the question and `/tree` overlays
47
+ reserve their height so they can't corrupt terminal scrollback.
48
+
49
+ ### Changed
50
+ - Learning-loop write failures are now surfaced — a muted `ℹ learning loop: …` line in the
51
+ TUI and a `feedback_error` event in `--mode json` — instead of being silently swallowed.
52
+
53
+ ## [0.7.2] - 2026-07-06
8
54
 
9
55
  ### Added (TUI)
10
56
  - **Fullscreen renderer (new default)** — alternate screen buffer with the prompt glued
@@ -0,0 +1,104 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What this repo is
6
+
7
+ A Python service + client SDK, and a separate TypeScript harness:
8
+
9
+ - **`src/minima/`** — Minima: a **recommend-only** LLM cost-optimization service (FastAPI, Python 3.11+). It never proxies, runs, or caches an LLM call. It answers "which model should I run for this task?" and learns from the outcome you report back. Memory is backed by [Mubit](https://docs.mubit.ai) and is the *only* external dependency of the core recommender. Hosted at `api.minima.sh`; deployed from GitHub releases (publishing a release triggers the prod deploy AND the CLI binary build).
10
+ - **`client_sdk/minima_client/`** — bundled sync + async Python client. Ships in the same wheel as `src/minima` (`minima-cli` on PyPI).
11
+ - **`packages/tui/`** — `minima-tui`: the **active harness** — a TypeScript/Ink agent runtime + TUI run on **Bun** (`bun:sqlite`, `>=1.2`). This is the `minima` CLI users install via Homebrew (`brew tap mubit-ai/minima`). Same `route → run → judge → feedback` loop against the `/v1/*` contract, with its own SQLite persistence spine (`src/db/minima_db.ts`, event-sourced, WAL, append-only migrations) and a `BudgetLedger`. Separate toolchain — not part of the Python wheel or `uv`. The version of record is `packages/tui/package.json` (kept in lockstep with `pyproject.toml`).
12
+
13
+ ### The Minima loop (respect this everywhere)
14
+
15
+ ```
16
+ recommend -> run the model yourself -> judge quality -> feedback
17
+ ```
18
+
19
+ Minima never runs the model. Feedback MUST carry realized `input_tokens` / `output_tokens` / `actual_cost_usd` / `latency_ms` so the cost basis can climb `estimate -> observed -> rescaled` — the single biggest accuracy lever. Do **not** echo Minima's own `est_cost_usd` back as the actual cost. Outcome thresholds: `success >= 0.8`, `partial >= 0.4`, else `failure`.
20
+
21
+ ## Commands
22
+
23
+ `uv` is the package manager for the Python side. Common targets (see `Makefile`):
24
+
25
+ ```bash
26
+ make install # uv sync --extra dev
27
+ make run # local Minima on :8080 (uvicorn, --reload); interactive docs at /docs
28
+ make test # unit + integration, hermetic/offline: pytest -m "not live and not eval"
29
+ make lint # ruff check + mypy src/minima
30
+ make fmt # ruff check --fix + ruff format
31
+ make live # pytest -m live — needs a running Mubit (make run-mubit in the Mubit repo)
32
+ make eval # pytest -m eval — slow offline RouterBench savings evaluation
33
+ make seed # minima-seed (LIMIT=, LANE= overridable) — load cold-start memory
34
+ uv run pytest tests/unit/test_foo.py::test_bar # single test
35
+ ```
36
+
37
+ Test markers (`pyproject.toml`): `live` = requires a running Mubit; `eval` = slow offline RouterBench. Default `make test`/`pytest` excludes both.
38
+
39
+ The **TypeScript harness** (`packages/tui/`) has its own Bun toolchain (also exposed as `make tui-*` targets):
40
+
41
+ ```bash
42
+ cd packages/tui && bun install
43
+ bun test # hermetic (mock fetch + faux provider + in-process mock service)
44
+ bun run check # tsc --noEmit
45
+ bun run lint # biome check src
46
+ bun run format # biome format --write src
47
+ bun run build # -> dist/minima native binary (bun build --compile)
48
+ ```
49
+
50
+ ## Testing constraints (important)
51
+
52
+ - **Offline tests MUST stay hermetic.** `tests/conftest.py` has an autouse fixture that neutralizes `.env` — never rely on ambient credentials in a non-`live` test.
53
+ - For service tests: `tests/factories.py:FakeMemory` + `create_app(...)` + `TestClient` gives a full in-process app with no Mubit.
54
+ - For TUI tests: register a faux provider/model and mock `fetch` — see existing `packages/tui/tests/*.test.ts` for the pattern. No test may hit the network or spend money.
55
+
56
+ ## Conventions
57
+
58
+ Python (`src/minima`):
59
+
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`).
62
+ - Async-first. Bridge sync SDKs (Mubit) off the event loop via `anyio`/threadpools.
63
+ - Logging: `structlog` via `get_logger("minima.<sub>")`.
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.
65
+
66
+ TypeScript (`packages/tui`): biome for lint/format, strict tsc, Bun APIs (`bun:sqlite`, `Bun.write`) are fine. **Do NOT add the `openai` SDK** — the OpenAI-compatible provider speaks raw HTTP. Routing must stay bypassable (offline/no-Minima still works, with no feedback sent).
67
+
68
+ - **No comments unless asked.** Match existing style.
69
+
70
+ ## Architecture — the service (`src/minima/`)
71
+
72
+ Request flow (`api/routers/recommend.py` → `recommender/engine.py`):
73
+
74
+ 1. **classify** (`recommender/classify.py`) — derives task features/type from the prompt (regex + signal tables).
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
+ 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`).
78
+ 5. **feedback** (`api/routers/feedback.py`) — writes the outcome back to Mubit, reinforcing memory.
79
+
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`).
81
+
82
+ Everything external is behind a Protocol so it can be faked in tests. The server stack (fastapi/uvicorn/psycopg2/redis) lives in the `[server]` extra — the core recommender + client is dependency-light on purpose.
83
+
84
+ ## Architecture — the harness (`packages/tui/`)
85
+
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
+
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`.
89
+
90
+ Design principles that constrain any work in this direction:
91
+
92
+ - **State in the DB, projections in the context** — anything that must survive scroll/compaction/restart/a lying model lives in the ledger; the model sees only a compact re-injected projection.
93
+ - **Enforcement in the dispatcher, guidance in the prompt** — plan/permission/gate guarantees are enforced by harness code at tool-dispatch or turn boundaries, never by prompt text (which is bypassable).
94
+ - **Feedback truth** — realized usage only; no fabricated quality (gate verdict → outcome label only; judge abstention stays `null`); `verified_in_production` only from user/repo/ci-origin gates, never agent-authored ones.
95
+ - **Recommend-only server stands** — plan state is never server-authoritative.
96
+ - **Append-only migrations** (shipped batch strings never edited) · **`rec_id` discipline** as the sole local↔server↔Mubit join key · **propensity integrity** (no client-side re-ranking; pins are pre-request candidate assembly, never post-hoc overrides).
97
+
98
+ ## Entry points
99
+
100
+ Python (`pyproject.toml [project.scripts]`): `minima-seed` · `minima-calibration-report`. Server app: `minima.main:app`. The `minima` CLI/TUI is NOT a Python entry point — it is the compiled Bun binary from `packages/tui`, distributed via Homebrew.
101
+
102
+ ## Docs
103
+
104
+ Deep docs live in `docs/` (concepts, api-reference, configuration, multi-tenancy, operations, seeding, ground-truth-build-guide). All service config is via environment variables — see `.env.example` and `docs/configuration.md`; the only required value (single-tenant mode) is `MUBIT_API_KEY`. Never commit `.env`/`.env.harness`; never print secret values.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minima-cli
3
- Version: 0.8.0
3
+ Version: 0.9.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
@@ -0,0 +1 @@
1
+ artifacts/
@@ -0,0 +1,374 @@
1
+ # bench/ — Minima harness scripted test flows
2
+
3
+ Scripted end-to-end flows that drive the **installed** `minima` binary (Homebrew, currently
4
+ 0.7.1) the way a user would — headless one-shots and full interactive PTY sessions — and
5
+ assert on the artifacts the harness actually produces: the SQLite DB, the transcript, git
6
+ state, and server responses. Born from the 2026-07-06 demo/test-flow research plan
7
+ (14-agent inventory + web research + 3 designs + 2 adversarial critiques).
8
+
9
+ ## Why this exists
10
+
11
+ We want to demo every Minima harness feature and regression-test the full loop
12
+ (recommend → run → judge → feedback → memory) with **long conversational sessions on
13
+ disposable test dirs**, one session id per flow. No such infrastructure existed: the repo
14
+ had only in-process bun tests (faux provider) and two live smoke scripts.
15
+
16
+ ## Layout
17
+
18
+ ```
19
+ bench/
20
+ driver/
21
+ rig.ts PTY rig — spawns the TUI in a real pseudo-terminal via Bun.spawn
22
+ {terminal} (Bun >= 1.3.5), accumulates output, regex wait/assert,
23
+ types + submits prompts and slash commands
24
+ headless.ts one-shot runner for --print / --mode json invocations
25
+ mock_server.ts scripted /v1 Minima server (recommend/feedback/models/capabilities)
26
+ with full request capture — makes offline/reconnect + ladder flows
27
+ deterministic and free
28
+ assert/
29
+ db.ts readonly bun:sqlite helpers over the harness DB
30
+ (runs / routing_decisions / budgets / budget_events / tool_calls)
31
+ check.ts assertion collector → per-flow PASS/FAIL report
32
+ flows/
33
+ f1_headless.ts F1: headless CLI battery (exit codes, routed/pinned/offline
34
+ rows, JSON-event contract, budget deny)
35
+ f9_offline_reconnect.ts F9: offline fallback → mock server comes up → /reconnect →
36
+ routed=server (deterministic, no config writes)
37
+ f4_cost_budget.ts F4: PTY session — /budget set/mode ladder (warn → enforce
38
+ refusal → warn → shadow), /clear display-only lock-in,
39
+ /cost, context retention
40
+ gen/
41
+ materialize.ts template + patches → agent-visible working copy (git HEAD = seeded
42
+ state; hidden tests applied only at grade time)
43
+ validate_task.ts the 5 execution gates every task must pass (SWE-bench-Verified
44
+ style): template green → bug invisible to public suite → hidden
45
+ tests fail pre-fix → oracle restores green → statement >= 40 words
46
+ calibrate.ts k-run empirical difficulty calibration: pinned cheap/frontier arms
47
+ through the installed binary, cheat-guarded hidden-test grading,
48
+ appends bench/tasks/calibration.jsonl
49
+ build_index.ts task dirs (+ calibration rates when present) → bench/tasks/tasks.jsonl
50
+ fixtures/templates/ clean fixture repos (py-cli, ts-api, js-lib, katas; _example is the
51
+ canonical reference the validator smoke uses)
52
+ tasks/<repo>/<id>/ task instances: task.json, bug.patch?, hidden_tests.patch, oracle.patch?
53
+ run.ts entry point: `bun bench/run.ts f1 f9 f4`
54
+ artifacts/ (gitignored) per-run scratch dirs, DBs, transcripts on failure
55
+ ```
56
+
57
+ ## The session recipe (validated live 2026-07-06)
58
+
59
+ There is **no CLI flag** to pin or resume a session id in 0.7.1. The only supported
60
+ recipe, validated against the installed binary:
61
+
62
+ ```sh
63
+ cd <disposable-dir> # NEVER a real repo: headless mode has ZERO
64
+ # permission gating (hook only wired in the TUI)
65
+ MINIMA_DB_PATH=<flow>.db \
66
+ MINIMA_NAMESPACE=bench-<flow>-<id> \
67
+ minima -nt --budget 0.05 --budget-enforce -p "..."
68
+ sqlite3 <flow>.db "SELECT run_id,status FROM runs" # ← captured session id
69
+ ```
70
+
71
+ One DB path per flow (one per case for headless batteries) removes all "newest run"
72
+ ambiguity. Multi-turn = PTY-drive the interactive TUI; `/resume <FULL run_id>` after
73
+ restart (exact match — the picker's 12-char ids are display-only).
74
+
75
+ ## Task dataset (Phase B, 2026-07-06)
76
+
77
+ **33 execution-validated tasks** across 4 purpose-built fixture repos (34 counting the
78
+ `_example` reference), authored by a 4-agent fan-out and independently re-validated
79
+ (`bun bench/gen/validate_task.ts --all` → 34/34):
80
+
81
+ | repo | template | tasks | mix |
82
+ |---|---|---|---|
83
+ | `py-cli` ("taskman") | ~1.2k LOC argparse CLI, 60 pytest tests | 8 | 3 easy + 3 medium + 1 hard (cross-module schema-migration data loss) + 1 **trap** (168-word panic statement, 1-line fix) |
84
+ | `ts-api` ("linkbox") | ~1.6k LOC bun HTTP handlers, 60 tests | 7 | 3 feature-adds (hidden-test spec) + 3 medium bugfixes + 1 **trap** (casual statement, diagnosis spans store/persist/stats) |
85
+ | `js-lib` ("datakit") | ~0.8k LOC zero-dep utils, 50 tests, fastest suite | 6 | 2 easy + 2 medium + 1 feature + 1 hard (CSV round-trip state machine) |
86
+ | `katas` | 12 single-file stubs (4 py / 4 ts / 4 js) | 12 | all trivial → the unambiguous cheap tier |
87
+
88
+ **Difficulty labels are EMPIRICAL** (k=5 × cheap(haiku)/frontier(sonnet) arms, 330
89
+ attempts, $17.90, 0 errors, 0 cheats — `calibration.jsonl`, report via
90
+ `gen/calibration_report.ts`). The 2026-07-06 full pass rewrote the structural bins:
91
+
92
+ - **haiku solves 30/33 tasks at ~100%** — well-specified, symptoms-only bugfixes in
93
+ 1-2k-LOC repos are simply within a 2026 cheap model's reach, including the authored-
94
+ hard 72-line cross-module migration (pc-007: 5/5 cheap). 12 authored-medium/hard
95
+ tasks were NO-SIGNAL (both arms 5/5) → re-labeled easy/cheap with
96
+ `authored_difficulty` preserved.
97
+ - **jl-006 is the perfect hard task**: cheap 0/5, frontier 5/5 (CSV state-machine
98
+ round-trip) — the escalation-value demo in one row.
99
+ - **ta-004 is a cheap-beats-frontier anomaly**: cheap 4/5, frontier 0/5 — sonnet
100
+ consistently fails a task haiku solves (kept medium, route=cheap, flagged for
101
+ failure-mode investigation; excellent routing-demo material).
102
+ - Final spread: 12 trivial / 19 easy / 1 medium / 1 hard; expected_route: 32 cheap,
103
+ 1 frontier. **Consequence for the demo:** this dataset proves the savings story
104
+ (quality parity at cheap prices) overwhelmingly, but differentiated escalation
105
+ routing rests on jl-006/ta-004 alone — a "genuinely hard" authoring round (vaguer
106
+ statements, composite multi-bug patches, larger repos) is queued for the demo phase.
107
+
108
+ Anti-leakage: agents under test see ONLY the materialized template (+ seeded bug) and
109
+ the `problem_statement` — never `task.json` (whose `notes` describe the defect), never
110
+ `hidden_tests.patch`. Statements are symptoms-only for bugfixes (audited: no defect
111
+ file/function names, no fix quotes); feature statements specify routes/signatures.
112
+
113
+ ## Savings A/B (Phase D, 2026-07-06) — the honest headline
114
+
115
+ Paired protocol per router-eval best practice: all 33 tasks fresh-executed twice
116
+ (identical prompts, fresh checkouts, hidden-test graded) — arm A pinned
117
+ `claude-opus-4-8` (all-premium baseline), arm B **routed** via api.minima.sh
118
+ (namespace `bench-ab-v1`, feedback live). Runner: `gen/savings_ab.ts` · report:
119
+ `gen/savings_report.ts` · raw log: `tasks/savings_ab.jsonl`. Total run cost $8.71.
120
+
121
+ ```
122
+ 1. COST premium: $7.89 total, $0.2546/completed
123
+ routed: $0.82 total, $0.0302/completed → 89.7% saved
124
+ 2. PARITY premium 31/33 (93.9%) vs routed 27/33 (81.8%)
125
+ both=26 · premium-only=5 · routed-only=1 · neither=1
126
+ McNemar exact p=0.219 — no significant difference at n=33
127
+ 3. ROUTED DISTRIBUTION: gemini-2.5-flash × 33 (cold-prior argmin; no escalation)
128
+ ```
129
+
130
+ Present all three together, never % saved alone; state the n=33 parity bound (±10-15pp).
131
+ Noteworthy pairs: jl-003 is a cheap-beats-premium case (flash PASS $0.008, opus FAIL
132
+ $0.40); the 5 routed-only failures are all tasks haiku solved 5/5 in calibration —
133
+ i.e. flash-specific misses on a cold prior, exactly the signal the learning loop
134
+ should absorb (F12 tests that transition).
135
+
136
+ **Finding — the server's premium counterfactual understates reality ~10×**: summed
137
+ `all_premium_cost_usd` estimates for the routed arm came to $0.77 vs the MEASURED
138
+ premium arm's $7.89. Single-call token estimates don't capture multi-turn agentic
139
+ tool loops. Real savings are LARGER than /v1/savings claims, but the estimate is not
140
+ a credible counterfactual for agentic workloads — measured paired baselines are.
141
+ (Feeds the GT-8 observed-best/IPS work.)
142
+
143
+ ## Learning loop (F12) — GREEN (took TWO fixes: the key AND user_id)
144
+
145
+ `flows/f12_learning_loop.ts` (live-lane, ~$0.60/run): first a free WRITE-HEALTH probe
146
+ (direct recommend→feedback, hard check on the feedback BODY's `accepted` field,
147
+ early-exit on failure), then warms a fresh namespace with 8 judged kata runs (separate
148
+ sessions) and re-runs 4 of the SAME tasks as probes in warm-vs-cold namespaces.
149
+
150
+ **Verified PASS 2026-07-07 (5/5 hard + 4/4 soft)** against `api.minima.sh` with a binary
151
+ carrying BOTH fixes below — cold probes route `prior`, all four warm probes flip to
152
+ `memory`. It needed two independent fixes; #1 alone left the flip still red.
153
+
154
+ - **FIX 1 — writes (the key).** Minima uses pass-through auth (`src/minima/api/auth.py`):
155
+ the `MUBIT_API_KEY` the harness/binary send as `Authorization: Bearer` IS the key
156
+ Minima uses against Mubit. Repo `.env` ships the LOCAL dev key `mbt_local_admin` (instance
157
+ `local`) that prod can't reach → `accepted=false`/`memory_write_failed`. `.env.harness`
158
+ has the DEPLOYED key that writes. Wired via `driver/env.ts` `loadBenchEnv()` (layers
159
+ `.env.harness` over Bun's auto-loaded `.env`, forcing `MUBIT_API_KEY`/`MINIMA_URL`/
160
+ `MINIMA_API_KEY`; called from `run.ts`, `gen/savings_ab.ts`, `f12()`). Escape hatches:
161
+ `BENCH_NO_HARNESS_ENV=1`, `BENCH_MUBIT_API_KEY=…`.
162
+ - **FIX 2 — recall (user_id), PR #90.** Fixing #1 uncovered this: prod recall is scoped
163
+ by `user_id`, and `router.ts` recommend omitted it → the server surfaced nothing and
164
+ `decision_basis` never left `prior`, so the binary couldn't recall its own writes.
165
+ Direct A/B: single write+read in one namespace flips to `basis=memory,ev=1` WITH a
166
+ user_id, stays `prior,ev=0` WITHOUT. PR #90 sends the stable `memorySession`
167
+ (`namespace ?? repo identity`) as `user_id`. **The installed brew binary does NOT have
168
+ #90 yet** — until a release ships it, run F12 against a local build:
169
+ `cd packages/tui && bun run build` then
170
+ `BENCH_MINIMA_BIN="$PWD/dist/minima" bun bench/run.ts f12`.
171
+ - Still worth keeping: the write-health probe (asserts on the BODY — HTTP 200 hid the
172
+ write failure) and PR #84 (the binary swallowed the rejection in a write-only
173
+ `lastFeedbackError`; #84 surfaces it as a TUI line + `--mode json` `feedback_error`).
174
+ - Optional server hardening (defense-in-depth): the SDK treats a done ingest-job with
175
+ `writes[].success=false` as success; `recall.degraded` is parsed but never read.
176
+ - Also noteworthy: routing drifted flash→pro for identical kata prompts within hours
177
+ (catalog/prior drift) — validates the suite-wide rule of never asserting model ids.
178
+
179
+ ## Running
180
+
181
+ ```sh
182
+ bun bench/run.ts # all flows
183
+ bun bench/run.ts f1 f9 # a subset
184
+
185
+ bun bench/gen/validate_task.ts --all # re-validate every task (local, free)
186
+ bun bench/gen/calibrate.ts --tasks all --arms cheap,frontier --k 5 # full calibration (costed)
187
+ bun bench/gen/build_index.ts # rebuild tasks.jsonl (+ measured rates)
188
+ ```
189
+
190
+ Live-lane cost: the full Phase A suite spends well under $0.10/run (trivial prompts,
191
+ mock server wherever determinism matters). Exit code is non-zero if any hard check fails;
192
+ per-flow transcripts land in `bench/artifacts/scratch/<flow>-<ts>/transcript.txt`.
193
+
194
+ Status (2026-07-06): **full suite 7/7 flows PASS — f1 30/30 · f9 11/11 · f4 16/16 ·
195
+ f5 5/5 · f6 6/6 · f7 13/13 · f10 5/5 (86 hard checks)** against installed 0.7.1 +
196
+ hosted api.minima.sh; ~3.3 min, ~$0.15/run.
197
+
198
+ ## Findings log
199
+
200
+ Datestamped facts discovered while building/running the flows — kept current; newest first.
201
+
202
+ ### 2026-07-07 — memory loop GREEN: TWO bugs (key + user_id); F12 PASS 5/5
203
+ - Two independent bugs; fixing the first uncovered the second. Neither is a server bug.
204
+ - **BUG 1 (writes) — the key.** Minima is pass-through auth (`api/auth.py`): the client's
205
+ `Authorization: Bearer <mubit_key>` IS the key used against Mubit. A/B (same endpoint +
206
+ payload, only the key differs): repo `.env` `mbt_local_admin` →
207
+ `accepted=false`/`memory_write_failed`; `.env.harness` deployed key → `accepted=true`,
208
+ real record_id. Wired via `driver/env.ts` `loadBenchEnv()` (forces `.env.harness`'s
209
+ routing keys over Bun's auto-loaded `.env`; `run.ts`/`savings_ab.ts`/`f12()`;
210
+ `BENCH_NO_HARNESS_ENV=1` / `BENCH_MUBIT_API_KEY=…` escape hatches).
211
+ - **BUG 2 (recall) — user_id, PR #90.** After BUG 1, F12 warm probes STILL all `prior`.
212
+ A/B: single write+read in one namespace flips to `basis=memory,ev=1` WITH a `user_id`,
213
+ stays `prior,ev=0` WITHOUT. `router.ts` recommend omitted `user_id` → prod recall
214
+ (user-scoped) surfaced nothing → basis never left `prior`; the binary couldn't recall
215
+ its own writes (affects every user, any key). PR #90 sends the stable `memorySession`
216
+ as `user_id`.
217
+ - **F12 PASS 5/5 (+4/4 soft)** against api.minima.sh with a binary carrying #90: cold
218
+ probes `prior`, all 4 warm probes `memory`. Installed brew binary lacks #90 → run F12
219
+ against a local `packages/tui` build until a release ships it.
220
+ - The earlier "blocked SERVER-side" framing was wrong on cause, right on symptom; the
221
+ write-health probe + PR #84 (surface the swallowed rejection) stay useful.
222
+
223
+ ### 2026-07-06 (later) — memory-loop root cause + write-health detector
224
+ - **Every memory write is rejected by the server**: direct `POST /v1/feedback` returns
225
+ HTTP 200 `accepted=false, record_id=null, warnings=["memory_write_failed"]`. The
226
+ HTTP status is useless as a health signal — assert on the BODY.
227
+ - The binary knew and stayed silent: the rejection landed in `lastFeedbackError`,
228
+ which no code read (write-only diagnostics). PR #84 surfaces it (TUI info line +
229
+ `--mode json` `feedback_error` event).
230
+ - F12 now opens with a direct-API write-health probe and exits early on failure:
231
+ fails in <1s at the true cause instead of ~5min/$0.60 at the basis=prior symptom.
232
+ - `memory_unavailable` on recommends is INTERMITTENT — its absence during one run must
233
+ not be read as "recall healthy" (it briefly sent this investigation toward evidence
234
+ thresholds).
235
+ - 5-agent code-trace of the server path (journal in the session workflow dir):
236
+ `reinforced_entry_ids` echoes recommend-time recall neighbors, so `[]` during
237
+ warm-up is expected and diagnostic of nothing; `MEMORY_WEIGHT_MIN=0.0` means ONE
238
+ retrieved outcome flips basis to memory — no threshold story; lane/namespace
239
+ computed once and reused on both paths — no scoping mismatch. The break is at the
240
+ Minima↔Mubit ingest boundary (and the SDK treats a done-ingest-job with
241
+ `writes[].success=false` as success — silent-failure hole worth a server PR).
242
+
243
+ ### 2026-07-06 — v0.7.2 release compat + memory-loop status
244
+ - **Suite green on both binaries**: installed 0.7.1 and the v0.7.2 release asset
245
+ (`BENCH_MINIMA_BIN=<path> bun bench/run.ts`). Version-tolerant assertions cover the
246
+ 0.7.2 renames: `· working`→`· running` (isIdle accepts both), denial copy
247
+ ("Permission denied for X" → "The user declined the X call"), `/fork`+`/clone`
248
+ honest copy, and models satisfying an "edit" ask with the new `apply_patch` tool.
249
+ - v0.7.2 plan-mode correctly blocks `apply_patch` (the #77 review fix) — verified live
250
+ by F7 against the release binary.
251
+ - **Memory loop: partially restored, still not closing.** The v0.7.2 prod redeploy
252
+ cleared the `memory_unavailable` recommend warning, but F12 still shows
253
+ reinforced_entry_ids never echoing and same-task warm-namespace probes routing on
254
+ `prior`. Needs server-side investigation of the feedback→Mubit write path; F12 is
255
+ the standing detector. (Possible contributor: one outcome per task may be below the
256
+ evidence threshold — a heavier warm phase, k=3 per task, is worth trying.)
257
+
258
+ ### 2026-07-06 — Phase C (flow suite) findings
259
+ - **Child routing decisions DO persist correctly** — each sub-agent writes its own
260
+ routing_decisions row with `agent_id = <childId>` demuxing it from the lead (verified
261
+ live: 3 children with per-child tool_calls read/glob/bash + worktree isolation). Two
262
+ false alarms on the way were both harness-side: the assert library's SELECT omitted
263
+ agent_id, and rows become visible to external readers slightly after the lead's
264
+ (write-queue flush lag) — poll with a grace window, never point-read.
265
+ - **The packages/tui test suite leaks git worktrees**: stale `/tmp/minima-wt-dirty-step-*`
266
+ and `/tmp/minima-wt-wt-step-*` dirs from spawn tests predate bench runs. Flows must
267
+ baseline `/tmp/minima-wt-*` pre-run and assert on the set DIFFERENCE; worth a small
268
+ cleanup fix in the tui test suite.
269
+ - **In-cwd reads DO prompt** despite the `app.tsx:565` comment claiming "read/ls
270
+ auto-allow within cwd" — `permissions.ts:41` starts `allowedDirs` empty and nothing
271
+ pre-approves the cwd. Locked in by F7; either the comment or the behavior should change.
272
+ - **Overlay answering must be effect-keyed**: a single keypress can race the overlay
273
+ lifecycle (deny → model instantly retries → new overlay paints inside the same poll
274
+ window). F7's driver retries each answer key until its observable effect (deny text,
275
+ disk change, transcript content) lands.
276
+ - **Idle detection that survives repaints**: compare `lastIndexOf("· ready")` vs
277
+ `lastIndexOf("· working")` over the accumulated output — the last footer paint always
278
+ reflects current state. Needed before typing after DB-predicate turn ends (the visible
279
+ turn end precedes busy-clear by seconds; typed chars during the tail may not echo).
280
+ - **Prompt-dictated task-tool JSON is genuinely nondeterministic**: the model sometimes
281
+ omits `isolation:"workdir"` even when asked; quoting the exact field name + a one-shot
282
+ in-session retry makes F5 reliable. The ladder (F10), by contrast, is fully
283
+ deterministic via the mock's recommendQueue + a present-but-invalid provider key.
284
+
285
+ ### 2026-07-06 — Phase B (dataset) findings
286
+ - **Never `await` child stdout/stderr streams to completion after killing a process**:
287
+ the agent's grandchildren (pytest, bun test) inherit the pipe and hold it open past
288
+ the parent's death, hanging the collector indefinitely — this stalled the first
289
+ calibration batch. `sh()` now awaits `proc.exited` and gives the streams a 2s grace
290
+ race instead.
291
+ - **k=1 calibration is a smoke, not a label**: single-attempt solves by the cheap arm
292
+ demoted ta-007 (with the audit's structural evidence agreeing) but cannot
293
+ distinguish "cheap solves 100%" from "cheap solves 40% and got lucky" — medium bins
294
+ especially need the full k=5 pass before routing accuracy is judged against them.
295
+ - **Pinned calibration runs never touch the Minima server** — `--model X` bypasses
296
+ routing entirely, so difficulty calibration is pure provider spend with zero effect
297
+ on the routing namespace. Exactly what we want: calibration cannot pollute the
298
+ learning loop.
299
+ - **Cheat-guard needs an artifact filter**: running pytest inside the attempt drops
300
+ `tests/__pycache__/*.pyc` as untracked files under `tests/`, which false-flagged the
301
+ very first calibration attempt as test-tampering. The guard now ignores
302
+ `__pycache__/.pyc/.pytest_cache/node_modules` before applying the tests/ rule.
303
+ - Headless agent runs on seeded tasks work exactly as designed: haiku found and fixed
304
+ the `_example` seeded bug in ~23s for ~$0.01, graded by hidden tests post-hoc.
305
+ - Go is not installed on this machine → the plan's `go-tool` fixture became `js-lib`
306
+ (zero-dep bun:test library, same fastest-suite role for future worktree/DAG flows).
307
+
308
+ ### 2026-07-06 — findings from making the flows green
309
+
310
+ - **PRODUCT FINDING — offline turns bypass the budget ledger entirely.** An
311
+ offline-fallback turn runs the default model (real provider spend, `actual_cost_usd`
312
+ recorded on the decision row) but books NOTHING to the ledger: no reserve/reconcile
313
+ events, `spent_usd` stays 0, and `--budget-enforce` cannot refuse it (the reserve path
314
+ needs a positive server cost estimate; offline/pinned synthetic rows have est 0 and the
315
+ reserve block is routing-gated in runtime.ts). Locked in as F1's `offline-budget
316
+ lock-in` case — flips loudly if a fix lands. Follow-on: enforce-deny tests MUST route
317
+ through a server (bench uses the mock) or a transient offline fallback silently
318
+ neuters them.
319
+ - **TUI drops Enter while busy — including the invisible post-turn tail.** After the
320
+ reply finishes streaming, judge + feedback + memory-write keep `busy` true for up to
321
+ several seconds; during that window typed characters still echo into the input box but
322
+ Enter is silently ignored (same `if (busy) return` guard family as the known abort bug
323
+ #83). Naive scripted typing concatenates commands in the input box. Driver fix:
324
+ `rig.submitUntil(text, effect)` — type once, then retry Enter until the command's
325
+ unique effect appears (fresh response regex or DB predicate). A retried Enter is
326
+ harmless (input is empty if the previous one submitted).
327
+ - **Accumulated-output matching must use UNIQUE expected strings.** Ink repaints the
328
+ whole screen constantly, so previously-rendered content reappears after any
329
+ `mark()` — a `since` offset does NOT protect against matching stale repaints.
330
+ Assert on strings that appear exactly once per flow (include arguments/amounts:
331
+ `Budget set: $0.02 (warn mode)`), and prefer DB predicates over screen text.
332
+ - **Live routing can transiently fall back offline** (cold-start recommend latency) even
333
+ when api.minima.sh is healthy — never build a hard check on "this turn will be
334
+ server-routed" unless the flow retries or uses the mock. F4 asserts all-turns-routed
335
+ as a flow-level invariant and accepts the rerun cost.
336
+ - **Turn-end signal**: the `routing_decisions` row is the reliable "turn substantively
337
+ done" oracle (WAL lets a readonly reader poll while the TUI writes), but it lands
338
+ BEFORE busy clears — combine row-polling with submitUntil for the next input.
339
+ - Boot state: default model is `gpt-4o-mini` before any routing; readiness marker is
340
+ the status-bar `· ready`; typing `/xyz` opens a commands suggestion box that does not
341
+ interfere with Enter-submission of a fully-typed command; `/exit` exits 0; `/clear`
342
+ clears only the transcript (locked in by F4: planted token still recalled after).
343
+ - `/budget set <tiny>` renders `$0.00` (`toFixed(2)`) — match `Budget set: \$0\.00` for
344
+ sub-cent limits; the exhausted-refusal message is `budget exhausted: $X spent of $Y`.
345
+
346
+ ### 2026-07-06 — Phase A bring-up
347
+ - **Bun 1.3.14 native PTY works** for driving the Ink TUI: `Bun.spawn(cmd, {terminal:
348
+ {cols, rows, data(term, chunk){...}}})`; the data callback signature is
349
+ `(Terminal, Buffer)`; write with `proc.terminal.write("...\r")`. No node-pty needed.
350
+ - **Keys resolve from the global config store** (`~/.minima-harness/config.env` +
351
+ keychain) even in disposable cwds — that's what makes scratch-dir flows work with zero
352
+ per-flow env setup. Repo `.env.harness` has the same key names if explicit env is wanted.
353
+ - **`/reconnect` re-reads `process.env.MINIMA_URL`** (`config.ts:75` — env wins over cfg).
354
+ So the deterministic offline→online story is: launch with `MINIMA_URL=http://127.0.0.1:
355
+ <port>` while nothing listens (offline fallback), start the mock server on that port,
356
+ `/reconnect`. `--offline` itself is a one-way door (sets cfg.minimaUrl='' and no env var
357
+ exists to restore) — never use it for reconnect flows.
358
+ - **`/budget set` preserves accumulated spend** (new ledger, same `session:<run_id>`
359
+ scope, ON CONFLICT keeps `spent_usd`) and **preserves the current mode**. Deterministic
360
+ enforce-refusal: spend under warn first, tighten the limit below observed spend, then
361
+ `/budget mode enforce` — the next prompt is refused at the exhausted gate
362
+ (`budget exhausted: $X spent of $Y`) *before any provider spend*, and no
363
+ routing_decisions row is written for the refused prompt.
364
+ - **Smoke economics**: one routed trivial turn ≈ $0.004 (sonnet via prior basis, argmin).
365
+
366
+ ### 2026-07-06 — from the research inventory (file:line ground truth)
367
+ - Do not script/demo: `/undo` (no-op `git checkout --`), `/fork`+`/clone` (stubs),
368
+ `--thinking` (parsed, never applied), Ctrl+R confirm (cosmetic), Esc/Ctrl+C abort
369
+ (dead code, task #83), `/tree` cost/status rows (stuck "running" — screenshot during
370
+ run only), `save$` column (baselineModelId has no setter).
371
+ - `--mode json` events are lossy (no tool args / model / cost) → SQLite is the primary
372
+ oracle; the JSON stream is asserted only as a frozen vocabulary contract.
373
+ - Headless `--print`/`--mode json`: single prompt per process, budget events on stderr,
374
+ exit 1 on provider hard-failure/offline-empty, exit 2 on usage errors.
@@ -0,0 +1,41 @@
1
+ /** Assertion collector: gathers named checks, prints a per-flow report, computes PASS/FAIL. */
2
+
3
+ export interface CheckResult {
4
+ name: string;
5
+ ok: boolean;
6
+ soft: boolean;
7
+ detail?: string;
8
+ }
9
+
10
+ export class Checks {
11
+ results: CheckResult[] = [];
12
+ constructor(readonly flowId: string) {}
13
+
14
+ check(name: string, ok: boolean, detail?: string): boolean {
15
+ this.results.push({ name, ok, soft: false, detail });
16
+ console.log(` ${ok ? "✓" : "✗"} ${name}${!ok && detail ? ` — ${detail}` : ""}`);
17
+ return ok;
18
+ }
19
+
20
+ /** Recorded but never gates the flow (nondeterministic/live-dependent signals). */
21
+ soft(name: string, ok: boolean, detail?: string): boolean {
22
+ this.results.push({ name, ok, soft: true, detail });
23
+ console.log(` ${ok ? "✓" : "~"} [soft] ${name}${!ok && detail ? ` — ${detail}` : ""}`);
24
+ return ok;
25
+ }
26
+
27
+ get passed(): boolean {
28
+ return this.results.filter((r) => !r.soft).every((r) => r.ok);
29
+ }
30
+
31
+ summary(): string {
32
+ const hard = this.results.filter((r) => !r.soft);
33
+ const soft = this.results.filter((r) => r.soft);
34
+ const failedHard = hard.filter((r) => !r.ok);
35
+ return (
36
+ `${this.flowId}: ${this.passed ? "PASS" : "FAIL"} — ${hard.length - failedHard.length}/${hard.length} checks` +
37
+ (soft.length ? ` (+${soft.filter((r) => r.ok).length}/${soft.length} soft)` : "") +
38
+ (failedHard.length ? `\n failed: ${failedHard.map((r) => r.name).join(", ")}` : "")
39
+ );
40
+ }
41
+ }