minima-cli 0.4.9__tar.gz → 0.5.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 (517) hide show
  1. {minima_cli-0.4.9 → minima_cli-0.5.0}/.github/workflows/prod.yml +33 -0
  2. minima_cli-0.5.0/.github/workflows/release-cli.yml +140 -0
  3. {minima_cli-0.4.9 → minima_cli-0.5.0}/.gitignore +4 -0
  4. {minima_cli-0.4.9 → minima_cli-0.5.0}/CHANGELOG.md +15 -0
  5. {minima_cli-0.4.9 → minima_cli-0.5.0}/Makefile +30 -1
  6. {minima_cli-0.4.9 → minima_cli-0.5.0}/PKG-INFO +1 -1
  7. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/api-reference.mdx +9 -7
  8. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/client-sdk.mdx +8 -0
  9. minima_cli-0.5.0/maybe.js +64 -0
  10. minima_cli-0.5.0/maybe.ts +84 -0
  11. minima_cli-0.5.0/packages/tui/.gitignore +4 -0
  12. minima_cli-0.5.0/packages/tui/README.md +73 -0
  13. minima_cli-0.5.0/packages/tui/biome.json +25 -0
  14. minima_cli-0.5.0/packages/tui/bun.lock +248 -0
  15. minima_cli-0.5.0/packages/tui/package.json +42 -0
  16. minima_cli-0.5.0/packages/tui/scripts/build-all.ts +31 -0
  17. minima_cli-0.5.0/packages/tui/scripts/build.ts +43 -0
  18. minima_cli-0.5.0/packages/tui/scripts/install.sh +59 -0
  19. minima_cli-0.5.0/packages/tui/scripts/stub-devtools.ts +19 -0
  20. minima_cli-0.5.0/packages/tui/src/agent/agent.ts +252 -0
  21. minima_cli-0.5.0/packages/tui/src/agent/events.ts +119 -0
  22. minima_cli-0.5.0/packages/tui/src/agent/index.ts +10 -0
  23. minima_cli-0.5.0/packages/tui/src/agent/loop.ts +323 -0
  24. minima_cli-0.5.0/packages/tui/src/agent/state.ts +112 -0
  25. minima_cli-0.5.0/packages/tui/src/agent/tools.ts +79 -0
  26. minima_cli-0.5.0/packages/tui/src/ai/compat.ts +21 -0
  27. minima_cli-0.5.0/packages/tui/src/ai/events.ts +136 -0
  28. minima_cli-0.5.0/packages/tui/src/ai/index.ts +28 -0
  29. minima_cli-0.5.0/packages/tui/src/ai/provider_catalog.ts +114 -0
  30. minima_cli-0.5.0/packages/tui/src/ai/provider_quirks.ts +25 -0
  31. minima_cli-0.5.0/packages/tui/src/ai/providers/_common.ts +50 -0
  32. minima_cli-0.5.0/packages/tui/src/ai/providers/anthropic.ts +277 -0
  33. minima_cli-0.5.0/packages/tui/src/ai/providers/base.ts +50 -0
  34. minima_cli-0.5.0/packages/tui/src/ai/providers/faux.ts +161 -0
  35. minima_cli-0.5.0/packages/tui/src/ai/providers/google.ts +293 -0
  36. minima_cli-0.5.0/packages/tui/src/ai/providers/index.ts +71 -0
  37. minima_cli-0.5.0/packages/tui/src/ai/providers/openai_compat.ts +328 -0
  38. minima_cli-0.5.0/packages/tui/src/ai/registry.ts +44 -0
  39. minima_cli-0.5.0/packages/tui/src/ai/stream.ts +81 -0
  40. minima_cli-0.5.0/packages/tui/src/ai/types.ts +224 -0
  41. minima_cli-0.5.0/packages/tui/src/ai/usage.ts +34 -0
  42. minima_cli-0.5.0/packages/tui/src/cli/main.ts +441 -0
  43. minima_cli-0.5.0/packages/tui/src/index.ts +14 -0
  44. minima_cli-0.5.0/packages/tui/src/minima/client.ts +183 -0
  45. minima_cli-0.5.0/packages/tui/src/minima/config.ts +77 -0
  46. minima_cli-0.5.0/packages/tui/src/minima/errors.ts +37 -0
  47. minima_cli-0.5.0/packages/tui/src/minima/index.ts +31 -0
  48. minima_cli-0.5.0/packages/tui/src/minima/judge.ts +110 -0
  49. minima_cli-0.5.0/packages/tui/src/minima/mapping.ts +105 -0
  50. minima_cli-0.5.0/packages/tui/src/minima/meter.ts +139 -0
  51. minima_cli-0.5.0/packages/tui/src/minima/router.ts +200 -0
  52. minima_cli-0.5.0/packages/tui/src/minima/runtime.ts +273 -0
  53. minima_cli-0.5.0/packages/tui/src/minima/schemas.ts +260 -0
  54. minima_cli-0.5.0/packages/tui/src/run_modes.ts +65 -0
  55. minima_cli-0.5.0/packages/tui/src/session/index.ts +10 -0
  56. minima_cli-0.5.0/packages/tui/src/session/store.ts +275 -0
  57. minima_cli-0.5.0/packages/tui/src/tools/_io.ts +45 -0
  58. minima_cli-0.5.0/packages/tui/src/tools/at_mentions.ts +37 -0
  59. minima_cli-0.5.0/packages/tui/src/tools/bash.ts +122 -0
  60. minima_cli-0.5.0/packages/tui/src/tools/builtin.ts +49 -0
  61. minima_cli-0.5.0/packages/tui/src/tools/edit.ts +55 -0
  62. minima_cli-0.5.0/packages/tui/src/tools/glob.ts +37 -0
  63. minima_cli-0.5.0/packages/tui/src/tools/grep.ts +79 -0
  64. minima_cli-0.5.0/packages/tui/src/tools/index.ts +8 -0
  65. minima_cli-0.5.0/packages/tui/src/tools/ls.ts +39 -0
  66. minima_cli-0.5.0/packages/tui/src/tools/read.ts +39 -0
  67. minima_cli-0.5.0/packages/tui/src/tools/schema.ts +78 -0
  68. minima_cli-0.5.0/packages/tui/src/tools/todowrite.ts +67 -0
  69. minima_cli-0.5.0/packages/tui/src/tools/web_fetch.ts +116 -0
  70. minima_cli-0.5.0/packages/tui/src/tools/write.ts +34 -0
  71. minima_cli-0.5.0/packages/tui/src/tui/app.tsx +1701 -0
  72. minima_cli-0.5.0/packages/tui/src/tui/auth.ts +231 -0
  73. minima_cli-0.5.0/packages/tui/src/tui/compact.ts +62 -0
  74. minima_cli-0.5.0/packages/tui/src/tui/config_store.ts +284 -0
  75. minima_cli-0.5.0/packages/tui/src/tui/context.ts +85 -0
  76. minima_cli-0.5.0/packages/tui/src/tui/messages.tsx +267 -0
  77. minima_cli-0.5.0/packages/tui/src/tui/model-picker.tsx +66 -0
  78. minima_cli-0.5.0/packages/tui/src/tui/mouse-scroll.ts +72 -0
  79. minima_cli-0.5.0/packages/tui/src/tui/permissions.ts +171 -0
  80. minima_cli-0.5.0/packages/tui/src/tui/projects.ts +98 -0
  81. minima_cli-0.5.0/packages/tui/src/tui/status.tsx +104 -0
  82. minima_cli-0.5.0/packages/tui/src/tui/text-input.tsx +104 -0
  83. minima_cli-0.5.0/packages/tui/src/types.d.ts +10 -0
  84. minima_cli-0.5.0/packages/tui/tests/agent.test.ts +227 -0
  85. minima_cli-0.5.0/packages/tui/tests/ai.test.ts +155 -0
  86. minima_cli-0.5.0/packages/tui/tests/anthropic.test.ts +121 -0
  87. minima_cli-0.5.0/packages/tui/tests/auth.test.ts +188 -0
  88. minima_cli-0.5.0/packages/tui/tests/client.test.ts +157 -0
  89. minima_cli-0.5.0/packages/tui/tests/config_store.test.ts +89 -0
  90. minima_cli-0.5.0/packages/tui/tests/google.test.ts +133 -0
  91. minima_cli-0.5.0/packages/tui/tests/minima.test.ts +172 -0
  92. minima_cli-0.5.0/packages/tui/tests/openai_compat.test.ts +177 -0
  93. minima_cli-0.5.0/packages/tui/tests/run_modes.test.ts +145 -0
  94. minima_cli-0.5.0/packages/tui/tests/session.test.ts +119 -0
  95. minima_cli-0.5.0/packages/tui/tests/thinking.test.ts +199 -0
  96. minima_cli-0.5.0/packages/tui/tests/tools.test.ts +157 -0
  97. minima_cli-0.5.0/packages/tui/tsconfig.json +26 -0
  98. minima_cli-0.5.0/packaging/homebrew/README.md +48 -0
  99. minima_cli-0.5.0/packaging/homebrew/render_formula.py +105 -0
  100. {minima_cli-0.4.9 → minima_cli-0.5.0}/pyproject.toml +1 -1
  101. minima_cli-0.5.0/runs/20260624_103307/memory_audit.json +48 -0
  102. minima_cli-0.5.0/runs/20260624_103307/recall_debug.jsonl +8 -0
  103. minima_cli-0.5.0/runs/20260624_103307/tasks.jsonl +7 -0
  104. minima_cli-0.5.0/runs/playground_p1/_manifest.json +55 -0
  105. minima_cli-0.5.0/runs/playground_p1/calibration.json +180 -0
  106. minima_cli-0.5.0/runs/playground_p1/feedback.json +9 -0
  107. minima_cli-0.5.0/runs/playground_p1/health.json +22 -0
  108. minima_cli-0.5.0/runs/playground_p1/models.json +379 -0
  109. minima_cli-0.5.0/runs/playground_p1/recommend.json +200 -0
  110. minima_cli-0.5.0/runs/playground_p1/savings.json +42 -0
  111. minima_cli-0.5.0/runs/playground_p1/strategies.json +1207 -0
  112. minima_cli-0.5.0/runs/playground_p1/workflow.json +414 -0
  113. minima_cli-0.5.0/scripts/test-routing-web.ts +176 -0
  114. minima_cli-0.5.0/scripts/test-routing.sh +66 -0
  115. minima_cli-0.5.0/scripts/test-routing.ts +159 -0
  116. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/version.py +1 -1
  117. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/config.py +1 -0
  118. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/app.py +25 -9
  119. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/editor.py +5 -4
  120. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_queue.py +30 -8
  121. minima_cli-0.4.9/.claude/settings.local.json +0 -12
  122. minima_cli-0.4.9/packaging/homebrew/README.md +0 -82
  123. minima_cli-0.4.9/packaging/homebrew/gen_resources.py +0 -185
  124. minima_cli-0.4.9/packaging/homebrew/minima.rb +0 -339
  125. {minima_cli-0.4.9 → minima_cli-0.5.0}/.dockerignore +0 -0
  126. {minima_cli-0.4.9 → minima_cli-0.5.0}/.env.example +0 -0
  127. {minima_cli-0.4.9 → minima_cli-0.5.0}/.github/workflows/staging.yml +0 -0
  128. {minima_cli-0.4.9 → minima_cli-0.5.0}/AGENTS.md +0 -0
  129. {minima_cli-0.4.9 → minima_cli-0.5.0}/Dockerfile +0 -0
  130. {minima_cli-0.4.9 → minima_cli-0.5.0}/LICENSE +0 -0
  131. {minima_cli-0.4.9 → minima_cli-0.5.0}/README.md +0 -0
  132. {minima_cli-0.4.9 → minima_cli-0.5.0}/agent/task_set.py +0 -0
  133. {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/__init__.py +0 -0
  134. {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/autocapture.py +0 -0
  135. {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/client.py +0 -0
  136. {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/errors.py +0 -0
  137. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/README.md +0 -0
  138. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/api-reference.md +0 -0
  139. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/client-sdk.md +0 -0
  140. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/concepts.md +0 -0
  141. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/configuration.md +0 -0
  142. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/examples.md +0 -0
  143. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/getting-started.md +0 -0
  144. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/goals-feature-plan.md +0 -0
  145. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/harness.md +0 -0
  146. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/multi-tenancy.md +0 -0
  147. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/operations.md +0 -0
  148. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/publishing.md +0 -0
  149. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/seeding.md +0 -0
  150. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/Dockerfile +0 -0
  151. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/astro.config.mjs +0 -0
  152. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/netlify.toml +0 -0
  153. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/nginx.conf +0 -0
  154. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/package-lock.json +0 -0
  155. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/package.json +0 -0
  156. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/public/favicon.svg +0 -0
  157. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/assets/logo.svg +0 -0
  158. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/config.ts +0 -0
  159. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/concepts.mdx +0 -0
  160. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/examples.mdx +0 -0
  161. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/getting-started.mdx +0 -0
  162. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/index.mdx +0 -0
  163. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/styles/custom.css +0 -0
  164. {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/tsconfig.json +0 -0
  165. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/01_quickstart.sh +0 -0
  166. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/02_recommend_and_feedback.py +0 -0
  167. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/03_constraints_and_tradeoff.py +0 -0
  168. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/04_workflow.py +0 -0
  169. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/05_autocapture.py +0 -0
  170. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/06_routed_llm_call.py +0 -0
  171. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/07_multitenant_admin.py +0 -0
  172. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/README.md +0 -0
  173. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_escalation.py +0 -0
  174. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_escalation_learn.py +0 -0
  175. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_gemini.py +0 -0
  176. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_retention.py +0 -0
  177. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_warmup.py +0 -0
  178. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_warmup_vary.py +0 -0
  179. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/harness_warmup.py +0 -0
  180. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/metrics_demo.py +0 -0
  181. {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/smoke_test.py +0 -0
  182. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
  183. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run1.json +0 -0
  184. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run2.json +0 -0
  185. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run3.json +0 -0
  186. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/tasks.jsonl +0 -0
  187. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/REPORT.md +0 -0
  188. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
  189. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run1.json +0 -0
  190. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run2.json +0 -0
  191. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run3.json +0 -0
  192. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run4.json +0 -0
  193. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run5.json +0 -0
  194. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/summary.json +0 -0
  195. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/tasks.jsonl +0 -0
  196. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
  197. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run1.json +0 -0
  198. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run2.json +0 -0
  199. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/tasks.jsonl +0 -0
  200. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/REPORT.md +0 -0
  201. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/memory_audit.json +0 -0
  202. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
  203. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run1.json +0 -0
  204. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run2.json +0 -0
  205. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run3.json +0 -0
  206. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run4.json +0 -0
  207. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run5.json +0 -0
  208. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/summary.json +0 -0
  209. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/tasks.jsonl +0 -0
  210. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/REPORT.md +0 -0
  211. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/memory_audit.json +0 -0
  212. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
  213. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run1.json +0 -0
  214. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run2.json +0 -0
  215. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run3.json +0 -0
  216. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run4.json +0 -0
  217. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run5.json +0 -0
  218. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/summary.json +0 -0
  219. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/tasks.jsonl +0 -0
  220. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  221. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/summary.json +0 -0
  222. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  223. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
  224. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  225. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/summary.json +0 -0
  226. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  227. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
  228. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
  229. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/summary.json +0 -0
  230. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/REPORT.md +0 -0
  231. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/results.jsonl +0 -0
  232. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/summary.json +0 -0
  233. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  234. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
  235. {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  236. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/__init__.py +0 -0
  237. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/__init__.py +0 -0
  238. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/auth.py +0 -0
  239. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/errors.py +0 -0
  240. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/__init__.py +0 -0
  241. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/calibration.py +0 -0
  242. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/feedback.py +0 -0
  243. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/health.py +0 -0
  244. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/models.py +0 -0
  245. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/recommend.py +0 -0
  246. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/savings.py +0 -0
  247. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/strategies.py +0 -0
  248. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/__init__.py +0 -0
  249. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/data/capability_priors.json +0 -0
  250. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/data/model_aliases.json +0 -0
  251. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/merge.py +0 -0
  252. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/refresh.py +0 -0
  253. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/__init__.py +0 -0
  254. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/litellm.py +0 -0
  255. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/openrouter.py +0 -0
  256. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/store.py +0 -0
  257. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/config.py +0 -0
  258. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/deps.py +0 -0
  259. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/__init__.py +0 -0
  260. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/anthropic.py +0 -0
  261. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/base.py +0 -0
  262. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/gemini.py +0 -0
  263. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/registry.py +0 -0
  264. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/logging.py +0 -0
  265. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/main.py +0 -0
  266. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/__init__.py +0 -0
  267. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/adapter.py +0 -0
  268. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/keys.py +0 -0
  269. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/records.py +0 -0
  270. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/threadpool.py +0 -0
  271. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/__init__.py +0 -0
  272. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/calibration.py +0 -0
  273. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/report.py +0 -0
  274. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/savings.py +0 -0
  275. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/__init__.py +0 -0
  276. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/_pg_pool.py +0 -0
  277. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/_redis_client.py +0 -0
  278. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/aggregate.py +0 -0
  279. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/classify.py +0 -0
  280. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/decisionlog.py +0 -0
  281. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/durablerefs.py +0 -0
  282. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/engine.py +0 -0
  283. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/escalation.py +0 -0
  284. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/propensity.py +0 -0
  285. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/recstore.py +0 -0
  286. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/score.py +0 -0
  287. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/types.py +0 -0
  288. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/__init__.py +0 -0
  289. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/common.py +0 -0
  290. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/feedback.py +0 -0
  291. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/models_catalog.py +0 -0
  292. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/recommend.py +0 -0
  293. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/savings.py +0 -0
  294. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/strategies.py +0 -0
  295. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/workflow.py +0 -0
  296. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/__init__.py +0 -0
  297. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/items.py +0 -0
  298. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/llmrouterbench.py +0 -0
  299. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/routerbench.py +0 -0
  300. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/run_seed.py +0 -0
  301. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/synthetic.py +0 -0
  302. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/__init__.py +0 -0
  303. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/context.py +0 -0
  304. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/passthrough.py +0 -0
  305. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/LICENSE_PI +0 -0
  306. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/__init__.py +0 -0
  307. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/__init__.py +0 -0
  308. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/agent.py +0 -0
  309. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/events.py +0 -0
  310. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/loop.py +0 -0
  311. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/state.py +0 -0
  312. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/tools.py +0 -0
  313. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/__init__.py +0 -0
  314. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/compat.py +0 -0
  315. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/errors.py +0 -0
  316. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/events.py +0 -0
  317. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/openrouter_catalog.py +0 -0
  318. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/provider_catalog.py +0 -0
  319. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/provider_quirks.py +0 -0
  320. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/__init__.py +0 -0
  321. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/_common.py +0 -0
  322. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/anthropic.py +0 -0
  323. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/base.py +0 -0
  324. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/faux.py +0 -0
  325. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/google.py +0 -0
  326. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/openai_compat.py +0 -0
  327. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/registry.py +0 -0
  328. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/stream.py +0 -0
  329. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/tools.py +0 -0
  330. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/types.py +0 -0
  331. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/usage.py +0 -0
  332. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/__init__.py +0 -0
  333. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/cache.py +0 -0
  334. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/goals.py +0 -0
  335. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/judge.py +0 -0
  336. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/mapping.py +0 -0
  337. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/meter.py +0 -0
  338. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/router.py +0 -0
  339. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/runtime.py +0 -0
  340. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/signals.py +0 -0
  341. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/__init__.py +0 -0
  342. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/format.py +0 -0
  343. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/store.py +0 -0
  344. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tasks/__init__.py +0 -0
  345. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tasks/task_set.py +0 -0
  346. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/__init__.py +0 -0
  347. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/_io.py +0 -0
  348. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/bash.py +0 -0
  349. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/builtin.py +0 -0
  350. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/edit.py +0 -0
  351. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/find.py +0 -0
  352. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/grep.py +0 -0
  353. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/ls.py +0 -0
  354. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/read.py +0 -0
  355. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/tasks.py +0 -0
  356. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/write.py +0 -0
  357. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/__init__.py +0 -0
  358. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/analytics.py +0 -0
  359. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/bridge.py +0 -0
  360. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/cli.py +0 -0
  361. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/clipboard.py +0 -0
  362. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/commands.py +0 -0
  363. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/compaction.py +0 -0
  364. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/config_cli.py +0 -0
  365. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/config_store.py +0 -0
  366. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/context.py +0 -0
  367. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/customize.py +0 -0
  368. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/diff.py +0 -0
  369. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/editor.py +0 -0
  370. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/extensions.py +0 -0
  371. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/extra_models.py +0 -0
  372. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/history.py +0 -0
  373. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/mubit.py +0 -0
  374. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/overlays.py +0 -0
  375. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/packages.py +0 -0
  376. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/run_modes.py +0 -0
  377. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/theme.py +0 -0
  378. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/welcome.py +0 -0
  379. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/__init__.py +0 -0
  380. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/banner.py +0 -0
  381. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/footer.py +0 -0
  382. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/messages.py +0 -0
  383. {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/status.py +0 -0
  384. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/__init__.py +0 -0
  385. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/conftest.py +0 -0
  386. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/BENCHMARKS.md +0 -0
  387. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/CRITERIA.md +0 -0
  388. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/RESULTS.md +0 -0
  389. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/__init__.py +0 -0
  390. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/harness.py +0 -0
  391. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/llmrouterbench_config.py +0 -0
  392. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
  393. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/test_routerbench_savings.py +0 -0
  394. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/factories.py +0 -0
  395. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/__init__.py +0 -0
  396. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/__init__.py +0 -0
  397. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_format.py +0 -0
  398. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_manager.py +0 -0
  399. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_store.py +0 -0
  400. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_agent_loop.py +0 -0
  401. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_anthropic_mapping.py +0 -0
  402. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_auth_reroute.py +0 -0
  403. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_cache.py +0 -0
  404. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_catalog_overlay.py +0 -0
  405. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_common_and_wire.py +0 -0
  406. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_compat.py +0 -0
  407. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_errors.py +0 -0
  408. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_goals.py +0 -0
  409. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_google_mapping.py +0 -0
  410. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_judge.py +0 -0
  411. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_live.py +0 -0
  412. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_mapping.py +0 -0
  413. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_minima_e2e.py +0 -0
  414. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_openai_compat_sse.py +0 -0
  415. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_openrouter_catalog.py +0 -0
  416. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase0_smoke.py +0 -0
  417. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_a.py +0 -0
  418. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_b.py +0 -0
  419. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_c.py +0 -0
  420. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_catalog.py +0 -0
  421. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_quirks.py +0 -0
  422. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_registration.py +0 -0
  423. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_wiring.py +0 -0
  424. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_runtime.py +0 -0
  425. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_signals.py +0 -0
  426. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/__init__.py +0 -0
  427. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_agent_smoke.py +0 -0
  428. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_bash.py +0 -0
  429. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_builtin.py +0 -0
  430. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_edit.py +0 -0
  431. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_find.py +0 -0
  432. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_grep.py +0 -0
  433. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_io.py +0 -0
  434. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_ls.py +0 -0
  435. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_read.py +0 -0
  436. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_write.py +0 -0
  437. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/__init__.py +0 -0
  438. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_analytics.py +0 -0
  439. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_app_pilot.py +0 -0
  440. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_bridge.py +0 -0
  441. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_clipboard.py +0 -0
  442. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_command_popup.py +0 -0
  443. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_commands.py +0 -0
  444. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_config.py +0 -0
  445. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_context.py +0 -0
  446. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_customize.py +0 -0
  447. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_decision_card.py +0 -0
  448. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_diff.py +0 -0
  449. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_editor.py +0 -0
  450. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_editor_widget.py +0 -0
  451. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_export.py +0 -0
  452. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_extensions.py +0 -0
  453. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_goals_tui.py +0 -0
  454. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_history_sessions.py +0 -0
  455. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_messages.py +0 -0
  456. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_mouse_copy.py +0 -0
  457. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_mubit.py +0 -0
  458. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_optimize.py +0 -0
  459. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_overlays.py +0 -0
  460. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p2.py +0 -0
  461. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p3.py +0 -0
  462. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p5.py +0 -0
  463. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_permissions.py +0 -0
  464. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_predictability.py +0 -0
  465. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_prompt_layers.py +0 -0
  466. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_run_modes.py +0 -0
  467. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_status.py +0 -0
  468. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_status_bar.py +0 -0
  469. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_theme.py +0 -0
  470. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_thoughts.py +0 -0
  471. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_tool_render.py +0 -0
  472. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_ux.py +0 -0
  473. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_welcome.py +0 -0
  474. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_widgets.py +0 -0
  475. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_escalation_reasoner.py +0 -0
  476. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_feedback_loop.py +0 -0
  477. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_lesson_promotion.py +0 -0
  478. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_measurement_api.py +0 -0
  479. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_observed_cost_ranking.py +0 -0
  480. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_recommend_api.py +0 -0
  481. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_strategies_api.py +0 -0
  482. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_workflow_models_health.py +0 -0
  483. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  484. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_escalation_fixes.py +0 -0
  485. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_full_surface_live.py +0 -0
  486. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_mubit_roundtrip.py +0 -0
  487. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_phase3_live.py +0 -0
  488. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_reasoner_live.py +0 -0
  489. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_recall_params_live.py +0 -0
  490. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_aggregate.py +0 -0
  491. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_aggregate_decay.py +0 -0
  492. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_autocapture.py +0 -0
  493. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_calibration_fit.py +0 -0
  494. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_classify_keys.py +0 -0
  495. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_cluster.py +0 -0
  496. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_collapse_guard.py +0 -0
  497. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_cost_band.py +0 -0
  498. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_decisionlog.py +0 -0
  499. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_escalation.py +0 -0
  500. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_exploration.py +0 -0
  501. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_ipw.py +0 -0
  502. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_iterations.py +0 -0
  503. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_latency_quality.py +0 -0
  504. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_lever_cost.py +0 -0
  505. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_metrics.py +0 -0
  506. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_metrics_demo.py +0 -0
  507. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_neighbor_classify.py +0 -0
  508. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_reasoner.py +0 -0
  509. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_records_catalog.py +0 -0
  510. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_recstore_sqlite.py +0 -0
  511. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_score.py +0 -0
  512. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_shadow_bandit.py +0 -0
  513. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_store_backends.py +0 -0
  514. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_strategies.py +0 -0
  515. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_tenancy.py +0 -0
  516. {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_thompson.py +0 -0
  517. {minima_cli-0.4.9 → minima_cli-0.5.0}/uv.lock +0 -0
@@ -156,3 +156,36 @@ jobs:
156
156
  --region ${{ env.REGION }} \
157
157
  --format 'value(status.url)')
158
158
  echo "::notice::Minima docs (prod) deployed to: $URL"
159
+
160
+ # ── 3. Publish minima-cli to PyPI ────────────────────────────────────────────
161
+ # Builds the sdist+wheel at the release tag and uploads to PyPI (the dist bundles the
162
+ # `minima_client` SDK). --skip-existing makes a manual re-deploy of an already-published
163
+ # version a no-op instead of an error. Needs no GCP — only the PYPI_API_TOKEN secret.
164
+ publish-pypi:
165
+ name: Publish → PyPI
166
+ runs-on: ubuntu-latest
167
+
168
+ steps:
169
+ - name: Checkout @ release tag
170
+ uses: actions/checkout@v5
171
+ with:
172
+ ref: ${{ env.RELEASE_TAG }}
173
+
174
+ - name: Set up Python
175
+ uses: actions/setup-python@v5
176
+ with:
177
+ python-version: "3.13"
178
+
179
+ - name: Build sdist + wheel
180
+ run: |
181
+ python -m pip install --upgrade build twine
182
+ python -m build
183
+
184
+ - name: Check metadata
185
+ run: python -m twine check dist/*
186
+
187
+ - name: Publish to PyPI
188
+ env:
189
+ TWINE_USERNAME: __token__
190
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
191
+ run: python -m twine upload --skip-existing dist/*
@@ -0,0 +1,140 @@
1
+ name: Release — CLI binaries + Homebrew
2
+
3
+ # On a published release, cross-compile the TypeScript/Bun CLI for macOS + Linux,
4
+ # ad-hoc codesign the macOS arches, attach the tarballs to the release, and open
5
+ # a PR to the Homebrew tap (mubit-ai/homebrew-minima) bumping the binary formula.
6
+ # PyPI publishing of the Python `minima-cli` (SDK + server tooling) stays in prod.yml.
7
+ on:
8
+ release:
9
+ types: [published]
10
+ workflow_dispatch:
11
+ inputs:
12
+ tag:
13
+ description: "Git tag to build (e.g. v0.5.0)"
14
+ required: true
15
+ type: string
16
+
17
+ concurrency:
18
+ group: release-cli
19
+ cancel-in-progress: false
20
+
21
+ env:
22
+ RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
23
+ BUN_VERSION: "1.3.14"
24
+
25
+ permissions:
26
+ contents: write # upload release assets
27
+
28
+ jobs:
29
+ build-macos:
30
+ name: Build + sign macOS binaries
31
+ runs-on: macos-14 # Apple Silicon; cross-compiles darwin-x64 too, codesign is arch-agnostic
32
+ steps:
33
+ - uses: actions/checkout@v5
34
+ with:
35
+ ref: ${{ env.RELEASE_TAG }}
36
+ - uses: oven-sh/setup-bun@v2
37
+ with:
38
+ bun-version: ${{ env.BUN_VERSION }}
39
+ - name: Install deps
40
+ working-directory: packages/tui
41
+ run: bun install --frozen-lockfile
42
+ - name: Cross-compile darwin arm64 + x64
43
+ working-directory: packages/tui
44
+ run: bun run scripts/build-all.ts bun-darwin-arm64 bun-darwin-x64
45
+ - name: Ad-hoc codesign (required for Apple Silicon to run the binary)
46
+ working-directory: packages/tui
47
+ run: |
48
+ for b in dist/minima-darwin-arm64 dist/minima-darwin-x64; do
49
+ codesign -s - --force --timestamp=none "$b"
50
+ codesign --verify --verbose=1 "$b"
51
+ done
52
+ - name: Package tarballs
53
+ working-directory: packages/tui
54
+ run: |
55
+ VER="${RELEASE_TAG#v}"
56
+ for slug in darwin-arm64 darwin-x64; do
57
+ tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
58
+ tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
59
+ done
60
+ - uses: actions/upload-artifact@v4
61
+ with:
62
+ name: darwin
63
+ path: packages/tui/dist/minima-*.tar.gz
64
+
65
+ build-linux:
66
+ name: Build Linux binaries
67
+ runs-on: ubuntu-latest
68
+ steps:
69
+ - uses: actions/checkout@v5
70
+ with:
71
+ ref: ${{ env.RELEASE_TAG }}
72
+ - uses: oven-sh/setup-bun@v2
73
+ with:
74
+ bun-version: ${{ env.BUN_VERSION }}
75
+ - name: Install deps
76
+ working-directory: packages/tui
77
+ run: bun install --frozen-lockfile
78
+ - name: Cross-compile linux x64 + arm64
79
+ working-directory: packages/tui
80
+ run: bun run scripts/build-all.ts bun-linux-x64 bun-linux-arm64
81
+ - name: Package tarballs
82
+ working-directory: packages/tui
83
+ run: |
84
+ VER="${RELEASE_TAG#v}"
85
+ for slug in linux-x64 linux-arm64; do
86
+ tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
87
+ tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
88
+ done
89
+ - uses: actions/upload-artifact@v4
90
+ with:
91
+ name: linux
92
+ path: packages/tui/dist/minima-*.tar.gz
93
+
94
+ publish-and-bump:
95
+ name: Attach assets + open tap PR
96
+ needs: [build-macos, build-linux]
97
+ runs-on: ubuntu-latest
98
+ steps:
99
+ - uses: actions/checkout@v5
100
+ with:
101
+ ref: ${{ env.RELEASE_TAG }}
102
+ - uses: actions/download-artifact@v4
103
+ with:
104
+ path: artifacts
105
+ - name: Collect tarballs
106
+ run: |
107
+ mkdir -p dist
108
+ find artifacts -name 'minima-*.tar.gz' -exec cp {} dist/ \;
109
+ ls -la dist
110
+ - name: Attach binaries to the release
111
+ env:
112
+ GH_TOKEN: ${{ github.token }}
113
+ run: gh release upload "$RELEASE_TAG" dist/minima-*.tar.gz --clobber --repo "${{ github.repository }}"
114
+ - name: Render binary formula
115
+ run: |
116
+ VER="${RELEASE_TAG#v}"
117
+ python3 packaging/homebrew/render_formula.py --version "$VER" --dist dist --out minima.rb
118
+ echo "----- rendered formula -----"; cat minima.rb
119
+ - name: Open Homebrew tap PR
120
+ env:
121
+ GH_TOKEN: ${{ secrets.GH_PAT }}
122
+ run: |
123
+ VER="${RELEASE_TAG#v}"
124
+ git clone "https://x-access-token:${GH_TOKEN}@github.com/mubit-ai/homebrew-minima.git" tap
125
+ cp minima.rb tap/Formula/minima.rb
126
+ cd tap
127
+ git config user.name "mubit-release-bot"
128
+ git config user.email "release-bot@mubit.ai"
129
+ branch="bump-minima-${VER}"
130
+ git checkout -b "$branch"
131
+ if git diff --quiet Formula/minima.rb; then
132
+ echo "formula already up to date for ${VER}; nothing to do"; exit 0
133
+ fi
134
+ git add Formula/minima.rb
135
+ git commit -m "minima ${VER} (prebuilt binary)"
136
+ git push -u origin "$branch" --force-with-lease
137
+ gh pr create --repo mubit-ai/homebrew-minima --base main --head "$branch" \
138
+ --title "minima ${VER}" \
139
+ --body "Automated bump to the prebuilt TypeScript/Bun binary for \`${RELEASE_TAG}\`. Replaces the Python virtualenv formula. \`brew test-bot\` validates install + \`test do\` on macOS + Linux before merge." \
140
+ || echo "PR already exists for ${branch}"
@@ -21,3 +21,7 @@ docs-site/dist/
21
21
 
22
22
  # PLAN
23
23
  docs/PLAN/
24
+
25
+ # Meta files
26
+ .codaph
27
+ .claude
@@ -4,6 +4,21 @@ 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.4.10] - 2026-06-26
8
+
9
+ ### Changed
10
+ - **`minima-cli` is now published to PyPI automatically on every release** — `pip install minima-cli`
11
+ is the official install (it bundles the `minima_client` SDK). A new CI job builds + uploads the
12
+ sdist/wheel alongside the GitHub release and prod deploy.
13
+
14
+ ### Fixed
15
+ - **Docs (API reference):** corrected the `GET /v1/health` response example (it returns `mubit`
16
+ not `memory`, `version 0.4.9`, plus `auth`/`reasoner` blocks and `catalog.cost_source`) and
17
+ clarified `status` is only `degraded` on a key-bearing probe; documented the real
18
+ `summary.realized` field set (it differs from `summary.estimated`); and fixed the `days`
19
+ parameter bound (`>0–365`) on `/v1/savings` and `/v1/calibration`. Added a PyPI install link to
20
+ the Client SDK page.
21
+
7
22
  ## [0.4.9] - 2026-06-26
8
23
 
9
24
  ### Fixed
@@ -1,4 +1,4 @@
1
- .PHONY: install run test lint fmt live eval seed refresh-catalog harness-demo harness-live harness-test harness
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
2
2
 
3
3
  install:
4
4
  uv sync --extra dev # dev pulls server + harness + tui for the full test suite
@@ -39,3 +39,32 @@ harness-test:
39
39
 
40
40
  harness:
41
41
  uv run --extra harness --extra tui --env-file .env.harness minima-harness $(ARGS)
42
+
43
+ # --- TS TUI (packages/tui) — run from the repo root so .env.harness auto-loads --------
44
+
45
+ TUI := packages/tui
46
+ TUI_BIN := $(TUI)/dist/minima
47
+
48
+ tui-install:
49
+ cd $(TUI) && bun install
50
+
51
+ tui-test:
52
+ cd $(TUI) && bun test
53
+
54
+ tui-check:
55
+ cd $(TUI) && bun run check && bun run lint
56
+
57
+ tui-build:
58
+ cd $(TUI) && bun run build
59
+
60
+ # Run the compiled binary (build first with `make tui-build`). Passes ARGS through, so:
61
+ # make tui ARGS='-p "hello"' # one-shot
62
+ # make tui ARGS='--offline --model gpt-4o-mini -p "hi"'
63
+ # make tui # interactive TUI
64
+ tui:
65
+ @test -x $(TUI_BIN) || { echo "Run 'make tui-build' first"; exit 1; }
66
+ ./$(TUI_BIN) $(ARGS)
67
+
68
+ # Run from source via Bun (no compile step) — fastest dev loop.
69
+ tui-dev:
70
+ cd $(TUI) && bun run src/cli/main.ts $(ARGS)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minima-cli
3
- Version: 0.4.9
3
+ Version: 0.5.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
@@ -310,7 +310,7 @@ Two baselines are always reported side by side, explicitly labeled: **`vs premiu
310
310
  | Param | Type | Default | Notes |
311
311
  |-------|------|---------|-------|
312
312
  | `namespace` | string | — | Restrict to one namespace. |
313
- | `days` | float `0–365` | `30` | Lookback window. |
313
+ | `days` | float `>0–365` | `30` | Lookback window (must be greater than 0). |
314
314
  | `group_by` | enum | — | `cluster` \| `task_type` \| `lane` — optional breakdown. |
315
315
 
316
316
  ### Response
@@ -318,7 +318,7 @@ Two baselines are always reported side by side, explicitly labeled: **`vs premiu
318
318
  | Field | Type | Notes |
319
319
  |-------|------|-------|
320
320
  | `summary.estimated` | object | `n`, `cost_recommended_usd`, `cost_premium_usd`, `savings_vs_premium_usd`, plus `n_declared` / `cost_declared_usd` / `savings_vs_declared_usd` over the declared-baseline subset. |
321
- | `summary.realized` | object | Same shape over the **reconciled** subset (feedback received with `actual_cost_usd`), using your realized cost against the estimated baselines. |
321
+ | `summary.realized` | object | A **different** field set over the **reconciled** subset (feedback received with `actual_cost_usd`): `n_reconciled`, `realized_cost_usd`, `est_cost_recommended_usd`, `est_cost_premium_usd`, `savings_vs_premium_est_usd`, plus `n_declared` / `est_cost_declared_usd` / `savings_vs_declared_est_usd` — your realized cost measured against the estimated baselines. |
322
322
  | `health` | object | `recommendations`, `feedback_coverage` (share of recommendations that ever got feedback — the number that decides how much to trust `realized`), `late_feedback_share`, `escalation_rate`, `exploration_share`, `epsilon_policy_share`. |
323
323
  | `groups` | array | Per-`group_by` key: the same `summary` + `health`. |
324
324
 
@@ -342,7 +342,7 @@ Is `predicted_success` telling the truth for your traffic? Compares each recomme
342
342
  | Param | Type | Default | Notes |
343
343
  |-------|------|---------|-------|
344
344
  | `namespace` | string | — | Restrict to one namespace. |
345
- | `days` | float `0–365` | `30` | Lookback window. |
345
+ | `days` | float `>0–365` | `30` | Lookback window (must be greater than 0). |
346
346
 
347
347
  ### Response
348
348
 
@@ -366,10 +366,12 @@ Always returns `200`; reports degraded state in the body. The only endpoint that
366
366
  ```json
367
367
  {
368
368
  "status": "ok",
369
- "memory": {"reachable": true, "latency_ms": 12},
370
- "catalog": {"version": "…", "stale": false, "models": 42},
371
- "version": "0.1.0"
369
+ "mubit": {"reachable": true, "latency_ms": 12, "endpoint": "https://api.mubit.ai", "org_id": "…"},
370
+ "auth": "passthrough",
371
+ "catalog": {"version": "", "cost_source": "litellm", "stale": false, "models": 42},
372
+ "reasoner": {"provider": "gemini", "configured": true},
373
+ "version": "0.4.9"
372
374
  }
373
375
  ```
374
376
 
375
- `status` is `degraded` when the memory backend is unreachable. In that state `/recommend` still serves prior-only recommendations.
377
+ An unauthenticated probe (no key) returns `"mubit": {"reachable": null, "scope": "unauthenticated"}` and `status: "ok"` — liveness only. `status` is `degraded` only when a **key-bearing** probe finds your memory backend unreachable (`mubit.reachable == false`); in that state `/recommend` still serves prior-only recommendations.
@@ -9,6 +9,14 @@ import { Aside, Code } from '@astrojs/starlight/components';
9
9
 
10
10
  The `minima_client` package is the official thin, typed Python client for the hosted Minima API, plus an optional zero-code intake helper.
11
11
 
12
+ ## Install
13
+
14
+ ```bash
15
+ pip install minima-cli
16
+ ```
17
+
18
+ The SDK is published on PyPI as part of [**`minima-cli`**](https://pypi.org/project/minima-cli/) — one package that ships both the CLI agent and the `minima_client` SDK (also available via `brew install mubit-ai/minima/minima`). Import it as `minima_client`:
19
+
12
20
  ```python
13
21
  from minima_client import MinimaClient, AsyncMinimaClient, MinimaError, autocapture
14
22
  ```
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ class Maybe {
3
+ value;
4
+ constructor(value) {
5
+ this.value = value;
6
+ }
7
+ static some(value) {
8
+ if (value === null || value === undefined) {
9
+ throw new Error("Cannot create 'some' with null or undefined");
10
+ }
11
+ return new Maybe(value);
12
+ }
13
+ static none() {
14
+ return new Maybe(null);
15
+ }
16
+ // Functor: map applies a function to the value if it exists
17
+ map(fn) {
18
+ if (this.value === null || this.value === undefined) {
19
+ return Maybe.none();
20
+ }
21
+ return Maybe.some(fn(this.value));
22
+ }
23
+ // Monad: flatMap applies a function that returns a Maybe, and flattens the result
24
+ flatMap(fn) {
25
+ if (this.value === null || this.value === undefined) {
26
+ return Maybe.none();
27
+ }
28
+ return fn(this.value);
29
+ }
30
+ get() {
31
+ return this.value;
32
+ }
33
+ }
34
+ // --- Functor Example (map) ---
35
+ const maybeName = Maybe.some("Alice");
36
+ const upperName = maybeName.map(name => name.toUpperCase());
37
+ console.log("Functor (map) result:", upperName.get()); // ALICE
38
+ const maybeEmpty = Maybe.none();
39
+ const upperEmpty = maybeEmpty.map(name => name.toUpperCase());
40
+ console.log("Functor (map) on empty result:", upperEmpty.get()); // null
41
+ const users = {
42
+ 1: { id: 1, name: "Bob", email: "bob@example.com" },
43
+ 2: { id: 2, name: "Charlie" }
44
+ };
45
+ function findUserById(id) {
46
+ const user = users[id];
47
+ return user ? Maybe.some(user) : Maybe.none();
48
+ }
49
+ function getUserEmail(user) {
50
+ return user.email ? Maybe.some(user.email) : Maybe.none();
51
+ }
52
+ // Chaining with flatMap
53
+ const user1Email = findUserById(1)
54
+ .flatMap(getUserEmail)
55
+ .map(email => `Email: ${email}`);
56
+ console.log("Monad (flatMap) user 1 email:", user1Email.get()); // Email: bob@example.com
57
+ const user2Email = findUserById(2)
58
+ .flatMap(getUserEmail)
59
+ .map(email => `Email: ${email}`);
60
+ console.log("Monad (flatMap) user 2 email:", user2Email.get()); // null (because user 2 has no email)
61
+ const user3Email = findUserById(3) // Non-existent user
62
+ .flatMap(getUserEmail)
63
+ .map(email => `Email: ${email}`);
64
+ console.log("Monad (flatMap) user 3 email:", user3Email.get()); // null
@@ -0,0 +1,84 @@
1
+
2
+ type Mapper<T, U> = (value: T) => U;
3
+ type MonadicMapper<T, U> = (value: T) => Maybe<U>;
4
+
5
+ class Maybe<T> {
6
+ private constructor(private value: T | null | undefined) {}
7
+
8
+ static some<T>(value: T): Maybe<T> {
9
+ if (value === null || value === undefined) {
10
+ throw new Error("Cannot create 'some' with null or undefined");
11
+ }
12
+ return new Maybe(value);
13
+ }
14
+
15
+ static none<T>(): Maybe<T> {
16
+ return new Maybe<T>(null);
17
+ }
18
+
19
+ // Functor: map applies a function to the value if it exists
20
+ map<U>(fn: Mapper<T, U>): Maybe<U> {
21
+ if (this.value === null || this.value === undefined) {
22
+ return Maybe.none<U>();
23
+ }
24
+ return Maybe.some(fn(this.value));
25
+ }
26
+
27
+ // Monad: flatMap applies a function that returns a Maybe, and flattens the result
28
+ flatMap<U>(fn: MonadicMapper<T, U>): Maybe<U> {
29
+ if (this.value === null || this.value === undefined) {
30
+ return Maybe.none<U>();
31
+ }
32
+ return fn(this.value);
33
+ }
34
+
35
+ get(): T | null | undefined {
36
+ return this.value;
37
+ }
38
+ }
39
+
40
+ // --- Functor Example (map) ---
41
+ const maybeName = Maybe.some("Alice");
42
+ const upperName = maybeName.map(name => name.toUpperCase());
43
+ console.log("Functor (map) result:", upperName.get()); // ALICE
44
+
45
+ const maybeEmpty = Maybe.none<string>();
46
+ const upperEmpty = maybeEmpty.map(name => name.toUpperCase());
47
+ console.log("Functor (map) on empty result:", upperEmpty.get()); // null
48
+
49
+ // --- Monad Example (flatMap) ---
50
+ interface User {
51
+ id: number;
52
+ name: string;
53
+ email?: string;
54
+ }
55
+
56
+ const users: Record<number, User> = {
57
+ 1: { id: 1, name: "Bob", email: "bob@example.com" },
58
+ 2: { id: 2, name: "Charlie" }
59
+ };
60
+
61
+ function findUserById(id: number): Maybe<User> {
62
+ const user = users[id];
63
+ return user ? Maybe.some(user) : Maybe.none();
64
+ }
65
+
66
+ function getUserEmail(user: User): Maybe<string> {
67
+ return user.email ? Maybe.some(user.email) : Maybe.none();
68
+ }
69
+
70
+ // Chaining with flatMap
71
+ const user1Email = findUserById(1)
72
+ .flatMap(getUserEmail)
73
+ .map(email => `Email: ${email}`);
74
+ console.log("Monad (flatMap) user 1 email:", user1Email.get()); // Email: bob@example.com
75
+
76
+ const user2Email = findUserById(2)
77
+ .flatMap(getUserEmail)
78
+ .map(email => `Email: ${email}`);
79
+ console.log("Monad (flatMap) user 2 email:", user2Email.get()); // null (because user 2 has no email)
80
+
81
+ const user3Email = findUserById(3) // Non-existent user
82
+ .flatMap(getUserEmail)
83
+ .map(email => `Email: ${email}`);
84
+ console.log("Monad (flatMap) user 3 email:", user3Email.get()); // null
@@ -0,0 +1,4 @@
1
+ node_modules/
2
+ dist/
3
+ *.log
4
+ .DS_Store
@@ -0,0 +1,73 @@
1
+ # minima-tui
2
+
3
+ The TypeScript/Ink harness + TUI for **Minima** — a cost-aware model-routing coding
4
+ agent. This package is the runtime that lives in your terminal; it talks to the Python
5
+ FastAPI recommender service (`src/minima/`) over the `/v1/*` HTTP contract and never
6
+ proxies LLM calls itself.
7
+
8
+ ```
9
+ recommend -> run the model yourself -> judge quality -> feedback
10
+ ```
11
+
12
+ ## What's here
13
+
14
+ A faithful port of `src/minima_harness/` (Python) → TypeScript:
15
+
16
+ - **`src/minima/`** — typed async client for the recommender service (every `/v1/*`
17
+ endpoint) + the integration layer (`config`, `mapping`, `meter`, `judge`, `router`,
18
+ `MinimaAgent` route→run→judge→feedback loop).
19
+ - **`src/ai/`** — the LLM layer: types, streaming, provider registry, and three real
20
+ providers — `openai-compat` (raw `fetch` SSE), `anthropic` (`@anthropic-ai/sdk`),
21
+ `google` (`@google/genai`) — plus a hermetic `faux` provider for tests.
22
+ - **`src/agent/`** — the agent core: PI event taxonomy, `agentLoop` (parallel tool
23
+ execution, before/afterToolCall hooks, max_turns, steering), and the `Agent` class.
24
+ - **`src/tools/`** — `read`/`write`/`edit`/`bash`/`ls` + an `objectSchema` helper.
25
+ - **`src/tui/`** — the Ink app (conversation + status bar + model picker) and the
26
+ credential store (OS keychain via `keytar`, else a 0600 file).
27
+ - **`src/session/`** — append-only JSONL session tree + `SessionManager`.
28
+ - **`src/cli/main.ts`** — the `minima` entry point (`--print`, `--mode json`, interactive
29
+ TUI, `minima config`).
30
+
31
+ ## Develop
32
+
33
+ ```bash
34
+ cd packages/tui
35
+ bun install
36
+ bun test # 75 hermetic tests
37
+ bun run check # tsc --noEmit
38
+ bun run lint # biome
39
+ bun run build # -> dist/minima (a self-contained native binary)
40
+ ./dist/minima --help
41
+ ```
42
+
43
+ Tests are fully hermetic: the client injects a mock `fetch`, the faux provider scripts
44
+ LLM replies, and the Minima integration runs the full loop against an in-process mock
45
+ service — no network, no keys.
46
+
47
+ ## Use
48
+
49
+ ```bash
50
+ # set credentials (keychain, else ~/.minima-harness/config.env at 0600)
51
+ minima config set MUBIT_API_KEY ...
52
+ minima config set OPENAI_API_KEY ...
53
+
54
+ # one-shot
55
+ minima -p "explain this repo"
56
+
57
+ # event stream for scripts
58
+ minima --mode json "refactor foo" | jq .
59
+
60
+ # interactive TUI
61
+ minima
62
+ ```
63
+
64
+ Routing auth (`MUBIT_API_KEY`) + one provider key is enough to start. `--offline`
65
+ bypasses the recommender; `--model`/`--provider` pin a model and skip routing.
66
+
67
+ ## Status
68
+
69
+ Phases 0–7 complete: scaffold → client → AI layer (3 providers) → agent core → tools →
70
+ Minima integration → Ink TUI + CLI → compiled native binary (`bun build --compile`).
71
+ Remaining for full parity with the Python TUI: the rest of the overlays (session picker,
72
+ diff-approval gating, themes, goals), mouse capture, and `keytar`-bundled keychain in the
73
+ compiled binary (it falls back to the file store today).
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
3
+ "organizeImports": { "enabled": true },
4
+ "linter": {
5
+ "enabled": true,
6
+ "rules": {
7
+ "recommended": true,
8
+ "style": {
9
+ "useImportType": "error",
10
+ "useExportType": "error",
11
+ "noNonNullAssertion": "off"
12
+ },
13
+ "suspicious": { "noExplicitAny": "off", "noAssignInExpressions": "off" },
14
+ "performance": { "noDelete": "off" },
15
+ "correctness": { "noUnusedVariables": "warn" }
16
+ }
17
+ },
18
+ "formatter": {
19
+ "enabled": true,
20
+ "indentStyle": "space",
21
+ "indentWidth": 2,
22
+ "lineWidth": 100
23
+ },
24
+ "javascript": { "formatter": { "quoteStyle": "double", "semicolons": "always" } }
25
+ }