minima-cli 0.4.9__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {minima_cli-0.4.9 → minima_cli-0.5.0}/.github/workflows/prod.yml +33 -0
- minima_cli-0.5.0/.github/workflows/release-cli.yml +140 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/.gitignore +4 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/CHANGELOG.md +15 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/Makefile +30 -1
- {minima_cli-0.4.9 → minima_cli-0.5.0}/PKG-INFO +1 -1
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/api-reference.mdx +9 -7
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/client-sdk.mdx +8 -0
- minima_cli-0.5.0/maybe.js +64 -0
- minima_cli-0.5.0/maybe.ts +84 -0
- minima_cli-0.5.0/packages/tui/.gitignore +4 -0
- minima_cli-0.5.0/packages/tui/README.md +73 -0
- minima_cli-0.5.0/packages/tui/biome.json +25 -0
- minima_cli-0.5.0/packages/tui/bun.lock +248 -0
- minima_cli-0.5.0/packages/tui/package.json +42 -0
- minima_cli-0.5.0/packages/tui/scripts/build-all.ts +31 -0
- minima_cli-0.5.0/packages/tui/scripts/build.ts +43 -0
- minima_cli-0.5.0/packages/tui/scripts/install.sh +59 -0
- minima_cli-0.5.0/packages/tui/scripts/stub-devtools.ts +19 -0
- minima_cli-0.5.0/packages/tui/src/agent/agent.ts +252 -0
- minima_cli-0.5.0/packages/tui/src/agent/events.ts +119 -0
- minima_cli-0.5.0/packages/tui/src/agent/index.ts +10 -0
- minima_cli-0.5.0/packages/tui/src/agent/loop.ts +323 -0
- minima_cli-0.5.0/packages/tui/src/agent/state.ts +112 -0
- minima_cli-0.5.0/packages/tui/src/agent/tools.ts +79 -0
- minima_cli-0.5.0/packages/tui/src/ai/compat.ts +21 -0
- minima_cli-0.5.0/packages/tui/src/ai/events.ts +136 -0
- minima_cli-0.5.0/packages/tui/src/ai/index.ts +28 -0
- minima_cli-0.5.0/packages/tui/src/ai/provider_catalog.ts +114 -0
- minima_cli-0.5.0/packages/tui/src/ai/provider_quirks.ts +25 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/_common.ts +50 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/anthropic.ts +277 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/base.ts +50 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/faux.ts +161 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/google.ts +293 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/index.ts +71 -0
- minima_cli-0.5.0/packages/tui/src/ai/providers/openai_compat.ts +328 -0
- minima_cli-0.5.0/packages/tui/src/ai/registry.ts +44 -0
- minima_cli-0.5.0/packages/tui/src/ai/stream.ts +81 -0
- minima_cli-0.5.0/packages/tui/src/ai/types.ts +224 -0
- minima_cli-0.5.0/packages/tui/src/ai/usage.ts +34 -0
- minima_cli-0.5.0/packages/tui/src/cli/main.ts +441 -0
- minima_cli-0.5.0/packages/tui/src/index.ts +14 -0
- minima_cli-0.5.0/packages/tui/src/minima/client.ts +183 -0
- minima_cli-0.5.0/packages/tui/src/minima/config.ts +77 -0
- minima_cli-0.5.0/packages/tui/src/minima/errors.ts +37 -0
- minima_cli-0.5.0/packages/tui/src/minima/index.ts +31 -0
- minima_cli-0.5.0/packages/tui/src/minima/judge.ts +110 -0
- minima_cli-0.5.0/packages/tui/src/minima/mapping.ts +105 -0
- minima_cli-0.5.0/packages/tui/src/minima/meter.ts +139 -0
- minima_cli-0.5.0/packages/tui/src/minima/router.ts +200 -0
- minima_cli-0.5.0/packages/tui/src/minima/runtime.ts +273 -0
- minima_cli-0.5.0/packages/tui/src/minima/schemas.ts +260 -0
- minima_cli-0.5.0/packages/tui/src/run_modes.ts +65 -0
- minima_cli-0.5.0/packages/tui/src/session/index.ts +10 -0
- minima_cli-0.5.0/packages/tui/src/session/store.ts +275 -0
- minima_cli-0.5.0/packages/tui/src/tools/_io.ts +45 -0
- minima_cli-0.5.0/packages/tui/src/tools/at_mentions.ts +37 -0
- minima_cli-0.5.0/packages/tui/src/tools/bash.ts +122 -0
- minima_cli-0.5.0/packages/tui/src/tools/builtin.ts +49 -0
- minima_cli-0.5.0/packages/tui/src/tools/edit.ts +55 -0
- minima_cli-0.5.0/packages/tui/src/tools/glob.ts +37 -0
- minima_cli-0.5.0/packages/tui/src/tools/grep.ts +79 -0
- minima_cli-0.5.0/packages/tui/src/tools/index.ts +8 -0
- minima_cli-0.5.0/packages/tui/src/tools/ls.ts +39 -0
- minima_cli-0.5.0/packages/tui/src/tools/read.ts +39 -0
- minima_cli-0.5.0/packages/tui/src/tools/schema.ts +78 -0
- minima_cli-0.5.0/packages/tui/src/tools/todowrite.ts +67 -0
- minima_cli-0.5.0/packages/tui/src/tools/web_fetch.ts +116 -0
- minima_cli-0.5.0/packages/tui/src/tools/write.ts +34 -0
- minima_cli-0.5.0/packages/tui/src/tui/app.tsx +1701 -0
- minima_cli-0.5.0/packages/tui/src/tui/auth.ts +231 -0
- minima_cli-0.5.0/packages/tui/src/tui/compact.ts +62 -0
- minima_cli-0.5.0/packages/tui/src/tui/config_store.ts +284 -0
- minima_cli-0.5.0/packages/tui/src/tui/context.ts +85 -0
- minima_cli-0.5.0/packages/tui/src/tui/messages.tsx +267 -0
- minima_cli-0.5.0/packages/tui/src/tui/model-picker.tsx +66 -0
- minima_cli-0.5.0/packages/tui/src/tui/mouse-scroll.ts +72 -0
- minima_cli-0.5.0/packages/tui/src/tui/permissions.ts +171 -0
- minima_cli-0.5.0/packages/tui/src/tui/projects.ts +98 -0
- minima_cli-0.5.0/packages/tui/src/tui/status.tsx +104 -0
- minima_cli-0.5.0/packages/tui/src/tui/text-input.tsx +104 -0
- minima_cli-0.5.0/packages/tui/src/types.d.ts +10 -0
- minima_cli-0.5.0/packages/tui/tests/agent.test.ts +227 -0
- minima_cli-0.5.0/packages/tui/tests/ai.test.ts +155 -0
- minima_cli-0.5.0/packages/tui/tests/anthropic.test.ts +121 -0
- minima_cli-0.5.0/packages/tui/tests/auth.test.ts +188 -0
- minima_cli-0.5.0/packages/tui/tests/client.test.ts +157 -0
- minima_cli-0.5.0/packages/tui/tests/config_store.test.ts +89 -0
- minima_cli-0.5.0/packages/tui/tests/google.test.ts +133 -0
- minima_cli-0.5.0/packages/tui/tests/minima.test.ts +172 -0
- minima_cli-0.5.0/packages/tui/tests/openai_compat.test.ts +177 -0
- minima_cli-0.5.0/packages/tui/tests/run_modes.test.ts +145 -0
- minima_cli-0.5.0/packages/tui/tests/session.test.ts +119 -0
- minima_cli-0.5.0/packages/tui/tests/thinking.test.ts +199 -0
- minima_cli-0.5.0/packages/tui/tests/tools.test.ts +157 -0
- minima_cli-0.5.0/packages/tui/tsconfig.json +26 -0
- minima_cli-0.5.0/packaging/homebrew/README.md +48 -0
- minima_cli-0.5.0/packaging/homebrew/render_formula.py +105 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/pyproject.toml +1 -1
- minima_cli-0.5.0/runs/20260624_103307/memory_audit.json +48 -0
- minima_cli-0.5.0/runs/20260624_103307/recall_debug.jsonl +8 -0
- minima_cli-0.5.0/runs/20260624_103307/tasks.jsonl +7 -0
- minima_cli-0.5.0/runs/playground_p1/_manifest.json +55 -0
- minima_cli-0.5.0/runs/playground_p1/calibration.json +180 -0
- minima_cli-0.5.0/runs/playground_p1/feedback.json +9 -0
- minima_cli-0.5.0/runs/playground_p1/health.json +22 -0
- minima_cli-0.5.0/runs/playground_p1/models.json +379 -0
- minima_cli-0.5.0/runs/playground_p1/recommend.json +200 -0
- minima_cli-0.5.0/runs/playground_p1/savings.json +42 -0
- minima_cli-0.5.0/runs/playground_p1/strategies.json +1207 -0
- minima_cli-0.5.0/runs/playground_p1/workflow.json +414 -0
- minima_cli-0.5.0/scripts/test-routing-web.ts +176 -0
- minima_cli-0.5.0/scripts/test-routing.sh +66 -0
- minima_cli-0.5.0/scripts/test-routing.ts +159 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/version.py +1 -1
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/config.py +1 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/app.py +25 -9
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/editor.py +5 -4
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_queue.py +30 -8
- minima_cli-0.4.9/.claude/settings.local.json +0 -12
- minima_cli-0.4.9/packaging/homebrew/README.md +0 -82
- minima_cli-0.4.9/packaging/homebrew/gen_resources.py +0 -185
- minima_cli-0.4.9/packaging/homebrew/minima.rb +0 -339
- {minima_cli-0.4.9 → minima_cli-0.5.0}/.dockerignore +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/.env.example +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/.github/workflows/staging.yml +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/AGENTS.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/Dockerfile +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/LICENSE +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/README.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/agent/task_set.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/autocapture.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/client.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/client_sdk/minima_client/errors.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/README.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/api-reference.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/client-sdk.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/concepts.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/configuration.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/examples.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/getting-started.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/goals-feature-plan.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/harness.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/multi-tenancy.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/operations.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/publishing.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs/seeding.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/Dockerfile +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/astro.config.mjs +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/netlify.toml +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/nginx.conf +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/package-lock.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/package.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/public/favicon.svg +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/assets/logo.svg +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/config.ts +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/concepts.mdx +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/examples.mdx +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/getting-started.mdx +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/content/docs/index.mdx +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/src/styles/custom.css +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/docs-site/tsconfig.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/01_quickstart.sh +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/02_recommend_and_feedback.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/03_constraints_and_tradeoff.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/04_workflow.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/05_autocapture.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/06_routed_llm_call.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/07_multitenant_admin.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/README.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_escalation.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_escalation_learn.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_gemini.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_retention.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_warmup.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/agent_warmup_vary.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/harness_warmup.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/metrics_demo.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/examples/smoke_test.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run1.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run2.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run3.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_125009/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run1.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run2.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run3.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run4.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run5.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_130252/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run1.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run2.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_182838/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/memory_audit.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run1.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run2.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run3.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run4.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run5.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260612_183343/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/memory_audit.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run1.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run2.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run3.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run4.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run5.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/20260615_101732/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/escalation_20260612_201825/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/results.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/retention_20260612_201828/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/auth.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/errors.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/calibration.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/feedback.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/health.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/models.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/recommend.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/savings.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/api/routers/strategies.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/data/capability_priors.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/data/model_aliases.json +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/merge.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/refresh.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/litellm.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/sources/openrouter.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/catalog/store.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/config.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/deps.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/anthropic.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/base.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/gemini.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/llm/registry.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/logging.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/main.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/adapter.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/keys.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/records.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/memory/threadpool.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/calibration.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/report.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/metrics/savings.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/_pg_pool.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/_redis_client.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/aggregate.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/classify.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/decisionlog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/durablerefs.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/engine.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/escalation.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/propensity.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/recstore.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/score.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/recommender/types.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/common.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/feedback.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/models_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/recommend.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/savings.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/strategies.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/schemas/workflow.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/items.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/llmrouterbench.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/routerbench.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/run_seed.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/seeding/synthetic.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/context.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima/tenancy/passthrough.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/LICENSE_PI +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/agent.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/events.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/loop.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/state.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/agent/tools.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/compat.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/errors.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/events.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/openrouter_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/provider_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/provider_quirks.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/_common.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/anthropic.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/base.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/faux.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/google.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/providers/openai_compat.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/registry.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/stream.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/tools.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/types.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/ai/usage.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/cache.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/goals.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/judge.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/mapping.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/meter.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/router.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/runtime.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/minima/signals.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/format.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/session/store.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tasks/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tasks/task_set.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/_io.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/bash.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/builtin.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/edit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/find.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/grep.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/ls.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/read.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/tasks.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tools/write.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/analytics.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/bridge.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/cli.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/clipboard.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/commands.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/compaction.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/config_cli.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/config_store.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/context.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/customize.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/diff.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/editor.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/extensions.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/extra_models.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/history.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/mubit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/overlays.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/packages.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/run_modes.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/theme.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/welcome.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/banner.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/footer.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/messages.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/status.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/conftest.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/BENCHMARKS.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/CRITERIA.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/RESULTS.md +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/harness.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/llmrouterbench_config.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/eval/test_routerbench_savings.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/factories.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_format.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_manager.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/session/test_store.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_agent_loop.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_anthropic_mapping.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_auth_reroute.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_cache.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_catalog_overlay.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_common_and_wire.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_compat.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_errors.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_goals.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_google_mapping.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_judge.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_mapping.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_minima_e2e.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_openai_compat_sse.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_openrouter_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase0_smoke.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_a.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_b.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_phase_c.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_quirks.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_registration.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_provider_wiring.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_runtime.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/test_signals.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_agent_smoke.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_bash.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_builtin.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_edit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_find.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_grep.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_io.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_ls.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_read.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tools/test_write.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/__init__.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_analytics.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_app_pilot.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_bridge.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_clipboard.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_command_popup.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_commands.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_config.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_context.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_customize.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_decision_card.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_diff.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_editor.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_editor_widget.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_export.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_extensions.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_goals_tui.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_history_sessions.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_messages.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_mouse_copy.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_mubit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_optimize.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_overlays.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p2.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p3.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_p5.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_permissions.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_predictability.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_prompt_layers.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_run_modes.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_status.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_status_bar.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_theme.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_thoughts.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_tool_render.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_ux.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_welcome.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/harness/tui/test_widgets.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_escalation_reasoner.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_feedback_loop.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_lesson_promotion.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_measurement_api.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_observed_cost_ranking.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_recommend_api.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_strategies_api.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/integration/test_workflow_models_health.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_escalation_fixes.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_full_surface_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_mubit_roundtrip.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_phase3_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_reasoner_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/live/test_recall_params_live.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_aggregate.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_aggregate_decay.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_autocapture.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_calibration_fit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_classify_keys.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_cluster.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_collapse_guard.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_cost_band.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_decisionlog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_escalation.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_exploration.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_ipw.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_iterations.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_latency_quality.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_lever_cost.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_metrics.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_metrics_demo.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_neighbor_classify.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_reasoner.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_records_catalog.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_recstore_sqlite.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_score.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_shadow_bandit.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_store_backends.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_strategies.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_tenancy.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/tests/unit/test_thompson.py +0 -0
- {minima_cli-0.4.9 → minima_cli-0.5.0}/uv.lock +0 -0
|
@@ -156,3 +156,36 @@ jobs:
|
|
|
156
156
|
--region ${{ env.REGION }} \
|
|
157
157
|
--format 'value(status.url)')
|
|
158
158
|
echo "::notice::Minima docs (prod) deployed to: $URL"
|
|
159
|
+
|
|
160
|
+
# ── 3. Publish minima-cli to PyPI ────────────────────────────────────────────
|
|
161
|
+
# Builds the sdist+wheel at the release tag and uploads to PyPI (the dist bundles the
|
|
162
|
+
# `minima_client` SDK). --skip-existing makes a manual re-deploy of an already-published
|
|
163
|
+
# version a no-op instead of an error. Needs no GCP — only the PYPI_API_TOKEN secret.
|
|
164
|
+
publish-pypi:
|
|
165
|
+
name: Publish → PyPI
|
|
166
|
+
runs-on: ubuntu-latest
|
|
167
|
+
|
|
168
|
+
steps:
|
|
169
|
+
- name: Checkout @ release tag
|
|
170
|
+
uses: actions/checkout@v5
|
|
171
|
+
with:
|
|
172
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
173
|
+
|
|
174
|
+
- name: Set up Python
|
|
175
|
+
uses: actions/setup-python@v5
|
|
176
|
+
with:
|
|
177
|
+
python-version: "3.13"
|
|
178
|
+
|
|
179
|
+
- name: Build sdist + wheel
|
|
180
|
+
run: |
|
|
181
|
+
python -m pip install --upgrade build twine
|
|
182
|
+
python -m build
|
|
183
|
+
|
|
184
|
+
- name: Check metadata
|
|
185
|
+
run: python -m twine check dist/*
|
|
186
|
+
|
|
187
|
+
- name: Publish to PyPI
|
|
188
|
+
env:
|
|
189
|
+
TWINE_USERNAME: __token__
|
|
190
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
191
|
+
run: python -m twine upload --skip-existing dist/*
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
name: Release — CLI binaries + Homebrew
|
|
2
|
+
|
|
3
|
+
# On a published release, cross-compile the TypeScript/Bun CLI for macOS + Linux,
|
|
4
|
+
# ad-hoc codesign the macOS arches, attach the tarballs to the release, and open
|
|
5
|
+
# a PR to the Homebrew tap (mubit-ai/homebrew-minima) bumping the binary formula.
|
|
6
|
+
# PyPI publishing of the Python `minima-cli` (SDK + server tooling) stays in prod.yml.
|
|
7
|
+
on:
|
|
8
|
+
release:
|
|
9
|
+
types: [published]
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
tag:
|
|
13
|
+
description: "Git tag to build (e.g. v0.5.0)"
|
|
14
|
+
required: true
|
|
15
|
+
type: string
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: release-cli
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
env:
|
|
22
|
+
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
|
|
23
|
+
BUN_VERSION: "1.3.14"
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: write # upload release assets
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
build-macos:
|
|
30
|
+
name: Build + sign macOS binaries
|
|
31
|
+
runs-on: macos-14 # Apple Silicon; cross-compiles darwin-x64 too, codesign is arch-agnostic
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v5
|
|
34
|
+
with:
|
|
35
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
36
|
+
- uses: oven-sh/setup-bun@v2
|
|
37
|
+
with:
|
|
38
|
+
bun-version: ${{ env.BUN_VERSION }}
|
|
39
|
+
- name: Install deps
|
|
40
|
+
working-directory: packages/tui
|
|
41
|
+
run: bun install --frozen-lockfile
|
|
42
|
+
- name: Cross-compile darwin arm64 + x64
|
|
43
|
+
working-directory: packages/tui
|
|
44
|
+
run: bun run scripts/build-all.ts bun-darwin-arm64 bun-darwin-x64
|
|
45
|
+
- name: Ad-hoc codesign (required for Apple Silicon to run the binary)
|
|
46
|
+
working-directory: packages/tui
|
|
47
|
+
run: |
|
|
48
|
+
for b in dist/minima-darwin-arm64 dist/minima-darwin-x64; do
|
|
49
|
+
codesign -s - --force --timestamp=none "$b"
|
|
50
|
+
codesign --verify --verbose=1 "$b"
|
|
51
|
+
done
|
|
52
|
+
- name: Package tarballs
|
|
53
|
+
working-directory: packages/tui
|
|
54
|
+
run: |
|
|
55
|
+
VER="${RELEASE_TAG#v}"
|
|
56
|
+
for slug in darwin-arm64 darwin-x64; do
|
|
57
|
+
tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
|
|
58
|
+
tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
|
|
59
|
+
done
|
|
60
|
+
- uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: darwin
|
|
63
|
+
path: packages/tui/dist/minima-*.tar.gz
|
|
64
|
+
|
|
65
|
+
build-linux:
|
|
66
|
+
name: Build Linux binaries
|
|
67
|
+
runs-on: ubuntu-latest
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v5
|
|
70
|
+
with:
|
|
71
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
72
|
+
- uses: oven-sh/setup-bun@v2
|
|
73
|
+
with:
|
|
74
|
+
bun-version: ${{ env.BUN_VERSION }}
|
|
75
|
+
- name: Install deps
|
|
76
|
+
working-directory: packages/tui
|
|
77
|
+
run: bun install --frozen-lockfile
|
|
78
|
+
- name: Cross-compile linux x64 + arm64
|
|
79
|
+
working-directory: packages/tui
|
|
80
|
+
run: bun run scripts/build-all.ts bun-linux-x64 bun-linux-arm64
|
|
81
|
+
- name: Package tarballs
|
|
82
|
+
working-directory: packages/tui
|
|
83
|
+
run: |
|
|
84
|
+
VER="${RELEASE_TAG#v}"
|
|
85
|
+
for slug in linux-x64 linux-arm64; do
|
|
86
|
+
tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
|
|
87
|
+
tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
|
|
88
|
+
done
|
|
89
|
+
- uses: actions/upload-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
name: linux
|
|
92
|
+
path: packages/tui/dist/minima-*.tar.gz
|
|
93
|
+
|
|
94
|
+
publish-and-bump:
|
|
95
|
+
name: Attach assets + open tap PR
|
|
96
|
+
needs: [build-macos, build-linux]
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v5
|
|
100
|
+
with:
|
|
101
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
102
|
+
- uses: actions/download-artifact@v4
|
|
103
|
+
with:
|
|
104
|
+
path: artifacts
|
|
105
|
+
- name: Collect tarballs
|
|
106
|
+
run: |
|
|
107
|
+
mkdir -p dist
|
|
108
|
+
find artifacts -name 'minima-*.tar.gz' -exec cp {} dist/ \;
|
|
109
|
+
ls -la dist
|
|
110
|
+
- name: Attach binaries to the release
|
|
111
|
+
env:
|
|
112
|
+
GH_TOKEN: ${{ github.token }}
|
|
113
|
+
run: gh release upload "$RELEASE_TAG" dist/minima-*.tar.gz --clobber --repo "${{ github.repository }}"
|
|
114
|
+
- name: Render binary formula
|
|
115
|
+
run: |
|
|
116
|
+
VER="${RELEASE_TAG#v}"
|
|
117
|
+
python3 packaging/homebrew/render_formula.py --version "$VER" --dist dist --out minima.rb
|
|
118
|
+
echo "----- rendered formula -----"; cat minima.rb
|
|
119
|
+
- name: Open Homebrew tap PR
|
|
120
|
+
env:
|
|
121
|
+
GH_TOKEN: ${{ secrets.GH_PAT }}
|
|
122
|
+
run: |
|
|
123
|
+
VER="${RELEASE_TAG#v}"
|
|
124
|
+
git clone "https://x-access-token:${GH_TOKEN}@github.com/mubit-ai/homebrew-minima.git" tap
|
|
125
|
+
cp minima.rb tap/Formula/minima.rb
|
|
126
|
+
cd tap
|
|
127
|
+
git config user.name "mubit-release-bot"
|
|
128
|
+
git config user.email "release-bot@mubit.ai"
|
|
129
|
+
branch="bump-minima-${VER}"
|
|
130
|
+
git checkout -b "$branch"
|
|
131
|
+
if git diff --quiet Formula/minima.rb; then
|
|
132
|
+
echo "formula already up to date for ${VER}; nothing to do"; exit 0
|
|
133
|
+
fi
|
|
134
|
+
git add Formula/minima.rb
|
|
135
|
+
git commit -m "minima ${VER} (prebuilt binary)"
|
|
136
|
+
git push -u origin "$branch" --force-with-lease
|
|
137
|
+
gh pr create --repo mubit-ai/homebrew-minima --base main --head "$branch" \
|
|
138
|
+
--title "minima ${VER}" \
|
|
139
|
+
--body "Automated bump to the prebuilt TypeScript/Bun binary for \`${RELEASE_TAG}\`. Replaces the Python virtualenv formula. \`brew test-bot\` validates install + \`test do\` on macOS + Linux before merge." \
|
|
140
|
+
|| echo "PR already exists for ${branch}"
|
|
@@ -4,6 +4,21 @@ All notable changes to Minima are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [0.4.10] - 2026-06-26
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- **`minima-cli` is now published to PyPI automatically on every release** — `pip install minima-cli`
|
|
11
|
+
is the official install (it bundles the `minima_client` SDK). A new CI job builds + uploads the
|
|
12
|
+
sdist/wheel alongside the GitHub release and prod deploy.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
- **Docs (API reference):** corrected the `GET /v1/health` response example (it returns `mubit`
|
|
16
|
+
not `memory`, `version 0.4.9`, plus `auth`/`reasoner` blocks and `catalog.cost_source`) and
|
|
17
|
+
clarified `status` is only `degraded` on a key-bearing probe; documented the real
|
|
18
|
+
`summary.realized` field set (it differs from `summary.estimated`); and fixed the `days`
|
|
19
|
+
parameter bound (`>0–365`) on `/v1/savings` and `/v1/calibration`. Added a PyPI install link to
|
|
20
|
+
the Client SDK page.
|
|
21
|
+
|
|
7
22
|
## [0.4.9] - 2026-06-26
|
|
8
23
|
|
|
9
24
|
### Fixed
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: install run test lint fmt live eval seed refresh-catalog harness-demo harness-live harness-test harness
|
|
1
|
+
.PHONY: install run test lint fmt live eval seed refresh-catalog harness-demo harness-live harness-test harness tui-install tui-test tui-check tui-build tui tui-dev
|
|
2
2
|
|
|
3
3
|
install:
|
|
4
4
|
uv sync --extra dev # dev pulls server + harness + tui for the full test suite
|
|
@@ -39,3 +39,32 @@ harness-test:
|
|
|
39
39
|
|
|
40
40
|
harness:
|
|
41
41
|
uv run --extra harness --extra tui --env-file .env.harness minima-harness $(ARGS)
|
|
42
|
+
|
|
43
|
+
# --- TS TUI (packages/tui) — run from the repo root so .env.harness auto-loads --------
|
|
44
|
+
|
|
45
|
+
TUI := packages/tui
|
|
46
|
+
TUI_BIN := $(TUI)/dist/minima
|
|
47
|
+
|
|
48
|
+
tui-install:
|
|
49
|
+
cd $(TUI) && bun install
|
|
50
|
+
|
|
51
|
+
tui-test:
|
|
52
|
+
cd $(TUI) && bun test
|
|
53
|
+
|
|
54
|
+
tui-check:
|
|
55
|
+
cd $(TUI) && bun run check && bun run lint
|
|
56
|
+
|
|
57
|
+
tui-build:
|
|
58
|
+
cd $(TUI) && bun run build
|
|
59
|
+
|
|
60
|
+
# Run the compiled binary (build first with `make tui-build`). Passes ARGS through, so:
|
|
61
|
+
# make tui ARGS='-p "hello"' # one-shot
|
|
62
|
+
# make tui ARGS='--offline --model gpt-4o-mini -p "hi"'
|
|
63
|
+
# make tui # interactive TUI
|
|
64
|
+
tui:
|
|
65
|
+
@test -x $(TUI_BIN) || { echo "Run 'make tui-build' first"; exit 1; }
|
|
66
|
+
./$(TUI_BIN) $(ARGS)
|
|
67
|
+
|
|
68
|
+
# Run from source via Bun (no compile step) — fastest dev loop.
|
|
69
|
+
tui-dev:
|
|
70
|
+
cd $(TUI) && bun run src/cli/main.ts $(ARGS)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: minima-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Minima CLI: cost-aware LLM model routing — recommend cheaper models, backed by Mubit memory.
|
|
5
5
|
Project-URL: Homepage, https://docs.minima.sh
|
|
6
6
|
Project-URL: Documentation, https://docs.minima.sh
|
|
@@ -310,7 +310,7 @@ Two baselines are always reported side by side, explicitly labeled: **`vs premiu
|
|
|
310
310
|
| Param | Type | Default | Notes |
|
|
311
311
|
|-------|------|---------|-------|
|
|
312
312
|
| `namespace` | string | — | Restrict to one namespace. |
|
|
313
|
-
| `days` | float
|
|
313
|
+
| `days` | float `>0–365` | `30` | Lookback window (must be greater than 0). |
|
|
314
314
|
| `group_by` | enum | — | `cluster` \| `task_type` \| `lane` — optional breakdown. |
|
|
315
315
|
|
|
316
316
|
### Response
|
|
@@ -318,7 +318,7 @@ Two baselines are always reported side by side, explicitly labeled: **`vs premiu
|
|
|
318
318
|
| Field | Type | Notes |
|
|
319
319
|
|-------|------|-------|
|
|
320
320
|
| `summary.estimated` | object | `n`, `cost_recommended_usd`, `cost_premium_usd`, `savings_vs_premium_usd`, plus `n_declared` / `cost_declared_usd` / `savings_vs_declared_usd` over the declared-baseline subset. |
|
|
321
|
-
| `summary.realized` | object |
|
|
321
|
+
| `summary.realized` | object | A **different** field set over the **reconciled** subset (feedback received with `actual_cost_usd`): `n_reconciled`, `realized_cost_usd`, `est_cost_recommended_usd`, `est_cost_premium_usd`, `savings_vs_premium_est_usd`, plus `n_declared` / `est_cost_declared_usd` / `savings_vs_declared_est_usd` — your realized cost measured against the estimated baselines. |
|
|
322
322
|
| `health` | object | `recommendations`, `feedback_coverage` (share of recommendations that ever got feedback — the number that decides how much to trust `realized`), `late_feedback_share`, `escalation_rate`, `exploration_share`, `epsilon_policy_share`. |
|
|
323
323
|
| `groups` | array | Per-`group_by` key: the same `summary` + `health`. |
|
|
324
324
|
|
|
@@ -342,7 +342,7 @@ Is `predicted_success` telling the truth for your traffic? Compares each recomme
|
|
|
342
342
|
| Param | Type | Default | Notes |
|
|
343
343
|
|-------|------|---------|-------|
|
|
344
344
|
| `namespace` | string | — | Restrict to one namespace. |
|
|
345
|
-
| `days` | float
|
|
345
|
+
| `days` | float `>0–365` | `30` | Lookback window (must be greater than 0). |
|
|
346
346
|
|
|
347
347
|
### Response
|
|
348
348
|
|
|
@@ -366,10 +366,12 @@ Always returns `200`; reports degraded state in the body. The only endpoint that
|
|
|
366
366
|
```json
|
|
367
367
|
{
|
|
368
368
|
"status": "ok",
|
|
369
|
-
"
|
|
370
|
-
"
|
|
371
|
-
"version": "
|
|
369
|
+
"mubit": {"reachable": true, "latency_ms": 12, "endpoint": "https://api.mubit.ai", "org_id": "…"},
|
|
370
|
+
"auth": "passthrough",
|
|
371
|
+
"catalog": {"version": "…", "cost_source": "litellm", "stale": false, "models": 42},
|
|
372
|
+
"reasoner": {"provider": "gemini", "configured": true},
|
|
373
|
+
"version": "0.4.9"
|
|
372
374
|
}
|
|
373
375
|
```
|
|
374
376
|
|
|
375
|
-
`status` is `degraded` when
|
|
377
|
+
An unauthenticated probe (no key) returns `"mubit": {"reachable": null, "scope": "unauthenticated"}` and `status: "ok"` — liveness only. `status` is `degraded` only when a **key-bearing** probe finds your memory backend unreachable (`mubit.reachable == false`); in that state `/recommend` still serves prior-only recommendations.
|
|
@@ -9,6 +9,14 @@ import { Aside, Code } from '@astrojs/starlight/components';
|
|
|
9
9
|
|
|
10
10
|
The `minima_client` package is the official thin, typed Python client for the hosted Minima API, plus an optional zero-code intake helper.
|
|
11
11
|
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pip install minima-cli
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The SDK is published on PyPI as part of [**`minima-cli`**](https://pypi.org/project/minima-cli/) — one package that ships both the CLI agent and the `minima_client` SDK (also available via `brew install mubit-ai/minima/minima`). Import it as `minima_client`:
|
|
19
|
+
|
|
12
20
|
```python
|
|
13
21
|
from minima_client import MinimaClient, AsyncMinimaClient, MinimaError, autocapture
|
|
14
22
|
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
class Maybe {
|
|
3
|
+
value;
|
|
4
|
+
constructor(value) {
|
|
5
|
+
this.value = value;
|
|
6
|
+
}
|
|
7
|
+
static some(value) {
|
|
8
|
+
if (value === null || value === undefined) {
|
|
9
|
+
throw new Error("Cannot create 'some' with null or undefined");
|
|
10
|
+
}
|
|
11
|
+
return new Maybe(value);
|
|
12
|
+
}
|
|
13
|
+
static none() {
|
|
14
|
+
return new Maybe(null);
|
|
15
|
+
}
|
|
16
|
+
// Functor: map applies a function to the value if it exists
|
|
17
|
+
map(fn) {
|
|
18
|
+
if (this.value === null || this.value === undefined) {
|
|
19
|
+
return Maybe.none();
|
|
20
|
+
}
|
|
21
|
+
return Maybe.some(fn(this.value));
|
|
22
|
+
}
|
|
23
|
+
// Monad: flatMap applies a function that returns a Maybe, and flattens the result
|
|
24
|
+
flatMap(fn) {
|
|
25
|
+
if (this.value === null || this.value === undefined) {
|
|
26
|
+
return Maybe.none();
|
|
27
|
+
}
|
|
28
|
+
return fn(this.value);
|
|
29
|
+
}
|
|
30
|
+
get() {
|
|
31
|
+
return this.value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// --- Functor Example (map) ---
|
|
35
|
+
const maybeName = Maybe.some("Alice");
|
|
36
|
+
const upperName = maybeName.map(name => name.toUpperCase());
|
|
37
|
+
console.log("Functor (map) result:", upperName.get()); // ALICE
|
|
38
|
+
const maybeEmpty = Maybe.none();
|
|
39
|
+
const upperEmpty = maybeEmpty.map(name => name.toUpperCase());
|
|
40
|
+
console.log("Functor (map) on empty result:", upperEmpty.get()); // null
|
|
41
|
+
const users = {
|
|
42
|
+
1: { id: 1, name: "Bob", email: "bob@example.com" },
|
|
43
|
+
2: { id: 2, name: "Charlie" }
|
|
44
|
+
};
|
|
45
|
+
function findUserById(id) {
|
|
46
|
+
const user = users[id];
|
|
47
|
+
return user ? Maybe.some(user) : Maybe.none();
|
|
48
|
+
}
|
|
49
|
+
function getUserEmail(user) {
|
|
50
|
+
return user.email ? Maybe.some(user.email) : Maybe.none();
|
|
51
|
+
}
|
|
52
|
+
// Chaining with flatMap
|
|
53
|
+
const user1Email = findUserById(1)
|
|
54
|
+
.flatMap(getUserEmail)
|
|
55
|
+
.map(email => `Email: ${email}`);
|
|
56
|
+
console.log("Monad (flatMap) user 1 email:", user1Email.get()); // Email: bob@example.com
|
|
57
|
+
const user2Email = findUserById(2)
|
|
58
|
+
.flatMap(getUserEmail)
|
|
59
|
+
.map(email => `Email: ${email}`);
|
|
60
|
+
console.log("Monad (flatMap) user 2 email:", user2Email.get()); // null (because user 2 has no email)
|
|
61
|
+
const user3Email = findUserById(3) // Non-existent user
|
|
62
|
+
.flatMap(getUserEmail)
|
|
63
|
+
.map(email => `Email: ${email}`);
|
|
64
|
+
console.log("Monad (flatMap) user 3 email:", user3Email.get()); // null
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
|
|
2
|
+
type Mapper<T, U> = (value: T) => U;
|
|
3
|
+
type MonadicMapper<T, U> = (value: T) => Maybe<U>;
|
|
4
|
+
|
|
5
|
+
class Maybe<T> {
|
|
6
|
+
private constructor(private value: T | null | undefined) {}
|
|
7
|
+
|
|
8
|
+
static some<T>(value: T): Maybe<T> {
|
|
9
|
+
if (value === null || value === undefined) {
|
|
10
|
+
throw new Error("Cannot create 'some' with null or undefined");
|
|
11
|
+
}
|
|
12
|
+
return new Maybe(value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static none<T>(): Maybe<T> {
|
|
16
|
+
return new Maybe<T>(null);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Functor: map applies a function to the value if it exists
|
|
20
|
+
map<U>(fn: Mapper<T, U>): Maybe<U> {
|
|
21
|
+
if (this.value === null || this.value === undefined) {
|
|
22
|
+
return Maybe.none<U>();
|
|
23
|
+
}
|
|
24
|
+
return Maybe.some(fn(this.value));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Monad: flatMap applies a function that returns a Maybe, and flattens the result
|
|
28
|
+
flatMap<U>(fn: MonadicMapper<T, U>): Maybe<U> {
|
|
29
|
+
if (this.value === null || this.value === undefined) {
|
|
30
|
+
return Maybe.none<U>();
|
|
31
|
+
}
|
|
32
|
+
return fn(this.value);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get(): T | null | undefined {
|
|
36
|
+
return this.value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// --- Functor Example (map) ---
|
|
41
|
+
const maybeName = Maybe.some("Alice");
|
|
42
|
+
const upperName = maybeName.map(name => name.toUpperCase());
|
|
43
|
+
console.log("Functor (map) result:", upperName.get()); // ALICE
|
|
44
|
+
|
|
45
|
+
const maybeEmpty = Maybe.none<string>();
|
|
46
|
+
const upperEmpty = maybeEmpty.map(name => name.toUpperCase());
|
|
47
|
+
console.log("Functor (map) on empty result:", upperEmpty.get()); // null
|
|
48
|
+
|
|
49
|
+
// --- Monad Example (flatMap) ---
|
|
50
|
+
interface User {
|
|
51
|
+
id: number;
|
|
52
|
+
name: string;
|
|
53
|
+
email?: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const users: Record<number, User> = {
|
|
57
|
+
1: { id: 1, name: "Bob", email: "bob@example.com" },
|
|
58
|
+
2: { id: 2, name: "Charlie" }
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function findUserById(id: number): Maybe<User> {
|
|
62
|
+
const user = users[id];
|
|
63
|
+
return user ? Maybe.some(user) : Maybe.none();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function getUserEmail(user: User): Maybe<string> {
|
|
67
|
+
return user.email ? Maybe.some(user.email) : Maybe.none();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Chaining with flatMap
|
|
71
|
+
const user1Email = findUserById(1)
|
|
72
|
+
.flatMap(getUserEmail)
|
|
73
|
+
.map(email => `Email: ${email}`);
|
|
74
|
+
console.log("Monad (flatMap) user 1 email:", user1Email.get()); // Email: bob@example.com
|
|
75
|
+
|
|
76
|
+
const user2Email = findUserById(2)
|
|
77
|
+
.flatMap(getUserEmail)
|
|
78
|
+
.map(email => `Email: ${email}`);
|
|
79
|
+
console.log("Monad (flatMap) user 2 email:", user2Email.get()); // null (because user 2 has no email)
|
|
80
|
+
|
|
81
|
+
const user3Email = findUserById(3) // Non-existent user
|
|
82
|
+
.flatMap(getUserEmail)
|
|
83
|
+
.map(email => `Email: ${email}`);
|
|
84
|
+
console.log("Monad (flatMap) user 3 email:", user3Email.get()); // null
|
|
@@ -0,0 +1,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
|
+
}
|