minima-cli 0.4.9__py3-none-any.whl

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 (161) hide show
  1. minima/__init__.py +5 -0
  2. minima/api/__init__.py +1 -0
  3. minima/api/auth.py +39 -0
  4. minima/api/errors.py +40 -0
  5. minima/api/routers/__init__.py +1 -0
  6. minima/api/routers/calibration.py +50 -0
  7. minima/api/routers/feedback.py +279 -0
  8. minima/api/routers/health.py +50 -0
  9. minima/api/routers/models.py +42 -0
  10. minima/api/routers/recommend.py +66 -0
  11. minima/api/routers/savings.py +55 -0
  12. minima/api/routers/strategies.py +33 -0
  13. minima/catalog/__init__.py +1 -0
  14. minima/catalog/data/capability_priors.json +210 -0
  15. minima/catalog/data/model_aliases.json +12 -0
  16. minima/catalog/merge.py +69 -0
  17. minima/catalog/refresh.py +54 -0
  18. minima/catalog/sources/__init__.py +1 -0
  19. minima/catalog/sources/litellm.py +19 -0
  20. minima/catalog/sources/openrouter.py +25 -0
  21. minima/catalog/store.py +86 -0
  22. minima/config.py +288 -0
  23. minima/deps.py +35 -0
  24. minima/llm/__init__.py +1 -0
  25. minima/llm/anthropic.py +106 -0
  26. minima/llm/base.py +196 -0
  27. minima/llm/gemini.py +124 -0
  28. minima/llm/registry.py +54 -0
  29. minima/logging.py +28 -0
  30. minima/main.py +109 -0
  31. minima/memory/__init__.py +1 -0
  32. minima/memory/adapter.py +572 -0
  33. minima/memory/keys.py +83 -0
  34. minima/memory/records.py +190 -0
  35. minima/memory/threadpool.py +41 -0
  36. minima/metrics/__init__.py +1 -0
  37. minima/metrics/calibration.py +415 -0
  38. minima/metrics/report.py +116 -0
  39. minima/metrics/savings.py +98 -0
  40. minima/recommender/__init__.py +1 -0
  41. minima/recommender/_pg_pool.py +38 -0
  42. minima/recommender/_redis_client.py +32 -0
  43. minima/recommender/aggregate.py +157 -0
  44. minima/recommender/classify.py +165 -0
  45. minima/recommender/decisionlog.py +505 -0
  46. minima/recommender/durablerefs.py +312 -0
  47. minima/recommender/engine.py +997 -0
  48. minima/recommender/escalation.py +83 -0
  49. minima/recommender/propensity.py +189 -0
  50. minima/recommender/recstore.py +368 -0
  51. minima/recommender/score.py +318 -0
  52. minima/recommender/types.py +166 -0
  53. minima/schemas/__init__.py +1 -0
  54. minima/schemas/common.py +73 -0
  55. minima/schemas/feedback.py +34 -0
  56. minima/schemas/models_catalog.py +36 -0
  57. minima/schemas/recommend.py +104 -0
  58. minima/schemas/savings.py +39 -0
  59. minima/schemas/strategies.py +57 -0
  60. minima/schemas/workflow.py +43 -0
  61. minima/seeding/__init__.py +1 -0
  62. minima/seeding/items.py +42 -0
  63. minima/seeding/llmrouterbench.py +232 -0
  64. minima/seeding/routerbench.py +141 -0
  65. minima/seeding/run_seed.py +56 -0
  66. minima/seeding/synthetic.py +70 -0
  67. minima/tenancy/__init__.py +8 -0
  68. minima/tenancy/context.py +37 -0
  69. minima/tenancy/passthrough.py +110 -0
  70. minima/version.py +3 -0
  71. minima_cli-0.4.9.dist-info/METADATA +275 -0
  72. minima_cli-0.4.9.dist-info/RECORD +161 -0
  73. minima_cli-0.4.9.dist-info/WHEEL +4 -0
  74. minima_cli-0.4.9.dist-info/entry_points.txt +5 -0
  75. minima_cli-0.4.9.dist-info/licenses/LICENSE +295 -0
  76. minima_client/__init__.py +19 -0
  77. minima_client/autocapture.py +101 -0
  78. minima_client/client.py +301 -0
  79. minima_client/errors.py +23 -0
  80. minima_harness/LICENSE_PI +32 -0
  81. minima_harness/__init__.py +16 -0
  82. minima_harness/agent/__init__.py +72 -0
  83. minima_harness/agent/agent.py +276 -0
  84. minima_harness/agent/events.py +124 -0
  85. minima_harness/agent/loop.py +311 -0
  86. minima_harness/agent/state.py +79 -0
  87. minima_harness/agent/tools.py +97 -0
  88. minima_harness/ai/__init__.py +66 -0
  89. minima_harness/ai/compat.py +71 -0
  90. minima_harness/ai/errors.py +96 -0
  91. minima_harness/ai/events.py +117 -0
  92. minima_harness/ai/openrouter_catalog.py +153 -0
  93. minima_harness/ai/provider_catalog.py +299 -0
  94. minima_harness/ai/provider_quirks.py +37 -0
  95. minima_harness/ai/providers/__init__.py +75 -0
  96. minima_harness/ai/providers/_common.py +48 -0
  97. minima_harness/ai/providers/anthropic.py +290 -0
  98. minima_harness/ai/providers/base.py +65 -0
  99. minima_harness/ai/providers/faux.py +173 -0
  100. minima_harness/ai/providers/google.py +221 -0
  101. minima_harness/ai/providers/openai_compat.py +278 -0
  102. minima_harness/ai/registry.py +184 -0
  103. minima_harness/ai/stream.py +82 -0
  104. minima_harness/ai/tools.py +51 -0
  105. minima_harness/ai/types.py +204 -0
  106. minima_harness/ai/usage.py +41 -0
  107. minima_harness/minima/__init__.py +40 -0
  108. minima_harness/minima/cache.py +102 -0
  109. minima_harness/minima/config.py +85 -0
  110. minima_harness/minima/goals.py +226 -0
  111. minima_harness/minima/judge.py +144 -0
  112. minima_harness/minima/mapping.py +147 -0
  113. minima_harness/minima/meter.py +143 -0
  114. minima_harness/minima/router.py +220 -0
  115. minima_harness/minima/runtime.py +544 -0
  116. minima_harness/minima/signals.py +195 -0
  117. minima_harness/session/__init__.py +14 -0
  118. minima_harness/session/format.py +35 -0
  119. minima_harness/session/store.py +236 -0
  120. minima_harness/tasks/__init__.py +17 -0
  121. minima_harness/tasks/task_set.py +78 -0
  122. minima_harness/tools/__init__.py +7 -0
  123. minima_harness/tools/_io.py +34 -0
  124. minima_harness/tools/bash.py +70 -0
  125. minima_harness/tools/builtin.py +23 -0
  126. minima_harness/tools/edit.py +50 -0
  127. minima_harness/tools/find.py +38 -0
  128. minima_harness/tools/grep.py +73 -0
  129. minima_harness/tools/ls.py +35 -0
  130. minima_harness/tools/read.py +38 -0
  131. minima_harness/tools/tasks.py +75 -0
  132. minima_harness/tools/write.py +36 -0
  133. minima_harness/tui/__init__.py +3 -0
  134. minima_harness/tui/analytics.py +111 -0
  135. minima_harness/tui/app.py +1927 -0
  136. minima_harness/tui/bridge.py +103 -0
  137. minima_harness/tui/cli.py +227 -0
  138. minima_harness/tui/clipboard.py +60 -0
  139. minima_harness/tui/commands.py +49 -0
  140. minima_harness/tui/compaction.py +17 -0
  141. minima_harness/tui/config_cli.py +141 -0
  142. minima_harness/tui/config_store.py +237 -0
  143. minima_harness/tui/context.py +93 -0
  144. minima_harness/tui/customize.py +95 -0
  145. minima_harness/tui/diff.py +53 -0
  146. minima_harness/tui/editor.py +43 -0
  147. minima_harness/tui/extensions.py +84 -0
  148. minima_harness/tui/extra_models.py +52 -0
  149. minima_harness/tui/history.py +71 -0
  150. minima_harness/tui/mubit.py +295 -0
  151. minima_harness/tui/overlays.py +593 -0
  152. minima_harness/tui/packages.py +59 -0
  153. minima_harness/tui/run_modes.py +66 -0
  154. minima_harness/tui/theme.py +77 -0
  155. minima_harness/tui/welcome.py +83 -0
  156. minima_harness/tui/widgets/__init__.py +3 -0
  157. minima_harness/tui/widgets/banner.py +38 -0
  158. minima_harness/tui/widgets/editor.py +83 -0
  159. minima_harness/tui/widgets/footer.py +73 -0
  160. minima_harness/tui/widgets/messages.py +151 -0
  161. minima_harness/tui/widgets/status.py +57 -0
