minima-cli 0.4.10__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- minima_cli-0.5.0/.github/workflows/release-cli.yml +140 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/.gitignore +4 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/Makefile +30 -1
- {minima_cli-0.4.10 → minima_cli-0.5.0}/PKG-INFO +1 -1
- 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.10 → 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.10 → minima_cli-0.5.0}/src/minima_harness/minima/config.py +1 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/app.py +25 -9
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/editor.py +5 -4
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_queue.py +30 -8
- minima_cli-0.4.10/packaging/homebrew/README.md +0 -82
- minima_cli-0.4.10/packaging/homebrew/gen_resources.py +0 -185
- minima_cli-0.4.10/packaging/homebrew/minima.rb +0 -339
- {minima_cli-0.4.10 → minima_cli-0.5.0}/.dockerignore +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/.env.example +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/.github/workflows/prod.yml +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/.github/workflows/staging.yml +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/AGENTS.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/CHANGELOG.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/Dockerfile +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/LICENSE +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/README.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/agent/task_set.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/autocapture.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/client.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/client_sdk/minima_client/errors.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/README.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/api-reference.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/client-sdk.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/concepts.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/configuration.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/examples.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/getting-started.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/goals-feature-plan.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/harness.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/multi-tenancy.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/operations.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/publishing.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs/seeding.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/Dockerfile +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/astro.config.mjs +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/netlify.toml +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/nginx.conf +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/package-lock.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/package.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/public/favicon.svg +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/assets/logo.svg +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/config.ts +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/api-reference.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/client-sdk.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/concepts.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/examples.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/getting-started.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/content/docs/index.mdx +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/src/styles/custom.css +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/docs-site/tsconfig.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/01_quickstart.sh +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/02_recommend_and_feedback.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/03_constraints_and_tradeoff.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/04_workflow.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/05_autocapture.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/06_routed_llm_call.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/07_multitenant_admin.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/README.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_escalation.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_escalation_learn.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_gemini.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_retention.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_warmup.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/agent_warmup_vary.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/harness_warmup.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/metrics_demo.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/examples/smoke_test.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run1.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run2.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/strategies_run3.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_125009/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run1.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run2.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run3.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run4.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/strategies_run5.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_130252/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run1.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/strategies_run2.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_182838/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/memory_audit.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run1.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run2.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run3.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run4.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/strategies_run5.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260612_183343/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/memory_audit.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run1.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run2.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run3.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run4.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/strategies_run5.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/20260615_101732/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/escalation_20260612_201825/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/results.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/retention_20260612_201828/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/auth.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/errors.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/calibration.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/feedback.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/health.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/models.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/recommend.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/savings.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/api/routers/strategies.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/data/capability_priors.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/data/model_aliases.json +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/merge.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/refresh.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/litellm.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/sources/openrouter.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/catalog/store.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/config.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/deps.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/anthropic.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/base.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/gemini.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/llm/registry.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/logging.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/main.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/adapter.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/keys.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/records.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/memory/threadpool.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/calibration.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/report.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/metrics/savings.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/_pg_pool.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/_redis_client.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/aggregate.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/classify.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/decisionlog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/durablerefs.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/engine.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/escalation.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/propensity.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/recstore.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/score.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/recommender/types.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/common.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/feedback.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/models_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/recommend.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/savings.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/strategies.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/schemas/workflow.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/items.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/llmrouterbench.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/routerbench.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/run_seed.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/seeding/synthetic.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/context.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/tenancy/passthrough.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima/version.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/LICENSE_PI +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/agent.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/events.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/loop.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/state.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/agent/tools.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/compat.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/errors.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/events.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/openrouter_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/provider_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/provider_quirks.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/_common.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/anthropic.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/base.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/faux.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/google.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/providers/openai_compat.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/registry.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/stream.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/tools.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/types.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/ai/usage.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/cache.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/goals.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/judge.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/mapping.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/meter.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/router.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/runtime.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/minima/signals.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/format.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/session/store.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tasks/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tasks/task_set.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/_io.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/bash.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/builtin.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/edit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/find.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/grep.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/ls.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/read.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/tasks.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tools/write.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/analytics.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/bridge.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/cli.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/clipboard.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/commands.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/compaction.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/config_cli.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/config_store.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/context.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/customize.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/diff.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/editor.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/extensions.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/extra_models.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/history.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/mubit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/overlays.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/packages.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/run_modes.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/theme.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/welcome.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/banner.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/footer.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/messages.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/src/minima_harness/tui/widgets/status.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/conftest.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/BENCHMARKS.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/CRITERIA.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/RESULTS.md +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/harness.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/llmrouterbench_config.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/eval/test_routerbench_savings.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/factories.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_format.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_manager.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/session/test_store.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_agent_loop.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_anthropic_mapping.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_auth_reroute.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_cache.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_catalog_overlay.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_common_and_wire.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_compat.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_errors.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_goals.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_google_mapping.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_judge.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_mapping.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_minima_e2e.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_openai_compat_sse.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_openrouter_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase0_smoke.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_a.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_b.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_phase_c.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_quirks.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_registration.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_provider_wiring.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_runtime.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/test_signals.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_agent_smoke.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_bash.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_builtin.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_edit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_find.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_grep.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_io.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_ls.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_read.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tools/test_write.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/__init__.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_analytics.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_app_pilot.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_bridge.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_clipboard.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_command_popup.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_commands.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_config.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_context.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_customize.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_decision_card.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_diff.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_editor.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_editor_widget.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_export.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_extensions.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_goals_tui.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_history_sessions.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_messages.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_mouse_copy.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_mubit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_optimize.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_overlays.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p2.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p3.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_p5.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_permissions.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_predictability.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_prompt_layers.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_run_modes.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_status.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_status_bar.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_theme.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_thoughts.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_tool_render.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_ux.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_welcome.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/harness/tui/test_widgets.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_escalation_reasoner.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_feedback_loop.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_lesson_promotion.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_measurement_api.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_observed_cost_ranking.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_recommend_api.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_strategies_api.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/integration/test_workflow_models_health.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_escalation_fixes.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_full_surface_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_mubit_roundtrip.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_phase3_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_reasoner_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/live/test_recall_params_live.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_aggregate.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_aggregate_decay.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_autocapture.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_calibration_fit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_classify_keys.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_cluster.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_collapse_guard.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_cost_band.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_decisionlog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_escalation.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_exploration.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_ipw.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_iterations.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_latency_quality.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_lever_cost.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_metrics.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_metrics_demo.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_neighbor_classify.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_reasoner.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_records_catalog.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_recstore_sqlite.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_score.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_shadow_bandit.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_store_backends.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_strategies.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_tenancy.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/tests/unit/test_thompson.py +0 -0
- {minima_cli-0.4.10 → minima_cli-0.5.0}/uv.lock +0 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
name: Release — CLI binaries + Homebrew
|
|
2
|
+
|
|
3
|
+
# On a published release, cross-compile the TypeScript/Bun CLI for macOS + Linux,
|
|
4
|
+
# ad-hoc codesign the macOS arches, attach the tarballs to the release, and open
|
|
5
|
+
# a PR to the Homebrew tap (mubit-ai/homebrew-minima) bumping the binary formula.
|
|
6
|
+
# PyPI publishing of the Python `minima-cli` (SDK + server tooling) stays in prod.yml.
|
|
7
|
+
on:
|
|
8
|
+
release:
|
|
9
|
+
types: [published]
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
tag:
|
|
13
|
+
description: "Git tag to build (e.g. v0.5.0)"
|
|
14
|
+
required: true
|
|
15
|
+
type: string
|
|
16
|
+
|
|
17
|
+
concurrency:
|
|
18
|
+
group: release-cli
|
|
19
|
+
cancel-in-progress: false
|
|
20
|
+
|
|
21
|
+
env:
|
|
22
|
+
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.tag }}
|
|
23
|
+
BUN_VERSION: "1.3.14"
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: write # upload release assets
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
build-macos:
|
|
30
|
+
name: Build + sign macOS binaries
|
|
31
|
+
runs-on: macos-14 # Apple Silicon; cross-compiles darwin-x64 too, codesign is arch-agnostic
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v5
|
|
34
|
+
with:
|
|
35
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
36
|
+
- uses: oven-sh/setup-bun@v2
|
|
37
|
+
with:
|
|
38
|
+
bun-version: ${{ env.BUN_VERSION }}
|
|
39
|
+
- name: Install deps
|
|
40
|
+
working-directory: packages/tui
|
|
41
|
+
run: bun install --frozen-lockfile
|
|
42
|
+
- name: Cross-compile darwin arm64 + x64
|
|
43
|
+
working-directory: packages/tui
|
|
44
|
+
run: bun run scripts/build-all.ts bun-darwin-arm64 bun-darwin-x64
|
|
45
|
+
- name: Ad-hoc codesign (required for Apple Silicon to run the binary)
|
|
46
|
+
working-directory: packages/tui
|
|
47
|
+
run: |
|
|
48
|
+
for b in dist/minima-darwin-arm64 dist/minima-darwin-x64; do
|
|
49
|
+
codesign -s - --force --timestamp=none "$b"
|
|
50
|
+
codesign --verify --verbose=1 "$b"
|
|
51
|
+
done
|
|
52
|
+
- name: Package tarballs
|
|
53
|
+
working-directory: packages/tui
|
|
54
|
+
run: |
|
|
55
|
+
VER="${RELEASE_TAG#v}"
|
|
56
|
+
for slug in darwin-arm64 darwin-x64; do
|
|
57
|
+
tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
|
|
58
|
+
tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
|
|
59
|
+
done
|
|
60
|
+
- uses: actions/upload-artifact@v4
|
|
61
|
+
with:
|
|
62
|
+
name: darwin
|
|
63
|
+
path: packages/tui/dist/minima-*.tar.gz
|
|
64
|
+
|
|
65
|
+
build-linux:
|
|
66
|
+
name: Build Linux binaries
|
|
67
|
+
runs-on: ubuntu-latest
|
|
68
|
+
steps:
|
|
69
|
+
- uses: actions/checkout@v5
|
|
70
|
+
with:
|
|
71
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
72
|
+
- uses: oven-sh/setup-bun@v2
|
|
73
|
+
with:
|
|
74
|
+
bun-version: ${{ env.BUN_VERSION }}
|
|
75
|
+
- name: Install deps
|
|
76
|
+
working-directory: packages/tui
|
|
77
|
+
run: bun install --frozen-lockfile
|
|
78
|
+
- name: Cross-compile linux x64 + arm64
|
|
79
|
+
working-directory: packages/tui
|
|
80
|
+
run: bun run scripts/build-all.ts bun-linux-x64 bun-linux-arm64
|
|
81
|
+
- name: Package tarballs
|
|
82
|
+
working-directory: packages/tui
|
|
83
|
+
run: |
|
|
84
|
+
VER="${RELEASE_TAG#v}"
|
|
85
|
+
for slug in linux-x64 linux-arm64; do
|
|
86
|
+
tmp="$(mktemp -d)"; cp "dist/minima-$slug" "$tmp/minima"
|
|
87
|
+
tar -czf "dist/minima-$VER-$slug.tar.gz" -C "$tmp" minima
|
|
88
|
+
done
|
|
89
|
+
- uses: actions/upload-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
name: linux
|
|
92
|
+
path: packages/tui/dist/minima-*.tar.gz
|
|
93
|
+
|
|
94
|
+
publish-and-bump:
|
|
95
|
+
name: Attach assets + open tap PR
|
|
96
|
+
needs: [build-macos, build-linux]
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v5
|
|
100
|
+
with:
|
|
101
|
+
ref: ${{ env.RELEASE_TAG }}
|
|
102
|
+
- uses: actions/download-artifact@v4
|
|
103
|
+
with:
|
|
104
|
+
path: artifacts
|
|
105
|
+
- name: Collect tarballs
|
|
106
|
+
run: |
|
|
107
|
+
mkdir -p dist
|
|
108
|
+
find artifacts -name 'minima-*.tar.gz' -exec cp {} dist/ \;
|
|
109
|
+
ls -la dist
|
|
110
|
+
- name: Attach binaries to the release
|
|
111
|
+
env:
|
|
112
|
+
GH_TOKEN: ${{ github.token }}
|
|
113
|
+
run: gh release upload "$RELEASE_TAG" dist/minima-*.tar.gz --clobber --repo "${{ github.repository }}"
|
|
114
|
+
- name: Render binary formula
|
|
115
|
+
run: |
|
|
116
|
+
VER="${RELEASE_TAG#v}"
|
|
117
|
+
python3 packaging/homebrew/render_formula.py --version "$VER" --dist dist --out minima.rb
|
|
118
|
+
echo "----- rendered formula -----"; cat minima.rb
|
|
119
|
+
- name: Open Homebrew tap PR
|
|
120
|
+
env:
|
|
121
|
+
GH_TOKEN: ${{ secrets.GH_PAT }}
|
|
122
|
+
run: |
|
|
123
|
+
VER="${RELEASE_TAG#v}"
|
|
124
|
+
git clone "https://x-access-token:${GH_TOKEN}@github.com/mubit-ai/homebrew-minima.git" tap
|
|
125
|
+
cp minima.rb tap/Formula/minima.rb
|
|
126
|
+
cd tap
|
|
127
|
+
git config user.name "mubit-release-bot"
|
|
128
|
+
git config user.email "release-bot@mubit.ai"
|
|
129
|
+
branch="bump-minima-${VER}"
|
|
130
|
+
git checkout -b "$branch"
|
|
131
|
+
if git diff --quiet Formula/minima.rb; then
|
|
132
|
+
echo "formula already up to date for ${VER}; nothing to do"; exit 0
|
|
133
|
+
fi
|
|
134
|
+
git add Formula/minima.rb
|
|
135
|
+
git commit -m "minima ${VER} (prebuilt binary)"
|
|
136
|
+
git push -u origin "$branch" --force-with-lease
|
|
137
|
+
gh pr create --repo mubit-ai/homebrew-minima --base main --head "$branch" \
|
|
138
|
+
--title "minima ${VER}" \
|
|
139
|
+
--body "Automated bump to the prebuilt TypeScript/Bun binary for \`${RELEASE_TAG}\`. Replaces the Python virtualenv formula. \`brew test-bot\` validates install + \`test do\` on macOS + Linux before merge." \
|
|
140
|
+
|| echo "PR already exists for ${branch}"
|
|
@@ -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
|
|
@@ -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
|
+
}
|