minima-cli 0.5.0__tar.gz → 0.7.1__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 (606) hide show
  1. minima_cli-0.7.1/.github/workflows/catalog-snapshot.yml +100 -0
  2. minima_cli-0.7.1/.github/workflows/ci.yml +69 -0
  3. minima_cli-0.7.1/AGENTS.md +58 -0
  4. {minima_cli-0.5.0 → minima_cli-0.7.1}/CHANGELOG.md +91 -0
  5. {minima_cli-0.5.0 → minima_cli-0.7.1}/Makefile +2 -16
  6. {minima_cli-0.5.0 → minima_cli-0.7.1}/PKG-INFO +11 -32
  7. {minima_cli-0.5.0 → minima_cli-0.7.1}/README.md +10 -23
  8. minima_cli-0.7.1/docs/agent-core-architecture.md +748 -0
  9. minima_cli-0.7.1/docs/agent-core-implementation-plan.md +168 -0
  10. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/api-reference.md +2 -1
  11. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/configuration.md +6 -1
  12. minima_cli-0.7.1/docs/harness.md +22 -0
  13. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/publishing.md +17 -20
  14. minima_cli-0.7.1/docs-site/.dockerignore +5 -0
  15. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs-site/Dockerfile +15 -6
  16. minima_cli-0.7.1/docs-site/components/Accordion.tsx +38 -0
  17. minima_cli-0.7.1/docs-site/components/Badge.tsx +49 -0
  18. minima_cli-0.7.1/docs-site/components/Card.tsx +148 -0
  19. minima_cli-0.7.1/docs-site/components/CardGroup.tsx +22 -0
  20. minima_cli-0.7.1/docs-site/components/Frame.tsx +35 -0
  21. minima_cli-0.7.1/docs-site/components/Note.tsx +41 -0
  22. minima_cli-0.7.1/docs-site/components/PageHeader.tsx +28 -0
  23. minima_cli-0.7.1/docs-site/components/Steps.tsx +76 -0
  24. minima_cli-0.7.1/docs-site/components/Tabs.tsx +70 -0
  25. minima_cli-0.7.1/docs-site/components/index.ts +9 -0
  26. minima_cli-0.7.1/docs-site/components/sidebar.ts +95 -0
  27. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs-site/netlify.toml +1 -1
  28. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs-site/nginx.conf +12 -13
  29. minima_cli-0.7.1/docs-site/package-lock.json +10525 -0
  30. minima_cli-0.7.1/docs-site/package.json +22 -0
  31. minima_cli-0.5.0/docs-site/src/content/docs/api-reference.mdx → minima_cli-0.7.1/docs-site/pages/api-reference/endpoints.mdx +64 -20
  32. minima_cli-0.7.1/docs-site/pages/harness/cli.mdx +96 -0
  33. minima_cli-0.7.1/docs-site/pages/harness/configuration.mdx +108 -0
  34. minima_cli-0.7.1/docs-site/pages/harness/installation.mdx +101 -0
  35. minima_cli-0.7.1/docs-site/pages/harness/interactive.mdx +82 -0
  36. minima_cli-0.7.1/docs-site/pages/harness/overview.mdx +49 -0
  37. minima_cli-0.7.1/docs-site/pages/harness/routing.mdx +54 -0
  38. minima_cli-0.7.1/docs-site/pages/harness/sessions.mdx +40 -0
  39. minima_cli-0.7.1/docs-site/pages/harness/tools.mdx +80 -0
  40. minima_cli-0.7.1/docs-site/pages/harness/troubleshooting.mdx +56 -0
  41. {minima_cli-0.5.0/docs-site/src/content/docs → minima_cli-0.7.1/docs-site/pages}/index.mdx +34 -26
  42. {minima_cli-0.5.0/docs-site/src/content/docs → minima_cli-0.7.1/docs-site/pages/sdk}/client-sdk.mdx +11 -9
  43. {minima_cli-0.5.0/docs-site/src/content/docs → minima_cli-0.7.1/docs-site/pages/sdk}/concepts.mdx +9 -7
  44. {minima_cli-0.5.0/docs-site/src/content/docs → minima_cli-0.7.1/docs-site/pages/sdk}/examples.mdx +13 -10
  45. minima_cli-0.7.1/docs-site/pages/sdk/getting-started.mdx +71 -0
  46. minima_cli-0.7.1/docs-site/public/images/favicon.png +0 -0
  47. minima_cli-0.7.1/docs-site/public/images/logo-dark.svg +11 -0
  48. minima_cli-0.7.1/docs-site/public/images/logo-light.svg +11 -0
  49. minima_cli-0.7.1/docs-site/public/styles/global.css +63 -0
  50. minima_cli-0.7.1/docs-site/tsconfig.json +20 -0
  51. minima_cli-0.7.1/docs-site/vocs.config.ts +96 -0
  52. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/README.md +0 -1
  53. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/README.md +1 -1
  54. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/bun.lock +75 -0
  55. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/package.json +3 -2
  56. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/agent.ts +5 -1
  57. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/index.ts +1 -1
  58. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/state.ts +1 -1
  59. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/tools.ts +1 -1
  60. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/compat.ts +1 -1
  61. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/events.ts +1 -1
  62. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/index.ts +1 -1
  63. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/provider_catalog.ts +1 -1
  64. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/provider_quirks.ts +1 -1
  65. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/_common.ts +1 -1
  66. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/anthropic.ts +12 -3
  67. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/base.ts +1 -1
  68. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/faux.ts +1 -1
  69. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/google.ts +3 -2
  70. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/index.ts +1 -1
  71. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/providers/openai_compat.ts +13 -3
  72. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/registry.ts +1 -1
  73. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/stream.ts +1 -1
  74. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/types.ts +1 -1
  75. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/ai/usage.ts +1 -1
  76. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/cli/main.ts +174 -10
  77. minima_cli-0.7.1/packages/tui/src/db/metrics.ts +167 -0
  78. minima_cli-0.7.1/packages/tui/src/db/minima_db.ts +442 -0
  79. minima_cli-0.7.1/packages/tui/src/db/rehydrate.ts +80 -0
  80. minima_cli-0.7.1/packages/tui/src/db/sink.ts +161 -0
  81. minima_cli-0.7.1/packages/tui/src/errtext.ts +11 -0
  82. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/index.ts +1 -1
  83. minima_cli-0.7.1/packages/tui/src/minima/budget.ts +251 -0
  84. minima_cli-0.7.1/packages/tui/src/minima/catalog.ts +150 -0
  85. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/client.ts +14 -1
  86. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/config.ts +1 -1
  87. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/index.ts +1 -1
  88. minima_cli-0.7.1/packages/tui/src/minima/judge.ts +173 -0
  89. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/mapping.ts +1 -1
  90. minima_cli-0.7.1/packages/tui/src/minima/memory.ts +171 -0
  91. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/meter.ts +1 -1
  92. minima_cli-0.7.1/packages/tui/src/minima/mubit_memory_factory.ts +32 -0
  93. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/router.ts +84 -7
  94. minima_cli-0.7.1/packages/tui/src/minima/runtime.ts +651 -0
  95. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/schemas.ts +17 -0
  96. minima_cli-0.7.1/packages/tui/src/minima/spawn.ts +225 -0
  97. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/run_modes.ts +34 -15
  98. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/session/store.ts +1 -1
  99. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/_io.ts +25 -2
  100. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/bash.ts +16 -5
  101. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/builtin.ts +15 -8
  102. minima_cli-0.7.1/packages/tui/src/tools/edit.ts +56 -0
  103. minima_cli-0.7.1/packages/tui/src/tools/glob.ts +37 -0
  104. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/grep.ts +11 -5
  105. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/index.ts +1 -1
  106. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/ls.ts +12 -6
  107. minima_cli-0.7.1/packages/tui/src/tools/read.ts +40 -0
  108. minima_cli-0.7.1/packages/tui/src/tools/task.ts +289 -0
  109. minima_cli-0.7.1/packages/tui/src/tools/todowrite.ts +65 -0
  110. minima_cli-0.7.1/packages/tui/src/tools/types.ts +9 -0
  111. minima_cli-0.7.1/packages/tui/src/tools/write.ts +37 -0
  112. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/app.tsx +409 -113
  113. minima_cli-0.7.1/packages/tui/src/tui/child_tree.tsx +62 -0
  114. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/config_store.ts +1 -1
  115. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/context.ts +1 -1
  116. minima_cli-0.7.1/packages/tui/src/tui/layout.ts +164 -0
  117. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/messages.tsx +7 -42
  118. minima_cli-0.7.1/packages/tui/src/tui/model-picker.tsx +106 -0
  119. minima_cli-0.7.1/packages/tui/src/tui/routing-warnings.ts +31 -0
  120. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/status.tsx +31 -1
  121. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/text-input.tsx +8 -2
  122. minima_cli-0.7.1/packages/tui/src/version.ts +9 -0
  123. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/agent.test.ts +11 -12
  124. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/ai.test.ts +4 -10
  125. minima_cli-0.7.1/packages/tui/tests/anthropic.test.ts +197 -0
  126. minima_cli-0.7.1/packages/tui/tests/budget.test.ts +262 -0
  127. minima_cli-0.7.1/packages/tui/tests/candidate-filter.test.ts +129 -0
  128. minima_cli-0.7.1/packages/tui/tests/catalog.test.ts +135 -0
  129. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/client.test.ts +58 -14
  130. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/config_store.test.ts +6 -6
  131. minima_cli-0.7.1/packages/tui/tests/db.test.ts +367 -0
  132. minima_cli-0.7.1/packages/tui/tests/effort.test.ts +157 -0
  133. minima_cli-0.7.1/packages/tui/tests/error-ux.test.ts +74 -0
  134. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/google.test.ts +77 -39
  135. minima_cli-0.7.1/packages/tui/tests/isolation.test.ts +155 -0
  136. minima_cli-0.7.1/packages/tui/tests/judge.test.ts +145 -0
  137. minima_cli-0.7.1/packages/tui/tests/ladder.test.ts +207 -0
  138. minima_cli-0.7.1/packages/tui/tests/layout.test.ts +150 -0
  139. minima_cli-0.7.1/packages/tui/tests/memory.test.ts +158 -0
  140. minima_cli-0.7.1/packages/tui/tests/minima.test.ts +363 -0
  141. minima_cli-0.7.1/packages/tui/tests/minima_memory.test.ts +209 -0
  142. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/openai_compat.test.ts +10 -13
  143. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/run_modes.test.ts +14 -5
  144. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/session.test.ts +1 -1
  145. minima_cli-0.7.1/packages/tui/tests/spawn.test.ts +351 -0
  146. minima_cli-0.7.1/packages/tui/tests/task.test.ts +273 -0
  147. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/thinking.test.ts +15 -7
  148. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/tools.test.ts +8 -1
  149. {minima_cli-0.5.0 → minima_cli-0.7.1}/pyproject.toml +8 -14
  150. minima_cli-0.7.1/scripts/eval/classify_dataset.json +46 -0
  151. minima_cli-0.7.1/scripts/eval/eval_classify.py +116 -0
  152. {minima_cli-0.5.0 → minima_cli-0.7.1}/scripts/test-routing.sh +3 -3
  153. {minima_cli-0.5.0 → minima_cli-0.7.1}/scripts/test-routing.ts +1 -1
  154. minima_cli-0.7.1/src/minima/api/auth.py +69 -0
  155. minima_cli-0.7.1/src/minima/api/routers/capabilities.py +42 -0
  156. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/feedback.py +16 -4
  157. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/strategies.py +11 -3
  158. minima_cli-0.7.1/src/minima/catalog/data/capability_priors.json +330 -0
  159. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/config.py +6 -1
  160. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/llm/base.py +6 -0
  161. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/llm/gemini.py +6 -0
  162. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/main.py +2 -0
  163. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/metrics/calibration.py +5 -0
  164. minima_cli-0.7.1/src/minima/recommender/classify.py +580 -0
  165. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/decisionlog.py +4 -1
  166. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/engine.py +130 -50
  167. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/escalation.py +17 -0
  168. minima_cli-0.7.1/src/minima/schemas/capabilities.py +15 -0
  169. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/feedback.py +9 -0
  170. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/recommend.py +31 -0
  171. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/strategies.py +1 -0
  172. minima_cli-0.7.1/src/minima/version.py +9 -0
  173. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/conftest.py +28 -0
  174. minima_cli-0.7.1/tests/eval/prompt_length_benchmark.py +296 -0
  175. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/factories.py +2 -0
  176. minima_cli-0.7.1/tests/integration/test_auth.py +58 -0
  177. minima_cli-0.7.1/tests/integration/test_escalation_reasoner.py +147 -0
  178. minima_cli-0.7.1/tests/integration/test_feedback_loop.py +166 -0
  179. minima_cli-0.7.1/tests/integration/test_recommend_api.py +127 -0
  180. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/integration/test_strategies_api.py +21 -0
  181. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_escalation_fixes.py +13 -9
  182. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_full_surface_live.py +2 -0
  183. minima_cli-0.7.1/tests/unit/test_capabilities.py +55 -0
  184. minima_cli-0.7.1/tests/unit/test_classify_benchmark.py +247 -0
  185. minima_cli-0.7.1/tests/unit/test_classify_keys.py +131 -0
  186. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_decisionlog.py +21 -0
  187. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_neighbor_classify.py +14 -1
  188. minima_cli-0.7.1/tests/unit/test_prompt_length_benchmark.py +43 -0
  189. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_reasoner.py +27 -0
  190. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_records_catalog.py +27 -0
  191. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_store_backends.py +28 -0
  192. {minima_cli-0.5.0 → minima_cli-0.7.1}/uv.lock +3 -205
  193. minima_cli-0.5.0/AGENTS.md +0 -90
  194. minima_cli-0.5.0/agent/task_set.py +0 -8
  195. minima_cli-0.5.0/docs/harness.md +0 -223
  196. minima_cli-0.5.0/docs-site/astro.config.mjs +0 -44
  197. minima_cli-0.5.0/docs-site/package-lock.json +0 -7460
  198. minima_cli-0.5.0/docs-site/package.json +0 -19
  199. minima_cli-0.5.0/docs-site/public/favicon.svg +0 -5
  200. minima_cli-0.5.0/docs-site/src/assets/logo.svg +0 -6
  201. minima_cli-0.5.0/docs-site/src/content/config.ts +0 -7
  202. minima_cli-0.5.0/docs-site/src/content/docs/getting-started.mdx +0 -72
  203. minima_cli-0.5.0/docs-site/src/styles/custom.css +0 -100
  204. minima_cli-0.5.0/docs-site/tsconfig.json +0 -6
  205. minima_cli-0.5.0/examples/harness_warmup.py +0 -333
  206. minima_cli-0.5.0/packages/tui/src/minima/judge.ts +0 -110
  207. minima_cli-0.5.0/packages/tui/src/minima/runtime.ts +0 -273
  208. minima_cli-0.5.0/packages/tui/src/tools/edit.ts +0 -55
  209. minima_cli-0.5.0/packages/tui/src/tools/glob.ts +0 -37
  210. minima_cli-0.5.0/packages/tui/src/tools/read.ts +0 -39
  211. minima_cli-0.5.0/packages/tui/src/tools/todowrite.ts +0 -67
  212. minima_cli-0.5.0/packages/tui/src/tools/write.ts +0 -34
  213. minima_cli-0.5.0/packages/tui/src/tui/model-picker.tsx +0 -66
  214. minima_cli-0.5.0/packages/tui/tests/anthropic.test.ts +0 -121
  215. minima_cli-0.5.0/packages/tui/tests/minima.test.ts +0 -172
  216. minima_cli-0.5.0/src/minima/api/auth.py +0 -39
  217. minima_cli-0.5.0/src/minima/catalog/data/capability_priors.json +0 -210
  218. minima_cli-0.5.0/src/minima/recommender/classify.py +0 -165
  219. minima_cli-0.5.0/src/minima/version.py +0 -3
  220. minima_cli-0.5.0/src/minima_harness/LICENSE_PI +0 -32
  221. minima_cli-0.5.0/src/minima_harness/__init__.py +0 -16
  222. minima_cli-0.5.0/src/minima_harness/agent/__init__.py +0 -72
  223. minima_cli-0.5.0/src/minima_harness/agent/agent.py +0 -276
  224. minima_cli-0.5.0/src/minima_harness/agent/events.py +0 -124
  225. minima_cli-0.5.0/src/minima_harness/agent/loop.py +0 -311
  226. minima_cli-0.5.0/src/minima_harness/agent/state.py +0 -79
  227. minima_cli-0.5.0/src/minima_harness/agent/tools.py +0 -97
  228. minima_cli-0.5.0/src/minima_harness/ai/__init__.py +0 -66
  229. minima_cli-0.5.0/src/minima_harness/ai/compat.py +0 -71
  230. minima_cli-0.5.0/src/minima_harness/ai/errors.py +0 -96
  231. minima_cli-0.5.0/src/minima_harness/ai/events.py +0 -117
  232. minima_cli-0.5.0/src/minima_harness/ai/openrouter_catalog.py +0 -153
  233. minima_cli-0.5.0/src/minima_harness/ai/provider_catalog.py +0 -299
  234. minima_cli-0.5.0/src/minima_harness/ai/provider_quirks.py +0 -37
  235. minima_cli-0.5.0/src/minima_harness/ai/providers/__init__.py +0 -75
  236. minima_cli-0.5.0/src/minima_harness/ai/providers/_common.py +0 -48
  237. minima_cli-0.5.0/src/minima_harness/ai/providers/anthropic.py +0 -290
  238. minima_cli-0.5.0/src/minima_harness/ai/providers/base.py +0 -65
  239. minima_cli-0.5.0/src/minima_harness/ai/providers/faux.py +0 -173
  240. minima_cli-0.5.0/src/minima_harness/ai/providers/google.py +0 -221
  241. minima_cli-0.5.0/src/minima_harness/ai/providers/openai_compat.py +0 -278
  242. minima_cli-0.5.0/src/minima_harness/ai/registry.py +0 -184
  243. minima_cli-0.5.0/src/minima_harness/ai/stream.py +0 -82
  244. minima_cli-0.5.0/src/minima_harness/ai/tools.py +0 -51
  245. minima_cli-0.5.0/src/minima_harness/ai/types.py +0 -204
  246. minima_cli-0.5.0/src/minima_harness/ai/usage.py +0 -41
  247. minima_cli-0.5.0/src/minima_harness/minima/__init__.py +0 -40
  248. minima_cli-0.5.0/src/minima_harness/minima/cache.py +0 -102
  249. minima_cli-0.5.0/src/minima_harness/minima/config.py +0 -86
  250. minima_cli-0.5.0/src/minima_harness/minima/goals.py +0 -226
  251. minima_cli-0.5.0/src/minima_harness/minima/judge.py +0 -144
  252. minima_cli-0.5.0/src/minima_harness/minima/mapping.py +0 -147
  253. minima_cli-0.5.0/src/minima_harness/minima/meter.py +0 -143
  254. minima_cli-0.5.0/src/minima_harness/minima/router.py +0 -220
  255. minima_cli-0.5.0/src/minima_harness/minima/runtime.py +0 -544
  256. minima_cli-0.5.0/src/minima_harness/minima/signals.py +0 -195
  257. minima_cli-0.5.0/src/minima_harness/session/__init__.py +0 -14
  258. minima_cli-0.5.0/src/minima_harness/session/format.py +0 -35
  259. minima_cli-0.5.0/src/minima_harness/session/store.py +0 -236
  260. minima_cli-0.5.0/src/minima_harness/tasks/__init__.py +0 -17
  261. minima_cli-0.5.0/src/minima_harness/tasks/task_set.py +0 -78
  262. minima_cli-0.5.0/src/minima_harness/tools/__init__.py +0 -7
  263. minima_cli-0.5.0/src/minima_harness/tools/_io.py +0 -34
  264. minima_cli-0.5.0/src/minima_harness/tools/bash.py +0 -70
  265. minima_cli-0.5.0/src/minima_harness/tools/builtin.py +0 -23
  266. minima_cli-0.5.0/src/minima_harness/tools/edit.py +0 -50
  267. minima_cli-0.5.0/src/minima_harness/tools/find.py +0 -38
  268. minima_cli-0.5.0/src/minima_harness/tools/grep.py +0 -73
  269. minima_cli-0.5.0/src/minima_harness/tools/ls.py +0 -35
  270. minima_cli-0.5.0/src/minima_harness/tools/read.py +0 -38
  271. minima_cli-0.5.0/src/minima_harness/tools/tasks.py +0 -75
  272. minima_cli-0.5.0/src/minima_harness/tools/write.py +0 -36
  273. minima_cli-0.5.0/src/minima_harness/tui/__init__.py +0 -3
  274. minima_cli-0.5.0/src/minima_harness/tui/analytics.py +0 -111
  275. minima_cli-0.5.0/src/minima_harness/tui/app.py +0 -1943
  276. minima_cli-0.5.0/src/minima_harness/tui/bridge.py +0 -103
  277. minima_cli-0.5.0/src/minima_harness/tui/cli.py +0 -227
  278. minima_cli-0.5.0/src/minima_harness/tui/clipboard.py +0 -60
  279. minima_cli-0.5.0/src/minima_harness/tui/commands.py +0 -49
  280. minima_cli-0.5.0/src/minima_harness/tui/compaction.py +0 -17
  281. minima_cli-0.5.0/src/minima_harness/tui/config_cli.py +0 -141
  282. minima_cli-0.5.0/src/minima_harness/tui/config_store.py +0 -237
  283. minima_cli-0.5.0/src/minima_harness/tui/context.py +0 -93
  284. minima_cli-0.5.0/src/minima_harness/tui/customize.py +0 -95
  285. minima_cli-0.5.0/src/minima_harness/tui/diff.py +0 -53
  286. minima_cli-0.5.0/src/minima_harness/tui/editor.py +0 -43
  287. minima_cli-0.5.0/src/minima_harness/tui/extensions.py +0 -84
  288. minima_cli-0.5.0/src/minima_harness/tui/extra_models.py +0 -52
  289. minima_cli-0.5.0/src/minima_harness/tui/history.py +0 -71
  290. minima_cli-0.5.0/src/minima_harness/tui/mubit.py +0 -295
  291. minima_cli-0.5.0/src/minima_harness/tui/overlays.py +0 -593
  292. minima_cli-0.5.0/src/minima_harness/tui/packages.py +0 -59
  293. minima_cli-0.5.0/src/minima_harness/tui/run_modes.py +0 -66
  294. minima_cli-0.5.0/src/minima_harness/tui/theme.py +0 -77
  295. minima_cli-0.5.0/src/minima_harness/tui/welcome.py +0 -83
  296. minima_cli-0.5.0/src/minima_harness/tui/widgets/__init__.py +0 -3
  297. minima_cli-0.5.0/src/minima_harness/tui/widgets/banner.py +0 -38
  298. minima_cli-0.5.0/src/minima_harness/tui/widgets/editor.py +0 -84
  299. minima_cli-0.5.0/src/minima_harness/tui/widgets/footer.py +0 -73
  300. minima_cli-0.5.0/src/minima_harness/tui/widgets/messages.py +0 -151
  301. minima_cli-0.5.0/src/minima_harness/tui/widgets/status.py +0 -57
  302. minima_cli-0.5.0/tests/harness/__init__.py +0 -0
  303. minima_cli-0.5.0/tests/harness/session/__init__.py +0 -0
  304. minima_cli-0.5.0/tests/harness/session/test_format.py +0 -23
  305. minima_cli-0.5.0/tests/harness/session/test_manager.py +0 -85
  306. minima_cli-0.5.0/tests/harness/session/test_store.py +0 -109
  307. minima_cli-0.5.0/tests/harness/test_agent_loop.py +0 -300
  308. minima_cli-0.5.0/tests/harness/test_anthropic_mapping.py +0 -310
  309. minima_cli-0.5.0/tests/harness/test_auth_reroute.py +0 -408
  310. minima_cli-0.5.0/tests/harness/test_cache.py +0 -65
  311. minima_cli-0.5.0/tests/harness/test_catalog_overlay.py +0 -104
  312. minima_cli-0.5.0/tests/harness/test_common_and_wire.py +0 -82
  313. minima_cli-0.5.0/tests/harness/test_compat.py +0 -74
  314. minima_cli-0.5.0/tests/harness/test_errors.py +0 -99
  315. minima_cli-0.5.0/tests/harness/test_goals.py +0 -153
  316. minima_cli-0.5.0/tests/harness/test_google_mapping.py +0 -182
  317. minima_cli-0.5.0/tests/harness/test_judge.py +0 -62
  318. minima_cli-0.5.0/tests/harness/test_live.py +0 -58
  319. minima_cli-0.5.0/tests/harness/test_mapping.py +0 -53
  320. minima_cli-0.5.0/tests/harness/test_minima_e2e.py +0 -150
  321. minima_cli-0.5.0/tests/harness/test_openai_compat_sse.py +0 -142
  322. minima_cli-0.5.0/tests/harness/test_openrouter_catalog.py +0 -134
  323. minima_cli-0.5.0/tests/harness/test_phase0_smoke.py +0 -162
  324. minima_cli-0.5.0/tests/harness/test_phase_a.py +0 -272
  325. minima_cli-0.5.0/tests/harness/test_phase_b.py +0 -119
  326. minima_cli-0.5.0/tests/harness/test_phase_c.py +0 -102
  327. minima_cli-0.5.0/tests/harness/test_provider_catalog.py +0 -102
  328. minima_cli-0.5.0/tests/harness/test_provider_quirks.py +0 -14
  329. minima_cli-0.5.0/tests/harness/test_provider_registration.py +0 -33
  330. minima_cli-0.5.0/tests/harness/test_provider_wiring.py +0 -166
  331. minima_cli-0.5.0/tests/harness/test_runtime.py +0 -491
  332. minima_cli-0.5.0/tests/harness/test_signals.py +0 -264
  333. minima_cli-0.5.0/tests/harness/tools/__init__.py +0 -0
  334. minima_cli-0.5.0/tests/harness/tools/test_agent_smoke.py +0 -21
  335. minima_cli-0.5.0/tests/harness/tools/test_bash.py +0 -41
  336. minima_cli-0.5.0/tests/harness/tools/test_builtin.py +0 -17
  337. minima_cli-0.5.0/tests/harness/tools/test_edit.py +0 -42
  338. minima_cli-0.5.0/tests/harness/tools/test_find.py +0 -22
  339. minima_cli-0.5.0/tests/harness/tools/test_grep.py +0 -30
  340. minima_cli-0.5.0/tests/harness/tools/test_io.py +0 -38
  341. minima_cli-0.5.0/tests/harness/tools/test_ls.py +0 -26
  342. minima_cli-0.5.0/tests/harness/tools/test_read.py +0 -34
  343. minima_cli-0.5.0/tests/harness/tools/test_write.py +0 -21
  344. minima_cli-0.5.0/tests/harness/tui/__init__.py +0 -0
  345. minima_cli-0.5.0/tests/harness/tui/test_analytics.py +0 -48
  346. minima_cli-0.5.0/tests/harness/tui/test_app_pilot.py +0 -70
  347. minima_cli-0.5.0/tests/harness/tui/test_bridge.py +0 -64
  348. minima_cli-0.5.0/tests/harness/tui/test_clipboard.py +0 -80
  349. minima_cli-0.5.0/tests/harness/tui/test_command_popup.py +0 -46
  350. minima_cli-0.5.0/tests/harness/tui/test_commands.py +0 -36
  351. minima_cli-0.5.0/tests/harness/tui/test_config.py +0 -279
  352. minima_cli-0.5.0/tests/harness/tui/test_context.py +0 -42
  353. minima_cli-0.5.0/tests/harness/tui/test_customize.py +0 -31
  354. minima_cli-0.5.0/tests/harness/tui/test_decision_card.py +0 -231
  355. minima_cli-0.5.0/tests/harness/tui/test_diff.py +0 -45
  356. minima_cli-0.5.0/tests/harness/tui/test_editor.py +0 -39
  357. minima_cli-0.5.0/tests/harness/tui/test_editor_widget.py +0 -53
  358. minima_cli-0.5.0/tests/harness/tui/test_export.py +0 -37
  359. minima_cli-0.5.0/tests/harness/tui/test_extensions.py +0 -76
  360. minima_cli-0.5.0/tests/harness/tui/test_goals_tui.py +0 -183
  361. minima_cli-0.5.0/tests/harness/tui/test_history_sessions.py +0 -151
  362. minima_cli-0.5.0/tests/harness/tui/test_messages.py +0 -64
  363. minima_cli-0.5.0/tests/harness/tui/test_mouse_copy.py +0 -101
  364. minima_cli-0.5.0/tests/harness/tui/test_mubit.py +0 -67
  365. minima_cli-0.5.0/tests/harness/tui/test_optimize.py +0 -118
  366. minima_cli-0.5.0/tests/harness/tui/test_overlays.py +0 -106
  367. minima_cli-0.5.0/tests/harness/tui/test_p2.py +0 -61
  368. minima_cli-0.5.0/tests/harness/tui/test_p3.py +0 -65
  369. minima_cli-0.5.0/tests/harness/tui/test_p5.py +0 -89
  370. minima_cli-0.5.0/tests/harness/tui/test_permissions.py +0 -142
  371. minima_cli-0.5.0/tests/harness/tui/test_predictability.py +0 -77
  372. minima_cli-0.5.0/tests/harness/tui/test_prompt_layers.py +0 -106
  373. minima_cli-0.5.0/tests/harness/tui/test_queue.py +0 -81
  374. minima_cli-0.5.0/tests/harness/tui/test_run_modes.py +0 -41
  375. minima_cli-0.5.0/tests/harness/tui/test_status.py +0 -24
  376. minima_cli-0.5.0/tests/harness/tui/test_status_bar.py +0 -45
  377. minima_cli-0.5.0/tests/harness/tui/test_theme.py +0 -21
  378. minima_cli-0.5.0/tests/harness/tui/test_thoughts.py +0 -70
  379. minima_cli-0.5.0/tests/harness/tui/test_tool_render.py +0 -65
  380. minima_cli-0.5.0/tests/harness/tui/test_ux.py +0 -228
  381. minima_cli-0.5.0/tests/harness/tui/test_welcome.py +0 -113
  382. minima_cli-0.5.0/tests/harness/tui/test_widgets.py +0 -126
  383. minima_cli-0.5.0/tests/integration/test_escalation_reasoner.py +0 -71
  384. minima_cli-0.5.0/tests/integration/test_feedback_loop.py +0 -81
  385. minima_cli-0.5.0/tests/integration/test_recommend_api.py +0 -55
  386. minima_cli-0.5.0/tests/unit/test_classify_keys.py +0 -53
  387. {minima_cli-0.5.0 → minima_cli-0.7.1}/.dockerignore +0 -0
  388. {minima_cli-0.5.0 → minima_cli-0.7.1}/.env.example +0 -0
  389. {minima_cli-0.5.0 → minima_cli-0.7.1}/.github/workflows/prod.yml +0 -0
  390. {minima_cli-0.5.0 → minima_cli-0.7.1}/.github/workflows/release-cli.yml +0 -0
  391. {minima_cli-0.5.0 → minima_cli-0.7.1}/.github/workflows/staging.yml +0 -0
  392. {minima_cli-0.5.0 → minima_cli-0.7.1}/.gitignore +0 -0
  393. {minima_cli-0.5.0 → minima_cli-0.7.1}/Dockerfile +0 -0
  394. {minima_cli-0.5.0 → minima_cli-0.7.1}/LICENSE +0 -0
  395. {minima_cli-0.5.0 → minima_cli-0.7.1}/client_sdk/minima_client/__init__.py +0 -0
  396. {minima_cli-0.5.0 → minima_cli-0.7.1}/client_sdk/minima_client/autocapture.py +0 -0
  397. {minima_cli-0.5.0 → minima_cli-0.7.1}/client_sdk/minima_client/client.py +0 -0
  398. {minima_cli-0.5.0 → minima_cli-0.7.1}/client_sdk/minima_client/errors.py +0 -0
  399. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/README.md +0 -0
  400. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/client-sdk.md +0 -0
  401. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/concepts.md +0 -0
  402. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/examples.md +0 -0
  403. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/getting-started.md +0 -0
  404. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/goals-feature-plan.md +0 -0
  405. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/multi-tenancy.md +0 -0
  406. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/operations.md +0 -0
  407. {minima_cli-0.5.0 → minima_cli-0.7.1}/docs/seeding.md +0 -0
  408. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/01_quickstart.sh +0 -0
  409. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/02_recommend_and_feedback.py +0 -0
  410. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/03_constraints_and_tradeoff.py +0 -0
  411. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/04_workflow.py +0 -0
  412. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/05_autocapture.py +0 -0
  413. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/06_routed_llm_call.py +0 -0
  414. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/07_multitenant_admin.py +0 -0
  415. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_escalation.py +0 -0
  416. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_escalation_learn.py +0 -0
  417. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_gemini.py +0 -0
  418. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_retention.py +0 -0
  419. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_warmup.py +0 -0
  420. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/agent_warmup_vary.py +0 -0
  421. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/metrics_demo.py +0 -0
  422. {minima_cli-0.5.0 → minima_cli-0.7.1}/examples/smoke_test.py +0 -0
  423. {minima_cli-0.5.0 → minima_cli-0.7.1}/maybe.js +0 -0
  424. {minima_cli-0.5.0 → minima_cli-0.7.1}/maybe.ts +0 -0
  425. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/.gitignore +0 -0
  426. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/biome.json +0 -0
  427. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/scripts/build-all.ts +0 -0
  428. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/scripts/build.ts +0 -0
  429. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/scripts/install.sh +0 -0
  430. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/scripts/stub-devtools.ts +0 -0
  431. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/events.ts +0 -0
  432. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/agent/loop.ts +0 -0
  433. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/minima/errors.ts +0 -0
  434. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/session/index.ts +0 -0
  435. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/at_mentions.ts +0 -0
  436. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/schema.ts +0 -0
  437. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tools/web_fetch.ts +0 -0
  438. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/auth.ts +0 -0
  439. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/compact.ts +0 -0
  440. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/mouse-scroll.ts +0 -0
  441. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/permissions.ts +0 -0
  442. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/tui/projects.ts +0 -0
  443. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/src/types.d.ts +0 -0
  444. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tests/auth.test.ts +0 -0
  445. {minima_cli-0.5.0 → minima_cli-0.7.1}/packages/tui/tsconfig.json +0 -0
  446. {minima_cli-0.5.0 → minima_cli-0.7.1}/packaging/homebrew/README.md +0 -0
  447. {minima_cli-0.5.0 → minima_cli-0.7.1}/packaging/homebrew/render_formula.py +0 -0
  448. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_125009/recall_debug.jsonl +0 -0
  449. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_125009/strategies_run1.json +0 -0
  450. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_125009/strategies_run2.json +0 -0
  451. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_125009/strategies_run3.json +0 -0
  452. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_125009/tasks.jsonl +0 -0
  453. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/REPORT.md +0 -0
  454. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/recall_debug.jsonl +0 -0
  455. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/strategies_run1.json +0 -0
  456. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/strategies_run2.json +0 -0
  457. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/strategies_run3.json +0 -0
  458. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/strategies_run4.json +0 -0
  459. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/strategies_run5.json +0 -0
  460. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/summary.json +0 -0
  461. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_130252/tasks.jsonl +0 -0
  462. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_182838/recall_debug.jsonl +0 -0
  463. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_182838/strategies_run1.json +0 -0
  464. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_182838/strategies_run2.json +0 -0
  465. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_182838/tasks.jsonl +0 -0
  466. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/REPORT.md +0 -0
  467. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/memory_audit.json +0 -0
  468. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/recall_debug.jsonl +0 -0
  469. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/strategies_run1.json +0 -0
  470. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/strategies_run2.json +0 -0
  471. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/strategies_run3.json +0 -0
  472. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/strategies_run4.json +0 -0
  473. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/strategies_run5.json +0 -0
  474. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/summary.json +0 -0
  475. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260612_183343/tasks.jsonl +0 -0
  476. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/REPORT.md +0 -0
  477. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/memory_audit.json +0 -0
  478. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/recall_debug.jsonl +0 -0
  479. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/strategies_run1.json +0 -0
  480. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/strategies_run2.json +0 -0
  481. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/strategies_run3.json +0 -0
  482. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/strategies_run4.json +0 -0
  483. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/strategies_run5.json +0 -0
  484. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/summary.json +0 -0
  485. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260615_101732/tasks.jsonl +0 -0
  486. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260624_103307/memory_audit.json +0 -0
  487. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260624_103307/recall_debug.jsonl +0 -0
  488. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/20260624_103307/tasks.jsonl +0 -0
  489. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  490. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_133108/summary.json +0 -0
  491. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  492. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_134209/REPORT.md +0 -0
  493. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  494. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_134209/summary.json +0 -0
  495. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  496. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalation_20260612_201825/REPORT.md +0 -0
  497. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalation_20260612_201825/results.jsonl +0 -0
  498. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/escalation_20260612_201825/summary.json +0 -0
  499. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/_manifest.json +0 -0
  500. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/calibration.json +0 -0
  501. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/feedback.json +0 -0
  502. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/health.json +0 -0
  503. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/models.json +0 -0
  504. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/recommend.json +0 -0
  505. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/savings.json +0 -0
  506. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/strategies.json +0 -0
  507. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/playground_p1/workflow.json +0 -0
  508. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/retention_20260612_201828/REPORT.md +0 -0
  509. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/retention_20260612_201828/results.jsonl +0 -0
  510. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/retention_20260612_201828/summary.json +0 -0
  511. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  512. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/warmupvary_20260615_123818/summary.json +0 -0
  513. {minima_cli-0.5.0 → minima_cli-0.7.1}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  514. {minima_cli-0.5.0 → minima_cli-0.7.1}/scripts/test-routing-web.ts +0 -0
  515. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/__init__.py +0 -0
  516. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/__init__.py +0 -0
  517. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/errors.py +0 -0
  518. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/__init__.py +0 -0
  519. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/calibration.py +0 -0
  520. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/health.py +0 -0
  521. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/models.py +0 -0
  522. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/recommend.py +0 -0
  523. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/api/routers/savings.py +0 -0
  524. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/__init__.py +0 -0
  525. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/data/model_aliases.json +0 -0
  526. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/merge.py +0 -0
  527. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/refresh.py +0 -0
  528. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/sources/__init__.py +0 -0
  529. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/sources/litellm.py +0 -0
  530. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/sources/openrouter.py +0 -0
  531. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/catalog/store.py +0 -0
  532. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/deps.py +0 -0
  533. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/llm/__init__.py +0 -0
  534. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/llm/anthropic.py +0 -0
  535. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/llm/registry.py +0 -0
  536. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/logging.py +0 -0
  537. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/memory/__init__.py +0 -0
  538. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/memory/adapter.py +0 -0
  539. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/memory/keys.py +0 -0
  540. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/memory/records.py +0 -0
  541. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/memory/threadpool.py +0 -0
  542. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/metrics/__init__.py +0 -0
  543. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/metrics/report.py +0 -0
  544. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/metrics/savings.py +0 -0
  545. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/__init__.py +0 -0
  546. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/_pg_pool.py +0 -0
  547. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/_redis_client.py +0 -0
  548. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/aggregate.py +0 -0
  549. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/durablerefs.py +0 -0
  550. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/propensity.py +0 -0
  551. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/recstore.py +0 -0
  552. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/score.py +0 -0
  553. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/recommender/types.py +0 -0
  554. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/__init__.py +0 -0
  555. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/common.py +0 -0
  556. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/models_catalog.py +0 -0
  557. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/savings.py +0 -0
  558. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/schemas/workflow.py +0 -0
  559. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/__init__.py +0 -0
  560. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/items.py +0 -0
  561. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/llmrouterbench.py +0 -0
  562. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/routerbench.py +0 -0
  563. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/run_seed.py +0 -0
  564. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/seeding/synthetic.py +0 -0
  565. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/tenancy/__init__.py +0 -0
  566. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/tenancy/context.py +0 -0
  567. {minima_cli-0.5.0 → minima_cli-0.7.1}/src/minima/tenancy/passthrough.py +0 -0
  568. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/__init__.py +0 -0
  569. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/BENCHMARKS.md +0 -0
  570. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/CRITERIA.md +0 -0
  571. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/RESULTS.md +0 -0
  572. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/__init__.py +0 -0
  573. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/harness.py +0 -0
  574. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/llmrouterbench_config.py +0 -0
  575. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/test_llmrouterbench_savings.py +0 -0
  576. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/eval/test_routerbench_savings.py +0 -0
  577. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/integration/test_lesson_promotion.py +0 -0
  578. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/integration/test_measurement_api.py +0 -0
  579. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/integration/test_observed_cost_ranking.py +0 -0
  580. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/integration/test_workflow_models_health.py +0 -0
  581. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  582. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_mubit_roundtrip.py +0 -0
  583. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_phase3_live.py +0 -0
  584. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_reasoner_live.py +0 -0
  585. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/live/test_recall_params_live.py +0 -0
  586. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_aggregate.py +0 -0
  587. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_aggregate_decay.py +0 -0
  588. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_autocapture.py +0 -0
  589. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_calibration_fit.py +0 -0
  590. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_cluster.py +0 -0
  591. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_collapse_guard.py +0 -0
  592. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_cost_band.py +0 -0
  593. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_escalation.py +0 -0
  594. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_exploration.py +0 -0
  595. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_ipw.py +0 -0
  596. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_iterations.py +0 -0
  597. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_latency_quality.py +0 -0
  598. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_lever_cost.py +0 -0
  599. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_metrics.py +0 -0
  600. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_metrics_demo.py +0 -0
  601. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_recstore_sqlite.py +0 -0
  602. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_score.py +0 -0
  603. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_shadow_bandit.py +0 -0
  604. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_strategies.py +0 -0
  605. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_tenancy.py +0 -0
  606. {minima_cli-0.5.0 → minima_cli-0.7.1}/tests/unit/test_thompson.py +0 -0
