minima-cli 0.4.10__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 (516) hide show
  1. minima_cli-0.5.0/.github/workflows/release-cli.yml +140 -0
  2. {minima_cli-0.4.10 → minima_cli-0.5.0}/.gitignore +4 -0
  3. {minima_cli-0.4.10 → minima_cli-0.5.0}/Makefile +30 -1
  4. {minima_cli-0.4.10 → minima_cli-0.5.0}/PKG-INFO +1 -1
  5. minima_cli-0.5.0/maybe.js +64 -0
  6. minima_cli-0.5.0/maybe.ts +84 -0
  7. minima_cli-0.5.0/packages/tui/.gitignore +4 -0
  8. minima_cli-0.5.0/packages/tui/README.md +73 -0
  9. minima_cli-0.5.0/packages/tui/biome.json +25 -0
  10. minima_cli-0.5.0/packages/tui/bun.lock +248 -0
  11. minima_cli-0.5.0/packages/tui/package.json +42 -0
  12. minima_cli-0.5.0/packages/tui/scripts/build-all.ts +31 -0
  13. minima_cli-0.5.0/packages/tui/scripts/build.ts +43 -0
  14. minima_cli-0.5.0/packages/tui/scripts/install.sh +59 -0
  15. minima_cli-0.5.0/packages/tui/scripts/stub-devtools.ts +19 -0
  16. minima_cli-0.5.0/packages/tui/src/agent/agent.ts +252 -0
  17. minima_cli-0.5.0/packages/tui/src/agent/events.ts +119 -0
  18. minima_cli-0.5.0/packages/tui/src/agent/index.ts +10 -0
  19. minima_cli-0.5.0/packages/tui/src/agent/loop.ts +323 -0
  20. minima_cli-0.5.0/packages/tui/src/agent/state.ts +112 -0
  21. minima_cli-0.5.0/packages/tui/src/agent/tools.ts +79 -0
  22. minima_cli-0.5.0/packages/tui/src/ai/compat.ts +21 -0
  23. minima_cli-0.5.0/packages/tui/src/ai/events.ts +136 -0
  24. minima_cli-0.5.0/packages/tui/src/ai/index.ts +28 -0
  25. minima_cli-0.5.0/packages/tui/src/ai/provider_catalog.ts +114 -0
  26. minima_cli-0.5.0/packages/tui/src/ai/provider_quirks.ts +25 -0
  27. minima_cli-0.5.0/packages/tui/src/ai/providers/_common.ts +50 -0
  28. minima_cli-0.5.0/packages/tui/src/ai/providers/anthropic.ts +277 -0
  29. minima_cli-0.5.0/packages/tui/src/ai/providers/base.ts +50 -0
  30. minima_cli-0.5.0/packages/tui/src/ai/providers/faux.ts +161 -0
  31. minima_cli-0.5.0/packages/tui/src/ai/providers/google.ts +293 -0
  32. minima_cli-0.5.0/packages/tui/src/ai/providers/index.ts +71 -0
  33. minima_cli-0.5.0/packages/tui/src/ai/providers/openai_compat.ts +328 -0
  34. minima_cli-0.5.0/packages/tui/src/ai/registry.ts +44 -0
  35. minima_cli-0.5.0/packages/tui/src/ai/stream.ts +81 -0
  36. minima_cli-0.5.0/packages/tui/src/ai/types.ts +224 -0
  37. minima_cli-0.5.0/packages/tui/src/ai/usage.ts +34 -0
  38. minima_cli-0.5.0/packages/tui/src/cli/main.ts +441 -0
  39. minima_cli-0.5.0/packages/tui/src/index.ts +14 -0
  40. minima_cli-0.5.0/packages/tui/src/minima/client.ts +183 -0
  41. minima_cli-0.5.0/packages/tui/src/minima/config.ts +77 -0
  42. minima_cli-0.5.0/packages/tui/src/minima/errors.ts +37 -0
  43. minima_cli-0.5.0/packages/tui/src/minima/index.ts +31 -0
  44. minima_cli-0.5.0/packages/tui/src/minima/judge.ts +110 -0
  45. minima_cli-0.5.0/packages/tui/src/minima/mapping.ts +105 -0
  46. minima_cli-0.5.0/packages/tui/src/minima/meter.ts +139 -0
  47. minima_cli-0.5.0/packages/tui/src/minima/router.ts +200 -0
  48. minima_cli-0.5.0/packages/tui/src/minima/runtime.ts +273 -0
  49. minima_cli-0.5.0/packages/tui/src/minima/schemas.ts +260 -0
  50. minima_cli-0.5.0/packages/tui/src/run_modes.ts +65 -0
  51. minima_cli-0.5.0/packages/tui/src/session/index.ts +10 -0
  52. minima_cli-0.5.0/packages/tui/src/session/store.ts +275 -0
  53. minima_cli-0.5.0/packages/tui/src/tools/_io.ts +45 -0
  54. minima_cli-0.5.0/packages/tui/src/tools/at_mentions.ts +37 -0
  55. minima_cli-0.5.0/packages/tui/src/tools/bash.ts +122 -0
  56. minima_cli-0.5.0/packages/tui/src/tools/builtin.ts +49 -0
  57. minima_cli-0.5.0/packages/tui/src/tools/edit.ts +55 -0
  58. minima_cli-0.5.0/packages/tui/src/tools/glob.ts +37 -0
  59. minima_cli-0.5.0/packages/tui/src/tools/grep.ts +79 -0
  60. minima_cli-0.5.0/packages/tui/src/tools/index.ts +8 -0
  61. minima_cli-0.5.0/packages/tui/src/tools/ls.ts +39 -0
  62. minima_cli-0.5.0/packages/tui/src/tools/read.ts +39 -0
  63. minima_cli-0.5.0/packages/tui/src/tools/schema.ts +78 -0
  64. minima_cli-0.5.0/packages/tui/src/tools/todowrite.ts +67 -0
  65. minima_cli-0.5.0/packages/tui/src/tools/web_fetch.ts +116 -0
  66. minima_cli-0.5.0/packages/tui/src/tools/write.ts +34 -0
  67. minima_cli-0.5.0/packages/tui/src/tui/app.tsx +1701 -0
  68. minima_cli-0.5.0/packages/tui/src/tui/auth.ts +231 -0
  69. minima_cli-0.5.0/packages/tui/src/tui/compact.ts +62 -0
  70. minima_cli-0.5.0/packages/tui/src/tui/config_store.ts +284 -0
  71. minima_cli-0.5.0/packages/tui/src/tui/context.ts +85 -0
  72. minima_cli-0.5.0/packages/tui/src/tui/messages.tsx +267 -0
  73. minima_cli-0.5.0/packages/tui/src/tui/model-picker.tsx +66 -0
  74. minima_cli-0.5.0/packages/tui/src/tui/mouse-scroll.ts +72 -0
  75. minima_cli-0.5.0/packages/tui/src/tui/permissions.ts +171 -0
  76. minima_cli-0.5.0/packages/tui/src/tui/projects.ts +98 -0
  77. minima_cli-0.5.0/packages/tui/src/tui/status.tsx +104 -0
  78. minima_cli-0.5.0/packages/tui/src/tui/text-input.tsx +104 -0
  79. minima_cli-0.5.0/packages/tui/src/types.d.ts +10 -0
  80. minima_cli-0.5.0/packages/tui/tests/agent.test.ts +227 -0
  81. minima_cli-0.5.0/packages/tui/tests/ai.test.ts +155 -0
  82. minima_cli-0.5.0/packages/tui/tests/anthropic.test.ts +121 -0
  83. minima_cli-0.5.0/packages/tui/tests/auth.test.ts +188 -0
  84. minima_cli-0.5.0/packages/tui/tests/client.test.ts +157 -0
  85. minima_cli-0.5.0/packages/tui/tests/config_store.test.ts +89 -0
  86. minima_cli-0.5.0/packages/tui/tests/google.test.ts +133 -0
  87. minima_cli-0.5.0/packages/tui/tests/minima.test.ts +172 -0
  88. minima_cli-0.5.0/packages/tui/tests/openai_compat.test.ts +177 -0
  89. minima_cli-0.5.0/packages/tui/tests/run_modes.test.ts +145 -0
  90. minima_cli-0.5.0/packages/tui/tests/session.test.ts +119 -0
  91. minima_cli-0.5.0/packages/tui/tests/thinking.test.ts +199 -0
  92. minima_cli-0.5.0/packages/tui/tests/tools.test.ts +157 -0
  93. minima_cli-0.5.0/packages/tui/tsconfig.json +26 -0
  94. minima_cli-0.5.0/packaging/homebrew/README.md +48 -0
  95. minima_cli-0.5.0/packaging/homebrew/render_formula.py +105 -0
  96. {minima_cli-0.4.10 → minima_cli-0.5.0}/pyproject.toml +1 -1
  97. minima_cli-0.5.0/runs/20260624_103307/memory_audit.json +48 -0
  98. minima_cli-0.5.0/runs/20260624_103307/recall_debug.jsonl +8 -0
  99. minima_cli-0.5.0/runs/20260624_103307/tasks.jsonl +7 -0
  100. minima_cli-0.5.0/runs/playground_p1/_manifest.json +55 -0
  101. minima_cli-0.5.0/runs/playground_p1/calibration.json +180 -0
  102. minima_cli-0.5.0/runs/playground_p1/feedback.json +9 -0
  103. minima_cli-0.5.0/runs/playground_p1/health.json +22 -0
  104. minima_cli-0.5.0/runs/playground_p1/models.json +379 -0
  105. minima_cli-0.5.0/runs/playground_p1/recommend.json +200 -0
  106. minima_cli-0.5.0/runs/playground_p1/savings.json +42 -0
  107. minima_cli-0.5.0/runs/playground_p1/strategies.json +1207 -0
  108. minima_cli-0.5.0/runs/playground_p1/workflow.json +414 -0
  109. minima_cli-0.5.0/scripts/test-routing-web.ts +176 -0
  110. minima_cli-0.5.0/scripts/test-routing.sh +66 -0
  111. minima_cli-0.5.0/scripts/test-routing.ts +159 -0
  112. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/config.py +1 -0
  113. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/app.py +25 -9
  114. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/editor.py +5 -4
  115. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_queue.py +30 -8
  116. minima_cli-0.4.10/packaging/homebrew/README.md +0 -82
  117. minima_cli-0.4.10/packaging/homebrew/gen_resources.py +0 -185
  118. minima_cli-0.4.10/packaging/homebrew/minima.rb +0 -339
  119. {minima_cli-0.4.10 → minima_cli-0.5.0}/.dockerignore +0 -0
  120. {minima_cli-0.4.10 → minima_cli-0.5.0}/.env.example +0 -0
  121. {minima_cli-0.4.10 → minima_cli-0.5.0}/.github/workflows/prod.yml +0 -0
  122. {minima_cli-0.4.10 → minima_cli-0.5.0}/.github/workflows/staging.yml +0 -0
  123. {minima_cli-0.4.10 → minima_cli-0.5.0}/AGENTS.md +0 -0
  124. {minima_cli-0.4.10 → minima_cli-0.5.0}/CHANGELOG.md +0 -0
  125. {minima_cli-0.4.10 → minima_cli-0.5.0}/Dockerfile +0 -0
  126. {minima_cli-0.4.10 → minima_cli-0.5.0}/LICENSE +0 -0
  127. {minima_cli-0.4.10 → minima_cli-0.5.0}/README.md +0 -0
  128. {minima_cli-0.4.10 → minima_cli-0.5.0}/agent/task_set.py +0 -0
  129. {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/__init__.py +0 -0
  130. {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/autocapture.py +0 -0
  131. {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/client.py +0 -0
  132. {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/errors.py +0 -0
  133. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/README.md +0 -0
  134. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/api-reference.md +0 -0
  135. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/client-sdk.md +0 -0
  136. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/concepts.md +0 -0
  137. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/configuration.md +0 -0
  138. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/examples.md +0 -0
  139. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/getting-started.md +0 -0
  140. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/goals-feature-plan.md +0 -0
  141. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/harness.md +0 -0
  142. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/multi-tenancy.md +0 -0
  143. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/operations.md +0 -0
  144. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/publishing.md +0 -0
  145. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/seeding.md +0 -0
  146. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/Dockerfile +0 -0
  147. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/astro.config.mjs +0 -0
  148. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/netlify.toml +0 -0
  149. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/nginx.conf +0 -0
  150. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/package-lock.json +0 -0
  151. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/package.json +0 -0
  152. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/public/favicon.svg +0 -0
  153. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/assets/logo.svg +0 -0
  154. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/config.ts +0 -0
  155. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/api-reference.mdx +0 -0
  156. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/client-sdk.mdx +0 -0
  157. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/concepts.mdx +0 -0
  158. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/examples.mdx +0 -0
  159. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/getting-started.mdx +0 -0
  160. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/index.mdx +0 -0
  161. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/styles/custom.css +0 -0
  162. {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/tsconfig.json +0 -0
  163. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/01_quickstart.sh +0 -0
  164. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/02_recommend_and_feedback.py +0 -0
  165. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/03_constraints_and_tradeoff.py +0 -0
  166. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/04_workflow.py +0 -0
  167. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/05_autocapture.py +0 -0
  168. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/06_routed_llm_call.py +0 -0
  169. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/07_multitenant_admin.py +0 -0
  170. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/README.md +0 -0
  171. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_escalation.py +0 -0
  172. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_escalation_learn.py +0 -0
  173. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_gemini.py +0 -0
  174. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_retention.py +0 -0
  175. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_warmup.py +0 -0
  176. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_warmup_vary.py +0 -0
  177. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/harness_warmup.py +0 -0
  178. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/metrics_demo.py +0 -0
  179. {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/smoke_test.py +0 -0
  180. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
  181. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run1.json +0 -0
  182. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run2.json +0 -0
  183. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run3.json +0 -0
  184. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/tasks.jsonl +0 -0
  185. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/REPORT.md +0 -0
  186. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
  187. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run1.json +0 -0
  188. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run2.json +0 -0
  189. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run3.json +0 -0
  190. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run4.json +0 -0
  191. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run5.json +0 -0
  192. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/summary.json +0 -0
  193. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/tasks.jsonl +0 -0
  194. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
  195. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run1.json +0 -0
  196. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run2.json +0 -0
  197. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/tasks.jsonl +0 -0
  198. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/REPORT.md +0 -0
  199. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/memory_audit.json +0 -0
  200. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
  201. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run1.json +0 -0
  202. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run2.json +0 -0
  203. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run3.json +0 -0
  204. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run4.json +0 -0
  205. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run5.json +0 -0
  206. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/summary.json +0 -0
  207. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/tasks.jsonl +0 -0
  208. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/REPORT.md +0 -0
  209. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/memory_audit.json +0 -0
  210. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
  211. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run1.json +0 -0
  212. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run2.json +0 -0
  213. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run3.json +0 -0
  214. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run4.json +0 -0
  215. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run5.json +0 -0
  216. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/summary.json +0 -0
  217. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/tasks.jsonl +0 -0
  218. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
  219. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/summary.json +0 -0
  220. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
  221. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
  222. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
  223. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/summary.json +0 -0
  224. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
  225. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
  226. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
  227. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/summary.json +0 -0
  228. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/REPORT.md +0 -0
  229. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/results.jsonl +0 -0
  230. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/summary.json +0 -0
  231. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
  232. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
  233. {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
  234. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/__init__.py +0 -0
  235. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/__init__.py +0 -0
  236. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/auth.py +0 -0
  237. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/errors.py +0 -0
  238. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/__init__.py +0 -0
  239. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/calibration.py +0 -0
  240. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/feedback.py +0 -0
  241. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/health.py +0 -0
  242. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/models.py +0 -0
  243. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/recommend.py +0 -0
  244. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/savings.py +0 -0
  245. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/strategies.py +0 -0
  246. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/__init__.py +0 -0
  247. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/data/capability_priors.json +0 -0
  248. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/data/model_aliases.json +0 -0
  249. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/merge.py +0 -0
  250. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/refresh.py +0 -0
  251. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/__init__.py +0 -0
  252. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/litellm.py +0 -0
  253. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/openrouter.py +0 -0
  254. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/store.py +0 -0
  255. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/config.py +0 -0
  256. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/deps.py +0 -0
  257. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/__init__.py +0 -0
  258. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/anthropic.py +0 -0
  259. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/base.py +0 -0
  260. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/gemini.py +0 -0
  261. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/registry.py +0 -0
  262. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/logging.py +0 -0
  263. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/main.py +0 -0
  264. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/__init__.py +0 -0
  265. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/adapter.py +0 -0
  266. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/keys.py +0 -0
  267. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/records.py +0 -0
  268. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/threadpool.py +0 -0
  269. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/__init__.py +0 -0
  270. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/calibration.py +0 -0
  271. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/report.py +0 -0
  272. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/savings.py +0 -0
  273. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/__init__.py +0 -0
  274. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/_pg_pool.py +0 -0
  275. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/_redis_client.py +0 -0
  276. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/aggregate.py +0 -0
  277. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/classify.py +0 -0
  278. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/decisionlog.py +0 -0
  279. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/durablerefs.py +0 -0
  280. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/engine.py +0 -0
  281. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/escalation.py +0 -0
  282. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/propensity.py +0 -0
  283. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/recstore.py +0 -0
  284. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/score.py +0 -0
  285. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/types.py +0 -0
  286. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/__init__.py +0 -0
  287. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/common.py +0 -0
  288. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/feedback.py +0 -0
  289. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/models_catalog.py +0 -0
  290. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/recommend.py +0 -0
  291. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/savings.py +0 -0
  292. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/strategies.py +0 -0
  293. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/workflow.py +0 -0
  294. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/__init__.py +0 -0
  295. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/items.py +0 -0
  296. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/llmrouterbench.py +0 -0
  297. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/routerbench.py +0 -0
  298. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/run_seed.py +0 -0
  299. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/synthetic.py +0 -0
  300. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/__init__.py +0 -0
  301. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/context.py +0 -0
  302. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/passthrough.py +0 -0
  303. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/version.py +0 -0
  304. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/LICENSE_PI +0 -0
  305. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/__init__.py +0 -0
  306. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/__init__.py +0 -0
  307. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/agent.py +0 -0
  308. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/events.py +0 -0
  309. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/loop.py +0 -0
  310. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/state.py +0 -0
  311. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/tools.py +0 -0
  312. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/__init__.py +0 -0
  313. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/compat.py +0 -0
  314. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/errors.py +0 -0
  315. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/events.py +0 -0
  316. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/openrouter_catalog.py +0 -0
  317. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/provider_catalog.py +0 -0
  318. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/provider_quirks.py +0 -0
  319. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/__init__.py +0 -0
  320. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/_common.py +0 -0
  321. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/anthropic.py +0 -0
  322. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/base.py +0 -0
  323. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/faux.py +0 -0
  324. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/google.py +0 -0
  325. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/openai_compat.py +0 -0
  326. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/registry.py +0 -0
  327. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/stream.py +0 -0
  328. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/tools.py +0 -0
  329. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/types.py +0 -0
  330. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/usage.py +0 -0
  331. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/__init__.py +0 -0
  332. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/cache.py +0 -0
  333. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/goals.py +0 -0
  334. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/judge.py +0 -0
  335. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/mapping.py +0 -0
  336. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/meter.py +0 -0
  337. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/router.py +0 -0
  338. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/runtime.py +0 -0
  339. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/signals.py +0 -0
  340. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/__init__.py +0 -0
  341. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/format.py +0 -0
  342. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/store.py +0 -0
  343. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tasks/__init__.py +0 -0
  344. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tasks/task_set.py +0 -0
  345. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/__init__.py +0 -0
  346. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/_io.py +0 -0
  347. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/bash.py +0 -0
  348. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/builtin.py +0 -0
  349. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/edit.py +0 -0
  350. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/find.py +0 -0
  351. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/grep.py +0 -0
  352. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/ls.py +0 -0
  353. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/read.py +0 -0
  354. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/tasks.py +0 -0
  355. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/write.py +0 -0
  356. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/__init__.py +0 -0
  357. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/analytics.py +0 -0
  358. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/bridge.py +0 -0
  359. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/cli.py +0 -0
  360. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/clipboard.py +0 -0
  361. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/commands.py +0 -0
  362. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/compaction.py +0 -0
  363. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/config_cli.py +0 -0
  364. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/config_store.py +0 -0
  365. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/context.py +0 -0
  366. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/customize.py +0 -0
  367. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/diff.py +0 -0
  368. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/editor.py +0 -0
  369. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/extensions.py +0 -0
  370. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/extra_models.py +0 -0
  371. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/history.py +0 -0
  372. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/mubit.py +0 -0
  373. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/overlays.py +0 -0
  374. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/packages.py +0 -0
  375. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/run_modes.py +0 -0
  376. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/theme.py +0 -0
  377. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/welcome.py +0 -0
  378. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/__init__.py +0 -0
  379. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/banner.py +0 -0
  380. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/footer.py +0 -0
  381. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/messages.py +0 -0
  382. {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/status.py +0 -0
  383. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/__init__.py +0 -0
  384. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/conftest.py +0 -0
  385. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/BENCHMARKS.md +0 -0
  386. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/CRITERIA.md +0 -0
  387. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/RESULTS.md +0 -0
  388. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/__init__.py +0 -0
  389. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/harness.py +0 -0
  390. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/llmrouterbench_config.py +0 -0
  391. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
  392. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/test_routerbench_savings.py +0 -0
  393. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/factories.py +0 -0
  394. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/__init__.py +0 -0
  395. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/__init__.py +0 -0
  396. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_format.py +0 -0
  397. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_manager.py +0 -0
  398. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_store.py +0 -0
  399. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_agent_loop.py +0 -0
  400. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_anthropic_mapping.py +0 -0
  401. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_auth_reroute.py +0 -0
  402. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_cache.py +0 -0
  403. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_catalog_overlay.py +0 -0
  404. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_common_and_wire.py +0 -0
  405. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_compat.py +0 -0
  406. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_errors.py +0 -0
  407. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_goals.py +0 -0
  408. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_google_mapping.py +0 -0
  409. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_judge.py +0 -0
  410. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_live.py +0 -0
  411. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_mapping.py +0 -0
  412. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_minima_e2e.py +0 -0
  413. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_openai_compat_sse.py +0 -0
  414. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_openrouter_catalog.py +0 -0
  415. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase0_smoke.py +0 -0
  416. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_a.py +0 -0
  417. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_b.py +0 -0
  418. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_c.py +0 -0
  419. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_catalog.py +0 -0
  420. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_quirks.py +0 -0
  421. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_registration.py +0 -0
  422. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_wiring.py +0 -0
  423. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_runtime.py +0 -0
  424. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_signals.py +0 -0
  425. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/__init__.py +0 -0
  426. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_agent_smoke.py +0 -0
  427. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_bash.py +0 -0
  428. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_builtin.py +0 -0
  429. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_edit.py +0 -0
  430. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_find.py +0 -0
  431. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_grep.py +0 -0
  432. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_io.py +0 -0
  433. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_ls.py +0 -0
  434. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_read.py +0 -0
  435. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_write.py +0 -0
  436. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/__init__.py +0 -0
  437. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_analytics.py +0 -0
  438. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_app_pilot.py +0 -0
  439. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_bridge.py +0 -0
  440. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_clipboard.py +0 -0
  441. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_command_popup.py +0 -0
  442. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_commands.py +0 -0
  443. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_config.py +0 -0
  444. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_context.py +0 -0
  445. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_customize.py +0 -0
  446. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_decision_card.py +0 -0
  447. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_diff.py +0 -0
  448. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_editor.py +0 -0
  449. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_editor_widget.py +0 -0
  450. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_export.py +0 -0
  451. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_extensions.py +0 -0
  452. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_goals_tui.py +0 -0
  453. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_history_sessions.py +0 -0
  454. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_messages.py +0 -0
  455. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_mouse_copy.py +0 -0
  456. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_mubit.py +0 -0
  457. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_optimize.py +0 -0
  458. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_overlays.py +0 -0
  459. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p2.py +0 -0
  460. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p3.py +0 -0
  461. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p5.py +0 -0
  462. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_permissions.py +0 -0
  463. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_predictability.py +0 -0
  464. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_prompt_layers.py +0 -0
  465. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_run_modes.py +0 -0
  466. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_status.py +0 -0
  467. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_status_bar.py +0 -0
  468. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_theme.py +0 -0
  469. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_thoughts.py +0 -0
  470. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_tool_render.py +0 -0
  471. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_ux.py +0 -0
  472. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_welcome.py +0 -0
  473. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_widgets.py +0 -0
  474. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_escalation_reasoner.py +0 -0
  475. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_feedback_loop.py +0 -0
  476. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_lesson_promotion.py +0 -0
  477. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_measurement_api.py +0 -0
  478. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_observed_cost_ranking.py +0 -0
  479. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_recommend_api.py +0 -0
  480. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_strategies_api.py +0 -0
  481. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_workflow_models_health.py +0 -0
  482. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
  483. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_escalation_fixes.py +0 -0
  484. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_full_surface_live.py +0 -0
  485. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_mubit_roundtrip.py +0 -0
  486. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_phase3_live.py +0 -0
  487. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_reasoner_live.py +0 -0
  488. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_recall_params_live.py +0 -0
  489. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_aggregate.py +0 -0
  490. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_aggregate_decay.py +0 -0
  491. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_autocapture.py +0 -0
  492. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_calibration_fit.py +0 -0
  493. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_classify_keys.py +0 -0
  494. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_cluster.py +0 -0
  495. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_collapse_guard.py +0 -0
  496. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_cost_band.py +0 -0
  497. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_decisionlog.py +0 -0
  498. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_escalation.py +0 -0
  499. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_exploration.py +0 -0
  500. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_ipw.py +0 -0
  501. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_iterations.py +0 -0
  502. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_latency_quality.py +0 -0
  503. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_lever_cost.py +0 -0
  504. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_metrics.py +0 -0
  505. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_metrics_demo.py +0 -0
  506. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_neighbor_classify.py +0 -0
  507. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_reasoner.py +0 -0
  508. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_records_catalog.py +0 -0
  509. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_recstore_sqlite.py +0 -0
  510. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_score.py +0 -0
  511. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_shadow_bandit.py +0 -0
  512. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_store_backends.py +0 -0
  513. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_strategies.py +0 -0
  514. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_tenancy.py +0 -0
  515. {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_thompson.py +0 -0
  516. {minima_cli-0.4.10 → minima_cli-0.5.0}/uv.lock +0 -0
@@ -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
@@ -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.10
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
@@ -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
+ }