@@ -0,0 +1,161 @@
1
+ minima_client/__init__.py,sha256=KxDqooj11fWajbAhUeL4nXtk_29LjIlNe3Z5t83LN3I,528
2
+ minima_client/autocapture.py,sha256=XDdM8kM3zRJavIJjNn51s05_kkyfWEmlrzdJGsoAMw8,3740
3
+ minima_client/client.py,sha256=4O4ADwaJjyX90oXnl_U2bc1n_VsVqE70Bc4CRiiyE6c,10380
4
+ minima_client/errors.py,sha256=pwC_DIYz2PWRvlqBHuSw-JhT49P__yMsDi7LGJqRF0I,595
5
+ minima/__init__.py,sha256=7bX_2TQycFgsk7qnxQM_Aku9_S9dtXOiEktSEUcd9B0,137
6
+ minima/config.py,sha256=TwZpFkD5qwVlaFRpgM2SXL1c2xox0RQvL2u5c8ztSNM,16326
7
+ minima/deps.py,sha256=rWTOLSeXzERIgKMIqOJHD-PKtJR38OrSCG4kKqPhVds,931
8
+ minima/logging.py,sha256=C_GVs_GIYwQWCm2G_YM2_sdnpeaJ981efVTR7g4Tx3U,877
9
+ minima/main.py,sha256=RTLCmQZBhLR-Fly80_n8Xtyqvwz2wcjx4-lgbd89XJQ,3793
10
+ minima/version.py,sha256=dhwZZwDKpbos-E10pVVhXXEiH5hkMXZz7GDGXwatVBk,147
11
+ minima/api/__init__.py,sha256=a4D4j9ptnoxjkWHgTkDdsneWwOxH54YvjfuCBuy7otU,22
12
+ minima/api/auth.py,sha256=TnY4AbdYD0g0AP1-jkqTgUqSEExHZpR1qyUu4wKJpyM,1232
13
+ minima/api/errors.py,sha256=O05swHiPZbV9n47pzpACC7QDTPpcrB3sOjJPknA9biU,1386
14
+ minima/api/routers/__init__.py,sha256=Ub-DRwFo1wW-s4dEFkzAcRiWmUeM24zuvSj9kn8zIUg,25
15
+ minima/api/routers/calibration.py,sha256=wjAfOwE-_neqTex34jIueRRWlGHMxlie8xbRdA5Bulo,1806
16
+ minima/api/routers/feedback.py,sha256=vzCNeWarW-BcLRr9_y2ryyozzF3PS4qHWRM8f9Wyeps,11210
17
+ minima/api/routers/health.py,sha256=Mw5dCaajfbEhKPoCssRr5CLA-Ivm_Dt0GgVfhrPFKqw,1754
18
+ minima/api/routers/models.py,sha256=AWX43-YvSE7ZQm6oa8HMfOKkCc4i7L86m1MyjBzjg6U,1424
19
+ minima/api/routers/recommend.py,sha256=BPPzfJECZdkm-HqMuNR-7nR72I7reGUw0ZyU041lnfk,2189
20
+ minima/api/routers/savings.py,sha256=NNiYtT-A3ww8U-WEoGF7J3f9GP_x5drVW-5yqo5KlkU,1847
21
+ minima/api/routers/strategies.py,sha256=3boC6ihoLTsXFQhVTTdr4SI1YBVa6dKGAkFwahSTuDM,1250
22
+ minima/catalog/__init__.py,sha256=dryOqW6VtU2Npy1_6HCk3SPoikGj1j1llvOIMXedSw0,72
23
+ minima/catalog/merge.py,sha256=GgrZ6x5HR9m2fPbfqRBFBjHSQRXgfeb1-lP8WWMKOag,2318
24
+ minima/catalog/refresh.py,sha256=r_H700LFJGzUDybuCIMKYIAD9bio6kpJ5O5a21yVltI,1936
25
+ minima/catalog/store.py,sha256=HrP22xXswcADStLiP1sk2CViL090q_hC1QNkxrReYa0,2902
26
+ minima/catalog/data/capability_priors.json,sha256=4z8gR5C7gf2qTpZSOsCWudOyQKWvq-nGbNoMIRX9gf4,8207
27
+ minima/catalog/data/model_aliases.json,sha256=xW8Ul6QOZ-herucrPsv82EszD7stkcjyDozqhSkHMwg,935
28
+ minima/catalog/sources/__init__.py,sha256=ek5isEnq6mfXhiQZu8BajMrGtrZrQ3y6xU65euaAceg,60
29
+ minima/catalog/sources/litellm.py,sha256=8s2zgKzRo7OGY-zz6sacekEKAVhYi64Kq9VIHAIXN48,611
30
+ minima/catalog/sources/openrouter.py,sha256=ANRI-Tlql2tobgqI5pgpAZQ0A1oUL_umR8WT0Glh0Kc,909
31
+ minima/llm/__init__.py,sha256=seSphXZNwpZOgsTBU_iREqYILk75ySeYvpcHyncOfMI,88
32
+ minima/llm/anthropic.py,sha256=SLIyV-rTM3kDCfpHbO2gsUbAbImN7B6F8-WZf50oFCI,3762
33
+ minima/llm/base.py,sha256=9IcoSmwdX2FcujfEpllzC5ZUT7MkwhkqMj0NUPJTLBk,6423
34
+ minima/llm/gemini.py,sha256=JQgbDOZpR4bcPSonaNjnRJpwB1YeqjEmdL1YQXWocpI,4318
35
+ minima/llm/registry.py,sha256=xV5rcy9wElbH8bvTAXtm0QjUgwEs1pcoMxutELGNW6Q,2102
36
+ minima/memory/__init__.py,sha256=TkF9K3C9ZzodQ_ftFlUeZVeaOvAZ0buwYSGAjXoRyM0,76
37
+ minima/memory/adapter.py,sha256=ecMzq_KacL8tpHsQknOKZRZQ7zom_yqyIgGaCKq1pfs,20554
38
+ minima/memory/keys.py,sha256=eSPL18IThhu8MblTG3QjqcZ1zr3ZtXbIkxWnnTsHtBA,3508
39
+ minima/memory/records.py,sha256=XsfSZgOTaCwe2U4Q-bNkAmwR61X1B5nN1RV4j57Ul8E,6804
40
+ minima/memory/threadpool.py,sha256=EBEr3t8EwI-LBWSGMH0SQ2Y8xffkBkEn09GmAOohNG4,1413
41
+ minima/metrics/__init__.py,sha256=2MRn9QCjPwWzh3lsFJd5EmGfYpYcyqSc7uJlw61GQWc,74
42
+ minima/metrics/calibration.py,sha256=6M4xm1dsf1uynoh1wO66RK29HErAnUCO6BAJZX7toLQ,15465
43
+ minima/metrics/report.py,sha256=r75S_RVVEtTksxSfW9_ZEXHLJ6uHTTCZC_ece72Sunc,4228
44
+ minima/metrics/savings.py,sha256=rP5W-4TkBXhW3VYskKYS85kwJ-D4wk04ANW7rTUA3I0,3855
45
+ minima/recommender/__init__.py,sha256=R-WTyKwte17I48HXC_eGzl5lpaVFhYExPLBQ34hk6Uc,87
46
+ minima/recommender/_pg_pool.py,sha256=OnoKhgEDi4xYaT48Mt1ELpnieWdBr4bIieeUk3c_sRY,1223
47
+ minima/recommender/_redis_client.py,sha256=ltdJlWzhDcvbWYI-MbqcGGYhpXbOL4rs57_RwnmNn6s,971
48
+ minima/recommender/aggregate.py,sha256=n4hg3qDMcta-BofEoelEYLYetQhKzvFXyCYpp9C-yZY,5694
49
+ minima/recommender/classify.py,sha256=uVYtLY98e9KnocrY3CTcJjUEyZ476hfl4z-kIiHGSrc,5047
50
+ minima/recommender/decisionlog.py,sha256=aBJxmpEJpQ5xEZTfGnUzMaB1v9WpByQeNMNCqKMY4wE,18441
51
+ minima/recommender/durablerefs.py,sha256=eWmY_zofTkAMpHEOa4MmVIIQsVc39QIT8z0s8Zy6FL8,10836
52
+ minima/recommender/engine.py,sha256=RH6R7Tc4CW6-jFJkiVSspCFhSFRgj9XJ0Kdu2yddBMc,43952
53
+ minima/recommender/escalation.py,sha256=ttnKNSlG33s5mhWEy1jUM6DBpjLQtPnv23GQKnuDUvI,3106
54
+ minima/recommender/propensity.py,sha256=1c3GnwbhCNGLat4yRoYpINEbdN5NxBtSFGKq8RgdJ14,7453
55
+ minima/recommender/recstore.py,sha256=1ynR9vJDaZGza30vaVlMw_h6orqxsaigvdT2dzfMLn0,13765
56
+ minima/recommender/score.py,sha256=SMVb2LYIvcWnt3yaxt0GDvYRaDCG7E_LeOx6Oty0yt4,13530
57
+ minima/recommender/types.py,sha256=UDzTyQY0EYeJBbYMwkBi8vnO0SnRHu6AuVz2lyPTpa8,7392
58
+ minima/schemas/__init__.py,sha256=xAQrXMcO2Gg6el9cgWsKe6qL4d8gqXLRFpzu1Lmpvso,53
59
+ minima/schemas/common.py,sha256=CX_C2muTycy9OS-eGIuYB4xYCpSfPABkHvl3UhZ3MT8,2288
60
+ minima/schemas/feedback.py,sha256=eiEyjFEY6BEBozlJOV1W8U3NnTnuGJSq74ENSAlJLYo,1257
61
+ minima/schemas/models_catalog.py,sha256=FlI5it5cPp8Vr3fgI41sqk1Js_1yfanTFfSCzvF67nU,1054
62
+ minima/schemas/recommend.py,sha256=Xaj0BbX6xKaEomK3OVaJeY9z2eIpf1GuG5a-rkSC7Y0,3935
63
+ minima/schemas/savings.py,sha256=3QztvlJYaxMn2g6ZDRgTOrqOMFCMFemQ75DRBH8RDik,1188
64
+ minima/schemas/strategies.py,sha256=8cE-rkhwUK6DGxK8QW5AT-qZDS37rq-oLOZPz1m-Cac,2125
65
+ minima/schemas/workflow.py,sha256=CEJV_DujlL4cd_Eyt_aUZJv2rgB_xt0FG7ZX35GEqtc,1402
66
+ minima/seeding/__init__.py,sha256=qDu56q2ozmbMNb3CWgz6BBbqEdLryma1jRKgVRGZiV0,59
67
+ minima/seeding/items.py,sha256=RcdtgSwmPNDqctkH6Lz-aZIvlSeAKg5zsRF1vhygyOg,1299
68
+ minima/seeding/llmrouterbench.py,sha256=J-5E0whRyibSBiaDjuc_OSltMfnjcvFEcl0DLzj03LA,9793
69
+ minima/seeding/routerbench.py,sha256=H8F1mldAMChnz4kq9VfLefyqzMD54rgrmgDcljkLrRI,5027
70
+ minima/seeding/run_seed.py,sha256=PAiiC_yaqQdhtVNv-JfTyWYfmlY7A8Q5BsWP02gcsLE,1946
71
+ minima/seeding/synthetic.py,sha256=zbiViR3JiDCbH2sYNTIUtISOgciy85UL7e5CjWqlla4,2411
72
+ minima/tenancy/__init__.py,sha256=b-9151ePGl3HMMLooO5tSQHTSu0rPDd8L1FG8bScjDU,274
73
+ minima/tenancy/context.py,sha256=J6Mlp51WCPZ_18Nq6qGXBFp1oYJAV_De9fr92kpQ5gE,1414
74
+ minima/tenancy/passthrough.py,sha256=2NAaWZLgxu5bIsLCQ3Igv_qbM3NFFNCNCCor2mt6BAM,4251
75
+ minima_harness/LICENSE_PI,sha256=HW5wVJdLWayJVK0Df1dWdXMlWDaLa0WCfEefHBFJBMk,1601
76
+ minima_harness/__init__.py,sha256=79og1qhJ-2fxPzptZEOrxjcS90QmP7E0foLAUcvDkSE,680
77
+ minima_harness/agent/__init__.py,sha256=s1yaW3zpUdjDgJvah_E6nalc97SOnCJ5ORXviBTPxNY,1681
78
+ minima_harness/agent/agent.py,sha256=GOh393_KXWqhuINaSZOKU_pEBCsHIZpnf--rxTTGpS0,9779
79
+ minima_harness/agent/events.py,sha256=CyRgywJ7d4S0pALqFotEWD1_afM_vaoR9z7vLvVDR4A,3329
80
+ minima_harness/agent/loop.py,sha256=3L9CzX6jMur2aHkF50_2Oh440Hr5Jm-JQJvhrELQYFI,12048
81
+ minima_harness/agent/state.py,sha256=8Z7eus1fCJ1MUc89kZ3dHyoPEwGNVVf-QicoTrMFrqo,3248
82
+ minima_harness/agent/tools.py,sha256=-H_9sCZNGmnPv2a3cPYiB6Lse69yqORMQzEMsqiSvMA,2912
83
+ minima_harness/ai/__init__.py,sha256=6c-T0botpXGNqRsGCo3DxyKH3YqD96NHj4GmQlaI7C4,1279
84
+ minima_harness/ai/compat.py,sha256=iDsAhzWYWp9Ew8ZiUzq6Q1xBDtUUGzc0iUDqkzkFNfs,2761
85
+ minima_harness/ai/errors.py,sha256=yb-dNvLhOkncPJnz1o-26bPUwuWS2uTAbY9viA3ysUU,4823
86
+ minima_harness/ai/events.py,sha256=IgoSTLMdCFVSH4a2AacHS9EfTDZz9CISRVvc8kMGCwc,3065
87
+ minima_harness/ai/openrouter_catalog.py,sha256=G946pM4-MhK479CoLZCc2w2er-KPtiZUH1E7882ZAFI,5762
88
+ minima_harness/ai/provider_catalog.py,sha256=ZrC33boEK4SmtLYxhLj34j08acxscbpN-ENDMtRzbhI,15412
89
+ minima_harness/ai/provider_quirks.py,sha256=qfZrb08Z5lFRe-YMnq_IcYch2dx8NcV6Vp4qBhX3IWs,1602
90
+ minima_harness/ai/registry.py,sha256=gXC3Uj0Hazsln1CvZZLJmKtKQ62_xZ6Ou4ozKWuyjO0,5621
91
+ minima_harness/ai/stream.py,sha256=Q2iYbjnYpHVQzjPv6UCVqHTebJ9XJys7hh6w5Tcs1XI,2691
92
+ minima_harness/ai/tools.py,sha256=3cHSVoyzZK2ez1TvzziW4DevKbU554z4qx8e9zoIUcw,1720
93
+ minima_harness/ai/types.py,sha256=md4KQwuylgIVr13uuWh4ofNoIQKn0hCziSy7Lm44ubA,6181
94
+ minima_harness/ai/usage.py,sha256=bIf2I16xD0m31a5NOYimU3hDJSDKCSvG5YcWLHUJVPw,1680
95
+ minima_harness/ai/providers/__init__.py,sha256=w8Gf6M7sVWTTxYapMr9jG3iYVsjJXq8rjVnss9aSUGU,2345
96
+ minima_harness/ai/providers/_common.py,sha256=ciDaWGastTCXHnO0k14VXcYdEbUGOWDDOZZ8nrre2pM,1588
97
+ minima_harness/ai/providers/anthropic.py,sha256=MPJuYqwrE5YKVIzdtZFH9kkPNxw6AoRRKIm6lo2Qgl0,12636
98
+ minima_harness/ai/providers/base.py,sha256=8LSQHbExah6YfO8bnDTsKQj7qG9rRIJXvma-Do1N_68,1934
99
+ minima_harness/ai/providers/faux.py,sha256=EZ8i0jLc9eWnxokAUvqHB12FSgc6AZKsduO9fDJPtT8,5400
100
+ minima_harness/ai/providers/google.py,sha256=qE6LajgFFTj_Z7zgaTa_aLDUn7ttIO8F-9XNpPGKMlA,9403
101
+ minima_harness/ai/providers/openai_compat.py,sha256=5H6eGOjcJJIoK8R13o-EMXVXgGvNJ_EGRCarsDtgmHs,10502
102
+ minima_harness/minima/__init__.py,sha256=ctC3TU9qiyL1XNtwfXRAvv_6yZ94aWL0gjeu6HL7lM4,1245
103
+ minima_harness/minima/cache.py,sha256=TxVtM3nUkRL5JQ4ylYTLEZLumQjY2gEisebDFSUVOO8,3400
104
+ minima_harness/minima/config.py,sha256=RIqTctJGZLhVkDo89vnO_MPviayvWKGzz_4PTAQaD9g,3967
105
+ minima_harness/minima/goals.py,sha256=LKUvRc4ZtoIIZ79PJT2ortbzJzlk3iJeU1jwjG2wJ4I,8894
106
+ minima_harness/minima/judge.py,sha256=1Wm813jAUWuEckrVabvdxyDOZRedKX9kgdxJiXkV34A,5564
107
+ minima_harness/minima/mapping.py,sha256=m87yRaoQUjTSWNWhN49LlHdpC6R1SMNjXQtgktIjH0o,6191
108
+ minima_harness/minima/meter.py,sha256=Jwm3Kbcpd6-za_TvtejzMVzMwGAHx8e3V-8ctTKTwoY,4617
109
+ minima_harness/minima/router.py,sha256=hGP1BeNJjxc-IbWcoZj1jslmtS20Nue0HRURxsiI1Ec,8818
110
+ minima_harness/minima/runtime.py,sha256=HrGYDWi-nlf9BgjiswtOp94mulAtzDl7Vt_bReKARyw,26356
111
+ minima_harness/minima/signals.py,sha256=Mu2r7RejaYAQQMI_h7VJvSXq0_NW2qRBWXZtzyVbVPA,7117
112
+ minima_harness/session/__init__.py,sha256=pKzTYAKoCuiF1JcNkeSJXeyqYE12G1lnaSjNtfwTMGw,379
113
+ minima_harness/session/format.py,sha256=k3loHTx4kXKYax0nPId9ui8fwAtoSripf9B4totsGsc,817
114
+ minima_harness/session/store.py,sha256=mt2Nw__Y38ycFIlF5RMKa2wzY0_xnGr6SJlqNllL2kc,8610
115
+ minima_harness/tasks/__init__.py,sha256=g2YogJjaZ5MiZrOpiL26rCscAKPQCEVHH-yxU27dkos,298
116
+ minima_harness/tasks/task_set.py,sha256=j3uV8oyTCo6hPXUoFj4NHYcJYa2PFMO83JFYaStlw58,2935
117
+ minima_harness/tools/__init__.py,sha256=bSC_-yAOvYi2e1NcHYTSZUNBAbdWOZmJgowWuWF9tyc,218
118
+ minima_harness/tools/_io.py,sha256=dbjEdgGHObclRuWBtPxUT_ZLupJNiQp4hY1SgP-zhqc,1081
119
+ minima_harness/tools/bash.py,sha256=QCV7Da5by2b5O3tdrJdtT5Mj1zL5C5JIsnYGwh6eS9g,2263
120
+ minima_harness/tools/builtin.py,sha256=HSii1HmeN7e5sb6WlX3n-NoVP9idtb6V13jES_8OHxs,690
121
+ minima_harness/tools/edit.py,sha256=HIXeXetcNq4qpD7S-vBB_YgUDjoMicCLDEjvwjT2teU,1621
122
+ minima_harness/tools/find.py,sha256=SsL-3PEx7IyrA1dOT4Vxzh4UVZGXEeOpST3Y7G4cRsg,1024
123
+ minima_harness/tools/grep.py,sha256=1VIhfpvJ1rE-pihVuOczfe0X_E-rZtKGUUR_-haJYOM,2382
124
+ minima_harness/tools/ls.py,sha256=LpKUHU7tz9lS95nZ7p5v4no4onyDFU1irYQ4s1Jhvrc,1128
125
+ minima_harness/tools/read.py,sha256=s6CZdNysfz_HhvkzsmB0r3hCXPrj-BFh43EuLZ3yZqw,1241
126
+ minima_harness/tools/tasks.py,sha256=ssEI5gecF3Gpy3hJkqXqf3ckI2r6OCgmxxbkmGsfC_s,3222
127
+ minima_harness/tools/write.py,sha256=yv0QjyqO1hgzpeCVOsBRNWvrl7vmqaEiM2jVme6x2g4,1011
128
+ minima_harness/tui/__init__.py,sha256=rOCT57dXRQ--67Uu8HgyIHIbO0nQ-fgXhpucRlU40xs,124
129
+ minima_harness/tui/analytics.py,sha256=6VJSe7JVANMFFW6w9JebVNXt_yanToGzQesT9mdPwzU,4609
130
+ minima_harness/tui/app.py,sha256=a8GMbhTBh0MW-sbdlRq955L9GCcimVpej99MN7DdImo,88804
131
+ minima_harness/tui/bridge.py,sha256=IzrPYuwb9dJNVTl9VjfI9DuAzVuV03krC1RnBzXb3hk,3476
132
+ minima_harness/tui/cli.py,sha256=w_b7gedPFA2kw6u7D7UK3_nehFl1fKcAA0eSAeRVcU0,9108
133
+ minima_harness/tui/clipboard.py,sha256=jmdRVpGBEhu6Pv91vmQ-EpbB1tSyVqO9mtsUf0MW6nc,1870
134
+ minima_harness/tui/commands.py,sha256=ZPW_fUh1rn-yN6noQ8SdGwUVUi4-fnNpYScK97noz60,1574
135
+ minima_harness/tui/compaction.py,sha256=5shKSbMYwb9Sj3xwTq1Co3qg1_CqwBSzpg89B1UywmU,665
136
+ minima_harness/tui/config_cli.py,sha256=qe9kzbidxYKuCO5L0muv_WPe64tBeKPh7NkqsrcgX44,5157
137
+ minima_harness/tui/config_store.py,sha256=r6xWsQiR6ndRvRN31eBl7o8-GrrIs5COcNOrrPU9i24,7664
138
+ minima_harness/tui/context.py,sha256=SArugThPYOKPvMauVGCugBZ0JHe2E8CkKFayn2_b9oU,3342
139
+ minima_harness/tui/customize.py,sha256=xjSE8bu2pD1bz6aT-SXr_wd8_wPjZqBiRkxKlCF3Dz0,3090
140
+ minima_harness/tui/diff.py,sha256=odNefismOBHdgf20OCgUIqx_5esiwcTD-G9QqVa8Wxc,1808
141
+ minima_harness/tui/editor.py,sha256=AAXlgi71L6uODgNUsSG2PWOEt0Js7vudE4BmpuShrV4,1465
142
+ minima_harness/tui/extensions.py,sha256=2JqDV7Agl6Eguk50nTWO2LDxiuiEI03UXVDTY8zRbx0,2991
143
+ minima_harness/tui/extra_models.py,sha256=xXxAmauCGKfb0lBh8nHDhni83PVRSyDnUgcbZGQ5CCU,1886
144
+ minima_harness/tui/history.py,sha256=Ea8AoJMHfCauB5KIgJddr_9deOJK9U6oO2h81QzCjMA,2150
145
+ minima_harness/tui/mubit.py,sha256=Jlggo7DabOqJotRyzZKUNMFxuwm5gpCXL04ocJWhBSQ,9895
146
+ minima_harness/tui/overlays.py,sha256=u6Adu-9vIQ1nczDbDzheQnhDhXBwh7jzyX7FDU8SGwI,23199
147
+ minima_harness/tui/packages.py,sha256=0JEd6oh9Hbm9WSSk52UisqszaZgeBPYM2yuqaogVftk,1783
148
+ minima_harness/tui/run_modes.py,sha256=BEVzP5dZHvViM4Oysy2oBNFevGDraWGaL_rPj2HxhEs,2387
149
+ minima_harness/tui/theme.py,sha256=niVm8wNghU6eMHkT1drkaQ1CyHH9WGZBP66CjiYjVkw,1986
150
+ minima_harness/tui/welcome.py,sha256=nHnqjlpTHsl002KyaAM-gSWr-URSLYc7idGSnRQpnPo,4035
151
+ minima_harness/tui/widgets/__init__.py,sha256=1tCx5b2-FKkphPVyt--Ow6rfbgLjRIwBKJUqEuhsv_M,55
152
+ minima_harness/tui/widgets/banner.py,sha256=rJYIMaipEvAcGQjDo-fG5s5GKtdqCGfU5Px7CXORxho,1721
153
+ minima_harness/tui/widgets/editor.py,sha256=da1Z8vK8HajLmuuzMHSxVd1CbRaqgR75LMKkRBJX_9M,3062
154
+ minima_harness/tui/widgets/footer.py,sha256=ydJIK2_zj7ij6mDpIqFtDB0pNm2RZiN3fgQ4tu4Ah5c,2612
155
+ minima_harness/tui/widgets/messages.py,sha256=aRNjAMjrpwfy2AL5gJ-F-z7ypTu-vPvhdN4pj8IlQl0,5518
156
+ minima_harness/tui/widgets/status.py,sha256=fkmeJ5oWAOg6klDlzsyleUhvsVlIZSAy7Y9_ep-VUk4,2164
157
+ minima_cli-0.4.9.dist-info/METADATA,sha256=UxAX7HuEQJ6qQESc9uw413sX2x4QnXonXsZ0GZ0r1Uo,13140
158
+ minima_cli-0.4.9.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
159
+ minima_cli-0.4.9.dist-info/entry_points.txt,sha256=PvR2lI-JFlIutGe0oq887gXhD3izuFB4nMM1D5Mf2jY,198
160
+ minima_cli-0.4.9.dist-info/licenses/LICENSE,sha256=UKoIl8qxe_aLvxheDeMkGeK4j8NrQzTxF5rkqrxrEmw,14560
161
+ minima_cli-0.4.9.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ minima = minima_harness.tui.cli:main
3
+ minima-calibration-report = minima.metrics.report:main
4
+ minima-harness = minima_harness.tui.cli:main
5
+ minima-seed = minima.seeding.run_seed:main
@@ -0,0 +1,295 @@
1
+ # Functional Source License, Version 1.1, Apache 2.0 Future License
2
+
3
+ ## Abbreviation
4
+
5
+ FSL-1.1-Apache-2.0
6
+
7
+ ## Notice
8
+
9
+ Copyright 2026 Mubit
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, INCLUDING
74
+ WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
75
+ PURPOSE, AND NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the Apache License, Version 2.0 that is effective on the second anniversary of
91
+ the date we make the Software available. On or after that date, you may use the
92
+ Software under the Apache License, Version 2.0, in which case the following will
93
+ apply:
94
+
95
+ Apache License
96
+ Version 2.0, January 2004
97
+ http://www.apache.org/licenses/
98
+
99
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
100
+
101
+ 1. Definitions.
102
+
103
+ "License" shall mean the terms and conditions for use, reproduction,
104
+ and distribution as defined by Sections 1 through 9 of this document.
105
+
106
+ "Licensor" shall mean the copyright owner or entity authorized by
107
+ the copyright owner that is granting the License.
108
+
109
+ "Legal Entity" shall mean the union of the acting entity and all
110
+ other entities that control, are controlled by, or are under common
111
+ control with that entity. For the purposes of this definition,
112
+ "control" means (i) the power, direct or indirect, to cause the
113
+ direction or management of such entity, whether by contract or
114
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
115
+ outstanding shares, or (iii) beneficial ownership of such entity.
116
+
117
+ "You" (or "Your") shall mean an individual or Legal Entity
118
+ exercising permissions granted by this License.
119
+
120
+ "Source" form shall mean the preferred form for making modifications,
121
+ including but not limited to software source code, documentation
122
+ source, and configuration files.
123
+
124
+ "Object" form shall mean any form resulting from mechanical
125
+ transformation or translation of a Source form, including but
126
+ not limited to compiled object code, generated documentation,
127
+ and conversions to other media types.
128
+
129
+ "Work" shall mean the work of authorship, whether in Source or
130
+ Object form, made available under the License, as indicated by a
131
+ copyright notice that is included in or attached to the work
132
+ (an example is provided in the Appendix below).
133
+
134
+ "Derivative Works" shall mean any work, whether in Source or Object
135
+ form, that is based on (or derived from) the Work and for which the
136
+ editorial revisions, annotations, elaborations, or other modifications
137
+ represent, as a whole, an original work of authorship. For the purposes
138
+ of this License, Derivative Works shall not include works that remain
139
+ separable from, or merely link (or bind by name) to the interfaces of,
140
+ the Work and Derivative Works thereof.
141
+
142
+ "Contribution" shall mean any work of authorship, including
143
+ the original version of the Work and any modifications or additions
144
+ to that Work or Derivative Works thereof, that is intentionally
145
+ submitted to Licensor for inclusion in the Work by the copyright owner
146
+ or by an individual or Legal Entity authorized to submit on behalf of
147
+ the copyright owner. For the purposes of this definition, "submitted"
148
+ means any form of electronic, verbal, or written communication sent
149
+ to the Licensor or its representatives, including but not limited to
150
+ communication on electronic mailing lists, source code control systems,
151
+ and issue tracking systems that are managed by, or on behalf of, the
152
+ Licensor for the purpose of discussing and improving the Work, but
153
+ excluding communication that is conspicuously marked or otherwise
154
+ designated in writing by the copyright owner as "Not a Contribution."
155
+
156
+ "Contributor" shall mean Licensor and any individual or Legal Entity
157
+ on behalf of whom a Contribution has been received by Licensor and
158
+ subsequently incorporated within the Work.
159
+
160
+ 2. Grant of Copyright License. Subject to the terms and conditions of
161
+ this License, each Contributor hereby grants to You a perpetual,
162
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
163
+ copyright license to reproduce, prepare Derivative Works of,
164
+ publicly display, publicly perform, sublicense, and distribute the
165
+ Work and such Derivative Works in Source or Object form.
166
+
167
+ 3. Grant of Patent License. Subject to the terms and conditions of
168
+ this License, each Contributor hereby grants to You a perpetual,
169
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
170
+ (except as stated in this section) patent license to make, have made,
171
+ use, offer to sell, sell, import, and otherwise transfer the Work,
172
+ where such license applies only to those patent claims licensable
173
+ by such Contributor that are necessarily infringed by their
174
+ Contribution(s) alone or by combination of their Contribution(s)
175
+ with the Work to which such Contribution(s) was submitted. If You
176
+ institute patent litigation against any entity (including a
177
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
178
+ or a Contribution incorporated within the Work constitutes direct
179
+ or contributory patent infringement, then any patent licenses
180
+ granted to You under this License for that Work shall terminate
181
+ as of the date such litigation is filed.
182
+
183
+ 4. Redistribution. You may reproduce and distribute copies of the
184
+ Work or Derivative Works thereof in any medium, with or without
185
+ modifications, and in Source or Object form, provided that You
186
+ meet the following conditions:
187
+
188
+ (a) You must give any other recipients of the Work or
189
+ Derivative Works a copy of this License; and
190
+
191
+ (b) You must cause any modified files to carry prominent notices
192
+ stating that You changed the files; and
193
+
194
+ (c) You must retain, in the Source form of any Derivative Works
195
+ that You distribute, all copyright, patent, trademark, and
196
+ attribution notices from the Source form of the Work,
197
+ excluding those notices that do not pertain to any part of
198
+ the Derivative Works; and
199
+
200
+ (d) If the Work includes a "NOTICE" text file as part of its
201
+ distribution, then any Derivative Works that You distribute must
202
+ include a readable copy of the attribution notices contained
203
+ within such NOTICE file, excluding those notices that do not
204
+ pertain to any part of the Derivative Works, in at least one
205
+ of the following places: within a NOTICE text file distributed
206
+ as part of the Derivative Works; within the Source form or
207
+ documentation, if provided along with the Derivative Works; or,
208
+ within a display generated by the Derivative Works, if and
209
+ wherever such third-party notices normally appear. The contents
210
+ of the NOTICE file are for informational purposes only and
211
+ do not modify the License. You may add Your own attribution
212
+ notices within Derivative Works that You distribute, alongside
213
+ or as an addendum to the NOTICE text from the Work, provided
214
+ that such additional attribution notices cannot be construed
215
+ as modifying the License.
216
+
217
+ You may add Your own copyright statement to Your modifications and
218
+ may provide additional or different license terms and conditions
219
+ for use, reproduction, or distribution of Your modifications, or
220
+ for any such Derivative Works as a whole, provided Your use,
221
+ reproduction, and distribution of the Work otherwise complies with
222
+ the conditions stated in this License.
223
+
224
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
225
+ any Contribution intentionally submitted for inclusion in the Work
226
+ by You to the Licensor shall be under the terms and conditions of
227
+ this License, without any additional terms or conditions.
228
+ Notwithstanding the above, nothing herein shall supersede or modify
229
+ the terms of any separate license agreement you may have executed
230
+ with Licensor regarding such Contributions.
231
+
232
+ 6. Trademarks. This License does not grant permission to use the trade
233
+ names, trademarks, service marks, or product names of the Licensor,
234
+ except as required for reasonable and customary use in describing the
235
+ origin of the Work and reproducing the content of the NOTICE file.
236
+
237
+ 7. Disclaimer of Warranty. Unless required by applicable law or
238
+ agreed to in writing, Licensor provides the Work (and each
239
+ Contributor provides its Contributions) on an "AS IS" BASIS,
240
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
241
+ implied, including, without limitation, any warranties or conditions
242
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
243
+ PARTICULAR PURPOSE. You are solely responsible for determining the
244
+ appropriateness of using or redistributing the Work and assume any
245
+ risks associated with Your exercise of permissions under this License.
246
+
247
+ 8. Limitation of Liability. In no event and under no legal theory,
248
+ whether in tort (including negligence), contract, or otherwise,
249
+ unless required by applicable law (such as deliberate and grossly
250
+ negligent acts) or agreed to in writing, shall any Contributor be
251
+ liable to You for damages, including any direct, indirect, special,
252
+ incidental, or consequential damages of any character arising as a
253
+ result of this License or out of the use or inability to use the
254
+ Work (including but not limited to damages for loss of goodwill,
255
+ work stoppage, computer failure or malfunction, or any and all
256
+ other commercial damages or losses), even if such Contributor
257
+ has been advised of the possibility of such damages.
258
+
259
+ 9. Accepting Warranty or Additional Liability. While redistributing
260
+ the Work or Derivative Works thereof, You may choose to offer,
261
+ and charge a fee for, acceptance of support, warranty, indemnity,
262
+ or other liability obligations and/or rights consistent with this
263
+ License. However, in accepting such obligations, You may act only
264
+ on Your own behalf and on Your sole responsibility, not on behalf
265
+ of any other Contributor, and only if You agree to indemnify,
266
+ defend, and hold each Contributor harmless for any liability
267
+ incurred by, or claims asserted against, such Contributor by reason
268
+ of your accepting any such warranty or additional liability.
269
+
270
+ END OF TERMS AND CONDITIONS
271
+
272
+ APPENDIX: How to apply the Apache License to your work.
273
+
274
+ To apply the Apache License to your work, attach the following
275
+ boilerplate notice, with the fields enclosed by brackets "[]"
276
+ replaced with your own identifying information. (Don't include
277
+ the brackets!) The text should be enclosed in the appropriate
278
+ comment syntax for the file format. We also recommend that a
279
+ file or class name and description of purpose be included on the
280
+ same "printed page" as the copyright notice for easier
281
+ identification within third-party archives.
282
+
283
+ Copyright [yyyy] [name of copyright owner]
284
+
285
+ Licensed under the Apache License, Version 2.0 (the "License");
286
+ you may not use this file except in compliance with the License.
287
+ You may obtain a copy of the License at
288
+
289
+ http://www.apache.org/licenses/LICENSE-2.0
290
+
291
+ Unless required by applicable law or agreed to in writing, software
292
+ distributed under the License is distributed on an "AS IS" BASIS,
293
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
294
+ See the License for the specific language governing permissions and
295
+ limitations under the License.
@@ -0,0 +1,19 @@
1
+ """Thin Python client for the Minima API."""
2
+
3
+ from minima.schemas.common import Constraints, OutcomeLabel, TaskInput
4
+ from minima.schemas.workflow import WorkflowRequest, WorkflowStep
5
+ from minima_client import autocapture
6
+ from minima_client.client import AsyncMinimaClient, MinimaClient
7
+ from minima_client.errors import MinimaError
8
+
9
+ __all__ = [
10
+ "AsyncMinimaClient",
11
+ "Constraints",
12
+ "MinimaClient",
13
+ "MinimaError",
14
+ "OutcomeLabel",
15
+ "TaskInput",
16
+ "WorkflowRequest",
17
+ "WorkflowStep",
18
+ "autocapture",
19
+ ]
@@ -0,0 +1,101 @@
1
+ """Optional zero-code intake: route ``mubit.learn`` auto-capture into Minima's lane.
2
+
3
+ This is a thin, opinionated wrapper over ``mubit.learn``. Calling :func:`enable` pins
4
+ the learn run to the same memory lane Minima recalls from (``minima:<namespace>``) and a
5
+ stable ``minima-autocapture`` agent id, then monkeypatches the caller's
6
+ OpenAI/Anthropic/LiteLLM/Google-GenAI clients so every LLM call auto-ingests its trace
7
+ and gets relevant lessons injected — no code changes at the call site.
8
+
9
+ What this does and does NOT do:
10
+ - It DOES land traces + lessons in Minima's lane, so they enrich the reasoner's memory
11
+ block (``get_context``) and Mubit's own reflection/strategy promotion.
12
+ - It does NOT, on its own, produce Minima *outcome records* (the ``kind="outcome"``
13
+ rows the deterministic k-NN aggregator scores), and ``mubit.learn`` never fabricates
14
+ a success signal. To close the loop, either call :func:`feedback` (credits the
15
+ recalled entries) or send a quality score to Minima's ``POST /v1/feedback``.
16
+
17
+ ``mubit-sdk`` is required; everything here imports it lazily so importing this module
18
+ never fails, and each call raises a clear error if the SDK is absent.
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ from typing import Any
24
+
25
+ DEFAULT_AGENT_ID = "minima-autocapture"
26
+ DEFAULT_LANE_PREFIX = "minima"
27
+
28
+
29
+ def lane_for(namespace: str | None, prefix: str = DEFAULT_LANE_PREFIX) -> str:
30
+ """Minima's lane convention — must match the server's ``Settings.lane``."""
31
+ return f"{prefix}:{namespace or 'default'}"
32
+
33
+
34
+ def _learn() -> Any:
35
+ try:
36
+ import mubit.learn as learn
37
+ except Exception as exc: # ImportError or a partial install
38
+ raise RuntimeError(
39
+ "minima_client.autocapture requires mubit-sdk (mubit.learn). "
40
+ "Install it with: pip install mubit-sdk"
41
+ ) from exc
42
+ return learn
43
+
44
+
45
+ def enable(
46
+ *,
47
+ api_key: str | None = None,
48
+ endpoint: str | None = None,
49
+ namespace: str = "default",
50
+ user_id: str = "",
51
+ agent_id: str = DEFAULT_AGENT_ID,
52
+ lane_prefix: str = DEFAULT_LANE_PREFIX,
53
+ inject_lessons: bool = True,
54
+ auto_extract: bool = True,
55
+ **init_kwargs: Any,
56
+ ) -> Any:
57
+ """Start a ``mubit.learn`` session scoped to Minima's lane and return the RunManager.
58
+
59
+ Extra keyword arguments pass straight through to ``mubit.learn.init`` (e.g.
60
+ ``patch_globals=False`` to opt out of global monkeypatching and use :func:`wrap`).
61
+ """
62
+ return _learn().init(
63
+ api_key=api_key,
64
+ endpoint=endpoint,
65
+ agent_id=agent_id,
66
+ user_id=user_id,
67
+ lane=lane_for(namespace, lane_prefix),
68
+ inject_lessons=inject_lessons,
69
+ auto_extract=auto_extract,
70
+ **init_kwargs,
71
+ )
72
+
73
+
74
+ def feedback(score: float | None = None, *, good: bool | None = None, **kwargs: Any) -> None:
75
+ """Credit the memories recalled for the most recent call (closes the loop).
76
+
77
+ Provide one signal: ``good=True/False`` or ``score`` in [-1, 1]. Passes through to
78
+ ``mubit.learn.feedback`` (supports ``entry_ids``, ``verified_in_production``, etc.).
79
+ """
80
+ _learn().feedback(score, good=good, **kwargs)
81
+
82
+
83
+ def wrap(client: Any, **kwargs: Any) -> Any:
84
+ """Explicitly enrich a single LLM client instead of global patching.
85
+
86
+ Thin pass-through to ``mubit.learn.wrap``.
87
+ """
88
+ return _learn().wrap(client, **kwargs)
89
+
90
+
91
+ def capture(messages: list[dict[str, Any]], response: str, **kwargs: Any) -> None:
92
+ """Manually ingest one interaction (for raw HTTP / unsupported libs).
93
+
94
+ Thin pass-through to ``mubit.learn.capture``.
95
+ """
96
+ _learn().capture(messages, response, **kwargs)
97
+
98
+
99
+ def disable() -> None:
100
+ """Restore original LLM client behavior and stop the learn session."""
101
+ _learn().uninstrument()