minima-cli 0.9.0__tar.gz → 0.10.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 (687) hide show
  1. {minima_cli-0.9.0 → minima_cli-0.10.0}/CHANGELOG.md +34 -0
  2. {minima_cli-0.9.0 → minima_cli-0.10.0}/PKG-INFO +1 -1
  3. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/ground-truth-build-guide.md +1 -1
  4. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/package.json +1 -1
  5. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/loop.ts +19 -10
  6. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/faux.ts +18 -1
  7. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/cli/main.ts +14 -2
  8. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/minima_db.ts +261 -38
  9. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/budget.ts +20 -1
  10. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/check.ts +86 -16
  11. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/confidence.ts +1 -0
  12. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/config.ts +9 -0
  13. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/ground_truth.ts +349 -63
  14. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/gt_contract.ts +6 -0
  15. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/index.ts +2 -0
  16. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/judge.ts +18 -1
  17. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/meter.ts +18 -0
  18. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/plan_council.ts +175 -57
  19. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/plan_session.ts +64 -13
  20. minima_cli-0.10.0/packages/tui/src/minima/plan_turn.ts +165 -0
  21. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/runtime.ts +41 -13
  22. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/spawn.ts +21 -1
  23. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/why.ts +36 -2
  24. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/bash.ts +6 -5
  25. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/app.tsx +217 -154
  26. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/layout.ts +102 -0
  27. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/permissions.ts +38 -0
  28. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/text-input.tsx +13 -4
  29. minima_cli-0.10.0/packages/tui/tests/bash-group.test.ts +56 -0
  30. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/behavior.test.ts +90 -9
  31. minima_cli-0.10.0/packages/tui/tests/check.test.ts +346 -0
  32. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/db.test.ts +2 -1
  33. minima_cli-0.10.0/packages/tui/tests/db_migrate.test.ts +122 -0
  34. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/feedback-grounded.test.ts +66 -7
  35. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gate.test.ts +125 -19
  36. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ground_truth.test.ts +85 -5
  37. minima_cli-0.10.0/packages/tui/tests/grounded.test.ts +307 -0
  38. minima_cli-0.10.0/packages/tui/tests/gt-attribution.test.ts +206 -0
  39. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-e2e.test.ts +44 -48
  40. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-footer.test.ts +26 -2
  41. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/hooks.test.ts +22 -0
  42. minima_cli-0.10.0/packages/tui/tests/judge-cost-booking.test.ts +219 -0
  43. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/judge.test.ts +31 -0
  44. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ladder.test.ts +17 -9
  45. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/layout.test.ts +161 -0
  46. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/permissions.test.ts +91 -0
  47. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/plan_council.test.ts +330 -17
  48. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/plan_session.test.ts +182 -8
  49. minima_cli-0.10.0/packages/tui/tests/plan_turn.test.ts +218 -0
  50. minima_cli-0.10.0/packages/tui/tests/resume-gt.test.ts +116 -0
  51. {minima_cli-0.9.0 → minima_cli-0.10.0}/pyproject.toml +1 -1
  52. {minima_cli-0.9.0 → minima_cli-0.10.0}/uv.lock +1 -1
  53. minima_cli-0.9.0/packages/tui/tests/check.test.ts +0 -173
  54. minima_cli-0.9.0/packages/tui/tests/grounded.test.ts +0 -194
  55. {minima_cli-0.9.0 → minima_cli-0.10.0}/.dockerignore +0 -0
  56. {minima_cli-0.9.0 → minima_cli-0.10.0}/.env.example +0 -0
  57. {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/catalog-snapshot.yml +0 -0
  58. {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/ci.yml +0 -0
  59. {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/prod.yml +0 -0
  60. {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/release-cli.yml +0 -0
  61. {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/staging.yml +0 -0
  62. {minima_cli-0.9.0 → minima_cli-0.10.0}/.gitignore +0 -0
  63. {minima_cli-0.9.0 → minima_cli-0.10.0}/AGENTS.md +0 -0
  64. {minima_cli-0.9.0 → minima_cli-0.10.0}/CLAUDE.md +0 -0
  65. {minima_cli-0.9.0 → minima_cli-0.10.0}/Dockerfile +0 -0
  66. {minima_cli-0.9.0 → minima_cli-0.10.0}/LICENSE +0 -0
  67. {minima_cli-0.9.0 → minima_cli-0.10.0}/Makefile +0 -0
  68. {minima_cli-0.9.0 → minima_cli-0.10.0}/README.md +0 -0
  69. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/.gitignore +0 -0
  70. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/README.md +0 -0
  71. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/assert/check.ts +0 -0
  72. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/assert/db.ts +0 -0
  73. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/env.ts +0 -0
  74. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/headless.ts +0 -0
  75. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/mock_server.ts +0 -0
  76. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/rig.ts +0 -0
  77. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/scratch.ts +0 -0
  78. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/_example/mathx.py +0 -0
  79. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/_example/tests/test_public.py +0 -0
  80. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/README.md +0 -0
  81. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/package.json +0 -0
  82. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/csv.ts +0 -0
  83. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/index.ts +0 -0
  84. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/object.ts +0 -0
  85. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/stats.ts +0 -0
  86. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/transform.ts +0 -0
  87. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/csv.test.ts +0 -0
  88. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/object.test.ts +0 -0
  89. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/stats.test.ts +0 -0
  90. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/transform.test.ts +0 -0
  91. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/README.md +0 -0
  92. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/chunk.js +0 -0
  93. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/droot.js +0 -0
  94. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/duration.js +0 -0
  95. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/wrap.js +0 -0
  96. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/checksum.py +0 -0
  97. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/intervals.py +0 -0
  98. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/rle.py +0 -0
  99. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/roman.py +0 -0
  100. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/chunk/smoke.test.js +0 -0
  101. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/droot/smoke.test.js +0 -0
  102. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/duration/smoke.test.js +0 -0
  103. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/wrap/smoke.test.js +0 -0
  104. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/conftest.py +0 -0
  105. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_checksum_smoke.py +0 -0
  106. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_intervals_smoke.py +0 -0
  107. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_rle_smoke.py +0 -0
  108. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_roman_smoke.py +0 -0
  109. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/brackets/smoke.test.ts +0 -0
  110. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/drift/smoke.test.ts +0 -0
  111. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/ordinal/smoke.test.ts +0 -0
  112. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/slug/smoke.test.ts +0 -0
  113. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/brackets.ts +0 -0
  114. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/drift.ts +0 -0
  115. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/ordinal.ts +0 -0
  116. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/slug.ts +0 -0
  117. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/.gitignore +0 -0
  118. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/README.md +0 -0
  119. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/pytest.ini +0 -0
  120. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/__init__.py +0 -0
  121. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/__main__.py +0 -0
  122. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/cli.py +0 -0
  123. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/dates.py +0 -0
  124. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/migrations.py +0 -0
  125. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/models.py +0 -0
  126. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/query.py +0 -0
  127. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/report.py +0 -0
  128. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/storage.py +0 -0
  129. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/__init__.py +0 -0
  130. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/conftest.py +0 -0
  131. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_cli.py +0 -0
  132. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_dates.py +0 -0
  133. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_models.py +0 -0
  134. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_query.py +0 -0
  135. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_report.py +0 -0
  136. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_storage.py +0 -0
  137. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/README.md +0 -0
  138. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/package.json +0 -0
  139. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/app.ts +0 -0
  140. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/auth.ts +0 -0
  141. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/errors.ts +0 -0
  142. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/admin.ts +0 -0
  143. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/links.ts +0 -0
  144. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/notes.ts +0 -0
  145. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/stats.ts +0 -0
  146. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/persist.ts +0 -0
  147. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/ratelimit.ts +0 -0
  148. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/respond.ts +0 -0
  149. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/router.ts +0 -0
  150. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/server.ts +0 -0
  151. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/store.ts +0 -0
  152. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/types.ts +0 -0
  153. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/validate.ts +0 -0
  154. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/auth.test.ts +0 -0
  155. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/health.test.ts +0 -0
  156. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/helpers.ts +0 -0
  157. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/links.test.ts +0 -0
  158. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/notes.test.ts +0 -0
  159. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/persist.test.ts +0 -0
  160. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/ratelimit.test.ts +0 -0
  161. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/router.test.ts +0 -0
  162. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/stats.test.ts +0 -0
  163. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/store.test.ts +0 -0
  164. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/validate.test.ts +0 -0
  165. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tsconfig.json +0 -0
  166. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f10_recovery_ladder.ts +0 -0
  167. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f12_learning_loop.ts +0 -0
  168. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f1_headless.ts +0 -0
  169. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f4_cost_budget.ts +0 -0
  170. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f5_task_dag_worktree.ts +0 -0
  171. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f6_resume_lineage.ts +0 -0
  172. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f7_permissions_plan.ts +0 -0
  173. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f9_offline_reconnect.ts +0 -0
  174. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/attempt.ts +0 -0
  175. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/build_index.ts +0 -0
  176. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibrate.ts +0 -0
  177. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibrate_all.ts +0 -0
  178. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibration_report.ts +0 -0
  179. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/materialize.ts +0 -0
  180. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/savings_ab.ts +0 -0
  181. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/savings_report.ts +0 -0
  182. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/validate_task.ts +0 -0
  183. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/run.ts +0 -0
  184. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/bug.patch +0 -0
  185. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/hidden_tests.patch +0 -0
  186. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/task.json +0 -0
  187. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/calibration.jsonl +0 -0
  188. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/bug.patch +0 -0
  189. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/hidden_tests.patch +0 -0
  190. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/task.json +0 -0
  191. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/bug.patch +0 -0
  192. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/hidden_tests.patch +0 -0
  193. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/task.json +0 -0
  194. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/bug.patch +0 -0
  195. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/hidden_tests.patch +0 -0
  196. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/task.json +0 -0
  197. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/bug.patch +0 -0
  198. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/hidden_tests.patch +0 -0
  199. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/task.json +0 -0
  200. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/hidden_tests.patch +0 -0
  201. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/oracle.patch +0 -0
  202. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/task.json +0 -0
  203. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/bug.patch +0 -0
  204. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/hidden_tests.patch +0 -0
  205. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/task.json +0 -0
  206. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/hidden_tests.patch +0 -0
  207. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/oracle.patch +0 -0
  208. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/task.json +0 -0
  209. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/hidden_tests.patch +0 -0
  210. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/oracle.patch +0 -0
  211. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/task.json +0 -0
  212. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/hidden_tests.patch +0 -0
  213. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/oracle.patch +0 -0
  214. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/task.json +0 -0
  215. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/hidden_tests.patch +0 -0
  216. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/oracle.patch +0 -0
  217. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/task.json +0 -0
  218. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/hidden_tests.patch +0 -0
  219. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/oracle.patch +0 -0
  220. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/task.json +0 -0
  221. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/hidden_tests.patch +0 -0
  222. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/oracle.patch +0 -0
  223. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/task.json +0 -0
  224. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/hidden_tests.patch +0 -0
  225. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/oracle.patch +0 -0
  226. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/task.json +0 -0
  227. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/hidden_tests.patch +0 -0
  228. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/oracle.patch +0 -0
  229. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/task.json +0 -0
  230. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/hidden_tests.patch +0 -0
  231. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/oracle.patch +0 -0
  232. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/task.json +0 -0
  233. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/hidden_tests.patch +0 -0
  234. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/oracle.patch +0 -0
  235. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/task.json +0 -0
  236. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/hidden_tests.patch +0 -0
  237. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/oracle.patch +0 -0
  238. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/task.json +0 -0
  239. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/hidden_tests.patch +0 -0
  240. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/oracle.patch +0 -0
  241. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/task.json +0 -0
  242. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/bug.patch +0 -0
  243. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/hidden_tests.patch +0 -0
  244. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/task.json +0 -0
  245. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/bug.patch +0 -0
  246. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/hidden_tests.patch +0 -0
  247. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/task.json +0 -0
  248. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/bug.patch +0 -0
  249. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/hidden_tests.patch +0 -0
  250. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/task.json +0 -0
  251. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/bug.patch +0 -0
  252. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/hidden_tests.patch +0 -0
  253. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/task.json +0 -0
  254. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/bug.patch +0 -0
  255. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/hidden_tests.patch +0 -0
  256. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/task.json +0 -0
  257. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/bug.patch +0 -0
  258. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/hidden_tests.patch +0 -0
  259. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/task.json +0 -0
  260. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/bug.patch +0 -0
  261. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/hidden_tests.patch +0 -0
  262. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/task.json +0 -0
  263. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/bug.patch +0 -0
  264. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/hidden_tests.patch +0 -0
  265. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/task.json +0 -0
  266. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/savings_ab.jsonl +0 -0
  267. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/tasks.jsonl +0 -0
  268. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/hidden_tests.patch +0 -0
  269. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/oracle.patch +0 -0
  270. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/task.json +0 -0
  271. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/hidden_tests.patch +0 -0
  272. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/oracle.patch +0 -0
  273. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/task.json +0 -0
  274. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/hidden_tests.patch +0 -0
  275. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/oracle.patch +0 -0
  276. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/task.json +0 -0
  277. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/bug.patch +0 -0
  278. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/hidden_tests.patch +0 -0
  279. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/task.json +0 -0
  280. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/bug.patch +0 -0
  281. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/hidden_tests.patch +0 -0
  282. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/task.json +0 -0
  283. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/bug.patch +0 -0
  284. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/hidden_tests.patch +0 -0
  285. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/task.json +0 -0
  286. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/bug.patch +0 -0
  287. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/hidden_tests.patch +0 -0
  288. {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/task.json +0 -0
  289. {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/__init__.py +0 -0
  290. {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/autocapture.py +0 -0
  291. {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/client.py +0 -0
  292. {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/errors.py +0 -0
  293. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/README.md +0 -0
  294. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/agent-core-architecture.md +0 -0
  295. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/agent-core-implementation-plan.md +0 -0
  296. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/api-reference.md +0 -0
  297. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/client-sdk.md +0 -0
  298. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/concepts.md +0 -0
  299. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/configuration.md +0 -0
  300. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/examples.md +0 -0
  301. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/feature-gap-analysis.md +0 -0
  302. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/getting-started.md +0 -0
  303. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/goals-feature-plan.md +0 -0
  304. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/ground-truth-tui-plan.md +0 -0
  305. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/harness.md +0 -0
  306. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/multi-tenancy.md +0 -0
  307. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/operations.md +0 -0
  308. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/publishing.md +0 -0
  309. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/seeding.md +0 -0
  310. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/.dockerignore +0 -0
  311. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/Dockerfile +0 -0
  312. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Accordion.tsx +0 -0
  313. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Badge.tsx +0 -0
  314. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Card.tsx +0 -0
  315. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/CardGroup.tsx +0 -0
  316. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Frame.tsx +0 -0
  317. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Note.tsx +0 -0
  318. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/PageHeader.tsx +0 -0
  319. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Steps.tsx +0 -0
  320. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Tabs.tsx +0 -0
  321. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/index.ts +0 -0
  322. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/sidebar.ts +0 -0
  323. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/netlify.toml +0 -0
  324. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/nginx.conf +0 -0
  325. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/package-lock.json +0 -0
  326. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/package.json +0 -0
  327. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/api-reference/endpoints.mdx +0 -0
  328. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/cli.mdx +0 -0
  329. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/configuration.mdx +0 -0
  330. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/installation.mdx +0 -0
  331. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/interactive.mdx +0 -0
  332. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/overview.mdx +0 -0
  333. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/routing.mdx +0 -0
  334. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/sessions.mdx +0 -0
  335. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/tools.mdx +0 -0
  336. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/troubleshooting.mdx +0 -0
  337. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/index.mdx +0 -0
  338. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/client-sdk.mdx +0 -0
  339. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/concepts.mdx +0 -0
  340. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/examples.mdx +0 -0
  341. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/getting-started.mdx +0 -0
  342. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/favicon.png +0 -0
  343. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/logo-dark.svg +0 -0
  344. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/logo-light.svg +0 -0
  345. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/styles/global.css +0 -0
  346. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/tsconfig.json +0 -0
  347. {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/vocs.config.ts +0 -0
  348. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/01_quickstart.sh +0 -0
  349. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/02_recommend_and_feedback.py +0 -0
  350. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/03_constraints_and_tradeoff.py +0 -0
  351. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/04_workflow.py +0 -0
  352. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/05_autocapture.py +0 -0
  353. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/06_routed_llm_call.py +0 -0
  354. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/07_multitenant_admin.py +0 -0
  355. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/README.md +0 -0
  356. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_escalation.py +0 -0
  357. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_escalation_learn.py +0 -0
  358. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_gemini.py +0 -0
  359. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_retention.py +0 -0
  360. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_warmup.py +0 -0
  361. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_warmup_vary.py +0 -0
  362. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/metrics_demo.py +0 -0
  363. {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/smoke_test.py +0 -0
  364. {minima_cli-0.9.0 → minima_cli-0.10.0}/maybe.js +0 -0
  365. {minima_cli-0.9.0 → minima_cli-0.10.0}/maybe.ts +0 -0
  366. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/.gitignore +0 -0
  367. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/README.md +0 -0
  368. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/biome.json +0 -0
  369. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/bun.lock +0 -0
  370. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/build-all.ts +0 -0
  371. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/build.ts +0 -0
  372. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/install.sh +0 -0
  373. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/pty_capture.py +0 -0
  374. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/stub-devtools.ts +0 -0
  375. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/agent.ts +0 -0
  376. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/events.ts +0 -0
  377. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/index.ts +0 -0
  378. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/state.ts +0 -0
  379. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/tools.ts +0 -0
  380. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/compat.ts +0 -0
  381. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/events.ts +0 -0
  382. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/index.ts +0 -0
  383. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/provider_catalog.ts +0 -0
  384. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/provider_quirks.ts +0 -0
  385. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/_common.ts +0 -0
  386. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/anthropic.ts +0 -0
  387. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/base.ts +0 -0
  388. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/google.ts +0 -0
  389. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/index.ts +0 -0
  390. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/openai_compat.ts +0 -0
  391. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/registry.ts +0 -0
  392. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/stream.ts +0 -0
  393. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/types.ts +0 -0
  394. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/usage.ts +0 -0
  395. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/metrics.ts +0 -0
  396. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/rehydrate.ts +0 -0
  397. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/sink.ts +0 -0
  398. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/errtext.ts +0 -0
  399. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/index.ts +0 -0
  400. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/behavior.ts +0 -0
  401. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/catalog.ts +0 -0
  402. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/client.ts +0 -0
  403. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/errors.ts +0 -0
  404. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/gt_factors.ts +0 -0
  405. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/mapping.ts +0 -0
  406. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/memory.ts +0 -0
  407. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/mubit_memory_factory.ts +0 -0
  408. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/router.ts +0 -0
  409. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/schemas.ts +0 -0
  410. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/run_modes.ts +0 -0
  411. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/session/index.ts +0 -0
  412. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/session/store.ts +0 -0
  413. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_ddg.ts +0 -0
  414. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_exa.ts +0 -0
  415. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_io.ts +0 -0
  416. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_search.ts +0 -0
  417. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/apply_patch.ts +0 -0
  418. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/at_mentions.ts +0 -0
  419. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/builtin.ts +0 -0
  420. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/edit.ts +0 -0
  421. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/glob.ts +0 -0
  422. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/grep.ts +0 -0
  423. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/index.ts +0 -0
  424. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/ls.ts +0 -0
  425. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/question.ts +0 -0
  426. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/read.ts +0 -0
  427. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/schema.ts +0 -0
  428. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/task.ts +0 -0
  429. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/todowrite.ts +0 -0
  430. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/types.ts +0 -0
  431. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/web_fetch.ts +0 -0
  432. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/web_search.ts +0 -0
  433. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/write.ts +0 -0
  434. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/auth.ts +0 -0
  435. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/busy.tsx +0 -0
  436. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/child_tree.tsx +0 -0
  437. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/compact.ts +0 -0
  438. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/config_store.ts +0 -0
  439. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/context.ts +0 -0
  440. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/current_action.ts +0 -0
  441. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/messages.tsx +0 -0
  442. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/model-picker.tsx +0 -0
  443. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/mouse-scroll.ts +0 -0
  444. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/projects.ts +0 -0
  445. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/routing-warnings.ts +0 -0
  446. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/status.tsx +0 -0
  447. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/tips.ts +0 -0
  448. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/types.d.ts +0 -0
  449. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/version.ts +0 -0
  450. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/agent.test.ts +0 -0
  451. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ai.test.ts +0 -0
  452. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/anthropic.test.ts +0 -0
  453. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/apply_patch.test.ts +0 -0
  454. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/auth.test.ts +0 -0
  455. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/budget.test.ts +0 -0
  456. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/busy.test.ts +0 -0
  457. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/candidate-filter.test.ts +0 -0
  458. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/catalog.test.ts +0 -0
  459. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/client.test.ts +0 -0
  460. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/confidence.test.ts +0 -0
  461. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/config_store.test.ts +0 -0
  462. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/current_action.test.ts +0 -0
  463. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/effort.test.ts +0 -0
  464. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/error-ux.test.ts +0 -0
  465. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/google.test.ts +0 -0
  466. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-contract.test.ts +0 -0
  467. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt_factors.test.ts +0 -0
  468. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/isolation.test.ts +0 -0
  469. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/memory.test.ts +0 -0
  470. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/minima.test.ts +0 -0
  471. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/minima_memory.test.ts +0 -0
  472. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/mouse-scroll.test.ts +0 -0
  473. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/openai_compat.test.ts +0 -0
  474. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/recall-user-id.test.ts +0 -0
  475. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/render-buffer.test.ts +0 -0
  476. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/run_modes.test.ts +0 -0
  477. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/session.test.ts +0 -0
  478. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/spawn.test.ts +0 -0
  479. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/task.test.ts +0 -0
  480. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/thinking.test.ts +0 -0
  481. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/tips.test.ts +0 -0
  482. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/tools.test.ts +0 -0
  483. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/why.test.ts +0 -0
  484. {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tsconfig.json +0 -0
  485. {minima_cli-0.9.0 → minima_cli-0.10.0}/packaging/homebrew/README.md +0 -0
  486. {minima_cli-0.9.0 → minima_cli-0.10.0}/packaging/homebrew/render_formula.py +0 -0
  487. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
  488. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run1.json +0 -0
  489. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run2.json +0 -0
  490. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run3.json +0 -0
  491. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/tasks.jsonl +0 -0
  492. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/REPORT.md +0 -0
  493. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
  494. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run1.json +0 -0
  495. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run2.json +0 -0
  496. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run3.json +0 -0
  497. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run4.json +0 -0
  498. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run5.json +0 -0
  499. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/summary.json +0 -0
  500. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/tasks.jsonl +0 -0
  501. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
  502. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/strategies_run1.json +0 -0
  503. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/strategies_run2.json +0 -0
  504. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/tasks.jsonl +0 -0
  505. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/REPORT.md +0 -0
  506. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/memory_audit.json +0 -0
  507. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
  508. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run1.json +0 -0
  509. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run2.json +0 -0
  510. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run3.json +0 -0
  511. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run4.json +0 -0
  512. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run5.json +0 -0
  513. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/summary.json +0 -0
  514. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/tasks.jsonl +0 -0
  515. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/REPORT.md +0 -0
  516. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/memory_audit.json +0 -0
  517. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
  518. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run1.json +0 -0
  519. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run2.json +0 -0
  520. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run3.json +0 -0
  521. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run4.json +0 -0
  522. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run5.json +0 -0
  523. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/summary.json +0 -0
  524. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/tasks.jsonl +0 -0
  525. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/memory_audit.json +0 -0
  526. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/recall_debug.jsonl +0 -0
  527. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/tasks.jsonl +0 -0
  528. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  529. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/summary.json +0 -0
  530. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  531. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
  532. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  533. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/summary.json +0 -0
  534. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  535. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
  536. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
  537. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/summary.json +0 -0
  538. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/_manifest.json +0 -0
  539. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/calibration.json +0 -0
  540. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/feedback.json +0 -0
  541. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/health.json +0 -0
  542. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/models.json +0 -0
  543. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/recommend.json +0 -0
  544. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/savings.json +0 -0
  545. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/strategies.json +0 -0
  546. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/workflow.json +0 -0
  547. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/REPORT.md +0 -0
  548. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/results.jsonl +0 -0
  549. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/summary.json +0 -0
  550. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  551. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
  552. {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  553. {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/eval/classify_dataset.json +0 -0
  554. {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/eval/eval_classify.py +0 -0
  555. {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing-web.ts +0 -0
  556. {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing.sh +0 -0
  557. {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing.ts +0 -0
  558. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/__init__.py +0 -0
  559. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/__init__.py +0 -0
  560. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/auth.py +0 -0
  561. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/errors.py +0 -0
  562. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/__init__.py +0 -0
  563. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/calibration.py +0 -0
  564. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/capabilities.py +0 -0
  565. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/feedback.py +0 -0
  566. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/health.py +0 -0
  567. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/models.py +0 -0
  568. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/recommend.py +0 -0
  569. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/savings.py +0 -0
  570. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/strategies.py +0 -0
  571. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/__init__.py +0 -0
  572. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/data/capability_priors.json +0 -0
  573. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/data/model_aliases.json +0 -0
  574. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/merge.py +0 -0
  575. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/refresh.py +0 -0
  576. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/__init__.py +0 -0
  577. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/litellm.py +0 -0
  578. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/openrouter.py +0 -0
  579. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/store.py +0 -0
  580. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/config.py +0 -0
  581. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/deps.py +0 -0
  582. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/__init__.py +0 -0
  583. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/anthropic.py +0 -0
  584. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/base.py +0 -0
  585. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/gemini.py +0 -0
  586. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/registry.py +0 -0
  587. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/logging.py +0 -0
  588. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/main.py +0 -0
  589. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/__init__.py +0 -0
  590. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/adapter.py +0 -0
  591. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/keys.py +0 -0
  592. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/records.py +0 -0
  593. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/threadpool.py +0 -0
  594. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/__init__.py +0 -0
  595. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/calibration.py +0 -0
  596. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/report.py +0 -0
  597. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/savings.py +0 -0
  598. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/__init__.py +0 -0
  599. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/_pg_pool.py +0 -0
  600. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/_redis_client.py +0 -0
  601. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/aggregate.py +0 -0
  602. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/classify.py +0 -0
  603. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/decisionlog.py +0 -0
  604. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/durablerefs.py +0 -0
  605. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/engine.py +0 -0
  606. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/escalation.py +0 -0
  607. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/propensity.py +0 -0
  608. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/recstore.py +0 -0
  609. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/score.py +0 -0
  610. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/types.py +0 -0
  611. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/__init__.py +0 -0
  612. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/capabilities.py +0 -0
  613. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/common.py +0 -0
  614. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/feedback.py +0 -0
  615. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/models_catalog.py +0 -0
  616. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/recommend.py +0 -0
  617. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/savings.py +0 -0
  618. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/strategies.py +0 -0
  619. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/workflow.py +0 -0
  620. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/__init__.py +0 -0
  621. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/items.py +0 -0
  622. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/llmrouterbench.py +0 -0
  623. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/routerbench.py +0 -0
  624. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/run_seed.py +0 -0
  625. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/synthetic.py +0 -0
  626. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/__init__.py +0 -0
  627. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/context.py +0 -0
  628. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/passthrough.py +0 -0
  629. {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/version.py +0 -0
  630. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/__init__.py +0 -0
  631. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/conftest.py +0 -0
  632. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/BENCHMARKS.md +0 -0
  633. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/CRITERIA.md +0 -0
  634. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/RESULTS.md +0 -0
  635. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/__init__.py +0 -0
  636. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/harness.py +0 -0
  637. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/llmrouterbench_config.py +0 -0
  638. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/prompt_length_benchmark.py +0 -0
  639. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
  640. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/test_routerbench_savings.py +0 -0
  641. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/factories.py +0 -0
  642. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_auth.py +0 -0
  643. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_escalation_reasoner.py +0 -0
  644. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_feedback_loop.py +0 -0
  645. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_lesson_promotion.py +0 -0
  646. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_measurement_api.py +0 -0
  647. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_observed_cost_ranking.py +0 -0
  648. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_recommend_api.py +0 -0
  649. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_strategies_api.py +0 -0
  650. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_workflow_models_health.py +0 -0
  651. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  652. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_escalation_fixes.py +0 -0
  653. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_full_surface_live.py +0 -0
  654. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_mubit_roundtrip.py +0 -0
  655. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_phase3_live.py +0 -0
  656. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_reasoner_live.py +0 -0
  657. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_recall_params_live.py +0 -0
  658. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_aggregate.py +0 -0
  659. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_aggregate_decay.py +0 -0
  660. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_autocapture.py +0 -0
  661. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_calibration_fit.py +0 -0
  662. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_capabilities.py +0 -0
  663. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_classify_benchmark.py +0 -0
  664. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_classify_keys.py +0 -0
  665. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_cluster.py +0 -0
  666. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_collapse_guard.py +0 -0
  667. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_cost_band.py +0 -0
  668. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_decisionlog.py +0 -0
  669. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_escalation.py +0 -0
  670. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_exploration.py +0 -0
  671. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_ipw.py +0 -0
  672. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_iterations.py +0 -0
  673. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_latency_quality.py +0 -0
  674. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_lever_cost.py +0 -0
  675. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_metrics.py +0 -0
  676. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_metrics_demo.py +0 -0
  677. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_neighbor_classify.py +0 -0
  678. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_prompt_length_benchmark.py +0 -0
  679. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_reasoner.py +0 -0
  680. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_records_catalog.py +0 -0
  681. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_recstore_sqlite.py +0 -0
  682. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_score.py +0 -0
  683. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_shadow_bandit.py +0 -0
  684. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_store_backends.py +0 -0
  685. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_strategies.py +0 -0
  686. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_tenancy.py +0 -0
  687. {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_thompson.py +0 -0
@@ -4,6 +4,40 @@ 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.10.0] - 2026-07-12
8
+
9
+ ### Fixed
10
+ - **Ground-truth spine hardened end-to-end** (still opt-in via `MINIMA_TUI_GROUND_TRUTH=1`):
11
+ - Gate verdicts now carry the `rec_id` of the turn that minted them, so grounded
12
+ feedback can never be poisoned by a stale gate from an earlier prompt, and a
13
+ blocked step's red verdict is superseded by its retry (content-first flip
14
+ identity). Plans close when their last flip is verified, instead of haunting
15
+ every later turn.
16
+ - Step identity survives rewording (token-set matching), a step's baseline resets
17
+ when its `verify` command changes (no fabricated red→green), and resuming a run
18
+ re-adopts its active plan.
19
+ - Bash writes and sub-agent writes are attributed to the run; unattributed
20
+ ("blind") writes cap confidence at 🟡 instead of silently passing.
21
+ - Check runner: verify commands run in their own process group and are killed as a
22
+ group on timeout/abort (no orphaned children), run under a minimal env allowlist,
23
+ and honor `MINIMA_TUI_CHECK_TIMEOUT`.
24
+ - `/plan` council: injected findings are fenced as untrusted data, the whole plan
25
+ turn aborts cleanly on Esc (partial research kept), and each council round is
26
+ budget-metered ($0.25/round soft cap).
27
+ - **Default path** (no flag required): the SQLite migration runner is race-safe across
28
+ concurrent sessions and self-heals a previously wedged DB; a bash tool timeout/abort
29
+ kills the whole process group; a throwing after-hook no longer wedges the agent loop;
30
+ the `task` tool is blocked in plan mode.
31
+ - Gate-focus modal: keyboard verdict overrides (approve / reject / steer with a note)
32
+ reach the correct gate, and the TUI footer/overlay no longer overflow on narrow
33
+ terminals.
34
+
35
+ ### Added
36
+ - With `MINIMA_LLM_JUDGE=1`, judge grading spend is now booked to the session wallet —
37
+ visible in `/cost` (as `judge overhead`), the footer, and enforced by `--budget` —
38
+ while staying out of feedback's `actual_cost_usd` so the cost model Minima learns
39
+ from stays clean.
40
+
7
41
  ## [0.9.0] - 2026-07-10
8
42
 
9
43
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minima-cli
3
- Version: 0.9.0
3
+ Version: 0.10.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
@@ -246,7 +246,7 @@ _By the end of this stage each step carries a check command, and you can run it
246
246
  - **Goal (plain):** a helper that runs a command and tells you pass/fail + output.
247
247
  - **Why:** the single primitive everything in Stages 4–6 leans on.
248
248
  - **Build:**
249
- - Mirror the `/undo` git shell-out pattern: spawn the command, capture exit code + stdout/stderr, enforce a timeout (`MINIMA_TIMEOUT`), return `{ pass: boolean, output: string, durationMs }`.
249
+ - Mirror the `/undo` git shell-out pattern: spawn the command in its own process group with an allowlisted env (`MINIMA_TUI_CHECK_ENV` adds names), capture exit code + stdout/stderr, enforce a timeout (`MINIMA_TUI_CHECK_TIMEOUT`, seconds — independent of the `MINIMA_TIMEOUT` routing timeout), return `{ pass: boolean, output: string, durationMs }`.
250
250
  - **See it work:** unit test: `runCheck("true")` → pass; `runCheck("false")` → fail; a sleeping command → times out cleanly.
251
251
  - **Done when:** `bun test` covers pass, fail, and timeout.
252
252
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minima-tui",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Minima harness + TUI — the `minima` CLI (TypeScript/Ink; successor to the removed Python harness). Talks to the Python FastAPI recommender service over the /v1/* contract.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -374,16 +374,25 @@ async function runOneTool(
374
374
  }
375
375
 
376
376
  if (config.afterToolCall) {
377
- const ar = await config.afterToolCall({
378
- toolCall: p.tc,
379
- result,
380
- isError,
381
- context: state,
382
- } satisfies AfterToolCallContext);
383
- if (ar) {
384
- if (ar.terminate) result = { ...result, terminate: true };
385
- if (ar.details) result = { ...result, details: { ...(result.details ?? {}), ...ar.details } };
386
- if (ar.content) result = { ...result, content: ar.content };
377
+ // A throwing after-hook must not unwind the batch: with Promise.all a single throw
378
+ // rejected the whole executeToolCalls pass BEFORE any completion entry ran its
379
+ // pendingToolCalls.delete, leaking the ids for the rest of the session (hooks are
380
+ // bookkeeping; enforcement lives in beforeToolCall).
381
+ try {
382
+ const ar = await config.afterToolCall({
383
+ toolCall: p.tc,
384
+ result,
385
+ isError,
386
+ context: state,
387
+ } satisfies AfterToolCallContext);
388
+ if (ar) {
389
+ if (ar.terminate) result = { ...result, terminate: true };
390
+ if (ar.details)
391
+ result = { ...result, details: { ...(result.details ?? {}), ...ar.details } };
392
+ if (ar.content) result = { ...result, content: ar.content };
393
+ }
394
+ } catch {
395
+ // degrade to the raw tool result
387
396
  }
388
397
  }
389
398
 
@@ -49,10 +49,20 @@ function estimateUsage(msg: AssistantMessage): void {
49
49
  msg.usage.output = Math.max(1, Math.floor(charLen / CHARS_PER_TOKEN));
50
50
  }
51
51
 
52
+ /** One captured request — lets tests assert on the exact prompt content a model would see. */
53
+ export interface FauxRequest {
54
+ model: string;
55
+ systemPrompt: string | null;
56
+ messageCount: number;
57
+ /** Concatenated text of the LAST user message — the prompt under test. */
58
+ user: string;
59
+ }
60
+
52
61
  /** Observable per-registration state. */
53
62
  export class FauxProviderState {
54
63
  callCount = 0;
55
64
  responses: AssistantMessage[] = [];
65
+ requests: FauxRequest[] = [];
56
66
  get pendingResponseCount(): number {
57
67
  return this.responses.length;
58
68
  }
@@ -115,13 +125,20 @@ class FauxProvider implements Provider {
115
125
 
116
126
  async *stream(
117
127
  model: Model,
118
- _context: Context,
128
+ context: Context,
119
129
  opts?: { options?: Record<string, unknown>; signal?: AbortSignal },
120
130
  ): AsyncIterable<StreamEvent> {
121
131
  // Honor a pre-aborted signal like the real providers, so abort behaviour is
122
132
  // exercisable in hermetic tests.
123
133
  if (opts?.signal?.aborted) throw new DOMException("Aborted", "AbortError");
124
134
  this.state.callCount += 1;
135
+ const lastUser = [...context.messages].reverse().find((m) => m.role === "user");
136
+ this.state.requests.push({
137
+ model: model.id,
138
+ systemPrompt: context.system_prompt ?? null,
139
+ messageCount: context.messages.length,
140
+ user: lastUser?.textContent ?? "",
141
+ });
125
142
  const queued = this.state.responses.shift();
126
143
  if (!queued) {
127
144
  const err = new AssistantMessage({
@@ -360,13 +360,18 @@ export async function main(argv: string[] = process.argv.slice(2)): Promise<numb
360
360
 
361
361
  // Judge: abstains by default (honest — no fabricated quality). MINIMA_LLM_JUDGE=1 turns
362
362
  // on real LLM grading (staged default-off: it spends money where ConstJudge spent zero).
363
+ // Judge spend books to the session wallet (meter overhead + budget) but NEVER into
364
+ // feedback's actual_cost_usd — folding it in would inflate the routed model's observed
365
+ // $/call and poison the observed/rescaled cost basis. Late-bound: the agent (and its
366
+ // optional budget) doesn't exist yet at judge construction.
367
+ let bookJudgeSpend: (usd: number) => void = () => {};
363
368
  let judge: ConstJudge | LLMJudge = new ConstJudge(null);
364
369
  if (process.env.MINIMA_LLM_JUDGE === "1") {
365
370
  const jm = findModelById(config.judgeModel);
366
371
  if (jm && providerKeyPresent(jm.provider)) {
367
- judge = new LLMJudge(jm);
372
+ judge = new LLMJudge(jm, { onCostUsd: (usd) => bookJudgeSpend(usd) });
368
373
  process.stderr.write(
369
- `minima: LLM judge on (${jm.id}) — grading adds a small per-prompt cost\n`,
374
+ `minima: LLM judge on (${jm.id}) — grading adds a small per-prompt cost (booked to /cost + budget)\n`,
370
375
  );
371
376
  } else {
372
377
  process.stderr.write(
@@ -382,6 +387,13 @@ export async function main(argv: string[] = process.argv.slice(2)): Promise<numb
382
387
  judge,
383
388
  systemPrompt,
384
389
  });
390
+ // agent.budget is attached later (--budget) — read it at call time. Children share this
391
+ // judge instance (spawn.ts), so their grading books here too, never into their own
392
+ // meter rows (which the parent reads as the child's routed cost).
393
+ bookJudgeSpend = (usd) => {
394
+ agent.meter?.addOverhead(usd);
395
+ agent.budget?.bookSpend(usd, "judge");
396
+ };
385
397
  // Apply the --thinking CLI flag to the initial reasoning level. It was parsed but never used;
386
398
  // the agent kept its default, so the flag was a silent no-op.
387
399
  const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
@@ -34,6 +34,27 @@ export function newId(): string {
34
34
  return crypto.randomUUID();
35
35
  }
36
36
 
37
+ function isBusyError(e: unknown): boolean {
38
+ const msg = e instanceof Error ? e.message : String(e);
39
+ return msg.includes("SQLITE_BUSY") || msg.includes("database is locked");
40
+ }
41
+
42
+ function tokenJaccard(a: string, b: string): number {
43
+ const tokens = (s: string) =>
44
+ new Set(
45
+ s
46
+ .toLowerCase()
47
+ .split(/[^a-z0-9]+/)
48
+ .filter(Boolean),
49
+ );
50
+ const ta = tokens(a);
51
+ const tb = tokens(b);
52
+ if (ta.size === 0 || tb.size === 0) return 0;
53
+ let hit = 0;
54
+ for (const t of ta) if (tb.has(t)) hit += 1;
55
+ return hit / (ta.size + tb.size - hit);
56
+ }
57
+
37
58
  /** Ordered, idempotent migrations. schema_meta.version = index of the last applied + 1. */
38
59
  const MIGRATIONS: string[][] = [
39
60
  // v1 — core spine
@@ -200,6 +221,22 @@ const MIGRATIONS: string[][] = [
200
221
  "ALTER TABLE routing_decisions ADD COLUMN gt_verified_by TEXT",
201
222
  "ALTER TABLE routing_decisions ADD COLUMN gt_confidence TEXT",
202
223
  ],
224
+ // v6 — gate identity: rec_id scopes every gate row to the routed rung that minted it
225
+ // (NULL = pre-identity/manual, invisible to the feedback join by construction);
226
+ // session_id/agent_id are reporting/provenance only, never feedback inputs. plans.closed_at
227
+ // records closure; plan_steps.verify_cwd is a seam for per-check cwd policy (no writer yet);
228
+ // user_signals.note carries the steer key's free text.
229
+ [
230
+ "ALTER TABLE gates ADD COLUMN rec_id TEXT",
231
+ "ALTER TABLE gates ADD COLUMN session_id TEXT",
232
+ "ALTER TABLE gates ADD COLUMN agent_id TEXT",
233
+ "ALTER TABLE file_changes ADD COLUMN agent_id TEXT",
234
+ "ALTER TABLE plans ADD COLUMN closed_at REAL",
235
+ "ALTER TABLE plan_steps ADD COLUMN verify_cwd TEXT",
236
+ "ALTER TABLE user_signals ADD COLUMN note TEXT",
237
+ "CREATE INDEX IF NOT EXISTS ix_gates_rec ON gates(rec_id)",
238
+ "CREATE INDEX IF NOT EXISTS ix_gates_session ON gates(session_id, created_at)",
239
+ ],
203
240
  ];
204
241
 
205
242
  export interface RunRow {
@@ -263,6 +300,7 @@ export interface PlanRow {
263
300
  title: string | null;
264
301
  status: string | null;
265
302
  created_at: string | null;
303
+ closed_at: number | null;
266
304
  }
267
305
 
268
306
  export interface PlanStepRow {
@@ -274,6 +312,7 @@ export interface PlanStepRow {
274
312
  verify: string | null;
275
313
  baseline: Baseline | null;
276
314
  created_at: string | null;
315
+ verify_cwd: string | null;
277
316
  }
278
317
 
279
318
  export interface FileChangeRow {
@@ -284,6 +323,7 @@ export interface FileChangeRow {
284
323
  kind: string | null;
285
324
  origin: string | null;
286
325
  created_at: string | null;
326
+ agent_id: string | null;
287
327
  }
288
328
 
289
329
  export interface GateRow {
@@ -296,6 +336,9 @@ export interface GateRow {
296
336
  verified_by: VerifiedBy | null;
297
337
  factors_json: string | null;
298
338
  created_at: string | null;
339
+ rec_id: string | null;
340
+ session_id: string | null;
341
+ agent_id: string | null;
299
342
  }
300
343
 
301
344
  export interface UserSignalRow {
@@ -303,6 +346,7 @@ export interface UserSignalRow {
303
346
  gate_id: string | null;
304
347
  action: UserAction | null;
305
348
  at: string | null;
349
+ note: string | null;
306
350
  }
307
351
 
308
352
  /** One todo as handed to the ledger (a subset of the todowrite tool's TodoTask). */
@@ -331,27 +375,76 @@ export class MinimaDb {
331
375
  this.path = path;
332
376
  if (path !== ":memory:") mkdirSync(dirname(path), { recursive: true });
333
377
  this.db = new Database(path, { create: true });
334
- this.db.exec("PRAGMA journal_mode=WAL");
335
- this.db.exec("PRAGMA foreign_keys=ON");
336
378
  this.db.exec("PRAGMA busy_timeout=5000");
379
+ // The delete->WAL header flip needs a brief exclusive lock and does NOT honor the
380
+ // busy handler, so a concurrent fresh open can see SQLITE_BUSY here.
381
+ for (let attempt = 0; ; attempt += 1) {
382
+ try {
383
+ this.db.exec("PRAGMA journal_mode=WAL");
384
+ break;
385
+ } catch (e) {
386
+ if (attempt < 20 && isBusyError(e)) {
387
+ Bun.sleepSync(25);
388
+ continue;
389
+ }
390
+ throw e;
391
+ }
392
+ }
393
+ this.db.exec("PRAGMA foreign_keys=ON");
337
394
  this.migrate();
338
395
  }
339
396
 
340
397
  private migrate(): void {
341
398
  this.db.exec("CREATE TABLE IF NOT EXISTS schema_meta (version INTEGER NOT NULL)");
342
- const row = this.db.query("SELECT version FROM schema_meta").get() as {
343
- version: number;
344
- } | null;
345
- let version = row?.version ?? 0;
346
- if (!row) this.db.exec("INSERT INTO schema_meta VALUES (0)");
347
- while (version < MIGRATIONS.length) {
348
- const steps = MIGRATIONS[version]!;
349
- const apply = this.db.transaction(() => {
350
- for (const ddl of steps) this.db.exec(ddl);
351
- this.db.exec("UPDATE schema_meta SET version = ?", [version + 1]);
352
- });
353
- apply();
354
- version += 1;
399
+ const settled = this.db
400
+ .query("SELECT COUNT(*) AS n, MAX(version) AS v FROM schema_meta")
401
+ .get() as {
402
+ n: number;
403
+ v: number | null;
404
+ };
405
+ if (settled.n === 1 && settled.v !== null && settled.v >= MIGRATIONS.length) return;
406
+ // One batch per IMMEDIATE transaction: the version re-read happens under the write
407
+ // lock, so concurrent openers serialize instead of double-applying a batch.
408
+ const step = this.db.transaction((): boolean => {
409
+ this.db.exec(
410
+ `DELETE FROM schema_meta WHERE rowid NOT IN
411
+ (SELECT rowid FROM schema_meta ORDER BY version DESC, rowid ASC LIMIT 1)`,
412
+ );
413
+ this.db.exec(
414
+ "INSERT INTO schema_meta (version) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM schema_meta)",
415
+ );
416
+ const version = (
417
+ this.db.query("SELECT version FROM schema_meta").get() as { version: number }
418
+ ).version;
419
+ if (version >= MIGRATIONS.length) return false;
420
+ for (const ddl of MIGRATIONS[version]!) this.execStep(ddl);
421
+ this.db.exec("UPDATE schema_meta SET version = ?", [version + 1]);
422
+ return version + 1 < MIGRATIONS.length;
423
+ });
424
+ for (;;) {
425
+ let more: boolean | undefined;
426
+ for (let attempt = 0; ; attempt += 1) {
427
+ try {
428
+ more = step.immediate();
429
+ break;
430
+ } catch (e) {
431
+ if (attempt < 2 && isBusyError(e)) continue;
432
+ throw e;
433
+ }
434
+ }
435
+ if (!more) break;
436
+ }
437
+ }
438
+
439
+ // Self-heal for DBs wedged by the pre-fix race: version regressed while a later batch's
440
+ // columns are already present, so re-applying ADD COLUMN throws forever.
441
+ private execStep(ddl: string): void {
442
+ try {
443
+ this.db.exec(ddl);
444
+ } catch (e) {
445
+ const msg = e instanceof Error ? e.message : String(e);
446
+ if (/ADD COLUMN/i.test(ddl) && msg.includes("duplicate column name")) return;
447
+ throw e;
355
448
  }
356
449
  }
357
450
 
@@ -627,7 +720,25 @@ export class MinimaDb {
627
720
  }
628
721
 
629
722
  setPlanStatus(planId: string, status: string): void {
630
- this.db.run("UPDATE plans SET status = ? WHERE id = ?", [status, planId]);
723
+ this.db.run(
724
+ "UPDATE plans SET status = ?, closed_at = CASE WHEN ? = 'active' THEN NULL ELSE COALESCE(closed_at, ?) END WHERE id = ?",
725
+ [status, status, Date.now() / 1000, planId],
726
+ );
727
+ }
728
+
729
+ /**
730
+ * Re-key the old run's still-active plans onto the resuming run (MOVE semantics — the last
731
+ * resumer wins on a single-user local DB). Everything plan_id-keyed (steps, file_changes,
732
+ * gates) follows for free; the old run's session-keyed gate rows are deliberately NOT
733
+ * adopted — historical verdicts of past prompts must not leak into the resumed run's
734
+ * feedback. Returns the number of plans moved.
735
+ */
736
+ adoptActivePlans(fromSession: string, toSession: string): number {
737
+ this.db.run("UPDATE plans SET session_id = ? WHERE session_id = ? AND status = 'active'", [
738
+ toSession,
739
+ fromSession,
740
+ ]);
741
+ return (this.db.query("SELECT changes() AS n").get() as { n: number }).n;
631
742
  }
632
743
 
633
744
  /** M0.3: insert one step. Returns its id. */
@@ -684,13 +795,19 @@ export class MinimaDb {
684
795
  }
685
796
 
686
797
  /**
687
- * The content-based step matcher SHARED by upsertPlanFromTodos and completionsForTodos —
688
- * one implementation so the done-gate's preview (M4.1) can never match steps differently
689
- * than the upsert it previews (if they drifted, the gate would check the wrong step).
690
- * Trimmed content, first-come queue on duplicates; each call consumes at most one row, so
691
- * callers must invoke it once per incoming todo, in list order, statuses notwithstanding.
798
+ * The step matcher SHARED by upsertPlanFromTodos and completionsForTodos — one
799
+ * implementation, computed ONCE per todo list, so the done-gate's preview (M4.1) can never
800
+ * match steps differently than the upsert it previews. Pass 1 is the historical exact
801
+ * trimmed-content match (first-come queues on duplicates). Pass 2 rescues reworded steps:
802
+ * still-unmatched todos adopt a still-unmatched row when their token-set Jaccard is >= 0.6
803
+ * (ties broken by smallest position distance) — so an accidental rewording keeps the step's
804
+ * id, sticky verify, and gate history instead of shedding them. Deterministic, zero deps.
692
805
  */
693
- private stepMatcher(existing: PlanStepRow[]): (content: string) => PlanStepRow | undefined {
806
+ private matchStepsToTodos(
807
+ existing: PlanStepRow[],
808
+ tasks: TodoInput[],
809
+ ): (PlanStepRow | undefined)[] {
810
+ const out: (PlanStepRow | undefined)[] = new Array(tasks.length).fill(undefined);
694
811
  const byContent = new Map<string, PlanStepRow[]>();
695
812
  for (const s of existing) {
696
813
  const key = (s.content ?? "").trim();
@@ -698,7 +815,36 @@ export class MinimaDb {
698
815
  if (queue) queue.push(s);
699
816
  else byContent.set(key, [s]);
700
817
  }
701
- return (content) => byContent.get(content.trim())?.shift();
818
+ const taken = new Set<string>();
819
+ for (let i = 0; i < tasks.length; i++) {
820
+ const s = byContent.get(tasks[i]!.content.trim())?.shift();
821
+ if (s) {
822
+ out[i] = s;
823
+ taken.add(s.id);
824
+ }
825
+ }
826
+ for (let i = 0; i < tasks.length; i++) {
827
+ if (out[i]) continue;
828
+ let best: PlanStepRow | undefined;
829
+ let bestScore = 0;
830
+ let bestDist = Number.POSITIVE_INFINITY;
831
+ for (const s of existing) {
832
+ if (taken.has(s.id)) continue;
833
+ const score = tokenJaccard(tasks[i]!.content, s.content ?? "");
834
+ if (score < 0.6) continue;
835
+ const dist = Math.abs(s.idx - i);
836
+ if (score > bestScore || (score === bestScore && dist < bestDist)) {
837
+ best = s;
838
+ bestScore = score;
839
+ bestDist = dist;
840
+ }
841
+ }
842
+ if (best) {
843
+ out[i] = best;
844
+ taken.add(best.id);
845
+ }
846
+ }
847
+ return out;
702
848
  }
703
849
 
704
850
  /**
@@ -713,17 +859,21 @@ export class MinimaDb {
713
859
  * enforces one todowrite per assistant message (ground_truth.ts same-batch guard).
714
860
  */
715
861
  completionsForTodos(sessionId: string, tasks: TodoInput[]): CompletionFlip[] {
716
- const plan = this.getActivePlan(sessionId);
717
- const nextMatch = this.stepMatcher(plan ? this.getPlanSteps(plan.id) : []);
862
+ const plan = this.planForTodos(sessionId, tasks);
863
+ const matched = this.matchStepsToTodos(plan ? this.getPlanSteps(plan.id) : [], tasks);
718
864
  const flips: CompletionFlip[] = [];
719
- for (const t of tasks) {
720
- const prev = nextMatch(t.content);
865
+ for (let i = 0; i < tasks.length; i++) {
866
+ const t = tasks[i]!;
867
+ const prev = matched[i];
721
868
  if (t.status !== "completed" || prev?.status === "completed") continue;
869
+ // A verify swap invalidates the old baseline: red→green evidence is only meaningful
870
+ // against the check that produced the red, so the flip carries NULL instead.
871
+ const verifyChanged = t.verify != null && prev?.verify != null && t.verify !== prev.verify;
722
872
  flips.push({
723
873
  content: t.content,
724
874
  stepId: prev?.id ?? null,
725
875
  verify: t.verify ?? prev?.verify ?? null,
726
- baseline: prev?.baseline ?? null,
876
+ baseline: verifyChanged ? null : (prev?.baseline ?? null),
727
877
  });
728
878
  }
729
879
  return flips;
@@ -745,35 +895,64 @@ export class MinimaDb {
745
895
  * once-only). Each entry carries the post-COALESCE effective `verify` (may be null —
746
896
  * filtering verify-less steps is the caller's job).
747
897
  */
898
+ /**
899
+ * The plan a todowrite would apply to — the active plan, else (reopen over resurrect) the
900
+ * session's latest DONE plan when the incoming contents overlap it, so sticky verify/baseline
901
+ * survive a reopen-after-completion cycle while a disjoint list starts fresh. SHARED by
902
+ * completionsForTodos and upsertPlanFromTodos: the done-gate's preview must resolve the same
903
+ * plan the upsert will, or resends of a completed list would preview as brand-new flips.
904
+ */
905
+ private planForTodos(sessionId: string, tasks: TodoInput[]): PlanRow | null {
906
+ const active = this.getActivePlan(sessionId);
907
+ if (active) return active;
908
+ const latest = this.getLatestPlan(sessionId);
909
+ if (latest && latest.status === "done") {
910
+ const contents = new Set(this.getPlanSteps(latest.id).map((s) => (s.content ?? "").trim()));
911
+ if (tasks.some((t) => contents.has(t.content.trim()))) return latest;
912
+ }
913
+ return null;
914
+ }
915
+
748
916
  upsertPlanFromTodos(
749
917
  sessionId: string,
750
918
  tasks: TodoInput[],
751
919
  title?: string | null,
752
920
  ): { planId: string; stepIds: string[]; started: { id: string; verify: string | null }[] } {
753
- const existingPlan = this.getActivePlan(sessionId);
921
+ const existingPlan = this.planForTodos(sessionId, tasks);
922
+ if (existingPlan && existingPlan.status === "done") {
923
+ this.setPlanStatus(existingPlan.id, "active");
924
+ }
754
925
  const planId =
755
926
  existingPlan?.id ??
756
927
  this.insertPlan({ sessionId, title: title ?? tasks[0]?.content ?? null, status: "active" });
757
928
  const existing = this.getPlanSteps(planId);
758
- const nextMatch = this.stepMatcher(existing);
929
+ const matchedSteps = this.matchStepsToTodos(existing, tasks);
759
930
  const stepIds: string[] = [];
760
931
  const started: { id: string; verify: string | null }[] = [];
761
932
  const tx = this.db.transaction(() => {
762
933
  const matched = new Set<string>();
763
934
  for (let i = 0; i < tasks.length; i++) {
764
935
  const t = tasks[i]!;
765
- const prev = nextMatch(t.content);
936
+ const prev = matchedSteps[i];
766
937
  if (prev) {
767
938
  matched.add(prev.id);
939
+ // baseline resets whenever the effective verify CHANGES: red→green evidence must
940
+ // always be scoped to the check that produced the red (a swapped-in check crediting
941
+ // the old check's red would fabricate verified_in_production).
768
942
  this.db.run(
769
- "UPDATE plan_steps SET idx = ?, content = ?, status = ?, verify = COALESCE(?, verify) WHERE id = ?",
770
- [i, t.content, t.status, t.verify ?? null, prev.id],
943
+ "UPDATE plan_steps SET idx = ?, content = ?, status = ?, baseline = CASE WHEN ? IS NOT NULL AND verify IS NOT NULL AND ? <> verify THEN NULL ELSE baseline END, verify = COALESCE(?, verify) WHERE id = ?",
944
+ [i, t.content, t.status, t.verify ?? null, t.verify ?? null, t.verify ?? null, prev.id],
771
945
  );
772
946
  stepIds.push(prev.id);
773
947
  const entered = t.status === "in_progress" && prev.status !== "in_progress";
774
948
  const gainedVerify =
775
949
  t.status === "in_progress" && prev.verify === null && t.verify != null;
776
- if ((entered || gainedVerify) && prev.baseline === null) {
950
+ const changedVerify =
951
+ t.status === "in_progress" &&
952
+ t.verify != null &&
953
+ prev.verify !== null &&
954
+ t.verify !== prev.verify;
955
+ if (changedVerify || ((entered || gainedVerify) && prev.baseline === null)) {
777
956
  started.push({ id: prev.id, verify: t.verify ?? prev.verify ?? null });
778
957
  }
779
958
  } else {
@@ -807,10 +986,11 @@ export class MinimaDb {
807
986
  path: string;
808
987
  kind?: string | null;
809
988
  origin?: string | null;
989
+ agentId?: string | null;
810
990
  }): string {
811
991
  const id = opts.id ?? newId();
812
992
  this.db.run(
813
- "INSERT INTO file_changes (id, plan_id, step_id, path, kind, origin, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)",
993
+ "INSERT INTO file_changes (id, plan_id, step_id, path, kind, origin, created_at, agent_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
814
994
  [
815
995
  id,
816
996
  opts.planId,
@@ -819,6 +999,7 @@ export class MinimaDb {
819
999
  opts.kind ?? null,
820
1000
  opts.origin ?? null,
821
1001
  new Date().toISOString(),
1002
+ opts.agentId ?? null,
822
1003
  ],
823
1004
  );
824
1005
  return id;
@@ -848,10 +1029,13 @@ export class MinimaDb {
848
1029
  confidence?: ConfidenceTier | null;
849
1030
  verifiedBy?: VerifiedBy | null;
850
1031
  factors?: unknown;
1032
+ recId?: string | null;
1033
+ sessionId?: string | null;
1034
+ agentId?: string | null;
851
1035
  }): string {
852
1036
  const id = opts.id ?? newId();
853
1037
  this.db.run(
854
- "INSERT INTO gates (id, plan_id, step_id, kind, outcome, confidence, verified_by, factors_json, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
1038
+ "INSERT INTO gates (id, plan_id, step_id, kind, outcome, confidence, verified_by, factors_json, created_at, rec_id, session_id, agent_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
855
1039
  [
856
1040
  id,
857
1041
  opts.planId ?? null,
@@ -862,6 +1046,9 @@ export class MinimaDb {
862
1046
  opts.verifiedBy ?? null,
863
1047
  opts.factors === undefined ? null : JSON.stringify(opts.factors),
864
1048
  new Date().toISOString(),
1049
+ opts.recId ?? null,
1050
+ opts.sessionId ?? null,
1051
+ opts.agentId ?? null,
865
1052
  ],
866
1053
  );
867
1054
  return id;
@@ -873,14 +1060,50 @@ export class MinimaDb {
873
1060
  .all(planId) as GateRow[];
874
1061
  }
875
1062
 
1063
+ /** The run's commands for one tool (lead + children), oldest first — blind-factor input. */
1064
+ getRunToolCommands(runId: string, toolName: string): string[] {
1065
+ const rows = this.db
1066
+ .query("SELECT args FROM tool_calls WHERE run_id = ? AND tool_name = ? ORDER BY ts, rowid")
1067
+ .all(runId, toolName) as { args: string | null }[];
1068
+ const out: string[] = [];
1069
+ for (const r of rows) {
1070
+ if (!r.args) continue;
1071
+ try {
1072
+ const parsed = JSON.parse(r.args) as Record<string, unknown> | null;
1073
+ const cmd = parsed?.command;
1074
+ if (typeof cmd === "string" && cmd.trim()) out.push(cmd);
1075
+ } catch {
1076
+ // unparsable args carry no command
1077
+ }
1078
+ }
1079
+ return out;
1080
+ }
1081
+
1082
+ /** Blocked-attempt rows written before any plan existed — reachable only by session. */
1083
+ getSessionOrphanGates(sessionId: string): GateRow[] {
1084
+ return this.db
1085
+ .query(
1086
+ "SELECT * FROM gates WHERE session_id = ? AND plan_id IS NULL ORDER BY created_at, rowid",
1087
+ )
1088
+ .all(sessionId) as GateRow[];
1089
+ }
1090
+
1091
+ /** Every gate minted under one routed rung (rec_id), oldest first — the feedback join. */
1092
+ getGatesForRec(recId: string): GateRow[] {
1093
+ return this.db
1094
+ .query("SELECT * FROM gates WHERE rec_id = ? ORDER BY created_at, rowid")
1095
+ .all(recId) as GateRow[];
1096
+ }
1097
+
876
1098
  /** M6.3: record a user override against a gate (accept|reject|steer). */
877
- recordUserSignal(gateId: string, action: UserAction): string {
1099
+ recordUserSignal(gateId: string, action: UserAction, note?: string | null): string {
878
1100
  const id = newId();
879
- this.db.run("INSERT INTO user_signals (id, gate_id, action, at) VALUES (?, ?, ?, ?)", [
1101
+ this.db.run("INSERT INTO user_signals (id, gate_id, action, at, note) VALUES (?, ?, ?, ?, ?)", [
880
1102
  id,
881
1103
  gateId,
882
1104
  action,
883
1105
  new Date().toISOString(),
1106
+ note ?? null,
884
1107
  ]);
885
1108
  return id;
886
1109
  }