minima-cli 0.9.0__tar.gz → 0.10.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.9.0 → minima_cli-0.10.0}/CHANGELOG.md +34 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/PKG-INFO +1 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/ground-truth-build-guide.md +1 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/package.json +1 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/loop.ts +19 -10
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/faux.ts +18 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/cli/main.ts +14 -2
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/minima_db.ts +261 -38
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/budget.ts +20 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/check.ts +86 -16
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/confidence.ts +1 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/config.ts +9 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/ground_truth.ts +349 -63
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/gt_contract.ts +6 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/index.ts +2 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/judge.ts +18 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/meter.ts +18 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/plan_council.ts +175 -57
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/plan_session.ts +64 -13
- minima_cli-0.10.0/packages/tui/src/minima/plan_turn.ts +165 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/runtime.ts +41 -13
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/spawn.ts +21 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/why.ts +36 -2
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/bash.ts +6 -5
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/app.tsx +217 -154
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/layout.ts +102 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/permissions.ts +38 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/text-input.tsx +13 -4
- minima_cli-0.10.0/packages/tui/tests/bash-group.test.ts +56 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/behavior.test.ts +90 -9
- minima_cli-0.10.0/packages/tui/tests/check.test.ts +346 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/db.test.ts +2 -1
- minima_cli-0.10.0/packages/tui/tests/db_migrate.test.ts +122 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/feedback-grounded.test.ts +66 -7
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gate.test.ts +125 -19
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ground_truth.test.ts +85 -5
- minima_cli-0.10.0/packages/tui/tests/grounded.test.ts +307 -0
- minima_cli-0.10.0/packages/tui/tests/gt-attribution.test.ts +206 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-e2e.test.ts +44 -48
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-footer.test.ts +26 -2
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/hooks.test.ts +22 -0
- minima_cli-0.10.0/packages/tui/tests/judge-cost-booking.test.ts +219 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/judge.test.ts +31 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ladder.test.ts +17 -9
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/layout.test.ts +161 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/permissions.test.ts +91 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/plan_council.test.ts +330 -17
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/plan_session.test.ts +182 -8
- minima_cli-0.10.0/packages/tui/tests/plan_turn.test.ts +218 -0
- minima_cli-0.10.0/packages/tui/tests/resume-gt.test.ts +116 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/pyproject.toml +1 -1
- {minima_cli-0.9.0 → minima_cli-0.10.0}/uv.lock +1 -1
- minima_cli-0.9.0/packages/tui/tests/check.test.ts +0 -173
- minima_cli-0.9.0/packages/tui/tests/grounded.test.ts +0 -194
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.dockerignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.env.example +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/catalog-snapshot.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/ci.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/prod.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/release-cli.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.github/workflows/staging.yml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/AGENTS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/CLAUDE.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/Dockerfile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/LICENSE +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/Makefile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/assert/check.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/assert/db.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/env.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/headless.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/mock_server.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/rig.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/driver/scratch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/_example/mathx.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/_example/tests/test_public.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/csv.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/object.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/stats.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/src/transform.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/csv.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/object.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/stats.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/js-lib/tests/transform.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/chunk.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/droot.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/duration.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/js/wrap.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/checksum.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/intervals.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/rle.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/py/roman.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/chunk/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/droot/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/duration/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/js/wrap/smoke.test.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/conftest.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_checksum_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_intervals_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_rle_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/py/test_roman_smoke.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/brackets/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/drift/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/ordinal/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/tests/ts/slug/smoke.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/brackets.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/drift.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/ordinal.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/katas/ts/slug.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/pytest.ini +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/__main__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/cli.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/dates.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/migrations.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/query.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/taskman/storage.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/conftest.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_cli.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_dates.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_query.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/py-cli/tests/test_storage.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/app.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/auth.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/errors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/admin.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/links.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/notes.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/handlers/stats.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/persist.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/ratelimit.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/respond.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/router.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/server.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/src/validate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/auth.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/health.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/helpers.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/links.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/notes.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/persist.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/ratelimit.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/router.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/stats.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/store.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tests/validate.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/fixtures/templates/ts-api/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f10_recovery_ladder.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f12_learning_loop.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f1_headless.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f4_cost_budget.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f5_task_dag_worktree.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f6_resume_lineage.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f7_permissions_plan.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/flows/f9_offline_reconnect.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/attempt.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/build_index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibrate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibrate_all.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/calibration_report.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/materialize.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/savings_ab.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/savings_report.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/gen/validate_task.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/run.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/_example/ex-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/calibration.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/js-lib/jl-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-008/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-009/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-010/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-011/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/katas/ka-012/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/py-cli/pc-008/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/savings_ab.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-001/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-002/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/oracle.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-003/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-004/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-005/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-006/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/bug.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/hidden_tests.patch +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/bench/tasks/ts-api/ta-007/task.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/autocapture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/client.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/client_sdk/minima_client/errors.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/agent-core-architecture.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/agent-core-implementation-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/api-reference.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/client-sdk.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/concepts.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/configuration.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/examples.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/feature-gap-analysis.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/getting-started.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/goals-feature-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/ground-truth-tui-plan.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/harness.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/multi-tenancy.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/operations.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/publishing.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs/seeding.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/.dockerignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/Dockerfile +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Accordion.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Badge.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Card.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/CardGroup.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Frame.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Note.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/PageHeader.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Steps.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/Tabs.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/components/sidebar.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/netlify.toml +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/nginx.conf +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/package-lock.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/package.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/api-reference/endpoints.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/cli.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/configuration.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/installation.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/interactive.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/overview.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/routing.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/sessions.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/tools.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/harness/troubleshooting.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/index.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/client-sdk.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/concepts.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/examples.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/pages/sdk/getting-started.mdx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/favicon.png +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/logo-dark.svg +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/images/logo-light.svg +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/public/styles/global.css +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/docs-site/vocs.config.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/01_quickstart.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/02_recommend_and_feedback.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/03_constraints_and_tradeoff.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/04_workflow.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/05_autocapture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/06_routed_llm_call.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/07_multitenant_admin.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_escalation.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_escalation_learn.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_gemini.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_retention.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_warmup.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/agent_warmup_vary.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/metrics_demo.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/examples/smoke_test.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/maybe.js +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/maybe.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/.gitignore +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/biome.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/bun.lock +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/build-all.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/build.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/install.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/pty_capture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/scripts/stub-devtools.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/agent.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/events.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/state.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/agent/tools.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/compat.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/events.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/provider_catalog.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/provider_quirks.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/_common.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/anthropic.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/base.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/google.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/providers/openai_compat.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/registry.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/stream.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/ai/usage.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/metrics.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/rehydrate.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/db/sink.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/errtext.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/behavior.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/catalog.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/client.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/errors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/gt_factors.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/mapping.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/memory.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/mubit_memory_factory.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/router.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/minima/schemas.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/run_modes.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/session/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/session/store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_ddg.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_exa.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_io.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/_search.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/apply_patch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/at_mentions.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/builtin.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/edit.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/glob.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/grep.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/index.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/ls.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/question.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/read.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/schema.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/task.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/todowrite.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/types.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/web_fetch.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/web_search.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tools/write.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/auth.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/busy.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/child_tree.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/compact.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/config_store.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/context.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/current_action.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/messages.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/model-picker.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/mouse-scroll.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/projects.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/routing-warnings.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/status.tsx +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/tui/tips.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/types.d.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/src/version.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/agent.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/ai.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/anthropic.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/apply_patch.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/auth.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/budget.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/busy.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/candidate-filter.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/catalog.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/client.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/confidence.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/config_store.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/current_action.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/effort.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/error-ux.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/google.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt-contract.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/gt_factors.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/isolation.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/memory.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/minima.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/minima_memory.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/mouse-scroll.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/openai_compat.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/recall-user-id.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/render-buffer.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/run_modes.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/session.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/spawn.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/task.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/thinking.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/tips.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/tools.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tests/why.test.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packages/tui/tsconfig.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packaging/homebrew/README.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/packaging/homebrew/render_formula.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_125009/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_130252/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_182838/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260612_183343/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run1.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run2.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run3.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run4.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/strategies_run5.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260615_101732/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/memory_audit.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/recall_debug.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/20260624_103307/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/cold_probe.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_133108/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/cold_probe.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalate_20260615_134209/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/results.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/escalation_20260612_201825/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/_manifest.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/calibration.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/feedback.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/health.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/models.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/recommend.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/savings.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/strategies.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/playground_p1/workflow.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/results.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/retention_20260612_201828/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/REPORT.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/summary.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/runs/warmupvary_20260615_123818/tasks.jsonl +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/eval/classify_dataset.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/eval/eval_classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing-web.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing.sh +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/scripts/test-routing.ts +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/auth.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/errors.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/calibration.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/feedback.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/health.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/models.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/recommend.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/api/routers/strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/data/capability_priors.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/data/model_aliases.json +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/merge.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/refresh.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/litellm.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/sources/openrouter.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/catalog/store.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/config.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/deps.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/anthropic.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/base.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/gemini.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/llm/registry.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/logging.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/main.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/adapter.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/keys.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/records.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/memory/threadpool.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/calibration.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/report.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/metrics/savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/_pg_pool.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/_redis_client.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/aggregate.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/decisionlog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/durablerefs.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/engine.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/escalation.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/propensity.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/recstore.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/score.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/recommender/types.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/common.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/feedback.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/models_catalog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/recommend.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/schemas/workflow.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/items.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/llmrouterbench.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/routerbench.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/run_seed.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/seeding/synthetic.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/context.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/tenancy/passthrough.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/src/minima/version.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/conftest.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/BENCHMARKS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/CRITERIA.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/RESULTS.md +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/__init__.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/harness.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/llmrouterbench_config.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/prompt_length_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/test_llmrouterbench_savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/eval/test_routerbench_savings.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/factories.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_auth.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_escalation_reasoner.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_feedback_loop.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_lesson_promotion.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_measurement_api.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_observed_cost_ranking.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_recommend_api.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_strategies_api.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/integration/test_workflow_models_health.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_cost_savings_spotcheck_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_escalation_fixes.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_full_surface_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_mubit_roundtrip.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_phase3_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_reasoner_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/live/test_recall_params_live.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_aggregate.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_aggregate_decay.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_autocapture.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_calibration_fit.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_capabilities.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_classify_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_classify_keys.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_cluster.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_collapse_guard.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_cost_band.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_decisionlog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_escalation.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_exploration.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_ipw.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_iterations.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_latency_quality.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_lever_cost.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_metrics.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_metrics_demo.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_neighbor_classify.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_prompt_length_benchmark.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_reasoner.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_records_catalog.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_recstore_sqlite.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_score.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_shadow_bandit.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_store_backends.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_strategies.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_tenancy.py +0 -0
- {minima_cli-0.9.0 → minima_cli-0.10.0}/tests/unit/test_thompson.py +0 -0
|
@@ -4,6 +4,40 @@ 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.10.0] - 2026-07-12
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **Ground-truth spine hardened end-to-end** (still opt-in via `MINIMA_TUI_GROUND_TRUTH=1`):
|
|
11
|
+
- Gate verdicts now carry the `rec_id` of the turn that minted them, so grounded
|
|
12
|
+
feedback can never be poisoned by a stale gate from an earlier prompt, and a
|
|
13
|
+
blocked step's red verdict is superseded by its retry (content-first flip
|
|
14
|
+
identity). Plans close when their last flip is verified, instead of haunting
|
|
15
|
+
every later turn.
|
|
16
|
+
- Step identity survives rewording (token-set matching), a step's baseline resets
|
|
17
|
+
when its `verify` command changes (no fabricated red→green), and resuming a run
|
|
18
|
+
re-adopts its active plan.
|
|
19
|
+
- Bash writes and sub-agent writes are attributed to the run; unattributed
|
|
20
|
+
("blind") writes cap confidence at 🟡 instead of silently passing.
|
|
21
|
+
- Check runner: verify commands run in their own process group and are killed as a
|
|
22
|
+
group on timeout/abort (no orphaned children), run under a minimal env allowlist,
|
|
23
|
+
and honor `MINIMA_TUI_CHECK_TIMEOUT`.
|
|
24
|
+
- `/plan` council: injected findings are fenced as untrusted data, the whole plan
|
|
25
|
+
turn aborts cleanly on Esc (partial research kept), and each council round is
|
|
26
|
+
budget-metered ($0.25/round soft cap).
|
|
27
|
+
- **Default path** (no flag required): the SQLite migration runner is race-safe across
|
|
28
|
+
concurrent sessions and self-heals a previously wedged DB; a bash tool timeout/abort
|
|
29
|
+
kills the whole process group; a throwing after-hook no longer wedges the agent loop;
|
|
30
|
+
the `task` tool is blocked in plan mode.
|
|
31
|
+
- Gate-focus modal: keyboard verdict overrides (approve / reject / steer with a note)
|
|
32
|
+
reach the correct gate, and the TUI footer/overlay no longer overflow on narrow
|
|
33
|
+
terminals.
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
- With `MINIMA_LLM_JUDGE=1`, judge grading spend is now booked to the session wallet —
|
|
37
|
+
visible in `/cost` (as `judge overhead`), the footer, and enforced by `--budget` —
|
|
38
|
+
while staying out of feedback's `actual_cost_usd` so the cost model Minima learns
|
|
39
|
+
from stays clean.
|
|
40
|
+
|
|
7
41
|
## [0.9.0] - 2026-07-10
|
|
8
42
|
|
|
9
43
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: minima-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.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
|
|
@@ -246,7 +246,7 @@ _By the end of this stage each step carries a check command, and you can run it
|
|
|
246
246
|
- **Goal (plain):** a helper that runs a command and tells you pass/fail + output.
|
|
247
247
|
- **Why:** the single primitive everything in Stages 4–6 leans on.
|
|
248
248
|
- **Build:**
|
|
249
|
-
- Mirror the `/undo` git shell-out pattern: spawn the command, capture exit code + stdout/stderr, enforce a timeout (`MINIMA_TIMEOUT`), return `{ pass: boolean, output: string, durationMs }`.
|
|
249
|
+
- Mirror the `/undo` git shell-out pattern: spawn the command in its own process group with an allowlisted env (`MINIMA_TUI_CHECK_ENV` adds names), capture exit code + stdout/stderr, enforce a timeout (`MINIMA_TUI_CHECK_TIMEOUT`, seconds — independent of the `MINIMA_TIMEOUT` routing timeout), return `{ pass: boolean, output: string, durationMs }`.
|
|
250
250
|
- **See it work:** unit test: `runCheck("true")` → pass; `runCheck("false")` → fail; a sleeping command → times out cleanly.
|
|
251
251
|
- **Done when:** `bun test` covers pass, fail, and timeout.
|
|
252
252
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minima-tui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Minima harness + TUI — the `minima` CLI (TypeScript/Ink; successor to the removed Python harness). Talks to the Python FastAPI recommender service over the /v1/* contract.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
@@ -374,16 +374,25 @@ async function runOneTool(
|
|
|
374
374
|
}
|
|
375
375
|
|
|
376
376
|
if (config.afterToolCall) {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
377
|
+
// A throwing after-hook must not unwind the batch: with Promise.all a single throw
|
|
378
|
+
// rejected the whole executeToolCalls pass BEFORE any completion entry ran its
|
|
379
|
+
// pendingToolCalls.delete, leaking the ids for the rest of the session (hooks are
|
|
380
|
+
// bookkeeping; enforcement lives in beforeToolCall).
|
|
381
|
+
try {
|
|
382
|
+
const ar = await config.afterToolCall({
|
|
383
|
+
toolCall: p.tc,
|
|
384
|
+
result,
|
|
385
|
+
isError,
|
|
386
|
+
context: state,
|
|
387
|
+
} satisfies AfterToolCallContext);
|
|
388
|
+
if (ar) {
|
|
389
|
+
if (ar.terminate) result = { ...result, terminate: true };
|
|
390
|
+
if (ar.details)
|
|
391
|
+
result = { ...result, details: { ...(result.details ?? {}), ...ar.details } };
|
|
392
|
+
if (ar.content) result = { ...result, content: ar.content };
|
|
393
|
+
}
|
|
394
|
+
} catch {
|
|
395
|
+
// degrade to the raw tool result
|
|
387
396
|
}
|
|
388
397
|
}
|
|
389
398
|
|
|
@@ -49,10 +49,20 @@ function estimateUsage(msg: AssistantMessage): void {
|
|
|
49
49
|
msg.usage.output = Math.max(1, Math.floor(charLen / CHARS_PER_TOKEN));
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/** One captured request — lets tests assert on the exact prompt content a model would see. */
|
|
53
|
+
export interface FauxRequest {
|
|
54
|
+
model: string;
|
|
55
|
+
systemPrompt: string | null;
|
|
56
|
+
messageCount: number;
|
|
57
|
+
/** Concatenated text of the LAST user message — the prompt under test. */
|
|
58
|
+
user: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
52
61
|
/** Observable per-registration state. */
|
|
53
62
|
export class FauxProviderState {
|
|
54
63
|
callCount = 0;
|
|
55
64
|
responses: AssistantMessage[] = [];
|
|
65
|
+
requests: FauxRequest[] = [];
|
|
56
66
|
get pendingResponseCount(): number {
|
|
57
67
|
return this.responses.length;
|
|
58
68
|
}
|
|
@@ -115,13 +125,20 @@ class FauxProvider implements Provider {
|
|
|
115
125
|
|
|
116
126
|
async *stream(
|
|
117
127
|
model: Model,
|
|
118
|
-
|
|
128
|
+
context: Context,
|
|
119
129
|
opts?: { options?: Record<string, unknown>; signal?: AbortSignal },
|
|
120
130
|
): AsyncIterable<StreamEvent> {
|
|
121
131
|
// Honor a pre-aborted signal like the real providers, so abort behaviour is
|
|
122
132
|
// exercisable in hermetic tests.
|
|
123
133
|
if (opts?.signal?.aborted) throw new DOMException("Aborted", "AbortError");
|
|
124
134
|
this.state.callCount += 1;
|
|
135
|
+
const lastUser = [...context.messages].reverse().find((m) => m.role === "user");
|
|
136
|
+
this.state.requests.push({
|
|
137
|
+
model: model.id,
|
|
138
|
+
systemPrompt: context.system_prompt ?? null,
|
|
139
|
+
messageCount: context.messages.length,
|
|
140
|
+
user: lastUser?.textContent ?? "",
|
|
141
|
+
});
|
|
125
142
|
const queued = this.state.responses.shift();
|
|
126
143
|
if (!queued) {
|
|
127
144
|
const err = new AssistantMessage({
|
|
@@ -360,13 +360,18 @@ export async function main(argv: string[] = process.argv.slice(2)): Promise<numb
|
|
|
360
360
|
|
|
361
361
|
// Judge: abstains by default (honest — no fabricated quality). MINIMA_LLM_JUDGE=1 turns
|
|
362
362
|
// on real LLM grading (staged default-off: it spends money where ConstJudge spent zero).
|
|
363
|
+
// Judge spend books to the session wallet (meter overhead + budget) but NEVER into
|
|
364
|
+
// feedback's actual_cost_usd — folding it in would inflate the routed model's observed
|
|
365
|
+
// $/call and poison the observed/rescaled cost basis. Late-bound: the agent (and its
|
|
366
|
+
// optional budget) doesn't exist yet at judge construction.
|
|
367
|
+
let bookJudgeSpend: (usd: number) => void = () => {};
|
|
363
368
|
let judge: ConstJudge | LLMJudge = new ConstJudge(null);
|
|
364
369
|
if (process.env.MINIMA_LLM_JUDGE === "1") {
|
|
365
370
|
const jm = findModelById(config.judgeModel);
|
|
366
371
|
if (jm && providerKeyPresent(jm.provider)) {
|
|
367
|
-
judge = new LLMJudge(jm);
|
|
372
|
+
judge = new LLMJudge(jm, { onCostUsd: (usd) => bookJudgeSpend(usd) });
|
|
368
373
|
process.stderr.write(
|
|
369
|
-
`minima: LLM judge on (${jm.id}) — grading adds a small per-prompt cost\n`,
|
|
374
|
+
`minima: LLM judge on (${jm.id}) — grading adds a small per-prompt cost (booked to /cost + budget)\n`,
|
|
370
375
|
);
|
|
371
376
|
} else {
|
|
372
377
|
process.stderr.write(
|
|
@@ -382,6 +387,13 @@ export async function main(argv: string[] = process.argv.slice(2)): Promise<numb
|
|
|
382
387
|
judge,
|
|
383
388
|
systemPrompt,
|
|
384
389
|
});
|
|
390
|
+
// agent.budget is attached later (--budget) — read it at call time. Children share this
|
|
391
|
+
// judge instance (spawn.ts), so their grading books here too, never into their own
|
|
392
|
+
// meter rows (which the parent reads as the child's routed cost).
|
|
393
|
+
bookJudgeSpend = (usd) => {
|
|
394
|
+
agent.meter?.addOverhead(usd);
|
|
395
|
+
agent.budget?.bookSpend(usd, "judge");
|
|
396
|
+
};
|
|
385
397
|
// Apply the --thinking CLI flag to the initial reasoning level. It was parsed but never used;
|
|
386
398
|
// the agent kept its default, so the flag was a silent no-op.
|
|
387
399
|
const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"];
|
|
@@ -34,6 +34,27 @@ export function newId(): string {
|
|
|
34
34
|
return crypto.randomUUID();
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
function isBusyError(e: unknown): boolean {
|
|
38
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
39
|
+
return msg.includes("SQLITE_BUSY") || msg.includes("database is locked");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function tokenJaccard(a: string, b: string): number {
|
|
43
|
+
const tokens = (s: string) =>
|
|
44
|
+
new Set(
|
|
45
|
+
s
|
|
46
|
+
.toLowerCase()
|
|
47
|
+
.split(/[^a-z0-9]+/)
|
|
48
|
+
.filter(Boolean),
|
|
49
|
+
);
|
|
50
|
+
const ta = tokens(a);
|
|
51
|
+
const tb = tokens(b);
|
|
52
|
+
if (ta.size === 0 || tb.size === 0) return 0;
|
|
53
|
+
let hit = 0;
|
|
54
|
+
for (const t of ta) if (tb.has(t)) hit += 1;
|
|
55
|
+
return hit / (ta.size + tb.size - hit);
|
|
56
|
+
}
|
|
57
|
+
|
|
37
58
|
/** Ordered, idempotent migrations. schema_meta.version = index of the last applied + 1. */
|
|
38
59
|
const MIGRATIONS: string[][] = [
|
|
39
60
|
// v1 — core spine
|
|
@@ -200,6 +221,22 @@ const MIGRATIONS: string[][] = [
|
|
|
200
221
|
"ALTER TABLE routing_decisions ADD COLUMN gt_verified_by TEXT",
|
|
201
222
|
"ALTER TABLE routing_decisions ADD COLUMN gt_confidence TEXT",
|
|
202
223
|
],
|
|
224
|
+
// v6 — gate identity: rec_id scopes every gate row to the routed rung that minted it
|
|
225
|
+
// (NULL = pre-identity/manual, invisible to the feedback join by construction);
|
|
226
|
+
// session_id/agent_id are reporting/provenance only, never feedback inputs. plans.closed_at
|
|
227
|
+
// records closure; plan_steps.verify_cwd is a seam for per-check cwd policy (no writer yet);
|
|
228
|
+
// user_signals.note carries the steer key's free text.
|
|
229
|
+
[
|
|
230
|
+
"ALTER TABLE gates ADD COLUMN rec_id TEXT",
|
|
231
|
+
"ALTER TABLE gates ADD COLUMN session_id TEXT",
|
|
232
|
+
"ALTER TABLE gates ADD COLUMN agent_id TEXT",
|
|
233
|
+
"ALTER TABLE file_changes ADD COLUMN agent_id TEXT",
|
|
234
|
+
"ALTER TABLE plans ADD COLUMN closed_at REAL",
|
|
235
|
+
"ALTER TABLE plan_steps ADD COLUMN verify_cwd TEXT",
|
|
236
|
+
"ALTER TABLE user_signals ADD COLUMN note TEXT",
|
|
237
|
+
"CREATE INDEX IF NOT EXISTS ix_gates_rec ON gates(rec_id)",
|
|
238
|
+
"CREATE INDEX IF NOT EXISTS ix_gates_session ON gates(session_id, created_at)",
|
|
239
|
+
],
|
|
203
240
|
];
|
|
204
241
|
|
|
205
242
|
export interface RunRow {
|
|
@@ -263,6 +300,7 @@ export interface PlanRow {
|
|
|
263
300
|
title: string | null;
|
|
264
301
|
status: string | null;
|
|
265
302
|
created_at: string | null;
|
|
303
|
+
closed_at: number | null;
|
|
266
304
|
}
|
|
267
305
|
|
|
268
306
|
export interface PlanStepRow {
|
|
@@ -274,6 +312,7 @@ export interface PlanStepRow {
|
|
|
274
312
|
verify: string | null;
|
|
275
313
|
baseline: Baseline | null;
|
|
276
314
|
created_at: string | null;
|
|
315
|
+
verify_cwd: string | null;
|
|
277
316
|
}
|
|
278
317
|
|
|
279
318
|
export interface FileChangeRow {
|
|
@@ -284,6 +323,7 @@ export interface FileChangeRow {
|
|
|
284
323
|
kind: string | null;
|
|
285
324
|
origin: string | null;
|
|
286
325
|
created_at: string | null;
|
|
326
|
+
agent_id: string | null;
|
|
287
327
|
}
|
|
288
328
|
|
|
289
329
|
export interface GateRow {
|
|
@@ -296,6 +336,9 @@ export interface GateRow {
|
|
|
296
336
|
verified_by: VerifiedBy | null;
|
|
297
337
|
factors_json: string | null;
|
|
298
338
|
created_at: string | null;
|
|
339
|
+
rec_id: string | null;
|
|
340
|
+
session_id: string | null;
|
|
341
|
+
agent_id: string | null;
|
|
299
342
|
}
|
|
300
343
|
|
|
301
344
|
export interface UserSignalRow {
|
|
@@ -303,6 +346,7 @@ export interface UserSignalRow {
|
|
|
303
346
|
gate_id: string | null;
|
|
304
347
|
action: UserAction | null;
|
|
305
348
|
at: string | null;
|
|
349
|
+
note: string | null;
|
|
306
350
|
}
|
|
307
351
|
|
|
308
352
|
/** One todo as handed to the ledger (a subset of the todowrite tool's TodoTask). */
|
|
@@ -331,27 +375,76 @@ export class MinimaDb {
|
|
|
331
375
|
this.path = path;
|
|
332
376
|
if (path !== ":memory:") mkdirSync(dirname(path), { recursive: true });
|
|
333
377
|
this.db = new Database(path, { create: true });
|
|
334
|
-
this.db.exec("PRAGMA journal_mode=WAL");
|
|
335
|
-
this.db.exec("PRAGMA foreign_keys=ON");
|
|
336
378
|
this.db.exec("PRAGMA busy_timeout=5000");
|
|
379
|
+
// The delete->WAL header flip needs a brief exclusive lock and does NOT honor the
|
|
380
|
+
// busy handler, so a concurrent fresh open can see SQLITE_BUSY here.
|
|
381
|
+
for (let attempt = 0; ; attempt += 1) {
|
|
382
|
+
try {
|
|
383
|
+
this.db.exec("PRAGMA journal_mode=WAL");
|
|
384
|
+
break;
|
|
385
|
+
} catch (e) {
|
|
386
|
+
if (attempt < 20 && isBusyError(e)) {
|
|
387
|
+
Bun.sleepSync(25);
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
throw e;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
this.db.exec("PRAGMA foreign_keys=ON");
|
|
337
394
|
this.migrate();
|
|
338
395
|
}
|
|
339
396
|
|
|
340
397
|
private migrate(): void {
|
|
341
398
|
this.db.exec("CREATE TABLE IF NOT EXISTS schema_meta (version INTEGER NOT NULL)");
|
|
342
|
-
const
|
|
343
|
-
version
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
399
|
+
const settled = this.db
|
|
400
|
+
.query("SELECT COUNT(*) AS n, MAX(version) AS v FROM schema_meta")
|
|
401
|
+
.get() as {
|
|
402
|
+
n: number;
|
|
403
|
+
v: number | null;
|
|
404
|
+
};
|
|
405
|
+
if (settled.n === 1 && settled.v !== null && settled.v >= MIGRATIONS.length) return;
|
|
406
|
+
// One batch per IMMEDIATE transaction: the version re-read happens under the write
|
|
407
|
+
// lock, so concurrent openers serialize instead of double-applying a batch.
|
|
408
|
+
const step = this.db.transaction((): boolean => {
|
|
409
|
+
this.db.exec(
|
|
410
|
+
`DELETE FROM schema_meta WHERE rowid NOT IN
|
|
411
|
+
(SELECT rowid FROM schema_meta ORDER BY version DESC, rowid ASC LIMIT 1)`,
|
|
412
|
+
);
|
|
413
|
+
this.db.exec(
|
|
414
|
+
"INSERT INTO schema_meta (version) SELECT 0 WHERE NOT EXISTS (SELECT 1 FROM schema_meta)",
|
|
415
|
+
);
|
|
416
|
+
const version = (
|
|
417
|
+
this.db.query("SELECT version FROM schema_meta").get() as { version: number }
|
|
418
|
+
).version;
|
|
419
|
+
if (version >= MIGRATIONS.length) return false;
|
|
420
|
+
for (const ddl of MIGRATIONS[version]!) this.execStep(ddl);
|
|
421
|
+
this.db.exec("UPDATE schema_meta SET version = ?", [version + 1]);
|
|
422
|
+
return version + 1 < MIGRATIONS.length;
|
|
423
|
+
});
|
|
424
|
+
for (;;) {
|
|
425
|
+
let more: boolean | undefined;
|
|
426
|
+
for (let attempt = 0; ; attempt += 1) {
|
|
427
|
+
try {
|
|
428
|
+
more = step.immediate();
|
|
429
|
+
break;
|
|
430
|
+
} catch (e) {
|
|
431
|
+
if (attempt < 2 && isBusyError(e)) continue;
|
|
432
|
+
throw e;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
if (!more) break;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
// Self-heal for DBs wedged by the pre-fix race: version regressed while a later batch's
|
|
440
|
+
// columns are already present, so re-applying ADD COLUMN throws forever.
|
|
441
|
+
private execStep(ddl: string): void {
|
|
442
|
+
try {
|
|
443
|
+
this.db.exec(ddl);
|
|
444
|
+
} catch (e) {
|
|
445
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
446
|
+
if (/ADD COLUMN/i.test(ddl) && msg.includes("duplicate column name")) return;
|
|
447
|
+
throw e;
|
|
355
448
|
}
|
|
356
449
|
}
|
|
357
450
|
|
|
@@ -627,7 +720,25 @@ export class MinimaDb {
|
|
|
627
720
|
}
|
|
628
721
|
|
|
629
722
|
setPlanStatus(planId: string, status: string): void {
|
|
630
|
-
this.db.run(
|
|
723
|
+
this.db.run(
|
|
724
|
+
"UPDATE plans SET status = ?, closed_at = CASE WHEN ? = 'active' THEN NULL ELSE COALESCE(closed_at, ?) END WHERE id = ?",
|
|
725
|
+
[status, status, Date.now() / 1000, planId],
|
|
726
|
+
);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* Re-key the old run's still-active plans onto the resuming run (MOVE semantics — the last
|
|
731
|
+
* resumer wins on a single-user local DB). Everything plan_id-keyed (steps, file_changes,
|
|
732
|
+
* gates) follows for free; the old run's session-keyed gate rows are deliberately NOT
|
|
733
|
+
* adopted — historical verdicts of past prompts must not leak into the resumed run's
|
|
734
|
+
* feedback. Returns the number of plans moved.
|
|
735
|
+
*/
|
|
736
|
+
adoptActivePlans(fromSession: string, toSession: string): number {
|
|
737
|
+
this.db.run("UPDATE plans SET session_id = ? WHERE session_id = ? AND status = 'active'", [
|
|
738
|
+
toSession,
|
|
739
|
+
fromSession,
|
|
740
|
+
]);
|
|
741
|
+
return (this.db.query("SELECT changes() AS n").get() as { n: number }).n;
|
|
631
742
|
}
|
|
632
743
|
|
|
633
744
|
/** M0.3: insert one step. Returns its id. */
|
|
@@ -684,13 +795,19 @@ export class MinimaDb {
|
|
|
684
795
|
}
|
|
685
796
|
|
|
686
797
|
/**
|
|
687
|
-
* The
|
|
688
|
-
*
|
|
689
|
-
* than the upsert it previews
|
|
690
|
-
*
|
|
691
|
-
*
|
|
798
|
+
* The step matcher SHARED by upsertPlanFromTodos and completionsForTodos — one
|
|
799
|
+
* implementation, computed ONCE per todo list, so the done-gate's preview (M4.1) can never
|
|
800
|
+
* match steps differently than the upsert it previews. Pass 1 is the historical exact
|
|
801
|
+
* trimmed-content match (first-come queues on duplicates). Pass 2 rescues reworded steps:
|
|
802
|
+
* still-unmatched todos adopt a still-unmatched row when their token-set Jaccard is >= 0.6
|
|
803
|
+
* (ties broken by smallest position distance) — so an accidental rewording keeps the step's
|
|
804
|
+
* id, sticky verify, and gate history instead of shedding them. Deterministic, zero deps.
|
|
692
805
|
*/
|
|
693
|
-
private
|
|
806
|
+
private matchStepsToTodos(
|
|
807
|
+
existing: PlanStepRow[],
|
|
808
|
+
tasks: TodoInput[],
|
|
809
|
+
): (PlanStepRow | undefined)[] {
|
|
810
|
+
const out: (PlanStepRow | undefined)[] = new Array(tasks.length).fill(undefined);
|
|
694
811
|
const byContent = new Map<string, PlanStepRow[]>();
|
|
695
812
|
for (const s of existing) {
|
|
696
813
|
const key = (s.content ?? "").trim();
|
|
@@ -698,7 +815,36 @@ export class MinimaDb {
|
|
|
698
815
|
if (queue) queue.push(s);
|
|
699
816
|
else byContent.set(key, [s]);
|
|
700
817
|
}
|
|
701
|
-
|
|
818
|
+
const taken = new Set<string>();
|
|
819
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
820
|
+
const s = byContent.get(tasks[i]!.content.trim())?.shift();
|
|
821
|
+
if (s) {
|
|
822
|
+
out[i] = s;
|
|
823
|
+
taken.add(s.id);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
827
|
+
if (out[i]) continue;
|
|
828
|
+
let best: PlanStepRow | undefined;
|
|
829
|
+
let bestScore = 0;
|
|
830
|
+
let bestDist = Number.POSITIVE_INFINITY;
|
|
831
|
+
for (const s of existing) {
|
|
832
|
+
if (taken.has(s.id)) continue;
|
|
833
|
+
const score = tokenJaccard(tasks[i]!.content, s.content ?? "");
|
|
834
|
+
if (score < 0.6) continue;
|
|
835
|
+
const dist = Math.abs(s.idx - i);
|
|
836
|
+
if (score > bestScore || (score === bestScore && dist < bestDist)) {
|
|
837
|
+
best = s;
|
|
838
|
+
bestScore = score;
|
|
839
|
+
bestDist = dist;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
if (best) {
|
|
843
|
+
out[i] = best;
|
|
844
|
+
taken.add(best.id);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
return out;
|
|
702
848
|
}
|
|
703
849
|
|
|
704
850
|
/**
|
|
@@ -713,17 +859,21 @@ export class MinimaDb {
|
|
|
713
859
|
* enforces one todowrite per assistant message (ground_truth.ts same-batch guard).
|
|
714
860
|
*/
|
|
715
861
|
completionsForTodos(sessionId: string, tasks: TodoInput[]): CompletionFlip[] {
|
|
716
|
-
const plan = this.
|
|
717
|
-
const
|
|
862
|
+
const plan = this.planForTodos(sessionId, tasks);
|
|
863
|
+
const matched = this.matchStepsToTodos(plan ? this.getPlanSteps(plan.id) : [], tasks);
|
|
718
864
|
const flips: CompletionFlip[] = [];
|
|
719
|
-
for (
|
|
720
|
-
const
|
|
865
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
866
|
+
const t = tasks[i]!;
|
|
867
|
+
const prev = matched[i];
|
|
721
868
|
if (t.status !== "completed" || prev?.status === "completed") continue;
|
|
869
|
+
// A verify swap invalidates the old baseline: red→green evidence is only meaningful
|
|
870
|
+
// against the check that produced the red, so the flip carries NULL instead.
|
|
871
|
+
const verifyChanged = t.verify != null && prev?.verify != null && t.verify !== prev.verify;
|
|
722
872
|
flips.push({
|
|
723
873
|
content: t.content,
|
|
724
874
|
stepId: prev?.id ?? null,
|
|
725
875
|
verify: t.verify ?? prev?.verify ?? null,
|
|
726
|
-
baseline: prev?.baseline ?? null,
|
|
876
|
+
baseline: verifyChanged ? null : (prev?.baseline ?? null),
|
|
727
877
|
});
|
|
728
878
|
}
|
|
729
879
|
return flips;
|
|
@@ -745,35 +895,64 @@ export class MinimaDb {
|
|
|
745
895
|
* once-only). Each entry carries the post-COALESCE effective `verify` (may be null —
|
|
746
896
|
* filtering verify-less steps is the caller's job).
|
|
747
897
|
*/
|
|
898
|
+
/**
|
|
899
|
+
* The plan a todowrite would apply to — the active plan, else (reopen over resurrect) the
|
|
900
|
+
* session's latest DONE plan when the incoming contents overlap it, so sticky verify/baseline
|
|
901
|
+
* survive a reopen-after-completion cycle while a disjoint list starts fresh. SHARED by
|
|
902
|
+
* completionsForTodos and upsertPlanFromTodos: the done-gate's preview must resolve the same
|
|
903
|
+
* plan the upsert will, or resends of a completed list would preview as brand-new flips.
|
|
904
|
+
*/
|
|
905
|
+
private planForTodos(sessionId: string, tasks: TodoInput[]): PlanRow | null {
|
|
906
|
+
const active = this.getActivePlan(sessionId);
|
|
907
|
+
if (active) return active;
|
|
908
|
+
const latest = this.getLatestPlan(sessionId);
|
|
909
|
+
if (latest && latest.status === "done") {
|
|
910
|
+
const contents = new Set(this.getPlanSteps(latest.id).map((s) => (s.content ?? "").trim()));
|
|
911
|
+
if (tasks.some((t) => contents.has(t.content.trim()))) return latest;
|
|
912
|
+
}
|
|
913
|
+
return null;
|
|
914
|
+
}
|
|
915
|
+
|
|
748
916
|
upsertPlanFromTodos(
|
|
749
917
|
sessionId: string,
|
|
750
918
|
tasks: TodoInput[],
|
|
751
919
|
title?: string | null,
|
|
752
920
|
): { planId: string; stepIds: string[]; started: { id: string; verify: string | null }[] } {
|
|
753
|
-
const existingPlan = this.
|
|
921
|
+
const existingPlan = this.planForTodos(sessionId, tasks);
|
|
922
|
+
if (existingPlan && existingPlan.status === "done") {
|
|
923
|
+
this.setPlanStatus(existingPlan.id, "active");
|
|
924
|
+
}
|
|
754
925
|
const planId =
|
|
755
926
|
existingPlan?.id ??
|
|
756
927
|
this.insertPlan({ sessionId, title: title ?? tasks[0]?.content ?? null, status: "active" });
|
|
757
928
|
const existing = this.getPlanSteps(planId);
|
|
758
|
-
const
|
|
929
|
+
const matchedSteps = this.matchStepsToTodos(existing, tasks);
|
|
759
930
|
const stepIds: string[] = [];
|
|
760
931
|
const started: { id: string; verify: string | null }[] = [];
|
|
761
932
|
const tx = this.db.transaction(() => {
|
|
762
933
|
const matched = new Set<string>();
|
|
763
934
|
for (let i = 0; i < tasks.length; i++) {
|
|
764
935
|
const t = tasks[i]!;
|
|
765
|
-
const prev =
|
|
936
|
+
const prev = matchedSteps[i];
|
|
766
937
|
if (prev) {
|
|
767
938
|
matched.add(prev.id);
|
|
939
|
+
// baseline resets whenever the effective verify CHANGES: red→green evidence must
|
|
940
|
+
// always be scoped to the check that produced the red (a swapped-in check crediting
|
|
941
|
+
// the old check's red would fabricate verified_in_production).
|
|
768
942
|
this.db.run(
|
|
769
|
-
"UPDATE plan_steps SET idx = ?, content = ?, status = ?, verify = COALESCE(?, verify) WHERE id = ?",
|
|
770
|
-
[i, t.content, t.status, t.verify ?? null, prev.id],
|
|
943
|
+
"UPDATE plan_steps SET idx = ?, content = ?, status = ?, baseline = CASE WHEN ? IS NOT NULL AND verify IS NOT NULL AND ? <> verify THEN NULL ELSE baseline END, verify = COALESCE(?, verify) WHERE id = ?",
|
|
944
|
+
[i, t.content, t.status, t.verify ?? null, t.verify ?? null, t.verify ?? null, prev.id],
|
|
771
945
|
);
|
|
772
946
|
stepIds.push(prev.id);
|
|
773
947
|
const entered = t.status === "in_progress" && prev.status !== "in_progress";
|
|
774
948
|
const gainedVerify =
|
|
775
949
|
t.status === "in_progress" && prev.verify === null && t.verify != null;
|
|
776
|
-
|
|
950
|
+
const changedVerify =
|
|
951
|
+
t.status === "in_progress" &&
|
|
952
|
+
t.verify != null &&
|
|
953
|
+
prev.verify !== null &&
|
|
954
|
+
t.verify !== prev.verify;
|
|
955
|
+
if (changedVerify || ((entered || gainedVerify) && prev.baseline === null)) {
|
|
777
956
|
started.push({ id: prev.id, verify: t.verify ?? prev.verify ?? null });
|
|
778
957
|
}
|
|
779
958
|
} else {
|
|
@@ -807,10 +986,11 @@ export class MinimaDb {
|
|
|
807
986
|
path: string;
|
|
808
987
|
kind?: string | null;
|
|
809
988
|
origin?: string | null;
|
|
989
|
+
agentId?: string | null;
|
|
810
990
|
}): string {
|
|
811
991
|
const id = opts.id ?? newId();
|
|
812
992
|
this.db.run(
|
|
813
|
-
"INSERT INTO file_changes (id, plan_id, step_id, path, kind, origin, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
993
|
+
"INSERT INTO file_changes (id, plan_id, step_id, path, kind, origin, created_at, agent_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
|
814
994
|
[
|
|
815
995
|
id,
|
|
816
996
|
opts.planId,
|
|
@@ -819,6 +999,7 @@ export class MinimaDb {
|
|
|
819
999
|
opts.kind ?? null,
|
|
820
1000
|
opts.origin ?? null,
|
|
821
1001
|
new Date().toISOString(),
|
|
1002
|
+
opts.agentId ?? null,
|
|
822
1003
|
],
|
|
823
1004
|
);
|
|
824
1005
|
return id;
|
|
@@ -848,10 +1029,13 @@ export class MinimaDb {
|
|
|
848
1029
|
confidence?: ConfidenceTier | null;
|
|
849
1030
|
verifiedBy?: VerifiedBy | null;
|
|
850
1031
|
factors?: unknown;
|
|
1032
|
+
recId?: string | null;
|
|
1033
|
+
sessionId?: string | null;
|
|
1034
|
+
agentId?: string | null;
|
|
851
1035
|
}): string {
|
|
852
1036
|
const id = opts.id ?? newId();
|
|
853
1037
|
this.db.run(
|
|
854
|
-
"INSERT INTO gates (id, plan_id, step_id, kind, outcome, confidence, verified_by, factors_json, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
1038
|
+
"INSERT INTO gates (id, plan_id, step_id, kind, outcome, confidence, verified_by, factors_json, created_at, rec_id, session_id, agent_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
855
1039
|
[
|
|
856
1040
|
id,
|
|
857
1041
|
opts.planId ?? null,
|
|
@@ -862,6 +1046,9 @@ export class MinimaDb {
|
|
|
862
1046
|
opts.verifiedBy ?? null,
|
|
863
1047
|
opts.factors === undefined ? null : JSON.stringify(opts.factors),
|
|
864
1048
|
new Date().toISOString(),
|
|
1049
|
+
opts.recId ?? null,
|
|
1050
|
+
opts.sessionId ?? null,
|
|
1051
|
+
opts.agentId ?? null,
|
|
865
1052
|
],
|
|
866
1053
|
);
|
|
867
1054
|
return id;
|
|
@@ -873,14 +1060,50 @@ export class MinimaDb {
|
|
|
873
1060
|
.all(planId) as GateRow[];
|
|
874
1061
|
}
|
|
875
1062
|
|
|
1063
|
+
/** The run's commands for one tool (lead + children), oldest first — blind-factor input. */
|
|
1064
|
+
getRunToolCommands(runId: string, toolName: string): string[] {
|
|
1065
|
+
const rows = this.db
|
|
1066
|
+
.query("SELECT args FROM tool_calls WHERE run_id = ? AND tool_name = ? ORDER BY ts, rowid")
|
|
1067
|
+
.all(runId, toolName) as { args: string | null }[];
|
|
1068
|
+
const out: string[] = [];
|
|
1069
|
+
for (const r of rows) {
|
|
1070
|
+
if (!r.args) continue;
|
|
1071
|
+
try {
|
|
1072
|
+
const parsed = JSON.parse(r.args) as Record<string, unknown> | null;
|
|
1073
|
+
const cmd = parsed?.command;
|
|
1074
|
+
if (typeof cmd === "string" && cmd.trim()) out.push(cmd);
|
|
1075
|
+
} catch {
|
|
1076
|
+
// unparsable args carry no command
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
return out;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
/** Blocked-attempt rows written before any plan existed — reachable only by session. */
|
|
1083
|
+
getSessionOrphanGates(sessionId: string): GateRow[] {
|
|
1084
|
+
return this.db
|
|
1085
|
+
.query(
|
|
1086
|
+
"SELECT * FROM gates WHERE session_id = ? AND plan_id IS NULL ORDER BY created_at, rowid",
|
|
1087
|
+
)
|
|
1088
|
+
.all(sessionId) as GateRow[];
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
/** Every gate minted under one routed rung (rec_id), oldest first — the feedback join. */
|
|
1092
|
+
getGatesForRec(recId: string): GateRow[] {
|
|
1093
|
+
return this.db
|
|
1094
|
+
.query("SELECT * FROM gates WHERE rec_id = ? ORDER BY created_at, rowid")
|
|
1095
|
+
.all(recId) as GateRow[];
|
|
1096
|
+
}
|
|
1097
|
+
|
|
876
1098
|
/** M6.3: record a user override against a gate (accept|reject|steer). */
|
|
877
|
-
recordUserSignal(gateId: string, action: UserAction): string {
|
|
1099
|
+
recordUserSignal(gateId: string, action: UserAction, note?: string | null): string {
|
|
878
1100
|
const id = newId();
|
|
879
|
-
this.db.run("INSERT INTO user_signals (id, gate_id, action, at) VALUES (?, ?, ?, ?)", [
|
|
1101
|
+
this.db.run("INSERT INTO user_signals (id, gate_id, action, at, note) VALUES (?, ?, ?, ?, ?)", [
|
|
880
1102
|
id,
|
|
881
1103
|
gateId,
|
|
882
1104
|
action,
|
|
883
1105
|
new Date().toISOString(),
|
|
1106
|
+
note ?? null,
|
|
884
1107
|
]);
|
|
885
1108
|
return id;
|
|
886
1109
|
}
|