@@ -0,0 +1,100 @@
1
+ name: Catalog — refresh vendored snapshot
2
+
3
+ # Keeps the vendored cold-start model catalog fresh so it stops drifting by hand.
4
+ #
5
+ # WHAT/WHY: src/minima/catalog/data/capability_priors.json is the cold-start
6
+ # fallback the server loads when the live cost feed (LiteLLM/OpenRouter) is
7
+ # unreachable — see src/minima/catalog/store.py (load_snapshot_cards) and the
8
+ # /v1/models router. It used to be hand-maintained and drifted stale (e.g.
9
+ # missing the gpt-5 family). This job pulls the *live* served catalog from
10
+ # api.minima.sh/v1/models — the source-of-truth that already merges curated
11
+ # capability priors with live cost — normalizes it (via jq) into the EXACT
12
+ # shape the loader reads, and opens a PR only when it actually changed.
13
+ #
14
+ # We deliberately DO NOT commit straight to main and DO NOT hand-edit the JSON:
15
+ # a reviewer sees the diff, and the automation (not a human) keeps it current.
16
+ on:
17
+ schedule:
18
+ - cron: "17 6 * * *" # daily (~every 24h); minute offset avoids the top-of-hour rush
19
+ workflow_dispatch: {}
20
+
21
+ concurrency:
22
+ group: catalog-snapshot
23
+ cancel-in-progress: false
24
+
25
+ # Least privilege: only what's needed to push a chore branch and open a PR.
26
+ permissions:
27
+ contents: write
28
+ pull-requests: write
29
+
30
+ env:
31
+ # Source-of-truth: the live served catalog. Override via repo/environment var
32
+ # CATALOG_SOURCE_URL if the prod host ever changes.
33
+ CATALOG_URL: ${{ vars.CATALOG_SOURCE_URL || 'https://api.minima.sh/v1/models' }}
34
+ SNAPSHOT_PATH: src/minima/catalog/data/capability_priors.json
35
+ BRANCH: chore/catalog-snapshot-auto
36
+
37
+ jobs:
38
+ refresh:
39
+ name: Fetch live catalog → PR if changed
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - name: Checkout
43
+ uses: actions/checkout@v5
44
+
45
+ - name: Fetch + normalize live catalog into the vendored snapshot shape
46
+ run: |
47
+ set -euo pipefail
48
+ # /v1/models returns {models:[ModelCard...], catalog_version, stale}.
49
+ # ModelCard is a superset of the snapshot object, so we project it back
50
+ # to the exact fields load_snapshot_cards() reads and drop the runtime
51
+ # metadata (cost_source/cost_fetched_at/cost_stale/capability_source),
52
+ # which the loader always re-stamps as "fallback-snapshot".
53
+ curl -fsSL --retry 3 --retry-delay 5 --max-time 60 "$CATALOG_URL" -o live.json
54
+
55
+ count="$(jq '.models | length' live.json)"
56
+ if [ "$count" -lt 5 ]; then
57
+ echo "::error::live catalog returned only $count models (<5); refusing to overwrite snapshot"
58
+ exit 1
59
+ fi
60
+
61
+ version="fallback-snapshot-$(date -u +%Y-%m)"
62
+ note="Cold-start fallback only. Auto-refreshed by .github/workflows/catalog-snapshot.yml from the live /v1/models catalog — do not hand-edit. Live cost is overlaid from LiteLLM/OpenRouter at runtime; capability_by_task_type are normalized [0,1] heuristic priors, corrected by accumulated memory. Prices are approximate USD per million tokens."
63
+
64
+ jq \
65
+ --arg version "$version" \
66
+ --arg note "$note" '{
67
+ version: $version,
68
+ note: $note,
69
+ models: (.models | sort_by(.model_id) | map({
70
+ model_id, provider, display_name,
71
+ input_cost_per_mtok, output_cost_per_mtok, cache_read_cost_per_mtok,
72
+ supports_prompt_caching, context_window, max_output_tokens,
73
+ capability_priors, capability_by_task_type
74
+ }))
75
+ }' live.json > "$SNAPSHOT_PATH.tmp"
76
+ mv "$SNAPSHOT_PATH.tmp" "$SNAPSHOT_PATH"
77
+ rm -f live.json
78
+ echo "Normalized $count models into $SNAPSHOT_PATH"
79
+
80
+ - name: Commit + open PR only if the snapshot changed
81
+ env:
82
+ GH_TOKEN: ${{ github.token }}
83
+ run: |
84
+ set -euo pipefail
85
+ if git diff --quiet -- "$SNAPSHOT_PATH"; then
86
+ echo "Snapshot already up to date; nothing to do."
87
+ exit 0
88
+ fi
89
+
90
+ git config user.name "github-actions[bot]"
91
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
92
+ git checkout -B "$BRANCH"
93
+ git add "$SNAPSHOT_PATH"
94
+ git commit -m "chore(catalog): refresh vendored model snapshot from live /v1/models"
95
+ git push -u origin "$BRANCH" --force-with-lease
96
+
97
+ gh pr create --base main --head "$BRANCH" \
98
+ --title "chore(catalog): refresh vendored model snapshot" \
99
+ --body "Automated refresh of \`$SNAPSHOT_PATH\` from the live catalog at \`$CATALOG_URL\` (normalized to the loader's shape). Opened by \`.github/workflows/catalog-snapshot.yml\`. Review the diff — this is the cold-start fallback the server serves when the live cost feed is unreachable." \
100
+ || echo "PR already open for $BRANCH; pushed update."
@@ -0,0 +1,69 @@
1
+ name: CI — PR checks
2
+
3
+ # Gate on every PR to main (and on push to main) with the exact local test
4
+ # conventions: server (ruff + offline pytest) and TUI (bun test + tsc). Two
5
+ # independent jobs so a red on one surfaces without masking the other. No
6
+ # deploy, no secrets — the suites are offline (`-m "not live and not eval"`).
7
+ # mypy runs after ruff/pytest: src/minima is now type-clean, so it gates too.
8
+ on:
9
+ pull_request:
10
+ branches: [main]
11
+ push:
12
+ branches: [main]
13
+
14
+ concurrency:
15
+ group: ci-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ env:
22
+ BUN_VERSION: "1.3.14"
23
+
24
+ jobs:
25
+ server:
26
+ name: Server — ruff + pytest + mypy
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - name: Checkout
30
+ uses: actions/checkout@v5
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v6
34
+
35
+ - name: Sync deps (dev extra)
36
+ run: uv sync --extra dev
37
+
38
+ - name: Ruff
39
+ run: uv run ruff check src client_sdk tests
40
+
41
+ - name: Pytest (offline)
42
+ run: uv run pytest -m "not live and not eval" -q
43
+
44
+ - name: Mypy
45
+ run: uv run mypy src/minima
46
+
47
+ tui:
48
+ name: TUI — bun test + tsc
49
+ runs-on: ubuntu-latest
50
+ defaults:
51
+ run:
52
+ working-directory: packages/tui
53
+ steps:
54
+ - name: Checkout
55
+ uses: actions/checkout@v5
56
+
57
+ - name: Set up Bun
58
+ uses: oven-sh/setup-bun@v2
59
+ with:
60
+ bun-version: ${{ env.BUN_VERSION }}
61
+
62
+ - name: Install deps
63
+ run: bun install --frozen-lockfile
64
+
65
+ - name: Test
66
+ run: bun test
67
+
68
+ - name: Typecheck
69
+ run: bun run check
@@ -0,0 +1,58 @@
1
+ # AGENTS.md
2
+
3
+ Guidance for both human and AI agents working in this repo.
4
+
5
+ ## What this repo is
6
+
7
+ - **`src/minima/`** — Minima: a recommend-only LLM cost-optimization service (FastAPI,
8
+ Python 3.11+). It does NOT proxy LLM calls. It tells you which model to run, you run
9
+ it, judge quality, and feed the outcome back via `POST /v1/feedback` so its Mubit
10
+ memory sharpens. See `docs/concepts.md` for the algorithm.
11
+ - **`client_sdk/minima_client/`** — bundled sync + async Python client. Ships inside the
12
+ same wheel.
13
+ - **`packages/tui/`** — the `minima` CLI/TUI (TypeScript/Bun, shipped via Homebrew:
14
+ `brew tap mubit-ai/minima`). It replaced the old Python harness (`src/minima_harness`,
15
+ removed in v0.7.0). See `packages/tui/README.md`.
16
+
17
+ ## The Minima loop (always respect this)
18
+
19
+ ```
20
+ recommend -> run the model yourself -> judge quality -> feedback
21
+ ```
22
+
23
+ Minima never runs the model. Any harness owns model dispatch + quality judging. Feedback
24
+ MUST include realized `input_tokens` / `output_tokens` / `actual_cost_usd` / `latency_ms`
25
+ so the cost basis can climb `estimate -> observed -> rescaled` (the biggest accuracy
26
+ lever). Outcome thresholds: `success >= 0.8`, `partial >= 0.4`, else `failure`.
27
+
28
+ ## Conventions
29
+
30
+ - `from __future__ import annotations` at the top of every module.
31
+ - Pydantic v2 `BaseModel` for serializable schemas; `@dataclass(slots=True)` for internal
32
+ types; `StrEnum` for enums; `Protocol` for seams (`Memory`, `Reasoner`, `Provider`).
33
+ - Async-first. Bridge sync SDKs (Mubit) off the event loop via `anyio`/threadpools.
34
+ - `structlog` via `get_logger("minima.<sub>")`.
35
+ - ruff `line-length=100`, mypy `py311`. Never break the hot path: bookkeeping failures are
36
+ logged-and-swallowed (`except Exception: # noqa: BLE001`).
37
+ - NO comments unless asked. Match existing style.
38
+
39
+ ## Commands
40
+
41
+ ```bash
42
+ uv sync --extra dev # install (uv is the package manager)
43
+ uv run ruff check . && uv run ruff format . # lint + format
44
+ uv run mypy src/minima # typecheck
45
+ uv run pytest # unit + integration (hermetic, offline)
46
+ uv run pytest -m live # needs a running Mubit (make run-mubit)
47
+ make run # local Minima on :8080
48
+ ```
49
+
50
+ Offline tests MUST stay hermetic: the `conftest.py` autouse fixture neutralizes `.env`.
51
+ Use `tests/factories.py:FakeMemory` + `create_app(...)` + `TestClient` for in-process
52
+ tests without Mubit.
53
+
54
+ ## Agent harness
55
+
56
+ The Python harness (`src/minima_harness`) was removed in v0.7.0. Its successor is the
57
+ TypeScript harness + TUI in `packages/tui` (the shipped `minima` CLI) — see
58
+ `packages/tui/README.md` for architecture, commands, and hard rules.
@@ -4,6 +4,97 @@ All notable changes to Minima are documented here. The format follows
4
4
  [Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
5
5
  [Semantic Versioning](https://semver.org/).
6
6
 
7
+ ## [0.7.1] - 2026-07-05
8
+
9
+ ### Changed (API behavior — note for integrators)
10
+ - **`max_cost_per_call` is now a true hard filter.** When no model fits the budget,
11
+ `POST /v1/recommend` returns **422** (`"no model within max_cost_per_call budget"`)
12
+ instead of 200 with the cheapest over-budget model plus a `no_model_within_cost_budget`
13
+ warning. This matches the documented "hard filter" contract and the existing
14
+ no-candidates behavior. Callers who want "cheapest possible regardless of ceiling"
15
+ should use the cost-quality slider, not `max_cost_per_call`.
16
+ - **Auth rejects malformed bearer tokens.** A bearer token that is not in the Mubit key
17
+ format (`mbt_…`) now returns **401** before any work, instead of being accepted and
18
+ served from priors. A missing bearer with a server-configured `MUBIT_API_KEY` fallback
19
+ is unaffected.
20
+
21
+ ### Fixed
22
+ - **Cold-start catalog prices were stale.** The vendored fallback snapshot
23
+ (`capability_priors.json`) is refreshed from the live catalog (e.g. `claude-opus-4-8`
24
+ `15/75` → `5/25`), and a scheduled workflow now keeps it current so it stops drifting
25
+ by hand. (The auto-refresh updates prices for the curated model list; it does not add
26
+ new models — expanded provider coverage such as the gpt-5 family remains a separate
27
+ curation.)
28
+ - **Server version string can no longer drift.** `minima.__version__` (reported by
29
+ `/v1/health` and `/v1/capabilities`) now derives from installed package metadata instead
30
+ of a hardcoded constant that had silently lagged across releases.
31
+ - **Feedback reconciliation types the quality value honestly** as `float | None` — unjudged
32
+ rows keep `NULL`, no fabricated default (preserves the M-J2 fix).
33
+
34
+ ### Internal
35
+ - **PR CI added** — every PR now runs server (`ruff` + `pytest` + `mypy`) and TUI
36
+ (`bun test` + `tsc`) checks; the recommender is mypy-clean.
37
+
38
+ ## [0.7.0] - 2026-07-05
39
+
40
+ ### Added
41
+ - **`GET /v1/capabilities`** — server feature handshake (api version, honored constraint
42
+ fields, feature flags) so clients can gate enforce-mode features on what the server
43
+ actually supports instead of guessing. (#54)
44
+ - **Sub-agent tree visualization** — a live `▸ step [status] $cost` panel (`/tree`) fed by
45
+ tagged child events during multi-agent runs. (#55)
46
+ - **Git worktree isolation for parallel sub-agents** — `isolation: "workdir"` delegations run
47
+ in a temporary `git worktree` (with a dirty-tree warning and automatic cleanup), so parallel
48
+ children editing the same files can't clobber each other. (#55)
49
+ - **Delegation ops-rules + BLOCKED convention** — sub-agents get explicit operational rules,
50
+ boundary refusals surface as `BLOCKED` → `partial` outcome so the parent can tell, and the
51
+ task tool carries anti-retry guidance (no more re-running an identical failed DAG). (#59)
52
+
53
+ ### Fixed
54
+ - **Every Claude call timed out in the harness** — the Anthropic SDK was handed a timeout in
55
+ seconds where it expects milliseconds (a 30–60 ms budget), so every Claude stream/complete
56
+ call died with "Request timed out" and fed quality-0 failures into routing. (#56)
57
+ - **Quality-score fabrication in the feedback loop (M-J2)** — unjudged successes no longer
58
+ default to quality 0.9 in the server decision log; the harness now sends a `judged` flag and
59
+ unjudged rows reconcile with `quality = NULL`, so calibration and savings metrics stop
60
+ trusting values that were never measured. (#54)
61
+ - **Judge hardening** — empty-output guard (scores 0 without an API call), head+tail
62
+ truncation so tail requirements survive long outputs, `<response>` delimiters + scoped-trust
63
+ system prompt against response-embedded injection, and a `parseScore` fix for
64
+ "X out of 10" phrasing. (#57)
65
+ - **Gemini reasoner starvation** — advisory JSON calls (classify/rank) no longer burn their
66
+ entire token budget on thinking before emitting JSON; RANK_SYSTEM invariants hardened. (#58)
67
+
68
+ ### Notes
69
+ - `minima-cli` on PyPI resumes at 0.7.0: the project version had lagged at 0.5.0, so the
70
+ 0.6.0 release build was silently skipped by `--skip-existing` and 0.6.0 was never published.
71
+
72
+ ## [0.6.0] - 2026-07-02
73
+
74
+ Agent-core release (milestones M-A…M-I): cost-aware sub-agent orchestration — `task` tool
75
+ with sequential and parallel DAG fan-out under a semaphore, per-child routing, budgets and
76
+ timeouts; DB-backed `BudgetLedger` with graduated enforcement; SQLite persistence spine
77
+ (runs/events/decisions + rehydration); recovery ladder walking server-supplied rungs on
78
+ failure; effort routing Phase A + fleet metrics; feedback-loop poisoning fixes; feature-vector
79
+ classifier with strongest-signal scoring. *(Never published to PyPI — see the 0.7.0 note.)*
80
+
81
+ ## [0.5.2] - 2026-07-02
82
+
83
+ Fixed TUI viewport-overflow rendering corruption; docs rebrand (Manrope, "minima by Mubit"
84
+ nav logo, new favicon).
85
+
86
+ ## [0.5.1] - 2026-07-01
87
+
88
+ Mubit memory in the TS harness (recall-before-route + outcome write-back with stable session
89
+ ids); benign routing diagnostics no longer render as errors; live model catalog; docs migrated
90
+ to Vocs with a Homebrew install guide.
91
+
92
+ ## [0.5.0] - 2026-07-01
93
+
94
+ The TypeScript/Bun TUI becomes the shipped CLI: one-click `minima auth` (browser login,
95
+ per-repo project mapping, workspace provisioning), the Homebrew tap ships the compiled binary
96
+ instead of a Python venv formula, and a comprehensive routing/tool test suite lands.
97
+
7
98
  ## [0.4.10] - 2026-06-26
8
99
 
9
100
  ### Changed
@@ -1,7 +1,7 @@
1
- .PHONY: install run test lint fmt live eval seed refresh-catalog harness-demo harness-live harness-test harness tui-install tui-test tui-check tui-build tui tui-dev
1
+ .PHONY: install run test lint fmt live eval seed refresh-catalog tui-install tui-test tui-check tui-build tui tui-dev
2
2
 
3
3
  install:
4
- uv sync --extra dev # dev pulls server + harness + tui for the full test suite
4
+ uv sync --extra dev # dev pulls server + reasoner extras for the full test suite
5
5
 
6
6
  run:
7
7
  uv run --extra server uvicorn minima.main:app --reload --host $${MINIMA_HOST:-0.0.0.0} --port $${MINIMA_PORT:-8080}
@@ -26,20 +26,6 @@ eval:
26
26
  seed:
27
27
  uv run minima-seed --limit $${LIMIT:-2000} --lane $${LANE:-minima:default}
28
28
 
29
- # --- minima_harness convenience targets (creds live in gitignored .env.harness) ---
30
-
31
- harness-demo:
32
- uv run python examples/harness_warmup.py
33
-
34
- harness-live:
35
- uv run --env-file .env.harness python examples/harness_warmup.py --live --rounds $${ROUNDS:-1}
36
-
37
- harness-test:
38
- uv run --env-file .env.harness pytest tests/harness -m live -v
39
-
40
- harness:
41
- uv run --extra harness --extra tui --env-file .env.harness minima-harness $(ARGS)
42
-
43
29
  # --- TS TUI (packages/tui) — run from the repo root so .env.harness auto-loads --------
44
30
 
45
31
  TUI := packages/tui
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minima-cli
3
- Version: 0.5.0
3
+ Version: 0.7.1
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
@@ -30,7 +30,6 @@ Provides-Extra: dev
30
30
  Requires-Dist: anthropic>=0.40; extra == 'dev'
31
31
  Requires-Dist: fastapi>=0.115; extra == 'dev'
32
32
  Requires-Dist: google-genai>=0.3; extra == 'dev'
33
- Requires-Dist: keyring>=24; extra == 'dev'
34
33
  Requires-Dist: mypy>=1.10; extra == 'dev'
35
34
  Requires-Dist: psycopg2-binary>=2.9; extra == 'dev'
36
35
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
@@ -38,11 +37,7 @@ Requires-Dist: pytest>=8.2; extra == 'dev'
38
37
  Requires-Dist: redis>=5.0; extra == 'dev'
39
38
  Requires-Dist: respx>=0.21; extra == 'dev'
40
39
  Requires-Dist: ruff>=0.5; extra == 'dev'
41
- Requires-Dist: textual>=3.0; extra == 'dev'
42
40
  Requires-Dist: uvicorn[standard]>=0.30; extra == 'dev'
43
- Provides-Extra: harness
44
- Requires-Dist: anthropic>=0.40; extra == 'harness'
45
- Requires-Dist: google-genai>=0.3; extra == 'harness'
46
41
  Provides-Extra: reasoner-anthropic
47
42
  Requires-Dist: anthropic>=0.40; extra == 'reasoner-anthropic'
48
43
  Provides-Extra: reasoner-gemini
@@ -55,9 +50,6 @@ Requires-Dist: fastapi>=0.115; extra == 'server'
55
50
  Requires-Dist: psycopg2-binary>=2.9; extra == 'server'
56
51
  Requires-Dist: redis>=5.0; extra == 'server'
57
52
  Requires-Dist: uvicorn[standard]>=0.30; extra == 'server'
58
- Provides-Extra: tui
59
- Requires-Dist: keyring>=24; extra == 'tui'
60
- Requires-Dist: textual>=3.0; extra == 'tui'
61
53
  Description-Content-Type: text/markdown
62
54
 
63
55
  # Minima
@@ -176,7 +168,6 @@ Sync + async clients and zero-code `autocapture`: **[Python Client SDK](docs/cli
176
168
  | [Multi-Tenancy](docs/multi-tenancy.md) | One deployment, many orgs, per-org Mubit instances. |
177
169
  | [Operations](docs/operations.md) | Deployment, health, degradation, monitoring, secrets. |
178
170
  | [Examples](docs/examples.md) | Guided tour of the runnable examples. |
179
- | [Agent Harness](docs/harness.md) | `minima_harness`: a Minima-routing port of PI's agent toolkit. |
180
171
 
181
172
  ## Examples
182
173
 
@@ -191,33 +182,21 @@ Runnable, progressively advanced — in **[`examples/`](examples/)**:
191
182
  | 5 | [`05_autocapture.py`](examples/05_autocapture.py) | Zero-code intake via `mubit.learn`. |
192
183
  | 6 | [`06_routed_llm_call.py`](examples/06_routed_llm_call.py) | Routing a real Claude call + feedback. |
193
184
  | 7 | [`07_multitenant_admin.py`](examples/07_multitenant_admin.py) | Provision an org, call as that tenant. |
194
- | 8 | [`harness_warmup.py`](examples/harness_warmup.py) | The `minima_harness` agent loop (demo mode needs no keys). |
195
185
 
196
- ## Agent harness
186
+ ## The `minima` CLI
197
187
 
198
- [`minima_harness/`](src/minima_harness) is a lean Python port of
199
- [`@earendil-works/pi`](https://github.com/earendil-works/pi)'s agent toolkit, made
200
- Minima-native: an `Agent` runtime with tool calling **plus** a `MinimaAgent` that routes
201
- every prompt through Minima and feeds the realized tokens/cost/quality back. It is the
202
- "run the model yourself" half of the Minima loop, packaged.
203
-
204
- ```python
205
- from minima_harness.minima import MinimaAgent, HarnessConfig
206
-
207
- agent = MinimaAgent(HarnessConfig.from_env()) # MINIMA_URL, candidates, judge policy
208
- await agent.prompt("Summarize this incident.", task_type="summarization", slider=3)
209
- # -> Minima picked the model, the agent ran it, judged quality, fed the outcome back
210
- ```
211
-
212
- Try it with no keys via the in-process demo:
188
+ The `minima` CLI/TUI a coding agent that routes every prompt through Minima and feeds
189
+ realized tokens/cost/quality back — is a TypeScript/Bun binary that lives in
190
+ [`packages/tui/`](packages/tui/) and installs via Homebrew:
213
191
 
214
192
  ```bash
215
- uv run python examples/harness_warmup.py # demo (in-process Minima + fake provider)
216
- uv run python examples/harness_warmup.py --live # real Minima + real providers
193
+ brew tap mubit-ai/minima
194
+ brew install minima
217
195
  ```
218
196
 
219
- Full architecture, the loop mapping, and extension guide:
220
- **[Agent Harness](docs/harness.md)**.
197
+ The PyPI package (`pip install minima-cli`) is **not** the CLI: it ships the Python
198
+ client SDK (`minima_client`) and the server + operator tooling (`minima-seed`,
199
+ `minima-calibration-report`). The old Python harness/TUI was removed in v0.7.0.
221
200
 
222
201
  ## Configuration
223
202
 
@@ -254,7 +233,7 @@ src/minima/
254
233
  tenancy/ runtime · registry · context · keys · secrets
255
234
  seeding/ routerbench · synthetic · run_seed (minima-seed CLI)
256
235
  schemas/ common · recommend · workflow · feedback · models_catalog · strategies · admin
257
- src/minima_harness/ ported pi-ai (ai/) + pi-agent-core (agent/) + Minima integration (minima/) — see docs/harness.md
236
+ packages/tui/ the `minima` CLI/TUI (TypeScript/Bun, ships via Homebrew)
258
237
  client_sdk/minima_client/ client (sync+async) · autocapture · errors
259
238
  docs/ full documentation examples/ runnable examples
260
239
  tests/ unit · integration (FakeMemory) · live (-m live) · eval (-m eval)
@@ -114,7 +114,6 @@ Sync + async clients and zero-code `autocapture`: **[Python Client SDK](docs/cli
114
114
  | [Multi-Tenancy](docs/multi-tenancy.md) | One deployment, many orgs, per-org Mubit instances. |
115
115
  | [Operations](docs/operations.md) | Deployment, health, degradation, monitoring, secrets. |
116
116
  | [Examples](docs/examples.md) | Guided tour of the runnable examples. |
117
- | [Agent Harness](docs/harness.md) | `minima_harness`: a Minima-routing port of PI's agent toolkit. |
118
117
 
119
118
  ## Examples
120
119
 
@@ -129,33 +128,21 @@ Runnable, progressively advanced — in **[`examples/`](examples/)**:
129
128
  | 5 | [`05_autocapture.py`](examples/05_autocapture.py) | Zero-code intake via `mubit.learn`. |
130
129
  | 6 | [`06_routed_llm_call.py`](examples/06_routed_llm_call.py) | Routing a real Claude call + feedback. |
131
130
  | 7 | [`07_multitenant_admin.py`](examples/07_multitenant_admin.py) | Provision an org, call as that tenant. |
132
- | 8 | [`harness_warmup.py`](examples/harness_warmup.py) | The `minima_harness` agent loop (demo mode needs no keys). |
133
131
 
134
- ## Agent harness
132
+ ## The `minima` CLI
135
133
 
136
- [`minima_harness/`](src/minima_harness) is a lean Python port of
137
- [`@earendil-works/pi`](https://github.com/earendil-works/pi)'s agent toolkit, made
138
- Minima-native: an `Agent` runtime with tool calling **plus** a `MinimaAgent` that routes
139
- every prompt through Minima and feeds the realized tokens/cost/quality back. It is the
140
- "run the model yourself" half of the Minima loop, packaged.
141
-
142
- ```python
143
- from minima_harness.minima import MinimaAgent, HarnessConfig
144
-
145
- agent = MinimaAgent(HarnessConfig.from_env()) # MINIMA_URL, candidates, judge policy
146
- await agent.prompt("Summarize this incident.", task_type="summarization", slider=3)
147
- # -> Minima picked the model, the agent ran it, judged quality, fed the outcome back
148
- ```
149
-
150
- Try it with no keys via the in-process demo:
134
+ The `minima` CLI/TUI a coding agent that routes every prompt through Minima and feeds
135
+ realized tokens/cost/quality back — is a TypeScript/Bun binary that lives in
136
+ [`packages/tui/`](packages/tui/) and installs via Homebrew:
151
137
 
152
138
  ```bash
153
- uv run python examples/harness_warmup.py # demo (in-process Minima + fake provider)
154
- uv run python examples/harness_warmup.py --live # real Minima + real providers
139
+ brew tap mubit-ai/minima
140
+ brew install minima
155
141
  ```
156
142
 
157
- Full architecture, the loop mapping, and extension guide:
158
- **[Agent Harness](docs/harness.md)**.
143
+ The PyPI package (`pip install minima-cli`) is **not** the CLI: it ships the Python
144
+ client SDK (`minima_client`) and the server + operator tooling (`minima-seed`,
145
+ `minima-calibration-report`). The old Python harness/TUI was removed in v0.7.0.
159
146
 
160
147
  ## Configuration
161
148
 
@@ -192,7 +179,7 @@ src/minima/
192
179
  tenancy/ runtime · registry · context · keys · secrets
193
180
  seeding/ routerbench · synthetic · run_seed (minima-seed CLI)
194
181
  schemas/ common · recommend · workflow · feedback · models_catalog · strategies · admin
195
- src/minima_harness/ ported pi-ai (ai/) + pi-agent-core (agent/) + Minima integration (minima/) — see docs/harness.md
182
+ packages/tui/ the `minima` CLI/TUI (TypeScript/Bun, ships via Homebrew)
196
183
  client_sdk/minima_client/ client (sync+async) · autocapture · errors
197
184
  docs/ full documentation examples/ runnable examples
198
185
  tests/ unit · integration (FakeMemory) · live (-m live) · eval (-m eval)