bantamkit 0.37.0b2__tar.gz → 0.37.1__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.
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/PKG-INFO +7 -6
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/README.md +5 -4
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/skills/memory.md +1 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/bantamkit_status.json +1 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/build_identity.json +1 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/memory_compact.json +1 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/memory_dream.json +13 -4
- bantamkit-0.37.1/_assets/tools/memory_queries.json +92 -0
- bantamkit-0.37.1/_assets/tools/memory_recall.json +58 -0
- bantamkit-0.37.1/_assets/tools/memory_save.json +99 -0
- bantamkit-0.37.1/_assets/tools/shiftwork_clock_in.json +97 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/shiftwork_clock_out.json +40 -6
- bantamkit-0.37.1/_assets/tools/shiftwork_plan.json +77 -0
- bantamkit-0.37.1/_assets/tools/shiftwork_status.json +96 -0
- bantamkit-0.37.1/_assets/tools/validate_json.json +60 -0
- bantamkit-0.37.1/_assets/tools/work_plan.json +96 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/__init__.py +1 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/hookadapter.py +182 -54
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/mcpserver.py +146 -26
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/__main__.py +123 -2
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/component.py +89 -16
- bantamkit-0.37.1/src/bantamkit/memory/skills.py +238 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/store.py +237 -4
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/skillaudit.py +139 -49
- bantamkit-0.37.1/src/bantamkit/skilldraft.py +671 -0
- bantamkit-0.37.1/src/bantamkit/skillfile.py +660 -0
- bantamkit-0.37.1/src/bantamkit/skillhost.py +369 -0
- bantamkit-0.37.1/src/bantamkit/skillinstall.py +1487 -0
- bantamkit-0.37.1/src/bantamkit/skillmine.py +1844 -0
- bantamkit-0.37.1/src/bantamkit/skillpromote.py +382 -0
- bantamkit-0.37.1/src/bantamkit/skillpropose.py +802 -0
- bantamkit-0.37.1/src/bantamkit/skillreport.py +603 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/__init__.py +1 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/lock.py +23 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/logsegment.py +175 -38
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/retention.py +46 -12
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/__init__.py +4 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/log.py +34 -35
- bantamkit-0.37.1/src/bantamkit/touch/repo.py +335 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/conftest.py +10 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/served-tool-surface.json +349 -39
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_conformance_suite_table_gate.py +3 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_eventlog.py +9 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_hookadapter.py +413 -3
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcpserver.py +1 -1
- bantamkit-0.37.1/tests/test_memory_lifecycle.py +293 -0
- bantamkit-0.37.1/tests/test_memory_skills.py +273 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_usage.py +25 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_served_tool_count_records.py +1 -1
- bantamkit-0.37.1/tests/test_skillaudit_roots.py +111 -0
- bantamkit-0.37.1/tests/test_skilldraft.py +444 -0
- bantamkit-0.37.1/tests/test_skillfile.py +638 -0
- bantamkit-0.37.1/tests/test_skillhost.py +246 -0
- bantamkit-0.37.1/tests/test_skillimprove.py +429 -0
- bantamkit-0.37.1/tests/test_skillimprove_signals.py +558 -0
- bantamkit-0.37.1/tests/test_skillinstall.py +334 -0
- bantamkit-0.37.1/tests/test_skillmine.py +1014 -0
- bantamkit-0.37.1/tests/test_skillmine_daily.py +418 -0
- bantamkit-0.37.1/tests/test_skillpromote.py +269 -0
- bantamkit-0.37.1/tests/test_skillpropose.py +356 -0
- bantamkit-0.37.1/tests/test_skillreport.py +479 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_status_surface.py +69 -9
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_log.py +161 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_retention.py +60 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_log.py +211 -1
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_unknown_arguments.py +1 -1
- bantamkit-0.37.0b2/_assets/tools/memory_queries.json +0 -58
- bantamkit-0.37.0b2/_assets/tools/memory_recall.json +0 -50
- bantamkit-0.37.0b2/_assets/tools/memory_save.json +0 -82
- bantamkit-0.37.0b2/_assets/tools/shiftwork_clock_in.json +0 -45
- bantamkit-0.37.0b2/_assets/tools/shiftwork_plan.json +0 -31
- bantamkit-0.37.0b2/_assets/tools/shiftwork_status.json +0 -35
- bantamkit-0.37.0b2/_assets/tools/validate_json.json +0 -37
- bantamkit-0.37.0b2/_assets/tools/work_plan.json +0 -61
- bantamkit-0.37.0b2/src/bantamkit/touch/repo.py +0 -200
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/.gitignore +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/contracts/default.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/manifest.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/HISTORY.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/README.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/docs/architecture.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/docs/runbook.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/issues/142-settlement-timeout.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/patches/0009-retry-budget.patch +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/__init__.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/config.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/errors.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/posting.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/registry.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/report.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/retry.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/settle.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/src/ledger/validate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/tests/test_posting.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/repo/tests/test_settle.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-error-contract.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-handler-map.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-patch-before-after.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-retry-attempts.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-settlement-config.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-symbol-home.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-trace-blame.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/devteam/tasks/dt-unread-key.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-in-137.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-in-359.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-in-372.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-out-11764.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-out-4137.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-large-out-8022.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-small-137.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-small-261.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/document/tasks/doc-small-388.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/fixtures/.gitkeep +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/fixtures/catalog.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/perturbations/task-completion.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/.gitkeep +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/extract-contact.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/extract-invoice.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/extract-order.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/extract-schedule.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/extract-versions.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/nav-prod-port.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/nav-release-bundle.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-audit-retention.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-cache-ttl.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-db-port.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-deploy.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-env-endpoint.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-oncall-rotation.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-oncall.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-org-quota.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/recall-owner.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-basket-total.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-cheapest.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-compare.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-gadget-value.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-stock-total.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/evals/tasks/shop-total.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/pricing/default.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/profiles/default.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/profiles/patient.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/rubrics/.gitkeep +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/rubrics/code-quality.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/rubrics/grounded-completion.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/rubrics/task-completion.yaml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/schemas/shiftwork-checkpoint.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/skills/.gitkeep +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/skills/file-graph.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/skills/memory-queries.md +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/.gitkeep +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/bantamkit_read.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/document_list.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/document_read.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/file_graph.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/repo_map.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/skill_audit.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/_assets/tools/token_ledger.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/hatch_build.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/pyproject.toml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/agent.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/assets.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/budget.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/client.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/contract.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/criticreplay.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/critique.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/docmanifest.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/docread.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/evalrun.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/eventlog.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/filegraph.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/hostinstall.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/loopguard.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/mcpreport.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/mcpstdio.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/__init__.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/divergence.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/dream.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/layers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/native.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/queries.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/retrieval.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/memory/usage.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/pdfread.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/pricing.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/profile.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/repomap.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/selfupdate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/shiftwork.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/statusline.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/coldindex.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/hotindex.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/storage/tiers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/structured.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/textutil.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/tokenledger.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/bashturn.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/context.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/graph.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/recallfile.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/refs.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/touch/summary.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/updatecheck.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/src/bantamkit/workplan.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/cli_exit_status_probe.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/bad-crc.docx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/charref-4301-digits.html +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/charset-table.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/compression-method-9.docx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/corrupt-deflate.docx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/encrypted-member.docx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/encrypted-mimetype.odt +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/eszett-cell-ref.xlsx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/internal-dtd-entity.docx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/rfc2231-charset.eml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/rfc822-nested-twice.eml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/unicode-digit-shared-string.xlsx +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/docread/x-uuencode.eml +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/f8404ab-perturbation-baseline.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/data/platform-assumption-baseline.json +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/docread_fixtures.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/perturbation_baseline_harness.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/rbp16_effect_probe.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/rbp18_payload_probe.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_adapter.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_agent.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_amendguard.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_assets.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_bantamkit_gitignore.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_bantamkit_read_tool.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_budget.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_build_identity.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_cli_oneshot.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_client.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_compaction_corpus_survey.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_conformance.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_conformance_harness_resilience.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_contract_fanout.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_contract_patterns.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_contract_refs.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_criticreplay.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_critique.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_doc_commands_gate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_docread.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_docread_ceilings.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_document_manifest_parity.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_document_setup.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_document_tasks.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_document_tools.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_encoding_gate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_evalrun.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_field_program_gates.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_field_programs.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_filegraph.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_hostinstall.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_hostinstall_hooks.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_install_shape.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_ladder_statistics.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_launcher_which.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_layers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_loopguard.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcp_endpoint.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcp_request_guard.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcpdrift.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcpreport.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mcpstdio_frames.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_compact_tool.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_component.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_divergence.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_dream.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_layers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_native.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_queries.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_retrieval.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_store_tripwire.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_memory_strings.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_mutmatrix.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_nativeexport.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_newline_gate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_packaging.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_pdfread.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_pinharness_ledger.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_platform_assumption_gate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_pricing.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_readme_separation.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_repo_map_tool.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_repomap.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_selfupdate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_shiftwork.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_skillaudit.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_statusline.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_bar.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_coldindex.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_hotindex.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_log_consumers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_recall_index.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_storage_tiers.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_structured.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_thread_exception_gate.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_tokenledger.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_tool_annotations.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_tool_manifest.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_bashturn.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_context.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_graph.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_recall_file.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_refs.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_touch_summary.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_updatecheck.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_version_agreement.py +0 -0
- {bantamkit-0.37.0b2 → bantamkit-0.37.1}/tests/test_workplan.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: bantamkit
|
|
3
|
-
Version: 0.37.
|
|
3
|
+
Version: 0.37.1
|
|
4
4
|
Summary: Persistent memory for coding agents: an MCP server for Claude Code, Claude Desktop, Cursor and VS Code Copilot, plus a Python library that lifts small-model agents. Install once, run offline.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Ink01101011/bantamkit
|
|
6
6
|
Project-URL: Repository, https://github.com/Ink01101011/bantamkit
|
|
@@ -102,7 +102,7 @@ Then restart the host (in Claude Code, open a new session) and ask the agent to
|
|
|
102
102
|
| [Configuration](#-configuration) | Every flag and variable, with its default |
|
|
103
103
|
| [Update](#-update) | `--update`, pipx, uv, then restart |
|
|
104
104
|
| [Troubleshooting](#-troubleshooting) | Timeouts, refusals, the wrong store |
|
|
105
|
-
| [What it serves](#-what-it-serves) | 15 tools,
|
|
105
|
+
| [What it serves](#-what-it-serves) | 15 tools, three prompts, two resource templates |
|
|
106
106
|
| [Requirements](#-requirements) | Python and dependencies |
|
|
107
107
|
| [The asset pack](#-the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
|
|
108
108
|
| [The operator CLI: `python -m bantamkit.memory`](#-the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
|
|
@@ -144,9 +144,9 @@ CPU architecture and Python minor version** (some wheels, such as `pydantic_core
|
|
|
144
144
|
one platform only), copy `wheels/` across, and install from it:
|
|
145
145
|
|
|
146
146
|
```bash
|
|
147
|
-
python -m pip download "bantamkit[mcp]==0.37.
|
|
147
|
+
python -m pip download "bantamkit[mcp]==0.37.1" -d wheels
|
|
148
148
|
python -m venv <env>
|
|
149
|
-
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.37.
|
|
149
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.37.1"
|
|
150
150
|
<env>/bin/bantamkit-mcp --install cursor
|
|
151
151
|
```
|
|
152
152
|
|
|
@@ -278,6 +278,7 @@ Flags go in the entry's `args`; environment variables in its `env` block (or
|
|
|
278
278
|
| `--k K` | Default recall budget | `3` | `"--k", "5"` |
|
|
279
279
|
| `--index-budget BYTES` | Memory index byte budget | `24000` | `"--index-budget", "32000"` |
|
|
280
280
|
| `BANTAMKIT_EVENT_LOG` | Logs tool outcomes as JSONL | off; `on` → `<store>/events/mcp.jsonl`; other values are a path | `"env": {"BANTAMKIT_EVENT_LOG": "on"}` |
|
|
281
|
+
| `BANTAMKIT_SKILL_AUTO` | Skills from experience (#206): lets the daily run install a skill it mined, make low-risk edits to installed skills and promote a much-used one to a native link on its own. Off, the same work waits for you as proposals in the `skill_propose` prompt | **off** in 0.37.0; `on` (or `1`/`true`/`yes`) opts in | `"env": {"BANTAMKIT_SKILL_AUTO": "on"}` |
|
|
281
282
|
| `BANTAMKIT_ASSETS` | Your own asset pack (skills, rubrics, schemas) | the pack inside the package | `"env": {"BANTAMKIT_ASSETS": "/abs/my-assets"}` |
|
|
282
283
|
| `BANTAMKIT_HOST_LOG_ROOT` | Where `--mcp-report` finds the host's MCP logs | macOS `~/Library/Caches/claude-cli-nodejs`; elsewhere unset | `BANTAMKIT_HOST_LOG_ROOT=/abs/logs bantamkit-mcp --mcp-report` |
|
|
283
284
|
| `BANTAMKIT_PRICES` | Price table for the token ledger | `pricing/default.json` in the asset pack | `"env": {"BANTAMKIT_PRICES": "/abs/prices.json"}` |
|
|
@@ -327,7 +328,7 @@ you**; a new version with an old `build_id` means an old process.
|
|
|
327
328
|
|
|
328
329
|
## 🧰 What it serves
|
|
329
330
|
|
|
330
|
-
It serves 15 tools,
|
|
331
|
+
It serves 15 tools, three prompts (`bantamkit_status`, `skill_audit` and `skill_propose`) and two resource templates
|
|
331
332
|
(`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
|
|
332
333
|
|
|
333
334
|
| Tool | What it does |
|
|
@@ -71,7 +71,7 @@ Then restart the host (in Claude Code, open a new session) and ask the agent to
|
|
|
71
71
|
| [Configuration](#-configuration) | Every flag and variable, with its default |
|
|
72
72
|
| [Update](#-update) | `--update`, pipx, uv, then restart |
|
|
73
73
|
| [Troubleshooting](#-troubleshooting) | Timeouts, refusals, the wrong store |
|
|
74
|
-
| [What it serves](#-what-it-serves) | 15 tools,
|
|
74
|
+
| [What it serves](#-what-it-serves) | 15 tools, three prompts, two resource templates |
|
|
75
75
|
| [Requirements](#-requirements) | Python and dependencies |
|
|
76
76
|
| [The asset pack](#-the-asset-pack) | `--assets-root`, `BANTAMKIT_ASSETS` |
|
|
77
77
|
| [The operator CLI: `python -m bantamkit.memory`](#-the-operator-cli-python--m-bantamkitmemory) | status, lint, compact, archived, archive, restore |
|
|
@@ -113,9 +113,9 @@ CPU architecture and Python minor version** (some wheels, such as `pydantic_core
|
|
|
113
113
|
one platform only), copy `wheels/` across, and install from it:
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
|
-
python -m pip download "bantamkit[mcp]==0.37.
|
|
116
|
+
python -m pip download "bantamkit[mcp]==0.37.1" -d wheels
|
|
117
117
|
python -m venv <env>
|
|
118
|
-
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.37.
|
|
118
|
+
<env>/bin/pip install --no-index --find-links wheels "bantamkit[mcp]==0.37.1"
|
|
119
119
|
<env>/bin/bantamkit-mcp --install cursor
|
|
120
120
|
```
|
|
121
121
|
|
|
@@ -247,6 +247,7 @@ Flags go in the entry's `args`; environment variables in its `env` block (or
|
|
|
247
247
|
| `--k K` | Default recall budget | `3` | `"--k", "5"` |
|
|
248
248
|
| `--index-budget BYTES` | Memory index byte budget | `24000` | `"--index-budget", "32000"` |
|
|
249
249
|
| `BANTAMKIT_EVENT_LOG` | Logs tool outcomes as JSONL | off; `on` → `<store>/events/mcp.jsonl`; other values are a path | `"env": {"BANTAMKIT_EVENT_LOG": "on"}` |
|
|
250
|
+
| `BANTAMKIT_SKILL_AUTO` | Skills from experience (#206): lets the daily run install a skill it mined, make low-risk edits to installed skills and promote a much-used one to a native link on its own. Off, the same work waits for you as proposals in the `skill_propose` prompt | **off** in 0.37.0; `on` (or `1`/`true`/`yes`) opts in | `"env": {"BANTAMKIT_SKILL_AUTO": "on"}` |
|
|
250
251
|
| `BANTAMKIT_ASSETS` | Your own asset pack (skills, rubrics, schemas) | the pack inside the package | `"env": {"BANTAMKIT_ASSETS": "/abs/my-assets"}` |
|
|
251
252
|
| `BANTAMKIT_HOST_LOG_ROOT` | Where `--mcp-report` finds the host's MCP logs | macOS `~/Library/Caches/claude-cli-nodejs`; elsewhere unset | `BANTAMKIT_HOST_LOG_ROOT=/abs/logs bantamkit-mcp --mcp-report` |
|
|
252
253
|
| `BANTAMKIT_PRICES` | Price table for the token ledger | `pricing/default.json` in the asset pack | `"env": {"BANTAMKIT_PRICES": "/abs/prices.json"}` |
|
|
@@ -296,7 +297,7 @@ you**; a new version with an old `build_id` means an old process.
|
|
|
296
297
|
|
|
297
298
|
## 🧰 What it serves
|
|
298
299
|
|
|
299
|
-
It serves 15 tools,
|
|
300
|
+
It serves 15 tools, three prompts (`bantamkit_status`, `skill_audit` and `skill_propose`) and two resource templates
|
|
300
301
|
(`bantamkit://skills/{name}`, `bantamkit://rubrics/{name}`):
|
|
301
302
|
|
|
302
303
|
| Tool | What it does |
|
|
@@ -12,6 +12,7 @@ past-you would have used. Do this before acting, not after.
|
|
|
12
12
|
- The user corrects you or states a preference → type "feedback"
|
|
13
13
|
- A durable fact about the user → "user", about ongoing work → "project",
|
|
14
14
|
a URL/dashboard/ticket → "reference"
|
|
15
|
+
- Tag a lesson with outcome: error|success; close a project fact by saving it again with status: done.
|
|
15
16
|
|
|
16
17
|
## When NOT to save
|
|
17
18
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bantamkit_status",
|
|
3
3
|
"title": "bantamkit status",
|
|
4
|
-
"description": "Is bantamkit working, and which bantamkit? Returns a short report a person can read in the transcript: `bantamkit Active 🟢` or `bantamkit Degraded 🟠` on the first line, then the version and `build_id` of the code answering, the surfaces it serves, the memory store it is bound to with its index size against its budget, whether the event log is on, and — when degraded — every condition in full with what to do about it. Call it when the user asks whether the server is alive or working, when a bantamkit tool answered oddly and you need to know whether the server is the reason, or when a reply arrived carrying a `bantamkit degraded` footer and you want the rest of it. Every fact is observed at call time from the server's own state; nothing is a heartbeat or a cached verdict. Takes no arguments, writes nothing, and never echoes another call's arguments.",
|
|
4
|
+
"description": "Is bantamkit working, and which bantamkit? Returns a short report a person can read in the transcript: `bantamkit Active 🟢` or `bantamkit Degraded 🟠` on the first line, then the version and `build_id` of the code answering, the surfaces it serves, the memory store it is bound to with its index size against its budget, whether the event log is on, and — when degraded — every condition in full with what to do about it. Call it when the user asks whether the server is alive or working, when a bantamkit tool answered oddly and you need to know whether the server is the reason, or when a reply arrived carrying a `bantamkit degraded` footer and you want the rest of it. Every fact is observed at call time from the server's own state; nothing is a heartbeat or a cached verdict. Takes no arguments, writes nothing, and never echoes another call's arguments. build_identity answers only the `build_id` fingerprint, as JSON, when all you need is to compare two installs; shiftwork_status reports a job, not the server.",
|
|
5
5
|
"surfaces": [
|
|
6
6
|
"mcp"
|
|
7
7
|
],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "build_identity",
|
|
3
3
|
"title": "Build identity",
|
|
4
|
-
"description": "Which bantamkit build is answering you, readable mid-call. Returns `build_id` — a content fingerprint of the running source and the asset pack it loads — plus the paths it was computed over. Call it when one MCP server name may resolve to more than one install: two endpoints reporting the same `version` are the SAME build only if their `build_id` matches, because a version string moves on release bumps and not on builds. Any fact that cannot be derived comes back as {\"unavailable\": \"<reason>\"} and is named in the `unavailable` list — never omitted, never a placeholder that reads as a value. Takes no arguments and reads no state.",
|
|
4
|
+
"description": "Which bantamkit build is answering you, readable mid-call. Returns `build_id` — a content fingerprint of the running source and the asset pack it loads — plus the paths it was computed over. Call it when one MCP server name may resolve to more than one install: two endpoints reporting the same `version` are the SAME build only if their `build_id` matches, because a version string moves on release bumps and not on builds. Any fact that cannot be derived comes back as {\"unavailable\": \"<reason>\"} and is named in the `unavailable` list — never omitted, never a placeholder that reads as a value. Takes no arguments and reads no state. Use bantamkit_status when the question is whether the server is healthy or which store it is bound to — that report includes this fingerprint; call this tool when you need only the fingerprint, as JSON, to compare two endpoints.",
|
|
5
5
|
"surfaces": [
|
|
6
6
|
"mcp"
|
|
7
7
|
],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memory_compact",
|
|
3
3
|
"title": "Compact the memory store",
|
|
4
|
-
"description": "Free room in persistent memory when `memory_save` was refused for budget. Archives the stalest facts of the writable project store until a fact as large as the biggest one kept will fit, and returns what moved — every archived name with its type and description. Nothing is deleted: archived facts leave the index but stay on disk, and
|
|
4
|
+
"description": "Free room in persistent memory when `memory_save` was refused for budget. Archives the stalest facts of the writable project store until a fact as large as the biggest one kept will fit, and returns what moved — every archived name with its type and description. Nothing is deleted: archived facts leave the index but stay on disk under archive/, memory_recall with `include_archived` still finds them, and bringing one back is an operator action rather than a tool — `bantamkit-memory restore <name>` (Node) or `python -m bantamkit.memory restore <name>` (Python) on the store; no tool deletes a fact. Read-only grants and the profile layer are never touched. Call it after a budget refusal, then retry the save; calling it under budget archives nothing and says so. It is not the pass for two copies of one name across layers — that is memory_dream.",
|
|
5
5
|
"surfaces": [
|
|
6
6
|
"agent",
|
|
7
7
|
"mcp"
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memory_dream",
|
|
3
3
|
"title": "Dream: consolidate the memory store",
|
|
4
|
-
"description": "Consolidate the memories the project layer and the machine-wide profile layer hold under the SAME NAME, and say exactly what changed. Byte-identical copies collapse to one; a pair that has diverged is UNIONED — every claim from both copies survives, never a winner-takes-all — and a relative date in a body is annotated with the day it resolves to against that fact's own mtime, never against today. The survivor stays in the writable project layer and the profile copy MOVES to that store's archive/: nothing is deleted and
|
|
5
|
-
"surfaces": [
|
|
4
|
+
"description": "Consolidate the memories the project layer and the machine-wide profile layer hold under the SAME NAME, and say exactly what changed. Byte-identical copies collapse to one; a pair that has diverged is UNIONED — every claim from both copies survives, never a winner-takes-all — and a relative date in a body is annotated with the day it resolves to against that fact's own mtime, never against today. The survivor stays in the writable project layer and the profile copy MOVES to that store's archive/: nothing is deleted, and bringing a consumed copy back is an operator action, not a tool — `bantamkit-memory restore <name>` or `python -m bantamkit.memory restore <name>` on the profile store. This is a correctness pass, not a token saving: the profile index is derived at read time and is not loaded from a prompt, so consolidating it frees approximately no bytes — what it buys is one copy of a ruling instead of two that can disagree. It defaults to a DRY RUN because the profile store is machine-wide: a memory archived out of it stops answering for every other project on this machine that has no store of its own. Read the plan first, then call it again with dry_run false to apply it. For room in the index call memory_compact instead; for the facts themselves, memory_recall.",
|
|
5
|
+
"surfaces": [
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
6
8
|
"parameters": {
|
|
7
9
|
"type": "object",
|
|
8
10
|
"properties": {
|
|
@@ -14,8 +16,15 @@
|
|
|
14
16
|
"additionalProperties": false
|
|
15
17
|
},
|
|
16
18
|
"output_schema": {
|
|
17
|
-
"properties": {
|
|
18
|
-
|
|
19
|
+
"properties": {
|
|
20
|
+
"result": {
|
|
21
|
+
"title": "Result",
|
|
22
|
+
"type": "string"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"required": [
|
|
26
|
+
"result"
|
|
27
|
+
],
|
|
19
28
|
"type": "object",
|
|
20
29
|
"title": "memory_dreamOutput"
|
|
21
30
|
},
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_queries",
|
|
3
|
+
"title": "Likely-prompt queries for saved facts",
|
|
4
|
+
"description": "Write, or list the facts that still lack, the likely-prompt queries recall matches a user's prompt against — for each fact, the prompts a user would type when that fact is what they need. Call it with {} at the end of a session that saved facts, or when bantamkit_status reports `queries: n of m facts` with n below m: it answers up to 10 facts with no queries yet (layer, name, description, a body excerpt), the writing instructions, and `remaining`. Then call it with {\"facts\": [{name, layer?, queries}]} to store what you wrote. Every item is checked before anything is written and the first bad one refuses the whole call — an unknown name or layer, more than 8 queries, one over 200 characters; `queries: []` removes a fact's entry. No fact file changes: queries live in a per-layer sidecar under ~/.bantamkit/queries/, keyed to the fact's content, so a fact edited later is listed as missing again. memory_save takes `queries` directly for a fact you are saving now; this tool is for facts already on disk.",
|
|
5
|
+
"surfaces": [
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"properties": {
|
|
11
|
+
"facts": {
|
|
12
|
+
"anyOf": [
|
|
13
|
+
{
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "The fact's exact name (its slug)."
|
|
21
|
+
},
|
|
22
|
+
"layer": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "project, profile, extra:<name> or native; optional: the first layer holding the name"
|
|
25
|
+
},
|
|
26
|
+
"queries": {
|
|
27
|
+
"type": "array",
|
|
28
|
+
"items": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"description": "Up to 8 prompts, each at most 200 characters, in the user's language and in English; [] removes the fact's entry."
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"required": [
|
|
35
|
+
"name",
|
|
36
|
+
"queries"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"type": "null"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
"description": "Omit to list the facts missing queries"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"title": "memory_queriesArguments",
|
|
48
|
+
"additionalProperties": false
|
|
49
|
+
},
|
|
50
|
+
"output_schema": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"properties": {
|
|
53
|
+
"result": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"description": "`missing` for the list call, `written` for the store call, `error` with `reason` when refused."
|
|
56
|
+
},
|
|
57
|
+
"facts": {
|
|
58
|
+
"type": "array",
|
|
59
|
+
"items": {
|
|
60
|
+
"type": "object"
|
|
61
|
+
},
|
|
62
|
+
"description": "With `missing`: up to 10 {layer, name, description, body} still without queries."
|
|
63
|
+
},
|
|
64
|
+
"remaining": {
|
|
65
|
+
"type": "integer",
|
|
66
|
+
"description": "How many facts across the readable layers still have no queries after this call."
|
|
67
|
+
},
|
|
68
|
+
"instructions": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"description": "With `missing`: how to write good queries."
|
|
71
|
+
},
|
|
72
|
+
"written": {
|
|
73
|
+
"type": "integer",
|
|
74
|
+
"description": "With `written`: how many items were stored."
|
|
75
|
+
},
|
|
76
|
+
"reason": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"description": "With result `error`: one sentence saying why the call was refused."
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"required": [
|
|
82
|
+
"result"
|
|
83
|
+
],
|
|
84
|
+
"additionalProperties": true,
|
|
85
|
+
"title": "memory_queriesDictOutput"
|
|
86
|
+
},
|
|
87
|
+
"annotations": {
|
|
88
|
+
"readOnlyHint": false,
|
|
89
|
+
"destructiveHint": false,
|
|
90
|
+
"openWorldHint": false
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_recall",
|
|
3
|
+
"title": "Recall memories",
|
|
4
|
+
"description": "Search persistent memory for facts a past session saved. Call it BEFORE starting a task that resembles past work, and when the user refers to something decided earlier; use memory_save to add a fact, and memory_compact or memory_dream only to tidy the store — this tool never changes what a fact says. Reads every layer in order — the project store, any read-only grants in .bantamkit/config.yaml, then the machine-wide profile — and returns the top word matches, never fewer than the store default of 3 when that many match; a query that is exactly a fact's name returns that fact alone. Pass `file` instead of `query` to see the facts linked to a file. Why it is not read-only: every hit is appended to the usage ledger (~/.bantamkit/usage/<store-id>.jsonl) as a recall event — the staleness order memory_compact archives by — and a project fact file still in the 0.35.x format is rewritten once into the current one; both are best-effort and never fail a recall. A fact file that cannot be read is named in the reply, never silently skipped. Pass outcome: error to see only recorded failures.",
|
|
5
|
+
"surfaces": [
|
|
6
|
+
"agent",
|
|
7
|
+
"mcp"
|
|
8
|
+
],
|
|
9
|
+
"parameters": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": [],
|
|
12
|
+
"properties": {
|
|
13
|
+
"query": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Words a past-you would have used to describe the fact"
|
|
16
|
+
},
|
|
17
|
+
"k": {
|
|
18
|
+
"type": "integer",
|
|
19
|
+
"description": "Facts wanted, clamped to 1..5. Raised to the store default of 3 when smaller; never lowered below it."
|
|
20
|
+
},
|
|
21
|
+
"include_archived": {
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"default": false,
|
|
24
|
+
"description": "Also search facts compaction moved to archive/. Archived matches come after the live ones, tagged [archived]."
|
|
25
|
+
},
|
|
26
|
+
"file": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "A tracked file, or the shortest unique suffix of one (store.ts, memory/store.ts). Returns the facts linked to it and when it was last touched; query is then ignored."
|
|
29
|
+
},
|
|
30
|
+
"outcome": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"enum": [
|
|
33
|
+
"error",
|
|
34
|
+
"success"
|
|
35
|
+
],
|
|
36
|
+
"description": "Keep only facts saved with this outcome — `error` answers \"what failed before\", `success` \"what worked\". Facts with no outcome are dropped from the answer; omit it for the normal search."
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"additionalProperties": false
|
|
40
|
+
},
|
|
41
|
+
"output_schema": {
|
|
42
|
+
"properties": {
|
|
43
|
+
"result": {
|
|
44
|
+
"title": "Result",
|
|
45
|
+
"type": "string"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"required": [
|
|
49
|
+
"result"
|
|
50
|
+
],
|
|
51
|
+
"type": "object",
|
|
52
|
+
"title": "memory_recallOutput"
|
|
53
|
+
},
|
|
54
|
+
"annotations": {
|
|
55
|
+
"readOnlyHint": false,
|
|
56
|
+
"openWorldHint": false
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "memory_save",
|
|
3
|
+
"title": "Save a memory",
|
|
4
|
+
"description": "Save ONE durable fact to persistent memory — a preference the user stated, a decision, the fix that worked — so a future session can recall it. Use it only for facts a future session needs; never for anything derivable from the repo, git history or docs, nor for one-off state of this conversation. To find a fact use memory_recall; to change one, save again under its EXACT name, which replaces it in place; to free room call memory_compact. Refused with nothing written, each with its own sentence: a description too close to an existing fact's (the reply names that fact — save under that SAME name or skip, never rename to force a copy), a spelling that normalises onto an existing name (`Deploy Command` onto `deploy-command`), and a save that would push the always-loaded index over its byte budget (the reply names the remedy). Every save lands in the writable project store (.bantamkit/memory), never in the profile or a read-only grant, and is appended to the usage ledger. Optional outcome (error|success) tags a lesson and status: done closes a project fact; nothing here archives — that is the operator's bantamkit-memory candidates/merge.",
|
|
5
|
+
"surfaces": [
|
|
6
|
+
"agent",
|
|
7
|
+
"mcp"
|
|
8
|
+
],
|
|
9
|
+
"parameters": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"required": [
|
|
12
|
+
"type",
|
|
13
|
+
"name",
|
|
14
|
+
"description",
|
|
15
|
+
"body"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"type": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"enum": [
|
|
21
|
+
"user",
|
|
22
|
+
"feedback",
|
|
23
|
+
"project",
|
|
24
|
+
"reference"
|
|
25
|
+
],
|
|
26
|
+
"description": "What kind of fact: `user` (who the user is, their role and preferences), `feedback` (a correction or confirmed way of working, with the why), `project` (ongoing work, a decision, a constraint), `reference` (a URL, ticket or dashboard pointer)."
|
|
27
|
+
},
|
|
28
|
+
"name": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
31
|
+
"description": "short-kebab-case slug"
|
|
32
|
+
},
|
|
33
|
+
"description": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "One line written to match the FUTURE recall query, not to summarize the body"
|
|
36
|
+
},
|
|
37
|
+
"body": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "The fact itself, terse"
|
|
40
|
+
},
|
|
41
|
+
"links": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": {
|
|
44
|
+
"type": "string"
|
|
45
|
+
},
|
|
46
|
+
"description": "names of related memories"
|
|
47
|
+
},
|
|
48
|
+
"keywords": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"description": "Words the user will type when they need this fact, in the user's own language as well as English (e.g. Thai and English terms)"
|
|
54
|
+
},
|
|
55
|
+
"queries": {
|
|
56
|
+
"type": "array",
|
|
57
|
+
"items": {
|
|
58
|
+
"type": "string"
|
|
59
|
+
},
|
|
60
|
+
"description": "The prompts a user would type when this fact is what they need: three in the user's language and three in English, at most 8, each at most 200 characters"
|
|
61
|
+
},
|
|
62
|
+
"outcome": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"enum": [
|
|
65
|
+
"error",
|
|
66
|
+
"success"
|
|
67
|
+
],
|
|
68
|
+
"description": "What the lesson records: `error` (a failure to avoid) or `success` (a way that worked). Only on feedback and project facts; refused on user and reference. Read back by `bantamkit-memory list --outcome` and by memory_recall's `outcome` filter."
|
|
69
|
+
},
|
|
70
|
+
"status": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"enum": [
|
|
73
|
+
"active",
|
|
74
|
+
"done"
|
|
75
|
+
],
|
|
76
|
+
"description": "Lifecycle of a project fact. Save an existing name with `done` when the work it describes has shipped; `bantamkit-memory candidates` lists done facts for the operator to archive. Absent means active; `active` is never written."
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"additionalProperties": false
|
|
80
|
+
},
|
|
81
|
+
"output_schema": {
|
|
82
|
+
"properties": {
|
|
83
|
+
"result": {
|
|
84
|
+
"title": "Result",
|
|
85
|
+
"type": "string"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"required": [
|
|
89
|
+
"result"
|
|
90
|
+
],
|
|
91
|
+
"type": "object",
|
|
92
|
+
"title": "memory_saveOutput"
|
|
93
|
+
},
|
|
94
|
+
"annotations": {
|
|
95
|
+
"readOnlyHint": false,
|
|
96
|
+
"destructiveHint": true,
|
|
97
|
+
"openWorldHint": false
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "shiftwork_clock_in",
|
|
3
|
+
"title": "Shift work: clock in",
|
|
4
|
+
"description": "Shift-work clock-in: validate the checkpoint against the checkpoint schema and return the brief of ONE unit — {unit, role, invariants, handoff, do_not, files} — to hand to the agent you spawn, verbatim. Call it once per unit, right before spawning; use shiftwork_plan first to see the `ready` batch when several units are to run at once, and shiftwork_clock_out, not this tool, when a unit finishes. The unit briefed is plan.cursor, or `unit_id` when given; either way it must be in shiftwork_plan's `ready` — a done or dropped cursor, a cursor whose dependencies have not run, or a `unit_id` naming no unit answers {\"result\": \"error\", \"reason\": \"unit <id> is not ready; ready is <a, b>\"}, and the batch view's own refusals (cycle, unknown dependency, unreadable checkpoint) pass through verbatim. The other outcomes, never exceptions: `escalate` when handoff.open_questions is non-empty (stop and ask the user) or when the cursor names no unit, `success` when every unit is done or dropped, `error` when the checkpoint fails validation. It never moves plan.cursor; clock_out does. What it WRITES: on result=brief, and only then, one line {event: brief, ts, unit, role} appended to <checkpoint>.log.jsonl — best-effort, so a log it cannot write costs the brief nothing. That line is what later lets clock_out accept the unit while the cursor is elsewhere and sets `briefed` on its accounting line. The checkpoint file itself is never modified. See docs/shiftwork.md.",
|
|
5
|
+
"surfaces": [
|
|
6
|
+
"mcp"
|
|
7
|
+
],
|
|
8
|
+
"parameters": {
|
|
9
|
+
"properties": {
|
|
10
|
+
"checkpoint": {
|
|
11
|
+
"title": "Checkpoint",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "Path to the shift-work checkpoint JSON file (by convention .shiftwork/checkpoint.json in the repo the job works on), absolute or relative to the server's working directory. The same file shiftwork_plan, shiftwork_clock_in and shiftwork_clock_out take; it must validate against assets/schemas/shiftwork-checkpoint.json."
|
|
14
|
+
},
|
|
15
|
+
"unit_id": {
|
|
16
|
+
"anyOf": [
|
|
17
|
+
{
|
|
18
|
+
"type": "string"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "null"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"default": null,
|
|
25
|
+
"title": "Unit Id",
|
|
26
|
+
"description": "The unit to brief instead of plan.cursor; it must be in shiftwork_plan's `ready` for this checkpoint. Omit it, or pass null, to brief the cursor unit."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"required": [
|
|
30
|
+
"checkpoint"
|
|
31
|
+
],
|
|
32
|
+
"type": "object",
|
|
33
|
+
"title": "shiftwork_clock_inArguments",
|
|
34
|
+
"additionalProperties": false
|
|
35
|
+
},
|
|
36
|
+
"output_schema": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"properties": {
|
|
39
|
+
"result": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "`brief` (the unit is yours to spawn), `escalate` (stop and ask: see `reason` and `open_questions`), `success` (every unit done or dropped), or `error` with `reason`."
|
|
42
|
+
},
|
|
43
|
+
"unit": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"description": "The plan.units entry briefed: id, role, status, depends_on and its own fields."
|
|
46
|
+
},
|
|
47
|
+
"role": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "The unit's role, the key job.roles may bind models to."
|
|
50
|
+
},
|
|
51
|
+
"invariants": {
|
|
52
|
+
"type": "array",
|
|
53
|
+
"items": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"description": "job.constraints: what every unit must keep true."
|
|
57
|
+
},
|
|
58
|
+
"handoff": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"description": "The checkpoint's handoff block: next_action, open_questions, do_not, notes."
|
|
61
|
+
},
|
|
62
|
+
"do_not": {
|
|
63
|
+
"type": "array",
|
|
64
|
+
"items": {
|
|
65
|
+
"type": "string"
|
|
66
|
+
},
|
|
67
|
+
"description": "handoff.do_not: near-mistakes past sessions made."
|
|
68
|
+
},
|
|
69
|
+
"files": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"description": "state.artifacts: the files the job has produced so far."
|
|
72
|
+
},
|
|
73
|
+
"open_questions": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"items": {
|
|
76
|
+
"type": "string"
|
|
77
|
+
},
|
|
78
|
+
"description": "With result `escalate`: the questions the orchestrator must put to the user before any unit runs."
|
|
79
|
+
},
|
|
80
|
+
"reason": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"description": "With result `escalate`, `success` or `error`: one sentence saying why."
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"required": [
|
|
86
|
+
"result"
|
|
87
|
+
],
|
|
88
|
+
"additionalProperties": true,
|
|
89
|
+
"title": "shiftwork_clock_inDictOutput"
|
|
90
|
+
},
|
|
91
|
+
"annotations": {
|
|
92
|
+
"readOnlyHint": false,
|
|
93
|
+
"destructiveHint": false,
|
|
94
|
+
"idempotentHint": false,
|
|
95
|
+
"openWorldHint": false
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shiftwork_clock_out",
|
|
3
3
|
"title": "Shift work: clock out",
|
|
4
|
-
"description": "Shift-work clock-out: record a finished
|
|
4
|
+
"description": "Shift-work clock-out: record that a unit finished — set its status, advance plan.cursor, merge `handoff_patch` into handoff, push `history_entry` onto the 5-entry history ring, and append one accounting line to <checkpoint>.log.jsonl. Call it once per unit after its agent returns: shiftwork_clock_in briefs, this tool closes, and shiftwork_status reads what both wrote. The whole mutated document is validated against the checkpoint schema BEFORE one atomic write, so a failure writes nothing and answers {\"result\": \"error\", \"reason\": ...}; nothing is ever deleted from the checkpoint. `unit_id` must be plan.cursor — which needs no brief and clocks out with briefed=false — or a unit clock_in briefed since its own last clock-out; any other id is refused with `unit X is not the cursor unit Y`. `handoff_patch` and `history_entry` are both required arguments: pass `{}` to leave handoff unchanged, and give history_entry at least `unit` and `outcome`. plan.cursor then moves to the head of the ready batch recomputed on the new document — plan.units order over the remaining non-terminal units when the graph cannot batch, `unit_id` when none remain. The accounting line carries unit, role, status, ts and `briefed` (written by the runtime, never taken from you: true only when a brief was issued since this unit's LAST clock-out) plus your `accounting` fields when given. When job.roles names this unit's role, `accounting.model` must be on that role's list, spelled exactly, or nothing is written — see the `model` property.",
|
|
5
5
|
"surfaces": [
|
|
6
6
|
"mcp"
|
|
7
7
|
],
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"properties": {
|
|
10
10
|
"checkpoint": {
|
|
11
11
|
"title": "Checkpoint",
|
|
12
|
-
"type": "string"
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "Path to the shift-work checkpoint JSON file (by convention .shiftwork/checkpoint.json in the repo the job works on), absolute or relative to the server's working directory. The same file shiftwork_plan, shiftwork_clock_in and shiftwork_clock_out take; it must validate against assets/schemas/shiftwork-checkpoint.json."
|
|
13
14
|
},
|
|
14
15
|
"unit_id": {
|
|
15
16
|
"title": "Unit Id",
|
|
@@ -73,14 +74,17 @@
|
|
|
73
74
|
"properties": {
|
|
74
75
|
"unit": {
|
|
75
76
|
"type": "string",
|
|
76
|
-
"minLength": 1
|
|
77
|
+
"minLength": 1,
|
|
78
|
+
"description": "The unit this entry is about — normally the `unit_id` being clocked out."
|
|
77
79
|
},
|
|
78
80
|
"outcome": {
|
|
79
81
|
"type": "string",
|
|
80
|
-
"minLength": 1
|
|
82
|
+
"minLength": 1,
|
|
83
|
+
"description": "What happened, in a few words: done, blocked on X, dropped because Y."
|
|
81
84
|
},
|
|
82
85
|
"notes": {
|
|
83
|
-
"type": "string"
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "Optional free text for the next session reading the ring."
|
|
84
88
|
}
|
|
85
89
|
}
|
|
86
90
|
},
|
|
@@ -130,7 +134,8 @@
|
|
|
130
134
|
}
|
|
131
135
|
],
|
|
132
136
|
"default": null,
|
|
133
|
-
"title": "Accounting"
|
|
137
|
+
"title": "Accounting",
|
|
138
|
+
"description": "Per-unit cost line, or null (the default) to log a line with no cost figures at all. A non-null line must carry `tokens` and `duration_ms`; `model` is required when job.roles names this unit's role. The object shape is described below."
|
|
134
139
|
}
|
|
135
140
|
},
|
|
136
141
|
"required": [
|
|
@@ -146,6 +151,35 @@
|
|
|
146
151
|
},
|
|
147
152
|
"output_schema": {
|
|
148
153
|
"type": "object",
|
|
154
|
+
"properties": {
|
|
155
|
+
"result": {
|
|
156
|
+
"type": "string",
|
|
157
|
+
"description": "`ok` when the checkpoint was rewritten; `error` with `reason` when the call was refused and nothing was written."
|
|
158
|
+
},
|
|
159
|
+
"unit": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"description": "The unit clocked out."
|
|
162
|
+
},
|
|
163
|
+
"status": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"description": "The status it now holds."
|
|
166
|
+
},
|
|
167
|
+
"cursor": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"description": "plan.cursor after the move."
|
|
170
|
+
},
|
|
171
|
+
"log": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"description": "Path of the <checkpoint>.log.jsonl the accounting line was appended to."
|
|
174
|
+
},
|
|
175
|
+
"reason": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"description": "With result `error`: one sentence saying why the call was refused."
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"required": [
|
|
181
|
+
"result"
|
|
182
|
+
],
|
|
149
183
|
"additionalProperties": true,
|
|
150
184
|
"title": "shiftwork_clock_outDictOutput"
|
|
151
185
|
},
|